Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:58:18

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 //
0027 //
0028 #ifndef G4FTFParameters_h
0029 #define G4FTFParameters_h 1
0030 
0031 #include <CLHEP/Units/SystemOfUnits.h>
0032 #include <vector>
0033 #include "G4Types.hh"
0034 #include "G4Exp.hh"
0035 #include "G4FTFTunings.hh"
0036 
0037 class G4ParticleDefinition;
0038 class G4VComponentCrossSection;
0039 class G4LundStringFragmentation;
0040 
0041 
0042 class G4FTFParameters {
0043   public:
0044     G4FTFParameters();
0045     ~G4FTFParameters();
0046 
0047     void InitForInteraction( const G4ParticleDefinition* , G4int theA, G4int theZ, G4double s );
0048 
0049     // Set geometrical parameteres
0050     void SethNcmsEnergy( const G4double s );
0051     void SetTotalCrossSection( const G4double Xtotal );
0052     void SetElastisCrossSection( const G4double Xelastic );
0053     void SetInelasticCrossSection( const G4double Xinelastic );
0054     void SetProbabilityOfElasticScatt( const G4double Xtotal, const G4double Xelastic );
0055     void SetProbabilityOfElasticScatt( const G4double aValue );
0056     void SetProbabilityOfAnnihilation( const G4double aValue ); 
0057     void SetRadiusOfHNinteractions2( const G4double Radius2 );
0058 
0059     void SetSlope( const G4double Slope );
0060     void SetGamma0( const G4double Gamma0 );
0061     G4double GammaElastic( const G4double impactsquare );
0062 
0063     // Set parameters of elastic scattering
0064     void SetAvaragePt2ofElasticScattering( const G4double aPt2 );
0065 
0066     // Set parameters of excitations
0067     void SetParams( const G4int ProcN, 
0068                     const G4double A1, const G4double B1, const G4double A2, const G4double B2,
0069                     const G4double A3, const G4double Atop, const G4double Ymin );
0070 
0071     void SetDeltaProbAtQuarkExchange( const G4double aValue );
0072     void SetProbOfSameQuarkExchange( const G4double aValue );
0073 
0074     void SetProjMinDiffMass( const G4double aValue );
0075     void SetProjMinNonDiffMass( const G4double aValue );
0076     //void SetProbabilityOfProjDiff( const G4double aValue );
0077     void SetProbLogDistrPrD( const G4double aValue );
0078 
0079     void SetTarMinDiffMass( const G4double aValue ); 
0080     void SetTarMinNonDiffMass( const G4double aValue );
0081     //void SetProbabilityOfTarDiff( const G4double aValue );
0082 
0083     void SetAveragePt2( const G4double aValue );
0084     void SetProbLogDistr( const G4double aValue );
0085 
0086     // Set parameters of a string kink
0087     void SetPt2Kink( const G4double aValue );
0088     void SetQuarkProbabilitiesAtGluonSplitUp( const G4double Puubar, const G4double Pddbar, 
0089                                               const G4double Pssbar );
0090 
0091     // Set parameters of nuclear destruction
0092     void SetMaxNumberOfCollisions( const G4double aValue, const G4double bValue );
0093     void SetProbOfInteraction( const G4double aValue );
0094 
0095     void SetCofNuclearDestructionPr( const G4double aValue );
0096     void SetCofNuclearDestruction( const G4double aValue );
0097     void SetR2ofNuclearDestruction( const G4double aValue );
0098 
0099     void SetExcitationEnergyPerWoundedNucleon( const G4double aValue );
0100 
0101     void SetDofNuclearDestruction( const G4double aValue );
0102     void SetPt2ofNuclearDestruction( const G4double aValue );
0103     void SetMaxPt2ofNuclearDestruction( const G4double aValue );
0104 
0105     // Get geometrical parameteres
0106     G4double GetTotalCrossSection();
0107     G4double GetElasticCrossSection();
0108     G4double GetInelasticCrossSection();
0109 
0110     G4double GetProbabilityOfInteraction( const G4double impactsquare );
0111     G4double GetInelasticProbability( const G4double impactsquare );
0112     G4double GetProbabilityOfElasticScatt();
0113     G4double GetSlope();
0114     G4double GetProbabilityOfAnnihilation(); 
0115 
0116     // Get parameters of elastic scattering
0117     G4double GetAvaragePt2ofElasticScattering();
0118 
0119     // Get parameters of excitations
0120     G4double GetProcProb( const G4int ProcN, const G4double y );
0121 
0122     G4double GetDeltaProbAtQuarkExchange();
0123     G4double GetProbOfSameQuarkExchange();
0124 
0125     G4double GetProjMinDiffMass();
0126     G4double GetProjMinNonDiffMass();
0127     G4double GetProbLogDistrPrD();
0128 
0129     G4double GetTarMinDiffMass();
0130     G4double GetTarMinNonDiffMass();
0131 
0132     G4double GetAveragePt2();
0133     G4double GetProbLogDistr();
0134 
0135     // Get parameters of a string kink
0136     G4double GetPt2Kink();
0137     std::vector< G4double > GetQuarkProbabilitiesAtGluonSplitUp();
0138 
0139     // Get parameters of nuclear destruction
0140     G4double GetMaxNumberOfCollisions();
0141     G4double GetProbOfInteraction();
0142 
0143     G4double GetCofNuclearDestructionPr();
0144     G4double GetCofNuclearDestruction();
0145     G4double GetR2ofNuclearDestruction();
0146 
0147     G4double GetExcitationEnergyPerWoundedNucleon();
0148 
0149     G4double GetDofNuclearDestruction();
0150     G4double GetPt2ofNuclearDestruction();
0151     G4double GetMaxPt2ofNuclearDestruction();
0152 
0153     // JVY, July 31, 2017: Is there any reason for NOT making 
0154     //                     all the members data private ???
0155     //
0156     // private: 
0157 
0158     // Initial energy of hN interactions
0159     G4double FTFhNcmsEnergy;  // Initial hN CMS energy
0160 
0161     // Geometrical parameteres
0162     G4double FTFXtotal;                      // Total X in mb
0163     G4double FTFXelastic;                    // Elastic X in mb
0164     G4double FTFXinelastic;                  // Inelastic X in mb
0165     G4double FTFXannihilation;               // Annihilation X in mb 
0166     G4double ProbabilityOfAnnihilation;      // Xannih/Xinelast     
0167     G4double ProbabilityOfElasticScatt;      // Xel/Xtot
0168     G4double RadiusOfHNinteractions2;        // Xtot/pi, in fm^2
0169     G4double FTFSlope;                       // in fm^-1
0170     G4double AvaragePt2ofElasticScattering;  // in MeV^2
0171     G4double FTFGamma0;
0172 
0173     // Parameters of excitations
0174     G4double ProcParams[5][7];
0175 
0176     G4double DeltaProbAtQuarkExchange;
0177     G4double ProbOfSameQuarkExchange;
0178 
0179     G4double ProjMinDiffMass;
0180     G4double ProjMinNonDiffMass;
0181     G4double ProbLogDistrPrD;
0182     G4double TarMinDiffMass;  
0183     G4double TarMinNonDiffMass;
0184 
0185     G4double AveragePt2;
0186     G4double ProbLogDistr;
0187 
0188     // Parameters of kink
0189     G4double Pt2kink;
0190     std::vector< G4double > QuarkProbabilitiesAtGluonSplitUp;
0191 
0192     // Parameters of nuclear destruction
0193     G4double MaxNumberOfCollisions;
0194     G4double ProbOfInelInteraction;
0195 
0196     G4double CofNuclearDestructionPr; // Cnd of nuclear destruction of projectile nucleus
0197     G4double CofNuclearDestruction;   // Cnd of nuclear destruction
0198     G4double R2ofNuclearDestruction;  // R2nd
0199 
0200     G4double ExcitationEnergyPerWoundedNucleon;
0201 
0202     G4double DofNuclearDestruction;       // Dispersion for momentum sampling
0203     G4double Pt2ofNuclearDestruction;     // Pt2
0204     G4double MaxPt2ofNuclearDestruction;  // Max Pt2
0205 
0206     G4bool EnableDiffDissociationForBGreater10; ///< Control over whether to do nucleon-hadron diffractive dissociation or not.
0207 
0208   private:
0209     G4LundStringFragmentation* StringMass;
0210     G4double GetMinMass( const G4ParticleDefinition* aParticle );
0211 
0212     void Reset(); 
0213 
0214     // Different sets of parameters (called "tunes") of the FTF model are possible.
0215     // These tunes are kept as std::array - instead of std::vector - members of this class,
0216     // because their size is fixed during a run, and expected to be small.
0217     // For the time being, separate parameters are kept for "baryons", "pions", and
0218     // the rest of "mesons"; if in the future we make more distinctions between
0219     // projectile types (e.g. kaons, anti-baryon, hyperons, etc.), then corresponding
0220     // new arrays will be introduced. In all cases, the size of these arrays is the
0221     // same (and kept as a static constant in the singleton G4FTFTunings).
0222     std::array< G4FTFParamCollBaryonProj, G4FTFTunings::sNumberOfTunes > fArrayParCollBaryonProj;
0223     std::array< G4FTFParamCollMesonProj,  G4FTFTunings::sNumberOfTunes > fArrayParCollMesonProj;
0224     std::array< G4FTFParamCollPionProj,   G4FTFTunings::sNumberOfTunes > fArrayParCollPionProj;
0225 
0226     // Glauber-Gribov hN x-section
0227     G4VComponentCrossSection* csGGinstance;
0228 };
0229 
0230 
0231 inline G4double G4FTFParameters::GammaElastic( const G4double impactsquare ) {
0232   return ( FTFGamma0 * G4Exp( -FTFSlope * impactsquare ) );
0233 }
0234 
0235 inline void G4FTFParameters::SethNcmsEnergy( const G4double S ) { 
0236   FTFhNcmsEnergy = S;
0237 }
0238 
0239 // Set geometrical parameteres
0240 
0241 inline void G4FTFParameters::SetTotalCrossSection( const G4double Xtotal ) {
0242   FTFXtotal = Xtotal;
0243 }
0244 
0245 inline void G4FTFParameters::SetElastisCrossSection( const G4double Xelastic ) {
0246   FTFXelastic = Xelastic;
0247 }
0248 
0249 inline void G4FTFParameters::SetInelasticCrossSection( const G4double Xinelastic ) {
0250   FTFXinelastic = Xinelastic;
0251 }
0252 
0253 inline void G4FTFParameters::SetProbabilityOfElasticScatt( const G4double Xtotal, 
0254                                                            const G4double Xelastic ) { 
0255   if ( Xtotal == 0.0 ) {
0256     ProbabilityOfElasticScatt = 0.0;
0257   } else {
0258     ProbabilityOfElasticScatt = Xelastic / Xtotal;
0259   }
0260 } 
0261 
0262 inline void G4FTFParameters::SetProbabilityOfElasticScatt( const G4double aValue ) {
0263   ProbabilityOfElasticScatt = aValue;
0264 }
0265 
0266 inline void G4FTFParameters::SetProbabilityOfAnnihilation( const G4double aValue ) {
0267   ProbabilityOfAnnihilation = aValue;
0268 }
0269 
0270 inline void G4FTFParameters::SetRadiusOfHNinteractions2( const G4double Radius2 ) {
0271   RadiusOfHNinteractions2 = Radius2;
0272 }
0273 
0274 inline void G4FTFParameters::SetSlope( const G4double Slope ) {
0275   FTFSlope = 12.84 / Slope; // Slope is in GeV^-2, FTFSlope in fm^-2
0276 } 
0277 
0278 inline void G4FTFParameters::SetGamma0( const G4double Gamma0 ) {
0279   FTFGamma0 = Gamma0;
0280 }
0281 
0282 // Set parameters of elastic scattering
0283 inline void G4FTFParameters::SetAvaragePt2ofElasticScattering( const G4double aPt2 ) {
0284   AvaragePt2ofElasticScattering = aPt2;
0285 }
0286 
0287 // Set parameters of excitations
0288 
0289 inline void G4FTFParameters::SetParams( const G4int ProcN,
0290                                         const G4double A1, const G4double B1, const G4double A2,
0291                                         const G4double B2, const G4double A3, const G4double Atop,
0292                                         const  G4double Ymin ) {
0293   ProcParams[ProcN][0] =   A1; ProcParams[ProcN][1] =  B1;
0294   ProcParams[ProcN][2] =   A2; ProcParams[ProcN][3] =  B2;
0295   ProcParams[ProcN][4] =   A3;
0296   ProcParams[ProcN][5] = Atop; ProcParams[ProcN][6] = Ymin;
0297 }
0298 
0299 inline void G4FTFParameters::SetDeltaProbAtQuarkExchange( const G4double aValue ) {
0300   DeltaProbAtQuarkExchange = aValue;
0301 }
0302 
0303 inline void G4FTFParameters::SetProbOfSameQuarkExchange( const G4double aValue ) {
0304   ProbOfSameQuarkExchange = aValue;
0305 }
0306 
0307 inline void G4FTFParameters::SetProjMinDiffMass( const G4double aValue ) {
0308   ProjMinDiffMass = aValue*CLHEP::GeV;
0309 }
0310 
0311 inline void G4FTFParameters::SetProjMinNonDiffMass( const G4double aValue ) {
0312   ProjMinNonDiffMass = aValue*CLHEP::GeV;
0313 }
0314 
0315 inline void G4FTFParameters::SetTarMinDiffMass( const G4double aValue ) {
0316   TarMinDiffMass = aValue*CLHEP::GeV;
0317 }
0318 
0319 inline void G4FTFParameters::SetTarMinNonDiffMass( const G4double aValue ) {
0320   TarMinNonDiffMass = aValue*CLHEP::GeV;
0321 }
0322 
0323 inline void G4FTFParameters::SetAveragePt2( const G4double aValue ) {
0324   AveragePt2 = aValue*CLHEP::GeV*CLHEP::GeV;
0325 }
0326 
0327 inline void G4FTFParameters::SetProbLogDistrPrD( const G4double aValue ) {
0328   ProbLogDistrPrD = aValue;
0329 }
0330 
0331 inline void G4FTFParameters::SetProbLogDistr( const G4double aValue ) {
0332   ProbLogDistr = aValue;
0333 }
0334 
0335 // Set parameters of a string kink
0336 
0337 inline void G4FTFParameters::SetPt2Kink( const G4double aValue ) {
0338   Pt2kink = aValue;
0339 }
0340 
0341 inline void G4FTFParameters::SetQuarkProbabilitiesAtGluonSplitUp( const G4double Puubar, 
0342                                                                   const G4double Pddbar,
0343                                                                   const G4double Pssbar ) {
0344   QuarkProbabilitiesAtGluonSplitUp.push_back( Puubar ); 
0345   QuarkProbabilitiesAtGluonSplitUp.push_back( Puubar + Pddbar );
0346   QuarkProbabilitiesAtGluonSplitUp.push_back( Puubar + Pddbar + Pssbar );
0347 }
0348 
0349 // Set parameters of nuclear destruction
0350 inline void G4FTFParameters::SetMaxNumberOfCollisions( const G4double Plab, 
0351                                                        const G4double Pbound ) {
0352   if ( Plab > Pbound ) {
0353     MaxNumberOfCollisions = Plab/Pbound;
0354     SetProbOfInteraction( -1.0 );
0355   } else {
0356     //MaxNumberOfCollisions = -1.0;
0357     //SetProbOfInteraction( G4Exp( 0.25*(Plab-Pbound) ) );
0358     MaxNumberOfCollisions = 1;
0359     SetProbOfInteraction( -1.0 );
0360   }
0361 }
0362 
0363 inline void G4FTFParameters::SetProbOfInteraction( const G4double aValue ) {
0364   ProbOfInelInteraction = aValue;
0365 }
0366 
0367 inline void G4FTFParameters::SetCofNuclearDestructionPr( const G4double aValue ) {
0368   CofNuclearDestructionPr = aValue;
0369 }
0370 
0371 inline void G4FTFParameters::SetCofNuclearDestruction( const G4double aValue ) {
0372   CofNuclearDestruction = aValue;
0373 }
0374 
0375 inline void G4FTFParameters::SetR2ofNuclearDestruction( const G4double aValue ) {
0376   R2ofNuclearDestruction = aValue;
0377 }
0378 
0379 inline void G4FTFParameters::SetExcitationEnergyPerWoundedNucleon( const G4double aValue ) {
0380   ExcitationEnergyPerWoundedNucleon = aValue;
0381 }
0382 
0383 inline void G4FTFParameters::SetDofNuclearDestruction( const G4double aValue ) {
0384   DofNuclearDestruction = aValue;
0385 }
0386 
0387 inline void G4FTFParameters::SetPt2ofNuclearDestruction( const G4double aValue ) {
0388   Pt2ofNuclearDestruction = aValue;
0389 }
0390 
0391 inline void G4FTFParameters::SetMaxPt2ofNuclearDestruction( const G4double aValue ) {
0392   MaxPt2ofNuclearDestruction = aValue;
0393 }
0394 
0395 // Get geometrical parameteres
0396 inline G4double G4FTFParameters::GetTotalCrossSection() {
0397   return FTFXtotal;
0398 }
0399 
0400 inline G4double G4FTFParameters::GetElasticCrossSection() {
0401   return FTFXelastic;
0402 }
0403 
0404 inline G4double G4FTFParameters::GetInelasticCrossSection() {
0405   return FTFXinelastic;
0406 }
0407 
0408 inline G4double G4FTFParameters::GetSlope() {
0409   return FTFSlope;
0410 }
0411 
0412 inline G4double G4FTFParameters::GetProbabilityOfInteraction( const G4double impactsquare ) {
0413   if ( RadiusOfHNinteractions2 > impactsquare ) {
0414     return 1.0;
0415   } else {
0416     return 0.0;
0417   }
0418 } 
0419 
0420 inline G4double G4FTFParameters::GetProbabilityOfElasticScatt() {
0421   return ProbabilityOfElasticScatt;
0422 }
0423 
0424 inline G4double G4FTFParameters::GetInelasticProbability( const G4double impactsquare ) {
0425   G4double Gamma = GammaElastic( impactsquare );
0426   return 2*Gamma - Gamma*Gamma;
0427 }
0428 
0429 inline G4double G4FTFParameters::GetProbabilityOfAnnihilation() {
0430   return ProbabilityOfAnnihilation;
0431 } 
0432 
0433 // Get parameters of elastic scattering
0434 inline G4double G4FTFParameters::GetAvaragePt2ofElasticScattering() {
0435   return AvaragePt2ofElasticScattering;
0436 }
0437 
0438 // Get parameters of excitations
0439 
0440 inline G4double G4FTFParameters::GetDeltaProbAtQuarkExchange() { 
0441   return DeltaProbAtQuarkExchange;
0442 }
0443 
0444 inline G4double G4FTFParameters::GetProbOfSameQuarkExchange() {
0445   return ProbOfSameQuarkExchange;
0446 }
0447 
0448 inline G4double G4FTFParameters::GetProjMinDiffMass() {
0449   return ProjMinDiffMass;
0450 }
0451 
0452 inline G4double G4FTFParameters::GetProjMinNonDiffMass() {
0453   return ProjMinNonDiffMass;
0454 }
0455 
0456 inline G4double G4FTFParameters::GetTarMinDiffMass() {
0457   return TarMinDiffMass;
0458 }
0459 
0460 inline G4double G4FTFParameters::GetTarMinNonDiffMass() {
0461   return TarMinNonDiffMass;
0462 }
0463 
0464 inline G4double G4FTFParameters::GetAveragePt2() {
0465   return AveragePt2;
0466 }
0467 
0468 inline G4double G4FTFParameters::GetProbLogDistrPrD() {
0469   return ProbLogDistrPrD;
0470 }
0471 
0472 inline G4double G4FTFParameters::GetProbLogDistr() {
0473   return ProbLogDistr;
0474 }
0475 
0476 // Get parameters of a string kink
0477 
0478 inline G4double G4FTFParameters::GetPt2Kink() {
0479   return Pt2kink;
0480 }
0481 
0482 inline std::vector< G4double > G4FTFParameters::GetQuarkProbabilitiesAtGluonSplitUp() {
0483   return QuarkProbabilitiesAtGluonSplitUp;
0484 }
0485 
0486 // Get parameters of nuclear destruction
0487 
0488 inline G4double G4FTFParameters::GetMaxNumberOfCollisions() {
0489   return MaxNumberOfCollisions;
0490 }
0491 
0492 inline G4double G4FTFParameters::GetProbOfInteraction() {
0493   return ProbOfInelInteraction;
0494 }
0495 
0496 inline G4double G4FTFParameters::GetCofNuclearDestructionPr() {
0497   return CofNuclearDestructionPr;
0498 }
0499 
0500 inline G4double G4FTFParameters::GetCofNuclearDestruction() {
0501   return CofNuclearDestruction;
0502 }
0503 
0504 inline G4double G4FTFParameters::GetR2ofNuclearDestruction() {
0505   return R2ofNuclearDestruction;
0506 }
0507 
0508 inline G4double G4FTFParameters::GetExcitationEnergyPerWoundedNucleon() {
0509   return ExcitationEnergyPerWoundedNucleon;
0510 }
0511 
0512 inline G4double G4FTFParameters::GetDofNuclearDestruction() {
0513   return DofNuclearDestruction;
0514 }
0515 
0516 inline G4double G4FTFParameters::GetPt2ofNuclearDestruction() {
0517   return Pt2ofNuclearDestruction;
0518 }
0519 
0520 inline G4double G4FTFParameters::GetMaxPt2ofNuclearDestruction() {
0521   return MaxPt2ofNuclearDestruction;
0522 }
0523 
0524 #endif
0525