Adding const
[u/mrichter/AliRoot.git] / HLT / TPCLib / AliHLTTPCEsdWriterComponent.cxx
CommitLineData
3cde846d 1// @(#) $Id$
2
3/** @file AliHLTTPCEsdWriterComponent.cxx
4 @author Matthias Richter
5 @date
6 @brief Writer component to store tracks of the HLT TPC conformal
7 mapping tracker in the AliESD format
8
9 */
10#include "AliHLTTPCEsdWriterComponent.h"
11#include "AliESD.h"
12#include "TTree.h"
13#include "AliHLTTPCTrack.h"
14#include "AliHLTTPCTrackArray.h"
15#include "AliHLTTPCTrackletDataFormat.h"
16#include "AliHLTTPCDefinitions.h"
17
18/** global instance for component registration */
19AliHLTTPCEsdWriterComponent gTPCEsdWriter;
20
21/** ROOT macro for the implementation of ROOT specific class methods */
22ClassImp(AliHLTTPCEsdWriterComponent)
23
24AliHLTTPCEsdWriterComponent::AliHLTTPCEsdWriterComponent()
25 :
26 fTree(NULL),
27 fESD(NULL)
28{
29}
30
31AliHLTTPCEsdWriterComponent::~AliHLTTPCEsdWriterComponent()
32{
33}
34
35int AliHLTTPCEsdWriterComponent::InitWriter()
36{
37 int iResult=0;
38 fESD = new AliESD;
39 if (fESD) {
40 fTree = new TTree("esdTree", "Tree with HLT ESD objects");
41 if (fTree) {
42 fTree->Branch("ESD", "AliESD", &fESD);
43 }
44 delete fESD;
45 fESD=NULL;
46 }
47 if (fTree==NULL) {
48 iResult=-ENOMEM;
49 }
50 return iResult;
51}
52
53int AliHLTTPCEsdWriterComponent::CloseWriter()
54{
55 int iResult=0;
56 if (fTree) {
57 WriteObject(kAliHLTVoidEventID, fTree);
58 TTree* pTree=fTree;
59 fTree=NULL;
60 delete pTree;
61 } else {
62 HLTWarning("not initialized");
63 }
64 AliHLTRootFileWriterComponent::CloseWriter();
65}
66
67int AliHLTTPCEsdWriterComponent::DumpEvent( const AliHLTComponentEventData& evtData,
68 const AliHLTComponentBlockData* blocks,
69 AliHLTComponentTriggerData& trigData )
70{
71 int iResult=0;
72 TTree* pTree=fTree;
73 if (pTree) {
74 fESD = new AliESD;
75 if (fESD) {
76 AliESD* pESD=fESD;
77
78 const AliHLTComponentBlockData* iter = NULL;
79 AliHLTTPCTrackArray* tracks=NULL;
80 AliHLTTPCTrackletData* inPtr=NULL;
81
82 for (int ndx=0; ndx<evtData.fBlockCnt && iResult>=0; ndx++) {
83 iter = blocks+ndx;
84 if ( iter->fDataType == AliHLTTPCDefinitions::gkTrackSegmentsDataType ) {
85 if (tracks==NULL) {
86 tracks=new AliHLTTPCTrackArray;
87 if (tracks) {
88 inPtr=(AliHLTTPCTrackletData*)iter->fPtr;
89 HLTDebug("reading block %d: %d tracklets", ndx, inPtr->fTrackletCnt);
90 tracks->FillTracks(inPtr->fTrackletCnt, inPtr->fTracklets);
91 if ((iResult=Tracks2ESD(tracks, pESD))>=0) {
92 pTree->Fill();
93 }
94 } else {
95 iResult=-ENOMEM;
96 }
97 } else {
98 HLTWarning("can not process more than one track segment data block, "
99 "please put a track merger in between");
100 break; // don't print the warning again
101 }
102 }
103 }
104
105
106 fESD=NULL;
107 delete pESD;
108 } else {
109 iResult=-ENOMEM;
110 }
111 }
112 return iResult;
113}
114
115int AliHLTTPCEsdWriterComponent::ScanArgument(int argc, const char** argv)
116{
117 int iResult=AliHLTRootFileWriterComponent::ScanArgument(argc, argv);
118 return iResult;
119}
120
121int AliHLTTPCEsdWriterComponent::Tracks2ESD(AliHLTTPCTrackArray* pTracks, AliESD* pESD)
122{
123 int iResult=0;
124 if (pTracks && pESD) {
125 HLTDebug("converting %d tracks from track array", pTracks->GetNTracks());
126 for (int i=0; i<pTracks->GetNTracks() && iResult>=0; i++) {
127 AliHLTTPCTrack* pTrack=(*pTracks)[i];
128 if (pTrack) {
04dbc9e4 129 //HLTDebug("convert track %d", i);
130 //pTrack->Print();
3cde846d 131 int iLocal=pTrack->Convert2AliKalmanTrack();
132 if (iLocal>=0) {
133 AliESDtrack iotrack;
134 iotrack.UpdateTrackParams(pTrack,AliESDtrack::kTPCin);
135 iotrack.SetTPCPoints(pTrack->GetPoints());
136 pESD->AddTrack(&iotrack);
137 } else {
138 HLTError("conversion to AliKalmanTrack failed for track %d of %d", i, pTracks->GetNTracks());
139 }
140 } else {
141 HLTError("internal missmatch in array");
142 iResult=-EFAULT;
143 }
144 }
145
146 } else {
147 iResult=-EINVAL;
148 }
149 return iResult;
150}