class AliAODEvent;
class TFile;
class TTree;
+class TObjArray;
class AliMCEventHandler;
+class AliAODMCHeader;
+class AliAODExtension;
+class AliGenEventHeader;
virtual ~AliAODHandler();
virtual void SetOutputFileName(const char* fname);
virtual const char* GetOutputFileName();
+ // Extra outputs as a string separated by commas
+ virtual const char* GetExtraOutputs() const;
virtual Bool_t Init(Option_t* option);
virtual Bool_t Init(TTree* /*tree*/, Option_t* /*option*/) {return kTRUE;}
- virtual Bool_t BeginEvent(Long64_t /*entry*/){return kTRUE;}
+ virtual Bool_t GetEntry() {return kTRUE;}
+
+ virtual Bool_t BeginEvent(Long64_t /*entry*/) {fFillAOD=kFALSE; return kTRUE;}
virtual Bool_t Notify() { return AliVEventHandler::Notify(); };
virtual Bool_t Notify(const char * /* path */) {return kTRUE;}
virtual Bool_t FinishEvent();
virtual Bool_t Terminate();
virtual Bool_t TerminateIO();
//
- virtual void SetCreateNonStandardAOD() {fIsStandard = kFALSE;}
- virtual void SetFillAOD(Bool_t b) {fFillAOD = b;}
- virtual void SetNeedsHeaderReplication() {fNeedsHeaderReplication = kTRUE;}
- virtual void SetNeedsTracksBranchReplication() {fNeedsTracksBranchReplication = kTRUE;}
- virtual void SetNeedsVerticesBranchReplication() {fNeedsVerticesBranchReplication = kTRUE;}
- virtual void SetNeedsV0sBranchReplication() {fNeedsV0sBranchReplication = kTRUE;}
- virtual void SetNeedsTrackletsBranchReplication() {fNeedsTrackletsBranchReplication = kTRUE;}
- virtual void SetNeedsPMDClustersBranchReplication() {fNeedsPMDClustersBranchReplication = kTRUE;}
- virtual void SetNeedsJetsBranchReplication() {fNeedsJetsBranchReplication = kTRUE;}
- virtual void SetNeedsFMDClustersBranchReplication() {fNeedsFMDClustersBranchReplication = kTRUE;}
+ virtual void SetCreateNonStandardAOD() {fIsStandard = kFALSE;}
+ virtual void SetFillAOD(Bool_t b) {fFillAOD = b;}
+ virtual void SetFillAODforRun(Bool_t b) {fFillAODRun = b;}
+ virtual void SetNeedsHeaderReplication() {fNeedsHeaderReplication = kTRUE;}
+ virtual void SetNeedsTracksBranchReplication() {fNeedsTracksBranchReplication = kTRUE;}
+ virtual void SetNeedsVerticesBranchReplication() {fNeedsVerticesBranchReplication = kTRUE;}
+ virtual void SetNeedsV0sBranchReplication() {fNeedsV0sBranchReplication = kTRUE;}
+ virtual void SetNeedsCascadesBranchReplication() {fNeedsCascadesBranchReplication = kTRUE;}
+ virtual void SetNeedsTrackletsBranchReplication() {fNeedsTrackletsBranchReplication = kTRUE;}
+ virtual void SetNeedsPMDClustersBranchReplication() {fNeedsPMDClustersBranchReplication = kTRUE;}
+ virtual void SetNeedsJetsBranchReplication() {fNeedsJetsBranchReplication = kTRUE;}
+ virtual void SetNeedsFMDClustersBranchReplication() {fNeedsFMDClustersBranchReplication = kTRUE;}
virtual void SetNeedsCaloClustersBranchReplication() {fNeedsCaloClustersBranchReplication = kTRUE;}
+ virtual void SetNeedsMCParticlesBranchReplication() {fNeedsMCParticlesBranchReplication = kTRUE;}
+ virtual void SetNeedsDimuonsBranchReplication() {fNeedsDimuonsBranchReplication = kTRUE;}
virtual void SetAODIsReplicated() {fAODIsReplicated = kTRUE;}
//
AliAODEvent* GetAOD() {return fAODEvent;}
virtual TTree* GetTree() const {return fTreeA;}
+ TObjArray* GetExtensions() const {return fExtensions;}
+ AliAODExtension* GetExtension(const char *filename) const;
+ TObjArray* GetFilters() const {return fFilters;}
+ AliAODExtension* GetFilteredAOD(const char *filename) const;
void CreateTree(Int_t flag);
void FillTree();
void AddAODtoTreeUserInfo();
- void AddBranch(const char* cname, void* addobj);
- Bool_t IsStandard() {return fIsStandard;}
- Bool_t GetFillAOD(){return fFillAOD;}
- Bool_t NeedsHeaderReplication() {return fNeedsHeaderReplication;}
- Bool_t NeedsTracksBranchReplication() {return fNeedsTracksBranchReplication;}
- Bool_t NeedsVerticesBranchReplication() {return fNeedsVerticesBranchReplication;}
- Bool_t NeedsV0sBranchReplication() {return fNeedsV0sBranchReplication;}
- Bool_t NeedsTrackletsBranchReplication() {return fNeedsTrackletsBranchReplication;}
- Bool_t NeedsPMDClustersBranchReplication() {return fNeedsPMDClustersBranchReplication;}
- Bool_t NeedsJetsBranchReplication() {return fNeedsJetsBranchReplication;}
- Bool_t NeedsFMDClustersBranchReplication() {return fNeedsFMDClustersBranchReplication;}
- Bool_t NeedsCaloClustersBranchReplication() {return fNeedsCaloClustersBranchReplication;}
- Bool_t AODIsReplicated() {return fAODIsReplicated;}
+ void AddBranch(const char* cname, void* addobj, const char *fname="");
+ AliAODExtension* AddExtension(const char *filename, const char *title="");
+ AliAODExtension* AddFilteredAOD(const char *filename, const char *filtername);
+ Bool_t IsStandard() const {return fIsStandard;}
+ Bool_t GetFillAOD() const {return fFillAOD;}
+ Bool_t NeedsHeaderReplication() const {return fNeedsHeaderReplication;}
+ Bool_t NeedsTracksBranchReplication() const {return fNeedsTracksBranchReplication;}
+ Bool_t NeedsVerticesBranchReplication() const {return fNeedsVerticesBranchReplication;}
+ Bool_t NeedsV0sBranchReplication() const {return fNeedsV0sBranchReplication;}
+ Bool_t NeedsCascadesBranchReplication() const {return fNeedsCascadesBranchReplication;}
+ Bool_t NeedsTrackletsBranchReplication() const {return fNeedsTrackletsBranchReplication;}
+ Bool_t NeedsPMDClustersBranchReplication() const {return fNeedsPMDClustersBranchReplication;}
+ Bool_t NeedsJetsBranchReplication() const {return fNeedsJetsBranchReplication;}
+ Bool_t NeedsFMDClustersBranchReplication() const {return fNeedsFMDClustersBranchReplication;}
+ Bool_t NeedsCaloClustersBranchReplication() const {return fNeedsCaloClustersBranchReplication;}
+ Bool_t NeedsMCParticlesBranchReplication() const {return fNeedsMCParticlesBranchReplication;}
+ Bool_t NeedsDimuonsBranchReplication() const {return fNeedsDimuonsBranchReplication;}
+ Bool_t AODIsReplicated() const {return fAODIsReplicated;}
//
void SetInputTree(TTree* /*tree*/) {;}
void SetMCEventHandler(AliMCEventHandler* mcH) {fMCEventH = mcH;} // For internal use
+ void StoreMCParticles(); // Store MC particles, only to be called from AliAnalyisTaskMCParticleFilter
+
private:
- void StoreMCParticles();
+ void SetMCHeaderInfo(AliAODMCHeader *mcHeader,AliGenEventHeader *genHeader); // Utility function t catch different types of eventheaders
AliAODHandler(const AliAODHandler&); // Not implemented
AliAODHandler& operator=(const AliAODHandler&); // Not implemented
private:
Bool_t fIsStandard; // Flag for standard aod creation
- Bool_t fFillAOD; // Flag for filling of the AOD tree at the end (all or nothing)
+ Bool_t fFillAOD; // Flag for filling of the AOD tree at the end (all or nothing evt by evt)
+ Bool_t fFillAODRun; // Flag for filling of the AOD tree at the end (run)
Bool_t fNeedsHeaderReplication; // Flag for header replication
Bool_t fNeedsTracksBranchReplication; // Flag for tracks replication
Bool_t fNeedsVerticesBranchReplication; // Flag for vertices replication
Bool_t fNeedsV0sBranchReplication; // Flag for V0s replication
+ Bool_t fNeedsCascadesBranchReplication; // Flag for Cascade replication
Bool_t fNeedsTrackletsBranchReplication; // Flag for Tracklets replication
Bool_t fNeedsPMDClustersBranchReplication; // Flag for PMDClusters replication
Bool_t fNeedsJetsBranchReplication; // Flag for Jets replication
Bool_t fNeedsFMDClustersBranchReplication; // Flag for FMDClusters replication
Bool_t fNeedsCaloClustersBranchReplication; // Flag for CaloClusters replication
+ Bool_t fNeedsMCParticlesBranchReplication; // Flag for MCParticles replication
+ Bool_t fNeedsDimuonsBranchReplication; // Flag for Dimuons replication
Bool_t fAODIsReplicated; // Flag true if replication as been executed
AliAODEvent *fAODEvent; //! Pointer to the AOD event
AliMCEventHandler *fMCEventH; //! Pointer to mc event handler needed not to depend on the manager
TTree *fTreeA; //! tree for AOD persistency
TFile *fFileA; //! Output file
TString fFileName; // Output file name
- ClassDef(AliAODHandler, 3)
+ TObjArray *fExtensions; // List of extensions
+ TObjArray *fFilters; // List of filtered AOD's
+ ClassDef(AliAODHandler, 6)
};
+//-------------------------------------------------------------------------
+// Support class for AOD extensions. This is created by the user analysis
+// that requires a separate file for some AOD branches. The name of the
+// AliAODExtension object is the file name where the AOD branches will be
+// stored.
+// Author: Andrei Gheata, CERN
+//-------------------------------------------------------------------------
+
+class AliAODExtension : public TNamed {
+
+public:
+
+enum EAliAODExtensionFlags {
+ kFilteredAOD = BIT(14)
+};
+
+ AliAODExtension() : TNamed(), fAODEvent(0), fTreeE(0), fFileE(0), fNtotal(0), fNpassed(0), fSelected(kFALSE) {}
+ AliAODExtension(const char* name, const char* title, Bool_t isfilter=kFALSE);
+ virtual ~AliAODExtension();
+ void AddBranch(const char* cname, void* addobj);
+ Bool_t FinishEvent();
+ Int_t GetNtotal() const {return fNtotal;}
+ Int_t GetNpassed() const {return fNpassed;}
+ const char* GetOutputFileName() const {return TNamed::GetName();}
+ AliAODEvent* GetAOD() const {return fAODEvent;}
+ TTree* GetTree() const {return fTreeE;}
+ Bool_t Init(Option_t *option);
+ Bool_t IsFilteredAOD() const {return TObject::TestBit(kFilteredAOD);}
+ Bool_t IsEventSelected() const {return fSelected;}
+ void SelectEvent(Bool_t flag=kTRUE) {fSelected = flag;}
+ void SetEvent(AliAODEvent *event);
+ void SetOutputFileName(const char* fname) {TNamed::SetName(fname);}
+ Bool_t TerminateIO();
+ private:
+ AliAODExtension(const AliAODExtension&); // Not implemented
+ AliAODExtension& operator=(const AliAODExtension&); // Not implemented
+
+ private:
+ AliAODEvent *fAODEvent; //! Pointer to the AOD event
+ TTree *fTreeE; //! tree for AOD persistency
+ TFile *fFileE; //! Output file
+ Int_t fNtotal; //! Number of processed events
+ Int_t fNpassed; //! Number of events that passed the filter
+ Bool_t fSelected; //! Select current event for filtered AOD's. Made false at event start.
+ ClassDef(AliAODExtension, 1) // Support for extra AOD branches in a separate AOD file
+};
#endif