Updated cut classes and macro for Sigma* analysis (M. Venaruzzo)
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / lego_train / AddRsnDaughterCutsPhiNsigma.C
1 #ifndef __CINT__
2 #include <AliRsnCutTrackQuality.h>
3 #endif
4 Int_t AddRsnDaughterCutsPhiNsigma(AliPID::EParticleType type1,AliPID::EParticleType type2,TString opt,Bool_t isRsnMini=kFALSE,AliRsnInputHandler *rsnIH=0,AliAnalysisTaskSE *task=0)
5 {
6
7    if (!rsnIH) return 0;
8
9    Bool_t valid = kTRUE;
10    Int_t isPP = AliAnalysisManager::GetGlobalInt("rsnIsPP",valid);
11    Int_t useCommonQualityCut = AliAnalysisManager::GetGlobalInt("rsnCommonQualityCut",valid);
12
13
14    Bool_t usePPCut = kFALSE;
15
16    if (isPP && (opt.Contains("usePP"))) usePPCut = kTRUE;
17
18
19    // === USER HAS TO SET CORRECT NUMBER OF CUTS SETS =====
20    Int_t numberOfCuts = 1;
21
22    //---------------------------------------------
23    //  Define single cuts
24    //---------------------------------------------
25
26    Printf("AliRsnCutPIDNSigma Option : %s",opt.Data());
27
28    Double_t nSigmaTPC=3.0;
29    Double_t nSigmaTOF=3.0;
30    Double_t etaRange=0.8;
31    Double_t trackPtMin=0.;
32    Double_t trackPtMax=1.e10;
33
34    Bool_t useTPC_K=kFALSE;
35    Bool_t useTOF_K=kFALSE;
36    Bool_t useTrackPtCut=kFALSE;
37
38    if (opt.Contains("qualityonly")) {
39       useTPC_K=kFALSE;
40       useTOF_K=kFALSE;
41    } else if (!opt.Contains("nsig")) {
42       useTPC_K=kTRUE;
43       useTOF_K=kTRUE;
44    }
45
46    if (opt.Contains("KTPCnsig"))  useTPC_K=kTRUE;
47    if (opt.Contains("KTOFnsig"))  useTOF_K=kTRUE;
48
49    if (opt.Contains("KTPCnsig10")) nSigmaTPC = 1.0;
50    if (opt.Contains("KTPCnsig15")) nSigmaTPC = 1.5;
51    if (opt.Contains("KTPCnsig20")) nSigmaTPC = 2.0;
52    if (opt.Contains("KTPCnsig25")) nSigmaTPC = 2.5;
53    if (opt.Contains("KTPCnsig30")) nSigmaTPC = 3.0;
54
55    if (opt.Contains("KTOFnsig10")) nSigmaTOF = 1.0;
56    if (opt.Contains("KTOFnsig15")) nSigmaTOF = 1.5;
57    if (opt.Contains("KTOFnsig20")) nSigmaTOF = 2.0;
58    if (opt.Contains("KTOFnsig25")) nSigmaTOF = 2.5;
59    if (opt.Contains("KTOFnsig30")) nSigmaTOF = 3.0;
60    
61    if (opt.Contains("KTOFnsig1000")) nSigmaTOF = 100.0;
62
63    if (opt.Contains("trackPt")) {
64       useTrackPtCut = kTRUE;
65       if (opt.Contains("trackPtMin02")) trackPtMin = 0.2;
66       if (opt.Contains("trackPtMin05")) trackPtMin = 0.5;
67
68       if (opt.Contains("trackPtMax18")) trackPtMax = 1.8;
69       if (opt.Contains("trackPtMax20")) trackPtMax = 2.0;
70       if (opt.Contains("trackPtMax25")) trackPtMax = 2.5;
71    }
72
73    Bool_t usePDG=kFALSE;
74    if (opt.Contains("pdg")) {
75       Printf("Using PDG");
76       usePDG = kTRUE;
77    }
78
79    Bool_t useEta = kFALSE;
80    if (opt.Contains("eta")) {
81      if(opt.Contains("eta08")) etaRange=0.8;
82      if(opt.Contains("eta07")) etaRange=0.7;
83      if(opt.Contains("eta06")) etaRange=0.6;
84       Printf("Using ETA range (%.2f,%.2f)",-etaRange,etaRange);
85       useEta = kTRUE;
86    }
87
88 //---------------------------------------------
89 //  Combine cuts
90 //---------------------------------------------
91
92    TString cutname = "K_Phi";
93    if (!opt.IsNull()) cutname += Form("_%s",opt.Data());
94    AliRsnCutSet *cuts = new AliRsnCutSet(cutname.Data(), AliRsnTarget::kDaughter);
95
96    TString scheme="";
97    AliRsnCutTrackQuality *qualityCut = new AliRsnCutTrackQuality("cutQualityK");
98    if (useCommonQualityCut>=0) {
99       qualityCut->SetAODTestFilterBit(useCommonQualityCut);
100    } else {
101       qualityCut->SetDefaults2010();
102    }
103    cuts->AddCut(qualityCut);
104    if (!scheme.IsNull()) scheme += "&";
105    scheme += qualityCut->GetName();
106
107
108    if (useTPC_K) {
109       AliRsnCutPIDNSigma *cutKTPC = new AliRsnCutPIDNSigma("cutPIDNSigmaTPCK",AliPID::kKaon,AliRsnCutPIDNSigma::kTPC);
110       cutKTPC->SinglePIDRange(nSigmaTPC);
111       cuts->AddCut(cutKTPC);
112       if (!scheme.IsNull()) scheme += "&";
113       scheme += cutKTPC->GetName();
114    }
115
116    if (useTOF_K) {
117       AliRsnCutPIDNSigma *cutKTOF = new AliRsnCutPIDNSigma("cutPIDNSigmaTOFK",AliPID::kKaon,AliRsnCutPIDNSigma::kTOF);
118       cutKTOF->SinglePIDRange(nSigmaTOF);
119       cuts->AddCut(cutKTOF);
120       if (!scheme.IsNull()) scheme += "&";
121       scheme += cutKTOF->GetName();
122    }
123
124    if (useEta) {
125       Printf("Adding ETA ...");
126       AliRsnValueDaughter *valEta = new AliRsnValueDaughter(Form("val%sETA%s",AliPID::ParticleName(type1),opt.Data()),AliRsnValueDaughter::kEta);
127       AliRsnCutValue *cutEta = new AliRsnCutValue(Form("cut%sETA%s",AliPID::ParticleName(type1),opt.Data()),-etaRange,etaRange);
128       cutEta->SetTargetType(AliRsnTarget::kDaughter);
129       cutEta->SetValueObj(valEta);
130       cuts->AddCut(cutEta);
131       if (!scheme.IsNull()) scheme += "&";
132       scheme += cutEta->GetName();
133    }
134
135    if (useTrackPtCut) {
136       Printf("Adding Pt min=%.3f max=%.3f ...",trackPtMin,trackPtMax);
137       AliRsnValueDaughter *valTrackPt = new AliRsnValueDaughter(Form("val%sTrackPt%s",AliPID::ParticleName(type1),opt.Data()),AliRsnValueDaughter::kPt);
138
139       AliRsnCutValue *cutTrackPt = new AliRsnCutValue(Form("cut%sTrackPt%s",AliPID::ParticleName(type1),opt.Data()),trackPtMin,trackPtMax);
140       cutTrackPt->SetTargetType(AliRsnTarget::kDaughter);
141       cutTrackPt->SetValueObj(valTrackPt);
142       cuts->AddCut(cutTrackPt);
143       if (!scheme.IsNull()) scheme += "&";
144       scheme += cutTrackPt->GetName();
145    }
146
147    if (usePDG) {
148       Printf("Adding PDG ...");
149       AliRsnCutPID *cutPDG = new AliRsnCutPID(Form("cut%sPDG%s",AliPID::ParticleName(type1),opt.Data()),type1,0.0,kTRUE);
150       cuts->AddCut(cutPDG);
151       if (!scheme.IsNull()) scheme += "&";
152       scheme += cutPDG->GetName();
153    }
154
155    Printf ("CUT Scheme is '%s'",scheme.Data());
156    cuts->SetCutScheme(scheme.Data());
157
158    if (opt.Contains("mon")) {
159       AddMonitorOutput(cuts->GetMonitorOutput(),opt);
160    }
161    if (isRsnMini) {
162       AliRsnMiniAnalysisTask *taskRsnMini = (AliRsnMiniAnalysisTask *)task;
163       if (taskRsnMini) {
164          taskRsnMini->AddTrackCuts(cuts);
165       }
166    } else {
167       AliRsnDaughterSelector *sel = rsnIH->GetSelector();
168 //       sel->SetLabelCheck(kFALSE);
169       sel->Add(cuts, kTRUE);
170    }
171    return numberOfCuts;
172
173 }
174