diff --git a/Examples/Psi2STo2K2PiGam/AbsPsi2STo2K2PiGamLh.cc b/Examples/Psi2STo2K2PiGam/AbsPsi2STo2K2PiGamLh.cc
index e1f64c7fb546e00ec093bb1ef39327f125af842b..fa341074a75d3399cbf11cf18bccdc356d4487fa 100644
--- a/Examples/Psi2STo2K2PiGam/AbsPsi2STo2K2PiGamLh.cc
+++ b/Examples/Psi2STo2K2PiGam/AbsPsi2STo2K2PiGamLh.cc
@@ -1170,7 +1170,7 @@ complex<double>  AbsPsi2STo2K2PiGamLh::chiToPi0PiToKstarKAmp(Psi2STo2K2PiGamData
 }
 
 
-complex<double>  AbsPsi2STo2K2PiGamLh::chiToPi2Pi0ToKstarKAmp(Psi2STo2K2PiGamData::Psi2STo2K2PiGamEvtData* theData, std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess >& ChiToPi_2_Prod, std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess >& Pi_2_Dec, double Pi_2_Mass, double Pi_2_Width, double Kstar_Mass, double Kstar_Width){
+complex<double>  AbsPsi2STo2K2PiGamLh::chiToPi2Pi0ToKstarKAmp(Psi2STo2K2PiGamData::Psi2STo2K2PiGamEvtData* theData, std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess >& ChiToPi_2_Prod, std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess >& Pi_2_Dec, double Pi_2_Mass, double Pi_2_Width, double Kstar_Mass, double Kstar_Width, Spin Kstar_Spin){
 
   Vector4<double> KKPi0(theData->KKPi0_HeliChic0_4V.E(), theData->KKPi0_HeliChic0_4V.Px(), 
 		     theData->KKPi0_HeliChic0_4V.Py(), theData->KKPi0_HeliChic0_4V.Pz());
@@ -1194,6 +1194,8 @@ complex<double>  AbsPsi2STo2K2PiGamLh::chiToPi2Pi0ToKstarKAmp(Psi2STo2K2PiGamDat
   
   std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess >::iterator it;
   std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess >::iterator itDec;
+  
+  int L_KstarDec=int(Kstar_Spin);
 
   for ( it=ChiToPi_2_Prod.begin(); it!=ChiToPi_2_Prod.end(); ++it){
 
@@ -1210,18 +1212,22 @@ complex<double>  AbsPsi2STo2K2PiGamLh::chiToPi2Pi0ToKstarKAmp(Psi2STo2K2PiGamDat
       double thePhiDec=itDec->second.second;
       complex<double> expiphiDec(cos(thePhiDec), sin(thePhiDec));
       complex<double> tmpDec(0.,0.);
-      for (Spin lamKstar=-1; lamKstar<=1; ++lamKstar){
-	tmpDec+=sqrt(2.*theDecState->L+1)*Clebsch(theDecState->L, 0., theDecState->S, lamKstar, theDecState->J, lamKstar)*Clebsch(1,lamKstar, 0, 0, theDecState->S, lamKstar)*sqrt(3.)
+
+      for (Spin lamKstar=-Kstar_Spin; lamKstar<=Kstar_Spin; ++lamKstar){
+      
+	if( fabs(lamKstar)>theDecState->J || fabs(lamKstar)>theDecState->S) continue;
+	
+	tmpDec+=sqrt(2.*theDecState->L+1)*Clebsch(theDecState->L, 0., theDecState->S, lamKstar, theDecState->J, lamKstar)*Clebsch(Kstar_Spin,lamKstar, 0, 0, theDecState->S, lamKstar)*sqrt(2.*L_KstarDec+1.)
 	  *(( BreitWigner(KKPi0, Pi_2_Mass, Pi_2_Width)
-	      *( BreitWignerBlattW(Kstarp_pi0, 0.493677, 0.1349766, Kstar_Mass, Kstar_Width,1)
-		 *theData->DfPi2ToKstarpK_pi0[theDecState->J][lamPi2][lamKstar]*theData->DfKst1pToKpPi0ViaKKPi0[1][lamKstar][0]
-		 +BreitWignerBlattW(Kstarm_pi0, 0.493677, 0.1349766, Kstar_Mass, Kstar_Width,1)
-		 *theData->DfPi2ToKstarmK_pi0[theDecState->J][lamPi2][lamKstar]*theData->DfKst1mToKmPi0ViaKKPi0[1][lamKstar][0]))
+	      *( BreitWignerBlattW(Kstarp_pi0, 0.493677, 0.1349766, Kstar_Mass, Kstar_Width,L_KstarDec)
+		 *theData->DfPi2ToKstarpK_pi0[theDecState->J][lamPi2][lamKstar]*theData->DfKst1pToKpPi0ViaKKPi0[Kstar_Spin][lamKstar][0]
+		 +BreitWignerBlattW(Kstarm_pi0, 0.493677, 0.1349766, Kstar_Mass, Kstar_Width,L_KstarDec)
+		 *theData->DfPi2ToKstarmK_pi0[theDecState->J][lamPi2][lamKstar]*theData->DfKst1mToKmPi0ViaKKPi0[Kstar_Spin][lamKstar][0]))
 	    +( BreitWigner(KKPi1, Pi_2_Mass, Pi_2_Width)
-	       *( BreitWignerBlattW(Kstarp_pi1, 0.493677, 0.1349766, Kstar_Mass, Kstar_Width,1)
-		  *theData->DfPi2ToKstarpK_pi1[theDecState->J][lamPi2][lamKstar]*theData->DfKst1pToKpPi1ViaKKPi1[1][lamKstar][0] 
-		  +BreitWignerBlattW(Kstarm_pi1, 0.493677, 0.1349766, Kstar_Mass, Kstar_Width,1)
-		  *theData->DfPi2ToKstarmK_pi1[theDecState->J][lamPi2][lamKstar]*theData->DfKst1mToKmPi1ViaKKPi1[1][lamKstar][0] ))
+	       *( BreitWignerBlattW(Kstarp_pi1, 0.493677, 0.1349766, Kstar_Mass, Kstar_Width,L_KstarDec)
+		  *theData->DfPi2ToKstarpK_pi1[theDecState->J][lamPi2][lamKstar]*theData->DfKst1pToKpPi1ViaKKPi1[Kstar_Spin][lamKstar][0] 
+		  +BreitWignerBlattW(Kstarm_pi1, 0.493677, 0.1349766, Kstar_Mass, Kstar_Width,L_KstarDec)
+		  *theData->DfPi2ToKstarmK_pi1[theDecState->J][lamPi2][lamKstar]*theData->DfKst1mToKmPi1ViaKKPi1[Kstar_Spin][lamKstar][0] ))
 	    );
 
       }
diff --git a/Examples/Psi2STo2K2PiGam/AbsPsi2STo2K2PiGamLh.hh b/Examples/Psi2STo2K2PiGam/AbsPsi2STo2K2PiGamLh.hh
index 0f82074c97922ebdb174b45ebe6380947af05820..9464615cffe2c395351543e7b54c56123f3de4b1 100644
--- a/Examples/Psi2STo2K2PiGam/AbsPsi2STo2K2PiGamLh.hh
+++ b/Examples/Psi2STo2K2PiGam/AbsPsi2STo2K2PiGamLh.hh
@@ -118,7 +118,7 @@ protected:
 
   virtual complex<double>  chiToPi0PiToKstarKAmp(Psi2STo2K2PiGamData::Psi2STo2K2PiGamEvtData* theData, std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess >& ChiToPi_0_Prod, double Pi_0_Mass, double Pi_0_Width, double Kstar_Mass, double Kstar_Width);
 
-  virtual complex<double> chiToPi2Pi0ToKstarKAmp(Psi2STo2K2PiGamData::Psi2STo2K2PiGamEvtData* theData, std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess >& ChiToPi_2_Prod, std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess >& Pi_2_Dec, double Pi_2_Mass, double Pi_2_Width, double Kstar_Mass, double Kstar_Width);
+  virtual complex<double> chiToPi2Pi0ToKstarKAmp(Psi2STo2K2PiGamData::Psi2STo2K2PiGamEvtData* theData, std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess >& ChiToPi_2_Prod, std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess >& Pi_2_Dec, double Pi_2_Mass, double Pi_2_Width, double Kstar_Mass, double Kstar_Width, Spin Kstar_Spin=1);
 
   virtual complex<double> chiToPi0Pi0Tof980kkAmp(Psi2STo2K2PiGamData::Psi2STo2K2PiGamEvtData* theData, std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess >& ChiToPi0Pi0Amp, double f980_Mass, double f980_gKK, double f980_gPiPi, double Pi_0_Mass, double Pi_0_Width);
 
diff --git a/Examples/Psi2STo2K2PiGam/FitParams2K2PiGam.cc b/Examples/Psi2STo2K2PiGam/FitParams2K2PiGam.cc
index d859ace82991507bb8d1542b8f7f426877dab178..dbe295df688064f41dbb59fa500cf09a9bb810db 100644
--- a/Examples/Psi2STo2K2PiGam/FitParams2K2PiGam.cc
+++ b/Examples/Psi2STo2K2PiGam/FitParams2K2PiGam.cc
@@ -80,6 +80,7 @@ FitParams2K2PiGam::FitParams2K2PiGam()
   _jpclsMap[paramEnum2K2PiGam::ChiToPi_2_2285Pi]=theStates.ChiToPi_2PiStates();
   _jpclsMap[paramEnum2K2PiGam::Pi_2_2285Tof1700Pi]=theStates.Pi_2Tof0PiStates();
   _jpclsMap[paramEnum2K2PiGam::Pi_2_2285ToK892KPi]=theStates.Pi_2ToKst1KStates();
+  _jpclsMap[paramEnum2K2PiGam::Pi_2_2285ToK_2_1430K]=theStates.Pi_2ToKst2KStates();
   _jpclsMap[paramEnum2K2PiGam::ChiToK_2_1770K]=theStates.ChiToK2mK0mStates();
   _jpclsMap[paramEnum2K2PiGam::K_2_1770ToK_2_1430Pi]=theStates.K2mToK2pPiStates();
   _jpclsMap[paramEnum2K2PiGam::ChiToK_0_1430KPi]=theStates.ChiTo2K_0_States();
@@ -173,6 +174,7 @@ std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collecti
   else if (index==paramEnum2K2PiGam::ChiToPi_2_2285Pi) return params.ChiToPi_2_2285Pi; 
   else if (index==paramEnum2K2PiGam::Pi_2_2285Tof1700Pi) return params.Pi_2_2285Tof1700Pi;
   else if (index==paramEnum2K2PiGam::Pi_2_2285ToK892KPi) return params.Pi_2_2285ToK892KPi;
+  else if (index==paramEnum2K2PiGam::Pi_2_2285ToK_2_1430K) return params.Pi_2_2285ToK_2_1430K;
   else if (index==paramEnum2K2PiGam::ChiToK_2_1770K) return params.ChiToK_2_1770K;
   else if (index==paramEnum2K2PiGam::K_2_1770ToK_2_1430Pi) return params.K_2_1770ToK_2_1430Pi;
   else if (index==paramEnum2K2PiGam::ChiToK_0_1430KPi) return params.ChiToK_0_1430KPi;
diff --git a/Examples/Psi2STo2K2PiGam/FitParams2K2PiGam.hh b/Examples/Psi2STo2K2PiGam/FitParams2K2PiGam.hh
index 801506bfef1d4093b8258a55644163f42bc473a5..70d6076f7d9bc84865ebc8bae829ba6be5f7c189 100644
--- a/Examples/Psi2STo2K2PiGam/FitParams2K2PiGam.hh
+++ b/Examples/Psi2STo2K2PiGam/FitParams2K2PiGam.hh
@@ -93,6 +93,7 @@ struct param2K2PiGam
   std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess > ChiToPi_2_2285Pi;
   std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess > Pi_2_2285Tof1700Pi;
   std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess > Pi_2_2285ToK892KPi;
+  std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess > Pi_2_2285ToK_2_1430K;
   std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess > ChiToK_2_1770K;
   std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess > K_2_1770ToK_2_1430Pi;
   std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess > ChiToK_0_1430KPi;
@@ -148,7 +149,8 @@ struct paramEnum2K2PiGam{
 	f980_pif_2_1270_k, f980_kf_2_1270_pi, f980_pif_2_1430_k, f980_kf_2_1430_pi, f980_pif_2_1525_k, f980_kf_2_1525_pi, f980_pif_2_1950_k, f980_kf_2_1950_pi,
 	f1500_pif_2_1525_k, f1500_kf_2_1525_pi, f1710_pif_2_1430_k, f1710_kf_2_1430_pi, f1710_pif_2_1950_k, f1710_kf_2_1950_pi, 
 	ChiToPi_2_1670Pi, Pi_2_1670Tof_2_1270Pi, Pi_2_1670ToK892K, ChiToPi1800Pi0Tof980, ChiToPi1800Pi0Tof1370, ChiToPi1800Pi0ToKappa, ChiToPi1800Pi0ToK892K, 
-	ChiToPi_2_2285Pi,Pi_2_2285Tof1700Pi, Pi_2_2285ToK892KPi, ChiToK_2_1770K, K_2_1770ToK_2_1430Pi, ChiToK_0_1430KPi, nAmps,         
+	ChiToPi_2_2285Pi,Pi_2_2285Tof1700Pi, Pi_2_2285ToK892KPi, Pi_2_2285ToK_2_1430K, 
+	ChiToK_2_1770K, K_2_1770ToK_2_1430Pi, ChiToK_0_1430KPi, nAmps,         
 
 	K892=nAmps,Kappa, K_0_1430, K_1_1400,  K_1_1410, K_2_1430, K_1_1270,K_1_1650, 
 	f1500, f1710, f2200, sigma, f1360, f1370, K_0_2400, K_1_2400, K_0_1950, K_1_1680, K_1_2300, K_0_1460, K_0_1830, 
@@ -173,7 +175,8 @@ struct paramEnum2K2PiGam{
 	"f980_pif_2_1270_k", "f980_kf_2_1270_pi","f980_pif_2_1430_k", "f980_kf_2_1430_pi","f980_pif_2_1525_k", "f980_kf_2_1525_pi", "f980_pif_2_1950_k", "f980_kf_2_1950_pi",  
 	"f1500_pif_2_1525_k", "f1500_kf_2_1525_pi", "f1710_pif_2_1430_k", "f1710_kf_2_1430_pi", "f1710_pif_2_1950_k", "f1710_kf_2_1950_pi",
 	"ChiToPi_2_1670Pi","Pi_2_1670Tof_2_1270Pi","Pi_2_1670ToK892K","ChiToPi1800Pi0Tof980","ChiToPi1800Pi0Tof1370","ChiToPi1800Pi0ToKappa","ChiToPi1800Pi0ToK892K",
-	"ChiToPi_2_2285Pi","Pi_2_2285Tof1700Pi","Pi_2_2285ToK892KPi","ChiToK_2_1770K","K_2_1770ToK_2_1430Pi","ChiToK_0_1430KPi",
+	"ChiToPi_2_2285Pi","Pi_2_2285Tof1700Pi","Pi_2_2285ToK892KPi","Pi_2_2285ToK_2_1430K", 
+	"ChiToK_2_1770K","K_2_1770ToK_2_1430Pi","ChiToK_0_1430KPi",
 
 	"K892", "Kappa", "K_0_1430", "K_1_1400", "K_1_1410", "K_2_1430", "K_1_1270", "K_1_1650", 
         "f1500", "f1710", "f2200", "sigma", "f1360", "f1370", "K_0_2400", "K_1_2400", "K_0_1950", "K_1_1680", "K_1_2300", "K_0_1460", "K_0_1830",
diff --git a/Examples/Psi2STo2K2PiGam/Hyp9Lh.cc b/Examples/Psi2STo2K2PiGam/Hyp9Lh.cc
index 109e29fcf1c5c2f12ff7957d07de00f1f95cd116..c6493fb9d9ea5537ee399727571c3e4199f69d15 100644
--- a/Examples/Psi2STo2K2PiGam/Hyp9Lh.cc
+++ b/Examples/Psi2STo2K2PiGam/Hyp9Lh.cc
@@ -17,6 +17,7 @@ Hyp9Lh::Hyp9Lh(boost::shared_ptr<const Psi2STo2K2PiGamEvtList> theEvtList, const
   ,_Pi1800Pi0ToK892KHyp9(true)
   ,_Pi_2_2285Tof1710PiHyp9(true)
   ,_Pi_2_2285ToK892KHyp9(true)
+  ,_Pi_2_2285ToK_2_1430KHyp9(true)
   ,_f980f_2_2300Hyp9(true)
   ,_f_2_2300sigmaHyp9(true)
   ,_K_2_1770ToK_2_1430PiHyp9(true)
@@ -36,6 +37,7 @@ Hyp9Lh::Hyp9Lh( boost::shared_ptr<AbsPsi2STo2K2PiGamLh> theLhPtr, const std::map
   ,_Pi1800Pi0ToK892KHyp9(true)
   ,_Pi_2_2285Tof1710PiHyp9(true)
   ,_Pi_2_2285ToK892KHyp9(true)
+  ,_Pi_2_2285ToK_2_1430KHyp9(true)
   ,_f980f_2_2300Hyp9(true)
   ,_f_2_2300sigmaHyp9(true)
   ,_K_2_1770ToK_2_1430PiHyp9(true)
@@ -125,7 +127,7 @@ complex<double> Hyp9Lh::chi0DecAmps(const param2K2PiGam& theParamVal, Psi2STo2K2
   }
 
 
-  if (_Pi_2_2285Tof1710PiHyp9 || _Pi_2_2285ToK892KHyp9){
+  if (_Pi_2_2285Tof1710PiHyp9 || _Pi_2_2285ToK892KHyp9 || _Pi_2_2285ToK_2_1430KHyp9){
     double Pi_2_2285Mass=theParamVal.BwPi_2_2285.first;
     double Pi_2_2285Width=theParamVal.BwPi_2_2285.second;
 std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess > ChiToPi_2_2285Pi=theParamVal.ChiToPi_2_2285Pi;
@@ -145,6 +147,15 @@ std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collecti
 
     result+=chiToPi2Pi0ToKstarKAmp(theData, ChiToPi_2_2285Pi, Pi_2_2285ToK892KPi, Pi_2_2285Mass, Pi_2_2285Width, K892Mass, K892Width);
     }
+
+
+    if(_Pi_2_2285ToK_2_1430KHyp9){
+    std::map< boost::shared_ptr<const JPCLS>, pair<double, double>, pawian::Collection::SharedPtrLess > Pi_2_2285ToK_2_1430K=theParamVal.Pi_2_2285ToK_2_1430K;
+    double K_2_1430Mass=theParamVal.BwK_2_1430.first;
+    double K_2_1430Width=theParamVal.BwK_2_1430.second;
+
+    result+=chiToPi2Pi0ToKstarKAmp(theData, ChiToPi_2_2285Pi, Pi_2_2285ToK_2_1430K, Pi_2_2285Mass, Pi_2_2285Width, K_2_1430Mass, K_2_1430Width,2 );
+    }
   }
 
   if (_f980f_2_2300Hyp9 || _f_2_2300sigmaHyp9){
@@ -408,6 +419,19 @@ void Hyp9Lh::setUp(const std::map<const std::string, bool>& hypMap){
     exit(0);
   }
 
+  iter= hypMap.find("Pi_2_2285ToK_2_1430KHyp9");
+  
+  if (iter !=hypMap.end()){
+    _Pi_2_2285ToK_2_1430KHyp9= iter->second;
+    Info<< "hypothesis " << iter->first << "\t" << _Pi_2_2285ToK_2_1430KHyp9 <<endmsg;
+    _hypMap[iter->first]= iter->second;
+  }
+  else{
+    Alert << "Pi_2_2285ToK_2_1430KHyp9 not set!!!" <<endmsg;
+    exit(0);
+  }
+
+
 
   iter= hypMap.find("f980f_2_2300Hyp9");
   
@@ -488,7 +512,7 @@ void Hyp9Lh::setUp(const std::map<const std::string, bool>& hypMap){
   }
 
 
-  if (_Pi_2_2285Tof1710PiHyp9 || _Pi_2_2285ToK892KHyp9){
+  if (_Pi_2_2285Tof1710PiHyp9 || _Pi_2_2285ToK892KHyp9 || _Pi_2_2285ToK_2_1430KHyp9){
     _ampVec.push_back(paramEnum2K2PiGam::ChiToPi_2_2285Pi);
     _massVec.push_back(paramEnum2K2PiGam::Pi_2_2285);
 
@@ -499,6 +523,11 @@ void Hyp9Lh::setUp(const std::map<const std::string, bool>& hypMap){
     if (_Pi_2_2285ToK892KHyp9){
       _ampVec.push_back(paramEnum2K2PiGam::Pi_2_2285ToK892KPi);
     }
+
+    if(_Pi_2_2285ToK_2_1430KHyp9){
+      _ampVec.push_back(paramEnum2K2PiGam::Pi_2_2285ToK_2_1430K);
+      if(!_K2_1430_K2_1430Hyp && !_K0_1430_K2_1430Hyp) _massVec.push_back(paramEnum2K2PiGam::K_2_1430);
+    }
   }
 
   if (_f980f_2_2300Hyp9 || _f_2_2300sigmaHyp9){
diff --git a/Examples/Psi2STo2K2PiGam/Hyp9Lh.hh b/Examples/Psi2STo2K2PiGam/Hyp9Lh.hh
index 94358e5ce9560139943d757636b8febdd62081fc..e79b1cca3f447147c9c401b28fc82200562d0224 100644
--- a/Examples/Psi2STo2K2PiGam/Hyp9Lh.hh
+++ b/Examples/Psi2STo2K2PiGam/Hyp9Lh.hh
@@ -58,6 +58,7 @@ protected:
   bool _Pi1800Pi0ToK892KHyp9;
   bool _Pi_2_2285Tof1710PiHyp9;
   bool _Pi_2_2285ToK892KHyp9;
+  bool _Pi_2_2285ToK_2_1430KHyp9;
   bool _f980f_2_2300Hyp9;
   bool _f_2_2300sigmaHyp9;
   bool _K_2_1770ToK_2_1430PiHyp9;
diff --git a/Examples/Psi2STo2K2PiGam/Jamfile b/Examples/Psi2STo2K2PiGam/Jamfile
index e0e81a396caa66ff5e0d08664e0829b2c0ca3899..f0a330b8a7290fd63dfb68f412e826f18d5e4969 100644
--- a/Examples/Psi2STo2K2PiGam/Jamfile
+++ b/Examples/Psi2STo2K2PiGam/Jamfile
@@ -13,3 +13,5 @@ lib Psi2STo2K2PiGam :
 
 exe ParserTestApp : ParserTestApp.cc Psi2STo2K2PiGam : ;
 exe Mpsi2STo2K2PiGamTestApp : Mpsi2STo2K2PiGamTestApp.cc Psi2STo2K2PiGam : ;
+exe qaMixedSampleApp : qaMixedSampleApp.cc Psi2STo2K2PiGam : ;
+exe qaMixedSampleCacheApp : qaMixedSampleCacheApp.cc Psi2STo2K2PiGam : ;
diff --git a/Examples/Psi2STo2K2PiGam/Mpsi2STo2K2PiGamTestApp.cc b/Examples/Psi2STo2K2PiGam/Mpsi2STo2K2PiGamTestApp.cc
index 56d321199f72dca5b1626f5d76719f2a3273fd7f..9100b8bacdcd1812d9e4952443959a8cd8fcd3fe 100644
--- a/Examples/Psi2STo2K2PiGam/Mpsi2STo2K2PiGamTestApp.cc
+++ b/Examples/Psi2STo2K2PiGam/Mpsi2STo2K2PiGamTestApp.cc
@@ -184,6 +184,7 @@ int main(int __argc,char *__argv[]){
   hypMap["Pi_2_2285Tof1710PiHyp9"]=true;
   hypMap["Pi_2_2285ToK892KHyp9"]=true;
   hypMap["Pi1800Pi0ToK892KHyp9"]=true;
+  hypMap["Pi_2_2285ToK_2_1430KHyp9"]=true;
   hypMap["f980f_2_2300Hyp9"]=true;
   hypMap["f_2_2300sigmaHyp9"]=true;
   hypMap["K_2_1770ToK_2_1430PiHyp9"]=true;
diff --git a/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamEvtList.cc b/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamEvtList.cc
index 36247168e4f3493b17e6e5da23dbccbb00169026..267c13d4f0ee16d52ac0eb0259c9faff48db4481 100644
--- a/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamEvtList.cc
+++ b/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamEvtList.cc
@@ -254,25 +254,23 @@ Psi2STo2K2PiGamEvtData* Psi2STo2K2PiGamEvtList::fillEvtData(Event* anEvent, int
 
      // calculate and store WignerD functions for KKpi0->KK and KKpi1-> KK 
      Spin jpi2=2;
-     for (Spin M=-2; M<=2; M++){
        for (Spin lamf2=-2; lamf2<=2; lamf2++){
-       thePsi2STo2K2PiGamEvtData->DfPi2Tof2Pi0[jpi2][M][lamf2]=Wigner_D(KK_HeliKKPi0_4V.Phi(), KK_HeliKKPi0_4V.Theta(),0, jpi2,M,lamf2);
-       thePsi2STo2K2PiGamEvtData->DfPi2Tof2Pi1[jpi2][M][lamf2]=Wigner_D(KK_HeliKKPi1_4V.Phi(), KK_HeliKKPi1_4V.Theta(),0, jpi2,M,lamf2);
+       thePsi2STo2K2PiGamEvtData->DfPi2Tof2Pi0[jpi2][0][lamf2]=Wigner_D(KK_HeliKKPi0_4V.Phi(), KK_HeliKKPi0_4V.Theta(),0, jpi2,0,lamf2);
+       thePsi2STo2K2PiGamEvtData->DfPi2Tof2Pi1[jpi2][0][lamf2]=Wigner_D(KK_HeliKKPi1_4V.Phi(), KK_HeliKKPi1_4V.Theta(),0, jpi2,0,lamf2);
        }
-     }
+
 
 
      // calculate and store WignerD functions for KKpi0->KK and KKpi1-> KK 
      jpi2=2;
-     for (Spin M=-2; M<=2; M++){
-       for (Spin lamKstar=-1; lamKstar<=1; lamKstar++){
-	 thePsi2STo2K2PiGamEvtData->DfPi2ToKstarpK_pi0[jpi2][M][lamKstar]=Wigner_D(KpPi0_HeliKKPi0_4V.Phi(), KpPi0_HeliKKPi0_4V.Theta(),0, jpi2,M,lamKstar); 
-	 thePsi2STo2K2PiGamEvtData->DfPi2ToKstarpK_pi1[jpi2][M][lamKstar]=Wigner_D(KpPi1_HeliKKPi1_4V.Phi(), KpPi1_HeliKKPi1_4V.Theta(),0, jpi2,M,lamKstar);  
-	 thePsi2STo2K2PiGamEvtData->DfPi2ToKstarmK_pi0[jpi2][M][lamKstar]=Wigner_D(KmPi0_HeliKKPi0_4V.Phi(), KmPi0_HeliKKPi0_4V.Theta(),0, jpi2,M,lamKstar); 
-	 thePsi2STo2K2PiGamEvtData->DfPi2ToKstarmK_pi1[jpi2][M][lamKstar]=Wigner_D(KmPi1_HeliKKPi1_4V.Phi(), KmPi1_HeliKKPi1_4V.Theta(),0, jpi2,M,lamKstar); 
+       for (Spin lamKstar=-2; lamKstar<=2; lamKstar++){
+	 thePsi2STo2K2PiGamEvtData->DfPi2ToKstarpK_pi0[jpi2][0][lamKstar]=Wigner_D(KpPi0_HeliKKPi0_4V.Phi(), KpPi0_HeliKKPi0_4V.Theta(),0, jpi2,0,lamKstar); 
+	 thePsi2STo2K2PiGamEvtData->DfPi2ToKstarpK_pi1[jpi2][0][lamKstar]=Wigner_D(KpPi1_HeliKKPi1_4V.Phi(), KpPi1_HeliKKPi1_4V.Theta(),0, jpi2,0,lamKstar);  
+	 thePsi2STo2K2PiGamEvtData->DfPi2ToKstarmK_pi0[jpi2][0][lamKstar]=Wigner_D(KmPi0_HeliKKPi0_4V.Phi(), KmPi0_HeliKKPi0_4V.Theta(),0, jpi2,0,lamKstar); 
+	 thePsi2STo2K2PiGamEvtData->DfPi2ToKstarmK_pi1[jpi2][0][lamKstar]=Wigner_D(KmPi1_HeliKKPi1_4V.Phi(), KmPi1_HeliKKPi1_4V.Theta(),0, jpi2,0,lamKstar); 
 	 
       }
-     }
+
 
  // calculate and store WignerD functions for K*1+->K+ pi0, K*1+->K+ pi1+ cc Via K+ K- pi0
      for (Spin M=-1; M<=1; M++){
@@ -285,6 +283,20 @@ Psi2STo2K2PiGamEvtData* Psi2STo2K2PiGamEvtList::fillEvtData(Event* anEvent, int
 
        }
      }
+ 
+// calculate and store WignerD functions for K*2+->K+ pi0, K*2+->K+ pi1+ cc Via K+ K- pi0
+     for (Spin M=-2; M<=2; M++){
+       for (Spin lam2=-2; lam2<=2; lam2++){
+       thePsi2STo2K2PiGamEvtData->DfKst1pToKpPi0ViaKKPi0[2][M][lam2]=Wigner_D(Kp_HeliKpPi0_ViaKKPi0_4V.Phi(), Kp_HeliKpPi0_ViaKKPi0_4V.Theta(),0,2,M,lam2);
+       thePsi2STo2K2PiGamEvtData->DfKst1pToKpPi1ViaKKPi1[2][M][lam2]=Wigner_D(Kp_HeliKpPi1_ViaKKPi1_4V.Phi(),Kp_HeliKpPi1_ViaKKPi1_4V.Theta(),0,2,M,lam2);
+
+       thePsi2STo2K2PiGamEvtData->DfKst1mToKmPi0ViaKKPi0[2][M][lam2]=Wigner_D(Km_HeliKmPi0_ViaKKPi0_4V.Phi(),Km_HeliKmPi0_ViaKKPi0_4V.Theta(),0,2,M,lam2);
+       thePsi2STo2K2PiGamEvtData->DfKst1mToKmPi1ViaKKPi1[2][M][lam2]=Wigner_D(Km_HeliKmPi1_ViaKKPi1_4V.Phi(),Km_HeliKmPi1_ViaKKPi1_4V.Theta(),0,2,M,lam2);
+
+       }
+     }
+
+
 
      for (Spin lam1=-1; lam1<=1; lam1++){
        for (Spin lam2=-1; lam2<=1; lam2++){
diff --git a/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamHist.cc b/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamHist.cc
index 9727df675ed283fd29dc5800d5d9f2f4774c1bb6..8ed3a6b8d842cc86fa279706570a5de8e6bc0a5a 100644
--- a/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamHist.cc
+++ b/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamHist.cc
@@ -192,9 +192,10 @@ void Psi2STo2K2PiGamHist::initRootStuff(const std::string& fileName)
 
   initHistMap();
 
-  _dataTuple = new TNtuple("dataTuple","dataTuple","phiKKpipi:costhetaKKpipi:phiK1pi1pi2:costhetaK1pi1pi2:phiK2pi1pi2:costhetaK2pi1pi2:phiK1pi1:costhetaK1pi1:phiK1pi2:costhetaK1pi2:phiK2pi1:costhetaK2pi1:phiK2pi2:costhetaK2pi2:phipi1:costhetapi1:phipi2:costhetapi2:mk1pi1pi2:mk2pi1pi2:mk1pi1:mk1pi2:mk2pi1:mk2pi2:mpipi:costhetapipi:phipipi:costhetapiViapipi:phipiViapipi:weight");
+  _dataTuple = new TNtuple("dataTuple","dataTuple","phiKKpipi:costhetaKKpipi:phiK1pi1pi2:costhetaK1pi1pi2:phiK2pi1pi2:costhetaK2pi1pi2:phiK1pi1:costhetaK1pi1:phiK1pi2:costhetaK1pi2:phiK2pi1:costhetaK2pi1:phiK2pi2:costhetaK2pi2:phipi1:costhetapi1:phipi2:costhetapi2:mk1pi1pi2:mk2pi1pi2:mk1pi1:mk1pi2:mk2pi1:mk2pi2:mpipi:costhetapipiViaK1pipi:phipipiViaK1pipi:costhetapiViapipi:phipiViapipi:weight:datatype");
+
+  _mcTuple = new TNtuple("mcTuple","mcTuple","phiKKpipi:costhetaKKpipi:phiK1pi1pi2:costhetaK1pi1pi2:phiK2pi1pi2:costhetaK2pi1pi2:phiK1pi1:costhetaK1pi1:phiK1pi2:costhetaK1pi2:phiK2pi1:costhetaK2pi1:phiK2pi2:costhetaK2pi2:phipi1:costhetapi1:phipi2:costhetapi2:mk1pi1pi2:mk2pi1pi2:mk1pi1:mk1pi2:mk2pi1:mk2pi2:mpipi:costhetapipiViaK1pipi:phipipiViaK1pipi:costhetapiViapipi:phipiViapipi:weight:datatype");
 
-  _mcTuple = new TNtuple("mcTuple","mcTuple","phiKKpipi:costhetaKKpipi:phiK1pi1pi2:costhetaK1pi1pi2:phiK2pi1pi2:costhetaK2pi1pi2:phiK1pi1:costhetaK1pi1:phiK1pi2:costhetaK1pi2:phiK2pi1:costhetaK2pi1:phiK2pi2:costhetaK2pi2:phipi1:costhetapi1:phipi2:costhetapi2:mk1pi1pi2:mk2pi1pi2:mk1pi1:mk1pi2:mk2pi1:mk2pi2:mpipi:costhetapipi:phipipi:costhetapiViapipi:phipiViapipi:weight");
 
 }
 
@@ -298,6 +299,8 @@ void Psi2STo2K2PiGamHist::fillHistos(const std::string& theKey, const Psi2STo2K2
 
 void Psi2STo2K2PiGamHist::writeNTuple(TNtuple* theTuple, const Psi2STo2K2PiGamEvtData* theData, double weight)
 {
+  float datatype = 1.;  // 1 = real data, 2 = pwamc
+
   float Phichic0_HeliPsi2S      = theData->chic0_HeliPsi2S_4V.Phi();
   float CosThetachic0_HeliPsi2S = theData->chic0_HeliPsi2S_4V.CosTheta();
   float PhiK1pi1pi2             = theData->KpPiPi_HeliChic0_4V.Phi();
@@ -320,10 +323,10 @@ void Psi2STo2K2PiGamHist::writeNTuple(TNtuple* theTuple, const Psi2STo2K2PiGamEv
   float mK2pi1pi2               = theData->KmPiPi_HeliChic0_4V.M();
   float mK1pi1                  = theData->KpPi0_HeliChic0_4V.M();
   float mK1pi2                  = theData->KpPi1_HeliChic0_4V.M();
-  float MK2pi1                  = theData->KmPi0_HeliChic0_4V.M();
-  float MK2pi2                  = theData->KmPi1_HeliChic0_4V.M();
+  float mK2pi1                  = theData->KmPi0_HeliChic0_4V.M();
+  float mK2pi2                  = theData->KmPi1_HeliChic0_4V.M();
 
-  float Mpipi                   = theData->PiPi_HeliChic0_4V.M();
+  float mpipi                   = theData->PiPi_HeliChic0_4V.M();
   float CosThetaPiPiFromK1PiPi  = theData->PiPi_HeliKpPi0Pi0_4V.CosTheta();
   float PhiPiPiFromK1PiPi  = theData->PiPi_HeliKpPi0Pi0_4V.Phi();
 
@@ -356,23 +359,23 @@ void Psi2STo2K2PiGamHist::writeNTuple(TNtuple* theTuple, const Psi2STo2K2PiGamEv
   fourVectors[19] = mK2pi1pi2;
   fourVectors[20] = mK1pi1;
   fourVectors[21] = mK1pi2;
-  fourVectors[22] = MK2pi1;
-  fourVectors[23] = MK2pi2;
+  fourVectors[22] = mK2pi1;
+  fourVectors[23] = mK2pi2;
   
-  fourVectors[24] = Mpipi;
+  fourVectors[24] = mpipi;
   fourVectors[25] = CosThetaPiPiFromK1PiPi;
   fourVectors[26] = PhiPiPiFromK1PiPi;
   fourVectors[27] = CosThetaPiFromPiPi;
   fourVectors[28] = PhiPiFromPiPi;
 
   fourVectors[29] = evtweight;
+  fourVectors[30] = datatype;
   //  cout << evtweight << endl;
 
   theTuple->Fill(fourVectors);
 }
 
 
-
 void Psi2STo2K2PiGamHist::plotCosPsi(const std::string& theKey, const Psi2STo2K2PiGamEvtData* theData, double weight){ 
   std::string cosPsiString="cosPsi"+theKey;
   TH1F* theHisto=_hist1DMap[cosPsiString];
diff --git a/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamStates.cc b/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamStates.cc
index 07f93f547f4d0f3633e5d45a90fbde095f80975b..6b3117912349908abb4b51f5b23048358d29dc53 100644
--- a/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamStates.cc
+++ b/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamStates.cc
@@ -71,6 +71,9 @@ Psi2STo2K2PiGamStates::Psi2STo2K2PiGamStates() :
  //LS combinations for the pi_2 decay to K*1 K
   fillJPCLS(_pi2JPC, _kJPC, _Kst1JPC,_Pi_2ToKst1KJPCLS);
 
+ //LS combinations for the pi_2 decay to K*2 K 
+  fillJPCLS(_pi2JPC, _kJPC, _Kst2JPC,_Pi_2ToKst2KJPCLS);
+
  //LS combinations for the chi_c0 to pi0 pi0
   fillJPCLS(_chic0JPC, _pi0JPC, _pi0JPC, _ChiToPi0Pi0JPCLS);
 
@@ -87,6 +90,7 @@ Psi2STo2K2PiGamStates::Psi2STo2K2PiGamStates() :
   fillJPCLS(_K1400JPC, _f0JPC, _kJPC, _K1pTof0KJPCLS);
 
   fillJPCLS(_pi0JPC, _Kst1JPC, _pi0JPC, _Pi0pToKstKJPCLS);
+
 }
 
 Psi2STo2K2PiGamStates::~Psi2STo2K2PiGamStates()
@@ -221,6 +225,12 @@ void Psi2STo2K2PiGamStates::print(std::ostream& os) const
     os << "\n" << std::endl;
   }
 
+  os << "\n *** pi2:  LS combinations for the pi2 decay to K*2 K *** "<< std::endl;
+  for ( itJPCLS=_Pi_2ToKst2KJPCLS.begin(); itJPCLS!=_Pi_2ToKst2KJPCLS.end(); ++itJPCLS){
+    (*itJPCLS)->print(os);
+    os << "\n" << std::endl;
+  }
+
   os << "\n *** pi2:  LS combinations for the chi_c0 decay to pi0 pi0 *** "<< std::endl;
   for ( itJPCLS=_ChiToPi0Pi0JPCLS.begin(); itJPCLS!=_ChiToPi0Pi0JPCLS.end(); ++itJPCLS){
     (*itJPCLS)->print(os);
diff --git a/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamStates.hh b/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamStates.hh
index 3c1d6e47008763e1acdcc8190579160adaf36181..ef7cdee7bb048504830a6500d9544114a8c26210 100644
--- a/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamStates.hh
+++ b/Examples/Psi2STo2K2PiGam/Psi2STo2K2PiGamStates.hh
@@ -39,6 +39,7 @@ public:
   std::vector< boost::shared_ptr<const JPCLS> > ChiToPi_2PiStates() const {return _ChiToPi_2PiJPCLS;}
   std::vector< boost::shared_ptr<const JPCLS> > Pi_2Tof_2PiStates() const {return _Pi_2Tof_2PiJPCLS;}
   std::vector< boost::shared_ptr<const JPCLS> > Pi_2ToKst1KStates() const {return _Pi_2ToKst1KJPCLS;}
+  std::vector< boost::shared_ptr<const JPCLS> > Pi_2ToKst2KStates() const {return _Pi_2ToKst2KJPCLS;}
   std::vector< boost::shared_ptr<const JPCLS> > ChiToPi0Pi0States() const {return _ChiToPi0Pi0JPCLS;} 
   std::vector< boost::shared_ptr<const JPCLS> > Pi_2Tof0PiStates() const {return _Pi_2Tof0PiJPCLS;}
   std::vector< boost::shared_ptr<const JPCLS> > ChiToK2mK0mStates() const {return _ChiToK2mK0mJPCLS;}
@@ -80,6 +81,7 @@ private:
   std::vector< boost::shared_ptr<const JPCLS> > _ChiToPi_2PiJPCLS;
   std::vector< boost::shared_ptr<const JPCLS> > _Pi_2Tof_2PiJPCLS;
   std::vector< boost::shared_ptr<const JPCLS> > _Pi_2ToKst1KJPCLS;
+  std::vector< boost::shared_ptr<const JPCLS> > _Pi_2ToKst2KJPCLS;
   std::vector< boost::shared_ptr<const JPCLS> > _ChiToPi0Pi0JPCLS;
   std::vector< boost::shared_ptr<const JPCLS> >   _Pi_2Tof0PiJPCLS;
   std::vector< boost::shared_ptr<const JPCLS> > _ChiToK2mK0mJPCLS;
diff --git a/Examples/Psi2STo2K2PiGam/qaMixedSampleApp.cc b/Examples/Psi2STo2K2PiGam/qaMixedSampleApp.cc
new file mode 100644
index 0000000000000000000000000000000000000000..dadecd82984b36e90d387f95718aa2bc48a31a80
--- /dev/null
+++ b/Examples/Psi2STo2K2PiGam/qaMixedSampleApp.cc
@@ -0,0 +1,767 @@
+#include <vector>
+#include <map>
+#include <string.h>
+#include <math.h>
+#include <stdlib.h>
+#include "TFile.h"
+#include "TH1F.h"
+#include "TNtuple.h"
+#include "TMath.h"
+#include <iostream>
+#include "TCanvas.h"
+#include "TF1.h"
+
+TFile* fdata;
+TNtuple* ntdata;
+TFile* fpwamc;
+TNtuple* ntpwamc;
+
+TH1F* dataCosThetaKKpipi;
+TH1F* pwamcCosThetaKKpipi;
+TH1F* dataPhiKKpipi;
+TH1F* pwamcPhiKKpipi;
+TH1F* dataCosThetaKpipi;
+TH1F* pwamcCosThetaKpipi;
+TH1F* dataPhiKpipi;
+TH1F* pwamcPhiKpipi;
+TH1F* dataCosThetapipi;
+TH1F* pwamcCosThetapipi;
+TH1F* dataPhipipi;
+TH1F* pwamcPhipipi;
+TH1F* dataCosThetapi;
+TH1F* pwamcCosThetapi;
+TH1F* dataPhipi;
+TH1F* pwamcPhipi;
+TH1F* datainvMassKpipi;
+TH1F* pwamcinvMassKpipi;
+TH1F* datainvMasspipi;
+TH1F* pwamcinvMasspipi;
+
+TH1F* histofpull;
+
+Int_t evtNo = 0;
+float datacosThetaKKpipi;
+float dataphiKKpipi;
+float datacosThetaK1pi1pi2;
+float dataphiK1pi1pi2;
+float datacosThetapi1pi2;
+float dataphipi1pi2;
+float datacosThetapi1;
+float dataphipi1;
+float datainvmassK1pi1pi2;
+float datainvmasspi1pi2;
+
+float pwamccosThetaKKpipi;
+float pwamcphiKKpipi;
+float pwamccosThetaK1pi1pi2;
+float pwamcphiK1pi1pi2;
+float pwamccosThetapi1pi2;
+float pwamcphipi1pi2;
+float pwamccosThetapi1;
+float pwamcphipi1;
+float pwamcinvmassK1pi1pi2;
+float pwamcinvmasspi1pi2;
+
+float evtweight;
+
+std::vector<TH1F*> histVectData;
+std::vector<TH1F*> histVectPwaMc;
+
+Int_t numOfEntriesData;
+Int_t numOfEntriesPwaMc;
+
+TString type = "mc";
+bool drawFlag = true;
+bool output = false;
+bool longoutput = false;
+bool silent = false;
+TString method = "both";
+using namespace std;
+
+struct nextneighbours
+{ 
+  nextneighbours(  unsigned int theevtnumber1, unsigned int theevtnumber2, float thedistance, bool thedatatype){
+    evtnumber1 = theevtnumber1;
+    evtnumber2 = theevtnumber2;
+    distance = thedistance;
+    datatype = thedatatype;
+  }
+ 
+  virtual ~nextneighbours(){};
+
+  unsigned int evtnumber1;
+  unsigned int evtnumber2;
+  float distance;
+  bool datatype;
+};
+
+void fillHistograms();
+void drawHistograms();
+void chisq_method();
+void mixed_sample();
+float GetDistanceDataToData(int dataentry1, int dataentry2);
+float GetDistanceDataToPwaMc(int dataentry, int pwamcentry);
+float GetDistancePwaMcToPwaMc(int pwamcentry1, int pwamcentry2);
+bool Compare(const nextneighbours a, const nextneighbours b);
+
+/*
+void initNtData(){
+
+  if (0 != fdata){
+     delete fdata;
+    fdata=0;
+  }
+
+  TString fileData="./Psi2STo2K2PiGamPWA_data.root"; 
+  fdata = new TFile(fileData,"READ");
+  ntdata = (TNtuple*)fdata->Get("dataTuple");
+  ntdata->SetBranchAddress("costhetaKKpipi", &datacosThetaKKpipi);
+  ntdata->SetBranchAddress("phiKKpipi", &dataphiKKpipi);
+  ntdata->SetBranchAddress("costhetaK1pi1pi2", &datacosThetaK1pi1pi2);
+  ntdata->SetBranchAddress("phiK1pi1pi2", &dataphiK1pi1pi2);
+  ntdata->SetBranchAddress("costhetapipiViaK1pipi", &datacosThetapi1pi2);
+  ntdata->SetBranchAddress("phipipiViaK1pipi", &dataphipi1pi2);
+  ntdata->SetBranchAddress("costhetapiViapipi", &datacosThetapi1);
+  ntdata->SetBranchAddress("phipiViapipi", &dataphipi1);
+  ntdata->SetBranchAddress("mk1pi1pi2", &datainvmassK1pi1pi2);
+  ntdata->SetBranchAddress("mpipi", &datainvmasspi1pi2);
+}
+
+
+void initNtPwamc(){
+
+  if (0 != fpwamc){
+     delete fpwamc;
+    fpwamc=0;
+  }
+
+  TString filePwaMc="./Psi2STo2K2PiGamPWA_pwamc__FitParamHyp8_base_K0K2_newflatte__10000events.root";
+  fpwamc = new TFile(filePwaMc,"READ");
+  ntpwamc = (TNtuple*)fpwamc->Get("dataTuple");
+  ntpwamc->SetBranchAddress("costhetaKKpipi", &pwamccosThetaKKpipi);
+  ntpwamc->SetBranchAddress("phiKKpipi", &pwamcphiKKpipi);
+  ntpwamc->SetBranchAddress("costhetaK1pi1pi2", &pwamccosThetaK1pi1pi2);
+  ntpwamc->SetBranchAddress("phiK1pi1pi2", &pwamcphiK1pi1pi2);
+  ntpwamc->SetBranchAddress("costhetapipiViaK1pipi", &pwamccosThetapi1pi2);
+  ntpwamc->SetBranchAddress("phipipiViaK1pipi", &pwamcphipi1pi2);
+  ntpwamc->SetBranchAddress("costhetapiViapipi", &pwamccosThetapi1);
+  ntpwamc->SetBranchAddress("phipiViapipi", &pwamcphipi1);
+  ntpwamc->SetBranchAddress("mk1pi1pi2", &pwamcinvmassK1pi1pi2);
+  ntpwamc->SetBranchAddress("mpipi", &pwamcinvmasspi1pi2);
+}
+*/
+
+int main(){
+  
+  TString fileData="./Psi2STo2K2PiGamPWA_data.root"; 
+  //TString fileData="./Psi2STo2K2PiGamPWA_pwamc__FitParamHyp8_base_K0K2_newflatte__10000events.root";
+  TString filePwaMc="./Psi2STo2K2PiGamPWA_pwamc__FitParamHyp8_base_K0K2_newflatte__10000events.root"; 
+  TString option="mixedsample,pwamc,nodraw,silent";
+
+  cout << "--- ENTERING QAMIXEDSAMPLE" << endl;
+  //   gROOT->SetStyle("Plain");
+  //   gStyle->SetCanvasColor(0);
+  //   gStyle->SetStatBorderSize(0);
+  //   gStyle->SetPalette(1);
+  //   gStyle->SetOptStat(1111);
+  
+
+  if (option.Contains("pwamc")) {type = "pwamc";}
+  if (option.Contains("nodraw")) {drawFlag = false;}
+  if (option.Contains("chisq")) {method = "chisq";}
+  if (option.Contains("mixedsample")) {method = "mixedsample";}
+  if (option.Contains("output")) {output = true;}
+  if (option.Contains("longoutput")) {longoutput = true;}
+  if (option.Contains("silent")) {silent = true;}
+
+  fdata = new TFile(fileData,"READ");
+  ntdata = (TNtuple*)fdata->Get("dataTuple");
+
+  fpwamc = new TFile(filePwaMc,"READ");
+  if(type=="pwamc") {
+    cout << "Vergleich mit PWA-MC" << endl;
+    ntpwamc = (TNtuple*)fpwamc->Get("dataTuple");
+  }
+  else if(type=="mc") {
+    cout << "Vergleich mit MC" << endl;
+    ntpwamc = (TNtuple*)fdata->Get("mcTuple");
+  }
+  cout << endl;
+  
+  ntdata->SetBranchAddress("costhetaKKpipi", &datacosThetaKKpipi);
+  ntdata->SetBranchAddress("phiKKpipi", &dataphiKKpipi);
+  ntdata->SetBranchAddress("costhetaK1pi1pi2", &datacosThetaK1pi1pi2);
+  ntdata->SetBranchAddress("phiK1pi1pi2", &dataphiK1pi1pi2);
+  ntdata->SetBranchAddress("costhetapipiViaK1pipi", &datacosThetapi1pi2);
+  ntdata->SetBranchAddress("phipipiViaK1pipi", &dataphipi1pi2);
+  ntdata->SetBranchAddress("costhetapiViapipi", &datacosThetapi1);
+  ntdata->SetBranchAddress("phipiViapipi", &dataphipi1);
+  ntdata->SetBranchAddress("mk1pi1pi2", &datainvmassK1pi1pi2);
+  ntdata->SetBranchAddress("mpipi", &datainvmasspi1pi2);
+  
+
+  ntpwamc->SetBranchAddress("costhetaKKpipi", &pwamccosThetaKKpipi);
+  ntpwamc->SetBranchAddress("phiKKpipi", &pwamcphiKKpipi);
+  ntpwamc->SetBranchAddress("costhetaK1pi1pi2", &pwamccosThetaK1pi1pi2);
+  ntpwamc->SetBranchAddress("phiK1pi1pi2", &pwamcphiK1pi1pi2);
+  ntpwamc->SetBranchAddress("costhetapipiViaK1pipi", &pwamccosThetapi1pi2);
+  ntpwamc->SetBranchAddress("phipipiViaK1pipi", &pwamcphipi1pi2);
+  ntpwamc->SetBranchAddress("costhetapiViapipi", &pwamccosThetapi1);
+  ntpwamc->SetBranchAddress("phipiViapipi", &pwamcphipi1);
+  ntpwamc->SetBranchAddress("mk1pi1pi2", &pwamcinvmassK1pi1pi2);
+  ntpwamc->SetBranchAddress("mpipi", &pwamcinvmasspi1pi2);
+  ntpwamc->SetBranchAddress("weight",&evtweight);
+
+  numOfEntriesData = ntdata->GetEntries();
+  numOfEntriesPwaMc = ntpwamc->GetEntries();
+
+
+  dataCosThetaKKpipi = new TH1F("dataCosThetaKKpipi","dataCosThetaKKpipi",60,-1.,1.);
+  dataPhiKKpipi = new TH1F("dataPhiKKpipi","dataPhiKKpipi",60,-TMath::Pi(),TMath::Pi());
+  dataCosThetaKpipi = new TH1F("dataCosThetaKpipi","dataCosThetaKpipi",60,-1.,1.);
+  dataPhiKpipi = new TH1F("dataPhiKpipi","dataPhiKpipi",60,-TMath::Pi(),TMath::Pi());
+  dataCosThetapipi = new TH1F("dataCosThetapipi","dataCosThetapipi",60,-1.,1.);
+  dataPhipipi = new TH1F("dataPhipipi","dataPhipipi",60,-TMath::Pi(),TMath::Pi());
+  dataCosThetapi = new TH1F("dataCosThetapi","dataCosThetapi",60,0.,1.);
+  dataPhipi = new TH1F("dataPhipi","dataPhipi",60,0.,TMath::Pi());
+  datainvMassKpipi = new TH1F("datainvMassKpipi", "datainvMassKpipi", 60, 0.7, 3.0);
+  datainvMasspipi = new TH1F("datainvMasspipi", "datainvMasspipi", 60, 0.2, 2.8);
+   
+  pwamcCosThetaKKpipi = new TH1F("pwamcCosThetaKKpipi","pwamcCosThetaKKpipi",60,-1.,1.);
+  pwamcPhiKKpipi = new TH1F("pwamcPhiKKpipi","pwamcPhiKKpipi",60,-TMath::Pi(),TMath::Pi());
+  pwamcCosThetaKpipi = new TH1F("pwamcCosThetaKpipi","pwamcCosThetaKpipi",60,-1.,1.);
+  pwamcPhiKpipi = new TH1F("pwamcPhiKpipi","pwamcPhiKpipi",60,-TMath::Pi(),TMath::Pi());
+  pwamcCosThetapipi = new TH1F("pwamcCosThetapipi","pwamcCosThetapipi",60,-1.,1.);
+  pwamcPhipipi = new TH1F("pwamcPhipipi","pwamcPhipipi",60,-TMath::Pi(),TMath::Pi());
+  pwamcCosThetapi = new TH1F("pwamcCosThetapi","pwamcCosThetapi",60,0.,1.);
+  pwamcPhipi = new TH1F("pwamcPhipi","pwamcPhipi",60,0.,TMath::Pi());
+  pwamcinvMassKpipi = new TH1F("pwamcinvMassKpipi", "pwamcinvMassKpipi", 60, 0.7, 3.0);
+  pwamcinvMasspipi = new TH1F("pwamcinvMasspipi", "pwamcinvMasspipi", 60, 0.2, 2.8);
+  
+  histofpull = new TH1F("histofpull", "histofpull", 100, -10, 10);
+
+  histVectData.push_back(dataCosThetaKKpipi);
+  histVectData.push_back(dataPhiKKpipi);
+  histVectData.push_back(dataCosThetaKpipi);
+  histVectData.push_back(dataPhiKpipi);
+  histVectData.push_back(dataCosThetapipi);
+  histVectData.push_back(dataPhipipi);
+  histVectData.push_back(dataCosThetapi);
+  histVectData.push_back(dataPhipi);
+  histVectData.push_back(datainvMassKpipi);
+  histVectData.push_back(datainvMasspipi);
+
+  histVectPwaMc.push_back(pwamcCosThetaKKpipi);
+  histVectPwaMc.push_back(pwamcPhiKKpipi);
+  histVectPwaMc.push_back(pwamcCosThetaKpipi);
+  histVectPwaMc.push_back(pwamcPhiKpipi);
+  histVectPwaMc.push_back(pwamcCosThetapipi);
+  histVectPwaMc.push_back(pwamcPhipipi);
+  histVectPwaMc.push_back(pwamcCosThetapi);
+  histVectPwaMc.push_back(pwamcPhipi);
+  histVectPwaMc.push_back(pwamcinvMassKpipi);
+  histVectPwaMc.push_back(pwamcinvMasspipi);
+
+  fillHistograms();
+
+  if(drawFlag) {
+    cout << "--- Histogramme gezeichnet." << endl;
+    drawHistograms();
+    cout << endl;
+    cout << endl;
+    cout << "-----------------------------------------" << endl;
+  }
+  if(method=="chisq" || method=="both") {
+    cout << "--- CHISQ-METHOD-ERGEBNISSE:" << endl;
+    cout << endl;
+    chisq_method();
+    cout << "-----------------------------------------" << endl;
+    cout << endl;
+  }
+  if(method=="mixedsample" || method=="both") {
+    cout << "--- MIXED-SAMPLE-ERGEBNISSE:" << endl;
+    cout << endl;
+    mixed_sample();
+    cout << "-----------------------------------------" << endl;
+    cout << endl;
+  }
+  cout << "--- EXITING QAMIXEDSAMPLE" << endl;
+
+  return 1;
+
+}
+
+
+bool Compare(const nextneighbours a, const nextneighbours b) {
+  return a.distance < b.distance;
+}
+
+
+void mixed_sample() {
+
+  if(!silent) cout << "Entering mixed-sample method" << endl;
+  if(!silent) cout << endl;
+
+  unsigned int limit_runs_lower = 0;
+  unsigned int limit_runs_upper = 10;
+  cout << "Performing " << limit_runs_upper - limit_runs_lower << " runs." << endl;
+  std::vector<float> fpullvector;
+  unsigned int limit_data = 1000;   // numOfEntriesData;
+  unsigned int limit_pwamc = 1000;  // numOfEntriesPwaMc;
+  unsigned int numberofneighbours = 10;
+
+
+  for(unsigned int run = limit_runs_lower; run < limit_runs_upper; ++run) {
+
+    std::vector<struct nextneighbours> neighbourList;
+    cout << "Starting run " << run+1 << endl;
+
+    if(!silent) cout << endl;
+
+    float distance = 1E6;
+    float T=0;
+    // unsigned int limit_data = 2500;   // numOfEntriesData;
+    // unsigned int limit_pwamc = 5000;  // numOfEntriesPwaMc;
+    // unsigned int numberofneighbours = 10;
+    unsigned int pwaoffset = 100000;
+
+    if(!silent) cout << "--- Calculating distances DATA <-> DATA" << endl;
+    for(unsigned int i = 0; i<limit_data; i++) {
+      for(unsigned int j = i; j<limit_data; j++) {
+        //cout << run << ", loop 1:\t" << i << "\t" << j << endl;
+	if(i!=j) {
+	  distance = GetDistanceDataToData(i,j);
+          nextneighbours tmpNeighbours(i,j,distance,true);
+	  neighbourList.push_back(tmpNeighbours);
+	  if(neighbourList.size() % 500000 == 0) cout << neighbourList.size() << "th distance has been calculated." << endl;
+	}
+      }
+    }
+    
+    if(!silent)  cout << "--- Calculating distances DATA <-> PWAMC" << endl;
+    for(unsigned int i = 0; i<limit_data; i++) {
+      for(unsigned int j = 0; j<limit_pwamc; j++) {
+        //cout <<  run << ", loop 2:\t" << i << "\t" << j << endl;
+  	distance = GetDistanceDataToPwaMc(i,j+run*limit_pwamc);
+	nextneighbours tmpNeighbours(i,j+pwaoffset,distance,false);
+	neighbourList.push_back(tmpNeighbours);
+	// neighbourList.push_back((struct nextneighbours) {i,j+pwaoffset,distance,false});
+        if(neighbourList.size() % 500000 == 0) cout << neighbourList.size() << "th distance has been calculated." << endl;
+      }
+    }
+    
+    if(!silent) cout << "--- Calculating distances PWAMC <-> PWAMC" << endl;
+    for(unsigned int i = 0; i<limit_pwamc; i++) {
+      for(unsigned int j = i; j<limit_pwamc; j++) {
+        //cout << run << ", loop 3:\t" << i << "\t" << j << endl;
+	if(i!=j) {
+	  distance = GetDistancePwaMcToPwaMc(i+run*limit_pwamc,j+run*limit_pwamc);
+	  nextneighbours tmpNeighbours(i+pwaoffset,j+pwaoffset,distance,true);
+	  neighbourList.push_back(tmpNeighbours);
+	  // neighbourList.push_back((struct nextneighbours) {i+pwaoffset,j+pwaoffset,distance,true});
+	  if(neighbourList.size() % 500000 == 0) cout << neighbourList.size() << "th distance has been calculated." << endl;
+	}
+      }
+    }
+    
+    if(!silent) {
+      cout << endl;
+      cout << "How many distances have been calculated?\t" << neighbourList.size() << endl;
+      cout << endl;
+      cout << endl;
+    }
+    
+    if(longoutput) {
+      cout << "--- Distances:" << endl;
+      for(unsigned int i = 0; i < neighbourList.size(); i++) {
+	cout << neighbourList[i].evtnumber1 << "\t" << neighbourList[i].evtnumber2 << "\t" << neighbourList[i].distance << " \t\t" << neighbourList[i].datatype << endl;
+      }
+    }
+    if(!silent) cout << endl;
+    
+    std::sort(neighbourList.begin(),neighbourList.end(), Compare);
+    if(!silent) cout << "neighbourList has been sorted!" << endl;
+    if(!silent) cout << endl;
+    
+    if(longoutput) {
+      cout << "--- Distances after sorting:" << endl;
+      for(unsigned int i = 0; i < neighbourList.size(); i++) {
+	cout << neighbourList[i].evtnumber1 << "\t" << neighbourList[i].evtnumber2 << "\t" << neighbourList[i].distance << " \t\t" << neighbourList[i].datatype << endl;
+      }
+    }
+    if(!silent)  cout << endl;
+    
+    float numOfEntriesTotal = float(limit_data + limit_pwamc);
+    
+    unsigned int m;
+    
+    for(unsigned int i = 0; i < limit_data; i++) {
+      if(output) cout << "--- Checking neighbours of event " << i << endl;
+      m = 0;
+      for(unsigned int j = 0; j < neighbourList.size(); j++) 
+	{
+	  if (m >= numberofneighbours) continue;
+	  if(longoutput) cout << "Checking Event in neighbourList for data: " << j << endl;
+	  if(neighbourList[j].evtnumber1 == i || neighbourList[j].evtnumber2 == i) 
+	    {
+	      m++;
+	      if(longoutput) cout << j << "th event is the " << m << "th neighbour of event " << i;
+	      if(neighbourList[j].datatype==true) 
+		{
+		  if(longoutput) cout << " and belongs to the same sample! Adding +1 to T" << endl;
+		  T=T+1.;
+		}
+	      else 
+		{
+		  if(longoutput) cout << ", but doesn't belong to the same sample." << endl;
+		}
+	    }
+	  else 
+	    {
+	      if(longoutput) cout << "Not a neighbour of event " << i << endl;
+	    }
+	}
+      if(output) cout << "Event " << i << " has been analysed with " << m << " neighbours."  << endl;
+      if(output) cout << "T: " << T << endl;
+      if(output) cout << endl;
+    }
+
+    for(unsigned int i = 0; i < limit_pwamc; i++) {
+      if(output) cout << "--- Checking neighbours of event " << i+pwaoffset << endl;
+      m = 0;
+      
+      for(unsigned int j = 0; j < neighbourList.size(); j++) 
+	{
+	  if (m >= numberofneighbours) continue;
+	  if(longoutput) cout << "Checking Event in neighbourList for pwamc: " << j << endl;
+	  if(neighbourList[j].evtnumber1 == i+pwaoffset || neighbourList[j].evtnumber2 == i+pwaoffset) 
+	    {
+	      m++;
+	      if(longoutput) cout << j << "th event is the " << m << "th neighbour of event " << i+pwaoffset;
+	      if(neighbourList[j].datatype==true) 
+		{
+		  if(longoutput) cout << " and belongs to the same sample! Adding +1 to T" << endl;
+		  T=T+1;
+		}
+	      else 
+		{
+		  if(longoutput) cout << ", but doesn't belong to the same sample." << endl;
+		}
+	    }
+	  else 
+	    {
+	      if(longoutput) cout << "Not a neighbour of event " << i+pwaoffset << endl;
+	    }
+
+	}
+
+      if(output) cout << "Event " << i+pwaoffset << " has been analysed." << endl;
+      if(output) cout << "T: " << T << endl;
+      if(output) cout << endl;
+    }
+
+
+    if(!silent) {
+      cout << endl;
+      cout << "Number of Entries in DATA: " << numOfEntriesData << " events available (used " << limit_data << ")"<< endl;
+      cout << "Number of Entries in PWAMC: " << numOfEntriesPwaMc << " events available (used " << limit_pwamc << ")"<< endl;
+      cout << "Total Number of Entries: " << numOfEntriesTotal << endl;
+      cout << endl;
+    }
+    
+    numOfEntriesData = limit_data;
+    numOfEntriesPwaMc = limit_pwamc;
+    
+    float Tnorm = 0;
+    Tnorm = T/(float(numberofneighbours)*float(numOfEntriesTotal));
+    if(!silent) cout << "Tnorm: " << Tnorm << endl;
+    
+    
+    float mu = ((float(numOfEntriesData)*(float(numOfEntriesData)-1)) + (float(numOfEntriesPwaMc)*(float(numOfEntriesPwaMc)-1))) / (float(numOfEntriesTotal)*(float(numOfEntriesTotal)-1));
+    if(!silent) cout << "Erwartungswert mu: " << mu << endl;
+    
+    
+    float variancesquared = 
+      1 / (float(numOfEntriesTotal)*float(numberofneighbours)) 
+      * 
+      ( 
+       (float(numOfEntriesData)*float(numOfEntriesPwaMc))/(pow(float(numOfEntriesTotal), 2)) 
+       + 
+       4*(pow(float(numOfEntriesData), 2)*pow(float(numOfEntriesPwaMc), 2))/(pow(float(numOfEntriesTotal),4)) 
+       );
+
+    float fpull = (Tnorm-mu)/sqrt(variancesquared);
+    
+    if(!silent) {
+      cout << "Varianz: " << variancesquared << endl;
+      cout << endl; 
+      cout << "Differenz zwischen Resultat und Erwartungswert: " << Tnorm-mu << endl;
+    }
+    cout << "f_pull in run " << run+1 << ": " << fpull << endl;
+    cout << endl;
+    fpullvector.push_back(fpull);
+  }
+  
+  cout << "--------------------------" << endl;
+  cout << fpullvector.size() << endl;
+  for(unsigned int i = 0; i < fpullvector.size(); i++) {
+    cout << "Calculated fpull:\t" << fpullvector[i] << endl;
+    histofpull->Fill( fpullvector[i] );
+  }
+
+
+  TCanvas* chist1 = new TCanvas("chist1","chist1",1200,800);
+  histofpull->SetLineColor(2);
+  histofpull->Draw();
+
+  TF1* fit1 = new TF1("fit1","gaus(0)",-10.,10.);
+  fit1->SetParameters(5,histofpull->GetMean(),histofpull->GetRMS());
+  fit1->SetLineColor(4);
+  fit1->SetLineWidth(3);
+  histofpull->Fit("fit1","LMRS","",-10.,10.);
+  chist1->Print("histofpull.pdf");
+
+}
+
+
+
+
+float GetDistanceDataToData(int dataentry1, int dataentry2) {
+  //  cout << "Distance from Data Event " << dataentry1 << " to Data Event " << dataentry2 << endl;
+  
+  ntdata->GetEntry(dataentry1);
+ float datacosThetaKKpipi_1 = datacosThetaKKpipi;
+  float dataphiKKpipi_1 = dataphiKKpipi;
+  float datacosThetaK1pi1pi2_1 = datacosThetaK1pi1pi2;
+  float dataphiK1pi1pi2_1 = dataphiK1pi1pi2;
+  float datacosThetapi1pi2_1 = datacosThetapi1pi2;
+  float dataphipi1pi2_1 = dataphipi1pi2;
+  float datacosThetapi1_1 = datacosThetapi1;
+  float dataphipi1_1 = dataphipi1;
+  float datainvmassK1pi1pi2_1 = datainvmassK1pi1pi2;
+  float datainvmasspi1pi2_1 = datainvmasspi1pi2;
+  ntdata->GetEntry(dataentry2);
+  float datacosThetaKKpipi_2 = datacosThetaKKpipi;
+  float dataphiKKpipi_2 = dataphiKKpipi;
+  float datacosThetaK1pi1pi2_2 = datacosThetaK1pi1pi2;
+  float dataphiK1pi1pi2_2 = dataphiK1pi1pi2;
+  float datacosThetapi1pi2_2 = datacosThetapi1pi2;
+  float dataphipi1pi2_2 = dataphipi1pi2;
+  float datacosThetapi1_2 = datacosThetapi1;
+  float dataphipi1_2 = dataphipi1;
+  float datainvmassK1pi1pi2_2 = datainvmassK1pi1pi2;
+  float datainvmasspi1pi2_2 = datainvmasspi1pi2;
+  
+  float distance = sqrt( 
+			 pow((datacosThetaKKpipi_1-datacosThetaKKpipi_2)/2.,2) +
+			 pow((dataphiKKpipi_1-dataphiKKpipi_2)/(2*3.1415),2) +
+			 pow((datacosThetaK1pi1pi2_1-datacosThetaK1pi1pi2_2)/2. ,2) +
+			 pow((dataphiK1pi1pi2_1-dataphiK1pi1pi2_2)/(2*3.1415) ,2) +
+			 pow((datacosThetapi1pi2_1-datacosThetapi1pi2_2)/2. ,2) +
+			 pow((dataphipi1pi2_1-dataphipi1pi2_2)/(2*3.1415) ,2) +
+			 pow((datacosThetapi1_1-datacosThetapi1_2) ,2) +
+			 pow((dataphipi1_1-dataphipi1_2)/(3.1415) ,2) +
+			 pow((datainvmassK1pi1pi2_1-datainvmassK1pi1pi2_2 )/2.2 ,2) +
+			 pow((datainvmasspi1pi2_1-datainvmasspi1pi2_2)/2.3 ,2)
+			 );
+  
+  return distance;
+
+}
+
+
+
+float GetDistanceDataToPwaMc(int dataentry, int pwamcentry) {
+  //  cout << "Distance from Data Event " << dataentry << " to PwaMc Event " << pwamcentry << endl;
+
+  ntdata->GetEntry(dataentry);
+  ntpwamc->GetEntry(pwamcentry);
+
+  float distance = sqrt( 
+			 pow((datacosThetaKKpipi-pwamccosThetaKKpipi)/2.,2) +
+			 pow((dataphiKKpipi-pwamcphiKKpipi)/(2*3.1415),2) +
+			 pow((datacosThetaK1pi1pi2-pwamccosThetaK1pi1pi2)/2. ,2) +
+			 pow((dataphiK1pi1pi2-pwamcphiK1pi1pi2)/(2*3.1415) ,2) +
+			 pow((datacosThetapi1pi2-pwamccosThetapi1pi2)/2. ,2) +
+			 pow((dataphipi1pi2-pwamcphipi1pi2)/(2*3.1415) ,2) +
+			 pow((datacosThetapi1-pwamccosThetapi1) ,2.) +
+			 pow((dataphipi1-pwamcphipi1)/(3.1415) ,2) +
+			 pow((datainvmassK1pi1pi2-pwamcinvmassK1pi1pi2)/2.2 ,2) +
+			 pow((datainvmasspi1pi2-pwamcinvmasspi1pi2)/2.3 ,2)
+			 );
+  
+  return distance;
+
+}
+
+
+
+
+
+
+
+
+float GetDistancePwaMcToPwaMc(int pwamcentry1, int pwamcentry2) {
+  //  cout << "Distance from PwaMC Event " << dataentry1 << " to PwaMC Event " << dataentry2 << endl;
+  
+  ntpwamc->GetEntry(pwamcentry1);
+  float pwamccosThetaKKpipi_1 = pwamccosThetaKKpipi;
+  float pwamcphiKKpipi_1 = pwamcphiKKpipi;
+  float pwamccosThetaK1pi1pi2_1 = pwamccosThetaK1pi1pi2;
+  float pwamcphiK1pi1pi2_1 = pwamcphiK1pi1pi2;
+  float pwamccosThetapi1pi2_1 = pwamccosThetapi1pi2;
+  float pwamcphipi1pi2_1 = pwamcphipi1pi2;
+  float pwamccosThetapi1_1 = pwamccosThetapi1;
+  float pwamcphipi1_1 = pwamcphipi1;
+  float pwamcinvmassK1pi1pi2_1 = pwamcinvmassK1pi1pi2;
+  float pwamcinvmasspi1pi2_1 = pwamcinvmasspi1pi2;
+  ntpwamc->GetEntry(pwamcentry2);
+  float pwamccosThetaKKpipi_2 = pwamccosThetaKKpipi;
+  float pwamcphiKKpipi_2 = pwamcphiKKpipi;
+  float pwamccosThetaK1pi1pi2_2 = pwamccosThetaK1pi1pi2;
+  float pwamcphiK1pi1pi2_2 = pwamcphiK1pi1pi2;
+  float pwamccosThetapi1pi2_2 = pwamccosThetapi1pi2;
+  float pwamcphipi1pi2_2 = pwamcphipi1pi2;
+  float pwamccosThetapi1_2 = pwamccosThetapi1;
+  float pwamcphipi1_2 = pwamcphipi1;
+  float pwamcinvmassK1pi1pi2_2 = pwamcinvmassK1pi1pi2;
+  float pwamcinvmasspi1pi2_2 = pwamcinvmasspi1pi2;
+  
+  float distance = sqrt( 
+			 pow((pwamccosThetaKKpipi_1-pwamccosThetaKKpipi_2)/2.,2) +
+			 pow((pwamcphiKKpipi_1-pwamcphiKKpipi_2)/(2*3.1415),2) +
+			 pow((pwamccosThetaK1pi1pi2_1-pwamccosThetaK1pi1pi2_2)/2. ,2) +
+			 pow((pwamcphiK1pi1pi2_1-pwamcphiK1pi1pi2_2)/(2*3.1415) ,2) +
+			 pow((pwamccosThetapi1pi2_1-pwamccosThetapi1pi2_2)/2. ,2) +
+			 pow((pwamcphipi1pi2_1-pwamcphipi1pi2_2)/(2*3.1415) ,2) +
+			 pow((pwamccosThetapi1_1-pwamccosThetapi1_2) ,2) +
+			 pow((pwamcphipi1_1-pwamcphipi1_2)/(3.1415) ,2) +
+			 pow((pwamcinvmassK1pi1pi2_1-pwamcinvmassK1pi1pi2_2)/2.2 ,2) +
+			 pow((pwamcinvmasspi1pi2_1-pwamcinvmasspi1pi2_2)/2.3 ,2)
+			 );
+
+  return distance;
+
+}
+
+
+
+
+
+
+
+void chisq_method() {
+
+  cout << "Entering chisq-method" << endl;
+
+  Double_t chisq = 0;
+
+  Int_t constraints = 50; // 12-01-06_FitParamHyp8_base_K0K2_Hyp5/rerun_correctedampK0K2/Psi2STo2K2PiGamPWA_noK1_1680Hyp7.root
+  // float constraints = 94;   // 12-01-06_FitParamHyp8_base_K0K2_Hyp5/rerun_correctedampK0K2/Psi2STo2K2PiGamPWA_noK1_1680Hyp7_noK1_2300Hyp7.root
+  Int_t ndf;
+  int numberofbins = 0;
+  
+  for(unsigned int i=0; i<histVectData.size(); i++) {
+    int currentNoOfBins=0;
+
+    for (int j=0; j<(histVectData[i]->GetSize()); j++) {
+      float binContentData=float(histVectData[i]->GetBinContent(j));
+      if (binContentData>0.){
+	chisq += pow( binContentData - (histVectPwaMc[i]->GetBinContent(j)),2)/binContentData;
+	currentNoOfBins++;
+      }
+      // cout << "chi^2 after bin " << j << " of histogram " << histVectData[i]->GetName() << ": " << chisq << endl;
+    }
+    cout << "chi^2 after " << histVectData[i]->GetName() << ": " << chisq << endl;
+    
+    numberofbins += currentNoOfBins;
+  }   
+
+    ndf = numberofbins - constraints;
+
+    cout << "Total chi^2:\t" << chisq << endl;    
+    cout << "Total number of bins:\t" << numberofbins << endl;
+    cout << "Number of constraints:\t" << constraints << endl;
+    cout << "Degrees of freedom:\t" << ndf << endl;
+    cout << "chi^2/ndf:\t" << chisq/double(ndf) << endl;
+    cout << "CL:\t" << TMath::Prob(chisq, ndf) << endl;
+}
+
+
+
+
+
+
+void fillHistograms() {
+
+  Int_t maxEvtNo = 0;
+  for(Int_t i=0; i<max(numOfEntriesPwaMc,numOfEntriesData); i++)
+    {
+      if(i<numOfEntriesData){
+      	ntdata->GetEntry(i);
+
+	dataCosThetaKKpipi->Fill(datacosThetaKKpipi);
+        dataPhiKKpipi->Fill(dataphiKKpipi);	
+
+        dataCosThetaKpipi->Fill(datacosThetaK1pi1pi2);	
+        dataPhiKpipi->Fill(dataphiK1pi1pi2);	
+
+	dataCosThetapipi->Fill(datacosThetapi1pi2);
+       	dataPhipipi->Fill(dataphipi1pi2);
+ 
+        dataCosThetapi->Fill(fabs(datacosThetapi1));                                              	
+        dataPhipi->Fill(fabs(dataphipi1));                                              	
+   
+        datainvMassKpipi->Fill(datainvmassK1pi1pi2);
+        datainvMasspipi->Fill(datainvmasspi1pi2);
+      }
+
+      ntpwamc->GetEntry(i);
+
+      pwamcCosThetaKKpipi->Fill(pwamccosThetaKKpipi, evtweight);
+      pwamcPhiKKpipi->Fill(pwamcphiKKpipi, evtweight);	
+      
+      pwamcCosThetaKpipi->Fill(pwamccosThetaK1pi1pi2, evtweight);	
+      pwamcPhiKpipi->Fill(pwamcphiK1pi1pi2, evtweight);	
+      
+      pwamcCosThetapipi->Fill(pwamccosThetapi1pi2, evtweight);
+      pwamcPhipipi->Fill(pwamcphipi1pi2, evtweight);
+      
+      pwamcCosThetapi->Fill(fabs(pwamccosThetapi1), evtweight);                                              	
+      pwamcPhipi->Fill(fabs(pwamcphipi1), evtweight);                                              	
+      
+      pwamcinvMassKpipi->Fill(pwamcinvmassK1pi1pi2, evtweight);
+      pwamcinvMasspipi->Fill(pwamcinvmasspi1pi2, evtweight);
+      
+      if(maxEvtNo<evtNo) maxEvtNo=evtNo;
+    }
+
+
+}
+
+
+
+
+void drawHistograms() {
+
+  double scalefactor = double(ntdata->GetEntries())/double(ntpwamc->GetEntries()); 
+
+  Int_t rebin = 1;
+
+  TCanvas* cmain = new TCanvas("cmain","cmain",1400,600);
+  cmain->Divide(5,2);
+  for(unsigned int i=0; i<histVectData.size(); i++) {
+    cmain->cd(i+1);
+    histVectData[i]->Rebin(rebin);
+    histVectData[i]->SetLineColor(2);
+    histVectData[i]->Draw("E");
+    histVectData[i]->SetMinimum(0);
+    histVectPwaMc[i]->Rebin(rebin);
+    histVectPwaMc[i]->Scale(scalefactor);
+    histVectPwaMc[i]->Draw("same");
+  } 
+
+}
+
+
+
diff --git a/Examples/Psi2STo2K2PiGam/qaMixedSampleCacheApp.cc b/Examples/Psi2STo2K2PiGam/qaMixedSampleCacheApp.cc
new file mode 100644
index 0000000000000000000000000000000000000000..b06397e225603b5620f0ebf3c2b0be4a8743ee2c
--- /dev/null
+++ b/Examples/Psi2STo2K2PiGam/qaMixedSampleCacheApp.cc
@@ -0,0 +1,726 @@
+#include <vector>
+#include <map>
+#include <string.h>
+#include <math.h>
+#include <stdlib.h>
+#include "TFile.h"
+#include "TH1F.h"
+#include "TNtuple.h"
+#include "TMath.h"
+#include <iostream>
+#include "TCanvas.h"
+#include "TF1.h"
+
+TFile* fdata;
+TNtuple* ntdata;
+TFile* fpwamc;
+TNtuple* ntpwamc;
+
+TH1F* dataCosThetaKKpipi;
+TH1F* pwamcCosThetaKKpipi;
+TH1F* dataPhiKKpipi;
+TH1F* pwamcPhiKKpipi;
+TH1F* dataCosThetaKpipi;
+TH1F* pwamcCosThetaKpipi;
+TH1F* dataPhiKpipi;
+TH1F* pwamcPhiKpipi;
+TH1F* dataCosThetapipi;
+TH1F* pwamcCosThetapipi;
+TH1F* dataPhipipi;
+TH1F* pwamcPhipipi;
+TH1F* dataCosThetapi;
+TH1F* pwamcCosThetapi;
+TH1F* dataPhipi;
+TH1F* pwamcPhipi;
+TH1F* datainvMassKpipi;
+TH1F* pwamcinvMassKpipi;
+TH1F* datainvMasspipi;
+TH1F* pwamcinvMasspipi;
+
+TH1F* histofpull;
+
+Int_t evtNo = 0;
+
+float datacosThetaKKpipi;
+float dataphiKKpipi;
+float datacosThetaK1pi1pi2;
+float dataphiK1pi1pi2;
+float datacosThetapi1pi2;
+float dataphipi1pi2;
+float datacosThetapi1;
+float dataphipi1;
+float datainvmassK1pi1pi2;
+float datainvmasspi1pi2;
+
+float pwamccosThetaKKpipi;
+float pwamcphiKKpipi;
+float pwamccosThetaK1pi1pi2;
+float pwamcphiK1pi1pi2;
+float pwamccosThetapi1pi2;
+float pwamcphipi1pi2;
+float pwamccosThetapi1;
+float pwamcphipi1;
+float pwamcinvmassK1pi1pi2;
+float pwamcinvmasspi1pi2;
+
+float evtweight;
+
+
+std::vector<float> vecdatacosThetaKKpipi;
+std::vector<float> vecdataphiKKpipi;
+std::vector<float> vecdatacosThetaK1pi1pi2;
+std::vector<float> vecdataphiK1pi1pi2;
+std::vector<float> vecdatacosThetapi1pi2;
+std::vector<float> vecdataphipi1pi2;
+std::vector<float> vecdatacosThetapi1;
+std::vector<float> vecdataphipi1;
+std::vector<float> vecdatainvmassK1pi1pi2;
+std::vector<float> vecdatainvmasspi1pi2;
+
+std::vector<float> vecpwamccosThetaKKpipi;
+std::vector<float> vecpwamcphiKKpipi;
+std::vector<float> vecpwamccosThetaK1pi1pi2;
+std::vector<float> vecpwamcphiK1pi1pi2;
+std::vector<float> vecpwamccosThetapi1pi2;
+std::vector<float> vecpwamcphipi1pi2;
+std::vector<float> vecpwamccosThetapi1;
+std::vector<float> vecpwamcphipi1;
+std::vector<float> vecpwamcinvmassK1pi1pi2;
+std::vector<float> vecpwamcinvmasspi1pi2;
+
+std::vector<float> vecevtweight;
+
+std::vector<TH1F*> histVectData;
+std::vector<TH1F*> histVectPwaMc;
+
+Int_t numOfEntriesData;
+Int_t numOfEntriesPwaMc;
+
+TString type = "mc";
+bool drawFlag = true;
+bool output = false;
+bool longoutput = false;
+bool silent = false;
+TString method = "both";
+using namespace std;
+
+struct nextneighbours
+{ 
+  nextneighbours(  unsigned int theevtnumber1, unsigned int theevtnumber2, float thedistance, bool thedatatype){
+    evtnumber1 = theevtnumber1;
+    evtnumber2 = theevtnumber2;
+    distance = thedistance;
+    datatype = thedatatype;
+  }
+ 
+  virtual ~nextneighbours(){};
+
+  unsigned int evtnumber1;
+  unsigned int evtnumber2;
+  float distance;
+  bool datatype;
+};
+
+void fillHistograms();
+void drawHistograms();
+void chisq_method();
+void mixed_sample();
+float GetDistanceDataToData(int dataentry1, int dataentry2);
+float GetDistanceDataToPwaMc(int dataentry, int pwamcentry);
+float GetDistancePwaMcToPwaMc(int pwamcentry1, int pwamcentry2);
+bool Compare(const nextneighbours a, const nextneighbours b);
+
+
+int main(){
+  
+  TString fileData="./Psi2STo2K2PiGamPWA_data.root"; 
+  //TString fileData="./Psi2STo2K2PiGamPWA_pwamc__FitParamHyp8_base_K0K2_newflatte__10000events.root";
+  TString filePwaMc="./Psi2STo2K2PiGamPWA_pwamc__FitParamHyp8_base_K0K2_newflatte__10000events.root"; 
+  TString option="mixedsample,pwamc,nodraw,silent";
+
+  cout << "--- ENTERING QAMIXEDSAMPLE" << endl;
+  //   gROOT->SetStyle("Plain");
+  //   gStyle->SetCanvasColor(0);
+  //   gStyle->SetStatBorderSize(0);
+  //   gStyle->SetPalette(1);
+  //   gStyle->SetOptStat(1111);
+  
+
+  if (option.Contains("pwamc")) {type = "pwamc";}
+  if (option.Contains("nodraw")) {drawFlag = false;}
+  if (option.Contains("chisq")) {method = "chisq";}
+  if (option.Contains("mixedsample")) {method = "mixedsample";}
+  if (option.Contains("output")) {output = true;}
+  if (option.Contains("longoutput")) {longoutput = true;}
+  if (option.Contains("silent")) {silent = true;}
+
+  fdata = new TFile(fileData,"READ");
+  ntdata = (TNtuple*)fdata->Get("dataTuple");
+
+  fpwamc = new TFile(filePwaMc,"READ");
+  if(type=="pwamc") {
+    cout << "Vergleich mit PWA-MC" << endl;
+    ntpwamc = (TNtuple*)fpwamc->Get("dataTuple");
+  }
+  else if(type=="mc") {
+    cout << "Vergleich mit MC" << endl;
+    ntpwamc = (TNtuple*)fdata->Get("mcTuple");
+  }
+  cout << endl;
+
+  numOfEntriesData = ntdata->GetEntries();
+  cout << "Events in DATA Set: " << numOfEntriesData << endl;
+  numOfEntriesPwaMc = ntpwamc->GetEntries();
+  cout << "Events in PWAMC Set: " << numOfEntriesPwaMc << endl;
+
+  ntdata->SetBranchAddress("costhetaKKpipi", &datacosThetaKKpipi);
+  ntdata->SetBranchAddress("phiKKpipi", &dataphiKKpipi);
+  ntdata->SetBranchAddress("costhetaK1pi1pi2", &datacosThetaK1pi1pi2);
+  ntdata->SetBranchAddress("phiK1pi1pi2", &dataphiK1pi1pi2);
+  ntdata->SetBranchAddress("costhetapipiViaK1pipi", &datacosThetapi1pi2);
+  ntdata->SetBranchAddress("phipipiViaK1pipi", &dataphipi1pi2);
+  ntdata->SetBranchAddress("costhetapiViapipi", &datacosThetapi1);
+  ntdata->SetBranchAddress("phipiViapipi", &dataphipi1);
+  ntdata->SetBranchAddress("mk1pi1pi2", &datainvmassK1pi1pi2);
+  ntdata->SetBranchAddress("mpipi", &datainvmasspi1pi2);
+
+  cout << "Read branches vom ntdata." << endl;
+
+  for(int i = 0; i<numOfEntriesData; i++) {
+    ntdata->GetEntry(i);
+    vecdatacosThetaKKpipi.push_back(datacosThetaKKpipi);
+    vecdataphiKKpipi.push_back(dataphiKKpipi);
+    vecdatacosThetaK1pi1pi2.push_back(datacosThetaK1pi1pi2);
+    vecdataphiK1pi1pi2.push_back(dataphiK1pi1pi2);
+    vecdatacosThetapi1pi2.push_back(datacosThetapi1pi2);
+    vecdataphipi1pi2.push_back(dataphipi1pi2);
+    vecdatacosThetapi1.push_back(datacosThetapi1);
+    vecdataphipi1.push_back(dataphipi1);
+    vecdatainvmassK1pi1pi2.push_back(datainvmassK1pi1pi2);
+    vecdatainvmasspi1pi2.push_back(datainvmasspi1pi2);
+  }
+  cout << "Data Events filled to vectors." << endl;
+
+  ntpwamc->SetBranchAddress("costhetaKKpipi", &pwamccosThetaKKpipi);
+  ntpwamc->SetBranchAddress("phiKKpipi", &pwamcphiKKpipi);
+  ntpwamc->SetBranchAddress("costhetaK1pi1pi2", &pwamccosThetaK1pi1pi2);
+  ntpwamc->SetBranchAddress("phiK1pi1pi2", &pwamcphiK1pi1pi2);
+  ntpwamc->SetBranchAddress("costhetapipiViaK1pipi", &pwamccosThetapi1pi2);
+  ntpwamc->SetBranchAddress("phipipiViaK1pipi", &pwamcphipi1pi2);
+  ntpwamc->SetBranchAddress("costhetapiViapipi", &pwamccosThetapi1);
+  ntpwamc->SetBranchAddress("phipiViapipi", &pwamcphipi1);
+  ntpwamc->SetBranchAddress("mk1pi1pi2", &pwamcinvmassK1pi1pi2);
+  ntpwamc->SetBranchAddress("mpipi", &pwamcinvmasspi1pi2);
+  ntpwamc->SetBranchAddress("weight",&evtweight);
+
+  cout << "Read branches vom ntpwamc." << endl;
+
+  for(int i = 0; i<numOfEntriesPwaMc; i++) {
+    ntpwamc->GetEntry(i);
+    vecpwamccosThetaKKpipi.push_back(pwamccosThetaKKpipi);
+    vecpwamcphiKKpipi.push_back(pwamcphiKKpipi);
+    vecpwamccosThetaK1pi1pi2.push_back(pwamccosThetaK1pi1pi2);
+    vecpwamcphiK1pi1pi2.push_back(pwamcphiK1pi1pi2);
+    vecpwamccosThetapi1pi2.push_back(pwamccosThetapi1pi2);
+    vecpwamcphipi1pi2.push_back(pwamcphipi1pi2);
+    vecpwamccosThetapi1.push_back(pwamccosThetapi1);
+    vecpwamcphipi1.push_back(pwamcphipi1);
+    vecpwamcinvmassK1pi1pi2.push_back(pwamcinvmassK1pi1pi2);
+    vecpwamcinvmasspi1pi2.push_back(pwamcinvmasspi1pi2);
+  }
+  cout << "PwaMC Events filled to vectors." << endl;
+
+  dataCosThetaKKpipi = new TH1F("dataCosThetaKKpipi","dataCosThetaKKpipi",60,-1.,1.);
+  dataPhiKKpipi = new TH1F("dataPhiKKpipi","dataPhiKKpipi",60,-TMath::Pi(),TMath::Pi());
+  dataCosThetaKpipi = new TH1F("dataCosThetaKpipi","dataCosThetaKpipi",60,-1.,1.);
+  dataPhiKpipi = new TH1F("dataPhiKpipi","dataPhiKpipi",60,-TMath::Pi(),TMath::Pi());
+  dataCosThetapipi = new TH1F("dataCosThetapipi","dataCosThetapipi",60,-1.,1.);
+  dataPhipipi = new TH1F("dataPhipipi","dataPhipipi",60,-TMath::Pi(),TMath::Pi());
+  dataCosThetapi = new TH1F("dataCosThetapi","dataCosThetapi",60,0.,1.);
+  dataPhipi = new TH1F("dataPhipi","dataPhipi",60,0.,TMath::Pi());
+  datainvMassKpipi = new TH1F("datainvMassKpipi", "datainvMassKpipi", 60, 0.7, 3.0);
+  datainvMasspipi = new TH1F("datainvMasspipi", "datainvMasspipi", 60, 0.2, 2.8);
+   
+  pwamcCosThetaKKpipi = new TH1F("pwamcCosThetaKKpipi","pwamcCosThetaKKpipi",60,-1.,1.);
+  pwamcPhiKKpipi = new TH1F("pwamcPhiKKpipi","pwamcPhiKKpipi",60,-TMath::Pi(),TMath::Pi());
+  pwamcCosThetaKpipi = new TH1F("pwamcCosThetaKpipi","pwamcCosThetaKpipi",60,-1.,1.);
+  pwamcPhiKpipi = new TH1F("pwamcPhiKpipi","pwamcPhiKpipi",60,-TMath::Pi(),TMath::Pi());
+  pwamcCosThetapipi = new TH1F("pwamcCosThetapipi","pwamcCosThetapipi",60,-1.,1.);
+  pwamcPhipipi = new TH1F("pwamcPhipipi","pwamcPhipipi",60,-TMath::Pi(),TMath::Pi());
+  pwamcCosThetapi = new TH1F("pwamcCosThetapi","pwamcCosThetapi",60,0.,1.);
+  pwamcPhipi = new TH1F("pwamcPhipi","pwamcPhipi",60,0.,TMath::Pi());
+  pwamcinvMassKpipi = new TH1F("pwamcinvMassKpipi", "pwamcinvMassKpipi", 60, 0.7, 3.0);
+  pwamcinvMasspipi = new TH1F("pwamcinvMasspipi", "pwamcinvMasspipi", 60, 0.2, 2.8);
+  
+  histofpull = new TH1F("histofpull", "histofpull", 100, -10, 10);
+
+  histVectData.push_back(dataCosThetaKKpipi);
+  histVectData.push_back(dataPhiKKpipi);
+  histVectData.push_back(dataCosThetaKpipi);
+  histVectData.push_back(dataPhiKpipi);
+  histVectData.push_back(dataCosThetapipi);
+  histVectData.push_back(dataPhipipi);
+  histVectData.push_back(dataCosThetapi);
+  histVectData.push_back(dataPhipi);
+  histVectData.push_back(datainvMassKpipi);
+  histVectData.push_back(datainvMasspipi);
+
+  histVectPwaMc.push_back(pwamcCosThetaKKpipi);
+  histVectPwaMc.push_back(pwamcPhiKKpipi);
+  histVectPwaMc.push_back(pwamcCosThetaKpipi);
+  histVectPwaMc.push_back(pwamcPhiKpipi);
+  histVectPwaMc.push_back(pwamcCosThetapipi);
+  histVectPwaMc.push_back(pwamcPhipipi);
+  histVectPwaMc.push_back(pwamcCosThetapi);
+  histVectPwaMc.push_back(pwamcPhipi);
+  histVectPwaMc.push_back(pwamcinvMassKpipi);
+  histVectPwaMc.push_back(pwamcinvMasspipi);
+
+  fillHistograms();
+
+  if(drawFlag) {
+    cout << "--- Histogramme gezeichnet." << endl;
+    drawHistograms();
+    cout << endl;
+    cout << endl;
+    cout << "-----------------------------------------" << endl;
+  }
+  if(method=="chisq" || method=="both") {
+    cout << "--- CHISQ-METHOD-ERGEBNISSE:" << endl;
+    cout << endl;
+    chisq_method();
+    cout << "-----------------------------------------" << endl;
+    cout << endl;
+  }
+  if(method=="mixedsample" || method=="both") {
+    cout << "--- MIXED-SAMPLE-ERGEBNISSE:" << endl;
+    cout << endl;
+    mixed_sample();
+    cout << "-----------------------------------------" << endl;
+    cout << endl;
+  }
+  cout << "--- EXITING QAMIXEDSAMPLE" << endl;
+
+  return 1;
+
+}
+
+
+bool Compare(const nextneighbours a, const nextneighbours b) {
+  return a.distance < b.distance;
+}
+
+
+void mixed_sample() {
+
+  if(!silent) cout << "Entering mixed-sample method" << endl;
+  if(!silent) cout << endl;
+
+  unsigned int limit_runs_lower = 0;
+  unsigned int limit_runs_upper = 3;
+  cout << "Performing " << limit_runs_upper - limit_runs_lower << " runs." << endl;
+  std::vector<float> fpullvector;
+  unsigned int limit_data = 2874;   // numOfEntriesData;
+  unsigned int limit_pwamc = 2874;  // numOfEntriesPwaMc;
+  unsigned int numberofneighbours = 10;
+
+
+  for(unsigned int run = limit_runs_lower; run < limit_runs_upper; ++run) {
+
+    std::vector<struct nextneighbours> neighbourList;
+    cout << "Starting run " << run+1 << endl;
+
+    if(!silent) cout << endl;
+
+    float distance = 1E6;
+    float T=0;
+    unsigned int pwaoffset = 100000;
+
+    if(!silent) cout << "--- Calculating distances DATA <-> DATA" << endl;
+    for(unsigned int i = 0; i<limit_data; i++) {
+      for(unsigned int j = i; j<limit_data; j++) {
+	if(i!=j) {
+	  distance = GetDistanceDataToData(i,j);
+          nextneighbours tmpNeighbours(i,j,distance,true);
+	  neighbourList.push_back(tmpNeighbours);
+	  if(neighbourList.size() % 500000 == 0) cout << neighbourList.size() << "th distance has been calculated." << endl;
+	}
+      }
+    }
+    
+    if(!silent)  cout << "--- Calculating distances DATA <-> PWAMC" << endl;
+    for(unsigned int i = 0; i<limit_data; i++) {
+      for(unsigned int j = 0; j<limit_pwamc; j++) {
+  	distance = GetDistanceDataToPwaMc(i,j+run*limit_pwamc);
+	nextneighbours tmpNeighbours(i,j+pwaoffset,distance,false);
+	neighbourList.push_back(tmpNeighbours);
+	// neighbourList.push_back((struct nextneighbours) {i,j+pwaoffset,distance,false});
+        if(neighbourList.size() % 500000 == 0) cout << neighbourList.size() << "th distance has been calculated." << endl;
+      }
+    }
+    
+    if(!silent) cout << "--- Calculating distances PWAMC <-> PWAMC" << endl;
+    for(unsigned int i = 0; i<limit_pwamc; i++) {
+      for(unsigned int j = i; j<limit_pwamc; j++) {
+	if(i!=j) {
+	  distance = GetDistancePwaMcToPwaMc(i+run*limit_pwamc,j+run*limit_pwamc);
+	  nextneighbours tmpNeighbours(i+pwaoffset,j+pwaoffset,distance,true);
+	  neighbourList.push_back(tmpNeighbours);
+	  // neighbourList.push_back((struct nextneighbours) {i+pwaoffset,j+pwaoffset,distance,true});
+	  if(neighbourList.size() % 500000 == 0) cout << neighbourList.size() << "th distance has been calculated." << endl;
+	}
+      }
+    }
+    
+    if(!silent) {
+      cout << endl;
+      cout << "How many distances have been calculated?\t" << neighbourList.size() << endl;
+      cout << endl;
+      cout << endl;
+    }
+    
+    if(longoutput) {
+      cout << "--- Distances:" << endl;
+      for(unsigned int i = 0; i < neighbourList.size(); i++) {
+	cout << neighbourList[i].evtnumber1 << "\t" << neighbourList[i].evtnumber2 << "\t" << neighbourList[i].distance << " \t\t" << neighbourList[i].datatype << endl;
+      }
+    }
+    if(!silent) cout << endl;
+    
+    std::sort(neighbourList.begin(),neighbourList.end(), Compare);
+    if(!silent) cout << "neighbourList has been sorted!" << endl;
+    if(!silent) cout << endl;
+    
+    if(longoutput) {
+      cout << "--- Distances after sorting:" << endl;
+      for(unsigned int i = 0; i < neighbourList.size(); i++) {
+	cout << neighbourList[i].evtnumber1 << "\t" << neighbourList[i].evtnumber2 << "\t" << neighbourList[i].distance << " \t\t" << neighbourList[i].datatype << endl;
+      }
+    }
+    if(!silent)  cout << endl;
+    
+    float numOfEntriesTotal = float(limit_data + limit_pwamc);
+    
+    unsigned int m;
+    
+    for(unsigned int i = 0; i < limit_data; i++) {
+      if(output) cout << "--- Checking neighbours of event " << i << endl;
+      m = 0;
+      for(unsigned int j = 0; j < neighbourList.size(); j++) 
+	{
+	  if (m >= numberofneighbours) continue;
+	  if(longoutput) cout << "Checking Event in neighbourList for data: " << j << endl;
+	  if(neighbourList[j].evtnumber1 == i || neighbourList[j].evtnumber2 == i) 
+	    {
+	      m++;
+	      if(longoutput) cout << j << "th event is the " << m << "th neighbour of event " << i;
+	      if(neighbourList[j].datatype==true) 
+		{
+		  if(longoutput) cout << " and belongs to the same sample! Adding +1 to T" << endl;
+		  T=T+1.;
+		}
+	      else 
+		{
+		  if(longoutput) cout << ", but doesn't belong to the same sample." << endl;
+		}
+	    }
+	  else 
+	    {
+	      if(longoutput) cout << "Not a neighbour of event " << i << endl;
+	    }
+	}
+      if(output) cout << "Event " << i << " has been analysed with " << m << " neighbours."  << endl;
+      if(output) cout << "T: " << T << endl;
+      if(output) cout << endl;
+    }
+
+    for(unsigned int i = 0; i < limit_pwamc; i++) {
+      if(output) cout << "--- Checking neighbours of event " << i+pwaoffset << endl;
+      m = 0;
+      
+      for(unsigned int j = 0; j < neighbourList.size(); j++) 
+	{
+	  if (m >= numberofneighbours) continue;
+	  if(longoutput) cout << "Checking Event in neighbourList for pwamc: " << j << endl;
+	  if(neighbourList[j].evtnumber1 == i+pwaoffset || neighbourList[j].evtnumber2 == i+pwaoffset) 
+	    {
+	      m++;
+	      if(longoutput) cout << j << "th event is the " << m << "th neighbour of event " << i+pwaoffset;
+	      if(neighbourList[j].datatype==true) 
+		{
+		  if(longoutput) cout << " and belongs to the same sample! Adding +1 to T" << endl;
+		  T=T+1;
+		}
+	      else 
+		{
+		  if(longoutput) cout << ", but doesn't belong to the same sample." << endl;
+		}
+	    }
+	  else 
+	    {
+	      if(longoutput) cout << "Not a neighbour of event " << i+pwaoffset << endl;
+	    }
+
+	}
+
+      if(output) cout << "Event " << i+pwaoffset << " has been analysed." << endl;
+      if(output) cout << "T: " << T << endl;
+      if(output) cout << endl;
+    }
+
+
+    if(!silent) {
+      cout << endl;
+      cout << "Number of Entries in DATA: " << numOfEntriesData << " events available (used " << limit_data << ")"<< endl;
+      cout << "Number of Entries in PWAMC: " << numOfEntriesPwaMc << " events available (used " << limit_pwamc << ")"<< endl;
+      cout << "Total Number of Entries: " << numOfEntriesTotal << endl;
+      cout << endl;
+    }
+    
+    numOfEntriesData = limit_data;
+    numOfEntriesPwaMc = limit_pwamc;
+    
+    float Tnorm = 0;
+    Tnorm = T/(float(numberofneighbours)*float(numOfEntriesTotal));
+    if(!silent) cout << "Tnorm: " << Tnorm << endl;
+    
+    
+    float mu = ((float(numOfEntriesData)*(float(numOfEntriesData)-1)) + (float(numOfEntriesPwaMc)*(float(numOfEntriesPwaMc)-1))) / (float(numOfEntriesTotal)*(float(numOfEntriesTotal)-1));
+    if(!silent) cout << "Erwartungswert mu: " << mu << endl;
+    
+    
+    float variancesquared = 
+      1 / (float(numOfEntriesTotal)*float(numberofneighbours)) 
+      * 
+      ( 
+       (float(numOfEntriesData)*float(numOfEntriesPwaMc))/(pow(float(numOfEntriesTotal), 2)) 
+       + 
+       4*(pow(float(numOfEntriesData), 2)*pow(float(numOfEntriesPwaMc), 2))/(pow(float(numOfEntriesTotal),4)) 
+       );
+
+    float fpull = (Tnorm-mu)/sqrt(variancesquared);
+    
+    if(!silent) {
+      cout << "Varianz: " << variancesquared << endl;
+      cout << endl; 
+      cout << "Differenz zwischen Resultat und Erwartungswert: " << Tnorm-mu << endl;
+    }
+    cout << "f_pull in run " << run+1 << ": " << fpull << endl;
+    cout << endl;
+    fpullvector.push_back(fpull);
+  }
+  
+  cout << "--------------------------" << endl;
+  cout << fpullvector.size() << endl;
+  for(unsigned int i = 0; i < fpullvector.size(); i++) {
+    cout << "Calculated fpull:\t" << fpullvector[i] << endl;
+    histofpull->Fill( fpullvector[i] );
+  }
+
+
+  TCanvas* chist1 = new TCanvas("chist1","chist1",1200,800);
+  histofpull->SetLineColor(2);
+  histofpull->Draw();
+
+  TF1* fit1 = new TF1("fit1","gaus(0)",-10.,10.);
+  fit1->SetParameters(5,histofpull->GetMean(),histofpull->GetRMS());
+  fit1->SetLineColor(4);
+  fit1->SetLineWidth(3);
+  histofpull->Fit("fit1","LMRS","",-10.,10.);
+  chist1->Print("histofpull.pdf");
+
+}
+
+
+
+
+float GetDistanceDataToData(int dataentry1, int dataentry2) {
+  //  cout << "Distance from Data Event " << dataentry1 << " to Data Event " << dataentry2 << endl;
+  
+  float distance = sqrt( 
+			 pow((vecdatacosThetaKKpipi[dataentry1]-vecdatacosThetaKKpipi[dataentry2])/2.,2) +
+			 pow((vecdataphiKKpipi[dataentry1]-vecdataphiKKpipi[dataentry2])/(2*3.1415),2) +
+			 pow((vecdatacosThetaK1pi1pi2[dataentry1]-vecdatacosThetaK1pi1pi2[dataentry2])/2. ,2) +
+			 pow((vecdataphiK1pi1pi2[dataentry1]-vecdataphiK1pi1pi2[dataentry2])/(2*3.1415) ,2) +
+			 pow((vecdatacosThetapi1pi2[dataentry1]-vecdatacosThetapi1pi2[dataentry2])/2. ,2) +
+			 pow((vecdataphipi1pi2[dataentry1]-vecdataphipi1pi2[dataentry2])/(2*3.1415) ,2) +
+			 pow((vecdatacosThetapi1[dataentry1]-vecdatacosThetapi1[dataentry2]) ,2) +
+			 pow((vecdataphipi1[dataentry1]-vecdataphipi1[dataentry2])/(3.1415) ,2) +
+			 pow((vecdatainvmassK1pi1pi2[dataentry1]-vecdatainvmassK1pi1pi2[dataentry2] )/2.2 ,2) +
+			 pow((vecdatainvmasspi1pi2[dataentry1]-vecdatainvmasspi1pi2[dataentry2])/2.3 ,2)
+			 );
+  
+  return distance;
+
+}
+
+
+
+float GetDistanceDataToPwaMc(int dataentry, int pwamcentry) {
+  //  cout << "Distance from Data Event " << dataentry << " to PwaMc Event " << pwamcentry << endl;
+
+  float distance = sqrt( 
+			 pow((vecdatacosThetaKKpipi[dataentry]-vecpwamccosThetaKKpipi[pwamcentry])/2.,2) +
+			 pow((vecdataphiKKpipi[dataentry]-vecpwamcphiKKpipi[pwamcentry])/(2*3.1415),2) +
+			 pow((vecdatacosThetaK1pi1pi2[dataentry]-vecpwamccosThetaK1pi1pi2[pwamcentry])/2. ,2) +
+			 pow((vecdataphiK1pi1pi2[dataentry]-vecpwamcphiK1pi1pi2[pwamcentry])/(2*3.1415) ,2) +
+			 pow((vecdatacosThetapi1pi2[dataentry]-vecpwamccosThetapi1pi2[pwamcentry])/2. ,2) +
+			 pow((vecdataphipi1pi2[dataentry]-vecpwamcphipi1pi2[pwamcentry])/(2*3.1415) ,2) +
+			 pow((vecdatacosThetapi1[dataentry]-vecpwamccosThetapi1[pwamcentry]) ,2.) +
+			 pow((vecdataphipi1[dataentry]-vecpwamcphipi1[pwamcentry])/(3.1415) ,2) +
+			 pow((vecdatainvmassK1pi1pi2[dataentry]-vecpwamcinvmassK1pi1pi2[pwamcentry])/2.2 ,2) +
+			 pow((vecdatainvmasspi1pi2[dataentry]-vecpwamcinvmasspi1pi2[pwamcentry])/2.3 ,2)
+			 );
+  
+  return distance;
+
+}
+
+
+
+
+
+
+
+
+float GetDistancePwaMcToPwaMc(int pwamcentry1, int pwamcentry2) {
+  //  cout << "Distance from PwaMC Event " << dataentry1 << " to PwaMC Event " << dataentry2 << endl;
+  
+  float distance = sqrt( 
+			 pow((vecpwamccosThetaKKpipi[pwamcentry1]-vecpwamccosThetaKKpipi[pwamcentry2])/2.,2) +
+			 pow((vecpwamcphiKKpipi[pwamcentry1]-vecpwamcphiKKpipi[pwamcentry2])/(2*3.1415),2) +
+			 pow((vecpwamccosThetaK1pi1pi2[pwamcentry1]-vecpwamccosThetaK1pi1pi2[pwamcentry2])/2. ,2) +
+			 pow((vecpwamcphiK1pi1pi2[pwamcentry1]-vecpwamcphiK1pi1pi2[pwamcentry2])/(2*3.1415) ,2) +
+			 pow((vecpwamccosThetapi1pi2[pwamcentry1]-vecpwamccosThetapi1pi2[pwamcentry2])/2. ,2) +
+			 pow((vecpwamcphipi1pi2[pwamcentry1]-vecpwamcphipi1pi2[pwamcentry2])/(2*3.1415) ,2) +
+			 pow((vecpwamccosThetapi1[pwamcentry1]-vecpwamccosThetapi1[pwamcentry2]) ,2) +
+			 pow((vecpwamcphipi1[pwamcentry1]-vecpwamcphipi1[pwamcentry2])/(3.1415) ,2) +
+			 pow((vecpwamcinvmassK1pi1pi2[pwamcentry1]-vecpwamcinvmassK1pi1pi2[pwamcentry2])/2.2 ,2) +
+			 pow((vecpwamcinvmasspi1pi2[pwamcentry1]-vecpwamcinvmasspi1pi2[pwamcentry2])/2.3 ,2)
+			 );
+
+  return distance;
+
+}
+
+
+
+
+
+
+
+void chisq_method() {
+
+  cout << "Entering chisq-method" << endl;
+
+  Double_t chisq = 0;
+
+  Int_t constraints = 50; // 12-01-06_FitParamHyp8_base_K0K2_Hyp5/rerun_correctedampK0K2/Psi2STo2K2PiGamPWA_noK1_1680Hyp7.root
+  // float constraints = 94;   // 12-01-06_FitParamHyp8_base_K0K2_Hyp5/rerun_correctedampK0K2/Psi2STo2K2PiGamPWA_noK1_1680Hyp7_noK1_2300Hyp7.root
+  Int_t ndf;
+  int numberofbins = 0;
+  
+  for(unsigned int i=0; i<histVectData.size(); i++) {
+    int currentNoOfBins=0;
+
+    for (int j=0; j<(histVectData[i]->GetSize()); j++) {
+      float binContentData=float(histVectData[i]->GetBinContent(j));
+      if (binContentData>0.){
+	chisq += pow( binContentData - (histVectPwaMc[i]->GetBinContent(j)),2)/binContentData;
+	currentNoOfBins++;
+      }
+      // cout << "chi^2 after bin " << j << " of histogram " << histVectData[i]->GetName() << ": " << chisq << endl;
+    }
+    cout << "chi^2 after " << histVectData[i]->GetName() << ": " << chisq << endl;
+    
+    numberofbins += currentNoOfBins;
+  }   
+
+    ndf = numberofbins - constraints;
+
+    cout << "Total chi^2:\t" << chisq << endl;    
+    cout << "Total number of bins:\t" << numberofbins << endl;
+    cout << "Number of constraints:\t" << constraints << endl;
+    cout << "Degrees of freedom:\t" << ndf << endl;
+    cout << "chi^2/ndf:\t" << chisq/double(ndf) << endl;
+    cout << "CL:\t" << TMath::Prob(chisq, ndf) << endl;
+}
+
+
+
+
+
+
+void fillHistograms() {
+
+  Int_t maxEvtNo = 0;
+  for(Int_t i=0; i<max(numOfEntriesPwaMc,numOfEntriesData); i++)
+    {
+      if(i<numOfEntriesData){
+      	ntdata->GetEntry(i);
+
+	dataCosThetaKKpipi->Fill(datacosThetaKKpipi);
+        dataPhiKKpipi->Fill(dataphiKKpipi);	
+
+        dataCosThetaKpipi->Fill(datacosThetaK1pi1pi2);	
+        dataPhiKpipi->Fill(dataphiK1pi1pi2);	
+
+	dataCosThetapipi->Fill(datacosThetapi1pi2);
+       	dataPhipipi->Fill(dataphipi1pi2);
+ 
+        dataCosThetapi->Fill(fabs(datacosThetapi1));                                              	
+        dataPhipi->Fill(fabs(dataphipi1));                                              	
+   
+        datainvMassKpipi->Fill(datainvmassK1pi1pi2);
+        datainvMasspipi->Fill(datainvmasspi1pi2);
+      }
+
+      ntpwamc->GetEntry(i);
+
+      pwamcCosThetaKKpipi->Fill(pwamccosThetaKKpipi, evtweight);
+      pwamcPhiKKpipi->Fill(pwamcphiKKpipi, evtweight);	
+      
+      pwamcCosThetaKpipi->Fill(pwamccosThetaK1pi1pi2, evtweight);	
+      pwamcPhiKpipi->Fill(pwamcphiK1pi1pi2, evtweight);	
+      
+      pwamcCosThetapipi->Fill(pwamccosThetapi1pi2, evtweight);
+      pwamcPhipipi->Fill(pwamcphipi1pi2, evtweight);
+      
+      pwamcCosThetapi->Fill(fabs(pwamccosThetapi1), evtweight);                                              	
+      pwamcPhipi->Fill(fabs(pwamcphipi1), evtweight);                                              	
+      
+      pwamcinvMassKpipi->Fill(pwamcinvmassK1pi1pi2, evtweight);
+      pwamcinvMasspipi->Fill(pwamcinvmasspi1pi2, evtweight);
+      
+      if(maxEvtNo<evtNo) maxEvtNo=evtNo;
+    }
+
+
+}
+
+
+
+
+void drawHistograms() {
+
+  double scalefactor = double(ntdata->GetEntries())/double(ntpwamc->GetEntries()); 
+
+  Int_t rebin = 1;
+
+  TCanvas* cmain = new TCanvas("cmain","cmain",1400,600);
+  cmain->Divide(5,2);
+  for(unsigned int i=0; i<histVectData.size(); i++) {
+    cmain->cd(i+1);
+    histVectData[i]->Rebin(rebin);
+    histVectData[i]->SetLineColor(2);
+    histVectData[i]->Draw("E");
+    histVectData[i]->SetMinimum(0);
+    histVectPwaMc[i]->Rebin(rebin);
+    histVectPwaMc[i]->Scale(scalefactor);
+    histVectPwaMc[i]->Draw("same");
+  } 
+
+}
+
+
+
diff --git a/PspGen/PspGenTestApp.cc b/PspGen/PspGenTestApp.cc
index 297a9bb3f6d42c68cb29c969ae1f3fc137f67214..64358f0cff02b0c8415951f2419db4f585e25ed3 100644
--- a/PspGen/PspGenTestApp.cc
+++ b/PspGen/PspGenTestApp.cc
@@ -19,133 +19,159 @@
 
 #include <iostream>
 #include <string>
+#include <sstream>
 
 using namespace std;
 
 int main(int argc, char* argv[])
 {
-  HepMC::IO_GenEvent hepMC_out("phspEvents_1mio_RndSeed4720.out",std::ios::out);
-
-  EvtSimpleRandomEngine myRandom(4720);
-  EvtRandom::setRandomEngine(&myRandom);
-
-  // variables for the production e+ e- Psi2s
-  double mass_e=0.511e-3;
-  double mass_psi2s = 3.68609;
-  double pe_tot=0.5*sqrt(mass_psi2s*mass_psi2s-2.*mass_e);
-
-  // variables for the first decay Psi2s->Chi_c0+gamma
-  int firstNdaug = 2;
-  double firstMass[8];
-  EvtVector4R firstP4[8]; 
-  double firstMp = 3.68609;
-
-  firstMass[0] = 3.41475;
-  firstMass[10] = 0.;
-
-  // variables for the second decay Chi->c0->K+ K- pi0 pi0
-  int ndaug = 4;
-  double mass[30];
-  EvtVector4R p4[30]; 
-
-  mass[0] = .493677;
-  mass[1] = .493677;
-  mass[2] = .1349766;
-  mass[3] = .1349766;
-
-  // 5 events for visual control
-  for (int count = 0; count < 5; count++) {
-    std::cout << "Event #" << count << std::endl;
-    EvtGenKine::PhaseSpace(firstNdaug, firstMass, firstP4, firstMp);
-    for (int t = 0; t < firstNdaug; t++) {
-      std::cout << firstP4[t] << " m = " << sqrt(firstP4[t]*firstP4[t]) << std::endl;
+  
+  int set_limit = 200;
+  int eventsperset = 500000;
+  bool silent = true;
+
+  for(int set=100; set < set_limit; set++) {
+  
+    std::stringstream out;
+    out << set+1001;
+    string setstring = out.str();
+    
+    string filename = "phspEvents_500k_set" + setstring + ".out";
+    cout << "Filename: " << filename << endl;
+    cout << endl;
+
+    HepMC::IO_GenEvent hepMC_out(filename,std::ios::out);
+    
+    EvtSimpleRandomEngine myRandom(4701+set);
+    EvtRandom::setRandomEngine(&myRandom);
+    
+    // variables for the production e+ e- Psi2s
+    double mass_e=0.511e-3;
+    double mass_psi2s = 3.68609;
+    double pe_tot=0.5*sqrt(mass_psi2s*mass_psi2s-2.*mass_e);
+    
+    // variables for the first decay Psi2s->Chi_c0+gamma
+    int firstNdaug = 2;
+    double firstMass[8];
+    EvtVector4R firstP4[8]; 
+    double firstMp = 3.68609;
+    
+    firstMass[0] = 3.41475;
+    firstMass[10] = 0.;
+    
+    // variables for the second decay Chi->c0->K+ K- pi0 pi0
+    int ndaug = 4;
+    double mass[30];
+    EvtVector4R p4[30]; 
+    
+    mass[0] = .493677;
+    mass[1] = .493677;
+    mass[2] = .1349766;
+    mass[3] = .1349766;
+    
+    // 5 events for visual control
+    if(!silent) {
+      for (int count = 0; count < 5; count++) {
+	std::cout << "Event #" << count << std::endl;
+	EvtGenKine::PhaseSpace(firstNdaug, firstMass, firstP4, firstMp);
+	for (int t = 0; t < firstNdaug; t++) {
+	  std::cout << firstP4[t] << " m = " << sqrt(firstP4[t]*firstP4[t]) << std::endl;
+	}
+	// now use the mass of the Chi_c0 from the first decay as input for the second decay
+	EvtGenKine::PhaseSpace(ndaug, mass, p4, firstP4[0].mass());
+	for (int t = 0; t < ndaug; t++) {
+	  std::cout << p4[t] << " m = " << sqrt(p4[t]*p4[t]) << std::endl;
+	  p4[t].applyBoostTo(firstP4[0]);
+	  std::cout << p4[t] << " boostet: m = " << sqrt(p4[t]*p4[t]) << std::endl;
+	}
+      }
     }
-    // now use the mass of the Chi_c0 from the first decay as input for the second decay
-    EvtGenKine::PhaseSpace(ndaug, mass, p4, firstP4[0].mass());
-    for (int t = 0; t < ndaug; t++) {
-      std::cout << p4[t] << " m = " << sqrt(p4[t]*p4[t]) << std::endl;
-      p4[t].applyBoostTo(firstP4[0]);
-      std::cout << p4[t] << " boostet: m = " << sqrt(p4[t]*p4[t]) << std::endl;
-    }
-  }
-
-  TApplication* rootapp = new TApplication("example",&argc, argv);
-  TH2F dalitz("Dalitz plot", "Dalitz Plot", 80,0.,5., 80,0.,6.);
-
-  TH1F massKpi("invMassKpi", "invMassKpi", 512, 0., 3.);
-  TH1F massKpipi("invMassKpipi", "invMassKpipi", 512, 0., 3.);
-  TH1F cosThetapi("cosThetapi", "cosThetapi", 512, -1.2, 1.2);
-  TH1F cosThetaKpi("cosThetaKpi", "cosThetaKpi", 512, -1.2, 1.2);
-
-  for (int count = 0; count < 1000000; count++) {
-    if(count % 100000 == 0) cout << "Event " << count << " generated." << endl;
-
-    EvtGenKine::PhaseSpace(firstNdaug, firstMass, firstP4, firstMp);
-    EvtGenKine::PhaseSpace(ndaug, mass, p4, firstP4[0].mass());
-    for (int t = 0; t < ndaug; t++) {
-      p4[t].applyBoostTo(firstP4[0]);
+    /*    
+    TApplication* rootapp = new TApplication("example",&argc, argv);
+    TH2F dalitz("Dalitz plot", "Dalitz Plot", 80,0.,5., 80,0.,6.);
+    
+    TH1F massKpi("invMassKpi", "invMassKpi", 512, 0., 3.);
+    TH1F massKpipi("invMassKpipi", "invMassKpipi", 512, 0., 3.);
+    TH1F cosThetapi("cosThetapi", "cosThetapi", 512, -1.2, 1.2);
+    TH1F cosThetaKpi("cosThetaKpi", "cosThetaKpi", 512, -1.2, 1.2);
+    */    
+
+    for (int count = 0; count < eventsperset; count++) {
+      if(count % 100000 == 0) cout << "Event " << count << " generated." << endl;
+      
+      EvtGenKine::PhaseSpace(firstNdaug, firstMass, firstP4, firstMp);
+      EvtGenKine::PhaseSpace(ndaug, mass, p4, firstP4[0].mass());
+      for (int t = 0; t < ndaug; t++) {
+	p4[t].applyBoostTo(firstP4[0]);
+      }
+      
+      //    dalitz.Fill((p4[0]+p4[1])*(p4[0]+p4[1]), (p4[1]+p4[2])*(p4[1]+p4[2]));
+      
+      HepMC::GenEvent* evt = new HepMC::GenEvent( 20, count );
+      evt->use_units(HepMC::Units::GEV, HepMC::Units::MM);
+      
+      // create production vertex
+      HepMC::GenVertex* vtx_prod = new HepMC::GenVertex();
+      evt->add_vertex( vtx_prod );
+      HepMC::GenParticle* eplus_part = new HepMC::GenParticle( HepMC::FourVector(0., 0., pe_tot, sqrt(mass_e*mass_e+pe_tot*pe_tot)), -11, 3 );
+      HepMC::GenParticle* eminus_part = new HepMC::GenParticle( HepMC::FourVector(0., 0., -pe_tot, sqrt(mass_e*mass_e+pe_tot*pe_tot)), 11, 3 );
+      vtx_prod->add_particle_in( eplus_part );
+      vtx_prod->add_particle_in( eminus_part );
+      
+      HepMC::GenParticle* psi2s_part=new HepMC::GenParticle( HepMC::FourVector(0., 0., 0., mass_psi2s), 20443, 999);
+      vtx_prod->add_particle_out(psi2s_part);
+      
+      // create Psi(2S) vertex
+      HepMC::GenVertex* vtx_psi2S = new HepMC::GenVertex();
+      evt->add_vertex( vtx_psi2S );
+      vtx_psi2S->add_particle_in( psi2s_part );
+      HepMC::GenParticle* chi_c0_part = new HepMC::GenParticle(HepMC::FourVector(firstP4[0].get(1), firstP4[0].get(2), firstP4[0].get(3), firstP4[0].get(0)), 10441, 999 );
+      vtx_psi2S->add_particle_out(chi_c0_part);
+      vtx_psi2S->add_particle_out( new HepMC::GenParticle( HepMC::FourVector(firstP4[1].get(1), firstP4[1].get(2), firstP4[1].get(3), firstP4[1].get(0)), 22, 1 ) );
+      
+      
+      // now do the chi_c0 vertex
+      HepMC::GenVertex* vtx_chi_c0 = new HepMC::GenVertex();
+      evt->add_vertex( vtx_chi_c0 );
+      vtx_chi_c0->add_particle_in( chi_c0_part );
+      vtx_chi_c0->add_particle_out( new HepMC::GenParticle( HepMC::FourVector(p4[0].get(1),p4[0].get(2),p4[0].get(3), p4[0].get(0)), 321, 1 ));
+      vtx_chi_c0->add_particle_out( new HepMC::GenParticle( HepMC::FourVector(p4[1].get(1),p4[1].get(2),p4[1].get(3), p4[1].get(0)), -321, 1 ) );
+      vtx_chi_c0->add_particle_out( new HepMC::GenParticle( HepMC::FourVector(p4[2].get(1),p4[2].get(2),p4[2].get(3), p4[2].get(0)), 111, 1 ) );
+      vtx_chi_c0->add_particle_out( new HepMC::GenParticle( HepMC::FourVector(p4[3].get(1),p4[3].get(2),p4[3].get(3), p4[3].get(0)), 111, 1 ) );
+      
+      // evt->print(std::cout);
+      hepMC_out << evt;
+      delete evt;
+
+      /*      
+      massKpi.Fill( (p4[0]+p4[2]).mass(), 1.);
+      massKpi.Fill( (p4[0]+p4[3]).mass(), 1.);
+      massKpi.Fill( (p4[1]+p4[2]).mass(), 1.);
+      massKpi.Fill( (p4[1]+p4[3]).mass(), 1.);
+      
+      massKpipi.Fill( (p4[0]+p4[2]+p4[3]).mass(), 1.);
+      massKpipi.Fill( (p4[1]+p4[2]+p4[3]).mass(), 1.);
+      
+      cosThetapi.Fill( p4[2].get(3) /
+		       sqrt(p4[2].get(1)*p4[2].get(1) + p4[2].get(2)*p4[2].get(2) + p4[2].get(3)*p4[2].get(3)), 
+		       1.);
+      
+      cosThetaKpi.Fill( (p4[0]+p4[2]).get(3) /
+			sqrt((p4[0]+p4[2]).get(1)*(p4[0]+p4[2]).get(1) + 
+			     (p4[0]+p4[2]).get(2)*(p4[0]+p4[2]).get(2) + 
+			     (p4[0]+p4[2]).get(3)*(p4[0]+p4[2]).get(3)), 
+			1.);
+      */
     }
 
-    //    dalitz.Fill((p4[0]+p4[1])*(p4[0]+p4[1]), (p4[1]+p4[2])*(p4[1]+p4[2]));
-
-    HepMC::GenEvent* evt = new HepMC::GenEvent( 20, count );
-    evt->use_units(HepMC::Units::GEV, HepMC::Units::MM);
-
-    // create production vertex
-    HepMC::GenVertex* vtx_prod = new HepMC::GenVertex();
-    evt->add_vertex( vtx_prod );
-    HepMC::GenParticle* eplus_part = new HepMC::GenParticle( HepMC::FourVector(0., 0., pe_tot, sqrt(mass_e*mass_e+pe_tot*pe_tot)), -11, 3 );
-    HepMC::GenParticle* eminus_part = new HepMC::GenParticle( HepMC::FourVector(0., 0., -pe_tot, sqrt(mass_e*mass_e+pe_tot*pe_tot)), 11, 3 );
-    vtx_prod->add_particle_in( eplus_part );
-    vtx_prod->add_particle_in( eminus_part );
-
-    HepMC::GenParticle* psi2s_part=new HepMC::GenParticle( HepMC::FourVector(0., 0., 0., mass_psi2s), 20443, 999);
-    vtx_prod->add_particle_out(psi2s_part);
-
-    // create Psi(2S) vertex
-    HepMC::GenVertex* vtx_psi2S = new HepMC::GenVertex();
-    evt->add_vertex( vtx_psi2S );
-    vtx_psi2S->add_particle_in( psi2s_part );
-    HepMC::GenParticle* chi_c0_part = new HepMC::GenParticle(HepMC::FourVector(firstP4[0].get(1), firstP4[0].get(2), firstP4[0].get(3), firstP4[0].get(0)), 10441, 999 );
-    vtx_psi2S->add_particle_out(chi_c0_part);
-    vtx_psi2S->add_particle_out( new HepMC::GenParticle( HepMC::FourVector(firstP4[1].get(1), firstP4[1].get(2), firstP4[1].get(3), firstP4[1].get(0)), 22, 1 ) );
-
-
-    // now do the chi_c0 vertex
-    HepMC::GenVertex* vtx_chi_c0 = new HepMC::GenVertex();
-    evt->add_vertex( vtx_chi_c0 );
-    vtx_chi_c0->add_particle_in( chi_c0_part );
-    vtx_chi_c0->add_particle_out( new HepMC::GenParticle( HepMC::FourVector(p4[0].get(1),p4[0].get(2),p4[0].get(3), p4[0].get(0)), 321, 1 ));
-    vtx_chi_c0->add_particle_out( new HepMC::GenParticle( HepMC::FourVector(p4[1].get(1),p4[1].get(2),p4[1].get(3), p4[1].get(0)), -321, 1 ) );
-    vtx_chi_c0->add_particle_out( new HepMC::GenParticle( HepMC::FourVector(p4[2].get(1),p4[2].get(2),p4[2].get(3), p4[2].get(0)), 111, 1 ) );
-    vtx_chi_c0->add_particle_out( new HepMC::GenParticle( HepMC::FourVector(p4[3].get(1),p4[3].get(2),p4[3].get(3), p4[3].get(0)), 111, 1 ) );
-
-    // evt->print(std::cout);
-    hepMC_out << evt;
-    delete evt;
-
-    massKpi.Fill( (p4[0]+p4[2]).mass(), 1.);
-    massKpi.Fill( (p4[0]+p4[3]).mass(), 1.);
-    massKpi.Fill( (p4[1]+p4[2]).mass(), 1.);
-    massKpi.Fill( (p4[1]+p4[3]).mass(), 1.);
-
-    massKpipi.Fill( (p4[0]+p4[2]+p4[3]).mass(), 1.);
-    massKpipi.Fill( (p4[1]+p4[2]+p4[3]).mass(), 1.);
-
-    cosThetapi.Fill( p4[2].get(3) /
-		     sqrt(p4[2].get(1)*p4[2].get(1) + p4[2].get(2)*p4[2].get(2) + p4[2].get(3)*p4[2].get(3)), 
-		     1.);
-
-    cosThetaKpi.Fill( (p4[0]+p4[2]).get(3) /
-		     sqrt((p4[0]+p4[2]).get(1)*(p4[0]+p4[2]).get(1) + 
-			  (p4[0]+p4[2]).get(2)*(p4[0]+p4[2]).get(2) + 
-			  (p4[0]+p4[2]).get(3)*(p4[0]+p4[2]).get(3)), 
-		     1.);
+    cout << "Generated PHSP set " << set+1 << ", wrote to " << filename << endl;
+    
   }
-
+  
+  cout << endl;
   cout << "Finished!" << endl;
-//   massKpipi.Draw();
-//   rootapp->Run();
-
+  //   massKpipi.Draw();
+  //   rootapp->Run();
+  
   return 0;
 }