Added code to allow sending back of EventDoneData from the DoEvent methods of AliHLTP...
[u/mrichter/AliRoot.git] / HLT / rec / AliHLTEsdManagerImplementation.h
CommitLineData
c5123824 1//-*- Mode: C++ -*-
2// $Id$
3
f1207f29 4#ifndef ALIHLTESDMANAGERIMPLEMENTATION_H
5#define ALIHLTESDMANAGERIMPLEMENTATION_H
c5123824 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 *
9
f1207f29 10/** @file AliHLTEsdManagerImplementation.h
c5123824 11 @author Matthias Richter
12 @date
f1207f29 13 @brief Implementation of the AliHLTEsdManager
c5123824 14*/
15
f1207f29 16#include "AliHLTEsdManager.h"
90c37647 17#include "TString.h"
c5123824 18#include <vector>
19
20class AliESDEvent;
21class TTree;
22class TFile;
23
24/**
f1207f29 25 * @class AliHLTEsdManagerImplementation
26 * Implementation of the AliHLTEsdManager.
83cb7e1d 27 *
f1207f29 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
31 * usage.
83cb7e1d 32 *
9d4cf2ab 33 * @ingroup alihlt_aliroot_reconstruction
c5123824 34 */
f1207f29 35class AliHLTEsdManagerImplementation : public AliHLTEsdManager {
c5123824 36 public:
37 /** constructor */
f1207f29 38 AliHLTEsdManagerImplementation();
c5123824 39 /** destructor */
f1207f29 40 virtual ~AliHLTEsdManagerImplementation();
c5123824 41
42 /**
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
48 *
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
54 */
55 int WriteESD(const AliHLTUInt8_t* pBuffer, AliHLTUInt32_t size, AliHLTComponentDataType dt,
56 AliESDEvent* tgtesd=NULL, int eventno=-1);
57
90c37647 58 /**
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
64 */
65 int PadESDs(int eventno);
66
67 /**
68 * Set the target directory for the ESD files.
69 */
70 void SetDirectory(const char* directory);
71
72 /**
73 * Get the list of the internally created files.
74 * Returns a blank separated list of the file names.
75 */
76 TString GetFileNames(AliHLTComponentDataType dt=kAliHLTAnyDataType) const;
77
78 /**
79 * Embed an ESD into a TTree object.
80 * The tree object needs to be deleted by the caller.
81 */
82 static TTree* EmbedIntoTree(AliESDEvent* pESD, const char* name="esdTree", const char* title="Tree with HLT ESD objects");
83
c5123824 84 protected:
85
86 private:
87 /** copy constructor prohibited */
f1207f29 88 AliHLTEsdManagerImplementation(const AliHLTEsdManagerImplementation&);
c5123824 89 /** assignment operator prohibited */
f1207f29 90 AliHLTEsdManagerImplementation& operator=(const AliHLTEsdManagerImplementation&);
c5123824 91
92 class AliHLTEsdListEntry : public AliHLTLogging {
93 public:
94 /** constructor */
95 AliHLTEsdListEntry(AliHLTComponentDataType dt);
c5123824 96 /** destructor */
97 ~AliHLTEsdListEntry();
98
99 /**
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
107 */
108 int WriteESD(AliESDEvent* pESD, int eventno=-1);
109
90c37647 110 /**
111 * Set the target directory for the ESD file.
112 */
113 void SetDirectory(const char* directory);
114
115 /**
116 * Delete the ESD file.
117 */
118 void Delete();
119
120 /**
121 * Get name of the ESD file.
122 */
123 const char* GetFileName() const;
124
c5123824 125 bool operator==(AliHLTComponentDataType dt) const;
126
127 private:
62ff1e23 128 /** copy constructor prohibited */
129 AliHLTEsdListEntry(const AliHLTEsdListEntry& src);
130 /** assignment operator prohibited */
131 AliHLTEsdListEntry& operator=(const AliHLTEsdListEntry& src);
c5123824 132
90c37647 133 /**
134 * Write ESD to temporary file.
135 * The ESD is embedded into a tree and saved to a temporary file.
136 * The file name is retrieved by TSystem::GetTempFileName and returned
137 * on success.
138 * @return file name, empty on failure
139 */
140 TString WriteTempFile(AliESDEvent* pESD) const;
141
c5123824 142 /** root file name */
143 TString fName; //!transient
90c37647 144 /** target directory */
145 TString fDirectory; //!transient
c5123824 146 /** data type of the corresponding block */
147 AliHLTComponentDataType fDt; //!transient
83cb7e1d 148 /** the root file for this esd */
149 TFile* fpFile; //!transient
150 /** the tree for this esd */
151 TTree* fpTree; //!transient
152 /** the esd to fill into the tree */
153 AliESDEvent* fpEsd; //!transient
c5123824 154 };
155
62ff1e23 156 typedef vector<AliHLTEsdListEntry*> AliHLTEsdPList;
c5123824 157
158 /**
159 * Find list entry for given data type
160 */
161 AliHLTEsdListEntry* Find(AliHLTComponentDataType dt) const;
162
163 /** the list of the ESDs */
62ff1e23 164 AliHLTEsdPList fESDs; //!transient
c5123824 165
90c37647 166 /** target directory */
167 TString fDirectory; //!transient
168
f1207f29 169 ClassDef(AliHLTEsdManagerImplementation, 1)
c5123824 170};
90c37647 171
c5123824 172#endif