added AliFlatExternalTrackParam to HLT global library
[u/mrichter/AliRoot.git] / HLT / TPCLib / AliHLTTPCClusterDumpComponent.cxx
CommitLineData
0efebbac 1// $Id$
2//**************************************************************************
3//* This file is property of and copyright by the ALICE HLT Project *
4//* ALICE Experiment at CERN, All rights reserved. *
5//* *
6//* Primary Authors: Kenneth Aamodt <Kenneth.Aamodt@cern.ch> *
7//* for The ALICE HLT Project. *
8//* *
9//* Permission to use, copy, modify and distribute this software and its *
10//* documentation strictly for non-commercial purposes is hereby granted *
11//* without fee, provided that the above copyright notice appears in all *
12//* copies and that both the copyright notice and this permission notice *
13//* appear in the supporting documentation. The authors make no claims *
14//* about the suitability of this software for any purpose. It is *
15//* provided "as is" without express or implied warranty. *
16//**************************************************************************
17
18/** @file AliHLTTPCClusterDumpComponent.cxx
19 @author Kenneth Aamodt
20 @date
21 @brief Special file writer converting TPC clusters input to readable
22 ASCII format.
23*/
24
25#include <cassert>
26#include "AliHLTTPCClusterDumpComponent.h"
27#include "AliHLTTPCDefinitions.h"
28#include "AliHLTTPCSpacePointData.h"
29#include "AliHLTTPCClusterDataFormat.h"
0e588049 30#include "AliHLTTPCTransform.h"
0efebbac 31
32/** ROOT macro for the implementation of ROOT specific class methods */
33ClassImp(AliHLTTPCClusterDumpComponent)
34
35 AliHLTTPCClusterDumpComponent::AliHLTTPCClusterDumpComponent()
36 :
5051b84c 37 AliHLTFileWriter()
38//fSlice(-1)
0efebbac 39{
40 // see header file for class documentation
41 // or
42 // refer to README to build package
43 // or
44 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
45}
46
47AliHLTTPCClusterDumpComponent::~AliHLTTPCClusterDumpComponent()
48{
49 // see header file for class documentation
50}
51
52const char* AliHLTTPCClusterDumpComponent::GetComponentID()
53{
54 // see header file for class documentation
55 return "TPCClusterDump";
56}
57
58void AliHLTTPCClusterDumpComponent::GetInputDataTypes( vector<AliHLTComponentDataType>& list)
59{
60 // see header file for class documentation
61 list.clear();
62 list.push_back(AliHLTTPCDefinitions::fgkClustersDataType);
86312ffa 63 list.push_back(AliHLTTPCDefinitions::fgkAlterClustersDataType);
0efebbac 64}
65
66AliHLTComponent* AliHLTTPCClusterDumpComponent::Spawn()
67{
68 // see header file for class documentation
69 return new AliHLTTPCClusterDumpComponent;
70}
71
72int AliHLTTPCClusterDumpComponent::InitWriter()
73{
74 // see header file for class documentation
75 return 0;
76}
77
af69d367 78int AliHLTTPCClusterDumpComponent::ScanArgument(int /*argc*/, const char** /*argv*/)
0efebbac 79{
80 // see header file for class documentation
5051b84c 81 int iResult=0;
0efebbac 82 TString argument="";
83 bool bMissingParam=0;
84 int i=0;
5051b84c 85
86 if (bMissingParam) iResult=-EPROTO;
87 else if (iResult>=0) iResult=i;
88
89 return iResult;
0efebbac 90}
91
92int AliHLTTPCClusterDumpComponent::CloseWriter()
93{
94 // see header file for class documentation
95 return 0;
96}
97
5051b84c 98int AliHLTTPCClusterDumpComponent::DumpEvent( const AliHLTComponentEventData& evtData,
0efebbac 99 AliHLTComponentTriggerData& /*trigData*/ )
100{
101 // see header file for class documentation
102
103 HLTDebug("Entering DumpEvent");
104
105 int iResult=0;
106 int blockno=0;
107 const AliHLTComponentBlockData* pDesc=NULL;
108
5051b84c 109 if ( GetFirstInputBlock( kAliHLTDataTypeSOR ) || GetFirstInputBlock( kAliHLTDataTypeEOR ) )
110 return 0;
0efebbac 111
5051b84c 112 Int_t spacePointCounter=0;
113
0efebbac 114 for (pDesc=GetFirstInputBlock(AliHLTTPCDefinitions::fgkClustersDataType); pDesc!=NULL; pDesc=GetNextInputBlock(), blockno++) {
5051b84c 115 TString filename;
116 iResult=BuildFileName(evtData.fEventID, 0, pDesc->fDataType, 0, filename);
117 ios::openmode filemode=(ios::openmode)0;
118 if (fCurrentFileName.CompareTo(filename)==0) {
119 filemode=ios::app;
120 } else {
121 fCurrentFileName=filename;
122 }
123
124 if (iResult>=0) {
125 ofstream dump(fCurrentFileName.Data(), filemode);
126 if (dump.good()) {
127
128 if(pDesc->fDataType!=AliHLTTPCDefinitions::fgkClustersDataType){continue;}
129
130 //if (dump.good() || 1) {//the || 1 is there since dump.good() will return false( EOF )
131 iResult=1;
132 const AliHLTTPCClusterData* clusterData = (const AliHLTTPCClusterData*) pDesc->fPtr;
133 Int_t nSpacepoints = (Int_t) clusterData->fSpacePointCnt;
134 AliHLTTPCSpacePointData *clusters = (AliHLTTPCSpacePointData*) &clusterData->fSpacePoints;
135
136 for(int i=0;i<nSpacepoints;i++){
86312ffa 137 UInt_t idCluster = clusters[i].fID;
a371a266 138 Int_t slice = AliHLTTPCSpacePointData::GetSlice(idCluster);
139 Int_t patch = AliHLTTPCSpacePointData::GetPatch(idCluster);
86312ffa 140
141 dump << "" << endl;
142 dump << "ClusterNumber: " << spacePointCounter << endl;
143 dump << "Slice: " << slice << endl;
144 dump << "Partition: " << patch << endl;
145 dump << "[X,Y,Z]: [" << clusters[i].fX<<" , "<<clusters[i].fY<<" , "<<clusters[i].fZ <<"]"<< endl;
146 //Float_t xyz[3]={clusters[i].fX,clusters[i].fY,clusters[i].fZ};
147 //AliHLTTPCTransform::LocHLT2Raw(xyz,(Int_t)(clusters[i].fID/10),(Int_t)(clusters[i].fID%10));
148 //dump << "[R,P,T]: [" << xyz[0]<<" , "<<xyz[1]<<" , "<<xyz[2] <<"]"<< endl;
149 dump << "Total Charge: " << clusters[i].fCharge << endl;
150 dump << "Q Max: " << clusters[i].fQMax << endl;
151 spacePointCounter++;
152 }
153 }
154 else {
155 HLTError("can not open file %s for writing", fCurrentFileName.Data());
156 iResult=-EBADF;
157 }
158 dump.close();
159 }
160 }
161
162 for (pDesc=GetFirstInputBlock(AliHLTTPCDefinitions::fgkAlterClustersDataType); pDesc!=NULL; pDesc=GetNextInputBlock(), blockno++) {
163 TString filename;
164 iResult=BuildFileName(evtData.fEventID, 0, pDesc->fDataType, 0, filename);
165 ios::openmode filemode=(ios::openmode)0;
166 if (fCurrentFileName.CompareTo(filename)==0) {
167 filemode=ios::app;
168 } else {
169 fCurrentFileName=filename;
170 }
171
172 if (iResult>=0) {
173 ofstream dump(fCurrentFileName.Data(), filemode);
174 if (dump.good()) {
175
176 if(pDesc->fDataType!=AliHLTTPCDefinitions::fgkAlterClustersDataType){continue;}
177
178 //if (dump.good() || 1) {//the || 1 is there since dump.good() will return false( EOF )
179 iResult=1;
180 const AliHLTTPCClusterData* clusterData = (const AliHLTTPCClusterData*) pDesc->fPtr;
181 Int_t nSpacepoints = (Int_t) clusterData->fSpacePointCnt;
182 AliHLTTPCSpacePointData *clusters = (AliHLTTPCSpacePointData*) &clusterData->fSpacePoints;
183
184 for(int i=0;i<nSpacepoints;i++){
5051b84c 185 UInt_t idCluster = clusters[i].fID;
a371a266 186 Int_t slice = AliHLTTPCSpacePointData::GetSlice(idCluster);
187 Int_t patch = AliHLTTPCSpacePointData::GetPatch(idCluster);
5051b84c 188
189 dump << "" << endl;
190 dump << "ClusterNumber: " << spacePointCounter << endl;
191 dump << "Slice: " << slice << endl;
192 dump << "Partition: " << patch << endl;
193 dump << "[X,Y,Z]: [" << clusters[i].fX<<" , "<<clusters[i].fY<<" , "<<clusters[i].fZ <<"]"<< endl;
8bc4c842 194 //Float_t xyz[3]={clusters[i].fX,clusters[i].fY,clusters[i].fZ};
38e61c10 195 //AliHLTTPCTransform::LocHLT2Raw(xyz,(Int_t)(clusters[i].fID/10),(Int_t)(clusters[i].fID%10));
196 //dump << "[R,P,T]: [" << xyz[0]<<" , "<<xyz[1]<<" , "<<xyz[2] <<"]"<< endl;
5051b84c 197 dump << "Total Charge: " << clusters[i].fCharge << endl;
198 dump << "Q Max: " << clusters[i].fQMax << endl;
199 spacePointCounter++;
200 }
201 }
202 else {
203 HLTError("can not open file %s for writing", fCurrentFileName.Data());
204 iResult=-EBADF;
205 }
206 dump.close();
207 }
0efebbac 208 }
209 return iResult;
210}