void Hadron_Decay_Channel::ProcessME( vector<vector<string> > me_svv, Data_Reader & reader, GeneralModel & model_for_ps ) { int nr_of_mes=0; Algebra_Interpreter ip; ip.AddTag("GF", "8.24748e-6"); for (size_t i=0;i<me_svv.size();i++) { if(me_svv[i].size()==3) { msg_Tracking()<<"Selecting ME for "<<Name()<<endl; HD_ME_Base* me = SelectME( me_svv[i][2] ); me->SetPath(m_path); msg_Tracking()<<" "<<me->Name()<<endl; vector<vector<string> > parameter_svv; reader.SetFileBegin("<"+me_svv[i][2]+">"); reader.SetFileEnd("</"+me_svv[i][2]+">"); reader.RereadInFile(); reader.MatrixFromFile(parameter_svv); GeneralModel me_model=Parameters2Model(parameter_svv,model_for_ps); me->SetModelParameters( me_model ); Complex factor = Complex(ToType<double>(ip.Interprete(me_svv[i][0])), ToType<double>(ip.Interprete(me_svv[i][1]))); me->SetFactor(factor); PHASIC::Color_Function_Decay* col=new PHASIC::Color_Function_Decay(); AddDiagram(me, col); nr_of_mes++; } if(me_svv[i].size()==4) { msg_Tracking()<<"Selecting currents for "<<Name()<<endl; Current_Base* current1 = SelectCurrent(me_svv[i][2]); current1->SetPath(m_path); vector<vector<string> > parameter1_svv; reader.SetFileBegin("<"+me_svv[i][2]+">"); reader.SetFileEnd("</"+me_svv[i][2]+">"); reader.RereadInFile(); reader.MatrixFromFile(parameter1_svv); GeneralModel current1_model=Parameters2Model(parameter1_svv,model_for_ps); current1->SetModelParameters( current1_model ); Current_Base* current2 = SelectCurrent(me_svv[i][3]); current2->SetPath(m_path); vector<vector<string> > parameter2_svv; reader.SetFileBegin("<"+me_svv[i][3]+">"); reader.SetFileEnd("</"+me_svv[i][3]+">"); reader.RereadInFile(); reader.MatrixFromFile(parameter2_svv); GeneralModel current2_model=Parameters2Model(parameter2_svv,model_for_ps); current2->SetModelParameters( current2_model ); msg_Tracking()<<" "<<current1->Name()<<endl; msg_Tracking()<<" "<<current2->Name()<<endl; // Sanity checks for current selection if(size_t(1+NOut()) != current1->DecayIndices().size()+ current2->DecayIndices().size()) { msg_Error()<<"Error in "<<METHOD<<": Current selection does not look sane " <<"for "<<Name()<<". Check decaychannelfile."<<std::endl; abort(); } Complex factor = Complex(ToType<double>(ip.Interprete(me_svv[i][0])), ToType<double>(ip.Interprete(me_svv[i][1]))); vector<int> indices (NOut()+1); for(int i=0; i<NOut()+1; i++) indices[i] = i; Current_ME* me= new Current_ME(m_physicalflavours, indices, "Current_ME"); me->SetCurrent1(current1); me->SetCurrent2(current2); me->SetFactor(factor); PHASIC::Color_Function_Decay* col=new PHASIC::Color_Function_Decay(); AddDiagram(me, col); nr_of_mes++; } } if(nr_of_mes == 0) { msg_Error()<<METHOD<<": Warning. No valid matrix element found in " <<m_path<<m_filename<<". Using Generic."<<endl; int n=NOut()+1; vector<int> decayindices(n); for(int i=0;i<n;i++) decayindices[i]=i; HD_ME_Base* me=new Generic(m_physicalflavours,decayindices,"Generic"); PHASIC::Color_Function_Decay* col=new PHASIC::Color_Function_Decay(); AddDiagram(me, col); } }