Back to home page

Project CMSSW displayed by LXR

 
 

    


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 &currentParticle,
0036                         G4ReactionProduct &targetParticle,
0037                         G4bool &incidentHasChanged,
0038                         G4bool &targetHasChanged,
0039                         G4bool quasiElastic);
0040 
0041   G4bool MarkLeadingStrangeParticle(const G4ReactionProduct &currentParticle,
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