4 #ifndef ALIHLTESDMANAGERIMPLEMENTATION_H
5 #define ALIHLTESDMANAGERIMPLEMENTATION_H
6 //* This file is property of and copyright by the ALICE HLT Project *
7 //* ALICE Experiment at CERN, All rights reserved. *
8 //* See cxx source for full Copyright notice *
10 /// @file AliHLTEsdManagerImplementation.h
11 /// @author Matthias Richter
13 /// @brief Implementation of the AliHLTEsdManager
14 /// This is an implementation of the abstract interface AliHLTEsdManager
16 #include "AliHLTEsdManager.h"
17 #include "AliESDEvent.h"
25 * @class AliHLTEsdManagerImplementation
26 * Implementation of the AliHLTEsdManager.
28 * For the sake of library (in)dependencies, the concrete implementation of
29 * the AliHLTEsdManager is separated from the libHLTbase class as this would
30 * introduce dependencies to AliRoot libraries. See AliHLTEsdManager for
33 * @ingroup alihlt_aliroot_reconstruction
35 class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
38 AliHLTEsdManagerImplementation();
40 virtual ~AliHLTEsdManagerImplementation();
43 * Inherited from base class, see AliHLTEsdManager::SetOption() for
46 virtual int SetOption(const char* option);
49 * Convert data buffer to ESD.
50 * The buffer is supposed to describe a streamed AliESDEvent object.
51 * If no target object is specified, the ESD is written to a file AliHLTdetESDs.root,
52 * where 'det' is derived from the data type origin. Each time the function is invoked
53 * a new event is created. Dummy events are added if the previous events did not contain
55 * @param pBuffer [in] the data buffer
56 * @param size [in] data buffer size
57 * @param dt [in] data type of the block
58 * @param tgtesd [out] optional target
59 * @param eventno [in] optional event no
61 int WriteESD(const AliHLTUInt8_t* pBuffer, AliHLTUInt32_t size, AliHLTComponentDataType dt,
62 AliESDEvent* tgtesd=NULL, int eventno=-1);
65 * Merge content of source ESD into the target ESD.
66 * Merging is done on the level of objects in the ESD and for the
67 * moment it's only implemented for the TClonesArrays. In that case it's
68 * easy to detect whether the object is empty or not.
70 * \b Note: The function can not match entries of the same type, like e.g.
71 * tracks from the 'Tracks' member.
73 int Merge(AliESDEvent* pTgt, AliESDEvent* pSrc) const;
76 * Align all ESD to the same number of events.
77 * The function adds empty events to all ESD files if their event number
78 * does not match the specified one.
79 * @param eventno the desired event no
80 * @return neg. error code if failed
82 int PadESDs(int eventno);
85 * Set the target directory for the ESD files.
87 void SetDirectory(const char* directory);
90 * Get the list of the internally created files.
91 * Returns a blank separated list of the file names.
93 TString GetFileNames(AliHLTComponentDataType dt=kAliHLTAnyDataType) const;
96 * Embed an ESD into a TTree object.
97 * The tree object needs to be deleted by the caller.
99 static TTree* EmbedIntoTree(AliESDEvent* pESD, const char* name="esdTree", const char* title="Tree with HLT ESD objects");
101 class AliHLTESDEventHelper : public AliESDEvent {
103 static bool IsStdContent(const char* key);
106 int CheckClassConditions() const;
108 AliESDEvent* CreateEsdEvent(bool bCreateStdContent=false) const;
110 int AddObject(AliESDEvent* pESD, const TObject* pObject, const char* branchname) const;
112 int ResetEsdEvent(AliESDEvent* pESD) const;
117 /** copy constructor prohibited */
118 AliHLTEsdManagerImplementation(const AliHLTEsdManagerImplementation&);
119 /** assignment operator prohibited */
120 AliHLTEsdManagerImplementation& operator=(const AliHLTEsdManagerImplementation&);
122 class AliHLTEsdListEntry : public AliHLTLogging {
125 AliHLTEsdListEntry(AliHLTComponentDataType dt);
127 ~AliHLTEsdListEntry();
130 * Write the ESD to the corresponding file.
131 * The tree is first synchronized with the eventno and additional empty
132 * events might be inserted if there was a gap. Since we are writing
133 * several files in parallel, we have to make sure that those files contain
134 * the same number of events.
135 * @param pESD ESD to write
136 * @param eventno optional event no for tree synchronization
138 int WriteESD(AliESDEvent* pESD, int eventno=-1);
141 * Set the target directory for the ESD file.
143 void SetDirectory(const char* directory);
148 void SetTreeName(const char* treename) {fTreeName=treename;}
151 * Get name of the ESD file.
153 const char* GetFileName() const;
156 * Get the object name prefix generated from the data origin
157 * The prefix is added to the names of the ESD objects when copied to the
160 const char* GetPrefix();
162 bool operator==(AliHLTComponentDataType dt) const;
165 /** copy constructor prohibited */
166 AliHLTEsdListEntry(const AliHLTEsdListEntry& src);
167 /** assignment operator prohibited */
168 AliHLTEsdListEntry& operator=(const AliHLTEsdListEntry& src);
170 /** root file name */
171 TString fName; //!transient
172 /** target directory */
173 TString fDirectory; //!transient
174 /** data type of the corresponding block */
175 AliHLTComponentDataType fDt; //!transient
176 /** the root file for this esd */
177 TFile* fpFile; //!transient
178 /** the tree for this esd */
179 TTree* fpTree; //!transient
180 /** the esd to fill into the tree */
181 AliESDEvent* fpEsd; //!transient
182 /** Prefix for generated ESD objects in the master ESD */
183 TString fPrefix; //!transient
184 /** name of the tree to be created */
185 TString fTreeName; //!transient
188 typedef vector<AliHLTEsdListEntry*> AliHLTEsdPList;
191 * Find list entry for given data type
193 AliHLTEsdListEntry* Find(AliHLTComponentDataType dt) const;
195 /** the list of the ESDs */
196 AliHLTEsdPList fESDs; //!transient
198 /** target directory */
199 TString fDirectory; //!transient
200 /** target directory */
201 TString fTreeName; //!transient
202 /** write local files */
203 bool fWriteLocal; //!transient
205 ClassDef(AliHLTEsdManagerImplementation, 3)