ATLAS Offline Software
Loading...
Searching...
No Matches
CaloClusterContainerCnv_p5.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6
8
12//#include "CaloEvent/CaloSampling.h"
16
17
18namespace {
19
20inline
21bool testbit (unsigned int x, unsigned int i)
22{
23 return (x & (1U << i)) != 0;
24}
25
26} // anonymous namespace
27
28
31 MsgStream &log) const
32{
33 if (log.level() <= MSG::DEBUG) log<< MSG::DEBUG << "Reading CaloClusterContainerCnv_p5" << endmsg;
34
35 // reset element link converters, and provide container name lookup table
36 ShowerLinkState showerLinkState (pers->m_linkNames);
37 CellLinkState cellLinkState (pers->m_linkNames);
38
39 // Use data pool for clusters to avoid calling constructor for each event
40 DataPool<CaloCluster> clusters;
41
42 trans->clear (SG::VIEW_ELEMENTS);
43 trans->reserve(pers->m_vec.size());
44
47
48 std::vector<float> temp_Moments;
50 A.expandToFloat( pers->m_momentContainer.m_Mvalue, temp_Moments); // unpacks moments
51
52 std::vector<float>::const_iterator i_mom = temp_Moments.begin();
53 std::vector<float>::const_iterator i_mom_e = temp_Moments.end();
54
55 const std::vector<unsigned short>& keys = pers->m_momentContainer.m_Mkey;
56 unsigned int nkeys = keys.size();
57
58 unsigned int c1=0;
59
60 std::vector<float> tmp_badChannelEta;
61 std::vector<float> tmp_badChannelPhi;
62 Compressor B;
63 B.expandToFloat(pers->m_badEtaList,tmp_badChannelEta);
64 B.expandToFloat(pers->m_badPhiList,tmp_badChannelPhi);
65
66 std::vector<float> tmp_rawE;
67 std::vector<float> tmp_rawEtaPhiM;
69 C.expandToFloat(pers->m_rawE,tmp_rawE);
70 std::vector<float>::const_iterator iraw1 = tmp_rawE.begin();
71 std::vector<float>::const_iterator iraw2 = tmp_rawE.end();
72
73 Compressor D;
74 D.expandToFloat(pers->m_rawEtaPhiM,tmp_rawEtaPhiM);
75 std::vector<float>::const_iterator iraw3 = tmp_rawEtaPhiM.begin();
76 std::vector<float>::const_iterator iraw4 = tmp_rawEtaPhiM.end();
77
78 std::vector<short>::const_iterator ibad1 = pers->m_badClusIndexList.begin();
79 std::vector<short>::const_iterator ibad2 = pers->m_badClusIndexList.end();
80 int nbad=0;
81
82 bool mom_overrun_err = false;
83 bool store_overrun_err = false;
84 bool raw_overrun_err = false;
85 size_t dataStore_size = pers->m_dataStore.size();
86
87 bool fillBad=true;
88 if (tmp_badChannelEta.size() != pers->m_badClusIndexList.size() ||
89 tmp_badChannelPhi.size() != pers->m_badClusIndexList.size() ||
90 pers->m_badLayerStatusList.size() != pers->m_badClusIndexList.size()) {
91 log << MSG::WARNING << " problem to decode bad channel information, not filled..." << endmsg;
92 fillBad=false;
93 }
94
95 short index=0;
96 for(;itp!=itp_e;++itp) {
97 index++;
98
99 CaloCluster* transCluster = clusters.nextElementPtr();// Get next ptr for next cluster
100 persToTrans(&(*itp),transCluster,
101 showerLinkState,
102 cellLinkState,
103 log); //Convert Cluster-quantities
104
105 CaloSamplingData *trDS =&(transCluster->m_dataStore);
106
108 int nVar=trDS->getNumberOfVariableTypes();
109 int nSamplings=trDS->getNumberOfSamplings();
110
113
114 for (int i=0;i<nVar;++i) {// here loops to read them in ...
115 if (testbit (trDS->m_varTypePattern, i)) {
116
117 // can be optimized: no decoding for each variable.
118 for (int j=0;j<nSamplings; ++j){
119
120 if ( testbit(transCluster->m_samplingPattern, j) ){
121 float val;
122 if (c1 < dataStore_size)
123 val = pers->m_dataStore[c1++];
124 else {
125 val = 0;
126 if (!store_overrun_err) {
127 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
128 "CaloClusterContainerCnv_p5")
129 << "Corrupted data: data store array overrun "
130 << pers->m_vec.size() << " clusters "
131 << nkeys << " moment keys "
132 << temp_Moments.size() << " total moments.";
133 store_overrun_err = true;
134 }
135 }
136 trDS->storeData(static_cast<vartype>(i),
137 static_cast<samptype>(j),
138 val);
139 }
140 else{
141
142 trDS->removeVariable(static_cast<vartype>(i),
143 static_cast<samptype>(j));
144 //std::cout<<"a:0"<<"\t";
145 }
146 }
147 // std::cout<<std::endl;
148 }
149 else
150 trDS->removeVariable(static_cast<vartype>(i));
151 }
152
153 transCluster->m_barrel= (bool)(0x001ff00f & transCluster->m_samplingPattern);
154 transCluster->m_endcap= (bool)(0x00e00ff0 & transCluster->m_samplingPattern);
155 // std::cout<<" <<< Read"<<std::endl;
156
157
158 //Convert moment store
160 for (unsigned short i=0;i<nkeys;++i) {
161 float val;
162 if (i_mom == i_mom_e) {
163 val = 0;
164 if (!mom_overrun_err) {
165 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
166 "CaloClusterContainerCnv_p5")
167 << "Corrupted data: moment array overrun "
168 << pers->m_vec.size() << " clusters "
169 << nkeys << " moment keys "
170 << temp_Moments.size() << " total moments.";
171 mom_overrun_err = true;
172 }
173 }
174 else {
175 val = *i_mom;
176 ++i_mom;
177 }
178 transStore.insert (transStore.end(), CaloClusterMomentStore::moment_store::value_type( keys[i], val ) );
179 }
180 transCluster->m_momentStore.setMomentStore (std::move (transStore));
181
182 // fill bad channel information
183 transCluster->resetBadChannel();
184 if (fillBad){
185 while (ibad1 != ibad2 && (*ibad1) ==index) {
186 float eta = tmp_badChannelEta[nbad] + transCluster->eta();
187 float phi = CaloPhiRange::fix(tmp_badChannelPhi[nbad] + transCluster->phi());
188 short status=pers->m_badLayerStatusList[nbad];
189 CaloSampling::CaloSample layer = (CaloSampling::CaloSample) (status & 0xff);
190 CaloBadChannel flag = CaloBadChannel( ((status>>8) & 0xff) );
191 CaloClusterBadChannelData data(eta,phi,layer,flag);
192 // std::cout << " add bad channel data " << transCluster << " " << eta << " " << phi << " " << layer << " " << status << " " << flag.packedData() << std::endl;
193 transCluster->addBadChannel(data);
194 ++ibad1;
195 ++nbad;
196 }
197 }
198
199// fill raw E,eta,phi,M
200 if (iraw1 != iraw2) {
201 if (std::fabs(transCluster->e())>0.1) {
202 transCluster->m_rawE = (*iraw1) * transCluster->e();
203 }
204 else
205 transCluster->m_rawE = (*iraw1);
206 ++iraw1;
207 }
208 if (iraw3 != iraw4) {
209 transCluster->m_rawEta = (*iraw3) + transCluster->eta();
210 ++iraw3;
211 }
212 if (iraw3 != iraw4) {
213 transCluster->m_rawPhi = CaloPhiRange::fix((*iraw3)+transCluster->phi());
214 ++iraw3;
215 }
216 if (iraw3 == iraw4 && !raw_overrun_err) {
217 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
218 "CaloClusterContainerCnv_p5")
219 << "Corrupted data: raw array overrun "
220 << pers->m_vec.size() << " clusters "
221 << tmp_rawE.size() << " raw values.";
222 raw_overrun_err = true;
223 }
224 if (iraw3 != iraw4) {
225 transCluster->m_rawM = (*iraw3);
226 ++iraw3;
227 }
228 // std::cout << " perstotrans rawE/eta/phi/M " << transCluster->m_rawE << " " << transCluster->m_rawEta << " " <<
229 // transCluster->m_rawPhi << " " << transCluster->m_rawM << std::endl;
230
231 // no alt calib information available in p5 persistent
232 transCluster->m_altE=0.;
233 transCluster->m_altEta=0.;
234 transCluster->m_altPhi=0.;
235 transCluster->m_altM=0.;
236
237 trans->push_back(transCluster);
238 }
239
240 if (i_mom != i_mom_e && !mom_overrun_err) {
241 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
242 "CaloClusterContainerCnv_p5")
243 << "Corrupted data: not all moments read "
244 << pers->m_vec.size() << " clusters "
245 << nkeys << " moment keys "
246 << temp_Moments.size() << " total moments "
247 << i_mom-temp_Moments.begin() << " read.";
248 }
249
250 if (c1 != dataStore_size && !store_overrun_err) {
251 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
252 "CaloClusterContainerCnv_p5")
253 << "Corrupted data: not all data store members read "
254 << dataStore_size << " elements "
255 << c1 << " read.";
256 }
257
258 if (iraw1 != iraw2 && !raw_overrun_err) {
259 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
260 "CaloClusterContainerCnv_p5")
261 << "Corrupted data: not all raw values read "
262 << pers->m_vec.size() << " clusters "
263 << tmp_rawE.size() << " raw values "
264 << iraw1-tmp_rawE.begin() << " read.";
265 }
266
267 if (iraw3 != iraw4 && !raw_overrun_err) {
268 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
269 "CaloClusterContainerCnv_p5")
270 << "Corrupted data: not all raw values read "
271 << pers->m_vec.size() << " clusters "
272 << tmp_rawEtaPhiM.size() << " raw values "
273 << iraw3-tmp_rawEtaPhiM.begin() << " read.";
274 }
275
276
277 if (ibad1 != ibad2) {
278 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
279 "CaloClusterContainerCnv_p5")
280 << "Corrupted data: not all bad data read "
281 << pers->m_badClusIndexList.size() << " bad values "
282 << nbad << " read.";
283 }
284
285 //Convert TowerSegment
286 CaloTowerSeg seg;
287 m_caloTowerSegCnv.persToTrans(&(pers->m_towerSeg),&seg);
288 trans->setTowerSeg (seg);
289}
290
291
294 MsgStream &log) const
295{
296 if (log.level() <= MSG::DEBUG) log<< MSG::DEBUG << "Writing CaloClusterContainerCnv_p5" << endmsg;
297
298
299 // reset element link converters, and provide container name lookup table
300 ShowerLinkState showerLinkState (pers->m_linkNames);
301 CellLinkState cellLinkState (pers->m_linkNames);
302
303 pers->m_vec.resize(trans->size());
307
308 pers->m_badClusIndexList.clear();
309 pers->m_badLayerStatusList.clear();
310 pers->m_badEtaList.clear();
311 pers->m_badPhiList.clear();
312
313 pers->m_rawEtaPhiM.clear();
314 pers->m_rawE.clear();
315
316 // Set varTypePattern to the OR of the patterns of all clusters.
317 // (For samplings.)
318 // Trigger can make cluster collections with multiple pattern masks!
319 //
320 // Also pick up moment keys here. Trigger can make clusters with no
321 // stored moments, so we need to look until we find one that isn't empty.
322 // Store the moment keys and their number.
323 pers->m_varTypePattern=0;
324 pers->m_momentContainer.m_Mkey.clear();
326 for (CaloClusterContainer::const_iterator it2 = it; it2 != it_e; ++it2)
327 {
328 const CaloCluster& cl = **it2;
329 const CaloClusterMomentStore& ms = cl.m_momentStore;
330 pers->m_varTypePattern |= cl.m_dataStore.m_varTypePattern;
331
332 if (pers->m_momentContainer.m_nMoments == 0 && ms.size() != 0) {
334 int nMom=ms.size();
335 pers->m_momentContainer.m_nMoments = nMom;
336 for (int w=0; w<nMom; w++){ // here stores moment keys per container not cluster
337 pers->m_momentContainer.m_Mkey.push_back(mit.getMomentType());
338 ++mit;
339 }
340 }
341 else if (ms.size() > 0 && pers->m_momentContainer.m_nMoments != ms.size())
342 {
343 REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING,
344 "CaloClusterContainerCnv_p5")
345 << "Inconsistent number of cluster moments: cluster "
346 << it2 - trans->begin() << " of " << trans->size()
347 << " have " << ms.size()
348 << " expect " << pers->m_momentContainer.m_nMoments;
349 }
350
351 }
352
353 std::vector<float> temp_Moments;
354 temp_Moments.reserve (trans->size() * pers->m_momentContainer.m_nMoments);
355 std::vector<float> tmp_badChannelEta;
356 std::vector<float> tmp_badChannelPhi;
357
358 std::vector<float> tmp_rawE;
359 std::vector<float> tmp_rawEtaPhiM;
360 tmp_rawE.reserve(trans->size());
361 tmp_rawEtaPhiM.reserve(3*trans->size());
362
363
364 short index=0;
365 for(;it!=it_e;++it,++itp) { // LOOP over clusters
366 const CaloCluster& cl = **it;
367 index++;
368 transToPers(&cl,&(*itp),
369 showerLinkState,
370 cellLinkState,
371 log); // tP of CaloCluster to CaloCluster_p
372
373 const CaloSamplingData* trDS=&cl.m_dataStore; //transient
374 int nVar=trDS->getNumberOfVariableTypes();
375 int nSamplings=trDS->getNumberOfSamplings();
376// std::cout<<"vars:"<<nVar<<"\t samplings:"<<nSamplings<<std::endl;
377// std::cout<<"b:"<<(*it)->m_barrel<<"\te:"<<(*it)->m_endcap<<std::endl;
378// std::cout<<"sPattern: "<<(*it)->m_samplingPattern<<"\tgB:"<<(0x001ff00f & (*it)->m_samplingPattern) <<"\tgEC:"<< (0x00e00ff0 & (*it)->m_samplingPattern) <<std::endl;
379
382
383 for (int i=0;i<nVar;++i) {
384 if (testbit (pers->m_varTypePattern, i)) {
385 // We're writing this pattern. Was it in the cluster?
386 if (testbit (trDS->m_varTypePattern, i)) {
387 // Yes, store it.
388 for (int j=0;j<nSamplings; ++j)
389 if ( testbit(cl.m_samplingPattern, j)) {
390 pers->m_dataStore.push_back(trDS->retrieveData
391 (static_cast<vartype>(i),
392 static_cast<samptype>(j)));
393 }
394 }
395 else {
396 // Not in the cluster. Store 0's.
397 for (int j=0;j<nSamplings; ++j)
398 if ( testbit(cl.m_samplingPattern, j))
399 pers->m_dataStore.push_back(0);
400 }
401 }
402 else{
403 // We're not writing. Check that nothing was stored...
404 for (int j=0;j<nSamplings; ++j)
405 if ( testbit(cl.m_samplingPattern, j))
406 if(trDS->retrieveData(static_cast<vartype>(i),
407 static_cast<samptype>(j)))
408 if (log.level() <= MSG::DEBUG) log<< MSG::DEBUG<<"BIG PROBLEM ! not stored and has value:"
409 <<trDS->retrieveData(static_cast<vartype>(i),
410 static_cast<samptype>(j))
411 <<"\t var: "<<i
412 <<"\t sampling: "<<j<<endmsg;
413 }
414 }
415
416
417 //CaloClusterMomentStore::moment_iterator itm=cl.m_momentStore.begin();
418 //CaloClusterMomentStore::moment_iterator itm_e=cl.m_momentStore.end();
419
420 std::vector<unsigned short>::const_iterator itk =
421 pers->m_momentContainer.m_Mkey.begin();
422 std::vector<unsigned short>::const_iterator itk_e =
423 pers->m_momentContainer.m_Mkey.end();
425 cl.m_momentStore.begin();
427 cl.m_momentStore.end();
428 for (; itk != itk_e; ++itk) {
429 float val = 0;
430 if (itm != itm_e && itm.getMomentType() == *itk) {
431 val = (*itm).getValue();
432 ++itm;
433 }
434 else {
435 itm = cl.m_momentStore.find
436 (static_cast<CaloClusterMomentStore::moment_type> (*itk));
437 if (itm != itm_e) {
438 val = (*itm).getValue();
439 ++itm;
440 }
441 }
442 temp_Moments.push_back(val);
443 }
444
445// bad channel info
446 const CaloCluster::badChannelList* badlist = cl.getBadChannel();
447 // std::cout << " transtopers: bad channel size " << badlist->size() << std::endl;
448 for (const CaloClusterBadChannelData& bad : *badlist) {
449 pers->m_badClusIndexList.push_back(index);
450 float etac = bad.getEta()-(cl.eta());
451 float phic = CaloPhiRange::diff(bad.getPhi(),cl.phi());
452 CaloSampling::CaloSample sampl = bad.getLayer();
453 CaloBadChannel flag = bad.getFlag();
454 short status = ((sampl & 0xff) | ((flag.packedData() & 0xff) << 8));
455 tmp_badChannelEta.push_back(etac);
456 tmp_badChannelPhi.push_back(phic);
457 pers->m_badLayerStatusList.push_back(status);
458 }
459
460// raw E-eta-phi-M
461 // std::cout << "transtopers: rawE/eta/phi/M " << (*it)->m_rawE << " " << (*it)->m_rawEta << " " << (*it)->m_rawPhi << " " << (*it)->m_rawM << std::endl;
462 double e = cl.e();
463 if (std::fabs(e)>0.1) {
464 float eratio = cl.m_rawE / e;
465 tmp_rawE.push_back( eratio);
466 }
467 else
468 tmp_rawE.push_back( cl.m_rawE);
469 tmp_rawEtaPhiM.push_back( cl.m_rawEta-cl.eta());
470 float dphi = CaloPhiRange::diff ( cl.m_rawPhi, cl.phi());
471 tmp_rawEtaPhiM.push_back( dphi);
472 tmp_rawEtaPhiM.push_back( cl.m_rawM);
473 } // end of loop over clusters
474
475
477 A.setNrBits(16);
478 // A.setIgnoreSign();
479 A.reduce(temp_Moments,pers->m_momentContainer.m_Mvalue); // packs moments
480
481 Compressor B;
482 B.setNrBits(16);
483 B.reduce(tmp_badChannelEta,pers->m_badEtaList);
484 B.reduce(tmp_badChannelPhi,pers->m_badPhiList);
485
487 C.setNrBits(21);
488 C.reduce(tmp_rawE,pers->m_rawE);
489
490
491 Compressor D;
492 D.setNrBits(16);
493 D.reduce(tmp_rawEtaPhiM,pers->m_rawEtaPhiM);
494
495
496 m_caloTowerSegCnv.transToPers(&trans->getTowerSeg(),&(pers->m_towerSeg));
497
498}
499
500
503 ShowerLinkState& showerLinkState,
504 CellLinkState& cellLinkState,
505 MsgStream& log) const
506{
507 trans->setDefaultSignalState (P4SignalState::CALIBRATED);
508 trans->setBasicEnergy (pers->m_basicSignal);
509 trans->setTime (pers->m_time);
510 trans->m_samplingPattern=pers->m_samplingPattern;
511 trans->m_eta0=pers->m_eta0;
512 trans->m_phi0=pers->m_phi0;
513 trans->m_status = CaloRecoStatus(pers->m_caloRecoStatus);
514 trans->setClusterSize (pers->m_clusterSize);
515
516 //Convert base class and element links
517 m_P4EEtaPhiMCnv.persToTrans(&pers->m_P4EEtaPhiM,static_cast<P4EEtaPhiM*>(trans),log);
518 m_showerElementLinkCnv.persToTrans(showerLinkState, pers->m_dataLink, trans->m_dataLink,log);
519 m_cellElementLinkCnv.persToTrans(cellLinkState, pers->m_cellLink, trans->m_cellLink,log);
520 trans->setAthenaBarCode (IAthenaBarCode::UNDEFINEDBARCODE);
521
522}
523
524
527 ShowerLinkState& showerLinkState,
528 CellLinkState& cellLinkState,
529 MsgStream& log) const
530{
531 pers->m_basicSignal=trans->getBasicEnergy();
532 pers->m_time=trans->getTime();
533 pers->m_samplingPattern=trans->m_samplingPattern;
534 pers->m_eta0=trans->eta0();
535 pers->m_phi0=trans->phi0();
536 pers->m_caloRecoStatus=trans->m_status.getStatusWord();
537 pers->m_clusterSize=trans->getClusterSize();
538
539 //Convert base class and element links
540 P4EEtaPhiM tmp = *trans;
541 m_P4EEtaPhiMCnv.transToPers(&tmp,&pers->m_P4EEtaPhiM,log);
542 m_showerElementLinkCnv.transToPers(showerLinkState, trans->m_dataLink, pers->m_dataLink,log);
543 m_cellElementLinkCnv.transToPers(cellLinkState, trans->m_cellLink, pers->m_cellLink,log);
544}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define endmsg
CaloPhiRange class declaration.
Helpers for checking error return status codes and reporting errors.
#define REPORT_MESSAGE_WITH_CONTEXT(LVL, CONTEXT_NAME)
Report a message, with an explicitly specified context name.
#define x
ElementLinkCnv_p2< ElementLink< CaloShowerContainer > > m_showerElementLinkCnv
ElementLinkCnv_p2< ElementLink< CaloCellLinkContainer > > m_cellElementLinkCnv
ElementLinkCnv_p2< ElementLink< CaloShowerContainer > >::State ShowerLinkState
virtual void transToPers(const CaloClusterContainer *trans, CaloClusterContainer_p5 *pers, MsgStream &log) const override
ElementLinkCnv_p2< ElementLink< CaloCellLinkContainer > >::State CellLinkState
virtual void persToTrans(const CaloClusterContainer_p5 *pers, CaloClusterContainer *trans, MsgStream &log) const override
std::vector< unsigned int > m_rawE
std::vector< float > m_dataStore
CaloClusterMomentContainer_p2 m_momentContainer
std::vector< short > m_badClusIndexList
contType::const_iterator const_iterator
ElementLinkContNames_p2 m_linkNames
std::vector< unsigned int > m_badPhiList
std::vector< short > m_badLayerStatusList
std::vector< unsigned int > m_badEtaList
std::vector< unsigned int > m_rawEtaPhiM
Stores CaloClusterMoment in a keyed map.
CaloClusterMomentIterator moment_iterator
External moment iterator type.
virtual void setMomentStore(const moment_store &rMomStore)
Set internal store.
CaloClusterMoment::MomentType moment_type
Moment type.
std::map< moment_key, moment_value > moment_store
Internal moment store type.
Principal data class for CaloCell clusters.
CaloClusterMomentStore m_momentStore
cluster moments
void resetBadChannel()
Reset Bad channel list.
unsigned int m_samplingPattern
Sampling pattern.
double m_altE
Stores calibrated (cell weight) signal.
void addBadChannel(const CaloClusterBadChannelData &badChannel)
Add Bad channel information.
virtual double e() const
Retrieve energy independent of signal state.
double m_altPhi
Stores calibrated (cell weight) signal.
std::vector< CaloClusterBadChannelData > badChannelList
Get Bad Channel information.
virtual double eta() const
Retrieve eta independent of signal state.
bool m_endcap
Flag is true if at least one cell in EMB.
double m_altM
Stores calibrated (cell weight) signal.
virtual double phi() const
Retrieve phi independent of signal state.
CaloSamplingData m_dataStore
{\ brief Cached Stores
bool m_barrel
Flag is true if at least one cell in EMB.
double m_altEta
Stores calibrated (cell weight) signal.
static double fix(double phi)
static double diff(double phi1, double phi2)
simple phi1 - phi2 calculation, but result is fixed to respect range.
reconstruction status indicator
Simple data object to store all variables in calorimeter samplings.
size_t getNumberOfSamplings() const
Set variable type pattern for this store.
CaloVariableType::VariableType variable_key_type
Variable look-up type.
unsigned int m_varTypePattern
value_type retrieveData(variable_key_type theVariable, sampling_key_type theSampling) const
Retrieve const reference to individual variable.
CaloSampling::CaloSample sampling_key_type
Sampling look-up key type.
size_t getNumberOfVariableTypes() const
Return number of variable types.
bool storeData(variable_key_type theVariable, sampling_key_type theSampling, value_type theData)
}
bool removeVariable(variable_key_type theVariable, sampling_key_type theSampling)
Remove a certain variable.
Data object stores CaloTower segmentation.
void expandToFloat(const std::vector< unsigned int > &vc, std::vector< float > &vf)
void setNrBits(int bits)
Definition Compressor.h:36
void reduce(const std::vector< float > &vf, std::vector< unsigned int > &vi)
a typed memory pool that saves time spent allocation small object.
Definition DataPool.h:63
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:861
static const AthenaBarCode_t UNDEFINEDBARCODE
TH1F * trans(TH1F *h, bool t=false)
struct color C
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition index.py:1
hold the test vectors and ease the comparison