Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:59:00

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 #ifndef G4QGSParticipants_h
0027 #define G4QGSParticipants_h 1
0028 
0029 #include "Randomize.hh"
0030 #include "G4VParticipants.hh"
0031 #include "G4Nucleon.hh"
0032 #include "G4InteractionContent.hh"
0033 #include "G4QGSDiffractiveExcitation.hh"
0034 #include "G4SingleDiffractiveExcitation.hh"
0035 #include "G4PartonPair.hh" 
0036 #include "G4QGSMSplitableHadron.hh" 
0037 #include "G4V3DNucleus.hh"
0038 
0039 #include "G4VSplitableHadron.hh"
0040 
0041 #include "G4Reggeons.hh"
0042 #include "G4QuarkExchange.hh"
0043 
0044 class G4QGSParticipants : public G4VParticipants
0045 {
0046   public:
0047     G4QGSParticipants();
0048     G4QGSParticipants(const G4QGSParticipants &right);
0049     const G4QGSParticipants & operator=(const G4QGSParticipants &right);
0050     virtual ~G4QGSParticipants();
0051 
0052     G4bool operator==(const G4QGSParticipants &right) const;
0053     G4bool operator!=(const G4QGSParticipants &right) const;
0054 
0055     virtual void DoLorentzBoost(G4ThreeVector aBoost)
0056     {
0057                 theCurrentVelocity = -aBoost;
0058         if(theNucleus) theNucleus->DoLorentzBoost(aBoost);
0059         theBoost = aBoost;
0060     }
0061 
0062     G4PartonPair* GetNextPartonPair();
0063     void BuildInteractions(const G4ReactionProduct  &thePrimary);
0064     void StartPartonPairLoop();
0065 
0066   private:
0067     G4V3DNucleus* GetTargetNucleus() const;
0068     G4V3DNucleus* GetProjectileNucleus() const;
0069 
0070     void PrepareInitialState( const G4ReactionProduct& thePrimary );
0071     void GetList( const G4ReactionProduct& thePrimary );
0072 
0073     void StoreInvolvedNucleon();              
0074     void ReggeonCascade();
0075     G4bool PutOnMassShell();
0076     void GetResiduals();                  
0077 
0078     G4ThreeVector GaussianPt( G4double AveragePt2, G4double maxPtSquare ) const;
0079 
0080     G4bool ComputeNucleusProperties( G4V3DNucleus* nucleus, G4LorentzVector& nucleusMomentum, 
0081                                      G4LorentzVector& residualMomentum, G4double& sumMasses,   
0082                                      G4double& residualExcitationEnergy, G4double& residualMass,
0083                                      G4int& residualMassNumber, G4int& residualCharge );
0084     // Utility methods used by PutOnMassShell.
0085 
0086     G4bool GenerateDeltaIsobar( const G4double sqrtS, const G4int numberOfInvolvedNucleons,
0087                                 G4Nucleon* involvedNucleons[], G4double& sumMasses );
0088 
0089     G4bool SamplingNucleonKinematics( G4double averagePt2, const G4double maxPt2,
0090                                       G4double dCor, G4V3DNucleus* nucleus, 
0091                                       const G4LorentzVector& pResidual, 
0092                                       const G4double residualMass, const G4int residualMassNumber,
0093                                       const G4int numberOfInvolvedNucleons,
0094                                       G4Nucleon* involvedNucleons[], G4double& mass2 );
0095 
0096     G4bool CheckKinematics( const G4double sValue, const G4double sqrtS, 
0097                             const G4double projectileMass2, const G4double targetMass2,
0098                             const G4double nucleusY, const G4bool isProjectileNucleus,
0099                             const G4int numberOfInvolvedNucleons, G4Nucleon* involvedNucleons[],
0100                             G4double& targetWminus, G4double& projectileWplus, G4bool& success );
0101 
0102     G4bool FinalizeKinematics( const G4double w, const G4bool isProjectileNucleus, 
0103                                const G4LorentzRotation& boostFromCmsToLab,
0104                                const G4double residualMass, const G4int residualMassNumber,
0105                                const G4int numberOfInvolvedNucleons, 
0106                                G4Nucleon* involvedNucleons[],
0107                            G4LorentzVector& residual4Momentum );
0108 
0109     void CreateStrings();
0110 
0111   private:
0112     // Set parameters of nuclear destruction
0113     void SetCofNuclearDestruction( const G4double aValue );
0114     void SetR2ofNuclearDestruction( const G4double aValue );
0115 
0116     void SetExcitationEnergyPerWoundedNucleon( const G4double aValue );
0117 
0118     void SetDofNuclearDestruction( const G4double aValue );
0119     void SetPt2ofNuclearDestruction( const G4double aValue );
0120     void SetMaxPt2ofNuclearDestruction( const G4double aValue );
0121 
0122     // Get parameters of nuclear destruction
0123     G4double GetCofNuclearDestruction();
0124     G4double GetR2ofNuclearDestruction();
0125 
0126     G4double GetExcitationEnergyPerWoundedNucleon();
0127 
0128     G4double GetDofNuclearDestruction();
0129     G4double GetPt2ofNuclearDestruction();
0130     G4double GetMaxPt2ofNuclearDestruction();
0131 
0132   protected:
0133     virtual G4VSplitableHadron* SelectInteractions(const G4ReactionProduct  &thePrimary);
0134     void SplitHadrons(); 
0135     void PerformSoftCollisions();
0136     void PerformDiffractiveCollisions();
0137         G4bool DeterminePartonMomenta();
0138 
0139   protected:
0140     struct DeleteInteractionContent {void operator()(G4InteractionContent*aC){delete aC;}};
0141     std::vector<G4InteractionContent*> theInteractions;
0142     struct DeleteSplitableHadron{void operator()(G4VSplitableHadron*aS){delete aS;}};
0143     std::vector<G4VSplitableHadron*>   theTargets;
0144     struct DeletePartonPair{void operator()(G4PartonPair*aP){delete aP;}};
0145     std::vector<G4PartonPair*>   thePartonPairs;
0146 
0147     G4QuarkExchange           theQuarkExchange;
0148     G4SingleDiffractiveExcitation theSingleDiffExcitation;
0149     G4QGSDiffractiveExcitation    theDiffExcitaton;
0150     G4int ModelMode;
0151 
0152     G4ThreeVector theBoost;
0153     G4double SampleX(G4double anXmin, G4int nSea, G4int theTotalSea, G4double aBeta);
0154 
0155   protected:
0156     // model parameters HPW
0157     enum  { SOFT, DIFFRACTIVE };
0158     enum  { ALL, WITHOUT_R, NON_DIFF };   // Interaction modes
0159     enum  { PrD, TrD, DD, NonD, Qexc };   // Interaction types
0160 
0161     const G4int nCutMax;
0162     const G4double ThresholdParameter;
0163     const G4double QGSMThreshold;
0164     const G4double theNucleonRadius;
0165 
0166         G4ThreeVector theCurrentVelocity;
0167         G4QGSMSplitableHadron* theProjectileSplitable;
0168 
0169   private:
0170     G4ReactionProduct theProjectile;       
0171 
0172     G4Reggeons* Regge;
0173     G4int InteractionMode;
0174 
0175     G4double alpha;
0176     G4double beta;
0177 
0178     G4double sigmaPt;   
0179 
0180     G4Nucleon* TheInvolvedNucleonsOfTarget[250];
0181     G4int NumberOfInvolvedNucleonsOfTarget;
0182 
0183     G4Nucleon* TheInvolvedNucleonsOfProjectile[250];
0184     G4int NumberOfInvolvedNucleonsOfProjectile;
0185 
0186     G4LorentzVector ProjectileResidual4Momentum;
0187     G4int           ProjectileResidualMassNumber;
0188     G4int           ProjectileResidualCharge;
0189     G4double        ProjectileResidualExcitationEnergy;
0190 
0191     G4LorentzVector TargetResidual4Momentum;
0192     G4int           TargetResidualMassNumber;
0193     G4int           TargetResidualCharge;
0194     G4double        TargetResidualExcitationEnergy;
0195 
0196   private:
0197     // Parameters of nuclear destruction
0198     G4double CofNuclearDestruction;   // Cnd of nuclear destruction
0199     G4double R2ofNuclearDestruction;  // R2nd
0200 
0201     G4double ExcitationEnergyPerWoundedNucleon;
0202 
0203     G4double DofNuclearDestruction;       // D for momentum sampling
0204     G4double Pt2ofNuclearDestruction;     // Pt2
0205     G4double MaxPt2ofNuclearDestruction;  // Max Pt2
0206 };
0207 
0208 inline void G4QGSParticipants::StartPartonPairLoop()
0209 {
0210 }
0211 
0212 inline G4PartonPair* G4QGSParticipants::GetNextPartonPair()
0213 {
0214     if (thePartonPairs.empty()) return 0;
0215     G4PartonPair * result = thePartonPairs.back();
0216     thePartonPairs.pop_back();
0217     return result;
0218 }
0219 
0220 inline void G4QGSParticipants::SplitHadrons()
0221 {
0222     unsigned int i;
0223     for(i = 0; i < theInteractions.size(); i++)
0224     {
0225         theInteractions[i]->SplitHadrons();
0226     }
0227 }
0228 
0229 inline G4V3DNucleus* G4QGSParticipants::GetTargetNucleus() const {
0230   return theNucleus;
0231 }
0232 
0233 inline G4V3DNucleus* G4QGSParticipants::GetProjectileNucleus() const {
0234   return 0;
0235 }
0236 
0237 // Uzhi Start copy from FTFparameters
0238 // Set parameters of nuclear destruction
0239 
0240 inline void G4QGSParticipants::SetCofNuclearDestruction( const G4double aValue ) {
0241   CofNuclearDestruction = aValue;
0242 }
0243 
0244 inline void G4QGSParticipants::SetR2ofNuclearDestruction( const G4double aValue ) {
0245   R2ofNuclearDestruction = aValue;
0246 }
0247 
0248 inline void G4QGSParticipants::SetExcitationEnergyPerWoundedNucleon( const G4double aValue ) {
0249   ExcitationEnergyPerWoundedNucleon = aValue;
0250 }
0251 
0252 inline void G4QGSParticipants::SetDofNuclearDestruction( const G4double aValue ) {
0253   DofNuclearDestruction = aValue;
0254 }
0255 
0256 inline void G4QGSParticipants::SetPt2ofNuclearDestruction( const G4double aValue ) {
0257   Pt2ofNuclearDestruction = aValue;
0258 }
0259 
0260 inline void G4QGSParticipants::SetMaxPt2ofNuclearDestruction( const G4double aValue ) {
0261   MaxPt2ofNuclearDestruction = aValue;
0262 }
0263 
0264 // Get parameters of nuclear destruction
0265 inline G4double G4QGSParticipants::GetCofNuclearDestruction() {
0266   return CofNuclearDestruction;
0267 }
0268 
0269 inline G4double G4QGSParticipants::GetR2ofNuclearDestruction() {
0270   return R2ofNuclearDestruction;
0271 }
0272 
0273 inline G4double G4QGSParticipants::GetExcitationEnergyPerWoundedNucleon() {
0274   return ExcitationEnergyPerWoundedNucleon;
0275 }
0276 
0277 inline G4double G4QGSParticipants::GetDofNuclearDestruction() {
0278   return DofNuclearDestruction;
0279 }
0280 
0281 inline G4double G4QGSParticipants::GetPt2ofNuclearDestruction() {
0282   return Pt2ofNuclearDestruction;
0283 }
0284 
0285 inline G4double G4QGSParticipants::GetMaxPt2ofNuclearDestruction() {
0286   return MaxPt2ofNuclearDestruction;
0287 }
0288 //Uzhi End copy from FTFparameters
0289 #endif
0290