]>
Commit | Line | Data |
---|---|---|
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 */ | |
33 | ClassImp(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 | ||
47 | AliHLTTPCClusterDumpComponent::~AliHLTTPCClusterDumpComponent() | |
48 | { | |
49 | // see header file for class documentation | |
50 | } | |
51 | ||
52 | const char* AliHLTTPCClusterDumpComponent::GetComponentID() | |
53 | { | |
54 | // see header file for class documentation | |
55 | return "TPCClusterDump"; | |
56 | } | |
57 | ||
58 | void 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 | ||
66 | AliHLTComponent* AliHLTTPCClusterDumpComponent::Spawn() | |
67 | { | |
68 | // see header file for class documentation | |
69 | return new AliHLTTPCClusterDumpComponent; | |
70 | } | |
71 | ||
72 | int AliHLTTPCClusterDumpComponent::InitWriter() | |
73 | { | |
74 | // see header file for class documentation | |
75 | return 0; | |
76 | } | |
77 | ||
af69d367 | 78 | int 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 | ||
92 | int AliHLTTPCClusterDumpComponent::CloseWriter() | |
93 | { | |
94 | // see header file for class documentation | |
95 | return 0; | |
96 | } | |
97 | ||
5051b84c | 98 | int 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 | } |