3 #ifndef ALIHLTTPCESDWRITERCOMPONENT_H
4 #define ALIHLTTPCESDWRITERCOMPONENT_H
5 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6 * See cxx source for full Copyright notice */
8 /** @file AliHLTTPCEsdWriterComponent.h
9 @author Matthias Richter
11 @brief Writer component to store tracks of the HLT TPC conformal
12 mapping tracker in the AliESD format
15 // see below for class documentation
17 // refer to README to build package
19 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
21 #include "AliHLTRootFileWriterComponent.h"
22 #include "AliHLTProcessor.h"
24 // forward declarations
27 class AliHLTTPCTrackArray;
30 * @class AliHLTTPCEsdWriterComponent
31 * This class translates incoming track segments structures from the TPC
32 * conformal mapping tracker (datatype TRAKSEGS/TPC) or tracks in global
33 * coordinates from the AliHLTTPCGlobalMergerComponent (TRACKS/TPC) into
36 * The \em TPCEsdWriter writes it to a ROOT file, the \em TPCEsdConverter
37 * to a TTree and sends the whole object to the output stream with data
38 * type @ref kAliHLTDataTypeESDTree and origin TPC.
40 * In case of TRAKSEGS, the component can only process data block containing
41 * data of one slice, but it can read an unlimeted number of data blocks.
43 * componentid: \b TPCEsdWriter <br>
44 * componentid: \b TPCEsdConverter <br>
45 * componentlibrary: \b libAliHLTTPC.so <br>
46 * Arguments TPCEsdWriter: <br>
47 * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formating -->
48 * \li -datafile <i> filename </i> <br>
50 * \li -directory <i> directory </i> <br>
53 * Arguments TPCEsdConverter: <br>
54 * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formating -->
56 * write ESD directly to output (@ref kAliHLTDataTypeESDObject)
58 * write ESD directly to TTree and to output (@ref kAliHLTDataTypeESDTree),
59 * this is the default behavior.
62 * Example usage (HLT configuration file):
63 * \<Proc ID="EsdWriter" type="prc">
64 * \<Cmd>AliRootWrapperSubscriber -eventmodulo 1
65 * -componentid TPCEsdWriter
66 * -componentlibrary libAliHLTTPC.so
67 * -componentargs "-datafile AliESDs.root"
70 * \<Parent>TR0-SC\</Parent>
71 * \<Node>master\</Node>
72 * \<Shm blocksize="1k" blockcount="1" type="sysv"/>
76 * @see AliHLTFileWriter and AliHLTRootFileWriterComponent for more parameters
78 class AliHLTTPCEsdWriterComponent : public AliHLTLogging
81 /** standard constructor */
82 AliHLTTPCEsdWriterComponent();
84 ~AliHLTTPCEsdWriterComponent();
87 * class AliHLTTPCEsdWriterComponent::AliWriter
88 * The writer component of the AliHLTTPCEsdWriterComponent.
90 class AliWriter : public AliHLTRootFileWriterComponent
93 /** standard constructor */
99 * The id of the component.
100 * @return component id (string)
102 const char* GetComponentID() {return "TPCEsdWriter";};
104 void GetInputDataTypes(AliHLTComponentDataTypeList& list);
108 * @return new class instance
110 AliHLTComponent* Spawn() {return new AliHLTTPCEsdWriterComponent::AliWriter;}
114 * Data processing method for the component.
115 * The function can be overloaded by specific ROOT file writer
117 * @param evtData event data structure
118 * @param blocks input data block descriptors
119 * @param trigData trigger data structure
121 int DumpEvent( const AliHLTComponentEventData& evtData,
122 const AliHLTComponentBlockData* blocks,
123 AliHLTComponentTriggerData& trigData );
125 using AliHLTRootFileWriterComponent::DumpEvent;
128 * Scan one argument and adjacent parameters.
129 * @param argc size of the argument array
130 * @param argv agument array for component initialization
131 * @return number of processed members of the argv <br>
132 * -EINVAL unknown argument <br>
133 * -EPROTO parameter for argument missing <br>
135 int ScanArgument(int argc, const char** argv);
137 /** copy constructor prohibited */
138 AliWriter(const AliWriter&);
139 /** assignment operator prohibited */
140 AliWriter& operator=(const AliWriter&);
144 * The DoInit function is not available for this child class. InitWriter is the
145 * corresponding function for classes derived from AliHLTFileWriter.
151 * The DoDeinit function is not available for this child class. CloseWriter is the
152 * corresponding function for classes derived from AliHLTFileWriter.
157 TTree* fTree; //! transient value
160 AliESDEvent* fESD; //! transient value
162 /** pointer to the basic ESD conversion methods */
163 AliHLTTPCEsdWriterComponent* fBase; //! transient value
167 * class AliHLTTPCEsdWriterComponent::AliConverter
168 * The converter component of the AliHLTTPCEsdWriterComponent.
171 class AliConverter : public AliHLTProcessor
174 /** standard constructor */
177 virtual ~AliConverter();
179 // interface methods of base class
180 const char* GetComponentID() {return "TPCEsdConverter";};
181 void GetInputDataTypes(AliHLTComponentDataTypeList& list);
182 AliHLTComponentDataType GetOutputDataType();
183 void GetOutputDataSize(unsigned long& constBase, double& inputMultiplier);
184 AliHLTComponent* Spawn() {return new AliHLTTPCEsdWriterComponent::AliConverter;}
187 // interface methods of base class
188 int DoInit(int argc, const char** argv);
190 int DoEvent(const AliHLTComponentEventData& evtData,
191 const AliHLTComponentBlockData* blocks,
192 AliHLTComponentTriggerData& trigData,
193 AliHLTUInt8_t* outputPtr,
194 AliHLTUInt32_t& size,
195 AliHLTComponentBlockDataList& outputBlocks );
197 using AliHLTProcessor::DoEvent;
200 /** copy constructor prohibited */
201 AliConverter(const AliConverter&);
202 /** assignment operator prohibited */
203 AliConverter& operator=(const AliConverter&);
205 /** pointer to the basic ESD conversion methods */
206 AliHLTTPCEsdWriterComponent* fBase; //! transient value
208 /** write object to TTree or directly */
209 int fWriteTree; //!transient
214 * Process the input data blocks.
215 * @param pTree tree to be filled
216 * @param pESD ESD to be filled
217 * @param blocks data block descriptor array
218 * @param nBlocks size of the array
219 * @param pMinSize [OUT] receives the minimum slice no
220 * @param pMaxSize [OUT] receives the maximum slice no
221 * @return neg. error code if failed
223 int ProcessBlocks(TTree* pTree, AliESDEvent* pESD, const AliHLTComponentBlockData* blocks,
224 int nBlocks, int* pMinSlice=NULL, int* pMaxSlice=NULL);
227 * Covert tracks to AliTPCtracks (AliKalmanTracks) and add them to ESD.
228 * @param pTracks array of tracks
229 * @param pESD pointer to ESD
230 * @return neg. error code if failed
232 int Tracks2ESD(AliHLTTPCTrackArray* pTracks, AliESDEvent* pESD);
235 /** copy constructor prohibited */
236 AliHLTTPCEsdWriterComponent(const AliHLTTPCEsdWriterComponent&);
237 /** assignment operator prohibited */
238 AliHLTTPCEsdWriterComponent& operator=(const AliHLTTPCEsdWriterComponent&);
240 ClassDef(AliHLTTPCEsdWriterComponent, 1)