ATLAS Offline Software
CalibHitValidate.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 //-----------------------------------------------------------------------
6 //
7 // Description: see CalibHitValidate.h
8 //
9 // Environment:
10 // Software developed for the ATLAS Detector at CERN LHC
11 //
12 //-----------------------------------------------------------------------
13 
14 #include "CalibHitValidate.h"
15 
17 
20 
21 
22 //###############################################################################
23 
25  ISvcLocator* pSvcLocator)
26  : AthAlgorithm(name, pSvcLocator)
27 {
28 
29  declareProperty("CalibrationHitContainerNames",m_CalibrationHitContainerNames);
30  declareProperty("DMCalibrationHitContainerNames",m_DMCalibrationHitContainerNames);
31 }
32 
33 
34 //###############################################################################
35 
37 {
38  ATH_MSG_VERBOSE ( "Initializing " << name() );
39 
40  return StatusCode::SUCCESS;
41 }
42 
43 //###############################################################################
44 
46 {
47  // get truth containers
48  const McEventCollection* truthEvent=0;
49  StatusCode sc0 = evtStore()->retrieve(truthEvent, "TruthEvent");
50  if (sc0.isFailure()||!truthEvent){
51  ATH_MSG_ERROR ( "No McEventCollection found");
52  return StatusCode::FAILURE;
53  }
54  auto gen = *HepMC::begin(*truthEvent->at(0));
55 
56  std::vector<std::string>::iterator containerNameIter;
57 
58  std::vector<double> hitEnergies;
59 
60  double totalEnergyAllContainers=0.;
61 
62  // calibration hit containers
63  const CaloCalibrationHitContainer* cchc;
64  std::vector<const CaloCalibrationHitContainer *> v_cchc;
65  for (containerNameIter=m_CalibrationHitContainerNames.begin();containerNameIter!=m_CalibrationHitContainerNames.end();++containerNameIter) {
66 
67 
68  double totEnergy=0.;
69 
70  if ( evtStore()->contains<CaloCalibrationHitContainer>(*containerNameIter)) {
71  StatusCode sc = evtStore()->retrieve(cchc,*containerNameIter);
72  if (sc.isFailure() ) {
73  ATH_MSG_ERROR ( "Cannot retrieve calibration hit container " << *containerNameIter );
74  return StatusCode::FAILURE;
75  }
76 
77  //loop over cells in calibration container
80 
81  for(;chIter!=chIterE;++chIter)
82  totEnergy+=(*chIter)->energyTotal();
83  }
84 
85  ATH_MSG_INFO ("container name: "<<*containerNameIter<<", energy="<<totEnergy);
86 
87  totalEnergyAllContainers += totEnergy;
88 
89  hitEnergies.push_back(totEnergy);
90  }
91 
92  // dark material calibration hit containers
93 
94  std::vector<double> hitEnergiesDM;
95 
96  std::vector<const CaloCalibrationHitContainer *> v_dmcchc;
97  for (containerNameIter=m_DMCalibrationHitContainerNames.begin();containerNameIter!=m_DMCalibrationHitContainerNames.end();++containerNameIter) {
98 
99 
100  double totEnergy=0.;
101  if ( evtStore()->contains<CaloCalibrationHitContainer>(*containerNameIter)) {
102  StatusCode sc = evtStore()->retrieve(cchc,*containerNameIter);
103  if (sc.isFailure() ) {
104  ATH_MSG_ERROR ( "Cannot retrieve DM calibration hit container " << *containerNameIter );
105  return StatusCode::FAILURE;
106  }
107 
108  //loop over cells in calibration container
111 
112  for(;chIter!=chIterE;++chIter)
113  totEnergy+=(*chIter)->energyTotal();
114  }
115 
116  ATH_MSG_INFO ("DM container name: "<<*containerNameIter<<", energy="<<totEnergy);
117 
118  totalEnergyAllContainers += totEnergy;
119 
120  hitEnergiesDM.push_back(totEnergy);
121  }
122 
123  ATH_MSG_INFO ("total energy in hits: "<<totalEnergyAllContainers<<", in primary particle: "<<gen->momentum().e());
124 
125  return StatusCode::SUCCESS;
126 }
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
CaloCalibrationHitContainer
Definition: CaloCalibrationHitContainer.h:25
CaloCalibrationHit.h
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
CalibHitValidate::execute
virtual StatusCode execute() override
Definition: CalibHitValidate.cxx:45
CalibHitValidate::initialize
virtual StatusCode initialize() override
Definition: CalibHitValidate.cxx:36
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
CaloCalibrationHitContainer.h
master.gen
gen
Definition: master.py:32
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
AthenaHitsVector< CaloCalibrationHit >::const_iterator
boost::transform_iterator< make_const, typename CONT::const_iterator > const_iterator
Definition: AthenaHitsVector.h:58
CalibHitValidate.h
CalibHitValidate::m_DMCalibrationHitContainerNames
std::vector< std::string > m_DMCalibrationHitContainerNames
vector of dead material calibration hit container names to use.
Definition: CalibHitValidate.h:43
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
McEventCollection
This defines the McEventCollection, which is really just an ObjectVector of McEvent objects.
Definition: McEventCollection.h:33
AthAlgorithm
Definition: AthAlgorithm.h:47
TruthParticle.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
CalibHitValidate::CalibHitValidate
CalibHitValidate(const std::string &name, ISvcLocator *pSvcLocator)
Definition: CalibHitValidate.cxx:24
CalibHitValidate::m_CalibrationHitContainerNames
std::vector< std::string > m_CalibrationHitContainerNames
vector of calibration hit container names to use.
Definition: CalibHitValidate.h:36
HepMC::begin
GenEvent::particle_iterator begin(HepMC::GenEvent &e)
Definition: GenEvent.h:498
AthenaHitsVector::end
const_iterator end() const
Definition: AthenaHitsVector.h:143
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
AthenaHitsVector::begin
const_iterator begin() const
Definition: AthenaHitsVector.h:139