#include "AliESDcascade.h"
#include "AliAODcascade.h"
#include "AliESDUtils.h"
+#include "AliGenEventHeader.h"
#include "AliAnalysisTaskExtractPerformanceV0.h"
ClassImp(AliAnalysisTaskExtractPerformanceV0)
AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0()
- : AliAnalysisTaskSE(), fListHistV0(0), fTree(0), fPIDResponse(0),
+ : AliAnalysisTaskSE(), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0),
fkIsNuclear ( kFALSE ),
fkLowEnergyPP ( kFALSE ),
fkUseOnTheFly ( kFALSE ),
fHistMultiplicityNoTPCOnly(0),
fHistMultiplicityNoTPCOnlyNoPileup(0),
+ f2dHistMultiplicityVsTrueBeforeTrigSel(0),
+ f2dHistMultiplicityVsTrueForTrigEvt(0),
+ f2dHistMultiplicityVsTrue(0),
+ f2dHistMultiplicityVsTrueNoTPCOnly(0),
+ f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
+
+ //Raw Data for Vertex Z position estimator change
+ f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
+ f2dHistMultiplicityVsVertexZForTrigEvt(0),
+ f2dHistMultiplicityVsVertexZ(0),
+ f2dHistMultiplicityVsVertexZNoTPCOnly(0),
+ f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
+
+ fHistGenVertexZBeforeTrigSel(0),
+ fHistGenVertexZForTrigEvt(0),
+ fHistGenVertexZ(0),
+ fHistGenVertexZNoTPCOnly(0),
+ fHistGenVertexZNoTPCOnlyNoPileup(0),
+
//------------------------------------------------
// PARTICLE HISTOGRAMS
// --- Filled on a Particle-by-Particle basis
f3dHistPrimRawPtVsYVsMultLambda(0),
f3dHistPrimRawPtVsYVsMultAntiLambda(0),
f3dHistPrimRawPtVsYVsMultK0Short(0),
+ f3dHistPrimRawPtVsYVsMultMCLambda(0),
+ f3dHistPrimRawPtVsYVsMultMCAntiLambda(0),
+ f3dHistPrimRawPtVsYVsMultMCK0Short(0),
+ f3dHistPrimRawPtVsYVsVertexZLambda(0),
+ f3dHistPrimRawPtVsYVsVertexZAntiLambda(0),
+ f3dHistPrimRawPtVsYVsVertexZK0Short(0),
+ f3dHistPrimCloseToPVPtVsYVsMultLambda(0),
+ f3dHistPrimCloseToPVPtVsYVsMultAntiLambda(0),
+ f3dHistPrimCloseToPVPtVsYVsMultK0Short(0),
f3dHistPrimRawPtVsYVsDecayLengthLambda(0),
f3dHistPrimRawPtVsYVsDecayLengthAntiLambda(0),
f3dHistPrimRawPtVsYVsDecayLengthK0Short(0),
f3dHistGenPtVsYVsMultXiMinus(0),
f3dHistGenPtVsYVsMultXiPlus(0),
+ f3dHistGenPtVsYVsMultOmegaMinus(0),
+ f3dHistGenPtVsYVsMultOmegaPlus(0),
+ f3dHistGenSelectedPtVsYVsMultXiMinus(0),
+ f3dHistGenSelectedPtVsYVsMultXiPlus(0),
+ f3dHistGenSelectedPtVsYVsMultOmegaMinus(0),
+ f3dHistGenSelectedPtVsYVsMultOmegaPlus(0),
fHistPVx(0),
fHistPVy(0),
fHistPVz(0),
}
AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0(const char *name)
- : AliAnalysisTaskSE(name), fListHistV0(0), fTree(0), fPIDResponse(0),
+ : AliAnalysisTaskSE(name), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0),
fkIsNuclear ( kFALSE ),
fkLowEnergyPP ( kFALSE ),
fkUseOnTheFly ( kFALSE ),
fHistMultiplicityNoTPCOnly(0),
fHistMultiplicityNoTPCOnlyNoPileup(0),
+ f2dHistMultiplicityVsTrueBeforeTrigSel(0),
+ f2dHistMultiplicityVsTrueForTrigEvt(0),
+ f2dHistMultiplicityVsTrue(0),
+ f2dHistMultiplicityVsTrueNoTPCOnly(0),
+ f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
+
+ //Raw Data for Vertex Z position estimator change
+ f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
+ f2dHistMultiplicityVsVertexZForTrigEvt(0),
+ f2dHistMultiplicityVsVertexZ(0),
+ f2dHistMultiplicityVsVertexZNoTPCOnly(0),
+ f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
+
+ fHistGenVertexZBeforeTrigSel(0),
+ fHistGenVertexZForTrigEvt(0),
+ fHistGenVertexZ(0),
+ fHistGenVertexZNoTPCOnly(0),
+ fHistGenVertexZNoTPCOnlyNoPileup(0),
//------------------------------------------------
// PARTICLE HISTOGRAMS
f3dHistPrimRawPtVsYVsMultLambda(0),
f3dHistPrimRawPtVsYVsMultAntiLambda(0),
f3dHistPrimRawPtVsYVsMultK0Short(0),
+ f3dHistPrimRawPtVsYVsMultMCLambda(0),
+ f3dHistPrimRawPtVsYVsMultMCAntiLambda(0),
+ f3dHistPrimRawPtVsYVsMultMCK0Short(0),
+ f3dHistPrimRawPtVsYVsVertexZLambda(0),
+ f3dHistPrimRawPtVsYVsVertexZAntiLambda(0),
+ f3dHistPrimRawPtVsYVsVertexZK0Short(0),
+ f3dHistPrimCloseToPVPtVsYVsMultLambda(0),
+ f3dHistPrimCloseToPVPtVsYVsMultAntiLambda(0),
+ f3dHistPrimCloseToPVPtVsYVsMultK0Short(0),
f3dHistPrimRawPtVsYVsDecayLengthLambda(0),
f3dHistPrimRawPtVsYVsDecayLengthAntiLambda(0),
f3dHistPrimRawPtVsYVsDecayLengthK0Short(0),
f3dHistGenPtVsYVsMultXiMinus(0),
f3dHistGenPtVsYVsMultXiPlus(0),
+ f3dHistGenPtVsYVsMultOmegaMinus(0),
+ f3dHistGenPtVsYVsMultOmegaPlus(0),
+ f3dHistGenSelectedPtVsYVsMultXiMinus(0),
+ f3dHistGenSelectedPtVsYVsMultXiPlus(0),
+ f3dHistGenSelectedPtVsYVsMultOmegaMinus(0),
+ f3dHistGenSelectedPtVsYVsMultOmegaPlus(0),
fHistPVx(0),
fHistPVy(0),
fHistPVz(0),
delete fTree;
fTree = 0x0;
}
+ //cleanup esd track cuts object too...
+ if (fESDtrackCuts){
+ delete fESDtrackCuts;
+ fESDtrackCuts = 0x0;
+ }
}
//________________________________________________________________________
OpenFile(2);
// Called once
+
+//------------------------------------------------
+
fTree = new TTree("fTree","V0Candidates");
//------------------------------------------------
-// fTree Branch definitions
+// fTree Branch definitions - V0 Tree
//------------------------------------------------
//-----------BASIC-INFO---------------------------
/*27*/ fTree->Branch("fTreeVariableV0CosineOfPointingAngle",&fTreeVariableV0CosineOfPointingAngle,"fTreeVariableV0CosineOfPointingAngle/F");
//-----------MULTIPLICITY-INFO--------------------
/*28*/ fTree->Branch("fTreeVariableMultiplicity",&fTreeVariableMultiplicity,"fTreeVariableMultiplicity/I");
+/*28*/ fTree->Branch("fTreeVariableMultiplicityMC",&fTreeVariableMultiplicityMC,"fTreeVariableMultiplicityMC/I");
//------------------------------------------------
/*29*/ fTree->Branch("fTreeVariableDistOverTotMom",&fTreeVariableDistOverTotMom,"fTreeVariableDistOverTotMom/F");
/*30*/ fTree->Branch("fTreeVariableNSigmasPosProton",&fTreeVariableNSigmasPosProton,"fTreeVariableNSigmasPosProton/F");
/*37*/ fTree->Branch("fTreeVariableIndexStatus",&fTreeVariableIndexStatus,"fTreeVariableIndexStatus/I");
/*38*/ fTree->Branch("fTreeVariableIndexStatusMother",&fTreeVariableIndexStatusMother,"fTreeVariableIndexStatusMother/I");
+/*39*/ fTree->Branch("fTreeVariableRunNumber",&fTreeVariableRunNumber,"fTreeVariableRunNumber/I");
+/*40*/ fTree->Branch("fTreeVariableEventNumber",&fTreeVariableEventNumber,"fTreeVariableEventNumber/l");
+
+/*34*/ fTree->Branch("fTreeVariableVertexZ",&fTreeVariableVertexZ,"fTreeVariableVertexZ/F");
+
+//-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info
+ fTree->Branch("fTreeVariableV0x",&fTreeVariableV0x,"fTreeVariableV0x/F");
+ fTree->Branch("fTreeVariableV0y",&fTreeVariableV0y,"fTreeVariableV0y/F");
+ fTree->Branch("fTreeVariableV0z",&fTreeVariableV0z,"fTreeVariableV0z/F");
+
+ fTree->Branch("fTreeVariableV0Px",&fTreeVariableV0Px,"fTreeVariableV0Px/F");
+ fTree->Branch("fTreeVariableV0Py",&fTreeVariableV0Py,"fTreeVariableV0Py/F");
+ fTree->Branch("fTreeVariableV0Pz",&fTreeVariableV0Pz,"fTreeVariableV0Pz/F");
+
+//-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info, perfect info from MC
+ fTree->Branch("fTreeVariableMCV0x",&fTreeVariableMCV0x,"fTreeVariableMCV0x/F");
+ fTree->Branch("fTreeVariableMCV0y",&fTreeVariableMCV0y,"fTreeVariableMCV0y/F");
+ fTree->Branch("fTreeVariableMCV0z",&fTreeVariableMCV0z,"fTreeVariableMCV0z/F");
+
+ fTree->Branch("fTreeVariableMCV0Px",&fTreeVariableMCV0Px,"fTreeVariableMCV0Px/F");
+ fTree->Branch("fTreeVariableMCV0Py",&fTreeVariableMCV0Py,"fTreeVariableMCV0Py/F");
+ fTree->Branch("fTreeVariableMCV0Pz",&fTreeVariableMCV0Pz,"fTreeVariableMCV0Pz/F");
+
+//-----------FOR CTAU DEBUGGING: Primary vertex info
+ fTree->Branch("fTreeVariablePVx",&fTreeVariablePVx,"fTreeVariablePVx/F");
+ fTree->Branch("fTreeVariablePVy",&fTreeVariablePVy,"fTreeVariablePVy/F");
+ fTree->Branch("fTreeVariablePVz",&fTreeVariablePVz,"fTreeVariablePVz/F");
+
+ fTree->Branch("fTreeVariableMCPVx",&fTreeVariableMCPVx,"fTreeVariableMCPVx/F");
+ fTree->Branch("fTreeVariableMCPVy",&fTreeVariableMCPVy,"fTreeVariableMCPVy/F");
+ fTree->Branch("fTreeVariableMCPVz",&fTreeVariableMCPVz,"fTreeVariableMCPVz/F");
+
//------------------------------------------------
// Particle Identification Setup
//------------------------------------------------
AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
fPIDResponse = inputHandler->GetPIDResponse();
+ // Multiplicity
+
+ if(! fESDtrackCuts ){
+ fESDtrackCuts = new AliESDtrackCuts();
+ }
+
//------------------------------------------------
// V0 Multiplicity Histograms
//------------------------------------------------
fListHistV0->Add(fHistMultiplicityNoTPCOnlyNoPileup);
}
+ //Raw Data for J/Psi paper Technique
+ //TH2F *f2dHistMultiplicityVsTrueBeforeTrigSel; //! multiplicity distribution
+ //TH2F *f2dHistMultiplicityVsTrueForTrigEvt; //! multiplicity distribution
+ //TH2F *f2dHistMultiplicityVsTrue; //! multiplicity distribution
+ //TH2F *f2dHistMultiplicityVsTrueNoTPCOnly; //! multiplicity distribution
+ //TH2F *f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup; //! multiplicity distribution
+
+ if(! f2dHistMultiplicityVsTrueBeforeTrigSel) {
+ f2dHistMultiplicityVsTrueBeforeTrigSel = new TH2F("f2dHistMultiplicityVsTrueBeforeTrigSel",
+ "Tracks per event", 200, 0, 200, 200, 0, 200);
+ fListHistV0->Add(f2dHistMultiplicityVsTrueBeforeTrigSel);
+ }
+ if(! f2dHistMultiplicityVsTrueForTrigEvt) {
+ f2dHistMultiplicityVsTrueForTrigEvt = new TH2F("f2dHistMultiplicityVsTrueForTrigEvt",
+ "Tracks per event", 200, 0, 200, 200, 0, 200);
+ fListHistV0->Add(f2dHistMultiplicityVsTrueForTrigEvt);
+ }
+ if(! f2dHistMultiplicityVsTrue) {
+ f2dHistMultiplicityVsTrue = new TH2F("f2dHistMultiplicityVsTrue",
+ "Tracks per event", 200, 0, 200, 200, 0, 200);
+ fListHistV0->Add(f2dHistMultiplicityVsTrue);
+ }
+ if(! f2dHistMultiplicityVsTrueNoTPCOnly) {
+ f2dHistMultiplicityVsTrueNoTPCOnly = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnly",
+ "Tracks per event", 200, 0, 200, 200, 0, 200);
+ fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnly);
+ }
+ if(! f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup) {
+ f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup",
+ "Tracks per event", 200, 0, 200, 200, 0, 200);
+ fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup);
+ }
+
+
+ //Raw Data for Vertex Z position estimator change
+ //TH2F *f2dHistMultiplicityVsVertexZBeforeTrigSel; //! multiplicity distribution
+ //TH2F *f2dHistMultiplicityVsVertexZForTrigEvt; //! multiplicity distribution
+ //TH2F *f2dHistMultiplicityVsVertexZ; //! multiplicity distribution
+ //TH2F *f2dHistMultiplicityVsVertexZNoTPCOnly; //! multiplicity distribution
+ //TH2F *f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup; //! multiplicity distribution
+
+ if(! f2dHistMultiplicityVsVertexZBeforeTrigSel) {
+ f2dHistMultiplicityVsVertexZBeforeTrigSel = new TH2F("f2dHistMultiplicityVsVertexZBeforeTrigSel",
+ "Tracks per event", 200, 0, 200,400, -20, 20);
+ fListHistV0->Add(f2dHistMultiplicityVsVertexZBeforeTrigSel);
+ }
+ if(! f2dHistMultiplicityVsVertexZForTrigEvt) {
+ f2dHistMultiplicityVsVertexZForTrigEvt = new TH2F("f2dHistMultiplicityVsVertexZForTrigEvt",
+ "Tracks per event", 200, 0, 200, 400, -20, 20);
+ fListHistV0->Add(f2dHistMultiplicityVsVertexZForTrigEvt);
+ }
+ if(! f2dHistMultiplicityVsVertexZ) {
+ f2dHistMultiplicityVsVertexZ = new TH2F("f2dHistMultiplicityVsVertexZ",
+ "Tracks per event", 200, 0, 200, 400, -20, 20);
+ fListHistV0->Add(f2dHistMultiplicityVsVertexZ);
+ }
+ if(! f2dHistMultiplicityVsVertexZNoTPCOnly) {
+ f2dHistMultiplicityVsVertexZNoTPCOnly = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnly",
+ "Tracks per event", 200, 0, 200, 400, -20, 20);
+ fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnly);
+ }
+ if(! f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup) {
+ f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup",
+ "Tracks per event", 200, 0, 200, 400, -20, 20);
+ fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup);
+ }
+
+//Generated PVz test
+
+// TH1F *fHistGenVertexZBeforeTrigSel; //! multiplicity distribution
+// TH1F *fHistGenVertexZForTrigEvt; //! multiplicity distribution
+// TH1F *fHistGenVertexZ; //! multiplicity distribution
+// TH1F *fHistGenVertexZNoTPCOnly; //! multiplicity distribution
+// TH1F *fHistGenVertexZNoTPCOnlyNoPileup; //! multiplicity distribution
+
+ if(! fHistGenVertexZBeforeTrigSel) {
+ fHistGenVertexZBeforeTrigSel = new TH1F("fHistGenVertexZBeforeTrigSel",
+ "PV z position;Nbr of Evts;z",
+ 400, -20, 20);
+ fListHistV0->Add(fHistGenVertexZBeforeTrigSel);
+ }
+ if(! fHistGenVertexZForTrigEvt) {
+ fHistGenVertexZForTrigEvt = new TH1F("fHistGenVertexZForTrigEvt",
+ "PV z position;Nbr of Evts;z",
+ 400, -20, 20);
+ fListHistV0->Add(fHistGenVertexZForTrigEvt);
+ }
+ if(! fHistGenVertexZ) {
+ fHistGenVertexZ = new TH1F("fHistGenVertexZ",
+ "PV z position;Nbr of Evts;z",
+ 400, -20, 20);
+ fListHistV0->Add(fHistGenVertexZ);
+ }
+ if(! fHistGenVertexZNoTPCOnly) {
+ fHistGenVertexZNoTPCOnly = new TH1F("fHistGenVertexZNoTPCOnly",
+ "PV z position;Nbr of Evts;z",
+ 400, -20, 20);
+ fListHistV0->Add(fHistGenVertexZNoTPCOnly);
+ }
+ if(! fHistGenVertexZNoTPCOnlyNoPileup) {
+ fHistGenVertexZNoTPCOnlyNoPileup = new TH1F("fHistGenVertexZNoTPCOnlyNoPileup",
+ "PV z position;Nbr of Evts;z",
+ 400, -20, 20);
+ fListHistV0->Add(fHistGenVertexZNoTPCOnlyNoPileup);
+ }
+
+
//------------------------------------------------
// Generated Particle Histograms
//------------------------------------------------
fListHistV0->Add(f3dHistPrimRawPtVsYVsMultK0Short);
}
+//--- 3D Histo (Pt, Y, MultiplicityMC)
+
+ if(! f3dHistPrimRawPtVsYVsMultMCLambda) {
+ f3dHistPrimRawPtVsYVsMultMCLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultMCLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+ fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCLambda);
+ }
+ if(! f3dHistPrimRawPtVsYVsMultMCAntiLambda) {
+ f3dHistPrimRawPtVsYVsMultMCAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultMCAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+ fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCAntiLambda);
+ }
+ if(! f3dHistPrimRawPtVsYVsMultMCK0Short) {
+ f3dHistPrimRawPtVsYVsMultMCK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultMCK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+ fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCK0Short);
+ }
+
+//--- 3D Histo (Pt, Y, VertexZ)
+
+ if(! f3dHistPrimRawPtVsYVsVertexZLambda) {
+ f3dHistPrimRawPtVsYVsVertexZLambda = new TH3F( "f3dHistPrimRawPtVsYVsVertexZLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs VertexZiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; VertexZ", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,40,-10,10);
+ fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZLambda);
+ }
+ if(! f3dHistPrimRawPtVsYVsVertexZAntiLambda) {
+ f3dHistPrimRawPtVsYVsVertexZAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsVertexZAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs VertexZiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; VertexZ", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,40,-10,10);
+ fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZAntiLambda);
+ }
+ if(! f3dHistPrimRawPtVsYVsVertexZK0Short) {
+ f3dHistPrimRawPtVsYVsVertexZK0Short = new TH3F( "f3dHistPrimRawPtVsYVsVertexZK0Short", "Pt_{K0S} Vs Y_{K0S} Vs VertexZiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; VertexZ", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,40,-10,10);
+ fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZK0Short);
+ }
+
+//--- 3D Histo (Pt, Y, Multiplicity), close to PV criterion
+
+ if(! f3dHistPrimCloseToPVPtVsYVsMultLambda) {
+ f3dHistPrimCloseToPVPtVsYVsMultLambda = new TH3F( "f3dHistPrimCloseToPVPtVsYVsMultLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+ fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultLambda);
+ }
+ if(! f3dHistPrimCloseToPVPtVsYVsMultAntiLambda) {
+ f3dHistPrimCloseToPVPtVsYVsMultAntiLambda = new TH3F( "f3dHistPrimCloseToPVPtVsYVsMultAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+ fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultAntiLambda);
+ }
+ if(! f3dHistPrimCloseToPVPtVsYVsMultK0Short) {
+ f3dHistPrimCloseToPVPtVsYVsMultK0Short = new TH3F( "f3dHistPrimCloseToPVPtVsYVsMultK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+ fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultK0Short);
+ }
+
+
//--- 3D Histo (Pt, Y, Proper Decay Length)
if(! f3dHistPrimRawPtVsYVsDecayLengthLambda) {
fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthK0Short);
}
-//--- 3D Histo (Pt, Y, Multiplicity) for generated charged Xi (feeddown)
+//--------------------------------------------------------------------------------------
+//--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
if(! f3dHistGenPtVsYVsMultXiMinus) {
f3dHistGenPtVsYVsMultXiMinus = new TH3F( "f3dHistGenPtVsYVsMultXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
f3dHistGenPtVsYVsMultXiPlus = new TH3F( "f3dHistGenPtVsYVsMultXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
fListHistV0->Add(f3dHistGenPtVsYVsMultXiPlus);
}
+//--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+
+ if(! f3dHistGenPtVsYVsMultOmegaMinus) {
+ f3dHistGenPtVsYVsMultOmegaMinus = new TH3F( "f3dHistGenPtVsYVsMultOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+ fListHistV0->Add(f3dHistGenPtVsYVsMultOmegaMinus);
+ }
+ if(! f3dHistGenPtVsYVsMultOmegaPlus) {
+ f3dHistGenPtVsYVsMultOmegaPlus = new TH3F( "f3dHistGenPtVsYVsMultOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+ fListHistV0->Add(f3dHistGenPtVsYVsMultOmegaPlus);
+ }
+
+//--------------------------------------------------------------------------------------
+//--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
+
+ if(! f3dHistGenSelectedPtVsYVsMultXiMinus) {
+ f3dHistGenSelectedPtVsYVsMultXiMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+ fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultXiMinus);
+ }
+ if(! f3dHistGenSelectedPtVsYVsMultXiPlus) {
+ f3dHistGenSelectedPtVsYVsMultXiPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+ fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultXiPlus);
+ }
+//--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+
+ if(! f3dHistGenSelectedPtVsYVsMultOmegaMinus) {
+ f3dHistGenSelectedPtVsYVsMultOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+ fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultOmegaMinus);
+ }
+ if(! f3dHistGenSelectedPtVsYVsMultOmegaPlus) {
+ f3dHistGenSelectedPtVsYVsMultOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
+ fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultOmegaPlus);
+ }
+
//----------------------------------
// Histos at analysis level
return;
}
+ fTreeVariableRunNumber = lESDevent->GetRunNumber();
+ fTreeVariableEventNumber =
+ ( ( ((ULong64_t)lESDevent->GetPeriodNumber() ) << 36 ) |
+ ( ((ULong64_t)lESDevent->GetOrbitNumber () ) << 12 ) |
+ ((ULong64_t)lESDevent->GetBunchCrossNumber() ) );
+
lMCevent = MCEvent();
if (!lMCevent) {
Printf("ERROR: Could not retrieve MC event \n");
cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
return;
}
+ TArrayF mcPrimaryVtx;
+ AliGenEventHeader* mcHeader=lMCevent->GenEventHeader();
+ if(!mcHeader) return;
+ mcHeader->PrimaryVertex(mcPrimaryVtx);
//------------------------------------------------
// Multiplicity Information Acquistion
//REVISED multiplicity estimator after 'multiplicity day' (2011)
Int_t lMultiplicity = -100;
- if(fkIsNuclear == kFALSE) lMultiplicity = AliESDtrackCuts::GetReferenceMultiplicity( lESDevent );
+ //testing purposes
+ if(fkIsNuclear == kFALSE) lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,0.5);
//---> If this is a nuclear collision, then go nuclear on "multiplicity" variable...
//---> Warning: Experimental
Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
continue;
}
- if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 ){
- Double_t lRapXiMCPrimary = 0.5*TMath::Log((lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13));
+ if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) {
+ Double_t lRapXiMCPrimary = -100;
+ if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) {
+ if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
+ lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
+ }
+ }
//=================================================================================
- // Xi Histograms for Feeddown - Primary Charged Xis
+ // Xi Histograms
if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){
lPtCurrentPart = lCurrentParticlePrimary->Pt();
f3dHistGenPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
lPtCurrentPart = lCurrentParticlePrimary->Pt();
f3dHistGenPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
}
+ // Omega Histograms
+ if( lCurrentParticlePrimary->GetPdgCode() == 3334 ){
+ lPtCurrentPart = lCurrentParticlePrimary->Pt();
+ f3dHistGenPtVsYVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+ }
+ if( lCurrentParticlePrimary->GetPdgCode() == -3334 ){
+ lPtCurrentPart = lCurrentParticlePrimary->Pt();
+ f3dHistGenPtVsYVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+ }
}
}
//----- End Loop on primary Xi, Omega ----------------------------------------------------------
+//--------- GENERATED NUMBER OF CHARGED PARTICLES
+// ---> Set Variables to Zero again
+// ---> Variable Definition
+
+ Long_t lNumberOfCharged = 0;
+
+//----- Loop on Stack ----------------------------------------------------------------
+ for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++)
+ {// This is the begining of the loop on tracks
+ TParticle* particleOne = lMCstack->Particle(iCurrentLabelStack);
+ if(!particleOne) continue;
+ if(!particleOne->GetPDG()) continue;
+ Double_t lThisCharge = particleOne->GetPDG()->Charge()/3.;
+ if(TMath::Abs(lThisCharge)<0.001) continue;
+ if(! (lMCstack->IsPhysicalPrimary(iCurrentLabelStack)) ) continue;
+
+ Double_t gpt = particleOne -> Pt();
+ Double_t geta = particleOne -> Eta();
+
+ if( TMath::Abs(geta) < 0.5) lNumberOfCharged++;
+ }//End of loop on tracks
+//----- End Loop on Stack ------------------------------------------------------------
+
+
//----- Loop on Lambda, K0Short ----------------------------------------------------------------
for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++)
{// This is the begining of the loop on tracks
lRapCurrentPart = MyRapidity(lCurrentParticleForLambdaCheck->Energy(),lCurrentParticleForLambdaCheck->Pz());
lPtCurrentPart = lCurrentParticleForLambdaCheck->Pt();
+ //Use Close to PV for filling CloseToPV histograms!
+ Double_t dx, dy, dz;
+
+ dx = ( (mcPrimaryVtx.At(0)) - (lCurrentParticleForLambdaCheck->Vx()) );
+ dy = ( (mcPrimaryVtx.At(1)) - (lCurrentParticleForLambdaCheck->Vy()) );
+ dz = ( (mcPrimaryVtx.At(2)) - (lCurrentParticleForLambdaCheck->Vz()) );
+ Double_t lDistToPV = TMath::Sqrt(dx*dx + dy*dy + dz*dz);
+ if( lDistToPV <= 0.001){
+ if( lPdgcodeCurrentPart == 3122 ){
+ f3dHistPrimCloseToPVPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+ }
+ if( lPdgcodeCurrentPart == -3122 ){
+ f3dHistPrimCloseToPVPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+ }
+ if( lPdgcodeCurrentPart == 310 ){
+ f3dHistPrimCloseToPVPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+ }
+ }
+
//Use Physical Primaries only for filling PrimRaw Histograms!
if ( lMCstack->IsPhysicalPrimary(iCurrentLabelStack)!=kTRUE ) continue;
if( lPdgcodeCurrentPart == 3122 ){
f3dHistPrimRawPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+ f3dHistPrimRawPtVsYVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
+ f3dHistPrimRawPtVsYVsVertexZLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
if( TMath::Abs( lCurrentParticleForLambdaCheck->Eta() )<1.2 && lPtCurrentPart>2 ){
lHasHighPtLambda = kTRUE; //Keep track of events with Lambda within |eta|<1.2 and pt>2
}
}
if( lPdgcodeCurrentPart == -3122 ){
f3dHistPrimRawPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+ f3dHistPrimRawPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
+ f3dHistPrimRawPtVsYVsVertexZAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
}
if( lPdgcodeCurrentPart == 310 ){
f3dHistPrimRawPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+ f3dHistPrimRawPtVsYVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
+ f3dHistPrimRawPtVsYVsVertexZK0Short->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
}
//Decay Length Acquisition=====================================================
Double_t decaylength = -1;
//Need to correct for relativitity! Involves multiplying by mass and dividing by momentum.
if(TMath::Abs( lPdgcodeCurrentPart ) == 3122 ) { lV0Mass = 1.115683; }
if(TMath::Abs( lPdgcodeCurrentPart ) == 310 ) { lV0Mass = 0.497614; }
- decaylength = ( lV0Mass * decaylength ) / ( lCurrentParticleForLambdaCheck->P() + 1e-10 );
+ if( lCurrentParticleForLambdaCheck->P() + 1e-10 != 0 ) decaylength = ( lV0Mass * decaylength ) / ( lCurrentParticleForLambdaCheck->P() + 1e-10 );
+ if( lCurrentParticleForLambdaCheck->P() + 1e-10 == 0 ) decaylength = 1e+5;
}
}
if( lPdgcodeCurrentPart == 3122) f3dHistPrimRawPtVsYVsDecayLengthLambda ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength );
}//End of loop on tracks
//----- End Loop on Lambda, K0Short ------------------------------------------------------------
-// ---> Set Variables to Zero again
-// ---> Variable Definition
+
+ f2dHistMultiplicityVsTrueBeforeTrigSel->Fill ( lMultiplicity , lNumberOfCharged );
+
+ fTreeVariableMultiplicityMC = lNumberOfCharged;
+
+ fHistGenVertexZBeforeTrigSel->Fill( (mcPrimaryVtx.At(2)) );
lPdgcodeCurrentPart = 0;
lRapCurrentPart = 0;
return;
}
+ f2dHistMultiplicityVsTrueForTrigEvt->Fill ( lMultiplicity , lNumberOfCharged );
+ fHistGenVertexZForTrigEvt->Fill( mcPrimaryVtx.At(2) );
//------------------------------------------------
// After Trigger Selection
//------------------------------------------------
fHistPVy->Fill( lPrimaryVtxPosition[1] );
fHistPVz->Fill( lPrimaryVtxPosition[2] );
+ f2dHistMultiplicityVsVertexZForTrigEvt->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
+
//------------------------------------------------
// Primary Vertex Z position: SKIP
//------------------------------------------------
return;
}
+ f2dHistMultiplicityVsVertexZ->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
+
lMagneticField = lESDevent->GetMagneticField( );
fHistV0MultiplicityForSelEvt ->Fill( lNumberOfV0s );
fHistMultiplicity->Fill(lMultiplicity);
-
+ f2dHistMultiplicityVsTrue->Fill ( lMultiplicity , lNumberOfCharged );
+ fHistGenVertexZ->Fill( (mcPrimaryVtx.At(2)) );
//------------------------------------------------
// SKIP: Events with well-established PVtx
//------------------------------------------------
PostData(2, fTree);
return;
}
+
+ f2dHistMultiplicityVsVertexZNoTPCOnly->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
fHistV0MultiplicityForSelEvtNoTPCOnly ->Fill( lNumberOfV0s );
fHistMultiplicityNoTPCOnly->Fill(lMultiplicity);
-
+ f2dHistMultiplicityVsTrueNoTPCOnly->Fill ( lMultiplicity , lNumberOfCharged );
+ fHistGenVertexZNoTPCOnly->Fill( (mcPrimaryVtx.At(2)) );
//------------------------------------------------
// Pileup Rejection Studies
//------------------------------------------------
PostData(2, fTree);
return;
}
+ f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( lNumberOfV0s );
fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
-
+ f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup->Fill ( lMultiplicity , lNumberOfCharged );
+ fHistGenVertexZNoTPCOnlyNoPileup->Fill( (mcPrimaryVtx.At(2)) );
//Do control histograms without the IsFromVertexerZ events, but consider them in analysis...
if( ! (lESDevent->GetPrimaryVertex()->IsFromVertexerZ() ) ){
fHistPVxAnalysis->Fill( lPrimaryVtxPosition[0] );
}
}
+ fTreeVariableVertexZ = lPrimaryVtxPosition[2];
+
+ fTreeVariablePVx = lPrimaryVtxPosition[0];
+ fTreeVariablePVy = lPrimaryVtxPosition[1];
+ fTreeVariablePVz = lPrimaryVtxPosition[2];
+
+ fTreeVariableMCPVx = (mcPrimaryVtx.At(0));
+ fTreeVariableMCPVy = (mcPrimaryVtx.At(1));
+ fTreeVariableMCPVz = (mcPrimaryVtx.At(2));
+
//------------------------------------------------
// stack loop starts here
//------------------------------------------------
}
}
+//----- Loop on primary Xi, Omega --------------------------------------------------------------
+ for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++)
+ {// This is the begining of the loop on primaries
+
+ TParticle* lCurrentParticlePrimary = 0x0;
+ lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
+ if(!lCurrentParticlePrimary){
+ Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
+ continue;
+ }
+ if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) {
+ Double_t lRapXiMCPrimary = -100;
+ if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) {
+ if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
+ lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
+ }
+ }
+
+ //=================================================================================
+ // Xi Histograms
+ if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){
+ lPtCurrentPart = lCurrentParticlePrimary->Pt();
+ f3dHistGenSelectedPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+ }
+ if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
+ lPtCurrentPart = lCurrentParticlePrimary->Pt();
+ f3dHistGenSelectedPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+ }
+ // Omega Histograms
+ if( lCurrentParticlePrimary->GetPdgCode() == 3334 ){
+ lPtCurrentPart = lCurrentParticlePrimary->Pt();
+ f3dHistGenSelectedPtVsYVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+ }
+ if( lCurrentParticlePrimary->GetPdgCode() == -3334 ){
+ lPtCurrentPart = lCurrentParticlePrimary->Pt();
+ f3dHistGenSelectedPtVsYVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+ }
+ }
+ }
+//----- End Loop on primary Xi, Omega ----------------------------------------------------------
+
//------------------------------------------------
// MAIN LAMBDA LOOP STARTS HERE
//------------------------------------------------
lPt = v0->Pt();
lRapK0Short = v0->RapK0Short();
lRapLambda = v0->RapLambda();
+
+ //Set Variables for later filling
+ fTreeVariableV0x = tDecayVertexV0[0];
+ fTreeVariableV0y = tDecayVertexV0[1];
+ fTreeVariableV0z = tDecayVertexV0[2];
+
+ //Set Variables for later filling
+ fTreeVariableV0Px = tV0mom[0];
+ fTreeVariableV0Py = tV0mom[1];
+ fTreeVariableV0Pz = tV0mom[2];
+
if ((lPt<fMinV0Pt)||(fMaxV0Pt<lPt)) continue;
UInt_t lKeyPos = (UInt_t)TMath::Abs(v0->GetPindex());
//Compute ratio Crossed Rows / Findable clusters
//Note: above test avoids division by zero!
- Float_t lPosTrackCrossedRowsOverFindable = lPosTrackCrossedRows / ((double)(pTrack->GetTPCNclsF()));
- Float_t lNegTrackCrossedRowsOverFindable = lNegTrackCrossedRows / ((double)(nTrack->GetTPCNclsF()));
+ Float_t lPosTrackCrossedRowsOverFindable = -1;
+ Float_t lNegTrackCrossedRowsOverFindable = -1;
+ if ( ((double)(pTrack->GetTPCNclsF()) ) != 0 ) lPosTrackCrossedRowsOverFindable = lPosTrackCrossedRows / ((double)(pTrack->GetTPCNclsF()));
+ if ( ((double)(nTrack->GetTPCNclsF()) ) != 0 ) lNegTrackCrossedRowsOverFindable = lNegTrackCrossedRows / ((double)(nTrack->GetTPCNclsF()));
fTreeVariableLeastRatioCrossedRowsOverFindable = lPosTrackCrossedRowsOverFindable;
if( lNegTrackCrossedRowsOverFindable < fTreeVariableLeastRatioCrossedRowsOverFindable )
//Set tree variables
fTreeVariablePID = pThisV0->GetPdgCode(); //PDG Code
fTreeVariablePtMC = pThisV0->Pt(); //Perfect Pt
+
+ //Set Variables for later filling
+ //Be careful: Vx, Vy, Vz: Creation vertex. So decay position is the
+ //Creation vertex of any one of the daughters!
+ fTreeVariableMCV0x = mcPosV0Dghter->Vx();
+ fTreeVariableMCV0y = mcPosV0Dghter->Vy();
+ fTreeVariableMCV0z = mcPosV0Dghter->Vz();
+
+ //Set Variables for later filling
+ fTreeVariableMCV0Px = pThisV0->Px();
+ fTreeVariableMCV0Py = pThisV0->Py();
+ fTreeVariableMCV0Pz = pThisV0->Pz();
+
//Only Interested if it's a Lambda, AntiLambda or K0s
//Avoid the Junction Bug! PYTHIA has particles with Px=Py=Pz=E=0 occasionally,
//having particle code 88 (unrecognized by PDG), for documentation purposes.
if( TMath::Abs(fTreeVariablePID) == 3122 || fTreeVariablePID==310 ){
fTreeVariableRapMC = pThisV0->Y(); //Perfect Y
}
- fTreeVariableV0CreationRadius = pThisV0->R(); // Creation Radius
+ fTreeVariableV0CreationRadius = TMath::Sqrt(
+ TMath::Power( ( (mcPrimaryVtx.At(0)) - (pThisV0->Vx()) ) , 2) +
+ TMath::Power( ( (mcPrimaryVtx.At(1)) - (pThisV0->Vy()) ) , 2) +
+ TMath::Power( ( (mcPrimaryVtx.At(2)) - (pThisV0->Vz()) ) , 2)
+ );
if( lblMotherPosV0Dghter < lNbMCPrimary ) fTreeVariableIndexStatus = 1; //looks primary
if( lblMotherPosV0Dghter >= lNbMCPrimary ) fTreeVariableIndexStatus = 2; //looks secondary
if( lMCstack->IsPhysicalPrimary (lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 1; //Is Primary!
fTreeVariableNSigmasNegPion = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kPion );
//tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]
- fTreeVariableDistOverTotMom = TMath::Sqrt(
+ Double_t lDistanceTravelled = TMath::Sqrt(
TMath::Power( tDecayVertexV0[0] - lBestPrimaryVtxPos[0] , 2) +
TMath::Power( tDecayVertexV0[1] - lBestPrimaryVtxPos[1] , 2) +
TMath::Power( tDecayVertexV0[2] - lBestPrimaryVtxPos[2] , 2)
);
- fTreeVariableDistOverTotMom /= (lV0TotalMomentum + 1e-10); //avoid division by zero, to be sure
+ fTreeVariableDistOverTotMom = 1e+5;
+ if( lV0TotalMomentum + 1e-10 != 0 ) fTreeVariableDistOverTotMom = lDistanceTravelled / (lV0TotalMomentum + 1e-10); //avoid division by zero, to be sure
Double_t lMomentumPosTemp[3];
pTrack->GetPxPyPz(lMomentumPosTemp);
}// This is the end of the V0 loop
+//------------------------------------------------
+
// Post output data.
PostData(1, fListHistV0);
PostData(2, fTree);
Double_t AliAnalysisTaskExtractPerformanceV0::MyRapidity(Double_t rE, Double_t rPz) const
{
// Local calculation for rapidity
- return 0.5*TMath::Log((rE+rPz)/(rE-rPz+1.e-13));
+ Double_t ReturnValue = -100;
+ if( (rE-rPz+1.e-13) != 0 && (rE+rPz) != 0 ){
+ ReturnValue = 0.5*TMath::Log((rE+rPz)/(rE-rPz+1.e-13));
+ }
+ return ReturnValue;
}
//________________________________________________________________________