1 /**************************************************************************
2 * Author : Benjamin Dönigus (benjamin.doenigus@cern.ch) *
4 * Contributors are mentioned in the code where appropriate. *
6 * Permission to use, copy, modify and distribute this software and its *
7 * documentation strictly for non-commercial purposes is hereby granted *
8 * without fee, provided that the above copyright notice appears in all *
9 * copies and that both the copyright notice and this permission notice *
10 * appear in the supporting documentation. The authors make no claims *
11 * about the suitability of this software for any purpose. It is *
12 * provided "as is" without express or implied warranty. *
13 **************************************************************************/
15 //-----------------------------------------------------------------
16 // AliAnalysisTaskHdibaryonLPpi class
17 // used to search for the H-Dibaryon in weak
18 // (Lambda Proton Pion) and strong (Lambda Lambda) decays
19 //-----------------------------------------------------------------
21 #include "Riostream.h"
32 #include "TParticle.h"
34 #include "TObjString.h"
35 #include "TLorentzVector.h"
36 #include "TDatabasePDG.h"
38 #include "AliAnalysisTask.h"
39 #include "AliAnalysisManager.h"
40 #include "AliMCEventHandler.h"
41 #include "AliMCEvent.h"
44 #include "AliESDpid.h"
45 #include "AliESDEvent.h"
46 #include "AliGenEventHeader.h"
47 #include "AliESDInputHandler.h"
50 #include "AliHeader.h"
52 #include "AliKFParticle.h"
53 #include "AliKFVertex.h"
54 #include "AliESDtrackCuts.h"
55 #include "AliESDv0Cuts.h"
56 #include "AliAnalysisTaskHdibaryonLPpi.h"
63 #include "TParallelCoord.h"
65 #include "AliMCParticle.h"
66 #include "AliGenPythiaEventHeader.h"
69 #include "AliESDtrack.h"
70 #include "AliCentrality.h"
72 #include "THnSparse.h"
74 #include "AliVertexerTracks.h"
77 ClassImp(AliAnalysisTaskHdibaryonLPpi)
78 //________________________________________________________________________
79 AliAnalysisTaskHdibaryonLPpi::AliAnalysisTaskHdibaryonLPpi() : AliAnalysisTaskSE()/*AliAnalysisTask(name, ""), fMCEvent(0)*/, fESD(0), fESDtrackCutsV0(0),
89 fHistMassLambdaPPi(0),
99 fHistArmenterosPodolanski(0),
100 fHistArmenterosPodolanskiCut(0),
101 fHistHDibaryonInvaMassGen(0),
102 fHistHDibaryonInvaMassGenRes(0),
103 fHistAntiHDibaryonInvaMassGen(0),
104 fHistHDibaryonInvaMassAso(0),
105 fHistHDibaryonInvaMassAsoReso(0),
106 fHistAntiHDibaryonInvaMassAso(0),
108 fHistHPointingAngle(0),
110 fHistMassLambdaFromH(0),
111 fHistMassLambdaFromHtLorentz(0),
118 fHistProtonPIDLambda(0),
119 fHistPionPIDLambda(0),
120 fHistMCdcaPvtxDvtx(0),
121 fHistMCdcaPvtxLvtx(0),
122 fHistMCdcaDvtxLvtx(0),
124 fHistMCdecayAngle(0),
125 fHistMCpointingAngle(0),
127 fHistMCdcaPvtxDvtxReso(0),
128 fHistMCdcaPvtxLvtxReso(0),
129 fHistMCdcaDvtxLvtxReso(0),
130 fHistMCangleLHReso(0),
131 fHistMCdecayAngleReso(0),
132 fHistMCpointingAngleReso(0),
135 fHistCentralityAC(0),
136 fHistMultiplicity(0),
151 fHistTriggerStatAfterEventSelection(0),
152 fHistMassHcentMult(0),
155 // DefaultConstructor
159 //________________________________________________________________________
160 AliAnalysisTaskHdibaryonLPpi::AliAnalysisTaskHdibaryonLPpi(const char *name) : AliAnalysisTaskSE(name)/*AliAnalysisTask(name, ""), fMCEvent(0)*/, fESD(0), fESDtrackCutsV0(0),
168 fHistMassLambdaPi(0),
170 fHistMassLambdaPPi(0),
180 fHistArmenterosPodolanski(0),
181 fHistArmenterosPodolanskiCut(0),
182 fHistHDibaryonInvaMassGen(0),
183 fHistHDibaryonInvaMassGenRes(0),
184 fHistAntiHDibaryonInvaMassGen(0),
185 fHistHDibaryonInvaMassAso(0),
186 fHistHDibaryonInvaMassAsoReso(0),
187 fHistAntiHDibaryonInvaMassAso(0),
189 fHistHPointingAngle(0),
191 fHistMassLambdaFromH(0),
192 fHistMassLambdaFromHtLorentz(0),
199 fHistProtonPIDLambda(0),
200 fHistPionPIDLambda(0),
201 fHistMCdcaPvtxDvtx(0),
202 fHistMCdcaPvtxLvtx(0),
203 fHistMCdcaDvtxLvtx(0),
205 fHistMCdecayAngle(0),
206 fHistMCpointingAngle(0),
208 fHistMCdcaPvtxDvtxReso(0),
209 fHistMCdcaPvtxLvtxReso(0),
210 fHistMCdcaDvtxLvtxReso(0),
211 fHistMCangleLHReso(0),
212 fHistMCdecayAngleReso(0),
213 fHistMCpointingAngleReso(0),
216 fHistCentralityAC(0),
217 fHistMultiplicity(0),
232 fHistTriggerStatAfterEventSelection(0),
233 fHistMassHcentMult(0),
239 // Define input and output slots here
240 // Input from a TChain
241 DefineInput(0, TChain::Class());
242 // Output to TList container
243 DefineOutput(1, TList::Class()); //full
246 if (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())SetHasMC();
250 fESDtrackCutsV0 = new AliESDtrackCuts("AliESDtrackCutsV0","AliESDtrackCutsV0");
251 fESDtrackCutsV0->SetAcceptKinkDaughters(kFALSE);
252 fESDtrackCutsV0->SetMinNClustersTPC(80);
253 fESDtrackCutsV0->SetMaxChi2PerClusterTPC(5);
254 fESDtrackCutsV0->SetRequireTPCRefit(kTRUE);
255 fESDtrackCutsV0->SetEtaRange(-0.9,0.9);
256 fESDtrackCutsV0->SetPtRange(0.2,1.5);
257 fESDtrackCutsV0->SetMinDCAToVertexXY(3);
258 fESDtrackCutsV0->SetMinDCAToVertexZ(3);
260 fESDCutsV0 = new AliESDv0Cuts("AliESDCutsV0","AliESDCutsV0");
261 fESDCutsV0->SetMaxDcaV0Daughters(1.0);
262 fESDCutsV0->SetMinDcaNegToVertex(2.0);
263 fESDCutsV0->SetMinDcaPosToVertex(2.0);
266 fEsdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts");
267 fEsdTrackCuts->SetMinNClustersTPC(80);
268 fEsdTrackCuts->SetAcceptKinkDaughters(kFALSE);
269 fEsdTrackCuts->SetMaxChi2PerClusterTPC(5);
270 fEsdTrackCuts->SetRequireTPCRefit(kTRUE);
271 fEsdTrackCuts->SetEtaRange(-0.9,0.9);
274 //____________________________________________________________
275 AliAnalysisTaskHdibaryonLPpi::~AliAnalysisTaskHdibaryonLPpi(){
283 if(fEsdTrackCuts) delete fEsdTrackCuts;
284 if(fESDtrackCutsV0) delete fESDtrackCutsV0;
285 if(fESDCutsV0) delete fESDCutsV0;
289 //________________________________________________________________________
290 void AliAnalysisTaskHdibaryonLPpi::UserCreateOutputObjects()
295 fHistList = new TList();
297 fHistMassDPi = new TH1F("fHistMassDPi", "Invariant mass distribution p+#pi^{-} ", 500, 1.0, 1.25);
298 fHistMassDPi->GetXaxis()->SetTitle("Invariant mass p+#pi^{-} (GeV/c^{2})");
299 fHistMassDPi->GetYaxis()->SetTitle("Entries");
300 fHistMassDPi->SetMarkerStyle(kFullCircle);
302 fHistMassLPi = new TH1F("fHistMassLPi", "Offline Invariant mass distribution p+#pi^{-} ", 500, 1.0, 1.25);
303 fHistMassLPi->GetXaxis()->SetTitle("Invariant mass p+#pi^{-} (GeV/c^{2})");
304 fHistMassLPi->GetYaxis()->SetTitle("Entries");
305 fHistMassLPi->SetMarkerStyle(kFullCircle);
307 fHistMassLambdaPi = new TH1F("fHistMassLambdaPi", "Invariant mass distribution #Lambda+#pi^{-} ", 500, 1.2, 1.5);
308 fHistMassLambdaPi->GetXaxis()->SetTitle("Invariant mass #Lambda+#pi^{-} (GeV/c^{2})");
309 fHistMassLambdaPi->GetYaxis()->SetTitle("Entries");
310 fHistMassLambdaPi->SetMarkerStyle(kFullCircle);
312 fHistMassLambda = new TH1F("fHistMassLambda", "Invariant mass distribution of #Lambda for further analyis", 500, 1.0, 1.2);
313 fHistMassLambda->GetXaxis()->SetTitle("Invariant mass p+#pi^{+} (GeV/c^{2})");
314 fHistMassLambda->GetYaxis()->SetTitle("Entries");
315 fHistMassLambda->SetMarkerStyle(kFullCircle);
317 fHistMassLambdaPPi = new TH1F("fHistMassLambdaPPi", "Invariant mass distribution #Lambdap#pi^{-} ", 300, 2.2, 2.5);
318 fHistMassLambdaPPi->GetXaxis()->SetTitle("Invariant mass #Lambdap#pi^{-} (GeV/c^{2})");
319 fHistMassLambdaPPi->GetYaxis()->SetTitle("Entries");
320 fHistMassLambdaPPi->SetMarkerStyle(kFullCircle);
322 fHistMassLambdaP = new TH1F("fHistMassLambdaP", "Invariant mass distribution #Lambdap ", 300, 2.2, 2.5);
323 fHistMassLambdaP->GetXaxis()->SetTitle("Invariant mass #Lambdap (GeV/c^{2})");
324 fHistMassLambdaP->GetYaxis()->SetTitle("Entries");
325 fHistMassLambdaP->SetMarkerStyle(kFullCircle);
327 fHistMassLambdaK = new TH1F("fHistMassLambdaK", "Invariant mass distribution #LambdaK^{-} ", 300, 1.6, 1.9);
328 fHistMassLambdaK->GetXaxis()->SetTitle("Invariant mass #LambdaK^{-} (GeV/c^{2})");
329 fHistMassLambdaK->GetYaxis()->SetTitle("Entries");
330 fHistMassLambdaK->SetMarkerStyle(kFullCircle);
332 fHistMassK0onl = new TH1F("fHistMassK0onl", "Invariant mass distribution K_{s}^{0} online V0 finder ", 400, 0.2, 1.0);
333 fHistMassK0onl->GetXaxis()->SetTitle("Invariant mass #pi^{+}#pi^{-} (GeV/c^{2})");
334 fHistMassK0onl->GetYaxis()->SetTitle("Entries");
335 fHistMassK0onl->SetMarkerStyle(kFullCircle);
337 fHistMassK0offl = new TH1F("fHistMassK0offl", "Invariant mass distribution K_{s}^{0} offline V0 finder ", 400, 0.2, 1.0);
338 fHistMassK0offl->GetXaxis()->SetTitle("Invariant mass #pi^{+}#pi^{-} (GeV/c^{2})");
339 fHistMassK0offl->GetYaxis()->SetTitle("Entries");
340 fHistMassK0offl->SetMarkerStyle(kFullCircle);
342 fHistMassK0onlC = new TH1F("fHistMassK0onlC", "Invariant mass distribution K_{s}^{0} online V0 finder ", 400, 0.2, 1.0);
343 fHistMassK0onlC->GetXaxis()->SetTitle("Invariant mass #pi^{+}#pi^{-} (GeV/c^{2})");
344 fHistMassK0onlC->GetYaxis()->SetTitle("Entries");
345 fHistMassK0onlC->SetMarkerStyle(kFullCircle);
347 fHistMassK0offlC = new TH1F("fHistMassK0offlC", "Invariant mass distribution K_{s}^{0} offline V0 finder ", 400, 0.2, 1.0);
348 fHistMassK0offlC->GetXaxis()->SetTitle("Invariant mass #pi^{+}#pi^{-} (GeV/c^{2})");
349 fHistMassK0offlC->GetYaxis()->SetTitle("Entries");
350 fHistMassK0offlC->SetMarkerStyle(kFullCircle);
352 fHistMassPQonl = new TH1F("fHistMassPQonl", "Invariant mass distribution K_{s}^{0}p using online V0 finder ", 500, 1.3, 2.3);
353 fHistMassPQonl->GetXaxis()->SetTitle("Invariant mass K_{s}^{0}p (GeV/c^{2})");
354 fHistMassPQonl->GetYaxis()->SetTitle("Entries");
355 fHistMassPQonl->SetMarkerStyle(kFullCircle);
357 fHistMassPQoffl = new TH1F("fHistMassPQoffl", "Invariant mass distribution K_{s}^{0}p using offline V0 finder ", 500, 1.3, 2.3);
358 fHistMassPQoffl->GetXaxis()->SetTitle("Invariant mass K_{s}^{0}p (GeV/c^{2})");
359 fHistMassPQoffl->GetYaxis()->SetTitle("Entries");
360 fHistMassPQoffl->SetMarkerStyle(kFullCircle);
362 fHistDC = new TH1F("fHistDC", "Proper decay length", 500, 0.0, 25);
363 fHistDC->GetXaxis()->SetTitle("c#tau (cm)");
364 fHistDC->GetYaxis()->SetTitle("Entries");
365 fHistDC->SetMarkerStyle(kFullCircle);
367 fHistArmenterosPodolanski = new TH2F("fHistArmenterosPodolanski", "Armenteros-Podolanski plot", 200,-1.0,1.0, 500,0,1);
368 fHistArmenterosPodolanski->GetXaxis()->SetTitle("#alpha");
369 fHistArmenterosPodolanski->GetYaxis()->SetTitle("q_{t}");
370 fHistArmenterosPodolanski->SetMarkerStyle(kFullCircle);
372 fHistArmenterosPodolanskiCut = new TH2F("fHistArmenterosPodolanskiCut", "Armenteros-Podolanski plot after cut", 200,-1.0,1.0, 500,0,1);
373 fHistArmenterosPodolanskiCut->GetXaxis()->SetTitle("#alpha");
374 fHistArmenterosPodolanskiCut->GetYaxis()->SetTitle("q_{t}");
375 fHistArmenterosPodolanskiCut->SetMarkerStyle(kFullCircle);
377 fHistHDibaryonInvaMassGen = new TH1F("fHistHDibaryonInvaMassGen", "Generated #Lambda p #pi^{-}", 200, 2.1, 2.3);
378 fHistHDibaryonInvaMassGen->GetYaxis()->SetTitle("Counts");
379 fHistHDibaryonInvaMassGen->GetXaxis()->SetTitle("Invariant mass (GeV/c^{2})");
381 fHistHDibaryonInvaMassGenRes = new TH1F("fHistHDibaryonInvaMassGenRes", "Generated #Lambda p #pi^{-} with particles in rapidity!!!", 200, 2.1, 2.3);
382 fHistHDibaryonInvaMassGenRes->GetYaxis()->SetTitle("Counts");
383 fHistHDibaryonInvaMassGenRes->GetXaxis()->SetTitle("Invariant mass (GeV/c^{2})");
385 fHistAntiHDibaryonInvaMassGen = new TH1F("fHistAntiHDibaryonInvaMassGen", "Generated #bar{#Lambda} #bar{p} #pi^{+}", 200, 2.1, 2.3);
386 fHistAntiHDibaryonInvaMassGen->GetYaxis()->SetTitle("Counts");
387 fHistAntiHDibaryonInvaMassGen->GetXaxis()->SetTitle("Invariant mass (GeV/c^{2})");
389 fHistHDibaryonInvaMassAso = new TH1F("fHistHDibaryonInvaMassAso", "Associated #Lambda p #pi^{-}", 200, 2.1, 2.3);
390 fHistHDibaryonInvaMassAso->GetYaxis()->SetTitle("Counts");
391 fHistHDibaryonInvaMassAso->GetXaxis()->SetTitle("Invariant mass (GeV/c^{2})");
393 fHistHDibaryonInvaMassAsoReso = new TH1F("fHistHDibaryonInvaMassAsoReso", "Associated #Lambda p #pi^{-}", 200, 2.1, 2.3);
394 fHistHDibaryonInvaMassAsoReso->GetYaxis()->SetTitle("Counts");
395 fHistHDibaryonInvaMassAsoReso->GetXaxis()->SetTitle("Invariant mass (GeV/c^{2})");
397 fHistAntiHDibaryonInvaMassAso = new TH1F("fHistAntiHDibaryonInvaMassAso", "Associated #bar{#Lambda} #bar{p} #pi^{+}", 200, 2.1, 2.3);
398 fHistAntiHDibaryonInvaMassAso->GetYaxis()->SetTitle("Counts");
399 fHistAntiHDibaryonInvaMassAso->GetXaxis()->SetTitle("Invariant mass (GeV/c^{2})");
401 fHistCheck = new TH2F("fHistCheck", "Check online/offline", 200, -0.5, 1.5, 200, -0.5, 1.5);
402 fHistCheck->GetXaxis()->SetTitle("offline");
403 fHistCheck->GetYaxis()->SetTitle("online");
404 fHistCheck->SetMarkerStyle(kFullCircle);
406 fHistHPointingAngle= new TH1F("fHistHPointingAngle", "Pointing angle distribution for #Lambdap#pi^{-}", 200, 0., 2*TMath::Pi());
407 fHistHPointingAngle->GetXaxis()->SetTitle("Pointing angle distribution for #Lambdap#pi^{-}");
408 fHistHPointingAngle->GetYaxis()->SetTitle("Entries");
409 fHistHPointingAngle->SetMarkerStyle(kFullCircle);
411 fHistMassH= new TH1F("fHistMassH", "Invariant mass distribution #Lambdap#pi^{-} (GeV/c^{2}) after pointing angle cut", 3000, 2.2, 2.5);
412 fHistMassH->GetXaxis()->SetTitle("Invariant mass #Lambdap#pi^{-} (GeV/c^{2})");
413 fHistMassH->GetYaxis()->SetTitle("Entries");
414 fHistMassH->SetMarkerStyle(kFullCircle);
416 fHistMassLambdaFromH= new TH1F("fHistMassLambdaFromH", "Invariant mass distribution #Lambda (GeV/c^{2}) asking for Mother to be H", 300, 1.0, 1.3);
417 fHistMassLambdaFromH->GetXaxis()->SetTitle("Invariant mass #Lambda (GeV/c^{2})");
418 fHistMassLambdaFromH->GetYaxis()->SetTitle("Entries");
419 fHistMassLambdaFromH->SetMarkerStyle(kFullCircle);
421 fHistMassLambdaFromHtLorentz= new TH1F("fHistMassLambdaFromHtLorentz", "Invariant mass distribution #Lambda (GeV/c^{2}) asking for Mother to be H", 300, 1.0, 1.3);
422 fHistMassLambdaFromHtLorentz->GetXaxis()->SetTitle("Invariant mass #Lambda (GeV/c^{2})");
423 fHistMassLambdaFromHtLorentz->GetYaxis()->SetTitle("Entries");
424 fHistMassLambdaFromHtLorentz->SetMarkerStyle(kFullCircle);
426 fHistMassPpi= new TH1F("fHistMassPpi", "Invariant mass distribution of the p#pi^{-} used for combing with Lambda", 300, 1.0, 1.6);
427 fHistMassPpi->GetXaxis()->SetTitle("Invariant mass p#pi^{-} (GeV/c^{2})");
428 fHistMassPpi->GetYaxis()->SetTitle("Entries");
429 fHistMassPpi->SetMarkerStyle(kFullCircle);
431 fHistMassPpiReso= new TH1F("fHistMassPpiReso", "Invariant mass distribution of the p#pi^{-} used for combing with Lambda", 300, 1.0, 1.6);
432 fHistMassPpiReso->GetXaxis()->SetTitle("Invariant mass p#pi^{-} (GeV/c^{2})");
433 fHistMassPpiReso->GetYaxis()->SetTitle("Entries");
434 fHistMassPpiReso->SetMarkerStyle(kFullCircle);
436 fHistMassLpi= new TH1F("fHistMassLpi", "Invariant mass distribution of the #Lambda#pi^{-} used for combing with p", 300, 1.1, 1.7);
437 fHistMassLpi->GetXaxis()->SetTitle("Invariant mass #Lambda#pi^{-} (GeV/c^{2})");
438 fHistMassLpi->GetYaxis()->SetTitle("Entries");
439 fHistMassLpi->SetMarkerStyle(kFullCircle);
441 fHistMassLP= new TH1F("fHistMassLP", "Invariant mass distribution of the #Lambda p used for combing with #pi^{-}", 300, 2.0, 2.3);
442 fHistMassLP->GetXaxis()->SetTitle("Invariant mass #Lambda p (GeV/c^{2})");
443 fHistMassLP->GetYaxis()->SetTitle("Entries");
444 fHistMassLP->SetMarkerStyle(kFullCircle);
446 fHistProtonPIDBb = new TH2F("fHistProtonPIDBb", "dE/dx after p PID", 100, 0., 10, 100, 0, 100);
447 fHistProtonPIDBb->GetYaxis()->SetTitle("TPC Signal");
448 fHistProtonPIDBb->GetXaxis()->SetTitle("P (GeV/c)");
449 fHistProtonPIDBb->SetOption("scat");
450 fHistProtonPIDBb->SetMarkerStyle(kFullCircle);
452 fHistPionPIDBb = new TH2F("fHistPionPIDBb", "dE/dx after K PID", 100, 0., 10, 100, 0, 100);
453 fHistPionPIDBb->GetYaxis()->SetTitle("TPC Signal");
454 fHistPionPIDBb->GetXaxis()->SetTitle("P (GeV/c)");
455 fHistPionPIDBb->SetOption("scat");
456 fHistPionPIDBb->SetMarkerStyle(kFullCircle);
458 fHistProtonPIDLambda = new TH2F("fHistProtonPIDLambda", "dE/dx after p PID from V0", 100, 0., 10, 100, 0, 100);
459 fHistProtonPIDLambda->GetYaxis()->SetTitle("TPC Signal");
460 fHistProtonPIDLambda->GetXaxis()->SetTitle("P (GeV/c)");
461 fHistProtonPIDLambda->SetOption("scat");
462 fHistProtonPIDLambda->SetMarkerStyle(kFullCircle);
464 fHistPionPIDLambda = new TH2F("fHistPionPIDLambda", "dE/dx after #pi PID from V0", 100, 0, 10, 100, 0, 100);
465 fHistPionPIDLambda->GetYaxis()->SetTitle("TPC Signal");
466 fHistPionPIDLambda->GetXaxis()->SetTitle("P (GeV/c)");
467 fHistPionPIDLambda->SetOption("scat");
468 fHistPionPIDLambda->SetMarkerStyle(kFullCircle);
470 fHistMCdcaPvtxDvtx= new TH1F("fHistMCdcaPvtxDvtx", "MC True DCA Primary Vertex - H Decay Vertex", 300, -0.1, 11.9);
471 fHistMCdcaPvtxDvtx->GetXaxis()->SetTitle("dca prim. vtx- decay vtx (cm)");
472 fHistMCdcaPvtxDvtx->GetYaxis()->SetTitle("Entries");
473 fHistMCdcaPvtxDvtx->SetMarkerStyle(kFullCircle);
475 fHistMCdcaPvtxLvtx= new TH1F("fHistMCdcaPvtxLvtx", "MC True DCA Primary Vertex - Lambda Decay Vertex", 300, -0.1, 11.9);
476 fHistMCdcaPvtxLvtx->GetXaxis()->SetTitle("dca prim. vtx-#Lambda decay vtx (cm)");
477 fHistMCdcaPvtxLvtx->GetYaxis()->SetTitle("Entries");
478 fHistMCdcaPvtxLvtx->SetMarkerStyle(kFullCircle);
480 fHistMCdcaDvtxLvtx= new TH1F("fHistMCdcaDvtxLvtx", "MC True DCA H Decay Vertex - Lambda Decay Vertex", 300, -0.1, 11.9);
481 fHistMCdcaDvtxLvtx->GetXaxis()->SetTitle("dca H deacy vtx-#Lambda decay vtx (cm)");
482 fHistMCdcaDvtxLvtx->GetYaxis()->SetTitle("Entries");
483 fHistMCdcaDvtxLvtx->SetMarkerStyle(kFullCircle);
485 fHistMCangleLH= new TH1F("fHistMCangleLH", "MC True Angle between #Lambda and H", 300, 0., 2*TMath::Pi());
486 fHistMCangleLH->GetXaxis()->SetTitle("Angle (#Lambda-H)");
487 fHistMCangleLH->GetYaxis()->SetTitle("Entries");
488 fHistMCangleLH->SetMarkerStyle(kFullCircle);
490 fHistMCdecayAngle= new TH1F("fHistMCdecayAngle", "MC True Angle between decay products", 300, 0., 2*TMath::Pi());
491 fHistMCdecayAngle->GetXaxis()->SetTitle("Angle (#Lambda-p#pi)");
492 fHistMCdecayAngle->GetYaxis()->SetTitle("Entries");
493 fHistMCdecayAngle->SetMarkerStyle(kFullCircle);
495 fHistMCpointingAngle= new TH1F("fHistMCpointingAngle", "MC True Pointing Angle", 3000, 0., 2*TMath::Pi());
496 fHistMCpointingAngle->GetXaxis()->SetTitle("Pointing Angle");
497 fHistMCpointingAngle->GetYaxis()->SetTitle("Entries");
498 fHistMCpointingAngle->SetMarkerStyle(kFullCircle);
500 fHistMCap = new TH2F("fHistMCap", "True MC Armenteros-Podolanski", 200,-1.0,1.0, 500,0,1);
501 fHistMCap->GetYaxis()->SetTitle("#alpha");
502 fHistMCap->GetXaxis()->SetTitle("q_{t}");
503 fHistMCap->SetOption("scat");
504 fHistMCap->SetMarkerStyle(kFullCircle);
506 fHistMCdcaPvtxDvtxReso= new TH1F("fHistMCdcaPvtxDvtxReso", "MC True DCA Primary Vertex - H Decay Vertex", 300, -0.1, 11.9);
507 fHistMCdcaPvtxDvtxReso->GetXaxis()->SetTitle("dca prim. vtx- decay vtx (cm)");
508 fHistMCdcaPvtxDvtxReso->GetYaxis()->SetTitle("Entries");
509 fHistMCdcaPvtxDvtxReso->SetMarkerStyle(kFullCircle);
511 fHistMCdcaPvtxLvtxReso= new TH1F("fHistMCdcaPvtxLvtxReso", "MC True DCA Primary Vertex - Lambda Decay Vertex", 300, -0.1, 11.9);
512 fHistMCdcaPvtxLvtxReso->GetXaxis()->SetTitle("dca prim. vtx-#Lambda decay vtx (cm)");
513 fHistMCdcaPvtxLvtxReso->GetYaxis()->SetTitle("Entries");
514 fHistMCdcaPvtxLvtxReso->SetMarkerStyle(kFullCircle);
516 fHistMCdcaDvtxLvtxReso= new TH1F("fHistMCdcaDvtxLvtxReso", "MC True DCA H Decay Vertex - Lambda Decay Vertex", 300, -0.1, 11.9);
517 fHistMCdcaDvtxLvtxReso->GetXaxis()->SetTitle("dca H deacy vtx-#Lambda decay vtx (cm)");
518 fHistMCdcaDvtxLvtxReso->GetYaxis()->SetTitle("Entries");
519 fHistMCdcaDvtxLvtxReso->SetMarkerStyle(kFullCircle);
521 fHistMCangleLHReso= new TH1F("fHistMCangleLHReso", "MC True Angle between #Lambda and H", 300, 0., 2*TMath::Pi());
522 fHistMCangleLHReso->GetXaxis()->SetTitle("Angle (#Lambda-H)");
523 fHistMCangleLHReso->GetYaxis()->SetTitle("Entries");
524 fHistMCangleLHReso->SetMarkerStyle(kFullCircle);
526 fHistMCdecayAngleReso= new TH1F("fHistMCdecayAngleReso", "MC True Angle between decay products", 300, 0., 2*TMath::Pi());
527 fHistMCdecayAngleReso->GetXaxis()->SetTitle("Angle (#Lambda-p#pi)");
528 fHistMCdecayAngleReso->GetYaxis()->SetTitle("Entries");
529 fHistMCdecayAngleReso->SetMarkerStyle(kFullCircle);
531 fHistMCpointingAngleReso= new TH1F("fHistMCpointingAngleReso", "MC True Pointing Angle", 300, 0., 2*TMath::Pi());
532 fHistMCpointingAngleReso->GetXaxis()->SetTitle("Pointing Angle");
533 fHistMCpointingAngleReso->GetYaxis()->SetTitle("Entries");
534 fHistMCpointingAngleReso->SetMarkerStyle(kFullCircle);
536 fHistMCapReso = new TH2F("fHistMCapReso", "True MC Armenteros-Podolanski", 200,-1.0,1.0, 500,0,1);
537 fHistMCapReso->GetYaxis()->SetTitle("#alpha");
538 fHistMCapReso->GetXaxis()->SetTitle("q_{t}");
539 fHistMCapReso->SetOption("scat");
540 fHistMCapReso->SetMarkerStyle(kFullCircle);
542 fHistCentrality = new TH1F("Centrality ", "Centrality", 11, -0.5, 10.5);
543 fHistCentrality ->GetXaxis()->SetTitle("Centrality");
544 fHistCentrality ->GetYaxis()->SetTitle("Entries");
546 fHistCentralityAC = new TH1F("CentralityAC ", "CentralityAC", 11, -0.5, 10.5);
547 fHistCentralityAC ->GetXaxis()->SetTitle("Centrality");
548 fHistCentralityAC ->GetYaxis()->SetTitle("Entries");
550 fHistMultiplicity = new TH1F("Multiplicity ", "Multiplicity", 100, 0, 20000);
551 fHistMultiplicity ->GetXaxis()->SetTitle("Centrality");
552 fHistMultiplicity ->GetYaxis()->SetTitle("Entries");
554 fHistList->Add(fHistMassDPi);
555 fHistList->Add(fHistMassLPi);
556 fHistList->Add(fHistMassLambdaPi);
557 fHistList->Add(fHistMassLambda);
558 fHistList->Add(fHistMassLambdaPPi);
559 fHistList->Add(fHistMassLambdaP);
560 fHistList->Add(fHistMassLambdaK);
561 fHistList->Add(fHistMassK0onl);
562 fHistList->Add(fHistMassK0offl);
563 fHistList->Add(fHistMassK0onlC);
564 fHistList->Add(fHistMassK0offlC);
565 fHistList->Add(fHistMassPQonl);
566 fHistList->Add(fHistMassPQoffl);
567 fHistList->Add(fHistDC);
568 fHistList->Add(fHistArmenterosPodolanski);
569 fHistList->Add(fHistArmenterosPodolanskiCut);
570 fHistList->Add(fHistHDibaryonInvaMassGen);
571 fHistList->Add(fHistHDibaryonInvaMassGenRes);
572 fHistList->Add(fHistAntiHDibaryonInvaMassGen);
573 fHistList->Add(fHistHDibaryonInvaMassAso);
574 fHistList->Add(fHistHDibaryonInvaMassAsoReso);
575 fHistList->Add(fHistAntiHDibaryonInvaMassAso);
576 fHistList->Add(fHistCheck);
577 fHistList->Add(fHistHPointingAngle);
578 fHistList->Add(fHistMassH);
579 fHistList->Add(fHistMassPpi);
580 fHistList->Add(fHistMassPpiReso);
581 fHistList->Add(fHistMassLpi);
582 fHistList->Add(fHistMassLP);
583 fHistList->Add(fHistMassLambdaFromH);
584 fHistList->Add(fHistMassLambdaFromHtLorentz);
585 fHistList->Add(fHistProtonPIDBb);
586 fHistList->Add(fHistPionPIDBb);
587 fHistList->Add(fHistProtonPIDLambda);
588 fHistList->Add(fHistPionPIDLambda);
589 fHistList->Add(fHistMCdcaPvtxDvtx);
590 fHistList->Add(fHistMCdcaPvtxLvtx);
591 fHistList->Add(fHistMCdcaDvtxLvtx);
592 fHistList->Add(fHistMCangleLH);
593 fHistList->Add(fHistMCdecayAngle);
594 fHistList->Add(fHistMCpointingAngle);
595 fHistList->Add(fHistMCap);
596 fHistList->Add(fHistMCdcaPvtxDvtxReso);
597 fHistList->Add(fHistMCdcaPvtxLvtxReso);
598 fHistList->Add(fHistMCdcaDvtxLvtxReso);
599 fHistList->Add(fHistMCangleLHReso);
600 fHistList->Add(fHistMCdecayAngleReso);
601 fHistList->Add(fHistMCpointingAngleReso);
602 fHistList->Add(fHistMCapReso);
603 fHistList->Add(fHistCentrality);
604 fHistList->Add(fHistCentralityAC);
605 fHistList->Add(fHistMultiplicity);
607 fHistHilf1= new TH1F("fHistHilf1", "HD", 300, 0., 10);
608 fHistHilf1->GetXaxis()->SetTitle("");
609 fHistHilf1->GetYaxis()->SetTitle("Entries");
611 fHistHilf2= new TH1F("fHistHilf2", "HD", 300, 0., 10);
612 fHistHilf2->GetXaxis()->SetTitle("");
613 fHistHilf2->GetYaxis()->SetTitle("Entries");
615 fHistHilf3= new TH1F("fHistHilf3", "HD", 300, 0., 10);
616 fHistHilf3->GetXaxis()->SetTitle("");
617 fHistHilf3->GetYaxis()->SetTitle("Entries");
619 fHistHilf4= new TH1F("fHistHilf4", "HD", 300, 0., 10);
620 fHistHilf4->GetXaxis()->SetTitle("");
621 fHistHilf4->GetYaxis()->SetTitle("Entries");
623 fHistHilf5= new TH1F("fHistHilf5", "HD", 300, 0., 10);
624 fHistHilf5->GetXaxis()->SetTitle("");
625 fHistHilf5->GetYaxis()->SetTitle("Entries");
627 fHistHilf6= new TH1F("fHistHilf6", "HD", 300, 0., 10);
628 fHistHilf6->GetXaxis()->SetTitle("");
629 fHistHilf6->GetYaxis()->SetTitle("Entries");
631 fHistPtvsEtaGen = new TH2F("fHistPtvsEtaGen", "p_{t} vs #eta from generated H", 200,0.0,10.0, 200,-1,1);
632 fHistPtvsEtaGen->GetXaxis()->SetTitle("p_{t} (GeV/c)");
633 fHistPtvsEtaGen->GetYaxis()->SetTitle("#eta");
634 fHistPtvsEtaGen->SetOption("scat");
635 fHistPtvsEtaGen->SetMarkerStyle(kFullCircle);
637 fHistPtvsEtaAso = new TH2F("fHistPtvsEtaAso", "p_{t} vs #eta from associated H", 200,0.0,10.0, 200,-1,1);
638 fHistPtvsEtaAso->GetYaxis()->SetTitle("p_{t} (GeV/c)");
639 fHistPtvsEtaAso->GetXaxis()->SetTitle("#eta");
640 fHistPtvsEtaAso->SetOption("scat");
641 fHistPtvsEtaAso->SetMarkerStyle(kFullCircle);
643 fHistPtvsYGen = new TH2F("fHistPtvsYGen", "p_{t} vs rapidity from generated H", 200,0.0,10.0, 200,-1,1);
644 fHistPtvsYGen->GetXaxis()->SetTitle("p_{t} (GeV/c)");
645 fHistPtvsYGen->GetYaxis()->SetTitle("y");
646 fHistPtvsYGen->SetOption("scat");
647 fHistPtvsYGen->SetMarkerStyle(kFullCircle);
649 fHistPtvsYAso = new TH2F("fHistPtvsYAso", "p_{t} vs rapidity from associated H", 200,0.0,10.0, 200,-1,1);
650 fHistPtvsYAso->GetXaxis()->SetTitle("p_{t} (GeV/c)");
651 fHistPtvsYAso->GetYaxis()->SetTitle("y");
652 fHistPtvsYAso->SetOption("scat");
653 fHistPtvsYAso->SetMarkerStyle(kFullCircle);
655 fHistRap= new TH1F("fHistRap", "Rapidity", 400, -2., 2);
656 fHistRap->GetXaxis()->SetTitle("Y");
657 fHistRap->GetYaxis()->SetTitle("Entries");
658 fHistPtvsEtaAso->SetMarkerStyle(kFullCircle);
660 fHistList->Add(fHistHilf1);
661 fHistList->Add(fHistHilf2);
662 fHistList->Add(fHistHilf3);
663 fHistList->Add(fHistHilf4);
664 fHistList->Add(fHistHilf5);
665 fHistList->Add(fHistHilf6);
666 fHistList->Add(fHistPtvsEtaGen);
667 fHistList->Add(fHistPtvsEtaAso);
668 fHistList->Add(fHistPtvsYGen);
669 fHistList->Add(fHistPtvsYAso);
670 fHistList->Add(fHistRap);
672 fHistCount = new TH1F("fHistCount","test",17,0,17);
673 fHistCount->GetXaxis()->SetBinLabel(1,"Events");
674 fHistCount->GetXaxis()->SetBinLabel(2,"MC All");
675 fHistCount->GetXaxis()->SetBinLabel(3,"MC from Primary Vtx");
676 fHistCount->GetXaxis()->SetBinLabel(4,"Horst");
677 fHistCount->GetXaxis()->SetBinLabel(5,"Lambda Candidates");
678 fHistCount->GetXaxis()->SetBinLabel(6,"Sigma Candidates");
679 fHistCount->GetXaxis()->SetBinLabel(7,"Horst");
680 fHistCount->GetXaxis()->SetBinLabel(8,"Horst");
681 fHistCount->GetXaxis()->SetBinLabel(9,"Horst");
682 fHistCount->GetXaxis()->SetBinLabel(10,"MC All #bar{Lambda}(1520)s");
683 fHistCount->GetXaxis()->SetBinLabel(11,"");
684 fHistCount->GetXaxis()->SetBinLabel(12,"H-Dibaryon");
685 fHistCount->GetXaxis()->SetBinLabel(13,"Hypertriton 2-Body");
686 fHistCount->GetXaxis()->SetBinLabel(14,"Hypertriton 3-Body");
687 fHistCount->GetXaxis()->SetBinLabel(15,"");
688 fHistCount->GetXaxis()->SetBinLabel(16,"");
689 fHistCount->GetXaxis()->SetBinLabel(17,"Lambdas!!!");
690 fHistCount->SetStats(0);
691 fHistCount->SetFillColor(38);
692 fHistList->Add(fHistCount);
694 //trigger statistics histogram
695 fHistTriggerStat = new TH1F("fHistTriggerStat","Trigger statistics", 4,-0.5, 3.5);
696 const Char_t* aTriggerNames[] = { "kMB", "kCentral", "kSemiCentral" };
697 for ( Int_t ii=0; ii < 3; ii++ )
698 fHistTriggerStat->GetXaxis()->SetBinLabel(ii+1, aTriggerNames[ii]);
700 fHistTriggerStatAfterEventSelection = new TH1F("fHistTriggerStatAfterEventSelection","Trigger statistics after event selection", 4,-0.5, 3.5);
701 for ( Int_t ii=0; ii < 3; ii++ )
702 fHistTriggerStatAfterEventSelection->GetXaxis()->SetBinLabel(ii+1, aTriggerNames[ii]);
703 fHistList->Add(fHistTriggerStat);
704 fHistList->Add(fHistTriggerStatAfterEventSelection);
706 fHistMassHcentMult = new TH3F("fHistMassHcentMult", "Inv. Mass vs. centrality vs. multiplicity", 100, 2.2, 2.3, 5, 0, 4, 300, 0, 6000);
707 fHistMassHcentMult->GetXaxis()->SetTitle("Invariant mass #Lambdap#pi^{-} (GeV/c^{2})"); // inv. mass
708 fHistMassHcentMult->GetYaxis()->SetTitle("Centrality"); // triggertype
709 fHistMassHcentMult->GetZaxis()->SetTitle("Multiplicity"); // refTPC
710 fHistList->Add(fHistMassHcentMult);
713 const Double_t kz = 2*TMath::Pi();
714 Int_t binsD01[16]={ 300, 200, 100, 100, 100, 100, 100, 100, 200, 200, 200, 200, 400, 200, 200, 3};
715 Double_t xminD01[16]={2.0, 1.0, 0., -1, 0., 0., 0., 0., 0., 0., 0., 0., -1, 0., 0., 0};
716 Double_t xmaxD01[16]={2.3, 1.2, kz, 1, 1, 10, 10, 5, 5, 5, 5, 100, 1, 100, 4000, 1};
719 fHistNdim = new THnSparseF("fHistNdim","THnS;InvMass, InvMassLambda, pointingAngle, armPoAlpha, armPoQt, pTL, pTH, d0p, d0n, dcaHd, dca, decayL, cosPA, centr, multi, mcinf;InvMassH", 16,binsD01,xminD01,xmaxD01);
720 fHistList->Add(fHistNdim);
723 //________________________________________________________________________
724 void AliAnalysisTaskHdibaryonLPpi::UserExec(Option_t *)
727 // Called for each event
729 //define improtant masses
730 Double_t pionMass = 0.13957;
731 Double_t protonMass = 0.93827;
734 Long_t pdgPionPlus = 211;
735 Long_t pdgPionMinus = -211;
736 Long_t pdgProton = 2212;
737 Long_t pdgAntiProton = -2212;
738 Long_t pdgLambda = 3122;
739 Long_t pdgAntiLambda = -3122;
740 Long_t pdgHDibaryon = 1020000020;
741 Long_t pdgAntiHDibaryon = -1020000020;
743 AliStack* stack(NULL);
748 AliHeader *head = fMCEvent->Header();
750 AliGenPythiaEventHeader *pyheader = (AliGenPythiaEventHeader*)head->GenEventHeader();
753 if(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()){
754 if(static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())->MCEvent()){
755 if(!(static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())->TreeK()))return;
756 if(!(static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())->TreeTR()))return;
757 if(!(static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())->Init("local")))return;
758 stack = static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())->MCEvent()->Stack();
759 if(!(static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())->MCEvent()->Stack()->TreeK()))return;
766 // -------------------------------------------------------
767 // Loop for Inv. Mass via ESD tracks
768 // -------------------------------------------------------
772 fESD = dynamic_cast<AliESDEvent *>(fInputEvent);
774 const AliESDVertex *vertex = fESD->GetPrimaryVertexTracks();
775 if (vertex->GetNContributors()<1)
778 vertex = fESD->GetPrimaryVertexSPD();
779 if(vertex->GetNContributors()<1) {
783 if (TMath::Abs(vertex->GetZv()) > 10) return;
785 Int_t centrality = -5;
786 Double_t centrPerc = -5;
788 if (fESD->GetEventSpecie() == 4)
790 AliCentrality *esdCentrality = fESD->GetCentrality();
791 centrality = esdCentrality->GetCentralityClass10("V0M"); // centrality percentile determined with V0
792 centrPerc = esdCentrality->GetCentralityPercentile("V0M");
793 if (centrality < 0. || centrality > 8.) return; //0 bis 80 %
794 // cout<<"Centrality: "<< centrality << endl;
797 fHistCentrality->Fill(centrality);
799 //*****************//
801 //*****************//
803 // Float_t percentile=centrality->GetCentralityPercentile("V0M");
805 Bool_t isSelectedCentral = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kCentral);
806 Bool_t isSelectedSemiCentral = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kSemiCentral);
807 Bool_t isSelectedMB = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
809 Int_t triggertype = 17;
811 if(isSelectedCentral){
812 fHistTriggerStat->Fill(1);
816 if(isSelectedSemiCentral){
817 fHistTriggerStat->Fill(2);
822 fHistTriggerStat->Fill(0);
826 // if(isSelectedCentral || isSelectedSemiCentral || isSelectedMB){
828 //*******************************
832 runNumber = fESD->GetRunNumber();
834 if (!fPIDtpcESD) fPIDtpcESD = ((AliESDInputHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->GetESDpid();
836 fPIDtpcESD = new AliESDpid(); // HACK FOR MC PBPB --> PLEASE REMOVE AS SOON AS POSSIBLE
837 fPIDtpcESD->GetTPCResponse().SetBetheBlochParameters(1.28778e+00/50., 3.13539e+01, TMath::Exp(-3.16327e+01), 1.87901e+00, 6.41583e+00);
843 TObjArray* listCrossV0 = fESDCutsV0->GetAcceptedV0s(fESD);
844 Int_t nGoodV0s = listCrossV0->GetEntries();
846 const AliESDVertex *esdVer = fESD->GetPrimaryVertex();
847 AliESDVertex *esdVer1 = new AliESDVertex(*esdVer);
849 AliVertexerTracks *vertexer = new AliVertexerTracks(fESD->GetMagneticField());
850 TObjArray *trkArray = new TObjArray(2);
851 AliVertexerTracks *vertexer1 = new AliVertexerTracks(fESD->GetMagneticField());
852 TObjArray *trkArray1 = new TObjArray(2);
854 AliKFParticle::SetField(fESD->GetMagneticField());
856 AliKFVertex primVtx(*(fESD->GetPrimaryVertex()));
858 Int_t refMultTpc = AliESDtrackCuts::GetReferenceMultiplicity(fESD, kTRUE);
859 //cout<<"Multiplicity: "<< refMultTpc << endl;
860 fHistMultiplicity->Fill(refMultTpc);
862 Double_t mn[3] = {0,0,0};
863 Double_t mp[3] = {0,0,0};
864 Double_t mm[3] = {0,0,0};
865 Double_t dd[3] = {0,0,0};
866 Double_t dd1[3] = {0,0,0};
867 const Double_t cProtonMass=TDatabasePDG::Instance()->GetParticle(2212)->Mass();
868 const Double_t cPionMass=TDatabasePDG::Instance()->GetParticle(211)->Mass();
869 const Double_t cElectronMass=TDatabasePDG::Instance()->GetParticle(11)->Mass();
870 const Double_t cLambdaMass=TDatabasePDG::Instance()->GetParticle(3122)->Mass();
871 Double_t decayLength=0;
872 Double_t decayLengthH=0;
874 //V0 Loop for Lambda and Anti-Lambda
875 for(Int_t iV0MI = 0; iV0MI < nGoodV0s ; iV0MI++) {
876 AliESDv0 * fV0MIs = fESD->GetV0(iV0MI);
877 Int_t lOnFlyStatus = 0;
879 lOnFlyStatus = fV0MIs->GetOnFlyStatus();
880 Double_t lInvMassLambda=0;
881 Double_t lInvMassLambdaPi=0;
882 Double_t lPtLambda=0;
883 Double_t lPzLambda=0;
890 TLorentzVector photon;
901 // fHistMultiplicity->Fill(refMultTpc);
902 fHistCentralityAC->Fill(centrality);
903 fHistCheck->Fill(offl,onl);
905 AliESDtrack* trackPosTest = fESD->GetTrack(fV0MIs->GetPindex());
906 AliESDtrack* trackNegTest = fESD->GetTrack(fV0MIs->GetNindex());
909 if (!fEsdTrackCuts->AcceptTrack(trackPosTest)) continue;
910 if (!fESDtrackCutsV0->AcceptTrack(trackNegTest)) continue;
913 //PID via specific energy loss in the TPC
914 //define the arrays for the Bethe-Bloch-Parameters
915 Double_t parProton[5] = {0,0,0,0,0};
917 if(runNumber < 166500) //LHC10h
919 parProton[0] = 1.45802; // ALEPH parameters for protons (pass2)
920 parProton[1] = 27.4992;
921 parProton[2] = 4.00313e-15;
922 parProton[3] = 2.48485;
923 parProton[4] = 8.31768;
926 if(runNumber > 166500) //LHC11h
928 parProton[0] = 1.11243; // ALEPH parameters for protons (pass2)
929 parProton[1] = 26.1144;
930 parProton[2] = 4.00313e-15;
931 parProton[3] = 2.72969;
932 parProton[4] = 9.15038;
935 //Get the total momentum for each track at the inner readout of the TPC
936 Double_t ptotN = trackNegTest->GetInnerParam()->GetP();
937 Double_t ptotP = trackPosTest->GetInnerParam()->GetP();
939 //define expected signals for the various species
940 Double_t expSignalPionP = 0;
941 Double_t expSignalPionN = 0;
942 Double_t expSignalProtonN = 0;
943 Double_t expSignalProtonP = 0;
948 expSignalProtonN = AliExternalTrackParam::BetheBlochAleph(ptotN/(protonMass),parProton[0],parProton[1],parProton[2],parProton[3],parProton[4]);
949 expSignalProtonP = AliExternalTrackParam::BetheBlochAleph(ptotP/(protonMass),parProton[0],parProton[1],parProton[2],parProton[3],parProton[4]);
955 expSignalPionP = 0.7*AliExternalTrackParam::BetheBlochAleph(ptotP/(pionMass),parProton[0],parProton[1],parProton[2],parProton[3],parProton[4]);
956 expSignalPionN = 0.7*AliExternalTrackParam::BetheBlochAleph(ptotN/(pionMass),parProton[0],parProton[1],parProton[2],parProton[3],parProton[4]);
958 expSignalProtonN = 0.65*AliExternalTrackParam::BetheBlochAleph(ptotN/(protonMass),parProton[0],parProton[1],parProton[2],parProton[3],parProton[4]);
959 expSignalProtonP = 0.65*AliExternalTrackParam::BetheBlochAleph(ptotP/(protonMass),parProton[0],parProton[1],parProton[2],parProton[3],parProton[4]);
962 // PID cut on the nuclei (proton, deuteron, triton, helium3)
963 Bool_t corrParticle = kFALSE;
965 Bool_t posProton = kFALSE;
969 if (TMath::Abs(fPIDtpcESD->NumberOfSigmasTPC(trackPosTest, AliPID::kProton)) < 3)
972 corrParticle = kTRUE;
978 if(//trackPosTest->GetTPCsignal() < 1200 &&
979 TMath::Abs(trackPosTest->GetTPCsignal() - expSignalProtonP)/expSignalProtonP < 0.4)
982 corrParticle = kTRUE;
986 Bool_t negProton = kFALSE;
990 if (TMath::Abs(fPIDtpcESD->NumberOfSigmasTPC(trackNegTest, AliPID::kProton)) < 3)
993 corrParticle = kTRUE;
999 if(//trackNegTest->GetTPCsignal() < 1200 &&
1000 TMath::Abs(trackNegTest->GetTPCsignal() - expSignalProtonN)/expSignalProtonN < 0.4)
1003 corrParticle = kTRUE;
1008 //data: 3sigma cut on the pions
1010 Bool_t negPion = kFALSE;
1011 Bool_t posPion = kFALSE;
1015 if (TMath::Abs(fPIDtpcESD->NumberOfSigmasTPC(trackPosTest, AliPID::kPion)) < 4) posPion=kTRUE; //pos daughter has to be a pion
1016 if (TMath::Abs(fPIDtpcESD->NumberOfSigmasTPC(trackNegTest, AliPID::kPion)) < 4) negPion=kTRUE; // negative daughter has to be a pion
1019 //MC: like the nuclei via the specific energyloss in the TPC
1022 if (TMath::Abs(trackPosTest->GetTPCsignal() - expSignalPionP)/expSignalPionP < 0.4) posPion=kTRUE;
1023 if (TMath::Abs(trackNegTest->GetTPCsignal() - expSignalPionN)/expSignalPionN < 0.4) negPion=kTRUE;
1026 if (!(posProton==kTRUE)) continue;
1027 if (!(negPion==kTRUE)) continue;
1031 if( !(trackPosTest->GetStatus() & AliESDtrack::kTPCrefit)){
1035 if( !(trackNegTest->GetStatus() & AliESDtrack::kTPCrefit)){
1039 if( trackPosTest->GetSign() >0 && trackNegTest->GetSign() <0){
1040 fV0MIs->GetNPxPyPz(mn[0],mn[1],mn[2]); //reconstructed cartesian momentum components of negative daughter
1041 fV0MIs->GetPPxPyPz(mp[0],mp[1],mp[2]); //reconstructed cartesian momentum components of positive daughter
1044 if( trackPosTest->GetSign() <0 && trackNegTest->GetSign() >0){
1045 fV0MIs->GetPPxPyPz(mn[0],mn[1],mn[2]); //reconstructed cartesian momentum components of negative daughter
1046 fV0MIs->GetNPxPyPz(mp[0],mp[1],mp[2]); //reconstructed cartesian momentum components of positive daughter
1049 fV0MIs->GetPxPyPz(mm[0],mm[1],mm[2]); //reconstructed cartesian momentum components of mother
1051 TVector3 vecN(mn[0],mn[1],mn[2]);
1052 TVector3 vecP(mp[0],mp[1],mp[2]);
1053 TVector3 vecM(mm[0],mm[1],mm[2]);
1055 Double_t thetaP = acos((vecP * vecM)/(vecP.Mag() * vecM.Mag()));
1056 Double_t thetaN = acos((vecN * vecM)/(vecN.Mag() * vecM.Mag()));
1058 Double_t alfa = ((vecP.Mag())*cos(thetaP)-(vecN.Mag())*cos(thetaN))/
1059 ((vecP.Mag())*cos(thetaP)+(vecN.Mag())*cos(thetaN)) ;
1060 Double_t qt = vecP.Mag()*sin(thetaP);
1062 fHistArmenterosPodolanski->Fill(alfa,qt); //Armenteros-Podolanski calculation
1065 TLorentzVector k0daugh1;
1066 TLorentzVector k0daugh2;
1067 TLorentzVector proton;
1070 k0daugh1.SetXYZM(mn[0],mn[1],mn[2],cPionMass);
1071 k0daugh2.SetXYZM(mp[0],mp[1],mp[2],cPionMass);
1072 k0=k0daugh1+k0daugh2;
1074 fV0MIs->ChangeMassHypothesis(3122);
1075 lInvMassLambda = fV0MIs->GetEffMass();
1076 lPtLambda = fV0MIs->Pt();
1077 lPzLambda = fV0MIs->Pz();
1078 lPLambda = fV0MIs->P();
1080 trkArray->AddAt(trackPosTest,0);
1081 trkArray->AddAt(trackNegTest,1);
1083 vertexer->SetVtxStart(esdVer1);
1084 AliESDVertex *decayVertex = (AliESDVertex*)vertexer->VertexForSelectedESDTracks(trkArray);
1086 dd[0]=fESD->GetPrimaryVertexSPD()->GetX()-decayVertex->GetX();
1087 dd[1]=fESD->GetPrimaryVertexSPD()->GetY()-decayVertex->GetY();
1088 dd[2]=fESD->GetPrimaryVertexSPD()->GetZ()-decayVertex->GetZ();
1090 decayLength=sqrt(dd[0]*dd[0]+dd[1]*dd[1]+dd[2]*dd[2]);
1092 if (decayVertex) delete decayVertex;
1094 TLorentzVector negPio1;
1095 TLorentzVector posProt1;
1096 TLorentzVector posP;
1097 TLorentzVector posProt;
1098 TLorentzVector negK;
1099 TLorentzVector negPio;
1100 TLorentzVector negPi;
1101 TLorentzVector omega;
1102 TLorentzVector threeSum;
1103 TLorentzVector fourSum;
1105 TLorentzVector posPiK;
1106 TLorentzVector negPiK;
1107 TLorentzVector kaon;
1108 TLorentzVector lambda;
1109 TLorentzVector lambdaH;
1110 TLorentzVector hDibaryon;
1116 h.SetXYZ(-dd[0],-dd[1],-dd[2]);
1118 if (onl==1)fHistMassDPi->Fill(lInvMassLambda);
1120 if (offl==1||onl==1){
1121 fHistMassLPi->Fill(lInvMassLambda);
1123 negE.SetXYZM(mn[0],mn[1],mn[2],cElectronMass);
1124 posE.SetXYZM(mp[0],mp[1],mp[2],cElectronMass);
1127 negPiK.SetXYZM(mn[0],mn[1],mn[2],cPionMass);
1128 posPiK.SetXYZM(mp[0],mp[1],mp[2],cPionMass);
1131 negPi.SetXYZM(mn[0],mn[1],mn[2],cPionMass);
1132 posP.SetXYZM(mp[0],mp[1],mp[2],cProtonMass);
1134 lambdaH.SetXYZM(mm[0],mm[1],mm[2],cLambdaMass);
1136 if (lInvMassLambda>1.1113&&lInvMassLambda<1.1202){
1139 if (qt<-2.21*alfa*alfa+2.945*alfa-0.887) continue;
1140 if (qt>-2.21*alfa*alfa+2.945*alfa-0.873) continue;
1141 if (photon.M()<0.005) continue;
1142 if (kaon.M()>0.495 && kaon.M()<0.500 ) continue;
1146 fHistMassLambda->Fill(lInvMassLambda);
1148 Bool_t isCorrectlyAssociatedLambda = kFALSE;
1149 Bool_t isPartialCorrectlyAssociatedLambda = kFALSE;
1150 Int_t labelAssociatedH=-1;
1151 Int_t labelLambda=-1;
1154 Int_t labelPosTest = trackPosTest->GetLabel();
1155 TParticle *tparticleDaughter = stack->Particle(TMath::Abs(labelPosTest));
1156 Int_t labelMother = tparticleDaughter->GetFirstMother();
1157 TParticle *tparticleMother = stack->Particle(TMath::Abs(labelMother));
1159 Int_t labelOma = tparticleMother->GetFirstMother();
1160 TParticle *tparticleOma = stack->Particle(TMath::Abs(labelOma));
1162 if ((tparticleOma->GetPdgCode() < 0) && TMath::Abs(tparticleMother->GetPdgCode())==pdgLambda){// check mother to be Lambda
1163 Int_t labelFirstDaughter = tparticleMother->GetDaughter(1);// Proton
1164 Int_t labelThirdDaughter = tparticleMother->GetDaughter(0);// Pion
1166 TParticle *tparticleFirstDaughter = stack->Particle(TMath::Abs(labelFirstDaughter));
1167 TParticle *tparticleThirdDaughter = stack->Particle(TMath::Abs(labelThirdDaughter));
1169 if((tparticleFirstDaughter->GetPdgCode() == pdgProton && tparticleThirdDaughter->GetPdgCode()== pdgPionMinus) ||
1170 (tparticleFirstDaughter->GetPdgCode() == pdgPionMinus && tparticleThirdDaughter->GetPdgCode()== pdgProton)){ //daughter PDGs
1171 isPartialCorrectlyAssociatedLambda = kTRUE;
1172 labelLambda=labelMother;
1177 if(tparticleOma->GetPdgCode() == pdgHDibaryon){ //check grandmother to be H PDG
1178 if (TMath::Abs(tparticleMother->GetPdgCode())==pdgLambda){// check mother to be Lambda
1179 Int_t labelFirstDaughter = tparticleMother->GetDaughter(1);// Proton
1180 Int_t labelThirdDaughter = tparticleMother->GetDaughter(0);// Pion
1182 TParticle *tparticleFirstDaughter = stack->Particle(TMath::Abs(labelFirstDaughter));
1183 TParticle *tparticleThirdDaughter = stack->Particle(TMath::Abs(labelThirdDaughter));
1185 if((tparticleFirstDaughter->GetPdgCode() == pdgProton && tparticleThirdDaughter->GetPdgCode()== pdgPionMinus) ||
1186 (tparticleFirstDaughter->GetPdgCode() == pdgPionMinus && tparticleThirdDaughter->GetPdgCode()== pdgProton)){ //daughter PDGs
1187 isCorrectlyAssociatedLambda = kTRUE;
1188 labelAssociatedH=labelOma;
1189 fHistMassLambdaFromH->Fill(lInvMassLambda);
1190 fHistMassLambdaFromHtLorentz->Fill(lambda.M());
1196 fHistProtonPIDLambda->Fill(trackPosTest->GetInnerParam()->GetP(), trackPosTest->GetTPCsignal());
1197 fHistPionPIDLambda->Fill(trackNegTest->GetInnerParam()->GetP(), trackNegTest->GetTPCsignal());
1199 //---------------------------------------------------------
1200 // Proton track loop
1201 //---------------------------------------------------------
1202 fHistArmenterosPodolanskiCut->Fill(alfa,qt);
1204 for (Int_t iTracksP = 0; iTracksP < fESD->GetNumberOfTracks(); iTracksP++) {
1205 AliESDtrack* trackP = dynamic_cast<AliESDtrack*> (fESD->GetTrack(iTracksP));
1206 if (trackP->GetSign()<0) continue;
1208 if (iTracksP==fV0MIs->GetPindex())continue;
1209 if (iTracksP==fV0MIs->GetNindex())continue;
1211 if (!fEsdTrackCuts->AcceptTrack(trackP)) continue;
1213 AliKFParticle protonKF( *(trackP), 2212);
1215 if (!trackP->GetInnerParam()) continue;
1222 if (TMath::Abs(fPIDtpcESD->NumberOfSigmasTPC(trackP, AliPID::kProton)) > 3) continue;
1225 fHistProtonPIDBb->Fill(trackP->GetInnerParam()->GetP(), trackP->GetTPCsignal());
1227 posProt.SetXYZM(trackP->Px(),trackP->Py(),trackP->Pz(),cProtonMass);
1229 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1230 //Pion Track loop!!!!!!!!!!!!!!!!!!!!!
1231 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1232 for (Int_t iTracksN = iTracksP+1; iTracksN < fESD->GetNumberOfTracks(); iTracksN++) {
1233 AliESDtrack* trackN = dynamic_cast<AliESDtrack*> (fESD->GetTrack(iTracksN));
1235 if (iTracksN==fV0MIs->GetPindex())continue;
1236 if (iTracksN==fV0MIs->GetNindex())continue;
1237 if (trackN->GetSign()>0) continue;
1239 if (!fEsdTrackCuts->AcceptTrack(trackN)) continue;
1240 if (!fESDtrackCutsV0->AcceptTrack(trackN)) continue;
1242 negPi.SetXYZM(mn[0],mn[1],mn[2],cPionMass);
1243 posP.SetXYZM(mp[0],mp[1],mp[2],cProtonMass);
1244 negPio.SetXYZM(trackN->Px(),trackN->Py(),trackN->Pz(),cPionMass);
1246 threeSum=negPi+posP+negPio;
1247 lInvMassLambdaPi=threeSum.M();
1249 fHistDC->Fill(decayLength*lInvMassLambda/lPLambda);
1251 AliKFParticle posPionKF( *(trackN) ,-211);
1253 if (!trackN->GetInnerParam()) continue;
1259 if (TMath::Abs(fPIDtpcESD->NumberOfSigmasTPC(trackN, AliPID::kPion)) > 3) continue;
1261 fHistPionPIDBb->Fill(trackN->GetInnerParam()->GetP(), trackN->GetTPCsignal());
1263 trkArray1->AddAt(trackP,0);
1264 trkArray1->AddAt(trackN,1);
1266 vertexer1->SetVtxStart(esdVer1);
1267 AliESDVertex *decayVertex1 = (AliESDVertex*)vertexer1->VertexForSelectedESDTracks(trkArray1);
1269 dd1[0]=fESD->GetPrimaryVertexSPD()->GetX()-decayVertex1->GetX();
1270 dd1[1]=fESD->GetPrimaryVertexSPD()->GetY()-decayVertex1->GetY();
1271 dd1[2]=fESD->GetPrimaryVertexSPD()->GetZ()-decayVertex1->GetZ();
1273 decayLengthH=sqrt(dd1[0]*dd1[0]+dd1[1]*dd1[1]+dd1[2]*dd1[2]);
1275 Double_t bz = fESD->GetMagneticField();
1277 trackP->PropagateToDCA(decayVertex1, bz, 10);
1278 trackN->PropagateToDCA(decayVertex1, bz, 10);
1280 Double_t xthiss(0.0);
1282 Double_t dca = trackN->GetDCA(trackP,bz,xthiss,xpp);
1284 if (decayVertex1) delete decayVertex1;
1285 h1.SetXYZ(-dd1[0],-dd1[1],-dd1[2]);
1287 // if (dca>1) continue;
1288 if (dca>0.1) continue;
1290 fourSum=threeSum+posProt;
1292 posProt1.SetXYZM(trackP->Px(),trackP->Py(),trackP->Pz(),cProtonMass);
1293 negPio1.SetXYZM(trackN->Px(),trackN->Py(),trackN->Pz(),cPionMass);
1294 hDibaryon=lambdaH+posProt1+negPio1;
1295 Double_t hPointingAngle = hDibaryon.Angle(h);
1296 Double_t pointingAngleH = hDibaryon.Angle(h1);
1297 Double_t decayAngleH = h.Angle(h1);
1298 TVector3 vecDist(dd[0]-dd1[0],dd[1]-dd1[1],dd[2]-dd1[2]);
1299 fHistMassLambdaPPi->Fill(hDibaryon.M());
1300 fHistHPointingAngle->Fill(pointingAngleH);
1302 fHistMassHcentMult->Fill(hDibaryon.M(),triggertype,refMultTpc);
1304 Double_t rapidity = hDibaryon.Rapidity();
1305 if(rapidity > 1.0 || rapidity < -1.0) continue;
1307 Double_t vec[16]={hDibaryon.M(), lInvMassLambda, pointingAngleH, alfa, qt, lPtLambda, hDibaryon.Pt(), posPionKF.GetDistanceFromVertex(primVtx), protonKF.GetDistanceFromVertex(primVtx), dca, protonKF.GetDistanceFromVertex(posPionKF), TMath::Cos(pointingAngleH), centrPerc, refMultTpc, mcStatus};
1308 fHistNdim->Fill(vec);
1310 fHistRap->Fill(rapidity);
1311 //if (pointingAngleH > 0.1) continue;
1312 if (pointingAngleH > 0.05) continue;
1314 ///////////////////////////
1315 //MC part for Associated H
1316 ///////////////////////////
1318 if (HasMC() && isCorrectlyAssociatedLambda) {
1319 Int_t labelP = trackP->GetLabel();
1320 TParticle *tparticleDaughter = stack->Particle(TMath::Abs(labelP));
1321 Int_t labelMother = tparticleDaughter->GetFirstMother();
1322 TParticle *tparticleMother = stack->Particle(TMath::Abs(labelMother));
1324 Int_t labelProton = trackP->GetLabel();
1325 Int_t labelPion = trackN->GetLabel();
1328 if(tparticleMother->GetPdgCode() == pdgHDibaryon && labelAssociatedH==labelMother){ //check mother PDG
1329 Int_t labelFirstDaughter = tparticleMother->GetDaughter(0);
1330 Int_t labelThirdDaughter = tparticleMother->GetDaughter(1);
1331 Int_t labelSecondDaughter = labelFirstDaughter +1;
1333 TParticle *tparticleSecondDaughter = stack->Particle(TMath::Abs(labelSecondDaughter));
1334 TParticle *tparticleThirdDaughter = stack->Particle(TMath::Abs(labelThirdDaughter));
1344 if((tparticleThirdDaughter->GetPdgCode() == pdgPionMinus && labelPion==labelThirdDaughter)&&(tparticleSecondDaughter->GetPdgCode() == pdgProton||tparticleSecondDaughter->GetPdgCode() == pdgPionMinus) && labelProton==labelSecondDaughter) fHistMassPpi->Fill(ppi.M());
1346 if(tparticleThirdDaughter->GetPdgCode() == pdgPionMinus && labelPion==labelThirdDaughter) fHistMassLpi->Fill(lpi.M());
1348 if(tparticleSecondDaughter->GetPdgCode() == pdgProton && labelProton==labelSecondDaughter) fHistMassLP->Fill(lP.M());
1350 if(tparticleSecondDaughter->GetPdgCode() == pdgProton && labelProton==labelSecondDaughter){//check second daughter PDG
1351 if(tparticleThirdDaughter->GetPdgCode() == pdgPionMinus && labelPion==labelThirdDaughter){//check second daughter PDG
1353 fHistHDibaryonInvaMassAso->Fill(hDibaryon.M());
1355 Double_t distance01=vecDist.Mag();
1356 fHistMCdcaPvtxDvtx->Fill(decayLengthH);
1357 fHistMCdcaPvtxLvtx->Fill(decayLength);
1358 fHistMCdcaDvtxLvtx->Fill(distance01);
1359 fHistMCangleLH->Fill(hPointingAngle);
1360 fHistMCdecayAngle->Fill(decayAngleH);
1361 fHistMCpointingAngle->Fill(pointingAngleH);
1362 fHistMCap->Fill(alfa,qt);
1364 fHistHilf1->Fill(posPionKF.GetDistanceFromVertex(primVtx));
1365 fHistHilf2->Fill(protonKF.GetDistanceFromVertex(primVtx));
1366 fHistHilf3->Fill(protonKF.GetDistanceFromVertex(posPionKF));
1367 fHistHilf6->Fill(dca);
1368 fHistPtvsYAso->Fill(hDibaryon.Pt(),hDibaryon.Rapidity());
1369 fHistPtvsEtaAso->Fill(hDibaryon.Pt(),hDibaryon.Eta());
1371 }//end check for third daughter PDG
1372 }//end check second daughter PDG
1376 // cout<<"Trigger: "<<triggertype<<endl;
1377 fHistMassH->Fill(hDibaryon.M());
1378 fHistMassHcentMult->Fill(hDibaryon.M(),triggertype,refMultTpc);
1379 ppK=lambdaH+posProt;
1380 fHistMassLambdaP->Fill(ppK.M());
1382 // fHistNdim = new THnSparseF("fHistNdim","THnS;InvMass, InvMassLambda, pointingAngle, armPoAlpha, armPoQt, pTL, pTH, d0p, d0n, dcaHd, dca, decayL, cosPA, centr, multi, mcinf;InvMassH", 16,binsD01,xminD01,xmaxD01);
1384 // Double_t vec[16]={hDibaryon.M(), lInvMassLambda, pointingAngleH, alfa, qt, lPtLambda, hDibaryon.Pt(), posPionKF.GetDistanceFromVertex(primVtx), protonKF.GetDistanceFromVertex(primVtx), dca, protonKF.GetDistanceFromVertex(posPionKF), TMath::Cos(pointingAngleH), centrPerc, refMultTpc, mcStatus};
1385 // fHistNdim->Fill(vec);
1393 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1394 //Pure MC Part!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1395 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1397 // Monte Carlo for genenerated particles
1398 if (HasMC()) //MC loop
1403 Double_t momentumPionGen[3]={0,0,0};
1404 Double_t momentumNucleonGen[3]={0,0,0};
1405 Double_t momentumLambdaGen[3]={0,0,0};
1407 Double_t energyPionGen = 0;
1408 Double_t energyNucleonGen = 0;
1409 Double_t energyLambdaGen = 0;
1411 Double_t transversMomentumMotherGen = 0;
1412 Double_t longitudinalMomentumMotherGen = 0;
1413 Double_t totalEnergyMotherGen = 0;
1415 Double_t rapidityGen = 2;
1417 for(stackN = 0; stackN < stack->GetNtrack(); stackN++) //loop over stack
1420 TParticle *tparticleMother = stack->Particle(stackN);
1422 if(tparticleMother->GetPdgCode() == pdgLambda) fHistCount->Fill(16);
1425 if(tparticleMother->GetPdgCode() == pdgHDibaryon) //check mother PDG
1427 Int_t labelFirstDaughter = tparticleMother->GetDaughter(0);
1428 Int_t labelThirdDaughter = tparticleMother->GetDaughter(1);
1429 Int_t labelSecondDaughter = labelFirstDaughter +1;
1431 TParticle *tparticleFirstDaughter = stack->Particle(TMath::Abs(labelFirstDaughter));
1432 TParticle *tparticleSecondDaughter = stack->Particle(TMath::Abs(labelSecondDaughter));
1433 TParticle *tparticleThirdDaughter = stack->Particle(TMath::Abs(labelThirdDaughter));
1435 if(tparticleFirstDaughter->GetPdgCode() == pdgLambda) //check first daughter PDG
1437 if(tparticleSecondDaughter->GetPdgCode() == pdgProton)//check second daughter PDG
1439 if(tparticleThirdDaughter->GetPdgCode() == pdgPionMinus)//check second daughter PDG
1441 momentumLambdaGen[0] = tparticleFirstDaughter->Px();
1442 momentumLambdaGen[1] = tparticleFirstDaughter->Py();
1443 momentumLambdaGen[2] = tparticleFirstDaughter->Pz();
1445 momentumNucleonGen[0] = tparticleSecondDaughter->Px();
1446 momentumNucleonGen[1] = tparticleSecondDaughter->Py();
1447 momentumNucleonGen[2] = tparticleSecondDaughter->Pz();
1449 momentumPionGen[0] = tparticleThirdDaughter->Px();
1450 momentumPionGen[1] = tparticleThirdDaughter->Py();
1451 momentumPionGen[2] = tparticleThirdDaughter->Pz();
1453 TLorentzVector lorentzVectorLambda;
1454 TLorentzVector lorentzVectorProton;
1455 TLorentzVector lorentzVectorPion;
1456 TLorentzVector lorentzVectorHDibaryon;
1458 lorentzVectorLambda.SetXYZM(momentumLambdaGen[0],momentumLambdaGen[1],momentumLambdaGen[2],1.115);
1459 lorentzVectorProton.SetXYZM(momentumNucleonGen[0],momentumNucleonGen[1],momentumNucleonGen[2],protonMass);
1460 lorentzVectorPion.SetXYZM(momentumPionGen[0],momentumPionGen[1],momentumPionGen[2],pionMass);
1462 lorentzVectorHDibaryon = lorentzVectorLambda + lorentzVectorProton + lorentzVectorPion;
1463 rapidityGen=lorentzVectorHDibaryon.Rapidity();
1464 transversMomentumMotherGen = lorentzVectorHDibaryon.Pt();
1465 longitudinalMomentumMotherGen = lorentzVectorHDibaryon.Pz();
1466 totalEnergyMotherGen = lorentzVectorHDibaryon.Energy();
1468 if(rapidityGen > 1.0 || rapidityGen < -1 ) continue;
1469 //lorentzVectorLambda
1470 fHistHDibaryonInvaMassGen->Fill(lorentzVectorHDibaryon.M());
1471 if (lorentzVectorLambda.Rapidity() > 1.0 || lorentzVectorLambda.Rapidity() < -1) continue;
1472 if (lorentzVectorProton.Rapidity() > 1.0 || lorentzVectorProton.Rapidity() < -1) continue;
1474 if (lorentzVectorPion.Rapidity() > 1.0 || lorentzVectorPion.Rapidity() < -1) continue;
1475 fHistHDibaryonInvaMassGenRes->Fill(lorentzVectorHDibaryon.M());
1476 fHistPtvsEtaGen->Fill(lorentzVectorHDibaryon.Pt(),lorentzVectorHDibaryon.Eta());
1477 fHistPtvsYGen->Fill(lorentzVectorHDibaryon.Pt(),lorentzVectorHDibaryon.Rapidity());
1478 fHistPtvsEtaGen->Fill(lorentzVectorHDibaryon.Pt(),lorentzVectorHDibaryon.Eta());
1479 fHistCount->Fill(11);
1480 }//end of check third daughter PDG
1481 }//end of check second daughter PDG
1482 }//end of check first daughter PDG
1483 }//end of H-Dibaryon
1486 if(tparticleMother->GetPdgCode() == pdgAntiHDibaryon) //check mother PDG
1488 Int_t labelFirstDaughter = tparticleMother->GetDaughter(0);
1489 Int_t labelThirdDaughter = tparticleMother->GetDaughter(1);
1490 Int_t labelSecondDaughter = labelFirstDaughter +1;
1492 TParticle *tparticleFirstDaughter = stack->Particle(TMath::Abs(labelFirstDaughter));
1493 TParticle *tparticleSecondDaughter = stack->Particle(TMath::Abs(labelSecondDaughter));
1494 TParticle *tparticleThirdDaughter = stack->Particle(TMath::Abs(labelThirdDaughter));
1496 if(tparticleFirstDaughter->GetPdgCode() == pdgAntiLambda) //check first daughter PDG
1498 if(tparticleSecondDaughter->GetPdgCode() == pdgAntiProton)//check second daughter PDG
1500 if(tparticleThirdDaughter->GetPdgCode() == pdgPionPlus)//check second daughter PDG
1502 momentumLambdaGen[0] = tparticleFirstDaughter->Px();
1503 momentumLambdaGen[1] = tparticleFirstDaughter->Py();
1504 momentumLambdaGen[2] = tparticleFirstDaughter->Pz();
1506 momentumNucleonGen[0] = tparticleSecondDaughter->Px();
1507 momentumNucleonGen[1] = tparticleSecondDaughter->Py();
1508 momentumNucleonGen[2] = tparticleSecondDaughter->Pz();
1510 momentumPionGen[0] = tparticleThirdDaughter->Px();
1511 momentumPionGen[1] = tparticleThirdDaughter->Py();
1512 momentumPionGen[2] = tparticleThirdDaughter->Pz();
1514 energyLambdaGen = tparticleFirstDaughter->Energy();
1515 energyNucleonGen = tparticleSecondDaughter->Energy();
1516 energyPionGen = tparticleThirdDaughter->Energy();
1518 TLorentzVector lorentzVectorLambda;
1519 TLorentzVector lorentzVectorProton;
1520 TLorentzVector lorentzVectorPion;
1521 TLorentzVector lorentzVectorHDibaryon;
1523 lorentzVectorLambda.SetXYZM(momentumLambdaGen[0],momentumLambdaGen[1],momentumLambdaGen[2],1.115);
1524 lorentzVectorProton.SetXYZM(momentumNucleonGen[0],momentumNucleonGen[1],momentumNucleonGen[2],protonMass);
1525 lorentzVectorPion.SetXYZM(momentumPionGen[0],momentumPionGen[1],momentumPionGen[2],pionMass);
1527 lorentzVectorHDibaryon = lorentzVectorLambda + lorentzVectorProton + lorentzVectorPion;
1529 rapidityGen=lorentzVectorHDibaryon.Rapidity();
1530 if(rapidityGen > 1.0 || rapidityGen < -1 ) continue;
1531 fHistAntiHDibaryonInvaMassGen->Fill(lorentzVectorHDibaryon.M());
1532 }//end of check third daughter PDG
1533 }//end of check second daughter PDG
1534 }//end of check first daughter PDG
1535 }//end of Anti-H-Dibaryon
1539 // Post output data.
1540 PostData(1,fHistList);
1541 //PostData(0,fHistList);
1543 if (listCrossV0) delete listCrossV0;
1544 if (esdVer1) delete esdVer1;
1545 if (vertexer) delete vertexer;
1546 if (vertexer1) delete vertexer1;
1547 if (trkArray) delete trkArray;
1548 if (trkArray1) delete trkArray1;
1551 //________________________________________________________________________
1552 void AliAnalysisTaskHdibaryonLPpi::Terminate(Option_t *)
1554 // Draw result to the screen
1555 // Called once at the end of the query