]>
Commit | Line | Data |
---|---|---|
f1be3e2e | 1 | void InitHistograms(AliDielectron *die, Int_t cutDefinition); |
2 | ||
3 | void SetupEventCuts(AliDielectron *die, Int_t cutDefinition); | |
4 | void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition); | |
5 | void SetupV0Cuts( AliDielectron *die, Int_t cutDefinition); | |
6 | void SetupPairCuts( AliDielectron *die, Int_t cutDefinition); | |
7 | ||
8 | void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition); | |
9 | void SetEtaCorrection(AliDielectron *die); | |
10 | ||
11 | TString names=("NANO"); | |
12 | enum { kNANO=0 }; | |
13 | ||
14 | TObjArray *arrNames=names.Tokenize(";"); | |
15 | const Int_t nDie=arrNames->GetEntries(); | |
16 | ||
01e6cabe | 17 | Bool_t isESD = kTRUE; |
18 | TString periodLHC = ""; | |
f1be3e2e | 19 | TString list = gSystem->Getenv("LIST"); |
20 | ||
01e6cabe | 21 | |
22 | AliDielectron* ConfigJpsi_nano_PbPb(Int_t cutDefinition, Bool_t hasMC=kFALSE, TString period="") | |
f1be3e2e | 23 | { |
24 | // | |
25 | // Setup the instance of AliDielectron | |
26 | // | |
27 | ||
01e6cabe | 28 | periodLHC = period; |
29 | printf("this is -%s- filtering \n",periodLHC.Data()); | |
30 | ||
f1be3e2e | 31 | //ESD handler? |
32 | isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class()); | |
33 | ||
34 | // task name | |
35 | TString name=Form("%02d",cutDefinition); | |
36 | if (cutDefinition<arrNames->GetEntriesFast()) name=arrNames->At(cutDefinition)->GetName(); | |
37 | printf(" Adding %s%s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?" MC":""),name.Data(),list.Data()); | |
38 | ||
39 | // init AliDielectron | |
40 | AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("%s",name.Data())); | |
41 | die->SetHasMC(hasMC); | |
42 | ||
43 | /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ | |
44 | SetupEventCuts(die,cutDefinition); | |
45 | SetupTrackCuts(die,cutDefinition); | |
963deb15 JB |
46 | // SetupV0Cuts(die,cutDefinition); // switch off for nanoAODs?? |
47 | // SetupPairCuts(die,cutDefinition); | |
f1be3e2e | 48 | |
49 | /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MISC vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ | |
50 | // PID eta correction | |
2d00c7d3 | 51 | //SetEtaCorrection(die); //no eta corrction |
f1be3e2e | 52 | // prefilter settings |
963deb15 JB |
53 | // if(hasMC) |
54 | die->SetNoPairing(); | |
55 | // else die->SetPreFilterUnlikeOnly(); | |
f1be3e2e | 56 | //die->SetPreFilterAllSigns(); |
f1be3e2e | 57 | |
58 | /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv OUTPUT vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ | |
59 | // histogram setup | |
963deb15 JB |
60 | InitHistograms(die,cutDefinition); |
61 | ||
62 | // cut QA | |
63 | die->SetCutQA(); | |
f1be3e2e | 64 | |
65 | return die; | |
66 | } | |
67 | ||
68 | //______________________________________________________________________________________ | |
69 | void SetupEventCuts(AliDielectron *die, Int_t cutDefinition) | |
70 | { | |
71 | // | |
72 | // Setup the event cuts | |
73 | // | |
74 | ||
75 | AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("eventCuts","eventCuts"); | |
76 | if(!isESD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny); | |
77 | eventCuts->SetRequireVertex(); | |
78 | eventCuts->SetMinVtxContributors(1); | |
963deb15 | 79 | // eventCuts->SetVertexZ(-10.,+10.); |
f1be3e2e | 80 | eventCuts->SetCentralityRange(0., 90.); |
81 | eventCuts->Print(); | |
82 | die->GetEventFilter().AddCuts(eventCuts); | |
83 | ||
84 | } | |
85 | ||
86 | //______________________________________________________________________________________ | |
87 | void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition) | |
88 | { | |
89 | // | |
90 | // Setup the track cuts | |
91 | // | |
92 | ||
2d00c7d3 | 93 | Bool_t hasMC=die->GetHasMC(); |
94 | ||
f1be3e2e | 95 | // Quality cuts |
96 | AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND); | |
97 | die->GetTrackFilter().AddCuts(cuts); | |
98 | ||
99 | /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv FILTER CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ | |
100 | // AOD track filter (needs to be first cut to speed up) | |
963deb15 | 101 | AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter"); |
b2b5e4bc | 102 | trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqual); |
103 | // trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqualSPDany); | |
f1be3e2e | 104 | // trkFilter->SetMinNCrossedRowsOverFindable(0.6); |
105 | ||
106 | /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TRACK CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ | |
107 | AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts"); | |
108 | AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts"); | |
109 | // specific cuts | |
110 | varCuts->AddCut(AliDielectronVarManager::kPt, 0.85, 1e30); | |
111 | varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9); | |
ee5dce42 | 112 | if(periodLHC.Contains("LHC11h")) |
113 | varCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7., 8.0); | |
f1be3e2e | 114 | varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0); |
b2b5e4bc | 115 | // trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any |
f1be3e2e | 116 | |
117 | // standard cuts | |
118 | varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0); | |
119 | varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0); | |
120 | varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0); | |
01e6cabe | 121 | varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.); |
f1be3e2e | 122 | trkCuts->SetRequireITSRefit(kTRUE); |
123 | trkCuts->SetRequireTPCRefit(kTRUE); | |
124 | ||
125 | /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ | |
126 | // AliDielectronVarCuts *pidVarCuts = new AliDielectronVarCuts("varPIDCuts","varPIDCuts"); | |
127 | AliDielectronPID *pidCuts = new AliDielectronPID("PIDCuts","PIDCuts"); | |
128 | // TOF inclusion | |
129 | // pidVarCuts->AddCut(AliDielectronVarManager::kTOFbeta, 0.2, 0.9, kTRUE); | |
899aafa8 | 130 | // pidCuts->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE, AliDielectronPID::kIfAvailable); |
f1be3e2e | 131 | // TPC inclusion |
01e6cabe | 132 | if(periodLHC.Contains("LHC10h")) |
5ec6fe27 | 133 | pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-2.6,4.7); // when eta correction OFF (LHC10h) [-2.0,+3.] |
134 | // pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.0,4.7); // when eta correction OFF (LHC10h) [/*-2.0*/,+3.] | |
01e6cabe | 135 | else |
136 | pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.0,4.3); // when eta correction OFF (LHC11h) [-1.5,+3.] | |
f1be3e2e | 137 | // pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,4.0,0.,0.,kTRUE); |
138 | // pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE); | |
139 | ||
2d00c7d3 | 140 | /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MC PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ |
141 | AliDielectronVarCuts *pidCutsMC = new AliDielectronVarCuts("PIDCutsMC","PIDCutsMC"); | |
142 | pidCutsMC->SetCutType(AliDielectronVarCuts::kAny); | |
143 | pidCutsMC->SetCutOnMCtruth(kTRUE); | |
144 | pidCutsMC->AddCut(AliDielectronVarManager::kPdgCode, -11., -11.); | |
145 | pidCutsMC->AddCut(AliDielectronVarManager::kPdgCode, +11., +11.); | |
146 | ||
f1be3e2e | 147 | /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv TENDER CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ |
148 | // exclude conversion electrons selected by the tender | |
149 | AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv"); | |
150 | noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE); | |
151 | ||
152 | // activate the cut sets (order might be CPU timewise important) | |
2d00c7d3 | 153 | if(hasMC) { |
154 | // cuts->AddCut(pidCutsMC); | |
155 | } | |
156 | else { | |
963deb15 | 157 | if(!isESD) cuts->AddCut(trkFilter); |
2d00c7d3 | 158 | cuts->AddCut(varCuts); |
159 | cuts->AddCut(trkCuts); | |
160 | cuts->AddCut(pidCuts); | |
161 | //cuts->AddCut(pidVarCuts); | |
162 | //cuts->AddCut(noconv); | |
163 | } | |
f1be3e2e | 164 | cuts->Print(); |
165 | ||
166 | } | |
167 | ||
168 | //______________________________________________________________________________________ | |
169 | void SetupV0Cuts(AliDielectron *die, Int_t cutDefinition) | |
170 | { | |
171 | // | |
172 | // Setup the V0 cuts | |
173 | // | |
174 | ||
175 | // Quality cuts (add the gamma filter to the cut group) | |
176 | TIter next(die->GetTrackFilter().GetCuts()); | |
177 | AliAnalysisCuts *cuts; | |
178 | while((cuts = (AliAnalysisCuts*)next())) { | |
179 | if(cuts->IsA() == AliDielectronCutGroup::Class()) break; | |
180 | } | |
181 | ||
182 | AliDielectronV0Cuts *gammaV0Cuts = new AliDielectronV0Cuts("IsGamma","IsGamma"); | |
183 | gammaV0Cuts->SetPdgCodes(22,11,11); | |
76b958e8 | 184 | gammaV0Cuts->SetDefaultPID(16); |
f1be3e2e | 185 | gammaV0Cuts->AddCut(AliDielectronVarManager::kCosPointingAngle, TMath::Cos(0.02), 1.0, kFALSE); |
186 | gammaV0Cuts->AddCut(AliDielectronVarManager::kChi2NDF, 0.0, 10.0, kFALSE); | |
187 | gammaV0Cuts->AddCut(AliDielectronVarManager::kLegDist, 0.0, 0.25, kFALSE); | |
188 | gammaV0Cuts->AddCut(AliDielectronVarManager::kR, 3.0, 90.0, kFALSE); | |
189 | gammaV0Cuts->AddCut(AliDielectronVarManager::kPsiPair, 0.0, 0.05, kFALSE); | |
190 | gammaV0Cuts->AddCut(AliDielectronVarManager::kM, 0.0, 0.05, kFALSE); | |
191 | // gammaV0Cuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.1, kFALSE); | |
192 | gammaV0Cuts->AddCut(AliDielectronVarManager::kArmPt, 0.0, 0.05, kFALSE); | |
193 | // gammaV0Cuts->AddCut(AliDielectronVarManager::kArmAlpha, -0.35, 0.35, kFALSE); // not sure if it works as expected | |
194 | gammaV0Cuts->SetExcludeTracks(kTRUE); | |
195 | gammaV0Cuts->Print(); | |
196 | ||
197 | // const Double_t |cutAlphaG| < 0.35; && const Double_t cutQTG < 0.05; | |
198 | // const Double_t |cutAlphaG2|[2] = {0.6, 0.8}; && const Double_t cutQTG2 < 0.04; | |
199 | ||
200 | if(cuts) | |
201 | ((AliDielectronCutGroup*)cuts)->AddCut(gammaV0Cuts); | |
202 | else | |
203 | die->GetTrackFilter().AddCuts(gammaV0Cuts); | |
204 | } | |
205 | ||
206 | //______________________________________________________________________________________ | |
207 | void SetupPairCuts(AliDielectron *die, Int_t cutDefinition) | |
208 | { | |
209 | // | |
210 | // Setup the pair cuts | |
211 | // | |
212 | ||
213 | // conversion rejection | |
214 | Double_t gCut=0.05; | |
215 | AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts"); | |
216 | gammaCuts->AddCut(AliDielectronVarManager::kM, 0.0, gCut); | |
b2b5e4bc | 217 | // die->GetPairPreFilter().AddCuts(gammaCuts); |
f1be3e2e | 218 | |
219 | // rapidity selection | |
220 | Double_t yCut=0.9; | |
221 | AliDielectronVarCuts *rapCut=new AliDielectronVarCuts(Form("|Y|<%.1f",yCut),Form("|Y|<%.1f",yCut)); | |
222 | rapCut->AddCut(AliDielectronVarManager::kY,-1.*yCut,yCut); | |
223 | die->GetPairFilter().AddCuts(rapCut); | |
224 | ||
225 | } | |
226 | ||
227 | //______________________________________________________________________________________ | |
228 | void InitHistograms(AliDielectron *die, Int_t cutDefinition) | |
229 | { | |
230 | // | |
231 | // Initialise the histograms | |
232 | // | |
233 | Bool_t hasMC=die->GetHasMC(); | |
234 | ||
235 | //Setup histogram Manager | |
236 | AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle()); | |
237 | ||
238 | //add histograms to event class | |
239 | histos->AddClass("Event"); | |
240 | histos->UserHistogram("Event","","", 100, 0.0, 100.0, AliDielectronVarManager::kCentrality); | |
963deb15 JB |
241 | histos->UserHistogram("Event","","", 300,-15., +15.0, AliDielectronVarManager::kZvPrim); |
242 | // candidates monitoring | |
243 | histos->UserProfile("Event","","", AliDielectronVarManager::kTracks, 100,0,100., AliDielectronVarManager::kCentrality); | |
244 | histos->UserProfile("Event","","", AliDielectronVarManager::kPairs, 100,0,100., AliDielectronVarManager::kCentrality); | |
245 | ||
f1be3e2e | 246 | die->SetHistogramManager(histos); |
247 | } | |
248 | ||
213b55f8 | 249 | //______________________________________________________________________________________ |
f1be3e2e | 250 | void SetEtaCorrection(AliDielectron *die) { |
251 | ||
252 | if (AliDielectronPID::GetCentroidCorrFunction()) return; | |
253 | ||
254 | TF2 *fCntrdCorr=0x0; | |
255 | TF1 *fWdthCorr=0x0; | |
256 | /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv DATA vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ | |
257 | if( !die->GetHasMC() ) { | |
258 | // 2-dimensional eta correction for the centroid of electron sigmas | |
259 | fCntrdCorr = new TF2("fCntrdCorr", "[0] + [1]*y + [2]*y*y + [3]*TMath::Power(y,3) + [4]*TMath::Power(y,4) + [5]*TMath::Power(y,5) + [6]*TMath::Power(y,6) + [7]*x", | |
2d00c7d3 | 260 | //0.0, 3000.0, -0.9, +0.9); // Nacc |
261 | 0.0, 90.0, -0.9, +0.9); // centrality | |
262 | // fCntrdCorr->SetParameters(0.723106, 0.23958, -6.31221, -0.687976, 15.912, 0.579609, -11.6901, -0.000354381); // Nacc | |
263 | fCntrdCorr->SetParameters(+0.149002, +0.214644 , -6.034930, -0.529588, +14.97902, +0.402640, -10.890027, +0.011248); // centrality | |
f1be3e2e | 264 | // 1-dimensional eta correction for the width of electron sigmas |
2d00c7d3 | 265 | // fWdthCorr = new TF1("fWdthCorr", "pol2", 0.0, 3000.0); // Nacc |
266 | // fWdthCorr->SetParameters(1.06108, 0.000217804,-5.80291e-08); | |
267 | fWdthCorr = new TF1("fWdthCorr", "pol2", 0.0, 90.0); // centrality | |
268 | fWdthCorr->SetParameters(+1.290755, -0.005261, +0.000021); | |
f1be3e2e | 269 | } |
270 | else { | |
271 | /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MONTE CARLO vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ | |
272 | // 2-dimensional eta correction for the centroid of electron sigmas | |
273 | fCntrdCorr = new TF2("fCntrdCorr", "[0] + [1]*y + [2]*y*y + [3]*TMath::Power(y,3) + [4]*TMath::Power(y,4) + [5]*TMath::Power(y,5) + [6]*TMath::Power(y,6) + [7]*x", | |
274 | 0.0, 3000.0, -0.9, +0.9); | |
275 | fCntrdCorr->SetParameters(+0.378611, -0.070831, -3.076778, +0.121977, +8.576097, +0.113009, -5.001368, -0.000181); | |
2d00c7d3 | 276 | |
f1be3e2e | 277 | // 1-dimensional eta correction for the width of electron sigmas |
278 | fWdthCorr = new TF1("fWdthCorr", "pol1", 0.0, 3000.0); | |
279 | fWdthCorr->SetParameters(+0.881894, +0.000053); | |
280 | } | |
281 | ||
282 | // apply corrections | |
2d00c7d3 | 283 | // AliDielectronPID::SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kNacc,AliDielectronVarManager::kEta); |
284 | // AliDielectronPID::SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kNacc); | |
285 | AliDielectronPID::SetCentroidCorrFunction(fCntrdCorr,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kEta); | |
286 | AliDielectronPID::SetWidthCorrFunction(fWdthCorr,AliDielectronVarManager::kCentrality); | |
f1be3e2e | 287 | |
288 | } |