2 // This macro adds the specific RSN input handler, with all single particle cuts
4 void AddRsnInputHandler(Bool_t isMC, AliMultiInputEventHandler *multi)
6 void myError (const char *msg) {::Error ("AddRsnInputHandler", msg);}
7 void myWarning(const char *msg) {::Warning("AddRsnInputHandler", msg);}
8 void myInfo (const char *msg) {::Info ("AddRsnInputHandler", msg);}
11 ::Error("AddRsnInputHandler", "Required a WELL INITIALIZED AliMultiInputEventHandler object");
15 //---------------------------------------------
17 //---------------------------------------------
19 // Track quality for ITS standalone:
20 // this cut is used to select tracks of good quality, irrespective of the PID.
21 // When adding status flags, the second argument tells if each considered flag
22 // must be active or not in the track status, since the ITS-SA tracks need that
23 // some of them are OFF (e.g.: kTPCin)
24 AliRsnCutTrackQuality *cutQualityITS = new AliRsnCutTrackQuality("cutQualityITS");
25 cutQualityITS->AddStatusFlag(AliESDtrack::kITSin , kTRUE);
26 cutQualityITS->AddStatusFlag(AliESDtrack::kTPCin , kFALSE);
27 cutQualityITS->AddStatusFlag(AliESDtrack::kITSrefit , kTRUE);
28 cutQualityITS->AddStatusFlag(AliESDtrack::kTPCrefit , kFALSE);
29 cutQualityITS->AddStatusFlag(AliESDtrack::kITSpureSA, kFALSE);
30 cutQualityITS->AddStatusFlag(AliESDtrack::kITSpid , kTRUE);
31 cutQualityITS->SetPtRange(0.15, 1E+20);
32 cutQualityITS->SetEtaRange(-0.8, 0.8);
33 cutQualityITS->SetDCARPtFormula("0.0595+0.0182/pt^1.55");
34 cutQualityITS->SetDCAZmax(2.0);
35 cutQualityITS->SetSPDminNClusters(1);
36 cutQualityITS->SetITSminNClusters(4);
37 cutQualityITS->SetITSmaxChi2(2.0);
38 cutQualityITS->SetTPCminNClusters(0);
39 cutQualityITS->SetTPCmaxChi2(1E+10);
40 cutQualityITS->SetRejectKinkDaughters();
42 // Track quality for TPC+ITS:
43 // works exactly like the one above, but has settings for selecting TPC+ITS tracks
44 // in this case, the flags required are all necessary, so here the procedure is simpler
45 AliRsnCutTrackQuality *cutQualityTPC = new AliRsnCutTrackQuality("cutQualityTPC");
46 cutQualityTPC->AddStatusFlag(AliESDtrack::kTPCin , kTRUE);
47 cutQualityTPC->AddStatusFlag(AliESDtrack::kTPCrefit, kTRUE);
48 cutQualityTPC->AddStatusFlag(AliESDtrack::kITSrefit, kTRUE);
49 cutQualityTPC->SetPtRange(0.15, 1E+20);
50 cutQualityTPC->SetEtaRange(-0.8, 0.8);
51 cutQualityTPC->SetDCARPtFormula("0.0182+0.0350/pt^1.01");
52 cutQualityTPC->SetDCAZmax(2.0);
53 cutQualityTPC->SetSPDminNClusters(1);
54 cutQualityTPC->SetITSminNClusters(0);
55 cutQualityTPC->SetITSmaxChi2(1E+20);
56 cutQualityTPC->SetTPCminNClusters(70);
57 cutQualityTPC->SetTPCmaxChi2(4.0);
58 cutQualityTPC->SetRejectKinkDaughters();
61 // -- pions: 3sigma dE/dx cut
62 // -- kaons: 3sigma dE/dx cut
65 // --> need to know if running on MC or data (for initializing the BB)
66 AliRsnCutPIDITS *cutPIDITSpion = new AliRsnCutPIDITS("cutPIDITSpion", AliPID::kPion, -3.0, 3.0);
67 AliRsnCutPIDITS *cutPIDITSkaon = new AliRsnCutPIDITS("cutPIDITSkaon", AliPID::kKaon, -3.0, 3.0);
68 cutPIDITSpion->SetMC(isMC);
69 cutPIDITSkaon->SetMC(isMC);
72 // -- pions: 3sigma dE/dx cut
73 // -- kaons: 3(5)sigma dE/dx cut for p_TPC above(below) 350 MeV/c
76 // --> The initialization of the BB is different between data and MC.
77 AliRsnCutPIDTPC *cutPIDTPCpion = new AliRsnCutPIDTPC("cutPIDTPCpion" , AliPID::kPion, -3.0, 3.0);
78 AliRsnCutPIDTPC *cutPIDTPCkaonL = new AliRsnCutPIDTPC("cutPIDTPCkaonL", AliPID::kKaon, -5.0, 5.0);
79 AliRsnCutPIDTPC *cutPIDTPCkaonH = new AliRsnCutPIDTPC("cutPIDTPCkaonH", AliPID::kKaon, -3.0, 3.0);
81 // assign the momentum range and tell to reject tracks outside it
82 cutPIDTPCkaonL->SetMomentumRange(0.00, 0.35);
83 cutPIDTPCkaonH->SetMomentumRange(0.35, 1E20);
84 cutPIDTPCkaonL->SetRejectOutside(kTRUE);
85 cutPIDTPCkaonH->SetRejectOutside(kTRUE);
87 // BB parameterization depends on data sample (MC, data)
88 // the momentum range is passed and tracks outside it are rejected
91 bbPar[0] = 2.15898 / 50.0;
93 bbPar[2] = 3.40030E-9;
97 bbPar[0] = 1.41543 / 50.0;
99 bbPar[2] = 5.0411E-11;
103 cutPIDTPCpion ->SetBBParam(bbPar);
104 cutPIDTPCkaonL->SetBBParam(bbPar);
105 cutPIDTPCkaonH->SetBBParam(bbPar);
108 // -- pions: 3sigma cut
109 // -- kaons: 3sigma cut
112 // --> since we use also TPC, unmatched tracks are accepted
113 AliRsnCutPIDTOF *cutPIDTOFpion = new AliRsnCutPIDTOF("cutPIDTOFpion", AliPID::kPion, -3.0, 3.0);
114 AliRsnCutPIDTOF *cutPIDTOFkaon = new AliRsnCutPIDTOF("cutPIDTOFkaon", AliPID::kKaon, -3.0, 3.0);
115 cutPIDTOFpion->SetRejectUnmatched(kFALSE);
116 cutPIDTOFkaon->SetRejectUnmatched(kFALSE);
118 //---------------------------------------------
120 //---------------------------------------------
122 // make several combinations of cuts:
123 // ITS and TPC standard
124 AliRsnCutSet *cutsQualityITS = new AliRsnCutSet("qualityITS", AliRsnTarget::kDaughter);
125 AliRsnCutSet *cutsQualityTPC = new AliRsnCutSet("qualityTPC", AliRsnTarget::kDaughter);
126 AliRsnCutSet *cutsPionITS = new AliRsnCutSet("pionITS" , AliRsnTarget::kDaughter);
127 AliRsnCutSet *cutsPionTPC = new AliRsnCutSet("pionTPC" , AliRsnTarget::kDaughter);
128 AliRsnCutSet *cutsPionAll = new AliRsnCutSet("pionAll" , AliRsnTarget::kDaughter);
129 AliRsnCutSet *cutsKaonITS = new AliRsnCutSet("kaonITS" , AliRsnTarget::kDaughter);
130 AliRsnCutSet *cutsKaonTPC = new AliRsnCutSet("kaonTPC" , AliRsnTarget::kDaughter);
131 AliRsnCutSet *cutsKaonAll = new AliRsnCutSet("kaonAll" , AliRsnTarget::kDaughter);
133 // ITS standalone: quality only
134 cutsQualityITS->AddCut(cutQualityITS);
135 cutsQualityITS->SetCutScheme(cutQualityITS->GetName());
137 // TPC+ITS: quality only
138 cutsQualityTPC->AddCut(cutQualityTPC);
139 cutsQualityTPC->SetCutScheme(cutQualityTPC->GetName());
141 // ITS standalone: quality and ITS PID (pions)
142 cutsPionITS->AddCut(cutQualityITS);
143 cutsPionITS->AddCut(cutPIDITSpion);
144 cutsPionITS->SetCutScheme(Form("%s&%s", cutQualityITS->GetName(), cutPIDITSpion->GetName()));
146 // ITS standalone: quality and ITS PID (kaons)
147 cutsKaonITS->AddCut(cutQualityITS);
148 cutsKaonITS->AddCut(cutPIDITSkaon);
149 cutsKaonITS->SetCutScheme(Form("%s&%s", cutQualityITS->GetName(), cutPIDITSkaon->GetName()));
151 // TPC standalone: quality and TPC + TOF PID (pions)
152 cutsPionTPC->AddCut(cutQualityTPC);
153 cutsPionTPC->AddCut(cutPIDTPCpion);
154 cutsPionTPC->AddCut(cutPIDTOFpion);
155 cutsPionTPC->SetCutScheme(Form("%s & %s & %s", cutQualityTPC->GetName(), cutPIDTPCpion->GetName(), cutPIDTOFpion->GetName()));
157 // TPC standalone: quality and TPC + TOF PID (kaons)
158 cutsKaonTPC->AddCut(cutQualityTPC);
159 cutsKaonTPC->AddCut(cutPIDTPCkaonL);
160 cutsKaonTPC->AddCut(cutPIDTPCkaonH);
161 cutsKaonTPC->AddCut(cutPIDTOFkaon);
162 cutsKaonTPC->SetCutScheme(Form("%s & (%s|%s) & %s", cutQualityTPC->GetName(), cutPIDTPCkaonL->GetName(), cutPIDTPCkaonH->GetName(), cutPIDTOFkaon->GetName()));
164 // all tracks: both qualities and PIDs (pion)
165 cutsPionAll->AddCut(cutQualityITS);
166 cutsPionAll->AddCut(cutQualityTPC);
167 cutsPionAll->AddCut(cutPIDITSpion);
168 cutsPionAll->AddCut(cutPIDTPCpion);
169 cutsPionAll->AddCut(cutPIDTOFpion);
170 cutsPionAll->SetCutScheme(Form("(%s)|(%s)", cutsKaonITS->GetCutScheme().Data(), cutsKaonTPC->GetCutScheme().Data()));
172 // all tracks: both qualities and PIDs (kaon)
173 cutsKaonAll->AddCut(cutQualityITS);
174 cutsKaonAll->AddCut(cutQualityTPC);
175 cutsKaonAll->AddCut(cutPIDITSkaon);
176 cutsKaonAll->AddCut(cutPIDTPCkaonL);
177 cutsKaonAll->AddCut(cutPIDTPCkaonH);
178 cutsKaonAll->AddCut(cutPIDTOFkaon);
179 cutsKaonAll->SetCutScheme(Form("(%s)|(%s)", cutsKaonITS->GetCutScheme().Data(), cutsKaonTPC->GetCutScheme().Data()));
181 // setup selector in the handler and add RSN input handler
182 AliRsnInputHandler *rsnIH = new AliRsnInputHandler();
183 AliRsnDaughterSelector *sel = rsnIH->GetSelector();
184 // sel->Add(cutsQualityITS, kTRUE);
185 sel->Add(cutsQualityTPC, kTRUE);
186 // sel->Add(cutsPionITS , kTRUE);
187 // sel->Add(cutsPionTPC , kTRUE);
188 // sel->Add(cutsPionAll , kTRUE);
189 // sel->Add(cutsKaonITS , kTRUE);
190 sel->Add(cutsKaonTPC , kTRUE);
191 // sel->Add(cutsKaonAll , kTRUE);
193 multi->AddInputEventHandler(rsnIH);