Function executing the algorithm.
46 {
47 SG::ReadHandle<xAOD::CaloClusterContainer> clustercontainer{
m_containerName};
49
53 ATH_MSG_INFO(
"Found corresponding cell-link container with size " << cclptr->
size());
54 }
55 else
56 ATH_MSG_INFO(
"Did not find corresponding cell-link container");
57
60 (*m_out) << "Run " << eventInfo->runNumber() << ", evt " << eventInfo->eventNumber() << " contains " << clustercontainer->size() << " CaloClusters" << std::endl;
61
62 for (const auto itr: *clustercontainer) {
64 (*m_out) << "Kinematics :" << std::endl;
66 *
m_out << std::format (
"E={:.0f}, eta={}, phi={}, m={}, pt={:.1f}",
67 cluster.
e(), cluster.
eta(), cluster.
phi(),
68 cluster.
m(), cluster.
pt())
69 << std::endl;
70 }
71 else {
72 *
m_out << std::format (
"E={}, eta={}, phi={}, m={}, pt={}",
73 cluster.
e(), cluster.
eta(), cluster.
phi(),
74 cluster.
m(), cluster.
pt())
75 << std::endl;
76 }
77 (*m_out) <<
"Eta0=" << cluster.
eta0() <<
", Phi0=" << cluster.
phi0() << std::endl;
78
79 (*m_out) << "TLorentzVector :" << std::endl;
83 if (std::abs(mass) < 1e-2)
mass = 0;
84 *
m_out << std::format (
" p4.E={:.0f}, x={:.0f}, y={:.0f}, z={:.0f}, m={:.2f}, pt={:.1f}",
85 p4.E(), p4.X(), p4.Y(), p4.Z(), mass, p4.Pt())
86 << std::endl;
87 }
88 else {
89 *
m_out << std::format (
" p4.E={}, x={}, y={}, z={}, m={}, pt={}",
90 p4.E(), p4.X(), p4.Y(), p4.Z(), p4.M(), p4.Pt())
91 << std::endl;
92 }
93
94 (*m_out) << "Sampling variables :" << std::endl;
95 for (unsigned iSamp=0;iSamp<CaloSampling::Unknown;++iSamp) {
98 (*m_out) <<
" Sampling #" <<
s <<
": E=" << cluster.
eSample(s) <<
", eta=" << cluster.
etaSample(s) <<
", phi=" << cluster.
phiSample(s) << std::endl;
99 }
100 }
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118 constexpr auto allMoments=std::to_array<const char*>({"FIRST_PHI","FIRST_ETA","SECOND_R","SECOND_LAMBDA","DELTA_PHI","DELTA_THETA","DELTA_ALPHA","CENTER_X","CENTER_Y","CENTER_Z","CENTER_MAG","CENTER_LAMBDA","LATERAL","LONGITUDINAL","ENG_FRAC_EM","ENG_FRAC_MAX","ENG_FRAC_CORE","FIRST_ENG_DENS","SECOND_ENG_DENS","ISOLATION","ENG_BAD_CELLS","N_BAD_CELLS","N_BAD_CELLS_CORR","BAD_CELLS_CORR_E","BADLARQ_FRAC","ENG_POS","SIGNIFICANCE.3","CELL_SIGNIFICANCE.3","CELL_SIG_SAMPLING","AVG_LAR_Q","AVG_TILE_Q","EM_PROBABILITY","HAD_WEIGHT","OOC_WEIGHT","DM_WEIGHT.3","TILE_CONFIDENCE_LEVEL","VERTEX_FRACTION","NVERTEX_FRACTION","ENG_CALIB_TOT","ENG_CALIB_OUT_L","ENG_CALIB_OUT_M","ENG_CALIB_OUT_T","ENG_CALIB_DEAD_L","ENG_CALIB_DEAD_M","ENG_CALIB_DEAD_T","ENG_CALIB_EMB0","ENG_CALIB_EME0","ENG_CALIB_TILEG3","ENG_CALIB_DEAD_TOT","ENG_CALIB_DEAD_EMB0","ENG_CALIB_DEAD_TILE0","ENG_CALIB_DEAD_TILEG3","ENG_CALIB_DEAD_EME0","ENG_CALIB_DEAD_HEC0","ENG_CALIB_DEAD_FCAL","ENG_CALIB_DEAD_LEAKAGE","ENG_CALIB_DEAD_UNCLASS","ENG_CALIB_FRAC_EM","ENG_CALIB_FRAC_HAD","ENG_CALIB_FRAC_REST", "ENERGY_Truth"});
119 (*m_out) << "Cluster Moments\n";
120 static const std::string badChannelListStr{"BadChannelList"};
121 for (std::string momName : allMoments) {
122 int precision = 0;
123 std::string::size_type dpos = momName.find ('.');
124 if (dpos != std::string::npos) {
125 precision = std::stoi (momName.substr (dpos+1));
126 momName.erase (dpos, std::string::npos);
127 }
128 SG::AuxElement::Accessor<float>
a(momName);
129 if (
a.isAvailable(cluster)) {
130 float v =
a(cluster);
132 *
m_out << std::format (
" {}: {:.{}f}", momName, v, precision) <<
"\n";
133 }
134 else {
135 (*m_out) <<
" " << momName <<
": " <<
v <<
"\n";
136 }
137 }
138 }
139
140 SG::AuxElement::Accessor<xAOD::CaloClusterBadChannelList>
a(badChannelListStr);
141 if (
a.isAvailable(cluster)) {
142 (*m_out) << "Bad Channel data: \n";
144 (*m_out) << " eta=" << bc.eta() << ", phi=" << bc.phi() << ", layer=" << bc.layer() << ", word=" << bc.badChannel() << "\n";
145 }
146 }
147
148 const CaloClusterCellLink* cellLinks = cluster.
getCellLinks();
149 if (cellLinks) {
151 (*m_out) << "Cell-links:\n";
152 CaloClusterCellLink::const_iterator lnk_it = cellLinks->
begin();
153 CaloClusterCellLink::const_iterator lnk_it_e = cellLinks->
end();
154 for (; lnk_it != lnk_it_e; ++lnk_it) {
155 const CaloCell*
cell = *lnk_it;
157 *
m_out << std::format (
" ID={}, E={:.2f}, weight={:.3f}\n",
159
160 }
161 else {
162 *
m_out << std::format (
" ID={}, E={}, weight={}\n",
164
165 }
166 }
167 } else
168 (*
m_out) <<
" Nbr of cells: " << cellLinks->
size() <<
"\n";
169 } else {
170 (*m_out) << " No Cell Links found\n";
171 }
172
173 }
174
175 return StatusCode::SUCCESS;
176}
Athena::TPCnvVers::Old Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Current CaloClusterCellLinkContainer
#define CHECK(...)
Evaluate an expression and check for errors.
ServiceHandle< StoreGateSvc > & evtStore()
weight_t weight() const
Accessor for weight associated to this cell.
const_iterator end() const
const end method
size_t size() const
size method
const_iterator begin() const
const begin method
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_containerName
The key for the output xAOD::CaloClusterContainer.
Gaudi::Property< bool > m_reducedPrecision
Gaudi::Property< bool > m_printCellLinks
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
size_type size() const noexcept
Returns the number of elements in the collection.
const CaloClusterCellLink * getCellLinks() const
Get a pointer to the CaloClusterCellLink object (const version).
virtual double pt() const
The transverse momentum ( ) of the particle (negative for negative-energy clusters).
float phiSample(const CaloSample sampling) const
Retrieve barycenter in a given sample.
virtual double m() const
The invariant mass of the particle.
virtual double eta() const
The pseudorapidity ( ) of the particle.
virtual double e() const
The total energy of the particle.
float eSample(const CaloSample sampling) const
virtual double phi() const
The azimuthal angle ( ) of the particle.
float etaSample(const CaloSample sampling) const
Retrieve barycenter in a given sample.
flt_t eta0() const
Returns raw of cluster seed.
virtual FourMom_t p4() const
The full 4-momentum of the particle.
IParticle::FourMom_t FourMom_t
Definition of the 4-momentum type.
CaloSampling::CaloSample CaloSample
bool hasSampling(const CaloSample s) const
Checks if certain smapling contributes to cluster.
const CaloClusterBadChannelList & badChannelList() const
flt_t phi0() const
Returns raw of cluster seed.
bool contains(const std::string &s, const std::string ®x)
does a string contain the substring
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.