]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/macros/lego_train/AddRsnDaughterCutsRho.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / lego_train / AddRsnDaughterCutsRho.C
1 #ifndef __CINT__
2 #include <AliRsnCutPIDNSigma.h>
3 #include <PWGLF/RESONANCES/AliRsnCutTrackQuality.h>
4 #endif
5 Int_t AddRsnDaughterCutsRho(AliPID::EParticleType type1,AliPID::EParticleType type2,TString opt,Bool_t isRsnMini=kFALSE,AliRsnInputHandler *rsnIH=0,AliAnalysisTaskSE *task=0)
6 {
7
8    if (!rsnIH) return 0;
9
10    Bool_t valid = kTRUE;
11    Int_t isPP = AliAnalysisManager::GetGlobalInt("rsnIsPP",valid);
12
13    Bool_t usePPCut = kFALSE;
14
15    if (isPP && (opt.Contains("usePP"))) usePPCut = kTRUE;
16
17
18    // === USER HAS TO SET CORRECT NUMBER OF CUTS SETS =====
19    Int_t numberOfCuts = 1;
20
21    //---------------------------------------------
22    //  Define single cuts
23    //---------------------------------------------
24
25    Printf("AliRsnCutPIDNSigma Option : %s",opt.Data());
26
27    Double_t nSigmaTPC=3.0;
28    Double_t nSigmaTOF=3.0;
29    Double_t etaRange=0.8;
30
31    if (opt.Contains("TPCsigma1")) nSigmaTPC = 1.0;
32    if (opt.Contains("TPCsigma2")) nSigmaTPC = 2.0;
33    if (opt.Contains("TPCsigma3")) nSigmaTPC = 3.0;
34
35    if (opt.Contains("TOFsigma1")) nSigmaTOF = 1.0;
36    if (opt.Contains("TOFsigma2")) nSigmaTOF = 2.0;
37    if (opt.Contains("TOFsigma3")) nSigmaTOF = 3.0;
38
39    Bool_t usePDG=kFALSE;
40    if (opt.Contains("pdg")) {
41       Printf("Using PDG");
42       usePDG = kTRUE;
43    }
44
45    Bool_t useEta = kFALSE;
46    if (opt.Contains("eta")) {
47       Printf("Using ETA range (%.2f,%.2f)",-etaRange,etaRange);
48       useEta = kTRUE;
49    }
50
51    Bool_t usetof = kFALSE;
52    if(opt.Contains("tof")) {
53       Printf("Using tof PID range (%.2f,%.2f)",0.0,1E+20);
54       usetof = kTRUE;
55    }
56
57    Bool_t usetpc = kFALSE;
58    if(opt.Contains("tpc")) {
59       Printf("Using tpc PID range (%.2f,%.2f)",0.0,1E+20);
60       usetpc = kTRUE;
61    }
62
63 //---------------------------------------------
64 //  Combine cuts
65 //---------------------------------------------
66
67    TString cutname = "pionRho";
68    if (!opt.IsNull()) cutname += Form("_%s",opt.Data());
69    AliRsnCutSet *cuts = new AliRsnCutSet(cutname.Data(), AliRsnTarget::kDaughter);
70
71    TString scheme="";
72
73    AliRsnCutTrackQuality *qualityCut = new AliRsnCutTrackQuality("cutQuatity");
74    //qualityCut->SetDefaults2010();
75    //qualityCut->SetDCAZmax(0.3);
76    //qualityCut->SetDCARmax(0.05);
77
78    qualityCut->SetDCAZmax(0.2);
79    qualityCut->SetDCARmax(0.02);
80    qualityCut->AddStatusFlag(AliESDtrack::kTPCin   , kTRUE);
81    qualityCut->AddStatusFlag(AliESDtrack::kTPCrefit, kTRUE);
82    qualityCut->AddStatusFlag(AliESDtrack::kITSrefit, kTRUE);
83
84
85    qualityCut->SetPtRange(0.15, 1E+20);
86    qualityCut->SetEtaRange(-0.8, 0.8);
87    qualityCut->SetSPDminNClusters(0);
88    qualityCut->SetITSminNClusters(0);
89    qualityCut->SetITSmaxChi2(1E+20);
90    qualityCut->SetTPCminNClusters(80);
91    qualityCut->SetTPCmaxChi2(4.0);
92    qualityCut->SetRejectKinkDaughters();
93    cuts->AddCut(qualityCut);
94    if (!scheme.IsNull()) scheme += "&";
95    scheme += qualityCut->GetName();
96
97    if (usetpc) {
98       AliRsnCutPIDNSigma *cutPiTPC = new AliRsnCutPIDNSigma("cutPIDNSigmaTPC",AliPID::kPion,AliRsnCutPIDNSigma::kTPC);
99       cutPiTPC->SinglePIDRange(nSigmaTPC);
100       //cutPiTPC->AddPIDRange(nSigmaTPC,0.0,0.7);
101       cuts->AddCut(cutPiTPC);
102       if (!scheme.IsNull()) scheme += "&";
103       scheme += cutPiTPC->GetName();
104    }
105
106    if(usetof) {
107       AliRsnCutPIDNSigma *cutPiTOF = new AliRsnCutPIDNSigma("cutPIDNSigmaTOF",AliPID::kPion,AliRsnCutPIDNSigma::kTOF);
108       cutPiTOF->SinglePIDRange(nSigmaTOF);
109       //cutPiTOF->AddPIDRange(nSigmaTOF,0.7,1e20);
110       cuts->AddCut(cutPiTOF);
111       if (!scheme.IsNull()) scheme += "&";
112       scheme += cutPiTOF->GetName();
113    }
114
115    if (useEta) {
116       Printf("Adding ETA ...");
117       AliRsnValueDaughter *valEta = new AliRsnValueDaughter(Form("val%sETA%s",AliPID::ParticleName(type1),opt.Data()),AliRsnValueDaughter::kEta);
118       AliRsnCutValue *cutEta = new AliRsnCutValue(Form("cut%sETA%s",AliPID::ParticleName(type1),opt.Data()),-etaRange,etaRange);
119       cutEta->SetTargetType(AliRsnTarget::kDaughter);
120       cutEta->SetValueObj(valEta);
121       cuts->AddCut(cutEta);
122       if (!scheme.IsNull()) scheme += "&";
123       scheme += cutEta->GetName();
124    }
125    if (usePDG) {
126       Printf("Adding PDG ...");
127       AliRsnCutPID *cutPDG = new AliRsnCutPID(Form("cut%sPDG%s",AliPID::ParticleName(type1),opt.Data()),type1,0.0,kTRUE);
128       cuts->AddCut(cutPDG);
129       if (!scheme.IsNull()) scheme += "&";
130       scheme += cutPDG->GetName();
131    }
132
133    Printf ("CUT Scheme is '%s'",scheme.Data());
134    cuts->SetCutScheme(scheme.Data());
135
136    if (opt.Contains("mon")) {
137       AddMonitorOutput(cuts->GetMonitorOutput(),opt);
138    }
139    if (isRsnMini) {
140       AliRsnMiniAnalysisTask *taskRsnMini = dynamic_cast<AliRsnMiniAnalysisTask *>(task);
141       if (taskRsnMini) {
142          taskRsnMini->AddTrackCuts(cuts);
143       }
144    } else {
145       AliRsnDaughterSelector *sel = rsnIH->GetSelector();
146 //       sel->SetLabelCheck(kFALSE);
147       sel->Add(cuts, kTRUE);
148    }
149    return numberOfCuts;
150
151 }
152