ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Calorimeter
CaloCnv
CaloSimEventTPCnv
src
SrCaloCalibrationHitContainerCnv_p1.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
CaloSimEventTPCnv/SrCaloCalibrationHitContainerCnv_p1.h
"
6
7
#include "
CxxUtils/Compressor.h
"
8
#include "
CaloIdentifier/CaloCell_ID.h
"
9
#include "
CaloIdentifier/CaloDM_ID.h
"
10
#include "
CaloIdentifier/CaloIdManager.h
"
11
#include "
CaloSimEvent/CaloCalibrationHit.h
"
12
#include "
CaloSimEvent/SrCaloCalibrationHitContainer.h
"
13
#include "Identifier/Identifier.h"
14
#include "
Identifier/IdentifierHash.h
"
15
#include <map>
16
17
void
SrCaloCalibrationHitContainerCnv_p1::transToPers
(
18
const
SrCaloCalibrationHitContainer
* transCont,
19
SrCaloCalibrationHitContainer_p1
* persCont, MsgStream& log) {
20
21
size_t
size
= transCont->
size
();
22
if
(log.level() <= MSG::DEBUG)
23
log << MSG::DEBUG
24
<<
" *** Writing SrCaloCalibrationHitContainer_p1 of size: "
<<
size
25
<<
endmsg
;
26
27
persCont->
m_channelHash
.reserve(
size
);
28
std::vector<float> tempE;
29
tempE.reserve(
size
* 4);
30
std::vector<unsigned int> tempPID;
31
tempPID.reserve(
size
);
32
SrCaloCalibrationHitContainer::const_iterator
it = transCont->
begin
();
33
34
std::multimap<unsigned long long, unsigned int>
35
map_hashPositions;
// first hash ; second its position in container
36
37
for
(
unsigned
int
w = 0; w <
size
; ++w) {
38
unsigned
long
long
id
= (*it)->cellID().get_compact();
39
map_hashPositions.insert(std::pair<unsigned long long, int>(
id
, w));
40
++it;
41
}
42
43
std::multimap<unsigned long long, unsigned int>::const_iterator iter;
44
unsigned
long
long
old = 0;
45
46
for
(iter = map_hashPositions.begin(); iter != map_hashPositions.end();
47
++iter) {
48
unsigned
long
long
pHash = (iter->first) - old;
49
old = iter->first;
50
unsigned
int
pos = iter->second;
51
persCont->
m_channelHash
.push_back(pHash);
52
const
CaloCalibrationHit
&
hit
= *transCont->
At
(pos);
53
tempE.push_back(
static_cast<
float
>
(
hit
.energyEM()));
54
tempE.push_back(
static_cast<
float
>
(
hit
.energyNonEM()));
55
tempE.push_back(
static_cast<
float
>
(
hit
.energyInvisible()));
56
tempE.push_back(
static_cast<
float
>
(
hit
.energyEscaped()));
57
tempPID.push_back(
static_cast<
unsigned
int
>
(
hit
.particleID()));
58
}
59
// For future development: use Compressor class to reduce size of energy
60
// storage ?
61
// Compressor A; A.setNrBits(18);
62
// A.reduce(tempE,persCont->m_energy); // packs energy
63
persCont->
m_energy
= std::move(tempE);
// Store directly without compression
64
persCont->
m_name
= transCont->
Name
();
// stores name
65
persCont->
m_particleID
= std::move(tempPID);
66
}
67
68
void
SrCaloCalibrationHitContainerCnv_p1::persToTrans
(
69
const
SrCaloCalibrationHitContainer_p1
* persCont,
70
SrCaloCalibrationHitContainer
* transCont, MsgStream& log) {
71
size_t
cells = persCont->
m_channelHash
.size();
72
if
(log.level() <= MSG::DEBUG)
73
log << MSG::DEBUG
74
<<
" *** Reading SrCaloCalibrationHitContainer of size: "
<< cells
75
<<
endmsg
;
76
transCont->
clear
();
77
transCont->
reserve
(cells);
78
transCont->
setName
(persCont->
name
());
79
80
// For future development: use Compressor class to reconstruct energy values
81
// Compressor A;
82
// std::vector<float> tempE;
83
const
std::vector<float>& tempE = persCont->
m_energy
;
// Direct reference
84
// tempE.reserve(cells*4);
85
// A.expandToFloat(persCont->m_energy,tempE);
86
87
unsigned
long
long
sum = 0;
88
for
(
unsigned
int
i = 0; i < cells; ++i) {
89
sum += persCont->
m_channelHash
[i];
90
transCont->
push_back
(
new
CaloCalibrationHit
(
91
static_cast<
Identifier
>
(sum), tempE[i * 4], tempE[i * 4 + 1],
92
tempE[i * 4 + 2], tempE[i * 4 + 3],
93
static_cast<
int
>
(persCont->
m_particleID
[i]),
94
HepMC::INVALID_PARTICLE_ID
));
95
}
96
}
endmsg
#define endmsg
Definition
AnalysisConfig_Ntuple.cxx:54
CaloCalibrationHit.h
CaloCell_ID.h
CaloDM_ID.h
CaloIdManager.h
Compressor.h
IdentifierHash.h
hit
bool hit(const Container &ids, int pdgId)
Definition
JetIRCSafeLabelTool.cxx:64
SrCaloCalibrationHitContainerCnv_p1.h
SrCaloCalibrationHitContainer.h
size
size_t size() const
Number of registered mappings.
AthenaHitsVector::reserve
void reserve(size_type n)
Definition
AthenaHitsVector.h:230
AthenaHitsVector::setName
void setName(const std::string &name)
Definition
AthenaHitsVector.h:180
AthenaHitsVector::At
const T * At(unsigned int pos) const
Definition
AthenaHitsVector.h:204
AthenaHitsVector::clear
void clear()
Definition
AthenaHitsVector.h:222
AthenaHitsVector::begin
const_iterator begin() const
Definition
AthenaHitsVector.h:187
AthenaHitsVector::size
size_type size() const
Definition
AthenaHitsVector.h:199
AthenaHitsVector::Name
const std::string & Name() const
Definition
AthenaHitsVector.h:178
AthenaHitsVector< CaloCalibrationHit >::const_iterator
boost::transform_iterator< make_const, typename CONT::const_iterator > const_iterator
Definition
AthenaHitsVector.h:105
AthenaHitsVector::push_back
void push_back(T *t)
Definition
AthenaHitsVector.h:201
CaloCalibrationHit
Class to store calorimeter calibration hit.
Definition
CaloCalibrationHit.h:24
SrCaloCalibrationHitContainerCnv_p1::transToPers
virtual void transToPers(const SrCaloCalibrationHitContainer *transColl, SrCaloCalibrationHitContainer_p1 *persColl, MsgStream &log)
Definition
SrCaloCalibrationHitContainerCnv_p1.cxx:17
SrCaloCalibrationHitContainerCnv_p1::persToTrans
virtual void persToTrans(const SrCaloCalibrationHitContainer_p1 *persColl, SrCaloCalibrationHitContainer *transColl, MsgStream &log)
Definition
SrCaloCalibrationHitContainerCnv_p1.cxx:68
SrCaloCalibrationHitContainer_p1
Definition
SrCaloCalibrationHitContainer_p1.h:15
SrCaloCalibrationHitContainer_p1::m_particleID
std::vector< unsigned int > m_particleID
Definition
SrCaloCalibrationHitContainer_p1.h:26
SrCaloCalibrationHitContainer_p1::m_channelHash
std::vector< unsigned long long > m_channelHash
Definition
SrCaloCalibrationHitContainer_p1.h:23
SrCaloCalibrationHitContainer_p1::m_name
std::string m_name
Definition
SrCaloCalibrationHitContainer_p1.h:25
SrCaloCalibrationHitContainer_p1::name
const std::string & name() const
Definition
SrCaloCalibrationHitContainer_p1.h:33
SrCaloCalibrationHitContainer_p1::m_energy
std::vector< float > m_energy
Definition
SrCaloCalibrationHitContainer_p1.h:24
SrCaloCalibrationHitContainer
Definition
SrCaloCalibrationHitContainer.h:25
HepMC::INVALID_PARTICLE_ID
constexpr int INVALID_PARTICLE_ID
Definition
MagicNumbers.h:58
Identifier
Definition
IdentifierFieldParser.cxx:14
Generated on
for ATLAS Offline Software by
1.17.0