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