#include "PHASIC++/Selectors/Cut_Data.H" #include "ATOOLS/Org/Run_Parameter.H" #include "ATOOLS/Org/MyStrStream.H" #include "ATOOLS/Math/Poincare.H" #include "ATOOLS/Org/Message.H" #include "ATOOLS/Org/Scoped_Settings.H" using namespace PHASIC; using namespace ATOOLS; using namespace std; std::ostream & PHASIC::operator<<(std::ostream & s , Cut_Data & cd) { s<<" Cut Data : "<() }; for (int i=0;igen.Ecms()); } } } void Cut_Data::Complete() { for (int i=0;i=2) str|=(1<etmm) etmm = etmin[i]; smin += etmin[i]; e1 += energymin[i]; e2 += energymin[i]*cosmax[0][i]; } smin = Max(sqr(smin),sqr(e1)-sqr(e2)); smin = Max(smin,sqr(2.*etmm)); smin = Max(Getscut(str),smin); msg_Tracking()<<"Cut_Data::Complete(): s_{min} = "<::iterator it; for (it=m_smin_map.begin();it!=m_smin_map.end();++it) it->second = -1.; } } char Cut_Data::GetIndexID(int id) { char c = id; c<10 ? c+=48 : c+=55; return c; } double Cut_Data::Getscut (std::vector pl,std::vector pr,int n,int k,int li) { if (n==k) { size_t idl=0, idr=0; for (size_t i(0);i(pl[i],pr[i]); sc=Max(sc,Getscut(pl,pr,n,k+1,i)); std::swap(pl[i],pr[i]); } return sc; } double Cut_Data::GetscutAmegic(std::string str) { size_t id(0); int length = str.length(); for (int i=0;i::iterator it = m_smin_map.find(str); if (it!=m_smin_map.end()) if (it->second>=0.) return it->second; std::vector pr(ID(str)); double sc = 0.; if (pr.size()==1) { m_smin_map[str] = sc = sqr(fl[pr.front()].SelMass()); return sc; } if (pr.size()==2) { m_smin_map[str] = sc = scut[pr[0]][pr[1]]; return sc; } for (int i=0;i pl(pr.size(),0); for (int i(1);i<=pr.size()/2;++i) sc=Max(sc,Getscut(pl,pr,i,0,-1)); m_smin_map[str] = sc; return sc; } void Cut_Data::Setscut(size_t str,double d) { m_smin_map[str]=d; } void Cut_Data::Update(double sprime,double y) { // reset cuts to lab values Reset(false); // boost from lab to cms double chy(cosh(y)), shy(sinh(y)); Poincare cms[2]={Poincare(Vec4D(chy,0.0,0.0,shy)), Poincare(Vec4D(chy,0.0,0.0,-shy))}; for (int a=0;a<2;++a) { for (int i=2;i-1.0 && !fl[i].IsMassive()) { Vec4D help(1.0,sqrt(1.0-sqr(cosmin[a][i])),0.0,cosmin[a][i]); cms[a].Boost(help); cosmin[a][i]=cosmin[i][a]=help[3]/help[0]; } else cosmin[a][i] = cosmin[i][a] = -1.0; double ct=sqrt(1.0-(sqr(etmin[i])-sqr(fl[i].SelMass()))/ (sprime/4.0-sqr(fl[i].SelMass()))); if (etmin[i]