ATLAS Offline Software
Loading...
Searching...
No Matches
HIJetSignificanceTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3*/
4
6
9
11 : asg::AsgTool(name)
12{
13 declareInterface<IJetDecorator>(this);
14}
15
16
18{
19 //First we chekc that jet container name is defined
20 if( m_jetContainerName.empty() ){
21 ATH_MSG_ERROR("HIJetSignificanceTool needs to have its input jet container name configured!");
22 return StatusCode::FAILURE;
23 }
24 //Preped Jet Container Name
30
31 //Keys Initialization
32 ATH_CHECK( m_jetSignificanceKey.initialize() );
33 ATH_CHECK( m_jetCellSignificanceKey.initialize() );
34 ATH_CHECK( m_jetCellSigSamplingKey.initialize() );
35 ATH_CHECK( m_jetNMaxSigTileKey.initialize() );
36 ATH_CHECK( m_jetSignificanceTileKey.initialize() );
37
38 return StatusCode::SUCCESS;
39}
40
41
43{
44 //From decor keys to handlers
50
51 //Here we were passing through JetConstituentVector. Now we access this directly and in a loop of jets, not for single instances
52 //const xAOD::JetConstituentVector constituents = jets.getConstituents();
53 //for(xAOD::JetConstituentVector::iterator itr = constituents.begin(); itr != constituents.end(); ++itr)
54 for(const xAOD::Jet* jet : jets)
55 {
56 float significance=0;
57 float cell_sig=0;
58 int cell_sig_sampling=-1;
59 int n_sig_max_tile=0;
60 float sig_tile=0;
61 float E_tile=0;
62 // loop over raw constituents. Look for clusters
63 size_t num = jet->numConstituents();
64 for(size_t i = 0; i < num; i++)
65 {
66 const xAOD::CaloCluster* cl=static_cast<const xAOD::CaloCluster*>( (jet->rawConstituent(i)) );
67 if( !cl) continue;
68
69 double m=0;
70 double m2=0;
71 unsigned int samp_max=CaloSampling::Unknown;
72
73
74 double cl_E=cl->altE(); //signifiance moments were computed from unsubtracted cell energies
75 double sigma_cl=0;
76
77 for(unsigned int isample=12; isample<21; isample++) E_tile+=cl->eSample( (CaloSampling::CaloSample) isample);
78
79 if(cl->retrieveMoment(xAOD::CaloCluster::SIGNIFICANCE,m) )
80 {
81 sigma_cl=cl_E/m;
82 significance+=sigma_cl*sigma_cl;
83 }
84 if(cl->retrieveMoment(xAOD::CaloCluster::CELL_SIG_SAMPLING,m2))
85 {
86 samp_max=static_cast<unsigned int>(m2);
87 if(CaloSampling::getSamplingName(samp_max).find("Tile")!=std::string::npos)
88 {
89 n_sig_max_tile++;
90 sig_tile+=sigma_cl*sigma_cl;
91 }
92 }
93
94 if( cl->retrieveMoment(xAOD::CaloCluster::CELL_SIGNIFICANCE,m) )
95 {
96 if( m > cell_sig )
97 {
98 cell_sig=m;
99 if(samp_max!=CaloSampling::Unknown) cell_sig_sampling=samp_max;
100 }
101 }
102 }
103 significance=jet->jetP4(xAOD::JetEMScaleMomentum).E()/std::sqrt(significance);
104 sig_tile=E_tile/std::sqrt(sig_tile);
105
106 // set the attributes
107 jetSignificanceDecorHandle(*jet) = significance;
108 jetCellSignificanceDecorHandle(*jet) = cell_sig;
109 jetCellSigSamplingDecorHandle(*jet) = cell_sig_sampling;
110 jetNMaxSigTileDecorHandle(*jet) = n_sig_max_tile;
111 jetSignificanceTileDecorHandle(*jet) = sig_tile;
112
113 }//End of loop over jets
114
115 return StatusCode::SUCCESS;
116}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
Handle class for adding a decoration to an object.
static std::string getSamplingName(CaloSample theSample)
Returns a string (name) for each CaloSampling.
SG::WriteDecorHandleKey< xAOD::JetContainer > m_jetSignificanceKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_jetCellSigSamplingKey
HIJetSignificanceTool(const std::string &name)
SG::WriteDecorHandleKey< xAOD::JetContainer > m_jetCellSignificanceKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_jetNMaxSigTileKey
virtual StatusCode decorate(const xAOD::JetContainer &jets) const override
Decorate a jet collection without otherwise modifying it.
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
Gaudi::Property< std::string > m_jetContainerName
SG::WriteDecorHandleKey< xAOD::JetContainer > m_jetSignificanceTileKey
Handle class for adding a decoration to an object.
AsgTool(const std::string &name)
Constructor specifying the tool instance's name.
Definition AsgTool.cxx:58
@ CELL_SIGNIFICANCE
Cell significance = E/sig of the cell with the largest |E|/sig.
@ CELL_SIG_SAMPLING
CaloSample of the cell with the largest |E|/sig.
@ SIGNIFICANCE
Cluster significance.
std::string find(const std::string &s)
return a remapped string
Definition hcg.cxx:138
Jet_v1 Jet
Definition of the current "jet version".
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
@ JetEMScaleMomentum
Definition JetTypes.h:28
JetContainer_v1 JetContainer
Definition of the current "jet container version".