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) );
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
502 CaloCluster* trans,
503 ShowerLinkState& showerLinkState,
504 CellLinkState& cellLinkState,
505 MsgStream& log) const
506{
508 trans->setBasicEnergy (pers->m_basicSignal);
509 trans->setTime (pers->m_time);
511 trans->m_eta0=pers->m_eta0;
512 trans->m_phi0=pers->m_phi0;
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);
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();
534 pers->m_eta0=trans->eta0();
535 pers->m_phi0=trans->phi0();
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.
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
#define x
virtual void setAthenaBarCode(AthenaBarCode_t id)
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
virtual const CaloTowerSeg & getTowerSeg() const
Retrieve tower segmentation.
virtual void setTowerSeg(const CaloTowerSeg &towerSeg)
Set tower segmentation into CaloClusterContainer.
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.
cell_link_type m_cellLink
Local pointer to cell store.
Principal data class for CaloCell clusters.
double eta0() const
Returns raw of cluster seed.
CaloClusterMomentStore m_momentStore
cluster moments
virtual double getBasicEnergy() const
Access basic energy scale signal.
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.
double getTime() const
Access cluster time.
bool m_endcap
Flag is true if at least one cell in EMB.
double m_altM
Stores calibrated (cell weight) signal.
bool setDefaultSignalState(signalstate_t s)
Sets default signal state.
void setClusterSize(unsigned int theClusterSize)
Set cluster size.
void setTime(double theTime)
Set cluster time.
unsigned int getClusterSize() const
Get cluster size.
virtual double phi() const
Retrieve phi independent of signal state.
CaloSamplingData m_dataStore
{\ brief Cached Stores
virtual void setBasicEnergy(double theEnergy)
Set basic energy scale signal.
double phi0() const
Returns raw of cluster seed.
bool m_barrel
Flag is true if at least one cell in EMB.
double m_altEta
Stores calibrated (cell weight) signal.
CaloRecoStatus m_status
Calorimeter reconstruction status.
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
virtual const store_type & getStatusWord() const
retrieve the entire status word
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:838
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
void clear()
Erase all the elements in the collection.
static const AthenaBarCode_t UNDEFINEDBARCODE
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