Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:30:19

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 #include "G4HadronicException.hh"
0011 
0012 #include "SimG4Core/CustomPhysics/interface/FullModelReactionDynamics.h"
0013 
0014 class G4ProcessHelper;
0015 
0016 class FullModelHadronicProcess : public G4VDiscreteProcess {
0017 public:
0018   FullModelHadronicProcess(G4ProcessHelper *aHelper, const G4String &processName = "FullModelHadronicProcess");
0019 
0020   ~FullModelHadronicProcess() override;
0021 
0022   G4bool IsApplicable(const G4ParticleDefinition &aP) override;
0023 
0024   G4VParticleChange *PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override;
0025 
0026 protected:
0027   const G4ParticleDefinition *theParticle;
0028   G4ParticleDefinition *newParticle;
0029 
0030   G4ParticleChange theParticleChange;
0031 
0032 private:
0033   virtual G4double GetMicroscopicCrossSection(const G4DynamicParticle *aParticle,
0034                                               const G4Element *anElement,
0035                                               G4double aTemp);
0036 
0037   G4double GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *) override;
0038 
0039   void CalculateMomenta(G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec,
0040                         G4int &vecLen,
0041                         const G4HadProjectile *originalIncident,
0042                         const G4DynamicParticle *originalTarget,
0043                         G4ReactionProduct &modifiedOriginal,
0044                         G4Nucleus &targetNucleus,
0045                         G4ReactionProduct &currentParticle,
0046                         G4ReactionProduct &targetParticle,
0047                         G4bool &incidentHasChanged,
0048                         G4bool &targetHasChanged,
0049                         G4bool quasiElastic);
0050 
0051   G4bool MarkLeadingStrangeParticle(const G4ReactionProduct &currentParticle,
0052                                     const G4ReactionProduct &targetParticle,
0053                                     G4ReactionProduct &leadParticle);
0054 
0055   void Rotate(G4FastVector<G4ReactionProduct, MYGHADLISTSIZE> &vec, G4int &vecLen);
0056 
0057   const G4DynamicParticle *FindRhadron(G4ParticleChange *);
0058 
0059   G4ProcessHelper *theHelper;
0060   G4bool toyModel;
0061   G4double cache;
0062   G4ThreeVector what;
0063 };
0064 
0065 #endif