ATLAS Offline Software
Loading...
Searching...
No Matches
FCAL_HV_Energy_Rescale.cxx
Go to the documentation of this file.
1
2
3/*
4 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
5*/
6
7// FCAL_HV_Energy_Rescale.cxx
8// Implementation file for class FCAL_HV_Energy_Rescale
9// Author: S.Binet<binet@cern.ch>
11
12// CaloCondPhysAlgs includes
17
21
22#include "CoolKernel/types.h"
23#include "CoolKernel/Record.h"
24#include "CoralBase/AttributeListSpecification.h"
25
27 ISvcLocator* pSvcLocator ) :
28 AthAlgorithm( name, pSvcLocator )
29{
30 declareProperty("Folder",m_folder="/LAR/CellCorrOfl/EnergyCorr");
31}
32
33
35= default;
36
37
39{
40 ATH_CHECK( m_cablingKey.initialize());
41 ATH_CHECK( m_scaleCorrKey.initialize());
42 return StatusCode::SUCCESS;
43}
44
46{
47 return StatusCode::SUCCESS;
48}
49
51{
52 return StatusCode::SUCCESS;
53}
54
55StatusCode FCAL_HV_Energy_Rescale::stop()
56{
57 const EventContext& ctx = Gaudi::Hive::currentContext();
59
60 const CaloCell_ID* calocell_id;
61 CHECK(detStore()->retrieve(calocell_id,"CaloCell_ID"));
62
63 IdentifierHash hashMin,hashMax;
64 calocell_id->calo_cell_hash_range(CaloCell_ID::LARFCAL, hashMin,hashMax);
65
67 const LArOnOffIdMapping* cabling{*cablingHdl};
68 if(!cabling) {
69 ATH_MSG_ERROR("Do not have cabling mapping from key " << m_cablingKey.key() );
70 return StatusCode::FAILURE;
71 }
72
73 ATH_MSG_INFO( "Working on hash range 0 to " << hashMax );
74
75 coral::AttributeListSpecification* spec = new coral::AttributeListSpecification();
76 spec->extend("CaloCondBlob16M","blob");// , cool::StorageType::Blob16M);
77 AthenaAttributeList* attrList=new AthenaAttributeList(*spec);
78 coral::Blob& blob=(*attrList)["CaloCondBlob16M"].data<coral::Blob>();
79 CaloCondBlobFlt* flt= CaloCondBlobFlt::getInstance(blob);
80 spec->release(); // deletes spec
81 // cppcheck-suppress memleak
82 spec = nullptr;
83
84 //Blob Definition Vector
85 std::vector<std::vector<float> > defVec;
86 defVec.emplace_back(1,1);
87 flt->init(defVec,hashMax,1);
88
89 CHECK(detStore()->record(attrList,m_folder));
90
91 std::vector<float> setVec(1,1);
92 unsigned nFCAL=0, nSmall=0, nSet=0;
93 for(unsigned h=0;h<hashMax;++h) {
94 float value=1.0;
95 if (calocell_id->is_fcal(h)) {
96 ++nFCAL;
97 Identifier id=calocell_id->cell_id(h);
98 HWIdentifier hwid=cabling->createSignalChannelID(id);
99 const float corr=scaleCorr->HVScaleCorr(hwid);
100
101 if (std::fabs(1.0-corr)>0.01) {
102 value=corr;
103 ++nSet;
104 }
105 else
106 ++nSmall;
107 ATH_MSG_INFO( "FCAL module " << calocell_id->sampling(id) << " corr=" << corr << " =>" << value );
108 }
109 //std::cout << h << " " << value << std::endl;
110 setVec[0]=value;
111 flt->setData(h,0,setVec);
112 }//end loop over hash
113
114 ATH_MSG_INFO( "Found " << nFCAL << " FCAL channels of which " << nSet << " have a correction. (" << nSmall << " below threshold)" );
115
116 return StatusCode::SUCCESS;
117}
118
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
Helpers for checking error return status codes and reporting errors.
#define CHECK(...)
Evaluate an expression and check for errors.
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
const ServiceHandle< StoreGateSvc > & detStore() const
bool is_fcal(const Identifier id) const
test if the id belongs to the FCAL - true also for MiniFCAL
int sampling(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
void calo_cell_hash_range(const Identifier id, IdentifierHash &caloCellMin, IdentifierHash &caloCellMax) const
to loop on 'global' cell hashes of one sub-calorimeter alone
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,...
Helper class for offline cell identifiers.
Definition CaloCell_ID.h:34
static CaloCondBlobFlt * getInstance(coral::Blob &blob)
Returns a pointer to a non-const CaloCondBlobFlt.
virtual StatusCode initialize()
SG::ReadCondHandleKey< ILArHVScaleCorr > m_scaleCorrKey
virtual ~FCAL_HV_Energy_Rescale()
Destructor:
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
FCAL_HV_Energy_Rescale(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
This is a "hash" representation of an Identifier.