ATLAS Offline Software
Loading...
Searching...
No Matches
PhotonCnvTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
5// Gaudi/Athena include(s):
7
8// EDM include(s):
12
13// Local include(s):
14#include "PhotonCnvTool.h"
15
16
17namespace xAODMaker {
18
20 const std::string& name,
21 const IInterface* parent )
22 : AthAlgTool( type, name, parent )
23 {
24 // Declare the interface(s) provided by the tool:
25 declareInterface< IPhotonCnvTool >(this);
26
27 declareProperty( "xAODCaloClusterContainerName", m_caloClusters = "egClusterCollection");
28 declareProperty( "xAODCaloClusterTopoContainerName", m_caloClustersTopo = "EMCaloClusters");
29 declareProperty( "xAODConversionContainerName", m_vertexContainer = "GSFConversionVertices");
30 declareProperty( "xAODCaloClusterOtherContainerName", m_caloClustersOther = "egClusterCollection",
31 "Most likely used for trigger objects");
32
33
34 }
35
36
38 xAOD::PhotonContainer* xaod ) const
39 {
40
41 if (!aod) {
42 ATH_MSG_WARNING("No input Photon Collection passed");
43 return StatusCode::SUCCESS;
44 }
45 if (!xaod) {
46 ATH_MSG_WARNING("No output Photon Collection passed");
47 return StatusCode::SUCCESS;
48 }
49 // Create the xAOD objects:
50 const auto end = aod->end();
51 for(auto itr = aod->begin(); itr != end; ++itr ) {
52 // Create the xAOD object:
53 xAOD::Photon* photon = new xAOD::Photon();
54 xaod->push_back( photon );
55
56 // p4
57 photon->setPtEtaPhi((*itr)->pt(),(*itr)->eta(),(*itr)->phi());
58
59 // author(s)
60 photon->setAuthor( (*itr)->author() );
61
62 //OQ
63 photon->setOQ( (*itr)->isgoodoq() );
64
65
66 // Error Matrix
67 if((*itr)->errors()){
68
69 const ErrorMatrixEEtaPhiM* oldMatrix = (*itr)->errors()->eEtaPhiMMatrix();
70 if(oldMatrix){
71 Eigen::Matrix<double,4,4> matrix;
72 for(int i(0);i<4;++i){
73 for(int j(0);j<4;++j){
74 matrix(i,j) = (*oldMatrix)(i,j);
75 }
76 }
77 Eigen::Matrix<double,4,4> jacobian (EigenP4JacobianEEtaPhiM2PtEtaPhiM((*itr)->e(),(*itr)->eta(),0));
78 Eigen::Matrix<double,4,4> covMatrix= jacobian*matrix*jacobian.transpose();
79 photon->setCovMatrix(covMatrix.cast<float>());
80 }
81 }
82
83 //setParameters
84 setParameters(**itr,*photon);
85 //setIsolations
86 setIsolations(**itr,*photon);
87 //setLinks
88 setLinks(**itr,*photon);
89
90 }
91
92 // Return gracefully - like a elephant on roller skates :
93 return StatusCode::SUCCESS;
94 }
95
96 void PhotonCnvTool::setParameters(const egamma& aodph, xAOD::Photon& xaodph) const{
97 // We're not doing all AOD parameters here because some are dropped, and some are moved elsewhere.
136 }
137
139 double result = aodph.detailValue(aodParameter);
140 float parameter = static_cast<float>(result);
141 xaodph.setShowerShapeValue(parameter, xaodParameter);
142 }
143
155
157 const egamma& aodph, xAOD::Photon& xaodph) const {
158 double result = aodph.detailValue(aodParameter);
159 float isolation = static_cast<float>(result);
160 xaodph.setIsolationValue(isolation, xaodParameter);
161 }
162
163
164 void PhotonCnvTool::setLinks(const egamma& aodph, xAOD::Photon& xaodph) const {
165 // Need to reset links from old CaloCluster to xAOD::CaloCluster
166 std::string clusterContainerName;
167
168 //Change link depending on the photon author
169 //Topo seeded photons
171 clusterContainerName = m_caloClustersTopo;
172 }
173 //Standard photons
175 clusterContainerName = m_caloClusters;
176 }
177 // others (trigger)
178 else {
179 clusterContainerName = m_caloClustersOther;
180 }
181
182 // If EL name not set, use the original name.
183 if (clusterContainerName.empty())
184 clusterContainerName = aodph.clusterElementLink().dataID();
185 ElementLink<xAOD::CaloClusterContainer> newclusterElementLink;
186 newclusterElementLink.resetWithKeyAndIndex( clusterContainerName,
187 aodph.clusterElementLink().index() );
188
189 std::vector< ElementLink< xAOD::CaloClusterContainer > > linksToClusters;
190 linksToClusters.push_back(newclusterElementLink);
191 xaodph.setCaloClusterLinks(linksToClusters);
192
193 // Decorate cluster with position in calo
194 if (newclusterElementLink.isValid()) ATH_MSG_WARNING("Invalid link to cluster");
195
196 // Need to reset links from old VxVertex to xAOD::Vertex
197 std::vector< ElementLink< xAOD::VertexContainer > > linksToVertices;
198 for(unsigned int i(0); i<aodph.nConversions(); ++i){
199 linksToVertices.push_back( getNewLink(aodph.conversionElementLink(i), m_vertexContainer) );
200 }
201 xaodph.setVertexLinks( linksToVertices );
202 }
203
205 std::string linkname = name;
206 // If not set, use same name as in original link.
207 if (linkname.empty())
208 linkname = oldLink.dataID();
210 newLink.resetWithKeyAndIndex( linkname, oldLink.index() );
211 // std::cout<<"Old link is "<<(oldLink.isValid()?"VALID":"INVALID")
212 // <<" and new link (pointing to"<<name<<") is "<<(newLink.isValid()?"VALID":"INVALID")<<std::endl;
213 return newLink;
214 }
215
216
217
218} // namespace xAODMaker
219
220
221// LocalWords: Gaudi
#define ATH_MSG_WARNING(x)
Helpers for checking error return status codes and reporting errors.
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
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.
This is a data object, containing a collection of egamma Objects.
elec/gamma data class.
Definition egamma.h:58
double detailValue(egammaParameters::ParamDef key, const std::string &name="", unsigned int index=0) const
get the float value of key in the container name
Definition egamma.cxx:899
unsigned int nConversions() const
Definition egamma.cxx:421
unsigned int author() const
Reconstruction Author.
Definition egamma.h:244
const ElementLink< CaloClusterContainer > & clusterElementLink() const
element link to cluster
Definition egamma.cxx:427
ElementLink< VxContainer > conversionElementLink(unsigned int index=0) const
element link to conversion
Definition egamma.cxx:450
std::string m_caloClustersOther
Location/Key for xAOD::CaloClusters for other (trigger?) electrons.
void setIsolations(const egamma &aodmuon, xAOD::Photon &xaodmuon) const
Fills in the isolation variables.
void checkAndSetIsolation(egammaParameters::ParamDef aodParameter, xAOD::Iso::IsolationType xaodParameter, const egamma &, xAOD::Photon &) const
virtual StatusCode convert(const egammaContainer *aod, xAOD::PhotonContainer *xaod) const override
Function that fills an existing xAOD::PhotonContainer.
std::string m_caloClusters
Location/Key for xAOD::CaloClusters for electrons and photons.
ElementLink< xAOD::VertexContainer > getNewLink(const ElementLink< VxContainer > &oldLink, const std::string &name) const
std::string m_vertexContainer
Location/Key for xAOD::Vertex for photons.
void setLinks(const egamma &aodph, xAOD::Photon &xaodph) const
void setParameters(const egamma &, xAOD::Photon &) const
Fills in the shower shape variables.
void checkAndSetParameter(egammaParameters::ParamDef aodParameter, xAOD::EgammaParameters::ShowerShapeType xaodParameter, const egamma &, xAOD::Photon &) const
std::string m_caloClustersTopo
Location/Key for xAOD::CaloClusters for topo seeded photons.
PhotonCnvTool(const std::string &type, const std::string &name, const IInterface *parent)
Regular AlgTool constructor.
bool setShowerShapeValue(float value, const EgammaParameters::ShowerShapeType information)
Set method for Shower Shape values.
void setCaloClusterLinks(const CLELVec_t &links)
set Pointer to the xAOD::CaloCluster
bool setIsolationValue(float value, const Iso::IsolationType information)
old set method for Isolation values.
Definition Egamma_v1.h:262
void setVertexLinks(const VxELVec_t &links)
set Pointer to the xAOD::vertex/vertices that match the photon candidate
const unsigned int AuthorRConv
Photon that is duplicated with electron.
const unsigned int AuthorPhoton
Photon reconstructed by standard cluster-based algorithm.
@ ethad1
transverse energy in the first sampling of the hadronic calorimeters behind the cluster calculated fr...
@ ecore
core energy in em calo E(core) = E0(3x3) + E1(15x2) + E2(5x5) + E3(3x5)
@ topoetcone30
Topo cluster ET in a cone with half-opening angle 0.30.
@ ethad
ET leakage into hadronic calorimeter with exclusion of energy in CaloSampling::TileGap3.
@ barys1
barycentre in sampling 1 calculated in 3 strips
@ e2tsts1
energy of the cell corresponding to second energy maximum in the first sampling
@ ptcone20
summed pt of tracks in a cone with half-opening angle 0.2 (no zvx cut photons, 1mm electrons)
@ poscs1
relative position in eta within cell in 1st sampling
@ e277
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 7x7
@ ptcone40
summed pt of tracks in a cone with half-opening angle 0.4
@ e337
uncalibrated energy (sum of cells) of the third sampling in a rectangle of size 3x7
@ f1core
E1(3x1)/E = fraction of the energy reconstructed in the first longitudinal compartment of the electro...
@ weta2
the lateral width is calculated with a window of 3x5 cells using the energy weighted sum over all cel...
@ e1152
uncalibrated energy (sum of cells) in strips in a 15x2 window in cells in eta X phi
@ e235
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 3x5
@ e033
uncalibrated energy (sum of cells) in presampler in a 3x3 window in cells in eta X phi
@ emaxs1
energy of strip with maximal energy deposit
@ f3core
E3(3x3)/E fraction of the energy reconstructed in the third compartment of the electromagnetic calori...
@ r33over37allcalo
1-ratio of energy in 3x3 over 3x7 cells; E(3x3) = E0(1x1) + E1(3x1) + E2(3x3) + E3(3x3); E(3x7) = E0(...
@ wtots1
shower width is determined in a window detaxdphi = 0,0625 ~0,2, corresponding typically to 20 strips ...
@ f3
fraction of energy reconstructed in 3rd sampling
@ e011
uncorrected energy in presampler in a 1x1 window in cells in eta X phi
@ e237
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 3x7
@ etcone40
ET in a cone with half-opening angle 0.4, with exclusion of a window of size 7x5 in electromagnetic c...
@ e333
uncalibrated energy (sum of cells) of the third sampling in a rectangle of size 3x3
@ e233
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 3x3 (in cell units e...
@ poscs2
relative position in eta within cell in 2nd sampling
@ widths1
same as egammaParameters::weta1 but without corrections on particle impact point inside the cell
@ e377
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 7x7
@ topoetcone40
Topo cluster ET in a cone with half-opening angle 0.30.
@ fracs1
shower shape in the shower core : [E(+/-3)-E(+/-1)]/E(+/-1), where E(+/-n) is the energy in +- n stri...
@ f1
E1/E = fraction of energy reconstructed in the first sampling, where E1 is energy in all strips belon...
@ emins1
energy reconstructed in the strip with the minimal value between the first and second maximum
@ e335
uncalibrated energy (sum of cells) of the third sampling in a rectangle of size 3x5
@ widths2
same as egammaParameters::weta2 but without corrections on particle impact point inside the cell
@ ptcone30
summed pt of tracks in a cone with half-opening angle 0.3
@ etcone20
ET in a cone with half-opening angle 0.2, with exclusion of a window of size 7x5 in electromagnetic c...
@ e132
uncalibrated energy (sum of cells) in strips in a 3x2 window in cells in eta X phi
@ e255
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 5x5
@ etcone30
ET in a cone with half-opening angle 0.3, with exclusion of a window of size 7x5 in electromagnetic c...
@ weta1
shower width using +/-1 strips around the one with the maximal energy deposit: w3 strips = sqrt{sum(E...
@ ehad1
E leakage into 1st sampling of had calo (CaloSampling::HEC0 + CaloSampling::TileBar0 + CaloSampling::...
@ pos7
Difference between the track and the shower positions: sum_{i=i_m-7}^{i=i_m+7}E_i x (i-i_m) / sum_{i=...
@ e2ts1
2nd max in strips calc by summing 3 strips
@ pos
difference between shower cell and predicted track in +/- 1 cells
@ topoetcone20
Topo cluster ET in a cone with half-opening angle 0.20.
@ asy1
uncorr asymmetry in 3 strips in the 1st sampling
const unsigned int AuthorCaloTopo35
Photon reconstructed by SW CaloTopo35 seeded clusters.
@ e235
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 3x5
Definition EgammaEnums.h:72
@ e337
uncalibrated energy (sum of cells) of the third sampling in a rectangle of size 3x7
Definition EgammaEnums.h:90
@ wtots1
shower width is determined in a window detaxdphi = 0,0625 ×~0,2, corresponding typically to 20 strips...
@ pos7
Difference between the track and the shower positions: sum_{i=i_m-7}^{i=i_m+7}E_i x (i-i_m) / sum_{i=...
@ f3core
E3(3x3)/E fraction of the energy reconstructed in the third compartment of the electromagnetic calori...
Definition EgammaEnums.h:66
@ ethad1
transverse energy in the first sampling of the hadronic calorimeters behind the cluster calculated fr...
Definition EgammaEnums.h:43
@ e277
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 7x7
Definition EgammaEnums.h:81
@ e237
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 3x7
Definition EgammaEnums.h:78
@ ethad
ET leakage into hadronic calorimeter with exclusion of energy in CaloSampling::TileGap3.
Definition EgammaEnums.h:46
@ e1152
uncalibrated energy (sum of cells) in strips in a 15x2 window in cells in eta X phi
Definition EgammaEnums.h:40
@ f3
fraction of energy reconstructed in 3rd sampling
Definition EgammaEnums.h:55
@ poscs2
relative position in eta within cell in 2nd sampling
@ ecore
core energy in em calo E(core) = E0(3x3) + E1(15x2) + E2(5x5) + E3(3x5)
@ f1
E1/E = fraction of energy reconstructed in the first sampling, where E1 is energy in all strips belon...
Definition EgammaEnums.h:53
@ pos
difference between shower cell and predicted track in +/- 1 cells
@ widths2
same as egammaParameters::weta2 but without corrections on particle impact point inside the cell
@ e2ts1
2nd max in strips calc by summing 3 strips
@ poscs1
relative position in eta within cell in 1st sampling
@ e335
uncalibrated energy (sum of cells) of the third sampling in a rectangle of size 3x5
Definition EgammaEnums.h:87
@ e377
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 7x7
Definition EgammaEnums.h:93
@ e333
uncalibrated energy (sum of cells) of the third sampling in a rectangle of size 3x3
Definition EgammaEnums.h:84
@ emaxs1
energy of strip with maximal energy deposit
@ e255
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 5x5
Definition EgammaEnums.h:75
@ ehad1
E leakage into 1st sampling of had calo (CaloSampling::HEC0 + CaloSampling::TileBar0 + CaloSampling::...
Definition EgammaEnums.h:49
@ barys1
barycentre in sampling 1 calculated in 3 strips
@ e233
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 3x3 (in cell units e...
Definition EgammaEnums.h:69
@ asy1
uncorr asymmetry in 3 strips in the 1st sampling
@ e033
uncalibrated energy (sum of cells) in presampler in a 3x3 window in cells in eta X phi
Definition EgammaEnums.h:34
@ e132
uncalibrated energy (sum of cells) in strips in a 3x2 window in cells in eta X phi
Definition EgammaEnums.h:37
@ fracs1
shower shape in the shower core : [E(+/-3)-E(+/-1)]/E(+/-1), where E(+/-n) is the energy in ± n strip...
@ r33over37allcalo
1-ratio of energy in 3x3 over 3x7 cells; E(3x3) = E0(1x1) + E1(3x1) + E2(3x3) + E3(3x3); E(3x7) = E0(...
@ weta2
the lateral width is calculated with a window of 3x5 cells using the energy weighted sum over all cel...
@ e011
uncalibrated energy (sum of cells) in presampler in a 1x1 window in cells in eta X phi
Definition EgammaEnums.h:31
@ weta1
shower width using +/-3 strips around the one with the maximal energy deposit: w3 strips = sqrt{sum(E...
Definition EgammaEnums.h:98
@ e2tsts1
energy of the cell corresponding to second energy maximum in the first sampling
@ emins1
energy reconstructed in the strip with the minimal value between the first and second maximum
@ widths1
same as egammaParameters::weta1 but without corrections on particle impact point inside the cell
@ f1core
E1(3x1)/E = fraction of the energy reconstructed in the first longitudinal compartment of the electro...
Definition EgammaEnums.h:61
IsolationType
Overall enumeration for isolation types in xAOD files.
@ topoetcone20
Topo-cluster ET-sum.
@ etcone20
Calorimeter isolation.
@ ptcone20
Track isolation.
PhotonContainer_v1 PhotonContainer
Definition of the current "photon container version".
Photon_v1 Photon
Definition of the current "egamma version".