From: pchrist Date: Mon, 30 Nov 2009 09:13:59 +0000 (+0000) Subject: Adding the correction class for the proton spectra - first preliminary version X-Git-Url: http://git.uio.no/git/?a=commitdiff_plain;h=4305075403e034cb55fc7d9b11de70631200c11d;p=u%2Fmrichter%2FAliRoot.git Adding the correction class for the proton spectra - first preliminary version --- diff --git a/PWG2/PWG2spectraLinkDef.h b/PWG2/PWG2spectraLinkDef.h index cd4375d1d1c..a2c6c59a7cd 100644 --- a/PWG2/PWG2spectraLinkDef.h +++ b/PWG2/PWG2spectraLinkDef.h @@ -18,6 +18,7 @@ #pragma link C++ class AliProtonFeedDownAnalysisTask+; #pragma link C++ class AliProtonFeedDownAnalysis+; #pragma link C++ class AliProtonAbsorptionCorrection+; +#pragma link C++ class AliProtonSpectraCorrection+; #pragma link C++ class AliAnalysisCentralCutMC+; #pragma link C++ class AliAnalysisCentralCutESD+; #pragma link C++ class AliAnalysisCentralCutEvtMC+; diff --git a/PWG2/SPECTRA/AliProtonAbsorptionCorrection.h b/PWG2/SPECTRA/AliProtonAbsorptionCorrection.h index 8a7315e7452..5276caea0b8 100644 --- a/PWG2/SPECTRA/AliProtonAbsorptionCorrection.h +++ b/PWG2/SPECTRA/AliProtonAbsorptionCorrection.h @@ -37,7 +37,7 @@ class AliProtonAbsorptionCorrection : public TObject { kStepGenerated = 0, kStepReconstructible = 1, kStepReconstructed = 2, - kNSteps = 5 + kNSteps = 3 }; AliProtonAbsorptionCorrection(); diff --git a/PWG2/SPECTRA/AliProtonSpectraCorrection.cxx b/PWG2/SPECTRA/AliProtonSpectraCorrection.cxx new file mode 100644 index 00000000000..9703fba8b35 --- /dev/null +++ b/PWG2/SPECTRA/AliProtonSpectraCorrection.cxx @@ -0,0 +1,322 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +//#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +class AliLog; +class AliESDVertex; + +#include "AliProtonSpectraCorrection.h" +#include "AliProtonAnalysisBase.h" + +ClassImp(AliProtonSpectraCorrection) + +//____________________________________________________________________// +AliProtonSpectraCorrection::AliProtonSpectraCorrection() : + TObject(), fProtonAnalysisBase(0), + fNBinsY(0), fMinY(0), fMaxY(0), + fNBinsPt(0), fMinPt(0), fMaxPt(0), + fCFManagerProtons(0), fCFManagerAntiProtons(0) { + //fProtonContainer(0), fAntiProtonContainer(0) { + //Default constructor +} + +//____________________________________________________________________// +AliProtonSpectraCorrection::~AliProtonSpectraCorrection() { + //Default destructor + if(fCFManagerProtons) delete fCFManagerProtons; + if(fCFManagerAntiProtons) delete fCFManagerAntiProtons; + if(fProtonAnalysisBase) delete fProtonAnalysisBase; + //if(fProtonContainer) delete fProtonContainer; + //if(fAntiProtonContainer) delete fAntiProtonContainer; +} + +//____________________________________________________________________// +void AliProtonSpectraCorrection::InitAnalysisHistograms(Int_t nbinsY, + Float_t fLowY, + Float_t fHighY, + Int_t nbinsPt, + Float_t fLowPt, + Float_t fHighPt) { + //Initializes the histograms + fNBinsY = nbinsY; + fMinY = fLowY; + fMaxY = fHighY; + fNBinsPt = nbinsPt; + fMinPt = fLowPt; + fMaxPt = fHighPt; + const Int_t mintrackrefsTPC = 1; + + //=========================================================// + //setting up the containers + Int_t iBin[2]; + iBin[0] = nbinsY; + iBin[1] = nbinsPt; + Double_t *binLimY = new Double_t[nbinsY+1]; + Double_t *binLimPt = new Double_t[nbinsPt+1]; + //values for bin lower bounds + for(Int_t i = 0; i <= nbinsY; i++) + binLimY[i]=(Double_t)fLowY + (fHighY - fLowY) /nbinsY*(Double_t)i; + for(Int_t i = 0; i <= nbinsPt; i++) + binLimPt[i]=(Double_t)fLowPt + (fHighPt - fLowPt) /nbinsPt*(Double_t)i; + + //Proton container + AliCFContainer *containerProtons = new AliCFContainer("containerProtons", + "container for protons", + kNSteps,2,iBin); + containerProtons->SetBinLimits(0,binLimY); //rapidity or eta + containerProtons->SetBinLimits(1,binLimPt); //pT + + //Anti-proton container + AliCFContainer *containerAntiProtons = new AliCFContainer("containerAntiProtons", + "container for antiprotons", + kNSteps,2,iBin); + containerAntiProtons->SetBinLimits(0,binLimY); //rapidity or eta + containerAntiProtons->SetBinLimits(1,binLimPt); //pT + + //=========================================================// + //Setting up the criteria for the generated particles + AliCFTrackKineCuts *mcKineCutsProtons = new AliCFTrackKineCuts("mcKineCutsProtons", + "MC-level kinematic cuts"); + mcKineCutsProtons->SetPtRange(fMinPt,fMaxPt); + if(fProtonAnalysisBase->GetEtaMode()) + mcKineCutsProtons->SetEtaRange(fMinY,fMaxY); + else + mcKineCutsProtons->SetRapidityRange(fMinY,fMaxY); + mcKineCutsProtons->SetChargeMC(1.0); + + AliCFTrackKineCuts *mcKineCutsAntiProtons = new AliCFTrackKineCuts("mcKineCutsAntiProtons", + "MC-level kinematic cuts"); + mcKineCutsAntiProtons->SetPtRange(fMinPt,fMaxPt); + if(fProtonAnalysisBase->GetEtaMode()) + mcKineCutsAntiProtons->SetEtaRange(fMinY,fMaxY); + else + mcKineCutsAntiProtons->SetRapidityRange(fMinY,fMaxY); + mcKineCutsAntiProtons->SetChargeMC(-1.0); + + AliCFParticleGenCuts* mcGenCutsProtons = new AliCFParticleGenCuts("mcGenCutsProtons", + "MC particle generation cuts"); + mcGenCutsProtons->SetRequireIsPrimary(); + mcGenCutsProtons->SetRequirePdgCode(2212); + AliCFParticleGenCuts* mcGenCutsAntiProtons = new AliCFParticleGenCuts("mcGenCutsAntiProtons", + "MC particle generation cuts"); + mcGenCutsAntiProtons->SetRequireIsPrimary(); + mcGenCutsAntiProtons->SetRequirePdgCode(-2212); + + TObjArray* mcListProtons = new TObjArray(0); + mcListProtons->AddLast(mcKineCutsProtons); + mcListProtons->AddLast(mcGenCutsProtons); + TObjArray* mcListAntiProtons = new TObjArray(0); + mcListAntiProtons->AddLast(mcKineCutsAntiProtons); + mcListAntiProtons->AddLast(mcGenCutsAntiProtons); + + //Setting up the criteria for the reconstructible particles + AliCFAcceptanceCuts *mcAccCuts = new AliCFAcceptanceCuts("mcAccCuts", + "Acceptance cuts"); + mcAccCuts->SetMinNHitTPC(mintrackrefsTPC); + TObjArray* accList = new TObjArray(0); + accList->AddLast(mcAccCuts); + + //____________________________________________// + //Setting up the criteria for the reconstructed tracks + //____________________________________________// + AliCFTrackKineCuts *recKineCutsProtons = new AliCFTrackKineCuts("recKineCutsProtons", + "rec-level kine cuts"); + recKineCutsProtons->SetPtRange(fMinPt,fMaxPt); + if(fProtonAnalysisBase->GetEtaMode()) + recKineCutsProtons->SetEtaRange(fMinY,fMaxY); + else + recKineCutsProtons->SetRapidityRange(fMinY,fMaxY); + recKineCutsProtons->SetChargeRec(1.0); + + //____________________________________________// + AliCFTrackKineCuts *recKineCutsAntiProtons = new AliCFTrackKineCuts("recKineCutsAntiProtons", + "rec-level kine cuts"); + recKineCutsAntiProtons->SetPtRange(fMinPt,fMaxPt); + if(fProtonAnalysisBase->GetEtaMode()) + recKineCutsAntiProtons->SetEtaRange(fMinY,fMinY); + else + recKineCutsAntiProtons->SetRapidityRange(fMinY,fMaxY); + recKineCutsAntiProtons->SetChargeRec(-1.0); + + //____________________________________________// + TObjArray* recListProtons = new TObjArray(0); + recListProtons->AddLast(recKineCutsProtons); + recListProtons->AddLast(mcGenCutsProtons); + + TObjArray* recListAntiProtons = new TObjArray(0); + recListAntiProtons->AddLast(recKineCutsAntiProtons); + recListAntiProtons->AddLast(mcGenCutsAntiProtons); + + //=========================================================// + //CF manager - Protons + fCFManagerProtons = new AliCFManager(); + fCFManagerProtons->SetParticleContainer(containerProtons); + fCFManagerProtons->SetParticleCutsList(AliCFManager::kPartGenCuts,mcListProtons); + fCFManagerProtons->SetParticleCutsList(AliCFManager::kPartAccCuts,accList); + fCFManagerProtons->SetParticleCutsList(AliCFManager::kPartRecCuts,recListProtons); + + //CF manager - Protons + fCFManagerAntiProtons = new AliCFManager(); + fCFManagerAntiProtons->SetParticleContainer(containerAntiProtons); + fCFManagerAntiProtons->SetParticleCutsList(AliCFManager::kPartGenCuts,mcListAntiProtons); + fCFManagerAntiProtons->SetParticleCutsList(AliCFManager::kPartAccCuts,accList); + fCFManagerAntiProtons->SetParticleCutsList(AliCFManager::kPartRecCuts,recListAntiProtons); +} + +//_________________________________________________________________________// +void AliProtonSpectraCorrection::FillCorrectionMaps(AliESDEvent *esd, + const AliESDVertex *vertex, + AliMCEvent *mcEvent) { + //Function to fill the correction containers + fCFManagerProtons->SetEventInfo(mcEvent); + fCFManagerAntiProtons->SetEventInfo(mcEvent); + + //Dummy container + Double_t containerInput[2]; + //__________________________________________________________// + //loop on the MC event + for (Int_t ipart = 0; ipart < mcEvent->GetNumberOfTracks(); ipart++) { + AliMCParticle *mcPart = dynamic_cast(mcEvent->GetTrack(ipart)); + + //Protons + //check the MC-level cuts + if (fCFManagerProtons->CheckParticleCuts(AliCFManager::kPartGenCuts, + mcPart)) { + containerInput[0] = (Float_t)mcPart->Eta(); + containerInput[1] = (Float_t)mcPart->Pt(); + //fill the container for Gen-level selection + fCFManagerProtons->GetParticleContainer()->Fill(containerInput, + kStepGenerated); + //check the Acceptance-level cuts + if (fCFManagerProtons->CheckParticleCuts(AliCFManager::kPartAccCuts, + mcPart)) { + //fill the container for Acceptance-level selection + fCFManagerProtons->GetParticleContainer()->Fill(containerInput, + kStepReconstructible); + }//acceptance cuts - protons + }//MC level cuts - protons + + //Antiprotons + //check the MC-level cuts + if (fCFManagerAntiProtons->CheckParticleCuts(AliCFManager::kPartGenCuts, + mcPart)) { + containerInput[0] = (Float_t)mcPart->Eta(); + containerInput[1] = (Float_t)mcPart->Pt(); + //fill the container for Gen-level selection + fCFManagerAntiProtons->GetParticleContainer()->Fill(containerInput, + kStepGenerated); + //check the Acceptance-level cuts + if (fCFManagerAntiProtons->CheckParticleCuts(AliCFManager::kPartAccCuts, + mcPart)) { + //fill the container for Acceptance-level selection + fCFManagerAntiProtons->GetParticleContainer()->Fill(containerInput, + kStepReconstructible); + }//acceptance cuts - antiprotons + }//MC level cuts - antiprotons + }//loop over MC particles + + + //__________________________________________________________// + //ESD track loop + for (Int_t iTrack = 0; iTrack < esd->GetNumberOfTracks(); iTrack++) { + AliESDtrack *track = dynamic_cast(esd->GetTrack(iTrack)); + if(!track) continue; + + // is track associated to particle ? + Int_t label = track->GetLabel(); + if (label<0) continue; + AliMCParticle *mcPart = dynamic_cast(mcEvent->GetTrack(label)); + + if((fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kTPC)||(fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kHybrid)) { + AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam(); + if(!tpcTrack) continue; + }//Hybrid or standalone TPC + + //Protons + // check if this track was part of the signal - primaries + if (fCFManagerProtons->CheckParticleCuts(AliCFManager::kPartGenCuts, + mcPart)) { + //fill the container - reconstructed protons + containerInput[0] = mcPart->Eta(); + containerInput[1] = mcPart->Pt(); + fCFManagerProtons->GetParticleContainer()->Fill(containerInput, + kStepReconstructed); + //fill the container - identified protons + if(fProtonAnalysisBase->IsProton(track)) { + containerInput[0] = mcPart->Eta(); + containerInput[1] = mcPart->Pt(); + fCFManagerProtons->GetParticleContainer()->Fill(containerInput, + kStepIdentified); + + //fill the container - survived protons + //track cuts + if(!fProtonAnalysisBase->IsAccepted(esd,vertex,track)) continue; + //track outside the analyzed y-Pt + if(!fProtonAnalysisBase->IsInPhaseSpace(track)) continue; + containerInput[0] = mcPart->Eta(); + containerInput[1] = mcPart->Pt(); + fCFManagerProtons->GetParticleContainer()->Fill(containerInput, + kStepSelected); + } + }//MC primaries - protons + + //Antiprotons + // check if this track was part of the signal - primaries + if (fCFManagerAntiProtons->CheckParticleCuts(AliCFManager::kPartGenCuts, + mcPart)) { + //fill the container - reconstructed antiprotons + containerInput[0] = mcPart->Eta(); + containerInput[1] = mcPart->Pt(); + fCFManagerAntiProtons->GetParticleContainer()->Fill(containerInput, + kStepReconstructed); + + //fill the container - identified antiprotons + if(fProtonAnalysisBase->IsProton(track)) { + containerInput[0] = mcPart->Eta(); + containerInput[1] = mcPart->Pt(); + fCFManagerAntiProtons->GetParticleContainer()->Fill(containerInput, + kStepIdentified); + + //fill the container - survived antiprotons + //track cuts + if(!fProtonAnalysisBase->IsAccepted(esd,vertex,track)) continue; + //track outside the analyzed y-Pt + if(!fProtonAnalysisBase->IsInPhaseSpace(track)) continue; + containerInput[0] = mcPart->Eta(); + containerInput[1] = mcPart->Pt(); + fCFManagerAntiProtons->GetParticleContainer()->Fill(containerInput, + kStepSelected); + } + }//MC primaries - antiprotons + }//track loop + + //if(fProtonAnalysisBase->GetDebugMode()) + //Printf("Initial number of tracks: %d | Identified (anti)protons: %d - %d | Survived (anti)protons: %d - %d",nTracks,nIdentifiedProtons,nIdentifiedAntiProtons,nSurvivedProtons,nSurvivedAntiProtons); +} + +//_________________________________________________________________________// +void AliProtonSpectraCorrection::FillCorrectionMaps(AliAODEvent *fAOD) { + // Analysis from AOD: to be implemented... + // in the near future. + fAOD->Print(); +} diff --git a/PWG2/SPECTRA/AliProtonSpectraCorrection.h b/PWG2/SPECTRA/AliProtonSpectraCorrection.h new file mode 100644 index 00000000000..8e9832b0a6f --- /dev/null +++ b/PWG2/SPECTRA/AliProtonSpectraCorrection.h @@ -0,0 +1,84 @@ +#ifndef ALIPROTONSPECTRACORRECTION_H +#define ALIPROTONSPECTRACORRECTION_H + +//------------------------------------------------------------------------- +// Class AliProtonSpectraCorrection +// This is the class for the absorption corrections used for +// the baryon (proton) ratio analysis +// +// Origin: Panos Christakoglou | Panos.Christakoglou@cern.ch +//------------------------------------------------------------------------- + +#include "TObject.h" +#include "TH1I.h" +#include "AliCFContainer.h" +#include "AliCFManager.h" + +class TF1; +class TH2D; +class TH1F; +class TList; + +class AliPID; +class AliCFDataGrid; +class AliAODEvent; +class AliAODtrack; +class AliESDEvent; +class AliESDtrack; +class AliExternalTrackParam; +class AliStack; +class AliESDVertex; +class AliProtonAnalysisBase; +class AliMCEvent; + +class AliProtonSpectraCorrection : public TObject { + public: + enum { + kStepGenerated = 0, + kStepReconstructible = 1, + kStepReconstructed = 2, + kStepIdentified = 3, + kStepSelected = 4, + kNSteps = 5 + }; + + AliProtonSpectraCorrection(); + virtual ~AliProtonSpectraCorrection(); + + void SetBaseAnalysis(AliProtonAnalysisBase * const baseAnalysis) { + fProtonAnalysisBase = baseAnalysis;} + AliProtonAnalysisBase *GetProtonAnalysisBaseObject() const { + return fProtonAnalysisBase;} + + void InitAnalysisHistograms(Int_t nbinsY, Float_t fLowY, Float_t fHighY, + Int_t nbinsPt, Float_t fLowPt, Float_t fHighPt); + void FillCorrectionMaps(AliESDEvent *fESD, + const AliESDVertex *vertex, + AliMCEvent *mcEvent); + void FillCorrectionMaps(AliAODEvent *fAOD); + + AliCFContainer *GetProtonContainer() const { + return fCFManagerProtons->GetParticleContainer();} + AliCFContainer *GetAntiProtonContainer() const { + return fCFManagerAntiProtons->GetParticleContainer();} + + private: + AliProtonSpectraCorrection(const AliProtonSpectraCorrection&); // Not implemented + AliProtonSpectraCorrection& operator=(const AliProtonSpectraCorrection&); // Not implemented + + AliProtonAnalysisBase *fProtonAnalysisBase;//base analysis object + + Int_t fNBinsY; //number of bins in y or eta + Double_t fMinY, fMaxY; //min & max value of y or eta + Int_t fNBinsPt; //number of bins in pT + Double_t fMinPt, fMaxPt; //min & max value of pT + + //Analysis containers + AliCFManager *fCFManagerProtons; // CF manager protons + AliCFManager *fCFManagerAntiProtons; // CF manager antiprotons + + ClassDef(AliProtonSpectraCorrection,1); +}; + +#endif + diff --git a/PWG2/libPWG2spectra.pkg b/PWG2/libPWG2spectra.pkg index eaae933b530..42f618cc71f 100644 --- a/PWG2/libPWG2spectra.pkg +++ b/PWG2/libPWG2spectra.pkg @@ -14,6 +14,7 @@ SRCS= SPECTRA/AliProtonAnalysisBase.cxx \ SPECTRA/AliProtonFeedDownAnalysisTask.cxx \ SPECTRA/AliProtonFeedDownAnalysis.cxx \ SPECTRA/AliProtonAbsorptionCorrection.cxx \ + SPECTRA/AliProtonSpectraCorrection.cxx \ SPECTRA/AliAnalysisCentralCutMC.cxx \ SPECTRA/AliAnalysisCentralCutESD.cxx \ SPECTRA/AliAnalysisCentralCutEvtMC.cxx \