#include "AddOns/Analysis/Main/Analysis_Object.H" #include "ATOOLS/Org/MyStrStream.H" #include "ATOOLS/Org/Message.H" #include "ATOOLS/Org/Exception.H" #include "ATOOLS/Org/Scoped_Settings.H" #include using namespace ATOOLS; namespace ANALYSIS { class Booster : public Analysis_Object { private: std::string m_inlist, m_reflist, m_outlist; std::vector m_flavs; std::vector m_items; public: Booster(const std::string &inlist, const std::string &reflist, const std::string &outlist, const std::vector &flavs, const std::vector &items); void CreateParticleList(); void Evaluate(const ATOOLS::Blob_List &bl,double weight,double ncount); Analysis_Object *GetCopy() const; };// end of class Booster class Rotator : public Analysis_Object { private: std::string m_inlist, m_reflist, m_outlist; std::vector m_flavs; std::vector m_items; public: Rotator(const std::string &inlist, const std::string &reflist, const std::string &outlist, const std::vector &flavs, const std::vector &items); void CreateParticleList(); void Evaluate(const ATOOLS::Blob_List &bl,double weight,double ncount); Analysis_Object *GetCopy() const; };// end of class Rotator class RBooster : public Analysis_Object { private: std::string m_inlist, m_ref, m_outlist; public: RBooster(const std::string &inlist, const std::string &ref, const std::string &outlist); void CreateParticleList(); void Evaluate(const ATOOLS::Blob_List &bl,double weight,double ncount); Analysis_Object *GetCopy() const; };// end of class RBooster class RRotator : public Analysis_Object { private: std::string m_inlist, m_ref, m_outlist; public: RRotator(const std::string &inlist, const std::string &ref, const std::string &outlist); void CreateParticleList(); void Evaluate(const ATOOLS::Blob_List &bl,double weight,double ncount); Analysis_Object *GetCopy() const; };// end of class RRotator } // namespace ANALYSIS using namespace ANALYSIS; DECLARE_GETTER(Booster,"CMSBoost", 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 reflist = s["RefList"].SetDefault("FinalState").Get(); const auto rawflavs = s["Flavs"].SetDefault({}).GetVector(); std::vector flavs; for (const auto& rawflav : rawflavs) { flavs.push_back(Flavour((kf_code)abs(rawflav))); if (rawflav<0) flavs.back()=flavs.back().Bar(); } auto items = s["Items"].SetDefault({}).GetVector(); items.resize(flavs.size(),0); return new Booster(inlist,reflist,outlist,flavs,items); } DECLARE_GETTER(Rotator,"ZRotate", 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 }; s.DeclareVectorSettingsWithEmptyDefault({"Flavs", "Items"}); const auto inlist = s["InList"].SetDefault("FinalState").Get(); const auto outlist = s["OutList"].SetDefault("Selected").Get(); const auto reflist = s["RefList"].SetDefault("FinalState").Get(); const auto rawflavs = s["Flavs"].GetVector(); std::vector flavs; for (const auto& rawflav : rawflavs) { flavs.push_back(Flavour((kf_code)abs(rawflav))); if (rawflav<0) flavs.back()=flavs.back().Bar(); } auto items = s["Items"].GetVector(); items.resize(flavs.size(),0); return new Rotator(inlist,reflist,outlist,flavs,items); } #include "AddOns/Analysis/Main/Primitive_Analysis.H" using namespace ATOOLS; Booster::Booster(const std::string &inlist, const std::string &reflist, const std::string &outlist, const std::vector &flavs, const std::vector &items): m_inlist(inlist), m_reflist(reflist), m_outlist(outlist), m_flavs(flavs), m_items(items) { m_name="Boost"; } void Booster::CreateParticleList() { Particle_List *inlist(p_ana->GetParticleList(m_inlist)); Particle_List *reflist(p_ana->GetParticleList(m_reflist)); if (inlist==NULL || reflist==NULL) { msg_Error()<size();++i) { if ((*reflist)[i]->Flav()==m_flavs[j]) { ++no; if (no==m_items[j]) { cms+=(*reflist)[i]->Momentum(); break; } } } } Poincare cmsboost(cms); Particle_List *outlist(new Particle_List()); outlist->resize(inlist->size()); for (size_t i(0);isize();++i) { (*outlist)[i] = new Particle(*(*inlist)[i]); Vec4D p((*outlist)[i]->Momentum()); cmsboost.Boost(p); (*outlist)[i]->SetMomentum(p); } p_ana->AddParticleList(m_outlist,outlist); } void Booster::Evaluate(const ATOOLS::Blob_List &bl,double weight,double ncount) { CreateParticleList(); } Analysis_Object *Booster::GetCopy() const { return new Booster(m_inlist,m_reflist,m_outlist,m_flavs,m_items); } Rotator::Rotator(const std::string &inlist, const std::string &reflist, const std::string &outlist, const std::vector &flavs, const std::vector &items): m_inlist(inlist), m_reflist(reflist), m_outlist(outlist), m_flavs(flavs), m_items(items) { m_name="Rot"; } void Rotator::CreateParticleList() { Particle_List *inlist(p_ana->GetParticleList(m_inlist)); Particle_List *reflist(p_ana->GetParticleList(m_reflist)); if (inlist==NULL || reflist==NULL) { msg_Error()<size();++i) { if ((*reflist)[i]->Flav()==m_flavs[j]) { ++no; if (no==m_items[j]) { zaxis+=(*reflist)[i]->Momentum(); break; } } } } Poincare zrot(zaxis,Vec4D::ZVEC); Particle_List *outlist(new Particle_List()); outlist->resize(inlist->size()); for (size_t i(0);isize();++i) { (*outlist)[i] = new Particle(*(*inlist)[i]); Vec4D p((*outlist)[i]->Momentum()); zrot.Rotate(p); (*outlist)[i]->SetMomentum(p); } p_ana->AddParticleList(m_outlist,outlist); } void Rotator::Evaluate(const ATOOLS::Blob_List &bl,double weight,double ncount) { CreateParticleList(); } Analysis_Object *Rotator::GetCopy() const { return new Rotator(m_inlist,m_reflist,m_outlist,m_flavs,m_items); } DECLARE_GETTER(RBooster,"CMSRBoost", 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 refmom = s["RefMom"].SetDefault("").Get(); return new RBooster(inlist,refmom,outlist); } DECLARE_GETTER(RRotator,"ZRRotate", 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 refmom = s["RefMom"].SetDefault("").Get(); return new RRotator(inlist,refmom,outlist); } #include "AddOns/Analysis/Main/Primitive_Analysis.H" using namespace ATOOLS; RBooster::RBooster(const std::string &inlist, const std::string &ref, const std::string &outlist): m_inlist(inlist), m_ref(ref), m_outlist(outlist) { m_name="RBoost"; } void RBooster::CreateParticleList() { Particle_List *inlist(p_ana->GetParticleList(m_inlist)); Blob_Data_Base *data((*p_ana)[m_ref]); if (data==NULL) THROW(fatal_error,"Reference momentum not found"); Vec4D cms(data->Get()); Poincare cmsrboost(cms); Particle_List *outlist(new Particle_List()); outlist->resize(inlist->size()); for (size_t i(0);isize();++i) { (*outlist)[i] = new Particle(*(*inlist)[i]); Vec4D p((*outlist)[i]->Momentum()); cmsrboost.Boost(p); (*outlist)[i]->SetMomentum(p); } p_ana->AddParticleList(m_outlist,outlist); } void RBooster::Evaluate(const ATOOLS::Blob_List &bl,double weight,double ncount) { CreateParticleList(); } Analysis_Object *RBooster::GetCopy() const { return new RBooster(m_inlist,m_ref,m_outlist); } RRotator::RRotator(const std::string &inlist, const std::string &ref, const std::string &outlist): m_inlist(inlist), m_ref(ref), m_outlist(outlist) { m_name="RRot"; } void RRotator::CreateParticleList() { Particle_List *inlist(p_ana->GetParticleList(m_inlist)); Blob_Data_Base *data((*p_ana)[m_ref]); if (data==NULL) THROW(fatal_error,"Reference momentum not found"); Vec4D zaxis(data->Get()); Poincare zrot(zaxis,Vec4D::ZVEC); Particle_List *outlist(new Particle_List()); outlist->resize(inlist->size()); for (size_t i(0);isize();++i) { (*outlist)[i] = new Particle(*(*inlist)[i]); Vec4D p((*outlist)[i]->Momentum()); zrot.Rotate(p); (*outlist)[i]->SetMomentum(p); } p_ana->AddParticleList(m_outlist,outlist); } void RRotator::Evaluate(const ATOOLS::Blob_List &bl,double weight,double ncount) { CreateParticleList(); } Analysis_Object *RRotator::GetCopy() const { return new RRotator(m_inlist,m_ref,m_outlist); }