]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceKK.cxx
New pair cut for KK
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / AliFemtoUser / AliFemtoPairCutRadialDistanceKK.cxx
1 /////////////////////////////////////////////////////////////////////////////////
2 //                                                                             //
3 // AliFemtoPairCutRadialDistance - a pair cut which checks                     //
4 // for some pair qualities that attempt to identify slit/doubly                //
5 // reconstructed tracks and also selects pairs based on their separation       //
6 // at the entrance to the TPC                                                  //
7 //                                                                             //
8 /////////////////////////////////////////////////////////////////////////////////
9 /********************************************************************************
10  *
11  * Author: Johanna Gramling, University of Heidelberg, jgramlin@cern.ch
12  *         Malgorzata Janik, Warsaw University of Technology, majanik@cern.ch
13  *         Lukasz Graczykowski, Warsaw University of Technology, lgraczyk@cern.ch
14  *
15  ********************************************************************************/
16
17 #include "AliFemtoPairCutRadialDistanceKK.h"
18 #include <string>
19 #include <cstdio>
20
21 #ifdef __ROOT__
22 ClassImp(AliFemtoPairCutRadialDistanceKK)
23 #endif
24
25 //__________________
26 AliFemtoPairCutRadialDistanceKK::AliFemtoPairCutRadialDistanceKK():
27   AliFemtoPairCutAntiGamma(),
28   fDPhiStarMin(0),
29   fEtaMin(0),
30   fMinRad(0.8),
31   fMagSign(1)
32 {
33 }
34 //__________________
35 AliFemtoPairCutRadialDistanceKK::AliFemtoPairCutRadialDistanceKK(const AliFemtoPairCutRadialDistanceKK& c) : 
36   AliFemtoPairCutAntiGamma(c),
37   fDPhiStarMin(0), 
38   fEtaMin(0),
39   fMinRad(0.8),
40   fMagSign(1)
41
42   fDPhiStarMin = c.fDPhiStarMin;
43   fEtaMin = c.fEtaMin;
44   fMinRad = c.fMinRad;
45   fMagSign = c.fMagSign;
46 }
47
48 //__________________
49 AliFemtoPairCutRadialDistanceKK::~AliFemtoPairCutRadialDistanceKK(){
50   /* no-op */
51 }
52 AliFemtoPairCutRadialDistanceKK& AliFemtoPairCutRadialDistanceKK::operator=(const AliFemtoPairCutRadialDistanceKK& c)
53 {
54   if (this != &c) {
55     fDPhiStarMin = c.fDPhiStarMin;
56     fEtaMin = c.fEtaMin;
57     fMinRad = c.fMinRad;
58     fMagSign = c.fMagSign;
59   }
60
61   return *this;
62 }
63 //__________________
64 bool AliFemtoPairCutRadialDistanceKK::Pass(const AliFemtoPair* pair){
65   // Accept pairs based on their TPC entrance separation and
66   // quality and sharity
67   //  bool temp = true;
68   
69     double PI = 3.14159265358979312;
70 //    double pit = 6.28318530717958623;
71
72
73  Bool_t pass5 = kTRUE;
74   
75   double phi1 = pair->Track1()->Track()->P().Phi();
76   double phi2 = pair->Track2()->Track()->P().Phi();
77   double chg1 = pair->Track1()->Track()->Charge();
78   double chg2 = pair->Track2()->Track()->Charge();
79   double ptv1 = pair->Track1()->Track()->Pt();
80   double ptv2 = pair->Track2()->Track()->Pt();
81   double eta1 = pair->Track1()->Track()->P().PseudoRapidity();
82   double eta2 = pair->Track2()->Track()->P().PseudoRapidity();
83
84
85     AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
86
87
88     AliAODEvent *fAOD;
89
90     if (!aodH) {
91         // AliWarning("Could not get AODInputHandler");
92         return false;
93     }
94     else {
95
96         fAOD = aodH->GetEvent();
97     }
98     
99      Double_t Bfield = fAOD->GetMagneticField();
100   
101
102     if(fabs(eta1-eta2) < fEtaMin) {
103   
104      // propagate through B field to r=1m
105     Double_t phistar1 = phi1 - asin(chg1*(0.1*Bfield)*0.15/ptv1);// 0.15 for D=1m
106     if(phistar1 > 2*PI) phistar1 -= 2*PI;
107     if(phistar1 < 0) phistar1 += 2*PI;
108     Double_t phistar2 = phi2 - asin(chg2*(0.1*Bfield)*0.15/ptv2);// 0.15 for D=1m 
109     if(phistar2 > 2*PI) phistar2 -= 2*PI;
110     if(phistar2 < 0) phistar2 += 2*PI;
111
112     Double_t deltaphi = phistar1 - phistar2;
113     if(deltaphi > PI) deltaphi -= 2*PI;
114     if(deltaphi < -PI) deltaphi += 2*PI;
115     deltaphi = fabs(deltaphi);
116
117    
118      if(deltaphi < fDPhiStarMin){ 
119     //  cout<<"---1--- phi1 = "<<phi1<<" phi2 = "<<phi2<<endl;
120     //  cout<<" eta1 = "<<eta1<<" eta2 = "<<eta2<<endl;
121     //  cout<<" ptv1 = "<<ptv1<<" ptv2 = "<<ptv2<<endl;
122     //   cout<<"----1-- "<< deltaphi<<" deltaeta"<< fabs(eta1-eta2)<<endl;
123        pass5 = kFALSE;
124 //      break;
125      }
126      else
127      {
128     // propagate through B field to r=1.6m
129     phistar1 = phi1 - asin(chg1*(0.1*Bfield)*0.24/ptv1);// mine. 0.24 for D=1.6m
130     if(phistar1 > 2*PI) phistar1 -= 2*PI;
131     if(phistar1 < 0) phistar1 += 2*PI;
132     phistar2 = phi2 - asin(chg2*(0.1*Bfield)*0.24/ptv2);// mine. 0.24 for D=1.6m 
133     if(phistar2 > 2*PI) phistar2 -= 2*PI;
134     if(phistar2 < 0) phistar2 += 2*PI;
135
136     deltaphi = phistar1 - phistar2;
137     if(deltaphi > PI) deltaphi -= 2*PI;
138     if(deltaphi < -PI) deltaphi += 2*PI;
139     deltaphi = fabs(deltaphi);
140
141     if(deltaphi < fDPhiStarMin){        
142 //      cout<<"---2--- phi1 = "<<phi1<<" phi2 = "<<phi2<<endl;
143 //      cout<<" eta1 = "<<eta1<<" eta2 = "<<eta2<<endl;
144 //      cout<<" ptv1 = "<<ptv1<<" ptv2 = "<<ptv2<<endl;
145 //      cout<<"----2-- "<< deltaphi<<" deltaeta"<< fabs(eta1-eta2)<<endl;
146         pass5 = kFALSE;
147 //      break;
148       }
149       else
150       {
151        pass5 = kTRUE;
152       }
153     
154     }  
155
156  }
157
158   if (pass5) {
159     pass5 = AliFemtoPairCutAntiGamma::Pass(pair);
160   }
161   else
162     fNPairsFailed++;    
163
164   return pass5;
165 }
166 //__________________
167 AliFemtoString AliFemtoPairCutRadialDistanceKK::Report(){
168   // Prepare a report from the execution
169   string stemp = "AliFemtoRadialDistance Pair Cut - remove shared and split pairs and pairs with small separation at the specified radius\n";  char ctemp[100];
170   snprintf(ctemp , 100, "Accept pair with separation more that %f",fDPhiStarMin);
171   stemp += ctemp;
172   snprintf(ctemp , 100, "Number of pairs which passed:\t%ld  Number which failed:\t%ld\n",fNPairsPassed,fNPairsFailed);
173   stemp += ctemp;
174   AliFemtoString returnThis = stemp;
175   return returnThis;}
176 //__________________
177
178 TList *AliFemtoPairCutRadialDistanceKK::ListSettings()
179 {
180   // return a list of settings in a writable form
181   TList *tListSetttings =  AliFemtoPairCutAntiGamma::ListSettings();
182   char buf[200];
183   snprintf(buf, 200, "AliFemtoPairCutRadialDistanceKK.phistarsepmin=%f", fDPhiStarMin);
184   tListSetttings->AddLast(new TObjString(buf));
185
186   return tListSetttings;
187 }
188
189 void AliFemtoPairCutRadialDistanceKK::SetPhiStarDifferenceMinimum(double dtpc)
190 {
191   fDPhiStarMin = dtpc;
192 }
193
194 void AliFemtoPairCutRadialDistanceKK::SetEtaDifferenceMinimum(double etpc) 
195 {
196   fEtaMin = etpc;
197 }
198
199
200 void AliFemtoPairCutRadialDistanceKK::SetMinimumRadius(double minrad) 
201 {
202   fMinRad = minrad;
203 }
204
205 void AliFemtoPairCutRadialDistanceKK::SetMagneticFieldSign(int magsign)
206 {
207   if(magsign>1) fMagSign = 1;
208   else if(magsign<1) fMagSign = -1;
209   else fMagSign = magsign;
210 }