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
16 #include "AliHLTEsdManager.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 * Convert data buffer to ESD.
44 * The buffer is supposed to describe a streamed AliESDEvent object.
45 * If no target object is specified, the ESD is written to a file AliHLTdetESDs.root,
46 * where 'det' is derived from the data type origin. Each time the function is invoked
47 * a new event is created. Dummy events are added if the previous events did not contain
49 * @param pBuffer [in] the data buffer
50 * @param size [in] data buffer size
51 * @param dt [in] data type of the block
52 * @param tgtesd [out] optional target
53 * @param eventno [in] optional event no
55 int WriteESD(const AliHLTUInt8_t* pBuffer, AliHLTUInt32_t size, AliHLTComponentDataType dt,
56 AliESDEvent* tgtesd=NULL, int eventno=-1);
59 * Align all ESD to the same number of events.
60 * The function adds empty events to all ESD files if their event number
61 * does not match the specified one.
62 * @param eventno the desired event no
63 * @return neg. error code if failed
65 int PadESDs(int eventno);
68 * Set the target directory for the ESD files.
70 void SetDirectory(const char* directory);
73 * Get the list of the internally created files.
74 * Returns a blank separated list of the file names.
76 TString GetFileNames(AliHLTComponentDataType dt=kAliHLTAnyDataType) const;
79 * Embed an ESD into a TTree object.
80 * The tree object needs to be deleted by the caller.
82 static TTree* EmbedIntoTree(AliESDEvent* pESD, const char* name="esdTree", const char* title="Tree with HLT ESD objects");
87 /** copy constructor prohibited */
88 AliHLTEsdManagerImplementation(const AliHLTEsdManagerImplementation&);
89 /** assignment operator prohibited */
90 AliHLTEsdManagerImplementation& operator=(const AliHLTEsdManagerImplementation&);
92 class AliHLTEsdListEntry : public AliHLTLogging {
95 AliHLTEsdListEntry(AliHLTComponentDataType dt);
97 ~AliHLTEsdListEntry();
100 * Write the ESD to the corresponding file.
101 * The tree is first synchronized with the eventno and additional empty
102 * events might be inserted if there was a gap. Since we are writing
103 * several files in parallel, we have to make sure that those files contain
104 * the same number of events.
105 * @param pESD ESD to write
106 * @param eventno optional event no for tree synchronization
108 int WriteESD(AliESDEvent* pESD, int eventno=-1);
111 * Copy non-empty objects of the source ESD to the target ESD.
112 * The first implementation just copies the entries of type TClonesArray which
115 int CopyNonEmptyObjects(AliESDEvent* pTgt, AliESDEvent* pSrc);
118 * Set the target directory for the ESD file.
120 void SetDirectory(const char* directory);
123 * Delete the ESD file.
128 * Get name of the ESD file.
130 const char* GetFileName() const;
133 * Get the object name prefix generated from the data origin
134 * The prefix is added to the names of the ESD objects when copied to the
137 const char* GetPrefix();
139 bool operator==(AliHLTComponentDataType dt) const;
142 /** copy constructor prohibited */
143 AliHLTEsdListEntry(const AliHLTEsdListEntry& src);
144 /** assignment operator prohibited */
145 AliHLTEsdListEntry& operator=(const AliHLTEsdListEntry& src);
148 * Write ESD to temporary file.
149 * The ESD is embedded into a tree and saved to a temporary file.
150 * The file name is retrieved by TSystem::GetTempFileName and returned
152 * @return file name, empty on failure
154 TString WriteTempFile(AliESDEvent* pESD) const;
156 /** root file name */
157 TString fName; //!transient
158 /** target directory */
159 TString fDirectory; //!transient
160 /** data type of the corresponding block */
161 AliHLTComponentDataType fDt; //!transient
162 /** the root file for this esd */
163 TFile* fpFile; //!transient
164 /** the tree for this esd */
165 TTree* fpTree; //!transient
166 /** the esd to fill into the tree */
167 AliESDEvent* fpEsd; //!transient
168 /** Prefix for generated ESD objects in the master ESD */
169 TString fPrefix; //!transient
172 typedef vector<AliHLTEsdListEntry*> AliHLTEsdPList;
175 * Find list entry for given data type
177 AliHLTEsdListEntry* Find(AliHLTComponentDataType dt) const;
179 /** the list of the ESDs */
180 AliHLTEsdPList fESDs; //!transient
182 /** target directory */
183 TString fDirectory; //!transient
185 ClassDef(AliHLTEsdManagerImplementation, 1)