#include "AddOns/Analysis/Triggers/Primitive_Detector.H" #include "AddOns/Analysis/Triggers/Primitive_Calorimeter.H" #include "AddOns/Analysis/Main/Primitive_Analysis.H" #include "ATOOLS/Org/MyStrStream.H" #include "ATOOLS/Org/Message.H" using namespace ANALYSIS; using namespace ATOOLS; #include DECLARE_GETTER(Primitive_Detector,"Detector", Analysis_Object,Analysis_Key); void ATOOLS::Getter:: PrintInfo(std::ostream &str,const size_t width) const { str<<"{\n" <:: operator()(const Analysis_Key& key) const { ATOOLS::Scoped_Settings s{ key.m_settings }; const auto inlist = s["InList"].SetDefault("FinalState").Get(); const auto outlist = s["OutList"].SetDefault("Detected").Get(); Primitive_Detector *detector = new Primitive_Detector(inlist,outlist); const auto hcparams = s["HadCal"].SetDefault({}).GetVector(); if (hcparams.size() < 4) THROW(fatal_error, "HadCal must have four or more parameters."); detector->Add(new Primitive_Calorimeter(s.Interprete(hcparams[0]), s.Interprete(hcparams[1]), s.Interprete(hcparams[2]), s.Interprete(hcparams[3]), hcparams.size()>4?hcparams[4]:"NotLepton")); if (s["CalCone"].IsSetExplicitly()) msg_Out()<<"WARNING CalCone no longer supported by Primitive Detector ! "<second!=NULL) { m_elements.erase(sdeiter--); } } m_elements.clear(); } Analysis_Object* Primitive_Detector::GetCopy() const { Primitive_Detector *detector = new Primitive_Detector(m_inlistname,m_outlistname); for (String_DetectorElement_Map::const_iterator sdeiter=m_elements.begin(); sdeiter!=m_elements.end();++sdeiter) { if (sdeiter->second!=NULL) { detector->Add(sdeiter->second->Copy()); } } return detector; } void Primitive_Detector::Evaluate(const ATOOLS::Blob_List &bloblist, double value,double ncount) { Particle_List *inparticles=p_ana->GetParticleList(m_inlistname); if (inparticles==NULL) { msg_Error()<<"Primitive_Detector::Evaluate(..): " <<"Particle list '"<AddParticleList(m_outlistname,outparticles); } void Primitive_Detector::Add(Primitive_Detector_Element * pde) { m_elements[pde->Name()] = pde; } void Primitive_Detector::Print() { if (!msg_LevelIsInfo()) return; msg_Out()<<"==================================================="<second->Name()<begin();blit!=bl->end();++blit) { for (int i=0;i<(*blit)->NOutP();++i) { Particle * p = (*blit)->OutParticle(i); if (p->DecayBlob()==NULL) pl->push_back(new Particle(*p)); } } Fill(pl); for (Particle_List::iterator pit=pl->begin();pit!=pl->end();++pit) delete (*pit); delete pl; } void Primitive_Detector::Fill(const ATOOLS::Particle_List * pl) { for (String_DetectorElement_Iter sdeiter=m_elements.begin(); sdeiter!=m_elements.end();++sdeiter) { if (sdeiter->second!=NULL) sdeiter->second->Fill(pl); } } void Primitive_Detector::Extract(ATOOLS::Particle_List * pl) { for (String_DetectorElement_Iter sdeiter=m_elements.begin(); sdeiter!=m_elements.end();++sdeiter) { if (sdeiter->second!=NULL) sdeiter->second->Extract(pl); } } Primitive_Detector_Element * Primitive_Detector::GetElement(std::string name) { String_DetectorElement_Iter sdeiter=m_elements.find(name); if (sdeiter==m_elements.end()) { msg_Error()<<"Potential Error in Primitive_Detector::GetElement("<second; }