]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Changes to the AliFemto code for DEtaDPhi angular analysis. Adding Nsigma values...
authormajanik <majanik@cern.ch>
Wed, 23 Apr 2014 10:38:22 +0000 (12:38 +0200)
committermajanik <majanik@cern.ch>
Wed, 23 Apr 2014 10:38:22 +0000 (12:38 +0200)
13 files changed:
PWGCF/CMakelibPWGCFfemtoscopyUser.pkg
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoEventReaderAOD.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoTrack.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoTrack.h
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.cxx [new file with mode: 0644]
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.h [new file with mode: 0644]
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoESDTrackCut.cxx
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoESDTrackCut.h
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistance.cxx
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistance.h
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.cxx [new file with mode: 0644]
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.h [new file with mode: 0644]
PWGCF/PWGCFfemtoscopyUserLinkDef.h

index d365181a058d7ca8cf5fc997545c89afc14ea288..ba785fe23ea73944b064e156ae89f69f3d388b90 100644 (file)
@@ -25,7 +25,7 @@
 # SHLIBS - Shared Libraries and objects for linking (Executables only)           #
 #--------------------------------------------------------------------------------#
 
-set ( SRCS  FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityKTPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoESDTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoKKTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoTPCInnerCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoChi2CorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnSource.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelBPLCMSCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelGausRinvFreezeOutGenerator.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnTrueQ.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnNonIdDR.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DLCMSSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleMomRes.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelAllHiddenInfo.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCchiNdof.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQATrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQAEventCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCncls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDG.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnTPCNcls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnGammaMonitor.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQinvCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctn3DSphericalEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoBPLCMS3DCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutAntiGamma.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleEtCorr.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistance.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutPt.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAvgSepCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDGV0.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAnalysisAzimuthalPbPb.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceLM.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPicoEventRP.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceKK.cxx)
+set ( SRCS  FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityKTPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoESDTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoKKTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoTPCInnerCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoChi2CorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnSource.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelBPLCMSCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelGausRinvFreezeOutGenerator.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnTrueQ.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnNonIdDR.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DLCMSSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleMomRes.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelAllHiddenInfo.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCchiNdof.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQATrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQAEventCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCncls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDG.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnTPCNcls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnGammaMonitor.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQinvCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctn3DSphericalEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoBPLCMS3DCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutAntiGamma.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleEtCorr.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistance.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutPt.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAvgSepCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDGV0.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAnalysisAzimuthalPbPb.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceLM.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPicoEventRP.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceKK.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.cxx)
 
 string ( REPLACE ".cxx" ".h" HDRS "${SRCS}" )
 
index f4e7ed0604940ddd45d98af6c00d03011891e682..c5b2a0b67d5f650f2c1bb0d5d6f17101020f5982 100644 (file)
@@ -1335,6 +1335,7 @@ void AliFemtoEventReaderAOD::CopyPIDtoFemtoTrack(AliAODTrack *tAodTrack,
   float nsigmaTPCK=-1000.;
   float nsigmaTPCPi=-1000.;
   float nsigmaTPCP=-1000.;
+  float nsigmaTPCE=-1000.;
 
   //   cout<<"in reader fESDpid"<<fESDpid<<endl;
 
@@ -1342,11 +1343,13 @@ void AliFemtoEventReaderAOD::CopyPIDtoFemtoTrack(AliAODTrack *tAodTrack,
     nsigmaTPCK = fAODpidUtil->NumberOfSigmasTPC(tAodTrack,AliPID::kKaon);
     nsigmaTPCPi = fAODpidUtil->NumberOfSigmasTPC(tAodTrack,AliPID::kPion);
     nsigmaTPCP = fAODpidUtil->NumberOfSigmasTPC(tAodTrack,AliPID::kProton);
+    nsigmaTPCE = fAODpidUtil->NumberOfSigmasTPC(tAodTrack,AliPID::kElectron);
   }
 
   tFemtoTrack->SetNSigmaTPCPi(nsigmaTPCPi);
   tFemtoTrack->SetNSigmaTPCK(nsigmaTPCK);
   tFemtoTrack->SetNSigmaTPCP(nsigmaTPCP);
+  tFemtoTrack->SetNSigmaTPCE(nsigmaTPCE);
 
   tFemtoTrack->SetTPCchi2(tAodTrack->Chi2perNDF());
   tFemtoTrack->SetTPCncls(tAodTrack->GetTPCNcls());
@@ -1362,6 +1365,7 @@ void AliFemtoEventReaderAOD::CopyPIDtoFemtoTrack(AliAODTrack *tAodTrack,
   float nsigmaTOFPi=-1000.;
   float nsigmaTOFK=-1000.;
   float nsigmaTOFP=-1000.;
+  float nsigmaTOFE=-1000.;
 
   if ((tAodTrack->GetStatus() & AliESDtrack::kTOFpid) && //AliESDtrack::kTOFpid=0x8000
       (tAodTrack->GetStatus() & AliESDtrack::kTOFout) && //AliESDtrack::kTOFout=0x2000
@@ -1374,6 +1378,7 @@ void AliFemtoEventReaderAOD::CopyPIDtoFemtoTrack(AliAODTrack *tAodTrack,
            nsigmaTOFPi = fAODpidUtil->NumberOfSigmasTOF(tAodTrack,AliPID::kPion);
            nsigmaTOFK = fAODpidUtil->NumberOfSigmasTOF(tAodTrack,AliPID::kKaon);
            nsigmaTOFP = fAODpidUtil->NumberOfSigmasTOF(tAodTrack,AliPID::kProton);
+           nsigmaTOFE = fAODpidUtil->NumberOfSigmasTOF(tAodTrack,AliPID::kElectron);
 
            Double_t len=200;// esdtrack->GetIntegratedLength(); !!!!!
            Double_t tof=tAodTrack->GetTOFsignal();
@@ -1384,6 +1389,7 @@ void AliFemtoEventReaderAOD::CopyPIDtoFemtoTrack(AliAODTrack *tAodTrack,
   tFemtoTrack->SetNSigmaTOFPi(nsigmaTOFPi);
   tFemtoTrack->SetNSigmaTOFK(nsigmaTOFK);
   tFemtoTrack->SetNSigmaTOFP(nsigmaTOFP);
+  tFemtoTrack->SetNSigmaTOFE(nsigmaTOFE);
 
 
   //////////////////////////////////////
index 31f68b136b9b4a128db28cd360f1d4fe6972cd98..808a3f00d58e425ec83fe6b5d70b5dfd4f35c77a 100644 (file)
@@ -59,9 +59,11 @@ AliFemtoTrack::AliFemtoTrack():
   fNSigmaTPCPi(0),
   fNSigmaTPCK(0),
   fNSigmaTPCP(0),
+  fNSigmaTPCE(0),
   fNSigmaTOFPi(0),
   fNSigmaTOFK(0),
   fNSigmaTOFP(0),
+  fNSigmaTOFE(0),
   fSigmaToVertex(0),
   fClusters(159),
   fShared(159),
@@ -134,9 +136,11 @@ AliFemtoTrack::AliFemtoTrack(const AliFemtoTrack& t) :
   fNSigmaTPCPi(0),
   fNSigmaTPCK(0),
   fNSigmaTPCP(0),
+  fNSigmaTPCE(0),
   fNSigmaTOFPi(0),
   fNSigmaTOFK(0),
   fNSigmaTOFP(0),
+  fNSigmaTOFE(0),
   fSigmaToVertex(0),
   fClusters(159),
   fShared(159),
@@ -189,9 +193,11 @@ AliFemtoTrack::AliFemtoTrack(const AliFemtoTrack& t) :
   fNSigmaTPCPi=t.fNSigmaTPCPi;
   fNSigmaTPCK=t.fNSigmaTPCK;
   fNSigmaTPCP=t.fNSigmaTPCP;
+  fNSigmaTPCE=t.fNSigmaTPCE;
   fNSigmaTOFPi=t.fNSigmaTOFPi;
   fNSigmaTOFK=t.fNSigmaTOFK;
   fNSigmaTOFP=t.fNSigmaTOFP;
+  fNSigmaTOFE=t.fNSigmaTOFE;
   fSigmaToVertex=t.fSigmaToVertex;
   fClusters=t.fClusters;
   fShared=t.fShared;
@@ -281,9 +287,11 @@ AliFemtoTrack& AliFemtoTrack::operator=(const AliFemtoTrack& aTrack)
   fNSigmaTPCPi=aTrack.fNSigmaTPCPi;    
   fNSigmaTPCK=aTrack.fNSigmaTPCK;    
   fNSigmaTPCP=aTrack.fNSigmaTPCP;    
+  fNSigmaTPCE=aTrack.fNSigmaTPCE;    
   fNSigmaTOFPi=aTrack.fNSigmaTOFPi;    
   fNSigmaTOFK=aTrack.fNSigmaTOFK;    
   fNSigmaTOFP=aTrack.fNSigmaTOFP;    
+  fNSigmaTOFE=aTrack.fNSigmaTOFE;    
   fClusters=aTrack.fClusters;
   fShared=aTrack.fShared;
   fNominalTpcEntrancePoint=aTrack.fNominalTpcEntrancePoint;
@@ -384,9 +392,11 @@ void AliFemtoTrack::SetVTOF(const float& aVTOF){fVTOF=aVTOF;}
 void AliFemtoTrack::SetNSigmaTPCPi(const float& aNSigmaTPCPi){fNSigmaTPCPi=aNSigmaTPCPi;}
 void AliFemtoTrack::SetNSigmaTPCK(const float& aNSigmaTPCK){fNSigmaTPCK=aNSigmaTPCK;}
 void AliFemtoTrack::SetNSigmaTPCP(const float& aNSigmaTPCP){fNSigmaTPCP=aNSigmaTPCP;}
+void AliFemtoTrack::SetNSigmaTPCE(const float& aNSigmaTPCE){fNSigmaTPCE=aNSigmaTPCE;}
 void AliFemtoTrack::SetNSigmaTOFPi(const float& aNSigmaTOFPi){fNSigmaTOFPi=aNSigmaTOFPi;}
 void AliFemtoTrack::SetNSigmaTOFK(const float& aNSigmaTOFK){fNSigmaTOFK=aNSigmaTOFK;}
 void AliFemtoTrack::SetNSigmaTOFP(const float& aNSigmaTOFP){fNSigmaTOFP=aNSigmaTOFP;}
+void AliFemtoTrack::SetNSigmaTOFE(const float& aNSigmaTOFE){fNSigmaTOFE=aNSigmaTOFE;}
 void AliFemtoTrack::SetSigmaToVertex(const float& aSigma){fSigmaToVertex=aSigma;} 
 
 void AliFemtoTrack::SetXatDCA(const double& x) {fXatDCA=x;}
@@ -424,9 +434,11 @@ float AliFemtoTrack::VTOF() const{return fVTOF;}
 float AliFemtoTrack::NSigmaTPCPi() const{return fNSigmaTPCPi;}
 float AliFemtoTrack::NSigmaTPCK() const{return fNSigmaTPCK;}
 float AliFemtoTrack::NSigmaTPCP() const{return fNSigmaTPCP;}
+float AliFemtoTrack::NSigmaTPCE() const{return fNSigmaTPCE;}
 float AliFemtoTrack::NSigmaTOFPi() const{return fNSigmaTOFPi;}
 float AliFemtoTrack::NSigmaTOFK() const{return fNSigmaTOFK;}
 float AliFemtoTrack::NSigmaTOFP() const{return fNSigmaTOFP;}
+float AliFemtoTrack::NSigmaTOFE() const{return fNSigmaTOFE;}
 float AliFemtoTrack::SigmaToVertex() const{return fSigmaToVertex;} 
 float AliFemtoTrack::TOFpionTime() const{return fTofPionTime;}
 float AliFemtoTrack::TOFkaonTime() const{return fTofKaonTime;}
index b3b491a3bd0db0694849845e9c64022898eefab3..69f38958c47ec247fad84510c4e030029eb99cd0 100644 (file)
@@ -80,10 +80,12 @@ public:
   float NSigmaTPCPi() const;   
   float NSigmaTPCK() const;   
   float NSigmaTPCP() const;   
+  float NSigmaTPCE() const;   
   float VTOF() const;   
   float NSigmaTOFPi() const;   
   float NSigmaTOFK() const;   
   float NSigmaTOFP() const;   
+  float NSigmaTOFE() const;   
 
 
   float TOFpionTime() const;
@@ -136,10 +138,12 @@ public:
   void SetNSigmaTPCPi(const float& x);   
   void SetNSigmaTPCK(const float& x);   
   void SetNSigmaTPCP(const float& x);   
+  void SetNSigmaTPCE(const float& x);   
   void SetVTOF(const float& x);   
   void SetNSigmaTOFPi(const float& x);   
   void SetNSigmaTOFK(const float& x);   
-  void SetNSigmaTOFP(const float& x);  
+  void SetNSigmaTOFP(const float& x);   
+  void SetNSigmaTOFE(const float& x);  
 
   void SetTPCcluster(const short& aNBit, const Bool_t& aValue);
   void SetTPCshared(const short& aNBit, const Bool_t& aValue);
@@ -252,9 +256,11 @@ public:
   float fNSigmaTPCPi;     // nsigma TPC for pion
   float fNSigmaTPCK;     // nsigma TPC for K
   float fNSigmaTPCP;     // nsigma TPC for P
+  float fNSigmaTPCE;     // nsigma TPC for electron
   float fNSigmaTOFPi;     // nsigma TPC for pion
   float fNSigmaTOFK;     // nsigma TPC for K
   float fNSigmaTOFP;     // nsigma TPC for P
+  float fNSigmaTOFE;     // nsigma TPC for electron
 
   float fSigmaToVertex;  // Distance from track to vertex in sigmas
   TBits fClusters;       // Cluster per padrow map
diff --git a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.cxx b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.cxx
new file mode 100644 (file)
index 0000000..5238637
--- /dev/null
@@ -0,0 +1,208 @@
+////////////////////////////////////////////////////////////////////////////////
+//                                                                            //
+// AliFemtoCorrFctnGammaMonitor - A correlation function that analyzes            //
+// two particle mass minvariant with various mass assumptions                     //
+//                                                                            //
+// Authors: MaƂgorzata Janik majanik@cern.ch
+//          Anna Zaborowska azaborow@cern.ch                                   //
+//                                                                            //
+////////////////////////////////////////////////////////////////////////////////
+
+#include "AliFemtoCorrFctnMinvMonitor.h"
+#include <cstdio>
+#include <TMath.h>
+
+#ifdef __ROOT__
+ClassImp(AliFemtoCorrFctnMinvMonitor)
+#endif
+
+//____________________________
+AliFemtoCorrFctnMinvMonitor::AliFemtoCorrFctnMinvMonitor(char* title):
+   AliFemtoCorrFctn(),
+   fMinveeFail(0),
+   fMinvee(0),
+   fMinv2piFail(0),
+   fMinv2pi(0),
+   fMinvppiFail(0),
+   fMinvppi(0)
+{
+  fMinveeFail = new TH1D(Form("MinveeGamma%s",title), "ee mass assumption GAMMA, minv",1000, 0.0, 10.0);
+   fMinvee = new TH1D(Form("Minvee%s",title), "ee mass assumption, minv",1000, 0.0, 10.0);
+   fMinv2piFail = new TH1D(Form("Minv2piResonances%s",title), "pipi mass assumption RESONANCES, minv",1000, 0.0, 10.0);
+   fMinv2pi = new TH1D(Form("Minv2pi%s",title), "pipi mass assumption, minv",1000, 0.0, 10.0);
+   fMinvppiFail = new TH1D(Form("MinvppiResonances%s",title), "ppi mass assumption RESONANCES, minv",1000, 0.0, 10.0);
+   fMinvppi = new TH1D(Form("Minvppi%s",title), "ppi mass assumption, minv",1000, 0.0, 10.0);
+}
+
+//____________________________
+AliFemtoCorrFctnMinvMonitor::AliFemtoCorrFctnMinvMonitor(const AliFemtoCorrFctnMinvMonitor& aCorrFctn) :
+  AliFemtoCorrFctn(),
+   fMinveeFail(0),
+   fMinvee(0),
+   fMinv2piFail(0),
+   fMinv2pi(0),
+   fMinvppiFail(0),
+   fMinvppi(0)
+{
+  // copy constructor
+  if (fMinveeFail) delete fMinveeFail;
+  fMinveeFail = new TH1D(*aCorrFctn.fMinveeFail);
+  if (fMinvee) delete fMinvee;
+  fMinvee = new TH1D(*aCorrFctn.fMinvee);
+  if (fMinv2piFail) delete fMinv2piFail;
+  fMinv2piFail = new TH1D(*aCorrFctn.fMinv2piFail);
+  if (fMinv2pi) delete fMinv2pi;
+  fMinv2pi = new TH1D(*aCorrFctn.fMinv2pi);
+  if (fMinvppiFail) delete fMinvppiFail;
+  fMinvppiFail = new TH1D(*aCorrFctn.fMinvppiFail);
+  if (fMinvppi) delete fMinvppi;
+  fMinvppi = new TH1D(*aCorrFctn.fMinvppi);
+}
+//____________________________
+AliFemtoCorrFctnMinvMonitor::~AliFemtoCorrFctnMinvMonitor(){
+  // destructor
+    delete fMinveeFail;
+  delete fMinvee;
+  delete fMinv2piFail;
+  delete fMinv2pi;
+  delete fMinvppiFail;
+  delete fMinvppi;
+}
+//_________________________
+AliFemtoCorrFctnMinvMonitor& AliFemtoCorrFctnMinvMonitor::operator=(const AliFemtoCorrFctnMinvMonitor& aCorrFctn)
+{
+  // assignment operator
+  if (this == &aCorrFctn)
+    return *this;
+
+  if (fMinveeFail) delete fMinveeFail;
+  fMinveeFail = new TH1D(*aCorrFctn.fMinveeFail);
+  if (fMinvee) delete fMinvee;
+  fMinvee = new TH1D(*aCorrFctn.fMinvee);
+  if (fMinv2piFail) delete fMinv2piFail;
+  fMinv2piFail = new TH1D(*aCorrFctn.fMinv2piFail);
+  if (fMinv2pi) delete fMinv2pi;
+  fMinv2pi = new TH1D(*aCorrFctn.fMinv2pi);
+  if (fMinvppiFail) delete fMinvppiFail;
+  fMinvppiFail = new TH1D(*aCorrFctn.fMinvppiFail);
+  if (fMinvppi) delete fMinvppi;
+  fMinvppi = new TH1D(*aCorrFctn.fMinvppi);
+
+  return *this;
+}
+//_________________________
+void AliFemtoCorrFctnMinvMonitor::Finish(){
+  // here is where we should normalize, fit, etc...
+  // we should NOT Draw() the histos (as I had done it below),
+  // since we want to insulate ourselves from root at this level
+  // of the code.  Do it instead at root command line with browser.
+  //  mShareNumerator->Draw();
+  //mShareDenominator->Draw();
+  //mRatio->Draw();
+
+}
+
+//____________________________
+AliFemtoString AliFemtoCorrFctnMinvMonitor::Report(){
+  // create report
+  string stemp = "Mass invariant Monitor Function Report\n";
+  AliFemtoString returnThis = stemp;
+  return returnThis;
+}
+//____________________________
+void AliFemtoCorrFctnMinvMonitor::AddRealPair( AliFemtoPair* pair){
+   double me = 0.000511;
+  double mPi = 0.13957018;
+  double mp = 0.938272046;
+
+  double mgammamax = 0.04;
+  double mK0min = 0.00049;
+  double mK0max = 0.00051;
+  double mK0 = 0.000497614;
+  double mRhomin = 0.000765;
+  double mRhomax = 0.000785;
+  double mRho = 0.00077526;
+  double mLmin = 1.095;
+  double mLmax = 1.135;
+  double mL = 1.115683;
+
+  if ((pair->Track1()->Track()->Charge() * pair->Track2()->Track()->Charge()) < 0.0) {
+
+    // check on ee pairs (gamma)
+    double e1 = TMath::Sqrt(me*me + pair->Track1()->Track()->P().Mag2());
+    double e2 = TMath::Sqrt(me*me + pair->Track2()->Track()->P().Mag2());
+    double minvGamma = 2*me*me + 2*(e1*e2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    if ( minvGamma < mgammamax )
+    {
+       fMinveeFail->Fill(minvGamma);
+    }
+    else fMinvee->Fill(minvGamma);
+    //check on resonances
+    double pi1 =  TMath::Sqrt(mPi*mPi + pair->Track1()->Track()->P().Mag2());
+    double pi2 =  TMath::Sqrt(mPi*mPi + pair->Track2()->Track()->P().Mag2());
+    double p1 =  TMath::Sqrt(mp*mp + pair->Track1()->Track()->P().Mag2());
+    double p2 =  TMath::Sqrt(mp*mp + pair->Track2()->Track()->P().Mag2());
+    //check on K0 and Rho
+    double minv2pi = 2*mPi*mPi + 2*(pi1*pi2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    if ( ((minv2pi>mK0min && minv2pi<mK0max) || (minv2pi>mRhomin && minv2pi<mRhomax)) )
+    {
+       fMinv2piFail->Fill(minv2pi);
+    }
+    else fMinv2pi->Fill(minv2pi);
+    //check on L0
+    double minvpPi = 2*mp*mPi + 2*(p1*pi2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    double minvPip = 2*mPi*mp + 2*(pi1*p2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    if( (minvpPi>mLmin) && (minvpPi<mLmax) )
+    {
+       fMinvppiFail->Fill(minvpPi);
+    }
+    else fMinvppi->Fill(minvpPi);
+    if( (minvPip>mLmin) && (minvPip<mLmax) )
+    {
+       fMinvppiFail->Fill(minvPip);
+    }
+    else fMinvppi->Fill(minvPip);
+  }
+}
+//____________________________
+void AliFemtoCorrFctnMinvMonitor::AddMixedPair( AliFemtoPair* pair){
+  }
+
+
+void AliFemtoCorrFctnMinvMonitor::WriteHistos()
+{
+  // Write out result histograms
+  fMinveeFail->Write();
+  fMinvee->Write();
+  fMinv2piFail->Write();
+  fMinv2pi->Write();
+  fMinvppiFail->Write();
+  fMinvppi->Write();
+}
+
+TList* AliFemtoCorrFctnMinvMonitor::GetOutputList()
+{
+  // Prepare the list of objects to be written to the output
+  TList *tOutputList = new TList();
+
+  tOutputList->Add(fMinveeFail);
+  tOutputList->Add(fMinvee);
+  tOutputList->Add(fMinv2piFail);
+  tOutputList->Add(fMinv2pi);
+  tOutputList->Add(fMinvppiFail);
+  tOutputList->Add(fMinvppi);
+
+  return tOutputList;
+}
diff --git a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.h b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.h
new file mode 100644 (file)
index 0000000..22b1f99
--- /dev/null
@@ -0,0 +1,49 @@
+////////////////////////////////////////////////////////////////////////////////
+//                                                                            //
+// AliFemtoCorrFctnGammaMonitor - A correlation function that analyzes            //
+// two particle mass minvariant with various mass assumptions                     //
+//                                                                            //
+// Authors: MaƂgorzata Janik majanik@cern.ch
+//          Anna Zaborowska azaborow@cern.ch                                   //
+//                                                                            //
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef ALIFEMTOCORRFCTNMINVMONITOR_H
+#define ALIFEMTOCORRFCTNMINVMONITOR_H
+
+#include "TH1D.h"
+#include "AliFemtoCorrFctn.h"
+
+class AliFemtoCorrFctnMinvMonitor : public AliFemtoCorrFctn {
+public:
+  AliFemtoCorrFctnMinvMonitor(char* title);
+  AliFemtoCorrFctnMinvMonitor(const AliFemtoCorrFctnMinvMonitor& aCorrFctn);
+  virtual ~AliFemtoCorrFctnMinvMonitor();
+
+  AliFemtoCorrFctnMinvMonitor& operator=(const AliFemtoCorrFctnMinvMonitor& aCorrFctn);
+
+  virtual AliFemtoString Report();
+  virtual void AddRealPair(AliFemtoPair* aPair);
+  virtual void AddMixedPair(AliFemtoPair* aPair);
+
+  virtual void Finish();
+
+  void WriteHistos();
+  virtual TList* GetOutputList();
+private:
+  
+  TH1D *fMinveeFail;   // ee mass assumption - failed pairs
+  TH1D *fMinvee;   // ee mass assumption - passed pairs
+  TH1D *fMinv2piFail;   // 2 pi mass assumption - failed pairs
+  TH1D *fMinv2pi;   // 2 pi mass assumption - passed pairs
+  TH1D *fMinvppiFail;   // p pi mass assumption - failed pairs
+  TH1D *fMinvppi;   // p pi mass assumption - passed pairs
+
+#ifdef __ROOT__
+  ClassDef(AliFemtoCorrFctnMinvMonitor, 1)
+#endif
+};
+
+
+#endif
+
index f0a9c78c86453714f0a080be94c81b2e866af35c..d01f333aa6f6f0d3cf8b4a8d3d1d6957932ef39a 100644 (file)
@@ -113,7 +113,8 @@ ClassImp(AliFemtoESDTrackCut)
     fMinPforTPCpid(0.0),
     fMaxPforTPCpid(10000.0),
     fMinPforITSpid(0.0),
-    fMaxPforITSpid(10000.0)
+   fMaxPforITSpid(10000.0),
+   fElectronRejection(0)
 {
   // Default constructor
   fNTracksPassed = fNTracksFailed = 0;
@@ -359,6 +360,10 @@ bool AliFemtoESDTrackCut::Pass(const AliFemtoTrack* track)
     tMost[4] = track->PidProbProton()*PidFractionProton(track->P().Mag());
     float ipidmax = 0.0;
 
+    //****N Sigma Method -- electron rejection****
+    if(fElectronRejection) 
+      if(!IsElectron(track->NSigmaTPCE(),track->NSigmaTPCPi(),track->NSigmaTPCK(), track->NSigmaTPCP())) 
+       return false;
 
     //****N Sigma Method****
        if(fPIDMethod==0){
@@ -1042,6 +1047,7 @@ void AliFemtoESDTrackCut::SetNsigma(Double_t nsigma)
   fNsigma = nsigma;
 }
 
+
 void AliFemtoESDTrackCut::SetClusterRequirementITS(AliESDtrackCuts::Detector det, AliESDtrackCuts::ITSClusterRequirement req)
 {
   fCutClusterRequirementITS[det] = req;
@@ -1065,3 +1071,11 @@ Bool_t AliFemtoESDTrackCut::CheckITSClusterRequirement(AliESDtrackCuts::ITSClust
 
   return kFALSE;
 }
+
+bool AliFemtoESDTrackCut::IsElectron(float nsigmaTPCE, float nsigmaTPCPi,float nsigmaTPCK, float nsigmaTPCP)
+{
+   if(nsigmaTPCE<3 && nsigmaTPCPi>3 && nsigmaTPCK>3 && nsigmaTPCP>3)
+      return false;
+   else
+     return true;
+}
index 01da48863e8513bfe00a8f04d1bc80d7709d3b7c..f42a619954b951abaa92e3ff6ca5554555bca1b9 100644 (file)
@@ -1,12 +1,7 @@
 ///////////////////////////////////////////////////////////////////////////
 //                                                                       //
 // AliFemtoESDTrackCut: A basic track cut that used information from     //
-// ALICE ESD to accept or reject the track.                              //
-// Enables the selection on charge, transverse momentum, rapidity,       //
-// pid probabilities, number of ITS and TPC clusters                     //
-// Author: Marek Chojnacki (WUT), mchojnacki@knf.pw.edu.pl               //
-//                                                                       //
-///////////////////////////////////////////////////////////////////////////
+// ALICE ESD to accept or reject the track.                             ////////////////////////////////////////////////
 #include "AliESDtrackCuts.h"
 
 #ifndef ALIFEMTOESDTRACKCUT_H
@@ -73,6 +68,7 @@ class AliFemtoESDTrackCut : public AliFemtoTrackCut
   void SetMomRangeTOFpidIs(const float& minp, const float& maxp);
   void SetMomRangeTPCpidIs(const float& minp, const float& maxp);
   void SetMomRangeITSpidIs(const float& minp, const float& maxp);
+  void SetElectronRejection(Bool_t);
 
  private:   // here are the quantities I want to cut on...
 
@@ -120,6 +116,7 @@ class AliFemtoESDTrackCut : public AliFemtoTrackCut
   float             fMaxPforTPCpid;  // momentum till which TPC PID is requested
   float             fMinPforITSpid;  // momentum from which ITS PID is requested
   float             fMaxPforITSpid;  // momentum till which ITS PID is requested
+  bool fElectronRejection;
 
   float PidFractionElectron(float mom) const;
   float PidFractionPion(float mom) const;
@@ -139,6 +136,7 @@ class AliFemtoESDTrackCut : public AliFemtoTrackCut
   bool IsKaonNSigma(float mom, float nsigmaTPC, float nsigmaTOF);
   bool IsPionNSigma(float mom, float nsigmaTPC, float nsigmaTOF);
   bool IsProtonNSigma(float mom, float nsigmaTPC, float nsigmaTOF);
+  bool IsElectron(float nsigmaTPCE, float nsigmaTPCPi,float nsigmaTPCK, float nsigmaTPCP);
 
   Bool_t CheckITSClusterRequirement(AliESDtrackCuts::ITSClusterRequirement req, Bool_t clusterL1, Bool_t clusterL2); //the same as in AliESDtrackCuts
 
@@ -156,7 +154,8 @@ inline void AliFemtoESDTrackCut::SetCharge(const int& ch){fCharge = ch;}
 inline void AliFemtoESDTrackCut::SetPidProbElectron(const float& lo,const float& hi){fPidProbElectron[0]=lo; fPidProbElectron[1]=hi;}
 inline void AliFemtoESDTrackCut::SetPidProbPion(const float& lo,const float& hi){fPidProbPion[0]=lo; fPidProbPion[1]=hi;}
 inline void AliFemtoESDTrackCut::SetPidProbKaon(const float& lo,const float& hi){fPidProbKaon[0]=lo; fPidProbKaon[1]=hi;}
-inline void AliFemtoESDTrackCut::SetPidProbProton(const float& lo,const float& hi){fPidProbProton[0]=lo; fPidProbProton[1]=hi;}
+inline void AliFemtoESDTrackCut::SetPidProbProton
+(const float& lo,const float& hi){fPidProbProton[0]=lo; fPidProbProton[1]=hi;}
 inline void AliFemtoESDTrackCut::SetPidProbMuon(const float& lo,const float& hi){fPidProbMuon[0]=lo; fPidProbMuon[1]=hi;}
 inline void AliFemtoESDTrackCut::SetLabel(const bool& flag){fLabel=flag;}
 inline void AliFemtoESDTrackCut::SetStatus(const long& status){fStatus=status;}
@@ -175,6 +174,6 @@ inline void AliFemtoESDTrackCut::SetMaxImpactXY(const float& maximpxy) { fMaxImp
 inline void AliFemtoESDTrackCut::SetMinImpactXY(const float& minimpxy) { fMinImpactXY = minimpxy; }
 inline void AliFemtoESDTrackCut::SetMaxImpactXYPtDep(const float& maxoff, const float& maxnrm, const float& maxpow) { fMaxImpactXYPtOff = maxoff; fMaxImpactXYPtNrm = maxnrm; fMaxImpactXYPtPow = maxpow; }
 inline void AliFemtoESDTrackCut::SetMaxImpactZ(const float& maximpz) { fMaxImpactZ = maximpz; }
-
+inline void AliFemtoESDTrackCut::SetElectronRejection(Bool_t setE) { fElectronRejection = setE; }
 
 #endif
index e67581a7b576e0bed0ddf6444855210beddb2617..2dbdfdbef9d1e91166b31a8518952be23fc58dd4 100644 (file)
@@ -28,6 +28,7 @@ AliFemtoPairCutAntiGamma(),
   fDPhiStarMin(0),
   fEtaMin(0),
   fMinRad(0.8),
+  fMaxRad(2.5),
   fMagSign(1),
   fPhistarmin(kTRUE)
 {
@@ -38,12 +39,14 @@ AliFemtoPairCutRadialDistance::AliFemtoPairCutRadialDistance(const AliFemtoPairC
   fDPhiStarMin(0),
   fEtaMin(0),
   fMinRad(0.8),
+  fMaxRad(2.5),
   fMagSign(1),
   fPhistarmin(kTRUE)
 {
   fDPhiStarMin = c.fDPhiStarMin;
   fEtaMin = c.fEtaMin;
   fMinRad = c.fMinRad;
+  fMaxRad = c.fMaxRad;
   fMagSign = c.fMagSign;
   fPhistarmin = c.fPhistarmin;
 }
@@ -58,6 +61,7 @@ AliFemtoPairCutRadialDistance& AliFemtoPairCutRadialDistance::operator=(const Al
     fDPhiStarMin = c.fDPhiStarMin;
     fEtaMin = c.fEtaMin;
     fMinRad = c.fMinRad;
+    fMaxRad = c.fMaxRad;
     fMagSign = c.fMagSign;
     fPhistarmin = c.fPhistarmin;
 
@@ -94,6 +98,7 @@ bool AliFemtoPairCutRadialDistance::Pass(const AliFemtoPair* pair){
   else {
     AliAODEvent *fAOD;
     fAOD = aodH->GetEvent();
+    //cout<<fAOD<<endl;
     magsign = fAOD->GetMagneticField();
   }
 
@@ -112,7 +117,7 @@ bool AliFemtoPairCutRadialDistance::Pass(const AliFemtoPair* pair){
   rad = fMinRad;
 
   if (fPhistarmin) {
-    for (rad = 0.8; rad < 2.5; rad += 0.01) {
+    for (rad = fMinRad; rad < fMaxRad; rad += 0.01) {
       Double_t dps = (phi2-phi1+(TMath::ASin(-0.075*chg2*fMagSign*rad/ptv2))-(TMath::ASin(-0.075*chg1*fMagSign*rad/ptv1)));
       dps = TVector2::Phi_mpi_pi(dps);
       Double_t etad = eta2 - eta1;
@@ -189,6 +194,11 @@ void AliFemtoPairCutRadialDistance::SetMinimumRadius(double minrad)
   fMinRad = minrad;
 }
 
+void AliFemtoPairCutRadialDistance::SetMaximumRadius(double maxrad)
+{
+  fMaxRad = maxrad;
+}
+
 void AliFemtoPairCutRadialDistance::SetMagneticFieldSign(int magsign)
 {
   if(magsign>1) fMagSign = 1;
index e5370be58ca47ede2fd6e7eb06b0e338ee1d2597..a65e5019193e04ea3bca6fe400384ea0ae300222 100644 (file)
@@ -45,6 +45,7 @@ public:
   void SetPhiStarDifferenceMinimum(double dtpc);
   void SetEtaDifferenceMinimum(double etpc);
   void SetMinimumRadius(double minrad);
+  void SetMaximumRadius(double maxrad);
   void SetMagneticFieldSign(int magsign);
   void SetPhiStarMin(Bool_t);
 
@@ -54,6 +55,7 @@ public:
   //Double_t fRadius;           // Radius at which the separation is calculated
   Double_t fEtaMin;           // Minimum allowed pair separation in eta
   Double_t fMinRad;
+  Double_t fMaxRad;
   Int_t fMagSign;
   Bool_t fPhistarmin;
 
diff --git a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.cxx b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.cxx
new file mode 100644 (file)
index 0000000..74fda38
--- /dev/null
@@ -0,0 +1,189 @@
+/////////////////////////////////////////////////////////////////////////////
+//                                                                         //
+// AliFemtoPairCutResonances - a pair cut which checks     //
+// for some pair qualities that attempt to identify slit/doubly            //
+// reconstructed tracks and also selects pairs based on their separation   //
+// at the entrance to the TPC                                              //
+//                                                                         //
+/////////////////////////////////////////////////////////////////////////////
+
+#include "AliFemtoPairCutResonances.h"
+#include <string>
+#include <cstdio>
+#include <TMath.h>
+
+#ifdef __ROOT__
+ClassImp(AliFemtoPairCutResonances)
+#endif
+
+//__________________
+AliFemtoPairCutResonances::AliFemtoPairCutResonances():
+   AliFemtoShareQualityPairCut(),
+   fMaxEEMinv(0.0),
+   fMaxDTheta(0.0),
+   fDataType(kAOD),
+   fSwitchPassFail(0)
+{
+}
+//__________________
+AliFemtoPairCutResonances::AliFemtoPairCutResonances(const AliFemtoPairCutResonances& c) : 
+  AliFemtoShareQualityPairCut(c),
+  fMaxEEMinv(0.0),
+  fMaxDTheta(0.0),
+  fDataType(kAOD),
+  fSwitchPassFail(0)
+{
+  fMaxEEMinv = c.fMaxEEMinv;
+  fMaxDTheta = c.fMaxDTheta;
+  fDataType = c.fDataType;
+  fSwitchPassFail=c.fSwitchPassFail;
+}
+
+AliFemtoPairCutResonances& AliFemtoPairCutResonances::operator=(const AliFemtoPairCutResonances& c)
+{
+  if (this != &c) {
+    fMaxEEMinv = c.fMaxEEMinv;
+    fMaxDTheta = c.fMaxDTheta;
+    fDataType = c.fDataType;
+    fSwitchPassFail=c.fSwitchPassFail;
+  }
+
+  return *this;
+
+}
+//__________________
+AliFemtoPairCutResonances::~AliFemtoPairCutResonances(){
+}
+//__________________
+bool AliFemtoPairCutResonances::Pass(const AliFemtoPair* pair){
+  // Accept pairs based on their TPC entrance separation and
+  // quality and sharity
+  bool temp = true;
+
+  if(fDataType==kKine)
+    return true;
+
+  double me = 0.000511;
+  double mPi = 0.13957018;
+  double mp = 0.938272046;
+
+  double mK0min = 0.00049;
+  double mK0max = 0.00051;
+  double mK0 = 0.000497614;
+  double mRhomin = 0.000765;
+  double mRhomax = 0.000785;
+  double mRho = 0.00077526;
+  double mLmin = 1.095;
+  double mLmax = 1.135;
+  double mL = 1.115683;
+
+  if ((pair->Track1()->Track()->Charge() * pair->Track2()->Track()->Charge()) < 0.0) {
+    double theta1 = pair->Track1()->Track()->P().Theta();
+    double theta2 = pair->Track2()->Track()->P().Theta();
+    double dtheta = TMath::Abs(theta1 - theta2);
+
+    // check on ee pairs (gamma)
+    double e1 = TMath::Sqrt(me*me + pair->Track1()->Track()->P().Mag2());
+    double e2 = TMath::Sqrt(me*me + pair->Track2()->Track()->P().Mag2());
+    double minvGamma = 2*me*me + 2*(e1*e2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    if ( minvGamma < fMaxEEMinv )
+       temp = false;
+    //check on resonances
+    double pi1 =  TMath::Sqrt(mPi*mPi + pair->Track1()->Track()->P().Mag2());
+    double pi2 =  TMath::Sqrt(mPi*mPi + pair->Track2()->Track()->P().Mag2());
+    double p1 =  TMath::Sqrt(mp*mp + pair->Track1()->Track()->P().Mag2());
+    double p2 =  TMath::Sqrt(mp*mp + pair->Track2()->Track()->P().Mag2());
+    //check on K0 and Rho
+    double minv2pi = 2*mPi*mPi + 2*(pi1*pi2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    if ( ((minv2pi>mK0min && minv2pi<mK0max) || (minv2pi>mRhomin && minv2pi<mRhomax)) )
+       temp = false;
+    //check on L0
+    double minvpPi = 2*mp*mPi + 2*(p1*pi2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    double minvPip = 2*mPi*mp + 2*(pi1*p2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    if( ((minvpPi>mLmin) && (minvpPi<mLmax)) || ((minvPip>mLmin) && (minvPip<mLmax)) )
+       temp = false;
+  }
+  if (fSwitchPassFail) // choose only resonances
+  {
+     if (!temp) {
+        temp = AliFemtoShareQualityPairCut::Pass(pair);
+        if (temp) {fNPairsPassed++;}
+        else fNPairsFailed++;
+        return temp;
+     }
+     else
+     {
+        fNPairsFailed++;
+        return false;
+     }
+  }
+  else // cut resonances
+  {
+     if (temp) {
+        temp = AliFemtoShareQualityPairCut::Pass(pair);
+        if (temp) {fNPairsPassed++;}
+        else fNPairsFailed++;
+        return temp;
+     }
+     else
+     {
+        fNPairsFailed++;
+        return false;
+     }
+  }
+}
+//__________________
+AliFemtoString AliFemtoPairCutResonances::Report(){
+  // Prepare a report from the execution
+  string stemp = "AliFemtoPairCutResonances Pair Cut - remove pairs possibly coming from Gamma conversions\n";  
+  char ctemp[100];
+  stemp += ctemp;
+  snprintf(ctemp , 100, "Number of pairs which passed:\t%ld  Number which failed:\t%ld\n",fNPairsPassed,fNPairsFailed);
+  stemp += ctemp;
+  AliFemtoString returnThis = stemp;
+  return returnThis;}
+//__________________
+
+TList *AliFemtoPairCutResonances::ListSettings()
+{
+  // return a list of settings in a writable form
+  TList *tListSetttings =  AliFemtoShareQualityPairCut::ListSettings();
+  char buf[200];
+  snprintf(buf, 200, "AliFemtoPairCutResonances.maxeeminv=%f", fMaxEEMinv);
+  snprintf(buf, 200, "AliFemtoPairCutResonances.maxdtheta=%f", fMaxDTheta);
+  tListSetttings->AddLast(new TObjString(buf));
+
+  return tListSetttings;
+}
+
+void AliFemtoPairCutResonances::SetMaxEEMinv(Double_t maxeeminv)
+{
+  fMaxEEMinv = maxeeminv;
+}
+
+void AliFemtoPairCutResonances::SetMaxThetaDiff(Double_t maxdtheta)
+{
+  fMaxDTheta = maxdtheta;
+}
+
+void AliFemtoPairCutResonances::SetDataType(AliFemtoDataType type)
+{
+  fDataType = type;
+}
+
+void AliFemtoPairCutResonances::SetChooseResonances(bool onlyResonances)
+{
+  fSwitchPassFail = onlyResonances;
+}
diff --git a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.h b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.h
new file mode 100644 (file)
index 0000000..5c4e781
--- /dev/null
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////////////
+//                                                                         //
+// AliFemtoPairCutResonances - a pair cut which checks     //
+// for some pair qualities that attempt to identify slit/doubly            //
+// reconstructed tracks and also selects pairs based on their separation   //
+// at the entrance to the TPC                                              //
+//                                                                         //
+/////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef ALIFEMTOPAIRCUTRESONANCES_H
+#define ALIFEMTOPAIRCUTRESONANCES_H
+
+#include "AliFemtoPairCut.h"
+#include "AliFemtoShareQualityPairCut.h"
+
+class AliFemtoPairCutResonances : public AliFemtoShareQualityPairCut{
+public:
+  AliFemtoPairCutResonances();
+  AliFemtoPairCutResonances(const AliFemtoPairCutResonances& c);
+  virtual ~AliFemtoPairCutResonances();
+  AliFemtoPairCutResonances& operator=(const AliFemtoPairCutResonances& c);
+
+  virtual bool Pass(const AliFemtoPair* pair);
+  virtual AliFemtoString Report();
+  virtual TList *ListSettings();
+  virtual AliFemtoPairCut* Clone();
+  void SetMaxEEMinv(Double_t maxeeminv);
+  void SetMaxThetaDiff(Double_t maxdtheta);
+  void SetDataType(AliFemtoDataType type);
+  void SetChooseResonances(bool onlyResonances);
+
+ protected:
+  Double_t fMaxEEMinv; // Maximum allowed ee Minv
+  Double_t fMaxDTheta; // Maximum polar angle difference
+  AliFemtoDataType fDataType; //Use ESD / AOD / Kinematics.
+  bool fSwitchPassFail; // cut resonances (false), choose resonances (true)
+
+#ifdef __ROOT__
+  ClassDef(AliFemtoPairCutResonances, 0)
+#endif
+};
+
+inline AliFemtoPairCut* AliFemtoPairCutResonances::Clone() { AliFemtoPairCutResonances* c = new AliFemtoPairCutResonances(*this); return c;}
+
+#endif
index 125486346d6fc88cce041d0996df722639865a39..4f0e8bda964330148adcd591d80cdc0902c6fb41 100644 (file)
@@ -39,7 +39,9 @@
 #pragma link C++ class AliFemtoCutMonitorParticlePtPDGV0;
 #pragma link C++ class AliFemtoCutMonitorParticleEtCorr;
 #pragma link C++ class AliFemtoCorrFctnGammaMonitor;
+#pragma link C++ class AliFemtoCorrFctnMinvMonitor;
 #pragma link C++ class AliFemtoPairCutAntiGamma;
+#pragma link C++ class AliFemtoPairCutResonances;
 //#pragma link C++ class AliFemtoPhiPairCut;
 #pragma link C++ class AliFemtoQinvCorrFctnEMCIC;
 #pragma link C++ class AliFemtoCorrFctn3DSphericalEMCIC;