#include "AliESDcascade.h"
#include "AliAODcascade.h"
#include "AliESDUtils.h"
+#include "AliGenEventHeader.h"
#include "AliAnalysisTaskExtractPerformanceV0.h"
+using std::cout;
+using std::endl;
+
ClassImp(AliAnalysisTaskExtractPerformanceV0)
AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0()
- : AliAnalysisTaskSE(), fListHistV0(0), fTree(0),
+ : AliAnalysisTaskSE(), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0),
+ fkIsNuclear ( kFALSE ),
+ fkSwitchINT7 ( kFALSE ),
+ fkUseOnTheFly ( kFALSE ),
+ fkTakeAllTracks ( kFALSE ),
+ fpArapidityShift ( 0.465 ),
+ fCentralityEstimator("V0M"),
+ fkLightWeight ( kFALSE ),
+//------------------------------------------------
+// Tree Variables
+
+ fTreeVariablePrimaryStatus(0),
+ fTreeVariablePrimaryStatusMother(0),
+ fTreeVariableChi2V0(0),
+ fTreeVariableDcaV0Daughters(0),
+ fTreeVariableDcaV0ToPrimVertex(0),
+ fTreeVariableDcaPosToPrimVertex(0),
+ fTreeVariableDcaNegToPrimVertex(0),
+ fTreeVariableV0CosineOfPointingAngle(0),
+ fTreeVariableV0Radius(0),
+ fTreeVariablePt(0),
+ fTreeVariablePtMC(0),
+ fTreeVariableRapK0Short(0),
+ fTreeVariableRapLambda(0),
+ fTreeVariableRapMC(0),
+ fTreeVariableInvMassK0s(0),
+ fTreeVariableInvMassLambda(0),
+ fTreeVariableInvMassAntiLambda(0),
+ fTreeVariableAlphaV0(0),
+ fTreeVariablePtArmV0(0),
+ fTreeVariableNegTotMomentum(0),
+ fTreeVariablePosTotMomentum(0),
+ fTreeVariableNegTransvMomentum(0),
+ fTreeVariablePosTransvMomentum(0),
+ fTreeVariableNegTransvMomentumMC(0),
+ fTreeVariablePosTransvMomentumMC(0),
+
+ fTreeVariableNSigmasPosProton(0),
+ fTreeVariableNSigmasPosPion(0),
+ fTreeVariableNSigmasNegProton(0),
+ fTreeVariableNSigmasNegPion(0),
+
+ fTreeVariablePtMother(0),
+ fTreeVariableV0CreationRadius(0),
+ fTreeVariablePID(0),
+ fTreeVariablePIDPositive(0),
+ fTreeVariablePIDNegative(0),
+ fTreeVariablePIDMother(0),
+ fTreeVariableIndexStatus(0),
+ fTreeVariableIndexStatusMother(0),
+
+ fTreeVariableRunNumber(0),
+ fTreeVariableEventNumber(0),
+
+ fTreeVariableDistOverTotMom(0),
+
+ fTreeVariablePosEta(0),
+ fTreeVariableNegEta(0),
+
+ fTreeVariableVertexZ(0),
+
+ fTreeVariableLeastNbrCrossedRows(0),
+ fTreeVariableLeastRatioCrossedRowsOverFindable(0),
+ fTreeVariableMultiplicity(0),
+ fTreeVariableMultiplicityMC(0),
+
+ fTreeVariableV0x(0),
+ fTreeVariableV0y(0),
+ fTreeVariableV0z(0),
+
+ fTreeVariableV0Px(0),
+ fTreeVariableV0Py(0),
+ fTreeVariableV0Pz(0),
+
+ fTreeVariableMCV0x(0),
+ fTreeVariableMCV0y(0),
+ fTreeVariableMCV0z(0),
+
+ fTreeVariableMCV0Px(0),
+ fTreeVariableMCV0Py(0),
+ fTreeVariableMCV0Pz(0),
+
+ fTreeVariablePVx(0),
+ fTreeVariablePVy(0),
+ fTreeVariablePVz(0),
+
+ fTreeVariableMCPVx(0),
+ fTreeVariableMCPVy(0),
+ fTreeVariableMCPVz(0),
+
+ fTreeVariableIsNonInjected(0),
+
+ fTreeVariableNegTrackStatus(0),
+ fTreeVariablePosTrackStatus(0),
//------------------------------------------------
// HISTOGRAMS
fHistV0MultiplicityForSelEvt(0),
fHistV0MultiplicityForSelEvtNoTPCOnly(0),
fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+ fHistMultiplicityBeforeTrigSel(0),
+ fHistMultiplicityForTrigEvt(0),
fHistMultiplicity(0),
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
f3dHistPrimAnalysisPtVsYVsMultLambda(0),
f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
+ f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
+ f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
+ f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
f3dHistPrimRawPtVsYVsMultLambda(0),
f3dHistPrimRawPtVsYVsMultAntiLambda(0),
f3dHistPrimRawPtVsYVsMultK0Short(0),
+ f3dHistPrimRawPtVsYCMSVsMultLambda(0),
+ f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
+ f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
+ f3dHistPrimRawPtVsYVsMultNonInjLambda(0),
+ f3dHistPrimRawPtVsYVsMultNonInjAntiLambda(0),
+ f3dHistPrimRawPtVsYVsMultNonInjK0Short(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),
+ f3dHistGenPtVsYCMSVsMultXiMinus(0),
+ f3dHistGenPtVsYCMSVsMultXiPlus(0),
+ f3dHistGenPtVsYCMSVsMultOmegaMinus(0),
+ f3dHistGenPtVsYCMSVsMultOmegaPlus(0),
+ f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
+ f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
+ f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus(0),
+ f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus(0),
fHistPVx(0),
fHistPVy(0),
fHistPVz(0),
fHistPVzAnalysis(0),
fHistPVxAnalysisHasHighPtLambda(0),
fHistPVyAnalysisHasHighPtLambda(0),
- fHistPVzAnalysisHasHighPtLambda(0)
+ fHistPVzAnalysisHasHighPtLambda(0),
+ fHistSwappedV0Counter(0)
{
// Dummy Constructor
}
AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0(const char *name)
- : AliAnalysisTaskSE(name), fListHistV0(0), fTree(0),
-
+ : AliAnalysisTaskSE(name), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0),
+ fkIsNuclear ( kFALSE ),
+ fkSwitchINT7 ( kFALSE ),
+ fkUseOnTheFly ( kFALSE ),
+ fkTakeAllTracks ( kFALSE ),
+ fpArapidityShift ( 0.465 ),
+ fCentralityEstimator("V0M"),
+ fkLightWeight ( kFALSE ),
+//------------------------------------------------
+// Tree Variables
+
+ fTreeVariablePrimaryStatus(0),
+ fTreeVariablePrimaryStatusMother(0),
+ fTreeVariableChi2V0(0),
+ fTreeVariableDcaV0Daughters(0),
+ fTreeVariableDcaV0ToPrimVertex(0),
+ fTreeVariableDcaPosToPrimVertex(0),
+ fTreeVariableDcaNegToPrimVertex(0),
+ fTreeVariableV0CosineOfPointingAngle(0),
+ fTreeVariableV0Radius(0),
+ fTreeVariablePt(0),
+ fTreeVariablePtMC(0),
+ fTreeVariableRapK0Short(0),
+ fTreeVariableRapLambda(0),
+ fTreeVariableRapMC(0),
+ fTreeVariableInvMassK0s(0),
+ fTreeVariableInvMassLambda(0),
+ fTreeVariableInvMassAntiLambda(0),
+ fTreeVariableAlphaV0(0),
+ fTreeVariablePtArmV0(0),
+ fTreeVariableNegTotMomentum(0),
+ fTreeVariablePosTotMomentum(0),
+ fTreeVariableNegTransvMomentum(0),
+ fTreeVariablePosTransvMomentum(0),
+ fTreeVariableNegTransvMomentumMC(0),
+ fTreeVariablePosTransvMomentumMC(0),
+
+ fTreeVariableNSigmasPosProton(0),
+ fTreeVariableNSigmasPosPion(0),
+ fTreeVariableNSigmasNegProton(0),
+ fTreeVariableNSigmasNegPion(0),
+
+ fTreeVariablePtMother(0),
+ fTreeVariableV0CreationRadius(0),
+ fTreeVariablePID(0),
+ fTreeVariablePIDPositive(0),
+ fTreeVariablePIDNegative(0),
+ fTreeVariablePIDMother(0),
+ fTreeVariableIndexStatus(0),
+ fTreeVariableIndexStatusMother(0),
+
+ fTreeVariableRunNumber(0),
+ fTreeVariableEventNumber(0),
+
+ fTreeVariableDistOverTotMom(0),
+
+ fTreeVariablePosEta(0),
+ fTreeVariableNegEta(0),
+
+ fTreeVariableVertexZ(0),
+
+ fTreeVariableLeastNbrCrossedRows(0),
+ fTreeVariableLeastRatioCrossedRowsOverFindable(0),
+ fTreeVariableMultiplicity(0),
+ fTreeVariableMultiplicityMC(0),
+
+ fTreeVariableV0x(0),
+ fTreeVariableV0y(0),
+ fTreeVariableV0z(0),
+
+ fTreeVariableV0Px(0),
+ fTreeVariableV0Py(0),
+ fTreeVariableV0Pz(0),
+
+ fTreeVariableMCV0x(0),
+ fTreeVariableMCV0y(0),
+ fTreeVariableMCV0z(0),
+
+ fTreeVariableMCV0Px(0),
+ fTreeVariableMCV0Py(0),
+ fTreeVariableMCV0Pz(0),
+
+ fTreeVariablePVx(0),
+ fTreeVariablePVy(0),
+ fTreeVariablePVz(0),
+
+ fTreeVariableMCPVx(0),
+ fTreeVariableMCPVy(0),
+ fTreeVariableMCPVz(0),
+
+ fTreeVariableIsNonInjected(0),
+
+ fTreeVariableNegTrackStatus(0),
+ fTreeVariablePosTrackStatus(0),
+
//------------------------------------------------
// HISTOGRAMS
// --- Filled on an Event-by-event basis
fHistV0MultiplicityForSelEvt(0),
fHistV0MultiplicityForSelEvtNoTPCOnly(0),
fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
+ fHistMultiplicityBeforeTrigSel(0),
+ fHistMultiplicityForTrigEvt(0),
fHistMultiplicity(0),
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
f3dHistPrimAnalysisPtVsYVsMultLambda(0),
f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
+ f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
+ f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
+ f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
f3dHistPrimRawPtVsYVsMultLambda(0),
f3dHistPrimRawPtVsYVsMultAntiLambda(0),
f3dHistPrimRawPtVsYVsMultK0Short(0),
+ f3dHistPrimRawPtVsYCMSVsMultLambda(0),
+ f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
+ f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
+ f3dHistPrimRawPtVsYVsMultNonInjLambda(0),
+ f3dHistPrimRawPtVsYVsMultNonInjAntiLambda(0),
+ f3dHistPrimRawPtVsYVsMultNonInjK0Short(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),
+ f3dHistGenPtVsYCMSVsMultXiMinus(0),
+ f3dHistGenPtVsYCMSVsMultXiPlus(0),
+ f3dHistGenPtVsYCMSVsMultOmegaMinus(0),
+ f3dHistGenPtVsYCMSVsMultOmegaPlus(0),
+ f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
+ f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
+ f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus(0),
+ f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus(0),
fHistPVx(0),
fHistPVy(0),
fHistPVz(0),
fHistPVzAnalysis(0),
fHistPVxAnalysisHasHighPtLambda(0),
fHistPVyAnalysisHasHighPtLambda(0),
- fHistPVzAnalysisHasHighPtLambda(0)
+ fHistPVzAnalysisHasHighPtLambda(0),
+ fHistSwappedV0Counter(0)
{
// Constructor
// Output slot #0 writes into a TList container (Cascade)
delete fTree;
fTree = 0x0;
}
+ //cleanup esd track cuts object too...
+ if (fESDtrackCuts){
+ delete fESDtrackCuts;
+ fESDtrackCuts = 0x0;
+ }
}
//________________________________________________________________________
void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
{
- // Create histograms
- fListHistV0 = new TList();
- fListHistV0->SetOwner(); // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
-
+ OpenFile(2);
// Called once
- if( !fTree) {
- fTree = new TTree("fTree","V0Candidates");
//------------------------------------------------
-// fTree Branch definitions
+
+ fTree = new TTree("fTree","V0Candidates");
+
+//------------------------------------------------
+// fTree Branch definitions - V0 Tree
//------------------------------------------------
//-----------BASIC-INFO---------------------------
/* 1*/ fTree->Branch("fTreeVariablePrimaryStatus",&fTreeVariablePrimaryStatus,"fTreeVariablePrimaryStatus/I");
-/* 1*/ fTree->Branch("fTreeVariablePrimaryStatusMother",&fTreeVariablePrimaryStatusMother,"fTreeVariablePrimaryStatusMother/I");
+/* 2*/ fTree->Branch("fTreeVariablePrimaryStatusMother",&fTreeVariablePrimaryStatusMother,"fTreeVariablePrimaryStatusMother/I");
/* 2*/ fTree->Branch("fTreeVariableChi2V0",&fTreeVariableChi2V0,"Chi2V0/F");
/* 3*/ fTree->Branch("fTreeVariableDcaV0Daughters",&fTreeVariableDcaV0Daughters,"fTreeVariableDcaV0Daughters/F");
/* 4*/ fTree->Branch("fTreeVariableDcaPosToPrimVertex",&fTreeVariableDcaPosToPrimVertex,"fTreeVariableDcaPosToPrimVertex/F");
/*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");
/*34*/ fTree->Branch("fTreeVariableNegEta",&fTreeVariableNegEta,"fTreeVariableNegEta/F");
/*35*/ fTree->Branch("fTreeVariablePosEta",&fTreeVariablePosEta,"fTreeVariablePosEta/F");
/*36*/ fTree->Branch("fTreeVariableV0CreationRadius",&fTreeVariableV0CreationRadius,"fTreeVariableV0CreationRadius/F");
+
+ if ( fkLightWeight == kFALSE ){ // these are debugging branches!
/*37*/ fTree->Branch("fTreeVariableIndexStatus",&fTreeVariableIndexStatus,"fTreeVariableIndexStatus/I");
/*38*/ fTree->Branch("fTreeVariableIndexStatusMother",&fTreeVariableIndexStatusMother,"fTreeVariableIndexStatusMother/I");
+ }
- //It's alone...
- //fListHistV0->Add(fTree);
- }
+/*39*/ fTree->Branch("fTreeVariableRunNumber",&fTreeVariableRunNumber,"fTreeVariableRunNumber/I");
+/*40*/ fTree->Branch("fTreeVariableEventNumber",&fTreeVariableEventNumber,"fTreeVariableEventNumber/l");
+ if ( fkLightWeight == kFALSE ){ // these are debugging branches!
+/*34*/ fTree->Branch("fTreeVariableVertexZ",&fTreeVariableVertexZ,"fTreeVariableVertexZ/F");
+ }
+
+ if ( fkLightWeight == kFALSE ){ // these are debugging branches!
+//-----------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");
+ }
+
+ fTree->Branch("fTreeVariableIsNonInjected",&fTreeVariableIsNonInjected,"fTreeVariableIsNonInjected/O"); //O for bOOlean...
+
+ if ( fkLightWeight == kFALSE ){ // these are debugging branches!
+ fTree->Branch("fTreeVariableNegTrackStatus",&fTreeVariableNegTrackStatus,"fTreeVariableNegTrackStatus/l");
+ fTree->Branch("fTreeVariablePosTrackStatus",&fTreeVariablePosTrackStatus,"fTreeVariablePosTrackStatus/l");
+ }
+
//------------------------------------------------
// Particle Identification Setup
//------------------------------------------------
AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
fPIDResponse = inputHandler->GetPIDResponse();
+ // Multiplicity
+
+ if(! fESDtrackCuts ){
+ fESDtrackCuts = new AliESDtrackCuts();
+ }
+
//------------------------------------------------
// V0 Multiplicity Histograms
//------------------------------------------------
+ // Create histograms
+ OpenFile(1);
+ fListHistV0 = new TList();
+ fListHistV0->SetOwner(); // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
+
+
if(! fHistV0MultiplicityBeforeTrigSel) {
fHistV0MultiplicityBeforeTrigSel = new TH1F("fHistV0MultiplicityBeforeTrigSel",
"V0s per event (before Trig. Sel.);Nbr of V0s/Evt;Events",
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);
}
+ if(! f3dHistPrimRawPtVsYCMSVsMultLambda) {
+ f3dHistPrimRawPtVsYCMSVsMultLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultLambda", "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(f3dHistPrimRawPtVsYCMSVsMultLambda);
+ }
+ if(! f3dHistPrimRawPtVsYCMSVsMultAntiLambda) {
+ f3dHistPrimRawPtVsYCMSVsMultAntiLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultAntiLambda", "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(f3dHistPrimRawPtVsYCMSVsMultAntiLambda);
+ }
+ if(! f3dHistPrimRawPtVsYCMSVsMultK0Short) {
+ f3dHistPrimRawPtVsYCMSVsMultK0Short = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultK0Short", "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(f3dHistPrimRawPtVsYCMSVsMultK0Short);
+ }
+
+//---> Non-injected particles
+
+ if(! f3dHistPrimRawPtVsYVsMultNonInjLambda) {
+ f3dHistPrimRawPtVsYVsMultNonInjLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultNonInjLambda", "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(f3dHistPrimRawPtVsYVsMultNonInjLambda);
+ }
+ if(! f3dHistPrimRawPtVsYVsMultNonInjAntiLambda) {
+ f3dHistPrimRawPtVsYVsMultNonInjAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultNonInjAntiLambda", "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(f3dHistPrimRawPtVsYVsMultNonInjAntiLambda);
+ }
+ if(! f3dHistPrimRawPtVsYVsMultNonInjK0Short) {
+ f3dHistPrimRawPtVsYVsMultNonInjK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultNonInjK0Short", "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(f3dHistPrimRawPtVsYVsMultNonInjK0Short);
+ }
+
+//--- 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);
+ }
+
+//CASCADEs, Y CMS
+
+ if(! f3dHistGenPtVsYCMSVsMultXiMinus) {
+ f3dHistGenPtVsYCMSVsMultXiMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultXiMinus", "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(f3dHistGenPtVsYCMSVsMultXiMinus);
+ }
+ if(! f3dHistGenPtVsYCMSVsMultXiPlus) {
+ f3dHistGenPtVsYCMSVsMultXiPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultXiPlus", "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(f3dHistGenPtVsYCMSVsMultXiPlus);
+ }
+//--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+
+ if(! f3dHistGenPtVsYCMSVsMultOmegaMinus) {
+ f3dHistGenPtVsYCMSVsMultOmegaMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultOmegaMinus", "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(f3dHistGenPtVsYCMSVsMultOmegaMinus);
+ }
+ if(! f3dHistGenPtVsYCMSVsMultOmegaPlus) {
+ f3dHistGenPtVsYCMSVsMultOmegaPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultOmegaPlus", "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(f3dHistGenPtVsYCMSVsMultOmegaPlus);
+ }
+
+
+
+//--------------------------------------------------------------------------------------
+//--- 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);
+ }
+
+//CASCADES, analysis level, y CMS
+
+//--------------------------------------------------------------------------------------
+//--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
+
+ if(! f3dHistGenSelectedPtVsYCMSVsMultXiMinus) {
+ f3dHistGenSelectedPtVsYCMSVsMultXiMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultXiMinus", "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(f3dHistGenSelectedPtVsYCMSVsMultXiMinus);
+ }
+ if(! f3dHistGenSelectedPtVsYCMSVsMultXiPlus) {
+ f3dHistGenSelectedPtVsYCMSVsMultXiPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultXiPlus", "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(f3dHistGenSelectedPtVsYCMSVsMultXiPlus);
+ }
+//--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
+
+ if(! f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus) {
+ f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus", "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(f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus);
+ }
+ if(! f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus) {
+ f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus", "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(f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus);
+ }
+
//----------------------------------
// Histos at analysis level
fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultK0Short);
}
+ if(! f3dHistPrimAnalysisPtVsYCMSVsMultLambda) {
+ f3dHistPrimAnalysisPtVsYCMSVsMultLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultLambda", "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(f3dHistPrimAnalysisPtVsYCMSVsMultLambda);
+ }
+ if(! f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda) {
+ f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda", "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(f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda);
+ }
+ if(! f3dHistPrimAnalysisPtVsYCMSVsMultK0Short) {
+ f3dHistPrimAnalysisPtVsYCMSVsMultK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultK0Short", "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(f3dHistPrimAnalysisPtVsYCMSVsMultK0Short);
+ }
+
//----------------------------------
// Primary Vertex Position Histos
//----------------------------------
400, -20, 20);
fListHistV0->Add(fHistPVzAnalysisHasHighPtLambda);
}
+ if(! fHistSwappedV0Counter) {
+ fHistSwappedV0Counter = new TH1F("fHistSwappedV0Counter",
+ "Swap or not histo;Swapped (1) or not (0); count",
+ 2, 0, 2);
+ fListHistV0->Add(fHistSwappedV0Counter);
+ }
+
//List of Histograms: Normal
PostData(1, fListHistV0);
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 = AliESDtrackCuts::GetReferenceMultiplicity( lESDevent );
+ //REVISED multiplicity estimator after 'multiplicity day' (2011)
+ Int_t lMultiplicity = -100;
+
+ //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
+ if(fkIsNuclear == kTRUE){
+ AliCentrality* centrality;
+ centrality = lESDevent->GetCentrality();
+ lMultiplicity = ( ( Int_t ) ( centrality->GetCentralityPercentile( fCentralityEstimator.Data() ) ) );
+ if (centrality->GetQuality()>1) {
+ PostData(1, fListHistV0);
+ PostData(2, fTree);
+ return;
+ }
+ }
+
+ //Set variable for filling tree afterwards!
+ //---> pp case......: GetReferenceMultiplicity
+ //---> Pb-Pb case...: Centrality by V0M
+ fTreeVariableMultiplicity = lMultiplicity;
fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
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);
+ f3dHistGenPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
}
if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
lPtCurrentPart = lCurrentParticlePrimary->Pt();
f3dHistGenPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+ f3dHistGenPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+ }
+ // Omega Histograms
+ if( lCurrentParticlePrimary->GetPdgCode() == 3334 ){
+ lPtCurrentPart = lCurrentParticlePrimary->Pt();
+ f3dHistGenPtVsYVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+ f3dHistGenPtVsYCMSVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+ }
+ if( lCurrentParticlePrimary->GetPdgCode() == -3334 ){
+ lPtCurrentPart = lCurrentParticlePrimary->Pt();
+ f3dHistGenPtVsYVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+ f3dHistGenPtVsYCMSVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, 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 ------------------------------------------------------------
+
+ //Double_t lpArapidityShift = 0.465;
+ Bool_t lStackNatural = kTRUE;
//----- 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;
+ lStackNatural = lMCevent->IsFromBGEvent(iCurrentLabelStack); //Is it?
+ if (!lStackNatural){
+ if (!(lCurrentParticleForLambdaCheck->GetFirstMother()<0))
+ {lStackNatural = kTRUE;} // because there are primaries (ALICE definition) not produced in the collision
+ }
+
if( lPdgcodeCurrentPart == 3122 ){
f3dHistPrimRawPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+ f3dHistPrimRawPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
+ if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjLambda->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);
+ f3dHistPrimRawPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
+ if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
+ f3dHistPrimRawPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
+ f3dHistPrimRawPtVsYVsVertexZAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
}
if( lPdgcodeCurrentPart == 310 ){
f3dHistPrimRawPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+ f3dHistPrimRawPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
+ if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjK0Short->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;
UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
Bool_t isSelected = 0;
isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
+
+ //pA triggering: CINT7
+ if( fkSwitchINT7 ) isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
+
+ //Standard Min-Bias Selection
if ( ! isSelected ) {
PostData(1, fListHistV0);
PostData(2, fTree);
return;
}
+ f2dHistMultiplicityVsTrueForTrigEvt->Fill ( lMultiplicity , lNumberOfCharged );
+ fHistGenVertexZForTrigEvt->Fill( mcPrimaryVtx.At(2) );
//------------------------------------------------
// After Trigger Selection
//------------------------------------------------
lNumberOfV0s = lESDevent->GetNumberOfV0s();
//Set variable for filling tree afterwards!
- fTreeVariableMultiplicity = lMultiplicity;
fHistV0MultiplicityForTrigEvt->Fill(lNumberOfV0s);
fHistMultiplicityForTrigEvt->Fill ( lMultiplicity );
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
//------------------------------------------------
// FIXME : quality selection regarding pile-up rejection
- if(lESDevent->IsPileupFromSPD() ){// minContributors=3, minZdist=0.8, nSigmaZdist=3., nSigmaDiamXY=2., nSigmaDiamZ=5. -> see http://alisoft.cern.ch/viewvc/trunk/STEER/AliESDEvent.h?root=AliRoot&r1=41914&r2=42199&pathrev=42199
+ if(lESDevent->IsPileupFromSPD() && !fkIsNuclear ){// minContributors=3, minZdist=0.8, nSigmaZdist=3., nSigmaDiamXY=2., nSigmaDiamZ=5. -> see http://alisoft.cern.ch/viewvc/trunk/STEER/AliESDEvent.h?root=AliRoot&r1=41914&r2=42199&pathrev=42199
AliWarning("Pb / This is tagged as Pileup from SPD... return !");
PostData(1, fListHistV0);
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
//------------------------------------------------
if( lPdgcodeCurrentPart == 3122 ){
f3dHistPrimAnalysisPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+ f3dHistPrimAnalysisPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
}
if( lPdgcodeCurrentPart == -3122 ){
f3dHistPrimAnalysisPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+ f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
}
if( lPdgcodeCurrentPart == 310 ){
f3dHistPrimAnalysisPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
+ f3dHistPrimAnalysisPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
}
}
+//----- 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);
+ f3dHistGenSelectedPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+ }
+ if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
+ lPtCurrentPart = lCurrentParticlePrimary->Pt();
+ f3dHistGenSelectedPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+ f3dHistGenSelectedPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+ }
+ // Omega Histograms
+ if( lCurrentParticlePrimary->GetPdgCode() == 3334 ){
+ lPtCurrentPart = lCurrentParticlePrimary->Pt();
+ f3dHistGenSelectedPtVsYVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+ f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+ }
+ if( lCurrentParticlePrimary->GetPdgCode() == -3334 ){
+ lPtCurrentPart = lCurrentParticlePrimary->Pt();
+ f3dHistGenSelectedPtVsYVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
+ f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
+ }
+ }
+ }
+//----- End Loop on primary Xi, Omega ----------------------------------------------------------
+
//------------------------------------------------
// MAIN LAMBDA LOOP STARTS HERE
//------------------------------------------------
AliESDv0 *v0 = ((AliESDEvent*)lESDevent)->GetV0(iV0);
if (!v0) continue;
+ //---> Fix On-the-Fly candidates
+ if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){
+ fHistSwappedV0Counter -> Fill( 1 );
+ }else{
+ fHistSwappedV0Counter -> Fill( 0 );
+ }
+ if ( fkUseOnTheFly ) CheckChargeV0(v0);
+
+
Double_t tV0mom[3];
v0->GetPxPyPz( tV0mom[0],tV0mom[1],tV0mom[2] );
Double_t lV0TotalMomentum = TMath::Sqrt(
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());
// Track quality cuts
Float_t lPosTrackCrossedRows = pTrack->GetTPCClusterInfo(2,1);
Float_t lNegTrackCrossedRows = nTrack->GetTPCClusterInfo(2,1);
- fTreeVariableLeastNbrCrossedRows = lPosTrackCrossedRows;
+ fTreeVariableLeastNbrCrossedRows = (Int_t) lPosTrackCrossedRows;
if( lNegTrackCrossedRows < fTreeVariableLeastNbrCrossedRows )
- fTreeVariableLeastNbrCrossedRows = lNegTrackCrossedRows;
+ fTreeVariableLeastNbrCrossedRows = (Int_t) lNegTrackCrossedRows;
// TPC refit condition (done during reconstruction for Offline but not for On-the-fly)
if( !(pTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;
if( !(nTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;
- if ( ( ( pTrack->GetTPCClusterInfo(2,1) ) < 70 ) || ( ( nTrack->GetTPCClusterInfo(2,1) ) < 70 ) ) continue;
+ //Get status flags
+ fTreeVariablePosTrackStatus = pTrack->GetStatus();
+ fTreeVariableNegTrackStatus = nTrack->GetStatus();
+
+ if ( ( ( ( pTrack->GetTPCClusterInfo(2,1) ) < 70 ) || ( ( nTrack->GetTPCClusterInfo(2,1) ) < 70 ) )&&(fkTakeAllTracks==kFALSE) ) continue;
//GetKinkIndex condition
if( pTrack->GetKinkIndex(0)>0 || nTrack->GetKinkIndex(0)>0 ) continue;
//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 )
fTreeVariableLeastRatioCrossedRowsOverFindable = lNegTrackCrossedRowsOverFindable;
//Lowest Cut Level for Ratio Crossed Rows / Findable = 0.8, set here
- if ( fTreeVariableLeastRatioCrossedRowsOverFindable < 0.8 ) continue;
+ if ( (fTreeVariableLeastRatioCrossedRowsOverFindable < 0.8)&&(fkTakeAllTracks==kFALSE) ) continue;
//End track Quality Cuts
//________________________________________________________________________
//Set tree variables
fTreeVariablePID = pThisV0->GetPdgCode(); //PDG Code
fTreeVariablePtMC = pThisV0->Pt(); //Perfect Pt
+
+ fTreeVariableIsNonInjected = lMCevent->IsFromBGEvent(lblMotherPosV0Dghter); //Is it?
+ if (!fTreeVariableIsNonInjected){
+ if (!(pThisV0->GetFirstMother()<0))
+ {fTreeVariableIsNonInjected = kTRUE;} // because there are primaries (ALICE definition) not produced in the collision
+ }
+
+ //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);
//Keep only if included in a parametric InvMass Region 20 sigmas away from peak
//First Selection: Reject OnFly
- if( lOnFlyStatus == 0 ){
+ if( (lOnFlyStatus == 0 && fkUseOnTheFly == kFALSE) || (lOnFlyStatus != 0 && fkUseOnTheFly == kTRUE ) ){
//Second Selection: rough 20-sigma band, parametric.
//K0Short: Enough to parametrize peak broadening with linear function.
Double_t lUpperLimitK0Short = (5.63707e-01) + (1.14979e-02)*fTreeVariablePt;
if( (fTreeVariableInvMassLambda < lUpperLimitLambda && fTreeVariableInvMassLambda > lLowerLimitLambda ) ||
(fTreeVariableInvMassAntiLambda < lUpperLimitLambda && fTreeVariableInvMassAntiLambda > lLowerLimitLambda ) ||
(fTreeVariableInvMassK0s < lUpperLimitK0Short && fTreeVariableInvMassK0s > lLowerLimitK0Short ) ){
- fTree->Fill();
+ //Pre-selection in case this is AA...
+ if( fkIsNuclear == kFALSE ) fTree->Fill();
+ if( fkIsNuclear == kTRUE){
+ //If this is a nuclear collision___________________
+ // ... pre-filter with daughter eta selection only (not TPC)
+ if ( TMath::Abs(fTreeVariableNegEta)<0.8 && TMath::Abs(fTreeVariablePosEta)<0.8 ) fTree->Fill();
+ }//end nuclear_____________________________________
}
}
}// 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;
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskExtractPerformanceV0::CheckChargeV0(AliESDv0 *v0)
+{
+ // This function checks charge of negative and positive daughter tracks.
+ // If incorrectly defined (onfly vertexer), swaps out.
+ if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){
+ //V0 daughter track swapping is required! Note: everything is swapped here... P->N, N->P
+ Long_t lCorrectNidx = v0->GetPindex();
+ Long_t lCorrectPidx = v0->GetNindex();
+ Double32_t lCorrectNmom[3];
+ Double32_t lCorrectPmom[3];
+ v0->GetPPxPyPz( lCorrectNmom[0], lCorrectNmom[1], lCorrectNmom[2] );
+ v0->GetNPxPyPz( lCorrectPmom[0], lCorrectPmom[1], lCorrectPmom[2] );
+
+ AliExternalTrackParam lCorrectParamN(
+ v0->GetParamP()->GetX() ,
+ v0->GetParamP()->GetAlpha() ,
+ v0->GetParamP()->GetParameter() ,
+ v0->GetParamP()->GetCovariance()
+ );
+ AliExternalTrackParam lCorrectParamP(
+ v0->GetParamN()->GetX() ,
+ v0->GetParamN()->GetAlpha() ,
+ v0->GetParamN()->GetParameter() ,
+ v0->GetParamN()->GetCovariance()
+ );
+ lCorrectParamN.SetMostProbablePt( v0->GetParamP()->GetMostProbablePt() );
+ lCorrectParamP.SetMostProbablePt( v0->GetParamN()->GetMostProbablePt() );
+
+ //Get Variables___________________________________________________
+ Double_t lDcaV0Daughters = v0 -> GetDcaV0Daughters();
+ Double_t lCosPALocal = v0 -> GetV0CosineOfPointingAngle();
+ Bool_t lOnFlyStatusLocal = v0 -> GetOnFlyStatus();
+
+ //Create Replacement Object_______________________________________
+ AliESDv0 *v0correct = new AliESDv0(lCorrectParamN,lCorrectNidx,lCorrectParamP,lCorrectPidx);
+ v0correct->SetDcaV0Daughters ( lDcaV0Daughters );
+ v0correct->SetV0CosineOfPointingAngle ( lCosPALocal );
+ v0correct->ChangeMassHypothesis ( kK0Short );
+ v0correct->SetOnFlyStatus ( lOnFlyStatusLocal );
+
+ //Reverse Cluster info..._________________________________________
+ v0correct->SetClusters( v0->GetClusters( 1 ), v0->GetClusters ( 0 ) );
+
+ *v0 = *v0correct;
+ //Proper cleanup..._______________________________________________
+ v0correct->Delete();
+ v0correct = 0x0;
+
+ //Just another cross-check and output_____________________________
+ if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ) {
+ AliWarning("Found Swapped Charges, tried to correct but something FAILED!");
+ }else{
+ //AliWarning("Found Swapped Charges and fixed.");
+ }
+ //________________________________________________________________
+ }else{
+ //Don't touch it! ---
+ //Printf("Ah, nice. Charges are already ordered...");
+ }
+ return;
}
-//----------------------------------------------------------------------------