]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/AliRsnCutPhi.cxx
Merge branch 'master' of http://git.cern.ch/pub/AliRoot
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / AliRsnCutPhi.cxx
1 #include "AliRsnCutPhi.h"
2
3 ClassImp(AliRsnCutPhi)
4
5 AliRsnCutPhi::AliRsnCutPhi() :
6   AliRsnCut("cut", AliRsnTarget::kDaughter),
7   fOption("")
8 {
9    //Default constructor
10   SetPhiRange(0.0, 360.0);
11 }
12
13 //_________________________________________________________________________________________________
14 AliRsnCutPhi::AliRsnCutPhi(const char *name, TString opt) :
15   AliRsnCut(name, AliRsnTarget::kDaughter),
16   fOption(opt.Data())
17 {
18    //main constructor
19   SetPhiRange(0.0, 360.0);
20 }
21
22 //_________________________________________________________________________________________________
23 AliRsnCutPhi::AliRsnCutPhi(const AliRsnCutPhi &copy) :
24   AliRsnCut(copy),
25   fOption(copy.fOption)
26 {
27   //copy constructor
28   SetPhiRange(copy.fPhiRange[0], copy.fPhiRange[1]);
29 }
30 //_________________________________________________________________________________________________
31 AliRsnCutPhi &AliRsnCutPhi::operator=(const AliRsnCutPhi &copy)
32 {
33   //
34   // operator =
35   //
36   AliRsnCut::operator=(copy);
37   if (this == &copy)
38     return *this;
39   
40   fOption=copy.fOption;
41   SetPhiRange(copy.fPhiRange[0], copy.fPhiRange[1]);
42   return (*this); 
43 }
44 //_________________________________________________________________________________________________
45 Bool_t AliRsnCutPhi::IsSelected(TObject *object)
46 {
47   //
48   // Checks if the track passes the phi cut
49   //
50   Bool_t accept = kFALSE;
51   if (!TargetOK(object)) return accept;
52   
53   AliVTrack *vtrack = fDaughter->Ref2Vtrack();
54   if (!vtrack) {
55     AliError("Referenced daughter is not a track");
56     return accept;
57   }
58   
59   if (fOption.Contains("InTRD")) {
60     if (fOption.Contains("CheckTOF"))
61       return IsInsideTRD2TOF(vtrack);
62     else
63       return IsInsideTRD(vtrack);
64   }
65   if (fOption.Contains("OutTRD")) {
66     if (fOption.Contains("CheckTOF"))
67       return IsOutsideTRD2TOF(vtrack);
68     else
69       return IsOutsideTRD(vtrack);
70   }
71   
72   Double_t value = 90.0; 
73   if (fOption.Contains("OuterTPC")) value = GetTrackPhi(vtrack, 278.0);
74   if (fOption.Contains("InnerTOF")) value = GetTrackPhi(vtrack, 378.0);
75   if ( (value>=fPhiRange[0]) && (value<=fPhiRange[1]) ) 
76     accept = kTRUE;
77   else 
78     accept = kFALSE;
79   
80   return accept;
81 }
82
83 //_________________________________________________________________________________________________
84 Bool_t AliRsnCutPhi::IsInsideTRD(AliVTrack *vtrack)
85 {
86   //
87   // Checks if track falls inside the TRD sectors
88   // implemented for 2010 configuration only 
89   // edge effects removed by tightening the phi cut by 5 deg 
90   //
91   Bool_t accept = kFALSE;
92   if (!vtrack) {
93     AliError("Referenced daughter is not a track");
94     return accept;
95   }
96   Double_t value = GetTrackPhi(vtrack, 278.0);
97   if ( ((value>=0.0) && (value<=35.0)) ||
98        ((value>=135.0) && (value<=215.0)) ||
99        ((value>=345.0) && (value<=360.0)) ) 
100     accept = kTRUE;
101   else 
102     accept = kFALSE;
103   return accept;
104 }
105 //_________________________________________________________________________________________________
106 Bool_t AliRsnCutPhi::IsOutsideTRD(AliVTrack *vtrack)
107 {
108   //
109   // Checks if track falls inside the TRD sectors 
110   // implemented for 2010 configuration only 
111   // edge effects removed by tightening the phi cut by 5 deg 
112   //
113   Bool_t accept = kFALSE;
114   if (!vtrack) {
115     AliError("Referenced daughter is not a track");
116     return accept;
117   }
118   Double_t value = GetTrackPhi(vtrack, 278.0);
119   if ( ((value>=45.0) && (value<=125.0)) ||
120        ((value>=225.0) && (value<=335.0)) ) 
121     accept = kTRUE;
122   else 
123     accept = kFALSE;
124   return accept;
125 }
126
127 //_________________________________________________________________________________________________
128 Bool_t AliRsnCutPhi::IsInsideTRD2TOF(AliVTrack *vtrack)
129 {
130   //
131   // Checks if track falls inside the TRD sectors
132   // implemented for 2010 configuration only 
133   // edge effects removed by tightening the phi cut by 5 deg 
134   //
135   Bool_t accept = kFALSE;
136   if (!vtrack) {
137     AliError("Referenced daughter is not a track");
138     return accept;
139   }
140   Double_t value2Tpc = GetTrackPhi(vtrack, 278.0);
141   Double_t value2Tof = GetTrackPhi(vtrack, 378.0);
142   if ( ((value2Tpc>=0.0) && (value2Tpc<=35.0) && (value2Tof>=0.0) && (value2Tof<=35.0)  ) ||
143        ((value2Tpc>=135.0) && (value2Tpc<=215.0) && (value2Tof>=135.0) && (value2Tof<=215.0)) ||
144        ((value2Tpc>=345.0) && (value2Tpc<=360.0) && (value2Tof>=345.0) && (value2Tof<=360.0)) ) 
145     accept = kTRUE;
146   else 
147     accept = kFALSE;
148   return accept;
149 }
150
151 //----------------------------------------------------------------------------
152 Bool_t AliRsnCutPhi::IsOutsideTRD2TOF(AliVTrack *vtrack)
153 {
154   //
155   // Checks if track falls inside the TRD sectors
156   // implemented for 2010 configuration only 
157   // edge effects removed by tightening the phi cut by 5 deg 
158   //
159   Bool_t accept = kFALSE;
160   if (!vtrack) {
161     AliError("Referenced daughter is not a track");
162     return accept;
163   }
164   Double_t value2Tpc = GetTrackPhi(vtrack, 278.0);
165   Double_t value2Tof = GetTrackPhi(vtrack, 378.0);
166
167   if ( ((value2Tpc>=45.0) && (value2Tpc<=1255.0) && (value2Tof>=45.0) && (value2Tof<=125.0)  ) ||
168        ((value2Tpc>=225.0) && (value2Tpc<=335.0) && (value2Tof>=225.0) && (value2Tof<=335.0)) )
169     accept = kTRUE;
170   else 
171     accept = kFALSE;
172   return accept;
173 }
174 //----------------------------------------------------------------------------
175 Double_t AliRsnCutPhi::GetTrackPhi(AliVTrack * vtrack, Double_t radius = 0.0)
176 {
177   //
178   // Extract phi from vtrack object at radius r 
179   // If r==0 (default), provides phi at vertex 
180   //
181   Double_t pos[3]={0.,0.,0.};
182   Double_t phiOut = -999.0;
183   
184   if (!vtrack) {
185     AliError("Invalid VTrack object");
186     return phiOut;
187   }
188   if (radius==0.0){
189     phiOut=vtrack->Phi()*TMath::RadToDeg();
190   } else {
191     AliExternalTrackParam etp; 
192     etp.CopyFromVTrack(vtrack);
193     if(etp.GetXYZAt(radius, 5., pos)){
194       phiOut=TMath::ATan2(pos[1],pos[0])*TMath::RadToDeg();
195       if (phiOut<0) phiOut+= (2*TMath::Pi()*TMath::RadToDeg());
196     }
197   }
198   return phiOut;        
199 }