Modifications needed for the compilation of the femtoscopy code (Adam-Mike)
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / Cut / AliFemtoBasicTrackCut.cxx
1 /***************************************************************************
2  *
3  * $Id: 
4  *
5  * Author: Mike Lisa, Ohio State, lisa@mps.ohio-state.edu
6  ***************************************************************************
7  *
8  * Description: part of STAR HBT Framework: AliFemtoMaker package
9  *    a simple particle cut that selects on phasespace, #hits, DCA, and PID          
10  *
11  ***************************************************************************
12  *
13  * $Log:
14  **************************************************************************/
15
16 #include "Cut/AliFemtoBasicTrackCut.h"
17 #include <cstdio>
18
19 #ifdef __ROOT__ 
20 ClassImp(AliFemtoBasicTrackCut)
21 #endif
22
23 AliFemtoBasicTrackCut::AliFemtoBasicTrackCut(){
24   fNTracksPassed = fNTracksFailed = 0;
25   fCharge = 1;  // takes both charges 0
26   fNSigmaPion[0] = -100.0;   fNSigmaPion[1] = 100.0;
27   fNSigmaKaon[0] = -100.0;   fNSigmaKaon[1] = 100.0;
28   fNSigmaProton[0] = -100.0; fNSigmaProton[1] = 100.0;
29   fNHits[0] = 10;          fNHits[1] = 180;
30   fPt[0]=0.0;              fPt[1] = 100.0;//100
31   fRapidity[0]=-2;       fRapidity[1]=2;//-2 2
32   fDCA[0] = -1.0;           fDCA[1] = 20.0;
33
34 }
35 //------------------------------
36 //AliFemtoBasicTrackCut::~AliFemtoBasicTrackCut(){
37 //  /* noop */
38 //}
39 //------------------------------
40 bool AliFemtoBasicTrackCut::Pass(const AliFemtoTrack* track){
41
42
43   //  return true ;  // THIS CUT IS A STHBTDUMMY!!
44
45   /*
46     cout << endl;
47     cout << "#track " << trackCount++;
48     cout << " * pion " << (track->NSigmaPion() > fNSigmaPion[0]) && (track->NSigmaPion() < fNSigmaPion[1]);
49     cout << " * kaon " << (track->NSigmaKaon() > fNSigmaKaon[0]) && (track->NSigmaKaon() < fNSigmaKaon[1]);
50     cout << " * proton " << (track->NSigmaProton() > fNSigmaProton[0]) && (track->NSigmaProton() < fNSigmaProton[1]);
51     cout << " * charge " << (track->Charge() == fCharge);
52   */
53   bool goodPID = 1;  
54   /* ----- NOT DOING PID CUTS !!!! ------
55   bool goodPID = ((track->NSigmaPion()   > fNSigmaPion[0]) &&
56                   (track->NSigmaPion()   < fNSigmaPion[1]) &&
57                   (track->NSigmaKaon()   > fNSigmaKaon[0]) &&
58                   (track->NSigmaKaon()   < fNSigmaKaon[1]) &&
59                   (track->NSigmaProton() > fNSigmaProton[0]) &&
60                   (track->NSigmaProton() < fNSigmaProton[1]));
61   ----- NOT DOING PID CUTS !!!! ------ */
62   if (fCharge !=0){               // if user requests "charge=0" then that means ignore charge
63     goodPID = (goodPID&&(track->Charge() == fCharge));
64   }
65   if (goodPID){
66     float TEnergy = ::sqrt(track->P().mag2()+fMass*fMass);
67     float TRapidity = 0.5*::log((TEnergy+track->P().z())/
68                             (TEnergy-track->P().z()));
69
70     float Pt = ::sqrt((track->P().x())*(track->P().x())+
71                     (track->P().y())*(track->P().y()));
72
73     
74     /*
75       cout << " * DCAxy " << (track->DCAxy()  > fDCA[0]) && (track->DCAxy()  < fDCA[1]);
76       cout << " * fDCA[0] " << fDCA[0];
77       cout << " * fDCA[1] " << fDCA[1];
78       cout << " * track->DCAxy " << track->DCAxy();
79       cout << " * NHits " <<  (track->NHits() > fNHits[0]) && (track->NHits() < fNHits[1]); 
80       cout << " * Pt " << (Pt > fPt[0]) && (Pt < fPt[1]);
81       cout << " * y " << (TRapidity > fRapidity[0]) && (TRapidity < fRapidity[1]);
82       cout << endl;
83     */
84
85     bool goodTrack=
86       (//(track->DCAxy()  > fDCA[0]) &&
87      //  (track->DCAxy()  < fDCA[1]) &&
88   //     (track->NHits() > fNHits[0]) &&
89     //   (track->NHits() < fNHits[1]) &&
90        (Pt             > fPt[0]) &&
91        (Pt             < fPt[1]) &&
92        (TRapidity      > fRapidity[0]) &&
93        (TRapidity      < fRapidity[1]))&&
94        (track->PidProbPion()>0.5)&&//moje
95        (track->PidProbMuon()<0.47)&&//moje
96        (track->Label()>0);//moje
97
98     //    cout << track->DCAxy() << " " << track->NHits() << " " << Pt << " " << TRapidity << " " << TEnergy << endl;
99
100     goodTrack ? fNTracksPassed++ : fNTracksFailed++;
101     return (goodTrack);
102   }
103   else{
104     fNTracksFailed++;
105     return (goodPID);
106   }
107 }
108 //------------------------------
109 AliFemtoString AliFemtoBasicTrackCut::Report(){
110   string Stemp;
111   char Ctemp[100];
112   sprintf(Ctemp,"Particle mass:\t%E\n",this->Mass());
113   Stemp=Ctemp;
114   sprintf(Ctemp,"Particle charge:\t%d\n",fCharge);
115   Stemp=Ctemp;
116   sprintf(Ctemp,"Particle Nsigma from pion:\t%E - %E\n",fNSigmaPion[0],fNSigmaPion[1]);
117   Stemp+=Ctemp;
118   sprintf(Ctemp,"Particle Nsigma from kaon:\t%E - %E\n",fNSigmaKaon[0],fNSigmaKaon[1]);
119   Stemp+=Ctemp;
120   sprintf(Ctemp,"Particle Nsigma from proton:\t%E - %E\n",fNSigmaProton[0],fNSigmaProton[1]);
121   Stemp+=Ctemp;
122   sprintf(Ctemp,"Particle #hits:\t%d - %d\n",fNHits[0],fNHits[1]);
123   Stemp+=Ctemp;
124   sprintf(Ctemp,"Particle pT:\t%E - %E\n",fPt[0],fPt[1]);
125   Stemp+=Ctemp;
126   sprintf(Ctemp,"Particle rapidity:\t%E - %E\n",fRapidity[0],fRapidity[1]);
127   Stemp+=Ctemp;
128   sprintf(Ctemp,"Particle DCA:\t%E - %E\n",fDCA[0],fDCA[1]);
129   Stemp+=Ctemp;
130   sprintf(Ctemp,"Number of tracks which passed:\t%ld  Number which failed:\t%ld\n",fNTracksPassed,fNTracksFailed);
131   Stemp += Ctemp;
132   AliFemtoString returnThis = Stemp;
133   return returnThis;
134 }