Open infophysics opened 1 year ago
Added multiple physics processes from Geant4 to the processes table in Core.h:
enum class ProcessType
{
NotDefined = -1,
Unknown = 0,
Primary = 1,
// Electromagnetic
AdjointAlongStepWeightCorrection = 2,
ContinuousGainOfEnergy = 3,
PolarizedAnnihilation = 4,
PolarizedBremsstrahlung = 5,
PolarizedIonization = 6,
IonParameteizedLossModel = 7,
IonIonization = 8,
ElectronBremsstrahlung = 9,
ElectronPositronAnnihilation = 10,
ElectronIonization = 11,
CoulombScattering = 12,
HadronIonization = 13,
MuonIonization = 14,
ElectronElectronToHadrons = 15,
MPLIonization = 16,
HadronHadronIonization = 17,
EnergyLoss = 18,
MultipleScattering = 19,
// Hadronic
TheoFSGenerator = 20,
NeutrinoNucleusModel = 21,
NuElNucleusNCModel = 22,
NuMuNucleusNCModel = 23,
NuTauNucleusNCModel = 24,
AntiNuElNucleusNCModel = 25,
AntiNuMuNucleusNCModel = 26,
AntiNuTauNucleusNCModel = 27,
NuElNucleusCCModel = 28,
NuMuNucleusCCModel = 29,
NuTauNucleusCCModel = 30,
AntiNuElNucleusCCModel = 31,
AntiNuMuNucleusCCModel = 32,
AntiNuTauNucleusCCModel = 33,
CoherentNeutronElectronElModel = 34,
CoherentHadronElastic = 35,
CoherentNeutrinoElectronNCModel = 36,
CoherentElasticHadronNucleusHE = 37,
Fission = 38,
HadronElastic = 39,
HadronInelastic = 40,
HadronCaptureAtRest = 41,
PiMinusElastic = 42,
PiMinusInelastic = 43,
PiMinusCaptureAtRest = 44,
PiPlusElastic = 45,
PiPlusInelastic = 46,
PiPlusCaptureAtRest = 47,
KaonMinusElastic = 48,
KaonMinusInelastic = 49,
KaonMinusCaptureAtRest = 50,
KaonPlusElastic = 51,
KaonPlusInelastic = 52,
KaonPlusCaptureAtRest = 53,
ProtonElastic = 54,
ProtonInelastic = 55,
ProtonCaptureAtRest = 56,
NeutronElastic = 57,
NeutronInelastic = 58,
NeutronCapture = 59,
NeutronHPElastic = 60,
NeutronHPInelastic = 61,
NeutronHPCapture = 62,
MuonCaptureAtRest = 63,
AntiMuonCaptureAtRest = 64,
MuonPairProduction = 65,
// Decay
Decay = 66,
// Optical
GammaConversion = 67,
ComptonScatter = 68,
PhotoelectricEffect = 69,
// Transportation
Transportation = 70,
};
The associated Geant4 names for these are associated in the maps in SimulationWrangler:
std::map<std::string, ProcessType> TrajectoryStringToProcessType
{
{"NotDefined", ProcessType::NotDefined},
{"Unknown", ProcessType::Unknown},
{"primary", ProcessType::Primary},
{"ContinuousWeightCorrection", ProcessType::AdjointAlongStepWeightCorrection},
{"EnergyGain", ProcessType::ContinuousGainOfEnergy},
{"pol-annihil", ProcessType::PolarizedAnnihilation},
{"pol-eBrem", ProcessType::PolarizedBremsstrahlung},
{"pol-eIoni", ProcessType::PolarizedIonization},
{"ParamICRU73", ProcessType::IonParameteizedLossModel},
{"ionIoni", ProcessType::IonIonization},
{"eBrem", ProcessType::ElectronBremsstrahlung},
{"annihil", ProcessType::ElectronPositronAnnihilation},
{"eIoni", ProcessType::ElectronIonization},
{"CoulombScat", ProcessType::CoulombScattering},
{"CoulombScatter", ProcessType::CoulombScattering},
{"hIoni", ProcessType::HadronIonization},
{"muIoni", ProcessType::MuonIonization},
{"ee2hadr", ProcessType::ElectronElectronToHadrons},
{"mplIoni", ProcessType::MPLIonization},
{"hhIoni", ProcessType::HadronHadronIonization},
{"EnergyLoss", ProcessType::EnergyLoss},
{"msc", ProcessType::MultipleScattering},
{"TheoFSGenerator", ProcessType::TheoFSGenerator},
{"neutrino-nucleus", ProcessType::NeutrinoNucleusModel},
{"NuElNuclNcModel", ProcessType::NuElNucleusNCModel},
{"NuMuNuclNcModel", ProcessType::NuMuNucleusNCModel},
{"NuTauNuclNcModel", ProcessType::NuTauNucleusNCModel},
{"ANuElNuclNcModel", ProcessType::AntiNuElNucleusNCModel},
{"ANuMuNuclNcModel", ProcessType::AntiNuMuNucleusNCModel},
{"ANuTauNuclNcModel", ProcessType::AntiNuTauNucleusNCModel},
{"NuElNuclCcModel", ProcessType::NuElNucleusCCModel},
{"NuMuNuclCcModel", ProcessType::NuMuNucleusCCModel},
{"NuTauNuclCcModel", ProcessType::NuTauNucleusCCModel},
{"ANuElNuclCcModel", ProcessType::AntiNuElNucleusCCModel},
{"ANuMuNuclCcModel", ProcessType::AntiNuMuNucleusCCModel},
{"ANuTauNuclCcModel", ProcessType::AntiNuTauNucleusCCModel},
{"n-e-elastic", ProcessType::CoherentNeutronElectronElModel},
{"hElasticLHEP", ProcessType::CoherentHadronElastic},
{"nu-e-elastic", ProcessType::CoherentNeutrinoElectronNCModel},
{"hElasticGlauber", ProcessType::CoherentElasticHadronNucleusHE},
{"G4LFission", ProcessType::Fission},
{"hadElastic", ProcessType::HadronElastic},
{"hadronInelastic", ProcessType::HadronInelastic},
{"hadronCaptureAtRest", ProcessType::HadronCaptureAtRest},
{"pi-Elastic", ProcessType::PiMinusElastic},
{"pi-Inelastic", ProcessType::PiMinusInelastic},
{"pi-CaptureAtRest", ProcessType::PiMinusCaptureAtRest},
{"pi+Elastic", ProcessType::PiPlusElastic},
{"pi+Inelastic", ProcessType::PiPlusInelastic},
{"pi+CaptureAtRest", ProcessType::PiPlusCaptureAtRest},
{"kaon-Elastic", ProcessType::KaonMinusElastic},
{"kaon-Inelastic", ProcessType::KaonMinusInelastic},
{"kaon-CaptureAtRest", ProcessType::KaonMinusCaptureAtRest},
{"kaon+Elastic", ProcessType::KaonPlusElastic},
{"kaon+Inelastic", ProcessType::KaonPlusInelastic},
{"kaon+CaptureAtRest", ProcessType::KaonPlusCaptureAtRest},
{"protonElastic", ProcessType::ProtonElastic},
{"protonInelastic", ProcessType::ProtonInelastic},
{"protonCaptureAtRest", ProcessType::ProtonCaptureAtRest},
{"neutronElastic", ProcessType::NeutronElastic},
{"neutronInelastic", ProcessType::NeutronInelastic},
{"nCapture", ProcessType::NeutronCapture},
{"NeutronHPElastic", ProcessType::NeutronHPElastic},
{"NeutronHPInelastic", ProcessType::NeutronHPInelastic},
{"NeutronHPCapture", ProcessType::NeutronHPCapture},
{"muMinusCaptureAtRest", ProcessType::MuonCaptureAtRest},
{"muPlusCaptureAtRest", ProcessType::AntiMuonCaptureAtRest},
{"Decay", ProcessType::Decay},
{"conv", ProcessType::GammaConversion},
{"compt", ProcessType::ComptonScatter},
{"phot", ProcessType::PhotoelectricEffect},
{"Transportation", ProcessType::Transportation},
};
The logic for electromagnetic and optical interactions can be written simply as:
pdg | creation process | topology | physics |
---|---|---|---|
22 | primary | shower | - |
11 | muIoni | track | delta |
11 | hIoni | track | delta |
11 | muPairProd | track | delta |
11 | muMinusCaptureAtRest | track | michel |
11 | muPlusCaptureAtRest | track | michel |
11 | Decay | shower | - |
11 | compt | shower/blip | - |
11 | phot | blip | - |
11 | conv | shower | - |
11 | primary | shower | - |
11 | eIoni | blip | - |
11 | others | shower/blip | - |
Now all we need to do is fix the labeling scheme in SimulationLabelingLogic, will work on that this afternoon.
Changed the ProcessShowers function to apply a better set of criteria for labeling things as showers. Added in the ShowerEnergyThreshold parameter for deciding when a compton scatter, or other ionization type qualifies as a shower, rather than a blip. Need to experiment with this.
Something seems off with the shower labeling. What actually constitutes a part of a shower?