]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/AliRsnCutSetDaughterParticle.cxx
Added generalisation of y-cut for pairs
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / AliRsnCutSetDaughterParticle.cxx
1 //
2 // Author: Francesca Bellini (fbellini@cern.ch)
3 //
4 //
5
6 #include <Riostream.h>
7
8 #include "AliPID.h"
9 #include "AliPIDResponse.h"
10 #include "AliRsnCutSetDaughterParticle.h"
11
12 class AliRsnCutPIDNSigma;
13 class AliRsnPIDRange;
14 class AliRsnCutPhi;
15
16 ClassImp(AliRsnCutSetDaughterParticle)
17
18 //__________________________________________________________________________________________________
19 AliRsnCutSetDaughterParticle::AliRsnCutSetDaughterParticle() :
20    AliRsnCutSet("AliRsnCutSetDaughterParticle", AliRsnTarget::kDaughter),
21    fPID(AliPID::kPion),
22    fAppliedCutSetID(AliRsnCutSetDaughterParticle::kNDaughterCuts),
23    fNsigmaTPC(1E20),
24    fNsigmaTOF(1E20),
25    fCutQuality(0x0),
26    fAODTrkCutFilterBit(0)
27 {
28    //
29    // Default constructor
30 }
31
32 //__________________________________________________________________________________________________
33 AliRsnCutSetDaughterParticle::AliRsnCutSetDaughterParticle(const char *name, AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutSetID, AliPID::EParticleType pid, Float_t nSigmaFast = -1.0, Int_t AODfilterBit = 0) :
34    AliRsnCutSet(name, AliRsnTarget::kDaughter),
35    fPID(pid),
36    fAppliedCutSetID(cutSetID),
37    fNsigmaTPC(1E20),
38    fNsigmaTOF(1E20),
39    fCutQuality(new AliRsnCutTrackQuality("CutQuality")),
40    fAODTrkCutFilterBit(AODfilterBit)
41 {
42    //
43    // Constructor
44    //
45    if ( (nSigmaFast<=0) &&
46         ((cutSetID == AliRsnCutSetDaughterParticle::kFastTPCpidNsigma) || (cutSetID == AliRsnCutSetDaughterParticle::kFastTOFpidNsigma) || (cutSetID == AliRsnCutSetDaughterParticle::kTOFMatchTPCpidNsigma)) ) {
47       AliError("Requested fast n-sigma PID with invalid value for n. Setting n = 1E20");
48    } else {
49       if (cutSetID == AliRsnCutSetDaughterParticle::kFastTPCpidNsigma) {
50          fNsigmaTPC = nSigmaFast;
51       }
52       if (cutSetID == AliRsnCutSetDaughterParticle::kTOFMatchTPCpidNsigma) {
53         fNsigmaTPC = nSigmaFast;
54       }
55       if ( (cutSetID == AliRsnCutSetDaughterParticle::kFastTOFpidNsigma) ||
56            (cutSetID == AliRsnCutSetDaughterParticle::kTOFpidKstarPbPb2010) ) {
57          fNsigmaTOF = nSigmaFast;
58       }
59    }
60
61    Init();
62 }
63
64 //__________________________________________________________________________________________________
65 AliRsnCutSetDaughterParticle::AliRsnCutSetDaughterParticle(const AliRsnCutSetDaughterParticle &copy) :
66    AliRsnCutSet(copy),
67    fPID(copy.fPID),
68    fAppliedCutSetID(copy.fAppliedCutSetID),
69    fNsigmaTPC(copy.fNsigmaTPC),
70    fNsigmaTOF(copy.fNsigmaTOF),
71    fCutQuality(copy.fCutQuality),
72    fAODTrkCutFilterBit(copy.fAODTrkCutFilterBit)
73 {
74    //
75    // copy constructor
76 }
77
78 //__________________________________________________________________________________________________
79 AliRsnCutSetDaughterParticle &AliRsnCutSetDaughterParticle::operator=(const AliRsnCutSetDaughterParticle &copy)
80 {
81    //
82    // operator =
83    //
84    AliRsnCutSet::operator=(copy);
85    if (this == &copy)
86       return *this;
87    fPID=copy.fPID;
88    fAppliedCutSetID=copy.fAppliedCutSetID;
89    fNsigmaTPC=copy.fNsigmaTPC;
90    fNsigmaTOF=copy.fNsigmaTOF;
91    fAODTrkCutFilterBit=copy.fAODTrkCutFilterBit;
92    fCutQuality=copy.fCutQuality;
93    return (*this);
94 }
95
96 //----------------------------------------------------------------------------
97 AliRsnCutSetDaughterParticle::~AliRsnCutSetDaughterParticle()
98 {
99    //
100    //destructor
101    //
102    if (fCutQuality)
103       delete fCutQuality;
104 }
105 //----------------------------------------------------------------------------
106 void AliRsnCutSetDaughterParticle::Init()
107 {
108    //
109    // init cut sets by setting variable params
110    //
111   if ( (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kQualityStd2011) ||
112        (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTOFMatchPPB2011) || //pA analysis
113        (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTPCpidKstarPPB2011) ||
114        (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTOFpidKstarPPB2011) ||
115        (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTPCTOFpidKstarPPB2011) ) 
116     {
117       fCutQuality->SetDefaults2011();
118       fCutQuality->SetAODTestFilterBit(fAODTrkCutFilterBit);
119       fCutQuality->SetPtRange(0.15, 20.0);
120       fCutQuality->SetEtaRange(-0.8, 0.8);
121     } else {
122     fCutQuality->SetDefaults2010();
123     fCutQuality->SetPtRange(0.15, 20.0);
124     fCutQuality->SetEtaRange(-0.8, 0.8);
125     fCutQuality->SetDCARPtFormula("0.0182+0.0350/pt^1.01");
126     fCutQuality->SetDCAZmax(2.0);
127     fCutQuality->SetSPDminNClusters(1);
128     fCutQuality->SetITSminNClusters(0);
129     fCutQuality->SetITSmaxChi2(36);
130     fCutQuality->SetTPCminNClusters(70);
131     fCutQuality->SetTPCmaxChi2(4.0);
132     fCutQuality->SetRejectKinkDaughters();
133     fCutQuality->SetAODTestFilterBit(fAODTrkCutFilterBit);
134     //fCutQuality->SetITSmaxChi2(36);
135     //fCutQuality->SetMaxChi2TPCConstrainedGlobal(36);
136   }\
137    AliRsnCutTOFMatch  *iCutTOFMatch     = new AliRsnCutTOFMatch("CutTOFMatch");
138    AliRsnCutPIDNSigma *iCutTPCNSigma    = new AliRsnCutPIDNSigma("CutTPCNSigma", fPID, AliRsnCutPIDNSigma::kTPC);//, AliRsnCutPIDNSigma::kTPCinnerP );
139    AliRsnCutPIDNSigma *iCutTPCTOFNSigma = new AliRsnCutPIDNSigma("CutTPCTOFNSigma", fPID, AliRsnCutPIDNSigma::kTPC);//, AliRsnCutPIDNSigma::kTPCinnerP );
140    AliRsnCutPIDNSigma *iCutTOFNSigma    = new AliRsnCutPIDNSigma("CutTOFNSigma", fPID, AliRsnCutPIDNSigma::kTOF);//, AliRsnCutPIDNSigma::kP );
141    AliRsnCutPhi  *iCutPhiTRD2010        = new AliRsnCutPhi("CutPhiTRD2010","InTRD CheckTOF");
142    AliRsnCutPhi  *iCutPhiNoTRD2010      = new AliRsnCutPhi("CutPhiNoTRD2010","OutTRD CheckTOF");
143    
144    switch (fAppliedCutSetID)
145    {
146       case AliRsnCutSetDaughterParticle::kNoCuts :
147          AliInfo("No cuts applied to daughter particle");
148          break;
149
150       case AliRsnCutSetDaughterParticle::kQualityStd2010 :
151          AddCut(fCutQuality);
152          SetCutScheme(fCutQuality->GetName());
153          break;
154
155       case AliRsnCutSetDaughterParticle::kQualityStd2011:
156          //fCutQuality->SetAODTestFilterBit(10);     //1024
157          AddCut(fCutQuality);
158          SetCutScheme(fCutQuality->GetName());
159          break;
160
161       case AliRsnCutSetDaughterParticle::kTOFMatch :
162          AddCut(fCutQuality);
163          AddCut(iCutTOFMatch);
164          SetCutScheme( Form("%s&(%s)",fCutQuality->GetName(), iCutTOFMatch->GetName()) );
165          break;
166
167       case    AliRsnCutSetDaughterParticle::kFastTPCpidNsigma :
168          if (fNsigmaTPC <= 0.0) {
169             AliWarning(Form("Invalid number of sigmas required for %s. Setting default nSigma = 10",iCutTPCNSigma->GetName()));
170             SetNsigmaForFastTPCpid(10.0);
171          }
172          iCutTPCNSigma->SinglePIDRange(fNsigmaTPC);
173          AddCut(fCutQuality);
174          AddCut(iCutTPCNSigma);
175          SetCutScheme( Form("%s&%s",fCutQuality->GetName(), iCutTPCNSigma->GetName()) );
176          break;
177
178       case    AliRsnCutSetDaughterParticle::kFastTOFpidNsigma :
179          if (fNsigmaTOF <= 0.0) {
180             AliWarning(Form("Invalid number of sigmas required for %s. Setting default nSigma = 10",iCutTOFNSigma->GetName()));
181             SetNsigmaForFastTOFpid(10.0);
182          }
183          iCutTOFNSigma->SinglePIDRange(fNsigmaTOF);
184          //iCutTOFNSigma->AddPIDRange(3.0, 0.35, 1E20);
185          AddCut(fCutQuality);
186          AddCut(iCutTOFNSigma);
187          SetCutScheme( Form("%s&%s",fCutQuality->GetName(), iCutTOFNSigma->GetName()) );
188          break;
189
190       case    AliRsnCutSetDaughterParticle::kTPCTOFpidKstarPP2010 :
191          /* Set TPC  PID (if no TOF)*/
192          // all   below   350         MeV: 5sigma
193          // all   between 350 and 500 MeV: 3sigma
194          // pios above   500         MeV: 2sigma
195          // kaons between 500 and 700 MeV: 2sigma
196          // kaons above   700         MeV: rejected
197          iCutTPCNSigma->AddPIDRange(5.0, 0.0, 0.35);
198          iCutTPCNSigma->AddPIDRange(3.0, 0.35, 0.5);
199          if (fPID==AliPID::kPion)
200             iCutTPCNSigma->AddPIDRange(2.0, 0.5, 1E20);
201          if (fPID==AliPID::kKaon)
202             iCutTPCNSigma->AddPIDRange(2.0, 0.5, 0.7);
203
204          AddCut(fCutQuality);
205          AddCut(iCutTOFMatch);
206          AddCut(iCutTPCNSigma);
207
208          /* set TPC+TOF PID*/
209          iCutTPCTOFNSigma->SinglePIDRange(5.0);
210          iCutTOFNSigma->AddPIDRange(3.0, 0.0, 1.5);
211          iCutTOFNSigma->AddPIDRange(2.0, 1.5, 1E20);
212
213          AddCut(iCutTPCTOFNSigma);
214          AddCut(iCutTOFNSigma);
215
216          // scheme:
217          // quality & [ (TOF & TPCTOF) || (!TOFmatch & TPConly) ]
218          SetCutScheme( Form("%s&((%s&%s)|((!%s)&%s))",fCutQuality->GetName(), iCutTPCTOFNSigma->GetName(), iCutTOFNSigma->GetName(), iCutTOFMatch->GetName(), iCutTPCNSigma->GetName()) ) ;
219          break;
220
221       case AliRsnCutSetDaughterParticle::kTOFpidKstarPbPb2010:
222          if (fNsigmaTOF <= 0.0) {
223             AliWarning(Form("Invalid number of sigmas required for %s. Setting default nSigma = 10",iCutTOFNSigma->GetName()));
224             SetNsigmaForFastTOFpid(10.0);
225          }
226          iCutTOFNSigma->SinglePIDRange(fNsigmaTOF);
227          //iCutTOFNSigma->AddPIDRange(3.0, 0.35, 1E20);
228          iCutTPCTOFNSigma->SinglePIDRange(5.0); //5-sigma veto on tpc signal
229
230          AddCut(fCutQuality);
231          AddCut(iCutTOFNSigma);
232          AddCut(iCutTPCTOFNSigma);
233          SetCutScheme( Form("%s&%s&%s",fCutQuality->GetName(), iCutTOFNSigma->GetName(), iCutTPCTOFNSigma->GetName()) );
234          break;
235
236       case AliRsnCutSetDaughterParticle::kTOFTPCmismatchKstarPbPb2010:
237          iCutTPCTOFNSigma->SinglePIDRange(5.0); //5-sigma veto on tpc signal
238          AddCut(fCutQuality);
239          AddCut(iCutTOFMatch);
240          AddCut(iCutTPCTOFNSigma);
241          SetCutScheme( Form("%s&%s&%s",fCutQuality->GetName(), iCutTOFMatch->GetName(), iCutTPCTOFNSigma->GetName()) );
242          break;
243
244    case AliRsnCutSetDaughterParticle::kTOFMatchTRD2010 :
245          AddCut(fCutQuality);
246          AddCut(iCutTOFMatch);
247          AddCut(iCutPhiTRD2010);
248          SetCutScheme( Form("%s&%s&%s",fCutQuality->GetName(), iCutTOFMatch->GetName(), iCutPhiTRD2010->GetName()) );
249          break;
250          
251    case AliRsnCutSetDaughterParticle::kTOFMatchNoTRD2010 :
252          AddCut(fCutQuality);
253          AddCut(iCutTOFMatch);
254          AddCut(iCutPhiNoTRD2010);
255          SetCutScheme( Form("%s&%s&%s",fCutQuality->GetName(), iCutTOFMatch->GetName(), iCutPhiNoTRD2010->GetName()) );
256          break;
257
258       case AliRsnCutSetDaughterParticle::kTOFpidKstarPbPbTRD2010:
259          if (fNsigmaTOF <= 0.0) {
260             AliWarning(Form("Invalid number of sigmas required for %s. Setting default nSigma = 10",iCutTOFNSigma->GetName()));
261             SetNsigmaForFastTOFpid(10.0);
262          }
263          iCutTOFNSigma->SinglePIDRange(fNsigmaTOF);
264          //iCutTOFNSigma->AddPIDRange(3.0, 0.35, 1E20);
265          iCutTPCTOFNSigma->SinglePIDRange(5.0); //5-sigma veto on tpc signal
266
267          AddCut(fCutQuality);
268          AddCut(iCutTOFNSigma);
269          AddCut(iCutTPCTOFNSigma);
270          AddCut(iCutPhiTRD2010);
271          SetCutScheme( Form("%s&%s&%s&%s",fCutQuality->GetName(), iCutTOFNSigma->GetName(), iCutTPCTOFNSigma->GetName(),iCutPhiTRD2010->GetName()) );
272          break;
273
274  case AliRsnCutSetDaughterParticle::kTOFpidKstarPbPbNoTRD2010:
275          if (fNsigmaTOF <= 0.0) {
276             AliWarning(Form("Invalid number of sigmas required for %s. Setting default nSigma = 10",iCutTOFNSigma->GetName()));
277             SetNsigmaForFastTOFpid(10.0);
278          }
279          iCutTOFNSigma->SinglePIDRange(fNsigmaTOF);
280          //iCutTOFNSigma->AddPIDRange(3.0, 0.35, 1E20);
281          iCutTPCTOFNSigma->SinglePIDRange(5.0); //5-sigma veto on tpc signal
282
283          AddCut(fCutQuality);
284          AddCut(iCutTOFNSigma);
285          AddCut(iCutTPCTOFNSigma);
286          AddCut(iCutPhiNoTRD2010);
287          SetCutScheme( Form("%s&%s&%s&%s",fCutQuality->GetName(), iCutTOFNSigma->GetName(), iCutTPCTOFNSigma->GetName(),iCutPhiNoTRD2010->GetName()) );
288          break;
289
290    case AliRsnCutSetDaughterParticle::kTOFMatchTPCpidNsigma :
291          if (fNsigmaTPC <= 0.0) {
292             AliWarning(Form("Invalid number of sigmas required for %s. Setting default nSigma = 10",iCutTPCNSigma->GetName()));
293             SetNsigmaForFastTPCpid(10.0);
294          }
295          iCutTPCNSigma->SinglePIDRange(fNsigmaTPC);
296          AddCut(fCutQuality);
297          AddCut(iCutTPCNSigma);
298          AddCut(iCutTOFMatch);  
299          SetCutScheme( Form("%s&%s&%s",fCutQuality->GetName(), iCutTPCNSigma->GetName(), iCutTOFMatch->GetName()) );
300          break;
301
302    case AliRsnCutSetDaughterParticle::kQualityStd2010TRD:
303      AddCut(fCutQuality);
304      AddCut(iCutPhiTRD2010);
305      SetCutScheme( Form("%s&%s",fCutQuality->GetName(),iCutPhiTRD2010->GetName()) );
306      break;
307      
308    case AliRsnCutSetDaughterParticle::kQualityStd2010NoTRD:
309      AddCut(fCutQuality);
310      AddCut(iCutPhiNoTRD2010);
311      SetCutScheme( Form("%s&%s",fCutQuality->GetName(),iCutPhiNoTRD2010->GetName()) );
312      break;
313    
314    case AliRsnCutSetDaughterParticle::kTOFMatchPPB2011: //pA analysis
315      AddCut(fCutQuality);
316      AddCut(iCutTOFMatch);
317      SetCutScheme( Form("%s&(%s)",fCutQuality->GetName(), iCutTOFMatch->GetName()) );
318      break;
319
320    case AliRsnCutSetDaughterParticle::kTPCpidKstarPPB2011:
321      if (fNsigmaTPC <= 0.0) {
322        AliWarning(Form("Invalid number of sigmas required for %s. Setting default nSigma = 10",iCutTPCNSigma->GetName()));
323        SetNsigmaForFastTPCpid(10.0);
324      }
325      iCutTPCNSigma->SinglePIDRange(fNsigmaTPC);
326      AddCut(fCutQuality);
327      AddCut(iCutTPCNSigma);
328      SetCutScheme( Form("%s&%s",fCutQuality->GetName(), iCutTPCNSigma->GetName()) );
329      break;
330     
331    case AliRsnCutSetDaughterParticle::kTOFpidKstarPPB2011:
332      if (fNsigmaTOF <= 0.0) {
333        AliWarning(Form("Invalid number of sigmas required for %s. Setting default nSigma = 10",iCutTOFNSigma->GetName()));
334        SetNsigmaForFastTOFpid(10.0);
335      }
336      iCutTOFNSigma->SinglePIDRange(fNsigmaTOF);
337      //iCutTOFNSigma->AddPIDRange(3.0, 0.35, 1E20);
338      iCutTPCTOFNSigma->SinglePIDRange(5.0); //5-sigma veto on tpc signal
339
340      AddCut(fCutQuality);
341      AddCut(iCutTOFNSigma);
342      AddCut(iCutTPCTOFNSigma);
343      SetCutScheme( Form("%s&%s&%s",fCutQuality->GetName(), iCutTOFNSigma->GetName(), iCutTPCTOFNSigma->GetName()) );
344      break;
345
346    case AliRsnCutSetDaughterParticle::kTPCTOFpidKstarPPB2011:
347      /* Set TPC  PID (if no TOF)*/
348      // all   below   350         MeV: 5sigma
349      // all   between 350 and 500 MeV: 3sigma
350      // pios above   500         MeV: 2sigma
351      // kaons between 500 and 700 MeV: 2sigma
352      // kaons above   700         MeV: rejected
353      iCutTPCNSigma->AddPIDRange(5.0, 0.0, 0.35);
354      iCutTPCNSigma->AddPIDRange(3.0, 0.35, 0.5);
355      if (fPID==AliPID::kPion)
356        iCutTPCNSigma->AddPIDRange(2.0, 0.5, 1E20);
357      if (fPID==AliPID::kKaon)
358        iCutTPCNSigma->AddPIDRange(2.0, 0.5, 0.7);
359
360      AddCut(fCutQuality);
361      AddCut(iCutTOFMatch);
362      AddCut(iCutTPCNSigma);
363
364      /* set TPC+TOF PID*/
365      iCutTPCTOFNSigma->SinglePIDRange(5.0);
366      iCutTOFNSigma->AddPIDRange(3.0, 0.0, 1.5);
367      iCutTOFNSigma->AddPIDRange(2.0, 1.5, 1E20);
368
369      AddCut(iCutTPCTOFNSigma);
370      AddCut(iCutTOFNSigma);
371          
372      // scheme:
373      // quality & [ (TOF & TPCTOF) || (!TOFmatch & TPConly) ]
374      SetCutScheme( Form("%s&((%s&%s)|((!%s)&%s))",fCutQuality->GetName(), iCutTPCTOFNSigma->GetName(), iCutTOFNSigma->GetName(), iCutTOFMatch->GetName(), iCutTPCNSigma->GetName()) ) ;
375      break;
376
377     default :
378          break;
379    }
380
381 }
382
383
384