21 SelectByList() : used_set(nullptr) {};
22 const std::set<unsigned int>* used_set;
26 return (used_set->find(eb)==used_set->end());
46 return StatusCode::SUCCESS;
52 ATH_MSG_DEBUG(
"Starting HIEventShapeJetIteration execution" );
55 getShapes(input_shape,output_shape,
true).ignore();
76 theCaloJets = readHandleCaloJets.
cptr();
80 theTrackJets = readHandleTrackJets.
cptr();
85 ATH_MSG_ERROR(
"Incompatible options. Cannot track jets and constituents together.");
89 std::set<unsigned int> used_indices;
90 std::set<unsigned int> used_eta_bins;
92 std::vector<const xAOD::CaloCluster*> assoc_clusters;
93 assoc_clusters.reserve(6400);
106 auto modShape = std::make_unique<xAOD::HIEventShapeContainer> ();
107 auto modShapeAux = std::make_unique<xAOD::HIEventShapeAuxContainer> ();
108 modShape->setStore( modShapeAux.get() );
111 modShape->push_back(ms);
115 if(write_handle_modShape.
record ( std::move(modShape), std::move(modShapeAux)).isFailure() ){
125 std::set<unsigned int>& used_indices, std::set<unsigned int>& used_eta_bins)
const
127 for(
const auto *theJet : *theJets)
130 std::vector<const xAOD::IParticle*> assoc_clusters;
140 return StatusCode::FAILURE;
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");
149 for(
auto & assoc_cluster : assoc_clusters)
151 if( jet4mom.DeltaR( assoc_cluster->p4() ) >
m_excludeDR )
continue;
155 if(used_indices.insert(tower_index).second)
157 particleList.push_back(cl_ptr);
162 return StatusCode::SUCCESS;
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);
174 std::set<unsigned int> used_indices;
175 std::set<unsigned int> used_eta_bins;
176 for(
const auto *theJets : theJets_vector)
180 return StatusCode::SUCCESS;
185 if(es_index==
nullptr)
190 if(es_index==
nullptr)
196 for(
const auto *assoc_cluster : assoc_clusters)
203 for(
auto s : *output_shape)
205 float sum_et=s->et();
207 if(sum_et!=0.) sum_nc=s->rho()*s->area()/sum_et;
208 s->setNCells(sum_nc);
215 if(scheme==1 || scheme==2)
217 SelectByList selector;
218 selector.used_set=&used_eta_bins;
227 if (!read_handle_cont.
isValid()) {
229 return(StatusCode::FAILURE);
231 summary_container = read_handle_cont.
cptr();
234 for(
const auto *
sh : *summary_container)
239 if(summary.compare(
"FCal")==0)
245 if (!s_fcal) std::abort();
246 if(scheme==3) (*ms)=(*s_fcal);
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++)
254 float qx=ms->etCos().at(ih);
255 float qy=ms->etSin().at(ih);
257 float qx_fcal=s_fcal->
etCos().at(ih);
258 float qy_fcal=s_fcal->
etSin().at(ih);
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;
265 return StatusCode::SUCCESS;
274 for(
unsigned int used_indice : used_indices)
278 mod_counts[eta_bin]++;
283 for(
auto && i : *output_shape)
286 float eta0=0.5*(s->etaMin()+s->etaMax());
288 double neff=nphibins-mod_counts[eb];
290 if (neff-mod_factors[eb] != 0) {
291 cf=neff/(neff-mod_factors[eb]);
297 s->setEt(s->et()*cf);
298 s->setRho(s->rho()*cf);
301 return StatusCode::SUCCESS;
309 input_shape = readHandleEvtShape.
ptr();
316 output_shape=shape_copy.first;
320 if(writeHandleEvtShape.
record ( std::move(unique_first_copy), std::move(unique_second_copy)).isFailure() ){
322 return(StatusCode::FAILURE);
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() );
334 for(
const auto *s : *input_shape)
337 output_shapex->push_back(s_copy);
342 if(writeHandleEvtShape.
record ( std::move(output_shapex), std::move(output_Aux)).isFailure() ){
344 return(StatusCode::FAILURE);
346 output_shape = writeHandleEvtShape.
ptr();
351 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
Helper class to provide constant type-safe access to aux data.
Handle class for reading from StoreGate.
Handle class for recording to StoreGate.
size_type size() const noexcept
Returns the number of elements in the collection.
ToolHandle< IHIEventShapeMapTool > m_eventShapeMapTool
Gaudi::Property< std::string > m_associationKey
Name of jet attribute providing link between jets and clusters.
Gaudi::Property< bool > m_shallowCopy
HIEventShapeJetIteration(const std::string &name)
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
virtual int execute() const override
Method to be called for each event.
Gaudi::Property< bool > m_doRemodulation
SG::ReadHandleKey< xAOD::HIEventShapeContainer > m_inputEventShapeKey
Name of input HIEventShapeContainer.
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
SG::ReadHandleKey< xAOD::JetContainer > m_trackJetSeedKey
ToolHandle< IHISubtractorTool > m_subtractorTool
SG::WriteHandleKey< xAOD::HIEventShapeContainer > m_modulationKey
SG::ReadHandleKey< xAOD::JetContainer > m_caloJetSeedKey
List of names of JetCollections, all jets in these collections are seeds.
ToolHandle< IHIUEModulatorTool > m_modulatorTool
Gaudi::Property< float > m_excludeDR
All clusters w/in this DR of jet are excluded from shape calc.
Gaudi::Property< bool > m_excludeConstituents
If selected, the jet constituents define the associated clusters.
Helper class to provide constant type-safe access to aux data.
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
const_pointer_type ptr()
Dereference the pointer.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
pointer_type ptr()
Dereference the pointer.
flt_t eta0() const
Returns raw of cluster seed.
flt_t phi0() const
Returns raw of cluster seed.
float etaMax() const
eta slice "right" edge
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.
float etaMin() const
eta slice "left" edge
Class providing the definition of the 4-vector interface.
TLorentzVector FourMom_t
Definition of the 4-momentum type.
constexpr unsigned int numPhiBins()
unsigned int findEtaPhiBin(float eta, float phi)
unsigned int findBinEta(float eta)
constexpr unsigned int numEtaBins()
float getBinCenterPhi(unsigned int pb)
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)
std::unique_ptr< CaloCluster > prepareElementForShallowCopy(const CaloCluster *orgCluster)
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
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.
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.