#include "AMEGIC++/String/String_Handler.H" #include "AMEGIC++/String/String_Output.H" #include "ATOOLS/Org/Library_Loader.H" #include "ATOOLS/Org/Run_Parameter.H" #include "ATOOLS/Org/Scoped_Settings.H" #include "ATOOLS/Org/Message.H" using namespace AMEGIC; using namespace ATOOLS; using namespace std; String_Handler::String_Handler(const int &_gen_str,Basic_Sfuncs* _BS,std::map* cplmap) : gen_str(_gen_str) { m_mode=1; own_sgen= 1; own_sk = 1; working = 0; sk = 0; stringsk= 0; val = 0; if (gen_str==0) sgen = new No_String_Generator; else sgen = new String_Generator(_BS); sgen->SetCouplings(cplmap); } String_Handler::String_Handler(Virtual_String_Generator * _sgen) { m_mode=1; own_sgen= 0; own_sk = 1; working = 0; sk = 0; stringsk= 0; val = 0; sgen = _sgen; } String_Handler::String_Handler(Virtual_String_Generator * _sgen, sknot *** _sk) { m_mode=1; own_sgen= 0; own_sk = 0; working = 1; sk = _sk; stringsk= 0; val = 0; sgen = _sgen; } bool String_Handler::SearchValues(const int _gen_str,string & pID,Basic_Sfuncs* _BS) { string vpID = string("V")+pID; if (_gen_str==2) { if (val) delete val; val = Set_Values(vpID,_BS); } if (val!=0) { val->SetCouplFlav(*sgen->GetCouplList()); if (sgen->NumberOfCouplings()!=val->NumberOfCouplings()) { msg_Error()<<" Number of Coupling constants does not fit with Process Library "< endpoint; stree.GetEnd(shelp,endpoint); for (list::iterator it=endpoint.begin();it!=endpoint.end();++it) { (*it)->value = sgen->GetKabbala((*it)->Str()); } return shelp; } void String_Handler::Complete(Helicity* hel) { if (gen_str==0) { sgen->Reset(); return; } working = 1; if (val!=0) return; msg_Info()<<"In String_Handler::Complete : this may take some time...."< endpoint; for (long int i=1;iZXMaxNumber();i++) sgen->SetOff(i); for (short int j=0;j0 && hel->On(j)) { if (hel->On(j)) sk[i][j] = MakeSknotAFill(stringsk[i][j]); else sk[i][j] = 0; //delete stringsk stringsk[i][j] = string(""); } } } for (long int i=sgen->ZXMaxNumber()-1;i>0;i--) { if (sgen->GetZXl(i)->zlist==6 && sgen->GetZXl(i)->on) { if (sgen->GetZXl(i)->sk!=0) { endpoint.clear(); stree.GetEnd(sgen->GetZXl(i)->sk,endpoint); for (list::iterator it=endpoint.begin();it!=endpoint.end();++it) (*it)->value = sgen->GetKabbala((*it)->Str()); } } } Z_Kill(); } Complex String_Handler::Zvalue(int igraph,int ihel) { if (val!=0) return val->Evaluate(igraph,ihel); if (sk[igraph][ihel]==0) return Complex(0.,0.); return stree.Evaluate(sk[igraph][ihel]); } void String_Handler::Calculate() { // PROFILE_HERE; sgen->Calculate(val); } void String_Handler::Output(Helicity* hel) { if (gen_str<2 || val!=0) return; String_Output so(path,maxgraph,maxhel,m_mode); so.Output(sk,&stree,sgen,hel); KillStrings(); } void String_Handler::Output(Helicity* hel, std::string path) { if (gen_str<2 || val!=0) return; String_Output so(path,maxgraph,maxhel,m_mode); so.Output(sk,&stree,sgen,hel); KillStrings(); } void String_Handler::Z_Kill() { int count = 0; string str; for (long int i=1;iZXMaxNumber();i++) { if (sgen->GetZXl(i)->on==0) { //search in 6 /*str = sgen->GetZXl(i)->value.String(); int hit = 0; for (long int j=i+1;jZXMaxNumber();j++) { if (sgen->GetZXl(j)->zlist==6 && sgen->GetZXl(j)->on) { if (sgen->GetZXl(j)->sk!=0) { stree.Find(sgen->GetZXl(j)->sk,str,hit); if (hit==1) break; } } } if (hit==1) sgen->SetOn(i); else*/ count++; } } } typedef Values* (*Lib_Getter_Function)(Basic_Sfuncs*); Values* String_Handler::Set_Values(std::string& pID,Basic_Sfuncs* BS) { static int s_mode(-1); if (s_mode<0) { Settings& s = Settings::GetMainSettings(); s_mode = s["AMEGIC_LIBRARY_MODE"].SetDefault(1).Get(); } s_loader->AddPath(rpa->gen.Variable("SHERPA_LIB_PATH")); if (s_mode==1) { Lib_Getter_Function gf = (Lib_Getter_Function)s_loader->GetLibraryFunction ("Proc_P"+pID.substr(1,pID.find("__")-1),"Getter_"+pID); if (gf==NULL) return NULL; return gf(BS); } Lib_Getter_Function gf = (Lib_Getter_Function)s_loader->GetLibraryFunction ("Proc_"+pID.substr(1),"Getter_"+pID); if (gf==NULL) return NULL; return gf(BS); }