ATLAS Offline Software
CaloClusterContainerCnv_p3.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
8 
11 
13  CaloClusterContainer* trans,
14  MsgStream &log) const
15 {
16  if (log.level() <= MSG::DEBUG) log<< MSG::DEBUG << "Reading CaloClusterContainerCNV_p3" << endmsg;
17 
18  // reset element link converters, and provide container name lookup table
19  ShowerLinkState showerLinkState (pers->m_linkNames);
20  CellLinkState cellLinkState (pers->m_linkNames);
21 
22  // Use data pool for clusters to avoid calling constructor for each event
24 
25  trans->clear (SG::VIEW_ELEMENTS);
26  trans->reserve(pers->m_vec.size());
27 
30  pers->m_vec.size(),
31  samplingState))
32  {
33  REPORT_MESSAGE_WITH_CONTEXT(MSG::WARNING, "CaloClusterContainerCnv_p3")
34  << "Not converting CaloClusterContainer.";
35  return;
36  }
37 
40 
41  std::vector<float> temp_Moments;
42  Compressor A;
43  A.expandToFloat( pers->m_momentContainer.m_Mvalue, temp_Moments); // unpacks moments
44 
45  std::vector<float>::const_iterator i_mom = temp_Moments.begin();
46 
47  const std::vector<unsigned short>& keys = pers->m_momentContainer.m_Mkey;
48  unsigned int nkeys = keys.size();
49 
50  for(;itp!=itp_e;++itp) {
51  // Get next ptr for next cluster
52  CaloCluster* transCluster = clusters.nextElementPtr();
53  //Convert Cluster-quantities
54  persToTrans(&(*itp),transCluster,
55  showerLinkState,
56  cellLinkState,
57  log);
58  //Convert sampling data store
60  samplingState);
61 
62  //Convert moment store
64  for (unsigned short i=0;i<nkeys;++i) {
65  transStore.insert (transStore.end(), CaloClusterMomentStore::moment_store::value_type( keys[i], (*i_mom) ) );
66  //std::cout<<"imom: "<<(*i_key)<<" "<<(*i_mom)<<"\t";
67  ++i_mom;
68  }
69  transCluster->m_momentStore.setMomentStore (std::move (transStore));
70  //std::cout<<std::endl;
71  trans->push_back(transCluster);
72  }
73  //Convert TowerSegment
74  CaloTowerSeg seg;
76  trans->setTowerSeg (seg);
77 }
78 
79 
80 
83  MsgStream &log) const
84 {
85  if (log.level() <= MSG::DEBUG) log<< MSG::DEBUG << "Writing CaloClusterContainerCNV_p3" << endmsg;
86 
87  // reset element link converters, and provide container name lookup table
88  ShowerLinkState showerLinkState (pers->m_linkNames);
89  CellLinkState cellLinkState (pers->m_linkNames);
90 
91  pers->m_vec.resize(trans->size());
95 
96 
97  // moment keys are done here - once per container - we store keys and number of them
98  pers->m_momentContainer.m_Mkey.clear();
99  if (it!=it_e) {
100  const CaloClusterMomentStore* ms=&((*it)->m_momentStore);
101  CaloClusterMomentStore::moment_iterator mit=((*it)->m_momentStore).begin();
102  int nMom=ms->size();
103  pers->m_momentContainer.m_nMoments = nMom;
104  for (int w=0; w<nMom; w++){ // here stores moment keys per container not cluster
105  // std::cout<<"key: "<<mit.getMomentType()<<"\t";
106  pers->m_momentContainer.m_Mkey.push_back(mit.getMomentType());
107  ++mit;
108  }
109  // std::cout<<std::endl;
110  }
111  else
112  pers->m_momentContainer.m_nMoments = 0;
113 
114  std::vector<float> temp_Moments;
115 
116  for(;it!=it_e;++it,++itp) {
117  transToPers(*it,&(*itp),
118  showerLinkState,
119  cellLinkState,
120  log);
121  m_samplingDataContainerCnv.transToPers(&((*it)->m_dataStore),&(pers->m_samplingDataContainer),log);
122 
123  CaloClusterMomentStore::moment_iterator itm=(*it)->m_momentStore.begin();
124  CaloClusterMomentStore::moment_iterator itm_e=(*it)->m_momentStore.end();
125 
126  for(;itm!=itm_e;++itm) {
127  temp_Moments.push_back(itm.getMoment().getValue());
128  //std::cout<<"mom: "<<itm.getMoment().getValue()<<"\t";
129  }
130  //std::cout<<std::endl;
131  }
132 
133  Compressor A;
134  A.setNrBits(16);
135  // A.setIgnoreSign();
136  A.reduce(temp_Moments,pers->m_momentContainer.m_Mvalue); // packs moments
137 
139 
140 }
141 
142 
143 
145  CaloCluster* trans,
146  ShowerLinkState& showerLinkState,
147  CellLinkState& cellLinkState,
148  MsgStream& log) const
149 {
151  trans->setBasicEnergy (pers->m_basicSignal);
152  trans->setTime (pers->m_time);
153  trans->m_samplingPattern=pers->m_samplingPattern;
154  trans->m_barrel=pers->m_barrel;
155  trans->m_endcap=pers->m_endcap;
156  trans->m_eta0=pers->m_eta0;
157  trans->m_phi0=pers->m_phi0;
158  trans->m_status = CaloRecoStatus(pers->m_caloRecoStatus);
159  trans->setClusterSize (pers->m_clusterSize);
160 
161  //trans->m_barrel=pers->m_samplingPattern & 0x1ff00f; //That's the OR of all barrel-bits
162  //trans->m_endcap=pers->m_samplingPattern & 0xe00ff0; //That's the OR of all endcap-bits
163 
164  //Convert base class and element links
166  m_showerElementLinkCnv.persToTrans(showerLinkState, pers->m_dataLink, trans->m_dataLink,log);
167  m_cellElementLinkCnv.persToTrans(cellLinkState, pers->m_cellLink, trans->m_cellLink,log);
168  trans->setAthenaBarCode (IAthenaBarCode::UNDEFINEDBARCODE);
169 
170 }
171 
172 
175  ShowerLinkState& showerLinkState,
176  CellLinkState& cellLinkState,
177  MsgStream& log) const
178 {
179  pers->m_basicSignal=trans->getBasicEnergy();
180  pers->m_time=trans->getTime();
181  pers->m_samplingPattern=trans->m_samplingPattern;
182  pers->m_barrel=trans->m_barrel;
183  pers->m_endcap=trans->m_endcap;
184  pers->m_eta0=trans->eta0();
185  pers->m_phi0=trans->phi0();
186  pers->m_caloRecoStatus=trans->m_status.getStatusWord();
187  pers->m_clusterSize=trans->getClusterSize();
188 
189  //Convert base class and element links
190  P4EEtaPhiM tmp = *trans;
192  m_showerElementLinkCnv.transToPers(showerLinkState, trans->m_dataLink, pers->m_dataLink,log);
193  m_cellElementLinkCnv.transToPers(cellLinkState, trans->m_cellLink, pers->m_cellLink,log);
194 }
DataVector::reserve
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
CaloClusterContainer_p3::CaloCluster_p::m_samplingPattern
unsigned int m_samplingPattern
Definition: CaloClusterContainer_p3.h:30
CaloCluster::phi0
double phi0() const
Returns raw of cluster seed.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:1186
CaloCluster::m_momentStore
CaloClusterMomentStore m_momentStore
cluster moments
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:480
TruthTest.itp
itp
Definition: TruthTest.py:46
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
CaloCluster::setTime
void setTime(double theTime)
Set cluster time.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:889
IAthenaBarCode::UNDEFINEDBARCODE
static const AthenaBarCode_t UNDEFINEDBARCODE
Definition: AthenaKernel/AthenaKernel/IAthenaBarCode.h:52
CaloClusterContainer_p3
Definition: CaloClusterContainer_p3.h:20
CaloClusterContainer::getTowerSeg
virtual const CaloTowerSeg & getTowerSeg() const
Retrieve tower segmentation.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloClusterContainer.h:104
P4EEtaPhiMCnv_p1::transToPers
virtual void transToPers(const P4EEtaPhiM *transObj, P4EEtaPhiM_p1 *persObj, MsgStream &log) const override
Method creating the persistent representation P4EEtaPhiM_p1 from its transient representation P4EEtaP...
Definition: P4EEtaPhiMCnv_p1.cxx:38
CaloClusterContainer_p3::m_vec
contType m_vec
Definition: CaloClusterContainer_p3.h:51
ElementLinkCnv_p2::transToPers
void transToPers(State &state, const Link_t &trans, PersLink_t &pers, const SG::ThinningCache *cache, MsgStream &log) const
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
CaloCluster::m_eta0
double m_eta0
Cluster seed
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:558
CaloClusterMomentStore::setMomentStore
virtual void setMomentStore(const moment_store &rMomStore)
Set internal store.
Definition: CaloClusterMomentStore.h:253
CaloClusterContainer
Storable container for CaloCluster.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloClusterContainer.h:37
P4EEtaPhiM
Definition: P4EEtaPhiM.h:25
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
CaloClusterContainerCnv_p3::m_caloTowerSegCnv
CaloTowerSegCnv_p1 m_caloTowerSegCnv
Definition: CaloClusterContainerCnv_p3.h:66
CaloSamplingDataContainerCnv_p1::persToTrans
void persToTrans(const CaloSamplingDataContainer_p1 *pers, CaloSamplingData *trans, State &state) const
Definition: CaloSamplingDataContainerCnv_p1.cxx:29
skel.it
it
Definition: skel.GENtoEVGEN.py:423
CaloClusterMomentContainer_p2::m_nMoments
unsigned short m_nMoments
Definition: CaloClusterMomentContainer_p2.h:14
CaloClusterContainer_p3::CaloCluster_p::m_time
float m_time
Definition: CaloClusterContainer_p3.h:26
CaloClusterMomentStore::CaloClusterMomentIterator
Internally used iterator.
Definition: CaloClusterMomentStore.h:54
CaloCluster::getBasicEnergy
virtual double getBasicEnergy() const
Access basic energy scale signal.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:876
CaloCluster::setDefaultSignalState
bool setDefaultSignalState(signalstate_t s)
Sets default signal state.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:865
python.SystemOfUnits.ms
int ms
Definition: SystemOfUnits.py:132
CaloClusterMomentContainer_p2::m_Mvalue
std::vector< unsigned int > m_Mvalue
Definition: CaloClusterMomentContainer_p2.h:19
CaloClusterContainer_p3::const_iterator
contType::const_iterator const_iterator
Definition: CaloClusterContainer_p3.h:48
CaloClusterContainer_p3::CaloCluster_p::m_barrel
bool m_barrel
Definition: CaloClusterContainer_p3.h:34
CaloClusterMomentStore
Stores CaloClusterMoment in a keyed map.
Definition: CaloClusterMomentStore.h:15
Compressor
Definition: Compressor.h:26
CaloTowerSegCnv_p1::persToTrans
void persToTrans(const CaloTowerSeg_p1 *, CaloTowerSeg *) const
Definition: CaloTowerSegCnv_p1.cxx:9
dqt_zlumi_alleff_HIST.A
A
Definition: dqt_zlumi_alleff_HIST.py:110
CaloClusterContainer_p3::CaloCluster_p::m_endcap
bool m_endcap
Definition: CaloClusterContainer_p3.h:35
CaloClusterNavigable::m_cellLink
cell_link_type m_cellLink
Local pointer to cell store.
Definition: CaloClusterNavigable.h:186
CaloCluster::m_dataLink
data_link_type m_dataLink
{
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:488
CaloClusterContainerCnv_p3::transToPers
virtual void transToPers(const CaloClusterContainer *trans, CaloClusterContainer_p3 *pers, MsgStream &log) const override
Definition: CaloClusterContainerCnv_p3.cxx:81
CaloClusterContainerCnv_p3::m_samplingDataContainerCnv
CaloSamplingDataContainerCnv_p1 m_samplingDataContainerCnv
Definition: CaloClusterContainerCnv_p3.h:69
Compressor.h
CaloCluster::m_phi0
double m_phi0
Cluster seed
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:560
lumiFormat.i
int i
Definition: lumiFormat.py:92
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
CaloSamplingDataContainerCnv_p1::State
Definition: CaloSamplingDataContainerCnv_p1.h:18
CaloClusterContainer_p3::CaloCluster_p::m_cellLink
ElementLinkInt_p2 m_cellLink
Definition: CaloClusterContainer_p3.h:42
CaloCluster::m_endcap
bool m_endcap
Flag is true if at least one cell in EMB.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:551
CaloCluster::m_dataStore
CaloSamplingData m_dataStore
{\ brief Cached Stores
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:479
CaloCluster
Principal data class for CaloCell clusters.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:79
CaloClusterContainer_p3::m_samplingDataContainer
CaloSamplingDataContainer_p1 m_samplingDataContainer
Definition: CaloClusterContainer_p3.h:52
CaloTowerSegCnv_p1::transToPers
void transToPers(const CaloTowerSeg *, CaloTowerSeg_p1 *) const
Definition: CaloTowerSegCnv_p1.cxx:23
CaloCluster::m_samplingPattern
unsigned int m_samplingPattern
Sampling pattern.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:501
CaloClusterContainer_p3::m_linkNames
ElementLinkContNames_p2 m_linkNames
Definition: CaloClusterContainer_p3.h:57
P4EEtaPhiMCnv_p1::persToTrans
virtual void persToTrans(const P4EEtaPhiM_p1 *persObj, P4EEtaPhiM *transObj, MsgStream &log) const override
Method creating the transient representation of P4EEtaPhiM from its persistent representation P4EEtaP...
Definition: P4EEtaPhiMCnv_p1.cxx:26
DeMoUpdate.tmp
string tmp
Definition: DeMoUpdate.py:1167
CaloClusterContainer_p3::CaloCluster_p::m_dataLink
ElementLinkInt_p2 m_dataLink
Definition: CaloClusterContainer_p3.h:41
DataVector::clear
void clear()
Erase all the elements in the collection.
ElementLinkCnv_p2::persToTrans
void persToTrans(State &state, const PersLink_t &pers, Link_t &trans, MsgStream &log) const
DataPool.h
CaloClusterContainer_p3::CaloCluster_p::m_clusterSize
unsigned int m_clusterSize
Definition: CaloClusterContainer_p3.h:32
CaloClusterContainerCnv_p3::m_showerElementLinkCnv
ElementLinkCnv_p2< ElementLink< CaloShowerContainer > > m_showerElementLinkCnv
Definition: CaloClusterContainerCnv_p3.h:70
CaloClusterContainerCnv_p3::m_P4EEtaPhiMCnv
P4EEtaPhiMCnv_p1 m_P4EEtaPhiMCnv
Definition: CaloClusterContainerCnv_p3.h:67
REPORT_MESSAGE_WITH_CONTEXT
#define REPORT_MESSAGE_WITH_CONTEXT(LVL, CONTEXT_NAME)
Report a message, with an explicitly specified context name.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:345
CaloClusterContainer_p3::m_towerSeg
CaloTowerSeg_p1 m_towerSeg
Definition: CaloClusterContainer_p3.h:54
CaloCluster::getTime
double getTime() const
Access cluster time.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:886
errorcheck.h
Helpers for checking error return status codes and reporting errors.
CaloSamplingDataContainerCnv_p1::transToPers
void transToPers(const CaloSamplingData *trans, CaloSamplingDataContainer_p1 *pers, MsgStream &log) const
Definition: CaloSamplingDataContainerCnv_p1.cxx:9
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
CaloCompositeKineBase::m_status
CaloRecoStatus m_status
Calorimeter reconstruction status.
Definition: CaloCompositeKineBase.h:58
CaloClusterContainerCnv_p3.h
CaloClusterContainer_p3::CaloCluster_p::m_P4EEtaPhiM
P4EEtaPhiM_p1 m_P4EEtaPhiM
Definition: CaloClusterContainer_p3.h:38
CaloClusterContainer_p3::iterator
contType::iterator iterator
Definition: CaloClusterContainer_p3.h:49
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
CaloClusterContainer_p3::CaloCluster_p
Definition: CaloClusterContainer_p3.h:22
CaloClusterContainerCnv_p3::ShowerLinkState
ElementLinkCnv_p2< ElementLink< CaloShowerContainer > >::State ShowerLinkState
Definition: CaloClusterContainerCnv_p3.h:49
CaloCluster::getClusterSize
unsigned int getClusterSize() const
Get cluster size.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:895
CaloClusterContainerCnv_p3::persToTrans
virtual void persToTrans(const CaloClusterContainer_p3 *pers, CaloClusterContainer *trans, MsgStream &log) const override
Definition: CaloClusterContainerCnv_p3.cxx:12
CaloClusterMomentStore::moment_store
std::map< moment_key, moment_value > moment_store
Internal moment store type.
Definition: CaloClusterMomentStore.h:35
CaloClusterContainerCnv_p3::CellLinkState
ElementLinkCnv_p2< ElementLink< CaloCellLinkContainer > >::State CellLinkState
Definition: CaloClusterContainerCnv_p3.h:51
CaloClusterContainer_p3::CaloCluster_p::m_phi0
float m_phi0
Definition: CaloClusterContainer_p3.h:28
CaloClusterMomentContainer_p2::m_Mkey
std::vector< unsigned short > m_Mkey
Definition: CaloClusterMomentContainer_p2.h:20
CaloClusterContainerCnv_p3::m_cellElementLinkCnv
ElementLinkCnv_p2< ElementLink< CaloCellLinkContainer > > m_cellElementLinkCnv
Definition: CaloClusterContainerCnv_p3.h:71
DEBUG
#define DEBUG
Definition: page_access.h:11
CaloSamplingDataContainerCnv_p1::setState
bool setState(const CaloSamplingDataContainer_p1 *pers, unsigned int ncluster, State &state) const
Definition: CaloSamplingDataContainerCnv_p1.cxx:59
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
CaloCluster::setClusterSize
void setClusterSize(unsigned int theClusterSize)
Set cluster size.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:892
DataPool
a typed memory pool that saves time spent allocation small object. This is typically used by containe...
Definition: DataPool.h:47
P4SignalState::CALIBRATED
@ CALIBRATED
Definition: ISignalState.h:31
CaloRecoStatus::getStatusWord
virtual const store_type & getStatusWord() const
retrieve the entire status word
Definition: CaloRecoStatus.h:112
CaloClusterContainer_p3::CaloCluster_p::m_caloRecoStatus
unsigned int m_caloRecoStatus
Definition: CaloClusterContainer_p3.h:31
CaloCluster::eta0
double eta0() const
Returns raw of cluster seed.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:1180
CaloTowerSeg
Data object stores CaloTower segmentation.
Definition: CaloTowerSeg.h:37
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
CaloClusterContainer::setTowerSeg
virtual void setTowerSeg(const CaloTowerSeg &towerSeg)
Set tower segmentation into CaloClusterContainer.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloClusterContainer.h:101
CaloCluster::setBasicEnergy
virtual void setBasicEnergy(double theEnergy)
Set basic energy scale signal.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:883
python.IoTestsLib.w
def w
Definition: IoTestsLib.py:200
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
CaloCluster::m_barrel
bool m_barrel
Flag is true if at least one cell in EMB.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:549
CaloRecoStatus
reconstruction status indicator
Definition: CaloRecoStatus.h:12
CaloClusterContainer_p3::CaloCluster_p::m_eta0
float m_eta0
Definition: CaloClusterContainer_p3.h:27
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
CaloClusterContainer_p3::CaloCluster_p::m_basicSignal
float m_basicSignal
Definition: CaloClusterContainer_p3.h:25
CaloClusterContainer_p3::m_momentContainer
CaloClusterMomentContainer_p2 m_momentContainer
Definition: CaloClusterContainer_p3.h:53