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