90 #include <TDirectory.h> 91 #include <TPostScript.h> 95 #include <TPaveText.h> 124 using std::ostringstream;
126 using namespace genie;
163 LOG(
"gslp2root",
pFATAL) <<
" No TuneId in RunOption";
177 for (
unsigned int indx_p = 0; indx_p < gOptProbePdgList.
size(); ++indx_p ) {
178 for (
unsigned int indx_t = 0; indx_t < gOptTgtPdgList.
size(); ++indx_t ) {
225 const unsigned int kNMarkers = 5;
226 const unsigned int kNColors = 6;
227 unsigned int markers[kNMarkers] = {20, 28, 29, 27, 3};
228 unsigned int colors [kNColors] = {1, 2, 4, 6, 8, 28};
232 TCanvas *
c =
new TCanvas(
"c",
"",20,20,500,850);
235 TLegend * legend =
new TLegend(0.01,0.01,0.99,0.99);
236 legend->SetFillColor(0);
237 legend->SetBorderSize(0);
242 filename <<
"xsec-splines-" 245 TPostScript *
ps =
new TPostScript(filename.str().c_str(),
kPsType);
249 unsigned int nspl = ilist->size();
257 for(; ilistiter != ilist->end(); ++ilistiter) {
261 <<
"Current interaction: " << interaction->
AsString();
268 <<
"Can't get spline for: " << interaction->
AsString();
273 int icol = TMath::Min( i % kNColors, kNColors-1 );
274 int isty = TMath::Min( i / kNMarkers, kNMarkers-1 );
275 int col = colors[icol];
276 int sty = markers[isty];
279 <<
"color = " << col <<
", marker = " << sty;
283 gr[i]->SetLineColor(col);
284 gr[i]->SetMarkerColor(col);
285 gr[i]->SetMarkerStyle(sty);
286 gr[i]->SetMarkerSize(0.5);
295 <<
"Can't get the cross section sum spline";
301 double XSmax = -9999;
304 for(
int j=0; j<
kNP; j++) {
305 gr[nspl]->GetPoint(j,x,
y);
306 XSmax = TMath::Max(XSmax,
y);
308 XSmin = XSmax/100000.;
312 LOG(
"gspl2root",
pINFO) <<
"Drawing frame: XSec = (" << XSmin <<
", " << XSmax <<
")";
317 TH1F *
h = (TH1F*) c->DrawFrame(
gEmin, XSmin, gEmax, XSmax);
318 for(
unsigned int ispl = 0; ispl <= nspl; ispl++)
if(gr[ispl]) { gr[ispl]->Draw(
"LP"); }
319 h->GetXaxis()->SetTitle(
"Ev (GeV)");
320 h->GetYaxis()->SetTitle(
"#sigma_{nuclear}/Ev (cm^{2}/GeV)");
329 h = (TH1F*) c->DrawFrame(
gEmin, XSmin, gEmax, XSmax);
331 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
335 TString spltitle(interaction->
AsString());
336 spltitle = spltitle.ReplaceAll(
";",1,
" ",1);
337 legend->AddEntry(gr[i], spltitle.Data(),
"LP");
341 legend->SetHeader(
"QEL Cross Sections");
342 gr[nspl]->Draw(
"LP");
343 legend->AddEntry(gr[nspl],
"sum",
"LP");
344 h->GetXaxis()->SetTitle(
"Ev (GeV)");
345 h->GetYaxis()->SetTitle(
"#sigma_{nuclear}/Ev (cm^{2}/GeV)");
358 h = (TH1F*) c->DrawFrame(
gEmin, XSmin, gEmax, XSmax);
361 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
365 TString spltitle(interaction->
AsString());
366 spltitle = spltitle.ReplaceAll(
";",1,
" ",1);
367 legend->AddEntry(gr[i], spltitle.Data(),
"LP");
371 legend->SetHeader(
"RES Cross Sections");
372 gr[nspl]->Draw(
"LP");
373 legend->AddEntry(gr[nspl],
"sum",
"LP");
374 h->GetXaxis()->SetTitle(
"Ev (GeV)");
375 h->GetYaxis()->SetTitle(
"#sigma_{nuclear}/Ev (cm^{2}/GeV)");
388 h = (TH1F*) c->DrawFrame(
gEmin, XSmin, gEmax, XSmax);
391 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
395 TString spltitle(interaction->
AsString());
396 spltitle = spltitle.ReplaceAll(
";",1,
" ",1);
397 legend->AddEntry(gr[i], spltitle.Data(),
"LP");
401 legend->SetHeader(
"DIS Cross Sections");
402 gr[nspl]->Draw(
"LP");
403 legend->AddEntry(gr[nspl],
"sum",
"LP");
404 h->GetXaxis()->SetTitle(
"Ev (GeV)");
405 h->GetYaxis()->SetTitle(
"#sigma_{nuclear}/Ev (cm^{2}/GeV)");
418 h = (TH1F*) c->DrawFrame(
gEmin, XSmin, gEmax, XSmax);
421 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
425 TString spltitle(interaction->
AsString());
426 spltitle = spltitle.ReplaceAll(
";",1,
" ",1);
427 legend->AddEntry(gr[i], spltitle.Data(),
"LP");
431 legend->SetHeader(
"COH Cross Sections");
432 gr[nspl]->Draw(
"LP");
433 legend->AddEntry(gr[nspl],
"sum",
"LP");
434 h->GetXaxis()->SetTitle(
"Ev (GeV)");
435 h->GetYaxis()->SetTitle(
"#sigma_{nuclear}/Ev (cm^{2}/GeV)");
448 h = (TH1F*) c->DrawFrame(
gEmin, XSmin, gEmax, XSmax);
450 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
454 TString spltitle(interaction->
AsString());
455 spltitle = spltitle.ReplaceAll(
";",1,
" ",1);
456 legend->AddEntry(gr[i], spltitle.Data(),
"LP");
460 legend->SetHeader(
"Charm Prod. Cross Sections");
462 legend->AddEntry(gr[nspl],
"sum",
"LP");
463 h->GetXaxis()->SetTitle(
"Ev (GeV)");
464 h->GetYaxis()->SetTitle(
"#sigma_{nuclear}/Ev (cm^{2}/GeV)");
477 h = (TH1F*) c->DrawFrame(
gEmin, XSmin, gEmax, XSmax);
480 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
486 TString spltitle(interaction->
AsString());
487 spltitle = spltitle.ReplaceAll(
";",1,
" ",1);
488 legend->AddEntry(gr[i], spltitle.Data(),
"LP");
492 legend->SetHeader(
"IMD and ve Elastic Cross Sections");
493 gr[nspl]->Draw(
"LP");
494 legend->AddEntry(gr[nspl],
"sum",
"LP");
495 h->GetXaxis()->SetTitle(
"Ev (GeV)");
496 h->GetYaxis()->SetTitle(
"#sigma_{nuclear}/Ev (cm^{2}/GeV)");
511 for(
unsigned int j=0; j<=nspl; j++) {
if(gr[j])
delete gr[j]; }
518 g->SetTitle(
"GENIE cross section graph");
519 g->GetXaxis()->SetTitle(
"Ev (GeV)");
520 g->GetYaxis()->SetTitle(
"#sigma_{nuclear} (10^{-38} cm^{2})");
535 LOG(
"gspl2root",
pWARN) <<
"No Interaction List available" ;
558 dptr << probe_name <<
"_" << tgt_name;
559 ostringstream dtitle;
560 dtitle <<
"Cross sections for: " 565 <<
"Will store graphs in root directory = " << dptr.str();
566 TDirectory * topdir =
567 dynamic_cast<TDirectory *
> (froot->Get(dptr.str().c_str()));
570 <<
"Directory: " << dptr.str() <<
" already exists!! Exiting";
576 topdir = froot->mkdir(dptr.str().c_str(),dtitle.str().c_str());
587 for(; ilistiter != ilist->end(); ++ilistiter) {
600 else if (proc.
IsMEC() ) { title <<
"mec"; }
601 else if (proc.
IsResonant() ) { title <<
"res"; }
607 else if ( xcls.
NPions() > 0 ) title <<
"_pion" ;
608 else if ( xcls.
NRhos() > 0 ) title <<
"_rho" ;
609 else title <<
"_other" ;
617 LOG(
"gspl2root",
pWARN) <<
"Process " << proc
618 <<
" scattering type not recognised: spline not added" ;
621 if (proc.
IsWeakCC()) { title <<
"_cc"; }
622 else if (proc.
IsWeakNC()) { title <<
"_nc"; }
623 else if (proc.
IsWeakMix()) { title <<
"_ccncmix"; }
624 else if (proc.
IsEM() ) { title <<
"_em"; }
627 LOG(
"gspl2root",
pWARN) <<
"Process " << proc
628 <<
" interaction type has not recongnised: spline not added " ;
641 LOG(
"gspl2root",
pWARN) <<
"Can't handle hit 2-nucleon cluster PDG = " << hitnuc;
645 LOG(
"gspl2root",
pWARN) <<
"Can't handle hit nucleon PDG = " << hitnuc;
663 if(insea) { title <<
"sea"; }
664 else { title <<
"val"; }
672 title <<
"_" << resname.substr(3,4) << resname.substr(0,3);
704 else if (
pdg::IsTau(leppdg) ) { title <<
"_tau"; }
705 else if (
pdg::IsPion(leppdg) ) { title <<
"_had"; }
713 TGraph * gr =
new TGraph(kNSplineP, e, xs);
714 gr->SetName(title.str().c_str());
716 gr->SetTitle(spl->GetName());
734 double * xsresccp =
new double[
kNSplineP];
735 double * xsresccn =
new double[
kNSplineP];
736 double * xsresncp =
new double[
kNSplineP];
737 double * xsresncn =
new double[
kNSplineP];
745 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
775 TGraph * gr_resccp =
new TGraph(kNSplineP, e, xsresccp);
776 gr_resccp->SetName(
"res_cc_p");
778 topdir->Add(gr_resccp);
779 TGraph * gr_resccn =
new TGraph(kNSplineP, e, xsresccn);
780 gr_resccn->SetName(
"res_cc_n");
782 topdir->Add(gr_resccn);
783 TGraph * gr_resncp =
new TGraph(kNSplineP, e, xsresncp);
784 gr_resncp->SetName(
"res_nc_p");
786 topdir->Add(gr_resncp);
787 TGraph * gr_resncn =
new TGraph(kNSplineP, e, xsresncn);
788 gr_resncn->SetName(
"res_nc_n");
790 topdir->Add(gr_resncn);
796 double * xsdisccp =
new double[
kNSplineP];
797 double * xsdisccn =
new double[
kNSplineP];
798 double * xsdisncp =
new double[
kNSplineP];
799 double * xsdisncn =
new double[
kNSplineP];
806 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
838 TGraph * gr_disccp =
new TGraph(kNSplineP, e, xsdisccp);
839 gr_disccp->SetName(
"dis_cc_p");
841 topdir->Add(gr_disccp);
842 TGraph * gr_disccn =
new TGraph(kNSplineP, e, xsdisccn);
843 gr_disccn->SetName(
"dis_cc_n");
845 topdir->Add(gr_disccn);
846 TGraph * gr_disncp =
new TGraph(kNSplineP, e, xsdisncp);
847 gr_disncp->SetName(
"dis_nc_p");
849 topdir->Add(gr_disncp);
850 TGraph * gr_disncn =
new TGraph(kNSplineP, e, xsdisncn);
851 gr_disncn->SetName(
"dis_nc_n");
853 topdir->Add(gr_disncn);
865 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
897 TGraph * gr_disccp_charm =
new TGraph(kNSplineP, e, xsdisccp);
898 gr_disccp_charm->SetName(
"dis_cc_p_charm");
900 topdir->Add(gr_disccp_charm);
901 TGraph * gr_disccn_charm =
new TGraph(kNSplineP, e, xsdisccn);
902 gr_disccn_charm->SetName(
"dis_cc_n_charm");
904 topdir->Add(gr_disccn_charm);
905 TGraph * gr_disncp_charm =
new TGraph(kNSplineP, e, xsdisncp);
906 gr_disncp_charm->SetName(
"dis_nc_p_charm");
908 topdir->Add(gr_disncp_charm);
909 TGraph * gr_disncn_charm =
new TGraph(kNSplineP, e, xsdisncn);
910 gr_disncn_charm->SetName(
"dis_nc_n_charm");
912 topdir->Add(gr_disncn_charm);
918 double * xsmeccc =
new double[
kNSplineP];
919 double * xsmecnc =
new double[
kNSplineP];
925 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
943 TGraph * gr_meccc =
new TGraph(kNSplineP, e, xsmeccc);
944 gr_meccc->SetName(
"mec_cc");
946 topdir->Add(gr_meccc);
947 TGraph * gr_mecnc =
new TGraph(kNSplineP, e, xsmecnc);
948 gr_mecnc->SetName(
"mec_nc");
950 topdir->Add(gr_mecnc);
956 double * xscohcc =
new double[
kNSplineP];
957 double * xscohnc =
new double[
kNSplineP];
958 double * xscohtot =
new double[
kNSplineP];
965 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
990 TGraph * gr_cohcc =
new TGraph(kNSplineP, e, xscohcc);
991 gr_cohcc->SetName(
"coh_cc");
993 topdir->Add(gr_cohcc);
995 TGraph * gr_cohnc =
new TGraph(kNSplineP, e, xscohnc);
996 gr_cohnc->SetName(
"coh_nc");
998 topdir->Add(gr_cohnc);
1000 TGraph * gr_cohtot =
new TGraph(kNSplineP, e, xscohtot);
1001 gr_cohtot->SetName(
"coh");
1003 topdir->Add(gr_cohtot);
1008 double * xstotcc =
new double[
kNSplineP];
1009 double * xstotccp =
new double[
kNSplineP];
1010 double * xstotccn =
new double[
kNSplineP];
1011 double * xstotnc =
new double[
kNSplineP];
1012 double * xstotncp =
new double[
kNSplineP];
1013 double * xstotncn =
new double[
kNSplineP];
1022 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
1068 TGraph * gr_totcc =
new TGraph(kNSplineP, e, xstotcc);
1069 gr_totcc->SetName(
"tot_cc");
1071 topdir->Add(gr_totcc);
1072 TGraph * gr_totccp =
new TGraph(kNSplineP, e, xstotccp);
1073 gr_totccp->SetName(
"tot_cc_p");
1075 topdir->Add(gr_totccp);
1076 TGraph * gr_totccn =
new TGraph(kNSplineP, e, xstotccn);
1077 gr_totccn->SetName(
"tot_cc_n");
1079 topdir->Add(gr_totccn);
1080 TGraph * gr_totnc =
new TGraph(kNSplineP, e, xstotnc);
1081 gr_totnc->SetName(
"tot_nc");
1083 topdir->Add(gr_totnc);
1084 TGraph * gr_totncp =
new TGraph(kNSplineP, e, xstotncp);
1085 gr_totncp->SetName(
"tot_nc_p");
1087 topdir->Add(gr_totncp);
1088 TGraph * gr_totncn =
new TGraph(kNSplineP, e, xstotncn);
1089 gr_totncn->SetName(
"tot_nc_n");
1091 topdir->Add(gr_totncn);
1122 if(is_charged_lepton) {
1128 double * xsresemp =
new double[
kNSplineP];
1129 double * xsresemn =
new double[
kNSplineP];
1135 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
1155 TGraph * gr_resemp =
new TGraph(kNSplineP, e, xsresemp);
1156 gr_resemp->SetName(
"res_em_p");
1158 topdir->Add(gr_resemp);
1159 TGraph * gr_resemn =
new TGraph(kNSplineP, e, xsresemn);
1160 gr_resemn->SetName(
"res_em_n");
1162 topdir->Add(gr_resemn);
1168 double * xsdisemp =
new double[
kNSplineP];
1169 double * xsdisemn =
new double[
kNSplineP];
1174 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
1196 TGraph * gr_disemp =
new TGraph(kNSplineP, e, xsdisemp);
1197 gr_disemp->SetName(
"dis_em_p");
1199 topdir->Add(gr_disemp);
1200 TGraph * gr_disemn =
new TGraph(kNSplineP, e, xsdisemn);
1201 gr_disemn->SetName(
"dis_em_n");
1203 topdir->Add(gr_disemn);
1213 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
1235 TGraph * gr_disemp_charm =
new TGraph(kNSplineP, e, xsdisemp);
1236 gr_disemp_charm->SetName(
"dis_em_p_charm");
1238 topdir->Add(gr_disemp_charm);
1239 TGraph * gr_disemn_charm =
new TGraph(kNSplineP, e, xsdisemn);
1240 gr_disemn_charm->SetName(
"dis_em_n_charm");
1242 topdir->Add(gr_disemn_charm);
1247 double * xstotem =
new double[
kNSplineP];
1248 double * xstotemp =
new double[
kNSplineP];
1249 double * xstotemn =
new double[
kNSplineP];
1255 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
1263 bool isem = proc.
IsEM();
1284 TGraph * gr_totem =
new TGraph(kNSplineP, e, xstotem);
1285 gr_totem->SetName(
"tot_em");
1287 topdir->Add(gr_totem);
1288 TGraph * gr_totemp =
new TGraph(kNSplineP, e, xstotemp);
1289 gr_totemp->SetName(
"tot_em_p");
1291 topdir->Add(gr_totemp);
1292 TGraph * gr_totemn =
new TGraph(kNSplineP, e, xstotemn);
1293 gr_totemn->SetName(
"tot_em_n");
1295 topdir->Add(gr_totemn);
1358 LOG(
"gspl2root",
pINFO) <<
"Parsing command line arguments";
1369 LOG(
"gspl2root",
pINFO) <<
"Reading input XML filename";
1372 LOG(
"gspl2root",
pFATAL) <<
"Unspecified input XML file!";
1379 LOG(
"gspl2root",
pINFO) <<
"Reading probe PDG code";
1383 <<
"Unspecified probe PDG code - Exiting";
1390 LOG(
"gspl2root",
pINFO) <<
"Reading target PDG code";
1394 <<
"Unspecified target PDG code - Exiting";
1401 LOG(
"gspl2root",
pINFO) <<
"Reading neutrino energy";
1404 if(nue.find(
",") != string::npos) {
1407 assert(nurange.size() == 2);
1408 gEmin = atof(nurange[0].c_str());
1409 gEmax = atof(nurange[1].c_str());
1413 gEmax = atof(nue.c_str());
1415 <<
"Unspecified Emin - Setting to " <<
gEmin <<
" GeV as per configuration";
1422 <<
"Unspecified Emin,Emax - Setting to " <<
gEmin <<
",100 GeV ";
1429 LOG(
"gspl2root",
pINFO) <<
"Reading output ROOT filename";
1433 <<
"Unspecified output ROOT file. Using default: gxsec.root";
1446 LOG(
"gspl2root",
pINFO) <<
"Command line arguments:";
1459 <<
"\n\n" <<
"Syntax:" <<
"\n" 1460 <<
" gspl2root -f xml_file -p probe_pdg -t target_pdg" 1461 <<
" [-e emin,emax] [-o output_root_file] [-w] [-l]\n" 1462 <<
" [--message-thresholds xml_file]\n";
1472 for(iter = isvec.begin(); iter != isvec.end(); ++iter) {
bool IsResonant(void) const
void CreateXSecSumSpline(int nk, double Emin, double Emax, bool inlogE=true)
bool IsFinalLeptonEvent(void) const
bool IsWeakMix(void) const
bool HitSeaQrk(void) const
bool IsWeakCC(void) const
TGraph * GetAsTGraph(int np=500, bool xscaling=false, bool inlog=false, double fx=1., double fy=1.) const
bool IsFinalQuarkEvent(void) const
int FinalLeptonPdg(void) const
string ArgAsString(char opt)
THE MAIN GENIE PROJECT NAMESPACE
static constexpr double g
int HitNucPdg(void) const
bool IsDarkNeutralCurrent(void) const
int HitQrkPdg(void) const
bool IsInverseMuDecay(void) const
void ReadFromCommandLine(int argc, char **argv)
bool IsQuasiElastic(void) const
void FormatXSecGraph(TGraph *g)
A numeric analysis tool class for interpolating 1-D functions.
int CharmHadronPdg(void) const
bool IsStrangeEvent(void) const
ChannelGroupService::Name Name
bool IsChargedLepton(int pdgc)
bool IsDiffractive(void) const
bool IsCoherentProduction(void) const
bool IsIMDAnnihilation(void) const
const Spline * XSecSumSpline(void) const
bool IsAntiSQuark(int pdgc)
static XSecSplineList * Instance()
PDGCodeList gOptProbePdgList
double Evaluate(double x) const
enum genie::EResonance Resonance_t
string AsString(void) const
bool IsAntiDQuark(int pdgc)
Contains minimal information for tagging exclusive processes.
bool IsCharmEvent(void) const
bool exists(std::string path)
int NSingleGammas(void) const
Summary information for an interaction.
bool IsWeakNC(void) const
int StrangeHadronPdg(void) const
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
bool IsCoherentElastic(void) const
void SetEventGeneratorList(string listname)
bool IsNuElectronElastic(void) const
const InteractionList * Interactions(void) const
static constexpr double cm2
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
bool IsAntiTQuark(int pdgc)
bool IsAntiBQuark(int pdgc)
GENIE Event Generation Driver. A minimalist user interface object for generating neutrino interaction...
static constexpr double ps
GEVGDriver GetEventGenDriver(void)
Resonance_t Resonance(void) const
void BuildTune()
build tune and inform XSecSplineList
void SaveGraphsToRootFile(void)
int FinalQuarkPdg(void) const
bool IsNeutralLepton(int pdgc)
bool IsDeepInelastic(void) const
bool Is2NucleonCluster(int pdgc)
PDGCodeList GetPDGCodeListFromString(std::string s)
string FilterString(string filt, string input)
bool IsInclusiveStrange(void) const
int main(int argc, char **argv)
static PDGLibrary * Instance(void)
static RunOpt * Instance(void)
vector< string > Split(string input, string delim)
const Spline * XSecSpline(const Interaction *interaction) const
Singleton class to load & serve a TDatabasePDG.
bool HitNucIsSet(void) const
bool HitQrkIsSet(void) const
A registry. Provides the container for algorithm configuration parameters.
bool IsAntiCQuark(int pdgc)
const XclsTag & ExclTag(void) const
bool IsInclusiveCharm(void) const
void Configure(int nu_pdgc, int Z, int A)
A vector of Interaction objects.
const InitialState & InitState(void) const
const char * AsString(Resonance_t res)
resonance id -> string
A vector of EventGeneratorI objects.
const ProcessInfo & ProcInfo(void) const
void CreateSplines(int nknots=-1, double emax=-1, bool inLogE=true)
void MesgThresholds(string inpfile)
void GetCommandLineArgs(int argc, char **argv)
TParticlePDG * Find(int pdgc, bool must_exist=true)
void SaveNtupleToRootFile(void)
Command line argument parser.
const Target & Tgt(void) const
enum genie::EXmlParseStatus XmlParserStatus_t
PDGCodeList gOptTgtPdgList
bool IsGlashowResonance(void) const
List of cross section vs energy splines.
double GetDouble(xmlDocPtr xml_doc, string node_path)
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
XmlParserStatus_t LoadFromXml(const string &filename, bool keep=false)
bool OptionExists(char opt)
was option set?
Root of GENIE utility namespaces.
bool IsElectron(int pdgc)
void push_back(int pdg_code)
static AlgConfigPool * Instance()
bool IsAntiUQuark(int pdgc)
Initial State information.