90 #include <TDirectory.h>
91 #include <TPostScript.h>
95 #include <TPaveText.h>
124 using std::ostringstream;
126 using namespace genie;
127 using namespace genie::utils;
158 int main(
int argc,
char ** argv)
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);
241 ostringstream filename;
242 filename <<
"xsec-splines-"
245 TPostScript *
ps =
new TPostScript(filename.str().c_str(),
kPsType);
249 unsigned int nspl = ilist->size();
255 InteractionList::const_iterator ilistiter = ilist->begin();
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());
585 InteractionList::const_iterator ilistiter = ilist->begin();
587 for(; ilistiter != ilist->end(); ++ilistiter) {
600 else if (proc.
IsMEC() ) { title <<
"mec"; }
604 title <<
"_single_pion" ;
611 else if ( xcls.
NPions() > 0 ) title <<
"_pion" ;
612 else if ( xcls.
NRhos() > 0 ) title <<
"_rho" ;
613 else title <<
"_other" ;
623 LOG(
"gspl2root",
pWARN) <<
"Process " << proc
624 <<
" scattering type not recognised: spline not added" ;
627 if (proc.
IsWeakCC()) { title <<
"_cc"; }
628 else if (proc.
IsWeakNC()) { title <<
"_nc"; }
629 else if (proc.
IsWeakMix()) { title <<
"_ccncmix"; }
630 else if (proc.
IsEM() ) { title <<
"_em"; }
633 LOG(
"gspl2root",
pWARN) <<
"Process " << proc
634 <<
" interaction type has not recongnised: spline not added " ;
647 LOG(
"gspl2root",
pWARN) <<
"Can't handle hit 2-nucleon cluster PDG = " << hitnuc;
651 LOG(
"gspl2root",
pWARN) <<
"Can't handle hit nucleon PDG = " << hitnuc;
669 if(insea) { title <<
"sea"; }
670 else { title <<
"val"; }
679 title <<
"_" << resname.substr(3,4) << resname.substr(0,3);
681 else if ( xcls.
NPions() == 1 ) {
693 else if ( xcls.
NPi0() == 1 ) {
697 title <<
'_' << channel ;
730 else if (
pdg::IsTau(leppdg) ) { title <<
"_tau"; }
731 else if (
pdg::IsPion(leppdg) ) { title <<
"_had"; }
739 TGraph * gr =
new TGraph(kNSplineP, e, xs);
740 gr->SetName(title.str().c_str());
742 gr->SetTitle(spl->GetName());
760 double * xsresccp =
new double[
kNSplineP];
761 double * xsresccn =
new double[
kNSplineP];
762 double * xsresncp =
new double[
kNSplineP];
763 double * xsresncn =
new double[
kNSplineP];
771 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
801 TGraph * gr_resccp =
new TGraph(kNSplineP, e, xsresccp);
802 gr_resccp->SetName(
"res_cc_p");
804 topdir->Add(gr_resccp);
805 TGraph * gr_resccn =
new TGraph(kNSplineP, e, xsresccn);
806 gr_resccn->SetName(
"res_cc_n");
808 topdir->Add(gr_resccn);
809 TGraph * gr_resncp =
new TGraph(kNSplineP, e, xsresncp);
810 gr_resncp->SetName(
"res_nc_p");
812 topdir->Add(gr_resncp);
813 TGraph * gr_resncn =
new TGraph(kNSplineP, e, xsresncn);
814 gr_resncn->SetName(
"res_nc_n");
816 topdir->Add(gr_resncn);
822 double * xsdiscc =
new double[
kNSplineP];
823 double * xsdisnc =
new double[
kNSplineP];
824 double * xsdisccp =
new double[
kNSplineP];
825 double * xsdisccn =
new double[
kNSplineP];
826 double * xsdisncp =
new double[
kNSplineP];
827 double * xsdisncn =
new double[
kNSplineP];
836 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
872 TGraph * gr_discc =
new TGraph(kNSplineP, e, xsdiscc);
873 gr_discc->SetName(
"dis_cc");
875 topdir->Add(gr_discc);
876 TGraph * gr_disnc =
new TGraph(kNSplineP, e, xsdisnc);
877 gr_disnc->SetName(
"dis_nc");
879 topdir->Add(gr_disnc);
880 TGraph * gr_disccp =
new TGraph(kNSplineP, e, xsdisccp);
881 gr_disccp->SetName(
"dis_cc_p");
883 topdir->Add(gr_disccp);
884 TGraph * gr_disccn =
new TGraph(kNSplineP, e, xsdisccn);
885 gr_disccn->SetName(
"dis_cc_n");
887 topdir->Add(gr_disccn);
888 TGraph * gr_disncp =
new TGraph(kNSplineP, e, xsdisncp);
889 gr_disncp->SetName(
"dis_nc_p");
891 topdir->Add(gr_disncp);
892 TGraph * gr_disncn =
new TGraph(kNSplineP, e, xsdisncn);
893 gr_disncn->SetName(
"dis_nc_n");
895 topdir->Add(gr_disncn);
909 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
945 TGraph * gr_discc_charm =
new TGraph(kNSplineP, e, xsdiscc);
946 gr_discc_charm->SetName(
"dis_cc_charm");
948 topdir->Add(gr_discc_charm);
949 TGraph * gr_disnc_charm =
new TGraph(kNSplineP, e, xsdisnc);
950 gr_disnc_charm->SetName(
"dis_nc_charm");
952 topdir->Add(gr_disnc_charm);
953 TGraph * gr_disccp_charm =
new TGraph(kNSplineP, e, xsdisccp);
954 gr_disccp_charm->SetName(
"dis_cc_p_charm");
956 topdir->Add(gr_disccp_charm);
957 TGraph * gr_disccn_charm =
new TGraph(kNSplineP, e, xsdisccn);
958 gr_disccn_charm->SetName(
"dis_cc_n_charm");
960 topdir->Add(gr_disccn_charm);
961 TGraph * gr_disncp_charm =
new TGraph(kNSplineP, e, xsdisncp);
962 gr_disncp_charm->SetName(
"dis_nc_p_charm");
964 topdir->Add(gr_disncp_charm);
965 TGraph * gr_disncn_charm =
new TGraph(kNSplineP, e, xsdisncn);
966 gr_disncn_charm->SetName(
"dis_nc_n_charm");
968 topdir->Add(gr_disncn_charm);
974 double * xsmeccc =
new double[
kNSplineP];
975 double * xsmecnc =
new double[
kNSplineP];
981 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
999 TGraph * gr_meccc =
new TGraph(kNSplineP, e, xsmeccc);
1000 gr_meccc->SetName(
"mec_cc");
1002 topdir->Add(gr_meccc);
1003 TGraph * gr_mecnc =
new TGraph(kNSplineP, e, xsmecnc);
1004 gr_mecnc->SetName(
"mec_nc");
1006 topdir->Add(gr_mecnc);
1012 double * xscohcc =
new double[
kNSplineP];
1013 double * xscohnc =
new double[
kNSplineP];
1014 double * xscohtot =
new double[
kNSplineP];
1021 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
1046 TGraph * gr_cohcc =
new TGraph(kNSplineP, e, xscohcc);
1047 gr_cohcc->SetName(
"coh_cc");
1049 topdir->Add(gr_cohcc);
1051 TGraph * gr_cohnc =
new TGraph(kNSplineP, e, xscohnc);
1052 gr_cohnc->SetName(
"coh_nc");
1054 topdir->Add(gr_cohnc);
1056 TGraph * gr_cohtot =
new TGraph(kNSplineP, e, xscohtot);
1057 gr_cohtot->SetName(
"coh");
1059 topdir->Add(gr_cohtot);
1065 double * xsglrescc =
new double[
kNSplineP];
1066 double * xsglresnc =
new double[
kNSplineP];
1067 double * xsphrescc =
new double[
kNSplineP];
1073 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
1096 TGraph * gr_glrescc =
new TGraph(kNSplineP, e, xsglrescc);
1097 gr_glrescc->SetName(
"glres_cc");
1099 topdir->Add(gr_glrescc);
1100 TGraph * gr_glresnc =
new TGraph(kNSplineP, e, xsglresnc);
1101 gr_glresnc->SetName(
"glres_nc");
1103 topdir->Add(gr_glresnc);
1104 TGraph * gr_phrescc =
new TGraph(kNSplineP, e, xsphrescc);
1105 gr_phrescc->SetName(
"phres_cc");
1107 topdir->Add(gr_phrescc);
1113 double * xstotcc =
new double[
kNSplineP];
1114 double * xstotccp =
new double[
kNSplineP];
1115 double * xstotccn =
new double[
kNSplineP];
1116 double * xstotnc =
new double[
kNSplineP];
1117 double * xstotncp =
new double[
kNSplineP];
1118 double * xstotncn =
new double[
kNSplineP];
1127 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
1173 TGraph * gr_totcc =
new TGraph(kNSplineP, e, xstotcc);
1174 gr_totcc->SetName(
"tot_cc");
1176 topdir->Add(gr_totcc);
1177 TGraph * gr_totccp =
new TGraph(kNSplineP, e, xstotccp);
1178 gr_totccp->SetName(
"tot_cc_p");
1180 topdir->Add(gr_totccp);
1181 TGraph * gr_totccn =
new TGraph(kNSplineP, e, xstotccn);
1182 gr_totccn->SetName(
"tot_cc_n");
1184 topdir->Add(gr_totccn);
1185 TGraph * gr_totnc =
new TGraph(kNSplineP, e, xstotnc);
1186 gr_totnc->SetName(
"tot_nc");
1188 topdir->Add(gr_totnc);
1189 TGraph * gr_totncp =
new TGraph(kNSplineP, e, xstotncp);
1190 gr_totncp->SetName(
"tot_nc_p");
1192 topdir->Add(gr_totncp);
1193 TGraph * gr_totncn =
new TGraph(kNSplineP, e, xstotncn);
1194 gr_totncn->SetName(
"tot_nc_n");
1196 topdir->Add(gr_totncn);
1213 delete [] xsglrescc;
1214 delete [] xsglresnc;
1215 delete [] xsphrescc;
1232 if(is_charged_lepton) {
1238 double * xsresemp =
new double[
kNSplineP];
1239 double * xsresemn =
new double[
kNSplineP];
1245 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
1265 TGraph * gr_resemp =
new TGraph(kNSplineP, e, xsresemp);
1266 gr_resemp->SetName(
"res_em_p");
1268 topdir->Add(gr_resemp);
1269 TGraph * gr_resemn =
new TGraph(kNSplineP, e, xsresemn);
1270 gr_resemn->SetName(
"res_em_n");
1272 topdir->Add(gr_resemn);
1278 double * xsdisemp =
new double[
kNSplineP];
1279 double * xsdisemn =
new double[
kNSplineP];
1284 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
1306 TGraph * gr_disemp =
new TGraph(kNSplineP, e, xsdisemp);
1307 gr_disemp->SetName(
"dis_em_p");
1309 topdir->Add(gr_disemp);
1310 TGraph * gr_disemn =
new TGraph(kNSplineP, e, xsdisemn);
1311 gr_disemn->SetName(
"dis_em_n");
1313 topdir->Add(gr_disemn);
1323 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
1345 TGraph * gr_disemp_charm =
new TGraph(kNSplineP, e, xsdisemp);
1346 gr_disemp_charm->SetName(
"dis_em_p_charm");
1348 topdir->Add(gr_disemp_charm);
1349 TGraph * gr_disemn_charm =
new TGraph(kNSplineP, e, xsdisemn);
1350 gr_disemn_charm->SetName(
"dis_em_n_charm");
1352 topdir->Add(gr_disemn_charm);
1357 double * xstotem =
new double[
kNSplineP];
1358 double * xstotemp =
new double[
kNSplineP];
1359 double * xstotemn =
new double[
kNSplineP];
1365 for(ilistiter = ilist->begin(); ilistiter != ilist->end(); ++ilistiter) {
1373 bool isem = proc.
IsEM();
1394 TGraph * gr_totem =
new TGraph(kNSplineP, e, xstotem);
1395 gr_totem->SetName(
"tot_em");
1397 topdir->Add(gr_totem);
1398 TGraph * gr_totemp =
new TGraph(kNSplineP, e, xstotemp);
1399 gr_totemp->SetName(
"tot_em_p");
1401 topdir->Add(gr_totemp);
1402 TGraph * gr_totemn =
new TGraph(kNSplineP, e, xstotemn);
1403 gr_totemn->SetName(
"tot_em_n");
1405 topdir->Add(gr_totemn);
1468 LOG(
"gspl2root",
pINFO) <<
"Parsing command line arguments";
1478 if( parser.OptionExists(
'f') ) {
1479 LOG(
"gspl2root",
pINFO) <<
"Reading input XML filename";
1482 LOG(
"gspl2root",
pFATAL) <<
"Unspecified input XML file!";
1488 if( parser.OptionExists(
'p') ) {
1489 LOG(
"gspl2root",
pINFO) <<
"Reading probe PDG code";
1493 <<
"Unspecified probe PDG code - Exiting";
1499 if( parser.OptionExists(
't') ) {
1500 LOG(
"gspl2root",
pINFO) <<
"Reading target PDG code";
1504 <<
"Unspecified target PDG code - Exiting";
1510 if( parser.OptionExists(
'e') ) {
1511 LOG(
"gspl2root",
pINFO) <<
"Reading neutrino energy";
1512 string nue = parser.ArgAsString(
'e');
1514 if(nue.find(
",") != string::npos) {
1517 assert(nurange.size() == 2);
1518 gEmin = atof(nurange[0].c_str());
1519 gEmax = atof(nurange[1].c_str());
1522 gEmin = val_reg ->
GetDouble(
"GVLD-Emin" ) ;
1523 gEmax = atof(nue.c_str());
1525 <<
"Unspecified Emin - Setting to " << gEmin <<
" GeV as per configuration";
1529 gEmin = val_reg ->
GetDouble(
"GVLD-Emin" ) ;
1532 <<
"Unspecified Emin,Emax - Setting to " << gEmin <<
",100 GeV ";
1535 assert(gEmin<
gEmax);
1538 if( parser.OptionExists(
'o') ) {
1539 LOG(
"gspl2root",
pINFO) <<
"Reading output ROOT filename";
1543 <<
"Unspecified output ROOT file. Using default: gxsec.root";
1553 gInlogE = parser.OptionExists(
'l');
1556 LOG(
"gspl2root",
pINFO) <<
"Command line arguments:";
1569 <<
"\n\n" <<
"Syntax:" <<
"\n"
1570 <<
" gspl2root -f xml_file -p probe_pdg -t target_pdg"
1571 <<
" [-e emin,emax] [-o output_root_file] [-w] [-l]\n"
1572 <<
" [--message-thresholds xml_file]\n";
1581 vector<string>::const_iterator iter;
1582 for(iter = isvec.begin(); iter != isvec.end(); ++iter) {
bool IsResonant(void) const
bool IsPhotonResonance(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
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)
bool KnownResonance(void) const
A numeric analysis tool class for interpolating 1-D functions.
int CharmHadronPdg(void) const
bool IsStrangeEvent(void) const
static constexpr double s
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)
int main(int argc, char **argv)
Contains minimal information for tagging exclusive processes.
bool IsCharmEvent(void) const
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
bool IsPhotonCoherent(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
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)
TParticlePDG * Find(int pdgc, bool must_exist=true)
void SaveNtupleToRootFile(void)
Command line argument parser.
const Target & Tgt(void) const
void GetCommandLineArgs(int argc, char **argv)
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 IsElectron(int pdgc)
void push_back(int pdg_code)
static AlgConfigPool * Instance()
bool IsAntiUQuark(int pdgc)
Initial State information.