]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/macrosJPSI/ConfigJpsi_nano_PbPb.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / ConfigJpsi_nano_PbPb.C
CommitLineData
f1be3e2e 1void InitHistograms(AliDielectron *die, Int_t cutDefinition);
2
3void SetupEventCuts(AliDielectron *die, Int_t cutDefinition);
4void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
5void SetupV0Cuts( AliDielectron *die, Int_t cutDefinition);
6void SetupPairCuts( AliDielectron *die, Int_t cutDefinition);
7
8void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition);
9void SetEtaCorrection(AliDielectron *die);
10
11TString names=("NANO");
12enum { kNANO=0 };
13
14TObjArray *arrNames=names.Tokenize(";");
15const Int_t nDie=arrNames->GetEntries();
16
01e6cabe 17Bool_t isESD = kTRUE;
18TString periodLHC = "";
f1be3e2e 19TString list = gSystem->Getenv("LIST");
20
01e6cabe 21
22AliDielectron* 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//______________________________________________________________________________________
69void 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//______________________________________________________________________________________
87void 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//______________________________________________________________________________________
169void 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//______________________________________________________________________________________
207void 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//______________________________________________________________________________________
228void 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 250void 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}