Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F10881646
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
22 KB
Subscribers
None
View Options
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
Details
Attached
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)
Attached To
rAGILESVN agilesvn
Event Timeline
Log In to Comment