8#include "fastjet/PseudoJet.hh"
9#include "fastjet/ClusterSequence.hh"
10#include "fastjet/ClusterSequenceArea.hh"
11#include "fastjet/config.h"
12#include "fastjet/AreaDefinition.hh"
13#ifndef NO_JET_VARIABLER
14#include "fastjet/contrib/VariableRPlugin.hh"
30#ifndef NO_JET_VARIABLER
31using fastjet::contrib::VariableRPlugin;
39 m_bld(
"JetFromPseudojet",this),
58 if (
m_fjalg == fastjet::undefined_jet_algorithm ) {
61 return StatusCode::FAILURE;
65 return StatusCode::FAILURE;
70 fastjet::ClusterSequence cs(
empty, jetdef);
73#ifdef NO_JET_VARIABLER
75 ATH_MSG_ERROR(
"Variable-R jet findng is not supported in theis build.");
82 std::string sdrop =
"ToolSvc.";
83 std::string myname = name();
84 std::string::size_type ipos = myname.find(sdrop);
85 if ( ipos != std::string::npos ) myname.replace(ipos, sdrop.size(),
"");
86 std::string cname =
"ClusterSequence_JetFinder_" + myname;
93 return StatusCode::SUCCESS;
102 constexpr bool doSave =
true;
103 fastjet::ClusterSequence* pcs{
nullptr};
104 return _find(pjContainer, finalJets, inputtype, doSave, pcs);
112 fastjet::ClusterSequence*& pcs)
const {
114 constexpr bool doSave =
false;
115 return _find(pjContainer, finalJets, inputtype, doSave, pcs);
123 fastjet::ClusterSequence*& pcs)
const {
124 if (
m_fjalg == fastjet::undefined_jet_algorithm ) {
133#ifndef NO_JET_VARIABLER
134 const VariableRPlugin* pvrp =
nullptr;
136 VariableRPlugin::ClusterType vct = VariableRPlugin::AKTLIKE;
138 case fastjet::kt_algorithm: vct = VariableRPlugin::KTLIKE;
break;
139 case fastjet::antikt_algorithm: vct = VariableRPlugin::AKTLIKE;
break;
140 case fastjet::cambridge_algorithm: vct = VariableRPlugin::CALIKE;
break;
142 ATH_MSG_ERROR(
"Invalid algorithm type for variable-R finding.");
145 jetdef = fastjet::JetDefinition(pvrp);
146 jetdef.delete_plugin_when_unused ();
150 ATH_MSG_ERROR(
"Variable-R jet findng is not supported in theis build.");
155 pcs =
new fastjet::ClusterSequence(*inps, jetdef);
157 fastjet::GhostedAreaSpec gspec(5.0, 1,
m_ghostarea);
158 std::vector<int> inseeds;
163 if (!handle.isValid()){
170 if ( pevinfo !=
nullptr ) {
178 inseeds.push_back(ievt);
179 inseeds.push_back(irun);
186 ATH_MSG_DEBUG(
" Actual ghost area: " << gspec.actual_ghost_area());
192 if ( inseeds.size() == 2 ) {
200 fastjet::AreaDefinition adef(fastjet::active_area_explicit_ghosts, gspec);
203 pcs =
new fastjet::ClusterSequenceArea(*inps, jetdef,
204 adef.with_fixed_seed(inseeds));
211 for (
const auto & pj: outs ) {
227 ATH_MSG_DEBUG(
"Reconstructed jet count: " << jets.size() <<
" clusterseq="<<pcs);
231 << j->numConstituents());
234 if(doSave){
save(pcs);}
245 if ( ! handle_out.record( std::unique_ptr<fastjet::ClusterSequence>(pcs)) ) {
251 bool present =
false;
252 if ( handle_in.isValid()) {
256 ATH_MSG_DEBUG(
"Will delete self: " << pcs->will_delete_self_when_unused());
257 const fastjet::SharedPtr<fastjet::PseudoJetStructureBase>& shrptr = pcs->structure_shared_ptr();
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
std::vector< fastjet::PseudoJet > PseudoJetVector
static const Attributes_t empty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
virtual int findNoSave(const PseudoJetContainer &cont, xAOD::JetContainer &finalJets, xAOD::JetInput::Type contype, fastjet::ClusterSequence *&cs) const override
virtual void print() const override
Print the state of the tool.
int _find(const PseudoJetContainer &cont, xAOD::JetContainer &finalJets, xAOD::JetInput::Type contype, bool doSave, fastjet::ClusterSequence *&) const
SG::WriteHandleKey< fastjet::ClusterSequence > m_cnameWKey
JetFinder(const std::string &name)
void save(fastjet::ClusterSequence *pcs) const
SG::ReadHandleKey< fastjet::ClusterSequence > m_cnameRKey
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
virtual int find(const PseudoJetContainer &cont, xAOD::JetContainer &finalJets, xAOD::JetInput::Type contype) const override
Method to find jets from a vector of pseudojet inputs.
ToolHandle< IJetFromPseudojet > m_bld
SG::ReadHandleKey< xAOD::EventInfo > m_eventinfokey
fastjet::JetAlgorithm m_fjalg
const std::vector< PseudoJet > * casVectorPseudoJet() const
uint64_t mcEventNumber() const
The MC generator's event number.
bool eventType(EventType type) const
Check for one particular bitmask value.
@ IS_SIMULATION
true: simulation, false: data
uint32_t runNumber() const
The current event's run number.
uint32_t mcChannelNumber() const
The MC generator's channel number.
uint64_t eventNumber() const
The current event's event number.
void setAlgorithmType(JetAlgorithmType::ID a)
void setAttribute(const std::string &name, const T &v)
void setSizeParameter(float p)
const std::string & name(Level lvl)
Convenience function for translating message levels to strings.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
ID algId(const std::string &n)
Converts a string into a JetAlgorithmType::ID.
fastjet::JetAlgorithm fastJetDef(ID id)
ID
//////////////////////////////////////// JetAlgorithmType::ID defines most common physics jet finding...
Jet_v1 Jet
Definition of the current "jet version".
EventInfo_v1 EventInfo
Definition of the latest event info version.
JetContainer_v1 JetContainer
Definition of the current "jet container version".