#include "AliAODInputHandler.h"
#include "AliAODEvent.h"
#include "AliVCuts.h"
+#include "AliMCEvent.h"
+#include "AliAODpidUtil.h"
ClassImp(AliAODInputHandler)
fEvent(0),
fMCEvent(new AliMCEvent()),
fFriends(new TList()),
+ fAODpidUtil(0x0),
fMergeEvents(kFALSE),
+ fFriendsConnected(kFALSE),
fFileToMerge(0),
fTreeToMerge(0),
fAODEventToMerge(0),
fEvent(0),
fMCEvent(new AliMCEvent()),
fFriends(new TList()),
+ fAODpidUtil(0x0),
fMergeEvents(kFALSE),
+ fFriendsConnected(kFALSE),
fFileToMerge(0),
fTreeToMerge(0),
fAODEventToMerge(0),
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);
{
// 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) {
tmplist.Add(hBin0);
if (fHistStatistics[1] && hBin0) fHistStatistics[1]->Merge(&tmplist);
} else {
- fHistStatistics[0] = static_cast<TH2F*>(hAll->Clone());
- fHistStatistics[1] = static_cast<TH2F*>(hBin0->Clone());
- fHistStatistics[0]->SetDirectory(0);
- fHistStatistics[1]->SetDirectory(0);
+ if (hAll && hBin0) {
+ fHistStatistics[0] = static_cast<TH2F*>(hAll->Clone());
+ fHistStatistics[1] = static_cast<TH2F*>(hBin0->Clone());
+ fHistStatistics[0]->SetDirectory(0);
+ fHistStatistics[1]->SetDirectory(0);
+ }
}
}
delete list;
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);
+
+}
+