Page MenuHomeHEPForge

No OneTemporary

Index: trunk/src/FHerwig/FHerwig.cc
===================================================================
--- trunk/src/FHerwig/FHerwig.cc (revision 700)
+++ trunk/src/FHerwig/FHerwig.cc (revision 701)
@@ -1,481 +1,490 @@
// -*- C++ -*-
#include "AGILe/FHerwig/FHerwig.hh"
#include "AGILe/FHerwig/FHerwigWrapper65.hh"
#include "AGILe/Utils.hh"
namespace AGILe {
// Standard constructor
FHerwig::FHerwig() {
/// Herwig 6.5 uses HEPEVT with 4000/10000 entries and 8-byte floats
HepMC::HEPEVT_Wrapper::set_max_number_entries(FC_HWGETHEPEVTSIZE());
HepMC::HEPEVT_Wrapper::set_sizeof_real(8);
// Set up particle names map: note that they must be 8 characters long
_particleNames[ELECTRON] = "E- ";
_particleNames[POSITRON] = "E+ ";
_particleNames[PROTON] = "P ";
_particleNames[ANTIPROTON] = "PBAR ";
_particleNames[NEUTRON] = "N ";
_particleNames[ANTINEUTRON] = "NBAR ";
_particleNames[PHOTON] = "GAMMA ";
_particleNames[MUON] = "MU- ";
_particleNames[ANTIMUON] = "MU+ ";
// TAU, ANTITAU
_particleNames[NU_E] = "NU_E ";
_particleNames[NU_EBAR] = "NU_EBAR ";
_particleNames[NU_MU] = "NU_MU ";
_particleNames[NU_MUBAR] = "NU_MUBAR";
_particleNames[NU_TAU] = "NU_TAU ";
_particleNames[NU_TAUBAR] = "NU_TAUBR";
_particleNames[PIPLUS] = "PI+ ";
_particleNames[PIMINUS] = "PI- ";
// PIZERO
// PHOTOELECTRON, PHOTOPOSITRON,
// PHOTOMUON, PHOTOANTIMUON,
// PHOTOTAU, PHOTOANTITAU,
// Initialize and set default parameters (no echoing)
FC_HWIGIN(); // Initialise common blocks
//FC_HWPROC.IPROC = 1706; // Use qq -> ttbar production as the default process
FC_HWPROC.IPROC = 1500; // Use QCD 2->2 as the default process
FC_HWPROC.MAXEV = 100000000; // Maximum number of events (irrelevant!)
FC_HWEVNT.MAXER = 100000000; // Maximum number of allowed errors
FC_HWPRAM.PRNDEF = 0; // Enable/disable ASCII output
FC_HWEVNT.MAXPR = 0; // Number of events to print
FC_HWPRAM.IPRINT = 1; // Type of info to print
// Start counting events at 1.
_nevt = 1;
}
// Set up initial state from supplied params
void FHerwig::setGenSpecificInitialState(int p1, double e1, int p2, double e2) {
getLog() << Log::INFO << "Setting initial state..." << endl;
// Herwig's initial state particles specification must be 8 chars long
for ( unsigned int i = 0; i < 8; ++i ) {
FC_HWBMCH.PART1[i] = _particleNames[ParticleName(p1)].c_str()[i];
FC_HWBMCH.PART2[i] = _particleNames[ParticleName(p2)].c_str()[i];
}
// Set momenta / energies
setParam("PBEAM1", e1); /// @todo Get momenta and energies unconfused?
setParam("PBEAM2", e2); /// @todo Store a list of particle masses for this?
/// @todo Beam ordering is significant (segfault if "wrong") for HERA initial state
}
// Run generator initialization
void FHerwig::initialize() {
Generator::initialize();
// Compute parameter-dependent constants
FC_HWUINC();
// Initialise elementary process
FC_HWEINI();
_initialized = true;
}
// Set random number seed
void FHerwig::setSeed(const int value) {
Generator::setSeed(value);
FC_HWEVNT.NRN[0] = value;
const int nextSeed = value + SEED_OFFSET;
FC_HWEVNT.NRN[1] = nextSeed;
Generator::setSeed(nextSeed);
}
// Set parameters.
bool FHerwig::setParam(const string& name, const string& value) {
Generator::setParam(name, value);
// Strings
//std::cout << "****" << name << "****" << std::endl;
if (name.find("AUTPDF") != string::npos) {
if (name == "AUTPDF(1)" || name == "AUTPDF") {
getLog() << Log::INFO << "Setting AUTPDF(1) = " << value << endl;
int nch = (value.size() < AUTPDF_LENGTH) ? value.size() : AUTPDF_LENGTH-1;
for(int i = 0; i < AUTPDF_LENGTH; i++) {
if(i < nch) {
FC_HWPRCH.AUTPDF[0][i] = value.data()[i];
} else {
FC_HWPRCH.AUTPDF[0][i] = ' ';
}
}
}
if (name == "AUTPDF(2)" || name == "AUTPDF") {
getLog() << Log::INFO << "Setting AUTPDF(2) = " << value << endl;
int nch = (value.size() < AUTPDF_LENGTH) ? value.size() : AUTPDF_LENGTH-1;
for(int i = 0; i < AUTPDF_LENGTH; i++) {
if(i < nch) {
FC_HWPRCH.AUTPDF[1][i] = value.data()[i];
} else {
FC_HWPRCH.AUTPDF[1][i] = ' ';
}
}
}
} else //...
// Integers
if (name == "IPROC") {
// 1610 = gg -> H -> WW; 1706 = qq -> ttbar; 2510 = ttH -> ttWW, ...
getLog() << Log::INFO << "Setting process code (IPROC) = " << asInt(value) << endl;
FC_HWPROC.IPROC = asInt(value);
//} else if (name == "MAXEV") {
//getLog() << Log::INFO << "Setting maximum number of events (MAXEV) = " << asInt(value) << endl;
//FC_HWPROC.MAXEV = asInt(value);
} else if (name == "MAXPR") {
getLog() << Log::INFO << "Setting max event printouts (MAXPR) = " << asInt(value) << endl;
FC_HWEVNT.MAXPR = asInt(value);
} else if (name == "IPRINT") {
getLog() << Log::INFO << "Setting printout info code (IPRINT) = " << asInt(value) << endl;
FC_HWPRAM.IPRINT = asInt(value);
} else if (name == "CLDIR1") {
getLog() << Log::INFO << "Setting smearing of perturbative quark pT in light cluster fission (CLDIR(1)) = " << asInt(value) << endl;
FC_HWPRAM.CLDIR[0] = asInt(value);
} else if (name == "CLDIR2") {
getLog() << Log::INFO << "Setting smearing of perturbative quark pT in b cluster fission (CLDIR(2)) = " << asInt(value) << endl;
FC_HWPRAM.CLDIR[1] = asInt(value);
} else if (name == "IOPREM") {
getLog() << Log::INFO << "Setting model for treatment of remnant clusters (IOPREM) = " << asInt(value) << endl;
FC_HWPRAM.IOPREM = asInt(value);
} else if (name == "ISPAC") {
getLog() << Log::INFO << "Setting ISR forced branching IR behaviour (ISPAC) = " << asInt(value) << endl;
FC_HWPRAM.ISPAC = asInt(value);
} else if (name == "NFLAV") {
getLog() << Log::INFO << "Setting number of flavours (NFLAV) = " << asInt(value) << endl;
FC_HWPRAM.NFLAV = asInt(value);
} else if (name == "NSTRU") {
getLog() << Log::INFO << "Setting internal PDF ID... are you sure? (NSTRU) = " << asInt(value) << endl;
FC_HWPRAM.NSTRU = asInt(value);
} else if (name == "MODPDF") {
getLog() << Log::INFO << "Setting PDFLIB IDs for both beams (MODPDF(1&2)) = " << asInt(value) << endl;
FC_HWPRAM.MODPDF[0] = asInt(value);
FC_HWPRAM.MODPDF[1] = asInt(value);
} else if (name == "MODPDF(1)") {
getLog() << Log::INFO << "Setting PDFLIB ID for beam 1 (MODPDF(1)) = " << asInt(value) << endl;
FC_HWPRAM.MODPDF[0] = asInt(value);
} else if (name == "MODPDF(2)") {
getLog() << Log::INFO << "Setting PDFLIB ID for beam 2 (MODPDF(2)) = " << asInt(value) << endl;
FC_HWPRAM.MODPDF[1] = asInt(value);
} else if (name == "IFLMAX") {
getLog() << Log::INFO << "Setting max quark flavour in photoproduction (IFLMAX) = " << asInt(value) << endl;
FC_HWHARD.IFLMAX = asInt(value);
+ } else if (name == "LRSUD") {
+ getLog() << Log::INFO << "Setting unit for reading Sudakov table (LRSUD) = " << asInt(value) << endl;
+ FC_HWPRAM.LRSUD = asInt(value);
+ } else if (name == "LWSUD") {
+ getLog() << Log::INFO << "Setting unit for writing Sudakov table (LWSUD) = " << asInt(value) << endl;
+ FC_HWPRAM.LWSUD = asInt(value);
// } else if (name == "MODBOS") {
// getLog() << Log::INFO << "Setting MODBOS = " << asInt(value) << endl;
// FC_HWBOSC.MODBOS[0] = asInt(value);
} //...
// Doubles
else if (name == "PBEAM1") {
getLog() << Log::INFO << "Setting beam 1 momentum (PBEAM1) = " << asDouble(value) << endl;
FC_HWPROC.PBEAM1 = asDouble(value);
} else if (name == "PBEAM2") {
getLog() << Log::INFO << "Setting beam 2 momentum (PBEAM2) = " << asDouble(value) << endl;
FC_HWPROC.PBEAM2 = asDouble(value);
} else if (name == "EBEAM1") {
getLog() << Log::INFO << "Setting beam 1 energy (EBEAM1) = " << asDouble(value) << endl;
FC_HWPROC.EBEAM1 = asDouble(value);
} else if (name == "EBEAM2") {
getLog() << Log::INFO << "Setting beam 2 energy (EBEAM2) = " << asDouble(value) << endl;
FC_HWPROC.EBEAM2 = asDouble(value);
} else if (name == "PTMIN") {
getLog() << Log::INFO << "Setting minimum hard pt (PTMIN) = " << asDouble(value) << endl;
FC_HWHARD.PTMIN = asDouble(value);
} else if (name == "PTMAX") {
getLog() << Log::INFO << "Setting maximum hard pt (PTMAX) = " << asDouble(value) << endl;
FC_HWHARD.PTMAX = asDouble(value);
} else if (name == "Q2WWMN") {
getLog() << Log::INFO << "Setting minimum Q2 in equivalent photon approximation (Q2WWMN) = " << asDouble(value) << endl;
FC_HWHARD.Q2WWMN = asDouble(value);
} else if (name == "Q2WWMX") {
getLog() << Log::INFO << "Setting maximum Q2 in equivalent photon approximation (Q2WWMX) = " << asDouble(value) << endl;
FC_HWHARD.Q2WWMX = asDouble(value);
} else if (name == "YWWMIN") {
getLog() << Log::INFO << "Setting minimum photon light-cone fraction in equivalent photon approximation (YWWMIN) = " << asDouble(value) << endl;
FC_HWHARD.YWWMIN = asDouble(value);
} else if (name == "YWWMAX") {
getLog() << Log::INFO << "Setting maximum photon light-cone fraction in equivalent photon approximation (YWWMAX) = " << asDouble(value) << endl;
FC_HWHARD.YWWMAX = asDouble(value);
} else if ( name =="WHMIN") {
getLog() << Log::INFO << "Setting min hadronic mass in photon-induced (DIS) processes (WHMIN) = " << asDouble(value)<<endl;
FC_HWHARD.WHMIN = asDouble(value);
} else if ( name =="EMMIN") {
getLog() << Log::INFO << "Setting minimum DY boson mass (EMMIN) = "<< asDouble(value) << endl;
FC_HWHARD.EMMIN = asDouble(value);
} else if (name == "PRECO") {
getLog() << Log::INFO << "Setting probability of cluster colour reassignment (PRECO) = " << asDouble(value) << endl;
FC_HWUCLU.PRECO = asDouble(value);
} else if (name == "PDFX0") {
getLog() << Log::INFO << "Setting maximum x for saturation effects (PDFX0) = " << asDouble(value) << endl;
FC_HW6506.PDFX0 = asDouble(value);
} else if (name == "PDFPOW") {
getLog() << Log::INFO << "Setting suppression of PDFs below x0 (PDFPOW) = " << asDouble(value) << endl;
FC_HW6506.PDFPOW = asDouble(value);
} else if (name == "BTCLM") {
getLog() << Log::INFO << "Setting remnant cluster mass param adjustment (BTCLM) = " << asDouble(value) << endl;
FC_HWPRAM.BTCLM = asDouble(value);
} else if (name == "CLMAX") {
getLog() << Log::INFO << "Setting cluster mass offset (CLMAX) = " << asDouble(value) << endl;
FC_HWPRAM.CLMAX = asDouble(value);
} else if (name == "CLPOW") {
getLog() << Log::INFO << "Setting exponent of cluster fission (CLPOW) = " << asDouble(value) << endl;
FC_HWPRAM.CLPOW = asDouble(value);
} else if (name == "CLSMR1") {
getLog() << Log::INFO << "Setting Gaussian quark pT smearing width for light clusters (CLSMR(1)) = " << asDouble(value) << endl;
FC_HWPRAM.CLSMR[0] = asDouble(value);
} else if (name == "CLSMR2") {
getLog() << Log::INFO << "Setting Gaussian quark pT smearing width for b clusters (CLSMR(2)) = " << asDouble(value) << endl;
FC_HWPRAM.CLSMR[1] = asDouble(value);
} else if (name == "PRSOF") {
getLog() << Log::INFO << "Setting probablility of soft scatters (PRSOF) = " << asDouble(value) << endl;
FC_HWPRAM.PRSOF = asDouble(value);
} else if (name == "PSPLT1") {
getLog() << Log::INFO << "Setting cluster mass spectrum exponent for light clusters (PSPLT(1)) = " << asDouble(value) << endl;
FC_HWPRAM.PSPLT[0] = asDouble(value);
} else if (name == "PSPLT2") {
getLog() << Log::INFO << "Setting cluster mass spectrum exponent for b clusters (PSPLT(2)) = " << asDouble(value) << endl;
FC_HWPRAM.PSPLT[1] = asDouble(value);
}
// Following params are useful for MPI/ISR tunes:
else if (name == "PTRMS") {
getLog() << Log::INFO << "Setting intrinsic kT (PTRMS) = " << asDouble(value) << endl;
FC_HWPRAM.PTRMS = asDouble(value);
} else if (name == "QCDLAM") {
getLog() << Log::INFO << "Setting Lambda_QCD for alpha_s running (QCDLAM) = " << asDouble(value) << endl;
FC_HWPRAM.QCDLAM = asDouble(value);
} else if (name == "QSPAC") {
getLog() << Log::INFO << "Setting Q cutoff for spacelike (ISR) shower (QSPAC) = " << asDouble(value) << endl;
FC_HWPRAM.QSPAC = asDouble(value);
} else if (name == "VGCUT") {
getLog() << Log::INFO << "Setting gluon virtuality cutoff in parton showers (VGCUT) = " << asDouble(value) << endl;
FC_HWPRAM.VGCUT = asDouble(value);
} else if (name == "VQCUT") {
getLog() << Log::INFO << "Setting quark virtuality cutoff in parton showers (VQCUT) = " << asDouble(value) << endl;
FC_HWPRAM.VQCUT = asDouble(value);
+ } else if (name == "ZMXISR") {
+ getLog() << Log::INFO << "Setting max. momentum fraction for photon ISR (ZMXISR) = " << asDouble(value) << endl;
+ FC_HWHARD.ZMXISR = asDouble(value);
}
// End MPI/ISR tune params
else if (name == "VPCUT") {
getLog() << Log::INFO << "Setting photon virtuality cutoff (VPCUT) = " << asDouble(value) << endl;
FC_HWPRAM.VPCUT = asDouble(value);
} else if (name == "OMEGA0") {
getLog() << Log::INFO << "Setting omega_0 param in Mueller-Tang pomeron for IPROC=2400 (OMEGA0) = " << asDouble(value) << endl;
FC_HWHARD.OMEGA0 = asDouble(value);
} else if (name == "ASFIXD") {
getLog() << Log::INFO << "Setting a_s param in Mueller-Tang pomeron for IPROC=2400 (ASFIXD) = " << asDouble(value) << endl;
FC_HWHARD.ASFIXD = asDouble(value);
} else if (name == "Q2MIN") {
getLog() << Log::INFO << "Setting minimum DIS Q2 (Q2MIN) = " << asDouble(value) << endl;
FC_HWHARD.Q2MIN = asDouble(value);
} else if (name == "Q2MAX") {
getLog() << Log::INFO << "Setting maximum DIS Q2 (Q2MAX) = " << asDouble(value) << endl;
FC_HWHARD.Q2MAX = asDouble(value);
} else if (name == "YBMIN") {
getLog() << Log::INFO << "Setting minimum Bjorken y=Q2/xs (YBMIN) = " << asDouble(value) << endl;
FC_HWHARD.YBMIN = asDouble(value);
} else if (name == "YBMAX") {
getLog() << Log::INFO << "Setting maximum Bjorken y=Q2/xs (YBMAX) = " << asDouble(value) << endl;
FC_HWHARD.YBMAX = asDouble(value);
} else if (name == "PLTCUT") {
getLog() << Log::INFO << "Setting lifetime cut (PLTCUT) = " << asDouble(value) << endl;
FC_HWDIST.PLTCUT = asDouble(value);
} else if (name == "GAMW") {
getLog() << Log::INFO << "Setting W width (GAMW) = " << asDouble(value) << endl;
FC_HWPRAM.GAMW = asDouble(value);
} else if (name == "GAMZ") {
getLog() << Log::INFO << "Setting Z0 width (GAMZ) = " << asDouble(value) << endl;
FC_HWPRAM.GAMZ = asDouble(value);
}
/// @todo For some reason the -1 C-Fortran array offset is wrong for RMASS: wrong real declaration in common block?
else if (name == "RMASS(1)") {
getLog() << Log::INFO << "Setting down mass (RMASS(1)) = " << asDouble(value) << endl;
FC_HWPROP.RMASS[1] = asDouble(value);
} else if (name == "RMASS(2)") {
getLog() << Log::INFO << "Setting up mass (RMASS(2)) = " << asDouble(value) << endl;
FC_HWPROP.RMASS[2] = asDouble(value);
} else if (name == "RMASS(3)") {
getLog() << Log::INFO << "Setting strange mass (RMASS(3)) = " << asDouble(value) << endl;
FC_HWPROP.RMASS[3] = asDouble(value);
} else if (name == "RMASS(4)") {
getLog() << Log::INFO << "Setting charm mass (RMASS(4)) = " << asDouble(value) << endl;
FC_HWPROP.RMASS[4] = asDouble(value);
} else if (name == "RMASS(5)") {
getLog() << Log::INFO << "Setting bottom mass (RMASS(5)) = " << asDouble(value) << endl;
FC_HWPROP.RMASS[5] = asDouble(value);
} else if (name == "RMASS(6)") {
getLog() << Log::INFO << "Setting top mass (RMASS(6)) = " << asDouble(value) << endl;
FC_HWPROP.RMASS[6] = asDouble(value);
} else if (name == "RMASS(198)") {
getLog() << Log::INFO << "Setting W+ mass (RMASS(198)) = " << asDouble(value) << endl;
FC_HWPROP.RMASS[198] = asDouble(value);
} else if (name == "RMASS(199)") {
getLog() << Log::INFO << "Setting W- mass (RMASS(199)) = " << asDouble(value) << endl;
FC_HWPROP.RMASS[199] = asDouble(value);
} else if (name == "RMASS(200)") {
getLog() << Log::INFO << "Setting Z0 mass (RMASS(200)) = " << asDouble(value) << endl;
FC_HWPROP.RMASS[200] = asDouble(value);
} //...
// Booleans (done as ints in Fortran)
else if (name == "GENSOF") {
getLog() << Log::INFO << "Setting ... (GENSOF) = " << asInt(value) << endl;
FC_HWEVNT.GENSOF = asInt(value);
} else if (name == "AZSOFT") {
getLog() << Log::INFO << "Setting use of soft gluon azimuthal corellations on/off (AZSOFT) = " << asInt(value) << endl;
FC_HWPRAM.AZSOFT = asInt(value);
} else if (name == "CLRECO") {
getLog() << Log::INFO << "Setting inclusion of colour rearrangement on/off (CLRECO) = " << asInt(value) << endl;
FC_HWUCLU.CLRECO = asInt(value);
} else if (name == "AZSPIN") {
getLog() << Log::INFO << "Setting use of gloun spin azimuthal correlations on/off (AZSPIN) = " << asInt(value) << endl;
FC_HWPRAM.AZSPIN = asInt(value);
} else if (name == "ZPRIME") {
getLog() << Log::INFO << "Setting Z' flag (ZPRIME) = " << asInt(value) << endl;
FC_HWPRAM.ZPRIME = asInt(value);
} else if (name == "HARDME") {
getLog() << Log::INFO << "Setting hard matrix element flag (HARDME) = " << asInt(value) << endl;
FC_HWPRAM.HARDME = asInt(value);
} else if (name == "SOFTME") {
getLog() << Log::INFO << "Setting soft matrix element flag (SOFTME) = " << asInt(value) << endl;
FC_HWPRAM.SOFTME = asInt(value);
} else if (name == "NOSPAC") {
getLog() << Log::INFO << "Setting spacelike showers on/off (NOSPAC) = " << asInt(value) << endl;
FC_HWPRAM.NOSPAC = asInt(value);
} else if (name == "PRVTX") {
getLog() << Log::INFO << "Setting inclusion of vertex info in event printout on/off (PRVTX) = " << asInt(value) << endl;
FC_HWPRAM.PRVTX = asInt(value);
} else if (name == "PRNDEC") {
getLog() << Log::INFO << "Setting use of decimal in event printout (PRNDEC) = " << asInt(value) << endl;
FC_HWPRAM.PRNDEC = asInt(value);
} else if (name == "PRNDEF") {
getLog() << Log::INFO << "Setting stdout printout on/off (PRNDEF) = " << asInt(value) << endl;
FC_HWPRAM.PRNDEF = asInt(value);
} else if (name == "PRNTEX") {
getLog() << Log::INFO << "Setting LaTeX output on/off (PRNTEX) = " << asInt(value) << endl;
FC_HWPRAM.PRNTEX = asInt(value);
} else if (name == "PRNWEB") {
getLog() << Log::INFO << "Setting HTML output on/off (PRNWEB) = " << asInt(value) << endl;
FC_HWPRAM.PRNWEB = asInt(value);
} else if (name == "MIXING") {
getLog() << Log::INFO << "Setting neutral B mixing on/off (MIXING) = " << asInt(value) << endl;
FC_HWDIST.MIXING = asInt(value);
} //...
// Error
else {
getLog() << Log::ERROR << "Herwig doesn't have a parameter called " << name << endl;
return FAILURE;
}
return SUCCESS;
}
// Run the generator for one event
void FHerwig::makeEvent(HepMC::GenEvent& evt) {
// Loop until event works
while (true) {
Generator::makeEvent(evt);
FC_HWUINE(); // Initialize event
FC_HWEPRO(); // Generate hard subprocess
FC_HWBGEN(); // Generate parton cascade
FC_HWDHOB(); // Do heavy quark decays
FC_HWCFOR(); // Do cluster formation
FC_HWCDEC(); // Do cluster decays
FC_HWDHAD(); // Do unstable particle decays
FC_HWDHVY(); // Do heavy flavor decays
FC_HWMEVT(); // Add soft underlying event
FC_HWUFNE(); // Finish event
if (FC_HWEVNT.IERROR == 0) break;
}
// Fill event from HEPEVT
fillEvent(evt);
// Increment an event counter (Pythia does not count for itself).
_nevt++;
}
/// Fill a HepMC event
void FHerwig::fillEvent(HepMC::GenEvent& evt) {
HepMC::IO_HERWIG hepevt;
hepevt.fill_next_event(&evt);
evt.set_event_number(_nevt);
#ifdef HEPMC_HAS_CROSS_SECTION
HepMC::GenCrossSection xsec;
const double xsecval = getCrossSection();
const double xsecerr = getCrossSection() / std::sqrt(_nevt);
getLog() << Log::DEBUG << "Writing cross-section = " << xsecval << " +- " << xsecerr << endl;
xsec.set_cross_section(xsecval, xsecerr);
evt.set_cross_section(xsec);
#endif
}
/// Return the beam number (0 or 1) of a particle.
/// Return -1 if not a beam particle
int FHerwig::beamNumber(PdgCode pid){
string pName = _particleNames[pid];
string beamName = "";
for (int i = 0; i < 8; ++i) {
beamName += FC_HWBMCH.PART1[i];
}
if (beamName.compare(pName) == 0) return 0;
for (int i = 0; i < 8; ++i) {
beamName += FC_HWBMCH.PART2[i];
}
if (beamName.compare(pName) == 0) return 1;
return -1;
}
string FHerwig::getPDFSet(PdgCode pid){
const int beamNum = beamNumber(pid);
if (beamNum < 0) {
throw runtime_error("PDFSet unknown for PDG code " + pid);
}
string autString = "";
for (int ii = 0; ii != AUTPDF_LENGTH; ++ii){
autString += FC_HWPRCH.AUTPDF[beamNum][ii];
}
return autString;
}
int FHerwig::getPDFMember(PdgCode pid){
const int beamNum = beamNumber(pid);
if (beamNum < 0) {
throw runtime_error("PDFMember unknown for PDG code "+ pid);
}
const int member = FC_HWPRAM.MODPDF[beamNum];
return member;
}
string FHerwig::getPDFScheme(PdgCode pid)const{
return "LHAPDF";
}
const double FHerwig::getCrossSection(){
_crossSection = FC_HWEVNT.AVWGT * 1000.0;
return _crossSection;
}
/// Tidy up, print out run stats, etc.
void FHerwig::finalize() {
getLog() << Log::INFO << "Finalising..." << endl;
FC_HWEFIN();
}
}
// Class factory
extern "C" {
AGILe::Generator* create() { return new AGILe::FHerwig(); }
void destroy(AGILe::Generator* gen) { delete gen; }
}

File Metadata

Mime Type
text/x-diff
Expires
Sat, May 3, 6:39 AM (1 d, 20 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4983110
Default Alt Text
(22 KB)

Event Timeline