TObject::SetBit(kTasksInitialized, kTRUE);
}
+//______________________________________________________________________________
+void AliAnalysisManager::InputFileFromTree(TTree * const tree, TString &fname)
+{
+// Retrieves name of the file from tree
+ fname = "";
+ if (!tree) return;
+ TFile *file = tree->GetCurrentFile();
+ TString basename;
+ if (!file) {
+ TChain *chain = dynamic_cast<TChain*>(tree);
+ if (!chain || !chain->GetNtrees()) return;
+ basename = gSystem->BaseName(chain->GetListOfFiles()->First()->GetTitle());
+ } else {
+ basename = gSystem->BaseName(file->GetName());
+ }
+ Int_t index = basename.Index("#");
+ fname = basename(index+1, basename.Length());
+}
+
//______________________________________________________________________________
Long64_t AliAnalysisManager::StartAnalysis(const char *type, Long64_t nentries, Long64_t firstentry)
{
if (anaType.Contains("proof")) fMode = kProofAnalysis;
else if (anaType.Contains("grid")) fMode = kGridAnalysis;
else if (anaType.Contains("mix")) fMode = kMixingAnalysis;
+ if (fInputEventHandler) {
+ TString fname;
+ InputFileFromTree(tree, fname);
+ if (fname.Length()) fInputEventHandler->SetInputFileName(fname);
+ }
if (fMode == kGridAnalysis) {
fIsRemote = kTRUE;
protected:
void CreateReadCache();
void ImportWrappers(TList *source);
+ void InputFileFromTree(TTree * const tree, TString &fname);
void SetEventLoop(Bool_t flag=kTRUE) {TObject::SetBit(kEventLoop,flag);}
void DoLoadBranch(const char *name);
#include "AliStack.h"
#include "AliMCEvent.h"
#include "AliMCEventHandler.h"
+#include "AliESDInputHandler.h"
#include "AliAODEvent.h"
#include "AliAODHeader.h"
#include "AliAODMCHeader.h"
// Implemented Notify() to read the cross sections
// from pyxsec.root
//
- TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ TTree *tree = mgr->GetTree();
Double_t xsection = 0;
UInt_t ntrials = 0;
if(tree){
}
TString fileName(curfile->GetName());
- if(fileName.Contains("AliESDs.root")){
+ TString datafile = mgr->GetInputEventHandler()->GetInputFileName();
+ if (fileName.Contains(datafile)) {
+ fileName.ReplaceAll(datafile, "pyxsec.root");
+ }
+ else if(fileName.Contains("AliESDs.root")){
fileName.ReplaceAll("AliESDs.root", "pyxsec.root");
}
else if(fileName.Contains("AliAOD.root")){
}
//______________________________________________________________________________
-const char *AliAODHandler::GetOutputFileName()
+const char *AliAODHandler::GetOutputFileName() const
{
// Get file name.
return fFileName.Data();
AliAODHandler(const char* name, const char* title);
virtual ~AliAODHandler();
virtual void SetOutputFileName(const char* fname);
- virtual const char* GetOutputFileName();
+ virtual const char* GetOutputFileName() const;
// Extra outputs as a string separated by commas
virtual const char* GetExtraOutputs() const;
virtual Bool_t Init(Option_t* option);
while((obj = (TNamed*)next())) {
aodFriendTreeFName = aodTreeFName;
+ if (strlen(GetInputFileName())) aodFriendTreeFName.ReplaceAll(GetInputFileName(),obj->GetName());
aodFriendTreeFName.ReplaceAll("AliAOD.root",obj->GetName());
aodFriendTreeFName.ReplaceAll("AliAODs.root",obj->GetName());
ttree->AddFriend("aodTree", aodFriendTreeFName.Data());
AliInputEventHandler::AliInputEventHandler() :
AliVEventHandler(),
fTree(0),
- fBranches(""),
- fBranchesOn(""),
+ fBranches(),
+ fBranchesOn(),
+ fInputFileName(),
fNewEvent(kTRUE),
fEventCuts(0),
fIsSelectedResult(0),
//______________________________________________________________________________
AliInputEventHandler::AliInputEventHandler(const char* name, const char* title):
- AliVEventHandler(name, title),
- fTree(0),
- fBranches(""),
- fBranchesOn(""),
- fNewEvent(kTRUE),
- fEventCuts(0),
- fIsSelectedResult(0),
- fMixingHandler(0),
- fParentHandler(0),
- fUserInfo(0)
+ AliVEventHandler(name, title),
+ fTree(0),
+ fBranches(),
+ fBranchesOn(),
+ fInputFileName(),
+ fNewEvent(kTRUE),
+ fEventCuts(0),
+ fIsSelectedResult(0),
+ fMixingHandler(0),
+ fParentHandler(0),
+ fUserInfo(0)
{
// Named constructor.
}
+//______________________________________________________________________________
void AliInputEventHandler::SwitchOffBranches() const {
//
// Switch of branches on user request
delete tokens;
}
+//______________________________________________________________________________
void AliInputEventHandler::SwitchOnBranches() const {
//
// Switch of branches on user request
delete tokens;
}
+//______________________________________________________________________________
TObject *AliInputEventHandler::GetStatistics(Option_t *) const
{
// Returns the statistics object(s) (TH2F histogram) produced by the physics
// Get the current entry.
return fTree->GetReadEntry();
}
+
+//______________________________________________________________________________
+void AliInputEventHandler::SetInputFileName(const char* fname)
+{
+// Set the input file name to be analyzed. Done automatically by the manager, but
+// in case this needs to be done at an earlier stage has to be done manually.
+ if (!strlen(fname)) return;
+ if (fInputFileName.Length()) {
+ Error("SetInputFileName", "Input file name already set to: %s\n", fInputFileName.Data());
+ return;
+ }
+ fInputFileName = fname;
+}
AliInputEventHandler();
AliInputEventHandler(const char* name, const char* title);
virtual ~AliInputEventHandler();
+ virtual void SetInputFileName(const char* fname);
+ virtual const char *GetInputFileName() const {return fInputFileName;}
virtual void SetOutputFileName(const char* /*fname*/) {;}
- virtual const char *GetOutputFileName() {return 0;}
+ virtual const char *GetOutputFileName() const {return 0;}
virtual Bool_t Init(Option_t* opt) {if(fMixingHandler) fMixingHandler->Init(opt);return kTRUE;}
virtual Bool_t Init(TTree* tree, Option_t* opt) {if(fMixingHandler) fMixingHandler->Init(tree,opt);return kTRUE;}
virtual Bool_t GetEntry() {if(fMixingHandler) fMixingHandler->GetEntry(); return kTRUE;}
TTree *fTree; //! Pointer to the tree
TString fBranches; // List of branches to be switched off (separated by space)
TString fBranchesOn; // List of branches to be switched on (separated by space)
+ TString fInputFileName; // Name of the input file
Bool_t fNewEvent; // New event flag
AliVCuts* fEventCuts; // Cuts on the event level
UInt_t fIsSelectedResult; // Selection result
AliInputEventHandler* fMixingHandler; // Optionla plugin for mixing
AliInputEventHandler* fParentHandler; // optional pointer to parent handlers (used in AliMultiInputEventHandler)
TList *fUserInfo; //! transient user info for current tree
- ClassDef(AliInputEventHandler, 6);
+ ClassDef(AliInputEventHandler, 7);
};
#endif
#include "AliLog.h"
#include <TTree.h>
+#include <TSystem.h>
#include <TTreeCache.h>
#include <TFile.h>
#include <TList.h>
// The directory is taken from the 'path' argument
// Reconnect trees
TString fileName(path);
- if(fileName.Contains("AliESDs.root")){
- fileName.ReplaceAll("AliESDs.root", "");
- }
- else if(fileName.Contains("AliESDs_wSDD.root")){
- fileName.ReplaceAll("AliESDs_wSDD.root", "");
- }
- else if(fileName.Contains("AliESDs_nob.root")){
- fileName.ReplaceAll("AliESDs_nob.root", "");
- }
- else if(fileName.Contains("AliAOD.root")){
- fileName.ReplaceAll("AliAOD.root", "");
- }
- else if(fileName.Contains("galice.root")){
- // for running with galice and kinematics alone...
- fileName.ReplaceAll("galice.root", "");
- }
- else if (fileName.BeginsWith("root:")) {
+ TString dirname = gSystem->DirName(fileName);
+ TString basename = gSystem->BaseName(fileName);
+ Int_t index = basename.Index("#");
+ basename = basename(0, index+1);
+ fileName = dirname;
+ fileName += "/";
+ fileName += basename;
+ if (fileName.BeginsWith("root:")) {
fileName.Append("?ZIP=");
}
AliMCEventHandler(const char* name, const char* title);
virtual ~AliMCEventHandler();
virtual void SetOutputFileName(const char* /* fname */) {;}
- virtual const char* GetOutputFileName() {return 0;}
+ virtual const char* GetOutputFileName() const {return 0;}
virtual void SetInputPath(const char* fname);
virtual void SetInputTree(TTree* /*tree*/) {;}
virtual TString* GetInputPath() const {return fPathName;}
virtual Option_t *GetDataType() const { return NULL; }
virtual void SetFillAOD(Bool_t) {}
virtual void SetFillExtension(Bool_t) {}
+ // Input
+ virtual void SetInputFileName(const char*) {}
+ virtual const char* GetInputFileName() const {return 0;}
// Output
virtual void SetOutputFileName(const char* fname) = 0;
- virtual const char* GetOutputFileName() = 0;
+ virtual const char* GetOutputFileName() const = 0;
// Extra outputs as a string separated by commas
virtual const char* GetExtraOutputs() const {return NULL;}
// Input