本文整理汇总了C++中hepmc::GenEvent::set_cross_section方法的典型用法代码示例。如果您正苦于以下问题:C++ GenEvent::set_cross_section方法的具体用法?C++ GenEvent::set_cross_section怎么用?C++ GenEvent::set_cross_section使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类hepmc::GenEvent
的用法示例。
在下文中一共展示了GenEvent::set_cross_section方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Run
bool Rivet_Interface::Run(ATOOLS::Blob_List *const bl)
{
DEBUG_FUNC("");
Particle_List pl=bl->ExtractParticles(1);
for (Particle_List::iterator it=pl.begin(); it!=pl.end(); ++it) {
if ((*it)->Momentum().Nan()) {
msg_Error()<<METHOD<<" encountered NaN in momentum. Ignoring event:"
<<endl<<*bl<<endl;
return false;
}
}
double weight(bl->Weight());
HepMC::GenEvent event;
if (m_usehepmcshort) m_hepmc2.Sherpa2ShortHepMC(bl, event, weight);
else m_hepmc2.Sherpa2HepMC(bl, event, weight);
std::vector<HepMC::GenEvent*> subevents(m_hepmc2.GenSubEventList());
#ifdef HEPMC_HAS_CROSS_SECTION
// leave this, although will be overwritten later
HepMC::GenCrossSection xs;
xs.set_cross_section(p_eventhandler->TotalXS(), p_eventhandler->TotalErr());
event.set_cross_section(xs);
for (size_t i(0);i<subevents.size();++i) {
subevents[i]->set_cross_section(xs);
}
#endif
// 1st event build index map, thereafter only lookup
ExtractVariations(event,subevents);
for (RivetScaleVariationMap::iterator it(m_rivet.begin());
it!=m_rivet.end();++it) {
msg_Debugging()<<"Running rivet for "<<it->first<<" with "
<<it->second->RivetMap().size()<<" histograms."<<std::endl;
Rivet_Map& rivetmap(it->second->RivetMap());
if (subevents.size()) {
it->second->SynchroniseCrossSection();
for (size_t i(0);i<subevents.size();++i) {
SetEventWeight(it->second,*subevents[i],i);
GetRivet(rivetmap,"", 0)->analyze(*subevents[i]);
}
}
else {
SetEventWeight(it->second,event);
GetRivet(rivetmap,"",0)->analyze(event);
Blob *sp(bl->FindFirst(btp::Signal_Process));
size_t parts=0;
if (sp) {
std::string multi(sp?sp->TypeSpec():"");
if (multi[3]=='_') multi=multi.substr(2,1);
else multi=multi.substr(2,2);
parts=ToType<size_t>(multi);
}
if (m_splitjetconts && sp) {
GetRivet(rivetmap,"",parts)->analyze(event);
}
if (m_splitcoreprocs && sp) {
GetRivet(rivetmap,GetCoreProc(sp->TypeSpec()),0)
->analyze(event);
if (m_splitjetconts) {
GetRivet(rivetmap,GetCoreProc(sp->TypeSpec()),parts)
->analyze(event);
}
}
if (m_splitSH && sp) {
std::string typespec=sp->TypeSpec();
typespec=typespec.substr(typespec.length()-2, 2);
std::string type="";
if (typespec=="+S") type="S";
else if (typespec=="+H") type="H";
if (type!="") {
GetRivet(rivetmap,type,0)->analyze(event);
if (m_splitjetconts) {
GetRivet(rivetmap,type,parts)->analyze(event);
}
}
}
}
}
if (subevents.size()) {
ResetRivetScaleVariationMapRSWeights();
m_hepmc2.DeleteGenSubEventList();
}
++m_nevt;
for (RivetScaleVariationMap::iterator it(m_rivet.begin());
it!=m_rivet.end();++it) {
msg_Debugging()<<"Checking rivet for "<<it->first<<" with "
<<it->second->RivetMap().size()<<" histograms."<<std::endl;
}
if (m_evtbyevtxs) {
for (RivetScaleVariationMap::iterator mit(m_rivet.begin());
mit!=m_rivet.end();++mit) {
std::string out=m_outpath;
if (mit->first!="" && mit->first!="nominal") out += "."+mit->first;
std::string namestr(m_rivet.size()>1?" for "+mit->first:"");
std::string output(std::string("** Total XS")+namestr
+std::string(" = ( ")
+ToString(mit->second->TotalXS(),m_xsoutputprecision)
+std::string(" +- ")
//.........这里部分代码省略.........