]>
Commit | Line | Data |
---|---|---|
51a8daf6 | 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 |