]>
Commit | Line | Data |
---|---|---|
992ba7d8 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appeuear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /* $Id$ */ | |
17 | ||
18 | // | |
19 | // | |
20 | // Base class for Lc2V0 Analysis | |
21 | // | |
22 | // | |
23 | // The Lc spectra study is done 2D histograms: | |
24 | // cascade_invariantMass VS cascade_pT | |
25 | // | |
26 | // Cuts have been centralized in AliRDHFCutsLctoV0 class | |
27 | // | |
28 | //------------------------------------------------------------------------- | |
29 | // | |
30 | // Authors: A.De Caro(a,b), P. Pagano(b) | |
e7af8919 | 31 | // (a) Centro 'E.Fermi' - Roma |
32 | // (b) INFN and University of Salerno | |
992ba7d8 | 33 | // |
e7af8919 | 34 | // Contatcs: decaro@sa.infn.it |
35 | // paola.pagano@sa.infn.it | |
992ba7d8 | 36 | //------------------------------------------------------------------------- |
37 | ||
38 | #include <TSystem.h> | |
39 | #include <TParticle.h> | |
40 | #include <TParticlePDG.h> | |
41 | #include <TH1F.h> | |
a578b2da | 42 | #include <TH1I.h> |
992ba7d8 | 43 | #include <TH2F.h> |
a578b2da | 44 | #include <TTree.h> |
992ba7d8 | 45 | #include "TROOT.h" |
46 | #include <TDatabasePDG.h> | |
47 | #include <AliAnalysisDataSlot.h> | |
48 | #include <AliAnalysisDataContainer.h> | |
49 | #include "AliStack.h" | |
50 | #include "AliMCEvent.h" | |
51 | #include "AliAnalysisManager.h" | |
52 | #include "AliAODMCHeader.h" | |
53 | #include "AliAODHandler.h" | |
54 | #include "AliLog.h" | |
55 | #include "AliAODVertex.h" | |
56 | #include "AliAODRecoDecay.h" | |
57 | #include "AliAODRecoDecayHF.h" | |
58 | #include "AliAODRecoCascadeHF.h" | |
59 | #include "AliAnalysisVertexingHF.h" | |
60 | #include "AliESDtrack.h" | |
61 | #include "AliAODTrack.h" | |
62 | #include "AliAODv0.h" | |
63 | #include "AliAODMCParticle.h" | |
64 | #include "AliAnalysisTaskSE.h" | |
65 | #include "AliAnalysisTaskSELc2V0bachelor.h" | |
66 | #include "AliNormalizationCounter.h" | |
67 | #include "AliAODPidHF.h" | |
68 | #include "AliPIDResponse.h" | |
69 | #include "AliTOFPIDResponse.h" | |
70 | #include "AliInputEventHandler.h" | |
71 | ||
c64cb1f6 | 72 | using std::cout; |
73 | using std::endl; | |
74 | ||
992ba7d8 | 75 | ClassImp(AliAnalysisTaskSELc2V0bachelor) |
76 | ||
77 | //__________________________________________________________________________ | |
78 | AliAnalysisTaskSELc2V0bachelor::AliAnalysisTaskSELc2V0bachelor(): | |
79 | AliAnalysisTaskSE(), | |
80 | fUseMCInfo(kFALSE), | |
81 | fOutput(0), | |
82 | fOutputAll(0), | |
83 | fOutputPIDBach(0), | |
84 | fCEvents(0), | |
85 | fPIDResponse(0), | |
86 | fIsK0sAnalysis(kFALSE), | |
87 | fCounter(0), | |
88 | fProdCuts(0), | |
89 | fAnalCuts(0), | |
0dbd1d4f | 90 | fListCuts(0), |
91 | fUseOnTheFlyV0(kFALSE), | |
a578b2da | 92 | fIsEventSelected(kFALSE), |
93 | fWriteVariableTree(kFALSE), | |
94 | fVariablesTree(0), | |
95 | fCandidateVariables(), | |
96 | fVtx1(0), | |
97 | fBzkG(0) | |
992ba7d8 | 98 | { |
99 | // | |
100 | // Default ctor | |
101 | // | |
102 | } | |
103 | //___________________________________________________________________________ | |
0dbd1d4f | 104 | AliAnalysisTaskSELc2V0bachelor::AliAnalysisTaskSELc2V0bachelor(const Char_t* name, AliRDHFCutsLctoV0* prodCuts, |
a578b2da | 105 | AliRDHFCutsLctoV0* analCuts, Bool_t useOnTheFly, |
106 | Bool_t writeVariableTree) : | |
992ba7d8 | 107 | AliAnalysisTaskSE(name), |
108 | fUseMCInfo(kFALSE), | |
109 | fOutput(0), | |
110 | fOutputAll(0), | |
111 | fOutputPIDBach(0), | |
112 | fCEvents(0), | |
113 | fPIDResponse(0), | |
114 | fIsK0sAnalysis(kFALSE), | |
115 | fCounter(0), | |
116 | fProdCuts(prodCuts), | |
117 | fAnalCuts(analCuts), | |
0dbd1d4f | 118 | fListCuts(0), |
119 | fUseOnTheFlyV0(useOnTheFly), | |
a578b2da | 120 | fIsEventSelected(kFALSE), |
121 | fWriteVariableTree(writeVariableTree), | |
122 | fVariablesTree(0), | |
123 | fCandidateVariables(), | |
124 | fVtx1(0), | |
125 | fBzkG(0) | |
992ba7d8 | 126 | { |
127 | // | |
128 | // Constructor. Initialization of Inputs and Outputs | |
129 | // | |
130 | Info("AliAnalysisTaskSELc2V0bachelor","Calling Constructor"); | |
131 | ||
132 | DefineOutput(1,TList::Class()); //conters | |
133 | DefineOutput(2,TList::Class()); //All Entries output | |
134 | DefineOutput(3,TList::Class()); //3sigma PID output | |
135 | DefineOutput(4,AliNormalizationCounter::Class()); | |
136 | DefineOutput(5,TList::Class()); | |
137 | ||
a578b2da | 138 | // Output slot #6 keeps a tree of the candidate variables after track selection |
139 | if (fWriteVariableTree) DefineOutput(6,TTree::Class()); //My private output | |
140 | ||
992ba7d8 | 141 | } |
142 | ||
143 | //___________________________________________________________________________ | |
144 | AliAnalysisTaskSELc2V0bachelor::~AliAnalysisTaskSELc2V0bachelor() { | |
145 | // | |
146 | // destructor | |
147 | // | |
148 | Info("~AliAnalysisTaskSELc2V0bachelor","Calling Destructor"); | |
149 | ||
150 | if (fOutput) { | |
151 | delete fOutput; | |
152 | fOutput = 0; | |
153 | } | |
154 | ||
155 | if (fOutputAll) { | |
156 | delete fOutputAll; | |
157 | fOutputAll = 0; | |
158 | } | |
159 | ||
160 | if (fOutputPIDBach) { | |
161 | delete fOutputPIDBach; | |
162 | fOutputPIDBach = 0; | |
163 | } | |
164 | ||
165 | if (fPIDResponse) { | |
166 | delete fPIDResponse; | |
167 | } | |
168 | ||
169 | if (fCounter) { | |
170 | delete fCounter; | |
171 | fCounter = 0; | |
172 | } | |
173 | ||
174 | if (fProdCuts) { | |
175 | delete fProdCuts; | |
176 | fProdCuts = 0; | |
177 | } | |
178 | ||
179 | if (fAnalCuts) { | |
180 | delete fAnalCuts; | |
181 | fAnalCuts = 0; | |
182 | } | |
183 | ||
184 | if (fListCuts) { | |
185 | delete fListCuts; | |
186 | fListCuts = 0; | |
187 | } | |
188 | ||
a578b2da | 189 | if(fVariablesTree){ |
190 | delete fVariablesTree; | |
191 | fVariablesTree = 0; | |
192 | } | |
193 | ||
992ba7d8 | 194 | } |
195 | //_________________________________________________ | |
196 | void AliAnalysisTaskSELc2V0bachelor::Init() { | |
197 | // | |
198 | // Initialization | |
199 | // | |
200 | ||
0dbd1d4f | 201 | fIsEventSelected=kFALSE; |
202 | ||
992ba7d8 | 203 | if (fDebug > 1) AliInfo("Init"); |
204 | ||
205 | fListCuts = new TList(); | |
206 | fListCuts->SetOwner(); | |
207 | fListCuts->Add(new AliRDHFCutsLctoV0(*fProdCuts)); | |
208 | fListCuts->Add(new AliRDHFCutsLctoV0(*fAnalCuts)); | |
209 | PostData(5,fListCuts); | |
210 | ||
211 | return; | |
212 | } | |
213 | ||
214 | //_________________________________________________ | |
215 | void AliAnalysisTaskSELc2V0bachelor::UserExec(Option_t *) | |
216 | { | |
217 | // user exec | |
218 | if (!fInputEvent) { | |
219 | AliError("NO EVENT FOUND!"); | |
220 | return; | |
221 | } | |
222 | ||
223 | AliAODEvent* aodEvent = dynamic_cast<AliAODEvent*>(fInputEvent); | |
224 | TClonesArray *arrayLctopKos=0; | |
225 | ||
226 | if (!aodEvent && AODEvent() && IsStandardAOD()) { | |
227 | // In case there is an AOD handler writing a standard AOD, use the AOD | |
228 | // event in memory rather than the input (ESD) event. | |
229 | aodEvent = dynamic_cast<AliAODEvent*> (AODEvent()); | |
230 | // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root) | |
231 | // have to taken from the AOD event hold by the AliAODExtension | |
232 | AliAODHandler* aodHandler = (AliAODHandler*) | |
233 | ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()); | |
234 | ||
235 | if (aodHandler->GetExtensions()) { | |
236 | AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root"); | |
237 | AliAODEvent *aodFromExt = ext->GetAOD(); | |
238 | arrayLctopKos=(TClonesArray*)aodFromExt->GetList()->FindObject("CascadesHF"); | |
239 | } | |
240 | } else { | |
241 | arrayLctopKos=(TClonesArray*)aodEvent->GetList()->FindObject("CascadesHF"); | |
242 | } | |
243 | ||
244 | fCEvents->Fill(1); | |
245 | fCounter->StoreEvent(aodEvent,fAnalCuts,fUseMCInfo); | |
246 | ||
0dbd1d4f | 247 | // AOD primary vertex |
a578b2da | 248 | fVtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex(); |
249 | if (!fVtx1) return; | |
0dbd1d4f | 250 | |
992ba7d8 | 251 | // fix for temporary bug in ESDfilter |
a578b2da | 252 | fBzkG = (Double_t)aodEvent->GetMagneticField(); |
253 | if (TMath::Abs(fBzkG)<0.001) return; | |
992ba7d8 | 254 | fCEvents->Fill(2); |
255 | ||
a578b2da | 256 | Float_t zVertex = fVtx1->GetZ(); |
0dbd1d4f | 257 | ((TH1F*)(fOutput->FindObject("hZ2")))->Fill(zVertex); |
992ba7d8 | 258 | |
a578b2da | 259 | if (fVtx1->GetNContributors()<1) return; |
992ba7d8 | 260 | fCEvents->Fill(3); |
261 | ||
0dbd1d4f | 262 | ((TH1F*)(fOutput->FindObject("hZ3")))->Fill(zVertex); |
263 | ||
992ba7d8 | 264 | if (!arrayLctopKos) { |
265 | AliInfo("Could not find array of HF cascades, skipping the event"); | |
266 | return; | |
267 | } else { | |
0dbd1d4f | 268 | if (arrayLctopKos->GetEntriesFast()) { |
992ba7d8 | 269 | AliInfo(Form("Found %d cascades",arrayLctopKos->GetEntriesFast())); |
270 | } | |
271 | } | |
992ba7d8 | 272 | fCEvents->Fill(4); |
0dbd1d4f | 273 | ((TH1F*)(fOutput->FindObject("hZ4")))->Fill(zVertex); |
274 | ||
0dbd1d4f | 275 | /////////////////////// |
276 | Bool_t check1 = kFALSE; | |
277 | TString firedTriggerClasses = aodEvent->GetFiredTriggerClasses(); // trigger class | |
278 | if ( !fUseMCInfo && // don't do for MC... | |
279 | (aodEvent->GetRunNumber()<136851 || aodEvent->GetRunNumber()>139517) ) { // ...and for PbPb 2010 data | |
280 | if ( !(firedTriggerClasses.Contains("CINT1")) ) { | |
281 | AliInfo(Form(" ======================== firedTriggerClasses.Data() = %s",firedTriggerClasses.Data())); | |
282 | fCEvents->Fill(8); | |
283 | ((TH1F*)(fOutput->FindObject("hZ8")))->Fill(zVertex); | |
284 | check1 = kTRUE; | |
285 | } | |
286 | } | |
287 | ||
288 | ULong64_t fTriggerMask=AliVEvent::kAnyINT; | |
289 | Bool_t isSelectedAAA = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask); | |
290 | if (!isSelectedAAA) { | |
291 | fCEvents->Fill(9); | |
292 | ((TH1F*)(fOutput->FindObject("hZ9")))->Fill(zVertex); | |
293 | } | |
294 | ||
295 | if (!isSelectedAAA || check1) { | |
296 | fCEvents->Fill(16); | |
297 | ((TH1F*)(fOutput->FindObject("hZ16")))->Fill(zVertex); | |
298 | } | |
299 | ||
300 | fTriggerMask=AliVEvent::kAny; | |
301 | Bool_t isSelectedBBB = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask); | |
302 | if (!isSelectedBBB) { | |
303 | fCEvents->Fill(10); | |
304 | ((TH1F*)(fOutput->FindObject("hZ10")))->Fill(zVertex); | |
305 | } | |
306 | ||
a578b2da | 307 | TString titleVtx=fVtx1->GetTitle(); |
308 | if (titleVtx.Contains("Z")) { | |
0dbd1d4f | 309 | fCEvents->Fill(11); |
310 | ((TH1F*)(fOutput->FindObject("hZ11")))->Fill(zVertex); | |
311 | } | |
a578b2da | 312 | else if (titleVtx.Contains("3D")) { |
0dbd1d4f | 313 | fCEvents->Fill(12); |
314 | ((TH1F*)(fOutput->FindObject("hZ12")))->Fill(zVertex); | |
315 | } else { | |
316 | fCEvents->Fill(13); | |
317 | ((TH1F*)(fOutput->FindObject("hZ13")))->Fill(zVertex); | |
318 | } | |
319 | ||
320 | if (TMath::Abs(zVertex)<=fAnalCuts->GetMaxVtxZ()) { | |
321 | fCEvents->Fill(14); | |
322 | ((TH1F*)(fOutput->FindObject("hZ14")))->Fill(zVertex); | |
323 | } | |
324 | ||
325 | fIsEventSelected = fAnalCuts->IsEventSelected(aodEvent); | |
326 | if ( fIsEventSelected ) { | |
327 | fCEvents->Fill(7); | |
328 | ((TH1F*)(fOutput->FindObject("hZ7")))->Fill(zVertex); | |
329 | } else { | |
330 | fCEvents->Fill(15); | |
331 | ((TH1F*)(fOutput->FindObject("hZ15")))->Fill(zVertex); | |
0dbd1d4f | 332 | } |
333 | /////////////////////// | |
334 | ||
a578b2da | 335 | if ( !fIsEventSelected ) return; // don't take into account not selected events |
992ba7d8 | 336 | |
337 | // mc analysis | |
338 | TClonesArray *mcArray = 0; | |
339 | AliAODMCHeader *mcHeader=0; | |
340 | ||
341 | if (fUseMCInfo) { | |
342 | // MC array need for maching | |
343 | mcArray = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName())); | |
344 | if (!mcArray) { | |
345 | AliError("Could not find Monte-Carlo in AOD"); | |
346 | return; | |
347 | } | |
348 | fCEvents->Fill(5); // in case of MC events | |
0dbd1d4f | 349 | ((TH1F*)(fOutput->FindObject("hZ5")))->Fill(zVertex); |
992ba7d8 | 350 | |
351 | // load MC header | |
352 | mcHeader = (AliAODMCHeader*)aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName()); | |
353 | if (!mcHeader) { | |
354 | AliError("AliAnalysisTaskSELc2V0bachelor::UserExec: MC header branch not found!\n"); | |
355 | return; | |
356 | } | |
357 | fCEvents->Fill(6); | |
0dbd1d4f | 358 | ((TH1F*)(fOutput->FindObject("hZ6")))->Fill(zVertex); |
992ba7d8 | 359 | |
992ba7d8 | 360 | // check on MC Lc Daughter |
361 | SearchLcDaughter(mcArray); | |
362 | ||
363 | } | |
364 | ||
992ba7d8 | 365 | Int_t nSelectedProd = 0; |
366 | Int_t nSelectedAnal = 0; | |
0dbd1d4f | 367 | if (fIsK0sAnalysis) { |
a578b2da | 368 | MakeAnalysisForLc2prK0S(arrayLctopKos,mcArray, |
0dbd1d4f | 369 | nSelectedProd, fProdCuts, nSelectedAnal, fAnalCuts); |
370 | ||
371 | if (nSelectedAnal) { | |
372 | ||
373 | ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(4); | |
374 | ((TH1F*)(fOutput->FindObject("hZ4a")))->Fill(zVertex); | |
375 | ||
0dbd1d4f | 376 | Bool_t check1a = kFALSE; |
377 | if ( !fUseMCInfo && // don't do for MC... | |
378 | (aodEvent->GetRunNumber()<136851 || aodEvent->GetRunNumber()>139517) ) { // ...and for PbPb 2010 data | |
379 | if ( !(firedTriggerClasses.Contains("CINT1")) ) { | |
380 | AliInfo(Form(" ======================== firedTriggerClasses.Data() = %s",firedTriggerClasses.Data())); | |
381 | ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(8); | |
382 | ((TH1F*)(fOutput->FindObject("hZ8a")))->Fill(zVertex); | |
383 | check1a = kTRUE; | |
384 | } | |
385 | } | |
386 | ||
0dbd1d4f | 387 | fTriggerMask=AliVEvent::kAnyINT; |
388 | Bool_t isSelectedAAAa = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask); | |
389 | if (!isSelectedAAAa) { | |
390 | ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(9); | |
391 | ((TH1F*)(fOutput->FindObject("hZ9a")))->Fill(zVertex); | |
392 | } | |
393 | ||
394 | if (!isSelectedAAAa || check1a) { | |
395 | ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(16); | |
396 | ((TH1F*)(fOutput->FindObject("hZ16a")))->Fill(zVertex); | |
397 | } | |
398 | ||
399 | fTriggerMask=AliVEvent::kAny; | |
400 | Bool_t isSelectedBBBa = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask); | |
401 | if (!isSelectedBBBa) { | |
402 | ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(10); | |
403 | ((TH1F*)(fOutput->FindObject("hZ10a")))->Fill(zVertex); | |
404 | } | |
405 | ||
a578b2da | 406 | if (titleVtx.Contains("Z")) { |
0dbd1d4f | 407 | ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(11); |
408 | ((TH1F*)(fOutput->FindObject("hZ11a")))->Fill(zVertex); | |
409 | } | |
a578b2da | 410 | else if (titleVtx.Contains("3D")) { |
0dbd1d4f | 411 | ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(12); |
412 | ((TH1F*)(fOutput->FindObject("hZ12a")))->Fill(zVertex); | |
413 | } else { | |
414 | ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(13); | |
415 | ((TH1F*)(fOutput->FindObject("hZ13a")))->Fill(zVertex); | |
416 | } | |
417 | ||
418 | if (TMath::Abs(zVertex)<=fAnalCuts->GetMaxVtxZ()) { | |
419 | ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(14); | |
420 | ((TH1F*)(fOutput->FindObject("hZ14a")))->Fill(zVertex); | |
421 | } | |
422 | ||
0dbd1d4f | 423 | if ( fIsEventSelected ) { |
424 | ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(7); | |
425 | ((TH1F*)(fOutput->FindObject("hZ7a")))->Fill(zVertex); | |
426 | } else { | |
427 | ((TH1I*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(15); | |
428 | ((TH1F*)(fOutput->FindObject("hZ15a")))->Fill(zVertex); | |
429 | } | |
430 | } | |
431 | ||
432 | } | |
433 | ||
992ba7d8 | 434 | |
435 | fCounter->StoreCandidates(aodEvent,nSelectedProd,kTRUE); | |
436 | fCounter->StoreCandidates(aodEvent,nSelectedAnal,kFALSE); | |
437 | ||
438 | PostData(1,fOutput); | |
439 | PostData(2,fOutputAll); | |
440 | PostData(3,fOutputPIDBach); | |
441 | PostData(4,fCounter); | |
a578b2da | 442 | if (fWriteVariableTree) PostData(6,fVariablesTree); |
992ba7d8 | 443 | |
444 | } | |
445 | //________________________________________ terminate ___________________________ | |
446 | void AliAnalysisTaskSELc2V0bachelor::Terminate(Option_t*) | |
447 | { | |
448 | // The Terminate() function is the last function to be called during | |
449 | // a query. It always runs on the client, it can be used to present | |
450 | // the results graphically or save the results to file. | |
451 | ||
452 | //AliInfo("Terminate",""); | |
453 | AliAnalysisTaskSE::Terminate(); | |
454 | ||
455 | fOutput = dynamic_cast<TList*> (GetOutputData(1)); | |
456 | if (!fOutput) { | |
457 | AliError("fOutput not available"); | |
458 | return; | |
459 | } | |
460 | ||
a578b2da | 461 | //fCEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fCEvents")); |
992ba7d8 | 462 | |
463 | fOutputAll = dynamic_cast<TList*> (GetOutputData(2)); | |
464 | if (!fOutputAll) { | |
465 | AliError("fOutputAll not available"); | |
466 | return; | |
467 | } | |
468 | ||
469 | fOutputPIDBach = dynamic_cast<TList*> (GetOutputData(3)); | |
470 | if (!fOutputPIDBach) { | |
471 | AliError("fOutputPIDBach not available"); | |
472 | return; | |
473 | } | |
474 | ||
475 | return; | |
476 | } | |
477 | //___________________________________________________________________________ | |
478 | void AliAnalysisTaskSELc2V0bachelor::UserCreateOutputObjects() { | |
479 | // output | |
480 | AliInfo(Form("CreateOutputObjects of task %s\n", GetName())); | |
481 | ||
482 | //slot #1 | |
483 | //OpenFile(1); | |
484 | fOutput = new TList(); | |
485 | fOutput->SetOwner(); | |
486 | fOutput->SetName("chist0"); | |
487 | ||
488 | fOutputAll = new TList(); | |
489 | fOutputAll->SetOwner(); | |
490 | fOutputAll->SetName("listAll"); | |
491 | ||
492 | fOutputPIDBach = new TList(); | |
493 | fOutputPIDBach->SetOwner(); | |
494 | fOutputPIDBach->SetName("listPIDBach"); | |
495 | ||
496 | // define histograms | |
497 | DefineHistograms(); | |
498 | ||
499 | AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager(); | |
500 | AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler()); | |
501 | fPIDResponse = inputHandler->GetPIDResponse(); | |
502 | ||
503 | if (fProdCuts->GetIsUsePID()){ | |
504 | fProdCuts->GetPidHF()->SetPidResponse(fPIDResponse); | |
505 | fProdCuts->GetPidV0pos()->SetPidResponse(fPIDResponse); | |
506 | fProdCuts->GetPidV0neg()->SetPidResponse(fPIDResponse); | |
507 | fProdCuts->GetPidHF()->SetOldPid(kFALSE); | |
508 | fProdCuts->GetPidV0pos()->SetOldPid(kFALSE); | |
509 | fProdCuts->GetPidV0neg()->SetOldPid(kFALSE); | |
510 | } | |
511 | if (fAnalCuts->GetIsUsePID()){ | |
512 | fAnalCuts->GetPidHF()->SetPidResponse(fPIDResponse); | |
513 | fAnalCuts->GetPidV0pos()->SetPidResponse(fPIDResponse); | |
514 | fAnalCuts->GetPidV0neg()->SetPidResponse(fPIDResponse); | |
515 | fAnalCuts->GetPidHF()->SetOldPid(kFALSE); | |
516 | fAnalCuts->GetPidV0pos()->SetOldPid(kFALSE); | |
517 | fAnalCuts->GetPidV0neg()->SetOldPid(kFALSE); | |
518 | } | |
519 | ||
520 | PostData(1,fOutput); | |
521 | PostData(2,fOutputAll); | |
522 | PostData(3,fOutputPIDBach); | |
523 | ||
524 | fCounter = new AliNormalizationCounter("NormalizationCounter"); | |
525 | fCounter->Init(); | |
526 | PostData(4,fCounter); | |
a578b2da | 527 | |
528 | // Output slot 6: tree of the candidate variables | |
529 | if (fWriteVariableTree) { | |
530 | const char* nameoutput = GetOutputSlot(6)->GetContainer()->GetName(); | |
531 | fVariablesTree = new TTree(nameoutput,"Candidates variables tree"); | |
532 | Int_t nVar = 71; | |
533 | fCandidateVariables = new Float_t [nVar]; | |
534 | TString * fCandidateVariableNames = new TString[nVar]; | |
535 | fCandidateVariableNames[0]="isLcByMC"; | |
536 | fCandidateVariableNames[1]="isV0ByMC"; | |
537 | fCandidateVariableNames[2]="massLc2K0Sp"; | |
538 | fCandidateVariableNames[3]="massLc2Lambdapi"; | |
539 | fCandidateVariableNames[4]="massK0S"; | |
540 | fCandidateVariableNames[5]="massLambda"; | |
541 | fCandidateVariableNames[6]="massLambdaBar"; | |
542 | fCandidateVariableNames[7]="cosPAK0S"; | |
543 | fCandidateVariableNames[8]="dcaV0ptp"; | |
544 | fCandidateVariableNames[9]="tImpParBach"; | |
545 | fCandidateVariableNames[10]="tImpParV0"; | |
546 | fCandidateVariableNames[11]="nSigmaTPCpr"; | |
547 | fCandidateVariableNames[12]="nSigmaTPCpi"; | |
548 | fCandidateVariableNames[13]="nSigmaTPCka"; | |
549 | fCandidateVariableNames[14]="nSigmaTOFpr"; | |
550 | fCandidateVariableNames[15]="nSigmaTOFpi"; | |
551 | fCandidateVariableNames[16]="nSigmaTOFka"; | |
552 | fCandidateVariableNames[17]="bachelorPx"; | |
553 | fCandidateVariableNames[18]="bachelorPy"; | |
554 | fCandidateVariableNames[19]="bachelorPz"; | |
555 | fCandidateVariableNames[20]="V0positivePx"; | |
556 | fCandidateVariableNames[21]="V0positivePy"; | |
557 | fCandidateVariableNames[22]="V0positivePz"; | |
558 | fCandidateVariableNames[23]="V0negativePx"; | |
559 | fCandidateVariableNames[24]="V0negativePy"; | |
560 | fCandidateVariableNames[25]="V0negativePz"; | |
561 | fCandidateVariableNames[26]="qtLc"; | |
562 | fCandidateVariableNames[27]="alphaLc"; | |
563 | fCandidateVariableNames[28]="dcaV0postoPV"; | |
564 | fCandidateVariableNames[29]="dcaV0negtoPV"; | |
565 | fCandidateVariableNames[30]="bachelorPxDCA"; | |
566 | fCandidateVariableNames[31]="bachelorPyDCA"; | |
567 | fCandidateVariableNames[32]="bachelorPzDCA"; | |
568 | fCandidateVariableNames[33]="v0PxDCA"; | |
569 | fCandidateVariableNames[34]="v0PyDCA"; | |
570 | fCandidateVariableNames[35]="v0PzDCA"; | |
571 | fCandidateVariableNames[36]="V0positivePxDCA"; | |
572 | fCandidateVariableNames[37]="V0positivePyDCA"; | |
573 | fCandidateVariableNames[38]="V0positivePzDCA"; | |
574 | fCandidateVariableNames[39]="V0negativePxDCA"; | |
575 | fCandidateVariableNames[40]="V0negativePyDCA"; | |
576 | fCandidateVariableNames[41]="V0negativePzDCA"; | |
577 | fCandidateVariableNames[42]="flagToCheckCandidate"; | |
578 | fCandidateVariableNames[43]="massGamma"; | |
579 | ||
580 | fCandidateVariableNames[44]="bachelorP"; // @ prim vtx | |
581 | fCandidateVariableNames[45]="bachelorPt"; // @ prim vtx | |
582 | fCandidateVariableNames[46]="V0positiveP"; // @ prim vtx | |
583 | fCandidateVariableNames[47]="V0positivePt"; // @ prim vtx | |
584 | fCandidateVariableNames[48]="V0negativeP"; // @ prim vtx | |
585 | fCandidateVariableNames[49]="V0negativePt"; // @ prim vtx | |
586 | fCandidateVariableNames[50]="bachelorPDCA"; // @ DCA | |
587 | fCandidateVariableNames[51]="bachelorPtDCA"; // @ DCA | |
588 | fCandidateVariableNames[52]="v0PDCA"; // @ DCA | |
589 | fCandidateVariableNames[53]="v0PtDCA"; // @ DCA | |
590 | fCandidateVariableNames[54]="V0positivePDCA"; // @ DCA | |
591 | fCandidateVariableNames[55]="V0positivePtDCA"; // @ DCA | |
592 | fCandidateVariableNames[56]="V0negativePDCA"; // @ DCA | |
593 | fCandidateVariableNames[57]="V0negativePtDCA"; // @ DCA | |
594 | fCandidateVariableNames[58]="LcP"; // @ DCA | |
595 | fCandidateVariableNames[59]="LcPt"; // @ DCA | |
596 | fCandidateVariableNames[60]="v0P"; // @ V0 DCA | |
597 | fCandidateVariableNames[61]="v0Pt"; // @ V0 DCA | |
598 | ||
599 | fCandidateVariableNames[62]="cosPALc"; | |
600 | fCandidateVariableNames[63]="decayLengthLc"; | |
601 | fCandidateVariableNames[64]="decayLengthV0"; | |
602 | ||
603 | fCandidateVariableNames[65]="yLc"; | |
604 | ||
605 | fCandidateVariableNames[66]="massD2K0Spi"; // D+ -> pi+ K0S | |
606 | fCandidateVariableNames[67]="massDS2K0SK"; // D+S -> K+ K0S | |
607 | ||
608 | fCandidateVariableNames[68]="nSigmaITSpi"; // nSigmaITSpi | |
609 | fCandidateVariableNames[69]="nSigmaITSka"; // nSigmaITSka | |
610 | fCandidateVariableNames[70]="nSigmaITSpr"; // nSigmaITSpr | |
611 | ||
612 | for(Int_t ivar=0; ivar<nVar; ivar++){ | |
613 | fVariablesTree->Branch(fCandidateVariableNames[ivar].Data(),&fCandidateVariables[ivar],Form("%s/f",fCandidateVariableNames[ivar].Data())); | |
614 | } | |
615 | PostData(6,fVariablesTree); | |
616 | } | |
617 | ||
992ba7d8 | 618 | return; |
619 | } | |
620 | //___________________________________ hiostograms _______________________________________ | |
621 | void AliAnalysisTaskSELc2V0bachelor::DefineHistograms() { | |
622 | ||
a578b2da | 623 | fCEvents = new TH1F("fCEvents","conter",17,0,17); |
992ba7d8 | 624 | fCEvents->SetStats(kTRUE); |
a578b2da | 625 | fCEvents->GetXaxis()->SetBinLabel(1,"X1"); |
0dbd1d4f | 626 | fCEvents->GetXaxis()->SetBinLabel(2,"Analyzed events"); |
627 | fCEvents->GetXaxis()->SetBinLabel(3,"AliAODVertex exists"); | |
628 | fCEvents->GetXaxis()->SetBinLabel(4,"GetNContributors()>0"); | |
a578b2da | 629 | fCEvents->GetXaxis()->SetBinLabel(5,"MCarray exists"); |
630 | fCEvents->GetXaxis()->SetBinLabel(6,"CascadesHF exists"); | |
631 | fCEvents->GetXaxis()->SetBinLabel(7,"MCheader exists"); | |
632 | fCEvents->GetXaxis()->SetBinLabel(8,"IsEventSelected"); | |
0dbd1d4f | 633 | fCEvents->GetXaxis()->SetBinLabel(9,"triggerClass!=CINT1"); |
634 | fCEvents->GetXaxis()->SetBinLabel(10,"triggerMask!=kAnyINT"); | |
635 | fCEvents->GetXaxis()->SetBinLabel(11,"triggerMask!=kAny"); | |
636 | fCEvents->GetXaxis()->SetBinLabel(12,"vtxTitle.Contains(Z)"); | |
637 | fCEvents->GetXaxis()->SetBinLabel(13,"vtxTitle.Contains(3D)"); | |
638 | fCEvents->GetXaxis()->SetBinLabel(14,"vtxTitle.Doesn'tContain(Z-3D)"); | |
a578b2da | 639 | fCEvents->GetXaxis()->SetBinLabel(15,Form("zVtx<=%2.0fcm",fAnalCuts->GetMaxVtxZ())); |
0dbd1d4f | 640 | fCEvents->GetXaxis()->SetBinLabel(16,"!IsEventSelected"); |
641 | fCEvents->GetXaxis()->SetBinLabel(17,"triggerMask!=kAnyINT || triggerClass!=CINT1"); | |
0dbd1d4f | 642 | //fCEvents->GetXaxis()->SetTitle(""); |
992ba7d8 | 643 | fCEvents->GetYaxis()->SetTitle("counts"); |
644 | ||
645 | fOutput->Add(fCEvents); | |
646 | TString fillthis=""; | |
647 | ||
648 | if (fUseMCInfo) { | |
649 | fillthis="histMcStatLc"; | |
650 | TH1F* mcStatisticLc = new TH1F(fillthis.Data(),"#Lambda_{C} generated and their decays",19,-9.5,9.5); | |
651 | fOutput->Add(mcStatisticLc); | |
652 | } | |
653 | ||
a578b2da | 654 | //fillthis="histopionV0SigmaVspTOF"; |
655 | //TH2F *hpionV0SigmaVspTOF=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
992ba7d8 | 656 | fillthis="histoprotonBachSigmaVspTOF"; |
a578b2da | 657 | TH2F *hprotonBachSigmaVspTOF=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); |
992ba7d8 | 658 | |
a578b2da | 659 | //fOutput->Add(hpionV0SigmaVspTOF); |
992ba7d8 | 660 | fOutput->Add(hprotonBachSigmaVspTOF); |
661 | ||
a578b2da | 662 | //fillthis="histopionV0SigmaVspTPC"; |
663 | //TH2F *hpionV0SigmaVspTPC=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
992ba7d8 | 664 | fillthis="histoprotonBachSigmaVspTPC"; |
a578b2da | 665 | TH2F *hprotonBachSigmaVspTPC=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); |
992ba7d8 | 666 | |
a578b2da | 667 | //fOutput->Add(hpionV0SigmaVspTPC); |
992ba7d8 | 668 | fOutput->Add(hprotonBachSigmaVspTPC); |
669 | ||
a578b2da | 670 | if (fUseMCInfo) { |
671 | ||
672 | //fillthis="histopionV0SigmaVspTOFsgn"; | |
673 | //TH2F *hpionV0SigmaVspTOFsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
674 | fillthis="histoprotonBachSigmaVspTOFsgn"; | |
675 | TH2F *hprotonBachSigmaVspTOFsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
676 | ||
677 | //fOutput->Add(hpionV0SigmaVspTOFsgn); | |
678 | fOutput->Add(hprotonBachSigmaVspTOFsgn); | |
679 | ||
680 | //fillthis="histopionV0SigmaVspTPCsgn"; | |
681 | //TH2F *hpionV0SigmaVspTPCsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
682 | fillthis="histoprotonBachSigmaVspTPCsgn"; | |
683 | TH2F *hprotonBachSigmaVspTPCsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
684 | ||
685 | //fOutput->Add(hpionV0SigmaVspTPCsgn); | |
686 | fOutput->Add(hprotonBachSigmaVspTPCsgn); | |
687 | ||
688 | ||
689 | //fillthis="histopionV0SigmaVspTOFbkg"; | |
690 | //TH2F *hpionV0SigmaVspTOFbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
691 | fillthis="histoprotonBachSigmaVspTOFbkg"; | |
692 | TH2F *hprotonBachSigmaVspTOFbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
693 | ||
694 | //fOutput->Add(hpionV0SigmaVspTOFbkg); | |
695 | fOutput->Add(hprotonBachSigmaVspTOFbkg); | |
696 | ||
697 | //fillthis="histopionV0SigmaVspTPCbkg"; | |
698 | //TH2F *hpionV0SigmaVspTPCbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
699 | fillthis="histoprotonBachSigmaVspTPCbkg"; | |
700 | TH2F *hprotonBachSigmaVspTPCbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
701 | ||
702 | //fOutput->Add(hpionV0SigmaVspTPCbkg); | |
703 | fOutput->Add(hprotonBachSigmaVspTPCbkg); | |
704 | ||
705 | ||
706 | } | |
707 | ||
708 | ||
0dbd1d4f | 709 | TH1F *hZ2 = new TH1F("hZ2","",100,-50.,50.); |
710 | fOutput->Add(hZ2); | |
711 | TH1F *hZ3 = new TH1F("hZ3","",100,-50.,50.); | |
712 | fOutput->Add(hZ3); | |
713 | TH1F *hZ4 = new TH1F("hZ4","",100,-50.,50.); | |
714 | fOutput->Add(hZ4); | |
715 | TH1F *hZ5 = new TH1F("hZ5","",100,-50.,50.); | |
716 | fOutput->Add(hZ5); | |
717 | TH1F *hZ6 = new TH1F("hZ6","",100,-50.,50.); | |
718 | fOutput->Add(hZ6); | |
719 | TH1F *hZ7 = new TH1F("hZ7","",100,-50.,50.); | |
720 | fOutput->Add(hZ7); | |
721 | TH1F *hZ8 = new TH1F("hZ8","",100,-50.,50.); | |
722 | fOutput->Add(hZ8); | |
723 | TH1F *hZ9 = new TH1F("hZ9","",100,-50.,50.); | |
724 | fOutput->Add(hZ9); | |
725 | TH1F *hZ10 = new TH1F("hZ10","",100,-50.,50.); | |
726 | fOutput->Add(hZ10); | |
727 | TH1F *hZ11 = new TH1F("hZ11","",100,-50.,50.); | |
728 | fOutput->Add(hZ11); | |
729 | TH1F *hZ12 = new TH1F("hZ12","",100,-50.,50.); | |
730 | fOutput->Add(hZ12); | |
731 | TH1F *hZ13 = new TH1F("hZ13","",100,-50.,50.); | |
732 | fOutput->Add(hZ13); | |
733 | TH1F *hZ14 = new TH1F("hZ14","",100,-50.,50.); | |
734 | fOutput->Add(hZ14); | |
735 | TH1F *hZ15 = new TH1F("hZ15","",100,-50.,50.); | |
736 | fOutput->Add(hZ15); | |
737 | TH1F *hZ16 = new TH1F("hZ16","",100,-50.,50.); | |
738 | fOutput->Add(hZ16); | |
739 | ||
a578b2da | 740 | TH1I *hCandidateSelection = new TH1I("hCandidateSelection","",14,0,14); |
0dbd1d4f | 741 | hCandidateSelection->GetXaxis()->SetBinLabel(1,"IsEventSelected"); |
742 | hCandidateSelection->GetXaxis()->SetBinLabel(2,"IsSecondaryVtx"); | |
743 | hCandidateSelection->GetXaxis()->SetBinLabel(3,"V0toPosNeg"); | |
a578b2da | 744 | hCandidateSelection->GetXaxis()->SetBinLabel(4,"offlineV0"); |
745 | hCandidateSelection->GetXaxis()->SetBinLabel(5,"prodCuts::kTracks"); | |
746 | hCandidateSelection->GetXaxis()->SetBinLabel(6,"prodCuts::kCandidate"); | |
747 | hCandidateSelection->GetXaxis()->SetBinLabel(7,"prodCuts::kPID"); | |
748 | hCandidateSelection->GetXaxis()->SetBinLabel(8,"prodCuts::kAll"); | |
749 | hCandidateSelection->GetXaxis()->SetBinLabel(9,"offlineV0"); | |
750 | hCandidateSelection->GetXaxis()->SetBinLabel(10,"isInFiducialAcceptance"); | |
751 | hCandidateSelection->GetXaxis()->SetBinLabel(11,"analCuts::kTracks"); | |
752 | hCandidateSelection->GetXaxis()->SetBinLabel(12,"analCuts::kCandidate"); | |
753 | hCandidateSelection->GetXaxis()->SetBinLabel(13,"analCuts::kPID"); | |
754 | hCandidateSelection->GetXaxis()->SetBinLabel(14,"analCuts::kAll"); | |
0dbd1d4f | 755 | fOutput->Add(hCandidateSelection); |
756 | ||
757 | TH1I *hEventsWithCandidates = new TH1I("hEventsWithCandidates","conter",17,0,17); | |
758 | fOutput->Add(hEventsWithCandidates); | |
759 | ||
760 | TH1F *hZ2a = new TH1F("hZ2a","",100,-50.,50.); | |
761 | fOutput->Add(hZ2a); | |
762 | TH1F *hZ3a = new TH1F("hZ3a","",100,-50.,50.); | |
763 | fOutput->Add(hZ3a); | |
764 | TH1F *hZ4a = new TH1F("hZ4a","",100,-50.,50.); | |
765 | fOutput->Add(hZ4a); | |
766 | TH1F *hZ5a = new TH1F("hZ5a","",100,-50.,50.); | |
767 | fOutput->Add(hZ5a); | |
768 | TH1F *hZ6a = new TH1F("hZ6a","",100,-50.,50.); | |
769 | fOutput->Add(hZ6a); | |
770 | TH1F *hZ7a = new TH1F("hZ7a","",100,-50.,50.); | |
771 | fOutput->Add(hZ7a); | |
772 | TH1F *hZ8a = new TH1F("hZ8a","",100,-50.,50.); | |
773 | fOutput->Add(hZ8a); | |
774 | TH1F *hZ9a = new TH1F("hZ9a","",100,-50.,50.); | |
775 | fOutput->Add(hZ9a); | |
776 | TH1F *hZ10a = new TH1F("hZ10a","",100,-50.,50.); | |
777 | fOutput->Add(hZ10a); | |
778 | TH1F *hZ11a = new TH1F("hZ11a","",100,-50.,50.); | |
779 | fOutput->Add(hZ11a); | |
780 | TH1F *hZ12a = new TH1F("hZ12a","",100,-50.,50.); | |
781 | fOutput->Add(hZ12a); | |
782 | TH1F *hZ13a = new TH1F("hZ13a","",100,-50.,50.); | |
783 | fOutput->Add(hZ13a); | |
784 | TH1F *hZ14a = new TH1F("hZ14a","",100,-50.,50.); | |
785 | fOutput->Add(hZ14a); | |
786 | TH1F *hZ15a = new TH1F("hZ15a","",100,-50.,50.); | |
787 | fOutput->Add(hZ15a); | |
788 | TH1F *hZ16a = new TH1F("hZ16a","",100,-50.,50.); | |
789 | fOutput->Add(hZ16a); | |
790 | ||
a578b2da | 791 | TH1I *hSwitchOnCandidates1 = new TH1I("hSwitchOnCandidates1","",16,-8,8); |
0dbd1d4f | 792 | fOutput->Add(hSwitchOnCandidates1); |
a578b2da | 793 | TH1I *hSwitchOnCandidates2 = new TH1I("hSwitchOnCandidates2","",16,-8,8); |
0dbd1d4f | 794 | fOutput->Add(hSwitchOnCandidates2); |
a578b2da | 795 | TH1I *hSwitchOnCandidates3 = new TH1I("hSwitchOnCandidates3","",16,-8,8); |
0dbd1d4f | 796 | fOutput->Add(hSwitchOnCandidates3); |
a578b2da | 797 | TH1I *hSwitchOnCandidates4 = new TH1I("hSwitchOnCandidates4","",16,-8,8); |
0dbd1d4f | 798 | fOutput->Add(hSwitchOnCandidates4); |
799 | ||
992ba7d8 | 800 | if (fIsK0sAnalysis) DefineK0SHistos();// hK0S histos declarations |
801 | ||
802 | return; | |
803 | } | |
804 | //________________________________________________________________________ | |
805 | void AliAnalysisTaskSELc2V0bachelor::FillLc2pK0Sspectrum(AliAODRecoCascadeHF *part, | |
a578b2da | 806 | Int_t isLc, |
807 | Int_t &nSelectedProd, | |
808 | AliRDHFCutsLctoV0 *cutsProd, | |
809 | Int_t &nSelectedAnal, | |
810 | AliRDHFCutsLctoV0 *cutsAnal, | |
811 | TClonesArray *mcArray) | |
992ba7d8 | 812 | { |
813 | // | |
814 | // Fill histos for Lc -> K0S+proton | |
815 | // | |
992ba7d8 | 816 | |
817 | TString fillthis=""; | |
818 | ||
819 | Double_t invmassLc = part->InvMassLctoK0sP(); | |
a578b2da | 820 | Double_t lambdacpt = part->Pt(); |
992ba7d8 | 821 | |
822 | AliAODv0 * v0part = (AliAODv0*)part->Getv0(); | |
823 | Bool_t onFlyV0 = v0part->GetOnFlyStatus(); // on-the-flight V0s | |
a578b2da | 824 | Double_t momK0s = TMath::Sqrt(v0part->Ptot2V0()); |
992ba7d8 | 825 | Double_t ptK0s = TMath::Sqrt(v0part->Pt2V0()); |
a578b2da | 826 | Double_t dcaV0ptp = v0part->GetDCA(); |
992ba7d8 | 827 | Double_t invmassK0s = v0part->MassK0Short(); |
a578b2da | 828 | Bool_t isInV0windowProd = (((cutsProd->IsSelectedSingleCut(part,AliRDHFCuts::kCandidate,2))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // cut on V0 invMass |
829 | Bool_t isInCascadeWindow = (((cutsAnal->IsSelectedSingleCut(part,AliRDHFCuts::kCandidate,0))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // cut on Lc->p+K0S invMass | |
830 | Bool_t isCandidateSelectedCuts = (((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // kinematic/topological cuts | |
992ba7d8 | 831 | |
832 | AliAODTrack *bachelor = (AliAODTrack*)part->GetBachelor(); | |
833 | Double_t momBach = bachelor->P(); | |
0dbd1d4f | 834 | Bool_t isBachelorID = (((cutsAnal->IsSelected(part,AliRDHFCuts::kPID))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // ID x bachelor |
835 | ||
a578b2da | 836 | /* |
837 | if (fIsEventSelected) { | |
838 | if ( ( !onFlyV0 || | |
839 | (onFlyV0 && fUseOnTheFlyV0) ) && | |
840 | isCandidateSelectedCuts && isBachelorID) { | |
841 | fillthis="hist1LcMassOfflineByK0S"; | |
842 | if (isBachelorID) ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
843 | } | |
844 | } else { | |
845 | if ( ( !onFlyV0 || | |
846 | (onFlyV0 && fUseOnTheFlyV0) ) && | |
847 | isCandidateSelectedCuts && isBachelorID) { | |
848 | fillthis="hist0LcMassOfflineByK0S"; | |
849 | if (isBachelorID) ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
850 | } | |
851 | return; // don't take into account not selected events | |
852 | } | |
853 | */ | |
854 | ||
855 | if ( !onFlyV0 ) | |
856 | ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(3); // it counts number of candidates coming from offline V0s | |
857 | ||
858 | if ( !( !onFlyV0 || (onFlyV0 && fUseOnTheFlyV0) ) ) return; | |
859 | ||
860 | if ( !( ( (cutsProd->IsSelected(part,AliRDHFCuts::kTracks))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) ) return; | |
861 | ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(4); | |
862 | if ( ( ( (cutsProd->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) ) | |
863 | ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(5); | |
864 | if ( ( ( (cutsProd->IsSelected(part,AliRDHFCuts::kPID))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) ) | |
865 | ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(6); | |
866 | if ( ( ( (cutsProd->IsSelected(part,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) ) { | |
867 | ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(7); | |
868 | nSelectedProd++; | |
869 | } | |
870 | ||
871 | ||
872 | if ( !onFlyV0 ) | |
873 | ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(8); // it counts number of candidates coming from offline V0s | |
874 | ||
875 | if ( cutsAnal->IsInFiducialAcceptance(part->Pt(),part->Y(4122)) ) | |
876 | ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(9); | |
877 | if ( (((cutsAnal->IsSelected(part,AliRDHFCuts::kTracks))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)) ) | |
0dbd1d4f | 878 | ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(10); |
a578b2da | 879 | if ( (((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)) ) |
880 | ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(11); | |
881 | if ( (((cutsAnal->IsSelected(part,AliRDHFCuts::kPID))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)) ) | |
882 | ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(12); | |
883 | if ( (((cutsAnal->IsSelected(part,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)) ) { | |
884 | ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(13); | |
885 | nSelectedAnal++; | |
886 | } | |
887 | ||
888 | if ( !(cutsAnal->IsInFiducialAcceptance(part->Pt(),part->Y(4122))) ) return; | |
889 | ||
890 | if ( !( ( (cutsAnal->IsSelected(part,AliRDHFCuts::kTracks))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) ) return; | |
891 | ||
892 | Int_t aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kTracks); | |
893 | if ( (aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr ) { | |
894 | if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()==-1) || | |
895 | ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()==+1) ) | |
896 | ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates1")))->Fill( -aaa ); | |
897 | else | |
898 | ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates1")))->Fill( aaa ); | |
899 | } | |
900 | ||
901 | aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate); | |
902 | if ((aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr) { | |
903 | if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()==-1) || | |
904 | ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()==+1) ) | |
905 | ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates2")))->Fill( -aaa ); | |
906 | else | |
907 | ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates2")))->Fill( aaa ); | |
908 | } | |
909 | ||
910 | aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kPID); | |
911 | if ((aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr) { | |
912 | if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()==-1) || | |
913 | ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()==+1) ) | |
914 | ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates3")))->Fill( -aaa ); | |
915 | else | |
916 | ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates3")))->Fill( aaa ); | |
917 | } | |
918 | ||
919 | aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kAll); | |
920 | if ((aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr) { | |
921 | if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()==-1) || | |
922 | ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()==+1) ) | |
923 | ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates4")))->Fill( -aaa ); | |
924 | else | |
925 | ((TH1I*)(fOutput->FindObject("hSwitchOnCandidates4")))->Fill( aaa ); | |
926 | } | |
927 | ||
928 | ||
929 | ||
930 | ||
931 | aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate); | |
932 | Int_t flagToCheckCandidate = 0; | |
933 | if ( (aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr ) { | |
934 | if ( aaa==AliRDHFCutsLctoV0::kLcToK0Spr ) { | |
935 | flagToCheckCandidate = aaa; // Lc->K0S+p OK | |
936 | } else { | |
937 | if ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi ) { | |
938 | if (bachelor->Charge()==+1) | |
939 | flagToCheckCandidate = aaa; // Lc->Lambda+pi+ | |
940 | else if (bachelor->Charge()==-1) | |
941 | flagToCheckCandidate =-aaa;//+(AliRDHFCutsLctoV0::kLcToK0Spr); // Lambda+pi- AS Lc->K0S+p candidate | |
942 | } | |
943 | if ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi ) { | |
944 | if (bachelor->Charge()==-1) | |
945 | flagToCheckCandidate = aaa; // Lc->LambdaBar+pi- | |
946 | else if (bachelor->Charge()==+1) | |
947 | flagToCheckCandidate =-aaa;//+(AliRDHFCutsLctoV0::kLcToK0Spr); // LambdaBar+pi+ AS Lc->K0S+p candidate | |
948 | } | |
949 | } | |
950 | } else { | |
951 | if ( aaa==AliRDHFCutsLctoV0::kLcToK0Spr ) { | |
952 | flagToCheckCandidate = -10-(AliRDHFCutsLctoV0::kLcToK0Spr); // NEVER | |
953 | } else { | |
954 | if ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi ) { | |
955 | if (bachelor->Charge()==+1) | |
956 | flagToCheckCandidate = aaa; // Lc->Lambda+pi+ OK | |
957 | else if (bachelor->Charge()==-1) | |
958 | flagToCheckCandidate =-aaa;//+(AliRDHFCutsLctoV0::kLcToK0Spr); // Lambda+pi- AS Lc->Lambda+pi+ candidate | |
959 | } | |
960 | if ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi ) { | |
961 | if (bachelor->Charge()==-1) | |
962 | flagToCheckCandidate = aaa; // Lc->LambdaBar+pi- OK | |
963 | else if (bachelor->Charge()==+1) | |
964 | flagToCheckCandidate =-aaa;//+(AliRDHFCutsLctoV0::kLcToK0Spr); // LambdaBar+pi+ AS Lc->LambdaBar+pi- candidate | |
965 | } | |
0dbd1d4f | 966 | } |
967 | } | |
992ba7d8 | 968 | |
992ba7d8 | 969 | |
992ba7d8 | 970 | |
a578b2da | 971 | Int_t pdgCand = 4122; |
972 | Int_t pdgDgLctoV0bachelor[2]={3122,211}; | |
973 | Int_t pdgDgV0toDaughters[2]={2212,211}; | |
974 | Int_t isLc2LBarpi=0, isLc2Lpi=0; | |
975 | Int_t mcLabel = 0; | |
976 | if (fUseMCInfo) { | |
977 | mcLabel = part->MatchToMC(pdgCand,pdgDgLctoV0bachelor[0],pdgDgLctoV0bachelor,pdgDgV0toDaughters,mcArray,kTRUE); | |
978 | if (mcLabel>=0) { | |
979 | if (bachelor->Charge()==-1) isLc2LBarpi=1; | |
980 | if (bachelor->Charge()==+1) isLc2Lpi=1; | |
981 | } | |
982 | } | |
992ba7d8 | 983 | |
a578b2da | 984 | Int_t pdgDg2prong[2] = {211, 211}; |
985 | Int_t labelK0S = 0; | |
986 | Int_t isK0S = 0; | |
987 | if (fUseMCInfo) { | |
988 | labelK0S = v0part->MatchToMC(310,mcArray,2,pdgDg2prong); | |
989 | if (labelK0S>=0) isK0S = 1; | |
990 | } | |
992ba7d8 | 991 | |
a578b2da | 992 | pdgDg2prong[0] = 211; |
993 | pdgDg2prong[1] = 2212; | |
994 | Int_t isLambda = 0; | |
995 | Int_t isLambdaBar = 0; | |
996 | Int_t lambdaLabel = 0; | |
997 | if (fUseMCInfo) { | |
998 | lambdaLabel = v0part->MatchToMC(3122,mcArray,2,pdgDg2prong); | |
999 | if (lambdaLabel>=0) { | |
1000 | AliAODMCParticle *lambdaTrack = (AliAODMCParticle*)mcArray->At(lambdaLabel); | |
1001 | if (lambdaTrack->GetPdgCode()==3122) isLambda = 1; | |
1002 | else if (lambdaTrack->GetPdgCode()==-3122) isLambdaBar = 1; | |
1003 | } | |
1004 | } | |
0dbd1d4f | 1005 | |
a578b2da | 1006 | pdgDg2prong[0] = 11; |
1007 | pdgDg2prong[1] = 11; | |
1008 | Int_t isGamma = 0; | |
1009 | Int_t gammaLabel = 0; | |
1010 | if (fUseMCInfo) { | |
1011 | gammaLabel = v0part->MatchToMC(22,mcArray,2,pdgDg2prong); | |
1012 | if (gammaLabel>=0) { | |
1013 | AliAODMCParticle *gammaTrack = (AliAODMCParticle*)mcArray->At(gammaLabel); | |
1014 | if (gammaTrack->GetPdgCode()==22) isGamma = 1; | |
1015 | } | |
1016 | } | |
0dbd1d4f | 1017 | |
a578b2da | 1018 | Double_t invmassLc2Lpi = part->InvMassLctoLambdaPi(); |
1019 | Double_t invmassLambda = v0part->MassLambda(); | |
1020 | Double_t invmassLambdaBar = v0part->MassAntiLambda(); | |
1021 | ||
1022 | Int_t isLcByMC = isLc+isLc2LBarpi*2+isLc2Lpi*4; | |
1023 | Int_t isV0ByMC = isK0S+isLambdaBar*2+isLambda*4+isGamma*8; | |
1024 | ||
1025 | Double_t nSigmaITSpr=-999.; | |
1026 | cutsAnal->GetPidHF()->GetnSigmaITS(bachelor,4,nSigmaITSpr); | |
1027 | Double_t nSigmaTPCpr=-999.; | |
1028 | cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,4,nSigmaTPCpr); | |
1029 | Double_t nSigmaTOFpr=-999.; | |
1030 | cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,4,nSigmaTOFpr); | |
1031 | ||
1032 | Double_t nSigmaITSpi=-999.; | |
1033 | cutsAnal->GetPidHF()->GetnSigmaITS(bachelor,2,nSigmaITSpi); | |
1034 | Double_t nSigmaTPCpi=-999.; | |
1035 | cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,2,nSigmaTPCpi); | |
1036 | Double_t nSigmaTOFpi=-999.; | |
1037 | cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,2,nSigmaTOFpi); | |
1038 | ||
1039 | Double_t nSigmaITSka=-999.; | |
1040 | cutsAnal->GetPidHF()->GetnSigmaITS(bachelor,3,nSigmaITSka); | |
1041 | Double_t nSigmaTPCka=-999.; | |
1042 | cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,3,nSigmaTPCka); | |
1043 | Double_t nSigmaTOFka=-999.; | |
1044 | cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,3,nSigmaTOFka); | |
1045 | ||
1046 | ||
1047 | // Fill candidate variable Tree (track selection, V0 invMass selection) | |
1048 | if ( fWriteVariableTree && !onFlyV0 && isInV0windowProd && isInCascadeWindow && part->CosV0PointingAngle()>0.99) { | |
1049 | ||
1050 | fCandidateVariables[0] = fUseMCInfo+isLcByMC; // 0: real data; 1: bkg; 2: Lc->K0S+p; 3: Lc->LambdaBar+pbar; 5: Lc->Lambda+p | |
1051 | fCandidateVariables[1] = fUseMCInfo+isV0ByMC; // 0: real data; 1: bkg; 2: K0S->pi+pi; 3: LambdaBar->pbar+pi+; 5: Lambda->p+pi- | |
1052 | fCandidateVariables[2] = invmassLc; | |
1053 | fCandidateVariables[3] = invmassLc2Lpi; | |
1054 | fCandidateVariables[4] = invmassK0s; | |
1055 | fCandidateVariables[5] = invmassLambda; | |
1056 | fCandidateVariables[6] = invmassLambdaBar; | |
1057 | fCandidateVariables[7] = part->CosV0PointingAngle(); | |
1058 | fCandidateVariables[8] = dcaV0ptp; | |
1059 | fCandidateVariables[9] = part->Getd0Prong(0); | |
1060 | fCandidateVariables[10] = part->Getd0Prong(1); | |
1061 | fCandidateVariables[11] = nSigmaTPCpr; | |
1062 | fCandidateVariables[12] = nSigmaTPCpi; | |
1063 | fCandidateVariables[13] = nSigmaTPCka; | |
1064 | fCandidateVariables[14] = nSigmaTOFpr; | |
1065 | fCandidateVariables[15] = nSigmaTOFpi; | |
1066 | fCandidateVariables[16] = nSigmaTOFka; | |
1067 | fCandidateVariables[17] = bachelor->Px(); | |
1068 | fCandidateVariables[18] = bachelor->Py(); | |
1069 | fCandidateVariables[19] = bachelor->Pz(); | |
1070 | AliAODTrack *v0neg = (AliAODTrack*)part->Getv0NegativeTrack(); | |
1071 | fCandidateVariables[20] = v0neg->Px(); | |
1072 | fCandidateVariables[21] = v0neg->Py(); | |
1073 | fCandidateVariables[22] = v0neg->Pz(); | |
1074 | AliAODTrack *v0pos = (AliAODTrack*)part->Getv0PositiveTrack(); | |
1075 | fCandidateVariables[23] = v0pos->Px(); | |
1076 | fCandidateVariables[24] = v0pos->Py(); | |
1077 | fCandidateVariables[25] = v0pos->Pz(); | |
1078 | fCandidateVariables[26] = part->QtProng(0); | |
1079 | fCandidateVariables[27] = part->Alpha(); | |
1080 | fCandidateVariables[28] = v0part->Getd0Prong(0); | |
1081 | fCandidateVariables[29] = v0part->Getd0Prong(1); | |
1082 | fCandidateVariables[30] = part->PxProng(0); | |
1083 | fCandidateVariables[31] = part->PyProng(0); | |
1084 | fCandidateVariables[32] = part->PzProng(0); | |
1085 | fCandidateVariables[33] = part->PxProng(1); | |
1086 | fCandidateVariables[34] = part->PyProng(1); | |
1087 | fCandidateVariables[35] = part->PzProng(1); | |
1088 | fCandidateVariables[36] = v0part->PxProng(0); | |
1089 | fCandidateVariables[37] = v0part->PyProng(0); | |
1090 | fCandidateVariables[38] = v0part->PzProng(0); | |
1091 | fCandidateVariables[39] = v0part->PxProng(1); | |
1092 | fCandidateVariables[40] = v0part->PyProng(1); | |
1093 | fCandidateVariables[41] = v0part->PzProng(1); | |
1094 | fCandidateVariables[42] = flagToCheckCandidate; | |
1095 | fCandidateVariables[43] = v0part->InvMass2Prongs(0,1,11,11); | |
1096 | ||
1097 | fCandidateVariables[44] = bachelor->P(); | |
1098 | fCandidateVariables[45] = bachelor->Pt(); | |
1099 | fCandidateVariables[46] = v0pos->P(); | |
1100 | fCandidateVariables[47] = v0pos->Pt(); | |
1101 | fCandidateVariables[48] = v0neg->P(); | |
1102 | fCandidateVariables[49] = v0neg->Pt(); | |
1103 | fCandidateVariables[50] = part->PProng(0); | |
1104 | fCandidateVariables[51] = part->PtProng(0); | |
1105 | fCandidateVariables[52] = part->PProng(1); | |
1106 | fCandidateVariables[53] = part->PtProng(1); | |
1107 | fCandidateVariables[54] = v0part->PProng(0); | |
1108 | fCandidateVariables[55] = v0part->PtProng(0); | |
1109 | fCandidateVariables[56] = v0part->PProng(1); | |
1110 | fCandidateVariables[57] = v0part->PtProng(1); | |
1111 | fCandidateVariables[58] = part->P(); | |
1112 | fCandidateVariables[59] = part->Pt(); | |
1113 | fCandidateVariables[60] = v0part->P(); | |
1114 | fCandidateVariables[61] = v0part->Pt(); | |
1115 | ||
1116 | fCandidateVariables[62] = part->CosPointingAngle(); | |
1117 | fCandidateVariables[63] = part->DecayLength(); | |
1118 | fCandidateVariables[64] = part->DecayLengthV0(); | |
1119 | ||
1120 | fCandidateVariables[65] = part->Y(4122); | |
1121 | ||
1122 | fCandidateVariables[66] = part->InvMass2Prongs(0,1,211,310); // D+ -> pi+ K0S | |
1123 | fCandidateVariables[67] = part->InvMass2Prongs(0,1,321,310); // D+S -> K+ K0S | |
1124 | ||
1125 | fCandidateVariables[68] = nSigmaITSpr; | |
1126 | fCandidateVariables[69] = nSigmaITSpi; | |
1127 | fCandidateVariables[70] = nSigmaITSka; | |
1128 | ||
1129 | //AliInfo(Form(" partP: %2.1f %2.1f %2.1f",part->PxProng(0)/bachelor->Px(),part->PyProng(0)/bachelor->Px(),part->PzProng(0)/bachelor->Px())); // !=1, as expected | |
1130 | //AliInfo(Form(" V0posP: %2.1f %2.1f %2.1f",v0part->PxProng(0)/v0pos->Px(),v0part->PyProng(0)/v0pos->Px(),v0part->PzProng(0)/v0pos->Px())); // !=1, as expected | |
1131 | //AliInfo(Form(" V0negP: %2.1f %2.1f %2.1f",v0part->PxProng(1)/v0neg->Px(),v0part->PyProng(1)/v0neg->Px(),v0part->PzProng(1)/v0neg->Px())); // !=1, as expected | |
1132 | ||
1133 | Double_t v0Momentum = (v0part->PxProng(0)+v0part->PxProng(1))*(v0part->PxProng(0)+v0part->PxProng(1)); | |
1134 | v0Momentum += (v0part->PyProng(0)+v0part->PyProng(1))*(v0part->PyProng(0)+v0part->PyProng(1)); | |
1135 | v0Momentum += (v0part->PzProng(0)+v0part->PzProng(1))*(v0part->PzProng(0)+v0part->PzProng(1)); | |
1136 | v0Momentum = TMath::Sqrt(v0Momentum); | |
1137 | ||
1138 | Double_t lcMomentum = (part->PxProng(0)+part->PxProng(1))*(part->PxProng(0)+part->PxProng(1)); | |
1139 | lcMomentum += (part->PyProng(0)+part->PyProng(1))*(part->PyProng(0)+part->PyProng(1)); | |
1140 | lcMomentum += (part->PzProng(0)+part->PzProng(1))*(part->PzProng(0)+part->PzProng(1)); | |
1141 | lcMomentum = TMath::Sqrt(lcMomentum); | |
1142 | ||
1143 | //AliInfo(Form(" v0Momentum-ratio=%2.1f - lcMomentum-ratio=%2.1f",v0Momentum/v0part->P(),lcMomentum/part->P()));// ==1, as expected | |
1144 | ||
1145 | fVariablesTree->Fill(); | |
0dbd1d4f | 1146 | } |
1147 | ||
a578b2da | 1148 | |
1149 | ||
0dbd1d4f | 1150 | if (onFlyV0 && fUseOnTheFlyV0) { |
992ba7d8 | 1151 | |
1152 | fillthis="histK0SMass"; | |
1153 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassK0s,ptK0s); | |
1154 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassK0s,ptK0s); | |
1155 | ||
a578b2da | 1156 | if (isCandidateSelectedCuts) { |
0dbd1d4f | 1157 | |
1158 | fillthis="histpK0Svsp"; | |
1159 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momBach,momK0s); | |
1160 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momBach,momK0s); | |
1161 | ||
a578b2da | 1162 | fillthis="histDCAtoPVvspK0S"; |
1163 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp); | |
1164 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp); | |
0dbd1d4f | 1165 | |
1166 | fillthis="histArmPodK0s"; | |
1167 | FillArmPodDistribution(v0part,fillthis,fOutputAll); | |
1168 | if (isBachelorID) FillArmPodDistribution(v0part,fillthis,fOutputPIDBach); | |
1169 | ||
992ba7d8 | 1170 | fillthis="histLcMassByK0S"; |
1171 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
1172 | if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
1173 | ||
0dbd1d4f | 1174 | } |
992ba7d8 | 1175 | } |
0dbd1d4f | 1176 | else if (!onFlyV0) { |
992ba7d8 | 1177 | |
1178 | fillthis="histK0SMassOffline"; | |
1179 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassK0s,ptK0s); | |
1180 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassK0s,ptK0s); | |
1181 | ||
a578b2da | 1182 | if (isCandidateSelectedCuts) { |
1183 | ||
1184 | fillthis="histoprotonBachSigmaVspTOF"; | |
1185 | ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTOFpr); | |
1186 | fillthis="histoprotonBachSigmaVspTPC"; | |
1187 | ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTPCpr); | |
1188 | ||
0dbd1d4f | 1189 | |
1190 | fillthis="histpK0SvspOffline"; | |
1191 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momBach,momK0s); | |
1192 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momBach,momK0s); | |
1193 | ||
a578b2da | 1194 | fillthis="histDCAtoPVvspK0SOffline"; |
1195 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp); | |
1196 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp); | |
0dbd1d4f | 1197 | |
1198 | fillthis="histOfflineArmPodK0s"; | |
1199 | FillArmPodDistribution(v0part,fillthis,fOutputAll); | |
1200 | if (isBachelorID) FillArmPodDistribution(v0part,fillthis,fOutputPIDBach); | |
1201 | ||
992ba7d8 | 1202 | fillthis="histLcMassOfflineByK0S"; |
1203 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
a578b2da | 1204 | if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); // main histogram |
0dbd1d4f | 1205 | |
992ba7d8 | 1206 | } |
1207 | } | |
1208 | ||
1209 | ||
1210 | if (fUseMCInfo) { | |
1211 | if (isLc==1) { | |
0dbd1d4f | 1212 | if (onFlyV0 && fUseOnTheFlyV0) { |
992ba7d8 | 1213 | |
1214 | fillthis="histK0SMassSgn"; | |
1215 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassK0s,ptK0s); | |
1216 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassK0s,ptK0s); | |
1217 | ||
a578b2da | 1218 | if (isCandidateSelectedCuts) { |
0dbd1d4f | 1219 | |
1220 | fillthis="histpK0SvspSgn"; | |
1221 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momBach,momK0s); | |
1222 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momBach,momK0s); | |
1223 | ||
a578b2da | 1224 | fillthis="histDCAtoPVvspK0SSgn"; |
1225 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp); | |
1226 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp); | |
992ba7d8 | 1227 | |
1228 | fillthis="histArmPodK0sSgn"; | |
1229 | FillArmPodDistribution(v0part,fillthis,fOutputAll); | |
1230 | if (isBachelorID) FillArmPodDistribution(v0part,fillthis,fOutputPIDBach); | |
0dbd1d4f | 1231 | |
1232 | fillthis="histLcMassByK0SSgn"; | |
1233 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
1234 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
1235 | ||
992ba7d8 | 1236 | } |
1237 | ||
1238 | } | |
0dbd1d4f | 1239 | else if (!onFlyV0) { |
992ba7d8 | 1240 | |
992ba7d8 | 1241 | fillthis="histK0SMassOfflineSgn"; |
1242 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassK0s,ptK0s); | |
1243 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassK0s,ptK0s); | |
1244 | ||
a578b2da | 1245 | if (isCandidateSelectedCuts) { |
1246 | ||
1247 | fillthis="histoprotonBachSigmaVspTOFsgn"; | |
1248 | ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTOFpr); | |
1249 | fillthis="histoprotonBachSigmaVspTPCsgn"; | |
1250 | ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTPCpr); | |
1251 | ||
0dbd1d4f | 1252 | |
1253 | fillthis="histpK0SvspOfflineSgn"; | |
1254 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momBach,momK0s); | |
1255 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momBach,momK0s); | |
1256 | ||
a578b2da | 1257 | fillthis="histDCAtoPVvspK0SOfflineSgn"; |
1258 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp); | |
1259 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp); | |
0dbd1d4f | 1260 | |
1261 | fillthis="histOfflineArmPodK0sSgn"; | |
1262 | FillArmPodDistribution(v0part,fillthis,fOutputAll); | |
1263 | if (isBachelorID) FillArmPodDistribution(v0part,fillthis,fOutputPIDBach); | |
992ba7d8 | 1264 | |
992ba7d8 | 1265 | fillthis="histLcMassOfflineByK0SSgn"; |
1266 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
1267 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
1268 | ||
992ba7d8 | 1269 | } |
1270 | ||
1271 | } | |
1272 | ||
1273 | }// sgn | |
1274 | else { // bkg | |
0dbd1d4f | 1275 | if (onFlyV0 && fUseOnTheFlyV0) { |
992ba7d8 | 1276 | |
1277 | fillthis="histK0SMassBkg"; | |
1278 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassK0s,ptK0s); | |
1279 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassK0s,ptK0s); | |
1280 | ||
a578b2da | 1281 | if (isCandidateSelectedCuts) { |
0dbd1d4f | 1282 | |
1283 | fillthis="histpK0SvspBkg"; | |
1284 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momBach,momK0s); | |
1285 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momBach,momK0s); | |
1286 | ||
a578b2da | 1287 | fillthis="histDCAtoPVvspK0SBkg"; |
1288 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp); | |
1289 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp); | |
0dbd1d4f | 1290 | |
1291 | fillthis="histArmPodK0sBkg"; | |
1292 | FillArmPodDistribution(v0part,fillthis,fOutputAll); | |
1293 | if (isBachelorID) FillArmPodDistribution(v0part,fillthis,fOutputPIDBach); | |
1294 | ||
992ba7d8 | 1295 | fillthis="histLcMassByK0SBkg"; |
1296 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
1297 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
1298 | ||
992ba7d8 | 1299 | } |
1300 | ||
1301 | } | |
0dbd1d4f | 1302 | else if (!onFlyV0) { |
992ba7d8 | 1303 | |
1304 | fillthis="histK0SMassOfflineBkg"; | |
1305 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassK0s,ptK0s); | |
1306 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassK0s,ptK0s); | |
1307 | ||
a578b2da | 1308 | if (isCandidateSelectedCuts) { |
1309 | ||
1310 | fillthis="histoprotonBachSigmaVspTOFbkg"; | |
1311 | ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTOFpr); | |
1312 | fillthis="histoprotonBachSigmaVspTPCbkg"; | |
1313 | ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTPCpr); | |
1314 | ||
0dbd1d4f | 1315 | |
1316 | fillthis="histpK0SvspOfflineBkg"; | |
1317 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momBach,momK0s); | |
1318 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momBach,momK0s); | |
1319 | ||
a578b2da | 1320 | fillthis="histDCAtoPVvspK0SOfflineBkg"; |
1321 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp); | |
1322 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momK0s,dcaV0ptp); | |
0dbd1d4f | 1323 | |
1324 | fillthis="histOfflineArmPodK0sBkg"; | |
1325 | FillArmPodDistribution(v0part,fillthis,fOutputAll); | |
1326 | if (isBachelorID) FillArmPodDistribution(v0part,fillthis,fOutputPIDBach); | |
1327 | ||
992ba7d8 | 1328 | fillthis="histLcMassOfflineByK0SBkg"; |
1329 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
1330 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
1331 | ||
992ba7d8 | 1332 | } |
0dbd1d4f | 1333 | |
1334 | } | |
1335 | ||
992ba7d8 | 1336 | } |
1337 | } // if fUseMCInfo | |
1338 | ||
1339 | return; | |
1340 | } | |
1341 | //------------------------------------------------------------------------------- | |
1342 | Int_t AliAnalysisTaskSELc2V0bachelor::CheckOrigin(TClonesArray* arrayMC, AliAODMCParticle *mcPartCandidate) const { | |
1343 | // | |
1344 | // checking whether the mother of the particles come from a charm or a bottom quark | |
1345 | // | |
1346 | ||
1347 | Int_t pdgGranma = 0; | |
1348 | Int_t abspdgGranma =0; | |
1349 | Bool_t isFromB=kFALSE; | |
1350 | Bool_t isQuarkFound=kFALSE; | |
1351 | Int_t mother = mcPartCandidate->GetMother(); | |
1352 | Int_t istep = 0; | |
1353 | while (mother>0) { | |
1354 | istep++; | |
1355 | AliAODMCParticle* mcGranma = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mother)); | |
1356 | if (mcGranma) { | |
1357 | pdgGranma = mcGranma->GetPdgCode(); | |
1358 | abspdgGranma = TMath::Abs(pdgGranma); | |
1359 | if ( (abspdgGranma > 500 && abspdgGranma < 600 ) || | |
1360 | (abspdgGranma > 5000 && abspdgGranma < 6000) ) isFromB=kTRUE; | |
1361 | else if (abspdgGranma==4 || abspdgGranma==5) isQuarkFound=kTRUE; | |
1362 | mother = mcGranma->GetMother(); | |
1363 | } else { | |
1364 | AliError("Failed casting the mother particle!"); | |
1365 | break; | |
1366 | } | |
1367 | } | |
1368 | ||
1369 | if (isFromB) return 5; | |
1370 | else return 4; | |
1371 | ||
1372 | } | |
1373 | ||
1374 | //------------------------------------------------------------------------------- | |
a578b2da | 1375 | void AliAnalysisTaskSELc2V0bachelor::MakeAnalysisForLc2prK0S(TClonesArray *arrayLctopKos, |
1376 | TClonesArray *mcArray, | |
1377 | Int_t &nSelectedProd, | |
1378 | AliRDHFCutsLctoV0 *cutsProd, | |
1379 | Int_t &nSelectedAnal, | |
1380 | AliRDHFCutsLctoV0 *cutsAnal) | |
992ba7d8 | 1381 | { |
1382 | ||
1383 | // counters for efficiencies | |
1384 | Int_t icountReco = 0; | |
1385 | ||
1386 | //Lc prong needed to MatchToMC method | |
1387 | ||
e7af8919 | 1388 | Int_t pdgCand = 4122; |
1389 | Int_t pdgDgLctoV0bachelorOld[2]={2212,310}; | |
1390 | Int_t pdgDgLctoV0bachelor[2]={310,2212}; | |
1391 | Int_t pdgDgV0toDaughters[2]={211,211}; | |
992ba7d8 | 1392 | |
1393 | // loop over cascades to search for candidates Lc->p+K0S | |
1394 | Int_t nCascades= arrayLctopKos->GetEntriesFast(); | |
0dbd1d4f | 1395 | if (nCascades==0) { |
1396 | AliInfo("Could not find cascades, skipping the event"); | |
1397 | return; | |
1398 | } | |
992ba7d8 | 1399 | for (Int_t iLctopK0s = 0; iLctopK0s<nCascades; iLctopK0s++) { |
1400 | ||
0dbd1d4f | 1401 | ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(0); |
1402 | ||
992ba7d8 | 1403 | // Lc candidates and K0s from Lc |
1404 | AliAODRecoCascadeHF* lcK0spr = (AliAODRecoCascadeHF*)arrayLctopKos->At(iLctopK0s); | |
1405 | if (!lcK0spr->GetSecondaryVtx()) { | |
1406 | AliInfo("No secondary vertex"); | |
1407 | continue; | |
1408 | } | |
1409 | ||
0dbd1d4f | 1410 | ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(1); |
1411 | ||
992ba7d8 | 1412 | AliAODTrack * v0Pos = lcK0spr->Getv0PositiveTrack(); |
1413 | AliAODTrack * v0Neg = lcK0spr->Getv0NegativeTrack(); | |
1414 | if (v0Pos->Charge() == v0Neg->Charge()) continue; | |
1415 | ||
0dbd1d4f | 1416 | ((TH1I*)(fOutput->FindObject("hCandidateSelection")))->Fill(2); |
1417 | ||
992ba7d8 | 1418 | Int_t isLc = 0; |
1419 | ||
1420 | if (fUseMCInfo) { | |
1421 | ||
1422 | Bool_t isPrimary=kTRUE; | |
1423 | ||
1424 | Int_t pdgCode=-2; | |
1425 | ||
1426 | // find associated MC particle for Lc -> p+K0 and K0S->pi+pi | |
e7af8919 | 1427 | Int_t mcLabelOld = MatchToMC(lcK0spr,pdgDgLctoV0bachelorOld,pdgDgV0toDaughters,mcArray); |
1428 | Int_t mcLabel = lcK0spr->MatchToMC(pdgCand,pdgDgLctoV0bachelor[0],pdgDgLctoV0bachelor,pdgDgV0toDaughters,mcArray,kTRUE); | |
1429 | if (mcLabelOld!=mcLabel) AliInfo(Form(" Changed MC label: oldONE=%d wrt rightONE=%d",mcLabelOld,mcLabel)); | |
992ba7d8 | 1430 | if (mcLabel>=0) { |
a578b2da | 1431 | AliInfo(Form(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~cascade number %d (total cascade number = %d)", iLctopK0s,nCascades)); |
992ba7d8 | 1432 | |
1433 | AliAODMCParticle *partLc = (AliAODMCParticle*)mcArray->At(mcLabel); | |
1434 | Int_t checkOrigin = CheckOrigin(mcArray,partLc); | |
1435 | if (checkOrigin==5) isPrimary=kFALSE; | |
1436 | ||
1437 | pdgCode = partLc->GetPdgCode(); | |
a578b2da | 1438 | if (pdgCode<0) AliInfo(Form(" ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ MClabel=%d ~~~~~~~~~~ pdgCode=%d", mcLabel, pdgCode)); |
992ba7d8 | 1439 | pdgCode = TMath::Abs(pdgCode); |
1440 | isLc = 1; | |
1441 | } else { | |
1442 | pdgCode=-1; | |
1443 | } | |
1444 | } | |
1445 | ||
992ba7d8 | 1446 | FillLc2pK0Sspectrum(lcK0spr, isLc, |
1447 | nSelectedProd, cutsProd, | |
a578b2da | 1448 | nSelectedAnal, cutsAnal, |
1449 | mcArray); | |
992ba7d8 | 1450 | |
1451 | } | |
1452 | ||
1453 | AliDebug(2, Form("Found %d Reco particles that are Lc!!", icountReco)); | |
1454 | ||
1455 | } | |
1456 | //------------------------------------------------------------------------------- | |
1457 | Int_t AliAnalysisTaskSELc2V0bachelor::MatchToMC(AliAODRecoCascadeHF *lc2bacV0, | |
1458 | Int_t *pdgDgLc2bacV0, Int_t *pdgDgV0, | |
1459 | TClonesArray *mcArray) | |
1460 | { | |
1461 | ||
1462 | // bachelor | |
1463 | AliAODTrack *bachelor = (AliAODTrack*)lc2bacV0->GetBachelor(); | |
1464 | Int_t labBachelor = bachelor->GetLabel(); | |
1465 | if (labBachelor<0) return -1; | |
1466 | AliAODMCParticle *partBachelor = (AliAODMCParticle*)mcArray->At(labBachelor); | |
1467 | if (TMath::Abs(partBachelor->GetPdgCode())!=pdgDgLc2bacV0[0]) return -1; | |
1468 | ||
1469 | Int_t labBacMother = partBachelor->GetMother(); | |
1470 | if (labBacMother<0) return -1; | |
1471 | AliAODMCParticle *partBacMother = (AliAODMCParticle*)mcArray->At(labBacMother); | |
1472 | if (TMath::Abs(partBacMother->GetPdgCode())!=4122) return -1; | |
1473 | ||
1474 | // V0 | |
1475 | AliAODTrack *posV0Daugh = (AliAODTrack*)lc2bacV0->Getv0PositiveTrack(); | |
1476 | AliAODTrack *negV0Daugh = (AliAODTrack*)lc2bacV0->Getv0NegativeTrack(); | |
1477 | Int_t labV0pos = posV0Daugh->GetLabel(); | |
1478 | Int_t labV0neg = negV0Daugh->GetLabel(); | |
1479 | ||
1480 | if (labV0pos<0 || labV0neg<0) return -1; | |
1481 | AliAODMCParticle *partV0pos = (AliAODMCParticle*)mcArray->At(labV0neg); | |
1482 | AliAODMCParticle *partV0neg = (AliAODMCParticle*)mcArray->At(labV0pos); | |
1483 | ||
1484 | if ( ! ( (TMath::Abs(partV0pos->GetPdgCode())==pdgDgV0[0] && | |
1485 | TMath::Abs(partV0neg->GetPdgCode())==pdgDgV0[1]) || | |
1486 | (TMath::Abs(partV0pos->GetPdgCode())==pdgDgV0[1] && | |
1487 | TMath::Abs(partV0neg->GetPdgCode())==pdgDgV0[0]) ) ) return -1; | |
1488 | Int_t labV0posMother = partV0pos->GetMother(); | |
1489 | Int_t labV0negMother = partV0neg->GetMother(); | |
1490 | ||
1491 | if (labV0posMother<0 || labV0negMother<0) return -1; | |
1492 | if (labV0posMother!=labV0negMother) return -1; | |
1493 | ||
1494 | AliAODMCParticle *motherV0 = (AliAODMCParticle*)mcArray->At(labV0posMother); | |
1495 | ||
1496 | if (TMath::Abs(motherV0->GetPdgCode())!=pdgDgLc2bacV0[1]) return -1; | |
1497 | Int_t labV0mother = motherV0->GetMother(); | |
1498 | if (labV0mother<0) return -1; | |
1499 | AliAODMCParticle *gMotherV0 = (AliAODMCParticle*)mcArray->At(labV0mother); | |
1500 | ||
1501 | if ( !(pdgDgLc2bacV0[1]==310 && TMath::Abs(gMotherV0->GetPdgCode())==311) && | |
1502 | !(pdgDgLc2bacV0[1]==3122 && TMath::Abs(motherV0->GetPdgCode())==3122) ) return -1; | |
1503 | ||
1504 | if ( (pdgDgLc2bacV0[1]==310 && TMath::Abs(gMotherV0->GetPdgCode())==311) ) { | |
1505 | Int_t labV0GMother = gMotherV0->GetMother(); | |
1506 | if (labV0GMother<0) return -1; | |
1507 | AliAODMCParticle *ggMotherV0 = (AliAODMCParticle*)mcArray->At(labV0GMother); | |
1508 | ||
1509 | if (TMath::Abs(ggMotherV0->GetPdgCode())!=4122) return -1; | |
1510 | gMotherV0 = (AliAODMCParticle*)ggMotherV0; | |
1511 | labV0mother=labV0GMother; | |
1512 | } | |
1513 | else if (pdgDgLc2bacV0[1]==3122 && TMath::Abs(motherV0->GetPdgCode())==3122) { | |
1514 | if (TMath::Abs(gMotherV0->GetPdgCode())!=4122) return -1; | |
1515 | } | |
1516 | ||
1517 | if (labBacMother!=labV0mother) { | |
a578b2da | 1518 | //AliInfo(Form(" bachelor mother label=%d - V0 mother label=%d",labBacMother, labV0mother)); |
992ba7d8 | 1519 | return -1; |
1520 | } | |
1521 | ||
a578b2da | 1522 | //AliInfo(Form(" V0: %d (label=%d) -> %d (label=%d) + %d (label=%d) --- GM %d (PDG=%d)", |
1523 | //motherV0->GetPdgCode(), labV0posMother, | |
1524 | //partV0pos->GetPdgCode(), labV0pos, | |
1525 | //partV0neg->GetPdgCode(), labV0neg, | |
1526 | //labV0mother, gMotherV0->GetPdgCode())); | |
992ba7d8 | 1527 | |
a578b2da | 1528 | //AliInfo(Form(" Bachelor: %d (label=%d) --- M %d (label=%d)", |
1529 | //partBachelor->GetPdgCode(), labBachelor, | |
1530 | //labBacMother, partBacMother->GetPdgCode())); | |
992ba7d8 | 1531 | return labBacMother;//labV0mother;// |
1532 | ||
1533 | } | |
1534 | ||
1535 | //----------------------- | |
1536 | void AliAnalysisTaskSELc2V0bachelor::SearchLcDaughter(TClonesArray *arrayMC) | |
1537 | { | |
1538 | ||
e7af8919 | 1539 | AliAODMCParticle *searchLc=0; |
1540 | AliAODMCParticle *daugh=0; | |
1541 | AliAODMCParticle *daugh1=0; | |
1542 | AliAODMCParticle *daugh2=0; | |
1543 | AliAODMCParticle *daughK0=0; | |
1544 | AliAODMCParticle *daughK0s1=0; | |
1545 | AliAODMCParticle *daughK0s2=0; | |
1546 | AliAODMCParticle *daughL1=0; | |
1547 | AliAODMCParticle *daughL2=0; | |
992ba7d8 | 1548 | |
e7af8919 | 1549 | Int_t nDaughLc=0; |
992ba7d8 | 1550 | Int_t nDaughK0=0; |
1551 | Int_t nDaughK0s=0; | |
1552 | Int_t searchLcpdg=0; | |
1553 | Int_t daughPdg1=0; | |
1554 | Int_t daughPdg2=0; | |
1555 | Int_t daughK0Pdg=0; | |
1556 | Int_t nDaughL=0; | |
1557 | Int_t daughK0s1pdg; | |
1558 | Int_t daughK0s2pdg; | |
1559 | Int_t daughL1pdg=0; | |
1560 | Int_t daughL2pdg=0; | |
1561 | ||
1562 | TString fillthis=""; | |
1563 | fillthis="histMcStatLc"; | |
1564 | ||
1565 | for (Int_t iii=0; iii<arrayMC->GetEntries(); iii++) { | |
1566 | searchLc = (AliAODMCParticle*)arrayMC->At(iii); | |
1567 | searchLcpdg = searchLc->GetPdgCode(); | |
1568 | if (TMath::Abs(searchLcpdg) == 4122) { | |
1569 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(0); | |
1570 | nDaughLc= searchLc->GetNDaughters(); | |
1571 | ||
1572 | if (searchLcpdg == 4122) { // It is Lc+ | |
1573 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(1); | |
1574 | if (nDaughLc!=2) continue; | |
a578b2da | 1575 | if (searchLc->GetDaughter(0)<0 || searchLc->GetDaughter(1)) continue; |
992ba7d8 | 1576 | daugh1 = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(0)); |
992ba7d8 | 1577 | daugh2 = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(1)); |
a578b2da | 1578 | if (!daugh1 || !daugh2) continue; |
1579 | daughPdg1=daugh1->GetPdgCode(); | |
992ba7d8 | 1580 | daughPdg2=daugh2->GetPdgCode(); |
a578b2da | 1581 | |
992ba7d8 | 1582 | if ( (daughPdg1==2212 && daughPdg2==-311) || |
1583 | (daughPdg2==2212 && daughPdg1==-311) ) { // Lc+ -> p K0bar | |
1584 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(2); | |
a578b2da | 1585 | |
992ba7d8 | 1586 | if (daughPdg1==-311) { |
992ba7d8 | 1587 | nDaughK0=daugh1->GetNDaughters(); |
e7af8919 | 1588 | if (nDaughK0!=1) { |
1589 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(4); | |
1590 | continue; | |
e7af8919 | 1591 | } |
a578b2da | 1592 | daughK0 = (AliAODMCParticle*)arrayMC->At(daugh1->GetDaughter(0)); // K0S |
1593 | } else { // if (daughPdg2==-311) | |
e7af8919 | 1594 | nDaughK0=daugh2->GetNDaughters(); |
1595 | if (nDaughK0!=1) { | |
1596 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(4); | |
1597 | continue; | |
e7af8919 | 1598 | } |
a578b2da | 1599 | daughK0 = (AliAODMCParticle*)arrayMC->At(daugh2->GetDaughter(0)); // K0S |
992ba7d8 | 1600 | } |
e7af8919 | 1601 | if (!daughK0) { |
1602 | //((TH1F*)(fOutput->FindObject(fillthis)))->Fill(4); | |
1603 | continue; | |
992ba7d8 | 1604 | } |
e7af8919 | 1605 | AliInfo(" Found positive daughK0 "); |
1606 | daughK0Pdg=daughK0->GetPdgCode(); | |
1607 | if (daughK0Pdg!=310) { | |
1608 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(4); | |
1609 | continue; | |
a578b2da | 1610 | } |
1611 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(3); | |
1612 | nDaughK0s=daughK0->GetNDaughters(); | |
1613 | if (nDaughK0s!=2) { | |
1614 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(6); | |
1615 | continue; | |
1616 | } | |
1617 | if (daughK0->GetDaughter(0)<0 || daughK0->GetDaughter(1)<0) continue; | |
1618 | daughK0s1= (AliAODMCParticle*)arrayMC->At(daughK0->GetDaughter(0)); | |
1619 | daughK0s2= (AliAODMCParticle*)arrayMC->At(daughK0->GetDaughter(1)); | |
1620 | if (!daughK0s1 || !daughK0s2) continue; | |
1621 | daughK0s1pdg=daughK0s1->GetPdgCode(); | |
1622 | daughK0s2pdg=daughK0s2->GetPdgCode(); | |
1623 | ||
1624 | if ( ((daughK0s1pdg==211) && (daughK0s2pdg==-211)) || | |
1625 | ((daughK0s2pdg==211) && (daughK0s1pdg==-211)) ) ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(5); | |
1626 | else ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(6); | |
e7af8919 | 1627 | |
a578b2da | 1628 | } //if ((daughPdg1==2212 && daughPdg2==-311)||(daughPdg2==2212 && daughPdg1==-311)) |
992ba7d8 | 1629 | |
1630 | else if ( (daughPdg1==3122 && daughPdg2==211) || | |
1631 | (daughPdg2==3122 && daughPdg1==211) ) { // Lc+ -> pi+ Lambda | |
1632 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(7); | |
a578b2da | 1633 | |
e7af8919 | 1634 | if (daughPdg1==3122) |
1635 | daugh = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(0)); // Lambda | |
1636 | else | |
1637 | daugh = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(1)); // Lambda | |
1638 | if (!daugh) continue; | |
e7af8919 | 1639 | AliInfo(" Found positive daughL "); |
992ba7d8 | 1640 | nDaughL=daugh->GetNDaughters(); |
a578b2da | 1641 | if (nDaughL!=2) { |
1642 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(9); | |
1643 | continue; | |
1644 | } | |
1645 | if (daugh->GetDaughter(0)<0 || daugh->GetDaughter(1)<0) continue; | |
1646 | daughL1= (AliAODMCParticle*)arrayMC->At(daugh->GetDaughter(0)); | |
1647 | daughL2= (AliAODMCParticle*)arrayMC->At(daugh->GetDaughter(1)); | |
1648 | if (!daughL1 || !daughL2) continue; | |
1649 | daughL1pdg=daughL1->GetPdgCode(); | |
1650 | daughL2pdg=daughL2->GetPdgCode(); | |
1651 | if ( ((daughL1pdg==-211) && (daughL2pdg==2212)) || | |
1652 | ((daughL2pdg==-211) && (daughL1pdg==2212)) ) ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(8); | |
992ba7d8 | 1653 | else ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(9); |
992ba7d8 | 1654 | |
a578b2da | 1655 | }//else if ((daughPdg1==3122 && daughPdg2==211)||(daughPdg2==3122 && daughPdg1==211)) |
992ba7d8 | 1656 | |
1657 | }//if (searchLcpdg == 4122) | |
1658 | ||
1659 | if (searchLcpdg == -4122) { // It is Lc+ | |
a578b2da | 1660 | |
992ba7d8 | 1661 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-1); |
a578b2da | 1662 | |
992ba7d8 | 1663 | if (nDaughLc!=2) continue; |
a578b2da | 1664 | if (searchLc->GetDaughter(0)<0 || searchLc->GetDaughter(1)<0) continue; |
992ba7d8 | 1665 | daugh1 = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(0)); |
992ba7d8 | 1666 | daugh2 = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(1)); |
a578b2da | 1667 | if (!daugh1 || !daugh2) continue; |
1668 | daughPdg1=daugh1->GetPdgCode(); | |
992ba7d8 | 1669 | daughPdg2=daugh2->GetPdgCode(); |
1670 | if ( (daughPdg1==-2212 && daughPdg2==311) || | |
1671 | (daughPdg2==-2212 && daughPdg1==311) ) { // Lc- -> pbar K0 | |
1672 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-2); | |
a578b2da | 1673 | |
992ba7d8 | 1674 | if (daughPdg1==311) { |
992ba7d8 | 1675 | nDaughK0=daugh1->GetNDaughters(); |
e7af8919 | 1676 | if (nDaughK0!=1) { |
1677 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-4); | |
1678 | continue; | |
e7af8919 | 1679 | } |
a578b2da | 1680 | daughK0 = (AliAODMCParticle*)arrayMC->At(daugh1->GetDaughter(0)); |
1681 | ||
e7af8919 | 1682 | } else { |
1683 | nDaughK0=daugh2->GetNDaughters(); | |
1684 | if (nDaughK0!=1) { | |
1685 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-4); | |
1686 | continue; | |
e7af8919 | 1687 | } |
a578b2da | 1688 | daughK0 = (AliAODMCParticle*)arrayMC->At(daugh2->GetDaughter(0)); |
1689 | ||
e7af8919 | 1690 | } |
1691 | if (!daughK0) { | |
1692 | //((TH1F*)(fOutput->FindObject(fillthis)))->Fill(4); | |
1693 | continue; | |
992ba7d8 | 1694 | } |
a578b2da | 1695 | |
e7af8919 | 1696 | AliInfo(" Found negative daughK0 "); |
1697 | daughK0Pdg=daughK0->GetPdgCode(); | |
1698 | if (daughK0Pdg!=310) { | |
1699 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-4); | |
1700 | continue; | |
a578b2da | 1701 | } |
1702 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-3); | |
1703 | nDaughK0s=daughK0->GetNDaughters(); | |
1704 | if (nDaughK0s!=2) { | |
1705 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-6); | |
1706 | continue; | |
1707 | } | |
1708 | if (daughK0->GetDaughter(0)<0 || daughK0->GetDaughter(1)<0) continue; | |
1709 | daughK0s1= (AliAODMCParticle*)arrayMC->At(daughK0->GetDaughter(0)); | |
1710 | daughK0s2= (AliAODMCParticle*)arrayMC->At(daughK0->GetDaughter(1)); | |
1711 | if (!daughK0s1 || !daughK0s2) continue; | |
1712 | daughK0s1pdg=daughK0s1->GetPdgCode(); | |
1713 | daughK0s2pdg=daughK0s2->GetPdgCode(); | |
1714 | if ( ((daughK0s1pdg==211) && (daughK0s2pdg==-211)) || | |
1715 | ((daughK0s2pdg==211) && (daughK0s1pdg==-211)) ) ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-5); | |
1716 | else ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-6); | |
1717 | ||
992ba7d8 | 1718 | }//if ((daughPdg1==-2212 && daughPdg2==-311)||(daughPdg2==-2212 && daughPdg1==-311)) |
1719 | ||
e7af8919 | 1720 | else if ( (daughPdg1==-3122 && daughPdg2==-211) || |
1721 | (daughPdg2==-3122 && daughPdg1==-211) ) { | |
992ba7d8 | 1722 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-7); |
e7af8919 | 1723 | if (daughPdg1==-3122) |
1724 | daugh = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(0)); | |
1725 | else | |
1726 | daugh = (AliAODMCParticle*)arrayMC->At(searchLc->GetDaughter(1)); | |
1727 | if (!daugh) continue; | |
e7af8919 | 1728 | AliInfo(" Found negative daughL "); |
992ba7d8 | 1729 | nDaughL=daugh->GetNDaughters(); |
a578b2da | 1730 | if (nDaughL!=2) { |
1731 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-9); | |
1732 | continue; | |
1733 | } | |
1734 | daughL1 = (AliAODMCParticle*)arrayMC->At(daugh->GetDaughter(0)); | |
1735 | daughL2 = (AliAODMCParticle*)arrayMC->At(daugh->GetDaughter(1)); | |
1736 | daughL1pdg=daughL1->GetPdgCode(); | |
1737 | daughL2pdg= daughL2->GetPdgCode(); | |
1738 | if ( ((daughL1pdg==211) && (daughL2pdg==-2212)) || | |
1739 | ((daughL2pdg==211) && (daughL1pdg==-2212)) ) ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-8); | |
992ba7d8 | 1740 | else ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(-9); |
992ba7d8 | 1741 | |
a578b2da | 1742 | }//else if ((daughPdg1==-3122 && daughPdg2==-211)||(daughPdg2==-3122 && daughPdg1==-211)) |
992ba7d8 | 1743 | |
a578b2da | 1744 | } // pdgLc==-4122 |
992ba7d8 | 1745 | }// if (TMath::Abs(searchLcpdg) == 4122) |
1746 | }// for (Int_t iii=0; iii<arrayMC->GetEntries(); iii++) | |
1747 | ||
1748 | } | |
1749 | //---------------------------------------------------- | |
1750 | ||
1751 | void AliAnalysisTaskSELc2V0bachelor::FillArmPodDistribution(AliAODv0 *vZero, | |
1752 | TString histoTitle, | |
1753 | TList *histoList) { | |
1754 | ||
1755 | Double_t alpha = vZero->AlphaV0(); | |
1756 | Double_t qT = vZero->PtArmV0(); | |
1757 | ||
1758 | ((TH2F*)(histoList->FindObject(histoTitle)))->Fill(alpha,qT); | |
1759 | ||
1760 | } | |
1761 | //---------------------------------------------------- | |
1762 | ||
1763 | void AliAnalysisTaskSELc2V0bachelor::DefineK0SHistos() | |
1764 | { | |
1765 | ||
1766 | TString nameMass=" ", nameSgn=" ", nameBkg=" "; | |
1767 | ||
1768 | ///---------------- START K0S HISTOS DECLARATIONS -------------------/// | |
1769 | ||
0dbd1d4f | 1770 | if (fUseOnTheFlyV0) { |
1771 | ||
1772 | // V0 invariant masses (on-the-fly) | |
1773 | nameMass="histK0SMass"; | |
a578b2da | 1774 | TH2F* spectrumK0SMass = new TH2F(nameMass.Data(),"K^{0}_{S} invariant mass VS p_{T}; M(#pi^{+}#pi^{-}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries", |
0dbd1d4f | 1775 | 520,0.43,0.56,200,0.,20.); |
0dbd1d4f | 1776 | |
1777 | // Lc invariant masses (x K0S on-the-fly) | |
1778 | nameMass="histLcMassByK0S"; | |
a578b2da | 1779 | TH2F* spectrumLcMassByK0S = new TH2F(nameMass.Data(),"#Lambda_{C} invariant mass (by K^{0}_{S}) vs p_{T} ; M(#Lambda_{C}) [GeV/c^{2}]; p_{T} [GeV/c]", |
1780 | 1200,2.,2.6,200,0.,20.); | |
1781 | ||
1782 | //nameMass="histcosOAK0Spvsp"; | |
1783 | //TH2F* cosOpeningAngleK0Spvsp = new TH2F(nameMass.Data(),"#Lambda_{C}: cosine of K^{0}_{S} - p opening angle vs #Lambda_{c} momentum; Cos(Opening Angle) ; p [GeV/c]", | |
1784 | //200,-1.,1.,200,0.,20.); | |
1785 | ||
0dbd1d4f | 1786 | nameMass="histpK0Svsp"; |
a578b2da | 1787 | TH2F* momentumDistributionK0Svsp = new TH2F(nameMass.Data(),"#Lambda_{C}: p(K^{0}_{S}) vs p(p); p_{p}; p_{K^{0}_{S}} ", |
1788 | 200,0.,20.,200,0.,20.); | |
0dbd1d4f | 1789 | |
1790 | nameMass="histArmPodK0s"; | |
a578b2da | 1791 | TH2F* armenterosPodK0s = new TH2F(nameMass.Data(),"K^{0}_{S}: Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]", |
0dbd1d4f | 1792 | 200,-1.,1.,300,0.,0.3); |
1793 | ||
a578b2da | 1794 | nameMass="histDCAtoPVvspK0S"; |
1795 | TH2F *dcatoPVvspK0s = new TH2F(nameMass.Data(),"K^{0}_{S}: DCA to Primary Vertex vs K^{0}_{S} momentum ; p(K^{0}_{S}) [GeV/c]; DCA to Primary Vertex []; Entries", | |
1796 | 200,0.,20.,100,0.,10.); | |
1797 | ||
1798 | nameMass="histK0ScosPAwrtPVvspK0s"; | |
1799 | TH2F *cosPAwrtPVvspK0s = new TH2F(nameMass.Data(),"K^{0}_{S}: cosine of pointing angle wrt primary vertex vs K^{0}_{S} momentum ; p(K^{0}_{S}) [GeV/c]; cosine; Entries", | |
1800 | 200,0.,20.,100,0.99,1.); | |
0dbd1d4f | 1801 | |
1802 | TH2F* allspectrumK0SMass = (TH2F*)spectrumK0SMass->Clone(); | |
1803 | TH2F* allspectrumLcMassByK0S = (TH2F*)spectrumLcMassByK0S->Clone(); | |
a578b2da | 1804 | //TH2F* allcosOpeningAngleK0Spvsp= (TH2F*)cosOpeningAngleK0Spvsp->Clone(); |
0dbd1d4f | 1805 | TH2F* allmomentumDistributionK0Svsp= (TH2F*)momentumDistributionK0Svsp->Clone(); |
1806 | TH2F* alldcatoPVvspK0s=(TH2F*)dcatoPVvspK0s->Clone(); | |
a578b2da | 1807 | TH2F* allcosV0PAwrtPVvspK0s=(TH2F*)cosPAwrtPVvspK0s->Clone(); |
0dbd1d4f | 1808 | |
1809 | TH2F* pidBachspectrumK0SMass = (TH2F*)spectrumK0SMass->Clone(); | |
1810 | TH2F* pidBachspectrumLcMassByK0S = (TH2F*)spectrumLcMassByK0S->Clone(); | |
a578b2da | 1811 | //TH2F* pidBachcosOpeningAngleK0Spvsp= (TH2F*)cosOpeningAngleK0Spvsp->Clone(); |
0dbd1d4f | 1812 | TH2F* pidBachmomentumDistributionK0Svsp= (TH2F*)momentumDistributionK0Svsp->Clone(); |
1813 | TH2F* pidBachdcatoPVvspK0s=(TH2F*)dcatoPVvspK0s->Clone(); | |
a578b2da | 1814 | TH2F* pidBachcosV0PAwrtPVvspK0s=(TH2F*)cosPAwrtPVvspK0s->Clone(); |
0dbd1d4f | 1815 | |
1816 | TH2F* allArmenterosPodK0s = (TH2F*)armenterosPodK0s->Clone(); | |
1817 | TH2F* pidBachArmenterosPodK0s = (TH2F*)armenterosPodK0s->Clone(); | |
1818 | ||
1819 | fOutputAll->Add(allspectrumK0SMass); | |
1820 | fOutputAll->Add(allspectrumLcMassByK0S); | |
a578b2da | 1821 | //fOutputAll->Add(allcosOpeningAngleK0Spvsp); |
0dbd1d4f | 1822 | fOutputAll->Add(allmomentumDistributionK0Svsp); |
1823 | fOutputAll->Add(allArmenterosPodK0s); | |
1824 | fOutputAll->Add(alldcatoPVvspK0s); | |
a578b2da | 1825 | fOutputAll->Add(allcosV0PAwrtPVvspK0s); |
0dbd1d4f | 1826 | |
1827 | fOutputPIDBach->Add(pidBachspectrumK0SMass); | |
1828 | fOutputPIDBach->Add(pidBachspectrumLcMassByK0S); | |
a578b2da | 1829 | //fOutputPIDBach->Add(pidBachcosOpeningAngleK0Spvsp); |
0dbd1d4f | 1830 | fOutputPIDBach->Add(pidBachmomentumDistributionK0Svsp); |
1831 | fOutputPIDBach->Add(pidBachArmenterosPodK0s); | |
1832 | fOutputPIDBach->Add(pidBachdcatoPVvspK0s); | |
a578b2da | 1833 | fOutputPIDBach->Add(pidBachcosV0PAwrtPVvspK0s); |
0dbd1d4f | 1834 | |
1835 | } | |
992ba7d8 | 1836 | |
1837 | // V0 invariant masses (offline) | |
1838 | nameMass="histK0SMassOffline"; | |
a578b2da | 1839 | TH2F* spectrumK0SMassOffline = new TH2F(nameMass.Data(),"K^{0}_{S} invariant mass VS p_{T}; M(#pi^{+}#pi^{-}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries", |
992ba7d8 | 1840 | 520,0.43,0.56,200,0.,20.); |
992ba7d8 | 1841 | |
992ba7d8 | 1842 | // Lc invariant masses (x K0S offline) |
1843 | nameMass="histLcMassOfflineByK0S"; | |
a578b2da | 1844 | TH2F* spectrumLcMassOfflineByK0S = new TH2F(nameMass.Data(),"#Lambda_{C} invariant mass (by K^{0}_{S}) vs p_{T}; M(K^{0}_{S}p) [GeV/c^{2}]; p_{T} [GeV/c]", |
1845 | 1200,2.,2.6,200,0.,20.); | |
992ba7d8 | 1846 | |
1847 | ||
a578b2da | 1848 | //nameMass="histcosOAK0SpvspOffline"; |
1849 | //TH2F* cosOpeningAngleK0SpvspOffline = new TH2F(nameMass.Data(),"#Lambda_{C}: K^{0}_{S} - p opening angle vs p - Offline ; Cos(Opening Angle) ; p [GeV/c]", | |
1850 | //200,-1.,1.,200,0.,20.); | |
0dbd1d4f | 1851 | |
992ba7d8 | 1852 | nameMass="histpK0SvspOffline"; |
a578b2da | 1853 | TH2F* momentumDistributionK0SvspOffline = new TH2F(nameMass.Data(),"#Lambda_{C}: p(K^{0}_{S}) vs p(p) - Offline ; p_{p} [GeV/c]; p_{K^{0}_{S}} [GeV/c]", |
992ba7d8 | 1854 | 200,0.,20.,200,0.,20.); |
0dbd1d4f | 1855 | |
992ba7d8 | 1856 | nameMass="histOfflineArmPodK0s"; |
a578b2da | 1857 | TH2F* armenterosPodK0sOff = new TH2F(nameMass.Data(),"K^{0}_{S} Armenteros-Podolanski distribution - Offline; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]", |
0dbd1d4f | 1858 | 200,-1.,1.,300,0.,0.3); |
992ba7d8 | 1859 | |
a578b2da | 1860 | nameMass="histDCAtoPVvspK0SOffline"; |
1861 | TH2F *dcatoPVvspK0sOffline = new TH2F(nameMass.Data(),"K^{0}_{S}: DCA to Primary Vertex vs K^{0}_{S} invariant mass - Offline; p(K^{0}_{S}) [GeV/c]; DCA to Primary Vertex []; Entries", | |
1862 | 200,0.,20.,100,0.,10.); | |
1863 | ||
1864 | nameMass="histK0ScosPAwrtPVvspK0sOffline"; | |
1865 | TH2F *cosPAwrtPVvspK0sOffline = new TH2F(nameMass.Data(),"K^{0}_{S}: cosine of pointing angle wrt primary vertex vs K^{0}_{S} momentum - Offline; p(K^{0}_{S}) [GeV/c]; cosine; Entries", | |
1866 | 200,0.,20.,100,0.99,1.); | |
992ba7d8 | 1867 | |
1868 | ||
1869 | ||
992ba7d8 | 1870 | TH2F* allspectrumK0SMassOffline = (TH2F*)spectrumK0SMassOffline->Clone(); |
992ba7d8 | 1871 | TH2F* allspectrumLcMassOfflineByK0S = (TH2F*)spectrumLcMassOfflineByK0S->Clone(); |
a578b2da | 1872 | //TH2F* allcosOpeningAngleK0SpvspOffline= (TH2F*)cosOpeningAngleK0SpvspOffline->Clone(); |
992ba7d8 | 1873 | TH2F* allmomentumDistributionK0SvspOffline= (TH2F*)momentumDistributionK0SvspOffline->Clone(); |
992ba7d8 | 1874 | TH2F* alldcatoPVvspK0sOffline=(TH2F*)dcatoPVvspK0sOffline->Clone(); |
a578b2da | 1875 | TH2F* allcosPAwrtPVvspK0sOffline=(TH2F*)cosPAwrtPVvspK0sOffline->Clone(); |
992ba7d8 | 1876 | |
992ba7d8 | 1877 | TH2F* pidBachspectrumK0SMassOffline = (TH2F*)spectrumK0SMassOffline->Clone(); |
992ba7d8 | 1878 | TH2F* pidBachspectrumLcMassOfflineByK0S = (TH2F*)spectrumLcMassOfflineByK0S->Clone(); |
a578b2da | 1879 | //TH2F* pidBachcosOpeningAngleK0SpvspOffline= (TH2F*)cosOpeningAngleK0SpvspOffline->Clone(); |
992ba7d8 | 1880 | TH2F* pidBachmomentumDistributionK0SvspOffline= (TH2F*)momentumDistributionK0SvspOffline->Clone(); |
992ba7d8 | 1881 | TH2F* pidBachdcatoPVvspK0sOffline=(TH2F*)dcatoPVvspK0sOffline->Clone(); |
a578b2da | 1882 | TH2F* pidBachcosPAwrtPVvspK0sOffline=(TH2F*)cosPAwrtPVvspK0sOffline->Clone(); |
992ba7d8 | 1883 | |
992ba7d8 | 1884 | TH2F* allArmenterosPodK0sOff = (TH2F*)armenterosPodK0sOff->Clone(); |
992ba7d8 | 1885 | TH2F* pidBachArmenterosPodK0sOff = (TH2F*)armenterosPodK0sOff->Clone(); |
1886 | ||
1887 | ||
992ba7d8 | 1888 | fOutputAll->Add(allspectrumK0SMassOffline); |
992ba7d8 | 1889 | fOutputAll->Add(allspectrumLcMassOfflineByK0S); |
a578b2da | 1890 | //fOutputAll->Add(allcosOpeningAngleK0SpvspOffline); |
992ba7d8 | 1891 | fOutputAll->Add(allmomentumDistributionK0SvspOffline); |
992ba7d8 | 1892 | fOutputAll->Add(allArmenterosPodK0sOff); |
992ba7d8 | 1893 | fOutputAll->Add(alldcatoPVvspK0sOffline); |
a578b2da | 1894 | fOutputAll->Add(allcosPAwrtPVvspK0sOffline); |
992ba7d8 | 1895 | |
992ba7d8 | 1896 | fOutputPIDBach->Add(pidBachspectrumK0SMassOffline); |
992ba7d8 | 1897 | fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0S); |
a578b2da | 1898 | //fOutputPIDBach->Add(pidBachcosOpeningAngleK0SpvspOffline); |
992ba7d8 | 1899 | fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspOffline); |
992ba7d8 | 1900 | fOutputPIDBach->Add(pidBachArmenterosPodK0sOff); |
992ba7d8 | 1901 | fOutputPIDBach->Add(pidBachdcatoPVvspK0sOffline); |
a578b2da | 1902 | fOutputPIDBach->Add(pidBachcosPAwrtPVvspK0sOffline); |
992ba7d8 | 1903 | |
a578b2da | 1904 | /* |
0dbd1d4f | 1905 | nameMass="hist1LcMassOfflineByK0S"; |
a578b2da | 1906 | TH2D* h1 = new TH2D(nameMass.Data(),"IsEventSelected; M(#Lambda_{C}) [GeV/c^{2}]; p_{T}",1200,2.,2.6,200,0.,20.); |
0dbd1d4f | 1907 | fOutput->Add(h1); |
1908 | nameMass="hist0LcMassOfflineByK0S"; | |
a578b2da | 1909 | TH2D* h0 = new TH2D(nameMass.Data(),"!IsEventSelected; M(#Lambda_{C}) [GeV/c^{2}]; p_{T}",1200,2.,2.6,200,0.,20.); |
0dbd1d4f | 1910 | fOutput->Add(h0); |
a578b2da | 1911 | */ |
992ba7d8 | 1912 | |
1913 | if (fUseMCInfo) { | |
1914 | ||
0dbd1d4f | 1915 | if (fUseOnTheFlyV0) { |
1916 | ||
1917 | nameSgn="histK0SMassSgn"; | |
1918 | nameBkg="histK0SMassBkg"; | |
1919 | TH2F* spectrumK0SMassSgn = new TH2F(nameSgn.Data(), "K^{0}_{S} Signal invariant mass VS p_{T} - MC; M(K^{0}_{S}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries", 520,0.43,0.56,200,0.,20.); | |
1920 | TH2F* spectrumK0SMassBkg = new TH2F(nameBkg.Data(), "K^{0}_{S} Background invariant mass VS p_{T} - MC; M(K^{0}_{S}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries", 520,0.43,0.56,200,0.,20.); | |
0dbd1d4f | 1921 | |
1922 | TH2F* allspectrumK0SMassSgn = (TH2F*)spectrumK0SMassSgn->Clone(); | |
1923 | TH2F* allspectrumK0SMassBkg = (TH2F*) spectrumK0SMassBkg->Clone(); | |
1924 | TH2F* pidBachspectrumK0SMassSgn = (TH2F*)spectrumK0SMassSgn->Clone(); | |
1925 | TH2F* pidBachspectrumK0SMassBkg = (TH2F*) spectrumK0SMassBkg->Clone(); | |
992ba7d8 | 1926 | |
1927 | ||
0dbd1d4f | 1928 | fOutputAll->Add(allspectrumK0SMassSgn); |
1929 | fOutputAll->Add(allspectrumK0SMassBkg); | |
1930 | fOutputPIDBach->Add(pidBachspectrumK0SMassSgn); | |
1931 | fOutputPIDBach->Add(pidBachspectrumK0SMassBkg); | |
1932 | ||
1933 | ||
1934 | nameSgn="histLcMassByK0SSgn"; | |
1935 | nameBkg="histLcMassByK0SBkg"; | |
1936 | TH2F* spectrumLcMassByK0SSgn = new TH2F(nameSgn.Data(), "#Lambda_{C} Signal invariant mass (by K^{0}_{S}) vs p_{T} - MC; M(#Lambda_{C}) [GeV/c^{2}]; p_{T}", | |
a578b2da | 1937 | 1200,2.,2.6,200,0.,20.); |
0dbd1d4f | 1938 | TH2F* spectrumLcMassByK0SBkg = new TH2F(nameBkg.Data(), "#Lambda_{C} Background invariant mass (by K^{0}_{S}) vs p_{T} - MC; M(#Lambda_{C}) [GeV/c^{2}]; p_{T}", |
a578b2da | 1939 | 1200,2.,2.6,200,0.,20.); |
0dbd1d4f | 1940 | |
1941 | TH2F* allspectrumLcMassByK0SSgn = (TH2F*)spectrumLcMassByK0SSgn->Clone(); | |
1942 | TH2F* allspectrumLcMassByK0SBkg = (TH2F*) spectrumLcMassByK0SBkg->Clone(); | |
1943 | TH2F* pidBachspectrumLcMassByK0SSgn = (TH2F*)spectrumLcMassByK0SSgn->Clone(); | |
1944 | TH2F* pidBachspectrumLcMassByK0SBkg = (TH2F*) spectrumLcMassByK0SBkg->Clone(); | |
1945 | fOutputAll->Add(allspectrumLcMassByK0SSgn); | |
1946 | fOutputAll->Add(allspectrumLcMassByK0SBkg); | |
1947 | fOutputPIDBach->Add(pidBachspectrumLcMassByK0SSgn); | |
1948 | fOutputPIDBach->Add(pidBachspectrumLcMassByK0SBkg); | |
1949 | ||
a578b2da | 1950 | /* |
0dbd1d4f | 1951 | nameSgn="histcosOAK0SpSgnvsp"; |
1952 | nameBkg="histcosOAK0SpBkgvsp"; | |
1953 | TH2F* cosOpeningAngleK0SpSgnvsp= new TH2F(nameSgn.Data(),"#Lambda_{C} SGN : K^{0}_{S} - p Opening Angle vs p - MC ; Cos(Opening Angle); p ", | |
1954 | 200,-1.,1.,200,0.,20.); | |
1955 | TH2F* cosOpeningAngleK0SpBkgvsp= new TH2F(nameBkg.Data(),"#Lambda_{C} BKG : K^{0}_{S} - p Opening Angle vs p - MC; Cos(Opening Angle); p ", | |
1956 | 200,-1.,1.,200,0.,20.); | |
1957 | ||
1958 | TH2F* allcosOpeningAngleK0SpSgnvsp= (TH2F*)cosOpeningAngleK0SpSgnvsp->Clone(); | |
1959 | TH2F* allcosOpeningAngleK0SpBkgvsp= (TH2F*)cosOpeningAngleK0SpBkgvsp->Clone(); | |
1960 | TH2F* pidBachcosOpeningAngleK0SpSgnvsp= (TH2F*)cosOpeningAngleK0SpSgnvsp->Clone(); | |
1961 | TH2F* pidBachcosOpeningAngleK0SpBkgvsp= (TH2F*)cosOpeningAngleK0SpBkgvsp->Clone(); | |
1962 | fOutputAll->Add(allcosOpeningAngleK0SpSgnvsp); | |
1963 | fOutputAll->Add(allcosOpeningAngleK0SpBkgvsp); | |
1964 | fOutputPIDBach->Add(pidBachcosOpeningAngleK0SpSgnvsp); | |
1965 | fOutputPIDBach->Add(pidBachcosOpeningAngleK0SpBkgvsp); | |
a578b2da | 1966 | */ |
0dbd1d4f | 1967 | |
1968 | nameSgn="histpK0SvspSgn"; | |
1969 | nameBkg="histpK0SvspBkg"; | |
1970 | TH2F* momentumDistributionK0SvspSgn= new TH2F(nameSgn.Data(),"#Lambda_{C} SGN : K^{0}_{S} vs p Total Momentum Distribution - MC; p_{p}; p_{K^{0}_{S}}", | |
1971 | 200,0.,20.,200,0.,20.); | |
1972 | TH2F* momentumDistributionK0SvspBkg= new TH2F(nameBkg.Data(),"#Lambda_{C} BKG : K^{0}_{S} vs p Total Momentum Distribution - MC; p_{p}; p_{K^{0}_{S}}", | |
1973 | 200,0.,20.,200,0.,20.); | |
1974 | ||
1975 | TH2F* allmomentumDistributionK0SvspSgn= (TH2F*)momentumDistributionK0SvspSgn->Clone(); | |
1976 | TH2F* allmomentumDistributionK0SvspBkg= (TH2F*)momentumDistributionK0SvspBkg->Clone(); | |
1977 | TH2F* pidBachmomentumDistributionK0SvspSgn= (TH2F*)momentumDistributionK0SvspSgn->Clone(); | |
1978 | TH2F* pidBachmomentumDistributionK0SvspBkg= (TH2F*)momentumDistributionK0SvspBkg->Clone(); | |
1979 | fOutputAll->Add(allmomentumDistributionK0SvspSgn); | |
1980 | fOutputAll->Add(allmomentumDistributionK0SvspBkg); | |
1981 | fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspSgn); | |
1982 | fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspBkg); | |
1983 | ||
1984 | ||
1985 | // armenteros-podolanski plots K0S | |
1986 | nameSgn="histArmPodK0sSgn"; | |
1987 | nameBkg="histArmPodK0sBkg"; | |
1988 | TH2F* armenterosPodK0sSgn = new TH2F(nameSgn.Data(),"K^{0}_{S} Armenteros-Podolanski distribution (sgn); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]", | |
1989 | 200,-1.,1.,300,0.,0.3); | |
1990 | TH2F* armenterosPodK0sBkg = new TH2F(nameBkg.Data(),"K^{0}_{S} Armenteros-Podolanski distribution (bkg); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]", | |
1991 | 200,-1.,1.,300,0.,0.3); | |
1992 | ||
1993 | TH2F* allArmenterosPodK0sSgn = (TH2F*)armenterosPodK0sSgn->Clone(); | |
1994 | TH2F* allArmenterosPodK0sBkg = (TH2F*)armenterosPodK0sBkg->Clone(); | |
1995 | TH2F* pidBachArmenterosPodK0sSgn = (TH2F*)armenterosPodK0sSgn->Clone(); | |
1996 | TH2F* pidBachArmenterosPodK0sBkg = (TH2F*)armenterosPodK0sBkg->Clone(); | |
1997 | ||
1998 | fOutputAll->Add(allArmenterosPodK0sSgn); | |
1999 | fOutputAll->Add(allArmenterosPodK0sBkg); | |
2000 | ||
2001 | fOutputPIDBach->Add(pidBachArmenterosPodK0sSgn); | |
2002 | fOutputPIDBach->Add(pidBachArmenterosPodK0sBkg); | |
2003 | ||
2004 | ||
a578b2da | 2005 | nameSgn="histDCAtoPVvspK0SSgn"; |
2006 | nameBkg="histDCAtoPVvspK0SBkg"; | |
2007 | TH2F *dcatoPVvspK0sSgn=new TH2F(nameSgn.Data(),"K^{0}_{S}: DCA to Primary Vertex vs K^{0}_{S} invariant mass (sgn); p(K^{0}_{S}) [GeV/c]; DCA to Primary Vertex []; Entries",200,0.,20.,100,0.,10.0); | |
2008 | TH2F *dcatoPVvspK0sBkg=new TH2F(nameBkg.Data(),"K^{0}_{S}: DCA to Primary Vertex vs K^{0}_{S} invariant mass (bkg); p(K^{0}_{S}) [GeV/c]; DCA to Primary Vertex []; Entries",200,0.,20.,100,0.,10.0); | |
0dbd1d4f | 2009 | |
2010 | TH2F* alldcatoPVvspK0sSgn= (TH2F*)dcatoPVvspK0sSgn->Clone(); | |
2011 | TH2F* alldcatoPVvspK0sBkg= (TH2F*)dcatoPVvspK0sBkg->Clone(); | |
2012 | TH2F* pidBachdcatoPVvspK0sSgn= (TH2F*)dcatoPVvspK0sSgn->Clone(); | |
2013 | TH2F* pidBachdcatoPVvspK0sBkg= (TH2F*)dcatoPVvspK0sBkg->Clone(); | |
2014 | ||
2015 | fOutputAll->Add(alldcatoPVvspK0sSgn); | |
2016 | fOutputPIDBach->Add(pidBachdcatoPVvspK0sSgn); | |
2017 | fOutputAll->Add(alldcatoPVvspK0sBkg); | |
2018 | fOutputPIDBach->Add(pidBachdcatoPVvspK0sBkg); | |
2019 | ||
2020 | } | |
992ba7d8 | 2021 | |
2022 | ||
2023 | nameSgn="histK0SMassOfflineSgn"; | |
2024 | nameBkg="histK0SMassOfflineBkg"; | |
2025 | TH2F* spectrumK0SMassOfflineSgn = new TH2F(nameSgn.Data(), "K^{0}_{S} Signal invariant mass VS p_{T} - MC; M(K^{0}_{S}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries", | |
2026 | 520,0.43,0.56,200,0.,20.); | |
2027 | TH2F* spectrumK0SMassOfflineBkg = new TH2F(nameBkg.Data(), "K^{0}_{S} Background invariant mass VS p_{T} - MC; M(K^{0}_{S}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries", | |
2028 | 520,0.43,0.56,200,0.,20.); | |
992ba7d8 | 2029 | |
992ba7d8 | 2030 | TH2F* allspectrumK0SMassOfflineSgn = (TH2F*)spectrumK0SMassOfflineSgn->Clone(); |
2031 | TH2F* allspectrumK0SMassOfflineBkg = (TH2F*) spectrumK0SMassOfflineBkg->Clone(); | |
992ba7d8 | 2032 | fOutputAll->Add(allspectrumK0SMassOfflineSgn); |
2033 | fOutputAll->Add(allspectrumK0SMassOfflineBkg); | |
992ba7d8 | 2034 | |
2035 | ||
0dbd1d4f | 2036 | TH2F* pidBachspectrumK0SMassOfflineSgn = (TH2F*)spectrumK0SMassOfflineSgn->Clone(); |
2037 | TH2F* pidBachspectrumK0SMassOfflineBkg = (TH2F*) spectrumK0SMassOfflineBkg->Clone(); | |
2038 | fOutputPIDBach->Add(pidBachspectrumK0SMassOfflineSgn); | |
2039 | fOutputPIDBach->Add(pidBachspectrumK0SMassOfflineBkg); | |
992ba7d8 | 2040 | |
2041 | ||
2042 | nameSgn="histLcMassOfflineByK0SSgn"; | |
2043 | nameBkg="histLcMassOfflineByK0SBkg"; | |
2044 | TH2F* spectrumLcMassOfflineByK0SSgn = new TH2F(nameSgn.Data(), "#Lambda_{C} Signal invariant mass (by K^{0}_{S}) vs p_{T} - MC; M(#Lambda_{C}) [GeV/c^{2}]; p_{T}", | |
a578b2da | 2045 | 1200,2.,2.6,200,0.,20.); |
992ba7d8 | 2046 | TH2F* spectrumLcMassOfflineByK0SBkg = new TH2F(nameBkg.Data(), "#Lambda_{C} Background invariant mass (by K^{0}_{S}) vs p_{T} - MC; M(#Lambda_{C}) [GeV/c^{2}]; p_{T}", |
a578b2da | 2047 | 1200,2.,2.6,200,0.,20.); |
992ba7d8 | 2048 | |
2049 | ||
2050 | TH2F* allspectrumLcMassOfflineByK0SSgn = (TH2F*)spectrumLcMassOfflineByK0SSgn->Clone(); | |
2051 | TH2F* allspectrumLcMassOfflineByK0SBkg = (TH2F*) spectrumLcMassOfflineByK0SBkg->Clone(); | |
2052 | TH2F* pidBachspectrumLcMassOfflineByK0SSgn = (TH2F*)spectrumLcMassOfflineByK0SSgn->Clone(); | |
2053 | TH2F* pidBachspectrumLcMassOfflineByK0SBkg = (TH2F*) spectrumLcMassOfflineByK0SBkg->Clone(); | |
2054 | fOutputAll->Add(allspectrumLcMassOfflineByK0SSgn); | |
2055 | fOutputAll->Add(allspectrumLcMassOfflineByK0SBkg); | |
2056 | fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0SSgn); | |
2057 | fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0SBkg); | |
2058 | ||
992ba7d8 | 2059 | |
2060 | ||
a578b2da | 2061 | /* |
992ba7d8 | 2062 | nameSgn="histcosOAK0SpSgnvspOffline"; |
2063 | nameBkg="histcosOAK0SpBkgvspOffline"; | |
e7af8919 | 2064 | TH2F* cosOpeningAngleK0SpSgnvspOffline= new TH2F(nameSgn.Data(),"#Lambda_{C} SGN : K^{0}_{S} - p Opening Angle vs p - Offline - MC ; Cos(Opening Angle); p ", |
992ba7d8 | 2065 | 200,-1.,1.,200,0.,20.); |
e7af8919 | 2066 | TH2F* cosOpeningAngleK0SpBkgvspOffline= new TH2F(nameBkg.Data(),"#Lambda_{C} BKG : K^{0}_{S} - p Opening Angle vs p - Offline - MC; Cos(Opening Angle); p ", |
992ba7d8 | 2067 | 200,-1.,1.,200,0.,20.); |
2068 | ||
2069 | ||
2070 | TH2F* allcosOpeningAngleK0SpSgnvspOffline= (TH2F*)cosOpeningAngleK0SpSgnvspOffline->Clone(); | |
2071 | TH2F* allcosOpeningAngleK0SpBkgvspOffline= (TH2F*)cosOpeningAngleK0SpBkgvspOffline->Clone(); | |
2072 | TH2F* pidBachcosOpeningAngleK0SpSgnvspOffline= (TH2F*)cosOpeningAngleK0SpSgnvspOffline->Clone(); | |
2073 | TH2F* pidBachcosOpeningAngleK0SpBkgvspOffline= (TH2F*)cosOpeningAngleK0SpBkgvspOffline->Clone(); | |
2074 | fOutputAll->Add(allcosOpeningAngleK0SpSgnvspOffline); | |
2075 | fOutputAll->Add(allcosOpeningAngleK0SpBkgvspOffline); | |
2076 | fOutputPIDBach->Add(pidBachcosOpeningAngleK0SpSgnvspOffline); | |
2077 | fOutputPIDBach->Add(pidBachcosOpeningAngleK0SpBkgvspOffline); | |
a578b2da | 2078 | */ |
992ba7d8 | 2079 | |
2080 | ||
2081 | ||
992ba7d8 | 2082 | nameSgn="histpK0SvspOfflineSgn"; |
2083 | nameBkg="histpK0SvspOfflineBkg"; | |
e7af8919 | 2084 | TH2F* momentumDistributionK0SvspOfflineSgn= new TH2F(nameSgn.Data(),"#Lambda_{C} SGN : K^{0}_{S} vs p Total Momentum Distribution - Offline - MC; p_{p}; p_{K^{0}_{S}}", |
992ba7d8 | 2085 | 200,0.,20.,200,0.,20.); |
e7af8919 | 2086 | TH2F* momentumDistributionK0SvspOfflineBkg= new TH2F(nameBkg.Data(),"#Lambda_{C} BKG : K^{0}_{S} vs p Total Momentum Distribution - Offline - MC; p_{p}; p_{K^{0}_{S}}", |
992ba7d8 | 2087 | 200,0.,20.,200,0.,20.); |
2088 | ||
2089 | ||
2090 | TH2F* allmomentumDistributionK0SvspOfflineSgn= (TH2F*)momentumDistributionK0SvspOfflineSgn->Clone(); | |
2091 | TH2F* allmomentumDistributionK0SvspOfflineBkg= (TH2F*)momentumDistributionK0SvspOfflineBkg->Clone(); | |
2092 | TH2F* pidBachmomentumDistributionK0SvspOfflineSgn= (TH2F*)momentumDistributionK0SvspOfflineSgn->Clone(); | |
2093 | TH2F* pidBachmomentumDistributionK0SvspOfflineBkg= (TH2F*)momentumDistributionK0SvspOfflineBkg->Clone(); | |
2094 | fOutputAll->Add(allmomentumDistributionK0SvspOfflineSgn); | |
2095 | fOutputAll->Add(allmomentumDistributionK0SvspOfflineBkg); | |
2096 | fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspOfflineSgn); | |
2097 | fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspOfflineBkg); | |
2098 | ||
2099 | ||
2100 | ||
2101 | ||
2102 | ||
992ba7d8 | 2103 | // armenteros-podolanski plots K0S (offline) |
2104 | nameSgn="histOfflineArmPodK0sSgn"; | |
2105 | nameBkg="histOfflineArmPodK0sBkg"; | |
2106 | TH2F* armenterosPodK0sOffSgn = new TH2F(nameSgn.Data(),"K^{0}_{S} Armenteros-Podolanski distribution (sgn) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]",200,-1.,1.,300,0.,0.3); | |
2107 | TH2F* armenterosPodK0sOffBkg = new TH2F(nameBkg.Data(),"K^{0}_{S} Armenteros-Podolanski distribution (bkg) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]",200,-1.,1.,300,0.,0.3); | |
2108 | ||
2109 | ||
992ba7d8 | 2110 | TH2F* allArmenterosPodK0sOffSgn = (TH2F*)armenterosPodK0sOffSgn->Clone(); |
2111 | TH2F* allArmenterosPodK0sOffBkg = (TH2F*)armenterosPodK0sOffBkg->Clone(); | |
992ba7d8 | 2112 | TH2F* pidBachArmenterosPodK0sOffSgn = (TH2F*)armenterosPodK0sOffSgn->Clone(); |
2113 | TH2F* pidBachArmenterosPodK0sOffBkg = (TH2F*)armenterosPodK0sOffBkg->Clone(); | |
2114 | ||
0dbd1d4f | 2115 | |
992ba7d8 | 2116 | fOutputAll->Add(allArmenterosPodK0sOffSgn); |
2117 | fOutputAll->Add(allArmenterosPodK0sOffBkg); | |
992ba7d8 | 2118 | fOutputPIDBach->Add(pidBachArmenterosPodK0sOffSgn); |
2119 | fOutputPIDBach->Add(pidBachArmenterosPodK0sOffBkg); | |
2120 | ||
2121 | ||
a578b2da | 2122 | nameSgn="histDCAtoPVvspK0SOfflineSgn"; |
2123 | nameBkg="histDCAtoPVvspK0SOfflineBkg"; | |
2124 | TH2F *dcatoPVvspK0sOfflineSgn=new TH2F(nameSgn.Data(),"K^{0}_{S}: DCA to Primary Vertex vs K^{0}_{S} invariant mass -offline - (sgn); p(K^{0}_{S}) [GeV/c]; DCA to Primary Vertex []; Entries",200,0.,20.,100,0.,10.0); | |
2125 | TH2F *dcatoPVvspK0sOfflineBkg=new TH2F(nameBkg.Data(),"K^{0}_{S}: DCA to Primary Vertex vs K^{0}_{S} invariant mass -offline - (bkg); p(K^{0}_{S}) [GeV/c]; DCA to Primary Vertex []; Entries",200,0.,20.,100,0.,10.0); | |
992ba7d8 | 2126 | |
2127 | ||
992ba7d8 | 2128 | TH2F* alldcatoPVvspK0sOfflineSgn= (TH2F*)dcatoPVvspK0sOfflineSgn->Clone(); |
2129 | TH2F* pidBachdcatoPVvspK0sOfflineSgn= (TH2F*)dcatoPVvspK0sOfflineSgn->Clone(); | |
2130 | TH2F* alldcatoPVvspK0sOfflineBkg= (TH2F*)dcatoPVvspK0sOfflineBkg->Clone(); | |
2131 | TH2F* pidBachdcatoPVvspK0sOfflineBkg= (TH2F*)dcatoPVvspK0sOfflineBkg->Clone(); | |
2132 | ||
2133 | ||
2134 | ||
992ba7d8 | 2135 | fOutputAll->Add(alldcatoPVvspK0sOfflineSgn); |
2136 | fOutputPIDBach->Add(pidBachdcatoPVvspK0sOfflineSgn); | |
2137 | fOutputAll->Add(alldcatoPVvspK0sOfflineBkg); | |
2138 | fOutputPIDBach->Add(pidBachdcatoPVvspK0sOfflineBkg); | |
2139 | ||
2140 | } | |
2141 | ||
2142 | ||
2143 | ///---------------- END K0S HISTOS DECLARATIONS -------------------/// | |
2144 | } |