#include "AddOns/Analysis/Main/Analysis_Object.H" #include "AddOns/Analysis/Tools/Particle_Qualifier.H" #include "ATOOLS/Org/MyStrStream.H" #include "ATOOLS/Org/Message.H" #include namespace ANALYSIS { class Particle_Selector: public Analysis_Object { private: std::string m_inlistname1, m_inlistname2, m_outlistname, m_qualname; int m_mode, m_init; ATOOLS::Particle_Qualifier_Base * p_qualifier; public: Particle_Selector(const std::string & inlistname1, const std::string & inlistname2, const std::string & outlistname,int mode); Particle_Selector(const std::string &inlist,const std::string &outlist, const std::string &qualname); void CreateParticleList(); void Evaluate(const ATOOLS::Blob_List & ,double weight,double ncount); Analysis_Object *GetCopy() const; ~Particle_Selector(); }; } // namespace ANALYSIS using namespace ANALYSIS; DECLARE_GETTER(Particle_Selector,"PartSel", Analysis_Object,Analysis_Key); void ATOOLS::Getter:: PrintInfo(std::ostream &str,const size_t width) const { str<<"{\n" <:: operator()(const Analysis_Key& key) const { Scoped_Settings s{ key.m_settings }; const auto inlist = s["InList"].SetDefault("FinalState").Get(); const auto outlist = s["OutList"].SetDefault("Selected").Get(); const auto qual = s["Qual"].SetDefault("NotLepton").Get(); return new Particle_Selector(inlist,outlist,qual); } #include "AddOns/Analysis/Main/Primitive_Analysis.H" using namespace ATOOLS; Particle_Selector::Particle_Selector(const std::string & inlistname1, const std::string & inlistname2, const std::string & outlistname, int mode) : m_inlistname1(inlistname1),m_inlistname2(inlistname2), m_outlistname(outlistname), m_qualname(m_outlistname), m_mode(mode), m_init(0) { m_name = std::string("ParticleSelector_")+outlistname; p_qualifier = ATOOLS::Particle_Qualifier_Getter::GetObject(outlistname,""); if (!p_qualifier) { msg_Error()<<"ERROR in Particle_Selector: unknown particle qualifier '" <GetParticleList(m_inlistname1); else pl_in = p_ana->GetParticleList(m_inlistname2); if (pl_in==NULL) { msg_Out()<<"WARNING in Particle_Selector::Evaluate : particle list "; if (m_mode<100) msg_Out()<begin(),pl_in->end(), back_inserter(*pl),*p_qualifier); p_ana->AddParticleList(m_outlistname,pl); } void Particle_Selector::Evaluate(const ATOOLS::Blob_List & ,double weight,double ncount) { CreateParticleList(); } Analysis_Object *Particle_Selector::GetCopy() const { if (m_init==0) return new Particle_Selector (m_inlistname1,m_inlistname2,m_outlistname,m_mode); return new Particle_Selector(m_inlistname1,m_outlistname,m_qualname); } Particle_Selector::~Particle_Selector() { if (p_qualifier) delete p_qualifier; }