20 #include "TLorentzVector.h" 25 #include "Conventions/GVersion.h" 27 #include "EVGCore/EventRecord.h" 29 #include "PDG/PDGCodes.h" 30 #include "PDG/PDGLibrary.h" 31 #include "GENIE/Utils/RunOpt.h" 40 #include "PDG/PDGCodeList.h" 43 #include "EVGDrivers/GFluxI.h" 44 #include "FluxDrivers/GFluxBlender.h" 45 #include "FluxDrivers/GNuMIFlux.h" 46 #include "FluxDrivers/GSimpleNtpFlux.h" 49 #include "GENIE/Framework/Conventions/GVersion.h" 50 #include "GENIE/Framework/Conventions/Units.h" 51 #include "GENIE/Framework/Conventions/Constants.h" 52 #include "GENIE/Framework/ParticleData/PDGCodes.h" 53 #include "GENIE/Framework/ParticleData/PDGCodeList.h" 54 #include "GENIE/Framework/ParticleData/PDGLibrary.h" 55 #include "GENIE/Framework/GHEP/GHepUtils.h" 56 #include "GENIE/Framework/GHEP/GHepParticle.h" 57 #include "GENIE/Framework/Utils/RunOpt.h" 58 #include "GENIE/Framework/Utils/XSecSplineList.h" 60 #include "GENIE/Framework/Interaction/InitialState.h" 61 #include "GENIE/Framework/Interaction/Interaction.h" 62 #include "GENIE/Framework/Interaction/Kinematics.h" 63 #include "GENIE/Framework/Interaction/KPhaseSpace.h" 64 #include "GENIE/Framework/Interaction/ProcessInfo.h" 65 #include "GENIE/Framework/Interaction/XclsTag.h" 67 #include "GENIE/Framework/EventGen/EventRecord.h" 68 #include "GENIE/Framework/EventGen/GFluxI.h" 69 #include "GENIE/Tools/Flux/GFluxBlender.h" 70 #include "GENIE/Tools/Flux/GNuMIFlux.h" 71 #include "GENIE/Tools/Flux/GSimpleNtpFlux.h" 89 #include "dk2nu/tree/dk2nu.h" 90 #include "dk2nu/tree/NuChoice.h" 91 #include "dk2nu/tree/dkmeta.h" 92 #include "dk2nu/genie/GDk2NuFlux.h" 95 #include "cetlib_except/exception.h" 103 if ( s.find(
'$') != 0 )
return s;
107 char rmchars[] =
"$(){} ";
108 for (
unsigned int i = 0; i < strlen(rmchars); ++i) {
112 sEnvVar.erase(
std::remove(sEnvVar.begin(), sEnvVar.end(),
113 rmchars[i]), sEnvVar.end() );
115 const char* charEnvValue =
std::getenv(sEnvVar.c_str());
116 if ( ! charEnvValue ) {
120 <<
" can't resolve " << s <<
" via getenv(\"" << sEnvVar <<
"\")";
134 mf::LogInfo(
"GENIE2ART") <<
"GENIE_PRE_R3 ignore setting tune name: \"" 142 if ( expEvtGenListName !=
"" ) {
147 if ( expTuneName != tunename ) {
148 mf::LogInfo(
"GENIE2ART") <<
"TuneName started as '" << tunename <<
"' " 149 <<
" converted to " << expTuneName;
155 if ( current_tune.empty() ) {
157 mf::LogInfo(
"GENIE2ART") <<
"Configuring GENIE tune \"" 158 << expTuneName <<
'\"';
165 if ( expTuneName != current_tune) {
166 throw cet::exception(
"TuneNameMismatch") <<
"Requested GENIE tune \"" 167 << expTuneName <<
"\" does not match previously built tune \"" 168 << current_tune <<
'\"';
184 TLorentzVector vtxOffset(0,0,0,spillTime);
189 TLorentzVector &vtxOffset,
207 TIter partitr(record);
215 while( (part = dynamic_cast<genie::GHepParticle *>(partitr.Next())) ){
223 double vtx[4] = {part->
Vx(), part->
Vy(), part->
Vz(), part->
Vt()};
239 vtx[0] = 100.*(part->
Vx()*1.e-15 + vertex->X() + vtxOffset.X());
240 vtx[1] = 100.*(part->
Vy()*1.e-15 + vertex->Y() + vtxOffset.Y());
241 vtx[2] = 100.*(part->
Vz()*1.e-15 + vertex->Z() + vtxOffset.Z());
242 vtx[3] = part->
Vt() + vtxOffset.T();
244 TLorentzVector
pos(vtx[0], vtx[1], vtx[2], vtx[3]);
245 TLorentzVector mom(part->
Px(), part->
Py(), part->
Pz(), part->
E());
246 tpart.AddTrajectoryPoint(pos,mom);
250 tpart.SetPolarization(polz);
267 else if (procInfo.IsCoherent() ) mode =
simb::kCoh;
292 TLorentzVector pdummy(0, 0, 0, 0);
294 const TLorentzVector v4_null;
297 const TLorentzVector & k1 = ( probe ? *(probe->
P4()) : v4_null );
298 const TLorentzVector & k2 = ( finallepton ? *(finallepton->
P4()) : v4_null );
304 TLorentzVector q = k1-k2;
305 double Q2 = -1 * q.M2();
306 double v = (hitnucl) ? q.Energy() : -1;
307 double x = (hitnucl) ? 0.5*Q2/(M*v) : -1;
308 double y = (hitnucl) ? v/k1.Energy() : -1;
309 double W2 = (hitnucl) ? M*M + 2*M*v - Q2 : -1;
310 double W = (hitnucl) ? std::sqrt(W2) : -1;
317 TLorentzVector q = k1-k2;
319 double Q2 = -1 * q.M2();
320 double v = q.Energy();
321 double y = v/k1.Energy();
325 if ( hitnucl || procInfo.IsCoherent() ) {
332 W2 = M*M + 2*M*v -
Q2;
368 TLorentzVector *erVtx = record->
Vertex();
369 vtx.SetXYZT(erVtx->X(), erVtx->Y(), erVtx->Z(), erVtx->T() );
391 for (
int idx = 0; idx < record->GetEntries(); idx++)
398 int pdg = particle->
Pdg();
415 truth.
fgQ2 = kine.
Q2(
true);
416 truth.
fgq2 = kine.
q2(
true);
417 truth.
fgW = kine.
W(
true);
421 truth.
fgT = kine.
t(
true);
423 truth.
fgX = kine.
x(
true);
424 truth.
fgY = kine.
y(
true);
457 bool useFirstTrajPosition)
469 TLorentzVector vtx = gtruth.
fVertex;
475 for (
int i = 0; i < mctruth.
NParticles(); i++) {
480 int gmmo = mcpart.
Mother();
520 double gmpx = mcpart.
Px(0);
521 double gmpy = mcpart.
Py(0);
522 double gmpz = mcpart.
Pz(0);
523 double gme = mcpart.
E(0);
525 double gmvx = mcpart.
Gvx();
526 double gmvy = mcpart.
Gvy();
527 double gmvz = mcpart.
Gvz();
528 double gmvt = mcpart.
Gvt();
529 bool GvtxFunky =
false;
530 if ( gmvx == 0 && gmvy == 0 &&
531 gmvz == 0 && gmvt == 0 ) GvtxFunky =
true;
541 if (nmsg == 0 ) andOut =
"... last of such messages";
543 <<
"RetrieveGHEP(simb::MCTruth,simb::Gtruth) ... Gv[xyzt] all " 544 << gmvx <<
" for index " << i
545 <<
"; probably not filled ..." 550 const TLorentzVector mcpartTrjPos =
551 ( useFirstTrajPosition ) ? mcpart.
Position() :
566 gmvx = 1.e15*((mcpartTrjPos.X()*1.e-2) - vtx.X());
567 gmvy = 1.e15*((mcpartTrjPos.Y()*1.e-2) - vtx.Y());
568 gmvz = 1.e15*((mcpartTrjPos.Z()*1.e-2) - vtx.Z());
569 gmvt = mcpartTrjPos.T() - vtx.T();
571 gmvx = mcpartTrjPos.X();
572 gmvy = mcpartTrjPos.Y();
573 gmvz = mcpartTrjPos.Z();
574 gmvt = mcpartTrjPos.T();
582 gmpx, gmpy, gmpz, gme, gmvx, gmvy, gmvz, gmvt);
585 if (polz.x() !=0 || polz.y() !=0 || polz.z() !=0) {
595 proc_info.
Set(gscty,ginty);
622 const double flagVal = -99999;
623 if ( gtruth.
fgX != flagVal) gkin.
Setx(gtruth.
fgX,
true);
624 if ( gtruth.
fgY != flagVal) gkin.
Sety(gtruth.
fgY,
true);
625 if ( gtruth.
fgT != flagVal) gkin.
Sett(gtruth.
fgT,
true);
626 if ( gtruth.
fgW != flagVal) gkin.
SetW(gtruth.
fgW,
true);
642 int tgtZ = gtruth.
ftgtZ;
643 int tgtA = gtruth.
ftgtA;
650 if ( tgtZ == 0 || tgtA == 0 ) { tgtZ = tgtA = 1; }
651 if ( probe_pdgc == 0 || probe_pdgc == -1 ) { probe_pdgc = 22; }
664 int targetNucleon = nu.
HitNuc();
683 std::unique_ptr<TLorentzVector> p4hitnucleon(hitnucleon->
GetP4());
686 if ( targetNucleon != 0 ) {
688 <<
"evgb::RetrieveGHEP() no hit nucleon position " 689 <<
" but targetNucleon is " << targetNucleon
690 <<
" at " << __FILE__ <<
":" << __LINE__
693 TLorentzVector
dummy(0.,0.,0.,0.);
699 std::unique_ptr<TLorentzVector> p4target(target->
GetP4());
705 if ( ptmp ) Erest = ptmp->Mass();
708 <<
"evgb::RetrieveGHEP() no target nucleus position " 709 <<
" but gtruth.ftgtPDG is " << gtruth.
ftgtPDG 710 <<
" at " << __FILE__ <<
":" << __LINE__
713 TLorentzVector
dummy(0.,0.,0.,Erest);
719 std::unique_ptr<TLorentzVector> p4probe(probe->
GetP4());
724 <<
"evgb::RetrieveGHEP() no probe " 725 <<
" at " << __FILE__ <<
":" << __LINE__
727 TLorentzVector
dummy(0.,0.,0.,0.);
778 genie::flux::GDk2NuFlux* gdk2nu =
779 dynamic_cast<genie::flux::GDk2NuFlux *
>(fdriver);
784 static bool first =
true;
790 <<
" " << __FILE__ <<
":" << __LINE__ <<
"\n" 791 <<
" no FillMCFlux() for this flux driver: " 793 <<
" (typeid.name, use \"c++filt -t\" to demangle)" 826 <<
"either wrong particle codes or units " 827 <<
"from flux object - beware!!";
850 flux.
fvx = nflux->
vx;
851 flux.
fvy = nflux->
vy;
852 flux.
fvz = nflux->
vz;
940 flux.
fvx = nflux_numi->
vx;
941 flux.
fvy = nflux_numi->
vy;
942 flux.
fvz = nflux_numi->
vz;
951 double apppz = nflux_numi->
pppz;
952 if ( TMath::Abs(nflux_numi->
pppz) < 1.0e-30 ) apppz = 1.0e-30;
964 if ( nflux_aux && nflux_meta ) {
967 const std::vector<std::string>& auxdblname = nflux_meta->
auxdblname;
968 const std::vector<std::string>& auxintname = nflux_meta->
auxintname;
969 const std::vector<int>& auxint = nflux_aux->
auxint;
970 const std::vector<double>& auxdbl = nflux_aux->
auxdbl;
972 for (
size_t id=0;
id<auxdblname.size(); ++id) {
973 if (
"muparpx" == auxdblname[
id]) flux.
fmuparpx = auxdbl[id];
974 if (
"muparpy" == auxdblname[
id]) flux.
fmuparpy = auxdbl[id];
975 if (
"muparpz" == auxdblname[
id]) flux.
fmuparpz = auxdbl[id];
976 if (
"mupare" == auxdblname[
id]) flux.
fmupare = auxdbl[id];
977 if (
"necm" == auxdblname[
id]) flux.
fnecm = auxdbl[id];
978 if (
"nimpwt" == auxdblname[
id]) flux.
fnimpwt = auxdbl[id];
979 if (
"fgXYWgt" == auxdblname[
id]) {
983 for (
size_t ii=0; ii<auxintname.size(); ++ii) {
984 if (
"tgen" == auxintname[ii]) flux.
ftgen = auxint[ii];
985 if (
"tgptype" == auxintname[ii]) flux.
ftgptype = auxint[ii];
992 static bool first =
true;
996 << __FILE__ <<
":" << __LINE__
997 <<
" one time dump of GSimple objects\n";
1000 <<
"evgb::FillMCFlux() GSimpleNtpMeta:\n" 1001 << *nflux_meta <<
"\n";
1004 <<
"evgb::FillMCFlux() no GSimpleNtpMeta:\n";
1009 <<
"simb::MCFlux:\n" 1011 <<
"GSimpleNtpFlux:\n";
1012 if ( nflux_entry)
mf::LogDebug(
"GENIE2ART") << *nflux_entry <<
"\n";
1013 else mf::LogDebug(
"GENIE2ART") <<
"no GSimpleNtpEntry\n";
1014 if ( nflux_numi )
mf::LogDebug(
"GENIE2ART") << *nflux_numi <<
"\n";
1015 else mf::LogDebug(
"GENIE2ART") <<
"no GSimpleNtpNuMI\n";
1016 if ( nflux_aux )
mf::LogDebug(
"GENIE2ART") << *nflux_aux <<
"\n";
1017 else mf::LogDebug(
"GENIE2ART") <<
"no GSimpleNtpAux\n";
1077 const bsim::Dk2Nu& dk2nu = gdk2nu->GetDk2Nu();
1078 const bsim::NuChoice& nuchoice = gdk2nu->GetNuChoice();
1081 flux.
fdk2gen = gdk2nu->GetDecayDist();
1084 const bsim::NuChoice* nuchoice,
1091 flux.
frun = dk2nu->job;
1092 flux.
fevtno = dk2nu->potnum;
1097 flux.
fnorig = dk2nu->decay.norig;
1098 flux.
fndecay = dk2nu->decay.ndecay;
1099 flux.
fntype = dk2nu->decay.ntype;
1101 flux.
fptype = dk2nu->decay.ptype;
1103 flux.
fvx = dk2nu->decay.vx;
1104 flux.
fvy = dk2nu->decay.vy;
1105 flux.
fvz = dk2nu->decay.vz;
1106 flux.
fpdpx = dk2nu->decay.pdpx;
1107 flux.
fpdpy = dk2nu->decay.pdpy;
1108 flux.
fpdpz = dk2nu->decay.pdpz;
1110 flux.
fppdxdz = dk2nu->decay.ppdxdz;
1111 flux.
fppdydz = dk2nu->decay.ppdydz;
1112 flux.
fpppz = dk2nu->decay.pppz;
1115 flux.
fmuparpx = dk2nu->decay.muparpx;
1116 flux.
fmuparpy = dk2nu->decay.muparpy;
1117 flux.
fmuparpz = dk2nu->decay.muparpz;
1118 flux.
fmupare = dk2nu->decay.mupare;
1120 flux.
fnecm = dk2nu->decay.necm;
1121 flux.
fnimpwt = dk2nu->decay.nimpwt;
1126 flux.
fppvx = dk2nu->ppvx;
1127 flux.
fppvy = dk2nu->ppvy;
1128 flux.
fppvz = dk2nu->ppvz;
1131 flux.
ftvx = dk2nu->tgtexit.tvx;
1132 flux.
ftvy = dk2nu->tgtexit.tvy;
1133 flux.
ftvz = dk2nu->tgtexit.tvz;
1134 flux.
ftpx = dk2nu->tgtexit.tpx;
1135 flux.
ftpy = dk2nu->tgtexit.tpy;
1136 flux.
ftpz = dk2nu->tgtexit.tpz;
1137 flux.
ftptype = dk2nu->tgtexit.tptype;
1138 flux.
ftgen = dk2nu->tgtexit.tgen;
1145 flux.
fntype = nuchoice->pdgNu;
1146 flux.
fnimpwt = nuchoice->impWgt;
double E(const int i=0) const
int fGint
interaction code
bool IsResonant(void) const
Double_t E
energy in lab frame
Unified ntuple flux format (replaces 2)
unsigned int NumberTrajectoryPoints() const
double W(bool selected=false) const
const TVector3 & Polarization() const
void SetTgtP4(const TLorentzVector &P4)
virtual void SetXSec(double xsec)
const TLorentzVector & Position(const int i=0) const
void SetNPions(int npi_plus, int npi_0, int npi_minus)
int RescatterCode(void) const
virtual GHepParticle * Particle(int position) const
TuneId * Tune(void) const
virtual void SetWeight(double wght)
bool IsWeakMix(void) const
bool HitSeaQrk(void) const
const simb::MCNeutrino & GetNeutrino() const
double Py(const int i=0) const
InteractionType_t InteractionTypeId(void) const
void SetProbeP4(const TLorentzVector &P4)
const TLorentzVector & EndPosition() const
Double_t pdpx
nu parent momentum at time of decay
double E(void) const
Get energy.
static const double kNucleonMass
double Q2(const Interaction *const i)
Full flux simulation ntuple.
void SetOrigin(simb::Origin_t origin)
neutrino electron elastic scatter
virtual Interaction * Summary(void) const
int HitNucPdg(void) const
virtual KinePhaseSpace_t DiffXSecVars(void) const
void SetQ2(double Q2, bool selected=false)
const TLorentzVector * P4(void) const
A GENIE flux driver using a simple ntuple format.
MaybeLogger_< ELseverityLevel::ELsev_info, false > LogInfo
genie::EventRecord * RetrieveGHEP(const simb::MCTruth &truth, const simb::GTruth >ruth, bool useFirstTrajPosition=true)
return genie::EventRecord pointer; callee takes possession
void FillMCFlux(genie::GFluxI *fdriver, simb::MCFlux &mcflux)
void Setq2(double q2, bool selected=false)
int HitQrkPdg(void) const
bool IsInverseMuDecay(void) const
Double_t vx
vertex position of hadron/muon decay
bool IsQuasiElastic(void) const
enum genie::EGHepStatus GHepStatus_t
virtual void SetProbability(double prob)
int fGPhaseSpace
phase space system of DiffXSec
int NuanceReactionCode(const GHepRecord *evrec)
int CharmHadronPdg(void) const
bool IsStrangeEvent(void) const
bool IsElectronScattering(void) const
simb::flux_code_ fFluxType
double Px(const int i=0) const
int fNumNeutron
number of neutrons after reaction, before FSI
void SetHitNucP4(const TLorentzVector &p4)
Generated/set kinematical variables for an event.
void SetHitQrkPdg(int pdgc)
virtual int HitNucleonPosition(void) const
bool IsInverseBetaDecay(void) const
double fXsec
cross section of interaction
virtual double Weight(void) const
double x(bool selected=false) const
const TLorentzVector & HadSystP4(void) const
Functions for transforming GENIE objects into ART objects (and back)
void SetHitNucPosition(double r)
int fNumPiPlus
number of pi pluses after reaction, before FSI
offset to account for adding in Nuance codes to this enum
int fNumPiMinus
number of pi minuses after reaction, before FSI
bool IsDiffractive(void) const
Int_t tptype
parent particle type at target exit
std::vector< Double_t > auxdbl
additional doubles associated w/ entry
double Mass(void) const
Mass that corresponds to the PDG code.
bool IsIMDAnnihilation(void) const
void SetNeutrino(int CCNC, int mode, int interactionType, int target, int nucleon, int quark, double w, double x, double y, double qsqr)
void SetKine(const Kinematics &kine)
MaybeLogger_< ELseverityLevel::ELsev_error, false > LogError
void SetPolarization(double theta, double phi)
static XSecSplineList * Instance()
double fdk2gen
distance from decay to ray origin
enum genie::EKinePhaseSpace KinePhaseSpace_t
enum genie::EResonance Resonance_t
std::vector< Int_t > auxint
additional ints associated w/ entry
double Pz(void) const
Get Pz.
void SetResonance(Resonance_t res)
void Set(ScatteringType_t sc_type, InteractionType_t int_type)
GHepStatus_t Status(void) const
bool fIsStrange
strange production // added version 13
virtual void AttachSummary(Interaction *interaction)
object containing MC flux information
Contains minimal information for tagging exclusive processes.
virtual TLorentzVector * Vertex(void) const
double Px(void) const
Get Px.
void SetCharm(int charm_pdgc=0)
void SetEventGeneratorList(string evgenlist)
virtual GHepParticle * Probe(void) const
double y(bool selected=false) const
bool IsCharmEvent(void) const
double Vt(void) const
Get production time.
int FirstMother(void) const
A GENIE flux driver encapsulating the NuMI neutrino flux. It reads-in the official GNUMI neutrino flu...
const genie::flux::GSimpleNtpEntry * GetCurrentEntry(void)
GSimpleNtpEntry.
int fResNum
resonance number
Some common run-time GENIE options.
Summary information for an interaction.
Double_t pppx
nu parent momentum at production point
int fNumProton
number of protons after reaction, before FSI
const genie::flux::GSimpleNtpMeta * GetCurrentMeta(void)
GSimpleNtpMeta.
const TLorentzVector & HitNucP4(void) const
double q2(bool selected=false) const
double fprobability
interaction probability
bool IsWeakNC(void) const
int StrangeHadronPdg(void) const
const simb::MCParticle & Lepton() const
bool KVSet(KineVar_t kv) const
void SetFSLeptonP4(const TLorentzVector &p4)
bool IsNuElectronElastic(void) const
const GNuMIFluxPassThroughInfo & PassThroughInfo(void)
GNuMIFluxPassThroughInfo.
int fGscatter
neutrino scattering code
std::string ExpandEnvVar(const std::string &s)
void SetStrange(int strange_pdgc=0)
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
bool IsAMNuGamma(void) const
void SetRescatterCode(int code)
std::string getenv(std::string const &name)
int fNumPi0
number of pi0 after reaction, before FSI
TLorentzVector * GetP4(void) const
virtual GHepParticle * FinalStatePrimaryLepton(void) const
QTextStream & flush(QTextStream &s)
const Kinematics & Kine(void) const
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
void Sett(double t, bool selected=false)
bool fIsCharm
did the interaction produce a charmed hadron?
int DecayMode(void) const
Int_t ppmedium
tracking medium where parent was produced
double fweight
event interaction weight (genie internal)
virtual GHepParticle * TargetNucleus(void) const
virtual double DiffXSec(void) const
Double_t tpx
parent particle px at target exit
ScatteringType_t ScatteringTypeId(void) const
Resonance_t Resonance(void) const
void BuildTune()
build tune and inform XSecSplineList
GFluxI * GetFluxGenerator()
access, not ownership
bool PolzIsSet(void) const
void SetDecayMode(int decay_mode)
virtual double Probability(void) const
const simb::MCParticle & GetParticle(int i) const
void GetPolarization(TVector3 &polz)
Generated Event Record. It is a GHepRecord object that can accept / be visited by EventRecordVisitorI...
double GetDecayDist() const
dist (user units) from dk to current pos
bool IsDeepInelastic(void) const
void Setx(double x, bool selected=false)
const genie::flux::GSimpleNtpAux * GetCurrentAux(void)
GSimpleNtpAux.
void SetExclTag(const XclsTag &xcls)
void SetW(double W, bool selected=false)
void FillMCTruth(const genie::EventRecord *grec, double spillTime, simb::MCTruth &mctruth)
void Add(simb::MCParticle const &part)
n.b.: this group is similar but not quite, entirely unlike GENIE ScatteringType convention ...
static PDGLibrary * Instance(void)
void SetNNucleons(int np, int nn)
void SetEventGeneratorListAndTune(const std::string &evtlistname="", const std::string &tunename="${GENIE_XSEC_TUNE}")
static RunOpt * Instance(void)
double Vz(void) const
Get production z.
enum genie::EScatteringType ScatteringType_t
int ftgtPDG
PDG of Target Nucleus, nucleon only if free.
void SetHitNucPdg(int pdgc)
void Sety(double y, bool selected=false)
MaybeLogger_< ELseverityLevel::ELsev_success, false > LogDebug
const XclsTag & ExclTag(void) const
double HitNucPosition(void) const
TLorentzVector * GetTgtP4(RefFrame_t rf=kRfLab) const
virtual GHepParticle * HitNucleon(void) const
Target * TgtPtr(void) const
virtual void SetVertex(double x, double y, double z, double t)
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
TParticlePDG * Find(int pdgc)
TLorentzVector fFShadSystP4
generated final state hadronic system (LAB frame)
int IonPdgCode(int A, int Z)
double Pz(const int i=0) const
void SetHadSystP4(const TLorentzVector &p4)
virtual double XSec(void) const
cet::LibraryManager dummy("noplugin")
string CurrentTune(void) const
virtual void AddParticle(const GHepParticle &p)
const InitialState & InitState(void) const
const ProcessInfo & ProcInfo(void) const
double t(bool selected=false) const
Double_t dist
distance from hadron decay
void FillGTruth(const genie::EventRecord *grec, simb::GTruth >ruth)
double Vy(void) const
Get production y.
double Q2(bool selected=false) const
const Target & Tgt(void) const
const genie::flux::GSimpleNtpNuMI * GetCurrentNuMI(void)
GSimpleNtpNuMI.
Event generator information.
void SetHitSeaQrk(bool tf)
bool IsGlashowResonance(void) const
Event generator information.
enum genie::EInteractionType InteractionType_t
STDHEP-like event record entry that can fit a particle or a nucleus.
double fDiffXsec
differential cross section of interaction
void SetProcInfo(const ProcessInfo &proc)
virtual int TargetNucleusPosition(void) const
A simplified flux ntuple for quick running.
void SetTuneName(string tuneName="Default")
cet::coded_exception< error, detail::translate > exception
QTextStream & endl(QTextStream &s)
TLorentzVector * GetProbeP4(RefFrame_t rf=kRfHitNucRest) const
virtual void SetDiffXSec(double xsec, KinePhaseSpace_t ps)
double Vx(void) const
Get production x.
static constexpr double kUndefinedValue
Initial State information.
GENIE Interface for user-defined flux classes.
double Py(void) const
Get Py.
Int_t ptype
parent type (PDG)