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

#include <HIEventShapeJetIteration.h>

Inheritance diagram for HIEventShapeJetIteration:
Collaboration diagram for HIEventShapeJetIteration:

Public Member Functions

 HIEventShapeJetIteration (const std::string &name)
virtual StatusCode initialize () override
 Dummy implementation of the initialisation function.
virtual int execute () const override
 Method to be called for each event.
StatusCode makeClusterList (std::vector< const xAOD::CaloCluster * > &particleList, const xAOD::JetContainer *theJets, std::set< unsigned int > &used_indices, std::set< unsigned int > &used_eta_bins) const
StatusCode makeClusterList (std::vector< const xAOD::CaloCluster * > &particleList, const xAOD::JetContainer *theJets) const
StatusCode makeClusterList (std::vector< const xAOD::CaloCluster * > &particleList, const std::vector< const xAOD::JetContainer * > &theJets_vector) const
void updateShape (xAOD::HIEventShapeContainer *output_shape, const std::vector< const xAOD::CaloCluster * > &assoc_clusters, const HIEventShapeIndex *es_index=nullptr) const
StatusCode fillModulatorShape (xAOD::HIEventShape *ms, const xAOD::HIEventShapeContainer *output_shape, const std::set< unsigned int > &used_indices, unsigned int scheme) const
StatusCode remodulate (xAOD::HIEventShapeContainer *output_shape, const xAOD::HIEventShape *ms, const std::set< unsigned int > &used_indices) const
StatusCode getShapes (const xAOD::HIEventShapeContainer *&input_shape, xAOD::HIEventShapeContainer *&output_shape, bool record_aux=false) const
virtual int inputContainerNames (std::vector< std::string > &connames)
 Method to return the list of input containers.
virtual int outputContainerNames (std::vector< std::string > &connames)
 Method to return the list of output containers.
virtual void print () const
 Print the state of the tool.
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 sysInitialize () override
 Perform system initialization for an algorithm.
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
Additional helper functions, not directly mimicking Athena
template<class T>
const T * getProperty (const std::string &name) const
 Get one of the tool's properties.
const std::string & msg_level_name () const __attribute__((deprecated))
 A deprecated function for getting the message level's name.
const std::string & getName (const void *ptr) const
 Get the name of an object that is / should be in the event store.
SG::sgkey_t getKey (const void *ptr) const
 Get the (hashed) key of an object that is in the event store.

Protected Member Functions

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

 ASG_TOOL_CLASS (HIEventShapeJetIteration, IJetExecuteTool)
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

ToolHandle< IHISubtractorToolm_subtractorTool { this, "Subtractor", "HIJetClusterSubtractorTool", "Handle to HIJetClusterSubtractorTool" }
ToolHandle< IHIUEModulatorToolm_modulatorTool { this, "Modulator" , "HIUEModulatorTool", "Handle to HIUEModulatorTool" }
ToolHandle< IHIEventShapeMapToolm_eventShapeMapTool { this, "EventShapeMapTool", "HIEventShapeMapTool", "Handle to Event Shape Map Tool"}
SG::ReadHandleKey< xAOD::HIEventShapeContainerm_inputEventShapeKey { this, "InputEventShapeKey", "HIEventShape", "HIEventShape"}
 Name of input HIEventShapeContainer.
SG::WriteHandleKey< xAOD::HIEventShapeContainerm_outputEventShapeKey { this, "OutputEventShapeKey", "HIEventShape_iter", "HIEventShape_iter"}
 Name of output HIEventShapeContainer.
SG::ReadHandleKey< xAOD::JetContainerm_caloJetSeedKey { this, "CaloJetSeedContainerKey", "", "Names of seed collections"}
 List of names of JetCollections, all jets in these collections are seeds.
SG::ReadHandleKey< xAOD::JetContainerm_trackJetSeedKey { this, "TrackJetSeedContainerKey", "", "Names of seed collections"}
Gaudi::Property< std::string > m_associationKey { this, "AssociationKey", "", "Name of jet attribute providing link between jets and clusters" }
 Name of jet attribute providing link between jets and clusters.
Gaudi::Property< float > m_excludeDR { this, "ExclusionRadius", 0.4, "Exclude all calo regions w/in this DR to jet" }
 All clusters w/in this DR of jet are excluded from shape calc.
Gaudi::Property< bool > m_excludeConstituents { this, "ExcludeConstituents", false, "Only exclude constituents of jets" }
 If selected, the jet constituents define the associated clusters.
Gaudi::Property< bool > m_doRemodulation { this, "RemodulateUE", false, "Correct UE for incomplete cancellation of flow harmonics when iterating" }
Gaudi::Property< unsigned int > m_modulationScheme { this, "ModulationScheme", 0, "Scheme to build separate ES object for flow modulation" }
SG::WriteHandleKey< xAOD::HIEventShapeContainerm_modulationKey { this, "ModulationEventShapeKey", "HIEventShape_itr_mod", "Modulation Event Shape Key"}
Gaudi::Property< bool > m_shallowCopy { this, "ShallowCopy", true, "Use shallow copy for iterated event shape" }
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

Definition at line 23 of file HIEventShapeJetIteration.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ HIEventShapeJetIteration()

HIEventShapeJetIteration::HIEventShapeJetIteration ( const std::string & name)

Definition at line 33 of file HIEventShapeJetIteration.cxx.

33 : AsgTool(name)
34{
35}
AsgTool(const std::string &name)
Constructor specifying the tool instance's name.
Definition AsgTool.cxx:58

Member Function Documentation

◆ ASG_TOOL_CLASS()

HIEventShapeJetIteration::ASG_TOOL_CLASS ( HIEventShapeJetIteration ,
IJetExecuteTool  )
private

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::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 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::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< AlgTool > >::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< AlgTool > >::evtStore ( )
inlineinherited

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

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

int HIEventShapeJetIteration::execute ( ) const
overridevirtual

Method to be called for each event.

Returns 0 for success.

Implements IJetExecuteTool.

Definition at line 49 of file HIEventShapeJetIteration.cxx.

50{
52 ATH_MSG_DEBUG( "Starting HIEventShapeJetIteration execution" );
53 const xAOD::HIEventShapeContainer* input_shape=nullptr;
54 xAOD::HIEventShapeContainer* output_shape=nullptr;
55 getShapes(input_shape,output_shape,true).ignore();
56
57 const HIEventShapeIndex* es_index = m_eventShapeMapTool->getIndexFromShape(input_shape);
58 //New implementation after moving away from mutable
59 ATH_MSG_DEBUG("HIEventShapeJetIteration: found index for " << m_inputEventShapeKey.key());
60 if(es_index==nullptr)
61 {
62 ATH_MSG_FATAL("No HIEventShapeIndex w/ name " << m_inputEventShapeKey.key() << ". Shape not TOWER nor COMPACT");
63 }
64
65 const HIEventShapeIndex* other_index = m_eventShapeMapTool->getIndexFromShape(output_shape);
66 if(!other_index) {
67 ATH_MSG_FATAL("No HIEventShapeIndex w/ name " << m_outputEventShapeKey.key() << ". Shape not TOWER nor COMPACT");
68 }
69 //End of new implementation
70
71 const xAOD::JetContainer* theCaloJets=0;
72 const xAOD::JetContainer* theTrackJets=0;
73
74 if(!m_caloJetSeedKey.empty()){
75 SG::ReadHandle<xAOD::JetContainer> readHandleCaloJets ( m_caloJetSeedKey );
76 theCaloJets = readHandleCaloJets.cptr();
77 }
78 if(!m_trackJetSeedKey.empty()){
79 SG::ReadHandle<xAOD::JetContainer> readHandleTrackJets ( m_trackJetSeedKey );
80 theTrackJets = readHandleTrackJets.cptr();
81 }
82
83 if(theTrackJets && m_excludeConstituents)
84 {
85 ATH_MSG_ERROR("Incompatible options. Cannot track jets and constituents together.");
86 return 1;
87 }
88
89 std::set<unsigned int> used_indices;
90 std::set<unsigned int> used_eta_bins;
91
92 std::vector<const xAOD::CaloCluster*> assoc_clusters;
93 assoc_clusters.reserve(6400);
94 if(theCaloJets) ATH_CHECK(makeClusterList(assoc_clusters,theCaloJets,used_indices,used_eta_bins), 1);
95 if(theTrackJets) ATH_CHECK(makeClusterList(assoc_clusters,theTrackJets,used_indices,used_eta_bins), 1);
96 updateShape(output_shape,assoc_clusters,es_index);
97
98 ATH_MSG_DEBUG( "Checking Modulation Scheme" );
99
100 //compute ES for modulation
102 {
103 SG::WriteHandle<xAOD::HIEventShapeContainer> write_handle_modShape ( m_modulationKey );
104 ATH_MSG_DEBUG( "Key HIEventShapeJetIteration: " << m_modulationKey.key() );
105
106 auto modShape = std::make_unique<xAOD::HIEventShapeContainer> ();
107 auto modShapeAux = std::make_unique<xAOD::HIEventShapeAuxContainer> ();
108 modShape->setStore( modShapeAux.get() );
109
111 modShape->push_back(ms);
112 ATH_CHECK( fillModulatorShape(ms, output_shape, used_eta_bins, m_modulationScheme), 1 );
113 if(m_doRemodulation) ATH_CHECK( remodulate(output_shape, ms, used_indices), 1 );
114
115 if(write_handle_modShape.record ( std::move(modShape), std::move(modShapeAux)).isFailure() ){
116 ATH_MSG_ERROR("Unable to write newHIEventShapeContainer for modulated shape with key: " << m_modulationKey.key());
117 return 0;
118 }
119 }
120
121 return 0;
122}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_DEBUG(x)
ToolHandle< IHIEventShapeMapTool > m_eventShapeMapTool
Gaudi::Property< unsigned int > m_modulationScheme
StatusCode fillModulatorShape(xAOD::HIEventShape *ms, const xAOD::HIEventShapeContainer *output_shape, const std::set< unsigned int > &used_indices, unsigned int scheme) const
StatusCode makeClusterList(std::vector< const xAOD::CaloCluster * > &particleList, const xAOD::JetContainer *theJets, std::set< unsigned int > &used_indices, std::set< unsigned int > &used_eta_bins) const
StatusCode remodulate(xAOD::HIEventShapeContainer *output_shape, const xAOD::HIEventShape *ms, const std::set< unsigned int > &used_indices) const
void updateShape(xAOD::HIEventShapeContainer *output_shape, const std::vector< const xAOD::CaloCluster * > &assoc_clusters, const HIEventShapeIndex *es_index=nullptr) const
SG::WriteHandleKey< xAOD::HIEventShapeContainer > m_outputEventShapeKey
Name of output HIEventShapeContainer.
StatusCode getShapes(const xAOD::HIEventShapeContainer *&input_shape, xAOD::HIEventShapeContainer *&output_shape, bool record_aux=false) const
Gaudi::Property< bool > m_doRemodulation
SG::ReadHandleKey< xAOD::HIEventShapeContainer > m_inputEventShapeKey
Name of input HIEventShapeContainer.
SG::ReadHandleKey< xAOD::JetContainer > m_trackJetSeedKey
SG::WriteHandleKey< xAOD::HIEventShapeContainer > m_modulationKey
SG::ReadHandleKey< xAOD::JetContainer > m_caloJetSeedKey
List of names of JetCollections, all jets in these collections are seeds.
Gaudi::Property< bool > m_excludeConstituents
If selected, the jet constituents define the associated clusters.
HIEventShapeContainer_v2 HIEventShapeContainer
Define the latest version of the container.
JetContainer_v1 JetContainer
Definition of the current "jet container version".
HIEventShape_v2 HIEventShape
Definition of the latest event info version.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::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

◆ fillModulatorShape()

StatusCode HIEventShapeJetIteration::fillModulatorShape ( xAOD::HIEventShape * ms,
const xAOD::HIEventShapeContainer * output_shape,
const std::set< unsigned int > & used_indices,
unsigned int scheme ) const

Definition at line 213 of file HIEventShapeJetIteration.cxx.

214{
215 if(scheme==1 || scheme==2)
216 {
217 SelectByList selector;
218 selector.used_set=&used_eta_bins;
219 HI::fillSummary(output_shape,ms,selector);
220 }
221
222 if(scheme > 1)
223 {
224 const xAOD::HIEventShapeContainer* summary_container=0;
225
226 SG::ReadHandle<xAOD::HIEventShapeContainer> read_handle_cont ( "CaloSums" );
227 if (!read_handle_cont.isValid()) {
228 ATH_MSG_FATAL( "Could not find HI event shape! CaloSums" );
229 return(StatusCode::FAILURE);
230 }
231 summary_container = read_handle_cont.cptr();
232
233 const xAOD::HIEventShape* s_fcal=0;
234 for(const auto *sh : *summary_container)
235 {
236 std::string summary;
237 static const SG::ConstAccessor<std::string> SummaryAcc("Summary");
238 if(SummaryAcc.isAvailable(*sh)) summary=SummaryAcc(*sh);
239 if(summary.compare("FCal")==0)
240 {
241 s_fcal=sh;
242 break;
243 }
244 }
245 if (!s_fcal) std::abort();
246 if(scheme==3) (*ms)=(*s_fcal);
247 else
248 {
249 float et_fcal=s_fcal->et();
250 float et_fcal_recip=0;
251 if(et_fcal > 0.) et_fcal_recip=1.0/et_fcal;
252 for(unsigned int ih=0; ih < ms->etCos().size(); ih++)
253 {
254 float qx=ms->etCos().at(ih);
255 float qy=ms->etSin().at(ih);
256
257 float qx_fcal=s_fcal->etCos().at(ih);
258 float qy_fcal=s_fcal->etSin().at(ih);
259
260 ms->etCos()[ih]=(qx*qx_fcal+qy*qy_fcal)*et_fcal_recip;
261 ms->etSin()[ih]=(qy*qx_fcal-qx*qy_fcal)*et_fcal_recip;
262 } //end loop on harmonics
263 } //end scheme==2
264 } // end modulation > 1 case
265 return StatusCode::SUCCESS;
266}
const std::vector< float > & etSin() const
sine (x) part of the harmonic modulation strength
const std::vector< float > & etCos() const
cosine (y) part of the harmonic modulation strength Following convention is used: index 0 is first ha...
float et() const
Transverse energy reconstructed on the slice.
void fillSummary(const xAOD::HIEventShapeContainer *in, xAOD::HIEventShape *out, const std::function< bool(const xAOD::HIEventShape *)> &incFunction, const std::function< void(xAOD::HIEventShape *, const xAOD::HIEventShape *)> &addFunction)

◆ getKey()

SG::sgkey_t asg::AsgTool::getKey ( const void * ptr) const
inherited

Get the (hashed) key of an object that is in the event store.

This is a bit of a special one. StoreGateSvc and xAOD::TEvent both provide ways for getting the SG::sgkey_t key for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.

In order to allow tools to efficiently perform this operation, they can use this helper function.

See also
asg::AsgTool::getName
Parameters
ptrThe bare pointer to the object that the event store should know about
Returns
The hashed key of the object in the store. If not found, an invalid (zero) key.

Definition at line 119 of file AsgTool.cxx.

119 {
120
121#ifdef XAOD_STANDALONE
122 // In case we use @c xAOD::TEvent, we have a direct function call
123 // for this.
124 return evtStore()->event()->getKey( ptr );
125#else
126 const SG::DataProxy* proxy = evtStore()->proxy( ptr );
127 return ( proxy == nullptr ? 0 : proxy->sgkey() );
128#endif // XAOD_STANDALONE
129 }
ServiceHandle< StoreGateSvc > & evtStore()

◆ getName()

const std::string & asg::AsgTool::getName ( const void * ptr) const
inherited

Get the name of an object that is / should be in the event store.

This is a bit of a special one. StoreGateSvc and xAOD::TEvent both provide ways for getting the std::string name for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.

In order to allow tools to efficiently perform this operation, they can use this helper function.

See also
asg::AsgTool::getKey
Parameters
ptrThe bare pointer to the object that the event store should know about
Returns
The string name of the object in the store. If not found, an empty string.

Definition at line 106 of file AsgTool.cxx.

106 {
107
108#ifdef XAOD_STANDALONE
109 // In case we use @c xAOD::TEvent, we have a direct function call
110 // for this.
111 return evtStore()->event()->getName( ptr );
112#else
113 const SG::DataProxy* proxy = evtStore()->proxy( ptr );
114 static const std::string dummy = "";
115 return ( proxy == nullptr ? dummy : proxy->name() );
116#endif // XAOD_STANDALONE
117 }

◆ getProperty()

template<class T>
const T * asg::AsgTool::getProperty ( const std::string & name) const
inherited

Get one of the tool's properties.

◆ getShapes()

StatusCode HIEventShapeJetIteration::getShapes ( const xAOD::HIEventShapeContainer *& input_shape,
xAOD::HIEventShapeContainer *& output_shape,
bool record_aux = false ) const

Definition at line 304 of file HIEventShapeJetIteration.cxx.

305{
306 SG::ReadHandle<xAOD::HIEventShapeContainer> readHandleEvtShape ( m_inputEventShapeKey );
307 SG::WriteHandle<xAOD::HIEventShapeContainer> writeHandleEvtShape ( m_outputEventShapeKey );
308
309 input_shape = readHandleEvtShape.ptr();
310
311 if(m_shallowCopy)
312 {
313 auto shape_copy=xAOD::shallowCopyContainer(*input_shape);
314 auto unique_first_copy = xAOD::prepareElementForShallowCopy(shape_copy.first);
315 auto unique_second_copy = xAOD::prepareElementForShallowCopy(shape_copy.second);
316 output_shape=shape_copy.first;
317 if(record)
318 {
319 ATH_MSG_DEBUG( "Write Handle current key is : " << m_outputEventShapeKey.key() );
320 if(writeHandleEvtShape.record ( std::move(unique_first_copy), std::move(unique_second_copy)).isFailure() ){
321 ATH_MSG_ERROR("Unable to write Shallow Copy containers for event shape with key: " << m_outputEventShapeKey.key());
322 return(StatusCode::FAILURE);
323 }
324 }
325
326 }
327 else
328 {
329 auto output_shapex=std::make_unique<xAOD::HIEventShapeContainer> ();
330 auto output_Aux=std::make_unique<xAOD::HIEventShapeAuxContainer> ();
331 output_shapex->setStore( output_Aux.get() );
332 output_shapex->reserve( input_shape->size() );
333
334 for(const auto *s : *input_shape)
335 {
337 output_shapex->push_back(s_copy);
338 *s_copy=*s;
339 }
340 if(record)
341 {
342 if(writeHandleEvtShape.record ( std::move(output_shapex), std::move(output_Aux)).isFailure() ){
343 ATH_MSG_ERROR("Unable to write Output Shape containers for event shape with key: " << m_outputEventShapeKey.key());
344 return(StatusCode::FAILURE);
345 }
346 output_shape = writeHandleEvtShape.ptr();
347 }
348
349 }
350
351 return StatusCode::SUCCESS;
352}
size_type size() const noexcept
Returns the number of elements in the collection.
Gaudi::Property< bool > m_shallowCopy
std::unique_ptr< CaloCluster > prepareElementForShallowCopy(const CaloCluster *orgCluster)
std::pair< std::unique_ptr< T >, std::unique_ptr< ShallowAuxContainer > > shallowCopyContainer(const T &cont, const EventContext &ctx)
Function making a shallow copy of a constant container.

◆ initialize()

StatusCode HIEventShapeJetIteration::initialize ( void )
overridevirtual

Dummy implementation of the initialisation function.

It's here to allow the dual-use tools to skip defining an initialisation function. Since many are doing so...

Reimplemented from asg::AsgTool.

Definition at line 37 of file HIEventShapeJetIteration.cxx.

38{
39 ATH_MSG_VERBOSE("HIEventShapeJetIteration initialize");
40 ATH_CHECK( m_inputEventShapeKey.initialize( !m_inputEventShapeKey.key().empty()) );
41 ATH_CHECK( m_outputEventShapeKey.initialize( !m_outputEventShapeKey.key().empty()) );
45
46 return StatusCode::SUCCESS;
47}
#define ATH_MSG_VERBOSE(x)

◆ inputContainerNames()

int IJetExecuteTool::inputContainerNames ( std::vector< std::string > & connames)
virtualinherited

Method to return the list of input containers.

The names of required input containers are appended to connames. Returns nonzero for error. Default returns 0 and adds no names.

Reimplemented in JetRecTool.

Definition at line 11 of file IJetExecuteTool.cxx.

11 {
12 return 0;
13}

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::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.

◆ makeClusterList() [1/3]

StatusCode HIEventShapeJetIteration::makeClusterList ( std::vector< const xAOD::CaloCluster * > & particleList,
const std::vector< const xAOD::JetContainer * > & theJets_vector ) const

Definition at line 172 of file HIEventShapeJetIteration.cxx.

173{
174 std::set<unsigned int> used_indices;
175 std::set<unsigned int> used_eta_bins;
176 for(const auto *theJets : theJets_vector)
177 {
178 ATH_CHECK(makeClusterList(particleList,theJets,used_indices,used_eta_bins));
179 }
180 return StatusCode::SUCCESS;
181}

◆ makeClusterList() [2/3]

StatusCode HIEventShapeJetIteration::makeClusterList ( std::vector< const xAOD::CaloCluster * > & particleList,
const xAOD::JetContainer * theJets ) const

Definition at line 166 of file HIEventShapeJetIteration.cxx.

167{
168 std::set<unsigned int> used_indices;
169 std::set<unsigned int> used_eta_bins;
170 return makeClusterList(particleList,theJets,used_indices,used_eta_bins);
171}

◆ makeClusterList() [3/3]

StatusCode HIEventShapeJetIteration::makeClusterList ( std::vector< const xAOD::CaloCluster * > & particleList,
const xAOD::JetContainer * theJets,
std::set< unsigned int > & used_indices,
std::set< unsigned int > & used_eta_bins ) const

Definition at line 124 of file HIEventShapeJetIteration.cxx.

126{
127 for(const auto *theJet : *theJets)
128 {
129 xAOD::IParticle::FourMom_t jet4mom=theJet->p4();
130 std::vector<const xAOD::IParticle*> assoc_clusters;
131 //only use jet constituents
132 if(m_excludeConstituents) assoc_clusters=theJet->getConstituents().asIParticleVector();
133 else
134 {
135 if(! (theJet->getAssociatedObjects<xAOD::IParticle>(m_associationKey, assoc_clusters)) )
136 {
137 //this should only happen if SOME of the jets in the collection are missing the association
138 //technically possible, but should NOT happen
139 ATH_MSG_ERROR("Individual jet missing association " << m_associationKey);
140 return StatusCode::FAILURE;
141 }
142 }
143 ATH_MSG_DEBUG( "Jet " << std::setw(10) << jet4mom.Pt()*1e-3
144 << std::setw(10) << jet4mom.Eta()
145 << std::setw(10) << jet4mom.Phi()
146 << std::setw(10) << jet4mom.E()*1e-3
147 << std::setw(25) << " has " << assoc_clusters.size() << " assoc. clusters");
148
149 for(auto & assoc_cluster : assoc_clusters)
150 {
151 if( jet4mom.DeltaR( assoc_cluster->p4() ) > m_excludeDR ) continue;
152 const xAOD::CaloCluster* cl_ptr=static_cast<const xAOD::CaloCluster*>(assoc_cluster);
153 unsigned int tower_index=HI::TowerBins::findEtaPhiBin(cl_ptr->eta0(),cl_ptr->phi0());
154
155 if(used_indices.insert(tower_index).second)
156 {
157 particleList.push_back(cl_ptr);
158 used_eta_bins.insert(HI::TowerBins::findBinEta(cl_ptr->eta0()));
159 }
160 }
161 }
162 return StatusCode::SUCCESS;
163
164}
Gaudi::Property< std::string > m_associationKey
Name of jet attribute providing link between jets and clusters.
Gaudi::Property< float > m_excludeDR
All clusters w/in this DR of jet are excluded from shape calc.
flt_t eta0() const
Returns raw of cluster seed.
flt_t phi0() const
Returns raw of cluster seed.
TLorentzVector FourMom_t
Definition of the 4-momentum type.
unsigned int findEtaPhiBin(float eta, float phi)
Definition HIEventDefs.h:52
unsigned int findBinEta(float eta)
Definition HIEventDefs.h:46
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

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

◆ msg_level_name()

const std::string & asg::AsgTool::msg_level_name ( ) const
inherited

A deprecated function for getting the message level's name.

Instead of using this, weirdly named function, user code should get the string name of the current minimum message level (in case they really need it...), with:

MSG::name( msg().level() )

This function's name doesn't follow the ATLAS coding rules, and as such will be removed in the not too distant future.

Returns
The string name of the current minimum message level that's printed

Definition at line 101 of file AsgTool.cxx.

101 {
102
103 return MSG::name( msg().level() );
104 }
MsgStream & msg() const
const std::string & name(Level lvl)
Convenience function for translating message levels to strings.
Definition MsgLevel.cxx:19

◆ msgLvl()

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

Definition at line 30 of file AthCommonMsg.h.

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

◆ outputContainerNames()

int IJetExecuteTool::outputContainerNames ( std::vector< std::string > & connames)
virtualinherited

Method to return the list of output containers.

The names of produced output containers are appended to connames. Returns nonzero for error. Default returns 0 and adds no names.

Reimplemented in JetRecTool.

Definition at line 17 of file IJetExecuteTool.cxx.

17 {
18 return 0;
19}

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::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.

◆ print()

◆ remodulate()

StatusCode HIEventShapeJetIteration::remodulate ( xAOD::HIEventShapeContainer * output_shape,
const xAOD::HIEventShape * ms,
const std::set< unsigned int > & used_indices ) const

Definition at line 269 of file HIEventShapeJetIteration.cxx.

270{
271 std::vector<float> mod_factors(HI::TowerBins::numEtaBins(),0);
272 std::vector<float> mod_counts(HI::TowerBins::numEtaBins(),0);
273
274 for(unsigned int used_indice : used_indices)
275 {
276 unsigned int phi_bin=used_indice % HI::TowerBins::numPhiBins();
277 unsigned int eta_bin=used_indice / HI::TowerBins::numPhiBins();
278 mod_counts[eta_bin]++;
279 mod_factors[eta_bin]+=(m_modulatorTool->getModulation(HI::TowerBins::getBinCenterPhi(phi_bin),ms)-1.);
280 }
281 double nphibins=HI::TowerBins::numPhiBins();
282 //now loop on shape and correct;
283 for(auto && i : *output_shape)
284 {
286 float eta0=0.5*(s->etaMin()+s->etaMax());
287 unsigned int eb=HI::TowerBins::findBinEta(eta0);
288 double neff=nphibins-mod_counts[eb];
289 double cf=1;
290 if (neff-mod_factors[eb] != 0) {//PEF fix
291 cf=neff/(neff-mod_factors[eb]);
292 }
293 //check on value of cf;
294 if(cf < 0.) cf =1;
295 if(cf > 2.) cf=2;
296
297 s->setEt(s->et()*cf);
298 s->setRho(s->rho()*cf);
299 }
300
301 return StatusCode::SUCCESS;
302}
ToolHandle< IHIUEModulatorTool > m_modulatorTool
constexpr unsigned int numPhiBins()
Definition HIEventDefs.h:22
constexpr unsigned int numEtaBins()
Definition HIEventDefs.h:19
float getBinCenterPhi(unsigned int pb)
Definition HIEventDefs.h:44

◆ 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< AlgTool > >::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< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::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.

◆ updateShape()

void HIEventShapeJetIteration::updateShape ( xAOD::HIEventShapeContainer * output_shape,
const std::vector< const xAOD::CaloCluster * > & assoc_clusters,
const HIEventShapeIndex * es_index = nullptr ) const

Definition at line 183 of file HIEventShapeJetIteration.cxx.

184{
185 if(es_index==nullptr)
186 {
187 ATH_MSG_INFO("Problem, null pointer");
188
189 es_index=m_eventShapeMapTool->getIndexFromShape(output_shape);
190 if(es_index==nullptr)
191 {
192 ATH_MSG_FATAL("Can't find correspondent index for map " << m_inputEventShapeKey.key() << " in the HIEventShapeMapTool");
193 }
194 }
195
196 for(const auto *assoc_cluster : assoc_clusters)
197 {
198 m_subtractorTool->updateUsingCluster(output_shape,es_index,assoc_cluster);
199 }
200
201 if(!m_subtractorTool->usesCells())
202 {
203 for(auto s : *output_shape)
204 {
205 float sum_et=s->et();
206 float sum_nc=0.;
207 if(sum_et!=0.) sum_nc=s->rho()*s->area()/sum_et;
208 s->setNCells(sum_nc);
209 }
210 }
211}
ToolHandle< IHISubtractorTool > m_subtractorTool

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::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 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_associationKey

Gaudi::Property< std::string > HIEventShapeJetIteration::m_associationKey { this, "AssociationKey", "", "Name of jet attribute providing link between jets and clusters" }
private

Name of jet attribute providing link between jets and clusters.

Definition at line 64 of file HIEventShapeJetIteration.h.

64{ this, "AssociationKey", "", "Name of jet attribute providing link between jets and clusters" };

◆ m_caloJetSeedKey

SG::ReadHandleKey<xAOD::JetContainer> HIEventShapeJetIteration::m_caloJetSeedKey { this, "CaloJetSeedContainerKey", "", "Names of seed collections"}
private

List of names of JetCollections, all jets in these collections are seeds.

Definition at line 60 of file HIEventShapeJetIteration.h.

60{ this, "CaloJetSeedContainerKey", "", "Names of seed collections"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doRemodulation

Gaudi::Property< bool > HIEventShapeJetIteration::m_doRemodulation { this, "RemodulateUE", false, "Correct UE for incomplete cancellation of flow harmonics when iterating" }
private

Definition at line 70 of file HIEventShapeJetIteration.h.

70{ this, "RemodulateUE", false, "Correct UE for incomplete cancellation of flow harmonics when iterating" };

◆ m_eventShapeMapTool

ToolHandle<IHIEventShapeMapTool> HIEventShapeJetIteration::m_eventShapeMapTool { this, "EventShapeMapTool", "HIEventShapeMapTool", "Handle to Event Shape Map Tool"}
private

Definition at line 52 of file HIEventShapeJetIteration.h.

52{ this, "EventShapeMapTool", "HIEventShapeMapTool", "Handle to Event Shape Map Tool"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_excludeConstituents

Gaudi::Property< bool > HIEventShapeJetIteration::m_excludeConstituents { this, "ExcludeConstituents", false, "Only exclude constituents of jets" }
private

If selected, the jet constituents define the associated clusters.

Definition at line 68 of file HIEventShapeJetIteration.h.

68{ this, "ExcludeConstituents", false, "Only exclude constituents of jets" };

◆ m_excludeDR

Gaudi::Property< float > HIEventShapeJetIteration::m_excludeDR { this, "ExclusionRadius", 0.4, "Exclude all calo regions w/in this DR to jet" }
private

All clusters w/in this DR of jet are excluded from shape calc.

Definition at line 66 of file HIEventShapeJetIteration.h.

66{ this, "ExclusionRadius", 0.4, "Exclude all calo regions w/in this DR to jet" };

◆ m_inputEventShapeKey

SG::ReadHandleKey<xAOD::HIEventShapeContainer> HIEventShapeJetIteration::m_inputEventShapeKey { this, "InputEventShapeKey", "HIEventShape", "HIEventShape"}
private

Name of input HIEventShapeContainer.

Definition at line 55 of file HIEventShapeJetIteration.h.

55{ this, "InputEventShapeKey", "HIEventShape", "HIEventShape"};

◆ m_modulationKey

SG::WriteHandleKey<xAOD::HIEventShapeContainer> HIEventShapeJetIteration::m_modulationKey { this, "ModulationEventShapeKey", "HIEventShape_itr_mod", "Modulation Event Shape Key"}
private

Definition at line 74 of file HIEventShapeJetIteration.h.

74{ this, "ModulationEventShapeKey", "HIEventShape_itr_mod", "Modulation Event Shape Key"};

◆ m_modulationScheme

Gaudi::Property< unsigned int > HIEventShapeJetIteration::m_modulationScheme { this, "ModulationScheme", 0, "Scheme to build separate ES object for flow modulation" }
private

Definition at line 72 of file HIEventShapeJetIteration.h.

72{ this, "ModulationScheme", 0, "Scheme to build separate ES object for flow modulation" };

◆ m_modulatorTool

ToolHandle<IHIUEModulatorTool> HIEventShapeJetIteration::m_modulatorTool { this, "Modulator" , "HIUEModulatorTool", "Handle to HIUEModulatorTool" }
private

Definition at line 51 of file HIEventShapeJetIteration.h.

51{ this, "Modulator" , "HIUEModulatorTool", "Handle to HIUEModulatorTool" };

◆ m_outputEventShapeKey

SG::WriteHandleKey<xAOD::HIEventShapeContainer> HIEventShapeJetIteration::m_outputEventShapeKey { this, "OutputEventShapeKey", "HIEventShape_iter", "HIEventShape_iter"}
private

Name of output HIEventShapeContainer.

Definition at line 57 of file HIEventShapeJetIteration.h.

57{ this, "OutputEventShapeKey", "HIEventShape_iter", "HIEventShape_iter"};

◆ m_shallowCopy

Gaudi::Property< bool > HIEventShapeJetIteration::m_shallowCopy { this, "ShallowCopy", true, "Use shallow copy for iterated event shape" }
private

Definition at line 76 of file HIEventShapeJetIteration.h.

76{ this, "ShallowCopy", true, "Use shallow copy for iterated event shape" };

◆ m_subtractorTool

ToolHandle<IHISubtractorTool> HIEventShapeJetIteration::m_subtractorTool { this, "Subtractor", "HIJetClusterSubtractorTool", "Handle to HIJetClusterSubtractorTool" }
private

Definition at line 50 of file HIEventShapeJetIteration.h.

50{ this, "Subtractor", "HIJetClusterSubtractorTool", "Handle to HIJetClusterSubtractorTool" };

◆ m_trackJetSeedKey

SG::ReadHandleKey<xAOD::JetContainer> HIEventShapeJetIteration::m_trackJetSeedKey { this, "TrackJetSeedContainerKey", "", "Names of seed collections"}
private

Definition at line 61 of file HIEventShapeJetIteration.h.

61{ this, "TrackJetSeedContainerKey", "", "Names of seed collections"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.


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