1 /**************************************************************************
2 * Contributors are not mentioned at all. *
4 * Permission to use, copy, modify and distribute this software and its *
5 * documentation strictly for non-commercial purposes is hereby granted *
6 * without fee, provided that the above copyright notice appears in all *
7 * copies and that both the copyright notice and this permission notice *
8 * appear in the supporting documentation. The authors make no claims *
9 * about the suitability of this software for any purpose. It is *
10 * provided "as is" without express or implied warranty. *
11 **************************************************************************/
14 //-----------------------------------------------------------------
15 // AliAnalysisTaskNUclexAOD class AOD
16 //-----------------------------------------------------------------
23 #include "AliAnalysisManager.h"
24 #include <AliMCEventHandler.h>
25 #include <AliMCEvent.h>
32 class AliCascadeVertexer;
35 #include "AliAnalysisTaskSE.h"
47 #include "Riostream.h"
49 #include "AliCascadeVertexer.h"
50 #include "AliESDEvent.h"
51 #include "AliESDtrack.h"
52 #include "AliExternalTrackParam.h"
53 #include "AliAODEvent.h"
54 #include "AliInputEventHandler.h"
55 #include "AliESDcascade.h"
56 #include "AliAODcascade.h"
57 #include "AliAnalysisTaskReadNuclexAOD.h"
58 #include "AliESDtrackCuts.h"
59 #include "AliCentrality.h"
63 #include <AliAODPid.h>
64 #include <AliAODHandler.h>
65 #include <AliAODRecoDecay.h>
66 #include <AliAODRecoDecayLF.h>
67 #include <AliAODRecoDecayLF2Prong.h>
72 ClassImp(AliAnalysisTaskReadNuclexAOD)
74 //________________________________________________________________________
75 AliAnalysisTaskReadNuclexAOD::AliAnalysisTaskReadNuclexAOD()
76 : AliAnalysisTaskSE(),
81 fHistEventMultiplicity(0),
82 fHistTrackMultiplicity(0),
83 fHistTrackMultiplicityCent(0),
84 fHistTrackMultiplicitySemiCent(0),
85 fHistTrackMultiplicityMB(0),
86 fHistTrackMultiplicityPVCent(0),
87 fHistTrackMultiplicityPVSemiCent(0),
88 fHistTrackMultiplicityPVMB(0),
94 SecondaryVertices(0x0),
108 txSecondaryVertex(0),
109 tySecondaryVertex(0),
110 tzSecondaryVertex(0),
112 tCosPointingAngle(0),
113 tDCAV0toPrimaryVertex(0),
117 tDcaHeToPrimVertex(0),
133 tDcaPionToPrimVertex(0),
144 tPionITSClusterMap(0),
154 t3LHlPeriodNumber(0),
163 t3LHlxPrimaryVertex(0),
164 t3LHlyPrimaryVertex(0),
165 t3LHlzPrimaryVertex(0),
179 //________________________________________________________________________
180 AliAnalysisTaskReadNuclexAOD::AliAnalysisTaskReadNuclexAOD(const char *name)
181 : AliAnalysisTaskSE(name),
182 fAnalysisType("AOD"),
183 fCollidingSystems(0),
186 fHistEventMultiplicity(0),
187 fHistTrackMultiplicity(0),
188 fHistTrackMultiplicityCent(0),
189 fHistTrackMultiplicitySemiCent(0),
190 fHistTrackMultiplicityMB(0),
191 fHistTrackMultiplicityPVCent(0),
192 fHistTrackMultiplicityPVSemiCent(0),
193 fHistTrackMultiplicityPVMB(0),
199 SecondaryVertices(0x0),
213 txSecondaryVertex(0),
214 tySecondaryVertex(0),
215 tzSecondaryVertex(0),
217 tCosPointingAngle(0),
218 tDCAV0toPrimaryVertex(0),
222 tDcaHeToPrimVertex(0),
238 tDcaPionToPrimVertex(0),
249 tPionITSClusterMap(0),
259 t3LHlPeriodNumber(0),
268 t3LHlxPrimaryVertex(0),
269 t3LHlyPrimaryVertex(0),
270 t3LHlzPrimaryVertex(0),
281 // Define input and output slots here
282 // Input slot #0 works with a TChain
283 //DefineInput(0, TChain::Class());
284 // Output slot #0 writes into a TList container (Cascade)
285 DefineOutput(1, TList::Class());
287 DefineInput(0, TChain::Class());
289 DefineOutput(1, TList::Class());
290 DefineOutput(2, TTree::Class());
291 DefineOutput(3, TTree::Class());
294 //_______________________________________________________
295 AliAnalysisTaskReadNuclexAOD::~AliAnalysisTaskReadNuclexAOD()
303 if(fNtuple1) delete fNtuple1;
304 if(fNtuple4) delete fNtuple4;
306 //=================DEFINITION BETHE BLOCH==============================
308 Double_t AliAnalysisTaskReadNuclexAOD::BetheBloch(Double_t betaGamma,Double_t charge,Bool_t isPbPb) {
310 Double_t kp1, kp2, kp3, kp4, kp5;
317 kp1 = 4.7*charge*charge;
318 kp2 = 8.98482806165147636e+00;
319 kp3 = 1.54000000000000005e-05;
320 kp4 = 2.30445734159456084e+00;
321 kp5 = 2.25624744086878559e+00;
329 kp1 = 4.7*charge*charge;
330 kp2 = 8.98482806165147636e+00;
331 kp3 = 1.54000000000000005e-05;
332 kp4 = 2.30445734159456084e+00;
333 kp5 = 2.25624744086878559e+00;
338 Double_t beta = betaGamma / TMath::Sqrt(1.0 + betaGamma * betaGamma);
340 Double_t aa = TMath::Power(beta, kp4);
341 Double_t bb = TMath::Power(1.0 / betaGamma, kp5);
343 bb = TMath::Log(kp3 + bb);
345 Double_t out = (kp2 - aa - bb) * kp1 / aa;
351 void AliAnalysisTaskReadNuclexAOD::Init()
353 // cout<<"----------------------------------> Vediamo"<<endl;
355 // AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
356 // cout<<aodHandler<<endl;
357 // TTree *aodTree = aodHandler->GetTree();
358 // // aodTree = aodHandler->GetTree();
359 // cout<<"aodTree: "<<aodTree<<endl;
360 // aodTree->SetBranchAddress("Nuclei", &Nuclei);
361 // aodTree->SetBranchAddress("SecondaryVertices",&SecondaryVertices);
362 // aodTree->SetBranchAddress("DaughterTracks", &DaughterTracks);
367 //==================DEFINITION OF OUTPUT OBJECTS==============================
369 void AliAnalysisTaskReadNuclexAOD::UserCreateOutputObjects()
371 fListHist = new TList();
372 fListHist->SetOwner(); // IMPORTANT!
375 if(! fHistEventMultiplicity ){
377 fHistEventMultiplicity = new TH1F( "fHistEventMultiplicity" , "Nb of Events" , 13 , 0, 13);
379 fHistEventMultiplicity->GetXaxis()->SetBinLabel(1,"All Events");
380 fHistEventMultiplicity->GetXaxis()->SetBinLabel(2,"Events w/PV");
381 fHistEventMultiplicity->GetXaxis()->SetBinLabel(3,"Events w/|Vz|<10cm");
382 fHistEventMultiplicity->GetXaxis()->SetBinLabel(4,"Central Events");
383 fHistEventMultiplicity->GetXaxis()->SetBinLabel(5,"SemiCentral Events");
384 fHistEventMultiplicity->GetXaxis()->SetBinLabel(6,"MB Events");
385 fHistEventMultiplicity->GetXaxis()->SetBinLabel(7,"Central Events w/|Vz|<10cm");
386 fHistEventMultiplicity->GetXaxis()->SetBinLabel(8,"SemiCentral Events w/|Vz|<10cm");
387 fHistEventMultiplicity->GetXaxis()->SetBinLabel(9,"MB Events w/|Vz|<10cm");
388 fHistEventMultiplicity->GetXaxis()->SetBinLabel(10,"Sec. Vert. Tree");
389 fHistEventMultiplicity->GetXaxis()->SetBinLabel(11,"Sec. Vert. Rec");
390 fHistEventMultiplicity->GetXaxis()->SetBinLabel(12,"Event Not taken");
391 fListHist->Add(fHistEventMultiplicity);
395 if(! fHistTrackMultiplicity ){
396 fHistTrackMultiplicity = new TH2F( "fHistTrackMultiplicity" , "Nb of Tracks", 2500,0, 25000,210,-1,104);
397 fHistTrackMultiplicity->GetXaxis()->SetTitle("Number of tracks");
398 fHistTrackMultiplicity->GetYaxis()->SetTitle("Percentile");
399 fListHist->Add(fHistTrackMultiplicity);
402 if(! fHistTrackMultiplicityCent ){
403 fHistTrackMultiplicityCent = new TH2F( "fHistTrackMultiplicityCent", "Nb of Tracks Central Events", 2500,0, 25000,210,-1,104 );
404 fHistTrackMultiplicityCent->GetXaxis()->SetTitle("Number of tracks");
405 fHistTrackMultiplicityCent->GetYaxis()->SetTitle("Percentile");
406 fListHist->Add(fHistTrackMultiplicityCent);
409 if(! fHistTrackMultiplicitySemiCent ){
410 fHistTrackMultiplicitySemiCent = new TH2F( "fHistTrackMultiplicitySemiCent" , "Nb of Tracks SemiCentral Events", 2500,0, 25000 ,210,-1,104);
411 fHistTrackMultiplicitySemiCent->GetXaxis()->SetTitle("Number of tracks");
412 fHistTrackMultiplicitySemiCent->GetYaxis()->SetTitle("Percentile");
413 fListHist->Add(fHistTrackMultiplicitySemiCent);
416 if(! fHistTrackMultiplicityMB ){
417 fHistTrackMultiplicityMB = new TH2F( "fHistTrackMultiplicityMB" , "Nb of Tracks MBral Events", 2500,0, 25000,210,-1,104 );
418 fHistTrackMultiplicityMB->GetXaxis()->SetTitle("Number of tracks");
419 fHistTrackMultiplicityMB->GetYaxis()->SetTitle("Percentile");
420 fListHist->Add(fHistTrackMultiplicityMB);
423 if(! fHistTrackMultiplicityPVCent ){
424 fHistTrackMultiplicityPVCent = new TH2F( "fHistTrackMultiplicityPVCent" , "Nb of Tracks Central Events", 2500,0, 25000,210,-1,104 );
425 fHistTrackMultiplicityPVCent->GetXaxis()->SetTitle("Number of tracks");
426 fHistTrackMultiplicityPVCent->GetYaxis()->SetTitle("Percentile");
427 fListHist->Add(fHistTrackMultiplicityPVCent);
430 if(! fHistTrackMultiplicityPVSemiCent ){
431 fHistTrackMultiplicityPVSemiCent = new TH2F( "fHistTrackMultiplicityPVSemiCent" , "Nb of Tracks SemiCentral Events", 2500,0, 25000 ,210,-1,104);
432 fHistTrackMultiplicityPVSemiCent->GetXaxis()->SetTitle("Number of tracks");
433 fHistTrackMultiplicityPVSemiCent->GetYaxis()->SetTitle("Percentile");
434 fListHist->Add(fHistTrackMultiplicityPVSemiCent);
437 if(! fHistTrackMultiplicityPVMB ){
438 fHistTrackMultiplicityPVMB = new TH2F( "fHistTrackMultiplicityPVMB" , "Nb of Tracks MBral Events", 2500,0, 25000,210,-1,104 );
439 fHistTrackMultiplicityPVMB->GetXaxis()->SetTitle("Number of tracks");
440 fHistTrackMultiplicityPVMB->GetYaxis()->SetTitle("Percentile");
441 fListHist->Add(fHistTrackMultiplicityPVMB);
445 fhBB = new TH2F( "fhBB" , "BetheBlochTPC" , 120,-6,6,150,0,1500);
446 fhBB->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
447 fhBB->GetYaxis()->SetTitle("TPC Signal");
448 fListHist->Add(fhBB);
452 fhBBPions = new TH2F( "fhBBPions" , "Bethe-Bloch TPC Pions" , 120,-6,6,150,0,1500);
453 fhBBPions->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
454 fhBBPions->GetYaxis()->SetTitle("TPC Signal");
455 fListHist->Add(fhBBPions);
459 fhBBHe = new TH2F( "fhBBHe" , "Bethe-Bloch TPC He" , 120,-6,6,150,0,1500);
460 fhBBHe->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
461 fhBBHe->GetYaxis()->SetTitle("TPC Signal");
462 fListHist->Add(fhBBHe);
469 fNtuple1 = new TTree("fNtuple1","fNtuple1");
471 fNtuple1->Branch("trunNumber" ,&trunNumber ,"trunNumber/F");
472 fNtuple1->Branch("tbunchcross" ,&tbunchcross ,"tbunchcross/F");
473 fNtuple1->Branch("torbit" ,&torbit ,"torbit/F");
474 fNtuple1->Branch("tperiod" ,&tperiod ,"tperiod/F");
475 fNtuple1->Branch("teventtype" ,&teventtype ,"teventtype/F");
476 fNtuple1->Branch("tTrackNumber" ,&tTrackNumber ,"tTrackNumber/F");
477 fNtuple1->Branch("tpercentile" ,&tpercentile ,"tpercentile/F") ;
478 fNtuple1->Branch("txPrimaryVertex" ,&txPrimaryVertex ,"txPrimaryVertex/F");
479 fNtuple1->Branch("tyPrimaryVertex" ,&tyPrimaryVertex ,"tyPrimaryVertex/F");
480 fNtuple1->Branch("tzPrimaryVertex" ,&tzPrimaryVertex ,"tzPrimaryVertex/F");
481 fNtuple1->Branch("txSecondaryVertex" ,&txSecondaryVertex ,"txSecondaryVertex/F");
482 fNtuple1->Branch("tySecondaryVertex" ,&tySecondaryVertex ,"tySecondaryVertex/F");
483 fNtuple1->Branch("tzSecondaryVertex" ,&tzSecondaryVertex ,"tzSecondaryVertex/F");
484 fNtuple1->Branch("tdcaTracks" ,&tdcaTracks ,"tdcaTracks/F");
485 fNtuple1->Branch("tCosPointingAngle" ,&tCosPointingAngle ,"tCosPointingAngle/F");
486 fNtuple1->Branch("tDCAV0toPrimaryVertex",&tDCAV0toPrimaryVertex,"tDCAV0toPrimaryVertex/F");
487 fNtuple1->Branch("tHeSign" ,&tHeSign ,"tHeSign/F");
488 fNtuple1->Branch("tHepInTPC" ,&tHepInTPC ,"tHepInTPC/F");
489 fNtuple1->Branch("tHeTPCsignal" ,&tHeTPCsignal ,"tHeTPCsignal/F");
490 fNtuple1->Branch("tDcaHeToPrimVertex" ,&tDcaHeToPrimVertex ,"tDcaHeToPrimVertex/F");
491 fNtuple1->Branch("tHeEta" ,&tHeEta ,"tHeEta/F");
492 fNtuple1->Branch("tmomHex" ,&tmomHex ,"tmomHex/F");
493 fNtuple1->Branch("tmomHey" ,&tmomHey ,"tmomHey/F");
494 fNtuple1->Branch("tmomHez" ,&tmomHez ,"tmomHez/F");
495 fNtuple1->Branch("tmomHeAtSVx" ,&tmomHeAtSVx ,"tmomHeAtSVx/F");
496 fNtuple1->Branch("tmomHeAtSVy" ,&tmomHeAtSVy ,"tmomHeAtSVy/F");
497 fNtuple1->Branch("tmomHeAtSVz" ,&tmomHeAtSVz ,"tmomHeAtSVz/F");
498 fNtuple1->Branch("tHeTPCNcls" ,&tHeTPCNcls ,"tHeTPCNcls/F");
499 fNtuple1->Branch("tHeimpactXY" ,&tHeimpactXY ,"tHeimpactXY/F");
500 fNtuple1->Branch("tHeimpactZ" ,&tHeimpactZ ,"tHeimpactZ/F");
501 fNtuple1->Branch("tHeITSClusterMap" ,&tHeITSClusterMap ,"tHeITSClusterMap/F");
502 fNtuple1->Branch("tIsHeITSRefit" ,&tIsHeITSRefit ,"tIsHeITSRefit/F");
503 fNtuple1->Branch("tPionSign" ,&tPionSign ,"tPionSign/F");
504 fNtuple1->Branch("tPionpInTPC" ,&tPionpInTPC ,"tPionpInTPC/F");
505 fNtuple1->Branch("tPionTPCsignal" ,&tPionTPCsignal ,"tPionTPCsignal/F");
506 fNtuple1->Branch("tDcaPionToPrimVertex" ,&tDcaPionToPrimVertex ,"tDcaPionToPrimVertex/F");
507 fNtuple1->Branch("tPionEta" ,&tPionEta ,"tPionEta/F");
508 fNtuple1->Branch("tmomPionx" ,&tmomPionx ,"tmomPionx/F");
509 fNtuple1->Branch("tmomPiony" ,&tmomPiony ,"tmomPiony/F");
510 fNtuple1->Branch("tmomPionz" ,&tmomPionz ,"tmomPionz/F");
511 fNtuple1->Branch("tmomNegPionAtSVx" ,&tmomNegPionAtSVx ,"tmomNegPionAtSVx/F");
512 fNtuple1->Branch("tmomNegPionAtSVy" ,&tmomNegPionAtSVy ,"tmomNegPionAtSVy/F");
513 fNtuple1->Branch("tmomNegPionAtSVz" ,&tmomNegPionAtSVz ,"tmomNegPionAtSVz/F");
514 fNtuple1->Branch("tPionTPCNcls" ,&tPionTPCNcls ,"tPionTPCNcls/F");
515 fNtuple1->Branch("tPionimpactXY" ,&tPionimpactXY ,"tPionimpactXY/F");
516 fNtuple1->Branch("tPionimpactZ" ,&tPionimpactZ ,"tPionimpactZ/F");
517 fNtuple1->Branch("tPionITSClusterMap" ,&tPionITSClusterMap ,"tPionITSClusterMap/F");
518 fNtuple1->Branch("tIsPiITSRefit" ,&tIsPiITSRefit ,"tIsPiITSRefit/F");
519 fNtuple1->Branch("txn" ,&txn ,"txn/F");
520 fNtuple1->Branch("txp" ,&txp ,"txp/F");
521 fNtuple1->Branch("tchi2He" ,&tchi2He ,"tchi2He/F");
522 fNtuple1->Branch("tchi2Pi" ,&tchi2Pi ,"tchi2Pi/F");
528 fNtuple4 = new TTree("fNtuple4","fNtuple4");
530 fNtuple4->Branch("t3LHlrunNumber" ,&t3LHlrunNumber ,"t3LHlrunNumber/F");
531 fNtuple4->Branch("t3LHlBCNumber" ,&t3LHlBCNumber ,"t3LHlBCNumber/F");
532 fNtuple4->Branch("t3LHlOrbitNumber" ,&t3LHlOrbitNumber ,"t3LHlOrbitNumber/F");
533 fNtuple4->Branch("t3LHlPeriodNumber" ,&t3LHlPeriodNumber ,"t3LHlPeriodNumber/F");
534 fNtuple4->Branch("t3LHleventtype" ,&t3LHleventtype ,"t3LHleventtype/F");
535 fNtuple4->Branch("t3LHlpercentile" ,&t3LHlpercentile ,"t3LHlpercentile/F");
536 fNtuple4->Branch("t3LHlPx" ,&t3LHlPx ,"t3LHlPx/F");
537 fNtuple4->Branch("t3LHlPy" ,&t3LHlPy ,"t3LHlPy/F");
538 fNtuple4->Branch("t3LHlPz" ,&t3LHlPz ,"t3LHlPz/F");
539 fNtuple4->Branch("t3LHlEta" ,&t3LHlEta ,"t3LHlEta/F");
540 fNtuple4->Branch("t3LHlY" ,&t3LHlY ,"t3LHlY/F");
541 fNtuple4->Branch("t3LHlM" ,&t3LHlM ,"t3LHlM/F");
542 fNtuple4->Branch("t3LHlxPrimaryVertex" ,&t3LHlxPrimaryVertex ,"t3LHlxPrimaryVertex/F");
543 fNtuple4->Branch("t3LHlyPrimaryVertex" ,&t3LHlyPrimaryVertex ,"t3LHlyPrimaryVertex/F");
544 fNtuple4->Branch("t3LHlzPrimaryVertex" ,&t3LHlzPrimaryVertex ,"t3LHlzPrimaryVertex/F");
545 fNtuple4->Branch("t3LHlp0px" ,&t3LHlp0px ,"t3LHlp0px/F");
546 fNtuple4->Branch("t3LHlp0py" ,&t3LHlp0py ,"t3LHlp0py/F");
547 fNtuple4->Branch("t3LHlp0pz" ,&t3LHlp0pz ,"t3LHlp0pz/F");
548 fNtuple4->Branch("t3LHlp0ch" ,&t3LHlp0ch ,"t3LHlp0ch/F");
549 fNtuple4->Branch("t3LHlp1px" ,&t3LHlp1px ,"t3LHlp1px/F");
550 fNtuple4->Branch("t3LHlp1py" ,&t3LHlp1py ,"t3LHlp1py/F");
551 fNtuple4->Branch("t3LHlp1pz" ,&t3LHlp1pz ,"t3LHlp1pz/F");
552 fNtuple4->Branch("t3LHlp1ch" ,&t3LHlp1ch ,"t3LHlp1ch/F");
558 PostData(1, fListHist);
559 PostData(2, fNtuple1);
560 PostData(3, fNtuple4);
561 }// end UserCreateOutputObjects
565 //====================== USER EXEC ========================
567 void AliAnalysisTaskReadNuclexAOD::UserExec(Option_t *)
569 //_______________________________________________________________________
571 //!*********************!//
572 //! Define variables !//
573 //!*********************!//
575 Double_t xPrimaryVertex=0.,yPrimaryVertex=0.,zPrimaryVertex=0.;
580 Bool_t IsHeITSRefit=kFALSE,IsPiITSRefit=kFALSE ;
582 Double_t fPos[3]={0.,0.,0.};
584 Double_t runNumber=0.;
585 Double_t BCNumber=0.;
586 Double_t OrbitNumber=0.;
587 Double_t PeriodNumber=0.;
589 Double_t Helium3Mass = 2.80839;
590 Double_t PionMass = 0.13957;
594 TLorentzVector vPion,vHelium,vSum;
596 TLorentzVector vp0,vp1,vS;
597 //!----------------------------------------------------------------
598 //! A set of very loose parameters for cuts
600 // Double_t fgChi2max=33.; //! max chi2
601 Double_t fgDNmin=0.05; //! min imp parameter for the 1st daughter = 500um
602 // Double_t fgDPmin=0.05; //! min imp parameter for the 2nd daughter = 500um
603 Double_t fgDCAmax=1.; //! max DCA between the daughter tracks in cm
604 // Double_t fgCPAmin=0.99; //! min cosine of V0's pointing angle
605 Double_t fgRmin=0.1; //! min radius of the fiducial volume = 1 mm
606 Double_t fgRmax=200.; //! max radius of the fiducial volume = 2 m
608 //!-----------------------------------------------------------------
611 // Called for EACH event
613 nevent++; //--> This is important
615 AliVEvent *event = InputEvent();
616 if (!event) { Printf("ERROR: Could not retrieve event"); return; }
617 Info("AliAnalysisTaskReadNuclexAOD","Starting UserExec");
621 AliAODEvent *lAODevent=(AliAODEvent *)InputEvent();
623 Printf("ERROR: aod not available");
624 // fHistLog->Fill(98);
628 fHistEventMultiplicity->Fill(0.5);
630 //*************************************************************
632 runNumber = lAODevent->GetRunNumber();
633 BCNumber = lAODevent->GetBunchCrossNumber();
634 OrbitNumber = lAODevent->GetOrbitNumber();
635 PeriodNumber = lAODevent->GetPeriodNumber();
637 AliCentrality *centrality = lAODevent->GetCentrality();
638 centrality = lAODevent->GetCentrality();
640 Float_t percentile=centrality->GetCentralityPercentile("V0M");
641 Float_t refMult = ((AliVAODHeader*)lAODevent->GetHeader())->GetRefMultiplicity();
643 fHistTrackMultiplicity->Fill(refMult,percentile); //tracce per evento
645 // cout<<"Centrality: "<<percentile<<" number of track: "<<lAODevent->GetHeader()->GetRefMultiplicity()<<endl;
646 //*************************************************************
648 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
649 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
653 Bool_t isSelectedCentral = (inputHandler->IsEventSelected() & AliVEvent::kCentral);
654 Bool_t isSelectedSemiCentral = (inputHandler->IsEventSelected() & AliVEvent::kSemiCentral);
655 Bool_t isSelectedMB = (inputHandler->IsEventSelected() & AliVEvent::kMB);
657 if(isSelectedCentral){
658 fHistEventMultiplicity->Fill(3.5);
659 fHistTrackMultiplicityCent->Fill(refMult,percentile);
663 if(isSelectedSemiCentral){
664 fHistEventMultiplicity->Fill(4.5);
665 fHistTrackMultiplicitySemiCent->Fill(refMult,percentile);
670 fHistEventMultiplicity->Fill(5.5);
671 fHistTrackMultiplicityMB->Fill(refMult,percentile);
675 if(eventtype==-99)return;
676 // cout<<"eventtype: "<<eventtype<<endl;
678 // if(!isSelectedCentral)return;
679 // if(!isSelectedSemiCentral)return;
680 // if(!isSelectedMB)return;
682 cout<<"eventtype: "<<eventtype<<endl;
684 //-------------------------------
686 Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
687 Double_t lMagneticField = -10.;
689 AliAODVertex* primvtx = lAODevent->GetPrimaryVertex();
694 fHistEventMultiplicity->Fill(1.5);
695 primvtx->GetXYZ( lBestPrimaryVtxPos );
697 if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0 ) {
698 AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
701 fHistEventMultiplicity->Fill(2.5);
705 fHistTrackMultiplicityPVCent->Fill(refMult,percentile);
706 fHistEventMultiplicity->Fill(6.5);
710 fHistTrackMultiplicityPVSemiCent->Fill(refMult,percentile);
711 fHistEventMultiplicity->Fill(7.5);
715 fHistTrackMultiplicityPVMB->Fill(refMult,percentile);
716 fHistEventMultiplicity->Fill(8.5);
719 lMagneticField = lAODevent->GetMagneticField();
721 xPrimaryVertex = lBestPrimaryVtxPos[0];
722 yPrimaryVertex = lBestPrimaryVtxPos[1];
723 zPrimaryVertex = lBestPrimaryVtxPos[2];
725 //--------------------------------------------------------
727 AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
729 aodTree = aodHandler->GetTree();
730 aodTree->SetBranchAddress("Nuclei",&Nuclei);
731 aodTree->SetBranchAddress("SecondaryVertices",&SecondaryVertices);
732 aodTree->SetBranchAddress("DaughterTracks",&DaughterTracks);
734 //---------------------------------------------------------
736 aodTree->GetEntry(nevent);
738 if(Nuclei-> GetEntriesFast()>0)
739 fHistEventMultiplicity->Fill(2);
741 if(SecondaryVertices-> GetEntriesFast()>0)
742 fHistEventMultiplicity->Fill(3);
744 for(Int_t i=0; i < SecondaryVertices-> GetEntriesFast() ; i++){
746 AliAODRecoDecayLF2Prong *d = (AliAODRecoDecayLF2Prong*)SecondaryVertices->UncheckedAt(i);
747 //cout<<"\n\n\nPT: "<<d->Pt()<<endl<<endl<<endl<<endl;
750 fHistEventMultiplicity->Fill(10.5);
752 // Double_t tDecayVertexV0[3];
753 // if(d->GetXYZ(tDecayVertexV0))
760 // cout<<"px prong 1: "<<d->PxProng(0)<<endl;
762 vHyp.SetXYZM(tV0mom[0],tV0mom[1],tV0mom[2],2.991);
765 vp0.SetXYZM(d->PxProng(0),d->PyProng(0),d->PzProng(0),PionMass);
766 vp1.SetXYZM(d->PxProng(1),d->PyProng(1),d->PzProng(1),Helium3Mass);
769 // cout<<"Momemnto pt: "<<lPt<<endl;
771 t3LHlrunNumber =(Float_t)runNumber;
772 t3LHlBCNumber =(Float_t)BCNumber;
773 t3LHlOrbitNumber =(Float_t)OrbitNumber;
774 t3LHlPeriodNumber =(Float_t)PeriodNumber;
775 t3LHleventtype =(Float_t)eventtype;
776 t3LHlpercentile =(Float_t)percentile;
777 t3LHlPx =(Float_t)tV0mom[0];
778 t3LHlPy =(Float_t)tV0mom[1];
779 t3LHlPz =(Float_t)tV0mom[2];
780 t3LHlEta =(Float_t)d->Eta();
781 t3LHlY =(Float_t)vHyp.Rapidity();
782 t3LHlM =(Float_t)vS.M();
783 t3LHlxPrimaryVertex =(Float_t)xPrimaryVertex;
784 t3LHlyPrimaryVertex =(Float_t)yPrimaryVertex;
785 t3LHlzPrimaryVertex =(Float_t)zPrimaryVertex;
787 t3LHlp0px =(Float_t)d->PxProng(0);
788 t3LHlp0py =(Float_t)d->PyProng(0);
789 t3LHlp0pz =(Float_t)d->PzProng(0);
790 t3LHlp0ch =(Float_t)d->ChargeProng(0);
791 t3LHlp1px =(Float_t)d->PxProng(1);
792 t3LHlp1py =(Float_t)d->PyProng(1);
793 t3LHlp1pz =(Float_t)d->PzProng(1);
794 t3LHlp1ch =(Float_t)d->ChargeProng(1);
801 //----------------------------------------
802 // Loop on tracks like-AnalysisTaskHelium3Pi.cxx
804 Int_t TrackNumber= DaughterTracks-> GetEntriesFast();
806 TArrayI Track0(TrackNumber); //Pions
809 TArrayI Track1(TrackNumber); //Helium3
813 Float_t impactXY=-999, impactZ=-999;
814 Float_t impactXYpi=-999, impactZpi=-999;
816 for(Int_t j=0; j<TrackNumber; j++){
817 // cout<<"eventtype inside: "<<eventtype<<endl;
818 // cout<<"Inside loop tracks"<<endl;
819 AliVTrack *track = (AliVTrack*)DaughterTracks->UncheckedAt(j);
820 AliAODTrack *aodtrack =(AliAODTrack*)track;
822 fhBB->Fill(aodtrack->GetDetPid()->GetTPCmomentum()*aodtrack->Charge(),aodtrack->GetTPCsignal());
824 //-----------------------------------------------------------
826 // if(aodtrack->GetTPCNcls() < 80 )continue;
827 // if(aodtrack->Chi2perNDF() > 5 )continue;
829 // if (!aodtrack->IsOn(AliAODTrack::kTPCrefit)) continue;
830 // if (!aodtrack->IsOn(AliAODTrack::kTPCin)) continue;
831 // if (aodtrack->IsOn(AliAODTrack::kITSpureSA)) continue;
833 //---------------------------------------------------------------
835 if (aodtrack->GetTPCsignal()<100){
837 fhBBPions->Fill(aodtrack->GetDetPid()->GetTPCmomentum()*aodtrack->Charge(),aodtrack->GetTPCsignal());
842 fhBBHe->Fill(aodtrack->GetDetPid()->GetTPCmomentum()*aodtrack->Charge(),aodtrack->GetTPCsignal());
851 //cout<<"nTrack0: "<<nTrack0<<endl;
852 //cout<<"nTrack1: "<<nTrack1<<endl;
855 //cout<<"Track loops..."<<endl;
857 Double_t DcaHeToPrimVertex=0;
858 Double_t DcaPionToPrimVertex=0;
860 impactXY=-999, impactZ=-999;
861 impactXYpi=-999, impactZpi=-999;
864 AliESDtrack *PionTrack = 0x0;
865 AliESDtrack *HeTrack = 0x0;
868 // Vettors for il PxPyPz
870 Double_t momPionVett[3];
871 for(Int_t i=0;i<3;i++)momPionVett[i]=0;
873 Double_t momHeVett[3];
874 for(Int_t i=0;i<3;i++)momHeVett[i]=0;
878 Double_t momPionVettAt[3];
879 for(Int_t i=0;i<3;i++)momPionVettAt[i]=0;
881 Double_t momHeVettAt[3];
882 for(Int_t i=0;i<3;i++)momHeVettAt[i]=0;
887 for (Int_t k=0; k <nTrack0 ; k++) { //! Pion Tracks Loop
889 DcaPionToPrimVertex=0.;
892 Int_t Track0idx=Track0[k];
894 AliVTrack *trackpi = (AliVTrack*)DaughterTracks->UncheckedAt(Track0idx);
895 PionTrack = new AliESDtrack(trackpi);
897 statusPi = (ULong_t)trackpi->GetStatus();
898 IsPiITSRefit = ((statusPi) & (AliESDtrack::kITSrefit));
901 DcaPionToPrimVertex = TMath::Abs(PionTrack->GetD(xPrimaryVertex, yPrimaryVertex,lMagneticField));
903 //cout<<"DcaPionToPrimVertex: "<<DcaPionToPrimVertex<<endl;
905 if(DcaPionToPrimVertex<0.2)continue;
906 AliExternalTrackParam trackInPion(*PionTrack);
908 for (Int_t i=0; i<nTrack1; i++){ //! He Tracks Loop
910 Int_t Track1idx=Track1[i];
912 AliVTrack *trackhe = (AliVTrack*)DaughterTracks->UncheckedAt(Track1idx);
913 HeTrack = new AliESDtrack(trackhe);
915 statusT= (ULong_t)HeTrack->GetStatus();
916 IsHeITSRefit = (statusT & AliESDtrack::kITSrefit);
919 DcaHeToPrimVertex = TMath::Abs(HeTrack->GetD(xPrimaryVertex, yPrimaryVertex,lMagneticField)); //OK
921 AliExternalTrackParam trackInHe(*HeTrack);
923 if ( DcaPionToPrimVertex < fgDNmin) //OK
924 if ( DcaHeToPrimVertex < fgDNmin) continue; //OK
929 dca= PionTrack->GetDCA(HeTrack,lMagneticField,xn,xp); //!dca (Neg to Pos)
931 //cout<<"dca tracks: "<<dca<<endl;
933 if (dca > fgDCAmax) continue;
934 if ((xn+xp) > 2*fgRmax) continue;
935 if ((xn+xp) < 2*fgRmin) continue;
937 Bool_t corrected=kFALSE;
938 if ((trackInPion.GetX() > 3.) && (xn < 3.)) {
939 //correct for the beam pipe material
942 if ((trackInHe.GetX() > 3.) && (xp < 3.)) {
943 //correct for the beam pipe material
947 dca=trackInPion.GetDCA(&trackInHe,lMagneticField,xn,xp);
948 if (dca > fgDCAmax) continue;
949 if ((xn+xp) > 2*fgRmax) continue;
950 if ((xn+xp) < 2*fgRmin) continue;
953 //=============================================//
954 // Make "V0" with found tracks //
955 //=============================================//
957 trackInPion.PropagateTo(xn,lMagneticField);
958 trackInHe.PropagateTo(xp,lMagneticField);
960 AliESDv0 vertex(trackInPion,Track0idx,trackInHe,Track1idx);
961 // if (vertex.GetChi2V0() > fgChi2max) continue;
963 //cout<<"Made v0"<<endl;
965 Float_t CosPointingAngle=vertex.GetV0CosineOfPointingAngle(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex); //PointingAngle
966 //cout<<"cpa: "<<CosPointingAngle<<endl;
967 // if (CosPointingAngle < fgCPAmin) continue;
969 vertex.SetDcaV0Daughters(dca);
970 vertex.SetV0CosineOfPointingAngle(CosPointingAngle);
976 HeTrack->PxPyPz(momHeVett);
977 PionTrack->PxPyPz(momPionVett);
979 Double_t raggio=TMath::Sqrt(fPos[0]*fPos[0]+fPos[1]*fPos[1]+fPos[2]*fPos[2]);
980 HeTrack->GetPxPyPzAt(raggio,lMagneticField,momHeVettAt);
981 PionTrack->GetPxPyPzAt(raggio,lMagneticField,momPionVettAt);
983 //------------------------------------------------------------------------//
985 HeTrack->GetImpactParameters(impactXY, impactZ);
986 PionTrack->GetImpactParameters(impactXYpi, impactZpi);
988 // if(vertex.GetD(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex)>3) continue;
990 //salvo solo fino a 3.1 GeV/c2
992 vHelium.SetXYZM(2*momHeVettAt[0],2*momHeVettAt[1],2*momHeVettAt[2],Helium3Mass);
993 vPion.SetXYZM(momPionVettAt[0],momPionVettAt[1],momPionVettAt[2],PionMass);
999 Int_t fIdxInt[200]; //dummy array
1000 Int_t nClustersTPCHe = HeTrack->GetTPCclusters(fIdxInt);
1001 Int_t nClustersTPCPi = PionTrack->GetTPCclusters(fIdxInt);
1003 //cout<<"Cos PA: "<<CosPointingAngle<<endl;
1004 fHistEventMultiplicity->Fill(11.5);
1005 //-------------------------------------------------------------
1007 trunNumber =(Float_t)runNumber;
1008 tbunchcross =(Float_t)BCNumber;
1009 torbit =(Float_t)OrbitNumber;
1010 tperiod =(Float_t)PeriodNumber;
1011 teventtype =(Float_t)eventtype;
1012 tTrackNumber =(Float_t)TrackNumber;
1013 tpercentile =(Float_t)percentile;
1014 txPrimaryVertex =(Float_t)xPrimaryVertex; //PRIMARY
1015 tyPrimaryVertex =(Float_t)yPrimaryVertex;
1016 tzPrimaryVertex =(Float_t)zPrimaryVertex;
1017 txSecondaryVertex =(Float_t)fPos[0]; //SECONDARY
1018 tySecondaryVertex =(Float_t)fPos[1];
1019 tzSecondaryVertex =(Float_t)fPos[2];
1020 tdcaTracks =(Float_t)dca; //between 2 tracks
1021 tCosPointingAngle =(Float_t)CosPointingAngle; //cosPointingAngle da V0
1022 tDCAV0toPrimaryVertex =(Float_t)vertex.GetD(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex);
1023 tHeSign =(Float_t)HeTrack->GetSign(); //He
1024 tHepInTPC =(Float_t)trackInHe.GetP();
1025 tHeTPCsignal =(Float_t)HeTrack->GetTPCsignal();
1026 tDcaHeToPrimVertex =(Float_t)DcaHeToPrimVertex;
1027 tHeEta =(Float_t)HeTrack->Eta();
1028 tmomHex =(Float_t)momHeVett[0];
1029 tmomHey =(Float_t)momHeVett[1];
1030 tmomHez =(Float_t)momHeVett[2];
1031 tmomHeAtSVx =(Float_t)momHeVettAt[0];
1032 tmomHeAtSVy =(Float_t)momHeVettAt[1];
1033 tmomHeAtSVz =(Float_t)momHeVettAt[2];
1034 tHeTPCNcls =(Float_t)HeTrack->GetTPCNcls();
1035 tHeimpactXY =(Float_t)impactXY;
1036 tHeimpactZ =(Float_t)impactZ;
1037 tHeITSClusterMap =(Float_t)HeTrack->GetITSClusterMap();
1038 tIsHeITSRefit =(Float_t)IsHeITSRefit;
1039 tPionSign =(Float_t)PionTrack->GetSign(); //Pion
1040 tPionpInTPC =(Float_t)trackInPion.GetP();
1041 tPionTPCsignal =(Float_t)PionTrack->GetTPCsignal();
1042 tDcaPionToPrimVertex =(Float_t)DcaPionToPrimVertex;
1043 tPionEta =(Float_t)PionTrack->Eta();
1044 tmomPionx =(Float_t)momPionVett[0];
1045 tmomPiony =(Float_t)momPionVett[1];
1046 tmomPionz =(Float_t)momPionVett[2];
1047 tmomNegPionAtSVx =(Float_t)momPionVettAt[0];
1048 tmomNegPionAtSVy =(Float_t)momPionVettAt[1];
1049 tmomNegPionAtSVz =(Float_t)momPionVettAt[2];
1050 tPionTPCNcls =(Float_t)PionTrack->GetTPCNcls();
1051 tPionimpactXY =(Float_t)impactXYpi;
1052 tPionimpactZ =(Float_t)impactZpi;
1053 tPionITSClusterMap =(Float_t)PionTrack->GetITSClusterMap();
1054 tIsPiITSRefit =(Float_t)IsPiITSRefit;
1057 tchi2He =(Float_t)HeTrack->GetTPCchi2()/(Float_t)(nClustersTPCHe);
1058 tchi2Pi =(Float_t)PionTrack->GetTPCchi2()/(Float_t)(nClustersTPCPi);
1067 PostData(1,fListHist);
1068 PostData(2,fNtuple1);
1069 PostData(3,fNtuple4);
1074 //________________________________________________________________________
1076 void AliAnalysisTaskReadNuclexAOD::Terminate(Option_t *)
1078 // Draw result to the screen
1079 // Called once at the end of the query