]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/RESONANCES/AliRsnCutPhi.cxx
Added generalisation of y-cut for pairs
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / AliRsnCutPhi.cxx
CommitLineData
1ce2618c 1#include "AliRsnCutPhi.h"
2
3ClassImp(AliRsnCutPhi)
4
5AliRsnCutPhi::AliRsnCutPhi() :
6 AliRsnCut("cut", AliRsnTarget::kDaughter),
7 fOption("")
8{
9 //Default constructor
10 SetPhiRange(0.0, 360.0);
11}
12
13//_________________________________________________________________________________________________
14AliRsnCutPhi::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//_________________________________________________________________________________________________
23AliRsnCutPhi::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//_________________________________________________________________________________________________
31AliRsnCutPhi &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//_________________________________________________________________________________________________
45Bool_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
b307bb43 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 }
1ce2618c 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);
1ce2618c 75 if ( (value>=fPhiRange[0]) && (value<=fPhiRange[1]) )
76 accept = kTRUE;
77 else
78 accept = kFALSE;
79
80 return accept;
81}
82
83//_________________________________________________________________________________________________
84Bool_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//_________________________________________________________________________________________________
106Bool_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
b307bb43 127//_________________________________________________________________________________________________
128Bool_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//----------------------------------------------------------------------------
152Bool_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}
1ce2618c 174//----------------------------------------------------------------------------
175Double_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}