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