X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliAODInputHandler.cxx;h=fd927cf94121ab4288c62816c7a5796448000dc1;hb=9939b6b6d6a06ac3d4777d8146b9709c7bd2dc3a;hp=fe86bacb8d24a944b70f24546fb868bff9140775;hpb=32e5a29c1600cb2bda0700784e128e20948f4a10;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliAODInputHandler.cxx b/STEER/AliAODInputHandler.cxx index fe86bacb8d2..fd927cf9412 100644 --- a/STEER/AliAODInputHandler.cxx +++ b/STEER/AliAODInputHandler.cxx @@ -30,6 +30,8 @@ #include "AliAODInputHandler.h" #include "AliAODEvent.h" #include "AliVCuts.h" +#include "AliMCEvent.h" +#include "AliAODpidUtil.h" ClassImp(AliAODInputHandler) @@ -41,7 +43,9 @@ AliAODInputHandler::AliAODInputHandler() : fEvent(0), fMCEvent(new AliMCEvent()), fFriends(new TList()), + fAODpidUtil(0x0), fMergeEvents(kFALSE), + fFriendsConnected(kFALSE), fFileToMerge(0), fTreeToMerge(0), fAODEventToMerge(0), @@ -57,7 +61,9 @@ AliAODInputHandler::AliAODInputHandler(const char* name, const char* title): fEvent(0), fMCEvent(new AliMCEvent()), fFriends(new TList()), + fAODpidUtil(0x0), fMergeEvents(kFALSE), + fFriendsConnected(kFALSE), fFileToMerge(0), fTreeToMerge(0), fAODEventToMerge(0), @@ -80,59 +86,35 @@ AliAODInputHandler::~AliAODInputHandler() delete fHistStatistics[1]; fHistStatistics[1] = 0; } + delete fAODpidUtil; } //______________________________________________________________________________ Bool_t AliAODInputHandler::Init(TTree* tree, Option_t* opt) { // Initialisation necessary for each new tree - if (!fMergeEvents) { fTree = tree; - TIter next(fFriends); - TNamed* obj; - if (!fTree) return kFALSE; fTree->GetEntries(); - fTree->GetEntry(0); - TString aodTreeFName,aodFriendTreeFName; - TTree *ttree = fTree->GetTree(); - if (!ttree) ttree = fTree; - aodTreeFName = ttree->GetCurrentFile()->GetName(); - - while((obj = (TNamed*)next())) { - aodFriendTreeFName = aodTreeFName; - aodFriendTreeFName.ReplaceAll("AliAOD.root",obj->GetName()); - aodFriendTreeFName.ReplaceAll("AliAODs.root",obj->GetName()); - ttree->AddFriend("aodTree", aodFriendTreeFName.Data()); - } - } else { - // Friends have to be merged - TNamed* filename = (TNamed*) (fFriends->At(0)); - fFileToMerge = new TFile(filename->GetName()); - if (fFileToMerge) { - fFileToMerge->GetObject("aodTree", fTreeToMerge); - if (!fAODEventToMerge) fAODEventToMerge = new AliAODEvent(); - fAODEventToMerge->ReadFromTree(fTreeToMerge); - } - } + ConnectFriends(); - SwitchOffBranches(); - SwitchOnBranches(); + SwitchOffBranches(); + SwitchOnBranches(); - // Get pointer to AOD event - if (!fEvent) fEvent = new AliAODEvent(); - - fEvent->ReadFromTree(fTree); - - if (fMixingHandler) fMixingHandler->Init(tree, opt); - - return kTRUE; + // Get pointer to AOD event + if (!fEvent) fEvent = new AliAODEvent(); + + fEvent->ReadFromTree(fTree); + + if (fMixingHandler) fMixingHandler->Init(tree, opt); + + return kTRUE; } //______________________________________________________________________________ Bool_t AliAODInputHandler::BeginEvent(Long64_t entry) { - // + // Begin event TClonesArray* mcParticles = (TClonesArray*) (fEvent->FindListObject("mcparticles")); if (mcParticles) fMCEvent->SetParticleArray(mcParticles); if (fTreeToMerge) fTreeToMerge->GetEntry(entry + fMergeOffset); @@ -149,11 +131,25 @@ Bool_t AliAODInputHandler::Notify(const char* path) { // Notifaction of directory change if (fMixingHandler) fMixingHandler->Notify(path); + if (!fFriendsConnected) { + ConnectFriends(); + fEvent->ReadFromTree(fTree, "reconnect"); + } + fFriendsConnected = kFALSE; + TTree *ttree = fTree->GetTree(); if (!ttree) ttree = fTree; - TString statFname(gSystem->DirName(ttree->GetCurrentFile()->GetName())); - statFname += "/EventStat_temp.root"; - TFile *statFile = TFile::Open(statFname, "READ"); + TString statFname(ttree->GetCurrentFile()->GetName()); + Int_t indarchive = statFname.Index("#"); + if (indarchive<0) { + statFname = gSystem->DirName(statFname); + statFname += "/"; + } else { + statFname.Remove(indarchive+1); + } + statFname += "EventStat_temp.root"; + TFile *statFile = 0; + if (IsCheckStatistics()) statFile = TFile::Open(statFname, "READ"); if (statFile) { TList *list = (TList*)statFile->Get("cstatsout"); if (list) { @@ -169,10 +165,12 @@ Bool_t AliAODInputHandler::Notify(const char* path) tmplist.Add(hBin0); if (fHistStatistics[1] && hBin0) fHistStatistics[1]->Merge(&tmplist); } else { - fHistStatistics[0] = static_cast(hAll->Clone()); - fHistStatistics[1] = static_cast(hBin0->Clone()); - fHistStatistics[0]->SetDirectory(0); - fHistStatistics[1]->SetDirectory(0); + if (hAll && hBin0) { + fHistStatistics[0] = static_cast(hAll->Clone()); + fHistStatistics[1] = static_cast(hBin0->Clone()); + fHistStatistics[0]->SetDirectory(0); + fHistStatistics[1]->SetDirectory(0); + } } } delete list; @@ -216,3 +214,45 @@ TObject *AliAODInputHandler::GetStatistics(Option_t *option) const if (opt=="BIN0") return fHistStatistics[1]; return fHistStatistics[0]; } + +void AliAODInputHandler::ConnectFriends() +{ + // Connect the friend trees + if (!fMergeEvents) { + TIter next(fFriends); + TNamed* obj; + TString aodTreeFName,aodFriendTreeFName; + TTree *ttree = fTree->GetTree(); + if (!ttree) ttree = fTree; + aodTreeFName = ttree->GetCurrentFile()->GetName(); + + while((obj = (TNamed*)next())) { + aodFriendTreeFName = aodTreeFName; + aodFriendTreeFName.ReplaceAll("AliAOD.root",obj->GetName()); + aodFriendTreeFName.ReplaceAll("AliAODs.root",obj->GetName()); + ttree->AddFriend("aodTree", aodFriendTreeFName.Data()); + } + } else { + // Friends have to be merged + TNamed* filename = (TNamed*) (fFriends->At(0)); + fFileToMerge = new TFile(filename->GetName()); + if (fFileToMerge) { + fFileToMerge->GetObject("aodTree", fTreeToMerge); + if (!fAODEventToMerge) fAODEventToMerge = new AliAODEvent(); + fAODEventToMerge->ReadFromTree(fTreeToMerge); + } + } + fFriendsConnected = kTRUE; +} + +//______________________________________________________________________________ +void AliAODInputHandler::CreatePIDResponse(Bool_t isMC/*=kFALSE*/) +{ + // + // create the pid response object if it does not exist yet + // + if (fAODpidUtil) return; + fAODpidUtil=new AliAODpidUtil(isMC); + +} +