]>
Commit | Line | Data |
---|---|---|
766aafea | 1 | //-*- Mode: C++ -*- |
2 | /************************************************************************** | |
3 | * This file is property of and copyright by the ALICE HLT Project * | |
4 | * All rights reserved. * | |
5 | * * | |
6 | * Primary Authors: Svein Lindal, Oeystein Djuvsland * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /** | |
17 | * @file AliHLTCaloHistoComponent.cxx | |
18 | * @author Svein Lindal | |
19 | * @date | |
20 | * @brief A physics histogram producer component for Calo HLT | |
21 | */ | |
22 | ||
23 | #if __GNUC__>= 3 | |
24 | using namespace std; | |
25 | #endif | |
26 | ||
27 | ||
766aafea | 28 | #include "AliHLTCaloHistoComponent.h" |
29 | #include "AliHLTCaloHistoCellEnergy.h" | |
30 | #include "AliHLTCaloHistoClusterEnergy.h" | |
31 | #include "AliHLTCaloHistoInvMass.h" | |
32 | #include "AliHLTCaloHistoMatchedTracks.h" | |
33 | #include "AliESDEvent.h" | |
34 | #include "TRefArray.h" | |
e0cde76d | 35 | #include "AliHLTCaloClusterDataStruct.h" |
36 | #include "AliHLTCaloClusterReader.h" | |
ce063697 | 37 | #include "TObjArray.h" |
766aafea | 38 | |
39 | // see below for class documentation | |
40 | // or | |
41 | // refer to README to build package | |
42 | // or | |
43 | // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt | |
44 | ||
45 | ||
ce063697 | 46 | AliHLTCaloHistoComponent gAliHLTCaloHistoComponent; |
47 | ||
766aafea | 48 | ClassImp(AliHLTCaloHistoComponent); |
49 | ||
50 | AliHLTCaloHistoComponent::AliHLTCaloHistoComponent() : | |
51 | AliHLTProcessor(), | |
ce063697 | 52 | fClusterReader(NULL), |
766aafea | 53 | fEmcalClustersArray(NULL), |
54 | fPhosClustersArray(NULL), | |
ce063697 | 55 | fPhosHistogramArray(NULL), |
56 | fEmcalHistogramArray(NULL), | |
766aafea | 57 | fDoEmcal(kFALSE), |
ce063697 | 58 | fDoPhos(kFALSE) |
766aafea | 59 | { |
60 | //see header file for documentation | |
61 | } | |
62 | ||
63 | AliHLTCaloHistoComponent::~AliHLTCaloHistoComponent() | |
64 | { | |
65 | //see header file for documentation | |
66 | //Deinit(); | |
67 | } | |
68 | ||
69 | Int_t AliHLTCaloHistoComponent::DoInit(int argc, const char** argv ) { | |
70 | //see header file for documentation | |
71 | ||
766aafea | 72 | |
ce063697 | 73 | fEmcalHistogramArray = new TObjArray(); |
74 | fEmcalHistogramArray->SetOwner(kTRUE); | |
75 | fPhosHistogramArray = new TObjArray(); | |
76 | fPhosHistogramArray->SetOwner(kTRUE); | |
766aafea | 77 | |
ce063697 | 78 | bool doPhos = true; |
79 | bool doEmcal = true; | |
766aafea | 80 | |
766aafea | 81 | |
ce063697 | 82 | for(int i = 0; i < argc; i++) { |
766aafea | 83 | |
ce063697 | 84 | if(!strcmp("-phos", argv[i])) { |
85 | fDoPhos = kTRUE; | |
86 | doPhos = true; | |
87 | doEmcal = false; | |
88 | } | |
89 | if(!strcmp("-emcal", argv[i])) { | |
90 | fDoEmcal = kTRUE; | |
91 | doEmcal = true; | |
92 | doPhos = false; | |
93 | } | |
94 | if(!strcmp("-both", argv[i])) { | |
95 | fDoEmcal = kTRUE; | |
96 | fDoPhos = kTRUE; | |
97 | doEmcal = true; | |
98 | doPhos = true; | |
99 | } | |
766aafea | 100 | |
ce063697 | 101 | if(!strcmp("-clusterenergy", argv[i])){ |
102 | if(doEmcal){ | |
103 | AliHLTCaloHistoClusterEnergy * histo = new AliHLTCaloHistoClusterEnergy("EMCAL"); | |
104 | fEmcalHistogramArray->AddLast(dynamic_cast<TObject*>(histo)); | |
34788787 | 105 | HLTImportant("Adding EMCAL cluster energy histogram"); |
ce063697 | 106 | } |
107 | if(doPhos){ | |
108 | AliHLTCaloHistoClusterEnergy * histo = new AliHLTCaloHistoClusterEnergy("PHOS"); | |
109 | fPhosHistogramArray->AddLast(dynamic_cast<TObject*>(histo)); | |
34788787 | 110 | HLTImportant("Adding PHOS cluster energy histogram"); |
ce063697 | 111 | } |
112 | } | |
113 | ||
114 | if(!strcmp("-invariantmass", argv[i])){ | |
115 | if(doEmcal){ | |
116 | AliHLTCaloHistoInvMass * histo = new AliHLTCaloHistoInvMass("EMCAL"); | |
117 | fEmcalHistogramArray->AddLast(dynamic_cast<TObject*>(histo)); | |
34788787 | 118 | HLTImportant("Adding EMCAL invariant mass histogram"); |
ce063697 | 119 | } |
120 | if(doPhos){ | |
121 | AliHLTCaloHistoInvMass * histo = new AliHLTCaloHistoInvMass("PHOS"); | |
122 | fPhosHistogramArray->AddLast(dynamic_cast<TObject*>(histo)); | |
34788787 | 123 | HLTImportant("Adding PHOS invariant mass histogram"); |
ce063697 | 124 | } |
125 | } | |
126 | ||
127 | if(!strcmp("-matchedtracks", argv[i])) { | |
128 | if(doEmcal){ | |
129 | AliHLTCaloHistoMatchedTracks * histo = new AliHLTCaloHistoMatchedTracks("EMCAL"); | |
130 | fEmcalHistogramArray->AddLast(dynamic_cast<TObject*>(histo)); | |
34788787 | 131 | HLTImportant("Adding EMCAL track-matching histograms"); |
ce063697 | 132 | } |
133 | if(doPhos){ | |
134 | AliHLTCaloHistoMatchedTracks * histo = new AliHLTCaloHistoMatchedTracks("PHOS"); | |
135 | fPhosHistogramArray->AddLast(dynamic_cast<TObject*>(histo)); | |
34788787 | 136 | HLTImportant("Adding PHOS track-matching histograms"); |
ce063697 | 137 | } |
138 | } | |
766aafea | 139 | } |
ce063697 | 140 | |
141 | if(fDoPhos) | |
142 | fPhosClustersArray = new TRefArray(); | |
143 | if(fDoEmcal) | |
144 | fEmcalClustersArray = new TRefArray(); | |
766aafea | 145 | |
e0cde76d | 146 | fClusterReader = new AliHLTCaloClusterReader(); |
ce063697 | 147 | |
766aafea | 148 | return 0; |
149 | } | |
150 | ||
151 | ||
152 | Int_t AliHLTCaloHistoComponent::DoDeinit() | |
153 | { | |
154 | //see header file for documentation | |
155 | ||
766aafea | 156 | if(fEmcalClustersArray) |
157 | delete fEmcalClustersArray; | |
158 | fEmcalClustersArray = NULL; | |
159 | ||
160 | if(fPhosClustersArray) | |
161 | delete fPhosClustersArray; | |
162 | fPhosClustersArray = NULL; | |
163 | ||
ce063697 | 164 | //Deleting these should also destroy histograms!!? |
165 | if(fEmcalHistogramArray) | |
166 | delete fEmcalHistogramArray; | |
167 | fEmcalHistogramArray = NULL; | |
168 | ||
169 | if(fPhosHistogramArray) | |
170 | delete fPhosHistogramArray; | |
171 | fPhosHistogramArray = NULL; | |
172 | ||
766aafea | 173 | return 0; |
174 | } | |
175 | ||
176 | const char* AliHLTCaloHistoComponent::GetComponentID() | |
177 | { | |
178 | //see header file for documentation | |
179 | return "CaloPhysicsHistos"; | |
180 | } | |
181 | ||
182 | ||
183 | void | |
184 | AliHLTCaloHistoComponent::GetInputDataTypes(vector<AliHLTComponentDataType>& list) | |
185 | { | |
186 | //see header file for documentation | |
187 | list.clear(); | |
9a0e0257 | 188 | list.push_back( kAliHLTDataTypeESDObject | kAliHLTDataOriginOut ); |
2a24cbbe | 189 | list.push_back( kAliHLTDataTypeCaloCluster | kAliHLTDataOriginEMCAL ); |
9a0e0257 | 190 | list.push_back( kAliHLTDataTypeCaloCluster | kAliHLTDataOriginPHOS ); |
2a24cbbe | 191 | |
766aafea | 192 | // list.push_back(AliHLTPHOSDefinitions::fgkClusterDataType); |
2a24cbbe | 193 | // list.push_back(AliHLTPHOSDefinitions::fgkESDCaloClusterDataType); |
194 | // list.push_back(AliHLTPHOSDefinitions::fgkESDCaloCellsDataType); | |
766aafea | 195 | |
196 | } | |
197 | ||
198 | AliHLTComponentDataType AliHLTCaloHistoComponent::GetOutputDataType() | |
199 | { | |
200 | //see header file for documentation | |
2a24cbbe | 201 | return kAliHLTDataTypeHistogram | kAliHLTDataOriginAny ; |
766aafea | 202 | } |
203 | ||
204 | ||
205 | void AliHLTCaloHistoComponent::GetOutputDataSize(unsigned long& constBase, double& inputMultiplier) | |
206 | { | |
207 | //see header file for documentation | |
208 | constBase = 30; | |
209 | inputMultiplier = 5; | |
210 | } | |
211 | ||
212 | AliHLTComponent* AliHLTCaloHistoComponent::Spawn() { | |
213 | //see header file for documentation | |
214 | return new AliHLTCaloHistoComponent(); | |
215 | } | |
216 | ||
217 | Int_t AliHLTCaloHistoComponent::DoEvent(const AliHLTComponentEventData& /*evtData*/, AliHLTComponentTriggerData& /*trigData*/) { | |
218 | ||
219 | //see header file for documentation | |
e0cde76d | 220 | Int_t iResult = 0; |
221 | ||
222 | ||
766aafea | 223 | if ( GetFirstInputBlock( kAliHLTDataTypeSOR ) || GetFirstInputBlock( kAliHLTDataTypeEOR ) ) |
224 | return 0; | |
9a0e0257 | 225 | |
9a0e0257 | 226 | |
227 | if (fDoEmcal) { | |
74085fad | 228 | // HLTInfo("Processing EMCAL blocks"); |
e0cde76d | 229 | for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock( kAliHLTDataTypeCaloCluster | kAliHLTDataOriginEMCAL ); pBlock!=NULL; pBlock=GetNextInputBlock()) { |
ce063697 | 230 | ProcessBlocks(pBlock, fEmcalHistogramArray); |
e0cde76d | 231 | } |
232 | } | |
9a0e0257 | 233 | |
e0cde76d | 234 | if (fDoPhos) { |
74085fad | 235 | //HLTInfo("Processing PHOS blocks"); |
e0cde76d | 236 | for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock( kAliHLTDataTypeCaloCluster | kAliHLTDataOriginPHOS ); pBlock!=NULL; pBlock=GetNextInputBlock()) { |
ce063697 | 237 | ProcessBlocks(pBlock, fPhosHistogramArray); |
e0cde76d | 238 | } |
9a0e0257 | 239 | } |
240 | ||
ce063697 | 241 | //Push histos |
242 | for(int ih = 0; ih < fPhosHistogramArray->GetEntriesFast(); ih++) { | |
74085fad | 243 | //HLTInfo("Pushing PHOS histograms"); |
ce063697 | 244 | PushBack(static_cast<AliHLTCaloHistoProducer*>(fPhosHistogramArray->At(ih))->GetHistograms(), kAliHLTDataTypeHistogram | kAliHLTDataOriginPHOS ); |
245 | } | |
246 | for(int ih = 0; ih < fEmcalHistogramArray->GetEntriesFast(); ih++) { | |
74085fad | 247 | //HLTInfo("Pushing EMCAL histograms"); |
ce063697 | 248 | PushBack(static_cast<AliHLTCaloHistoProducer*>(fEmcalHistogramArray->At(ih))->GetHistograms(), kAliHLTDataTypeHistogram | kAliHLTDataOriginEMCAL ); |
249 | } | |
9a0e0257 | 250 | |
ce063697 | 251 | return iResult; |
9a0e0257 | 252 | |
ce063697 | 253 | } |
9a0e0257 | 254 | |
9a0e0257 | 255 | |
ce063697 | 256 | Int_t AliHLTCaloHistoComponent::ProcessBlocks(const AliHLTComponentBlockData * pBlock, TObjArray * histoArray) { |
9a0e0257 | 257 | |
ce063697 | 258 | Int_t iResult = 0; |
259 | ||
260 | AliHLTCaloClusterDataStruct * clusterStruct; | |
261 | vector<AliHLTCaloClusterDataStruct*> clustersVector; | |
2a24cbbe | 262 | |
ce063697 | 263 | AliHLTCaloClusterHeaderStruct *clusterHeader = reinterpret_cast<AliHLTCaloClusterHeaderStruct*>(pBlock->fPtr); |
264 | fClusterReader->SetMemory(clusterHeader); | |
265 | ||
266 | if ( (clusterHeader->fNClusters) < 0) { | |
267 | HLTError("Event has negative number of clusters: %d! Very bad for vector resizing", (Int_t) (clusterHeader->fNClusters)); | |
268 | return -1; | |
269 | } | |
766aafea | 270 | |
ce063697 | 271 | clustersVector.resize((int) (clusterHeader->fNClusters)); |
272 | Int_t nClusters = 0; | |
766aafea | 273 | |
ce063697 | 274 | while( (clusterStruct = fClusterReader->NextCluster()) != 0) { |
275 | clustersVector[nClusters++] = clusterStruct; | |
766aafea | 276 | } |
766aafea | 277 | |
ce063697 | 278 | nClusters = clusterHeader->fNClusters; |
279 | ||
280 | for(int ih = 0; ih < histoArray->GetEntriesFast(); ih++) { | |
281 | iResult = static_cast<AliHLTCaloHistoProducer*>(histoArray->At(ih))->FillHistograms(nClusters, clustersVector); | |
766aafea | 282 | } |
ce063697 | 283 | |
284 | return iResult; | |
766aafea | 285 | } |