From 8a6b5ac874f124fb8c78aafbe922a962808f8ce7 Mon Sep 17 00:00:00 2001 From: pulvir Date: Fri, 13 Feb 2009 11:17:26 +0000 Subject: [PATCH] Moved PID object into the AliRsnReader from AliRsnAnalysisTaskSEBase Added some cuts Added the option to define the name of Pair Manager from configured macro Moved some messages from AliInfo to AliDebug --- PWG2/RESONANCES/AliRsnAnalysisSE.cxx | 6 +- PWG2/RESONANCES/AliRsnAnalysisSE.h | 2 +- PWG2/RESONANCES/AliRsnAnalysisTaskSEBase.cxx | 26 +++--- PWG2/RESONANCES/AliRsnAnalysisTaskSEBase.h | 6 +- PWG2/RESONANCES/AliRsnCut.cxx | 10 ++- PWG2/RESONANCES/AliRsnPID.cxx | 4 +- PWG2/RESONANCES/AliRsnReader.cxx | 92 +++++++++++--------- PWG2/RESONANCES/AliRsnReader.h | 16 +++- PWG2/RESONANCES/AliRsnReaderTask.cxx | 3 +- PWG2/RESONANCES/AliRsnReaderTaskSE.cxx | 6 +- PWG2/RESONANCES/macros/AddRsnAnalysisTask.C | 9 +- PWG2/RESONANCES/macros/AliRsnAnalysis.C | 90 ++++++++++++++----- 12 files changed, 173 insertions(+), 97 deletions(-) diff --git a/PWG2/RESONANCES/AliRsnAnalysisSE.cxx b/PWG2/RESONANCES/AliRsnAnalysisSE.cxx index 12b8c7ad81a..c17660717ac 100644 --- a/PWG2/RESONANCES/AliRsnAnalysisSE.cxx +++ b/PWG2/RESONANCES/AliRsnAnalysisSE.cxx @@ -207,13 +207,15 @@ void AliRsnAnalysisSE::AddPairMgr(AliRsnPairMgr * pairmgr) } //________________________________________________________________________ -void AliRsnAnalysisSE::AddPairMgrFromConfig(TString configfile) +void AliRsnAnalysisSE::AddPairMgrFromConfig(TString configfile,TString analysisName) { gROOT->LoadMacro(configfile.Data()); configfile.ReplaceAll(".C",""); - AliRsnPairMgr *mgrRsn = (AliRsnPairMgr *) gROOT->ProcessLine(Form("%s();", configfile.Data())); + analysisName.ReplaceAll("_","-"); + + AliRsnPairMgr *mgrRsn = (AliRsnPairMgr *) gROOT->ProcessLine(Form("%s(\"%s\");", configfile.Data(),analysisName.Data())); if (!mgrRsn) return; fPairMgrs.Add(mgrRsn); diff --git a/PWG2/RESONANCES/AliRsnAnalysisSE.h b/PWG2/RESONANCES/AliRsnAnalysisSE.h index 293879f870f..db7adfa80ce 100644 --- a/PWG2/RESONANCES/AliRsnAnalysisSE.h +++ b/PWG2/RESONANCES/AliRsnAnalysisSE.h @@ -30,7 +30,7 @@ class AliRsnAnalysisSE : public AliRsnAnalysisTaskSEBase virtual void Terminate(Option_t *); void AddPairMgr(AliRsnPairMgr *pairmgr); - void AddPairMgrFromConfig(TString configfile); + void AddPairMgrFromConfig(TString configfile, TString analysisName = "default"); void SetBufferSize(const Int_t size) {fBufferSize = size;} Int_t GetBufferSize() const {return fBufferSize;} diff --git a/PWG2/RESONANCES/AliRsnAnalysisTaskSEBase.cxx b/PWG2/RESONANCES/AliRsnAnalysisTaskSEBase.cxx index 51173d5044d..1aa97d26b5a 100644 --- a/PWG2/RESONANCES/AliRsnAnalysisTaskSEBase.cxx +++ b/PWG2/RESONANCES/AliRsnAnalysisTaskSEBase.cxx @@ -32,7 +32,7 @@ AliRsnAnalysisTaskSEBase::AliRsnAnalysisTaskSEBase(const char *name) : AliAnalysisTaskSE(name), fUseAutoHandler(kTRUE), fReader(), - fPID(), + //fPID(), fAnalysisMgr(0x0) // pointer to current AnalysisMgr { // @@ -309,7 +309,7 @@ AliRsnEvent * AliRsnAnalysisTaskSEBase::GetRsnFromAOD(const Short_t & index) // clear pevious event fRSN[0]->Clear(); if (!fReader.FillFromAOD(fRSN[0], fRsnAOD[index])) return (AliRsnEvent*) 0x0; - if (!fPID.Process(fRSN[0])) AliWarning("Failed PID"); + //if (!fPID.Process(fRSN[0])) AliWarning("Failed PID"); return (AliRsnEvent*) fRSN[0]; } @@ -339,11 +339,11 @@ AliRsnEvent * AliRsnAnalysisTaskSEBase::GetRsnFromESD(const Short_t & index) if (!fReader.FillFromESD(fRSN[index], fRsnESD[index], 0x0)) return (AliRsnEvent*) 0x0; - if (!fPID.Process(fRSN[index])) - { - AliWarning("Failed PID"); - return (AliRsnEvent*) 0x0; - } + //if (!fPID.Process(fRSN[index])) + //{ + // AliWarning("Failed PID"); + // return (AliRsnEvent*) 0x0; + //} return fRSN[index]; } @@ -374,7 +374,7 @@ AliRsnEvent * AliRsnAnalysisTaskSEBase::GetRsnFromMC(const Short_t & index) if (!fRsnMC[index]) return (AliRsnEvent *) 0x0; if (!fReader.FillFromMC(fRSN[index], fRsnMC[index])) return (AliRsnEvent*) 0x0; - fPID.Process(fRSN[index]); + //fPID.Process(fRSN[index]); return fRSN[index]; } @@ -404,11 +404,11 @@ AliRsnEvent * AliRsnAnalysisTaskSEBase::GetRsnFromESDMC(const Short_t & index) if (!fRsnMC[index]) return (AliRsnEvent *) 0x0; if (!fReader.FillFromESD(fRSN[index], fRsnESD[index], fRsnMC[index])) return (AliRsnEvent*) 0x0; - if (!fPID.Process(fRSN[index])) - { - AliWarning("Failed PID"); - return (AliRsnEvent*) 0x0; - } + //if (!fPID.Process(fRSN[index])) + //{ + // AliWarning("Failed PID"); + // return (AliRsnEvent*) 0x0; + //} return fRSN[index]; } diff --git a/PWG2/RESONANCES/AliRsnAnalysisTaskSEBase.h b/PWG2/RESONANCES/AliRsnAnalysisTaskSEBase.h index bebf1a12b08..253974e6c8a 100644 --- a/PWG2/RESONANCES/AliRsnAnalysisTaskSEBase.h +++ b/PWG2/RESONANCES/AliRsnAnalysisTaskSEBase.h @@ -29,7 +29,7 @@ class AliRsnAnalysisTaskSEBase : public AliAnalysisTaskSE public: AliRsnAnalysisTaskSEBase(const char *name = "AliRsnAnalysisTaskSEBase"); AliRsnAnalysisTaskSEBase(const AliRsnAnalysisTaskSEBase& copy) : - AliAnalysisTaskSE(copy),fUseAutoHandler(kFALSE),fReader(),fPID(),fAnalysisMgr(0x0) {} + AliAnalysisTaskSE(copy),fUseAutoHandler(kFALSE),fReader(),/*fPID(),*/fAnalysisMgr(0x0) {} AliRsnAnalysisTaskSEBase& operator= (const AliRsnAnalysisTaskSEBase& /*copy*/) {return *this;} virtual ~AliRsnAnalysisTaskSEBase() {/* Does nothing*/} @@ -69,7 +69,7 @@ class AliRsnAnalysisTaskSEBase : public AliAnalysisTaskSE AliAODInputHandler* GetAODHandler(const Int_t& theValue = 0) const { return fRsnAODEH[theValue]; } AliRsnReader *GetReader() { return &fReader; } - AliRsnPID *GetPID() { return &fPID;} + AliRsnPID *GetPID() { return fReader.GetPID();} protected: @@ -87,7 +87,7 @@ class AliRsnAnalysisTaskSEBase : public AliAnalysisTaskSE AliAODInputHandler *fRsnAODEH[2]; // AOD event handler AliRsnReader fReader; // Reader - AliRsnPID fPID; // PID + //AliRsnPID fPID; // PID AliAnalysisManager *fAnalysisMgr; // pointer to current AnalysisMgr diff --git a/PWG2/RESONANCES/AliRsnCut.cxx b/PWG2/RESONANCES/AliRsnCut.cxx index 79cd9e81df1..4bf86851aa4 100644 --- a/PWG2/RESONANCES/AliRsnCut.cxx +++ b/PWG2/RESONANCES/AliRsnCut.cxx @@ -15,7 +15,7 @@ // authors: Martin Vala (martin.vala@cern.ch) // Alberto Pulvirenti (alberto.pulvirenti@ct.infn.it) // - +#include "Riostream.h" #include "AliLog.h" #include "AliRsnDaughter.h" @@ -78,8 +78,8 @@ AliRsnCut::AliRsnCut(const char *name, const char *title, EType type, Double_t m fIMax(fgkIBigNumber), fUIMin(0), fUIMax(2 * (UInt_t) fgkIBigNumber), - fULMin(min), - fULMax(max), + fULMin((ULong_t)min), + fULMax((ULong_t)max), fType(type), fVarType(kDouble_t) { @@ -320,7 +320,9 @@ Bool_t AliRsnCut::IsSelected(ETarget type, AliRsnDaughter *daughter) if (fType == kPIDType) return MatchesValue((Int_t) pidType); if (fType == kPIDProb) return IsBetween(prob); case kPIDProbForSpecies: - return IsBetween(daughter->PIDProb()[(AliRsnPID::EType)fIMin]); + cut = IsBetween(daughter->PIDProb()[(AliRsnPID::EType)fIMin]); + //cout << (AliRsnPID::EType)fIMin << ' ' << daughter->PIDProb()[(AliRsnPID::EType)fIMin] << ' ' << (cut?"OK":"NO") << endl; + return cut; case kTruePID: pdg = TMath::Abs(mcinfo->PDG()); cut = MatchesValue(pdg); diff --git a/PWG2/RESONANCES/AliRsnPID.cxx b/PWG2/RESONANCES/AliRsnPID.cxx index d0e5ef0303b..0323ee5bb8a 100644 --- a/PWG2/RESONANCES/AliRsnPID.cxx +++ b/PWG2/RESONANCES/AliRsnPID.cxx @@ -95,9 +95,7 @@ AliRsnPID::AliRsnPID() : // Int_t i; - for (i = 0; i < kSpecies; i++) fPrior[i] = 0.0; - -// gDirectory->Append(this, kTRUE); + for (i = 0; i < kSpecies; i++) fPrior[i] = 0.2; } //_____________________________________________________________________________ diff --git a/PWG2/RESONANCES/AliRsnReader.cxx b/PWG2/RESONANCES/AliRsnReader.cxx index 6583e6592a3..c23ad10e85e 100644 --- a/PWG2/RESONANCES/AliRsnReader.cxx +++ b/PWG2/RESONANCES/AliRsnReader.cxx @@ -57,7 +57,9 @@ AliRsnReader::AliRsnReader() : fUseRsnTrackCuts(kFALSE), fCheckVertexStatus(kFALSE), fMinNContributors(0), + fPID(), fPIDDef(), + fPIDArraysSize(1000), fITSClusters(0), fTPCClusters(0), fTRDClusters(0), @@ -169,6 +171,9 @@ Bool_t AliRsnReader::ConvertTrack(AliRsnDaughter *daughter, AliESDtrack *esdTrac } if (sum <= 0.0) return kFALSE; + // compute probabilities + if (!fPID.ComputeProbs(daughter)) return kFALSE; + // calculate N sigma to vertex AliESDtrackCuts trkCut; daughter->SetNSigmaToVertex(trkCut.GetSigmaToVertex(esdTrack)); @@ -200,6 +205,9 @@ Bool_t AliRsnReader::ConvertTrack(AliRsnDaughter *daughter, AliAODTrack *aodTrac Int_t i; for (i = 0; i < 5; i++) daughter->SetPIDWeight(i, aodTrack->PID()[i]); + // compute probabilities + if (!fPID.ComputeProbs(daughter)) return kFALSE; + // copy flags daughter->SetFlags(aodTrack->GetStatus()); @@ -248,6 +256,9 @@ Bool_t AliRsnReader::ConvertTrack(AliRsnDaughter *daughter, TParticle *particle) for (pdg = 0; pdg < AliRsnPID::kSpecies; pdg++) daughter->SetPIDWeight(pdg, 0.0); daughter->SetPIDWeight(AliRsnPID::InternalType(absPDG), 1.0); + // compute probabilities + if (!fPID.ComputeProbs(daughter)) return kFALSE; + return kTRUE; } @@ -347,7 +358,7 @@ Bool_t AliRsnReader::FillFromESD(AliRsnEvent *rsn, AliESDEvent *esd, AliMCEvent // This is known from the "Status" parameter of the vertex itself. const AliESDVertex *v = esd->GetPrimaryVertex(); if (!v->GetStatus()) v = esd->GetPrimaryVertexSPD(); - if (fCheckVertexStatus && v->GetStatus() == kFALSE) return kFALSE; + if (fCheckVertexStatus && (v->GetStatus() == kFALSE)) return kFALSE; if (fMinNContributors > 0 && v->GetNContributors() < fMinNContributors) return kFALSE; // get primary vertex @@ -441,12 +452,12 @@ Bool_t AliRsnReader::FillFromESD(AliRsnEvent *rsn, AliESDEvent *esd, AliMCEvent return kFALSE; } - // sort tracks w.r. to Pt (from largest to smallest) - //rsn->SortTracks(); - // correct tracks for primary vertex //rsn->CorrectTracks(); + // fill the PID index arrays + rsn->FillPIDArrays(fPIDArraysSize); + return kTRUE; } @@ -498,51 +509,54 @@ Bool_t AliRsnReader::FillFromAOD(AliRsnEvent *rsn, AliAODEvent *aod, AliMCEvent TObjArrayIter iter(aod->GetTracks()); while ((aodTrack = (AliAODTrack*)iter.Next())) { - // retrieve index - index = aod->GetTracks()->IndexOf(aodTrack); - label = aodTrack->GetLabel(); - if (fRejectFakes && (label < 0)) continue; - // copy ESD track data into RsnDaughter - // if unsuccessful, this track is skipped - check = ConvertTrack(&temp, aodTrack); - if (!check) continue; - // if stack is present, copy MC info - if (stack) + // retrieve index + index = aod->GetTracks()->IndexOf(aodTrack); + label = aodTrack->GetLabel(); + if (fRejectFakes && (label < 0)) continue; + // copy ESD track data into RsnDaughter + // if unsuccessful, this track is skipped + check = ConvertTrack(&temp, aodTrack); + if (!check) continue; + // if stack is present, copy MC info + if (stack) + { + TParticle *part = stack->Particle(TMath::Abs(label)); + if (part) { - TParticle *part = stack->Particle(TMath::Abs(label)); - if (part) - { - temp.InitMCInfo(part); - labmum = part->GetFirstMother(); - if (labmum >= 0) - { - TParticle *mum = stack->Particle(labmum); - temp.GetMCInfo()->SetMotherPDG(mum->GetPdgCode()); - } - } + temp.InitMCInfo(part); + labmum = part->GetFirstMother(); + if (labmum >= 0) + { + TParticle *mum = stack->Particle(labmum); + temp.GetMCInfo()->SetMotherPDG(mum->GetPdgCode()); + } } - // set index and label and add this object to the output container - temp.SetIndex(index); - temp.SetLabel(label); + } + // set index and label and add this object to the output container + temp.SetIndex(index); + temp.SetLabel(label); - // check this object against the Rsn cuts (if required) - if (fUseRsnTrackCuts) { - if (!fRsnTrackCuts.IsSelected(AliRsnCut::kParticle, &temp)) continue; - } + // check this object against the Rsn cuts (if required) + if (fUseRsnTrackCuts) { + if (!fRsnTrackCuts.IsSelected(AliRsnCut::kParticle, &temp)) continue; + } - AliRsnDaughter *ptr = rsn->AddTrack(temp); - // if problems occurred while storin, that pointer is NULL - if (!ptr) AliWarning(Form("Failed storing track#%d")); + AliRsnDaughter *ptr = rsn->AddTrack(temp); + // if problems occurred while storin, that pointer is NULL + if (!ptr) AliWarning(Form("Failed storing track#%d")); } // compute total multiplicity rsn->MakeComputations(); if (rsn->GetMultiplicity() <= 0) { - AliDebug(1, "Zero multiplicity in this event"); - return kFALSE; + AliDebug(1, "Zero multiplicity in this event"); + return kFALSE; } + // fill the PID index arrays + rsn->FillPIDArrays(fPIDArraysSize); + // correct tracks for primary vertex rsn->CorrectTracks(); @@ -632,8 +646,8 @@ Bool_t AliRsnReader::FillFromMC(AliRsnEvent *rsn, AliMCEvent *mc) return kFALSE; } - // sort tracks w.r. to Pt (from largest to smallest) - rsn->SortTracks(); + // fill the PID index arrays + rsn->FillPIDArrays(fPIDArraysSize); // correct tracks for primary vertex rsn->CorrectTracks(); diff --git a/PWG2/RESONANCES/AliRsnReader.h b/PWG2/RESONANCES/AliRsnReader.h index 8c468d12ae9..d4aa859269d 100644 --- a/PWG2/RESONANCES/AliRsnReader.h +++ b/PWG2/RESONANCES/AliRsnReader.h @@ -64,7 +64,10 @@ class AliRsnReader : public TObject Bool_t DoesRsnTrackCuts() {return fUseRsnTrackCuts;} AliRsnCutSet* GetRsnTrackCuts() {return &fRsnTrackCuts;} + AliRsnPID* GetPID() {return &fPID;} AliRsnPIDDefESD* GetPIDDef() {return &fPIDDef;} + void SetPIDArraysSize(Int_t value) {fPIDArraysSize = value;} + Int_t GetPIDArraysSize() {return fPIDArraysSize;} void SetTrackRefs(Int_t value) {fTrackRefs = value;} void SetTrackRefsITS(Int_t value) {fTrackRefsITS = value;} @@ -88,10 +91,13 @@ class AliRsnReader : public TObject // dummy copy methods AliRsnReader(const AliRsnReader ©) : - TObject(copy),fCheckSplit(0),fRejectFakes(0),fTPCOnly(0), - fUseESDTrackCuts(0),fUseRsnTrackCuts(0),fCheckVertexStatus(kFALSE), - fMinNContributors(0),fPIDDef(copy.fPIDDef),fITSClusters(0),fTPCClusters(0),fTRDClusters(0), - fTrackRefs(0),fTrackRefsITS(0),fTrackRefsTPC(0),fESDTrackCuts(),fRsnTrackCuts("") { /*nothing*/ } + TObject(copy), + fCheckSplit(0),fRejectFakes(0),fTPCOnly(0),fUseESDTrackCuts(0),fUseRsnTrackCuts(0), + fCheckVertexStatus(kFALSE),fMinNContributors(0), + fPID(),fPIDDef(copy.fPIDDef),fPIDArraysSize(0), + fITSClusters(0),fTPCClusters(0),fTRDClusters(0), + fTrackRefs(0),fTrackRefsITS(0),fTrackRefsTPC(0), + fESDTrackCuts(),fRsnTrackCuts("") { /*nothing*/ } AliRsnReader& operator=(const AliRsnReader&) {return (*this);} Bool_t fCheckSplit; // flag to check and remove split tracks @@ -103,7 +109,9 @@ class AliRsnReader : public TObject Bool_t fCheckVertexStatus; // reject events with vertex status = kFALSE Int_t fMinNContributors; // reject events whose primary vertex has too few contributors + AliRsnPID fPID; // manager for Bayes combination AliRsnPIDDefESD fPIDDef; // manager for alternative PID weights (ESD only) + Int_t fPIDArraysSize; // default size for the PID arrays in events Int_t fITSClusters; // minimum number of ITS clusters to accept a track Int_t fTPCClusters; // minimum number of TPC clusters to accept a track diff --git a/PWG2/RESONANCES/AliRsnReaderTask.cxx b/PWG2/RESONANCES/AliRsnReaderTask.cxx index eba1c7736ee..893b8fe7357 100644 --- a/PWG2/RESONANCES/AliRsnReaderTask.cxx +++ b/PWG2/RESONANCES/AliRsnReaderTask.cxx @@ -123,7 +123,8 @@ void AliRsnReaderTask::Exec(Option_t */*option*/) fRSN[0] = GetRsnEventFromInputType(0); if (!fRSN[0]) return; - AliInfo(Form("Collected %d tracks", fRSN[0]->GetMultiplicity())); + + AliDebug(1, Form("Collected %d tracks", fRSN[0]->GetMultiplicity())); fRsnTree->Fill(); PostData(0, fRsnTree); diff --git a/PWG2/RESONANCES/AliRsnReaderTaskSE.cxx b/PWG2/RESONANCES/AliRsnReaderTaskSE.cxx index 7f976ca9d10..31f4e05c54f 100644 --- a/PWG2/RESONANCES/AliRsnReaderTaskSE.cxx +++ b/PWG2/RESONANCES/AliRsnReaderTaskSE.cxx @@ -83,7 +83,7 @@ void AliRsnReaderTaskSE::UserExec(Option_t */*option*/) // and store them in the output AOD event, with all required computations. // - AliInfo(Form("Reading event %d", ++fEntry)); + AliDebug(1,Form("Reading event %d", ++fEntry)); // before adding new data, the ones from previous event // must be cleared explicitly @@ -121,9 +121,9 @@ void AliRsnReaderTaskSE::UserExec(Option_t */*option*/) if (!ok) AliWarning("Failed reading"); // step 2: PID probability computation - if (!fPID.Process(fRsnEvent)) AliWarning("Failed PID"); + //if (!fPID.Process(fRsnEvent)) AliWarning("Failed PID"); - AliInfo(Form("Collected %d tracks", fRsnEvent->GetMultiplicity())); + AliDebug(1,Form("Collected %d tracks", fRsnEvent->GetMultiplicity())); } //_____________________________________________________________________________ diff --git a/PWG2/RESONANCES/macros/AddRsnAnalysisTask.C b/PWG2/RESONANCES/macros/AddRsnAnalysisTask.C index 9eb9f3f57d0..af4277a8c7c 100644 --- a/PWG2/RESONANCES/macros/AddRsnAnalysisTask.C +++ b/PWG2/RESONANCES/macros/AddRsnAnalysisTask.C @@ -13,7 +13,7 @@ static AliRsnAnalysisTaskSEBase::EInputType inputType = AliRsnAnalysisTaskSEBase::kESDMC; static const char* outputFileName = "rsn.root"; -static Bool_t useAutoHandler = kTRUE; +static Bool_t useAutoHandler = kFALSE; static Int_t bufferSize = 3000; static Int_t pidArraySize = 2000; static Int_t nMixedEvents = 5; @@ -37,7 +37,7 @@ static Bool_t requireSigmaToVertex = kTRUE; static Bool_t acceptKinkDaughters = kFALSE; static Int_t minNClustersTPC = 50; -Int_t AddRsnAnalysisTask(AliAnalysisManager *mgr) +Int_t AddRsnAnalysisTask() { // // Core method of the macro. @@ -51,6 +51,7 @@ Int_t AddRsnAnalysisTask(AliAnalysisManager *mgr) AliRsnPID *pid = task->GetPID(); // set the input type + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); task->SetInputType(inputType, mgr, useAutoHandler); // define event-mixing cuts @@ -64,8 +65,8 @@ Int_t AddRsnAnalysisTask(AliAnalysisManager *mgr) task->SetMixingNum(nMixedEvents); // ESD settings - reader->SetCheckSplit(kTRUE); - pid->SetPIDArraysSize(pidArraySize); + reader->SetCheckSplit(kFALSE); + reader->SetPIDArraysSize(pidArraySize); pid->SetPriorProbability(AliRsnPID::kElectron, 0.02); pid->SetPriorProbability(AliRsnPID::kMuon, 0.02); pid->SetPriorProbability(AliRsnPID::kPion, 0.83); diff --git a/PWG2/RESONANCES/macros/AliRsnAnalysis.C b/PWG2/RESONANCES/macros/AliRsnAnalysis.C index 03b3bc60ee0..7638b071505 100644 --- a/PWG2/RESONANCES/macros/AliRsnAnalysis.C +++ b/PWG2/RESONANCES/macros/AliRsnAnalysis.C @@ -21,30 +21,56 @@ enum Rsn_DataSource kDataset // CAF dataset }; +enum Rsn_Environment +{ + kLocal, // local analysis with a locally defined TXT list of files + kAlien, // AliEn analysis with an XML collection + kProof // CAF analysis with a DataSet +}; + static Bool_t cleanPars = kFALSE; static Bool_t cleanPWG2resonances = kFALSE; +static const char* pathPar = "/home/pulvir/ALICE/ALIROOT/par-files/afs_proof"; static const char* listPar = "STEERBase:ESD:AOD:ANALYSIS:ANALYSISalice:PWG2resonances"; -static const char* proofConnection = "pulvir@alicecaf.cern.ch"; - -static Bool_t isAlien = kTRUE; -static Bool_t isProof = kFALSE; +static const char* proofConnection = "localhost"; -// Uncomment these two lines for an example run with a local list of local files -//static Rsn_DataSource listType = kTextFile; +// Uncomment these lines for an example run with a local list of local files //static const char* inputSource = "local.txt"; +//static Rsn_DataSource listType = kTextFile; +//static Rsn_Environment environment = kLocal; -// Uncomment these two lines for an example run with PROOF -//static const char* inputSource = "/COMMON/COMMON/LHC08c11_10TeV_0.5T"; -//static Rsn_DataSource listType = kDataset; +// Uncomment these lines for an example run with PROOF +static const char* inputSource = "/COMMON/COMMON/LHC08c11_10TeV_0.5T"; +static Rsn_DataSource listType = kDataset; +static Rsn_Environment environment = kProof; -// Uncomment these two lines for an example run with AliEn XML collection -static const char* inputSource = "wn.xml"; -static Rsn_DataSource listType = kXMLCollection; +// Uncomment these lines for an example run with AliEn XML collection +//static const char* inputSource = "wn.xml"; +//static Rsn_DataSource listType = kXMLCollection; +//static Rsn_Environment environment = kAlien; -static Int_t nReadFiles = 0; +static Int_t nReadFiles = 5; static Int_t nSkippedFiles = 0; static TString treeName = "esdTree"; +//_________________________________________________________________________________________________ +Bool_t IsProof() +{ +// +// Check if the environment is PROOF +// + return (environment == kProof); +} + +//_________________________________________________________________________________________________ +Bool_t IsAlien() +{ +// +// Check if the environment is Alien +// + return (environment == kAlien); +} + //_________________________________________________________________________________________________ Bool_t CleanPars(const char *pars) { @@ -65,7 +91,7 @@ Bool_t CleanPars(const char *pars) ostr = (TObjString *) array->At(i); str = ostr->GetString(); Info("", ">> Cleaning PARs: %s", str.Data()); - if (isProof) { + if (IsProof()) { if (!gProof) { Error("CleanPars", "gProof object not initialized"); return kFALSE; @@ -98,12 +124,17 @@ Bool_t LoadPars(TString pars) ostr = (TObjString *) array->At(i); str = ostr->GetString(); Info("", ">> Creating PARs: %s", str.Data()); - if (isProof) { + if (IsProof()) { if (!gProof) { Error("CleanPars", "gProof object not initialized"); return kFALSE; } - gProof->UploadPackage(Form("%s.par", str.Data())); + if (!str.CompareTo("PWG2resonances")) { + gProof->UploadPackage(Form("%s.par", str.Data())); + } + else { + gProof->UploadPackage(Form("%s/%s.par", pathPar, str.Data())); + } gProof->EnablePackage(str.Data()); } else { @@ -262,8 +293,8 @@ Int_t AliRsnAnalysis(const char *addMacro = "AddRsnAnalysisTask.C") // // connect to PROOF if required - if (isProof) TProof::Open(proofConnection); - else if (isAlien) TGrid::Connect("alien://"); + if (IsProof()) TProof::Open(proofConnection); + else if (IsAlien()) TGrid::Connect("alien://"); // // *** SETUP PAR LIBRARIES ********************************************************************** @@ -334,16 +365,35 @@ Int_t AliRsnAnalysis(const char *addMacro = "AddRsnAnalysisTask.C") return 7; } + // set ESD and MC input handlers + AliESDInputHandler *esdHandler = new AliESDInputHandler(); + AliAODInputHandler *aodHandler = new AliAODInputHandler(); + AliMCEventHandler* mcHandler = new AliMCEventHandler(); + esdHandler->SetInactiveBranches("FMD CaloCluster"); + if (!treeName.CompareTo("esdTree")) { + mgr->SetInputEventHandler(esdHandler); + } + else if (!treeName.CompareTo("aodTree")) { + mgr->SetInputEventHandler(aodHandler); + } + else { + Error("AliRsnAnalysis", "Input tree type not supported"); + return 8; + } + mgr->SetMCtruthEventHandler(mcHandler); + // load configuration macro and uses it to initialize this object gROOT->LoadMacro(addMacro); - AddRsnAnalysisTask(mgr); + AddRsnAnalysisTask(); // initialize analysis and run it - TString strEnv = (isProof ? "proof" : "local"); + TString strEnv = (IsProof() ? "proof" : "local"); TStopwatch timer; timer.Start(); mgr->InitAnalysis(); mgr->StartAnalysis(strEnv.Data(), analysisChain); timer.Stop(); timer.Print(); + + return 0; } -- 2.43.0