ATLAS Offline Software
CaloRescaleNoise.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "CaloRescaleNoise.h"
8 #include "CaloEvent/CaloCell.h"
9 #include "Identifier/Identifier.h"
11 
12 #include "TTree.h"
13 #include <cstdio>
14 
15 
16 
17 //Constructor
18 CaloRescaleNoise::CaloRescaleNoise(const std::string& name, ISvcLocator* pSvcLocator):
19  AthAlgorithm(name,pSvcLocator),
20  m_calo_id(nullptr),
21  m_iCool(0),
22  m_SubHash(0),
23  m_Hash(0),
24  m_OffId(0),
25  m_eta(0),
26  m_phi(0),
27  m_layer(0),
28  m_Gain(0),
29  m_noise(0),
30  m_elecNoise(0),
31  m_pileupNoise (0),
32  m_elecNoiseRescaled(0),
33  m_tree(nullptr)
34 {
35  declareProperty("absScaling",m_absScaling=false);
36 }
37 
38 //__________________________________________________________________________
39 //Destructor
41 {
42  ATH_MSG_DEBUG ( "CaloRescaleNoise destructor called" );
43 }
44 //__________________________________________________________________________
46 {
47  ATH_MSG_DEBUG ("CaloRescaleNoise initialize()" );
48  ATH_CHECK(m_thistSvc.retrieve());
49 
50  const CaloIdManager* mgr = nullptr;
51  ATH_CHECK( detStore()->retrieve( mgr ) );
52  m_calo_id = mgr->getCaloCell_ID();
53 
57 
62 
63  m_tree = new TTree("mytree","Calo Noise ntuple");
64  m_tree->Branch("iCool",&m_iCool,"iCool/I");
65  m_tree->Branch("iSubHash",&m_SubHash,"iSubHash/I");
66  m_tree->Branch("iHash",&m_Hash,"iHash/I");
67  m_tree->Branch("iOffId",&m_OffId,"iOffId/I");
68  m_tree->Branch("eta",&m_eta,"eta/F");
69  m_tree->Branch("phi",&m_phi,"phi/F");
70  m_tree->Branch("layer",&m_layer,"layer/I");
71  m_tree->Branch("iGain",&m_Gain,"iGain/I");
72  m_tree->Branch("Noise",&m_noise,"Noise/F");
73  m_tree->Branch("ElecNoise",&m_elecNoise,"ElecNoise/F");
74  m_tree->Branch("PileupNoise",&m_pileupNoise,"PileupNoise/F");
75  m_tree->Branch("ElecNoiseRescaled",&m_elecNoiseRescaled,"ElecNoiseRescaled/F");
76 
77  ATH_CHECK( m_thistSvc->regTree("/file1/calonoise/mytree",m_tree) );
78  ATH_MSG_INFO ( " end of CaloRescaleNoise::initialize " );
79  return StatusCode::SUCCESS;
80 }
81 //__________________________________________________________________________
83 {
84  ATH_MSG_DEBUG ("CaloRescaleNoise execute()" );
85  return StatusCode::SUCCESS;
86 }
87 
88 //__________________________________________________________________________
90 {
91  const EventContext& ctx = Gaudi::Hive::currentContext();
93  const LArOnOffIdMapping* cabling{*cablingHdl};
94  if(!cabling) {
95  ATH_MSG_ERROR( "Do not have cabling mapping from key " << m_cablingKey.key() );
96  return StatusCode::FAILURE;
97  }
98 
99  FILE* fp = std::fopen("calonoise.txt","w");
100 
107  if( not caloMgrHandle.isValid()){
108  std::fclose(fp);
109  ATH_MSG_ERROR("CaloRescaleNoise::stop: caloMgrHandle invalid.");
110  return StatusCode::FAILURE;
111  }
112  const CaloDetDescrManager* calodetdescrmgr = *caloMgrHandle;
113 
115  ATH_MSG_INFO ( " start loop over Calo cells " << ncell );
116  for (int i=0;i<ncell;i++) {
117  IdentifierHash idHash=i;
118  Identifier id=m_calo_id->cell_id(idHash);
119  HWIdentifier hwid=cabling->createSignalChannelID(id);
120  const CaloDetDescrElement* calodde = calodetdescrmgr->get_element(id);
121  int subCalo;
122  IdentifierHash idSubHash = m_calo_id->subcalo_cell_hash (idHash, subCalo);
123 
124  int iCool=-1;
125  if (m_calo_id->is_em(id)) { // EM calo
126  if (m_calo_id->is_em_barrel(id)) {
127  if (m_calo_id->pos_neg(id) > 0 )
128  iCool=2;
129  else
130  iCool=1;
131  }
132  if (m_calo_id->is_em_endcap(id)) {
133  if (m_calo_id->pos_neg(id) > 0 )
134  iCool=3;
135  else
136  iCool=0;
137  }
138 
139  }
140  if (m_calo_id->is_hec(id)) { // HEC
141  iCool=16;
142  }
143  if (m_calo_id->is_fcal(id)) { // Fcal
144  iCool=32;
145  }
146  if (m_calo_id->is_tile(id)) { // Tile
147  iCool=48;
148  }
149  int ii = (int) (idSubHash);
150 
151  m_iCool = iCool;
152  m_SubHash = ii;
153  m_Hash = i;
154  m_OffId = (int)(id.get_identifier32().get_compact());
155 
156  m_eta = calodde->eta_raw();
157  m_phi = calodde->phi_raw();
159 
160  int ngain;
161  if (subCalo<3) ngain=3;
162  else ngain=4;
163 
164  float hvcorr=1.;
165  float hvonline=1.;
166 
167  if (iCool<48) {
168  hvcorr = scaleCorr->HVScaleCorr(hwid);
169  hvonline = onlineScaleCorr->HVScaleCorr(hwid);
170  }
171 
172  for (int igain=0;igain<ngain;igain++) {
173 
175  if (subCalo<3) {
179  }
180  else {
185  }
186  m_Gain = igain;
187 
188  m_noise = totalNoise->getNoise(id,gain);
189  m_elecNoise = elecNoise->getNoise(id,gain);
190  m_pileupNoise = pileupNoise->getNoise(id,gain);
191 
192  if (hvonline>0.) {
193  if (m_absScaling) {
194  m_elecNoiseRescaled = m_elecNoise*hvonline;
195  if (iCool<48 && m_elecNoise>0. && hvonline > 1.) {
196  ATH_MSG_WARNING ( " Abs. scaled Noise cell " << m_Hash <<
197  " layer/ieta/iphi " << m_calo_id->sampling(id) << " " << m_calo_id->eta(id) << " " << m_calo_id->phi(id) << " OldNoise,NewNoise " <<
198  m_elecNoise << " " << m_elecNoiseRescaled );
199  }
200  } else {
202  if (iCool<48 && m_elecNoise>0. && std::fabs(m_elecNoiseRescaled/m_elecNoise-1.)>0.05) {
203  ATH_MSG_WARNING ( " DifferentNoise cell " << m_calo_id->show_to_string(id) <<
204  " layer/eta/phi " << m_layer << " " << m_eta << " " << m_phi << " OldNoise,NewNoise " <<
205  m_elecNoise << " " << m_elecNoiseRescaled );
206  }
207  }
208  } else {
210  }
211 
212  if (iCool<48) fprintf(fp,"%5d %5d %5d %8.3f %8.3f\n",iCool,ii,gain,m_elecNoiseRescaled,m_pileupNoise);
213 
214  m_tree->Fill();
215 
216  } // loop over gains
217 
218  } // loop over cells
219 
220  std::fclose(fp);
221  return StatusCode::SUCCESS;
222  }
223 
225 {
226  return StatusCode::SUCCESS;
227 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
CaloRescaleNoise::stop
virtual StatusCode stop() override
standard Athena-Algorithm method
Definition: CaloRescaleNoise.cxx:89
CaloRescaleNoise::m_pileupNoise
float m_pileupNoise
Definition: CaloRescaleNoise.h:85
CaloRescaleNoise.h
CaloRescaleNoise::m_layer
int m_layer
Definition: CaloRescaleNoise.h:81
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
CaloRescaleNoise::m_OffId
int m_OffId
Definition: CaloRescaleNoise.h:78
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
CaloCell_Base_ID::is_em_endcap
bool is_em_endcap(const Identifier id) const
test if the id belongs to the EM Endcap
CaloCell_Base_ID::pos_neg
int pos_neg(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell. Provides a generic interface for al...
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
CaloCondBlobAlgs_fillNoiseFromASCII.gain
gain
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:110
CaloDetDescrManager_Base::get_element
const CaloDetDescrElement * get_element(const Identifier &cellId) const
get element by its identifier
Definition: CaloDetDescrManager.cxx:159
ReadCellNoiseFromCool.cabling
cabling
Definition: ReadCellNoiseFromCool.py:154
CaloRescaleNoise::CaloRescaleNoise
CaloRescaleNoise(const std::string &name, ISvcLocator *pSvcLocator)
Standard Athena-Algorithm Constructor.
Definition: CaloRescaleNoise.cxx:18
CaloCell.h
CaloRescaleNoise::m_caloMgrKey
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloMgrKey
Definition: CaloRescaleNoise.h:73
CaloRescaleNoise::m_cablingKey
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
Definition: CaloRescaleNoise.h:68
CaloCell_Base_ID::calo_sample
int calo_sample(const Identifier id) const
returns an int taken from Sampling enum and describing the subCalo to which the Id belongs.
Definition: CaloCell_Base_ID.cxx:141
CaloRescaleNoise::m_pileupNoiseKey
SG::ReadCondHandleKey< CaloNoise > m_pileupNoiseKey
Definition: CaloRescaleNoise.h:63
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
CaloCell_Base_ID::is_tile
bool is_tile(const Identifier id) const
test if the id belongs to the Tiles
HWIdentifier
Definition: HWIdentifier.h:13
CaloNoise::getNoise
float getNoise(const IdentifierHash h, const int gain) const
Accessor by IdentifierHash and gain.
Definition: CaloNoise.h:34
CaloGain::TILELOWLOW
@ TILELOWLOW
Definition: CaloGain.h:12
CaloCell_Base_ID::is_hec
bool is_hec(const Identifier id) const
test if the id belongs to the HEC
CaloDetDescrElement::eta_raw
float eta_raw() const
cell eta_raw
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:350
CaloCell_ID.h
AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
CaloRescaleNoise::m_thistSvc
ServiceHandle< ITHistSvc > m_thistSvc
Definition: CaloRescaleNoise.h:54
CaloGain::TILEHIGHHIGH
@ TILEHIGHHIGH
Definition: CaloGain.h:15
CaloRescaleNoise::m_SubHash
int m_SubHash
Definition: CaloRescaleNoise.h:76
BchCleanup.mgr
mgr
Definition: BchCleanup.py:294
CaloRescaleNoise::m_totalNoiseKey
SG::ReadCondHandleKey< CaloNoise > m_totalNoiseKey
Definition: CaloRescaleNoise.h:59
CaloCell_Base_ID::is_em
bool is_em(const Identifier id) const
test if the id belongs to LArEM
CaloRescaleNoise::m_eta
float m_eta
Definition: CaloRescaleNoise.h:79
CaloRescaleNoise::m_Hash
int m_Hash
Definition: CaloRescaleNoise.h:77
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
CaloIdManager
This class initializes the Calo (LAr and Tile) offline identifiers.
Definition: CaloIdManager.h:45
CaloRescaleNoise::m_elecNoiseKey
SG::ReadCondHandleKey< CaloNoise > m_elecNoiseKey
Definition: CaloRescaleNoise.h:61
lumiFormat.i
int i
Definition: lumiFormat.py:85
trigmenu_modify_prescale_json.fp
fp
Definition: trigmenu_modify_prescale_json.py:53
CaloCell_Base_ID::is_fcal
bool is_fcal(const Identifier id) const
test if the id belongs to the FCAL - true also for MiniFCAL
CaloCell_Base_ID::sampling
int sampling(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
CaloCell_Base_ID::eta
int eta(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CaloCell_Base_ID::subcalo_cell_hash
IdentifierHash subcalo_cell_hash(const Identifier cellId, int &subCalo) const
create hash id from 'global' cell id
WriteCellNoiseToCool.igain
igain
Definition: WriteCellNoiseToCool.py:338
CaloGain::TILEHIGHLOW
@ TILEHIGHLOW
Definition: CaloGain.h:14
AthAlgorithm
Definition: AthAlgorithm.h:47
CaloCell_Base_ID::is_em_barrel
bool is_em_barrel(const Identifier id) const
test if the id belongs to the EM barrel
ReadCellNoiseFromCool.ncell
ncell
Definition: ReadCellNoiseFromCool.py:197
CaloGain::TILELOWHIGH
@ TILELOWHIGH
Definition: CaloGain.h:13
CaloRescaleNoise::m_onlineScaleCorrKey
SG::ReadCondHandleKey< ILArHVScaleCorr > m_onlineScaleCorrKey
Definition: CaloRescaleNoise.h:70
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
CaloNoise.h
CaloRescaleNoise::m_elecNoiseRescaled
float m_elecNoiseRescaled
Definition: CaloRescaleNoise.h:86
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
CaloRescaleNoise::initialize
virtual StatusCode initialize() override
standard Athena-Algorithm method
Definition: CaloRescaleNoise.cxx:45
CaloGain::LARHIGHGAIN
@ LARHIGHGAIN
Definition: CaloGain.h:18
CaloCell_Base_ID::phi
int phi(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
CaloCell_Base_ID::cell_id
Identifier cell_id(const int subCalo, const int barec_or_posneg, const int sampling_or_fcalmodule, const int region_or_dummy, const int eta, const int phi) const
Make a cell (== channel) ID from constituting fields and subCalo index; for (Mini)FCAL,...
CaloGain::CaloGain
CaloGain
Definition: CaloGain.h:11
CaloRescaleNoise::m_iCool
int m_iCool
Definition: CaloRescaleNoise.h:75
CaloGain::LARMEDIUMGAIN
@ LARMEDIUMGAIN
Definition: CaloGain.h:18
CaloRescaleNoise::m_elecNoise
float m_elecNoise
Definition: CaloRescaleNoise.h:84
CaloDetDescrManager
This class provides the client interface for accessing the detector description information common to...
Definition: CaloDetDescrManager.h:473
AtlasDetectorID::show_to_string
std::string show_to_string(Identifier id, const IdContext *context=0, char sep='.') const
or provide the printout in string form
Definition: AtlasDetectorID.cxx:574
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
CaloRescaleNoise::m_phi
float m_phi
Definition: CaloRescaleNoise.h:80
CaloRescaleNoise::m_scaleCorrKey
SG::ReadCondHandleKey< ILArHVScaleCorr > m_scaleCorrKey
Definition: CaloRescaleNoise.h:66
CaloRescaleNoise::m_noise
float m_noise
Definition: CaloRescaleNoise.h:83
CaloRescaleNoise::~CaloRescaleNoise
virtual ~CaloRescaleNoise()
Default Destructor.
Definition: CaloRescaleNoise.cxx:40
PlotCalibFromCool.ngain
ngain
Definition: PlotCalibFromCool.py:565
CaloRescaleNoise::m_tree
TTree * m_tree
Definition: CaloRescaleNoise.h:87
ILArHVScaleCorr::HVScaleCorr
virtual const float & HVScaleCorr(const HWIdentifier &id) const =0
CaloGain::LARLOWGAIN
@ LARLOWGAIN
Definition: CaloGain.h:18
IdentifierHash
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
CaloRescaleNoise::m_absScaling
bool m_absScaling
Definition: CaloRescaleNoise.h:88
CaloGain.h
CaloRescaleNoise::execute
virtual StatusCode execute() override
standard Athena-Algorithm method
Definition: CaloRescaleNoise.cxx:82
CaloRescaleNoise::m_calo_id
const CaloCell_ID * m_calo_id
Definition: CaloRescaleNoise.h:56
CaloRescaleNoise::finalize
virtual StatusCode finalize() override
standard Athena-Algorithm method
Definition: CaloRescaleNoise.cxx:224
CaloRescaleNoise::m_Gain
int m_Gain
Definition: CaloRescaleNoise.h:82
CaloDetDescrElement::phi_raw
float phi_raw() const
cell phi_raw
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:352
CaloCell_Base_ID::calo_cell_hash_max
size_type calo_cell_hash_max(void) const
cell 'global' hash table max size
LArOnOffIdMapping
Definition: LArOnOffIdMapping.h:20
Identifier
Definition: IdentifierFieldParser.cxx:14