1 /**************************************************************************
2 * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 //-------------------------------------------------------------------------
19 // Event handler for ESD input
20 // Author: Andreas Morsch, CERN
21 //-------------------------------------------------------------------------
26 #include <TArchiveFile.h>
27 #include <TObjArray.h>
30 #include <TObjString.h>
31 #include <TProcessID.h>
33 #include "AliESDInputHandler.h"
34 #include "AliESDEvent.h"
36 #include "AliRunTag.h"
37 #include "AliEventTag.h"
40 ClassImp(AliESDInputHandler)
42 //______________________________________________________________________________
43 AliESDInputHandler::AliESDInputHandler() :
44 AliInputEventHandler(),
54 // default constructor
57 //______________________________________________________________________________
58 AliESDInputHandler::~AliESDInputHandler()
64 //______________________________________________________________________________
65 AliESDInputHandler::AliESDInputHandler(const char* name, const char* title):
66 AliInputEventHandler(name, title), fEvent(0x0), fBranches(""), fBranchesOn(""), fAnalysisType(0),
67 fUseTags(kFALSE), fChainT(0), fTreeT(0), fRunTag(0)
72 Bool_t AliESDInputHandler::Init(TTree* tree, Option_t* opt)
74 // Initialisation necessary for each new tree
78 if (!fTree) return kFALSE;
79 // Get pointer to ESD event
87 fEvent = new AliESDEvent();
89 fEvent->ReadFromTree(fTree);
93 Bool_t AliESDInputHandler::BeginEvent(Long64_t /*entry*/)
95 // Copy from old to new format if necessary
96 AliESD* old = ((AliESDEvent*) fEvent)->GetAliESDOld();
98 ((AliESDEvent*)fEvent)->CopyFromOldESD();
104 Bool_t AliESDInputHandler::FinishEvent()
107 if(fEvent)fEvent->Reset();
111 Bool_t AliESDInputHandler::Notify(const char* path)
113 // Notify a directory change
114 AliInfo(Form("Directory change %s \n", path));
116 if (!fUseTags) return (kTRUE);
120 TString fileName(path);
121 if(fileName.Contains("#AliESDs.root")){
122 fileName.ReplaceAll("#AliESDs.root", "");
125 else if (fileName.Contains("AliESDs.root")){
126 fileName.ReplaceAll("AliESDs.root", "");
128 else if(fileName.Contains("#AliAOD.root")){
129 fileName.ReplaceAll("#AliAOD.root", "");
132 else if(fileName.Contains("AliAOD.root")){
133 fileName.ReplaceAll("AliAOD.root", "");
135 else if(fileName.Contains("#galice.root")){
136 // For running with galice and kinematics alone...
137 fileName.ReplaceAll("#galice.root", "");
140 else if(fileName.Contains("galice.root")){
141 // For running with galice and kinematics alone...
142 fileName.ReplaceAll("galice.root", "");
146 TString* pathName = new TString("./");
147 *pathName = fileName;
148 printf("AliESDInputHandler::Notify() Path: %s\n", pathName->Data());
153 fRunTag = new AliRunTag();
156 delete fTreeT; fTreeT = 0;
164 fChainT = new TChain("T");
169 const char* tagPattern = "ESD.tag.root";
170 const char* name = 0x0;
173 TFile* file = TFile::Open(fileName.Data());
174 TArchiveFile* arch = file->GetArchive();
175 TObjArray* arr = arch->GetMembers();
178 while ((file = (TFile*) next())) {
179 name = file->GetName();
180 if (strstr(name,tagPattern)) {
181 tagFilename = pathName->Data();
184 fChainT->Add(tagFilename);
185 AliInfo(Form("Adding %s to tag chain \n", tagFilename.Data()));
187 } // archive file loop
189 void * dirp = gSystem->OpenDirectory(pathName->Data());
190 while((name = gSystem->GetDirEntry(dirp))) {
191 if (strstr(name,tagPattern)) {
192 tagFilename = pathName->Data();
195 fChainT->Add(tagFilename);
196 AliInfo(Form("Adding %s to tag chain \n", tagFilename.Data()));
200 fChainT->SetBranchAddress("AliTAG",&fRunTag);
201 fChainT->GetEntry(0);
206 void AliESDInputHandler::SwitchOffBranches() const {
208 // Switch of branches on user request
209 TObjArray * tokens = fBranches.Tokenize(" ");
210 Int_t ntok = tokens->GetEntries();
211 for (Int_t i = 0; i < ntok; i++) {
212 TString str = ((TObjString*) tokens->At(i))->GetString();
213 if (str.Length() == 0)
215 fTree->SetBranchStatus(Form("%s%s%s","*", str.Data(), "*"), 0);
216 AliInfo(Form("Branch %s switched off \n", str.Data()));
220 void AliESDInputHandler::SwitchOnBranches() const {
222 // Switch of branches on user request
223 TObjArray * tokens = fBranchesOn.Tokenize(" ");
224 Int_t ntok = tokens->GetEntries();
226 for (Int_t i = 0; i < ntok; i++) {
227 TString str = ((TObjString*) tokens->At(i))->GetString();
228 if (str.Length() == 0)
230 fTree->SetBranchStatus(Form("%s%s%s","*", str.Data(), "*"), 1);
231 AliInfo(Form("Branch %s switched on \n", str.Data()));