From a19c3402e7670e9538dbd04af7b0302180c208ca Mon Sep 17 00:00:00 2001 From: kaamodt Date: Tue, 27 Jan 2009 14:42:07 +0000 Subject: [PATCH] Cleaning up files, added documentation. Added ntuple for v0s. --- .../AliAnalysisTaskGammaConversion.cxx | 84 +- .../AliAnalysisTaskGammaConversion.h | 9 +- .../AliGammaConversionHistograms.cxx | 115 +- PWG4/GammaConv/AliGammaConversionHistograms.h | 7 + PWG4/GammaConv/AliV0Reader.cxx | 65 +- PWG4/GammaConv/AliV0Reader.h | 167 ++ PWG4/macros/ConfigGammaConversion.C | 1498 +++++++++-------- 7 files changed, 1170 insertions(+), 775 deletions(-) diff --git a/PWG4/GammaConv/AliAnalysisTaskGammaConversion.cxx b/PWG4/GammaConv/AliAnalysisTaskGammaConversion.cxx index f6edf1f412e..5df0c831888 100644 --- a/PWG4/GammaConv/AliAnalysisTaskGammaConversion.cxx +++ b/PWG4/GammaConv/AliAnalysisTaskGammaConversion.cxx @@ -2,7 +2,7 @@ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * * * Author: Ana Marin, Kathrin Koch, Kenneth Aamodt * - * Version 1.0 * + * Version 1.1 * * * * Permission to use, copy, modify and distribute this software and its * * documentation strictly for non-commercial purposes is hereby granted * @@ -64,7 +64,11 @@ AliAnalysisTaskGammaConversion::AliAnalysisTaskGammaConversion(): fGammaWidth(-1), fPi0Width(-1), fEtaWidth(-1), - fCalculateBackground(kFALSE) + fCalculateBackground(kFALSE), + fWriteNtuple(kFALSE), + fGammaNtuple(NULL), + fNeutralMesonNtuple(NULL), + fTotalNumberOfAddedNtupleEntries(0) { // Default constructor // Common I/O in slot 0 @@ -94,7 +98,11 @@ AliAnalysisTaskGammaConversion::AliAnalysisTaskGammaConversion(const char* name) fGammaWidth(-1), fPi0Width(-1), fEtaWidth(-1), - fCalculateBackground(kFALSE) + fCalculateBackground(kFALSE), + fWriteNtuple(kFALSE), + fGammaNtuple(NULL), + fNeutralMesonNtuple(NULL), + fTotalNumberOfAddedNtupleEntries(0) { // Common I/O in slot 0 DefineInput (0, TChain::Class()); @@ -380,9 +388,62 @@ void AliAnalysisTaskGammaConversion::ProcessMCData(){ }// end for (Int_t iTracks = 0; iTracks < fStack->GetNtrack(); iTracks++) } // end ProcessMCData +void AliAnalysisTaskGammaConversion::FillNtuple(){ + + if(fGammaNtuple == NULL){ + return; + } + Int_t numberOfV0s = fV0Reader->GetNumberOfV0s(); + for(Int_t i=0;iGetV0(i); + Double_t negPID=0; + Double_t posPID=0; + fV0Reader->GetPIDProbability(negPID,posPID); + values[0]=cV0->GetOnFlyStatus(); + values[1]=fV0Reader->CheckForPrimaryVertex(); + values[2]=negPID; + values[3]=posPID; + values[4]=fV0Reader->GetX(); + values[5]=fV0Reader->GetY(); + values[6]=fV0Reader->GetZ(); + values[7]=fV0Reader->GetXYRadius(); + values[8]=fV0Reader->GetMotherCandidateNDF(); + values[9]=fV0Reader->GetMotherCandidateChi2(); + values[10]=fV0Reader->GetMotherCandidateEnergy(); + values[11]=fV0Reader->GetMotherCandidateEta(); + values[12]=fV0Reader->GetMotherCandidatePt(); + values[13]=fV0Reader->GetMotherCandidateMass(); + values[14]=fV0Reader->GetMotherCandidateWidth(); + // values[15]=fV0Reader->GetMotherMCParticle()->Pt(); MOVED TO THE END, HAS TO BE CALLED AFTER HasSameMother NB: still has the same entry in the array + values[16]=fV0Reader->GetOpeningAngle(); + values[17]=fV0Reader->GetNegativeTrackEnergy(); + values[18]=fV0Reader->GetNegativeTrackPt(); + values[19]=fV0Reader->GetNegativeTrackEta(); + values[20]=fV0Reader->GetNegativeTrackPhi(); + values[21]=fV0Reader->GetPositiveTrackEnergy(); + values[22]=fV0Reader->GetPositiveTrackPt(); + values[23]=fV0Reader->GetPositiveTrackEta(); + values[24]=fV0Reader->GetPositiveTrackPhi(); + values[25]=fV0Reader->HasSameMCMother(); + if(values[25] != 0){ + values[26]=fV0Reader->GetMotherMCParticlePDGCode(); + values[15]=fV0Reader->GetMotherMCParticle()->Pt(); + } + fTotalNumberOfAddedNtupleEntries++; + fGammaNtuple->Fill(values); + } + fV0Reader->ResetV0IndexNumber(); + +} + void AliAnalysisTaskGammaConversion::ProcessV0s(){ // see header file for documentation + if(fWriteNtuple == kTRUE){ + FillNtuple(); + } + Int_t nSurvivingV0s=0; while(fV0Reader->NextV0()){ nSurvivingV0s++; @@ -606,7 +667,24 @@ void AliAnalysisTaskGammaConversion::UserCreateOutputObjects() if(fOutputContainer == NULL){ fOutputContainer = new TList(); } + + //Adding the histograms to the output container fHistograms->GetOutputContainer(fOutputContainer); + + + if(fWriteNtuple){ + if(fGammaNtuple == NULL){ + fGammaNtuple = new TNtuple("V0ntuple","V0ntuple","OnTheFly:HasVertex:NegPIDProb:PosPIDProb:X:Y:Z:R:MotherCandidateNDF:MotherCandidateChi2:MotherCandidateEnergy:MotherCandidateEta:MotherCandidatePt:MotherCandidateMass:MotherCandidateWidth:MCMotherCandidatePT:EPOpeningAngle:ElectronEnergy:ElectronPt:ElectronEta:ElectronPhi:PositronEnergy:PositronPt:PositronEta:PositronPhi:HasSameMCMother:MotherMCParticlePIDCode",50000); + } + if(fNeutralMesonNtuple == NULL){ + fNeutralMesonNtuple = new TNtuple("NeutralMesonNtuple","NeutralMesonNtuple","test"); + } + TList * ntupleTList = new TList(); + ntupleTList->SetName("Ntuple"); + ntupleTList->Add((TNtuple*)fGammaNtuple); + fOutputContainer->Add(ntupleTList); + } + fOutputContainer->SetName(GetName()); } diff --git a/PWG4/GammaConv/AliAnalysisTaskGammaConversion.h b/PWG4/GammaConv/AliAnalysisTaskGammaConversion.h index 9e48cdf8deb..bcff03f59e4 100644 --- a/PWG4/GammaConv/AliAnalysisTaskGammaConversion.h +++ b/PWG4/GammaConv/AliAnalysisTaskGammaConversion.h @@ -13,6 +13,7 @@ #include "AliAnalysisTaskSE.h" #include #include "AliV0Reader.h" +#include "TNtuple.h" class AliGammaConversionHistograms; class AliESDv0; @@ -53,6 +54,8 @@ class AliAnalysisTaskGammaConversion : public AliAnalysisTaskSE void SetV0Reader(AliV0Reader* reader){fV0Reader=reader;} void SetCalculateBackground(Bool_t bg){fCalculateBackground=bg;} void CalculateBackground(); + void SetWriteNtuple(Bool_t writeNtuple){fWriteNtuple = writeNtuple;} + void FillNtuple(); Double_t GetMCOpeningAngle(TParticle* daughter0, TParticle* daughter1) const; private: @@ -87,9 +90,13 @@ class AliAnalysisTaskGammaConversion : public AliAnalysisTaskSE Double_t fPi0Width; Double_t fEtaWidth; Bool_t fCalculateBackground; + Bool_t fWriteNtuple; + TNtuple *fGammaNtuple; + TNtuple *fNeutralMesonNtuple; + Int_t fTotalNumberOfAddedNtupleEntries; - ClassDef(AliAnalysisTaskGammaConversion, 0); // Analysis task for gamma conversions + ClassDef(AliAnalysisTaskGammaConversion, 1); // Analysis task for gamma conversions }; #endif //ALIANALYSISTASKGAMMA_H diff --git a/PWG4/GammaConv/AliGammaConversionHistograms.cxx b/PWG4/GammaConv/AliGammaConversionHistograms.cxx index 08ada546385..2ca295fe872 100644 --- a/PWG4/GammaConv/AliGammaConversionHistograms.cxx +++ b/PWG4/GammaConv/AliGammaConversionHistograms.cxx @@ -2,7 +2,7 @@ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * * * Author: Ana Marin, Kathrin Koch, Kenneth Aamodt * - * Version 1.0 * + * Version 1.1 * * * * Permission to use, copy, modify and distribute this software and its * * documentation strictly for non-commercial purposes is hereby granted * @@ -43,7 +43,14 @@ AliGammaConversionHistograms::AliGammaConversionHistograms() : fMinPhi(0.), fMaxPhi(0.), fDeltaPhi(0.), - fMappingContainer(NULL) + fMappingContainer(NULL), + fBackgroundContainer(NULL), + fDebugContainer(NULL), + fResolutionContainer(NULL), + fMatchContainer(NULL), + fESDContainer(NULL), + fMCContainer(NULL), + fOtherContainer(NULL) { // see header file for documenation } @@ -59,7 +66,14 @@ AliGammaConversionHistograms::AliGammaConversionHistograms(const AliGammaConvers fMinPhi(original.fMinPhi), fMaxPhi(original.fMaxPhi), fDeltaPhi(original.fDeltaPhi), - fMappingContainer(original.fMappingContainer) + fMappingContainer(original.fMappingContainer), + fBackgroundContainer(original.fBackgroundContainer), + fDebugContainer(original.fDebugContainer), + fResolutionContainer(original.fResolutionContainer), + fMatchContainer(original.fMatchContainer), + fESDContainer(original.fESDContainer), + fMCContainer(original.fMCContainer), + fOtherContainer(original.fOtherContainer) { //see header file for documentation } @@ -102,9 +116,6 @@ void AliGammaConversionHistograms::FillHistogram(TString histogramName, Double_t if(tmp){ tmp->Fill(xValue); } - else{ - cout<<"Histogram does not exist: "<Fill(xValue, yValue); } - else{ - cout<<"Histogram does not exist: "<Add((TH1*)fHistogramMap->GetValue(histogramString.Data())); } } - fOutputContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data())); + else if(histogramString.Contains("Background")){// means it should be put in the background folder + if(fBackgroundContainer == NULL){ + fBackgroundContainer = new TList(); + fBackgroundContainer->SetName("Background histograms"); + } + if(fBackgroundContainer != NULL){ + fBackgroundContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data())); + } + } + else if(histogramString.Contains("Debug")){// means it should be put in the debug folder + if(fDebugContainer == NULL){ + fDebugContainer = new TList(); + fDebugContainer->SetName("Debug histograms"); + } + if(fDebugContainer != NULL){ + fDebugContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data())); + } + } + else if(histogramString.Contains("Resolution")){// means it should be put in the resolution folder + if(fResolutionContainer == NULL){ + fResolutionContainer = new TList(); + fResolutionContainer->SetName("Resolution histograms"); + } + if(fResolutionContainer != NULL){ + fResolutionContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data())); + } + } + else if(histogramString.Contains("Match")){// means it should be put in the mapping folder + if(fMatchContainer == NULL){ + fMatchContainer = new TList(); + fMatchContainer->SetName("Match histograms"); + } + if(fMatchContainer != NULL){ + fMatchContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data())); + } + } + else if(histogramString.Contains("ESD")){// means it should be put in the ESD folder + if(fESDContainer == NULL){ + fESDContainer = new TList(); + fESDContainer->SetName("ESD histograms"); + } + if(fESDContainer != NULL){ + fESDContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data())); + } + } + else if(histogramString.Contains("MC")){// means it should be put in the MC folder + if(fMCContainer == NULL){ + fMCContainer = new TList(); + fMCContainer->SetName("MC histograms"); + } + if(fMCContainer != NULL){ + fMCContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data())); + } + } + else{ + if(fOtherContainer == NULL){ + fOtherContainer = new TList(); + fOtherContainer->SetName("Other histograms"); + } + if(fOtherContainer != NULL){ + fOtherContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data())); + } + } histogramName = NULL; } // end while - // fOutputContainer->Add(fMappingContainer); + if(fMappingContainer != NULL){ + fOutputContainer->Add(fMappingContainer); + } + if(fBackgroundContainer != NULL){ + fOutputContainer->Add(fBackgroundContainer); + } + if(fDebugContainer != NULL){ + fOutputContainer->Add(fDebugContainer); + } + if(fResolutionContainer != NULL){ + fOutputContainer->Add(fResolutionContainer); + } + if(fMatchContainer != NULL){ + fOutputContainer->Add(fMatchContainer); + } + if(fESDContainer != NULL){ + fOutputContainer->Add(fESDContainer); + } + if(fMCContainer != NULL){ + fOutputContainer->Add(fMCContainer); + } + if(fOtherContainer != NULL){ + fOutputContainer->Add(fMCContainer); + } } } diff --git a/PWG4/GammaConv/AliGammaConversionHistograms.h b/PWG4/GammaConv/AliGammaConversionHistograms.h index 8434d669568..38ece7051fb 100644 --- a/PWG4/GammaConv/AliGammaConversionHistograms.h +++ b/PWG4/GammaConv/AliGammaConversionHistograms.h @@ -71,6 +71,13 @@ class AliGammaConversionHistograms{ Double_t fDeltaPhi; TList * fMappingContainer; + TList * fBackgroundContainer; + TList * fDebugContainer; + TList * fResolutionContainer; + TList * fMatchContainer; + TList * fESDContainer; + TList * fMCContainer; + TList * fOtherContainer; ClassDef(AliGammaConversionHistograms,1) diff --git a/PWG4/GammaConv/AliV0Reader.cxx b/PWG4/GammaConv/AliV0Reader.cxx index 7e39f1f54e6..b5ecfbae829 100644 --- a/PWG4/GammaConv/AliV0Reader.cxx +++ b/PWG4/GammaConv/AliV0Reader.cxx @@ -187,7 +187,9 @@ AliESDv0* AliV0Reader::GetV0(Int_t index){ UpdateV0Information(); return fCurrentV0; } - +Bool_t AliV0Reader::CheckForPrimaryVertex(){ + return fESDEvent->GetPrimaryVertex()->GetNContributors()>0; +} Bool_t AliV0Reader::NextV0(){ //see header file for documentation @@ -199,28 +201,35 @@ Bool_t AliV0Reader::NextV0(){ //checks if on the fly mode is set if ( !fCurrentV0->GetOnFlyStatus() ){ fCurrentV0IndexNumber++; - fHistograms->FillHistogram("V0MassDebugCut1",GetMotherCandidateMass()); + if(fHistograms != NULL){ + fHistograms->FillHistogram("V0MassDebugCut1",GetMotherCandidateMass()); + } continue; } if(fESDEvent->GetPrimaryVertex()->GetNContributors()<=0) {//checks if we have a vertex fCurrentV0IndexNumber++; - fHistograms->FillHistogram("V0MassDebugCut2",GetMotherCandidateMass()); + if(fHistograms != NULL){ + fHistograms->FillHistogram("V0MassDebugCut2",GetMotherCandidateMass()); + } continue; } if(CheckPIDProbability(fPIDProbabilityCutNegativeParticle,fPIDProbabilityCutPositiveParticle)==kFALSE){ fCurrentV0IndexNumber++; - fHistograms->FillHistogram("V0MassDebugCut3",GetMotherCandidateMass()); + if(fHistograms != NULL){ + fHistograms->FillHistogram("V0MassDebugCut3",GetMotherCandidateMass()); + } continue; } - fCurrentV0->GetXYZ(fCurrentXValue,fCurrentYValue,fCurrentZValue); if(GetXYRadius()>fMaxR){ // cuts on distance from collision point fCurrentV0IndexNumber++; - fHistograms->FillHistogram("V0MassDebugCut4",GetMotherCandidateMass()); + if(fHistograms != NULL){ + fHistograms->FillHistogram("V0MassDebugCut4",GetMotherCandidateMass()); + } continue; } @@ -229,28 +238,35 @@ Bool_t AliV0Reader::NextV0(){ if(fUseKFParticle){ if(fCurrentMotherKFCandidate->GetNDF()<=0){ fCurrentV0IndexNumber++; - fHistograms->FillHistogram("V0MassDebugCut5",GetMotherCandidateMass()); + if(fHistograms != NULL){ + fHistograms->FillHistogram("V0MassDebugCut5",GetMotherCandidateMass()); + } continue; } Double_t chi2V0 = fCurrentMotherKFCandidate->GetChi2()/fCurrentMotherKFCandidate->GetNDF(); if(chi2V0 > fChi2CutConversion || chi2V0 <=0){ fCurrentV0IndexNumber++; - fHistograms->FillHistogram("V0MassDebugCut6",GetMotherCandidateMass()); + if(fHistograms != NULL){ + fHistograms->FillHistogram("V0MassDebugCut6",GetMotherCandidateMass()); + } continue; } if(TMath::Abs(fMotherCandidateLorentzVector->Eta())> fEtaCut){ fCurrentV0IndexNumber++; - fHistograms->FillHistogram("V0MassDebugCut7",GetMotherCandidateMass()); + if(fHistograms != NULL){ + fHistograms->FillHistogram("V0MassDebugCut7",GetMotherCandidateMass()); + } continue; } if(fMotherCandidateLorentzVector->Pt()FillHistogram("V0MassDebugCut8",GetMotherCandidateMass()); + if(fHistograms != NULL){ + fHistograms->FillHistogram("V0MassDebugCut8",GetMotherCandidateMass()); + } continue; } - } else if(fUseESDTrack){ //TODO @@ -335,8 +351,12 @@ void AliV0Reader::UpdateV0Information(){ } if(fDoMC == kTRUE){ + fMotherMCParticle= NULL; fNegativeMCParticle = fMCStack->Particle(TMath::Abs(fESDEvent->GetTrack(fCurrentV0->GetNindex())->GetLabel())); fPositiveMCParticle = fMCStack->Particle(TMath::Abs(fESDEvent->GetTrack(fCurrentV0->GetPindex())->GetLabel())); + if(fPositiveMCParticle->GetMother(0)>-1){ + fMotherMCParticle = fMCStack->Particle(fPositiveMCParticle->GetMother(0)); + } } fCurrentEventGoodV0s.push_back(*fCurrentMotherKFCandidate); } @@ -348,8 +368,9 @@ Bool_t AliV0Reader::HasSameMCMother(){ if(fDoMC == kTRUE){ if(fNegativeMCParticle != NULL && fPositiveMCParticle != NULL){ if(fNegativeMCParticle->GetMother(0) == fPositiveMCParticle->GetMother(0)) - fMotherMCParticle = fMCStack->Particle(fPositiveMCParticle->GetMother(0)); - iResult = kTRUE; + if(fMotherMCParticle){ + iResult = kTRUE; + } } } return iResult; @@ -378,6 +399,24 @@ Bool_t AliV0Reader::CheckPIDProbability(Double_t negProbCut, Double_t posProbCut return iResult; } +void AliV0Reader::GetPIDProbability(Double_t &negPIDProb,Double_t & posPIDProb){ + + Double_t *posProbArray = new Double_t[10]; + Double_t *negProbArray = new Double_t[10]; + AliESDtrack* negTrack = fESDEvent->GetTrack(fCurrentV0->GetNindex()); + AliESDtrack* posTrack = fESDEvent->GetTrack(fCurrentV0->GetPindex()); + + negTrack->GetTPCpid(negProbArray); + posTrack->GetTPCpid(posProbArray); + + if(negProbArray!=NULL && posProbArray!=NULL){ + negPIDProb = negProbArray[GetSpeciesIndex(-1)]; + posPIDProb = posProbArray[GetSpeciesIndex(1)]; + } + delete [] posProbArray; + delete [] negProbArray; +} + void AliV0Reader::UpdateEventByEventData(){ //see header file for documentation diff --git a/PWG4/GammaConv/AliV0Reader.h b/PWG4/GammaConv/AliV0Reader.h index 41a3ab9bd2e..d6a376dce8e 100644 --- a/PWG4/GammaConv/AliV0Reader.h +++ b/PWG4/GammaConv/AliV0Reader.h @@ -90,14 +90,21 @@ class AliV0Reader : public TObject { * Returns the positive KF particle which belongs to fCurrentV0 */ AliKFParticle* GetPositiveKFParticle() const{return fCurrentPositiveKFParticle;} + /* * Returns the KFParticle object of the 2 tracks. */ AliKFParticle* GetMotherCandidateKFCombination() const{return fCurrentMotherKFCandidate;} + /* * Checks the probablity that the PID of the particle is what we want it to be. */ Bool_t CheckPIDProbability(Double_t negProbCut, Double_t posProbCut); + + /* + * Checks if the PID of the two particles are within our cuts. + */ + void GetPIDProbability(Double_t &negPIDProb, Double_t &posPIDProb); /* *Get the negative MC TParticle from the stack @@ -114,8 +121,17 @@ class AliV0Reader : public TObject { */ TParticle * GetMotherMCParticle() const{return fMotherMCParticle;} + /* + * Flag to see if the v0 particles share the same mother + */ Bool_t HasSameMCMother(); + + /* + *Get the PID of the MC mother particle + */ + Int_t GetMotherMCParticlePDGCode() const{if(fMotherMCParticle != NULL){ cout<<"MCParticle exists"<GetPdgCode();} + /* *Get the MC stack */ @@ -186,56 +202,207 @@ class AliV0Reader : public TObject { */ Double_t GetOpeningAngle(){return fNegativeTrackLorentzVector->Angle(fPositiveTrackLorentzVector->Vect());} + /* + * Gets the Energy of the negative track. + */ Double_t GetNegativeTrackEnergy() const{return fCurrentNegativeKFParticle->E();} + + /* + * Gets the Energy of the positive track. + */ Double_t GetPositiveTrackEnergy() const{return fCurrentPositiveKFParticle->E();} + + /* + * Gets the Energy of the mother candidate. + */ Double_t GetMotherCandidateEnergy() const{return fCurrentMotherKFCandidate->E();} + /* + * Gets the Pt of the negative track. + */ Double_t GetNegativeTrackPt() const{return fNegativeTrackLorentzVector->Pt();} + + /* + * Gets the Pt of the positive track. + */ Double_t GetPositiveTrackPt() const{return fPositiveTrackLorentzVector->Pt();} + + /* + * Gets the Pt of the mother candidate. + */ Double_t GetMotherCandidatePt() const{return fMotherCandidateLorentzVector->Pt();} + /* + * Gets the Eta of the negative track. + */ Double_t GetNegativeTrackEta() const{return fNegativeTrackLorentzVector->Eta();} + /* + * Gets the Eta of the positive track. + */ Double_t GetPositiveTrackEta() const{return fPositiveTrackLorentzVector->Eta();} + /* + * Gets the Eta of the mother candidate. + */ Double_t GetMotherCandidateEta() const{return fMotherCandidateLorentzVector->Eta();} + /* + * Gets the NDF of the mother candidate. + */ Double_t GetMotherCandidateNDF() const{return fCurrentMotherKFCandidate->GetNDF();} + + /* + * Gets the Chi2 of the mother candidate. + */ Double_t GetMotherCandidateChi2() const{return fCurrentMotherKFCandidate->GetChi2();} + + /* + * Gets the Mass of the mother candidate. + */ Double_t GetMotherCandidateMass() const{return fMotherCandidateKFMass;} + + /* + * Gets the Width of the mother candidate. + */ Double_t GetMotherCandidateWidth() const{return fMotherCandidateKFWidth;} + /* + * Gets the Phi of the negative track. + */ Double_t GetNegativeTrackPhi() const; + + /* + * Gets the Phi of the positive track. + */ Double_t GetPositiveTrackPhi() const; + + /* + * Gets the Phi of the mother candidate. + */ Double_t GetMotherCandidatePhi() const; + /* + * Update data which need to be updated every event. + */ void UpdateEventByEventData(); + /* + * Gets the MaxRCut value. + */ Double_t GetMaxRCut() const{return fMaxR;} + + /* + * Gets the Eta cut value. + */ Double_t GetEtaCut() const{return fEtaCut;} + + /* + * Gets the Pt cut value. + */ Double_t GetPtCut() const{return fPtCut;} + + /* + * Gets the Chi2 cut value for the conversions. + */ Double_t GetChi2CutConversion() const{return fChi2CutConversion;} + + /* + * Gets the Chi2 cut value for the mesons. + */ Double_t GetChi2CutMeson() const{return fChi2CutMeson;} + /* + * Sets the MaxRCut value. + */ void SetMaxRCut(Double_t maxR){fMaxR=maxR;} + + /* + * Sets the EtaCut value. + */ void SetEtaCut(Double_t etaCut){fEtaCut=etaCut;} + + /* + * Sets the PtCut value. + */ void SetPtCut(Double_t ptCut){fPtCut=ptCut;} + + /* + * Sets the Chi2Cut value for conversions. + */ void SetChi2CutConversion(Double_t chi2){fChi2CutConversion=chi2;} + + /* + * Sets the Chi2Cut for the mesons. + */ void SetChi2CutMeson(Double_t chi2){fChi2CutMeson=chi2;} + /* + * Sets the XVertexCut value. + */ void SetXVertexCut(Double_t xVtx){fCurrentXValue=xVtx;} + + /* + * Sets the YVertexCut value. + */ void SetYVertexCut(Double_t yVtx){fCurrentYValue=yVtx;} + + /* + * Sets the ZVertexCut value. + */ void SetZVertexCut(Double_t zVtx){fCurrentZValue=zVtx;} + + /* + * Sets the PIDProbabilityCut value for track particles. + */ void SetPIDProbability(Double_t pidProb){fPIDProbabilityCutPositiveParticle=pidProb; fPIDProbabilityCutNegativeParticle=pidProb;} + + /* + * Sets the PIDProbability cut value for the negative track. + */ void SetPIDProbabilityNegativeParticle(Double_t pidProb){fPIDProbabilityCutNegativeParticle=pidProb;} + + /* + * Sets the PIDProbability cut value for the positive track. + */ void SetPIDProbabilityPositiveParticle(Double_t pidProb){fPIDProbabilityCutPositiveParticle=pidProb;} + + /* + * Sets the SigmaMassCut value. + */ void SetSigmaMass(Double_t sigmaMass){fNSigmaMass=sigmaMass;} + /* + * Sets the flag to enable/disable the usage of MC information. + */ void SetDoMCTruth(Bool_t doMC){fDoMC = doMC;} + /* + * Updates the V0 information of the current V0. + */ void UpdateV0Information(); + /* + * Resets the V0 index. + */ + void ResetV0IndexNumber(){fCurrentV0IndexNumber=0;} + + /* + * Sets the histograms. + */ void SetHistograms(AliGammaConversionHistograms *histograms){fHistograms=histograms;} + /* + * Check for primary vertex. + */ + Bool_t CheckForPrimaryVertex(); + + /* + * Gets a vector of good v0s. + */ vector GetCurrentEventGoodV0s() const{return fCurrentEventGoodV0s;} + + /* + * Gets the vector of previous events v0s (for bacground analysis) + */ vector GetPreviousEventGoodV0s() const{return fPreviousEventGoodV0s;} private: diff --git a/PWG4/macros/ConfigGammaConversion.C b/PWG4/macros/ConfigGammaConversion.C index 7b1d10198f4..c60ec3150c8 100644 --- a/PWG4/macros/ConfigGammaConversion.C +++ b/PWG4/macros/ConfigGammaConversion.C @@ -1,747 +1,751 @@ - -/** ------------------------------ Monte Carlo flag -----------------------------------------*/ -Bool_t doMCTruth = kTRUE; -/** ---------------------------- end Monte Carlo flag ---------------------------------------*/ - -/** ------------------------- Choose KFParticle OR ESDTrack --------------------------------*/ -Bool_t useKFParticle = kTRUE; -Bool_t useESDTrack = kFALSE; -/** ----------------------- end Choose KFParticle OR ESDTrack -----------------------------*/ - - -Bool_t calculateBackground = kTRUE; - -Int_t numberOfFilesToAnalyze=100; - -/** ---------------------------------- define cuts here ------------------------------------*/ - -Int_t pidOfNegativeTrack=11; -Int_t pidOfPositiveTrack=-11; - -Double_t maxRCut = 200.; -Double_t etaCut = 1.2; -Double_t ptCut = 0.1; -Double_t chi2CutConversion = 20.; -Double_t chi2CutMeson = 20.; - -Double_t xVertexCut = 0.; -Double_t yVertexCut = 0.; -Double_t zVertexCut = 0.; - -Double_t sigmaCutGammaMass=0.0001; - -Bool_t useImprovedVertex = kTRUE; - -// define masses of different particles, this will be used by the KF particle -// together with the width to set mass constraints. Units in GeV. -Double_t electronMass = 0.00051099892; -Double_t gammaMass = 0.; -Double_t pi0Mass = 0.1349766; -Double_t etaMass = 0.54751; - -// define the width constraint used by KF particle. -Double_t gammaWidth = 0.01; -Double_t pi0Width = 0.01; -Double_t etaWidth = 0.01; - -// define the probability of track being an electron -Double_t probElectron = 0.5; - -/** ----------------------------------end define cuts here----------------------------------*/ - -/** -------------------------------- Phi/R Mapping ---------------------------------------*/ -Int_t nPhiIndex = 18; -Int_t nRIndex = 40; - -Double_t minRadius = 0.; -Double_t maxRadius = 200.; -Double_t minPhi = -TMath::Pi(); -Double_t maxPhi = TMath::Pi(); -/** ------------------------------- end Phi/R Mapping ------------------------------------*/ - -/** ------------------- define which histograms to plot here --------------------------------*/ -/** NB: to change the bin numbers, see below the histogram flags */ -Bool_t plotMCEPR = kTRUE; -Bool_t plotMCEPZR = kTRUE; -Bool_t plotMCEPXY = kTRUE; -Bool_t plotMCEPOpeningAngle = kTRUE; - -Bool_t plotMCEEnergy = kTRUE; -Bool_t plotMCEPt = kTRUE; -Bool_t plotMCEEta = kTRUE; -Bool_t plotMCEPhi = kTRUE; - -Bool_t plotMCPEnergy = kTRUE; -Bool_t plotMCPPt = kTRUE; -Bool_t plotMCPEta = kTRUE; -Bool_t plotMCPPhi = kTRUE; - -Bool_t plotMCGammaEnergy = kTRUE; -Bool_t plotMCGammaPt = kTRUE; -Bool_t plotMCGammaEta = kTRUE; -Bool_t plotMCGammaPhi = kTRUE; - -Bool_t plotMCDirectGammaEnergy = kTRUE; -Bool_t plotMCDirectGammaPt = kTRUE; -Bool_t plotMCDirectGammaEta = kTRUE; -Bool_t plotMCDirectGammaPhi = kTRUE; - -Bool_t plotMCMatchGammaEta = kTRUE; -Bool_t plotMCMatchGammaPhi = kTRUE; -Bool_t plotMCMatchGammaPt = kTRUE; -Bool_t plotMCMatchGammaEnergy = kTRUE; -Bool_t plotMCMatchGammaMass = kTRUE; -Bool_t plotMCMatchGammaOpeningAngle = kTRUE; -Bool_t plotMCMatchGammaR = kTRUE; -Bool_t plotMCMatchGammaZR = kTRUE; -Bool_t plotMCMatchGammaXY = kTRUE; - -Bool_t plotMCPi0Eta = kTRUE; -Bool_t plotMCPi0Phi = kTRUE; -Bool_t plotMCPi0Pt = kTRUE; -Bool_t plotMCPi0Energy = kTRUE; -Bool_t plotMCPi0Mass = kTRUE; -Bool_t plotMCPi0OpeningAngle = kTRUE; -Bool_t plotMCPi0R = kTRUE; -Bool_t plotMCPi0ZR = kTRUE; -Bool_t plotMCPi0XY = kTRUE; - -Bool_t plotMCEtaEta = kTRUE; -Bool_t plotMCEtaPhi = kTRUE; -Bool_t plotMCEtaPt = kTRUE; -Bool_t plotMCEtaEnergy = kTRUE; -Bool_t plotMCEtaMass = kTRUE; -Bool_t plotMCEtaOpeningAngleGamma = kTRUE; -Bool_t plotMCEtaR = kTRUE; -Bool_t plotMCEtaZR = kTRUE; -Bool_t plotMCEtaXY = kTRUE; - -// Histograms from esd tracks -Bool_t plotESDEPR = kTRUE; -Bool_t plotESDEPZR = kTRUE; -Bool_t plotESDEPXY = kTRUE; -Bool_t plotESDEPOpeningAngle = kTRUE; - -Bool_t plotESDEEnergy = kTRUE; -Bool_t plotESDEPt = kTRUE; -Bool_t plotESDEEta = kTRUE; -Bool_t plotESDEPhi = kTRUE; - -Bool_t plotESDPEnergy = kTRUE; -Bool_t plotESDPPt = kTRUE; -Bool_t plotESDPEta = kTRUE; -Bool_t plotESDPPhi = kTRUE; - - -Bool_t plotESDGammaEnergy = kTRUE; -Bool_t plotESDGammaPt = kTRUE; -Bool_t plotESDGammaEta = kTRUE; -Bool_t plotESDGammaPhi = kTRUE; - -Bool_t plotESDMatchGammaOpeningAngle = kTRUE; -Bool_t plotESDMatchGammaEnergy = kTRUE; -Bool_t plotESDMatchGammaPt = kTRUE; -Bool_t plotESDMatchGammaEta = kTRUE; -Bool_t plotESDMatchGammaPhi = kTRUE; -Bool_t plotESDMatchGammaMass = kTRUE; -Bool_t plotESDMatchGammaWidth = kTRUE; -Bool_t plotESDMatchGammaChi2 = kTRUE; -Bool_t plotESDMatchGammaNDF = kTRUE; -Bool_t plotESDMatchGammaR = kTRUE; -Bool_t plotESDMatchGammaZR = kTRUE; -Bool_t plotESDMatchGammaXY = kTRUE; - -Bool_t plotESDTwoGammaCombinationOpeningAngleGamma = kTRUE; -Bool_t plotESDTwoGammaCombinationEnergy = kTRUE; -Bool_t plotESDTwoGammaCombinationPt = kTRUE; -Bool_t plotESDTwoGammaCombinationEta = kTRUE; -Bool_t plotESDTwoGammaCombinationPhi = kTRUE; -Bool_t plotESDTwoGammaCombinationMass = kTRUE; -Bool_t plotESDTwoGammaCombinationR = kTRUE; -Bool_t plotESDTwoGammaCombinationZR = kTRUE; -Bool_t plotESDTwoGammaCombinationXY = kTRUE; - -Bool_t plotESDBackgroundOpeningAngleGamma = kTRUE; -Bool_t plotESDBackgroundEnergy = kTRUE; -Bool_t plotESDBackgroundPt = kTRUE; -Bool_t plotESDBackgroundEta = kTRUE; -Bool_t plotESDBackgroundPhi = kTRUE; -Bool_t plotESDBackgroundMass = kTRUE; -Bool_t plotESDBackgroundR = kTRUE; -Bool_t plotESDBackgroundZR = kTRUE; -Bool_t plotESDBackgroundXY = kTRUE; - -Bool_t plotMapping = kTRUE; - -Bool_t plotResolutiondPt = kTRUE; -Bool_t plotResolutiondR = kTRUE; -Bool_t plotResolutiondZ = kTRUE; - -Bool_t plotResolutiondRdPt = kTRUE; - -Bool_t plotResolutionMCPt = kTRUE; -Bool_t plotResolutionMCR = kTRUE; -Bool_t plotResolutionMCZ = kTRUE; - -Bool_t plotResolutionESDPt = kTRUE; -Bool_t plotResolutionESDR = kTRUE; -Bool_t plotResolutionESDZ = kTRUE; - -Bool_t plotNumberOfV0s = kTRUE; -Bool_t plotNumberOfSurvivingV0s = kTRUE; - - // debug histograms -Bool_t plotV0MassDebugCut1 = kTRUE; -Bool_t plotV0MassDebugCut2 = kTRUE; -Bool_t plotV0MassDebugCut3 = kTRUE; -Bool_t plotV0MassDebugCut4 = kTRUE; -Bool_t plotV0MassDebugCut5 = kTRUE; -Bool_t plotV0MassDebugCut6 = kTRUE; -Bool_t plotV0MassDebugCut7 = kTRUE; -Bool_t plotV0MassDebugCut8 = kTRUE; - -Bool_t plotPi0Spectra = kTRUE; -Bool_t plotEtaSpectra = kTRUE; - - -/** ----------------- end define which histograms to plot here -------------------------------*/ - - - -/** ----------- Define the binning for the different plot types here -------------------------*/ -//R-plots -Int_t nXBinsR = 1000; -Double_t firstXBinR = 0.; -Double_t lastXBinR = 250.; - -//ZR-plots -Int_t nXBinsZR = 2000; -Double_t firstXBinZR = -10.; -Double_t lastXBinZR = 10.; -Int_t nYBinsZR = 1000; -Double_t firstYBinZR = 0.; -Double_t lastYBinZR = 250.; - -//XY-plots -Int_t nXBinsXY = 2000; -Double_t firstXBinXY = -250.; -Double_t lastXBinXY = 250.; -Int_t nYBinsXY = 2000; -Double_t firstYBinXY = -250.; -Double_t lastYBinXY = 250.; - -//OpenAngle-plots -Int_t nXBinsOpeningAngle = 200; -Double_t firstXBinOpeningAngle = 0.; -Double_t lastXBinOpeningAngle = TMath::Pi()/2; - -//Energy-plots -Int_t nXBinsEnergy = 500; -Double_t firstXBinEnergy = 0.; -Double_t lastXBinEnergy = 5.; - -//Pt-plots -Int_t nXBinsPt = 500; -Double_t firstXBinPt = 0.; -Double_t lastXBinPt = 5.; - -//Eta-plots -Int_t nXBinsEta = 400; -Double_t firstXBinEta = -2.; -Double_t lastXBinEta = 2.; - -//Phi-plots -Int_t nXBinsPhi = 720; -Double_t firstXBinPhi = -TMath::Pi(); -Double_t lastXBinPhi = TMath::Pi(); - -//Mapping-plots -Int_t nXBinsMapping = 40; -Double_t firstXBinMapping = -20.; -Double_t lastXBinMapping = 20.; -Int_t nYBinsMapping = 30; -Double_t firstYBinMapping = -1.5; -Double_t lastYBinMapping = 1.5; - -//ResolutionPlots -//RESdPt -Int_t nXBinsResdPt=500; -Int_t firstXBinResdPt= 0; -Int_t lastXBinResdPt=5; -Int_t nYBinsResdPt=1000; -Int_t firstYBinResdPt= -5; -Int_t lastYBinResdPt=5; - -//RESdR -Int_t nXBinsResdR=1000; -Int_t firstXBinResdR= 0; -Int_t lastXBinResdR=250; -Int_t nYBinsResdR=1000; -Int_t firstYBinResdR= -25; -Int_t lastYBinResdR=25; - -//RESdZ -Int_t nXBinsResdZ=2000; -Int_t firstXBinResdZ= -20; -Int_t lastXBinResdZ=20; -Int_t nYBinsResdZ=1000; -Int_t firstYBinResdZ= -20; -Int_t lastYBinResdZ=20; - -//RESdRdPt -Int_t nXBinsResdRdPt=1000; -Int_t firstXBinResdRdPt= -22; -Int_t lastXBinResdRdPt=22; -Int_t nYBinsResdRdPt=1000; -Int_t firstYBinResdRdPt= -5; -Int_t lastYBinResdRdPt=5; - - -//RESMCPt -Int_t nXBinsResPt=500; -Int_t firstXBinResPt= 0; -Int_t lastXBinResPt=5; - -//RESMCR -Int_t nXBinsResR=1000; -Int_t firstXBinResR= 0; -Int_t lastXBinResR=250; - -//RESMCZ -Int_t nXBinsResZ=1000; -Int_t firstXBinResZ= 0; -Int_t lastXBinResZ=250; - -//GammaMass-plots -Int_t nXBinsGammaMass = 100; -Double_t firstXBinGammaMass = 0.; -Double_t lastXBinGammaMass = 1.; - -//Pi0Mass-plots -Int_t nXBinsPi0Mass = 100; -Double_t firstXBinPi0Mass = 0.; -Double_t lastXBinPi0Mass = 1.; - -//EtaMass-plots -Int_t nXBinsEtaMass = 100; -Double_t firstXBinEtaMass = 0.; -Double_t lastXBinEtaMass = 1.; - -//GammaWidth-plots -Int_t nXBinsGammaWidth = 100; -Double_t firstXBinGammaWidth = 0.; -Double_t lastXBinGammaWidth = 1.; - -//GammaChi2-plots -Int_t nXBinsGammaChi2 = 100; -Double_t firstXBinGammaChi2 = 0; -Double_t lastXBinGammaChi2 = 100.; - -//GammaNDF-plots -Int_t nXBinsGammaNDF = 10; -Double_t firstXBinGammaNDF = 0.; -Double_t lastXBinGammaNDF = 10.; - -//Spectra-plots -Int_t nXBinsSpectra = 100; -Double_t firstXBinSpectra = 0.; -Double_t lastXBinSpectra = 1.; -Int_t nYBinsSpectra = 500; -Double_t firstYBinSpectra = 0.; -Double_t lastYBinSpectra = 100.; - -/** ---------- end Define the binning for the different plot types here ----------------------*/ - - - -/************************************************************************************************ - * * - * * - * EVERYTHING BELOW IS FOR DEVELOPERS ONLY * - * * - * * - ************************************************************************************************/ - -void ConfigGammaConversion(const char *chainName, const char *sample, int limit = 0){ - - build();//build (if necessary) and load the libraries needed - - gROOT->LoadMacro("$ALICE_ROOT/PWG0/CreateESDChain.C"); // load the CreateChain macro - - AliLog::SetGlobalLogLevel(AliLog::kError); - - //-------------------------------- Creating the histograms ------------------------------- - AliGammaConversionHistograms * histograms = new AliGammaConversionHistograms(); - - if(plotMCEPR == kTRUE){ histograms->AddHistogram("MC_EP_R","Radius of gamma conversion points",nXBinsR, firstXBinR, lastXBinR,"counts","cm");} - if(plotMCEPZR == kTRUE){ histograms->AddHistogram("MC_EP_ZR","Radius of gamma conversion points vs Z",nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "cm", "cm");} - if(plotMCEPXY == kTRUE){ histograms->AddHistogram("MC_EP_XY","Gamma XY converison point.",nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "cm", "cm");} - if(plotMCEPOpeningAngle == kTRUE){ histograms->AddHistogram("MC_EP_OpeningAngle","Opening angle of e+e- pairs from gamma conversion",nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "counts", "cm");} - - if(plotMCEEnergy == kTRUE){ histograms->AddHistogram("MC_E_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} - if(plotMCEPt == kTRUE){ histograms->AddHistogram("MC_E_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} - if(plotMCEEta == kTRUE){ histograms->AddHistogram("MC_E_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} - if(plotMCEPhi == kTRUE){ histograms->AddHistogram("MC_E_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} - - if(plotMCPEnergy == kTRUE){ histograms->AddHistogram("MC_P_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} - if(plotMCPPt == kTRUE){ histograms->AddHistogram("MC_P_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} - if(plotMCPEta == kTRUE){ histograms->AddHistogram("MC_P_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} - if(plotMCPPhi == kTRUE){ histograms->AddHistogram("MC_P_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} - - if(plotMCGammaEnergy == kTRUE){ histograms->AddHistogram("MC_Gamma_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} - if(plotMCGammaPt == kTRUE){ histograms->AddHistogram("MC_Gamma_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} - if(plotMCGammaEta == kTRUE){ histograms->AddHistogram("MC_Gamma_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} - if(plotMCGammaPhi == kTRUE){ histograms->AddHistogram("MC_Gamma_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} - - if(plotMCDirectGammaEnergy == kTRUE){ histograms->AddHistogram("MC_DirectGamma_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} - if(plotMCDirectGammaPt == kTRUE){ histograms->AddHistogram("MC_DirectGamma_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} - if(plotMCDirectGammaEta == kTRUE){ histograms->AddHistogram("MC_DirectGamma_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} - if(plotMCDirectGammaPhi == kTRUE){ histograms->AddHistogram("MC_DirectGamma_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} - - if(plotMCMatchGammaEta == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} - if(plotMCMatchGammaPhi == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} - if(plotMCMatchGammaPt == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} - if(plotMCMatchGammaEnergy == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} - if(plotMCMatchGammaMass == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_Mass" ,"" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass, "", "");} - if(plotMCMatchGammaOpeningAngle == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} - if(plotMCMatchGammaR == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} - if(plotMCMatchGammaZR == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} - if(plotMCMatchGammaXY == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} - - if(plotMCPi0Eta == kTRUE){ histograms->AddHistogram("MC_Pi0_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} - if(plotMCPi0Phi == kTRUE){ histograms->AddHistogram("MC_Pi0_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} - if(plotMCPi0Pt == kTRUE){ histograms->AddHistogram("MC_Pi0_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} - if(plotMCPi0Energy == kTRUE){ histograms->AddHistogram("MC_Pi0_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} - if(plotMCPi0Mass == kTRUE){ histograms->AddHistogram("MC_Pi0_Mass" ,"" , nXBinsPi0Mass, firstXBinPi0Mass, lastXBinPi0Mass, "", "");} - if(plotMCPi0OpeningAngle == kTRUE){ histograms->AddHistogram("MC_Pi0_GammaDaughter_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} - if(plotMCPi0R == kTRUE){ histograms->AddHistogram("MC_Pi0_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} - if(plotMCPi0ZR == kTRUE){ histograms->AddHistogram("MC_Pi0_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} - if(plotMCPi0XY == kTRUE){ histograms->AddHistogram("MC_Pi0_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} - - if(plotMCPi0Eta == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} - if(plotMCPi0Phi == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} - if(plotMCPi0Pt == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} - if(plotMCPi0Energy == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} - if(plotMCPi0Mass == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_Mass" ,"" , nXBinsPi0Mass, firstXBinPi0Mass, lastXBinPi0Mass, "", "");} - if(plotMCPi0OpeningAngle == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_GammaDaughter_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} - if(plotMCPi0R == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} - if(plotMCPi0ZR == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} - if(plotMCPi0XY == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} - - if(plotMCEtaEta == kTRUE){ histograms->AddHistogram("MC_Eta_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} - if(plotMCEtaPhi == kTRUE){ histograms->AddHistogram("MC_Eta_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} - if(plotMCEtaPt == kTRUE){ histograms->AddHistogram("MC_Eta_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} - if(plotMCEtaEnergy == kTRUE){ histograms->AddHistogram("MC_Eta_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} - if(plotMCEtaMass == kTRUE){ histograms->AddHistogram("MC_Eta_Mass" ,"" , nXBinsEtaMass, firstXBinEtaMass, lastXBinEtaMass, "", "");} - if(plotMCEtaOpeningAngleGamma == kTRUE){ histograms->AddHistogram("MC_Eta_GammaDaughter_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} - if(plotMCEtaR == kTRUE){ histograms->AddHistogram("MC_Eta_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} - if(plotMCEtaZR == kTRUE){ histograms->AddHistogram("MC_Eta_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} - if(plotMCEtaXY == kTRUE){ histograms->AddHistogram("MC_Eta_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} - - // Histograms from esd tracks - if(plotESDEPR == kTRUE){ histograms->AddHistogram("ESD_EP_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} - if(plotESDEPZR == kTRUE){ histograms->AddHistogram("ESD_EP_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} - if(plotESDEPXY == kTRUE){ histograms->AddHistogram("ESD_EP_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} - if(plotESDEPOpeningAngle == kTRUE){ histograms->AddHistogram("ESD_EP_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} - - if(plotESDEEnergy == kTRUE){ histograms->AddHistogram("ESD_E_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} - if(plotESDEPt == kTRUE){ histograms->AddHistogram("ESD_E_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} - if(plotESDEEta == kTRUE){ histograms->AddHistogram("ESD_E_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} - if(plotESDEPhi == kTRUE){ histograms->AddHistogram("ESD_E_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} - - if(plotESDPEnergy == kTRUE){ histograms->AddHistogram("ESD_P_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} - if(plotESDPPt == kTRUE){ histograms->AddHistogram("ESD_P_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} - if(plotESDPEta == kTRUE){ histograms->AddHistogram("ESD_P_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} - if(plotESDPPhi == kTRUE){ histograms->AddHistogram("ESD_P_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} - - if(plotESDGammaEnergy == kTRUE){ histograms->AddHistogram("ESD_Gamma_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} - if(plotESDGammaPt == kTRUE){ histograms->AddHistogram("ESD_Gamma_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} - if(plotESDGammaEta == kTRUE){ histograms->AddHistogram("ESD_Gamma_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} - if(plotESDGammaPhi == kTRUE){ histograms->AddHistogram("ESD_Gamma_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} - - if(plotESDMatchGammaOpeningAngle == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} - if(plotESDMatchGammaEnergy == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} - if(plotESDMatchGammaPt == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} - if(plotESDMatchGammaEta == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} - if(plotESDMatchGammaPhi == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} - if(plotESDMatchGammaMass == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_Mass" ,"" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass, "", "");} - if(plotESDMatchGammaWidth == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_Width" ,"" , nXBinsGammaWidth, firstXBinGammaWidth, lastXBinGammaWidth, "", "");} - if(plotESDMatchGammaChi2 == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_Chi2" ,"" , nXBinsGammaChi2, firstXBinGammaChi2, lastXBinGammaChi2, "", "");} - if(plotESDMatchGammaNDF == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_NDF" ,"" , nXBinsGammaNDF, firstXBinGammaNDF, lastXBinGammaNDF, "", "");} - if(plotESDMatchGammaR == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} - if(plotESDMatchGammaZR == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} - if(plotESDMatchGammaXY == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} - - if(plotESDTwoGammaCombinationOpeningAngleGamma == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_GammaDaughter_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} - if(plotESDTwoGammaCombinationEnergy == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} - if(plotESDTwoGammaCombinationPt == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} - if(plotESDTwoGammaCombinationEta == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} - if(plotESDTwoGammaCombinationPhi == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} - if(plotESDTwoGammaCombinationMass == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_Mass" ,"" , nXBinsPi0Mass, firstXBinPi0Mass, lastXBinPi0Mass, "", "");} - if(plotESDTwoGammaCombinationR == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} - if(plotESDTwoGammaCombinationZR == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} - if(plotESDTwoGammaCombinationXY == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} - - if(plotESDBackgroundOpeningAngleGamma == kTRUE){ histograms->AddHistogram("ESD_Background_GammaDaughter_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} - if(plotESDBackgroundEnergy == kTRUE){ histograms->AddHistogram("ESD_Background_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} - if(plotESDBackgroundPt == kTRUE){ histograms->AddHistogram("ESD_Background_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} - if(plotESDBackgroundEta == kTRUE){ histograms->AddHistogram("ESD_Background_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} - if(plotESDBackgroundPhi == kTRUE){ histograms->AddHistogram("ESD_Background_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} - if(plotESDBackgroundMass == kTRUE){ histograms->AddHistogram("ESD_Background_Mass" ,"" , nXBinsEtaMass, firstXBinEtaMass, lastXBinEtaMass, "", "");} - if(plotESDBackgroundR == kTRUE){ histograms->AddHistogram("ESD_Background_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} - if(plotESDBackgroundZR == kTRUE){ histograms->AddHistogram("ESD_Background_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} - if(plotESDBackgroundXY == kTRUE){ histograms->AddHistogram("ESD_Background_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} - - if(plotMapping == kTRUE){ - histograms->InitializeMappingValues(nPhiIndex,nRIndex,nXBinsMapping,minRadius,maxRadius,nYBinsMapping,minPhi,maxPhi); - histograms->AddMappingHistograms(nPhiIndex,nRIndex,nXBinsMapping,minRadius,maxRadius,nYBinsMapping,minPhi,maxPhi); - } - - if(plotResolutiondPt == kTRUE){histograms->AddHistogram("Resolution_dPt" ,"" , nXBinsResdPt, firstXBinResdPt, lastXBinResdPt, nYBinsResdPt, firstYBinResdPt, lastYBinResdPt, "", "");} - if(plotResolutiondR == kTRUE){histograms->AddHistogram("Resolution_dR" ,"" , nXBinsResdR, firstXBinResdR, lastXBinResdR, nYBinsResdR, firstYBinResdR, lastYBinResdR, "", "");} - if(plotResolutiondZ == kTRUE){histograms->AddHistogram("Resolution_dZ" ,"" , nXBinsResdZ, firstXBinResdZ, lastXBinResdZ, nYBinsResdZ, firstYBinResdZ, lastYBinResdZ, "", "");} - - if(plotResolutiondRdPt == kTRUE){histograms->AddHistogram("Resolution_dR_dPt" ,"" , nXBinsResdRdPt, firstXBinResdRdPt, lastXBinResdRdPt, nYBinsResdRdPt, firstYBinResdRdPt, lastYBinResdRdPt, "", "");} - - if(plotResolutionMCPt == kTRUE){histograms->AddHistogram("Resolution_MC_Pt" ,"" , nXBinsResPt, firstXBinResPt, lastXBinResPt,"","");} - if(plotResolutionMCR == kTRUE){histograms->AddHistogram("Resolution_MC_R" ,"" , nXBinsResR, firstXBinResR, lastXBinResR,"","");} - if(plotResolutionMCZ == kTRUE){histograms->AddHistogram("Resolution_MC_Z" ,"" , nXBinsResZ, firstXBinResZ, lastXBinResZ,"","");} - - if(plotResolutionESDPt == kTRUE){histograms->AddHistogram("Resolution_ESD_Pt" ,"" , nXBinsResPt, firstXBinResPt, lastXBinResPt,"","");} - if(plotResolutionESDR == kTRUE){histograms->AddHistogram("Resolution_ESD_R" ,"" , nXBinsResR, firstXBinResR, lastXBinResR,"","");} - if(plotResolutionESDZ == kTRUE){histograms->AddHistogram("Resolution_ESD_Z" ,"" , nXBinsResZ, firstXBinResZ, lastXBinResZ,"","");} - - if(plotNumberOfV0s == kTRUE){histograms->AddHistogram("NumberOfV0s","Number of v0s",100, 0, 100,"","");} - if(plotNumberOfSurvivingV0s == kTRUE){histograms->AddHistogram("NumberOfSurvivingV0s","Number of surviving v0s",100, 0, 100,"","");} - - // debug histograms - if(plotV0MassDebugCut1 == kTRUE){histograms->AddHistogram("V0MassDebugCut1" ,"debug1" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} - if(plotV0MassDebugCut2 == kTRUE){histograms->AddHistogram("V0MassDebugCut2" ,"debug2" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} - if(plotV0MassDebugCut3 == kTRUE){histograms->AddHistogram("V0MassDebugCut3" ,"debug3" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} - if(plotV0MassDebugCut4 == kTRUE){histograms->AddHistogram("V0MassDebugCut4" ,"debug4" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} - if(plotV0MassDebugCut5 == kTRUE){histograms->AddHistogram("V0MassDebugCut5" ,"debug5" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} - if(plotV0MassDebugCut6 == kTRUE){histograms->AddHistogram("V0MassDebugCut6" ,"debug6" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} - if(plotV0MassDebugCut7 == kTRUE){histograms->AddHistogram("V0MassDebugCut7" ,"debug7" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} - if(plotV0MassDebugCut8 == kTRUE){histograms->AddHistogram("V0MassDebugCut8" ,"debug8" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} - - - if(plotPi0Spectra == kTRUE){histograms->AddHistogram("InvMass_vs_Pt_Spectra" ,"Invariant Mass vs Pt" , nXBinsSpectra, firstXBinSpectra, lastXBinSpectra,nYBinsSpectra, firstYBinSpectra, lastYBinSpectra,"InvMass [GeV]","Pt [GeV]");} - - if(plotPi0Spectra == kTRUE && calculateBackground == kTRUE){histograms->AddHistogram("Background_InvMass_vs_Pt_Spectra" ,"Background Invariant Mass vs Pt" , nXBinsSpectra, firstXBinSpectra, lastXBinSpectra,nYBinsSpectra, firstYBinSpectra, lastYBinSpectra,"InvMass [GeV]","Pt [GeV]");} - - - - //------------------------------ end Creating the histograms ----------------------------- - - // Create the Analysis manager - AliAnalysisManager *mgr = new AliAnalysisManager("My Manager", "My Analysis"); - - // Define Input Event Handler - AliESDInputHandler* inpHandler = new AliESDInputHandler(); - - // Define Output Event Handler - AliAODHandler* aodHandler = new AliAODHandler(); - aodHandler->SetOutputFileName("aodAliGammaConversion.root"); - - // Define MC Truth Event Handler - AliMCEventHandler* mcHandler = new AliMCEventHandler(); - - // Add Handlers to the Task Manager - mgr->SetInputEventHandler (inpHandler); - mgr->SetOutputEventHandler (aodHandler); - mgr->SetMCtruthEventHandler(mcHandler); - - // Be sure you are told what you are doing - mgr->SetDebugLevel(10); - - // Declare Common Input Tchain - AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("Chain",TChain::Class(),AliAnalysisManager::kInputContainer); - - // Common Output Tree in common ‘default’ output file - AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("tree", TTree::Class(),AliAnalysisManager::kOutputContainer, "default"); - - // Private output objects - AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("histogramsAliGammaConversion", TList::Class(),AliAnalysisManager::kOutputContainer, "histogramsAliGammaConversion.root"); - - - //------------------------ END: Define input/output handlers --------------------------------------------------- - - - //check for errors in the specified data - if(useKFParticle == kTRUE && useESDTrack == kTRUE){ - //Print warning, cannot use both - } - if(useKFParticle == kFALSE && useESDTrack == kFALSE){ - //Print warning, one have to be specified - } - - - //Create the V0Reader - AliV0Reader * v0Reader = new AliV0Reader(); - if(useKFParticle){ - v0Reader->UseKFParticle(); - } - else if(useESDTrack){ - v0Reader->UseESDTrack(); - } - v0Reader->SetNegativeTrackPID(pidOfNegativeTrack); - v0Reader->SetPositiveTrackPID(pidOfPositiveTrack); - v0Reader->SetMaxRCut(maxRCut); - v0Reader->SetEtaCut(etaCut); - v0Reader->SetPtCut(ptCut); - v0Reader->SetChi2CutConversion(chi2CutConversion); - v0Reader->SetChi2CutMeson(chi2CutMeson); - v0Reader->SetPIDProbability(probElectron); - v0Reader->SetXVertexCut(xVertexCut); - v0Reader->SetYVertexCut(yVertexCut); - v0Reader->SetZVertexCut(zVertexCut); - v0Reader->SetSigmaMass(sigmaCutGammaMass); - v0Reader->SetUseImprovedVertex(useImprovedVertex); - v0Reader->SetDoMCTruth(doMCTruth); - - // Create the GammaConversionTask - AliAnalysisTaskGammaConversion *gammaconversion = new AliAnalysisTaskGammaConversion("GammaConversionTask"); - gammaconversion->SetDebugLevel(10); - - gammaconversion->SetV0Reader(v0Reader); - gammaconversion->SetCalculateBackground(calculateBackground); - gammaconversion->Init(); - - gammaconversion->SetElectronMass(electronMass); - gammaconversion->SetGammaMass(gammaMass); - gammaconversion->SetPi0Mass(pi0Mass); - gammaconversion->SetEtaMass(etaMass); - - gammaconversion->SetGammaWidth(gammaWidth); - gammaconversion->SetPi0Width(pi0Width); - gammaconversion->SetEtaWidth(etaWidth); - - // define the width constraint used by KF particle. - Double_t gammaWidth = 0.01; - Double_t pi0Width = 0.01; - Double_t etaWidth = 0.01; - - gammaconversion->SetHistograms(histograms); - v0Reader->SetHistograms(histograms);// also give the pointer to the v0reader, for debugging cuts - - gammaconversion->SetDoMCTruth(doMCTruth); - - - // Add task to the manager - mgr->AddTask(gammaconversion); - - // Connect I/O to the task - mgr->ConnectInput (gammaconversion, 0, cinput1); - mgr->ConnectOutput(gammaconversion, 0, coutput1); - mgr->ConnectOutput(gammaconversion, 1, coutput2); - - TChain* chain= CreateESDChain(sample,numberOfFilesToAnalyze); - - mgr->InitAnalysis(); - - mgr->PrintStatus(); - - mgr->StartAnalysis("local",chain); -} - - - - -void build() { - TStopwatch timer; - timer.Start(); - gSystem->Load("libTree.so"); - gSystem->Load("libGeom"); - // gSystem->Load("libANALYSISalice"); - - //// - //// - //Setting up STEERBase.par// - //// - setupPar("STEERBase"); - gSystem->Load("libSTEERBase.so"); - - //// - //Setting up ESD.par// - //// - setupPar("ESD"); - gSystem->Load("libVMC.so"); - gSystem->Load("libESD.so"); - - //// - //Setting up AOD.par// - //// - setupPar("AOD"); - gSystem->Load("libAOD.so"); - - //// - //Setting up ANALYSIS.par// - //// - setupPar("ANALYSIS"); - gSystem->Load("libANALYSIS.so"); - - //// - //Setting up ANALYSISalice.par// - //// - setupPar("ANALYSISalice"); - gSystem->Load("libANALYSISalice.so"); - - //// - //Setting up PWG4Gamma.par// - //// - // setupPar("PWG4Gamma"); - // gSystem->Load("libPWG4Gamma.so"); - setupPar("PWG4PartCorr"); - gSystem->Load("libPWG4PartCorr.so"); - //if head:: use PWG4PartCorr - - //gROOT->LoadMacro("AliAnalysisTaskPi0.cxx+"); - // gROOT->LoadMacro("AliAnalysisTaskPtMC.cxx+"); - // gROOT->LoadMacro("AliAnalysisTaskPi0MC.cxx+"); - // gROOT->LoadMacro("AliAnaScale.cxx+"); - - - //gROOT->LoadMacro("$ALICEROOT/PWG0/CreateESDChain.C"); - //TChain* chain = CreateESDChain("files1.txt"); - - - - //// - - -} - -Int_t setupPar(const char* pararchivename) { - /////////////////// - // Setup PAR File// - /////////////////// - if (pararchivename) { - char processline[1024]; - sprintf(processline,".! tar xvzf %s.par",pararchivename); - gROOT->ProcessLine(processline); - const char* ocwd = gSystem->WorkingDirectory(); - gSystem->ChangeDirectory(pararchivename); - - // check for BUILD.sh and execute - if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) { - printf("*******************************\n"); - printf("*** Building PAR archive ***\n"); - printf("*******************************\n"); - - if (gSystem->Exec("PROOF-INF/BUILD.sh")) { - Error("runAnalysis","Cannot Build the PAR Archive! - Abort!"); - return -1; - } - } - // check for SETUP.C and execute - if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) { - printf("*******************************\n"); - printf("*** Setup PAR archive ***\n"); - printf("*******************************\n"); - gROOT->Macro("PROOF-INF/SETUP.C"); - } - - gSystem->ChangeDirectory("../"); - } - return 1; -} + +/** VERSION NUMBER 0 */ + +Bool_t usePWG4PartCorr = kTRUE; + + +/** ------------------------------ Monte Carlo flag -----------------------------------------*/ +Bool_t doMCTruth = kTRUE; +/** ---------------------------- end Monte Carlo flag ---------------------------------------*/ + +/** ------------------------- Choose KFParticle OR ESDTrack --------------------------------*/ +Bool_t useKFParticle = kTRUE; +Bool_t useESDTrack = kFALSE; +/** ----------------------- end Choose KFParticle OR ESDTrack -----------------------------*/ + + +Bool_t calculateBackground = kTRUE; + +Int_t numberOfFilesToAnalyze=2000; + +/** ---------------------------------- define cuts here ------------------------------------*/ + +Int_t pidOfNegativeTrack=11; +Int_t pidOfPositiveTrack=-11; + +Double_t maxRCut = 200.; +Double_t etaCut = 1.2; +Double_t ptCut = 0.1; +Double_t chi2CutConversion = 20.; +Double_t chi2CutMeson = 20.; + +Double_t xVertexCut = 0.; +Double_t yVertexCut = 0.; +Double_t zVertexCut = 0.; + +Double_t sigmaCutGammaMass=0.0001; + +Bool_t useImprovedVertex = kTRUE; + +// define masses of different particles, this will be used by the KF particle +// together with the width to set mass constraints. Units in GeV. +Double_t electronMass = 0.00051099892; +Double_t gammaMass = 0.; +Double_t pi0Mass = 0.1349766; +Double_t etaMass = 0.54751; + +// define the width constraint used by KF particle. +Double_t gammaWidth = 0.01; +Double_t pi0Width = 0.01; +Double_t etaWidth = 0.01; + +// define the probability of track being an electron +Double_t probElectron = 0.5; + +/** ----------------------------------end define cuts here----------------------------------*/ + +/** -------------------------------- Phi/R Mapping ---------------------------------------*/ +Int_t nPhiIndex = 18; +Int_t nRIndex = 40; + +Double_t minRadius = 0.; +Double_t maxRadius = 200.; +Double_t minPhi = -TMath::Pi(); +Double_t maxPhi = TMath::Pi(); +/** ------------------------------- end Phi/R Mapping ------------------------------------*/ + +/** ------------------- define which histograms to plot here --------------------------------*/ +/** NB: to change the bin numbers, see below the histogram flags */ +Bool_t plotMCEPR = kTRUE; +Bool_t plotMCEPZR = kTRUE; +Bool_t plotMCEPXY = kTRUE; +Bool_t plotMCEPOpeningAngle = kTRUE; + +Bool_t plotMCEEnergy = kTRUE; +Bool_t plotMCEPt = kTRUE; +Bool_t plotMCEEta = kTRUE; +Bool_t plotMCEPhi = kTRUE; + +Bool_t plotMCPEnergy = kTRUE; +Bool_t plotMCPPt = kTRUE; +Bool_t plotMCPEta = kTRUE; +Bool_t plotMCPPhi = kTRUE; + +Bool_t plotMCGammaEnergy = kTRUE; +Bool_t plotMCGammaPt = kTRUE; +Bool_t plotMCGammaEta = kTRUE; +Bool_t plotMCGammaPhi = kTRUE; + +Bool_t plotMCDirectGammaEnergy = kTRUE; +Bool_t plotMCDirectGammaPt = kTRUE; +Bool_t plotMCDirectGammaEta = kTRUE; +Bool_t plotMCDirectGammaPhi = kTRUE; + +Bool_t plotMCMatchGammaEta = kTRUE; +Bool_t plotMCMatchGammaPhi = kTRUE; +Bool_t plotMCMatchGammaPt = kTRUE; +Bool_t plotMCMatchGammaEnergy = kTRUE; +Bool_t plotMCMatchGammaMass = kTRUE; +Bool_t plotMCMatchGammaOpeningAngle = kTRUE; +Bool_t plotMCMatchGammaR = kTRUE; +Bool_t plotMCMatchGammaZR = kTRUE; +Bool_t plotMCMatchGammaXY = kTRUE; + +Bool_t plotMCPi0Eta = kTRUE; +Bool_t plotMCPi0Phi = kTRUE; +Bool_t plotMCPi0Pt = kTRUE; +Bool_t plotMCPi0Energy = kTRUE; +Bool_t plotMCPi0Mass = kTRUE; +Bool_t plotMCPi0OpeningAngle = kTRUE; +Bool_t plotMCPi0R = kTRUE; +Bool_t plotMCPi0ZR = kTRUE; +Bool_t plotMCPi0XY = kTRUE; + +Bool_t plotMCEtaEta = kTRUE; +Bool_t plotMCEtaPhi = kTRUE; +Bool_t plotMCEtaPt = kTRUE; +Bool_t plotMCEtaEnergy = kTRUE; +Bool_t plotMCEtaMass = kTRUE; +Bool_t plotMCEtaOpeningAngleGamma = kTRUE; +Bool_t plotMCEtaR = kTRUE; +Bool_t plotMCEtaZR = kTRUE; +Bool_t plotMCEtaXY = kTRUE; + +// Histograms from esd tracks +Bool_t plotESDEPR = kTRUE; +Bool_t plotESDEPZR = kTRUE; +Bool_t plotESDEPXY = kTRUE; +Bool_t plotESDEPOpeningAngle = kTRUE; + +Bool_t plotESDEEnergy = kTRUE; +Bool_t plotESDEPt = kTRUE; +Bool_t plotESDEEta = kTRUE; +Bool_t plotESDEPhi = kTRUE; + +Bool_t plotESDPEnergy = kTRUE; +Bool_t plotESDPPt = kTRUE; +Bool_t plotESDPEta = kTRUE; +Bool_t plotESDPPhi = kTRUE; + + +Bool_t plotESDGammaEnergy = kTRUE; +Bool_t plotESDGammaPt = kTRUE; +Bool_t plotESDGammaEta = kTRUE; +Bool_t plotESDGammaPhi = kTRUE; + +Bool_t plotESDMatchGammaOpeningAngle = kTRUE; +Bool_t plotESDMatchGammaEnergy = kTRUE; +Bool_t plotESDMatchGammaPt = kTRUE; +Bool_t plotESDMatchGammaEta = kTRUE; +Bool_t plotESDMatchGammaPhi = kTRUE; +Bool_t plotESDMatchGammaMass = kTRUE; +Bool_t plotESDMatchGammaWidth = kTRUE; +Bool_t plotESDMatchGammaChi2 = kTRUE; +Bool_t plotESDMatchGammaNDF = kTRUE; +Bool_t plotESDMatchGammaR = kTRUE; +Bool_t plotESDMatchGammaZR = kTRUE; +Bool_t plotESDMatchGammaXY = kTRUE; + +Bool_t plotESDTwoGammaCombinationOpeningAngleGamma = kTRUE; +Bool_t plotESDTwoGammaCombinationEnergy = kTRUE; +Bool_t plotESDTwoGammaCombinationPt = kTRUE; +Bool_t plotESDTwoGammaCombinationEta = kTRUE; +Bool_t plotESDTwoGammaCombinationPhi = kTRUE; +Bool_t plotESDTwoGammaCombinationMass = kTRUE; +Bool_t plotESDTwoGammaCombinationR = kTRUE; +Bool_t plotESDTwoGammaCombinationZR = kTRUE; +Bool_t plotESDTwoGammaCombinationXY = kTRUE; + +Bool_t plotESDBackgroundOpeningAngleGamma = kTRUE; +Bool_t plotESDBackgroundEnergy = kTRUE; +Bool_t plotESDBackgroundPt = kTRUE; +Bool_t plotESDBackgroundEta = kTRUE; +Bool_t plotESDBackgroundPhi = kTRUE; +Bool_t plotESDBackgroundMass = kTRUE; +Bool_t plotESDBackgroundR = kTRUE; +Bool_t plotESDBackgroundZR = kTRUE; +Bool_t plotESDBackgroundXY = kTRUE; + +Bool_t plotMapping = kTRUE; + +Bool_t plotResolutiondPt = kTRUE; +Bool_t plotResolutiondR = kTRUE; +Bool_t plotResolutiondZ = kTRUE; + +Bool_t plotResolutiondRdPt = kTRUE; + +Bool_t plotResolutionMCPt = kTRUE; +Bool_t plotResolutionMCR = kTRUE; +Bool_t plotResolutionMCZ = kTRUE; + +Bool_t plotResolutionESDPt = kTRUE; +Bool_t plotResolutionESDR = kTRUE; +Bool_t plotResolutionESDZ = kTRUE; + +Bool_t plotNumberOfV0s = kTRUE; +Bool_t plotNumberOfSurvivingV0s = kTRUE; + + // debug histograms +Bool_t plotV0MassDebugCut1 = kTRUE; +Bool_t plotV0MassDebugCut2 = kTRUE; +Bool_t plotV0MassDebugCut3 = kTRUE; +Bool_t plotV0MassDebugCut4 = kTRUE; +Bool_t plotV0MassDebugCut5 = kTRUE; +Bool_t plotV0MassDebugCut6 = kTRUE; +Bool_t plotV0MassDebugCut7 = kTRUE; +Bool_t plotV0MassDebugCut8 = kTRUE; + +Bool_t plotPi0Spectra = kTRUE; +Bool_t plotEtaSpectra = kTRUE; + + +/** ----------------- end define which histograms to plot here -------------------------------*/ + + + +/** ----------- Define the binning for the different plot types here -------------------------*/ +//R-plots +Int_t nXBinsR = 1000; +Double_t firstXBinR = 0.; +Double_t lastXBinR = 250.; + +//ZR-plots +Int_t nXBinsZR = 2000; +Double_t firstXBinZR = -10.; +Double_t lastXBinZR = 10.; +Int_t nYBinsZR = 1000; +Double_t firstYBinZR = 0.; +Double_t lastYBinZR = 250.; + +//XY-plots +Int_t nXBinsXY = 2000; +Double_t firstXBinXY = -250.; +Double_t lastXBinXY = 250.; +Int_t nYBinsXY = 2000; +Double_t firstYBinXY = -250.; +Double_t lastYBinXY = 250.; + +//OpenAngle-plots +Int_t nXBinsOpeningAngle = 200; +Double_t firstXBinOpeningAngle = 0.; +Double_t lastXBinOpeningAngle = TMath::Pi()/2; + +//Energy-plots +Int_t nXBinsEnergy = 500; +Double_t firstXBinEnergy = 0.; +Double_t lastXBinEnergy = 5.; + +//Pt-plots +Int_t nXBinsPt = 500; +Double_t firstXBinPt = 0.; +Double_t lastXBinPt = 5.; + +//Eta-plots +Int_t nXBinsEta = 400; +Double_t firstXBinEta = -2.; +Double_t lastXBinEta = 2.; + +//Phi-plots +Int_t nXBinsPhi = 720; +Double_t firstXBinPhi = -TMath::Pi(); +Double_t lastXBinPhi = TMath::Pi(); + +//Mapping-plots +Int_t nXBinsMapping = 40; +Double_t firstXBinMapping = -20.; +Double_t lastXBinMapping = 20.; +Int_t nYBinsMapping = 30; +Double_t firstYBinMapping = -1.5; +Double_t lastYBinMapping = 1.5; + +//ResolutionPlots +//RESdPt +Int_t nXBinsResdPt=500; +Int_t firstXBinResdPt= 0; +Int_t lastXBinResdPt=5; +Int_t nYBinsResdPt=1000; +Int_t firstYBinResdPt= -5; +Int_t lastYBinResdPt=5; + +//RESdR +Int_t nXBinsResdR=1000; +Int_t firstXBinResdR= 0; +Int_t lastXBinResdR=250; +Int_t nYBinsResdR=1000; +Int_t firstYBinResdR= -25; +Int_t lastYBinResdR=25; + +//RESdZ +Int_t nXBinsResdZ=2000; +Int_t firstXBinResdZ= -20; +Int_t lastXBinResdZ=20; +Int_t nYBinsResdZ=1000; +Int_t firstYBinResdZ= -20; +Int_t lastYBinResdZ=20; + +//RESdRdPt +Int_t nXBinsResdRdPt=1000; +Int_t firstXBinResdRdPt= -22; +Int_t lastXBinResdRdPt=22; +Int_t nYBinsResdRdPt=1000; +Int_t firstYBinResdRdPt= -5; +Int_t lastYBinResdRdPt=5; + + +//RESMCPt +Int_t nXBinsResPt=500; +Int_t firstXBinResPt= 0; +Int_t lastXBinResPt=5; + +//RESMCR +Int_t nXBinsResR=1000; +Int_t firstXBinResR= 0; +Int_t lastXBinResR=250; + +//RESMCZ +Int_t nXBinsResZ=1000; +Int_t firstXBinResZ= 0; +Int_t lastXBinResZ=250; + +//GammaMass-plots +Int_t nXBinsGammaMass = 100; +Double_t firstXBinGammaMass = 0.; +Double_t lastXBinGammaMass = 1.; + +//Pi0Mass-plots +Int_t nXBinsPi0Mass = 100; +Double_t firstXBinPi0Mass = 0.; +Double_t lastXBinPi0Mass = 1.; + +//EtaMass-plots +Int_t nXBinsEtaMass = 100; +Double_t firstXBinEtaMass = 0.; +Double_t lastXBinEtaMass = 1.; + +//GammaWidth-plots +Int_t nXBinsGammaWidth = 100; +Double_t firstXBinGammaWidth = 0.; +Double_t lastXBinGammaWidth = 1.; + +//GammaChi2-plots +Int_t nXBinsGammaChi2 = 100; +Double_t firstXBinGammaChi2 = 0; +Double_t lastXBinGammaChi2 = 100.; + +//GammaNDF-plots +Int_t nXBinsGammaNDF = 10; +Double_t firstXBinGammaNDF = 0.; +Double_t lastXBinGammaNDF = 10.; + +//Spectra-plots +Int_t nXBinsSpectra = 100; +Double_t firstXBinSpectra = 0.; +Double_t lastXBinSpectra = 1.; +Int_t nYBinsSpectra = 500; +Double_t firstYBinSpectra = 0.; +Double_t lastYBinSpectra = 100.; + +/** ---------- end Define the binning for the different plot types here ----------------------*/ + + + +/************************************************************************************************ + * * + * * + * EVERYTHING BELOW IS FOR DEVELOPERS ONLY * + * * + * * + ************************************************************************************************/ + +void ConfigGammaConversion(const char *chainName, const char *sample, Bool_t writeNtuple = kFALSE){ + + build();//build (if necessary) and load the libraries needed + + gROOT->LoadMacro("$ALICE_ROOT/PWG0/CreateESDChain.C"); // load the CreateChain macro + + AliLog::SetGlobalLogLevel(AliLog::kError); + + //-------------------------------- Creating the histograms ------------------------------- + AliGammaConversionHistograms * histograms = new AliGammaConversionHistograms(); + + if(plotMCEPR == kTRUE){ histograms->AddHistogram("MC_EP_R","Radius of gamma conversion points",nXBinsR, firstXBinR, lastXBinR,"counts","cm");} + if(plotMCEPZR == kTRUE){ histograms->AddHistogram("MC_EP_ZR","Radius of gamma conversion points vs Z",nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "cm", "cm");} + if(plotMCEPXY == kTRUE){ histograms->AddHistogram("MC_EP_XY","Gamma XY converison point.",nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "cm", "cm");} + if(plotMCEPOpeningAngle == kTRUE){ histograms->AddHistogram("MC_EP_OpeningAngle","Opening angle of e+e- pairs from gamma conversion",nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "counts", "cm");} + + if(plotMCEEnergy == kTRUE){ histograms->AddHistogram("MC_E_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} + if(plotMCEPt == kTRUE){ histograms->AddHistogram("MC_E_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} + if(plotMCEEta == kTRUE){ histograms->AddHistogram("MC_E_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} + if(plotMCEPhi == kTRUE){ histograms->AddHistogram("MC_E_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} + + if(plotMCPEnergy == kTRUE){ histograms->AddHistogram("MC_P_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} + if(plotMCPPt == kTRUE){ histograms->AddHistogram("MC_P_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} + if(plotMCPEta == kTRUE){ histograms->AddHistogram("MC_P_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} + if(plotMCPPhi == kTRUE){ histograms->AddHistogram("MC_P_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} + + if(plotMCGammaEnergy == kTRUE){ histograms->AddHistogram("MC_Gamma_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} + if(plotMCGammaPt == kTRUE){ histograms->AddHistogram("MC_Gamma_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} + if(plotMCGammaEta == kTRUE){ histograms->AddHistogram("MC_Gamma_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} + if(plotMCGammaPhi == kTRUE){ histograms->AddHistogram("MC_Gamma_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} + + if(plotMCDirectGammaEnergy == kTRUE){ histograms->AddHistogram("MC_DirectGamma_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} + if(plotMCDirectGammaPt == kTRUE){ histograms->AddHistogram("MC_DirectGamma_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} + if(plotMCDirectGammaEta == kTRUE){ histograms->AddHistogram("MC_DirectGamma_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} + if(plotMCDirectGammaPhi == kTRUE){ histograms->AddHistogram("MC_DirectGamma_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} + + if(plotMCMatchGammaEta == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} + if(plotMCMatchGammaPhi == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} + if(plotMCMatchGammaPt == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} + if(plotMCMatchGammaEnergy == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} + if(plotMCMatchGammaMass == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_Mass" ,"" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass, "", "");} + if(plotMCMatchGammaOpeningAngle == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} + if(plotMCMatchGammaR == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} + if(plotMCMatchGammaZR == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} + if(plotMCMatchGammaXY == kTRUE){ histograms->AddHistogram("MC_Match_Gamma_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} + + if(plotMCPi0Eta == kTRUE){ histograms->AddHistogram("MC_Pi0_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} + if(plotMCPi0Phi == kTRUE){ histograms->AddHistogram("MC_Pi0_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} + if(plotMCPi0Pt == kTRUE){ histograms->AddHistogram("MC_Pi0_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} + if(plotMCPi0Energy == kTRUE){ histograms->AddHistogram("MC_Pi0_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} + if(plotMCPi0Mass == kTRUE){ histograms->AddHistogram("MC_Pi0_Mass" ,"" , nXBinsPi0Mass, firstXBinPi0Mass, lastXBinPi0Mass, "", "");} + if(plotMCPi0OpeningAngle == kTRUE){ histograms->AddHistogram("MC_Pi0_GammaDaughter_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} + if(plotMCPi0R == kTRUE){ histograms->AddHistogram("MC_Pi0_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} + if(plotMCPi0ZR == kTRUE){ histograms->AddHistogram("MC_Pi0_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} + if(plotMCPi0XY == kTRUE){ histograms->AddHistogram("MC_Pi0_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} + + if(plotMCPi0Eta == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} + if(plotMCPi0Phi == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} + if(plotMCPi0Pt == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} + if(plotMCPi0Energy == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} + if(plotMCPi0Mass == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_Mass" ,"" , nXBinsPi0Mass, firstXBinPi0Mass, lastXBinPi0Mass, "", "");} + if(plotMCPi0OpeningAngle == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_GammaDaughter_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} + if(plotMCPi0R == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} + if(plotMCPi0ZR == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} + if(plotMCPi0XY == kTRUE){ histograms->AddHistogram("MC_Pi0_Secondaries_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} + + if(plotMCEtaEta == kTRUE){ histograms->AddHistogram("MC_Eta_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} + if(plotMCEtaPhi == kTRUE){ histograms->AddHistogram("MC_Eta_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} + if(plotMCEtaPt == kTRUE){ histograms->AddHistogram("MC_Eta_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} + if(plotMCEtaEnergy == kTRUE){ histograms->AddHistogram("MC_Eta_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} + if(plotMCEtaMass == kTRUE){ histograms->AddHistogram("MC_Eta_Mass" ,"" , nXBinsEtaMass, firstXBinEtaMass, lastXBinEtaMass, "", "");} + if(plotMCEtaOpeningAngleGamma == kTRUE){ histograms->AddHistogram("MC_Eta_GammaDaughter_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} + if(plotMCEtaR == kTRUE){ histograms->AddHistogram("MC_Eta_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} + if(plotMCEtaZR == kTRUE){ histograms->AddHistogram("MC_Eta_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} + if(plotMCEtaXY == kTRUE){ histograms->AddHistogram("MC_Eta_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} + + // Histograms from esd tracks + if(plotESDEPR == kTRUE){ histograms->AddHistogram("ESD_EP_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} + if(plotESDEPZR == kTRUE){ histograms->AddHistogram("ESD_EP_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} + if(plotESDEPXY == kTRUE){ histograms->AddHistogram("ESD_EP_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} + if(plotESDEPOpeningAngle == kTRUE){ histograms->AddHistogram("ESD_EP_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} + + if(plotESDEEnergy == kTRUE){ histograms->AddHistogram("ESD_E_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} + if(plotESDEPt == kTRUE){ histograms->AddHistogram("ESD_E_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} + if(plotESDEEta == kTRUE){ histograms->AddHistogram("ESD_E_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} + if(plotESDEPhi == kTRUE){ histograms->AddHistogram("ESD_E_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} + + if(plotESDPEnergy == kTRUE){ histograms->AddHistogram("ESD_P_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} + if(plotESDPPt == kTRUE){ histograms->AddHistogram("ESD_P_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} + if(plotESDPEta == kTRUE){ histograms->AddHistogram("ESD_P_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} + if(plotESDPPhi == kTRUE){ histograms->AddHistogram("ESD_P_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} + + if(plotESDGammaEnergy == kTRUE){ histograms->AddHistogram("ESD_Gamma_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} + if(plotESDGammaPt == kTRUE){ histograms->AddHistogram("ESD_Gamma_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} + if(plotESDGammaEta == kTRUE){ histograms->AddHistogram("ESD_Gamma_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} + if(plotESDGammaPhi == kTRUE){ histograms->AddHistogram("ESD_Gamma_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} + + if(plotESDMatchGammaOpeningAngle == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} + if(plotESDMatchGammaEnergy == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} + if(plotESDMatchGammaPt == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} + if(plotESDMatchGammaEta == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} + if(plotESDMatchGammaPhi == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} + if(plotESDMatchGammaMass == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_Mass" ,"" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass, "", "");} + if(plotESDMatchGammaWidth == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_Width" ,"" , nXBinsGammaWidth, firstXBinGammaWidth, lastXBinGammaWidth, "", "");} + if(plotESDMatchGammaChi2 == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_Chi2" ,"" , nXBinsGammaChi2, firstXBinGammaChi2, lastXBinGammaChi2, "", "");} + if(plotESDMatchGammaNDF == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_NDF" ,"" , nXBinsGammaNDF, firstXBinGammaNDF, lastXBinGammaNDF, "", "");} + if(plotESDMatchGammaR == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} + if(plotESDMatchGammaZR == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} + if(plotESDMatchGammaXY == kTRUE){ histograms->AddHistogram("ESD_Match_Gamma_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} + + if(plotESDTwoGammaCombinationOpeningAngleGamma == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_GammaDaughter_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} + if(plotESDTwoGammaCombinationEnergy == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} + if(plotESDTwoGammaCombinationPt == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} + if(plotESDTwoGammaCombinationEta == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} + if(plotESDTwoGammaCombinationPhi == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} + if(plotESDTwoGammaCombinationMass == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_Mass" ,"" , nXBinsPi0Mass, firstXBinPi0Mass, lastXBinPi0Mass, "", "");} + if(plotESDTwoGammaCombinationR == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} + if(plotESDTwoGammaCombinationZR == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} + if(plotESDTwoGammaCombinationXY == kTRUE){ histograms->AddHistogram("ESD_TwoGammaCombination_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} + + if(plotESDBackgroundOpeningAngleGamma == kTRUE){ histograms->AddHistogram("ESD_Background_GammaDaughter_OpeningAngle" ,"" , nXBinsOpeningAngle, firstXBinOpeningAngle, lastXBinOpeningAngle, "", "");} + if(plotESDBackgroundEnergy == kTRUE){ histograms->AddHistogram("ESD_Background_Energy" ,"" , nXBinsEnergy, firstXBinEnergy, lastXBinEnergy, "", "");} + if(plotESDBackgroundPt == kTRUE){ histograms->AddHistogram("ESD_Background_Pt" ,"" , nXBinsPt, firstXBinPt, lastXBinPt, "", "");} + if(plotESDBackgroundEta == kTRUE){ histograms->AddHistogram("ESD_Background_Eta" ,"" , nXBinsEta, firstXBinEta, lastXBinEta, "", "");} + if(plotESDBackgroundPhi == kTRUE){ histograms->AddHistogram("ESD_Background_Phi" ,"" , nXBinsPhi, firstXBinPhi, lastXBinPhi, "", "");} + if(plotESDBackgroundMass == kTRUE){ histograms->AddHistogram("ESD_Background_Mass" ,"" , nXBinsEtaMass, firstXBinEtaMass, lastXBinEtaMass, "", "");} + if(plotESDBackgroundR == kTRUE){ histograms->AddHistogram("ESD_Background_R" ,"" , nXBinsR, firstXBinR, lastXBinR, "", "");} + if(plotESDBackgroundZR == kTRUE){ histograms->AddHistogram("ESD_Background_ZR" ,"" , nXBinsZR, firstXBinZR, lastXBinZR, nYBinsZR, firstYBinZR, lastYBinZR, "", "");} + if(plotESDBackgroundXY == kTRUE){ histograms->AddHistogram("ESD_Background_XY" ,"" , nXBinsXY, firstXBinXY, lastXBinXY, nYBinsXY, firstYBinXY, lastYBinXY, "", "");} + + if(plotMapping == kTRUE){ + histograms->InitializeMappingValues(nPhiIndex,nRIndex,nXBinsMapping,minRadius,maxRadius,nYBinsMapping,minPhi,maxPhi); + histograms->AddMappingHistograms(nPhiIndex,nRIndex,nXBinsMapping,minRadius,maxRadius,nYBinsMapping,minPhi,maxPhi); + } + + if(plotResolutiondPt == kTRUE){histograms->AddHistogram("Resolution_dPt" ,"" , nXBinsResdPt, firstXBinResdPt, lastXBinResdPt, nYBinsResdPt, firstYBinResdPt, lastYBinResdPt, "", "");} + if(plotResolutiondR == kTRUE){histograms->AddHistogram("Resolution_dR" ,"" , nXBinsResdR, firstXBinResdR, lastXBinResdR, nYBinsResdR, firstYBinResdR, lastYBinResdR, "", "");} + if(plotResolutiondZ == kTRUE){histograms->AddHistogram("Resolution_dZ" ,"" , nXBinsResdZ, firstXBinResdZ, lastXBinResdZ, nYBinsResdZ, firstYBinResdZ, lastYBinResdZ, "", "");} + + if(plotResolutiondRdPt == kTRUE){histograms->AddHistogram("Resolution_dR_dPt" ,"" , nXBinsResdRdPt, firstXBinResdRdPt, lastXBinResdRdPt, nYBinsResdRdPt, firstYBinResdRdPt, lastYBinResdRdPt, "", "");} + + if(plotResolutionMCPt == kTRUE){histograms->AddHistogram("Resolution_MC_Pt" ,"" , nXBinsResPt, firstXBinResPt, lastXBinResPt,"","");} + if(plotResolutionMCR == kTRUE){histograms->AddHistogram("Resolution_MC_R" ,"" , nXBinsResR, firstXBinResR, lastXBinResR,"","");} + if(plotResolutionMCZ == kTRUE){histograms->AddHistogram("Resolution_MC_Z" ,"" , nXBinsResZ, firstXBinResZ, lastXBinResZ,"","");} + + if(plotResolutionESDPt == kTRUE){histograms->AddHistogram("Resolution_ESD_Pt" ,"" , nXBinsResPt, firstXBinResPt, lastXBinResPt,"","");} + if(plotResolutionESDR == kTRUE){histograms->AddHistogram("Resolution_ESD_R" ,"" , nXBinsResR, firstXBinResR, lastXBinResR,"","");} + if(plotResolutionESDZ == kTRUE){histograms->AddHistogram("Resolution_ESD_Z" ,"" , nXBinsResZ, firstXBinResZ, lastXBinResZ,"","");} + + if(plotNumberOfV0s == kTRUE){histograms->AddHistogram("NumberOfV0s","Number of v0s",100, 0, 100,"","");} + if(plotNumberOfSurvivingV0s == kTRUE){histograms->AddHistogram("NumberOfSurvivingV0s","Number of surviving v0s",100, 0, 100,"","");} + + // debug histograms + if(plotV0MassDebugCut1 == kTRUE){histograms->AddHistogram("V0MassDebugCut1" ,"debug1" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} + if(plotV0MassDebugCut2 == kTRUE){histograms->AddHistogram("V0MassDebugCut2" ,"debug2" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} + if(plotV0MassDebugCut3 == kTRUE){histograms->AddHistogram("V0MassDebugCut3" ,"debug3" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} + if(plotV0MassDebugCut4 == kTRUE){histograms->AddHistogram("V0MassDebugCut4" ,"debug4" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} + if(plotV0MassDebugCut5 == kTRUE){histograms->AddHistogram("V0MassDebugCut5" ,"debug5" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} + if(plotV0MassDebugCut6 == kTRUE){histograms->AddHistogram("V0MassDebugCut6" ,"debug6" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} + if(plotV0MassDebugCut7 == kTRUE){histograms->AddHistogram("V0MassDebugCut7" ,"debug7" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} + if(plotV0MassDebugCut8 == kTRUE){histograms->AddHistogram("V0MassDebugCut8" ,"debug8" , nXBinsGammaMass, firstXBinGammaMass, lastXBinGammaMass,"","");} + + + if(plotPi0Spectra == kTRUE){histograms->AddHistogram("InvMass_vs_Pt_Spectra" ,"Invariant Mass vs Pt" , nXBinsSpectra, firstXBinSpectra, lastXBinSpectra,nYBinsSpectra, firstYBinSpectra, lastYBinSpectra,"InvMass [GeV]","Pt [GeV]");} + + if(plotPi0Spectra == kTRUE && calculateBackground == kTRUE){histograms->AddHistogram("Background_InvMass_vs_Pt_Spectra" ,"Background Invariant Mass vs Pt" , nXBinsSpectra, firstXBinSpectra, lastXBinSpectra,nYBinsSpectra, firstYBinSpectra, lastYBinSpectra,"InvMass [GeV]","Pt [GeV]");} + + + + //------------------------------ end Creating the histograms ----------------------------- + + // Create the Analysis manager + AliAnalysisManager *mgr = new AliAnalysisManager("My Manager", "My Analysis"); + + // Define Input Event Handler + AliESDInputHandler* inpHandler = new AliESDInputHandler(); + + // Define Output Event Handler + AliAODHandler* aodHandler = new AliAODHandler(); + aodHandler->SetOutputFileName("aodAliGammaConversion.root"); + + // Define MC Truth Event Handler + AliMCEventHandler* mcHandler = new AliMCEventHandler(); + + // Add Handlers to the Task Manager + mgr->SetInputEventHandler (inpHandler); + mgr->SetOutputEventHandler (aodHandler); + mgr->SetMCtruthEventHandler(mcHandler); + + // Be sure you are told what you are doing + mgr->SetDebugLevel(10); + + // Declare Common Input Tchain + AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("Chain",TChain::Class(),AliAnalysisManager::kInputContainer); + + // Common Output Tree in common ‘default’ output file + AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("tree", TTree::Class(),AliAnalysisManager::kOutputContainer, "default"); + + // Private output objects + AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("histogramsAliGammaConversion", TList::Class(),AliAnalysisManager::kOutputContainer, "histogramsAliGammaConversion.root"); + + + //------------------------ END: Define input/output handlers --------------------------------------------------- + + + //check for errors in the specified data + if(useKFParticle == kTRUE && useESDTrack == kTRUE){ + //Print warning, cannot use both + } + if(useKFParticle == kFALSE && useESDTrack == kFALSE){ + //Print warning, one have to be specified + } + + + //Create the V0Reader + AliV0Reader * v0Reader = new AliV0Reader(); + if(useKFParticle){ + v0Reader->UseKFParticle(); + } + else if(useESDTrack){ + v0Reader->UseESDTrack(); + } + v0Reader->SetNegativeTrackPID(pidOfNegativeTrack); + v0Reader->SetPositiveTrackPID(pidOfPositiveTrack); + v0Reader->SetMaxRCut(maxRCut); + v0Reader->SetEtaCut(etaCut); + v0Reader->SetPtCut(ptCut); + v0Reader->SetChi2CutConversion(chi2CutConversion); + v0Reader->SetChi2CutMeson(chi2CutMeson); + v0Reader->SetPIDProbability(probElectron); + v0Reader->SetXVertexCut(xVertexCut); + v0Reader->SetYVertexCut(yVertexCut); + v0Reader->SetZVertexCut(zVertexCut); + v0Reader->SetSigmaMass(sigmaCutGammaMass); + v0Reader->SetUseImprovedVertex(useImprovedVertex); + v0Reader->SetDoMCTruth(doMCTruth); + + // Create the GammaConversionTask + AliAnalysisTaskGammaConversion *gammaconversion = new AliAnalysisTaskGammaConversion("GammaConversionTask"); + gammaconversion->SetDebugLevel(10); + + gammaconversion->SetWriteNtuple(writeNtuple); + + gammaconversion->SetV0Reader(v0Reader); + gammaconversion->SetCalculateBackground(calculateBackground); + gammaconversion->Init(); + + gammaconversion->SetElectronMass(electronMass); + gammaconversion->SetGammaMass(gammaMass); + gammaconversion->SetPi0Mass(pi0Mass); + gammaconversion->SetEtaMass(etaMass); + + gammaconversion->SetGammaWidth(gammaWidth); + gammaconversion->SetPi0Width(pi0Width); + gammaconversion->SetEtaWidth(etaWidth); + + // define the width constraint used by KF particle. + Double_t gammaWidth = 0.01; + Double_t pi0Width = 0.01; + Double_t etaWidth = 0.01; + + gammaconversion->SetHistograms(histograms); + v0Reader->SetHistograms(histograms);// also give the pointer to the v0reader, for debugging cuts + + gammaconversion->SetDoMCTruth(doMCTruth); + + + // Add task to the manager + mgr->AddTask(gammaconversion); + + // Connect I/O to the task + mgr->ConnectInput (gammaconversion, 0, cinput1); + mgr->ConnectOutput(gammaconversion, 0, coutput1); + mgr->ConnectOutput(gammaconversion, 1, coutput2); + + TChain* chain= CreateESDChain(sample,numberOfFilesToAnalyze); + + mgr->InitAnalysis(); + + mgr->PrintStatus(); + + mgr->StartAnalysis("local",chain); +} + + + + +void build() { + TStopwatch timer; + timer.Start(); + gSystem->Load("libTree.so"); + gSystem->Load("libGeom"); + // gSystem->Load("libANALYSISalice"); + + //// + //Setting up ESD.par// + //// + cout<<"compiling ESD"<Load("libVMC.so"); + gSystem->Load("libESD.so"); + + //// + //// + //Setting up STEERBase.par// + //// + cout<<"compiling STEERBase"<Load("libSTEERBase.so"); + + //// + //Setting up AOD.par// + //// + cout<<"compiling AOD"<Load("libAOD.so"); + + //// + //Setting up ANALYSIS.par// + //// + cout<<"compiling ANALYSIS"<Load("libANALYSIS.so"); + + //// + //Setting up ANALYSISalice.par// + //// + cout<<"compiling ANALUSISalice"<Load("libANALYSISalice.so"); + + //// + //Setting up PWG4Gamma.par// + //// + // cout<<"compiling GammaConv"<Load("libPWG4PartCorr.so"); + } + else{ + setupPar("PWG4GammaConv"); + gSystem->Load("libPWG4GammaConv.so"); + } + //if head:: use PWG4PartCorr +} + +Int_t setupPar(const char* pararchivename) { + /////////////////// + // Setup PAR File// + /////////////////// + if (pararchivename) { + char processline[1024]; + sprintf(processline,".! tar xvzf %s.par",pararchivename); + gROOT->ProcessLine(processline); + const char* ocwd = gSystem->WorkingDirectory(); + gSystem->ChangeDirectory(pararchivename); + + // check for BUILD.sh and execute + if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) { + printf("*******************************\n"); + printf("*** Building PAR archive ***\n"); + printf("*******************************\n"); + + if (gSystem->Exec("PROOF-INF/BUILD.sh")) { + Error("runAnalysis","Cannot Build the PAR Archive! - Abort!"); + return -1; + } + } + // check for SETUP.C and execute + if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) { + printf("*******************************\n"); + printf("*** Setup PAR archive ***\n"); + printf("*******************************\n"); + gROOT->Macro("PROOF-INF/SETUP.C"); + } + + gSystem->ChangeDirectory("../"); + } + return 1; +} -- 2.43.5