ATLAS Offline Software
Loading...
Searching...
No Matches
GetLCWeights Class Reference

Top algorithm to generate Weight histograms for Local Hadron Calibration. More...

#include <GetLCWeights.h>

Inheritance diagram for GetLCWeights:
Collaboration diagram for GetLCWeights:

Public Member Functions

 GetLCWeights (const std::string &name, ISvcLocator *pSvcLocator)
virtual ~GetLCWeights ()
virtual StatusCode initialize ()
virtual StatusCode execute (const EventContext &ctx)
 Execute method with EventContext.
virtual StatusCode finalize ()
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual StatusCode execute ()
 Execute method without EventContext (deprecated).
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const
const EventContext & getContext () const
 Deprecated methods (use the ones with EventContext).
bool filterPassed () const
void setFilterPassed (bool state) const

Protected Member Functions

virtual bool isReEntrant () const override final
 Legacy algorithms are not thread-safe.
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

void mapinsert (const std::vector< Gaudi::Histo1DDef > &dims)
void mapparse ()
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

std::vector< std::vector< Gaudi::Histo1DDef > > m_dimensions
 definition of all dimensions used for each sampling
std::map< std::string, Gaudi::Histo1DDef > m_dimensionsmap
 property to set all dimensions introduced above
std::vector< std::vector< int > > m_isampmap
 Vector of indices in m_dimensions for each sampling.
std::vector< std::vector< TProfile2D * > > m_weight
 Vector of vector of actual histograms.
std::string m_outputFileName
 Name of the output file to save histograms in.
std::unique_ptr< TFile > m_outputFile
 Output file to save histograms in.
SG::ReadHandleKey< xAOD::CaloClusterContainerm_clusterCollName
 Name of the CaloClusterContainer to use.
SG::ReadHandleKeyArray< CaloCalibrationHitContainerm_CalibrationHitContainerNames
 vector of calibration hit container names to use.
bool m_useInversionMethod
 flag to switch on/off the use of the inversion method
std::string m_NormalizationType
 string to choose different normalization types
int m_NormalizationTypeNumber
std::string m_ClassificationType
 string to choose different classification types
int m_ClassificationTypeNumber
DataObjIDColl m_extendedExtraObjects
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default).
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default).
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Top algorithm to generate Weight histograms for Local Hadron Calibration.

Version
$Id: GetLCWeights.h,v 1.2 2008-12-08 16:57:41 menke Exp $
Author
Sven Menke menke.nosp@m.@mpp.nosp@m.mu.mp.nosp@m.g.de
Date
3-October-2008

This class is an Algorithm to generate the 2D histograms from single pion simulations to cell-weight the hadronic classified clusters.

Definition at line 41 of file GetLCWeights.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ GetLCWeights()

GetLCWeights::GetLCWeights ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 45 of file GetLCWeights.cxx.

47 : AthAlgorithm(name, pSvcLocator),
48 m_outputFile(nullptr),
49 m_clusterCollName("CaloTopoClusters"),
55{
56
57 std::vector<Gaudi::Histo1DDef> dims(7);
58 dims[1] = Gaudi::Histo1DDef("side",-1.5,1.5,1);
59 dims[2] = Gaudi::Histo1DDef("|eta|",0.,1.6,16);
60 dims[3] = Gaudi::Histo1DDef("phi",-M_PI,M_PI,1);
61 dims[4] = Gaudi::Histo1DDef("log10(E_clus (MeV))",log10(200),log10(1e6),14);
62 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.6,1.1,14);
63 dims[6] = Gaudi::Histo1DDef("weight",-2,3,1);
64
65 dims[0] = Gaudi::Histo1DDef("EMB1",0.5,1.5,1);
66 mapinsert(dims);
67 dims[0] = Gaudi::Histo1DDef("EMB2",1.5,2.5,1);
68 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.8,0.5,14);
69 mapinsert(dims);
70 dims[0] = Gaudi::Histo1DDef("EMB3",2.5,3.5,1);
71 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.9,0.6,14);
72 mapinsert(dims);
73 dims[0] = Gaudi::Histo1DDef("EME1",4.5,5.5,1);
74 dims[2] = Gaudi::Histo1DDef("|eta|",1.2,3.2,20);
75 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.5,1.7,14);
76 mapinsert(dims);
77 dims[0] = Gaudi::Histo1DDef("EME2",5.5,6.5,1);
78 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.8,1.2,14);
79 mapinsert(dims);
80 dims[0] = Gaudi::Histo1DDef("EME3",6.5,7.5,1);
81 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.5,1.0,14);
82 mapinsert(dims);
83 dims[0] = Gaudi::Histo1DDef("HEC0",7.5,8.5,1);
84 dims[2] = Gaudi::Histo1DDef("|eta|",1.4,3.4,20);
85 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.8,0.6,14);
86 mapinsert(dims);
87 dims[0] = Gaudi::Histo1DDef("HEC1",8.5,9.5,1);
88 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.9,-0.2,14);
89 mapinsert(dims);
90 dims[0] = Gaudi::Histo1DDef("HEC2",9.5,10.5,1);
91 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.8,-0.2,14);
92 mapinsert(dims);
93 dims[0] = Gaudi::Histo1DDef("HEC3",10.5,11.5,1);
94 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.7,-0.2,14);
95 mapinsert(dims);
96 dims[0] = Gaudi::Histo1DDef("TileBar0",11.5,12.5,1);
97 dims[2] = Gaudi::Histo1DDef("|eta|",0.,1.2,12);
98 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-6,-1,14);
99 mapinsert(dims);
100 dims[0] = Gaudi::Histo1DDef("TileBar1",12.5,13.5,1);
101 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-6.7,-1.2,14);
102 mapinsert(dims);
103 dims[0] = Gaudi::Histo1DDef("TileBar2",13.5,14.5,1);
104 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-7,-1.9,14);
105 mapinsert(dims);
106 dims[0] = Gaudi::Histo1DDef("TileGap1",14.5,15.5,1);
107 dims[2] = Gaudi::Histo1DDef("|eta|",0.8,1.8,10);
108 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-6,-1,14);
109 mapinsert(dims);
110 dims[0] = Gaudi::Histo1DDef("TileGap2",15.5,16.5,1);
111 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-6.5,-1.5,14);
112 mapinsert(dims);
113 dims[0] = Gaudi::Histo1DDef("TileExt0",17.5,18.5,1);
114 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-6.5,-1,14);
115 mapinsert(dims);
116 dims[0] = Gaudi::Histo1DDef("TileExt1",18.5,19.5,1);
117 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-6.6,-1.5,14);
118 mapinsert(dims);
119 dims[0] = Gaudi::Histo1DDef("TileExt2",19.5,20.5,1);
120 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-7.2,-2.4,14);
121 mapinsert(dims);
122 dims[0] = Gaudi::Histo1DDef("FCal1",20.5,21.5,1);
123 dims[2] = Gaudi::Histo1DDef("|eta|",2.8,5.0,22);
124 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-3.5,2,14);
125 mapinsert(dims);
126 dims[0] = Gaudi::Histo1DDef("FCal2",21.5,22.5,1);
127 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-3.5,1.5,14);
128 mapinsert(dims);
129 dims[0] = Gaudi::Histo1DDef("FCal3",22.5,23.5,1);
130 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-3.8,1,14);
131 mapinsert(dims);
132
133 // Dimensions to use for all samplings
134 declareProperty("SamplingDimensions",m_dimensionsmap);
135
136 // Name of output file to save histograms in
137 declareProperty("OutputFileName",m_outputFileName);
138
139 // Name of ClusterContainer to use
140 declareProperty("ClusterCollectionName",m_clusterCollName);
141
142 // Names of CalibrationHitContainers to use
143 declareProperty("CalibrationHitContainerNames",m_CalibrationHitContainerNames);
144 // Use Inversion Method
145 declareProperty("UseInversionMethod",m_useInversionMethod);
146 // Normalization type "Const", "Lin", "Log", "NClus"
147 declareProperty("NormalizationType",m_NormalizationType);
148 // Classification type "None" for single pion MC or
149 // "ParticleID_EM" for ParticleID based em-type clusters
150 // "ParticleID_HAD" for ParticleID based had-type clusters
151 declareProperty("ClassificationType", m_ClassificationType);
152}
#define M_PI
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
std::string m_NormalizationType
string to choose different normalization types
bool m_useInversionMethod
flag to switch on/off the use of the inversion method
void mapinsert(const std::vector< Gaudi::Histo1DDef > &dims)
std::unique_ptr< TFile > m_outputFile
Output file to save histograms in.
std::map< std::string, Gaudi::Histo1DDef > m_dimensionsmap
property to set all dimensions introduced above
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_clusterCollName
Name of the CaloClusterContainer to use.
int m_NormalizationTypeNumber
int m_ClassificationTypeNumber
std::string m_ClassificationType
string to choose different classification types
std::string m_outputFileName
Name of the output file to save histograms in.
SG::ReadHandleKeyArray< CaloCalibrationHitContainer > m_CalibrationHitContainerNames
vector of calibration hit container names to use.

◆ ~GetLCWeights()

GetLCWeights::~GetLCWeights ( )
virtual

Definition at line 156 of file GetLCWeights.cxx.

157{ }

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute() [1/2]

virtual StatusCode AthAlgorithm::execute ( )
inlinevirtualinherited

Execute method without EventContext (deprecated).

Override this method if the EventContext is not needed.

Reimplemented in AthenaMonManager, AthPrescaler, BuildVertexPointingAlg, CP::AsgClassificationDecorationAlg, CP::AsgEnergyDecoratorAlg, CP::AsgEventScaleFactorAlg, CP::AsgLeptonTrackDecorationAlg, CP::AsgObjectScaleFactorAlg, CP::AsgPriorityDecorationAlg, CP::AsgSelectionAlg, CP::AsgShallowCopyAlg, CP::AsgUnionPreselectionAlg, CP::AsgUnionSelectionAlg, CP::AsgViewFromSelectionAlg, CP::AsgxAODNTupleMakerAlg, CP::BJetCalibrationAlg, CP::BootstrapGeneratorAlg, CP::BTaggingEfficiencyAlg, CP::BTaggingInformationDecoratorAlg, CP::BTaggingTriggerEfficiencyAlg, CP::BTaggingTriggerMatchingAlg, CP::ChargeSelectorAlg, CP::CopyNominalSelectionAlg, CP::DileptonInvariantMassSelectorAlg, CP::DileptonInvariantMassWindowSelectorAlg, CP::DileptonOSSFInvariantMassWindowSelectorAlg, CP::DiTauEfficiencyCorrectionsAlg, CP::DiTauMassCalculatorAlg, CP::DiTauSmearingAlg, CP::DiTauTruthMatchingAlg, CP::EgammaCalibrationAndSmearingAlg, CP::EgammaFSRForMuonsCollectorAlg, CP::EgammaIsolationCorrectionAlg, CP::EgammaIsolationSelectionAlg, CP::ElectronEfficiencyCorrectionAlg, CP::ElectronSiHitDecAlg, CP::EventCutFlowHistAlg, CP::EventFlagSelectionAlg, CP::EventSelectionByObjectFlagAlg, CP::EventStatusSelectionAlg, CP::FakeBkgCalculatorAlg, CP::InDetTrackBiasingAlg, CP::InDetTrackExtraVarDecoratorAlg, CP::InDetTrackSelectionAlg, CP::InDetTrackSmearingAlg, CP::JetCalibAlg, CP::JetCalibrationAlg, CP::JetDecoratorAlg, CP::JetFFSmearingAlg, CP::JetGhostMuonAssociationAlg, CP::JetModifierAlg, CP::JetNGhostSelectorAlg, CP::JetReclusteringAlg, CP::JetSelectionAlg, CP::JetTriggerDecoratorAlg, CP::JetUncertaintiesAlg, CP::JvtEfficiencyAlg, CP::JvtUpdateAlg, CP::KinematicHistAlg, CP::LeptonSFCalculatorAlg, CP::MCTCDecorationAlg, CP::MetadataHistAlg, CP::MetBuilderAlg, CP::MetMakerAlg, CP::MetSignificanceAlg, CP::MissingETPlusTransverseMassSelectorAlg, CP::MissingETSelectorAlg, CP::MuonCalibrationAndSmearingAlg, CP::MuonEfficiencyScaleFactorAlg, CP::MuonIsolationAlg, CP::MuonSelectionAlgV2, CP::MuonTriggerEfficiencyScaleFactorAlg, CP::NJetDecoratorAlg, CP::NLargeRJetMassWindowSelectorAlg, CP::NObjectMassSelectorAlg, CP::NObjectPtSelectorAlg, CP::ObjectCutFlowHistAlg, CP::OverlapRemovalAlg, CP::PhotonEfficiencyCorrectionAlg, CP::PhotonExtraVariablesAlg, CP::PhotonShowerShapeFudgeAlg, CP::PileupReweightingAlg, CP::PileupReweightingProvider, CP::PMGTruthWeightAlg, CP::RNtupleTreeMakerAlg, CP::RunNumberSelectorAlg, CP::RunPartonHistoryAlg, CP::SaveFilterAlg, CP::SecVertexTruthMatchAlg, CP::SSVWeightsAlg, CP::SumNLeptonPtSelectorAlg, CP::SysListDumperAlg, CP::SysTruthWeightAlg, CP::TauCombineMuonRMTausAlg, CP::TauEfficiencyCorrectionsAlg, CP::TauSmearingAlg, CP::TauTruthMatchingAlg, CP::TransverseMassSelectorAlg, CP::TreeFillerAlg, CP::TreeMakerAlg, CP::TrigEventSelectionAlg, CP::TrigGlobalEfficiencyAlg, CP::TrigMatchingAlg, CP::TrigPrescalesAlg, CP::VGammaORAlg, CP::xAODWriterAlg, CP::XbbEfficiencyAlg, CP::XbbInformationDecoratorAlg, DecoratePhotonPointingAlg, DecorateVertexScoreAlg, DumpGeo, EL::AnaAlgorithm, EL::UnitTestAlg2, EL::UnitTestAlg3, EL::UnitTestAlg4, EL::UnitTestAlg5, EL::UnitTestAlg7, EventReco::KLFitterFinalizeOutputAlg, EventReco::RunKLFitterAlg, GRLSelectorAlg, IdDictCnvTest, InDetUpdateCaches, JetGlobalEventSetup, LArAutoCorrAlgToDB, LArAutoCorrFromStdNtuple, LArBadChannelHunter, LArBlockCorrections, LArCalibCopyAlg< CONDITIONSCONTAINER >, LArCalibCopyAlg< LArDAC2uAMC >, LArCalibCopyAlg< LArPhysWaveContainer >, LArCalibCopyAlg< LArTdriftComplete >, LArCalibPatchingAlg< CONDITIONSCONTAINER >, LArCalibPatchingAlg< LArAutoCorrComplete >, LArCalibPatchingAlg< LArCaliWaveContainer >, LArCalibPatchingAlg< LArMphysOverMcalComplete >, LArCalibPatchingAlg< LArRampComplete >, LArCalibValidationAlg< CONDITIONSCONTAINER, REFCONTAINER >, LArCalibValidationAlg< LArAutoCorrComplete, LArAutoCorrComplete >, LArCalibValidationAlg< LArCaliWaveContainer, LArCaliWaveContainer >, LArCalibValidationAlg< LArPedestalComplete, ILArPedestal >, LArCalibValidationAlg< LArRampComplete, ILArRamp >, LArCaliWaveSelector, LArCompleteToFlat, LArDeltaRespPredictor, LArDSPThresholdFillInline, LArDuplicateConstants, LArFillDSPConfig, LArFlatFromFile, LArGeoWeightsFill, LArMasterWaveBuilder, LArMphysOverMcalFromTuple, LArOFCAlg, LArOFCBin_PhysCaliTdiffFromStdNtuple, LArOFCtoOFC, LArOFPhaseFill, LArParamsFromStdNtuple, LArPhysWaveFromAscii, LArPhysWaveFromStdNtuple, LArPhysWaveFromTuple, LArPhysWavePredictor, LArPhysWaveShifter, LArRampAdHocPatchingAlg, LArReadParamsFromFile< DATA >, LArReadParamsFromFile< LArCableAttenuationComplete >, LArReadParamsFromFile< LArCableLengthComplete >, LArReadParamsFromFile< LArCaliPulseParamsComplete >, LArReadParamsFromFile< LArDetCellParamsComplete >, LArReadParamsFromFile< LArEMEC_CphiComplete >, LArReadParamsFromFile< LArEMEC_HValphaComplete >, LArReadParamsFromFile< LArEMEC_HVbetaComplete >, LArReadParamsFromFile< LArMphysOverMcalComplete >, LArReadParamsFromFile< LArPhysCaliTdiffComplete >, LArReadParamsFromFile< LArRinjComplete >, LArReadParamsFromFile< LArTdriftComplete >, LArReadParamsFromFile< LArTshaperComplete >, LArRTMParamExtractor, LArShapeFromStdNtuple, LArTimePhysPrediction, LisNtuple, LVL1::eFEXDriver, LVL1::L1CaloTriggerTowerDecoratorAlg, LVL1::L1TopoSimulation, LVL1::TrigT1MBTS, OverlapRemovalGenUseAlg, PyAthena::Alg, SGInputLoader, SUSYToolsAlg, TBBPCRec, TBMWPCRec, TBScintillatorRec, TBTailCatcherRec, TBTrackInfoFromTag, Trig::TrigMatchTestAlg, TrkEDMTestAlg, ZdcLEDNtuple, and ZdcNtuple.

Definition at line 76 of file AthAlgorithm.h.

76 {
77 throw GaudiException( "execute() or execute(const EventContext&) needs to be implemented", name(),
78 StatusCode::FAILURE );
79 }

◆ execute() [2/2]

StatusCode GetLCWeights::execute ( const EventContext & )
virtual

Execute method with EventContext.

Override this method if acccess to the EventContext is needed.

Reimplemented from AthAlgorithm.

Definition at line 355 of file GetLCWeights.cxx.

356{
357 SG::ReadHandle<xAOD::CaloClusterContainer> cc (m_clusterCollName, ctx);
358
359 std::vector<const CaloCalibrationHitContainer *> v_cchc;
360 for (const SG::ReadHandleKey<CaloCalibrationHitContainer>& k : m_CalibrationHitContainerNames) {
361 SG::ReadHandle<CaloCalibrationHitContainer> cchc (k, ctx);
362 v_cchc.push_back(cchc.cptr());
363 }
364
365 std::vector<ClusWeight *> cellVector[CaloCell_ID::NSUBCALO];
366
367 const CaloCell_ID* calo_id = nullptr;
368 ATH_CHECK(detStore()->retrieve(calo_id,"CaloCell_ID"));
369
370 for(int ic=0;ic<CaloCell_ID::NSUBCALO; ic++) {
371 unsigned int maxHashSize(0);
372 IdentifierHash myHashMin,myHashMax;
373 calo_id->calo_cell_hash_range (ic,myHashMin,myHashMax);
374 maxHashSize = myHashMax-myHashMin;
375 cellVector[ic].resize(maxHashSize,nullptr);
376 }
377
378 // loop over all cell members of all clusters and fill cell vector
379 // for used cells
380
381 // total calib hit energy of all clusters
382 double eCalibTot(0.);
383
384 unsigned int iClus = 0;
385 double nClusECalibGt0 = 0.0;
386 for (const xAOD::CaloCluster* theCluster : *cc) {
387 double eC=999;
388 if (!theCluster->retrieveMoment(xAOD::CaloCluster::ENG_CALIB_TOT,eC)) {
389 ATH_MSG_ERROR( "Failed to retrieve cluster moment ENG_CALIB_TOT");
390 return StatusCode::FAILURE;
391 }
393 double emFrac=-999;
394 if (!theCluster->retrieveMoment(xAOD::CaloCluster::ENG_CALIB_FRAC_EM,emFrac)){
395 ATH_MSG_ERROR( "Failed to retrieve cluster moment ENG_CALIB_FAC_EM");
396 return StatusCode::FAILURE;
397 }
399 eC = 0;
401 eC = 0;
402 }
403 eCalibTot += eC;
404 if ( eC > 0 ) {
405 nClusECalibGt0++;
406 }
407 xAOD::CaloCluster::const_cell_iterator cellIter = theCluster->cell_begin();
408 xAOD::CaloCluster::const_cell_iterator cellIterEnd = theCluster->cell_end();
409 for(; cellIter != cellIterEnd; cellIter++ ){
410 const CaloCell* pCell = (*cellIter);
411 Identifier myId = pCell->ID();
412 IdentifierHash myHashId;
413 int otherSubDet(0);
414 myHashId = calo_id->subcalo_cell_hash(myId,otherSubDet);
415 ClusWeight * myClus = new ClusWeight();
416 myClus->iClus = iClus;
417 myClus->weight = cellIter.weight();
418 myClus->next = nullptr;
419 myClus->eCalibTot = 0;
420 ClusWeight * theList = cellVector[otherSubDet][(unsigned int)myHashId];
421 if ( theList ) {
422 while ( theList->next )
423 theList = theList->next;
424 theList->next = myClus;
425 }
426 else {
427 cellVector[otherSubDet][(unsigned int)myHashId] = myClus;
428 }
429 }
430 }
431
432 // calculate total calib energy of each cell in each cluster
433
434 for (const CaloCalibrationHitContainer* cchc : v_cchc) {
435 for (const CaloCalibrationHit* hit : *cchc) {
436 Identifier myId = hit->cellID();
437 int otherSubDet;
438 IdentifierHash myHashId = calo_id->subcalo_cell_hash(myId,otherSubDet);
439 if ( myHashId != CaloCell_ID::NOT_VALID ) {
440 ClusWeight * theList = cellVector[otherSubDet][(unsigned int)myHashId];
441 while ( theList ) {
442 theList->eCalibTot += hit->energyTotal();
443 theList = theList->next;
444 }
445 }
446 }
447 }
448
449 // fill weight histos for all cells in all clusters
450 // since pions can be split in several clusters the weights are
451 // calculated by importance of the cluster for the current pion - i.e.
452 // the weights get a weight itself proportinal to the calib hit energy
453 // sum of the cluster over the total calib hit energy
454
455 if ( eCalibTot > 0 && nClusECalibGt0 > 0 ) {
456 const double inv_eCalibTot = 1. / eCalibTot;
457 const double inv_nClusECalibGt0 = 1. / nClusECalibGt0;
458 for (unsigned int j=0;j<cc->size();j++) {
459 const xAOD::CaloCluster * pClus = cc->at(j);
460 double eng = pClus->e();
461 double eCalib=-999;
463 ATH_MSG_ERROR( "Failed to retrieve cluster moment ENG_CALIB_TOT");
464 return StatusCode::FAILURE;
465 }
466 if ( eng > 0 && eCalib > 0 ) {
468 double emFrac=-999;
470 ATH_MSG_ERROR( "Failed to retrieve cluster moment ENG_CALIB_FAC_EM");
471 return StatusCode::FAILURE;
472 }
474 continue;
476 continue;
477 }
480 for(; cellIter != cellIterEnd; cellIter++ ){
481 const CaloCell* pCell = (*cellIter);
482 const Identifier myId = pCell->ID();
483 const CaloDetDescrElement* myCDDE=pCell->caloDDE();
484 const int caloSample = myCDDE->getSampling();//m_calo_id->calo_sample(myId);
485 if ( !m_isampmap[caloSample].empty() &&
486 !m_weight[caloSample].empty() ) {
487 int isideCell = 0;
488 int ietaCell = 0;
489 int iphiCell = 0;
490 int nside = 1;
491 int neta = 1;
492 int nphi = 1;
493 if ( m_isampmap[caloSample][1] >= 0 ) {
494 const Gaudi::Histo1DDef & hd = m_dimensions[m_isampmap[caloSample][0]][m_isampmap[caloSample][1]];
495 nside = hd.bins();
496 isideCell = (int)(nside*(((pCell->eta()<0?-1.0:1.0) - hd.lowEdge())
497 /(hd.highEdge()-hd.lowEdge())));
498 if ( isideCell < 0 || isideCell > nside-1 ) {
499 ATH_MSG_WARNING( " Side index out of bounds " <<
500 isideCell << " not in [0," << nside-1 << "] for "
501 << "Sampl=" << caloSample );
502 isideCell = -1;
503 }
504 }
505 if ( m_isampmap[caloSample][2] >= 0 ) {
506 const Gaudi::Histo1DDef & hd = m_dimensions[m_isampmap[caloSample][0]][m_isampmap[caloSample][2]];
507 neta = hd.bins();
508 ietaCell = (int)(neta*((fabs(pCell->eta()) - hd.lowEdge())
509 /(hd.highEdge()-hd.lowEdge())));
510 if ( ietaCell < 0 || ietaCell > neta-1 ) {
511 ATH_MSG_WARNING( " Eta index out of bounds " <<
512 ietaCell << " not in [0," << neta-1 << "] for "
513 << "Sampl=" << caloSample );
514 ietaCell = -1;
515 }
516 }
517 if ( m_isampmap[caloSample][3] >= 0 ) {
518 const Gaudi::Histo1DDef & hd = m_dimensions[m_isampmap[caloSample][0]][m_isampmap[caloSample][3]];
519 nphi = hd.bins();
520 iphiCell = (int)(nphi*((pCell->phi() - hd.lowEdge())
521 /(hd.highEdge()-hd.lowEdge())));
522 if ( iphiCell < 0 || iphiCell > nphi-1 ) {
523 ATH_MSG_WARNING( " Phi index out of bounds " <<
524 iphiCell << " not in [0," << nphi-1 << "] for "
525 << "Sampl=" << caloSample );
526 iphiCell = -1;
527 }
528 }
529 if ( isideCell >=0 && ietaCell >=0 && iphiCell >= 0 ) {
530 if ( myCDDE->volume() > 0 ) {
531 IdentifierHash myHashId;
532 int otherSubDet(0);
533 myHashId = calo_id->subcalo_cell_hash(myId,otherSubDet);
534 unsigned int iW = iphiCell*neta*nside+ietaCell*nside+isideCell;
535 if ( iW >= m_weight[caloSample].size() ) {
536 ATH_MSG_WARNING( " Index out of bounds " <<
537 iW << " > " << m_weight[caloSample].size()-1 << " for "
538 << "Sampl=" << caloSample
539 << ", iphi=" << iphiCell
540 << ", ieta=" << ietaCell
541 << ", iside=" << isideCell );
542 }
543 else {
544 ClusWeight * theList = cellVector[otherSubDet][(unsigned int)myHashId];
545 while ( theList && theList->iClus != j )
546 theList = theList->next;
547
548 if (m_weight[caloSample][iW] && theList && eCalibTot > 0) {
549 double norm = 0.0;
551 norm = eCalib * inv_eCalibTot;
552 }
554 if ( eCalib > 0 ) {
555 // cluster has to have at least 1% of the calib hit E
556 norm = log10(eCalib * inv_eCalibTot)+2.0;
557 }
558 }
560 if ( eCalib > 0 ) {
561 norm = inv_nClusECalibGt0;
562 }
563 }
564 else {
565 norm = 1.0;
566 }
567 if ( norm > 0 ) {
568 if ( !m_useInversionMethod && pCell->e()>0 ) {
569 m_weight[caloSample][iW]->Fill(log10(eng),
570 log10(pCell->e()/myCDDE->volume()),
571 theList->eCalibTot/pCell->e(),norm);
572
573 }
574 else if (m_useInversionMethod && theList->eCalibTot>0 ) {
575 m_weight[caloSample][iW]->Fill(log10(eng),
576 log10(theList->eCalibTot/myCDDE->volume()),
577 pCell->e()/theList->eCalibTot,
578 norm);
579 }
580 }
581 }
582 }
583 }
584 }
585 }
586 }
587 }
588 }
589 }
590
591 for(unsigned int ic=0;ic<CaloCell_ID::NSUBCALO; ic++) {
592 for (unsigned int ii = 0;ii<cellVector[ic].size();ii++ ) {
593 ClusWeight * theList = cellVector[ic][ii];
594 ClusWeight * prev = nullptr;
595 while ( theList) {
596 while ( theList->next ) {
597 prev = theList;
598 theList = theList->next;
599 }
600 delete theList;
601 if ( prev )
602 prev->next = nullptr;
603 else
604 cellVector[ic][ii] = nullptr;
605 theList = cellVector[ic][ii];
606 prev = nullptr;
607 }
608 }
609 }
610
611 return StatusCode::SUCCESS;
612}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
CaloCalibrationHitContainer
size_t size() const
Number of registered mappings.
static const Attributes_t empty
const ServiceHandle< StoreGateSvc > & detStore() const
void calo_cell_hash_range(const Identifier id, IdentifierHash &caloCellMin, IdentifierHash &caloCellMax) const
to loop on 'global' cell hashes of one sub-calorimeter alone
IdentifierHash subcalo_cell_hash(const Identifier cellId, int &subCalo) const
create hash id from 'global' cell id
virtual double e() const override final
get energy (data member) (synonym to method energy()
Definition CaloCell.h:333
virtual double phi() const override final
get phi (through CaloDetDescrElement)
Definition CaloCell.h:375
const CaloDetDescrElement * caloDDE() const
get pointer to CaloDetDescrElement (data member)
Definition CaloCell.h:321
virtual double eta() const override final
get eta (through CaloDetDescrElement)
Definition CaloCell.h:382
Identifier ID() const
get ID (from cached data member) non-virtual and inline for fast access
Definition CaloCell.h:295
CaloCell_ID::CaloSample getSampling() const
cell sampling
unsigned int iClus
double eCalibTot
double weight
ClusWeight * next
std::vector< std::vector< Gaudi::Histo1DDef > > m_dimensions
definition of all dimensions used for each sampling
std::vector< std::vector< int > > m_isampmap
Vector of indices in m_dimensions for each sampling.
std::vector< std::vector< TProfile2D * > > m_weight
Vector of vector of actual histograms.
bool retrieveMoment(MomentType type, double &value) const
Retrieve individual moment.
virtual double e() const
The total energy of the particle.
CaloClusterCellLink::const_iterator const_cell_iterator
Iterator of the underlying CaloClusterCellLink (explicitly const version).
const_cell_iterator cell_end() const
@ ENG_CALIB_FRAC_EM
Calibration Hit energy inside the cluster caused by e/gamma/pi0.
@ ENG_CALIB_TOT
Calibration Hit energy inside the cluster.
const_cell_iterator cell_begin() const
Iterator of the underlying CaloClusterCellLink (const version).
@ PARTICLEID_EM
Definition GetLCDefs.h:25
@ PARTICLEID_HAD
Definition GetLCDefs.h:25
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)
int ic
Definition grepfile.py:33
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 50 of file AthAlgorithm.cxx.

51{
52 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}
DataObjIDColl m_extendedExtraObjects

◆ filterPassed()

bool AthAlgorithm::filterPassed ( ) const
inherited

Definition at line 94 of file AthAlgorithm.cxx.

94 {
95 return execState( Gaudi::Hive::currentContext() ).filterPassed();
96}

◆ finalize()

StatusCode GetLCWeights::finalize ( )
virtual

Definition at line 338 of file GetLCWeights.cxx.

339{
340 ATH_MSG_INFO( "Writing out histograms" );
341 m_outputFile->cd();
342 for(unsigned int i=0;i<m_weight.size();i++) {
343 for(unsigned int j=0;j<m_weight[i].size();j++) {
344 if ( m_weight[i][j] )
345 m_weight[i][j]->Write();
346 }
347 }
348 m_outputFile->Close();
349
350 return StatusCode::SUCCESS;
351}
#define ATH_MSG_INFO(x)

◆ getContext()

const EventContext & AthAlgorithm::getContext ( ) const
inherited

Deprecated methods (use the ones with EventContext).

Definition at line 90 of file AthAlgorithm.cxx.

90 {
91 return Gaudi::Hive::currentContext();
92}

◆ initialize()

StatusCode GetLCWeights::initialize ( )
virtual

Definition at line 161 of file GetLCWeights.cxx.

162{
163
164 m_outputFile = std::make_unique<TFile>(m_outputFileName.c_str(),"RECREATE");
165 m_outputFile->cd();
166
167 m_weight.resize(CaloSampling::Unknown);
168 m_isampmap.resize(CaloSampling::Unknown);
169 mapparse();
170
171
172 if ( m_NormalizationType == "Lin" ) {
173 ATH_MSG_INFO( "Using weighting proportional to E_calib" );
175 }
176 else if ( m_NormalizationType == "Log" ) {
177 ATH_MSG_INFO( "Using weighting proportional to log(E_calib)" );
179 }
180 else if ( m_NormalizationType == "NClus" ) {
181 ATH_MSG_INFO( "Using weighting proportional to 1/N_Clus_E_calib>0" );
183 }
184 else {
185 ATH_MSG_INFO( "Using constant weighting" );
187 }
188
189 if ( m_ClassificationType == "None" ) {
190 ATH_MSG_INFO( "Expecting single particle input" );
192 }
193 else if ( m_ClassificationType == "ParticleID_EM" ) {
194 ATH_MSG_INFO( "Expecting ParticleID simulation as input -- use EM type clusters only" );
196 }
197 else if ( m_ClassificationType == "ParticleID_HAD" ) {
198 ATH_MSG_INFO( "Expecting ParticleID simulation as input -- use HAD type clusters only" );
200 }
201 else {
202 ATH_MSG_WARNING( " unknown classification type " << m_ClassificationType << " given! Using None instead" );
204 }
205
206 for(unsigned int isamp=0;isamp<m_dimensions.size();isamp++) {
207 int theSampling(CaloSampling::Unknown);
208 for (unsigned int jsamp = 0;jsamp< CaloSampling::Unknown; jsamp++) {
210 theSampling = jsamp;
211 break;
212 }
213 }
214 if ( theSampling == CaloSampling::Unknown ) {
215 ATH_MSG_ERROR( "Calorimeter sampling "
216 << m_dimensions[isamp][0].title()
217 << " is not a valid Calorimeter sampling name and will be ignored! "
218 << "Valid names are: ";
219 for (unsigned int jsamp = 0;jsamp< CaloSampling::Unknown; jsamp++) {
221 if ( jsamp < CaloSampling::Unknown-1)
222 msg() << ", ";
223 else
224 msg() << ".";
225 }
226 msg() );
227 }
228 else {
229 m_isampmap[theSampling].resize(4,-1);
230 m_isampmap[theSampling][0] = isamp;
231 int iside(-1);
232 int ieta(-1);
233 int iphi(-1);
234 int ilogE(-1);
235 int ilogrho(-1);
236 int iweight(-1);
237
238 for(unsigned int idim=1;idim<m_dimensions[isamp].size();idim++) {
239 if ( m_dimensions[isamp][idim].title() == "side" ) {
240 iside = idim;
241 m_isampmap[theSampling][1] = iside;
242 }
243 else if ( m_dimensions[isamp][idim].title() == "|eta|" ) {
244 ieta = idim;
245 m_isampmap[theSampling][2] = ieta;
246 }
247 else if ( m_dimensions[isamp][idim].title() == "phi" ) {
248 iphi = idim;
249 m_isampmap[theSampling][3] = iphi;
250 }
251 else if ( m_dimensions[isamp][idim].title() == "log10(E_clus (MeV))" )
252 ilogE = idim;
253 else if ( m_dimensions[isamp][idim].title() == "log10(rho_cell (MeV/mm^3))" )
254 ilogrho = idim;
255 else if ( m_dimensions[isamp][idim].title() == "weight" )
256 iweight = idim;
257 }
258 if ( ilogE < 0 || ilogrho < 0 || iweight < 0 ) {
259 ATH_MSG_FATAL( " Mandatory dimension log10E, log10rho or weight missing ..." );
260 return StatusCode::FAILURE;
261 }
262 int nside = (iside>=0?m_dimensions[isamp][iside].bins():1);
263 int neta = (ieta>=0?m_dimensions[isamp][ieta].bins():1);
264 int nphi = (iphi>=0?m_dimensions[isamp][iphi].bins():1);
265 m_weight[theSampling].resize(nside*neta*nphi,nullptr);
266 for ( int jside=0;jside<nside;jside++) {
267 for ( int jeta=0;jeta<neta;jeta++) {
268 for ( int jphi=0;jphi<nphi;jphi++) {
269 TString wname("");
271 wname += "inv_weight";
272 else
273 wname += "weight";
274 wname += "_isamp_";
275 wname += theSampling;
276 wname += "_iside_";
277 wname += jside;
278 wname += "_[";
279 wname += (iside>=0?m_dimensions[isamp][iside].lowEdge():-1);
280 wname += ",";
281 wname += (iside>=0?m_dimensions[isamp][iside].highEdge():-1);
282 wname += ",";
283 wname += nside;
284 wname += "]";
285 wname += "_ieta_";
286 wname += jeta;
287 wname += "_[";
288 wname += (ieta>=0?m_dimensions[isamp][ieta].lowEdge():-1);
289 wname += ",";
290 wname += (ieta>=0?m_dimensions[isamp][ieta].highEdge():-1);
291 wname += ",";
292 wname += neta;
293 wname += "]";
294 wname += "_iphi_";
295 wname += jphi;
296 wname += "_[";
297 wname += (iphi>=0?m_dimensions[isamp][iphi].lowEdge():-1);
298 wname += ",";
299 wname += (iphi>=0?m_dimensions[isamp][iphi].highEdge():-1);
300 wname += ",";
301 wname += nphi;
302 wname += "]";
303 int iW = jphi*neta*nside+jeta*nside+jside;
304 m_weight[theSampling][iW]=
305 new TProfile2D(wname,wname,
306 m_dimensions[isamp][ilogE].bins(),
307 m_dimensions[isamp][ilogE].lowEdge(),
308 m_dimensions[isamp][ilogE].highEdge(),
309 m_dimensions[isamp][ilogrho].bins(),
310 m_dimensions[isamp][ilogrho].lowEdge(),
311 m_dimensions[isamp][ilogrho].highEdge(),
312 m_dimensions[isamp][iweight].lowEdge(),
313 m_dimensions[isamp][iweight].highEdge(),
314 "spread");
315 if ( m_useInversionMethod ) {
316 m_weight[theSampling][iW]->SetYTitle("log10(#rho_{cell}^{true} (MeV/mm^{3}))");
317 m_weight[theSampling][iW]->SetZTitle("E_{reco}/E_{tot}");
318 }
319 else {
320 m_weight[theSampling][iW]->SetYTitle("log10(#rho_{cell} (MeV/mm^{3}))");
321 m_weight[theSampling][iW]->SetZTitle("E_{tot}/E_{reco}");
322 }
323 m_weight[theSampling][iW]->SetXTitle("log10(E_{clus} (MeV))");
324 }
325 }
326 }
327 }
328 }
329
330 ATH_CHECK( m_clusterCollName.initialize() );
332
333 return StatusCode::SUCCESS;
334}
#define ATH_MSG_FATAL(x)
static const std::vector< std::string > bins
static const std::string & getSamplingName(const CaloSampling::CaloSample theSample)
Returns a string (name) for each CaloSampling.

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isReEntrant()

virtual bool AthAlgorithm::isReEntrant ( ) const
inlinefinaloverrideprotectedvirtualinherited

Legacy algorithms are not thread-safe.

Definition at line 118 of file AthAlgorithm.h.

118{ return false; }

◆ mapinsert()

void GetLCWeights::mapinsert ( const std::vector< Gaudi::Histo1DDef > & dims)
private

Definition at line 614 of file GetLCWeights.cxx.

614 {
615 for (unsigned int i=0;i<dims.size();i++) {
616 m_dimensionsmap[dims[0].title()+":"+dims[i].title()] = dims[i];
617 }
618}

◆ mapparse()

void GetLCWeights::mapparse ( )
private

Definition at line 620 of file GetLCWeights.cxx.

620 {
621
622 std::vector<int> theUsedSamplings(CaloSampling::Unknown,-1);
623
624 int nsamp(-1);
625
626 for (const std::pair<const std::string, Gaudi::Histo1DDef>& p : m_dimensionsmap) {
627 std::string_view dimname = std::string_view(p.first).substr(0,p.first.find(':'));
628 int theSampling(CaloSampling::Unknown);
629 for (unsigned int jsamp = 0;jsamp< CaloSampling::Unknown; jsamp++) {
631 theSampling = jsamp;
632 break;
633 }
634 }
635 if ( theSampling == CaloSampling::Unknown ) {
636 msg(MSG::ERROR) << "Calorimeter sampling " << dimname
637 << " is not a valid Calorimeter sampling name and will be ignored! "
638 << "Valid names are: ";
639 for (unsigned int jsamp = 0;jsamp< CaloSampling::Unknown; jsamp++) {
641 if ( jsamp < CaloSampling::Unknown-1)
642 msg() << ", ";
643 else
644 msg() << ".";
645 }
646 msg() << endmsg;
647 }
648 else {
649 if ( theUsedSamplings[theSampling] == -1 ) {
650 nsamp++;
651 theUsedSamplings[theSampling] = nsamp;
652 m_dimensions.resize(nsamp+1);
653 m_dimensions[nsamp].resize(0);
654 }
655 m_dimensions[theUsedSamplings[theSampling]].push_back(p.second);
656 ATH_MSG_DEBUG(" New Dimension for " << dimname << ": "
657 << p.second.title() << ", [" << p.second.lowEdge()
658 << ", " << p.second.highEdge()
659 << ", " << p.second.bins()
660 << "]");
661 }
662 }
663}
#define endmsg
#define ATH_MSG_DEBUG(x)

◆ msg()

MsgStream & AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setFilterPassed()

void AthAlgorithm::setFilterPassed ( bool state) const
inherited

Definition at line 98 of file AthAlgorithm.cxx.

98 {
99 execState( Gaudi::Hive::currentContext() ).setFilterPassed(state);
100}

◆ sysInitialize()

StatusCode AthAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc.

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.

Definition at line 66 of file AthAlgorithm.cxx.

66 {
68
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
87 return sc;
88}
static Double_t sc
virtual StatusCode sysInitialize() override
Override sysInitialize.
AthCommonDataStore(const std::string &name, T... args)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }

Member Data Documentation

◆ m_CalibrationHitContainerNames

SG::ReadHandleKeyArray<CaloCalibrationHitContainer> GetLCWeights::m_CalibrationHitContainerNames
private

vector of calibration hit container names to use.

The containers specified in this property should hold calibration hits inside the calorimeter systems.

Definition at line 138 of file GetLCWeights.h.

◆ m_ClassificationType

std::string GetLCWeights::m_ClassificationType
private

string to choose different classification types

Available options are "None": the input MC is expected to be just a single pion MC with one sort of particles; "ParticleID_EM" Gena's ParticleID classification (EM type objects) for the use of QCD MC; "ParticleID_HAD" Gena's ParticleID classification (HAD type objects) for the use of QCD MC;

Definition at line 175 of file GetLCWeights.h.

◆ m_ClassificationTypeNumber

int GetLCWeights::m_ClassificationTypeNumber
private

Definition at line 176 of file GetLCWeights.h.

◆ m_clusterCollName

SG::ReadHandleKey<xAOD::CaloClusterContainer> GetLCWeights::m_clusterCollName
private

Name of the CaloClusterContainer to use.

Definition at line 131 of file GetLCWeights.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default).

Definition at line 393 of file AthCommonDataStore.h.

◆ m_dimensions

std::vector<std::vector<Gaudi::Histo1DDef> > GetLCWeights::m_dimensions
private

definition of all dimensions used for each sampling

Since samplings can be present or not, the samplings itself are defined via the special first dimension which has to be exactly 1 bin with the title of the sampling and the bounds of the CaloSample enum.

The remaining dimensions are:

side: negative values for eta < 0 and positive for eta > 0; 1 bin from -1.5 to 1.5 for no side dependency

|eta|: the absolute value of eta; normally in ATLAS the bounds are within [0,5], most samplings need smaller ranges and even smaller ones for test beam setups.

phi: the phi range; 1 bin from -pi to pi for no phi dependency

log10(E_clus): the log10 of the cluster energy; typical range should be within the generated energy range of single pions with about 50% room to the maximum created energy - i.e. use log10(1 TeV) as max value if you generated up tp 2 TeV pions

log10(rho_cell): the cell energy density (either truth or reco); typical ranges are from -7 to 1

weight: the ratio E_true/E_rec (or E_rec/E_true for inversion method; the bounds define the level of truncation for the weights to suppress noise and bad sampling ratios. Typical bounds are 0.5 to 3,5, or 10 without inversion method, where 5 and 10 are used for HEC and Tile, respectively. With inversion mewthod the bounds are -2 to 3.

Definition at line 92 of file GetLCWeights.h.

◆ m_dimensionsmap

std::map<std::string,Gaudi::Histo1DDef> GetLCWeights::m_dimensionsmap
private

property to set all dimensions introduced above

Gaudi has only a map<string,Histo1DDef> to use as property. So the syntax for all dimensions introduced above is {'Sampling:Title': ('Title',Low,High,Bins), ... }.

Definition at line 100 of file GetLCWeights.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default).

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 121 of file AthAlgorithm.h.

◆ m_isampmap

std::vector<std::vector<int> > GetLCWeights::m_isampmap
private

Vector of indices in m_dimensions for each sampling.

Internal list of indices in m_dimensions object.

Definition at line 106 of file GetLCWeights.h.

◆ m_NormalizationType

std::string GetLCWeights::m_NormalizationType
private

string to choose different normalization types

Available options are "Const": every cluster counts with weight 1; "Lin": Each cluster is weighted with E_calib_clus/E_calib_tot; "Log": Each cluster is weighted with log10(E_calib_clus/E_calib_tot)+2; "NClus": Each cluster is weighted with 1/TotalNumberOfClustersWithE_calib>0.

Definition at line 162 of file GetLCWeights.h.

◆ m_NormalizationTypeNumber

int GetLCWeights::m_NormalizationTypeNumber
private

Definition at line 164 of file GetLCWeights.h.

◆ m_outputFile

std::unique_ptr<TFile> GetLCWeights::m_outputFile
private

Output file to save histograms in.

Internal variable pointing to the output file.

Definition at line 126 of file GetLCWeights.h.

◆ m_outputFileName

std::string GetLCWeights::m_outputFileName
private

Name of the output file to save histograms in.

Use this property to set the name of the output file containing the Weights histograms.

Definition at line 120 of file GetLCWeights.h.

◆ m_useInversionMethod

bool GetLCWeights::m_useInversionMethod
private

flag to switch on/off the use of the inversion method

If true the inversion method is used - i.e. the weights are calculated as E_rec/E_true vs. E_true and not as E_true/E_rec vs. E_rec. If the inversion method is used the actual correction histogram has to be created in a final step after all histograms have been added by looping over the possible E_true values, calculating E_rec from the histogram and then filling E_true/E_rec vs. E_rec in the new weighting histogram.

Definition at line 150 of file GetLCWeights.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_weight

std::vector<std::vector<TProfile2D *> > GetLCWeights::m_weight
private

Vector of vector of actual histograms.

Internal lists of histograms for each possible sampling to fill and save.

Definition at line 113 of file GetLCWeights.h.


The documentation for this class was generated from the following files: