]>
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> | |
42 | #include <TH2F.h> | |
516f546e | 43 | #include <TH3F.h> |
44 | #include <THnSparse.h> | |
a578b2da | 45 | #include <TTree.h> |
992ba7d8 | 46 | #include "TROOT.h" |
47 | #include <TDatabasePDG.h> | |
48 | #include <AliAnalysisDataSlot.h> | |
49 | #include <AliAnalysisDataContainer.h> | |
50 | #include "AliStack.h" | |
51 | #include "AliMCEvent.h" | |
52 | #include "AliAnalysisManager.h" | |
53 | #include "AliAODMCHeader.h" | |
54 | #include "AliAODHandler.h" | |
55 | #include "AliLog.h" | |
43c7bace | 56 | #include "AliExternalTrackParam.h" |
992ba7d8 | 57 | #include "AliAODVertex.h" |
58 | #include "AliAODRecoDecay.h" | |
59 | #include "AliAODRecoDecayHF.h" | |
60 | #include "AliAODRecoCascadeHF.h" | |
61 | #include "AliAnalysisVertexingHF.h" | |
62 | #include "AliESDtrack.h" | |
63 | #include "AliAODTrack.h" | |
64 | #include "AliAODv0.h" | |
65 | #include "AliAODMCParticle.h" | |
66 | #include "AliAnalysisTaskSE.h" | |
67 | #include "AliAnalysisTaskSELc2V0bachelor.h" | |
68 | #include "AliNormalizationCounter.h" | |
69 | #include "AliAODPidHF.h" | |
992ba7d8 | 70 | #include "AliInputEventHandler.h" |
43c7bace | 71 | #include "AliESDtrackCuts.h" |
72 | #include "AliNeutralTrackParam.h" | |
992ba7d8 | 73 | |
c64cb1f6 | 74 | using std::cout; |
75 | using std::endl; | |
76 | ||
992ba7d8 | 77 | ClassImp(AliAnalysisTaskSELc2V0bachelor) |
78 | ||
79 | //__________________________________________________________________________ | |
43c7bace | 80 | AliAnalysisTaskSELc2V0bachelor::AliAnalysisTaskSELc2V0bachelor() : AliAnalysisTaskSE(), |
992ba7d8 | 81 | fUseMCInfo(kFALSE), |
82 | fOutput(0), | |
83 | fOutputAll(0), | |
84 | fOutputPIDBach(0), | |
85 | fCEvents(0), | |
43c7bace | 86 | fIsK0SAnalysis(kFALSE), |
992ba7d8 | 87 | fCounter(0), |
992ba7d8 | 88 | fAnalCuts(0), |
0dbd1d4f | 89 | fUseOnTheFlyV0(kFALSE), |
a578b2da | 90 | fIsEventSelected(kFALSE), |
91 | fWriteVariableTree(kFALSE), | |
92 | fVariablesTree(0), | |
93 | fCandidateVariables(), | |
94 | fVtx1(0), | |
43c7bace | 95 | fBzkG(0), |
516f546e | 96 | fAdditionalChecks(kFALSE), |
97 | fTrackRotation(kFALSE), | |
98 | fOutputPIDBachTR(0), | |
99 | fMinAngleForRot(5*TMath::Pi()/6), | |
100 | fMaxAngleForRot(7*TMath::Pi()/6), | |
101 | fMinMass(0), | |
102 | fMaxMass(0), | |
b833016c | 103 | fNRotations(9), |
104 | fPtMinToFillTheTree(0.), | |
105 | fPtMaxToFillTheTree(999.) | |
992ba7d8 | 106 | { |
107 | // | |
108 | // Default ctor | |
109 | // | |
516f546e | 110 | |
111 | Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass(); | |
112 | fMinMass=mLcPDG-0.250; | |
113 | fMaxMass=mLcPDG+0.250; | |
114 | ||
992ba7d8 | 115 | } |
116 | //___________________________________________________________________________ | |
43c7bace | 117 | AliAnalysisTaskSELc2V0bachelor::AliAnalysisTaskSELc2V0bachelor(const Char_t* name, |
a578b2da | 118 | AliRDHFCutsLctoV0* analCuts, Bool_t useOnTheFly, |
516f546e | 119 | Bool_t writeVariableTree, Bool_t additionalChecks, Bool_t trackRotation) : |
992ba7d8 | 120 | AliAnalysisTaskSE(name), |
121 | fUseMCInfo(kFALSE), | |
122 | fOutput(0), | |
123 | fOutputAll(0), | |
124 | fOutputPIDBach(0), | |
125 | fCEvents(0), | |
43c7bace | 126 | fIsK0SAnalysis(kFALSE), |
992ba7d8 | 127 | fCounter(0), |
992ba7d8 | 128 | fAnalCuts(analCuts), |
0dbd1d4f | 129 | fUseOnTheFlyV0(useOnTheFly), |
a578b2da | 130 | fIsEventSelected(kFALSE), |
131 | fWriteVariableTree(writeVariableTree), | |
132 | fVariablesTree(0), | |
133 | fCandidateVariables(), | |
134 | fVtx1(0), | |
43c7bace | 135 | fBzkG(0), |
516f546e | 136 | fAdditionalChecks(additionalChecks), |
137 | fTrackRotation(trackRotation), | |
138 | fOutputPIDBachTR(0), | |
139 | fMinAngleForRot(5*TMath::Pi()/6), | |
140 | fMaxAngleForRot(7*TMath::Pi()/6), | |
141 | fMinMass(0), | |
142 | fMaxMass(0), | |
b833016c | 143 | fNRotations(9), |
144 | fPtMinToFillTheTree(0.), | |
145 | fPtMaxToFillTheTree(999.) | |
992ba7d8 | 146 | { |
147 | // | |
148 | // Constructor. Initialization of Inputs and Outputs | |
149 | // | |
150 | Info("AliAnalysisTaskSELc2V0bachelor","Calling Constructor"); | |
151 | ||
b833016c | 152 | if (fWriteVariableTree && fTrackRotation) { |
153 | AliInfo(Form("You cannot initialize fWriteVariableTree=%d and fTrackRotation=%d => fTrackRotation=0",fWriteVariableTree,fTrackRotation)); | |
154 | fTrackRotation=kFALSE; | |
155 | } | |
156 | ||
516f546e | 157 | Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass(); |
158 | fMinMass=mLcPDG-0.250; | |
159 | fMaxMass=mLcPDG+0.250; | |
160 | ||
992ba7d8 | 161 | DefineOutput(1,TList::Class()); //conters |
43c7bace | 162 | DefineOutput(2,AliNormalizationCounter::Class()); |
163 | DefineOutput(3,AliRDHFCutsLctoV0::Class()); | |
164 | if (!writeVariableTree) { | |
165 | DefineOutput(4,TList::Class()); //All Entries output | |
166 | DefineOutput(5,TList::Class()); //3sigma PID output | |
516f546e | 167 | if (trackRotation) { |
168 | DefineOutput(6,TList::Class()); //All Entries output | |
169 | } | |
43c7bace | 170 | } else { |
171 | // Output slot #4 keeps a tree of the candidate variables after track selection | |
172 | DefineOutput(4,TTree::Class()); //My private output | |
173 | } | |
a578b2da | 174 | |
992ba7d8 | 175 | } |
176 | ||
177 | //___________________________________________________________________________ | |
178 | AliAnalysisTaskSELc2V0bachelor::~AliAnalysisTaskSELc2V0bachelor() { | |
179 | // | |
180 | // destructor | |
181 | // | |
182 | Info("~AliAnalysisTaskSELc2V0bachelor","Calling Destructor"); | |
183 | ||
184 | if (fOutput) { | |
185 | delete fOutput; | |
186 | fOutput = 0; | |
187 | } | |
188 | ||
189 | if (fOutputAll) { | |
190 | delete fOutputAll; | |
191 | fOutputAll = 0; | |
192 | } | |
193 | ||
194 | if (fOutputPIDBach) { | |
195 | delete fOutputPIDBach; | |
196 | fOutputPIDBach = 0; | |
197 | } | |
198 | ||
992ba7d8 | 199 | if (fCounter) { |
200 | delete fCounter; | |
201 | fCounter = 0; | |
202 | } | |
203 | ||
992ba7d8 | 204 | if (fAnalCuts) { |
205 | delete fAnalCuts; | |
206 | fAnalCuts = 0; | |
207 | } | |
208 | ||
43c7bace | 209 | if (fVariablesTree) { |
a578b2da | 210 | delete fVariablesTree; |
211 | fVariablesTree = 0; | |
212 | } | |
213 | ||
516f546e | 214 | if (fOutputPIDBachTR) { |
215 | delete fOutputPIDBachTR; | |
216 | fOutputPIDBachTR = 0; | |
217 | } | |
218 | ||
992ba7d8 | 219 | } |
220 | //_________________________________________________ | |
221 | void AliAnalysisTaskSELc2V0bachelor::Init() { | |
222 | // | |
223 | // Initialization | |
224 | // | |
225 | ||
0dbd1d4f | 226 | fIsEventSelected=kFALSE; |
227 | ||
992ba7d8 | 228 | if (fDebug > 1) AliInfo("Init"); |
229 | ||
43c7bace | 230 | PostData(3,fAnalCuts); |
992ba7d8 | 231 | |
232 | return; | |
233 | } | |
234 | ||
235 | //_________________________________________________ | |
236 | void AliAnalysisTaskSELc2V0bachelor::UserExec(Option_t *) | |
237 | { | |
238 | // user exec | |
239 | if (!fInputEvent) { | |
240 | AliError("NO EVENT FOUND!"); | |
241 | return; | |
242 | } | |
243 | ||
244 | AliAODEvent* aodEvent = dynamic_cast<AliAODEvent*>(fInputEvent); | |
245 | TClonesArray *arrayLctopKos=0; | |
246 | ||
247 | if (!aodEvent && AODEvent() && IsStandardAOD()) { | |
248 | // In case there is an AOD handler writing a standard AOD, use the AOD | |
249 | // event in memory rather than the input (ESD) event. | |
250 | aodEvent = dynamic_cast<AliAODEvent*> (AODEvent()); | |
251 | // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root) | |
252 | // have to taken from the AOD event hold by the AliAODExtension | |
253 | AliAODHandler* aodHandler = (AliAODHandler*) | |
254 | ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()); | |
43c7bace | 255 | |
992ba7d8 | 256 | if (aodHandler->GetExtensions()) { |
257 | AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root"); | |
258 | AliAODEvent *aodFromExt = ext->GetAOD(); | |
259 | arrayLctopKos=(TClonesArray*)aodFromExt->GetList()->FindObject("CascadesHF"); | |
260 | } | |
261 | } else { | |
262 | arrayLctopKos=(TClonesArray*)aodEvent->GetList()->FindObject("CascadesHF"); | |
263 | } | |
264 | ||
265 | fCEvents->Fill(1); | |
43c7bace | 266 | |
267 | if (fUseMCInfo) | |
268 | fAnalCuts->SetTriggerClass(""); | |
992ba7d8 | 269 | |
0dbd1d4f | 270 | // AOD primary vertex |
a578b2da | 271 | fVtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex(); |
272 | if (!fVtx1) return; | |
0dbd1d4f | 273 | |
43c7bace | 274 | fIsEventSelected = fAnalCuts->IsEventSelected(aodEvent); // better to initialize before CheckEventSelection call |
275 | ||
276 | CheckEventSelection(aodEvent); | |
277 | ||
278 | ||
992ba7d8 | 279 | // fix for temporary bug in ESDfilter |
a578b2da | 280 | fBzkG = (Double_t)aodEvent->GetMagneticField(); |
281 | if (TMath::Abs(fBzkG)<0.001) return; | |
992ba7d8 | 282 | fCEvents->Fill(2); |
283 | ||
992ba7d8 | 284 | if (!arrayLctopKos) { |
285 | AliInfo("Could not find array of HF cascades, skipping the event"); | |
286 | return; | |
287 | } else { | |
0dbd1d4f | 288 | if (arrayLctopKos->GetEntriesFast()) { |
992ba7d8 | 289 | AliInfo(Form("Found %d cascades",arrayLctopKos->GetEntriesFast())); |
290 | } | |
291 | } | |
43c7bace | 292 | fCEvents->Fill(3); |
992ba7d8 | 293 | |
294 | // mc analysis | |
295 | TClonesArray *mcArray = 0; | |
296 | AliAODMCHeader *mcHeader=0; | |
297 | ||
298 | if (fUseMCInfo) { | |
299 | // MC array need for maching | |
300 | mcArray = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName())); | |
301 | if (!mcArray) { | |
302 | AliError("Could not find Monte-Carlo in AOD"); | |
303 | return; | |
304 | } | |
43c7bace | 305 | fCEvents->Fill(4); // in case of MC events |
992ba7d8 | 306 | |
307 | // load MC header | |
308 | mcHeader = (AliAODMCHeader*)aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName()); | |
309 | if (!mcHeader) { | |
310 | AliError("AliAnalysisTaskSELc2V0bachelor::UserExec: MC header branch not found!\n"); | |
311 | return; | |
312 | } | |
43c7bace | 313 | fCEvents->Fill(5); // in case of MC events |
53c91ed7 | 314 | |
315 | Double_t zMCVertex = mcHeader->GetVtxZ(); | |
316 | if (TMath::Abs(zMCVertex) > fAnalCuts->GetMaxVtxZ()) { | |
317 | AliDebug(2,Form("Event rejected: abs(zVtxMC)=%f > fAnalCuts->GetMaxVtxZ()=%f",zMCVertex,fAnalCuts->GetMaxVtxZ())); | |
318 | return; | |
319 | } else { | |
320 | fCEvents->Fill(17); // in case of MC events | |
321 | } | |
992ba7d8 | 322 | } |
323 | ||
43c7bace | 324 | fCounter->StoreEvent(aodEvent,fAnalCuts,fUseMCInfo); // it is very important that it stays BEFORE any other event selection |
0dbd1d4f | 325 | |
43c7bace | 326 | if (fVtx1->GetNContributors()>0) // this check is done in IsEventSelected |
327 | fCEvents->Fill(6); | |
0dbd1d4f | 328 | |
43c7bace | 329 | if ( !fIsEventSelected ) return; // don't take into account not selected events |
330 | fCEvents->Fill(7); | |
0dbd1d4f | 331 | |
43c7bace | 332 | Int_t nSelectedAnal = 0; |
333 | if (fIsK0SAnalysis) { | |
334 | MakeAnalysisForLc2prK0S(arrayLctopKos,mcArray, nSelectedAnal, fAnalCuts); | |
0dbd1d4f | 335 | |
43c7bace | 336 | if (nSelectedAnal) |
337 | CheckEventSelectionWithCandidates(aodEvent); | |
0dbd1d4f | 338 | |
339 | } | |
340 | ||
43c7bace | 341 | fCounter->StoreCandidates(aodEvent,nSelectedAnal,kTRUE); |
992ba7d8 | 342 | fCounter->StoreCandidates(aodEvent,nSelectedAnal,kFALSE); |
343 | ||
344 | PostData(1,fOutput); | |
43c7bace | 345 | PostData(2,fCounter); |
346 | if (!fWriteVariableTree) { | |
347 | PostData(4,fOutputAll); | |
348 | PostData(5,fOutputPIDBach); | |
516f546e | 349 | if (fTrackRotation) |
350 | PostData(6,fOutputPIDBachTR); | |
43c7bace | 351 | } else { |
352 | PostData(4,fVariablesTree); | |
353 | } | |
354 | ||
355 | fIsEventSelected=kFALSE; | |
992ba7d8 | 356 | |
43c7bace | 357 | return; |
992ba7d8 | 358 | } |
43c7bace | 359 | |
992ba7d8 | 360 | //________________________________________ terminate ___________________________ |
361 | void AliAnalysisTaskSELc2V0bachelor::Terminate(Option_t*) | |
362 | { | |
363 | // The Terminate() function is the last function to be called during | |
364 | // a query. It always runs on the client, it can be used to present | |
365 | // the results graphically or save the results to file. | |
366 | ||
367 | //AliInfo("Terminate",""); | |
368 | AliAnalysisTaskSE::Terminate(); | |
369 | ||
370 | fOutput = dynamic_cast<TList*> (GetOutputData(1)); | |
371 | if (!fOutput) { | |
372 | AliError("fOutput not available"); | |
373 | return; | |
374 | } | |
375 | ||
a578b2da | 376 | //fCEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fCEvents")); |
43c7bace | 377 | if (!fWriteVariableTree) { |
378 | fOutputAll = dynamic_cast<TList*> (GetOutputData(4)); | |
379 | if (!fOutputAll) { | |
380 | AliError("fOutputAll not available"); | |
381 | return; | |
382 | } | |
992ba7d8 | 383 | |
43c7bace | 384 | fOutputPIDBach = dynamic_cast<TList*> (GetOutputData(5)); |
385 | if (!fOutputPIDBach) { | |
386 | AliError("fOutputPIDBach not available"); | |
387 | return; | |
388 | } | |
516f546e | 389 | |
390 | if (fTrackRotation) { | |
391 | fOutputPIDBachTR = dynamic_cast<TList*> (GetOutputData(6)); | |
392 | if (!fOutputPIDBachTR) { | |
393 | AliError("fOutputPIDBachTR not available"); | |
394 | return; | |
395 | } | |
396 | } | |
397 | ||
b833016c | 398 | } else { |
399 | fVariablesTree = dynamic_cast<TTree*> (GetOutputData(4)); | |
400 | if (!fVariablesTree) { | |
401 | AliError("fVariablesTree not available"); | |
402 | return; | |
403 | } | |
992ba7d8 | 404 | } |
405 | ||
406 | return; | |
407 | } | |
408 | //___________________________________________________________________________ | |
409 | void AliAnalysisTaskSELc2V0bachelor::UserCreateOutputObjects() { | |
410 | // output | |
411 | AliInfo(Form("CreateOutputObjects of task %s\n", GetName())); | |
992ba7d8 | 412 | |
43c7bace | 413 | fOutput = new TList(); |
414 | fOutput->SetOwner(); | |
415 | fOutput->SetName("chist0"); | |
416 | DefineGeneralHistograms(); // define general histograms | |
992ba7d8 | 417 | PostData(1,fOutput); |
992ba7d8 | 418 | |
419 | fCounter = new AliNormalizationCounter("NormalizationCounter"); | |
420 | fCounter->Init(); | |
43c7bace | 421 | PostData(2,fCounter); |
422 | ||
423 | if (!fWriteVariableTree) { | |
424 | ||
425 | fOutputAll = new TList(); | |
426 | fOutputAll->SetOwner(); | |
427 | fOutputAll->SetName("listAll"); | |
428 | ||
429 | fOutputPIDBach = new TList(); | |
430 | fOutputPIDBach->SetOwner(); | |
431 | fOutputPIDBach->SetName("listPIDBach"); | |
432 | ||
516f546e | 433 | if (fTrackRotation) { |
434 | fOutputPIDBachTR = new TList(); | |
435 | fOutputPIDBachTR->SetOwner(); | |
436 | fOutputPIDBachTR->SetName("listPIDBachTR"); | |
437 | } | |
438 | ||
43c7bace | 439 | DefineAnalysisHistograms(); // define analysis histograms |
440 | ||
441 | PostData(4,fOutputAll); | |
442 | PostData(5,fOutputPIDBach); | |
516f546e | 443 | |
444 | if (fTrackRotation) | |
445 | PostData(6,fOutputPIDBachTR); | |
446 | ||
43c7bace | 447 | } |
448 | else { | |
449 | DefineTreeVariables(); | |
450 | PostData(4,fVariablesTree); | |
a578b2da | 451 | } |
452 | ||
992ba7d8 | 453 | return; |
454 | } | |
992ba7d8 | 455 | |
43c7bace | 456 | //------------------------------------------------------------------------------- |
457 | void AliAnalysisTaskSELc2V0bachelor::MakeAnalysisForLc2prK0S(TClonesArray *arrayLctopKos, | |
458 | TClonesArray *mcArray, | |
459 | Int_t &nSelectedAnal, | |
460 | AliRDHFCutsLctoV0 *cutsAnal) | |
461 | { | |
992ba7d8 | 462 | |
43c7bace | 463 | // make the analysis |
992ba7d8 | 464 | |
43c7bace | 465 | Int_t pdgCand = 4122; |
466 | Int_t pdgDgLctoV0bachelor[2]={2212,310}; // always 1st bachelor, 2nd V0 | |
467 | Int_t pdgDgV0toDaughters[2]={211,211}; | |
992ba7d8 | 468 | |
43c7bace | 469 | // loop over cascades to search for candidates Lc->p+K0S |
470 | Int_t nCascades= arrayLctopKos->GetEntriesFast(); | |
471 | if (nCascades==0) { | |
472 | AliInfo("Could not find cascades, skipping the event"); | |
473 | return; | |
474 | } | |
992ba7d8 | 475 | |
43c7bace | 476 | for (Int_t iLctopK0S = 0; iLctopK0S<nCascades; iLctopK0S++) { |
992ba7d8 | 477 | |
43c7bace | 478 | ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(0); |
992ba7d8 | 479 | |
43c7bace | 480 | // Lc candidates and K0S from Lc |
481 | AliAODRecoCascadeHF* lcK0Spr = dynamic_cast<AliAODRecoCascadeHF*>(arrayLctopKos->At(iLctopK0S)); | |
482 | if (!lcK0Spr) { | |
483 | AliDebug(2,Form("Cascade %d doens't exist, skipping",iLctopK0S)); | |
484 | continue; | |
485 | } | |
a578b2da | 486 | |
53c91ed7 | 487 | Bool_t unsetvtx=kFALSE; |
488 | if (!lcK0Spr->GetOwnPrimaryVtx()) { | |
489 | lcK0Spr->SetOwnPrimaryVtx(fVtx1); | |
490 | unsetvtx=kTRUE; | |
491 | } | |
492 | ||
43c7bace | 493 | if (!lcK0Spr->GetSecondaryVtx()) { |
494 | AliInfo("No secondary vertex"); // it will be done in AliRDHFCutsLctoV0::IsSelected | |
495 | continue; | |
496 | } | |
a578b2da | 497 | |
43c7bace | 498 | if (lcK0Spr->GetNDaughters()!=2) { |
499 | AliDebug(2,Form("Cascade %d has not 2 daughters (nDaughters=%d)",iLctopK0S,lcK0Spr->GetNDaughters())); // it will be done in AliRDHFCutsLctoV0::IsSelected | |
500 | continue; | |
501 | } | |
a578b2da | 502 | |
43c7bace | 503 | AliAODv0 * v0part = dynamic_cast<AliAODv0*>(lcK0Spr->Getv0()); |
504 | AliAODTrack * bachPart = dynamic_cast<AliAODTrack*>(lcK0Spr->GetBachelor()); | |
505 | if (!v0part || !bachPart) { | |
506 | AliDebug(2,Form("Cascade %d has no V0 or no bachelor object",iLctopK0S)); // it will be done in AliRDHFCutsLctoV0::IsSelected | |
507 | continue; | |
508 | } | |
a578b2da | 509 | |
43c7bace | 510 | if (!v0part->GetSecondaryVtx()) { |
511 | AliDebug(2,Form("No secondary vertex for V0 by cascade %d",iLctopK0S)); // it will be done in AliRDHFCutsLctoV0::IsSelected | |
512 | continue; | |
513 | } | |
a578b2da | 514 | |
43c7bace | 515 | if (v0part->GetNDaughters()!=2) { |
516 | AliDebug(2,Form("current V0 has not 2 daughters (onTheFly=%d, nDaughters=%d)",v0part->GetOnFlyStatus(),v0part->GetNDaughters())); // it will be done in AliRDHFCutsLctoV0::IsSelected | |
517 | continue; | |
518 | } | |
a578b2da | 519 | |
43c7bace | 520 | AliAODTrack * v0Pos = dynamic_cast<AliAODTrack*>(lcK0Spr->Getv0PositiveTrack()); |
521 | AliAODTrack * v0Neg = dynamic_cast<AliAODTrack*>(lcK0Spr->Getv0NegativeTrack()); | |
91ec9084 | 522 | if (!v0Neg || !v0Pos) { |
43c7bace | 523 | AliDebug(2,Form("V0 by cascade %d has no V0positive of V0negative object",iLctopK0S)); // it will be done in AliRDHFCutsLctoV0::IsSelected |
524 | continue; | |
525 | } | |
a578b2da | 526 | |
43c7bace | 527 | ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(1); |
a578b2da | 528 | |
43c7bace | 529 | if (v0Pos->Charge() == v0Neg->Charge()) continue; |
a578b2da | 530 | |
43c7bace | 531 | ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(2); |
a578b2da | 532 | |
43c7bace | 533 | Int_t isLc = 0; |
a578b2da | 534 | |
43c7bace | 535 | if (fUseMCInfo) { |
a578b2da | 536 | |
43c7bace | 537 | Int_t pdgCode=-2; |
a578b2da | 538 | |
43c7bace | 539 | // find associated MC particle for Lc -> p+K0 and K0S->pi+pi |
540 | Int_t mcLabel = lcK0Spr->MatchToMC(pdgCand,pdgDgLctoV0bachelor[1],pdgDgLctoV0bachelor,pdgDgV0toDaughters,mcArray,kTRUE); | |
541 | if (mcLabel!=-1) { | |
542 | AliDebug(2,Form(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~cascade number %d (total cascade number = %d)", iLctopK0S,nCascades)); | |
0dbd1d4f | 543 | |
43c7bace | 544 | AliAODMCParticle *partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(mcLabel)); |
545 | if (partLc) { | |
546 | pdgCode = partLc->GetPdgCode(); | |
547 | if (pdgCode<0) AliDebug(2,Form(" ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ MClabel=%d ~~~~~~~~~~ pdgCode=%d", mcLabel, pdgCode)); | |
548 | pdgCode = TMath::Abs(pdgCode); | |
549 | isLc = 1; | |
550 | } | |
551 | } else { | |
53c91ed7 | 552 | AliDebug(2,Form("No MC candidate (cascade number %d -total cascade number = %d -)", iLctopK0S,nCascades)); |
43c7bace | 553 | pdgCode=-1; |
554 | } | |
555 | } | |
0dbd1d4f | 556 | |
43c7bace | 557 | FillLc2pK0Sspectrum(lcK0Spr, isLc, |
558 | nSelectedAnal, cutsAnal, | |
559 | mcArray); | |
53c91ed7 | 560 | |
561 | if (unsetvtx) lcK0Spr->UnsetOwnPrimaryVtx(); | |
562 | ||
43c7bace | 563 | } |
0dbd1d4f | 564 | |
43c7bace | 565 | AliDebug(2, Form("Found %d Reco particles that are Lc!!", nSelectedAnal)); |
992ba7d8 | 566 | |
567 | return; | |
568 | } | |
43c7bace | 569 | |
992ba7d8 | 570 | //________________________________________________________________________ |
571 | void AliAnalysisTaskSELc2V0bachelor::FillLc2pK0Sspectrum(AliAODRecoCascadeHF *part, | |
a578b2da | 572 | Int_t isLc, |
a578b2da | 573 | Int_t &nSelectedAnal, |
574 | AliRDHFCutsLctoV0 *cutsAnal, | |
575 | TClonesArray *mcArray) | |
992ba7d8 | 576 | { |
577 | // | |
578 | // Fill histos for Lc -> K0S+proton | |
579 | // | |
992ba7d8 | 580 | |
581 | TString fillthis=""; | |
582 | ||
43c7bace | 583 | AliAODTrack *bachelor = (AliAODTrack*)part->GetBachelor(); |
584 | Double_t momBach = bachelor->P(); | |
992ba7d8 | 585 | |
586 | AliAODv0 * v0part = (AliAODv0*)part->Getv0(); | |
587 | Bool_t onFlyV0 = v0part->GetOnFlyStatus(); // on-the-flight V0s | |
43c7bace | 588 | |
589 | Bool_t areCutsUsingPID = cutsAnal->GetIsUsePID(); | |
590 | cutsAnal->SetUsePID(kFALSE); | |
a578b2da | 591 | Bool_t isInCascadeWindow = (((cutsAnal->IsSelectedSingleCut(part,AliRDHFCuts::kCandidate,0))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // cut on Lc->p+K0S invMass |
43c7bace | 592 | cutsAnal->SetUsePID(areCutsUsingPID); |
992ba7d8 | 593 | |
43c7bace | 594 | if ( onFlyV0 && !fUseOnTheFlyV0 ) return; |
0dbd1d4f | 595 | |
43c7bace | 596 | if (fAdditionalChecks) CheckCandidatesAtDifferentLevels(part,cutsAnal); |
a578b2da | 597 | |
516f546e | 598 | // track rotation |
599 | if (fTrackRotation) { | |
600 | if (onFlyV0) { | |
601 | TrackRotation(cutsAnal,part,""); | |
602 | } | |
603 | else { | |
604 | TrackRotation(cutsAnal,part,"Offline"); | |
605 | } | |
606 | if (fUseMCInfo) { | |
607 | if (isLc==1) { | |
608 | if (onFlyV0) { | |
609 | TrackRotation(cutsAnal,part,"Sgn"); | |
610 | } | |
611 | else { | |
612 | TrackRotation(cutsAnal,part,"OfflineSgn"); | |
613 | } | |
614 | }// sgn | |
615 | else { // bkg | |
616 | if (onFlyV0) { | |
617 | TrackRotation(cutsAnal,part,"Bkg"); | |
618 | } | |
619 | else { | |
620 | TrackRotation(cutsAnal,part,"OfflineBkg"); | |
621 | } | |
622 | } | |
623 | } // if fUseMCInfo | |
624 | } // if fTrackRotation | |
625 | ||
626 | ||
627 | ||
628 | ||
43c7bace | 629 | if ( !(cutsAnal->IsInFiducialAcceptance(part->Pt(),part->Y(4122))) ) return; |
a578b2da | 630 | |
53c91ed7 | 631 | if ( !( ( (cutsAnal->IsSelected(part,AliRDHFCuts::kTracks))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) ) return; |
632 | ||
43c7bace | 633 | if ( ( ( (cutsAnal->IsSelected(part,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) ) nSelectedAnal++; |
a578b2da | 634 | |
43c7bace | 635 | // Fill candidate variable Tree (track selection, V0 invMass selection) |
636 | if ( fWriteVariableTree ) { | |
637 | Double_t invmassK0S = v0part->MassK0Short(); | |
638 | Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass(); | |
b833016c | 639 | if ( !onFlyV0 && isInCascadeWindow && |
640 | part->CosV0PointingAngle()>0.99 && TMath::Abs(invmassK0S-mk0sPDG)<=0.05 && | |
641 | part->Pt()>=fPtMinToFillTheTree && part->Pt()<fPtMaxToFillTheTree) | |
43c7bace | 642 | FillTheTree(part,cutsAnal,mcArray,isLc); |
643 | return; | |
a578b2da | 644 | } |
992ba7d8 | 645 | |
43c7bace | 646 | cutsAnal->SetUsePID(kFALSE); |
647 | Bool_t isCandidateSelectedCuts = (((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // kinematic/topological cuts | |
648 | cutsAnal->SetUsePID(areCutsUsingPID); | |
649 | Bool_t isBachelorID = (((cutsAnal->IsSelected(part,AliRDHFCuts::kPID))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // ID x bachelor | |
0dbd1d4f | 650 | |
43c7bace | 651 | //if (((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr) { |
652 | if (((cutsAnal->IsSelected(part,AliRDHFCuts::kAll))&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr) { | |
653 | if (fUseMCInfo && isLc && !fWriteVariableTree) { | |
654 | Int_t pdgCand1 = 4122; | |
655 | Int_t pdgDgLctoV0bachelor1[2]={2212,310}; | |
656 | Int_t pdgDgV0toDaughters1[2]={211,211}; | |
657 | Int_t mcLabel1=part->MatchToMC(pdgCand1,pdgDgLctoV0bachelor1[1],pdgDgLctoV0bachelor1,pdgDgV0toDaughters1,mcArray,kTRUE); | |
658 | AliDebug(2,Form(" Found true MC candidate: Lc->pK0S(%d) - onTheFly=%1d",mcLabel1,onFlyV0)); | |
a578b2da | 659 | } |
660 | } | |
0dbd1d4f | 661 | |
a578b2da | 662 | Double_t nSigmaTPCpr=-999.; |
663 | cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,4,nSigmaTPCpr); | |
664 | Double_t nSigmaTOFpr=-999.; | |
665 | cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,4,nSigmaTOFpr); | |
666 | ||
a578b2da | 667 | Double_t nSigmaTPCpi=-999.; |
668 | cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,2,nSigmaTPCpi); | |
669 | Double_t nSigmaTOFpi=-999.; | |
670 | cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,2,nSigmaTOFpi); | |
671 | ||
a578b2da | 672 | Double_t nSigmaTPCka=-999.; |
673 | cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,3,nSigmaTPCka); | |
674 | Double_t nSigmaTOFka=-999.; | |
675 | cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,3,nSigmaTOFka); | |
676 | ||
43c7bace | 677 | if (onFlyV0) { |
b833016c | 678 | |
679 | fillthis="histArmPodK0S"; | |
680 | FillArmPodDistribution(v0part,fillthis,isCandidateSelectedCuts,isBachelorID); | |
681 | ||
682 | fillthis="histArmPodLc"; | |
683 | FillArmPodDistribution(part,fillthis,isCandidateSelectedCuts,isBachelorID); | |
684 | ||
685 | //if (isCandidateSelectedCuts) { | |
686 | FillAnalysisHistograms(part,cutsAnal,""); | |
687 | //} | |
992ba7d8 | 688 | } |
43c7bace | 689 | else { |
b833016c | 690 | |
691 | fillthis="histArmPodK0SOffline"; | |
692 | FillArmPodDistribution(v0part,fillthis,isCandidateSelectedCuts,isBachelorID); | |
693 | ||
694 | fillthis="histArmPodLcOffline"; | |
695 | FillArmPodDistribution(part,fillthis,isCandidateSelectedCuts,isBachelorID); | |
696 | ||
697 | FillAnalysisHistograms(part,cutsAnal,"Offline"); | |
a578b2da | 698 | if (isCandidateSelectedCuts) { |
a578b2da | 699 | fillthis="histoprotonBachSigmaVspTOF"; |
700 | ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTOFpr); | |
701 | fillthis="histoprotonBachSigmaVspTPC"; | |
702 | ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTPCpr); | |
b833016c | 703 | //FillAnalysisHistograms(part,cutsAnal,"Offline"); |
992ba7d8 | 704 | } |
705 | } | |
992ba7d8 | 706 | if (fUseMCInfo) { |
707 | if (isLc==1) { | |
43c7bace | 708 | if (onFlyV0) { |
b833016c | 709 | |
710 | fillthis="histArmPodK0SSgn"; | |
711 | FillArmPodDistribution(v0part,fillthis,isCandidateSelectedCuts,isBachelorID); | |
712 | ||
713 | fillthis="histArmPodLcSgn"; | |
714 | FillArmPodDistribution(part,fillthis,isCandidateSelectedCuts,isBachelorID); | |
715 | ||
716 | //if (isCandidateSelectedCuts) { | |
717 | FillAnalysisHistograms(part,cutsAnal,"Sgn"); | |
718 | //} | |
992ba7d8 | 719 | } |
b833016c | 720 | else { |
721 | ||
722 | fillthis="histArmPodK0SOfflineSgn"; | |
723 | FillArmPodDistribution(v0part,fillthis,isCandidateSelectedCuts,isBachelorID); | |
724 | ||
725 | fillthis="histArmPodLcOfflineSgn"; | |
726 | FillArmPodDistribution(part,fillthis,isCandidateSelectedCuts,isBachelorID); | |
727 | ||
728 | FillAnalysisHistograms(part,cutsAnal,"OfflineSgn"); | |
a578b2da | 729 | if (isCandidateSelectedCuts) { |
a578b2da | 730 | fillthis="histoprotonBachSigmaVspTOFsgn"; |
731 | ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTOFpr); | |
732 | fillthis="histoprotonBachSigmaVspTPCsgn"; | |
733 | ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTPCpr); | |
b833016c | 734 | //FillAnalysisHistograms(part,cutsAnal,"OfflineSgn"); |
992ba7d8 | 735 | } |
992ba7d8 | 736 | } |
992ba7d8 | 737 | }// sgn |
738 | else { // bkg | |
43c7bace | 739 | if (onFlyV0) { |
b833016c | 740 | |
741 | fillthis="histArmPodK0SBkg"; | |
742 | FillArmPodDistribution(v0part,fillthis,isCandidateSelectedCuts,isBachelorID); | |
743 | ||
744 | fillthis="histArmPodLcBkg"; | |
745 | FillArmPodDistribution(part,fillthis,isCandidateSelectedCuts,isBachelorID); | |
746 | ||
747 | //if (isCandidateSelectedCuts) { | |
748 | FillAnalysisHistograms(part,cutsAnal,"Bkg"); | |
749 | //} | |
992ba7d8 | 750 | } |
43c7bace | 751 | else { |
b833016c | 752 | |
753 | fillthis="histArmPodK0SOfflineBkg"; | |
754 | FillArmPodDistribution(v0part,fillthis,isCandidateSelectedCuts,isBachelorID); | |
755 | ||
756 | fillthis="histArmPodLcOfflineBkg"; | |
757 | FillArmPodDistribution(part,fillthis,isCandidateSelectedCuts,isBachelorID); | |
758 | ||
759 | FillAnalysisHistograms(part,cutsAnal,"OfflineBkg"); | |
a578b2da | 760 | if (isCandidateSelectedCuts) { |
a578b2da | 761 | fillthis="histoprotonBachSigmaVspTOFbkg"; |
762 | ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTOFpr); | |
763 | fillthis="histoprotonBachSigmaVspTPCbkg"; | |
764 | ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTPCpr); | |
b833016c | 765 | //FillAnalysisHistograms(part,cutsAnal,"OfflineBkg"); |
992ba7d8 | 766 | } |
0dbd1d4f | 767 | } |
992ba7d8 | 768 | } |
769 | } // if fUseMCInfo | |
516f546e | 770 | |
992ba7d8 | 771 | return; |
772 | } | |
992ba7d8 | 773 | |
43c7bace | 774 | //---------------------------------------------------- |
775 | void AliAnalysisTaskSELc2V0bachelor::DefineK0SHistos() | |
776 | { | |
992ba7d8 | 777 | |
43c7bace | 778 | Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass(); |
779 | Double_t mK0SPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass(); | |
b833016c | 780 | Double_t mMinLambdaPDG = TDatabasePDG::Instance()->GetParticle(2212)->Mass()+ |
781 | TDatabasePDG::Instance()->GetParticle(211)->Mass(); | |
782 | ||
783 | TString nameHisto=" ", nameHistoSgn=" ", nameHistoBkg=" "; | |
784 | TString titleHisto=" ", titleHistoSgn=" ", titleHistoBkg=" "; | |
785 | ||
786 | // pt(Lc) | |
787 | Double_t *binLimpTLc=new Double_t[11+1]; // 11 pT(Lc) bins | |
788 | binLimpTLc[ 0]= 0.; | |
789 | binLimpTLc[ 1]= 1.; | |
790 | binLimpTLc[ 2]= 2.; | |
791 | binLimpTLc[ 3]= 3.; | |
792 | binLimpTLc[ 4]= 4.; | |
793 | binLimpTLc[ 5]= 5.; | |
794 | binLimpTLc[ 6]= 6.; | |
795 | binLimpTLc[ 7]= 8.; | |
796 | binLimpTLc[ 8]=12.; | |
797 | binLimpTLc[ 9]=17.; | |
798 | binLimpTLc[10]=25.; | |
799 | binLimpTLc[11]=35.; | |
800 | ||
801 | // pt(prong) | |
802 | Double_t *binLimpTprong=new Double_t[41+1]; // 41 pT(prong) bins | |
803 | binLimpTprong[ 0]= 0.0; | |
804 | binLimpTprong[ 1]= 0.1; | |
805 | binLimpTprong[ 2]= 0.2; | |
806 | binLimpTprong[ 3]= 0.3; | |
807 | binLimpTprong[ 4]= 0.4; | |
808 | binLimpTprong[ 5]= 0.5; | |
809 | binLimpTprong[ 6]= 0.6; | |
810 | binLimpTprong[ 7]= 0.7; | |
811 | binLimpTprong[ 8]= 0.8; | |
812 | binLimpTprong[ 9]= 0.9; | |
813 | binLimpTprong[10]= 1.0; | |
814 | binLimpTprong[11]= 1.2; | |
815 | binLimpTprong[12]= 1.4; | |
816 | binLimpTprong[13]= 1.6; | |
817 | binLimpTprong[14]= 1.8; | |
818 | binLimpTprong[15]= 2.0; | |
819 | binLimpTprong[16]= 2.2; | |
820 | binLimpTprong[17]= 2.4; | |
821 | binLimpTprong[18]= 2.6; | |
822 | binLimpTprong[19]= 2.8; | |
823 | binLimpTprong[20]= 3.0; | |
824 | binLimpTprong[21]= 3.5; | |
825 | binLimpTprong[22]= 4.0; | |
826 | binLimpTprong[23]= 4.5; | |
827 | binLimpTprong[24]= 5.0; | |
828 | binLimpTprong[25]= 5.5; | |
829 | binLimpTprong[26]= 6.0; | |
830 | binLimpTprong[27]= 6.5; | |
831 | binLimpTprong[28]= 7.0; | |
832 | binLimpTprong[29]= 7.5; | |
833 | binLimpTprong[30]= 8.0; | |
834 | binLimpTprong[31]= 9.0; | |
835 | binLimpTprong[32]=10.0; | |
836 | binLimpTprong[33]=11.0; | |
837 | binLimpTprong[34]=12.0; | |
838 | binLimpTprong[35]=13.0; | |
839 | binLimpTprong[36]=14.0; | |
840 | binLimpTprong[37]=15.0; | |
841 | binLimpTprong[38]=20.0; | |
842 | binLimpTprong[39]=25.0; | |
843 | binLimpTprong[40]=30.0; | |
844 | binLimpTprong[41]=35.0; | |
992ba7d8 | 845 | |
43c7bace | 846 | if (fUseOnTheFlyV0) { |
0dbd1d4f | 847 | |
43c7bace | 848 | // V0 invariant masses (on-the-fly) |
b833016c | 849 | nameHisto="histK0SMass"; |
850 | titleHisto="K^{0}_{S} invariant mass VS p_{T}; m_{inv}(#pi^{+},#pi^{-}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries"; | |
851 | TH2F* spectrumK0SMass = new TH2F(nameHisto.Data(),titleHisto.Data(),1000,mK0SPDG-0.050,mK0SPDG+0.050,41,binLimpTprong); | |
ff12b981 | 852 | |
43c7bace | 853 | // Lc invariant masses (x K0S on-the-fly) |
b833016c | 854 | nameHisto="histLcMassByK0S"; |
855 | titleHisto="#Lambda_{c} invariant mass (by K^{0}_{S}) vs p_{T}; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]"; | |
856 | TH2F* spectrumLcMassByK0S = new TH2F(nameHisto.Data(),titleHisto.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc); | |
992ba7d8 | 857 | |
b833016c | 858 | nameHisto="histpK0Svsp"; |
859 | titleHisto="p(K^{0}_{S}) vs p(p); p(p) [GeV/c]; p(K^{0}_{S}) [GeV/c]"; | |
860 | TH2F* momentumDistributionK0Svsp = new TH2F(nameHisto.Data(),titleHisto.Data(),41,binLimpTprong,41,binLimpTprong); | |
ff12b981 | 861 | |
b833016c | 862 | nameHisto="histArmPodK0S"; |
863 | titleHisto="K^{0}_{S} Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
864 | TH2F* armenterosPodK0S = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-1.,1.,300,0.,0.3); | |
865 | ||
866 | nameHisto="histArmPodLc"; | |
867 | titleHisto="#Lambda_{c} Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
868 | TH2F* armenterosPodLc = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-4.,4.,800,0.,1.6); | |
43c7bace | 869 | |
43c7bace | 870 | TH2F* allspectrumK0SMass = (TH2F*)spectrumK0SMass->Clone(); |
b833016c | 871 | TH2F* allspectrumLcMassByK0S = (TH2F*)spectrumLcMassByK0S->Clone(); |
872 | TH2F* allmomentumDistributionK0Svsp = (TH2F*)momentumDistributionK0Svsp->Clone(); | |
873 | TH2F* allArmenterosPodK0S = (TH2F*)armenterosPodK0S->Clone(); | |
874 | TH2F* allArmenterosPodLc = (TH2F*)armenterosPodLc->Clone(); | |
ff12b981 | 875 | |
43c7bace | 876 | TH2F* pidBachspectrumK0SMass = (TH2F*)spectrumK0SMass->Clone(); |
b833016c | 877 | TH2F* pidBachspectrumLcMassByK0S = (TH2F*)spectrumLcMassByK0S->Clone(); |
878 | TH2F* pidBachmomentumDistributionK0Svsp = (TH2F*)momentumDistributionK0Svsp->Clone(); | |
43c7bace | 879 | TH2F* pidBachArmenterosPodK0S = (TH2F*)armenterosPodK0S->Clone(); |
b833016c | 880 | TH2F* pidBachArmenterosPodLc = (TH2F*)armenterosPodLc->Clone(); |
ff12b981 | 881 | |
43c7bace | 882 | fOutputAll->Add(allspectrumK0SMass); |
883 | fOutputAll->Add(allspectrumLcMassByK0S); | |
884 | fOutputAll->Add(allmomentumDistributionK0Svsp); | |
885 | fOutputAll->Add(allArmenterosPodK0S); | |
b833016c | 886 | fOutputAll->Add(allArmenterosPodLc); |
0dbd1d4f | 887 | |
43c7bace | 888 | fOutputPIDBach->Add(pidBachspectrumK0SMass); |
889 | fOutputPIDBach->Add(pidBachspectrumLcMassByK0S); | |
890 | fOutputPIDBach->Add(pidBachmomentumDistributionK0Svsp); | |
891 | fOutputPIDBach->Add(pidBachArmenterosPodK0S); | |
b833016c | 892 | fOutputPIDBach->Add(pidBachArmenterosPodLc); |
893 | ||
894 | nameHisto="histArmPodK0S0"; | |
895 | titleHisto="K^{0}_{S} Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
896 | TH2F* armenterosPodK0S0 = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-1.,1.,300,0.,0.3); | |
897 | nameHisto="histArmPodLc0"; | |
898 | titleHisto="#Lambda_{c} Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
899 | TH2F* armenterosPodLc0 = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-4.,4.,800,0.,1.6); | |
900 | fOutputAll->Add(armenterosPodK0S0); | |
901 | fOutputAll->Add(armenterosPodLc0); | |
43c7bace | 902 | |
b833016c | 903 | |
904 | if (fTrackRotation) { | |
905 | TH2F* pidBachTRspectrumLcMassByK0S = (TH2F*)spectrumLcMassByK0S->Clone(); | |
516f546e | 906 | fOutputPIDBachTR->Add(pidBachTRspectrumLcMassByK0S); |
907 | } | |
908 | ||
ff12b981 | 909 | |
0dbd1d4f | 910 | |
b833016c | 911 | nameHisto="histptK0S"; |
912 | titleHisto="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries"; | |
913 | TH2F* ptK0S = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong); | |
914 | ||
915 | nameHisto="histptP"; | |
916 | titleHisto="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries"; | |
917 | TH2F* ptP = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong); | |
918 | ||
919 | nameHisto="histptPip"; | |
920 | titleHisto="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries"; | |
921 | TH2F* ptPiP = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong); | |
922 | ||
923 | nameHisto="histptPim"; | |
924 | titleHisto="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries"; | |
925 | TH2F* ptPiM = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong); | |
926 | ||
927 | nameHisto="histLambdaMass"; | |
928 | titleHisto="m_{inv}(p,#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(p,#pi^{-}) [GeV/c^{2}]; Entries"; | |
929 | TH2F* massLambda = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5); | |
930 | ||
931 | nameHisto="histLambdaBarMass"; | |
932 | titleHisto="m_{inv}(#bar{p},#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#bar{p},#pi^{+}) [GeV/c^{2}]; Entries"; | |
933 | TH2F* massLambdaBar = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5); | |
934 | ||
935 | nameHisto="histGammaMass"; | |
936 | titleHisto="m_{inv}(e^{+},e^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(e^{+},e^{-}) [GeV/c^{2}]; Entries"; | |
937 | TH2F* massGamma = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,100,0.,1.); | |
938 | ||
939 | nameHisto="histD0K0S"; | |
940 | titleHisto="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries"; | |
941 | TH2F* d0K0S = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,-1.,1.); | |
942 | ||
943 | nameHisto="histD0P"; | |
944 | titleHisto="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries"; | |
945 | TH2F* d0P = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,-1.,1.); | |
946 | ||
947 | nameHisto="histCosPAK0S"; | |
948 | titleHisto="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries"; | |
949 | TH2F *cosPAK0S = new TH2F(nameHisto.Data(),titleHisto.Data(),41,binLimpTprong,100,0.99,1.); | |
950 | ||
951 | TH2F* allptK0S = (TH2F*)ptK0S->Clone(); | |
952 | TH2F* allptP = (TH2F*)ptP->Clone(); | |
953 | TH2F* allptPiP = (TH2F*)ptPiP->Clone(); | |
954 | TH2F* allptPiM = (TH2F*)ptPiM->Clone(); | |
955 | TH2F* allmassLambda = (TH2F*)massLambda->Clone(); | |
956 | TH2F* allmassLambdaBar = (TH2F*)massLambdaBar->Clone(); | |
957 | TH2F* allmassGamma = (TH2F*)massGamma->Clone(); | |
958 | TH2F* alld0K0S = (TH2F*)d0K0S->Clone(); | |
959 | TH2F* alld0P = (TH2F*)d0P->Clone(); | |
960 | TH2F* allcosPAK0S = (TH2F*)cosPAK0S->Clone(); | |
961 | ||
962 | TH2F* pidptK0S = (TH2F*)ptK0S->Clone(); | |
963 | TH2F* pidptP = (TH2F*)ptP->Clone(); | |
964 | TH2F* pidptPiP = (TH2F*)ptPiP->Clone(); | |
965 | TH2F* pidptPiM = (TH2F*)ptPiM->Clone(); | |
966 | TH2F* pidmassLambda = (TH2F*)massLambda->Clone(); | |
967 | TH2F* pidmassLambdaBar = (TH2F*)massLambdaBar->Clone(); | |
968 | TH2F* pidmassGamma = (TH2F*)massGamma->Clone(); | |
969 | TH2F* pidd0K0S = (TH2F*)d0K0S->Clone(); | |
970 | TH2F* pidd0P = (TH2F*)d0P->Clone(); | |
971 | TH2F* pidcosPAK0S = (TH2F*)cosPAK0S->Clone(); | |
972 | ||
973 | fOutputAll->Add(allptK0S); | |
974 | fOutputAll->Add(allptP); | |
975 | fOutputAll->Add(allptPiP); | |
976 | fOutputAll->Add(allptPiM); | |
977 | fOutputAll->Add(allmassLambda); | |
978 | fOutputAll->Add(allmassLambdaBar); | |
979 | fOutputAll->Add(allmassGamma); | |
980 | fOutputAll->Add(alld0K0S); | |
981 | fOutputAll->Add(alld0P); | |
982 | fOutputAll->Add(allcosPAK0S); | |
983 | ||
984 | fOutputPIDBach->Add(pidptK0S); | |
985 | fOutputPIDBach->Add(pidptP); | |
986 | fOutputPIDBach->Add(pidptPiP); | |
987 | fOutputPIDBach->Add(pidptPiM); | |
988 | fOutputPIDBach->Add(pidmassLambda); | |
989 | fOutputPIDBach->Add(pidmassLambdaBar); | |
990 | fOutputPIDBach->Add(pidmassGamma); | |
991 | fOutputPIDBach->Add(pidd0K0S); | |
992 | fOutputPIDBach->Add(pidd0P); | |
993 | fOutputPIDBach->Add(pidcosPAK0S); | |
992ba7d8 | 994 | |
b833016c | 995 | if (fTrackRotation) { |
992ba7d8 | 996 | |
b833016c | 997 | TH2F* pidTRptK0S = (TH2F*)ptK0S->Clone(); |
998 | TH2F* pidTRptP = (TH2F*)ptP->Clone(); | |
999 | TH2F* pidTRptPiP = (TH2F*)ptPiP->Clone(); | |
1000 | TH2F* pidTRptPiM = (TH2F*)ptPiM->Clone(); | |
1001 | TH2F* pidTRmassLambda = (TH2F*)massLambda->Clone(); | |
1002 | TH2F* pidTRmassLambdaBar = (TH2F*)massLambdaBar->Clone(); | |
1003 | TH2F* pidTRmassGamma = (TH2F*)massGamma->Clone(); | |
1004 | TH2F* pidTRcosPAK0S = (TH2F*)cosPAK0S->Clone(); | |
1005 | fOutputPIDBachTR->Add(pidTRptK0S); | |
1006 | fOutputPIDBachTR->Add(pidTRptP); | |
1007 | fOutputPIDBachTR->Add(pidTRptPiP); | |
1008 | fOutputPIDBachTR->Add(pidTRptPiM); | |
1009 | fOutputPIDBachTR->Add(pidTRmassLambda); | |
1010 | fOutputPIDBachTR->Add(pidTRmassLambdaBar); | |
1011 | fOutputPIDBachTR->Add(pidTRmassGamma); | |
1012 | fOutputPIDBachTR->Add(pidTRcosPAK0S); | |
992ba7d8 | 1013 | |
b833016c | 1014 | } |
992ba7d8 | 1015 | |
b833016c | 1016 | } |
992ba7d8 | 1017 | |
b833016c | 1018 | // V0 invariant masses (offline) |
1019 | nameHisto="histK0SMassOffline"; | |
1020 | titleHisto="K^{0}_{S} invariant mass VS p_{T}; m_{inv}(#pi^{+},#pi^{-}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries"; | |
1021 | TH2F* spectrumK0SMassOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),1000,mK0SPDG-0.050,mK0SPDG+0.050,41,binLimpTprong); | |
1022 | ||
1023 | // Lc invariant masses (x K0S offline) | |
1024 | nameHisto="histLcMassByK0SOffline"; | |
1025 | titleHisto="#Lambda_{c} invariant mass (by K^{0}_{S}) vs p_{T}; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]"; | |
1026 | TH2F* spectrumLcMassOfflineByK0S = new TH2F(nameHisto.Data(),titleHisto.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc); | |
992ba7d8 | 1027 | |
b833016c | 1028 | nameHisto="histpK0SvspOffline"; |
1029 | titleHisto="p(K^{0}_{S}) vs p(p); p(p) [GeV/c]; p(K^{0}_{S}) [GeV/c]"; | |
1030 | TH2F* momentumDistributionK0SvspOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),41,binLimpTprong,41,binLimpTprong); | |
1031 | ||
1032 | nameHisto="histArmPodK0SOffline"; | |
1033 | titleHisto="K^{0}_{S} Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1034 | TH2F* armenterosPodK0SOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-1.,1.,300,0.,0.3); | |
1035 | ||
1036 | nameHisto="histArmPodLcOffline"; | |
1037 | titleHisto="#Lambda_{c} Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1038 | TH2F* armenterosPodLcOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-4.,4.,800,0.,1.6); | |
992ba7d8 | 1039 | |
43c7bace | 1040 | TH2F* allspectrumK0SMassOffline = (TH2F*)spectrumK0SMassOffline->Clone(); |
b833016c | 1041 | TH2F* allspectrumLcMassOfflineByK0S = (TH2F*)spectrumLcMassOfflineByK0S->Clone(); |
1042 | TH2F* allmomentumDistributionK0SvspOffline = (TH2F*)momentumDistributionK0SvspOffline->Clone(); | |
1043 | TH2F* allArmenterosPodK0SOffline = (TH2F*)armenterosPodK0SOffline->Clone(); | |
1044 | TH2F* allArmenterosPodLcOffline = (TH2F*)armenterosPodLcOffline->Clone(); | |
992ba7d8 | 1045 | |
43c7bace | 1046 | TH2F* pidBachspectrumK0SMassOffline = (TH2F*)spectrumK0SMassOffline->Clone(); |
b833016c | 1047 | TH2F* pidBachspectrumLcMassOfflineByK0S = (TH2F*)spectrumLcMassOfflineByK0S->Clone(); |
1048 | TH2F* pidBachmomentumDistributionK0SvspOffline = (TH2F*)momentumDistributionK0SvspOffline->Clone(); | |
1049 | TH2F* pidBachArmenterosPodK0SOffline = (TH2F*)armenterosPodK0SOffline->Clone(); | |
1050 | TH2F* pidBachArmenterosPodLcOffline = (TH2F*)armenterosPodLcOffline->Clone(); | |
992ba7d8 | 1051 | |
43c7bace | 1052 | fOutputAll->Add(allspectrumK0SMassOffline); |
1053 | fOutputAll->Add(allspectrumLcMassOfflineByK0S); | |
1054 | fOutputAll->Add(allmomentumDistributionK0SvspOffline); | |
b833016c | 1055 | fOutputAll->Add(allArmenterosPodK0SOffline); |
1056 | fOutputAll->Add(allArmenterosPodLcOffline); | |
85036182 | 1057 | |
43c7bace | 1058 | fOutputPIDBach->Add(pidBachspectrumK0SMassOffline); |
1059 | fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0S); | |
1060 | fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspOffline); | |
b833016c | 1061 | fOutputPIDBach->Add(pidBachArmenterosPodK0SOffline); |
1062 | fOutputPIDBach->Add(pidBachArmenterosPodLcOffline); | |
1063 | ||
1064 | nameHisto="histArmPodK0SOffline0"; | |
1065 | titleHisto="K^{0}_{S} Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1066 | TH2F* armenterosPodK0SOffline0 = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-1.,1.,300,0.,0.3); | |
1067 | nameHisto="histArmPodLcOffline0"; | |
1068 | titleHisto="#Lambda_{c} Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1069 | TH2F* armenterosPodLcOffline0 = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-4.,4.,800,0.,1.6); | |
1070 | fOutputAll->Add(armenterosPodK0SOffline0); | |
1071 | fOutputAll->Add(armenterosPodLcOffline0); | |
43c7bace | 1072 | |
516f546e | 1073 | if (fTrackRotation) { |
b833016c | 1074 | TH2F* pidBachTRspectrumLcMassOfflineByK0S = (TH2F*)spectrumLcMassOfflineByK0S->Clone(); |
516f546e | 1075 | fOutputPIDBachTR->Add(pidBachTRspectrumLcMassOfflineByK0S); |
1076 | } | |
1077 | ||
b833016c | 1078 | |
1079 | ||
1080 | ||
1081 | nameHisto="histptK0SOffline"; | |
1082 | titleHisto="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries"; | |
1083 | TH2F* ptK0SOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong); | |
1084 | ||
1085 | nameHisto="histptPOffline"; | |
1086 | titleHisto="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries"; | |
1087 | TH2F* ptPOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong); | |
1088 | ||
1089 | nameHisto="histptPipOffline"; | |
1090 | titleHisto="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries"; | |
1091 | TH2F* ptPiPOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong); | |
1092 | ||
1093 | nameHisto="histptPimOffline"; | |
1094 | titleHisto="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries"; | |
1095 | TH2F* ptPiMOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong); | |
1096 | ||
1097 | nameHisto="histLambdaMassOffline"; | |
1098 | titleHisto="m_{inv}(p,#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(p,#pi^{-}) [GeV/c^{2}]; Entries"; | |
1099 | TH2F* massLambdaOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5); | |
1100 | ||
1101 | nameHisto="histLambdaBarMassOffline"; | |
1102 | titleHisto="m_{inv}(#bar{p},#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#bar{p},#pi^{+}) [GeV/c^{2}]; Entries"; | |
1103 | TH2F* massLambdaBarOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5); | |
1104 | ||
1105 | nameHisto="histGammaMassOffline"; | |
1106 | titleHisto="m_{inv}(e^{+},e^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(e^{+},e^{-}) [GeV/c^{2}]; Entries"; | |
1107 | TH2F* massGammaOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,100,0.,1.); | |
1108 | ||
1109 | nameHisto="histD0K0SOffline"; | |
1110 | titleHisto="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries"; | |
1111 | TH2F* d0K0SOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,-1.,1.); | |
1112 | ||
1113 | nameHisto="histD0POffline"; | |
1114 | titleHisto="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries"; | |
1115 | TH2F* d0POffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,-1.,1.); | |
1116 | ||
1117 | nameHisto="histCosPAK0SOffline"; | |
1118 | titleHisto="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries"; | |
1119 | TH2F *cosPAK0SOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),41,binLimpTprong,100,0.99,1.); | |
1120 | ||
1121 | TH2F* allptK0SOffline = (TH2F*)ptK0SOffline->Clone(); | |
1122 | TH2F* allptPOffline = (TH2F*)ptPOffline->Clone(); | |
1123 | TH2F* allptPiPOffline = (TH2F*)ptPiPOffline->Clone(); | |
1124 | TH2F* allptPiMOffline = (TH2F*)ptPiMOffline->Clone(); | |
1125 | TH2F* allmassLambdaOffline = (TH2F*)massLambdaOffline->Clone(); | |
1126 | TH2F* allmassLambdaBarOffline = (TH2F*)massLambdaBarOffline->Clone(); | |
1127 | TH2F* allmassGammaOffline = (TH2F*)massGammaOffline->Clone(); | |
1128 | TH2F* alld0K0SOffline = (TH2F*)d0K0SOffline->Clone(); | |
1129 | TH2F* alld0POffline = (TH2F*)d0POffline->Clone(); | |
1130 | TH2F* allcosPAK0SOffline = (TH2F*)cosPAK0SOffline->Clone(); | |
1131 | ||
1132 | TH2F* pidptK0SOffline = (TH2F*)ptK0SOffline->Clone(); | |
1133 | TH2F* pidptPOffline = (TH2F*)ptPOffline->Clone(); | |
1134 | TH2F* pidptPiPOffline = (TH2F*)ptPiPOffline->Clone(); | |
1135 | TH2F* pidptPiMOffline = (TH2F*)ptPiMOffline->Clone(); | |
1136 | TH2F* pidmassLambdaOffline = (TH2F*)massLambdaOffline->Clone(); | |
1137 | TH2F* pidmassLambdaBarOffline = (TH2F*)massLambdaBarOffline->Clone(); | |
1138 | TH2F* pidmassGammaOffline = (TH2F*)massGammaOffline->Clone(); | |
1139 | TH2F* pidd0K0SOffline = (TH2F*)d0K0SOffline->Clone(); | |
1140 | TH2F* pidd0POffline = (TH2F*)d0POffline->Clone(); | |
1141 | TH2F* pidcosPAK0SOffline = (TH2F*)cosPAK0SOffline->Clone(); | |
1142 | ||
1143 | fOutputAll->Add(allptK0SOffline); | |
1144 | fOutputAll->Add(allptPOffline); | |
1145 | fOutputAll->Add(allptPiPOffline); | |
1146 | fOutputAll->Add(allptPiMOffline); | |
1147 | fOutputAll->Add(allmassLambdaOffline); | |
1148 | fOutputAll->Add(allmassLambdaBarOffline); | |
1149 | fOutputAll->Add(allmassGammaOffline); | |
1150 | fOutputAll->Add(alld0K0SOffline); | |
1151 | fOutputAll->Add(alld0POffline); | |
1152 | fOutputAll->Add(allcosPAK0SOffline); | |
1153 | ||
1154 | fOutputPIDBach->Add(pidptK0SOffline); | |
1155 | fOutputPIDBach->Add(pidptPOffline); | |
1156 | fOutputPIDBach->Add(pidptPiPOffline); | |
1157 | fOutputPIDBach->Add(pidptPiMOffline); | |
1158 | fOutputPIDBach->Add(pidmassLambdaOffline); | |
1159 | fOutputPIDBach->Add(pidmassLambdaBarOffline); | |
1160 | fOutputPIDBach->Add(pidmassGammaOffline); | |
1161 | fOutputPIDBach->Add(pidd0K0SOffline); | |
1162 | fOutputPIDBach->Add(pidd0POffline); | |
1163 | fOutputPIDBach->Add(pidcosPAK0SOffline); | |
1164 | ||
1165 | if (fTrackRotation) { | |
1166 | ||
1167 | TH2F* pidTRptK0SOffline = (TH2F*)ptK0SOffline->Clone(); | |
1168 | TH2F* pidTRptPOffline = (TH2F*)ptPOffline->Clone(); | |
1169 | TH2F* pidTRptPiPOffline = (TH2F*)ptPiPOffline->Clone(); | |
1170 | TH2F* pidTRptPiMOffline = (TH2F*)ptPiMOffline->Clone(); | |
1171 | TH2F* pidTRmassLambdaOffline = (TH2F*)massLambdaOffline->Clone(); | |
1172 | TH2F* pidTRmassLambdaBarOffline = (TH2F*)massLambdaBarOffline->Clone(); | |
1173 | TH2F* pidTRmassGammaOffline = (TH2F*)massGammaOffline->Clone(); | |
1174 | TH2F* pidTRcosPAK0SOffline = (TH2F*)cosPAK0SOffline->Clone(); | |
1175 | fOutputPIDBachTR->Add(pidTRptK0SOffline); | |
1176 | fOutputPIDBachTR->Add(pidTRptPOffline); | |
1177 | fOutputPIDBachTR->Add(pidTRptPiPOffline); | |
1178 | fOutputPIDBachTR->Add(pidTRptPiMOffline); | |
1179 | fOutputPIDBachTR->Add(pidTRmassLambdaOffline); | |
1180 | fOutputPIDBachTR->Add(pidTRmassLambdaBarOffline); | |
1181 | fOutputPIDBachTR->Add(pidTRmassGammaOffline); | |
1182 | fOutputPIDBachTR->Add(pidTRcosPAK0SOffline); | |
1183 | ||
1184 | } | |
1185 | ||
1186 | ||
1187 | ||
1188 | ||
1189 | ||
43c7bace | 1190 | if (fUseMCInfo) { |
1191 | ||
1192 | if (fUseOnTheFlyV0) { | |
1193 | ||
b833016c | 1194 | nameHistoSgn="histK0SMassSgn"; |
1195 | nameHistoBkg="histK0SMassBkg"; | |
1196 | titleHistoSgn="K^{0}_{S} - sgn: invariant mass VS p_{T} - MC; m_{inv}(#pi^{+},#pi^{-}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries"; | |
1197 | titleHistoBkg="K^{0}_{S} - bkg: invariant mass VS p_{T} - MC; m_{inv}(#pi^{+},#pi^{-}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries"; | |
1198 | TH2F* spectrumK0SMassSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),1000,mK0SPDG-0.050,mK0SPDG+0.050,41,binLimpTprong); | |
1199 | TH2F* spectrumK0SMassBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),1000,mK0SPDG-0.050,mK0SPDG+0.050,41,binLimpTprong); | |
1200 | ||
1201 | nameHistoSgn="histLcMassByK0SSgn"; | |
1202 | nameHistoBkg="histLcMassByK0SBkg"; | |
1203 | titleHistoSgn="#Lambda_{c} - sgn: invariant mass (by K^{0}_{S}) vs p_{T} - MC; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]"; | |
1204 | titleHistoBkg="#Lambda_{c} - bkg: invariant mass (by K^{0}_{S}) vs p_{T} - MC; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]"; | |
1205 | TH2F* spectrumLcMassByK0SSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc); | |
1206 | TH2F* spectrumLcMassByK0SBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc); | |
1207 | ||
1208 | nameHistoSgn="histpK0SvspSgn"; | |
1209 | nameHistoBkg="histpK0SvspBkg"; | |
1210 | titleHistoSgn="#Lambda_{c} - sgn: K^{0}_{S} vs p Total Momentum Distribution - MC; p(p) [GeV/c]; p(K^{0}_{S}) [GeV/c]"; | |
1211 | titleHistoBkg="#Lambda_{c} - bkg: K^{0}_{S} vs p Total Momentum Distribution - MC; p(p) [GeV/c]; p(K^{0}_{S}) [GeV/c]"; | |
1212 | TH2F* momentumDistributionK0SvspSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),41,binLimpTprong,41,binLimpTprong); | |
1213 | TH2F* momentumDistributionK0SvspBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),41,binLimpTprong,41,binLimpTprong); | |
1214 | ||
43c7bace | 1215 | // armenteros-podolanski plots K0S |
b833016c | 1216 | nameHistoSgn="histArmPodK0SSgn"; |
1217 | nameHistoBkg="histArmPodK0SBkg"; | |
1218 | titleHistoSgn="K^{0}_{S} Armenteros-Podolanski distribution (sgn); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1219 | titleHistoBkg="K^{0}_{S} Armenteros-Podolanski distribution (bkg); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1220 | TH2F* armenterosPodK0SSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-1.,1.,300,0.,0.3); | |
1221 | TH2F* armenterosPodK0SBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),200,-1.,1.,300,0.,0.3); | |
1222 | ||
1223 | nameHistoSgn="histArmPodLcSgn"; | |
1224 | nameHistoBkg="histArmPodLcBkg"; | |
1225 | titleHistoSgn="#Lambda_{c} Armenteros-Podolanski distribution (sgn); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1226 | titleHistoBkg="#Lambda_{c} Armenteros-Podolanski distribution (bkg); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1227 | TH2F* armenterosPodLcSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-4.,4.,800,0.,1.6); | |
1228 | TH2F* armenterosPodLcBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),200,-4.,4.,800,0.,1.6); | |
1229 | ||
1230 | TH2F* allspectrumK0SMassSgn = (TH2F*)spectrumK0SMassSgn->Clone(); | |
1231 | TH2F* allspectrumK0SMassBkg = (TH2F*)spectrumK0SMassBkg->Clone(); | |
1232 | TH2F* allspectrumLcMassByK0SSgn = (TH2F*)spectrumLcMassByK0SSgn->Clone(); | |
1233 | TH2F* allspectrumLcMassByK0SBkg = (TH2F*)spectrumLcMassByK0SBkg->Clone(); | |
1234 | TH2F* allmomentumDistributionK0SvspSgn = (TH2F*)momentumDistributionK0SvspSgn->Clone(); | |
1235 | TH2F* allmomentumDistributionK0SvspBkg = (TH2F*)momentumDistributionK0SvspBkg->Clone(); | |
516f546e | 1236 | TH2F* allArmenterosPodK0SSgn = (TH2F*)armenterosPodK0SSgn->Clone(); |
1237 | TH2F* allArmenterosPodK0SBkg = (TH2F*)armenterosPodK0SBkg->Clone(); | |
b833016c | 1238 | TH2F* allArmenterosPodLcSgn = (TH2F*)armenterosPodLcSgn->Clone(); |
1239 | TH2F* allArmenterosPodLcBkg = (TH2F*)armenterosPodLcBkg->Clone(); | |
1240 | ||
1241 | TH2F* pidBachspectrumK0SMassSgn = (TH2F*)spectrumK0SMassSgn->Clone(); | |
1242 | TH2F* pidBachspectrumK0SMassBkg = (TH2F*)spectrumK0SMassBkg->Clone(); | |
1243 | TH2F* pidBachspectrumLcMassByK0SSgn = (TH2F*)spectrumLcMassByK0SSgn->Clone(); | |
1244 | TH2F* pidBachspectrumLcMassByK0SBkg = (TH2F*)spectrumLcMassByK0SBkg->Clone(); | |
1245 | TH2F* pidBachmomentumDistributionK0SvspSgn = (TH2F*)momentumDistributionK0SvspSgn->Clone(); | |
1246 | TH2F* pidBachmomentumDistributionK0SvspBkg = (TH2F*)momentumDistributionK0SvspBkg->Clone(); | |
516f546e | 1247 | TH2F* pidBachArmenterosPodK0SSgn = (TH2F*)armenterosPodK0SSgn->Clone(); |
1248 | TH2F* pidBachArmenterosPodK0SBkg = (TH2F*)armenterosPodK0SBkg->Clone(); | |
b833016c | 1249 | TH2F* pidBachArmenterosPodLcSgn = (TH2F*)armenterosPodLcSgn->Clone(); |
1250 | TH2F* pidBachArmenterosPodLcBkg = (TH2F*)armenterosPodLcBkg->Clone(); | |
43c7bace | 1251 | |
516f546e | 1252 | fOutputAll->Add(allspectrumK0SMassSgn); |
1253 | fOutputAll->Add(allspectrumK0SMassBkg); | |
1254 | fOutputAll->Add(allspectrumLcMassByK0SSgn); | |
1255 | fOutputAll->Add(allspectrumLcMassByK0SBkg); | |
b833016c | 1256 | fOutputAll->Add(allmomentumDistributionK0SvspSgn); |
1257 | fOutputAll->Add(allmomentumDistributionK0SvspBkg); | |
516f546e | 1258 | fOutputAll->Add(allArmenterosPodK0SSgn); |
1259 | fOutputAll->Add(allArmenterosPodK0SBkg); | |
b833016c | 1260 | fOutputAll->Add(allArmenterosPodLcSgn); |
1261 | fOutputAll->Add(allArmenterosPodLcBkg); | |
516f546e | 1262 | |
1263 | fOutputPIDBach->Add(pidBachspectrumK0SMassSgn); | |
1264 | fOutputPIDBach->Add(pidBachspectrumK0SMassBkg); | |
1265 | fOutputPIDBach->Add(pidBachspectrumLcMassByK0SSgn); | |
1266 | fOutputPIDBach->Add(pidBachspectrumLcMassByK0SBkg); | |
b833016c | 1267 | fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspSgn); |
1268 | fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspBkg); | |
516f546e | 1269 | fOutputPIDBach->Add(pidBachArmenterosPodK0SSgn); |
1270 | fOutputPIDBach->Add(pidBachArmenterosPodK0SBkg); | |
b833016c | 1271 | fOutputPIDBach->Add(pidBachArmenterosPodLcSgn); |
1272 | fOutputPIDBach->Add(pidBachArmenterosPodLcBkg); | |
1273 | ||
1274 | nameHistoSgn="histArmPodK0SSgn0"; | |
1275 | nameHistoBkg="histArmPodK0SBkg0"; | |
1276 | titleHistoSgn="K^{0}_{S} Armenteros-Podolanski distribution (sgn); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1277 | titleHistoBkg="K^{0}_{S} Armenteros-Podolanski distribution (bkg); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1278 | TH2F* armenterosPodK0SSgn0 = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-1.,1.,300,0.,0.3); | |
1279 | TH2F* armenterosPodK0SBkg0 = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),200,-1.,1.,300,0.,0.3); | |
1280 | fOutputAll->Add(armenterosPodK0SSgn0); | |
1281 | fOutputAll->Add(armenterosPodK0SBkg0); | |
1282 | nameHistoSgn="histArmPodLcSgn0"; | |
1283 | nameHistoBkg="histArmPodLcBkg0"; | |
1284 | titleHistoSgn="#Lambda_{c} Armenteros-Podolanski distribution (sgn); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1285 | titleHistoBkg="#Lambda_{c} Armenteros-Podolanski distribution (bkg); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1286 | TH2F* armenterosPodLcSgn0 = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-4.,4.,800,0.,1.6); | |
1287 | TH2F* armenterosPodLcBkg0 = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),200,-4.,4.,800,0.,1.6); | |
1288 | fOutputAll->Add(armenterosPodLcSgn0); | |
1289 | fOutputAll->Add(armenterosPodLcBkg0); | |
43c7bace | 1290 | |
516f546e | 1291 | if (fTrackRotation) { |
b833016c | 1292 | TH2F* pidBachTRspectrumLcMassByK0SSgn = (TH2F*)spectrumLcMassByK0SSgn->Clone(); |
1293 | TH2F* pidBachTRspectrumLcMassByK0SBkg = (TH2F*)spectrumLcMassByK0SBkg->Clone(); | |
516f546e | 1294 | fOutputPIDBachTR->Add(pidBachTRspectrumLcMassByK0SSgn); |
1295 | fOutputPIDBachTR->Add(pidBachTRspectrumLcMassByK0SBkg); | |
1296 | } | |
1297 | ||
b833016c | 1298 | |
1299 | ||
1300 | nameHistoSgn="histptK0SSgn"; | |
1301 | nameHistoBkg="histptK0SBkg"; | |
1302 | titleHistoSgn="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries"; | |
1303 | titleHistoBkg="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries"; | |
1304 | TH2F* ptK0SSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong); | |
1305 | TH2F* ptK0SBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong); | |
1306 | ||
1307 | nameHistoSgn="histptPSgn"; | |
1308 | nameHistoBkg="histptPBkg"; | |
1309 | titleHistoSgn="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries"; | |
1310 | titleHistoBkg="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries"; | |
1311 | TH2F* ptPSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong); | |
1312 | TH2F* ptPBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong); | |
1313 | ||
1314 | nameHistoSgn="histptPipSgn"; | |
1315 | nameHistoBkg="histptPipBkg"; | |
1316 | titleHistoSgn="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries"; | |
1317 | titleHistoBkg="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries"; | |
1318 | TH2F* ptPiPSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong); | |
1319 | TH2F* ptPiPBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong); | |
1320 | ||
1321 | nameHistoSgn="histptPimSgn"; | |
1322 | nameHistoBkg="histptPimBkg"; | |
1323 | titleHistoSgn="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries"; | |
1324 | titleHistoBkg="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries"; | |
1325 | TH2F* ptPiMSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong); | |
1326 | TH2F* ptPiMBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong); | |
1327 | ||
1328 | nameHistoSgn="histLambdaMassSgn"; | |
1329 | nameHistoBkg="histLambdaMassBkg"; | |
1330 | titleHistoSgn="m_{inv}(p,#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(p,#pi^{-}) [GeV/c^{2}]; Entries"; | |
1331 | titleHistoBkg="m_{inv}(p,#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(p,#pi^{-}) [GeV/c^{2}]; Entries"; | |
1332 | TH2F* massLambdaSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5); | |
1333 | TH2F* massLambdaBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5); | |
1334 | ||
1335 | nameHistoSgn="histLambdaBarMassSgn"; | |
1336 | nameHistoBkg="histLambdaBarMassBkg"; | |
1337 | titleHistoSgn="m_{inv}(#bar{p},#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#bar{p},#pi^{+}) [GeV/c^{2}]; Entries"; | |
1338 | titleHistoBkg="m_{inv}(#bar{p},#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#bar{p},#pi^{+}) [GeV/c^{2}]; Entries"; | |
1339 | TH2F* massLambdaBarSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5); | |
1340 | TH2F* massLambdaBarBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5); | |
1341 | ||
1342 | nameHistoSgn="histGammaMassSgn"; | |
1343 | nameHistoBkg="histGammaMassBkg"; | |
1344 | titleHistoSgn="m_{inv}(e^{+},e^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(e^{+},e^{-}) [GeV/c^{2}]; Entries"; | |
1345 | titleHistoBkg="m_{inv}(e^{+},e^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(e^{+},e^{-}) [GeV/c^{2}]; Entries"; | |
1346 | TH2F* massGammaSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,100,0.,1.); | |
1347 | TH2F* massGammaBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,100,0.,1.); | |
1348 | ||
1349 | nameHistoSgn="histD0K0SSgn"; | |
1350 | nameHistoBkg="histD0K0SBkg"; | |
1351 | titleHistoSgn="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries"; | |
1352 | titleHistoBkg="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries"; | |
1353 | TH2F* d0K0SSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,-1.,1.); | |
1354 | TH2F* d0K0SBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,-1.,1.); | |
1355 | ||
1356 | nameHistoSgn="histD0PSgn"; | |
1357 | nameHistoBkg="histD0PBkg"; | |
1358 | titleHistoSgn="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries"; | |
1359 | titleHistoBkg="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries"; | |
1360 | TH2F* d0PSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,-1.,1.); | |
1361 | TH2F* d0PBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,-1.,1.); | |
1362 | ||
1363 | nameHistoSgn="histCosPAK0SSgn"; | |
1364 | nameHistoBkg="histCosPAK0SBkg"; | |
1365 | titleHistoSgn="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries"; | |
1366 | titleHistoBkg="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries"; | |
1367 | TH2F *cosPAK0SSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),41,binLimpTprong,100,0.99,1.); | |
1368 | TH2F *cosPAK0SBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),41,binLimpTprong,100,0.99,1.); | |
1369 | ||
1370 | TH2F* allptK0SSgn = (TH2F*)ptK0SSgn->Clone(); | |
1371 | TH2F* allptK0SBkg = (TH2F*)ptK0SBkg->Clone(); | |
1372 | TH2F* allptPSgn = (TH2F*)ptPSgn->Clone(); | |
1373 | TH2F* allptPBkg = (TH2F*)ptPBkg->Clone(); | |
1374 | TH2F* allptPiPSgn = (TH2F*)ptPiPSgn->Clone(); | |
1375 | TH2F* allptPiPBkg = (TH2F*)ptPiPBkg->Clone(); | |
1376 | TH2F* allptPiMSgn = (TH2F*)ptPiMSgn->Clone(); | |
1377 | TH2F* allptPiMBkg = (TH2F*)ptPiMBkg->Clone(); | |
1378 | TH2F* allmassLambdaSgn = (TH2F*)massLambdaSgn->Clone(); | |
1379 | TH2F* allmassLambdaBkg = (TH2F*)massLambdaBkg->Clone(); | |
1380 | TH2F* allmassLambdaBarSgn = (TH2F*)massLambdaBarSgn->Clone(); | |
1381 | TH2F* allmassLambdaBarBkg = (TH2F*)massLambdaBarBkg->Clone(); | |
1382 | TH2F* allmassGammaSgn = (TH2F*)massGammaSgn->Clone(); | |
1383 | TH2F* allmassGammaBkg = (TH2F*)massGammaBkg->Clone(); | |
1384 | TH2F* alld0K0SSgn = (TH2F*)d0K0SSgn->Clone(); | |
1385 | TH2F* alld0K0SBkg = (TH2F*)d0K0SBkg->Clone(); | |
1386 | TH2F* alld0PSgn = (TH2F*)d0PSgn->Clone(); | |
1387 | TH2F* alld0PBkg = (TH2F*)d0PBkg->Clone(); | |
1388 | TH2F* allcosPAK0SSgn = (TH2F*)cosPAK0SSgn->Clone(); | |
1389 | TH2F* allcosPAK0SBkg = (TH2F*)cosPAK0SBkg->Clone(); | |
1390 | ||
1391 | TH2F* pidptK0SSgn = (TH2F*)ptK0SSgn->Clone(); | |
1392 | TH2F* pidptK0SBkg = (TH2F*)ptK0SBkg->Clone(); | |
1393 | TH2F* pidptPSgn = (TH2F*)ptPSgn->Clone(); | |
1394 | TH2F* pidptPBkg = (TH2F*)ptPBkg->Clone(); | |
1395 | TH2F* pidptPiPSgn = (TH2F*)ptPiPSgn->Clone(); | |
1396 | TH2F* pidptPiPBkg = (TH2F*)ptPiPBkg->Clone(); | |
1397 | TH2F* pidptPiMSgn = (TH2F*)ptPiMSgn->Clone(); | |
1398 | TH2F* pidptPiMBkg = (TH2F*)ptPiMBkg->Clone(); | |
1399 | TH2F* pidmassLambdaSgn = (TH2F*)massLambdaSgn->Clone(); | |
1400 | TH2F* pidmassLambdaBkg = (TH2F*)massLambdaBkg->Clone(); | |
1401 | TH2F* pidmassLambdaBarSgn = (TH2F*)massLambdaBarSgn->Clone(); | |
1402 | TH2F* pidmassLambdaBarBkg = (TH2F*)massLambdaBarBkg->Clone(); | |
1403 | TH2F* pidmassGammaSgn = (TH2F*)massGammaSgn->Clone(); | |
1404 | TH2F* pidmassGammaBkg = (TH2F*)massGammaBkg->Clone(); | |
1405 | TH2F* pidd0K0SSgn = (TH2F*)d0K0SSgn->Clone(); | |
1406 | TH2F* pidd0K0SBkg = (TH2F*)d0K0SBkg->Clone(); | |
1407 | TH2F* pidd0PSgn = (TH2F*)d0PSgn->Clone(); | |
1408 | TH2F* pidd0PBkg = (TH2F*)d0PBkg->Clone(); | |
1409 | TH2F* pidcosPAK0SSgn = (TH2F*)cosPAK0SSgn->Clone(); | |
1410 | TH2F* pidcosPAK0SBkg = (TH2F*)cosPAK0SBkg->Clone(); | |
1411 | ||
1412 | fOutputAll->Add(allptK0SSgn); | |
1413 | fOutputAll->Add(allptK0SBkg); | |
1414 | fOutputAll->Add(allptPSgn); | |
1415 | fOutputAll->Add(allptPBkg); | |
1416 | fOutputAll->Add(allptPiPSgn); | |
1417 | fOutputAll->Add(allptPiPBkg); | |
1418 | fOutputAll->Add(allptPiMSgn); | |
1419 | fOutputAll->Add(allptPiMBkg); | |
1420 | fOutputAll->Add(allmassLambdaSgn); | |
1421 | fOutputAll->Add(allmassLambdaBkg); | |
1422 | fOutputAll->Add(allmassLambdaBarSgn); | |
1423 | fOutputAll->Add(allmassLambdaBarBkg); | |
1424 | fOutputAll->Add(allmassGammaSgn); | |
1425 | fOutputAll->Add(allmassGammaBkg); | |
1426 | fOutputAll->Add(alld0K0SSgn); | |
1427 | fOutputAll->Add(alld0K0SBkg); | |
1428 | fOutputAll->Add(alld0PSgn); | |
1429 | fOutputAll->Add(alld0PBkg); | |
1430 | fOutputAll->Add(allcosPAK0SSgn); | |
1431 | fOutputAll->Add(allcosPAK0SBkg); | |
1432 | ||
1433 | fOutputPIDBach->Add(pidptK0SSgn); | |
1434 | fOutputPIDBach->Add(pidptK0SBkg); | |
1435 | fOutputPIDBach->Add(pidptPSgn); | |
1436 | fOutputPIDBach->Add(pidptPBkg); | |
1437 | fOutputPIDBach->Add(pidptPiPSgn); | |
1438 | fOutputPIDBach->Add(pidptPiPBkg); | |
1439 | fOutputPIDBach->Add(pidptPiMSgn); | |
1440 | fOutputPIDBach->Add(pidptPiMBkg); | |
1441 | fOutputPIDBach->Add(pidmassLambdaSgn); | |
1442 | fOutputPIDBach->Add(pidmassLambdaBkg); | |
1443 | fOutputPIDBach->Add(pidmassLambdaBarSgn); | |
1444 | fOutputPIDBach->Add(pidmassLambdaBarBkg); | |
1445 | fOutputPIDBach->Add(pidmassGammaSgn); | |
1446 | fOutputPIDBach->Add(pidmassGammaBkg); | |
1447 | fOutputPIDBach->Add(pidd0K0SSgn); | |
1448 | fOutputPIDBach->Add(pidd0K0SBkg); | |
1449 | fOutputPIDBach->Add(pidd0PSgn); | |
1450 | fOutputPIDBach->Add(pidd0PBkg); | |
1451 | fOutputPIDBach->Add(pidcosPAK0SSgn); | |
1452 | fOutputPIDBach->Add(pidcosPAK0SBkg); | |
1453 | ||
1454 | if (fTrackRotation) { | |
1455 | ||
1456 | TH2F* pidTRptK0SSgn = (TH2F*)ptK0SSgn->Clone(); | |
1457 | TH2F* pidTRptK0SBkg = (TH2F*)ptK0SBkg->Clone(); | |
1458 | TH2F* pidTRptPSgn = (TH2F*)ptPSgn->Clone(); | |
1459 | TH2F* pidTRptPBkg = (TH2F*)ptPBkg->Clone(); | |
1460 | TH2F* pidTRptPiPSgn = (TH2F*)ptPiPSgn->Clone(); | |
1461 | TH2F* pidTRptPiPBkg = (TH2F*)ptPiPBkg->Clone(); | |
1462 | TH2F* pidTRptPiMSgn = (TH2F*)ptPiMSgn->Clone(); | |
1463 | TH2F* pidTRptPiMBkg = (TH2F*)ptPiMBkg->Clone(); | |
1464 | TH2F* pidTRmassLambdaSgn = (TH2F*)massLambdaSgn->Clone(); | |
1465 | TH2F* pidTRmassLambdaBkg = (TH2F*)massLambdaBkg->Clone(); | |
1466 | TH2F* pidTRmassLambdaBarSgn = (TH2F*)massLambdaBarSgn->Clone(); | |
1467 | TH2F* pidTRmassLambdaBarBkg = (TH2F*)massLambdaBarBkg->Clone(); | |
1468 | TH2F* pidTRmassGammaSgn = (TH2F*)massGammaSgn->Clone(); | |
1469 | TH2F* pidTRmassGammaBkg = (TH2F*)massGammaBkg->Clone(); | |
1470 | TH2F* pidTRcosPAK0SSgn = (TH2F*)cosPAK0SSgn->Clone(); | |
1471 | TH2F* pidTRcosPAK0SBkg = (TH2F*)cosPAK0SBkg->Clone(); | |
1472 | fOutputPIDBachTR->Add(pidTRptK0SSgn); | |
1473 | fOutputPIDBachTR->Add(pidTRptK0SBkg); | |
1474 | fOutputPIDBachTR->Add(pidTRptPSgn); | |
1475 | fOutputPIDBachTR->Add(pidTRptPBkg); | |
1476 | fOutputPIDBachTR->Add(pidTRptPiPSgn); | |
1477 | fOutputPIDBachTR->Add(pidTRptPiPBkg); | |
1478 | fOutputPIDBachTR->Add(pidTRptPiMSgn); | |
1479 | fOutputPIDBachTR->Add(pidTRptPiMBkg); | |
1480 | fOutputPIDBachTR->Add(pidTRmassLambdaSgn); | |
1481 | fOutputPIDBachTR->Add(pidTRmassLambdaBkg); | |
1482 | fOutputPIDBachTR->Add(pidTRmassLambdaBarSgn); | |
1483 | fOutputPIDBachTR->Add(pidTRmassLambdaBarBkg); | |
1484 | fOutputPIDBachTR->Add(pidTRmassGammaSgn); | |
1485 | fOutputPIDBachTR->Add(pidTRmassGammaBkg); | |
1486 | fOutputPIDBachTR->Add(pidTRcosPAK0SSgn); | |
1487 | fOutputPIDBachTR->Add(pidTRcosPAK0SBkg); | |
1488 | ||
43c7bace | 1489 | } |
1490 | ||
1491 | ||
b833016c | 1492 | } // useOnTheFly |
1493 | ||
1494 | ||
1495 | nameHistoSgn="histK0SMassOfflineSgn"; | |
1496 | nameHistoBkg="histK0SMassOfflineBkg"; | |
1497 | titleHistoSgn="K^{0}_{S} - sgn: invariant mass VS p_{T} - MC; m_{inv}(#pi^{+},#pi^{-}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries"; | |
1498 | titleHistoBkg="K^{0}_{S} - bkg: invariant mass VS p_{T} - MC; m_{inv}(#pi^{+},#pi^{-}) [GeV/c^{2}]; p_{T}(K^{0}_{S}) [GeV/c]; Entries"; | |
1499 | TH2F* spectrumK0SMassOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),1000,mK0SPDG-0.050,mK0SPDG+0.050,41,binLimpTprong); | |
1500 | TH2F* spectrumK0SMassOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),1000,mK0SPDG-0.050,mK0SPDG+0.050,41,binLimpTprong); | |
1501 | ||
1502 | nameHistoSgn="histLcMassByK0SOfflineSgn"; | |
1503 | nameHistoBkg="histLcMassByK0SOfflineBkg"; | |
1504 | titleHistoSgn="#Lambda_{c} - sgn: invariant mass (by K^{0}_{S}) vs p_{T} - MC; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]"; | |
1505 | titleHistoBkg="#Lambda_{c} - bkg: invariant mass (by K^{0}_{S}) vs p_{T} - MC; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]"; | |
1506 | TH2F* spectrumLcMassOfflineByK0SSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc); | |
1507 | TH2F* spectrumLcMassOfflineByK0SBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc); | |
1508 | ||
1509 | nameHistoSgn="histpK0SvspOfflineSgn"; | |
1510 | nameHistoBkg="histpK0SvspOfflineBkg"; | |
1511 | titleHistoSgn="#Lambda_{c} - sgn: K^{0}_{S} vs p Total Momentum Distribution - Offline - MC; p(p) [GeV/c]; p(K^{0}_{S}) [GeV/c]"; | |
1512 | titleHistoBkg="#Lambda_{c} - bkg: K^{0}_{S} vs p Total Momentum Distribution - Offline - MC; p(p) [GeV/c]; p(K^{0}_{S}) [GeV/c]"; | |
1513 | TH2F* momentumDistributionK0SvspOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),41,binLimpTprong,41,binLimpTprong); | |
1514 | TH2F* momentumDistributionK0SvspOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),41,binLimpTprong,41,binLimpTprong); | |
1515 | ||
43c7bace | 1516 | // armenteros-podolanski plots K0S (offline) |
b833016c | 1517 | nameHistoSgn="histArmPodK0SOfflineSgn"; |
1518 | nameHistoBkg="histArmPodK0SOfflineBkg"; | |
1519 | titleHistoSgn="K^{0}_{S} Armenteros-Podolanski distribution (sgn) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1520 | titleHistoBkg="K^{0}_{S} Armenteros-Podolanski distribution (bkg) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1521 | TH2F* armenterosPodK0SOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-1.,1.,300,0.,0.3); | |
1522 | TH2F* armenterosPodK0SOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoSgn.Data(),200,-1.,1.,300,0.,0.3); | |
1523 | ||
1524 | nameHistoSgn="histArmPodLcOfflineSgn"; | |
1525 | nameHistoBkg="histArmPodLcOfflineBkg"; | |
1526 | titleHistoSgn="#Lambda_{c} Armenteros-Podolanski distribution (sgn) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1527 | titleHistoBkg="#Lambda_{c} Armenteros-Podolanski distribution (bkg) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1528 | TH2F* armenterosPodLcOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-4.,4.,800,0.,1.6); | |
1529 | TH2F* armenterosPodLcOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoSgn.Data(),200,-4.,4.,800,0.,1.6); | |
43c7bace | 1530 | |
516f546e | 1531 | |
1532 | TH2F* allspectrumK0SMassOfflineSgn = (TH2F*)spectrumK0SMassOfflineSgn->Clone(); | |
1533 | TH2F* allspectrumK0SMassOfflineBkg = (TH2F*) spectrumK0SMassOfflineBkg->Clone(); | |
1534 | TH2F* allspectrumLcMassOfflineByK0SSgn = (TH2F*)spectrumLcMassOfflineByK0SSgn->Clone(); | |
1535 | TH2F* allspectrumLcMassOfflineByK0SBkg = (TH2F*) spectrumLcMassOfflineByK0SBkg->Clone(); | |
b833016c | 1536 | TH2F* allmomentumDistributionK0SvspOfflineSgn = (TH2F*)momentumDistributionK0SvspOfflineSgn->Clone(); |
1537 | TH2F* allmomentumDistributionK0SvspOfflineBkg = (TH2F*)momentumDistributionK0SvspOfflineBkg->Clone(); | |
1538 | TH2F* allArmenterosPodK0SOfflineSgn = (TH2F*)armenterosPodK0SOfflineSgn->Clone(); | |
1539 | TH2F* allArmenterosPodK0SOfflineBkg = (TH2F*)armenterosPodK0SOfflineBkg->Clone(); | |
1540 | TH2F* allArmenterosPodLcOfflineSgn = (TH2F*)armenterosPodLcOfflineSgn->Clone(); | |
1541 | TH2F* allArmenterosPodLcOfflineBkg = (TH2F*)armenterosPodLcOfflineBkg->Clone(); | |
1542 | ||
1543 | TH2F* pidBachspectrumLcMassOfflineByK0SSgn = (TH2F*)spectrumLcMassOfflineByK0SSgn->Clone(); | |
1544 | TH2F* pidBachspectrumLcMassOfflineByK0SBkg = (TH2F*) spectrumLcMassOfflineByK0SBkg->Clone(); | |
1545 | TH2F* pidBachspectrumK0SMassOfflineSgn = (TH2F*)spectrumK0SMassOfflineSgn->Clone(); | |
516f546e | 1546 | TH2F* pidBachspectrumK0SMassOfflineBkg = (TH2F*) spectrumK0SMassOfflineBkg->Clone(); |
b833016c | 1547 | TH2F* pidBachmomentumDistributionK0SvspOfflineSgn = (TH2F*)momentumDistributionK0SvspOfflineSgn->Clone(); |
1548 | TH2F* pidBachmomentumDistributionK0SvspOfflineBkg = (TH2F*)momentumDistributionK0SvspOfflineBkg->Clone(); | |
1549 | TH2F* pidBachArmenterosPodK0SOfflineSgn = (TH2F*)armenterosPodK0SOfflineSgn->Clone(); | |
1550 | TH2F* pidBachArmenterosPodK0SOfflineBkg = (TH2F*)armenterosPodK0SOfflineBkg->Clone(); | |
1551 | TH2F* pidBachArmenterosPodLcOfflineSgn = (TH2F*)armenterosPodLcOfflineSgn->Clone(); | |
1552 | TH2F* pidBachArmenterosPodLcOfflineBkg = (TH2F*)armenterosPodLcOfflineBkg->Clone(); | |
43c7bace | 1553 | |
516f546e | 1554 | fOutputAll->Add(allspectrumK0SMassOfflineSgn); |
1555 | fOutputAll->Add(allspectrumK0SMassOfflineBkg); | |
1556 | fOutputAll->Add(allspectrumLcMassOfflineByK0SSgn); | |
1557 | fOutputAll->Add(allspectrumLcMassOfflineByK0SBkg); | |
b833016c | 1558 | fOutputAll->Add(allmomentumDistributionK0SvspOfflineSgn); |
1559 | fOutputAll->Add(allmomentumDistributionK0SvspOfflineBkg); | |
1560 | fOutputAll->Add(allArmenterosPodK0SOfflineSgn); | |
1561 | fOutputAll->Add(allArmenterosPodK0SOfflineBkg); | |
1562 | fOutputAll->Add(allArmenterosPodLcOfflineSgn); | |
1563 | fOutputAll->Add(allArmenterosPodLcOfflineBkg); | |
516f546e | 1564 | |
1565 | fOutputPIDBach->Add(pidBachspectrumK0SMassOfflineSgn); | |
1566 | fOutputPIDBach->Add(pidBachspectrumK0SMassOfflineBkg); | |
1567 | fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0SSgn); | |
1568 | fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0SBkg); | |
b833016c | 1569 | fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspOfflineSgn); |
1570 | fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspOfflineBkg); | |
1571 | fOutputPIDBach->Add(pidBachArmenterosPodK0SOfflineSgn); | |
1572 | fOutputPIDBach->Add(pidBachArmenterosPodK0SOfflineBkg); | |
1573 | fOutputPIDBach->Add(pidBachArmenterosPodLcOfflineSgn); | |
1574 | fOutputPIDBach->Add(pidBachArmenterosPodLcOfflineBkg); | |
1575 | ||
1576 | nameHistoSgn="histArmPodK0SOfflineSgn0"; | |
1577 | nameHistoBkg="histArmPodK0SOfflineBkg0"; | |
1578 | titleHistoSgn="K^{0}_{S} Armenteros-Podolanski distribution (sgn) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1579 | titleHistoBkg="K^{0}_{S} Armenteros-Podolanski distribution (bkg) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1580 | TH2F* armenterosPodK0SOfflineSgn0 = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-1.,1.,300,0.,0.3); | |
1581 | TH2F* armenterosPodK0SOfflineBkg0 = new TH2F(nameHistoBkg.Data(),titleHistoSgn.Data(),200,-1.,1.,300,0.,0.3); | |
1582 | nameHistoSgn="histArmPodLcOfflineSgn0"; | |
1583 | nameHistoBkg="histArmPodLcOfflineBkg0"; | |
1584 | titleHistoSgn="#Lambda_{c} Armenteros-Podolanski distribution (sgn) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1585 | titleHistoBkg="#Lambda_{c} Armenteros-Podolanski distribution (bkg) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]"; | |
1586 | TH2F* armenterosPodLcOfflineSgn0 = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-4.,4.,800,0.,1.6); | |
1587 | TH2F* armenterosPodLcOfflineBkg0 = new TH2F(nameHistoBkg.Data(),titleHistoSgn.Data(),200,-4.,4.,800,0.,1.6); | |
1588 | fOutputAll->Add(armenterosPodK0SOfflineSgn0); | |
1589 | fOutputAll->Add(armenterosPodK0SOfflineBkg0); | |
1590 | fOutputAll->Add(armenterosPodLcOfflineSgn0); | |
1591 | fOutputAll->Add(armenterosPodLcOfflineBkg0); | |
43c7bace | 1592 | |
516f546e | 1593 | if (fTrackRotation) { |
1594 | TH2F* pidBachTRspectrumLcMassOfflineByK0SSgn = (TH2F*)spectrumLcMassOfflineByK0SSgn->Clone(); | |
1595 | TH2F* pidBachTRspectrumLcMassOfflineByK0SBkg = (TH2F*) spectrumLcMassOfflineByK0SBkg->Clone(); | |
1596 | fOutputPIDBachTR->Add(pidBachTRspectrumLcMassOfflineByK0SSgn); | |
1597 | fOutputPIDBachTR->Add(pidBachTRspectrumLcMassOfflineByK0SBkg); | |
1598 | } | |
1599 | ||
b833016c | 1600 | |
1601 | ||
1602 | ||
1603 | nameHistoSgn="histptK0SOfflineSgn"; | |
1604 | nameHistoBkg="histptK0SOfflineBkg"; | |
1605 | titleHistoSgn="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries"; | |
1606 | titleHistoBkg="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries"; | |
1607 | TH2F* ptK0SOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong); | |
1608 | TH2F* ptK0SOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong); | |
1609 | ||
1610 | nameHistoSgn="histptPOfflineSgn"; | |
1611 | nameHistoBkg="histptPOfflineBkg"; | |
1612 | titleHistoSgn="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries"; | |
1613 | titleHistoBkg="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries"; | |
1614 | TH2F* ptPOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong); | |
1615 | TH2F* ptPOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong); | |
1616 | ||
1617 | nameHistoSgn="histptPipOfflineSgn"; | |
1618 | nameHistoBkg="histptPipOfflineBkg"; | |
1619 | titleHistoSgn="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries"; | |
1620 | titleHistoBkg="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries"; | |
1621 | TH2F* ptPiPOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong); | |
1622 | TH2F* ptPiPOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong); | |
1623 | ||
1624 | nameHistoSgn="histptPimOfflineSgn"; | |
1625 | nameHistoBkg="histptPimOfflineBkg"; | |
1626 | titleHistoSgn="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries"; | |
1627 | titleHistoBkg="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries"; | |
1628 | TH2F* ptPiMOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong); | |
1629 | TH2F* ptPiMOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong); | |
1630 | ||
1631 | nameHistoSgn="histLambdaMassOfflineSgn"; | |
1632 | nameHistoBkg="histLambdaMassOfflineBkg"; | |
1633 | titleHistoSgn="m_{inv}(p,#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(p,#pi^{-}) [GeV/c^{2}]; Entries"; | |
1634 | titleHistoBkg="m_{inv}(p,#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(p,#pi^{-}) [GeV/c^{2}]; Entries"; | |
1635 | TH2F* massLambdaOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5); | |
1636 | TH2F* massLambdaOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5); | |
1637 | ||
1638 | nameHistoSgn="histLambdaBarMassOfflineSgn"; | |
1639 | nameHistoBkg="histLambdaBarMassOfflineBkg"; | |
1640 | titleHistoSgn="m_{inv}(#bar{p},#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#bar{p},#pi^{+}) [GeV/c^{2}]; Entries"; | |
1641 | titleHistoBkg="m_{inv}(#bar{p},#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#bar{p},#pi^{+}) [GeV/c^{2}]; Entries"; | |
1642 | TH2F* massLambdaBarOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5); | |
1643 | TH2F* massLambdaBarOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5); | |
1644 | ||
1645 | nameHistoSgn="histGammaMassOfflineSgn"; | |
1646 | nameHistoBkg="histGammaMassOfflineBkg"; | |
1647 | titleHistoSgn="m_{inv}(e^{+},e^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(e^{+},e^{-}) [GeV/c^{2}]; Entries"; | |
1648 | titleHistoBkg="m_{inv}(e^{+},e^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(e^{+},e^{-}) [GeV/c^{2}]; Entries"; | |
1649 | TH2F* massGammaOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,100,0.,1.); | |
1650 | TH2F* massGammaOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,100,0.,1.); | |
1651 | ||
1652 | nameHistoSgn="histD0K0SOfflineSgn"; | |
1653 | nameHistoBkg="histD0K0SOfflineBkg"; | |
1654 | titleHistoSgn="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries"; | |
1655 | titleHistoBkg="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries"; | |
1656 | TH2F* d0K0SOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,-1.,1.); | |
1657 | TH2F* d0K0SOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,-1.,1.); | |
1658 | ||
1659 | nameHistoSgn="histD0POfflineSgn"; | |
1660 | nameHistoBkg="histD0POfflineBkg"; | |
1661 | titleHistoSgn="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries"; | |
1662 | titleHistoBkg="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries"; | |
1663 | TH2F* d0POfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,-1.,1.); | |
1664 | TH2F* d0POfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,-1.,1.); | |
1665 | ||
1666 | nameHistoSgn="histCosPAK0SOfflineSgn"; | |
1667 | nameHistoBkg="histCosPAK0SOfflineBkg"; | |
1668 | titleHistoSgn="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries"; | |
1669 | titleHistoBkg="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries"; | |
1670 | TH2F *cosPAK0SOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),41,binLimpTprong,100,0.99,1.); | |
1671 | TH2F *cosPAK0SOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),41,binLimpTprong,100,0.99,1.); | |
1672 | ||
1673 | TH2F* allptK0SOfflineSgn = (TH2F*)ptK0SOfflineSgn->Clone(); | |
1674 | TH2F* allptK0SOfflineBkg = (TH2F*)ptK0SOfflineBkg->Clone(); | |
1675 | TH2F* allptPOfflineSgn = (TH2F*)ptPOfflineSgn->Clone(); | |
1676 | TH2F* allptPOfflineBkg = (TH2F*)ptPOfflineBkg->Clone(); | |
1677 | TH2F* allptPiPOfflineSgn = (TH2F*)ptPiPOfflineSgn->Clone(); | |
1678 | TH2F* allptPiPOfflineBkg = (TH2F*)ptPiPOfflineBkg->Clone(); | |
1679 | TH2F* allptPiMOfflineSgn = (TH2F*)ptPiMOfflineSgn->Clone(); | |
1680 | TH2F* allptPiMOfflineBkg = (TH2F*)ptPiMOfflineBkg->Clone(); | |
1681 | TH2F* allmassLambdaOfflineSgn = (TH2F*)massLambdaOfflineSgn->Clone(); | |
1682 | TH2F* allmassLambdaOfflineBkg = (TH2F*)massLambdaOfflineBkg->Clone(); | |
1683 | TH2F* allmassLambdaBarOfflineSgn = (TH2F*)massLambdaBarOfflineSgn->Clone(); | |
1684 | TH2F* allmassLambdaBarOfflineBkg = (TH2F*)massLambdaBarOfflineBkg->Clone(); | |
1685 | TH2F* allmassGammaOfflineSgn = (TH2F*)massGammaOfflineSgn->Clone(); | |
1686 | TH2F* allmassGammaOfflineBkg = (TH2F*)massGammaOfflineBkg->Clone(); | |
1687 | TH2F* alld0K0SOfflineSgn = (TH2F*)d0K0SOfflineSgn->Clone(); | |
1688 | TH2F* alld0K0SOfflineBkg = (TH2F*)d0K0SOfflineBkg->Clone(); | |
1689 | TH2F* alld0POfflineSgn = (TH2F*)d0POfflineSgn->Clone(); | |
1690 | TH2F* alld0POfflineBkg = (TH2F*)d0POfflineBkg->Clone(); | |
1691 | TH2F* allcosPAK0SOfflineSgn = (TH2F*)cosPAK0SOfflineSgn->Clone(); | |
1692 | TH2F* allcosPAK0SOfflineBkg = (TH2F*)cosPAK0SOfflineBkg->Clone(); | |
1693 | ||
1694 | TH2F* pidptK0SOfflineSgn = (TH2F*)ptK0SOfflineSgn->Clone(); | |
1695 | TH2F* pidptK0SOfflineBkg = (TH2F*)ptK0SOfflineBkg->Clone(); | |
1696 | TH2F* pidptPOfflineSgn = (TH2F*)ptPOfflineSgn->Clone(); | |
1697 | TH2F* pidptPOfflineBkg = (TH2F*)ptPOfflineBkg->Clone(); | |
1698 | TH2F* pidptPiPOfflineSgn = (TH2F*)ptPiPOfflineSgn->Clone(); | |
1699 | TH2F* pidptPiPOfflineBkg = (TH2F*)ptPiPOfflineBkg->Clone(); | |
1700 | TH2F* pidptPiMOfflineSgn = (TH2F*)ptPiMOfflineSgn->Clone(); | |
1701 | TH2F* pidptPiMOfflineBkg = (TH2F*)ptPiMOfflineBkg->Clone(); | |
1702 | TH2F* pidmassLambdaOfflineSgn = (TH2F*)massLambdaOfflineSgn->Clone(); | |
1703 | TH2F* pidmassLambdaOfflineBkg = (TH2F*)massLambdaOfflineBkg->Clone(); | |
1704 | TH2F* pidmassLambdaBarOfflineSgn = (TH2F*)massLambdaBarOfflineSgn->Clone(); | |
1705 | TH2F* pidmassLambdaBarOfflineBkg = (TH2F*)massLambdaBarOfflineBkg->Clone(); | |
1706 | TH2F* pidmassGammaOfflineSgn = (TH2F*)massGammaOfflineSgn->Clone(); | |
1707 | TH2F* pidmassGammaOfflineBkg = (TH2F*)massGammaOfflineBkg->Clone(); | |
1708 | TH2F* pidd0K0SOfflineSgn = (TH2F*)d0K0SOfflineSgn->Clone(); | |
1709 | TH2F* pidd0K0SOfflineBkg = (TH2F*)d0K0SOfflineBkg->Clone(); | |
1710 | TH2F* pidd0POfflineSgn = (TH2F*)d0POfflineSgn->Clone(); | |
1711 | TH2F* pidd0POfflineBkg = (TH2F*)d0POfflineBkg->Clone(); | |
1712 | TH2F* pidcosPAK0SOfflineSgn = (TH2F*)cosPAK0SOfflineSgn->Clone(); | |
1713 | TH2F* pidcosPAK0SOfflineBkg = (TH2F*)cosPAK0SOfflineBkg->Clone(); | |
1714 | ||
1715 | fOutputAll->Add(allptK0SOfflineSgn); | |
1716 | fOutputAll->Add(allptK0SOfflineBkg); | |
1717 | fOutputAll->Add(allptPOfflineSgn); | |
1718 | fOutputAll->Add(allptPOfflineBkg); | |
1719 | fOutputAll->Add(allptPiPOfflineSgn); | |
1720 | fOutputAll->Add(allptPiPOfflineBkg); | |
1721 | fOutputAll->Add(allptPiMOfflineSgn); | |
1722 | fOutputAll->Add(allptPiMOfflineBkg); | |
1723 | fOutputAll->Add(allmassLambdaOfflineSgn); | |
1724 | fOutputAll->Add(allmassLambdaOfflineBkg); | |
1725 | fOutputAll->Add(allmassLambdaBarOfflineSgn); | |
1726 | fOutputAll->Add(allmassLambdaBarOfflineBkg); | |
1727 | fOutputAll->Add(allmassGammaOfflineSgn); | |
1728 | fOutputAll->Add(allmassGammaOfflineBkg); | |
1729 | fOutputAll->Add(alld0K0SOfflineSgn); | |
1730 | fOutputAll->Add(alld0K0SOfflineBkg); | |
1731 | fOutputAll->Add(alld0POfflineSgn); | |
1732 | fOutputAll->Add(alld0POfflineBkg); | |
1733 | fOutputAll->Add(allcosPAK0SOfflineSgn); | |
1734 | fOutputAll->Add(allcosPAK0SOfflineBkg); | |
1735 | ||
1736 | fOutputPIDBach->Add(pidptK0SOfflineSgn); | |
1737 | fOutputPIDBach->Add(pidptK0SOfflineBkg); | |
1738 | fOutputPIDBach->Add(pidptPOfflineSgn); | |
1739 | fOutputPIDBach->Add(pidptPOfflineBkg); | |
1740 | fOutputPIDBach->Add(pidptPiPOfflineSgn); | |
1741 | fOutputPIDBach->Add(pidptPiPOfflineBkg); | |
1742 | fOutputPIDBach->Add(pidptPiMOfflineSgn); | |
1743 | fOutputPIDBach->Add(pidptPiMOfflineBkg); | |
1744 | fOutputPIDBach->Add(pidmassLambdaOfflineSgn); | |
1745 | fOutputPIDBach->Add(pidmassLambdaOfflineBkg); | |
1746 | fOutputPIDBach->Add(pidmassLambdaBarOfflineSgn); | |
1747 | fOutputPIDBach->Add(pidmassLambdaBarOfflineBkg); | |
1748 | fOutputPIDBach->Add(pidmassGammaOfflineSgn); | |
1749 | fOutputPIDBach->Add(pidmassGammaOfflineBkg); | |
1750 | fOutputPIDBach->Add(pidd0K0SOfflineSgn); | |
1751 | fOutputPIDBach->Add(pidd0K0SOfflineBkg); | |
1752 | fOutputPIDBach->Add(pidd0POfflineSgn); | |
1753 | fOutputPIDBach->Add(pidd0POfflineBkg); | |
1754 | fOutputPIDBach->Add(pidcosPAK0SOfflineSgn); | |
1755 | fOutputPIDBach->Add(pidcosPAK0SOfflineBkg); | |
1756 | ||
1757 | if (fTrackRotation) { | |
1758 | ||
1759 | TH2F* pidTRptK0SOfflineSgn = (TH2F*)ptK0SOfflineSgn->Clone(); | |
1760 | TH2F* pidTRptK0SOfflineBkg = (TH2F*)ptK0SOfflineBkg->Clone(); | |
1761 | TH2F* pidTRptPOfflineSgn = (TH2F*)ptPOfflineSgn->Clone(); | |
1762 | TH2F* pidTRptPOfflineBkg = (TH2F*)ptPOfflineBkg->Clone(); | |
1763 | TH2F* pidTRptPiPOfflineSgn = (TH2F*)ptPiPOfflineSgn->Clone(); | |
1764 | TH2F* pidTRptPiPOfflineBkg = (TH2F*)ptPiPOfflineBkg->Clone(); | |
1765 | TH2F* pidTRptPiMOfflineSgn = (TH2F*)ptPiMOfflineSgn->Clone(); | |
1766 | TH2F* pidTRptPiMOfflineBkg = (TH2F*)ptPiMOfflineBkg->Clone(); | |
1767 | TH2F* pidTRmassLambdaOfflineSgn = (TH2F*)massLambdaOfflineSgn->Clone(); | |
1768 | TH2F* pidTRmassLambdaOfflineBkg = (TH2F*)massLambdaOfflineBkg->Clone(); | |
1769 | TH2F* pidTRmassLambdaBarOfflineSgn = (TH2F*)massLambdaBarOfflineSgn->Clone(); | |
1770 | TH2F* pidTRmassLambdaBarOfflineBkg = (TH2F*)massLambdaBarOfflineBkg->Clone(); | |
1771 | TH2F* pidTRmassGammaOfflineSgn = (TH2F*)massGammaOfflineSgn->Clone(); | |
1772 | TH2F* pidTRmassGammaOfflineBkg = (TH2F*)massGammaOfflineBkg->Clone(); | |
1773 | TH2F* pidTRcosPAK0SOfflineSgn = (TH2F*)cosPAK0SOfflineSgn->Clone(); | |
1774 | TH2F* pidTRcosPAK0SOfflineBkg = (TH2F*)cosPAK0SOfflineBkg->Clone(); | |
1775 | fOutputPIDBachTR->Add(pidTRptK0SOfflineSgn); | |
1776 | fOutputPIDBachTR->Add(pidTRptK0SOfflineBkg); | |
1777 | fOutputPIDBachTR->Add(pidTRptPOfflineSgn); | |
1778 | fOutputPIDBachTR->Add(pidTRptPOfflineBkg); | |
1779 | fOutputPIDBachTR->Add(pidTRptPiPOfflineSgn); | |
1780 | fOutputPIDBachTR->Add(pidTRptPiPOfflineBkg); | |
1781 | fOutputPIDBachTR->Add(pidTRptPiMOfflineSgn); | |
1782 | fOutputPIDBachTR->Add(pidTRptPiMOfflineBkg); | |
1783 | fOutputPIDBachTR->Add(pidTRmassLambdaOfflineSgn); | |
1784 | fOutputPIDBachTR->Add(pidTRmassLambdaOfflineBkg); | |
1785 | fOutputPIDBachTR->Add(pidTRmassLambdaBarOfflineSgn); | |
1786 | fOutputPIDBachTR->Add(pidTRmassLambdaBarOfflineBkg); | |
1787 | fOutputPIDBachTR->Add(pidTRmassGammaOfflineSgn); | |
1788 | fOutputPIDBachTR->Add(pidTRmassGammaOfflineBkg); | |
1789 | fOutputPIDBachTR->Add(pidTRcosPAK0SOfflineSgn); | |
1790 | fOutputPIDBachTR->Add(pidTRcosPAK0SOfflineBkg); | |
1791 | ||
1792 | } | |
1793 | ||
1794 | } // useMCinfo | |
516f546e | 1795 | |
1796 | ||
1797 | if (fTrackRotation) { | |
1798 | ||
b833016c | 1799 | TH3F *phiVSthetaVSpt = new TH3F("phiVSthetaVSpt","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad()); |
1800 | TH3F *phiVSthetaVSptRot = new TH3F("phiVSthetaVSptRot","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad()); | |
1801 | TH3F *phiVSthetaVSptOffline = new TH3F("phiVSthetaVSptOffline","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad()); | |
1802 | TH3F *phiVSthetaVSptRotOffline = new TH3F("phiVSthetaVSptRotOffline","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad()); | |
1803 | fOutputPIDBachTR->Add(phiVSthetaVSpt); | |
1804 | fOutputPIDBachTR->Add(phiVSthetaVSptRot); | |
1805 | fOutputPIDBachTR->Add(phiVSthetaVSptOffline); | |
1806 | fOutputPIDBachTR->Add(phiVSthetaVSptRotOffline); | |
1807 | ||
1808 | TH1F *hNormRotated=new TH1F("hNormRotated","",fNRotations+1,-0.5,fNRotations+0.5); | |
1809 | TH1F *hNormRotatedOffline=new TH1F("hNormRotatedOffline","",fNRotations+1,-0.5,fNRotations+0.5); | |
1810 | /* | |
516f546e | 1811 | hNormRotated->Sumw2(); |
1812 | hNormRotatedOffline->Sumw2(); | |
b833016c | 1813 | |
516f546e | 1814 | hNormRotated->SetMinimum(0); |
1815 | hNormRotatedOffline->SetMinimum(0); | |
b833016c | 1816 | */ |
516f546e | 1817 | |
1818 | fOutputPIDBachTR->Add(hNormRotated); | |
1819 | fOutputPIDBachTR->Add(hNormRotatedOffline); | |
516f546e | 1820 | |
b833016c | 1821 | if (fUseMCInfo) { |
516f546e | 1822 | |
b833016c | 1823 | TH3F *phiVSthetaVSptSgn = new TH3F("phiVSthetaVSptSgn","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad()); |
1824 | TH3F *phiVSthetaVSptRotSgn = new TH3F("phiVSthetaVSptRotSgn","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad()); | |
1825 | TH3F *phiVSthetaVSptOfflineSgn = new TH3F("phiVSthetaVSptOfflineSgn","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad()); | |
1826 | TH3F *phiVSthetaVSptRotOfflineSgn = new TH3F("phiVSthetaVSptRotOfflineSgn","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad()); | |
1827 | fOutputPIDBachTR->Add(phiVSthetaVSptSgn); | |
1828 | fOutputPIDBachTR->Add(phiVSthetaVSptRotSgn); | |
1829 | fOutputPIDBachTR->Add(phiVSthetaVSptOfflineSgn); | |
1830 | fOutputPIDBachTR->Add(phiVSthetaVSptRotOfflineSgn); | |
1831 | ||
1832 | TH3F *phiVSthetaVSptBkg = new TH3F("phiVSthetaVSptBkg","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad()); | |
1833 | TH3F *phiVSthetaVSptRotBkg = new TH3F("phiVSthetaVSptRotBkg","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad()); | |
1834 | TH3F *phiVSthetaVSptOfflineBkg = new TH3F("phiVSthetaVSptOfflineBkg","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad()); | |
1835 | TH3F *phiVSthetaVSptRotOfflineBkg = new TH3F("phiVSthetaVSptRotOfflineBkg","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad()); | |
1836 | fOutputPIDBachTR->Add(phiVSthetaVSptBkg); | |
1837 | fOutputPIDBachTR->Add(phiVSthetaVSptRotBkg); | |
1838 | fOutputPIDBachTR->Add(phiVSthetaVSptOfflineBkg); | |
1839 | fOutputPIDBachTR->Add(phiVSthetaVSptRotOfflineBkg); | |
1840 | ||
1841 | TH1F *hNormRotatedSgn=new TH1F("hNormRotatedSgn","",fNRotations+1,-0.5,fNRotations+0.5); | |
1842 | TH1F *hNormRotatedOfflineSgn=new TH1F("hNormRotatedOfflineSgn","",fNRotations+1,-0.5,fNRotations+0.5); | |
1843 | TH1F *hNormRotatedBkg=new TH1F("hNormRotatedBkg","",fNRotations+1,-0.5,fNRotations+0.5); | |
1844 | TH1F *hNormRotatedOfflineBkg=new TH1F("hNormRotatedOfflineBkg","",fNRotations+1,-0.5,fNRotations+0.5); | |
1845 | /* | |
1846 | hNormRotatedSgn->Sumw2(); | |
1847 | hNormRotatedOfflineSgn->Sumw2(); | |
1848 | hNormRotatedBkg->Sumw2(); | |
1849 | hNormRotatedOfflineBkg->Sumw2(); | |
1850 | ||
1851 | hNormRotatedSgn->SetMinimum(0); | |
1852 | hNormRotatedOfflineSgn->SetMinimum(0); | |
1853 | hNormRotatedBkg->SetMinimum(0); | |
1854 | hNormRotatedOfflineBkg->SetMinimum(0); | |
1855 | */ | |
1856 | ||
1857 | fOutputPIDBachTR->Add(hNormRotatedSgn); | |
1858 | fOutputPIDBachTR->Add(hNormRotatedOfflineSgn); | |
1859 | fOutputPIDBachTR->Add(hNormRotatedBkg); | |
1860 | fOutputPIDBachTR->Add(hNormRotatedOfflineBkg); | |
1861 | ||
1862 | } | |
1863 | ||
1864 | Int_t nMassBins=fMaxMass*1000.-fMinMass*1000.; | |
1865 | Double_t maxm=fMinMass+nMassBins*0.001; | |
1866 | TH3F *hMassVsPtVsY=new TH3F("hMassVsPtVsY","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.); | |
1867 | TH3F *hMassVsPtVsYOffline=new TH3F("hMassVsPtVsYOffline","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.); | |
1868 | /* | |
516f546e | 1869 | hMassVsPtVsY->Sumw2(); |
1870 | hMassVsPtVsYOffline->Sumw2(); | |
b833016c | 1871 | |
516f546e | 1872 | hMassVsPtVsY->SetMinimum(0); |
1873 | hMassVsPtVsYOffline->SetMinimum(0); | |
b833016c | 1874 | */ |
516f546e | 1875 | |
1876 | fOutputPIDBachTR->Add(hMassVsPtVsY); | |
1877 | fOutputPIDBachTR->Add(hMassVsPtVsYOffline); | |
516f546e | 1878 | |
b833016c | 1879 | if (fUseMCInfo) { |
1880 | ||
1881 | TH3F *hMassVsPtVsYSgn=new TH3F("hMassVsPtVsYSgn","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.); | |
1882 | TH3F *hMassVsPtVsYOfflineSgn=new TH3F("hMassVsPtVsYOfflineSgn","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.); | |
1883 | TH3F *hMassVsPtVsYBkg=new TH3F("hMassVsPtVsYBkg","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.); | |
1884 | TH3F *hMassVsPtVsYOfflineBkg=new TH3F("hMassVsPtVsYOfflineBkg","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.); | |
1885 | ||
1886 | /* | |
1887 | hMassVsPtVsYSgn->Sumw2(); | |
1888 | hMassVsPtVsYOfflineSgn->Sumw2(); | |
1889 | hMassVsPtVsYBkg->Sumw2(); | |
1890 | hMassVsPtVsYOfflineBkg->Sumw2(); | |
1891 | ||
1892 | hMassVsPtVsYSgn->SetMinimum(0); | |
1893 | hMassVsPtVsYOfflineSgn->SetMinimum(0); | |
1894 | hMassVsPtVsYBkg->SetMinimum(0); | |
1895 | hMassVsPtVsYOfflineBkg->SetMinimum(0); | |
1896 | */ | |
1897 | ||
1898 | fOutputPIDBachTR->Add(hMassVsPtVsYSgn); | |
1899 | fOutputPIDBachTR->Add(hMassVsPtVsYOfflineSgn); | |
1900 | fOutputPIDBachTR->Add(hMassVsPtVsYBkg); | |
1901 | fOutputPIDBachTR->Add(hMassVsPtVsYOfflineBkg); | |
1902 | ||
1903 | } | |
1904 | ||
1905 | TH3F *hMassVsPtVsYRot=new TH3F("hMassVsPtVsYRot","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.); | |
1906 | TH3F *hMassVsPtVsYRotOffline=new TH3F("hMassVsPtVsYRotOffline","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.); | |
1907 | /* | |
516f546e | 1908 | hMassVsPtVsYRot->Sumw2(); |
1909 | hMassVsPtVsYRotOffline->Sumw2(); | |
b833016c | 1910 | |
516f546e | 1911 | hMassVsPtVsYRot->SetMinimum(0); |
1912 | hMassVsPtVsYRotOffline->SetMinimum(0); | |
b833016c | 1913 | */ |
516f546e | 1914 | |
1915 | fOutputPIDBachTR->Add(hMassVsPtVsYRot); | |
1916 | fOutputPIDBachTR->Add(hMassVsPtVsYRotOffline); | |
516f546e | 1917 | |
b833016c | 1918 | if (fUseMCInfo) { |
1919 | ||
1920 | TH3F *hMassVsPtVsYRotSgn=new TH3F("hMassVsPtVsYRotSgn","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.); | |
1921 | TH3F *hMassVsPtVsYRotOfflineSgn=new TH3F("hMassVsPtVsYRotOfflineSgn","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.); | |
1922 | TH3F *hMassVsPtVsYRotBkg=new TH3F("hMassVsPtVsYRotBkg","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.); | |
1923 | TH3F *hMassVsPtVsYRotOfflineBkg=new TH3F("hMassVsPtVsYRotOfflineBkg","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.); | |
1924 | /* | |
1925 | hMassVsPtVsYRotSgn->Sumw2(); | |
1926 | hMassVsPtVsYRotOfflineSgn->Sumw2(); | |
1927 | hMassVsPtVsYRotBkg->Sumw2(); | |
1928 | hMassVsPtVsYRotOfflineBkg->Sumw2(); | |
1929 | ||
1930 | hMassVsPtVsYRotSgn->SetMinimum(0); | |
1931 | hMassVsPtVsYRotOfflineSgn->SetMinimum(0); | |
1932 | hMassVsPtVsYRotBkg->SetMinimum(0); | |
1933 | hMassVsPtVsYRotOfflineBkg->SetMinimum(0); | |
1934 | */ | |
1935 | ||
1936 | fOutputPIDBachTR->Add(hMassVsPtVsYRotSgn); | |
1937 | fOutputPIDBachTR->Add(hMassVsPtVsYRotOfflineSgn); | |
1938 | fOutputPIDBachTR->Add(hMassVsPtVsYRotBkg); | |
1939 | fOutputPIDBachTR->Add(hMassVsPtVsYRotOfflineBkg); | |
1940 | ||
1941 | } | |
516f546e | 1942 | |
1943 | TH1F *hDeltaMass=new TH1F("hDeltaMass","",100,-0.4,0.4); | |
1944 | TH1F *hDeltaMassOffline=new TH1F("hDeltaMassOffline","",100,-0.4,0.4); | |
b833016c | 1945 | /* |
516f546e | 1946 | hDeltaMass->Sumw2(); |
1947 | hDeltaMassOffline->Sumw2(); | |
516f546e | 1948 | |
1949 | hDeltaMass->SetMinimum(0); | |
1950 | hDeltaMassOffline->SetMinimum(0); | |
b833016c | 1951 | */ |
516f546e | 1952 | |
1953 | fOutputPIDBachTR->Add(hDeltaMass); | |
1954 | fOutputPIDBachTR->Add(hDeltaMassOffline); | |
b833016c | 1955 | |
1956 | if (fUseMCInfo) { | |
1957 | ||
1958 | TH1F *hDeltaMassSgn=new TH1F("hDeltaMassSgn","",100,-0.4,0.4); | |
1959 | TH1F *hDeltaMassOfflineSgn=new TH1F("hDeltaMassOfflineSgn","",100,-0.4,0.4); | |
1960 | TH1F *hDeltaMassBkg=new TH1F("hDeltaMassBkg","",100,-0.4,0.4); | |
1961 | TH1F *hDeltaMassOfflineBkg=new TH1F("hDeltaMassOfflineBkg","",100,-0.4,0.4); | |
1962 | /* | |
1963 | hDeltaMassSgn->Sumw2(); | |
1964 | hDeltaMassOfflineSgn->Sumw2(); | |
1965 | hDeltaMassBkg->Sumw2(); | |
1966 | hDeltaMassOfflineBkg->Sumw2(); | |
1967 | ||
1968 | hDeltaMassSgn->SetMinimum(0); | |
1969 | hDeltaMassOfflineSgn->SetMinimum(0); | |
1970 | hDeltaMassBkg->SetMinimum(0); | |
1971 | hDeltaMassOfflineBkg->SetMinimum(0); | |
1972 | */ | |
1973 | ||
1974 | fOutputPIDBachTR->Add(hDeltaMassSgn); | |
1975 | fOutputPIDBachTR->Add(hDeltaMassOfflineSgn); | |
1976 | fOutputPIDBachTR->Add(hDeltaMassBkg); | |
1977 | fOutputPIDBachTR->Add(hDeltaMassOfflineBkg); | |
1978 | ||
1979 | } | |
516f546e | 1980 | |
1981 | /* | |
1982 | Int_t binSparseDMassRot[5]={nMassBins,100,24,40,20}; | |
1983 | Double_t edgeLowSparseDMassRot[5]={fMinMass,-0.4,0.,-4.,0}; | |
1984 | Double_t edgeHighSparseDMassRot[5]={maxm,0.4,12.,4.,3.14}; | |
b833016c | 1985 | THnSparse *hDeltaMassFullAnalysis=new THnSparseF("hDeltaMassFullAnalysis","hDeltaMassFullAnalysis;inv mass (GeV/c);#Delta inv mass (GeV/c); p_{T}^{#Lambda_{c}} (GeV/c); #Delta p_{T} (GeV/c); daughter angle (2prongs) (rad);",5,binSparseDMassRot,edgeLowSparseDMassRot,edgeHighSparseDMassRot); |
1986 | THnSparse *hDeltaMassFullAnalysisOffline=new THnSparseF("fDeltaMassFullAnalysisOffline","hDeltaMassFullAnalysisOffline;inv mass (GeV/c);#Delta inv mass (GeV/c); p_{T}^{#Lambda_{c}} (GeV/c); #Delta p_{T} (GeV/c); daughter angle (2prongs) (rad);",5,binSparseDMassRot,edgeLowSparseDMassRot,edgeHighSparseDMassRot); | |
516f546e | 1987 | |
1988 | fOutputPIDBachTR->Add(hDeltaMassFullAnalysis); | |
1989 | fOutputPIDBachTR->Add(hDeltaMassFullAnalysisOffline); | |
b833016c | 1990 | |
1991 | if (fUseMCInfo) { | |
1992 | ||
1993 | THnSparse *hDeltaMassFullAnalysisSgn=new THnSparseF("hDeltaMassFullAnalysisSgn","hDeltaMassFullAnalysisSgn;inv mass (GeV/c);#Delta inv mass (GeV/c); p_{T}^{#Lambda_{c}} (GeV/c); #Delta p_{T} (GeV/c); daughter angle (2prongs) (rad);",5,binSparseDMassRot,edgeLowSparseDMassRot,edgeHighSparseDMassRot); | |
1994 | THnSparse *hDeltaMassFullAnalysisOfflineSgn=new THnSparseF("fDeltaMassFullAnalysisOfflineSgn","hDeltaMassFullAnalysisOfflineSgn;inv mass (GeV/c);#Delta inv mass (GeV/c); p_{T}^{#Lambda_{c}} (GeV/c); #Delta p_{T} (GeV/c); daughter angle (2prongs) (rad);",5,binSparseDMassRot,edgeLowSparseDMassRot,edgeHighSparseDMassRot); | |
1995 | ||
1996 | THnSparse *hDeltaMassFullAnalysisBkg=new THnSparseF("hDeltaMassFullAnalysisBkg","hDeltaMassFullAnalysisBkg;inv mass (GeV/c);#Delta inv mass (GeV/c); p_{T}^{#Lambda_{c}} (GeV/c); #Delta p_{T} (GeV/c); daughter angle (2prongs) (rad);",5,binSparseDMassRot,edgeLowSparseDMassRot,edgeHighSparseDMassRot); | |
1997 | THnSparse *hDeltaMassFullAnalysisOfflineBkg=new THnSparseF("fDeltaMassFullAnalysisOfflineBkg","hDeltaMassFullAnalysisOfflineBkg;inv mass (GeV/c);#Delta inv mass (GeV/c); p_{T}^{#Lambda_{c}} (GeV/c); #Delta p_{T} (GeV/c); daughter angle (2prongs) (rad);",5,binSparseDMassRot,edgeLowSparseDMassRot,edgeHighSparseDMassRot); | |
1998 | ||
516f546e | 1999 | fOutputPIDBachTR->Add(hDeltaMassFullAnalysisSgn); |
2000 | fOutputPIDBachTR->Add(hDeltaMassFullAnalysisOfflineSgn); | |
2001 | fOutputPIDBachTR->Add(hDeltaMassFullAnalysisBkg); | |
2002 | fOutputPIDBachTR->Add(hDeltaMassFullAnalysisOfflineBkg); | |
b833016c | 2003 | |
2004 | } | |
516f546e | 2005 | */ |
b833016c | 2006 | |
43c7bace | 2007 | } |
2008 | ||
b833016c | 2009 | /* |
2010 | fOutputAll->Print(); | |
2011 | fOutputPIDBach->Print(); | |
2012 | if (fTrackRotation) fOutputPIDBachTR->Print(); | |
2013 | */ | |
43c7bace | 2014 | return; |
2015 | } | |
2016 | ||
2017 | //--------------------------- | |
2018 | void AliAnalysisTaskSELc2V0bachelor::CheckEventSelection(AliAODEvent *aodEvent) { | |
2019 | // | |
2020 | // To fill control histograms | |
2021 | // | |
2022 | ||
2023 | TClonesArray *arrayLctopKos=0; | |
14666b78 | 2024 | if (!aodEvent){ |
2025 | if(AODEvent() && IsStandardAOD()) { | |
2026 | // In case there is an AOD handler writing a standard AOD, use the AOD | |
2027 | // event in memory rather than the input (ESD) event. | |
2028 | aodEvent = dynamic_cast<AliAODEvent*> (AODEvent()); | |
2029 | // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root) | |
2030 | // have to taken from the AOD event hold by the AliAODExtension | |
2031 | AliAODHandler* aodHandler = (AliAODHandler*) | |
2032 | ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()); | |
2033 | ||
2034 | if (aodHandler->GetExtensions()) { | |
2035 | AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root"); | |
2036 | AliAODEvent *aodFromExt = ext->GetAOD(); | |
2037 | arrayLctopKos=(TClonesArray*)aodFromExt->GetList()->FindObject("CascadesHF"); | |
2038 | } | |
43c7bace | 2039 | } |
2040 | } else { | |
2041 | arrayLctopKos=(TClonesArray*)aodEvent->GetList()->FindObject("CascadesHF"); | |
2042 | } | |
2043 | ||
2044 | Float_t zVertex = fVtx1->GetZ(); | |
2045 | TString titleVtx=fVtx1->GetTitle(); | |
2046 | ||
2047 | if (TMath::Abs(fBzkG)>=0.001) { | |
2048 | ||
2049 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ2")))->Fill(zVertex); | |
2050 | ||
2051 | if (arrayLctopKos) { | |
2052 | ||
2053 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ3")))->Fill(zVertex); | |
2054 | ||
2055 | // mc analysis | |
2056 | TClonesArray *mcArray = 0; | |
2057 | AliAODMCHeader *mcHeader=0; | |
2058 | ||
2059 | if (fUseMCInfo) { | |
2060 | // MC array need for maching | |
2061 | mcArray = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName())); | |
43c7bace | 2062 | |
2063 | if (mcArray) { | |
2064 | // load MC header | |
14666b78 | 2065 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ4")))->Fill(zVertex); |
43c7bace | 2066 | mcHeader = (AliAODMCHeader*)aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName()); |
14666b78 | 2067 | |
2068 | if (mcHeader && fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ5")))->Fill(zVertex); | |
43c7bace | 2069 | |
2070 | // check on MC Lc Daughter | |
2071 | if (fAdditionalChecks) { | |
2072 | for (Int_t iii=0; iii<mcArray->GetEntries(); iii++) | |
2073 | SearchLcDaughter(mcArray,iii); | |
2074 | } | |
2075 | ||
2076 | } | |
2077 | ||
2078 | } | |
2079 | ||
2080 | if (fVtx1->GetNContributors()>0) { | |
2081 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ6")))->Fill(zVertex); | |
2082 | ||
2083 | TString firedTriggerClasses = aodEvent->GetFiredTriggerClasses(); // trigger class | |
2084 | ULong64_t fTriggerMask=AliVEvent::kAnyINT; | |
2085 | Bool_t check1 = kFALSE; | |
2086 | if ( !fUseMCInfo && // don't do for MC... | |
2087 | (aodEvent->GetRunNumber()<136851 || aodEvent->GetRunNumber()>139517) ) { // ...and for PbPb 2010 data | |
2088 | if ( !(firedTriggerClasses.Contains("CINT1")) ) { | |
2089 | AliInfo(Form(" ======================== firedTriggerClasses.Data() = %s",firedTriggerClasses.Data())); | |
2090 | fCEvents->Fill(8); | |
2091 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ8")))->Fill(zVertex); | |
2092 | check1 = kTRUE; | |
2093 | } | |
2094 | } | |
2095 | ||
2096 | Bool_t isSelectedAAA = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask); | |
2097 | if (!isSelectedAAA) { | |
2098 | fCEvents->Fill(9); | |
2099 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ9")))->Fill(zVertex); | |
2100 | } | |
2101 | ||
2102 | if (!isSelectedAAA || check1) { | |
2103 | fCEvents->Fill(16); | |
2104 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ16")))->Fill(zVertex); | |
2105 | } | |
2106 | ||
2107 | fTriggerMask=AliVEvent::kAny; | |
2108 | Bool_t isSelectedBBB = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask); | |
2109 | if (!isSelectedBBB) { | |
2110 | fCEvents->Fill(10); | |
2111 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ10")))->Fill(zVertex); | |
2112 | } | |
2113 | ||
2114 | if (titleVtx.Contains("Z")) { | |
2115 | fCEvents->Fill(11); | |
2116 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ11")))->Fill(zVertex); | |
2117 | } | |
2118 | else if (titleVtx.Contains("3D")) { | |
2119 | fCEvents->Fill(12); | |
2120 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ12")))->Fill(zVertex); | |
2121 | } else { | |
2122 | fCEvents->Fill(13); | |
2123 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ13")))->Fill(zVertex); | |
2124 | } | |
2125 | ||
2126 | if (TMath::Abs(zVertex)<=fAnalCuts->GetMaxVtxZ()) { | |
2127 | fCEvents->Fill(14); | |
2128 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ14")))->Fill(zVertex); | |
2129 | } | |
2130 | ||
2131 | if ( fIsEventSelected ) { | |
2132 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ7")))->Fill(zVertex); | |
2133 | } else { | |
2134 | fCEvents->Fill(15); | |
2135 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ15")))->Fill(zVertex); | |
2136 | } | |
2137 | ||
2138 | } // nContributors>=1 | |
2139 | } // analysisArray exists | |
2140 | } // magnetic field exists | |
2141 | ||
2142 | return; | |
2143 | } | |
2144 | ||
2145 | //----------------- | |
2146 | void AliAnalysisTaskSELc2V0bachelor::CheckEventSelectionWithCandidates(AliAODEvent *aodEvent) { | |
2147 | // | |
2148 | // To fill control histograms | |
2149 | // | |
2150 | ||
2151 | Float_t zVertex = fVtx1->GetZ(); | |
2152 | TString titleVtx=fVtx1->GetTitle(); | |
2153 | TString firedTriggerClasses = aodEvent->GetFiredTriggerClasses(); // trigger class | |
2154 | ULong64_t fTriggerMask=AliVEvent::kAnyINT; | |
2155 | ||
2156 | ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(6); | |
2157 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ6a")))->Fill(zVertex); | |
2158 | ||
2159 | Bool_t check1a = kFALSE; | |
2160 | if ( !fUseMCInfo && // don't do for MC... | |
2161 | (aodEvent->GetRunNumber()<136851 || aodEvent->GetRunNumber()>139517) ) { // ...and for PbPb 2010 data | |
2162 | if ( !(firedTriggerClasses.Contains("CINT1")) ) { | |
2163 | AliInfo(Form(" ======================== firedTriggerClasses.Data() = %s",firedTriggerClasses.Data())); | |
2164 | ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(8); | |
2165 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ8a")))->Fill(zVertex); | |
2166 | check1a = kTRUE; | |
2167 | } | |
2168 | } | |
2169 | ||
2170 | Bool_t isSelectedAAAa = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask); | |
2171 | if (!isSelectedAAAa) { | |
2172 | ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(9); | |
2173 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ9a")))->Fill(zVertex); | |
2174 | } | |
2175 | ||
2176 | if (!isSelectedAAAa || check1a) { | |
2177 | ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(16); | |
2178 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ16a")))->Fill(zVertex); | |
2179 | } | |
2180 | ||
2181 | fTriggerMask=AliVEvent::kAny; | |
2182 | Bool_t isSelectedBBBa = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask); | |
2183 | if (!isSelectedBBBa) { | |
2184 | ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(10); | |
2185 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ10a")))->Fill(zVertex); | |
2186 | } | |
2187 | ||
2188 | if (titleVtx.Contains("Z")) { | |
2189 | ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(11); | |
2190 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ11a")))->Fill(zVertex); | |
2191 | } | |
2192 | else if (titleVtx.Contains("3D")) { | |
2193 | ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(12); | |
2194 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ12a")))->Fill(zVertex); | |
2195 | } else { | |
2196 | ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(13); | |
2197 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ13a")))->Fill(zVertex); | |
2198 | } | |
2199 | ||
2200 | if (TMath::Abs(zVertex)<=fAnalCuts->GetMaxVtxZ()) { | |
2201 | ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(14); | |
2202 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ14a")))->Fill(zVertex); | |
2203 | } | |
2204 | ||
2205 | if ( fIsEventSelected ) { | |
2206 | ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(7); | |
2207 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ7a")))->Fill(zVertex); | |
2208 | } else { | |
2209 | ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(15); | |
2210 | if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ15a")))->Fill(zVertex); | |
2211 | } | |
2212 | ||
2213 | return; | |
2214 | } | |
2215 | ||
2216 | //----------------------------- | |
2217 | Int_t AliAnalysisTaskSELc2V0bachelor::MatchToMC(AliAODRecoCascadeHF *lc2bacV0, | |
2218 | Int_t *pdgDgLc2bacV0, Int_t *pdgDgV0, | |
2219 | TClonesArray *mcArray) { | |
2220 | // | |
2221 | // This is now implemented in AliAODRecoCascadeHF | |
2222 | // | |
2223 | ||
2224 | // bachelor | |
2225 | AliAODTrack *bachelor = (AliAODTrack*)lc2bacV0->GetBachelor(); | |
2226 | if (!bachelor) return -1; | |
2227 | Int_t labBachelor = TMath::Abs(bachelor->GetLabel()); | |
2228 | if (labBachelor<0) return -1; | |
2229 | AliAODMCParticle *partBachelor = (AliAODMCParticle*)mcArray->At(labBachelor); | |
2230 | if (!partBachelor) return -1; | |
2231 | if (TMath::Abs(partBachelor->GetPdgCode())!=pdgDgLc2bacV0[0]) return -1; | |
2232 | ||
2233 | Int_t labBacMother = partBachelor->GetMother(); | |
2234 | if (labBacMother<0) return -1; | |
2235 | AliAODMCParticle *partBacMother = (AliAODMCParticle*)mcArray->At(labBacMother); | |
2236 | if (!partBacMother) return -1; | |
2237 | if (TMath::Abs(partBacMother->GetPdgCode())!=4122) return -1; | |
2238 | ||
2239 | // V0 | |
2240 | AliAODTrack *posV0Daugh = (AliAODTrack*)lc2bacV0->Getv0PositiveTrack(); | |
2241 | AliAODTrack *negV0Daugh = (AliAODTrack*)lc2bacV0->Getv0NegativeTrack(); | |
2242 | if (!posV0Daugh || !negV0Daugh) return -1; | |
2243 | ||
2244 | Int_t labV0pos = TMath::Abs(posV0Daugh->GetLabel()); | |
2245 | Int_t labV0neg = TMath::Abs(negV0Daugh->GetLabel()); | |
992ba7d8 | 2246 | if (labV0pos<0 || labV0neg<0) return -1; |
85036182 | 2247 | |
992ba7d8 | 2248 | AliAODMCParticle *partV0pos = (AliAODMCParticle*)mcArray->At(labV0neg); |
2249 | AliAODMCParticle *partV0neg = (AliAODMCParticle*)mcArray->At(labV0pos); | |
85036182 | 2250 | if (!partV0pos || !partV0neg) return -1; |
992ba7d8 | 2251 | |
2252 | if ( ! ( (TMath::Abs(partV0pos->GetPdgCode())==pdgDgV0[0] && | |
2253 | TMath::Abs(partV0neg->GetPdgCode())==pdgDgV0[1]) || | |
2254 | (TMath::Abs(partV0pos->GetPdgCode())==pdgDgV0[1] && | |
2255 | TMath::Abs(partV0neg->GetPdgCode())==pdgDgV0[0]) ) ) return -1; | |
2256 | Int_t labV0posMother = partV0pos->GetMother(); | |
2257 | Int_t labV0negMother = partV0neg->GetMother(); | |
2258 | ||
2259 | if (labV0posMother<0 || labV0negMother<0) return -1; | |
2260 | if (labV0posMother!=labV0negMother) return -1; | |
2261 | ||
2262 | AliAODMCParticle *motherV0 = (AliAODMCParticle*)mcArray->At(labV0posMother); | |
85036182 | 2263 | if (!motherV0) return-1; |
992ba7d8 | 2264 | |
2265 | if (TMath::Abs(motherV0->GetPdgCode())!=pdgDgLc2bacV0[1]) return -1; | |
2266 | Int_t labV0mother = motherV0->GetMother(); | |
2267 | if (labV0mother<0) return -1; | |
2268 | AliAODMCParticle *gMotherV0 = (AliAODMCParticle*)mcArray->At(labV0mother); | |
85036182 | 2269 | if (!gMotherV0) return-1; |
992ba7d8 | 2270 | |
2271 | if ( !(pdgDgLc2bacV0[1]==310 && TMath::Abs(gMotherV0->GetPdgCode())==311) && | |
2272 | !(pdgDgLc2bacV0[1]==3122 && TMath::Abs(motherV0->GetPdgCode())==3122) ) return -1; | |
2273 | ||
2274 | if ( (pdgDgLc2bacV0[1]==310 && TMath::Abs(gMotherV0->GetPdgCode())==311) ) { | |
2275 | Int_t labV0GMother = gMotherV0->GetMother(); | |
2276 | if (labV0GMother<0) return -1; | |
2277 | AliAODMCParticle *ggMotherV0 = (AliAODMCParticle*)mcArray->At(labV0GMother); | |
85036182 | 2278 | if (!ggMotherV0) return-1; |
992ba7d8 | 2279 | |
2280 | if (TMath::Abs(ggMotherV0->GetPdgCode())!=4122) return -1; | |
2281 | gMotherV0 = (AliAODMCParticle*)ggMotherV0; | |
2282 | labV0mother=labV0GMother; | |
2283 | } | |
2284 | else if (pdgDgLc2bacV0[1]==3122 && TMath::Abs(motherV0->GetPdgCode())==3122) { | |
2285 | if (TMath::Abs(gMotherV0->GetPdgCode())!=4122) return -1; | |
2286 | } | |
2287 | ||
2288 | if (labBacMother!=labV0mother) { | |
992ba7d8 | 2289 | return -1; |
2290 | } | |
2291 | ||
43c7bace | 2292 | return labBacMother; |
992ba7d8 | 2293 | |
2294 | } | |
2295 | ||
ff12b981 | 2296 | //________________________________________________________________ |
43c7bace | 2297 | Int_t AliAnalysisTaskSELc2V0bachelor::SearchLcDaughter(TClonesArray *arrayMC, Int_t iii) { |
2298 | // | |
2299 | // This is to check Lc dinasty | |
2300 | // | |
ff12b981 | 2301 | |
2302 | Int_t indexToBeReturned=-999; | |
2303 | ||
2304 | Int_t pdgLc=4122; | |
2305 | Int_t pdgLambda=3122; | |
2306 | Int_t pdgV0=310; | |
2307 | Int_t pdgK0=311; | |
2308 | Int_t pdgBachelor=2212; | |
2309 | Int_t pdgBachelorPi=211; | |
992ba7d8 | 2310 | |
2311 | TString fillthis=""; | |
2312 | fillthis="histMcStatLc"; | |
2313 | ||
ff12b981 | 2314 | AliAODMCParticle *searchLc = dynamic_cast<AliAODMCParticle*>(arrayMC->At(iii)); |
4184976e | 2315 | if(!searchLc) return -999; |
ff12b981 | 2316 | if (TMath::Abs(searchLc->GetPdgCode()) != pdgLc) return -999; |
2317 | ||
2318 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(0); | |
2319 | indexToBeReturned = 0; | |
2320 | ||
2321 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*1); | |
2322 | indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*1; | |
2323 | ||
2324 | Int_t nDaughLc = searchLc->GetNDaughters(); | |
2325 | if (nDaughLc!=2) { | |
2326 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*10); | |
2327 | indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*10; | |
2328 | return indexToBeReturned; | |
2329 | } | |
2330 | ||
2331 | Int_t index1=searchLc->GetDaughter(0); | |
2332 | Int_t index2=searchLc->GetDaughter(1); | |
2333 | if (index1<=0 || index2<=0) { | |
2334 | return -999; | |
2335 | } | |
2336 | ||
2337 | AliAODMCParticle *daugh1 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index1)); | |
2338 | AliAODMCParticle *daugh2 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index2)); | |
2339 | if (!daugh1 || !daugh2) return -999; | |
2340 | ||
2341 | Int_t daughPdg1 = TMath::Abs(daugh1->GetPdgCode()); | |
2342 | Int_t daughPdg2 = TMath::Abs(daugh2->GetPdgCode()); | |
2343 | if ( !( (daughPdg1==pdgBachelor && daughPdg2==pdgK0) || | |
2344 | (daughPdg2==pdgBachelor && daughPdg1==pdgK0) || | |
2345 | (daughPdg1==pdgLambda && daughPdg2==pdgBachelorPi) || | |
2346 | (daughPdg2==pdgLambda && daughPdg1==pdgBachelorPi) ) ) { | |
2347 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*10); | |
2348 | indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*10; | |
2349 | return indexToBeReturned; | |
2350 | } | |
2351 | ||
2352 | if (daughPdg1==pdgK0 || daughPdg1==pdgLambda) { | |
2353 | index1=searchLc->GetDaughter(1); | |
2354 | index2=searchLc->GetDaughter(0); | |
2355 | } | |
2356 | daugh1 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index1)); | |
2357 | daugh2 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index2)); | |
4184976e | 2358 | if (!daugh1 || !daugh2) return -999; |
2359 | ||
ff12b981 | 2360 | daughPdg1=TMath::Abs(daugh1->GetPdgCode()); |
2361 | daughPdg2=TMath::Abs(daugh2->GetPdgCode()); | |
2362 | ||
2363 | if ( daughPdg1==pdgBachelor && daughPdg2==pdgK0 ) { // Lc+ -> p K0bar | |
2364 | ||
2365 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*2); | |
2366 | indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*2; | |
2367 | ||
2368 | Int_t nDaughK0 = daugh2->GetNDaughters(); | |
2369 | if (nDaughK0!=1) return -999; | |
2370 | ||
2371 | Int_t indexK0daugh=daugh2->GetDaughter(0); | |
2372 | if (indexK0daugh<=0) return -999; | |
2373 | ||
2374 | AliAODMCParticle *daughK0 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(indexK0daugh)); | |
2375 | if (!daughK0) return -999; | |
2376 | ||
2377 | Int_t daughK0Pdg=TMath::Abs(daughK0->GetPdgCode()); | |
2378 | if (daughK0Pdg!=pdgV0) { | |
2379 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*4); // K0L | |
2380 | indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*4; | |
2381 | return indexToBeReturned; | |
2382 | } | |
2383 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*3); // K0S | |
2384 | indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*3; | |
2385 | ||
2386 | Int_t nDaughK0S = daughK0->GetNDaughters(); | |
2387 | if (nDaughK0S!=2) { | |
2388 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*5); // other decays for K0S | |
2389 | indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*5; | |
2390 | return indexToBeReturned; | |
2391 | } | |
2392 | ||
2393 | index1=daughK0->GetDaughter(0); | |
2394 | index2=daughK0->GetDaughter(1); | |
2395 | if(index1<=0 || index2<=0) { | |
2396 | return -999; | |
2397 | } | |
2398 | ||
43c7bace | 2399 | AliAODMCParticle *daughK0S1 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index1)); |
2400 | AliAODMCParticle *daughK0S2 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index2)); | |
2401 | if (!daughK0S1 || !daughK0S2) return -999; | |
ff12b981 | 2402 | |
43c7bace | 2403 | Int_t daughK0S1pdg=TMath::Abs(daughK0S1->GetPdgCode()); |
2404 | Int_t daughK0S2pdg=TMath::Abs(daughK0S2->GetPdgCode()); | |
ff12b981 | 2405 | |
43c7bace | 2406 | if ( daughK0S1pdg==211 && daughK0S2pdg==211 ) { |
ff12b981 | 2407 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*6); // K0S -> pi+ pi- |
2408 | indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*6; | |
2409 | } else { | |
2410 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*5); // other decays for K0S | |
43c7bace | 2411 | indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*5; |
ff12b981 | 2412 | } |
2413 | ||
2414 | } //if (daughPdg1==pdgBachelor && daughPdg2==pdgK0) | |
2415 | else if ( daughPdg1==pdgBachelorPi && daughPdg2==pdgLambda ) { // Lc+ -> pi+ Lambda | |
2416 | ||
2417 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*7); | |
2418 | indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*7; | |
992ba7d8 | 2419 | |
ff12b981 | 2420 | Int_t nDaughL = daugh2->GetNDaughters(); |
2421 | if (nDaughL!=2) { | |
2422 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*8); | |
2423 | indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*8; | |
2424 | return indexToBeReturned; | |
2425 | } | |
2426 | ||
2427 | index1=daugh2->GetDaughter(0); | |
2428 | index2=daugh2->GetDaughter(1); | |
2429 | if(index1<=0 || index2<=0) { | |
2430 | return -999; | |
2431 | } | |
2432 | ||
2433 | AliAODMCParticle *daughL1 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index1)); | |
2434 | AliAODMCParticle *daughL2 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index2)); | |
2435 | if (!daughL1 || !daughL2) return -999; | |
2436 | ||
2437 | Int_t daughL1pdg=TMath::Abs(daughL1->GetPdgCode()); | |
2438 | Int_t daughL2pdg=TMath::Abs(daughL2->GetPdgCode()); | |
2439 | if ( (daughL1pdg==211 && daughL2pdg==2212) || | |
2440 | (daughL2pdg==211 && daughL1pdg==2212) ) { | |
2441 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*9); | |
2442 | indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*9; | |
2443 | } else { | |
2444 | ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*8); | |
2445 | indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*8; | |
2446 | } | |
2447 | ||
2448 | } //else if (daughPdg1==pdgBachelorPi && daughPdg2==pdgLambda) | |
2449 | ||
2450 | return indexToBeReturned; | |
ff12b981 | 2451 | } |
43c7bace | 2452 | |
ff12b981 | 2453 | //________________________________________________________________ |
b833016c | 2454 | void AliAnalysisTaskSELc2V0bachelor::FillArmPodDistribution(AliAODRecoDecay *vZero, |
43c7bace | 2455 | TString histoTitle, |
b833016c | 2456 | Bool_t isCandidateSelectedCuts, |
2457 | Bool_t isBachelorID) { | |
43c7bace | 2458 | // |
2459 | // This is to fill Armenteros Podolanski plots | |
2460 | // | |
992ba7d8 | 2461 | |
b833016c | 2462 | Double_t alpha = vZero->Alpha();//AlphaV0(); |
2463 | Double_t qT = vZero->QtProng();//PtArmV0(); | |
992ba7d8 | 2464 | |
b833016c | 2465 | ((TH2F*)(fOutputAll->FindObject(histoTitle+"0")))->Fill(alpha,qT); |
2466 | if (isCandidateSelectedCuts) { | |
2467 | ((TH2F*)(fOutputAll->FindObject(histoTitle)))->Fill(alpha,qT); | |
2468 | if (isBachelorID) | |
2469 | ((TH2F*)(fOutputPIDBach->FindObject(histoTitle)))->Fill(alpha,qT); | |
2470 | } | |
992ba7d8 | 2471 | |
2472 | } | |
992ba7d8 | 2473 | |
43c7bace | 2474 | //------------------------------------------------------------------------------- |
2475 | void AliAnalysisTaskSELc2V0bachelor::CheckCandidatesAtDifferentLevels(AliAODRecoCascadeHF *part, AliRDHFCutsLctoV0* cutsAnal) { | |
2476 | // | |
2477 | // This is to check candidates at different levels | |
2478 | // | |
992ba7d8 | 2479 | |
43c7bace | 2480 | Bool_t areCutsUsingPID = cutsAnal->GetIsUsePID(); |
992ba7d8 | 2481 | |
43c7bace | 2482 | AliAODv0 * v0part = (AliAODv0*)part->Getv0(); |
2483 | Bool_t onFlyV0 = v0part->GetOnFlyStatus(); // on-the-flight V0s | |
0dbd1d4f | 2484 | |
43c7bace | 2485 | AliAODTrack *bachelor = (AliAODTrack*)part->GetBachelor(); |
0dbd1d4f | 2486 | |
43c7bace | 2487 | if ( !onFlyV0 ) |
2488 | ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(3); // it counts number of candidates coming from offline V0s | |
a578b2da | 2489 | |
43c7bace | 2490 | if ( cutsAnal->IsInFiducialAcceptance(part->Pt(),part->Y(4122)) ) |
2491 | ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(4); | |
2492 | if ( (((cutsAnal->IsSelected(part,AliRDHFCuts::kTracks))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)) ) | |
2493 | ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(5); | |
2494 | cutsAnal->SetUsePID(kFALSE); | |
2495 | if ( (((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)) ) | |
2496 | ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(6); | |
2497 | cutsAnal->SetUsePID(areCutsUsingPID); | |
2498 | if ( (((cutsAnal->IsSelected(part,AliRDHFCuts::kPID))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)) ) | |
2499 | ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(7); | |
2500 | if ( (((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)) ) | |
2501 | ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(8); | |
2502 | if ( (((cutsAnal->IsSelected(part,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)) ) | |
2503 | ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(9); | |
a578b2da | 2504 | |
43c7bace | 2505 | if ( cutsAnal->IsInFiducialAcceptance(part->Pt(),part->Y(4122)) ) { |
0dbd1d4f | 2506 | |
43c7bace | 2507 | if ( ( (cutsAnal->IsSelected(part,AliRDHFCuts::kTracks))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { |
a578b2da | 2508 | |
43c7bace | 2509 | Int_t aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kTracks); |
2510 | if ( (aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr ) { | |
2511 | if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()==-1) || | |
2512 | ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()==+1) ) | |
2513 | ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates1")))->Fill( -aaa ); | |
2514 | else | |
2515 | ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates1")))->Fill( aaa ); | |
2516 | } | |
0dbd1d4f | 2517 | |
43c7bace | 2518 | cutsAnal->SetUsePID(kFALSE); |
2519 | aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate); | |
2520 | if ((aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr) { | |
2521 | if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()==-1) || | |
2522 | ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()==+1) ) | |
2523 | ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates2")))->Fill( -aaa ); | |
2524 | else | |
2525 | ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates2")))->Fill( aaa ); | |
2526 | } | |
2527 | cutsAnal->SetUsePID(areCutsUsingPID); | |
2528 | ||
2529 | aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kPID); | |
2530 | if ((aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr) { | |
2531 | if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()==-1) || | |
2532 | ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()==+1) ) | |
2533 | ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates3")))->Fill( -aaa ); | |
2534 | else | |
2535 | ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates3")))->Fill( aaa ); | |
2536 | } | |
0dbd1d4f | 2537 | |
43c7bace | 2538 | aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kAll); |
2539 | if ((aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr) { | |
2540 | if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()==-1) || | |
2541 | ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()==+1) ) | |
2542 | ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates4")))->Fill( -aaa ); | |
2543 | else | |
2544 | ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates4")))->Fill( aaa ); | |
2545 | } | |
0dbd1d4f | 2546 | |
43c7bace | 2547 | } |
2548 | } | |
0dbd1d4f | 2549 | |
43c7bace | 2550 | return; |
2551 | } | |
0dbd1d4f | 2552 | |
43c7bace | 2553 | //------------------------------------------------------------------------------- |
2554 | void AliAnalysisTaskSELc2V0bachelor::FillTheTree(AliAODRecoCascadeHF *part, AliRDHFCutsLctoV0 *cutsAnal, TClonesArray *mcArray, Int_t isLc) { | |
2555 | // | |
2556 | // This is to fill tree | |
2557 | // | |
992ba7d8 | 2558 | |
43c7bace | 2559 | Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass(); |
2560 | Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass(); | |
992ba7d8 | 2561 | |
43c7bace | 2562 | Double_t invmassLc = part->InvMassLctoK0sP(); |
2563 | Double_t invmassLc2Lpi = part->InvMassLctoLambdaPi(); | |
992ba7d8 | 2564 | |
43c7bace | 2565 | AliAODTrack *bachelor = (AliAODTrack*)part->GetBachelor(); |
992ba7d8 | 2566 | |
43c7bace | 2567 | AliAODv0 * v0part = (AliAODv0*)part->Getv0(); |
2568 | Double_t dcaV0ptp = v0part->GetDCA(); | |
2569 | Double_t invmassK0S = v0part->MassK0Short(); | |
2570 | Double_t invmassLambda = v0part->MassLambda(); | |
2571 | Double_t invmassLambdaBar = v0part->MassAntiLambda(); | |
0dbd1d4f | 2572 | |
43c7bace | 2573 | Int_t isLc2LBarpi=0, isLc2Lpi=0; |
2574 | Int_t mcLabel = -1; | |
2575 | Int_t isDp2K0Spi=0, isDs2K0SK=0; | |
2576 | Int_t mcLabel2 = -1; | |
2577 | Int_t mcLabel3 = -1; | |
14fe9f43 | 2578 | Int_t isKstar12K0Spi=0, isKstar22K0Spi=0; |
2579 | Int_t mcLabel4 = -1; | |
2580 | Int_t mcLabel5 = -1; | |
53c91ed7 | 2581 | Double_t ptCandByMC = 0.;//fmcPartCandidate->Pt(); |
b833016c | 2582 | Double_t yCandByMC = 0.;//fmcPartCandidate->Y(); |
43c7bace | 2583 | if (fUseMCInfo) { |
53c91ed7 | 2584 | if (isLc) { |
2585 | Int_t pdgCand0 = 4122; | |
2586 | Int_t pdgDgLctoV0bachelor0[2]={2212,310}; | |
2587 | Int_t pdgDgV0toDaughters0[2]={211,211}; | |
2588 | Int_t mcLabelLc2pK0S = part->MatchToMC(pdgCand0,pdgDgLctoV0bachelor0[1],pdgDgLctoV0bachelor0,pdgDgV0toDaughters0,mcArray,kTRUE); | |
2589 | AliAODMCParticle *lambdaCpartMC = (AliAODMCParticle*)mcArray->At(mcLabelLc2pK0S); | |
2590 | if (lambdaCpartMC) { | |
2591 | ptCandByMC = lambdaCpartMC->Pt(); | |
b833016c | 2592 | yCandByMC = lambdaCpartMC->Y(); |
53c91ed7 | 2593 | } |
2594 | } | |
2595 | ||
43c7bace | 2596 | Int_t pdgCand = 4122; |
2597 | Int_t pdgDgLctoV0bachelor[2]={211,3122}; | |
2598 | Int_t pdgDgV0toDaughters[2]={2212,211}; | |
2599 | mcLabel = part->MatchToMC(pdgCand,pdgDgLctoV0bachelor[1],pdgDgLctoV0bachelor,pdgDgV0toDaughters,mcArray,kTRUE); | |
2600 | if (mcLabel!=-1) { | |
2601 | if (bachelor->Charge()==-1) isLc2LBarpi=1; | |
2602 | if (bachelor->Charge()==+1) isLc2Lpi=1; | |
53c91ed7 | 2603 | AliAODMCParticle *lambdaCpartMC = (AliAODMCParticle*)mcArray->At(mcLabel); |
2604 | if (lambdaCpartMC) { | |
2605 | ptCandByMC = lambdaCpartMC->Pt(); | |
b833016c | 2606 | yCandByMC = lambdaCpartMC->Y(); |
53c91ed7 | 2607 | } |
43c7bace | 2608 | } |
0dbd1d4f | 2609 | |
43c7bace | 2610 | Int_t pdgCand2 = 411; // D+ -> pi+ K0S |
2611 | Int_t pdgCand3 = 431; // Ds+ -> K+ K0S | |
2612 | Int_t pdgDgCand2[2]={211,310}; | |
2613 | Int_t pdgDgCand3[2]={321,310}; | |
2614 | pdgDgV0toDaughters[0]=211; | |
2615 | pdgDgV0toDaughters[1]=211; | |
2616 | mcLabel2 = part->MatchToMC(pdgCand2,pdgDgCand2[1],pdgDgCand2,pdgDgV0toDaughters,mcArray,kTRUE); | |
2617 | mcLabel3 = part->MatchToMC(pdgCand3,pdgDgCand3[1],pdgDgCand3,pdgDgV0toDaughters,mcArray,kTRUE); | |
53c91ed7 | 2618 | if (mcLabel2!=-1) { |
2619 | isDp2K0Spi=1; | |
2620 | AliAODMCParticle *lambdaCpartMC = (AliAODMCParticle*)mcArray->At(mcLabel2); | |
2621 | if (lambdaCpartMC) { | |
2622 | ptCandByMC = lambdaCpartMC->Pt(); | |
b833016c | 2623 | yCandByMC = lambdaCpartMC->Y(); |
53c91ed7 | 2624 | } |
2625 | } | |
2626 | if (mcLabel3!=-1) { | |
2627 | isDs2K0SK=1; | |
2628 | AliAODMCParticle *lambdaCpartMC = (AliAODMCParticle*)mcArray->At(mcLabel3); | |
2629 | if (lambdaCpartMC) { | |
2630 | ptCandByMC = lambdaCpartMC->Pt(); | |
b833016c | 2631 | yCandByMC = lambdaCpartMC->Y(); |
53c91ed7 | 2632 | } |
2633 | } | |
14fe9f43 | 2634 | |
2635 | Int_t pdgCand4 = 313; // K*(892)+ -> pi+ K0S | |
2636 | Int_t pdgCand5 = 325; // K*(1430)+ -> pi+ K0S | |
2637 | Int_t pdgDgCand4[2]={211,310}; | |
2638 | Int_t pdgDgCand5[2]={211,310}; | |
2639 | pdgDgV0toDaughters[0]=211; | |
2640 | pdgDgV0toDaughters[1]=211; | |
2641 | mcLabel4 = part->MatchToMC(pdgCand4,pdgDgCand4[1],pdgDgCand4,pdgDgV0toDaughters,mcArray,kTRUE); | |
2642 | mcLabel5 = part->MatchToMC(pdgCand5,pdgDgCand5[1],pdgDgCand5,pdgDgV0toDaughters,mcArray,kTRUE); | |
2643 | if (mcLabel4!=-1) { | |
2644 | isKstar12K0Spi=1; | |
2645 | AliAODMCParticle *lambdaCpartMC = (AliAODMCParticle*)mcArray->At(mcLabel4); | |
2646 | if (lambdaCpartMC) { | |
2647 | ptCandByMC = lambdaCpartMC->Pt(); | |
b833016c | 2648 | yCandByMC = lambdaCpartMC->Y(); |
14fe9f43 | 2649 | } |
2650 | } | |
2651 | if (mcLabel5!=-1) { | |
2652 | isKstar22K0Spi=1; | |
2653 | AliAODMCParticle *lambdaCpartMC = (AliAODMCParticle*)mcArray->At(mcLabel5); | |
2654 | if (lambdaCpartMC) { | |
2655 | ptCandByMC = lambdaCpartMC->Pt(); | |
b833016c | 2656 | yCandByMC = lambdaCpartMC->Y(); |
14fe9f43 | 2657 | } |
2658 | } | |
43c7bace | 2659 | } |
992ba7d8 | 2660 | |
14fe9f43 | 2661 | Int_t isLcByMC = isLc+isLc2LBarpi*2+isLc2Lpi*4+isDp2K0Spi*8+isDs2K0SK*16+isKstar12K0Spi*32+isKstar22K0Spi*64; |
a578b2da | 2662 | |
53c91ed7 | 2663 | Bool_t isMCparticleInFiducialAcceptance = kTRUE; |
14fe9f43 | 2664 | if (isLc || isLc2LBarpi || isLc2Lpi || isDp2K0Spi || isDs2K0SK || isKstar12K0Spi || isKstar22K0Spi) { |
53c91ed7 | 2665 | isMCparticleInFiducialAcceptance = cutsAnal->IsInFiducialAcceptance(ptCandByMC,yCandByMC); |
2666 | } | |
2667 | ||
43c7bace | 2668 | Int_t isK0S = 0; |
2669 | Int_t isLambda = 0; | |
2670 | Int_t isLambdaBar = 0; | |
2671 | Int_t isGamma = 0; | |
2672 | if (fUseMCInfo) { | |
2673 | Int_t pdgDg2prong[2] = {211, 211}; | |
2674 | Int_t labelK0S = v0part->MatchToMC(310,mcArray,2,pdgDg2prong); | |
2675 | if (labelK0S>=0) isK0S = 1; | |
992ba7d8 | 2676 | |
43c7bace | 2677 | pdgDg2prong[0] = 211; |
2678 | pdgDg2prong[1] = 2212; | |
2679 | Int_t lambdaLabel = v0part->MatchToMC(3122,mcArray,2,pdgDg2prong); | |
2680 | if (lambdaLabel>=0) { | |
2681 | AliAODMCParticle *lambdaTrack = (AliAODMCParticle*)mcArray->At(lambdaLabel); | |
2682 | if (lambdaTrack->GetPdgCode()==3122) isLambda = 1; | |
2683 | else if (lambdaTrack->GetPdgCode()==-3122) isLambdaBar = 1; | |
2684 | } | |
992ba7d8 | 2685 | |
43c7bace | 2686 | pdgDg2prong[0] = 11; |
2687 | pdgDg2prong[1] = 11; | |
2688 | Int_t gammaLabel = v0part->MatchToMC(22,mcArray,2,pdgDg2prong); | |
2689 | if (gammaLabel>=0) { | |
2690 | AliAODMCParticle *gammaTrack = (AliAODMCParticle*)mcArray->At(gammaLabel); | |
2691 | if (gammaTrack->GetPdgCode()==22) isGamma = 1; | |
2692 | } | |
2693 | } | |
992ba7d8 | 2694 | |
43c7bace | 2695 | Int_t isV0ByMC = isK0S+isLambdaBar*2+isLambda*4+isGamma*8; |
992ba7d8 | 2696 | |
43c7bace | 2697 | Int_t isBachelorSelected = (bachelor->TestFilterMask(BIT(4)))*1 + (!(bachelor->TestFilterMask(BIT(4))))*2; |
2698 | isBachelorSelected += (bachelor->GetLabel()<0)*4 + (bachelor->GetLabel()>=0)*8; | |
2699 | if ( ( !(bachelor->HasPointOnITSLayer(0)) && !(bachelor->HasPointOnITSLayer(1)) ) ) | |
2700 | isBachelorSelected += 16; | |
2701 | else { | |
2702 | if ( bachelor->HasPointOnITSLayer(0) && !(bachelor->HasPointOnITSLayer(1)) ) | |
2703 | isBachelorSelected += 32; | |
2704 | else if ( !(bachelor->HasPointOnITSLayer(0)) && bachelor->HasPointOnITSLayer(1) ) | |
2705 | isBachelorSelected += 64; | |
2706 | else | |
2707 | isBachelorSelected += 128; | |
2708 | } | |
992ba7d8 | 2709 | |
43c7bace | 2710 | AliAODTrack *v0pos = (AliAODTrack*)part->Getv0PositiveTrack(); |
b833016c | 2711 | AliAODTrack *v0neg = (AliAODTrack*)part->Getv0NegativeTrack(); |
992ba7d8 | 2712 | |
43c7bace | 2713 | Int_t areV0daughtersSelected = (v0pos->TestFilterMask(BIT(4)))*1 + (!(v0pos->TestFilterMask(BIT(4))))*2; |
2714 | areV0daughtersSelected += (v0pos->GetLabel()<0)*4 + (v0pos->GetLabel()>=0)*8; | |
2715 | areV0daughtersSelected += (v0neg->TestFilterMask(BIT(4)))*16 + (!(v0neg->TestFilterMask(BIT(4))))*32; | |
2716 | areV0daughtersSelected += (v0neg->GetLabel()<0)*64 + (v0neg->GetLabel()>=0)*128; | |
992ba7d8 | 2717 | |
43c7bace | 2718 | Double_t nSigmaITSpr=-999.; |
2719 | cutsAnal->GetPidHF()->GetnSigmaITS(bachelor,4,nSigmaITSpr); | |
2720 | Double_t nSigmaTPCpr=-999.; | |
2721 | cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,4,nSigmaTPCpr); | |
2722 | Double_t nSigmaTOFpr=-999.; | |
2723 | cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,4,nSigmaTOFpr); | |
2724 | ||
2725 | Double_t nSigmaITSpi=-999.; | |
2726 | cutsAnal->GetPidHF()->GetnSigmaITS(bachelor,2,nSigmaITSpi); | |
2727 | Double_t nSigmaTPCpi=-999.; | |
2728 | cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,2,nSigmaTPCpi); | |
2729 | Double_t nSigmaTOFpi=-999.; | |
2730 | cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,2,nSigmaTOFpi); | |
2731 | ||
2732 | Double_t nSigmaITSka=-999.; | |
2733 | cutsAnal->GetPidHF()->GetnSigmaITS(bachelor,3,nSigmaITSka); | |
2734 | Double_t nSigmaTPCka=-999.; | |
2735 | cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,3,nSigmaTPCka); | |
2736 | Double_t nSigmaTOFka=-999.; | |
2737 | cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,3,nSigmaTOFka); | |
992ba7d8 | 2738 | |
43c7bace | 2739 | |
2740 | Int_t flagToCheckCandidate = 1*(TMath::Abs(invmassK0S-mk0sPDG)<=0.050); | |
2741 | flagToCheckCandidate+=2*((TMath::Abs(invmassLambdaBar-mLPDG)<=0.050) && (bachelor->Charge()==-1)); | |
2742 | flagToCheckCandidate+=4*((TMath::Abs(invmassLambda-mLPDG)<=0.050) && (bachelor->Charge()==+1)); | |
2743 | flagToCheckCandidate+=8*((TMath::Abs(invmassLambdaBar-mLPDG)<=0.050) && (bachelor->Charge()==+1)); | |
2744 | flagToCheckCandidate+=16*((TMath::Abs(invmassLambda-mLPDG)<=0.050) && (bachelor->Charge()==-1)); | |
992ba7d8 | 2745 | |
a578b2da | 2746 | /* |
43c7bace | 2747 | Bool_t areCutsUsingPID = cutsAnal->GetIsUsePID(); |
2748 | cutsAnal->SetUsePID(kFALSE); | |
2749 | Int_t aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate); | |
2750 | if ( (aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr ) { | |
2751 | if ( aaa==AliRDHFCutsLctoV0::kLcToK0Spr ) { | |
2752 | flagToCheckCandidate = aaa; // Lc->K0S+p OK | |
2753 | } else { | |
2754 | if ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi ) { | |
2755 | if (bachelor->Charge()==+1) | |
2756 | flagToCheckCandidate = aaa; // Lc->Lambda+pi+ | |
2757 | else if (bachelor->Charge()==-1) | |
2758 | flagToCheckCandidate =-aaa; // Lambda+pi- AS Lc->K0S+p candidate | |
2759 | } | |
2760 | if ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi ) { | |
2761 | if (bachelor->Charge()==-1) | |
2762 | flagToCheckCandidate = aaa; // Lc->LambdaBar+pi- | |
2763 | else if (bachelor->Charge()==+1) | |
2764 | flagToCheckCandidate =-aaa; // LambdaBar+pi+ AS Lc->K0S+p candidate | |
2765 | } | |
2766 | } | |
2767 | } else { | |
2768 | //if ( aaa==AliRDHFCutsLctoV0::kLcToK0Spr ) { | |
2769 | //flagToCheckCandidate = -10-(AliRDHFCutsLctoV0::kLcToK0Spr); // NEVER | |
2770 | //} else { | |
2771 | if ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi ) { | |
2772 | if (bachelor->Charge()==+1) | |
2773 | flagToCheckCandidate = aaa; // Lc->Lambda+pi+ OK | |
2774 | else if (bachelor->Charge()==-1) | |
2775 | flagToCheckCandidate =-aaa; // Lambda+pi- AS Lc->Lambda+pi+ candidate | |
2776 | } | |
2777 | if ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi ) { | |
2778 | if (bachelor->Charge()==-1) | |
2779 | flagToCheckCandidate = aaa; // Lc->LambdaBar+pi- OK | |
2780 | else if (bachelor->Charge()==+1) | |
2781 | flagToCheckCandidate =-aaa; // LambdaBar+pi+ AS Lc->LambdaBar+pi- candidate | |
2782 | } | |
2783 | //} | |
2784 | } | |
2785 | cutsAnal->SetUsePID(areCutsUsingPID); | |
a578b2da | 2786 | */ |
992ba7d8 | 2787 | |
516f546e | 2788 | fCandidateVariables[ 0] = fUseMCInfo+isLcByMC; // 0: real data; 1: bkg; 2: Lc->K0S+p; 3: Lc->LambdaBar+pbar; 5: Lc->Lambda+p; 9: D+->K0S+pi; 17: Ds+->K0S+K; 33: K*+->K0S+pi; 65: K*+->K0S+K |
43c7bace | 2789 | fCandidateVariables[ 1] = fUseMCInfo+isV0ByMC; // 0: real data; 1: bkg; 2: K0S->pi+pi; 3: LambdaBar->pbar+pi+; 5: Lambda->p+pi- |
2790 | fCandidateVariables[ 2] = isBachelorSelected; | |
2791 | fCandidateVariables[ 3] = areV0daughtersSelected; | |
2792 | fCandidateVariables[ 4] = flagToCheckCandidate; | |
2793 | fCandidateVariables[ 5] = invmassLc; | |
2794 | fCandidateVariables[ 6] = invmassLc2Lpi; | |
2795 | fCandidateVariables[ 7] = part->InvMass2Prongs(0,1,211,310); // D+ -> pi+ K0S | |
2796 | fCandidateVariables[ 8] = part->InvMass2Prongs(0,1,321,310); // D+S -> K+ K0S | |
2797 | fCandidateVariables[ 9] = invmassK0S; | |
2798 | fCandidateVariables[10] = invmassLambda; | |
2799 | fCandidateVariables[11] = invmassLambdaBar; | |
2800 | fCandidateVariables[12] = v0part->InvMass2Prongs(0,1,11,11); | |
2801 | fCandidateVariables[13] = part->GetDCA(); | |
2802 | fCandidateVariables[14] = dcaV0ptp; | |
2803 | fCandidateVariables[15] = part->Getd0Prong(0); | |
2804 | fCandidateVariables[16] = part->Getd0Prong(1); | |
2805 | fCandidateVariables[17] = v0part->Getd0Prong(0); | |
2806 | fCandidateVariables[18] = v0part->Getd0Prong(1); | |
2807 | fCandidateVariables[19] = part->CosPointingAngle(); | |
2808 | fCandidateVariables[20] = part->CosV0PointingAngle(); | |
2809 | fCandidateVariables[21] = v0part->RadiusSecVtx(); | |
2810 | fCandidateVariables[22] = nSigmaITSpr; | |
2811 | fCandidateVariables[23] = nSigmaITSpi; | |
2812 | fCandidateVariables[24] = nSigmaITSka; | |
2813 | fCandidateVariables[25] = nSigmaTPCpr; | |
2814 | fCandidateVariables[26] = nSigmaTPCpi; | |
2815 | fCandidateVariables[27] = nSigmaTPCka; | |
2816 | fCandidateVariables[28] = nSigmaTOFpr; | |
2817 | fCandidateVariables[29] = nSigmaTOFpi; | |
2818 | fCandidateVariables[30] = nSigmaTOFka; | |
2819 | fCandidateVariables[31] = part->Y(4122); | |
2820 | fCandidateVariables[32] = bachelor->Eta(); | |
2821 | fCandidateVariables[33] = v0pos->Eta(); | |
2822 | fCandidateVariables[34] = v0neg->Eta(); | |
2823 | fCandidateVariables[35] = part->P(); | |
2824 | fCandidateVariables[36] = part->Pt(); | |
2825 | fCandidateVariables[37] = v0part->P(); | |
2826 | fCandidateVariables[38] = v0part->Pt(); | |
2827 | fCandidateVariables[39] = bachelor->P(); | |
2828 | fCandidateVariables[40] = bachelor->Pt(); | |
2829 | fCandidateVariables[41] = v0pos->P(); | |
2830 | fCandidateVariables[42] = v0pos->Pt(); | |
2831 | fCandidateVariables[43] = v0neg->P(); | |
2832 | fCandidateVariables[44] = v0neg->Pt(); | |
2833 | fCandidateVariables[45] = part->DecayLength(); | |
2834 | fCandidateVariables[46] = part->DecayLengthV0(); | |
2835 | fCandidateVariables[47] = part->CosPointingAngleXY(); | |
2836 | fCandidateVariables[48] = part->CosV0PointingAngleXY(); | |
2837 | fCandidateVariables[49] = part->DecayLengthXY(); | |
2838 | fCandidateVariables[50] = part->DecayLengthXYV0(); | |
2839 | fCandidateVariables[51] = part->NormalizedDecayLength(); | |
2840 | fCandidateVariables[52] = part->NormalizedV0DecayLength(); | |
2841 | fCandidateVariables[53] = part->NormalizedDecayLengthXY(); | |
2842 | fCandidateVariables[54] = part->NormalizedV0DecayLengthXY(); | |
2843 | Double_t xVtxLc=0, yVtxLc=0, zVtxLc=0; | |
2844 | Double_t xLcMC=0,yLcMC=0,zLcMC=0; | |
2845 | Double_t pxVtxBachelor=0, pyVtxBachelor=0, pzVtxBachelor=0; | |
2846 | Double_t dcaForLc = PropagateToDCA(v0part,bachelor,fBzkG, xVtxLc, yVtxLc, zVtxLc, pxVtxBachelor, pyVtxBachelor, pzVtxBachelor); | |
2847 | if (isLc) { | |
2848 | Int_t pdgCand0 = 4122; | |
2849 | Int_t pdgDgLctoV0bachelor0[2]={2212,310}; | |
2850 | Int_t pdgDgV0toDaughters0[2]={211,211}; | |
2851 | Int_t mcLabel0 = part->MatchToMC(pdgCand0,pdgDgLctoV0bachelor0[1],pdgDgLctoV0bachelor0,pdgDgV0toDaughters0,mcArray,kTRUE); | |
2852 | AliAODMCParticle *partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(mcLabel0)); | |
14666b78 | 2853 | if(partLc){ |
2854 | AliAODMCParticle *partLcDaug0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(partLc->GetDaughter(0))); | |
2855 | if(partLcDaug0){ | |
2856 | xLcMC=partLcDaug0->Xv(), yLcMC=partLcDaug0->Yv(), zLcMC=partLcDaug0->Zv(); | |
2857 | } | |
2858 | } | |
43c7bace | 2859 | } else if (isLc2LBarpi || isLc2Lpi) { |
2860 | AliAODMCParticle *partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(mcLabel)); | |
2861 | AliAODMCParticle *partLcDaug0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(partLc->GetDaughter(0))); | |
2862 | xLcMC=partLcDaug0->Xv(), yLcMC=partLcDaug0->Yv(), zLcMC=partLcDaug0->Zv(); | |
2863 | } else if (isDp2K0Spi) { | |
2864 | AliAODMCParticle *partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(mcLabel2)); | |
2865 | AliAODMCParticle *partLcDaug0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(partLc->GetDaughter(0))); | |
2866 | xLcMC=partLcDaug0->Xv(), yLcMC=partLcDaug0->Yv(), zLcMC=partLcDaug0->Zv(); | |
2867 | } else if (isDs2K0SK) { | |
2868 | AliAODMCParticle *partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(mcLabel3)); | |
2869 | AliAODMCParticle *partLcDaug0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(partLc->GetDaughter(0))); | |
2870 | xLcMC=partLcDaug0->Xv(), yLcMC=partLcDaug0->Yv(), zLcMC=partLcDaug0->Zv(); | |
14fe9f43 | 2871 | } else if (isKstar12K0Spi) { |
2872 | AliAODMCParticle *partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(mcLabel4)); | |
2873 | AliAODMCParticle *partLcDaug0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(partLc->GetDaughter(0))); | |
2874 | xLcMC=partLcDaug0->Xv(), yLcMC=partLcDaug0->Yv(), zLcMC=partLcDaug0->Zv(); | |
2875 | } else if (isKstar22K0Spi) { | |
2876 | AliAODMCParticle *partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(mcLabel5)); | |
2877 | AliAODMCParticle *partLcDaug0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(partLc->GetDaughter(0))); | |
2878 | xLcMC=partLcDaug0->Xv(), yLcMC=partLcDaug0->Yv(), zLcMC=partLcDaug0->Zv(); | |
43c7bace | 2879 | } |
2880 | fCandidateVariables[55]=dcaForLc; | |
2881 | fCandidateVariables[56]=part->GetSecVtxX(); | |
2882 | fCandidateVariables[57]=part->GetSecVtxY(); | |
2883 | fCandidateVariables[58]=part->GetSecVtxZ(); | |
2884 | fCandidateVariables[59]=xVtxLc; | |
2885 | fCandidateVariables[60]=yVtxLc; | |
2886 | fCandidateVariables[61]=zVtxLc; | |
2887 | fCandidateVariables[62]=xLcMC; | |
2888 | fCandidateVariables[63]=yLcMC; | |
2889 | fCandidateVariables[64]=zLcMC; | |
2890 | fCandidateVariables[65]=bachelor->Px(); | |
2891 | fCandidateVariables[66]=bachelor->Py(); | |
2892 | fCandidateVariables[67]=pxVtxBachelor; | |
2893 | fCandidateVariables[68]=pyVtxBachelor; | |
2894 | fCandidateVariables[69]=v0part->Px(); | |
2895 | fCandidateVariables[70]=v0part->Py(); | |
2896 | fCandidateVariables[71]=fVtx1->GetX(); | |
2897 | fCandidateVariables[72]=fVtx1->GetY(); | |
2898 | fCandidateVariables[73]=fVtx1->GetZ(); | |
2899 | fCandidateVariables[74]=part->CosThetaStar(0,4122,2212,310); | |
2900 | fCandidateVariables[75]=part->CosThetaStar(1,4122,2212,310); | |
2901 | fCandidateVariables[76]=v0part->Eta(); | |
2902 | fCandidateVariables[77]=v0part->Y(310); | |
2903 | fCandidateVariables[78]=pzVtxBachelor; | |
2904 | fCandidateVariables[79]=v0part->Pz(); | |
53c91ed7 | 2905 | fCandidateVariables[80]=bachelor->Charge(); |
2906 | fCandidateVariables[81]=isMCparticleInFiducialAcceptance; | |
2907 | if (fUseMCInfo) { | |
2db138e0 | 2908 | fCandidateVariables[82]=0; |
53c91ed7 | 2909 | if (bachelor->GetLabel()!=-1) { |
2910 | AliAODMCParticle *partBachelor = dynamic_cast<AliAODMCParticle*>(mcArray->At(TMath::Abs(bachelor->GetLabel()))); | |
2db138e0 | 2911 | if(partBachelor) fCandidateVariables[82]=partBachelor->GetPdgCode(); |
53c91ed7 | 2912 | } |
2913 | } else { | |
2914 | fCandidateVariables[82]=-1; | |
2915 | } | |
14fe9f43 | 2916 | fCandidateVariables[83] = part->InvMass2Prongs(0,1,211,310); // Kstar( 892)+ -> pi+K0S |
2917 | fCandidateVariables[84] = part->InvMass2Prongs(0,1,321,310); // Kstar(1430)+ -> pi+K0S | |
2918 | ||
2919 | fCandidateVariables[85]=0; | |
2920 | fCandidateVariables[86]=0; | |
2921 | fCandidateVariables[87]=0; | |
516f546e | 2922 | fCandidateVariables[88]=0; |
14fe9f43 | 2923 | if (fUseMCInfo) { |
516f546e | 2924 | if (v0pos->GetLabel()!=-1 && |
2925 | v0neg->GetLabel()!=-1) { | |
2926 | const Int_t ndg=2; | |
2927 | Int_t dgLabels[ndg]={TMath::Abs(v0pos->GetLabel()), | |
2928 | TMath::Abs(v0neg->GetLabel())}; | |
2929 | Int_t ndgCk=0; | |
2930 | Int_t *pdgDg=0; | |
2931 | Int_t absLabelMother=-1; | |
2932 | Int_t nDauCand=-1; | |
2933 | fCandidateVariables[88]=SearchForCommonMother(mcArray, | |
2934 | dgLabels,ndg,ndgCk,pdgDg,absLabelMother,nDauCand); | |
2935 | } | |
14fe9f43 | 2936 | if (bachelor->GetLabel()!=-1 && |
2937 | v0pos->GetLabel()!=-1 && | |
2938 | v0neg->GetLabel()!=-1) { | |
2939 | const Int_t ndg=3; | |
2940 | Int_t dgLabels[ndg]={TMath::Abs(bachelor->GetLabel()), | |
2941 | TMath::Abs(v0pos->GetLabel()), | |
2942 | TMath::Abs(v0neg->GetLabel())}; | |
2943 | Int_t ndgCk=0; | |
2944 | Int_t *pdgDg=0; | |
2945 | Int_t absLabelMother=-1; | |
516f546e | 2946 | Int_t nDauCand=-1; |
14fe9f43 | 2947 | fCandidateVariables[85]=SearchForCommonMother(mcArray, |
516f546e | 2948 | dgLabels,ndg,ndgCk,pdgDg,absLabelMother,nDauCand); |
14fe9f43 | 2949 | AliAODMCParticle *part1 = dynamic_cast<AliAODMCParticle*>(mcArray->At(TMath::Abs(v0pos->GetLabel()))); |
2950 | AliAODMCParticle *part2 = dynamic_cast<AliAODMCParticle*>(mcArray->At(TMath::Abs(v0neg->GetLabel()))); | |
516f546e | 2951 | if(part1) fCandidateVariables[86]=part1->GetPdgCode(); |
2952 | if(part2) fCandidateVariables[87]=part2->GetPdgCode(); | |
14fe9f43 | 2953 | } |
2954 | } | |
2955 | ||
2956 | AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); | |
2957 | AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler(); | |
2958 | AliPIDResponse *pidResponse=inputHandler->GetPIDResponse(); | |
516f546e | 2959 | fCandidateVariables[89]=pidResponse->GetTOFResponse().GetStartTimeMask(bachelor->P()); |
43c7bace | 2960 | |
2961 | //fCandidateVariables[65] = bachelor->Px(); | |
2962 | //fCandidateVariables[66] = bachelor->Py(); | |
2963 | //fCandidateVariables[67] = bachelor->Pz(); | |
2964 | //fCandidateVariables[68] = v0pos->Px(); | |
2965 | //fCandidateVariables[69] = v0pos->Py(); | |
2966 | //fCandidateVariables[70] = v0pos->Pz(); | |
2967 | //fCandidateVariables[71] = v0neg->Px(); | |
2968 | //fCandidateVariables[72] = v0neg->Py(); | |
2969 | //fCandidateVariables[73] = v0neg->Pz(); | |
2970 | //fCandidateVariables[74] = part->PxProng(0); | |
2971 | //fCandidateVariables[75] = part->PyProng(0); | |
2972 | //fCandidateVariables[76] = part->PzProng(0); | |
2973 | //fCandidateVariables[77] = part->PxProng(1); | |
2974 | //fCandidateVariables[78] = part->PyProng(1); | |
2975 | //fCandidateVariables[79] = part->PzProng(1); | |
2976 | //fCandidateVariables[80] = v0part->PxProng(0); | |
2977 | //fCandidateVariables[81] = v0part->PyProng(0); | |
2978 | //fCandidateVariables[82] = v0part->PzProng(0); | |
2979 | //fCandidateVariables[83] = v0part->PxProng(1); | |
2980 | //fCandidateVariables[84] = v0part->PyProng(1); | |
2981 | //fCandidateVariables[85] = v0part->PzProng(1); | |
2982 | //fCandidateVariables[86] = part->QtProng(0); | |
2983 | //fCandidateVariables[87] = part->Alpha(); | |
2984 | ||
2985 | fVariablesTree->Fill(); | |
992ba7d8 | 2986 | |
43c7bace | 2987 | return; |
2988 | } | |
0dbd1d4f | 2989 | |
43c7bace | 2990 | //------------------------------------------------------------------------------- |
2991 | void AliAnalysisTaskSELc2V0bachelor::DefineTreeVariables() { | |
2992 | // | |
2993 | // This is to define tree variables | |
2994 | // | |
0dbd1d4f | 2995 | |
43c7bace | 2996 | const char* nameoutput = GetOutputSlot(4)->GetContainer()->GetName(); |
2997 | fVariablesTree = new TTree(nameoutput,"Candidates variables tree"); | |
516f546e | 2998 | Int_t nVar = 90; |
43c7bace | 2999 | fCandidateVariables = new Float_t [nVar]; |
3000 | TString * fCandidateVariableNames = new TString[nVar]; | |
3001 | fCandidateVariableNames[ 0]="isLcByMC"; | |
3002 | fCandidateVariableNames[ 1]="isV0ByMC"; | |
3003 | fCandidateVariableNames[ 2]="flagToCheckBachelor"; | |
3004 | fCandidateVariableNames[ 3]="flagToCheckV0daughters"; | |
3005 | fCandidateVariableNames[ 4]="flagToCheckCandidate"; | |
3006 | fCandidateVariableNames[ 5]="massLc2K0Sp"; | |
3007 | fCandidateVariableNames[ 6]="massLc2Lambdapi"; | |
3008 | fCandidateVariableNames[ 7]="massD2K0Spi"; // D+ -> pi+ K0S | |
3009 | fCandidateVariableNames[ 8]="massDS2K0SK"; // D+S -> K+ K0S | |
3010 | fCandidateVariableNames[ 9]="massK0S"; | |
3011 | fCandidateVariableNames[10]="massLambda"; | |
3012 | fCandidateVariableNames[11]="massLambdaBar"; | |
3013 | fCandidateVariableNames[12]="massGamma"; | |
3014 | fCandidateVariableNames[13]="dcaLcptp"; // DCA Lc prong-to-prong | |
3015 | fCandidateVariableNames[14]="dcaV0ptp"; | |
3016 | fCandidateVariableNames[15]="tImpParBach"; | |
3017 | fCandidateVariableNames[16]="tImpParV0"; | |
3018 | fCandidateVariableNames[17]="dcaV0postoPV"; | |
3019 | fCandidateVariableNames[18]="dcaV0negtoPV"; | |
3020 | fCandidateVariableNames[19]="cosPALc"; | |
3021 | fCandidateVariableNames[20]="cosPAK0S"; | |
3022 | fCandidateVariableNames[21]="rhoV0"; | |
3023 | fCandidateVariableNames[22]="nSigmaITSpr"; | |
3024 | fCandidateVariableNames[23]="nSigmaITSpi"; | |
3025 | fCandidateVariableNames[24]="nSigmaITSka"; | |
3026 | fCandidateVariableNames[25]="nSigmaTPCpr"; | |
3027 | fCandidateVariableNames[26]="nSigmaTPCpi"; | |
3028 | fCandidateVariableNames[27]="nSigmaTPCka"; | |
3029 | fCandidateVariableNames[28]="nSigmaTOFpr"; | |
3030 | fCandidateVariableNames[29]="nSigmaTOFpi"; | |
3031 | fCandidateVariableNames[30]="nSigmaTOFka"; | |
3032 | fCandidateVariableNames[31]="yLc"; | |
3033 | fCandidateVariableNames[32]="etaBach"; // etaBachelor | |
3034 | fCandidateVariableNames[33]="etaV0pos"; // etaV0pos | |
3035 | fCandidateVariableNames[34]="etaV0neg"; // etaV0neg | |
3036 | fCandidateVariableNames[35]="LcP"; // @ DCA | |
3037 | fCandidateVariableNames[36]="LcPt"; // @ DCA | |
3038 | fCandidateVariableNames[37]="v0P"; // @ V0 DCA | |
3039 | fCandidateVariableNames[38]="v0Pt"; // @ V0 DCA | |
3040 | fCandidateVariableNames[39]="bachelorP"; // @ prim vtx | |
3041 | fCandidateVariableNames[40]="bachelorPt"; // @ prim vtx | |
3042 | fCandidateVariableNames[41]="V0positiveP"; // @ prim vtx | |
3043 | fCandidateVariableNames[42]="V0positivePt"; // @ prim vtx | |
3044 | fCandidateVariableNames[43]="V0negativeP"; // @ prim vtx | |
3045 | fCandidateVariableNames[44]="V0negativePt"; // @ prim vtx | |
3046 | fCandidateVariableNames[45]="decayLengthLc"; | |
3047 | fCandidateVariableNames[46]="decayLengthV0"; | |
3048 | fCandidateVariableNames[47]="cosPALcXY"; // cosPA XY x Lc | |
3049 | fCandidateVariableNames[48]="cosPAV0XY"; // cosPA XY x V0 | |
3050 | fCandidateVariableNames[49]="decayLengthLcXY"; // decay length XY x Lc | |
3051 | fCandidateVariableNames[50]="decayLengthV0XY"; // decay length XY x V0 | |
3052 | fCandidateVariableNames[51]="normalizedDecayLengthLc"; // normalized decay length x Lc | |
3053 | fCandidateVariableNames[52]="normalizedDecayLengthV0"; // normalized decay length x V0 | |
3054 | fCandidateVariableNames[53]="normalizedDecayLengthXYLc"; // normalized decay length XY x Lc | |
3055 | fCandidateVariableNames[54]="normalizedDecayLengthXYV0"; // normalized decay length XY x V0 | |
3056 | fCandidateVariableNames[55]="newLcDCA"; | |
3057 | fCandidateVariableNames[56]="xVtxLcBad"; | |
3058 | fCandidateVariableNames[57]="yVtxLcBad"; | |
3059 | fCandidateVariableNames[58]="zVtxLcBad"; | |
3060 | fCandidateVariableNames[59]="xVtxLcGood"; | |
3061 | fCandidateVariableNames[60]="yVtxLcGood"; | |
3062 | fCandidateVariableNames[61]="zVtxLcGood"; | |
3063 | fCandidateVariableNames[62]="xVtxLcMC"; | |
3064 | fCandidateVariableNames[63]="yVtxLcMC"; | |
3065 | fCandidateVariableNames[64]="zVtxLcMC"; | |
3066 | fCandidateVariableNames[65]="pxVtxBachelorBad"; | |
3067 | fCandidateVariableNames[66]="pyVtxBachelorBad"; | |
3068 | fCandidateVariableNames[67]="pxVtxBachelorGood"; | |
3069 | fCandidateVariableNames[68]="pyVtxBachelorGood"; | |
3070 | fCandidateVariableNames[69]="pxVtxV0"; | |
3071 | fCandidateVariableNames[70]="pyVtxV0"; | |
3072 | fCandidateVariableNames[71]="xPvtx"; | |
3073 | fCandidateVariableNames[72]="yPvtx"; | |
3074 | fCandidateVariableNames[73]="zPvtx"; | |
3075 | fCandidateVariableNames[74]="cosThetaStarBachelor"; | |
3076 | fCandidateVariableNames[75]="cosThetaStarV0"; | |
3077 | fCandidateVariableNames[76]="etaV0"; | |
3078 | fCandidateVariableNames[77]="yV0"; | |
3079 | fCandidateVariableNames[78]="pzVtxBachelorGood"; | |
3080 | fCandidateVariableNames[79]="pzVtxV0"; | |
53c91ed7 | 3081 | fCandidateVariableNames[80]="bachelorCharge"; |
3082 | fCandidateVariableNames[81]="isMCparticleInFiducialAcceptance"; | |
14fe9f43 | 3083 | fCandidateVariableNames[82]="pdgBachelor"; // pdg MC bachelor |
3084 | fCandidateVariableNames[83]="massKstar12K0Spi"; // Kstar( 892)+ -> pi+ K0S | |
3085 | fCandidateVariableNames[84]="massKstar22K0Spi"; // Kstar(1430)+ -> pi+ K0S | |
3086 | fCandidateVariableNames[85]="pdgCandidate"; // pdg MC candidate recovered via new method | |
3087 | fCandidateVariableNames[86]="pdgV0pos"; // pdg MC V0 positive | |
3088 | fCandidateVariableNames[87]="pdgV0neg"; // pdg MC V0 negative | |
516f546e | 3089 | fCandidateVariableNames[88]="pdgV0Candidate"; // pdg MC V0candidate recovered via new method |
3090 | fCandidateVariableNames[89]="startTimeMask"; // start time mask | |
43c7bace | 3091 | |
3092 | //fCandidateVariableNames[65]="bachelorPx"; | |
3093 | //fCandidateVariableNames[66]="bachelorPy"; | |
3094 | //fCandidateVariableNames[67]="bachelorPz"; | |
3095 | //fCandidateVariableNames[68]="V0positivePx"; | |
3096 | //fCandidateVariableNames[69]="V0positivePy"; | |
3097 | //fCandidateVariableNames[70]="V0positivePz"; | |
3098 | //fCandidateVariableNames[71]="V0negativePx"; | |
3099 | //fCandidateVariableNames[72]="V0negativePy"; | |
3100 | //fCandidateVariableNames[73]="V0negativePz"; | |
3101 | //fCandidateVariableNames[74]="bachelorPxDCA"; | |
3102 | //fCandidateVariableNames[75]="bachelorPyDCA"; | |
3103 | //fCandidateVariableNames[76]="bachelorPzDCA"; | |
3104 | //fCandidateVariableNames[77]="v0PxDCA"; | |
3105 | //fCandidateVariableNames[78]="v0PyDCA"; | |
3106 | //fCandidateVariableNames[79]="v0PzDCA"; | |
3107 | //fCandidateVariableNames[80]="V0positivePxDCA"; | |
3108 | //fCandidateVariableNames[81]="V0positivePyDCA"; | |
3109 | //fCandidateVariableNames[82]="V0positivePzDCA"; | |
3110 | //fCandidateVariableNames[83]="V0negativePxDCA"; | |
3111 | //fCandidateVariableNames[84]="V0negativePyDCA"; | |
3112 | //fCandidateVariableNames[85]="V0negativePzDCA"; | |
3113 | //fCandidateVariableNames[86]="qtLc"; | |
3114 | //fCandidateVariableNames[87]="alphaLc"; | |
3115 | ||
3116 | for (Int_t ivar=0; ivar<nVar; ivar++) { | |
3117 | fVariablesTree->Branch(fCandidateVariableNames[ivar].Data(),&fCandidateVariables[ivar],Form("%s/f",fCandidateVariableNames[ivar].Data())); | |
3118 | } | |
992ba7d8 | 3119 | |
43c7bace | 3120 | return; |
3121 | } | |
0dbd1d4f | 3122 | |
43c7bace | 3123 | //__________________________________________________________________________ |
3124 | void AliAnalysisTaskSELc2V0bachelor::DefineGeneralHistograms() { | |
3125 | // | |
3126 | // This is to define general histograms | |
3127 | // | |
0dbd1d4f | 3128 | |
53c91ed7 | 3129 | fCEvents = new TH1F("fCEvents","conter",18,0,18); |
43c7bace | 3130 | fCEvents->SetStats(kTRUE); |
3131 | fCEvents->GetXaxis()->SetBinLabel(1,"X1"); | |
3132 | fCEvents->GetXaxis()->SetBinLabel(2,"Analyzed events"); | |
3133 | fCEvents->GetXaxis()->SetBinLabel(3,"AliAODVertex exists"); | |
3134 | fCEvents->GetXaxis()->SetBinLabel(4,"CascadesHF exists"); | |
3135 | fCEvents->GetXaxis()->SetBinLabel(5,"MCarray exists"); | |
3136 | fCEvents->GetXaxis()->SetBinLabel(6,"MCheader exists"); | |
3137 | fCEvents->GetXaxis()->SetBinLabel(7,"GetNContributors()>0"); | |
3138 | fCEvents->GetXaxis()->SetBinLabel(8,"IsEventSelected"); | |
3139 | fCEvents->GetXaxis()->SetBinLabel(9,"triggerClass!=CINT1"); | |
3140 | fCEvents->GetXaxis()->SetBinLabel(10,"triggerMask!=kAnyINT"); | |
3141 | fCEvents->GetXaxis()->SetBinLabel(11,"triggerMask!=kAny"); | |
3142 | fCEvents->GetXaxis()->SetBinLabel(12,"vtxTitle.Contains(Z)"); | |
3143 | fCEvents->GetXaxis()->SetBinLabel(13,"vtxTitle.Contains(3D)"); | |
3144 | fCEvents->GetXaxis()->SetBinLabel(14,"vtxTitle.Doesn'tContain(Z-3D)"); | |
3145 | fCEvents->GetXaxis()->SetBinLabel(15,Form("zVtx<=%2.0fcm",fAnalCuts->GetMaxVtxZ())); | |
3146 | fCEvents->GetXaxis()->SetBinLabel(16,"!IsEventSelected"); | |
3147 | fCEvents->GetXaxis()->SetBinLabel(17,"triggerMask!=kAnyINT || triggerClass!=CINT1"); | |
53c91ed7 | 3148 | fCEvents->GetXaxis()->SetBinLabel(18,Form("zVtxMC<=%2.0fcm",fAnalCuts->GetMaxVtxZ())); |
43c7bace | 3149 | //fCEvents->GetXaxis()->SetTitle(""); |
3150 | fCEvents->GetYaxis()->SetTitle("counts"); | |
0dbd1d4f | 3151 | |
43c7bace | 3152 | fOutput->Add(fCEvents); |
3153 | TString fillthis=""; | |
0dbd1d4f | 3154 | |
43c7bace | 3155 | if (fUseMCInfo && fAdditionalChecks) { |
3156 | fillthis="histMcStatLc"; | |
3157 | TH1F* mcStatisticLc = new TH1F(fillthis.Data(),"#Lambda_{c} generated and their decays",21,-10.5,10.5); | |
3158 | fOutput->Add(mcStatisticLc); | |
3159 | } | |
0dbd1d4f | 3160 | |
43c7bace | 3161 | //fillthis="histopionV0SigmaVspTOF"; |
3162 | //TH2F *hpionV0SigmaVspTOF=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
3163 | fillthis="histoprotonBachSigmaVspTOF"; | |
3164 | TH2F *hprotonBachSigmaVspTOF=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
0dbd1d4f | 3165 | |
43c7bace | 3166 | //fOutput->Add(hpionV0SigmaVspTOF); |
3167 | fOutput->Add(hprotonBachSigmaVspTOF); | |
0dbd1d4f | 3168 | |
43c7bace | 3169 | //fillthis="histopionV0SigmaVspTPC"; |
3170 | //TH2F *hpionV0SigmaVspTPC=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
3171 | fillthis="histoprotonBachSigmaVspTPC"; | |
3172 | TH2F *hprotonBachSigmaVspTPC=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
0dbd1d4f | 3173 | |
43c7bace | 3174 | //fOutput->Add(hpionV0SigmaVspTPC); |
3175 | fOutput->Add(hprotonBachSigmaVspTPC); | |
0dbd1d4f | 3176 | |
43c7bace | 3177 | if (fUseMCInfo) { |
0dbd1d4f | 3178 | |
43c7bace | 3179 | //fillthis="histopionV0SigmaVspTOFsgn"; |
3180 | //TH2F *hpionV0SigmaVspTOFsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
3181 | fillthis="histoprotonBachSigmaVspTOFsgn"; | |
3182 | TH2F *hprotonBachSigmaVspTOFsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
0dbd1d4f | 3183 | |
43c7bace | 3184 | //fOutput->Add(hpionV0SigmaVspTOFsgn); |
3185 | fOutput->Add(hprotonBachSigmaVspTOFsgn); | |
0dbd1d4f | 3186 | |
43c7bace | 3187 | //fillthis="histopionV0SigmaVspTPCsgn"; |
3188 | //TH2F *hpionV0SigmaVspTPCsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
3189 | fillthis="histoprotonBachSigmaVspTPCsgn"; | |
3190 | TH2F *hprotonBachSigmaVspTPCsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
0dbd1d4f | 3191 | |
43c7bace | 3192 | //fOutput->Add(hpionV0SigmaVspTPCsgn); |
3193 | fOutput->Add(hprotonBachSigmaVspTPCsgn); | |
0dbd1d4f | 3194 | |
0dbd1d4f | 3195 | |
43c7bace | 3196 | //fillthis="histopionV0SigmaVspTOFbkg"; |
3197 | //TH2F *hpionV0SigmaVspTOFbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
3198 | fillthis="histoprotonBachSigmaVspTOFbkg"; | |
3199 | TH2F *hprotonBachSigmaVspTOFbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
0dbd1d4f | 3200 | |
43c7bace | 3201 | //fOutput->Add(hpionV0SigmaVspTOFbkg); |
3202 | fOutput->Add(hprotonBachSigmaVspTOFbkg); | |
992ba7d8 | 3203 | |
43c7bace | 3204 | //fillthis="histopionV0SigmaVspTPCbkg"; |
3205 | //TH2F *hpionV0SigmaVspTPCbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
3206 | fillthis="histoprotonBachSigmaVspTPCbkg"; | |
3207 | TH2F *hprotonBachSigmaVspTPCbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.); | |
992ba7d8 | 3208 | |
43c7bace | 3209 | //fOutput->Add(hpionV0SigmaVspTPCbkg); |
3210 | fOutput->Add(hprotonBachSigmaVspTPCbkg); | |
992ba7d8 | 3211 | |
43c7bace | 3212 | } |
992ba7d8 | 3213 | |
43c7bace | 3214 | if (fAdditionalChecks) { |
3215 | ||
3216 | TH1F *hZ2 = new TH1F("hZ2","",100,-50.,50.); | |
3217 | fOutput->Add(hZ2); | |
3218 | TH1F *hZ3 = new TH1F("hZ3","",100,-50.,50.); | |
3219 | fOutput->Add(hZ3); | |
3220 | TH1F *hZ4 = new TH1F("hZ4","",100,-50.,50.); | |
3221 | fOutput->Add(hZ4); | |
3222 | TH1F *hZ5 = new TH1F("hZ5","",100,-50.,50.); | |
3223 | fOutput->Add(hZ5); | |
3224 | TH1F *hZ6 = new TH1F("hZ6","",100,-50.,50.); | |
3225 | fOutput->Add(hZ6); | |
3226 | TH1F *hZ7 = new TH1F("hZ7","",100,-50.,50.); | |
3227 | fOutput->Add(hZ7); | |
3228 | TH1F *hZ8 = new TH1F("hZ8","",100,-50.,50.); | |
3229 | fOutput->Add(hZ8); | |
3230 | TH1F *hZ9 = new TH1F("hZ9","",100,-50.,50.); | |
3231 | fOutput->Add(hZ9); | |
3232 | TH1F *hZ10 = new TH1F("hZ10","",100,-50.,50.); | |
3233 | fOutput->Add(hZ10); | |
3234 | TH1F *hZ11 = new TH1F("hZ11","",100,-50.,50.); | |
3235 | fOutput->Add(hZ11); | |
3236 | TH1F *hZ12 = new TH1F("hZ12","",100,-50.,50.); | |
3237 | fOutput->Add(hZ12); | |
3238 | TH1F *hZ13 = new TH1F("hZ13","",100,-50.,50.); | |
3239 | fOutput->Add(hZ13); | |
3240 | TH1F *hZ14 = new TH1F("hZ14","",100,-50.,50.); | |
3241 | fOutput->Add(hZ14); | |
3242 | TH1F *hZ15 = new TH1F("hZ15","",100,-50.,50.); | |
3243 | fOutput->Add(hZ15); | |
3244 | TH1F *hZ16 = new TH1F("hZ16","",100,-50.,50.); | |
3245 | fOutput->Add(hZ16); | |
3246 | } | |
992ba7d8 | 3247 | |
43c7bace | 3248 | TH1F *hCandidateSelection = new TH1F("hCandidateSelection","",10,-0.5,9.5); |
3249 | hCandidateSelection->GetXaxis()->SetBinLabel(1,"IsEventSelected"); | |
3250 | hCandidateSelection->GetXaxis()->SetBinLabel(2,"IsSecondaryVtx"); | |
3251 | hCandidateSelection->GetXaxis()->SetBinLabel(3,"V0toPosNeg"); | |
3252 | hCandidateSelection->GetXaxis()->SetBinLabel(4,"offlineV0"); | |
3253 | hCandidateSelection->GetXaxis()->SetBinLabel(5,"isInFiducialAcceptance"); | |
3254 | hCandidateSelection->GetXaxis()->SetBinLabel(6,"analCuts::kTracks"); | |
3255 | hCandidateSelection->GetXaxis()->SetBinLabel(7,"analCuts::kCandidateNoPID"); | |
3256 | hCandidateSelection->GetXaxis()->SetBinLabel(8,"analCuts::kPID"); | |
3257 | hCandidateSelection->GetXaxis()->SetBinLabel(9,"analCuts::kCandidateWithPID"); | |
3258 | hCandidateSelection->GetXaxis()->SetBinLabel(10,"analCuts::kAll"); | |
3259 | fOutput->Add(hCandidateSelection); | |
992ba7d8 | 3260 | |
43c7bace | 3261 | TH1F *hEventsWithCandidates = new TH1F("hEventsWithCandidates","conter",11,5.5,16.5); |
3262 | hEventsWithCandidates->GetXaxis()->SetBinLabel(1,"GetNContributors()>0"); | |
3263 | hEventsWithCandidates->GetXaxis()->SetBinLabel(2,"IsEventSelected"); | |
3264 | hEventsWithCandidates->GetXaxis()->SetBinLabel(3,"triggerClass!=CINT1"); | |
3265 | hEventsWithCandidates->GetXaxis()->SetBinLabel(4,"triggerMask!=kAnyINT"); | |
3266 | hEventsWithCandidates->GetXaxis()->SetBinLabel(5,"triggerMask!=kAny"); | |
3267 | hEventsWithCandidates->GetXaxis()->SetBinLabel(6,"vtxTitle.Contains(Z)"); | |
3268 | hEventsWithCandidates->GetXaxis()->SetBinLabel(7,"vtxTitle.Contains(3D)"); | |
3269 | hEventsWithCandidates->GetXaxis()->SetBinLabel(8,"vtxTitle.Doesn'tContain(Z-3D)"); | |
3270 | hEventsWithCandidates->GetXaxis()->SetBinLabel(9,Form("zVtx<=%2.0fcm",fAnalCuts->GetMaxVtxZ())); | |
3271 | hEventsWithCandidates->GetXaxis()->SetBinLabel(10,"!IsEventSelected"); | |
3272 | hEventsWithCandidates->GetXaxis()->SetBinLabel(11,"triggerMask!=kAnyINT || triggerClass!=CINT1"); | |
3273 | fOutput->Add(hEventsWithCandidates); | |
992ba7d8 | 3274 | |
43c7bace | 3275 | if (fAdditionalChecks) { |
3276 | ||
3277 | TH1F *hZ6a = new TH1F("hZ6a","",100,-50.,50.); | |
3278 | fOutput->Add(hZ6a); | |
3279 | TH1F *hZ7a = new TH1F("hZ7a","",100,-50.,50.); | |
3280 | fOutput->Add(hZ7a); | |
3281 | TH1F *hZ8a = new TH1F("hZ8a","",100,-50.,50.); | |
3282 | fOutput->Add(hZ8a); | |
3283 | TH1F *hZ9a = new TH1F("hZ9a","",100,-50.,50.); | |
3284 | fOutput->Add(hZ9a); | |
3285 | TH1F *hZ10a = new TH1F("hZ10a","",100,-50.,50.); | |
3286 | fOutput->Add(hZ10a); | |
3287 | TH1F *hZ11a = new TH1F("hZ11a","",100,-50.,50.); | |
3288 | fOutput->Add(hZ11a); | |
3289 | TH1F *hZ12a = new TH1F("hZ12a","",100,-50.,50.); | |
3290 | fOutput->Add(hZ12a); | |
3291 | TH1F *hZ13a = new TH1F("hZ13a","",100,-50.,50.); | |
3292 | fOutput->Add(hZ13a); | |
3293 | TH1F *hZ14a = new TH1F("hZ14a","",100,-50.,50.); | |
3294 | fOutput->Add(hZ14a); | |
3295 | TH1F *hZ15a = new TH1F("hZ15a","",100,-50.,50.); | |
3296 | fOutput->Add(hZ15a); | |
3297 | TH1F *hZ16a = new TH1F("hZ16a","",100,-50.,50.); | |
3298 | fOutput->Add(hZ16a); | |
3299 | } | |
992ba7d8 | 3300 | |
43c7bace | 3301 | TH1F *hSwitchOnCandidates1 = new TH1F("hSwitchOnCandidates1","",15,-7.5,7.5); |
3302 | fOutput->Add(hSwitchOnCandidates1); | |
3303 | TH1F *hSwitchOnCandidates2 = new TH1F("hSwitchOnCandidates2","",15,-7.5,7.5); | |
3304 | fOutput->Add(hSwitchOnCandidates2); | |
3305 | TH1F *hSwitchOnCandidates3 = new TH1F("hSwitchOnCandidates3","",15,-7.5,7.5); | |
3306 | fOutput->Add(hSwitchOnCandidates3); | |
3307 | TH1F *hSwitchOnCandidates4 = new TH1F("hSwitchOnCandidates4","",15,-7.5,7.5); | |
3308 | fOutput->Add(hSwitchOnCandidates4); | |
992ba7d8 | 3309 | |
43c7bace | 3310 | return; |
3311 | } | |
992ba7d8 | 3312 | |
43c7bace | 3313 | //________________________________________________________________________ |
3314 | void AliAnalysisTaskSELc2V0bachelor::DefineAnalysisHistograms() { | |
3315 | // | |
3316 | // This is to define analysis histograms | |
3317 | // | |
3318 | ||
3319 | if (fIsK0SAnalysis) DefineK0SHistos();// hK0S histos declarations | |
3320 | ||
3321 | return; | |
3322 | } | |
992ba7d8 | 3323 | |
43c7bace | 3324 | //________________________________________________________________________ |
b833016c | 3325 | void AliAnalysisTaskSELc2V0bachelor::FillAnalysisHistograms(AliAODRecoCascadeHF *part, AliRDHFCutsLctoV0 *cutsAnal, TString appendthis) { |
43c7bace | 3326 | // |
3327 | // This is to fill analysis histograms | |
3328 | // | |
992ba7d8 | 3329 | |
43c7bace | 3330 | TString fillthis=""; |
992ba7d8 | 3331 | |
b833016c | 3332 | Bool_t isBachelorID = (((cutsAnal->IsSelected(part,AliRDHFCuts::kPID))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // ID x bachelor |
3333 | ||
3334 | Bool_t areCutsUsingPID = cutsAnal->GetIsUsePID(); | |
3335 | cutsAnal->SetUsePID(kFALSE); | |
3336 | ||
43c7bace | 3337 | Double_t invmassLc = part->InvMassLctoK0sP(); |
3338 | Double_t lambdacpt = part->Pt(); | |
992ba7d8 | 3339 | |
43c7bace | 3340 | AliAODTrack *bachelor = (AliAODTrack*)part->GetBachelor(); |
b833016c | 3341 | Double_t momBach = bachelor->P(); |
3342 | Double_t ptBach = bachelor->Pt(); | |
992ba7d8 | 3343 | |
b833016c | 3344 | AliAODv0 *v0part = (AliAODv0*)part->Getv0(); |
43c7bace | 3345 | Double_t momK0S = v0part->P(); |
3346 | Double_t ptK0S = v0part->Pt(); | |
b833016c | 3347 | //Double_t dcaV0ptp = v0part->GetDCA(); |
43c7bace | 3348 | Double_t invmassK0S = v0part->MassK0Short(); |
992ba7d8 | 3349 | |
b833016c | 3350 | AliAODTrack *v0pos = (AliAODTrack*)part->Getv0PositiveTrack(); |
3351 | Double_t ptV0pos = v0pos->Pt(); | |
3352 | AliAODTrack *v0neg = (AliAODTrack*)part->Getv0NegativeTrack(); | |
3353 | Double_t ptV0neg = v0neg->Pt(); | |
3354 | ||
516f546e | 3355 | fillthis="histK0SMass"+appendthis; |
3356 | // cout << fillthis << endl; | |
b833016c | 3357 | cutsAnal->SetExcludedCut(2); |
3358 | if ( ((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3359 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassK0S,ptK0S); | |
3360 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassK0S,ptK0S); | |
3361 | } | |
3362 | cutsAnal->SetExcludedCut(-1); | |
992ba7d8 | 3363 | |
516f546e | 3364 | fillthis="histpK0Svsp"+appendthis; |
3365 | // cout << fillthis << endl; | |
b833016c | 3366 | if ( ((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { |
3367 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momBach,momK0S); | |
3368 | if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momBach,momK0S); | |
3369 | } | |
992ba7d8 | 3370 | |
b833016c | 3371 | fillthis="histLcMassByK0S"+appendthis; |
516f546e | 3372 | // cout << fillthis << endl; |
b833016c | 3373 | if ( ((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { |
3374 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
3375 | if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassLc,lambdacpt); | |
3376 | } | |
3377 | ||
3378 | ||
992ba7d8 | 3379 | |
b833016c | 3380 | |
3381 | fillthis="histptK0S"+appendthis; | |
516f546e | 3382 | // cout << fillthis << endl; |
b833016c | 3383 | cutsAnal->SetExcludedCut(15); |
3384 | if ( ((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3385 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,ptK0S); | |
3386 | if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,ptK0S); | |
3387 | } | |
992ba7d8 | 3388 | |
b833016c | 3389 | fillthis="histptP"+appendthis; |
516f546e | 3390 | // cout << fillthis << endl; |
b833016c | 3391 | cutsAnal->SetExcludedCut(4); |
3392 | if ( ((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3393 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,ptBach); | |
3394 | if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,ptBach); | |
3395 | } | |
3396 | ||
3397 | fillthis="histptPip"+appendthis; | |
3398 | // cout << fillthis << endl; | |
3399 | cutsAnal->SetExcludedCut(5); | |
3400 | if ( ((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3401 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,ptV0pos); | |
3402 | if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,ptV0pos); | |
3403 | } | |
3404 | ||
3405 | fillthis="histptPim"+appendthis; | |
3406 | // cout << fillthis << endl; | |
3407 | cutsAnal->SetExcludedCut(6); | |
3408 | if ( ((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3409 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,ptV0neg); | |
3410 | if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,ptV0neg); | |
3411 | } | |
3412 | ||
3413 | fillthis="histLambdaMass"+appendthis; | |
3414 | // cout << fillthis << endl; | |
3415 | cutsAnal->SetExcludedCut(13); | |
3416 | if ( ((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3417 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,v0part->MassLambda()); | |
3418 | if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,v0part->MassLambda()); | |
3419 | } | |
3420 | ||
3421 | fillthis="histLambdaBarMass"+appendthis; | |
3422 | // cout << fillthis << endl; | |
3423 | cutsAnal->SetExcludedCut(13); | |
3424 | if ( ((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3425 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,v0part->MassAntiLambda()); | |
3426 | if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,v0part->MassAntiLambda()); | |
3427 | } | |
3428 | ||
3429 | fillthis="histGammaMass"+appendthis; | |
3430 | // cout << fillthis << endl; | |
3431 | cutsAnal->SetExcludedCut(14); | |
3432 | if ( ((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3433 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,v0part->InvMass2Prongs(0,1,11,11)); | |
3434 | if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,v0part->InvMass2Prongs(0,1,11,11)); | |
3435 | } | |
3436 | ||
3437 | fillthis="histD0K0S"+appendthis; | |
3438 | // cout << fillthis << endl; | |
3439 | cutsAnal->SetExcludedCut(11); | |
3440 | if ( ((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3441 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,part->Getd0Prong(1)); | |
3442 | if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,part->Getd0Prong(1)); | |
3443 | } | |
3444 | ||
3445 | fillthis="histD0P"+appendthis; | |
3446 | // cout << fillthis << endl; | |
3447 | cutsAnal->SetExcludedCut(10); | |
3448 | if ( ((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3449 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,part->Getd0Prong(0)); | |
3450 | if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,part->Getd0Prong(0)); | |
3451 | } | |
3452 | ||
3453 | fillthis="histCosPAK0S"+appendthis; | |
3454 | // cout << fillthis << endl; | |
3455 | cutsAnal->SetExcludedCut(9); | |
3456 | if ( ((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3457 | ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,part->CosV0PointingAngle()); | |
3458 | if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,part->CosV0PointingAngle()); | |
3459 | } | |
3460 | cutsAnal->SetExcludedCut(-1); | |
3461 | ||
3462 | cutsAnal->SetUsePID(areCutsUsingPID); | |
992ba7d8 | 3463 | |
516f546e | 3464 | return; |
43c7bace | 3465 | } |
3466 | //--------------------------- | |
3467 | Double_t AliAnalysisTaskSELc2V0bachelor::PropagateToDCA(AliAODv0 *v, AliAODTrack *bachelor, Double_t b, | |
3468 | Double_t &xVtxLc, Double_t &yVtxLc, Double_t &zVtxLc, | |
3469 | Double_t &pxVtxBachelor, Double_t &pyVtxBachelor, Double_t &pzVtxBachelor) { | |
3470 | //-------------------------------------------------------------------- | |
3471 | // This function returns the DCA between the V0 and the track | |
3472 | // This is a copy of AliCascadeVertexer::PropagateToDCA(...) method | |
3473 | //-------------------------------------------------------------------- | |
3474 | ||
3475 | // Get AliExternalTrackParam out of the AliAODTracks | |
3476 | Double_t xyz[3], pxpypz[3], cv[21]; Short_t sign; | |
3477 | bachelor->PxPyPz(pxpypz); | |
3478 | bachelor->XvYvZv(xyz); | |
3479 | bachelor->GetCovarianceXYZPxPyPz(cv); | |
3480 | sign=bachelor->Charge(); | |
3481 | AliExternalTrackParam *t = new AliExternalTrackParam(xyz,pxpypz,cv,sign); | |
3482 | ||
3483 | Double_t alpha=t->GetAlpha(), cs1=TMath::Cos(alpha), sn1=TMath::Sin(alpha); | |
3484 | //Double_t alpha = GetAlpha(xyz,pxpypz), cs1=TMath::Cos(alpha), sn1=TMath::Sin(alpha); | |
3485 | ||
3486 | // position and momentum of bachelor | |
3487 | Double_t x1=xyz[0], y1=xyz[1], z1=xyz[2]; | |
3488 | Double_t px1=pxpypz[0], py1=pxpypz[1], pz1=pxpypz[2]; | |
3489 | ||
3490 | // position and momentum of V0 | |
3491 | Double_t x2=v->DecayVertexV0X(), | |
3492 | y2=v->DecayVertexV0Y(), | |
3493 | z2=v->DecayVertexV0Z(); | |
3494 | Double_t px2=v->Px(), | |
3495 | py2=v->Py(), | |
3496 | pz2=v->Pz(); | |
992ba7d8 | 3497 | |
43c7bace | 3498 | /* |
3499 | AliAODTrack *trackP = (AliAODTrack*) v->GetDaughter(0); | |
3500 | //Double_t pxpypzP[3]; trackP->PxPyPz(pxpypzP); | |
3501 | //Double_t xyzP[3]; trackP->XvYvZv(xyzP); | |
3502 | Double_t cvP[21]; trackP->GetCovarianceXYZPxPyPz(cvP); | |
3503 | //Short_t signP=trackP->Charge(); | |
3504 | //AliExternalTrackParam *tP = new AliExternalTrackParam(xyzP,pxpypzP,cvP,signP); | |
3505 | ||
3506 | // Get AliExternalTrackParam out of the AliAODTrack | |
3507 | AliAODTrack *trackN = (AliAODTrack*) v->GetDaughter(1); | |
3508 | //Double_t pxpypzN[3]; trackN->PxPyPz(pxpypzN); | |
3509 | //Double_t xyzN[3]; trackN->XvYvZv(xyzN); | |
3510 | Double_t cvN[21]; trackN->GetCovarianceXYZPxPyPz(cvN); | |
3511 | //Short_t signN=trackN->Charge(); | |
3512 | //AliExternalTrackParam *tN = new AliExternalTrackParam(xyzN,pxpypzN,cvN,signN); | |
3513 | ||
3514 | Double_t xyzV0[3]={x2,y2,z2}; | |
3515 | Double_t pxpypzV0[3]={px2,py2,pz2}; | |
3516 | Double_t cvV0[21]; for (Int_t ii=0; ii<21; ii++) cvV0[ii]=cvP[ii]+cvN[ii]; | |
3517 | AliNeutralTrackParam *trackV0 = new AliNeutralTrackParam(xyzV0,pxpypzV0,cvV0,0); | |
3518 | */ | |
3519 | ||
3520 | // calculation dca | |
3521 | Double_t dd= Det(x2-x1,y2-y1,z2-z1,px1,py1,pz1,px2,py2,pz2); | |
3522 | Double_t ax= Det(py1,pz1,py2,pz2); | |
3523 | Double_t ay=-Det(px1,pz1,px2,pz2); | |
3524 | Double_t az= Det(px1,py1,px2,py2); | |
3525 | ||
3526 | Double_t dca=TMath::Abs(dd)/TMath::Sqrt(ax*ax + ay*ay + az*az); | |
3527 | ||
3528 | // bachelor point @ the DCA | |
3529 | Double_t t1 = Det(x2-x1,y2-y1,z2-z1,px2,py2,pz2,ax,ay,az)/ | |
3530 | Det(px1,py1,pz1,px2,py2,pz2,ax,ay,az); | |
3531 | x1 += px1*t1; y1 += py1*t1; z1 += pz1*t1; | |
3532 | ||
3533 | //propagate track to the point of DCA | |
3534 | Double_t rho1=x1*cs1 + y1*sn1; | |
3535 | if (!t->PropagateTo(rho1,b)) { | |
3536 | Error("PropagateToDCA","Propagation failed !"); | |
3537 | delete t; t=NULL; | |
3538 | return 1.e+33; | |
3539 | } | |
992ba7d8 | 3540 | |
43c7bace | 3541 | Double_t pBachelorDCA[3]; t->GetPxPyPz(pBachelorDCA); |
3542 | pxVtxBachelor=pBachelorDCA[0], pyVtxBachelor=pBachelorDCA[1], pzVtxBachelor=pBachelorDCA[2]; | |
0dbd1d4f | 3543 | |
43c7bace | 3544 | delete t; t=NULL; |
992ba7d8 | 3545 | |
43c7bace | 3546 | // V0 point @ the DCA |
3547 | Double_t t2 = Det(x1-x2,y1-y2,z1-z2,px1,py1,pz1,ax,ay,az)/ | |
3548 | Det(px2,py2,pz2,px1,py1,pz1,ax,ay,az); | |
3549 | x2 += px2*t2; y2 += py2*t2; z2 += pz2*t2; | |
992ba7d8 | 3550 | |
992ba7d8 | 3551 | |
43c7bace | 3552 | // Lc decay vtx |
3553 | xVtxLc = 0.5*(x1+x2); | |
3554 | yVtxLc = 0.5*(y1+y2); | |
3555 | zVtxLc = 0.5*(z1+z2); | |
3556 | ||
3557 | return dca; | |
992ba7d8 | 3558 | |
43c7bace | 3559 | } |
992ba7d8 | 3560 | |
43c7bace | 3561 | //--------------------------- |
3562 | Double_t AliAnalysisTaskSELc2V0bachelor::GetAlpha(Double_t xyz[3],Double_t pxpypz[3]) | |
3563 | { | |
3564 | // | |
3565 | // To estimate alpha according to what done in the AliExternalTrackParam::Set(...) method | |
3566 | // | |
992ba7d8 | 3567 | |
43c7bace | 3568 | Double_t alpha = 0.; |
3569 | ||
3570 | const double kSafe = 1e-5; | |
3571 | Double_t radPos2 = xyz[0]*xyz[0]+xyz[1]*xyz[1]; | |
3572 | Double_t radMax = 45.; // approximately ITS outer radius | |
3573 | if (radPos2 < radMax*radMax) { // inside the ITS | |
3574 | alpha = TMath::ATan2(pxpypz[1],pxpypz[0]); | |
3575 | } else { // outside the ITS | |
3576 | Float_t phiPos = TMath::Pi()+TMath::ATan2(-xyz[1], -xyz[0]); | |
3577 | alpha = | |
3578 | TMath::DegToRad()*(20*((((Int_t)(phiPos*TMath::RadToDeg()))/20))+10); | |
3579 | } | |
992ba7d8 | 3580 | |
43c7bace | 3581 | Double_t cs=TMath::Cos(alpha), sn=TMath::Sin(alpha); |
3582 | // protection: avoid alpha being too close to 0 or +-pi/2 | |
3583 | if (TMath::Abs(sn)<2*kSafe) { | |
3584 | if (alpha>0) alpha += alpha< TMath::Pi()/2. ? 2*kSafe : -2*kSafe; | |
3585 | else alpha += alpha>-TMath::Pi()/2. ? -2*kSafe : 2*kSafe; | |
3586 | cs=TMath::Cos(alpha); | |
3587 | sn=TMath::Sin(alpha); | |
3588 | } | |
3589 | else if (TMath::Abs(cs)<2*kSafe) { | |
3590 | if (alpha>0) alpha += alpha> TMath::Pi()/2. ? 2*kSafe : -2*kSafe; | |
3591 | else alpha += alpha>-TMath::Pi()/2. ? 2*kSafe : -2*kSafe; | |
3592 | cs=TMath::Cos(alpha); | |
3593 | sn=TMath::Sin(alpha); | |
992ba7d8 | 3594 | } |
3595 | ||
3596 | ||
43c7bace | 3597 | return alpha; |
992ba7d8 | 3598 | } |
43c7bace | 3599 | |
3600 | //--------------------------- | |
3601 | Double_t AliAnalysisTaskSELc2V0bachelor::Det(Double_t a00, Double_t a01, | |
3602 | Double_t a10, Double_t a11) const { | |
3603 | //-------------------------------------------------------------------- | |
3604 | // This function calculates locally a 2x2 determinant. | |
3605 | // This is a copy of the AliCascadeVertexer::Det(...) method | |
3606 | //-------------------------------------------------------------------- | |
3607 | return a00*a11 - a01*a10; | |
3608 | } | |
3609 | ||
3610 | //--------------------------- | |
3611 | Double_t AliAnalysisTaskSELc2V0bachelor::Det(Double_t a00,Double_t a01,Double_t a02, | |
3612 | Double_t a10,Double_t a11,Double_t a12, | |
3613 | Double_t a20,Double_t a21,Double_t a22) const { | |
3614 | //-------------------------------------------------------------------- | |
3615 | // This function calculates locally a 3x3 determinant | |
3616 | // This is a copy of the AliCascadeVertexer::Det(...) method | |
3617 | //-------------------------------------------------------------------- | |
3618 | return a00*Det(a11,a12,a21,a22)-a01*Det(a10,a12,a20,a22)+a02*Det(a10,a11,a20,a21); | |
3619 | } | |
3620 | ||
53c91ed7 | 3621 | //---------------------------------------------------------------------------- |
3622 | Int_t AliAnalysisTaskSELc2V0bachelor::MatchToMClabelC(AliAODRecoCascadeHF *candidate, | |
3623 | TClonesArray *mcArray) | |
3624 | { | |
3625 | // | |
3626 | // Check if this candidate is matched to a MC signal Lc -> p K0S + X | |
3627 | // If no, return -1 | |
3628 | // If yes, return label (>=0) of the AliAODMCParticle | |
3629 | // | |
3630 | ||
3631 | AliAODv0 *theV0 = dynamic_cast<AliAODv0*>(candidate->Getv0()); // the V0 | |
3632 | AliVTrack *trk = dynamic_cast<AliVTrack*>(candidate->GetBachelor()); // the bachelor | |
3633 | if (!trk || !theV0) return -1; | |
3634 | ||
3635 | if (trk->GetLabel()==-1) return -1; | |
3636 | Int_t bachLabels = TMath::Abs(trk->GetLabel()); | |
3637 | AliAODMCParticle*bachelorMC = dynamic_cast<AliAODMCParticle*>(mcArray->At(bachLabels)); | |
3638 | if (!bachelorMC) return -1; | |
3639 | if (TMath::Abs(bachelorMC->GetPdgCode())!=2212) return -1; | |
3640 | Int_t indexMotherBach = bachelorMC->GetMother(); | |
3641 | if (indexMotherBach==-1) return -1; | |
3642 | ||
3643 | Int_t pdgDg2prong[2] = {211,211}; | |
3644 | Int_t lab2Prong = theV0->MatchToMC(310,mcArray,2,pdgDg2prong); // the V0 | |
3645 | if(lab2Prong<0) return -1; | |
3646 | AliAODMCParticle*partK0S = dynamic_cast<AliAODMCParticle*>(mcArray->At(lab2Prong)); | |
3647 | if (!partK0S) return -1; | |
3648 | Int_t indexMotherK0S = partK0S->GetMother(); | |
3649 | if (indexMotherK0S==-1) return -1; | |
3650 | AliAODMCParticle*partK0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(indexMotherK0S)); | |
3651 | if (!partK0) return -1; | |
3652 | Int_t indexMotherK0 = partK0->GetMother(); | |
3653 | if (indexMotherK0==-1) return -1; | |
3654 | ||
3655 | if (indexMotherBach!=indexMotherK0) return -1; // p e K0S sono fratelli | |
3656 | ||
3657 | AliAODMCParticle*partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(indexMotherK0)); | |
3658 | if (!partLc) return -1; | |
3659 | Int_t ndg2 = partLc->GetDaughter(1)-partLc->GetDaughter(0)+1; | |
3660 | if (ndg2==2) return -1; | |
3661 | ||
2db138e0 | 3662 | TString stringaCheck = Form(">>>>>>>> %d -> ",partLc->GetPdgCode()); |
53c91ed7 | 3663 | for(Int_t ii=0; ii<ndg2; ii++) { |
3664 | AliAODMCParticle* partDau=(AliAODMCParticle*)(mcArray->At(partLc->GetDaughter(0)+ii)); | |
2db138e0 | 3665 | stringaCheck.Append(Form(" %d",partDau->GetPdgCode())); |
53c91ed7 | 3666 | } |
516f546e | 3667 | //printf("%s \n",stringaCheck.Data()); |
53c91ed7 | 3668 | |
3669 | return indexMotherBach; | |
3670 | ||
3671 | } | |
516f546e | 3672 | //-------------------------------------------------------------------------- |
14fe9f43 | 3673 | Int_t AliAnalysisTaskSELc2V0bachelor::SearchForCommonMother(TClonesArray *mcArray, |
3674 | Int_t dgLabels[10],Int_t ndg, | |
516f546e | 3675 | Int_t &ndgCk, Int_t *pdgDg, Int_t &absLabelMother, Int_t &nDauCand) const |
14fe9f43 | 3676 | { |
3677 | // | |
3678 | // Check if this candidate is matched to a MC signal | |
3679 | // If no, return 0 | |
3680 | // If yes, return pdgCode of particle | |
3681 | // | |
3682 | ||
3683 | Int_t lab=-1,labMother=-1,pdgMother=0; | |
3684 | AliAODMCParticle *part=0; | |
3685 | AliAODMCParticle *mother=0; | |
3686 | ||
3687 | // loop on daughter labels | |
3688 | TArrayI **labelMother = new TArrayI*[ndg]; | |
3689 | for(Int_t i=0; i<ndg; i++) labelMother[i] = new TArrayI(0); | |
3690 | for(Int_t i=0; i<ndg; i++) { | |
3691 | lab = TMath::Abs(dgLabels[i]); | |
3692 | if(lab<0) { | |
516f546e | 3693 | AliDebug(2,Form("daughter with negative label %d",lab)); |
0412dc49 | 3694 | delete [] labelMother; |
14fe9f43 | 3695 | return 0; |
3696 | } | |
3697 | part = (AliAODMCParticle*)mcArray->At(lab); | |
3698 | if(!part) { | |
516f546e | 3699 | AliDebug(2,"no MC particle"); |
0412dc49 | 3700 | delete [] labelMother; |
14fe9f43 | 3701 | return 0; |
3702 | } | |
3703 | ||
3704 | mother = part; | |
3705 | while(mother->GetMother()>=0) { | |
3706 | labMother=mother->GetMother(); | |
3707 | mother = (AliAODMCParticle*)mcArray->At(labMother); | |
3708 | if(!mother) { | |
516f546e | 3709 | AliDebug(2,"no MC mother particle"); |
14fe9f43 | 3710 | break; |
3711 | } | |
3712 | pdgMother = TMath::Abs(mother->GetPdgCode()); | |
3713 | if (pdgMother<10 || (pdgMother>18 && pdgMother<111)) { | |
3714 | break; | |
3715 | } | |
3716 | labelMother[i]->Set(labelMother[i]->GetSize()+1); | |
3717 | labelMother[i]->AddAt(labMother,labelMother[i]->GetSize()-1); | |
3718 | } | |
3719 | ||
3720 | } // end loop on daughters | |
3721 | ||
516f546e | 3722 | |
3723 | TString stringaCheck; | |
14fe9f43 | 3724 | for(Int_t i=0; i<ndg; i++) { |
3725 | AliAODMCParticle*part0 = (AliAODMCParticle*)mcArray->At(TMath::Abs(dgLabels[i])); | |
516f546e | 3726 | stringaCheck.Append(Form("part[%d]->GetLabel()=%d(%d) | ",i,dgLabels[i],part0->GetPdgCode())); |
3727 | stringaCheck.Append(Form("labelMother[%d] = ",i)); | |
14fe9f43 | 3728 | for (Int_t jj=0;jj<labelMother[i]->GetSize(); jj++) |
516f546e | 3729 | stringaCheck.Append(Form("%d, ",labelMother[i]->At(jj))); |
14fe9f43 | 3730 | } |
516f546e | 3731 | printf("%s \n",stringaCheck.Data()); |
14fe9f43 | 3732 | Int_t pdgToBeReturned=0; |
516f546e | 3733 | |
3734 | TString stringaCheck2; | |
3735 | ndgCk=ndg; | |
3736 | pdgDg = new Int_t[ndgCk]; | |
3737 | for (Int_t index=1; index<ndg; index++) { | |
3738 | Bool_t found=kFALSE; | |
3739 | for (Int_t jj=0;jj<labelMother[index]->GetSize(); jj++) { | |
3740 | for (Int_t ii=0;ii<labelMother[0]->GetSize(); ii++) { | |
3741 | if (labelMother[0]->At(ii)==labelMother[index]->At(jj) && | |
14fe9f43 | 3742 | labelMother[0]->At(ii)!=0 && labelMother[0]->At(ii)!=1 && !found) { |
3743 | mother = (AliAODMCParticle*)mcArray->At(labelMother[0]->At(ii)); | |
3744 | pdgToBeReturned=mother->GetPdgCode(); | |
3745 | absLabelMother=labelMother[0]->At(ii); | |
761712c3 | 3746 | AliDebug(2,Form("FOUND label for the mother of this candidate: %d (PDG=%d)\n",labelMother[0]->At(ii),pdgToBeReturned)); |
516f546e | 3747 | //mother->Print(); |
3748 | nDauCand=mother->GetNDaughters(); | |
14fe9f43 | 3749 | found = kTRUE; |
516f546e | 3750 | AliAODMCParticle *partMC = (AliAODMCParticle*)mcArray->At(dgLabels[0]); |
3751 | pdgDg[0]=partMC->GetPdgCode(); | |
3752 | partMC = (AliAODMCParticle*)mcArray->At(dgLabels[index]); | |
3753 | pdgDg[index]=partMC->GetPdgCode(); | |
3754 | if (index==1) stringaCheck2.Append(Form("found daughters -> %d(%d)",dgLabels[0],pdgDg[0])); | |
3755 | stringaCheck2.Append(Form(" %d(%d)",dgLabels[index],pdgDg[index])); | |
14fe9f43 | 3756 | break; |
3757 | } | |
3758 | } | |
516f546e | 3759 | if (found) break; |
14fe9f43 | 3760 | } |
3761 | } | |
516f546e | 3762 | stringaCheck2.Prepend(Form("Ecco quanto trovato: %d(%d) with %d daughters; ",absLabelMother,pdgToBeReturned,nDauCand)); |
3763 | printf("%s \n",stringaCheck2.Data()); | |
14fe9f43 | 3764 | |
3765 | delete [] labelMother; | |
0412dc49 | 3766 | delete pdgDg; |
14fe9f43 | 3767 | |
3768 | return pdgToBeReturned; | |
3769 | ||
3770 | } | |
516f546e | 3771 | |
3772 | void AliAnalysisTaskSELc2V0bachelor::TrackRotation(AliRDHFCutsLctoV0 * cuts, AliAODRecoCascadeHF *part, TString appendthis) | |
3773 | { | |
3774 | ||
3775 | AliAODRecoCascadeHF *partCopy = new AliAODRecoCascadeHF(*part); | |
3776 | ||
3777 | Double_t px[2]={partCopy->PxProng(0),partCopy->PxProng(1)}; | |
3778 | Double_t py[2]={partCopy->PyProng(0),partCopy->PyProng(1)}; | |
3779 | Double_t pz[2]={partCopy->PzProng(0),partCopy->PzProng(1)}; | |
3780 | ||
3781 | Double_t pt = partCopy->Pt(); | |
3782 | Int_t pdgD=4122; | |
3783 | UInt_t pdgLc2pK0S[2]={2212,310}; | |
3784 | Double_t minv2 = partCopy->InvMass2(2,pdgLc2pK0S); | |
3785 | Double_t mass=TMath::Sqrt(minv2); | |
3786 | Double_t rapid = partCopy->Y(pdgD); | |
3787 | ||
b833016c | 3788 | TString fillthis; |
3789 | ||
516f546e | 3790 | if ( ( ( (cuts->IsSelected(part,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) ) { |
b833016c | 3791 | fillthis="hMassVsPtVsY"+appendthis; |
3792 | //cout << fillthis << endl; | |
516f546e | 3793 | ((TH3F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(mass,pt,rapid); |
b833016c | 3794 | |
3795 | fillthis="phiVSthetaVSpt"+appendthis; | |
3796 | //cout << fillthis << endl; | |
3797 | ((TH3F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,part->Phi(),part->Theta()); | |
516f546e | 3798 | } |
3799 | ||
3800 | Int_t nRotated=0; | |
3801 | Double_t massRot=0;// calculated later only if candidate is acceptable | |
3802 | // Double_t angleProngXY=TMath::ACos((px[0]*px[1]+py[0]*py[1])/TMath::Sqrt((px[0]*px[0]+py[0]*py[0])*(px[1]*px[1]+py[1]*py[1]))); | |
3803 | // Double_t ptOrig=pt; | |
3804 | Double_t rotStep=(fMaxAngleForRot-fMinAngleForRot)/(fNRotations-1); // -1 is to ensure that the last rotation is done with angle=fMaxAngleForRot | |
3805 | ||
3806 | for(Int_t irot=0; irot<fNRotations; irot++){ | |
3807 | Double_t phirot=fMinAngleForRot+rotStep*irot; | |
3808 | Double_t tmpx=px[0]; | |
3809 | Double_t tmpy=py[0]; | |
3810 | px[0]=tmpx*TMath::Cos(phirot)-tmpy*TMath::Sin(phirot); | |
3811 | py[0]=tmpx*TMath::Sin(phirot)+tmpy*TMath::Cos(phirot); | |
3812 | partCopy->SetPxPyPzProngs(2,px,py,pz); | |
3813 | pt = partCopy->Pt(); | |
3814 | minv2 = partCopy->InvMass2(2,pdgLc2pK0S); | |
3815 | massRot=TMath::Sqrt(minv2); | |
3816 | rapid = partCopy->Y(pdgD); | |
3817 | //if(minv2>fMinMass*fMinMass && minv2<fMaxMass*fMaxMass){ | |
b833016c | 3818 | if ( cuts->IsInFiducialAcceptance(pt,partCopy->Y(4122)) ) { |
3819 | if ( ((cuts->IsSelected(partCopy,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3820 | ||
3821 | fillthis="histLcMassByK0S"+appendthis; | |
3822 | //cout << fillthis << endl; | |
3823 | ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(massRot,pt); | |
3824 | ||
3825 | fillthis="hMassVsPtVsYRot"+appendthis; | |
3826 | //cout << fillthis << endl; | |
3827 | ((TH3F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(mass,pt,rapid); | |
3828 | ||
3829 | fillthis="phiVSthetaVSptRot"+appendthis; | |
3830 | //cout << fillthis << endl; | |
3831 | ((TH3F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,partCopy->Phi(),partCopy->Theta()); | |
3832 | ||
3833 | fillthis="hDeltaMass"+appendthis; | |
3834 | //cout << fillthis << endl; | |
3835 | ((TH1F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(massRot-mass); | |
3836 | //if(fFullAnalysis){ | |
3837 | //Double_t pointRot[5]={mass,massRot-mass,ptOrig,pt-ptOrig,angleProngXY}; | |
3838 | //fillthis="hDeltaMassFullAnalysis"+appendthis; | |
3839 | ////cout << fillthis << endl; | |
3840 | //((THnSparse*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pointRot); | |
3841 | //} | |
3842 | nRotated++; | |
3843 | //} | |
3844 | } | |
3845 | ||
3846 | // fill additional histos for track-rotated candidates | |
3847 | fillthis="histptK0S"+appendthis; | |
3848 | //cout << fillthis << endl; | |
3849 | cuts->SetExcludedCut(15); | |
3850 | if ( ((cuts->IsSelected(partCopy,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3851 | ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,TMath::Sqrt(px[1]*px[1]+py[1]*py[1])); | |
3852 | } | |
3853 | ||
3854 | fillthis="histptP"+appendthis; | |
3855 | //cout << fillthis << endl; | |
3856 | cuts->SetExcludedCut(4); | |
3857 | if ( ((cuts->IsSelected(partCopy,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3858 | ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,TMath::Sqrt(px[0]*px[0]+py[0]*py[0])); | |
3859 | } | |
3860 | ||
3861 | fillthis="histptPip"+appendthis; | |
3862 | //cout << fillthis << endl; | |
3863 | cuts->SetExcludedCut(5); | |
3864 | if ( ((cuts->IsSelected(partCopy,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3865 | ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,(partCopy->Getv0PositiveTrack())->Pt()); | |
3866 | } | |
3867 | ||
3868 | fillthis="histptPim"+appendthis; | |
3869 | //cout << fillthis << endl; | |
3870 | cuts->SetExcludedCut(6); | |
3871 | if ( ((cuts->IsSelected(partCopy,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3872 | ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,(partCopy->Getv0NegativeTrack())->Pt()); | |
3873 | } | |
3874 | ||
3875 | fillthis="histLambdaMass"+appendthis; | |
3876 | //cout << fillthis << endl; | |
3877 | cuts->SetExcludedCut(13); | |
3878 | if ( ((cuts->IsSelected(partCopy,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3879 | ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,(partCopy->Getv0())->MassLambda()); | |
3880 | } | |
3881 | ||
3882 | fillthis="histLambdaBarMass"+appendthis; | |
3883 | //cout << fillthis << endl; | |
3884 | cuts->SetExcludedCut(13); | |
3885 | if ( ((cuts->IsSelected(partCopy,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3886 | ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,(partCopy->Getv0())->MassAntiLambda()); | |
3887 | } | |
3888 | ||
3889 | fillthis="histGammaMass"+appendthis; | |
3890 | //cout << fillthis << endl; | |
3891 | cuts->SetExcludedCut(14); | |
3892 | if ( ((cuts->IsSelected(partCopy,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3893 | ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,(partCopy->Getv0())->InvMass2Prongs(0,1,11,11)); | |
3894 | } | |
3895 | ||
3896 | fillthis="histCosPAK0S"+appendthis; | |
3897 | //cout << fillthis << endl; | |
3898 | cuts->SetExcludedCut(9); | |
3899 | if ( ((cuts->IsSelected(partCopy,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) { | |
3900 | ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,partCopy->CosV0PointingAngle()); | |
3901 | } | |
3902 | cuts->SetExcludedCut(-1); | |
3903 | ||
3904 | } // isInFiducialAcceptance | |
3905 | ||
516f546e | 3906 | px[0]=tmpx; |
3907 | py[0]=tmpy; | |
3908 | } | |
3909 | fillthis="hNormRotated"+appendthis; | |
b833016c | 3910 | //cout << fillthis << endl; |
516f546e | 3911 | ((TH1F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(nRotated); |
3912 | ||
3913 | delete partCopy; | |
3914 | ||
3915 | return; | |
3916 | ||
3917 | } |