1 /////////////////////////////////////////////////////////////////////////////////
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 //
8 /////////////////////////////////////////////////////////////////////////////////
9 /********************************************************************************
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
15 ********************************************************************************/
17 #include "AliFemtoPairCutRadialDistanceKK.h"
22 ClassImp(AliFemtoPairCutRadialDistanceKK)
26 AliFemtoPairCutRadialDistanceKK::AliFemtoPairCutRadialDistanceKK():
27 AliFemtoPairCutAntiGamma(),
35 AliFemtoPairCutRadialDistanceKK::AliFemtoPairCutRadialDistanceKK(const AliFemtoPairCutRadialDistanceKK& c) :
36 AliFemtoPairCutAntiGamma(c),
42 fDPhiStarMin = c.fDPhiStarMin;
45 fMagSign = c.fMagSign;
49 AliFemtoPairCutRadialDistanceKK::~AliFemtoPairCutRadialDistanceKK(){
52 AliFemtoPairCutRadialDistanceKK& AliFemtoPairCutRadialDistanceKK::operator=(const AliFemtoPairCutRadialDistanceKK& c)
55 fDPhiStarMin = c.fDPhiStarMin;
58 fMagSign = c.fMagSign;
64 bool AliFemtoPairCutRadialDistanceKK::Pass(const AliFemtoPair* pair){
65 // Accept pairs based on their TPC entrance separation and
66 // quality and sharity
69 double PI = 3.14159265358979312;
70 // double pit = 6.28318530717958623;
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();
85 AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
91 // AliWarning("Could not get AODInputHandler");
96 fAOD = aodH->GetEvent();
99 Double_t Bfield = fAOD->GetMagneticField();
102 if(fabs(eta1-eta2) < fEtaMin) {
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;
112 Double_t deltaphi = phistar1 - phistar2;
113 if(deltaphi > PI) deltaphi -= 2*PI;
114 if(deltaphi < -PI) deltaphi += 2*PI;
115 deltaphi = fabs(deltaphi);
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;
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;
136 deltaphi = phistar1 - phistar2;
137 if(deltaphi > PI) deltaphi -= 2*PI;
138 if(deltaphi < -PI) deltaphi += 2*PI;
139 deltaphi = fabs(deltaphi);
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;
159 pass5 = AliFemtoPairCutAntiGamma::Pass(pair);
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);
172 snprintf(ctemp , 100, "Number of pairs which passed:\t%ld Number which failed:\t%ld\n",fNPairsPassed,fNPairsFailed);
174 AliFemtoString returnThis = stemp;
178 TList *AliFemtoPairCutRadialDistanceKK::ListSettings()
180 // return a list of settings in a writable form
181 TList *tListSetttings = AliFemtoPairCutAntiGamma::ListSettings();
183 snprintf(buf, 200, "AliFemtoPairCutRadialDistanceKK.phistarsepmin=%f", fDPhiStarMin);
184 tListSetttings->AddLast(new TObjString(buf));
186 return tListSetttings;
189 void AliFemtoPairCutRadialDistanceKK::SetPhiStarDifferenceMinimum(double dtpc)
194 void AliFemtoPairCutRadialDistanceKK::SetEtaDifferenceMinimum(double etpc)
200 void AliFemtoPairCutRadialDistanceKK::SetMinimumRadius(double minrad)
205 void AliFemtoPairCutRadialDistanceKK::SetMagneticFieldSign(int magsign)
207 if(magsign>1) fMagSign = 1;
208 else if(magsign<1) fMagSign = -1;
209 else fMagSign = magsign;