Neutron-Calibration-in-DUNE / Arrakis

LArSoft module for creating training data for ML tasks.
GNU General Public License v3.0
0 stars 0 forks source link

Fix shower labeling #5

Open infophysics opened 1 year ago

infophysics commented 1 year ago

Something seems off with the shower labeling. What actually constitutes a part of a shower?

infophysics commented 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,
};
infophysics commented 1 year ago

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},
};
infophysics commented 1 year ago

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 -
infophysics commented 1 year ago

Now all we need to do is fix the labeling scheme in SimulationLabelingLogic, will work on that this afternoon.

infophysics commented 1 year ago

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.