#include "PHASIC++/Selectors/Fastjet_Selector_Base.H" namespace PHASIC { class Fastjet_Selector: public Fastjet_Selector_Base, public ATOOLS::Tag_Replacer { int m_bmode; ATOOLS::Algebra_Interpreter m_calc; ATOOLS::Vec4D_Vector m_p; std::vector m_mu2; std::string ReplaceTags(std::string &expr) const; ATOOLS::Term *ReplaceTags(ATOOLS::Term *term) const; void AssignId(ATOOLS::Term *term); public: Fastjet_Selector(Process_Base* const proc, ATOOLS::Scoped_Settings s, int bmode, const std::string& expression); bool Trigger(ATOOLS::Selector_List&); void BuildCuts(Cut_Data*) {} }; } using namespace PHASIC; using namespace ATOOLS; /*--------------------------------------------------------------------- General form - flavours etc are unknown, will operate on a Particle_List. --------------------------------------------------------------------- */ Fastjet_Selector::Fastjet_Selector(Process_Base* const proc, Scoped_Settings s, int bmode, const std::string& expression): Fastjet_Selector_Base("FastjetSelector", proc, s), m_bmode(bmode) { m_p.resize(m_nin+m_nout); m_mu2.resize(m_nout); m_calc.AddTag("H_T2","1.0"); m_calc.AddTag("P_SUM","(1.0,0.0,0.0,0.0)"); for (size_t i=0;iId()>=1000) { term->Set(m_mu2[term->Id()-1000]); return term; } if (term->Id()>=100) { term->Set(m_p[term->Id()-100]); return term; } else if (term->Id()==5) { double ht(0.0); for (size_t i(0);iSet(sqr(ht)); return term; } else if (term->Id()==6) { Vec4D sum(0.0,0.0,0.0,0.0); for (size_t i(0);iSet(sum); return term; } return term; } void Fastjet_Selector::AssignId(Term *term) { if (term->Tag()=="H_T2") term->SetId(5); else if (term->Tag()=="P_SUM") term->SetId(6); else if (term->Tag().find("MU_")==0) { int idx(ToType(term->Tag().substr(3,term->Tag().length()-4))); if (idx>=m_mu2.size()) THROW(fatal_error,"Invalid syntax"); term->SetId(1000+idx); } else { int idx(ToType(term->Tag().substr(2,term->Tag().length()-3))); if (idx>=m_nin+m_nout) THROW(fatal_error,"Invalid syntax"); term->SetId(100+idx); } } bool Fastjet_Selector::Trigger(Selector_List &sl) { if (m_nj<0) return true; m_p.clear(); for (size_t i(0);i input,jets; for (size_t i(m_nin);isqr(m_ptmin)) { m_p.emplace_back(jets[i].E(),jets[i].px(),jets[i].py(),jets[i].pz()); } } } else { for (size_t i(0);i m_ptmin && pj.EPerp() > m_etmin && dabs(pj.Eta()) < m_eta && dabs(pj.Y()) < m_y) m_p.push_back(pj); } } } for (size_t i(0);i=m_nj); if (trigger) trigger=(int)m_calc.Calculate()->Get(); return (1-m_sel_log->Hit(1-trigger)); } DECLARE_GETTER(Fastjet_Selector,"FastjetSelector",Selector_Base,Selector_Key); Selector_Base *ATOOLS::Getter:: operator()(const Selector_Key &key) const { auto s = key.m_settings["FastjetSelector"]; const auto expression = s["Expression"].SetDefault("") .Get(); const auto bmode = s["BMode"] .SetDefault(0) .Get(); return new Fastjet_Selector(key.p_proc, s, bmode, expression); } void ATOOLS::Getter:: PrintInfo(std::ostream &str,const size_t width) const { str<<"FastjetSelector:\n" <