File indexing completed on 2025-07-09 05:00:33
0001 #ifndef SimG4Core_CustomPhysics_FullModelHadronicProcess_h
0002 #define SimG4Core_CustomPhysics_FullModelHadronicProcess_h 1
0003
0004 #include "globals.hh"
0005 #include "G4VDiscreteProcess.hh"
0006 #include "G4EnergyRangeManager.hh"
0007 #include "G4Nucleus.hh"
0008 #include "G4ReactionProduct.hh"
0009 #include <vector>
0010
0011 #include "SimG4Core/CustomPhysics/interface/FullModelReactionDynamics.h"
0012
0013 class CustomProcessHelper;
0014
0015 class FullModelHadronicProcess : public G4VDiscreteProcess {
0016 public:
0017 FullModelHadronicProcess(CustomProcessHelper *aHelper, const G4String &processName = "FullModelHadronicProcess");
0018
0019 ~FullModelHadronicProcess() override = default;
0020
0021 G4bool IsApplicable(const G4ParticleDefinition &aP) override;
0022
0023 G4VParticleChange *PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override;
0024
0025 protected:
0026 G4double GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *) override;
0027
0028 private:
0029 void CalculateMomenta(G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0030 G4int &vecLen,
0031 const G4HadProjectile *originalIncident,
0032 const G4DynamicParticle *originalTarget,
0033 G4ReactionProduct &modifiedOriginal,
0034 G4Nucleus &targetNucleus,
0035 G4ReactionProduct ¤tParticle,
0036 G4ReactionProduct &targetParticle,
0037 G4bool &incidentHasChanged,
0038 G4bool &targetHasChanged,
0039 G4bool quasiElastic);
0040
0041 G4bool MarkLeadingStrangeParticle(const G4ReactionProduct ¤tParticle,
0042 const G4ReactionProduct &targetParticle,
0043 G4ReactionProduct &leadParticle);
0044
0045 void Rotate(G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec, G4int &vecLen);
0046
0047 CustomProcessHelper *theHelper;
0048 const G4ParticleDefinition *theParticle{nullptr};
0049 G4ParticleDefinition *newParticle{nullptr};
0050
0051 G4Nucleus targetNucleus;
0052 FullModelReactionDynamics theReactionDynamics;
0053
0054 G4ThreeVector incomingCloud3Momentum;
0055 std::vector<G4double> xsec_;
0056 };
0057
0058 #endif