#include "AddOns/Analysis/Triggers/Trigger_Base.H" #include "ATOOLS/Org/Message.H" #include using namespace ATOOLS; namespace ANALYSIS { class Isolation_Selector: public Two_List_Trigger_Base { protected: double m_dr, m_emax; double DEta12(const ATOOLS::Vec4D & p1,const ATOOLS::Vec4D & p2) { // eta1,2 = -log(tan(theta_1,2)/2) double c1=p1[3]/Vec3D(p1).Abs(); double c2=p2[3]/Vec3D(p2).Abs(); return 0.5 *log( (1 + c1)*(1 - c2)/((1-c1)*(1+c2))); } double DPhi12(const ATOOLS::Vec4D & p1,const ATOOLS::Vec4D & p2) { double pt1=sqrt(p1[1]*p1[1]+p1[2]*p1[2]); double pt2=sqrt(p2[1]*p2[1]+p2[2]*p2[2]); return acos(Min(1.0,Max(-1.0,((p1[1]*p2[1]+p1[2]*p2[2])/(pt1*pt2))))); } double DR(const ATOOLS::Vec4D & p1,const ATOOLS::Vec4D & p2) { return sqrt(sqr(DEta12(p1,p2)) + sqr(DPhi12(p1,p2))); } public: inline Isolation_Selector (const double dr,const double emax, const std::string &inlist,const std::string &reflist, const std::string &outlist): Two_List_Trigger_Base(inlist,reflist,outlist), m_dr(dr), m_emax(emax) {} void Evaluate(const ATOOLS::Particle_List &inlist, const ATOOLS::Particle_List &reflist, ATOOLS::Particle_List &outlist,double value,double ncount) { for (size_t j=0;jMomentum(),inlist[i]->Momentum()); if (drMomentum().EPerp(); } if (et>m_emax) return; } outlist.resize(inlist.size()); for (size_t i=0;i:: operator()(const Analysis_Key& key) const { ATOOLS::Scoped_Settings s{ key.m_settings }; const auto parameters = s.SetDefault({}).GetVector(); if (parameters.size() < 5) THROW(missing_input, "Missing parameter values."); return new Isolation_Selector (s.Interprete(parameters[0]), s.Interprete(parameters[1]), parameters[2],parameters[3],parameters[4]); } void ATOOLS::Getter :: PrintInfo(std::ostream &str,const size_t width) const { str<<"[DR, E_max, inlist, reflist, outlist]"; }