Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 // 27 // 28 28 29 #include <utility> 29 #include <utility> 30 30 31 #include "G4FTFParameters.hh" 31 #include "G4FTFParameters.hh" 32 32 33 #include "G4ios.hh" 33 #include "G4ios.hh" 34 #include "G4PhysicalConstants.hh" 34 #include "G4PhysicalConstants.hh" 35 #include "G4SystemOfUnits.hh" 35 #include "G4SystemOfUnits.hh" 36 36 37 #include "G4ParticleDefinition.hh" 37 #include "G4ParticleDefinition.hh" 38 #include "G4Proton.hh" 38 #include "G4Proton.hh" 39 #include "G4Neutron.hh" 39 #include "G4Neutron.hh" 40 #include "G4PionPlus.hh" 40 #include "G4PionPlus.hh" 41 #include "G4PionMinus.hh" 41 #include "G4PionMinus.hh" 42 #include "G4KaonPlus.hh" 42 #include "G4KaonPlus.hh" 43 #include "G4KaonMinus.hh" 43 #include "G4KaonMinus.hh" 44 44 45 #include "G4CrossSectionDataSetRegistry.hh" 45 #include "G4CrossSectionDataSetRegistry.hh" 46 #include "G4VComponentCrossSection.hh" 46 #include "G4VComponentCrossSection.hh" 47 #include "G4ComponentGGHadronNucleusXsc.hh" 47 #include "G4ComponentGGHadronNucleusXsc.hh" 48 #include "G4LundStringFragmentation.hh" 48 #include "G4LundStringFragmentation.hh" 49 49 50 #include "G4Exp.hh" 50 #include "G4Exp.hh" 51 #include "G4Log.hh" 51 #include "G4Log.hh" 52 #include "G4Pow.hh" 52 #include "G4Pow.hh" 53 53 54 #include "G4HadronicDeveloperParameters.hh" 54 #include "G4HadronicDeveloperParameters.hh" 55 #include "G4HadronicParameters.hh" << 56 55 57 //============================================ 56 //============================================================================ 58 57 59 //#define debugFTFparams 58 //#define debugFTFparams 60 59 61 //============================================ 60 //============================================================================ 62 61 63 G4FTFParameters::G4FTFParameters() 62 G4FTFParameters::G4FTFParameters() 64 { 63 { 65 // Set-up alternative sets of FTF parameters << 66 // Note that the very first tune (with index << 67 // set of parameters, which does not need to << 68 // the for loop below starts from 1 and not << 69 // The check whether an alternative tune has << 70 // level of the G4FTFParamCollection::SetTun << 71 for ( G4int indexTune = 1; indexTune < G4FTF << 72 fArrayParCollBaryonProj[indexTune].SetTune << 73 fArrayParCollMesonProj[indexTune].SetTune( << 74 fArrayParCollPionProj[indexTune].SetTune(i << 75 } << 76 << 77 StringMass = new G4LundStringFragmentation; 64 StringMass = new G4LundStringFragmentation; // for estimation of min. mass of diffr. states 78 Reset(); 65 Reset(); 79 csGGinstance = 66 csGGinstance = 80 G4CrossSectionDataSetRegistry::Instance()- 67 G4CrossSectionDataSetRegistry::Instance()->GetComponentCrossSection("Glauber-Gribov"); 81 if (!csGGinstance) { 68 if (!csGGinstance) { 82 csGGinstance = new G4ComponentGGHadronNucl 69 csGGinstance = new G4ComponentGGHadronNucleusXsc(); 83 } 70 } 84 71 85 EnableDiffDissociationForBGreater10 = G4Hadr << 86 << 87 // Set parameters of a string kink 72 // Set parameters of a string kink 88 SetPt2Kink( 0.0*GeV*GeV ); // To switch off 73 SetPt2Kink( 0.0*GeV*GeV ); // To switch off kinky strings (bad results obtained with 6.0*GeV*GeV) 89 G4double Puubar( 1.0/3.0 ), Pddbar( 1.0/3.0 74 G4double Puubar( 1.0/3.0 ), Pddbar( 1.0/3.0 ), Pssbar( 1.0/3.0 ); // SU(3) symmetry 90 //G4double Puubar( 0.41 ), Pddbar( 0.41 ), P 75 //G4double Puubar( 0.41 ), Pddbar( 0.41 ), Pssbar( 0.18 ); // Broken SU(3) symmetry 91 SetQuarkProbabilitiesAtGluonSplitUp( Puubar, 76 SetQuarkProbabilitiesAtGluonSplitUp( Puubar, Pddbar, Pssbar ); 92 } 77 } 93 78 94 //============================================ 79 //============================================================================ 95 80 96 void G4FTFParameters::InitForInteraction( cons 81 void G4FTFParameters::InitForInteraction( const G4ParticleDefinition* particle, 97 G4in 82 G4int theA, G4int theZ, G4double PlabPerParticle ) 98 { 83 { 99 Reset(); 84 Reset(); 100 85 101 G4int ProjectilePDGcode = particle->Ge 86 G4int ProjectilePDGcode = particle->GetPDGEncoding(); 102 G4int ProjectileabsPDGcode = std::abs( Pr 87 G4int ProjectileabsPDGcode = std::abs( ProjectilePDGcode ); 103 G4double ProjectileMass = particle->Ge 88 G4double ProjectileMass = particle->GetPDGMass(); 104 G4double ProjectileMass2 = ProjectileMa 89 G4double ProjectileMass2 = ProjectileMass * ProjectileMass; 105 90 106 G4int ProjectileBaryonNumber( 0 ), AbsProjec 91 G4int ProjectileBaryonNumber( 0 ), AbsProjectileBaryonNumber( 0 ), AbsProjectileCharge( 0 ); 107 G4bool ProjectileIsNucleus = false; 92 G4bool ProjectileIsNucleus = false; 108 << 93 109 if ( std::abs( particle->GetBaryonNumber() ) 94 if ( std::abs( particle->GetBaryonNumber() ) > 1 ) { // The projectile is a nucleus 110 ProjectileIsNucleus = true; 95 ProjectileIsNucleus = true; 111 ProjectileBaryonNumber = particle->GetB 96 ProjectileBaryonNumber = particle->GetBaryonNumber(); 112 AbsProjectileBaryonNumber = std::abs( Proj 97 AbsProjectileBaryonNumber = std::abs( ProjectileBaryonNumber ); 113 AbsProjectileCharge = std::abs( G4in 98 AbsProjectileCharge = std::abs( G4int( particle->GetPDGCharge() ) ); 114 if ( ProjectileBaryonNumber > 1 ) { 99 if ( ProjectileBaryonNumber > 1 ) { 115 ProjectilePDGcode = 2212; ProjectileabsP 100 ProjectilePDGcode = 2212; ProjectileabsPDGcode = 2212; // Proton 116 } else { 101 } else { 117 ProjectilePDGcode = -2212; Projectileabs 102 ProjectilePDGcode = -2212; ProjectileabsPDGcode = 2212; // Anti-Proton 118 } 103 } 119 ProjectileMass = G4Proton::Proton()->GetP 104 ProjectileMass = G4Proton::Proton()->GetPDGMass(); 120 ProjectileMass2 = sqr( ProjectileMass ); 105 ProjectileMass2 = sqr( ProjectileMass ); 121 } 106 } 122 107 123 G4double TargetMass = G4Proton::Proton()->G 108 G4double TargetMass = G4Proton::Proton()->GetPDGMass(); 124 G4double TargetMass2 = TargetMass * TargetMa 109 G4double TargetMass2 = TargetMass * TargetMass; 125 110 126 G4double Plab = PlabPerParticle; 111 G4double Plab = PlabPerParticle; 127 G4double Elab = std::sqrt( Plab*Plab + Proje 112 G4double Elab = std::sqrt( Plab*Plab + ProjectileMass2 ); 128 G4double KineticEnergy = Elab - ProjectileMa 113 G4double KineticEnergy = Elab - ProjectileMass; 129 114 130 G4double S = ProjectileMass2 + TargetMass2 + 115 G4double S = ProjectileMass2 + TargetMass2 + 2.0*TargetMass*Elab; 131 116 132 #ifdef debugFTFparams 117 #ifdef debugFTFparams 133 G4cout << "--------- FTF Parameters -------- 118 G4cout << "--------- FTF Parameters --------------" << G4endl << "Proj Plab " 134 << ProjectilePDGcode << " " << Plab < 119 << ProjectilePDGcode << " " << Plab << G4endl << "Mass KinE " << ProjectileMass 135 << " " << KineticEnergy << G4endl << 120 << " " << KineticEnergy << G4endl << " A Z " << theA << " " << theZ << G4endl; 136 #endif 121 #endif 137 << 122 138 G4double Ylab, Xtotal( 0.0 ), Xelastic( 0.0 123 G4double Ylab, Xtotal( 0.0 ), Xelastic( 0.0 ), Xannihilation( 0.0 ); 139 G4int NumberOfTargetNucleons; 124 G4int NumberOfTargetNucleons; 140 125 141 Ylab = 0.5 * G4Log( (Elab + Plab)/(Elab - Pl 126 Ylab = 0.5 * G4Log( (Elab + Plab)/(Elab - Plab) ); 142 127 143 G4double ECMSsqr = S/GeV/GeV; 128 G4double ECMSsqr = S/GeV/GeV; 144 G4double SqrtS = std::sqrt( S )/GeV; 129 G4double SqrtS = std::sqrt( S )/GeV; 145 130 146 #ifdef debugFTFparams 131 #ifdef debugFTFparams 147 G4cout << "Sqrt(s) " << SqrtS << G4endl; 132 G4cout << "Sqrt(s) " << SqrtS << G4endl; 148 #endif 133 #endif 149 134 150 TargetMass /= GeV; TargetMass2 /= (G 135 TargetMass /= GeV; TargetMass2 /= (GeV*GeV); 151 ProjectileMass /= GeV; ProjectileMass2 /= (G 136 ProjectileMass /= GeV; ProjectileMass2 /= (GeV*GeV); 152 137 153 Plab /= GeV; 138 Plab /= GeV; 154 G4double Xftf = 0.0; 139 G4double Xftf = 0.0; 155 140 156 G4int NumberOfTargetProtons = theZ; 141 G4int NumberOfTargetProtons = theZ; 157 G4int NumberOfTargetNeutrons = theA - theZ; 142 G4int NumberOfTargetNeutrons = theA - theZ; 158 NumberOfTargetNucleons = NumberOfTargetProto 143 NumberOfTargetNucleons = NumberOfTargetProtons + NumberOfTargetNeutrons; 159 144 160 // ---------- hadron projectile ------------ 145 // ---------- hadron projectile ---------------- 161 if ( AbsProjectileBaryonNumber <= 1 ) { // 146 if ( AbsProjectileBaryonNumber <= 1 ) { // Projectile is hadron or baryon 162 147 163 // Interaction on P 148 // Interaction on P 164 G4double xTtP = csGGinstance->GetTotalIsot 149 G4double xTtP = csGGinstance->GetTotalIsotopeCrossSection( particle, KineticEnergy, 1, 1); 165 G4double xElP = csGGinstance->GetElasticIs 150 G4double xElP = csGGinstance->GetElasticIsotopeCrossSection(particle, KineticEnergy, 1, 1); 166 151 167 // Interaction on N 152 // Interaction on N 168 G4double xTtN = csGGinstance->GetTotalIsot 153 G4double xTtN = csGGinstance->GetTotalIsotopeCrossSection( particle, KineticEnergy, 0, 1); 169 G4double xElN = csGGinstance->GetElasticIs 154 G4double xElN = csGGinstance->GetElasticIsotopeCrossSection(particle, KineticEnergy, 0, 1); 170 155 171 // Average properties of h+N interactions 156 // Average properties of h+N interactions 172 Xtotal = ( NumberOfTargetProtons * xTtP 157 Xtotal = ( NumberOfTargetProtons * xTtP + NumberOfTargetNeutrons * xTtN ) / NumberOfTargetNucleons; 173 Xelastic = ( NumberOfTargetProtons * xElP 158 Xelastic = ( NumberOfTargetProtons * xElP + NumberOfTargetNeutrons * xElN ) / NumberOfTargetNucleons; 174 Xannihilation = 0.0; 159 Xannihilation = 0.0; 175 160 176 Xtotal /= millibarn; 161 Xtotal /= millibarn; 177 Xelastic /= millibarn; 162 Xelastic /= millibarn; 178 163 179 #ifdef debugFTFparams 164 #ifdef debugFTFparams 180 G4cout<<"Estimated cross sections (total a 165 G4cout<<"Estimated cross sections (total and elastic) of h+N interactions "<<Xtotal<<" "<<Xelastic<<" (mb)"<<G4endl; 181 #endif 166 #endif 182 } 167 } 183 168 184 // ---------- nucleus projectile ----------- 169 // ---------- nucleus projectile ---------------- 185 if ( ProjectileIsNucleus && ProjectileBary 170 if ( ProjectileIsNucleus && ProjectileBaryonNumber > 1 ) { 186 171 187 #ifdef debugFTFparams 172 #ifdef debugFTFparams 188 G4cout<<"Projectile is a nucleus: A and Z 173 G4cout<<"Projectile is a nucleus: A and Z - "<<ProjectileBaryonNumber<<" "<<ProjectileCharge<<G4endl; 189 #endif 174 #endif 190 175 191 const G4ParticleDefinition* Proton = G4Pro 176 const G4ParticleDefinition* Proton = G4Proton::Proton(); 192 // Interaction on P 177 // Interaction on P 193 G4double XtotPP = csGGinstance->GetTotalIs 178 G4double XtotPP = csGGinstance->GetTotalIsotopeCrossSection(Proton, KineticEnergy, 1, 1); 194 G4double XelPP = csGGinstance->GetElastic 179 G4double XelPP = csGGinstance->GetElasticIsotopeCrossSection(Proton, KineticEnergy, 1, 1); 195 180 196 const G4ParticleDefinition* Neutron = G4Ne 181 const G4ParticleDefinition* Neutron = G4Neutron::Neutron(); 197 // Interaction on N 182 // Interaction on N 198 G4double XtotPN = csGGinstance->GetTotalIs 183 G4double XtotPN = csGGinstance->GetTotalIsotopeCrossSection(Neutron, KineticEnergy, 0, 1); 199 G4double XelPN = csGGinstance->GetElastic 184 G4double XelPN = csGGinstance->GetElasticIsotopeCrossSection(Neutron, KineticEnergy, 0, 1); 200 185 201 #ifdef debugFTFparams 186 #ifdef debugFTFparams 202 G4cout << "XsPP (total and elastic) " << X 187 G4cout << "XsPP (total and elastic) " << XtotPP/millibarn << " " << XelPP/millibarn <<" (mb)"<< G4endl 203 << "XsPN (total and elastic) " << X 188 << "XsPN (total and elastic) " << XtotPN/millibarn << " " << XelPN/millibarn <<" (mb)"<< G4endl; 204 #endif 189 #endif 205 190 206 Xtotal = ( 191 Xtotal = ( 207 AbsProjectileCharge * Number 192 AbsProjectileCharge * NumberOfTargetProtons * XtotPP + 208 ( AbsProjectileBaryonNumber 193 ( AbsProjectileBaryonNumber - AbsProjectileCharge ) * 209 NumberOfTargetNeutrons * 194 NumberOfTargetNeutrons * XtotPP 210 + 195 + 211 ( AbsProjectileCharge * Numb 196 ( AbsProjectileCharge * NumberOfTargetNeutrons + 212 ( AbsProjectileBaryonNumbe 197 ( AbsProjectileBaryonNumber - AbsProjectileCharge ) * 213 NumberOfTargetProtons 198 NumberOfTargetProtons ) * XtotPN 214 ) / ( AbsProjectileBaryonNumbe 199 ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons ); 215 Xelastic= ( 200 Xelastic= ( 216 AbsProjectileCharge * Number 201 AbsProjectileCharge * NumberOfTargetProtons * XelPP + 217 ( AbsProjectileBaryonNumber 202 ( AbsProjectileBaryonNumber - AbsProjectileCharge ) * 218 NumberOfTargetNeutrons * 203 NumberOfTargetNeutrons * XelPP 219 + 204 + 220 ( AbsProjectileCharge * Numb 205 ( AbsProjectileCharge * NumberOfTargetNeutrons + 221 ( AbsProjectileBaryonNumbe 206 ( AbsProjectileBaryonNumber - AbsProjectileCharge ) * 222 NumberOfTargetProtons 207 NumberOfTargetProtons ) * XelPN 223 ) / ( AbsProjectileBaryonNumbe 208 ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons ); 224 209 225 Xannihilation = 0.0; 210 Xannihilation = 0.0; 226 Xtotal /= millibarn; 211 Xtotal /= millibarn; 227 Xelastic /= millibarn; 212 Xelastic /= millibarn; 228 } 213 } 229 214 230 // ---------- The projectile is anti-baryon 215 // ---------- The projectile is anti-baryon or anti-nucleus ---------------- 231 // anti Sigma^0_c 216 // anti Sigma^0_c anti Delta^- 232 if ( ProjectilePDGcode >= -4112 && Project 217 if ( ProjectilePDGcode >= -4112 && ProjectilePDGcode <= -1114 ) { 233 // Only non-strange and strange baryons ar 218 // Only non-strange and strange baryons are considered 234 219 235 #ifdef debugFTFparams 220 #ifdef debugFTFparams 236 G4cout<<"Projectile is a anti-baryon or an 221 G4cout<<"Projectile is a anti-baryon or anti-nucleus - "<<ProjectileBaryonNumber<<" "<<ProjectileCharge<<G4endl; 237 G4cout<<"(Only non-strange and strange bar 222 G4cout<<"(Only non-strange and strange baryons are considered)"<<G4endl; 238 #endif 223 #endif 239 224 240 G4double X_a( 0.0 ), X_b( 0.0 ), X_c( 0.0 225 G4double X_a( 0.0 ), X_b( 0.0 ), X_c( 0.0 ), X_d( 0.0 ); 241 G4double MesonProdThreshold = ProjectileMa 226 G4double MesonProdThreshold = ProjectileMass + TargetMass + 242 ( 2.0 * 0.14 227 ( 2.0 * 0.14 + 0.016 ); // 2 Mpi + DeltaE; 243 228 244 if ( PlabPerParticle < 40.0*MeV ) { // Low 229 if ( PlabPerParticle < 40.0*MeV ) { // Low energy limits. Projectile at rest. 245 Xtotal = 1512.9; // mb 230 Xtotal = 1512.9; // mb 246 Xelastic = 473.2; // mb 231 Xelastic = 473.2; // mb 247 X_a = 625.1; // mb 232 X_a = 625.1; // mb 248 X_b = 9.780; // mb 233 X_b = 9.780; // mb 249 X_c = 49.989; // mb 234 X_c = 49.989; // mb 250 X_d = 6.614; // mb 235 X_d = 6.614; // mb 251 } else { // Total and elastic cross sectio 236 } else { // Total and elastic cross section of PbarP interactions a'la Arkhipov 252 G4double LogS = G4Log( ECMSsqr / 33.0625 237 G4double LogS = G4Log( ECMSsqr / 33.0625 ); 253 G4double Xasmpt = 36.04 + 0.304*LogS*Log 238 G4double Xasmpt = 36.04 + 0.304*LogS*LogS; // mb 254 LogS = G4Log( SqrtS / 20.74 ); 239 LogS = G4Log( SqrtS / 20.74 ); 255 G4double Basmpt = 11.92 + 0.3036*LogS*Lo 240 G4double Basmpt = 11.92 + 0.3036*LogS*LogS; // GeV^(-2) 256 G4double R0 = std::sqrt( 0.40874044*Xasm 241 G4double R0 = std::sqrt( 0.40874044*Xasmpt - Basmpt ); // GeV^(-1) 257 242 258 G4double FlowF = SqrtS / std::sqrt( ECMS 243 G4double FlowF = SqrtS / std::sqrt( ECMSsqr*ECMSsqr + ProjectileMass2*ProjectileMass2 + 259 Targ 244 TargetMass2*TargetMass2 - 2.0*ECMSsqr*ProjectileMass2 260 - 2. 245 - 2.0*ECMSsqr*TargetMass2 261 - 2. 246 - 2.0*ProjectileMass2*TargetMass2 ); 262 247 263 Xtotal = Xasmpt * ( 1.0 + 13.55*FlowF/R0 248 Xtotal = Xasmpt * ( 1.0 + 13.55*FlowF/R0/R0/R0* 264 (1.0 - 4.47/Sq 249 (1.0 - 4.47/SqrtS + 12.38/ECMSsqr - 12.43/SqrtS/ECMSsqr) ); // mb 265 250 266 Xasmpt = 4.4 + 0.101*LogS*LogS; // mb 251 Xasmpt = 4.4 + 0.101*LogS*LogS; // mb 267 Xelastic = Xasmpt * ( 1.0 + 59.27*FlowF/ 252 Xelastic = Xasmpt * ( 1.0 + 59.27*FlowF/R0/R0/R0* 268 (1.0 - 6.95/ 253 (1.0 - 6.95/SqrtS + 23.54/ECMSsqr - 25.34/SqrtS/ECMSsqr ) ); // mb 269 254 270 X_a = 25.0*FlowF; // mb, 3-shirts diagr 255 X_a = 25.0*FlowF; // mb, 3-shirts diagram 271 256 272 if ( SqrtS < MesonProdThreshold ) { 257 if ( SqrtS < MesonProdThreshold ) { 273 X_b = 3.13 + 140.0*G4Pow::GetInstance( 258 X_b = 3.13 + 140.0*G4Pow::GetInstance()->powA( MesonProdThreshold - SqrtS, 2.5 ); // mb anti-quark-quark annihilation 274 Xelastic -= 3.0*X_b; // Xel-X(PbarP-> 259 Xelastic -= 3.0*X_b; // Xel-X(PbarP->NNbar) 275 } else { 260 } else { 276 X_b = 6.8/SqrtS; // mb anti-quark-qua 261 X_b = 6.8/SqrtS; // mb anti-quark-quark annihilation 277 Xelastic -= 3.0*X_b; // Xel-X(PbarP-> 262 Xelastic -= 3.0*X_b; // Xel-X(PbarP->NNbar) 278 } 263 } 279 264 280 X_c = 2.0*FlowF*sqr( ProjectileMass + Ta 265 X_c = 2.0*FlowF*sqr( ProjectileMass + TargetMass )/ECMSsqr; // mb rearrangement 281 266 282 X_d = 23.3/ECMSsqr; // mb anti-quark-qu 267 X_d = 23.3/ECMSsqr; // mb anti-quark-quark string creation 283 } 268 } 284 269 285 G4double Xann_on_P( 0.0), Xann_on_N( 0.0 ) 270 G4double Xann_on_P( 0.0), Xann_on_N( 0.0 ); 286 271 287 if ( ProjectilePDGcode == -2212 ) { 272 if ( ProjectilePDGcode == -2212 ) { // Pbar+P/N 288 Xann_on_P = X_a + X_b*5.0 + X_c*5.0 + X_ 273 Xann_on_P = X_a + X_b*5.0 + X_c*5.0 + X_d*6.0; 289 Xann_on_N = X_a + X_b*4.0 + X_c*4.0 + X_ 274 Xann_on_N = X_a + X_b*4.0 + X_c*4.0 + X_d*4.0; 290 } else if ( ProjectilePDGcode == -2112 ) { 275 } else if ( ProjectilePDGcode == -2112 ) { // NeutrBar+P/N 291 Xann_on_P = X_a + X_b*4.0 + X_c*4.0 + X_ 276 Xann_on_P = X_a + X_b*4.0 + X_c*4.0 + X_d*4.0; 292 Xann_on_N = X_a + X_b*5.0 + X_c*5.0 + X_ 277 Xann_on_N = X_a + X_b*5.0 + X_c*5.0 + X_d*6.0; 293 } else if ( ProjectilePDGcode == -3122 ) { 278 } else if ( ProjectilePDGcode == -3122 ) { // LambdaBar+P/N 294 Xann_on_P = X_a + X_b*3.0 + X_c*3.0 + X_ 279 Xann_on_P = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0; 295 Xann_on_N = X_a + X_b*3.0 + X_c*3.0 + X_ 280 Xann_on_N = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0; 296 } else if ( ProjectilePDGcode == -3112 ) { 281 } else if ( ProjectilePDGcode == -3112 ) { // Sigma-Bar+P/N 297 Xann_on_P = X_a + X_b*2.0 + X_c*2.0 + X_ 282 Xann_on_P = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0; 298 Xann_on_N = X_a + X_b*4.0 + X_c*4.0 + X_ 283 Xann_on_N = X_a + X_b*4.0 + X_c*4.0 + X_d*2.0; 299 } else if ( ProjectilePDGcode == -3212 ) { 284 } else if ( ProjectilePDGcode == -3212 ) { // Sigma0Bar+P/N 300 Xann_on_P = X_a + X_b*3.0 + X_c*3.0 + X_ 285 Xann_on_P = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0; 301 Xann_on_N = X_a + X_b*3.0 + X_c*3.0 + X_ 286 Xann_on_N = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0; 302 } else if ( ProjectilePDGcode == -3222 ) { 287 } else if ( ProjectilePDGcode == -3222 ) { // Sigma+Bar+P/N 303 Xann_on_P = X_a + X_b*4.0 + X_c*4.0 + X_ 288 Xann_on_P = X_a + X_b*4.0 + X_c*4.0 + X_d*2.0; 304 Xann_on_N = X_a + X_b*2.0 + X_c*2.0 + X_ 289 Xann_on_N = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0; 305 } else if ( ProjectilePDGcode == -3312 ) { 290 } else if ( ProjectilePDGcode == -3312 ) { // Xi-Bar+P/N 306 Xann_on_P = X_a + X_b*1.0 + X_c*1.0 + X_ 291 Xann_on_P = X_a + X_b*1.0 + X_c*1.0 + X_d*0.0; 307 Xann_on_N = X_a + X_b*2.0 + X_c*2.0 + X_ 292 Xann_on_N = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0; 308 } else if ( ProjectilePDGcode == -3322 ) { 293 } else if ( ProjectilePDGcode == -3322 ) { // Xi0Bar+P/N 309 Xann_on_P = X_a + X_b*2.0 + X_c*2.0 + X_ 294 Xann_on_P = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0; 310 Xann_on_N = X_a + X_b*1.0 + X_c*1.0 + X_ 295 Xann_on_N = X_a + X_b*1.0 + X_c*1.0 + X_d*0.0; 311 } else if ( ProjectilePDGcode == -3334 ) { 296 } else if ( ProjectilePDGcode == -3334 ) { // Omega-Bar+P/N 312 Xann_on_P = X_a + X_b*0.0 + X_c*0.0 + X_ 297 Xann_on_P = X_a + X_b*0.0 + X_c*0.0 + X_d*0.0; 313 Xann_on_N = X_a + X_b*0.0 + X_c*0.0 + X_ 298 Xann_on_N = X_a + X_b*0.0 + X_c*0.0 + X_d*0.0; 314 } else { 299 } else { 315 G4cout << "Unknown anti-baryon for FTF a 300 G4cout << "Unknown anti-baryon for FTF annihilation" << G4endl; 316 } 301 } 317 302 318 //G4cout << "Sum " << Xann_on_P < 303 //G4cout << "Sum " << Xann_on_P << G4endl; 319 304 320 if ( ! ProjectileIsNucleus ) { // Project 305 if ( ! ProjectileIsNucleus ) { // Projectile is anti-baryon 321 Xannihilation = ( NumberOfTargetProtons 306 Xannihilation = ( NumberOfTargetProtons * Xann_on_P + NumberOfTargetNeutrons * Xann_on_N ) 322 / NumberOfTargetNucleons 307 / NumberOfTargetNucleons; 323 } else { // Projectile is a nucleus 308 } else { // Projectile is a nucleus 324 Xannihilation = ( 309 Xannihilation = ( 325 ( AbsProjectileCharge 310 ( AbsProjectileCharge * NumberOfTargetProtons + 326 ( AbsProjectileBaryo 311 ( AbsProjectileBaryonNumber - AbsProjectileCharge ) * 327 NumberOfTargetNeutro 312 NumberOfTargetNeutrons ) * Xann_on_P 328 + 313 + 329 ( AbsProjectileCharge 314 ( AbsProjectileCharge * NumberOfTargetNeutrons + 330 ( AbsProjectileBaryo 315 ( AbsProjectileBaryonNumber - AbsProjectileCharge ) * 331 NumberOfTargetProton 316 NumberOfTargetProtons ) * Xann_on_N 332 ) / ( AbsProjectileBaryo 317 ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons ); 333 } 318 } 334 319 335 //G4double Xftf = 0.0; 320 //G4double Xftf = 0.0; 336 MesonProdThreshold = ProjectileMass + Targ 321 MesonProdThreshold = ProjectileMass + TargetMass + (0.14 + 0.08); // Mpi + DeltaE 337 if ( SqrtS > MesonProdThreshold ) { 322 if ( SqrtS > MesonProdThreshold ) { 338 Xftf = 36.0 * ( 1.0 - MesonProdThreshold 323 Xftf = 36.0 * ( 1.0 - MesonProdThreshold/SqrtS ); 339 } 324 } 340 325 341 Xtotal = Xelastic + Xannihilation + Xftf; 326 Xtotal = Xelastic + Xannihilation + Xftf; 342 327 343 #ifdef debugFTFparams 328 #ifdef debugFTFparams 344 G4cout << "Plab Xtotal, Xelastic Xinel Xf 329 G4cout << "Plab Xtotal, Xelastic Xinel Xftf " << Plab << " " << Xtotal << " " << Xelastic 345 << " " << Xtotal - Xelastic << " " 330 << " " << Xtotal - Xelastic << " " << Xtotal - Xelastic - Xannihilation << " (mb)"<< G4endl 346 << "Plab Xelastic/Xtotal, Xann/Xin 331 << "Plab Xelastic/Xtotal, Xann/Xin " << Plab << " " << Xelastic/Xtotal << " " 347 << Xannihilation/(Xtotal - Xelastic 332 << Xannihilation/(Xtotal - Xelastic) << G4endl; 348 #endif 333 #endif 349 334 350 } 335 } 351 336 352 if ( Xtotal == 0.0 ) { // Projectile is und 337 if ( Xtotal == 0.0 ) { // Projectile is undefined, Nucleon assumed 353 338 354 const G4ParticleDefinition* Proton = G4Pro 339 const G4ParticleDefinition* Proton = G4Proton::Proton(); 355 // Interaction on P 340 // Interaction on P 356 G4double XtotPP = csGGinstance->GetTotalIs 341 G4double XtotPP = csGGinstance->GetTotalIsotopeCrossSection(Proton, KineticEnergy, 1, 1); 357 G4double XelPP = csGGinstance->GetElastic 342 G4double XelPP = csGGinstance->GetElasticIsotopeCrossSection(Proton, KineticEnergy, 1, 1); 358 343 359 // Interaction on N 344 // Interaction on N 360 G4double XtotPN = csGGinstance->GetTotalIs 345 G4double XtotPN = csGGinstance->GetTotalIsotopeCrossSection(Proton, KineticEnergy, 0, 1); 361 G4double XelPN = csGGinstance->GetElastic 346 G4double XelPN = csGGinstance->GetElasticIsotopeCrossSection(Proton, KineticEnergy, 0, 1); 362 347 363 Xtotal = ( NumberOfTargetProtons * Xtot 348 Xtotal = ( NumberOfTargetProtons * XtotPP + NumberOfTargetNeutrons * XtotPN ) 364 / NumberOfTargetNucleons; 349 / NumberOfTargetNucleons; 365 Xelastic = ( NumberOfTargetProtons * XelP 350 Xelastic = ( NumberOfTargetProtons * XelPP + NumberOfTargetNeutrons * XelPN ) 366 / NumberOfTargetNucleons; 351 / NumberOfTargetNucleons; 367 Xannihilation = 0.0; 352 Xannihilation = 0.0; 368 Xtotal /= millibarn; 353 Xtotal /= millibarn; 369 Xelastic /= millibarn; 354 Xelastic /= millibarn; 370 }; 355 }; 371 356 372 // Geometrical parameters 357 // Geometrical parameters 373 SetTotalCrossSection( Xtotal ); 358 SetTotalCrossSection( Xtotal ); 374 SetElasticCrossSection( Xelastic ); << 359 SetElastisCrossSection( Xelastic ); 375 SetInelasticCrossSection( Xtotal - Xelastic 360 SetInelasticCrossSection( Xtotal - Xelastic ); 376 361 377 // Interactions with elastic and inelastic c 362 // Interactions with elastic and inelastic collisions 378 SetProbabilityOfElasticScatt( Xtotal, Xelast 363 SetProbabilityOfElasticScatt( Xtotal, Xelastic ); 379 364 380 SetRadiusOfHNinteractions2( Xtotal/pi/10.0 ) 365 SetRadiusOfHNinteractions2( Xtotal/pi/10.0 ); 381 366 382 if ( ( Xtotal - Xelastic ) == 0.0 ) { 367 if ( ( Xtotal - Xelastic ) == 0.0 ) { 383 SetProbabilityOfAnnihilation( 0.0 ); 368 SetProbabilityOfAnnihilation( 0.0 ); 384 } else { 369 } else { 385 SetProbabilityOfAnnihilation( Xannihilatio 370 SetProbabilityOfAnnihilation( Xannihilation / (Xtotal - Xelastic) ); 386 } 371 } 387 372 388 if(Xelastic > 0.0) { 373 if(Xelastic > 0.0) { 389 SetSlope( Xtotal*Xtotal/16.0/pi/Xelastic/0 374 SetSlope( Xtotal*Xtotal/16.0/pi/Xelastic/0.3894 );// Slope parameter of elastic scattering 390 375 // (GeV/c)^(-2)) 391 // Parameters of elastic scattering 376 // Parameters of elastic scattering 392 // Gaussian parametrization of elastic sca 377 // Gaussian parametrization of elastic scattering amplitude assumed 393 SetAvaragePt2ofElasticScattering( 1.0/( Xt 378 SetAvaragePt2ofElasticScattering( 1.0/( Xtotal*Xtotal/16.0/pi/Xelastic/0.3894 )*GeV*GeV ); 394 } else { 379 } else { 395 SetSlope(1.0); 380 SetSlope(1.0); 396 SetAvaragePt2ofElasticScattering( 0.0); 381 SetAvaragePt2ofElasticScattering( 0.0); 397 } 382 } 398 SetGamma0( GetSlope()*Xtotal/10.0/2.0/pi ); 383 SetGamma0( GetSlope()*Xtotal/10.0/2.0/pi ); 399 384 400 G4double Xinel = Xtotal - Xelastic; 385 G4double Xinel = Xtotal - Xelastic; 401 386 402 #ifdef debugFTFparams 387 #ifdef debugFTFparams 403 G4cout<< "Slope of hN elastic scattering" << 388 G4cout<< "Slope of hN elastic scattering" << GetSlope() << G4endl; 404 G4cout << "AvaragePt2ofElasticScattering " < 389 G4cout << "AvaragePt2ofElasticScattering " << GetAvaragePt2ofElasticScattering() << G4endl; 405 G4cout<<"Parameters of excitation for projec 390 G4cout<<"Parameters of excitation for projectile "<<ProjectilePDGcode<< G4endl; 406 #endif 391 #endif 407 392 408 if ( (ProjectilePDGcode == 2212) || (Project 393 if ( (ProjectilePDGcode == 2212) || (ProjectilePDGcode == 2112) ) { // Projectile is proton or neutron 409 << 394 410 const G4int indexTune = G4FTFTunings::Inst << 411 << 412 // A process probability is parameterized 395 // A process probability is parameterized as Prob = A_1*exp(-A_2*y) + A_3*exp(-A_4*y) + A_top 413 // y is a rapidity of a partcle in the tar 396 // y is a rapidity of a partcle in the target nucleus. Ymin is a minimal rapidity below it X=0 414 397 415 // Proc# A1 B1 A2 398 // Proc# A1 B1 A2 B2 A3 Atop Ymin 416 /* original hadr-string-diff-V10-03-07 (si 399 /* original hadr-string-diff-V10-03-07 (similar to 10.3.x) 417 SetParams( 0, 13.71, 1.75, -2 400 SetParams( 0, 13.71, 1.75, -214.5, 4.25, 0.0, 0.5 , 1.1 ); // Qexchange without Exc. 418 SetParams( 1, 25.0, 1.0, -5 401 SetParams( 1, 25.0, 1.0, -50.34, 1.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc. 419 SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*1 402 SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93); // Projectile diffraction 420 SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*1 403 SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93); // Target diffraction 421 SetParams( 4, 1.0, 0.0 , -2 404 SetParams( 4, 1.0, 0.0 , -2.01 , 0.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc. Additional multiplier 422 */ 405 */ 423 406 424 // Proc# 407 // Proc# 425 SetParams( 0, fArrayParCollBaryonProj[inde << 408 SetParams( 0, fParCollBaryonProj.GetProc0A1(), fParCollBaryonProj.GetProc0B1(), 426 fArrayParCollBaryonProj[indexTune] << 409 fParCollBaryonProj.GetProc0A2(), fParCollBaryonProj.GetProc0B2(), 427 fArrayParCollBaryonProj[indexTune].GetPr << 410 fParCollBaryonProj.GetProc0A3(), fParCollBaryonProj.GetProc0Atop(), 428 fArrayParCollBaryonProj[indexTune] << 411 fParCollBaryonProj.GetProc0Ymin() ); // Qexchange without Exc. 429 fArrayParCollBaryonProj[indexTune].GetPr << 412 SetParams( 1, fParCollBaryonProj.GetProc1A1(), fParCollBaryonProj.GetProc1B1(), 430 fArrayParCollBaryonProj[indexTune] << 413 fParCollBaryonProj.GetProc1A2(), fParCollBaryonProj.GetProc1B2(), 431 fArrayParCollBaryonProj[indexTune].GetPr << 414 fParCollBaryonProj.GetProc1A3(), fParCollBaryonProj.GetProc1Atop(), 432 SetParams( 1, fArrayParCollBaryonProj[inde << 415 fParCollBaryonProj.GetProc1Ymin() ); // Qexchange with Exc. 433 fArrayParCollBaryonProj[indexTune] << 434 fArrayParCollBaryonProj[indexTune].GetPr << 435 fArrayParCollBaryonProj[indexTune] << 436 fArrayParCollBaryonProj[indexTune].GetPr << 437 fArrayParCollBaryonProj[indexTune] << 438 fArrayParCollBaryonProj[indexTune].GetPr << 439 if ( Xinel > 0.0 ) { 416 if ( Xinel > 0.0 ) { 440 SetParams( 2, 6.0/Xinel, 0.0, -6.0/Xinel << 417 SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93 ); // Projectile diffraction 441 SetParams( 3, 6.0/Xinel, 0.0, -6.0/Xinel << 418 SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93 ); // Target diffraction 442 419 443 SetParams( 4, fArrayParCollBaryonProj[in << 420 SetParams( 4, fParCollBaryonProj.GetProc4A1(), fParCollBaryonProj.GetProc4B1(), 444 fArrayParCollBaryonProj[indexTune].Get << 421 fParCollBaryonProj.GetProc4A2(), fParCollBaryonProj.GetProc4B2(), 445 fArrayParCollBaryonProj[indexTune].Get << 422 fParCollBaryonProj.GetProc4A3(), fParCollBaryonProj.GetProc4Atop(), 446 fArrayParCollBaryonProj[indexTune].Get << 423 fParCollBaryonProj.GetProc4Ymin() ); // Qexchange with Exc. Additional multiplier 447 fArrayParCollBaryonProj[indexTune].Get << 448 fArrayParCollBaryonProj[indexTune].Get << 449 fArrayParCollBaryonProj[indexTune].Get << 450 } else { // if Xinel=0., zero everything 424 } else { // if Xinel=0., zero everything out (obviously) 451 SetParams( 2, 0.0, 0.0, 0.0, 0.0, 0.0, 0 << 425 SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0); 452 SetParams( 3, 0.0, 0.0, 0.0, 0.0, 0.0, 0 << 426 SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0); 453 SetParams( 4, 0.0, 0.0, 0.0, 0.0, 0.0, 0 << 427 SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0); 454 } 428 } 455 429 456 if ( (AbsProjectileBaryonNumber > 10 || Nu << 430 if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) { >> 431 // 457 // It is not decided what to do with dif 432 // It is not decided what to do with diffraction dissociation in Had-Nucl and Nucl-Nucl interactions 458 // For the moment both ProjDiffDisso & T 433 // For the moment both ProjDiffDisso & TgtDiffDisso for A > 10 are set to false, 459 // so both projectile and target diffrac 434 // so both projectile and target diffraction are turned OFF 460 if ( ! fArrayParCollBaryonProj[indexTune << 435 // 461 SetParams( 2, 0.0, 0.0, 0.0, 0.0, 0.0 << 436 if ( ! fParCollBaryonProj.IsProjDiffDissociation() ) 462 if ( ! fArrayParCollBaryonProj[indexTune << 437 SetParams( 2, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction 463 SetParams( 3, 0.0, 0.0, 0.0, 0.0, 0.0 << 438 if ( ! fParCollBaryonProj.IsTgtDiffDissociation() ) >> 439 SetParams( 3, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction 464 } 440 } 465 441 466 SetDeltaProbAtQuarkExchange( fArrayParColl << 442 SetDeltaProbAtQuarkExchange( fParCollBaryonProj.GetDeltaProbAtQuarkExchange() ); 467 443 468 if ( NumberOfTargetNucleons > 26 ) { 444 if ( NumberOfTargetNucleons > 26 ) { 469 SetProbOfSameQuarkExchange( 1.0 ); 445 SetProbOfSameQuarkExchange( 1.0 ); 470 } else { 446 } else { 471 SetProbOfSameQuarkExchange( fArrayParCol << 447 SetProbOfSameQuarkExchange( fParCollBaryonProj.GetProbOfSameQuarkExchange() ); 472 } 448 } 473 449 474 SetProjMinDiffMass( fArrayParCollBaryon << 450 SetProjMinDiffMass( fParCollBaryonProj.GetProjMinDiffMass() ); // GeV 475 SetProjMinNonDiffMass( fArrayParCollBaryon << 451 SetProjMinNonDiffMass( fParCollBaryonProj.GetProjMinNonDiffMass() ); // GeV 476 452 477 SetTarMinDiffMass( fArrayParCollBaryon << 453 SetTarMinDiffMass( fParCollBaryonProj.GetTgtMinDiffMass() ); // GeV 478 SetTarMinNonDiffMass( fArrayParCollBaryon << 454 SetTarMinNonDiffMass( fParCollBaryonProj.GetTgtMinNonDiffMass() ); // GeV 479 455 480 SetAveragePt2( fArrayParCollBaryon << 456 SetAveragePt2( fParCollBaryonProj.GetAveragePt2() ); // GeV^2 481 SetProbLogDistrPrD( fArrayParCollBaryon << 457 SetProbLogDistrPrD( fParCollBaryonProj.GetProbLogDistrPrD() ); 482 SetProbLogDistr( fArrayParCollBaryon << 458 SetProbLogDistr( fParCollBaryonProj.GetProbLogDistr() ); 483 459 484 } else if ( ProjectilePDGcode == -2212 || 460 } else if ( ProjectilePDGcode == -2212 || ProjectilePDGcode == -2112 ) { // Projectile is anti_proton or anti_neutron 485 << 461 486 // Below, in the call to the G4FTFTunings: << 487 // as projectile, instead of the real one, << 488 // we assume the same treatment for anti_p << 489 // whereas all other parameters for anti_p << 490 const G4int indexTune = G4FTFTunings::Inst << 491 << 492 // Proc# A1 B1 A2 462 // Proc# A1 B1 A2 B2 A3 Atop Ymin 493 SetParams( 0, 0.0 , 0.0 , 0 463 SetParams( 0, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , 1000.0 ); // Qexchange without Exc. 494 SetParams( 1, 0.0 , 0.0 , 0 464 SetParams( 1, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , 1000.0 ); // Qexchange with Exc. 495 if ( Xinel > 0.) { 465 if ( Xinel > 0.) { 496 SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel << 466 SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93 ); // Projectile diffraction 497 SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel << 467 SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93 ); // Target diffraction 498 SetParams( 4, 1.0, 0.0 , << 468 SetParams( 4, 1.0, 0.0 , 0.0, 0.0 , 0.0, 0.0 , 0.93 ); // Qexchange with Exc. Additional multiply 499 } else { 469 } else { 500 SetParams( 2, 0.0, 0.0, 0.0, 0.0, 0.0, 0 << 470 SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0 ); 501 SetParams( 3, 0.0, 0.0, 0.0, 0.0, 0.0, 0 << 471 SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0 ); 502 SetParams( 4, 0.0, 0.0, 0.0, 0.0, 0.0, 0 << 472 SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0 ); 503 } 473 } 504 474 505 if ( AbsProjectileBaryonNumber > 10 || N 475 if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) { >> 476 // 506 // It is not decided what to do with dif 477 // It is not decided what to do with diffraction dissociation in Had-Nucl and Nucl-Nucl interactions 507 // For the moment both ProjDiffDisso & T 478 // For the moment both ProjDiffDisso & TgtDiffDisso are set to false, 508 // so both projectile and target diffrac 479 // so both projectile and target diffraction are turned OFF 509 if ( ! fArrayParCollBaryonProj[indexTune << 480 // >> 481 if ( ! fParCollBaryonProj.IsProjDiffDissociation() ) 510 SetParams( 2, 0.0, 0.0 , 482 SetParams( 2, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction 511 if ( ! fArrayParCollBaryonProj[indexTune << 483 if ( ! fParCollBaryonProj.IsTgtDiffDissociation() ) 512 SetParams( 3, 0.0, 0.0 , 484 SetParams( 3, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction 513 } 485 } 514 486 515 SetDeltaProbAtQuarkExchange( 0.0 ); 487 SetDeltaProbAtQuarkExchange( 0.0 ); 516 SetProbOfSameQuarkExchange( 0.0 ); 488 SetProbOfSameQuarkExchange( 0.0 ); 517 SetProjMinDiffMass( ProjectileMass + 0.22 489 SetProjMinDiffMass( ProjectileMass + 0.22 ); // GeV 518 SetProjMinNonDiffMass( ProjectileMass + 0. 490 SetProjMinNonDiffMass( ProjectileMass + 0.22 ); // GeV 519 SetTarMinDiffMass( TargetMass + 0.22 ); 491 SetTarMinDiffMass( TargetMass + 0.22 ); // GeV 520 SetTarMinNonDiffMass( TargetMass + 0.22 ); 492 SetTarMinNonDiffMass( TargetMass + 0.22 ); // GeV 521 SetAveragePt2( 0.3 ); 493 SetAveragePt2( 0.3 ); // GeV^2 522 SetProbLogDistrPrD( 0.55 ); 494 SetProbLogDistrPrD( 0.55 ); 523 SetProbLogDistr( 0.55 ); 495 SetProbLogDistr( 0.55 ); 524 496 525 } else if ( ProjectileabsPDGcode == 211 || << 497 } else if ( ProjectileabsPDGcode == 211 || ProjectilePDGcode == 111 ) { // Projectile is Pion 526 << 498 527 const G4int indexTune = G4FTFTunings::Inst << 528 << 529 // Proc# A1 B1 A2 499 // Proc# A1 B1 A2 B2 A3 Atop Ymin 530 /* --> original code 500 /* --> original code 531 SetParams( 0, 150.0, 1.8 , -247. 501 SetParams( 0, 150.0, 1.8 , -247.3, 2.3, 0., 1. , 2.3 ); 532 SetParams( 1, 5.77, 0.6 , -5.7 502 SetParams( 1, 5.77, 0.6 , -5.77, 0.8, 0., 0. , 0.0 ); 533 SetParams( 2, 2.27, 0.5 , -98052. 503 SetParams( 2, 2.27, 0.5 , -98052.0, 4.0, 0., 0. , 3.0 ); 534 SetParams( 3, 7.0, 0.9, -85.2 504 SetParams( 3, 7.0, 0.9, -85.28, 1.9, 0.08, 0. , 2.2 ); 535 SetParams( 4, 1.0, 0.0 , -11.0 505 SetParams( 4, 1.0, 0.0 , -11.02, 1.0, 0.0, 0. , 2.4 ); // Qexchange with Exc. Additional multiply 536 */ 506 */ 537 // Proc# 507 // Proc# 538 SetParams( 0, fArrayParCollPionProj[indexT << 508 SetParams( 0, fParCollPionProj.GetProc0A1(), fParCollPionProj.GetProc0B1(), 539 fArrayParCollPionProj[indexTune].G << 509 fParCollPionProj.GetProc0A2(), fParCollPionProj.GetProc0B2(), 540 fArrayParCollPionProj[indexTune].GetProc << 510 fParCollPionProj.GetProc0A3(), fParCollPionProj.GetProc0Atop(), 541 fArrayParCollPionProj[indexTune].G << 511 fParCollPionProj.GetProc0Ymin() ); // Qexchange without Exc. 542 fArrayParCollPionProj[indexTune].GetProc << 512 SetParams( 1, fParCollPionProj.GetProc1A1(), fParCollPionProj.GetProc1B1(), 543 fArrayParCollPionProj[indexTune].G << 513 fParCollPionProj.GetProc1A2(), fParCollPionProj.GetProc1B2(), 544 fArrayParCollPionProj[indexTune].GetProc << 514 fParCollPionProj.GetProc1A3(), fParCollPionProj.GetProc1Atop(), 545 SetParams( 1, fArrayParCollPionProj[indexT << 515 fParCollPionProj.GetProc1Ymin() ); // Qexchange with Exc. 546 fArrayParCollPionProj[indexTune].G << 516 SetParams( 2, fParCollPionProj.GetProc2A1(), fParCollPionProj.GetProc2B1(), 547 fArrayParCollPionProj[indexTune].GetProc << 517 fParCollPionProj.GetProc2A2(), fParCollPionProj.GetProc2B2(), 548 fArrayParCollPionProj[indexTune].G << 518 fParCollPionProj.GetProc2A3(), fParCollPionProj.GetProc2Atop(), 549 fArrayParCollPionProj[indexTune].GetProc << 519 fParCollPionProj.GetProc2Ymin() ); // Projectile diffraction 550 fArrayParCollPionProj[indexTune].G << 520 SetParams( 3, fParCollPionProj.GetProc3A1(), fParCollPionProj.GetProc3B1(), 551 fArrayParCollPionProj[indexTune].GetProc << 521 fParCollPionProj.GetProc3A2(), fParCollPionProj.GetProc3B2(), 552 SetParams( 2, fArrayParCollPionProj[indexT << 522 fParCollPionProj.GetProc3A3(), fParCollPionProj.GetProc3Atop(), 553 fArrayParCollPionProj[indexTune].G << 523 fParCollPionProj.GetProc3Ymin() ); // Target diffraction 554 fArrayParCollPionProj[indexTune].GetProc << 524 SetParams( 4, fParCollPionProj.GetProc4A1(), fParCollPionProj.GetProc4B1(), 555 fArrayParCollPionProj[indexTune].G << 525 fParCollPionProj.GetProc4A2(), fParCollPionProj.GetProc4B2(), 556 fArrayParCollPionProj[indexTune].GetProc << 526 fParCollPionProj.GetProc4A3(), fParCollPionProj.GetProc4Atop(), 557 fArrayParCollPionProj[indexTune].G << 527 fParCollPionProj.GetProc4Ymin() ); // Qexchange with Exc. Additional multiply 558 fArrayParCollPionProj[indexTune].GetProc << 559 SetParams( 3, fArrayParCollPionProj[indexT << 560 fArrayParCollPionProj[indexTune].G << 561 fArrayParCollPionProj[indexTune].GetProc << 562 fArrayParCollPionProj[indexTune].G << 563 fArrayParCollPionProj[indexTune].GetProc << 564 fArrayParCollPionProj[indexTune].G << 565 fArrayParCollPionProj[indexTune].GetProc << 566 SetParams( 4, fArrayParCollPionProj[indexT << 567 fArrayParCollPionProj[indexTune].G << 568 fArrayParCollPionProj[indexTune].GetProc << 569 fArrayParCollPionProj[indexTune].G << 570 fArrayParCollPionProj[indexTune].GetProc << 571 fArrayParCollPionProj[indexTune].G << 572 fArrayParCollPionProj[indexTune].GetProc << 573 528 574 // NOTE: how can it be |ProjectileBaryonNu 529 // NOTE: how can it be |ProjectileBaryonNumber| > 10 if projectile is a pion ??? 575 // 530 // 576 if ( AbsProjectileBaryonNumber > 10 || N 531 if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) { 577 if ( ! fArrayParCollPionProj[indexTune] << 532 if ( ! fParCollPionProj.IsProjDiffDissociation() ) 578 SetParams( 2, 0.0 , 0.0 , 533 SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction 579 if ( ! fArrayParCollPionProj[indexTune] << 534 if ( ! fParCollPionProj.IsTgtDiffDissociation() ) 580 SetParams( 3, 0.0 , 0.0 , 535 SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction 581 } 536 } 582 537 583 /* original code --> 538 /* original code --> 584 SetDeltaProbAtQuarkExchange( 0.56 ); 539 SetDeltaProbAtQuarkExchange( 0.56 ); 585 SetProjMinDiffMass( 1.0 ); // G 540 SetProjMinDiffMass( 1.0 ); // GeV 586 SetProjMinNonDiffMass( 1.0 ); // G 541 SetProjMinNonDiffMass( 1.0 ); // GeV 587 SetTarMinDiffMass( 1.16 ); // G 542 SetTarMinDiffMass( 1.16 ); // GeV 588 SetTarMinNonDiffMass( 1.16 ); // G 543 SetTarMinNonDiffMass( 1.16 ); // GeV 589 SetAveragePt2( 0.3 ); // G 544 SetAveragePt2( 0.3 ); // GeV^2 590 SetProbLogDistrPrD( 0.55 ); 545 SetProbLogDistrPrD( 0.55 ); 591 SetProbLogDistr( 0.55 ); 546 SetProbLogDistr( 0.55 ); 592 */ 547 */ 593 548 594 // JVY update, Aug.8, 2018 --> Feb.14, 201 549 // JVY update, Aug.8, 2018 --> Feb.14, 2019 595 // 550 // 596 SetDeltaProbAtQuarkExchange( fArrayParColl << 551 SetDeltaProbAtQuarkExchange( fParCollPionProj.GetDeltaProbAtQuarkExchange() ); 597 SetProjMinDiffMass( fArrayParCollPionProj[ << 552 SetProjMinDiffMass( fParCollPionProj.GetProjMinDiffMass() ); // GeV 598 SetProjMinNonDiffMass( fArrayParCollPionPr << 553 SetProjMinNonDiffMass( fParCollPionProj.GetProjMinNonDiffMass() ); // GeV 599 SetTarMinDiffMass( fArrayParCollPionProj[i << 554 SetTarMinDiffMass( fParCollPionProj.GetTgtMinDiffMass() ); // GeV 600 SetTarMinNonDiffMass( fArrayParCollPionPro << 555 SetTarMinNonDiffMass( fParCollPionProj.GetTgtMinNonDiffMass() ); // GeV 601 SetAveragePt2( fArrayParCollPionProj[index << 556 SetAveragePt2( fParCollPionProj.GetAveragePt2() ); // GeV^2 602 SetProbLogDistrPrD( fArrayParCollPionProj[ << 557 SetProbLogDistrPrD( fParCollPionProj.GetProbLogDistrPrD() ); 603 SetProbLogDistr( fArrayParCollPionProj[ind << 558 SetProbLogDistr( fParCollPionProj.GetProbLogDistr() ); 604 559 605 // ---> end update 560 // ---> end update 606 561 607 } else if ( ProjectileabsPDGcode == 321 || 562 } else if ( ProjectileabsPDGcode == 321 || ProjectileabsPDGcode == 311 || 608 ProjectilePDGcode == 130 || 563 ProjectilePDGcode == 130 || ProjectilePDGcode == 310 ) { // Projectile is Kaon 609 564 610 // Proc# A1 B1 A2 565 // Proc# A1 B1 A2 B2 A3 Atop Ymin 611 SetParams( 0, 60.0 , 2.5 , 0 566 SetParams( 0, 60.0 , 2.5 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Qexchange without Exc. 612 SetParams( 1, 6.0 , 1.0 , -24 567 SetParams( 1, 6.0 , 1.0 , -24.33 , 2.0 , 0.0, 0.0 , 1.40 ); // Qexchange with Exc. 613 SetParams( 2, 2.76, 1.2 , -22 568 SetParams( 2, 2.76, 1.2 , -22.5 , 2.7 ,0.04, 0.0 , 1.40 ); // Projectile diffraction 614 SetParams( 3, 1.09, 0.5 , -8 569 SetParams( 3, 1.09, 0.5 , -8.88 , 2. ,0.05, 0.0 , 1.40 ); // Target diffraction 615 SetParams( 4, 1.0, 0.0 , 0 570 SetParams( 4, 1.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , 0.93 ); // Qexchange with Exc. Additional multiply 616 if ( AbsProjectileBaryonNumber > 10 || N 571 if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) { 617 SetParams( 2, 0.0 , 0.0 , 572 SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction 618 SetParams( 3, 0.0 , 0.0 , 573 SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction 619 } 574 } 620 575 621 SetDeltaProbAtQuarkExchange( 0.6 ); 576 SetDeltaProbAtQuarkExchange( 0.6 ); 622 SetProjMinDiffMass( 0.7 ); // GeV 577 SetProjMinDiffMass( 0.7 ); // GeV 623 SetProjMinNonDiffMass( 0.7 ); // GeV 578 SetProjMinNonDiffMass( 0.7 ); // GeV 624 SetTarMinDiffMass( 1.16 ); // GeV 579 SetTarMinDiffMass( 1.16 ); // GeV 625 SetTarMinNonDiffMass( 1.16 ); // GeV 580 SetTarMinNonDiffMass( 1.16 ); // GeV 626 SetAveragePt2( 0.3 ); // GeV^2 581 SetAveragePt2( 0.3 ); // GeV^2 627 SetProbLogDistrPrD( 0.55 ); 582 SetProbLogDistrPrD( 0.55 ); 628 SetProbLogDistr( 0.55 ); 583 SetProbLogDistr( 0.55 ); 629 584 630 } else { // Projectile is not p, n, Pi0, Pi 585 } else { // Projectile is not p, n, Pi0, Pi+, Pi-, K+, K-, K0 or their anti-particles 631 586 632 if ( ProjectileabsPDGcode > 1000 ) { // T 587 if ( ProjectileabsPDGcode > 1000 ) { // The projectile is a baryon as P or N 633 // Proc# A1 B1 588 // Proc# A1 B1 A2 B2 A3 Atop Ymin 634 SetParams( 0, 13.71, 1.75, 589 SetParams( 0, 13.71, 1.75, -30.69, 3.0 , 0.0, 1.0 , 0.93 ); // Qexchange without Exc. 635 SetParams( 1, 25.0, 1.0, - 590 SetParams( 1, 25.0, 1.0, -50.34, 1.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc. 636 if ( Xinel > 0.) { 591 if ( Xinel > 0.) { 637 SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xin 592 SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93); // Projectile diffraction 638 SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xin 593 SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93); // Target diffraction 639 SetParams( 4, 1.0, 0.0 , 594 SetParams( 4, 1.0, 0.0 , -2.01 , 0.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc. Additional multiply 640 } else { 595 } else { 641 SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0 596 SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0); 642 SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0 597 SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0); 643 SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0 598 SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0); 644 } 599 } 645 600 646 } else { // The projectile is a meson as 601 } else { // The projectile is a meson as K+-0 647 // Proc# A1 B1 602 // Proc# A1 B1 A2 B2 A3 Atop Ymin 648 SetParams( 0, 60.0 , 2.5 , 603 SetParams( 0, 60.0 , 2.5 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Qexchange without Exc. 649 SetParams( 1, 6.0 , 1.0 , - 604 SetParams( 1, 6.0 , 1.0 , -24.33 , 2.0 , 0.0, 0.0 , 1.40 ); // Qexchange with Exc. 650 SetParams( 2, 2.76, 1.2 , - 605 SetParams( 2, 2.76, 1.2 , -22.5 , 2.7 ,0.04, 0.0 , 1.40 ); // Projectile diffraction 651 SetParams( 3, 1.09, 0.5 , 606 SetParams( 3, 1.09, 0.5 , -8.88 , 2. ,0.05, 0.0 , 1.40 ); // Target diffraction 652 SetParams( 4, 1.0, 0.0 , 607 SetParams( 4, 1.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , 0.93 ); // Qexchange with Exc. Additional multiply 653 } 608 } 654 609 655 if ( AbsProjectileBaryonNumber > 10 || N 610 if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) { 656 SetParams( 2, 0.0 , 0.0 , 611 SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction 657 SetParams( 3, 0.0 , 0.0 , 612 SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction 658 } 613 } 659 614 660 SetDeltaProbAtQuarkExchange( 0.0 ); 615 SetDeltaProbAtQuarkExchange( 0.0 ); 661 SetProbOfSameQuarkExchange( 0.0 ); 616 SetProbOfSameQuarkExchange( 0.0 ); 662 617 663 SetProjMinDiffMass( GetMinMass(particle 618 SetProjMinDiffMass( GetMinMass(particle)/GeV ); 664 SetProjMinNonDiffMass( GetMinMass(particle 619 SetProjMinNonDiffMass( GetMinMass(particle)/GeV ); 665 620 666 const G4ParticleDefinition* Neutron = G4Ne 621 const G4ParticleDefinition* Neutron = G4Neutron::Neutron(); 667 SetTarMinDiffMass( GetMinMass(Neutron)/ 622 SetTarMinDiffMass( GetMinMass(Neutron)/GeV ); 668 SetTarMinNonDiffMass( GetMinMass(Neutron)/ 623 SetTarMinNonDiffMass( GetMinMass(Neutron)/GeV ); 669 624 670 SetAveragePt2( 0.3 ); // GeV^2 625 SetAveragePt2( 0.3 ); // GeV^2 671 SetProbLogDistrPrD( 0.55 ); 626 SetProbLogDistrPrD( 0.55 ); 672 SetProbLogDistr( 0.55 ); 627 SetProbLogDistr( 0.55 ); 673 628 674 } 629 } 675 630 676 #ifdef debugFTFparams 631 #ifdef debugFTFparams 677 G4cout<<"DeltaProbAtQuarkExchange "<< GetDel 632 G4cout<<"DeltaProbAtQuarkExchange "<< GetDeltaProbAtQuarkExchange() << G4endl; 678 G4cout<<"ProbOfSameQuarkExchange "<< GetPro 633 G4cout<<"ProbOfSameQuarkExchange "<< GetProbOfSameQuarkExchange() << G4endl; 679 G4cout<<"ProjMinDiffMass "<< GetPro 634 G4cout<<"ProjMinDiffMass "<< GetProjMinDiffMass()/GeV <<" GeV"<< G4endl; 680 G4cout<<"ProjMinNonDiffMass "<< GetPro 635 G4cout<<"ProjMinNonDiffMass "<< GetProjMinNonDiffMass() <<" GeV"<< G4endl; 681 G4cout<<"TarMinDiffMass "<< GetTar 636 G4cout<<"TarMinDiffMass "<< GetTarMinDiffMass() <<" GeV"<< G4endl; 682 G4cout<<"TarMinNonDiffMass "<< GetTar 637 G4cout<<"TarMinNonDiffMass "<< GetTarMinNonDiffMass() <<" GeV"<< G4endl; 683 G4cout<<"AveragePt2 "<< GetAve 638 G4cout<<"AveragePt2 "<< GetAveragePt2() <<" GeV^2"<< G4endl; 684 G4cout<<"ProbLogDistrPrD "<< GetPro 639 G4cout<<"ProbLogDistrPrD "<< GetProbLogDistrPrD() << G4endl; 685 G4cout<<"ProbLogDistrTrD "<< GetPro 640 G4cout<<"ProbLogDistrTrD "<< GetProbLogDistr() << G4endl; 686 #endif 641 #endif 687 642 688 // Set parameters of nuclear destruction 643 // Set parameters of nuclear destruction 689 644 690 if ( ProjectileabsPDGcode < 1000 ) { // Mes 645 if ( ProjectileabsPDGcode < 1000 ) { // Meson projectile 691 646 692 const G4int indexTune = G4FTFTunings::Inst << 693 << 694 SetMaxNumberOfCollisions( Plab, 2.0 ); // 647 SetMaxNumberOfCollisions( Plab, 2.0 ); // 3.0 ) 695 // 648 // 696 // target destruction 649 // target destruction 697 // 650 // 698 /* original code ---> 651 /* original code ---> 699 SetCofNuclearDestruction( 0.00481*G4double 652 SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)* 700 G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + 653 G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) ); 701 654 702 SetR2ofNuclearDestruction( 1.5*fermi*fermi 655 SetR2ofNuclearDestruction( 1.5*fermi*fermi ); 703 SetDofNuclearDestruction( 0.3 ); 656 SetDofNuclearDestruction( 0.3 ); 704 SetPt2ofNuclearDestruction( ( 0.035 + 0.04 657 SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/ 705 ( 1.0 658 ( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV ); 706 SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV 659 SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV ); 707 SetExcitationEnergyPerWoundedNucleon( 40.0 660 SetExcitationEnergyPerWoundedNucleon( 40.0*MeV ); 708 */ 661 */ 709 double coeff = fArrayParCollMesonProj[inde << 662 double coeff = fParCollMesonProj.GetNuclearTgtDestructP1(); 710 // 663 // 711 // NOTE (JVY): Set this switch to false/tr 664 // NOTE (JVY): Set this switch to false/true on line 138 712 // 665 // 713 if ( fArrayParCollMesonProj[indexTune].IsN << 666 if ( fParCollMesonProj.IsNuclearTgtDestructP1_ADEP() ) 714 { 667 { 715 coeff *= G4double(NumberOfTargetNucleons 668 coeff *= G4double(NumberOfTargetNucleons); 716 } 669 } 717 double exfactor = G4Exp( fArrayParCollMeso << 670 double exfactor = G4Exp( fParCollMesonProj.GetNuclearTgtDestructP2() 718 * (Ylab-fArrayParCo << 671 * (Ylab-fParCollMesonProj.GetNuclearTgtDestructP3()) ); 719 coeff *= exfactor; 672 coeff *= exfactor; 720 coeff /= ( 1.+ exfactor ); 673 coeff /= ( 1.+ exfactor ); 721 674 722 SetCofNuclearDestruction( coeff ); 675 SetCofNuclearDestruction( coeff ); 723 676 724 SetR2ofNuclearDestruction( fArrayParCollMe << 677 SetR2ofNuclearDestruction( fParCollMesonProj.GetR2ofNuclearDestruct() ); 725 SetDofNuclearDestruction( fArrayParCollMes << 678 SetDofNuclearDestruction( fParCollMesonProj.GetDofNuclearDestruct() ); 726 coeff = fArrayParCollMesonProj[indexTune]. << 679 coeff = fParCollMesonProj.GetPt2NuclearDestructP2(); 727 exfactor = G4Exp( fArrayParCollMesonProj[i << 680 exfactor = G4Exp( fParCollMesonProj.GetPt2NuclearDestructP3() 728 * (Ylab-fArrayParCollMeson << 681 * (Ylab-fParCollMesonProj.GetPt2NuclearDestructP4()) ); 729 coeff *= exfactor; 682 coeff *= exfactor; 730 coeff /= ( 1. + exfactor ); 683 coeff /= ( 1. + exfactor ); 731 SetPt2ofNuclearDestruction( (fArrayParColl << 684 SetPt2ofNuclearDestruction( (fParCollMesonProj.GetPt2NuclearDestructP1()+coeff)*CLHEP::GeV*CLHEP::GeV ); 732 685 733 SetMaxPt2ofNuclearDestruction( fArrayParCo << 686 SetMaxPt2ofNuclearDestruction( fParCollMesonProj.GetMaxPt2ofNuclearDestruct() ); 734 SetExcitationEnergyPerWoundedNucleon( fArr << 687 SetExcitationEnergyPerWoundedNucleon( fParCollMesonProj.GetExciEnergyPerWoundedNucleon() ); 735 688 736 } else if ( ProjectilePDGcode == -2212 || 689 } else if ( ProjectilePDGcode == -2212 || ProjectilePDGcode == -2112 ) { // for anti-baryon projectile 737 690 738 SetMaxNumberOfCollisions( Plab, 2.0 ); 691 SetMaxNumberOfCollisions( Plab, 2.0 ); 739 692 740 SetCofNuclearDestruction( 0.00481*G4double 693 SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)* 741 G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G 694 G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) ); 742 SetR2ofNuclearDestruction( 1.5*fermi*fermi 695 SetR2ofNuclearDestruction( 1.5*fermi*fermi ); 743 SetDofNuclearDestruction( 0.3 ); 696 SetDofNuclearDestruction( 0.3 ); 744 SetPt2ofNuclearDestruction( ( 0.035 + 0.04 697 SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/ 745 ( 1.0 698 ( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV ); 746 SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV 699 SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV ); 747 SetExcitationEnergyPerWoundedNucleon( 40.0 700 SetExcitationEnergyPerWoundedNucleon( 40.0*MeV ); 748 if ( Plab < 2.0 ) { // 2 GeV/c 701 if ( Plab < 2.0 ) { // 2 GeV/c 749 // For slow anti-baryon we have to garan 702 // For slow anti-baryon we have to garanty putting on mass-shell 750 SetCofNuclearDestruction( 0.0 ); 703 SetCofNuclearDestruction( 0.0 ); 751 SetR2ofNuclearDestruction( 1.5*fermi*fer 704 SetR2ofNuclearDestruction( 1.5*fermi*fermi ); // this is equivalent to setting a few line above 752 705 // is it even necessary ? 753 SetDofNuclearDestruction( 0.01 ); 706 SetDofNuclearDestruction( 0.01 ); 754 SetPt2ofNuclearDestruction( 0.035*GeV*Ge 707 SetPt2ofNuclearDestruction( 0.035*GeV*GeV ); 755 SetMaxPt2ofNuclearDestruction( 0.04*GeV* 708 SetMaxPt2ofNuclearDestruction( 0.04*GeV*GeV ); 756 } 709 } 757 710 758 } else { // Projectile baryon assumed 711 } else { // Projectile baryon assumed 759 712 760 // Below, in the call to the G4FTFTunings: << 761 // as projectile, instead of the real one, << 762 // destruction, we assume for this categor << 763 // as for "baryon". << 764 const G4int indexTune = G4FTFTunings::Inst << 765 << 766 // NOTE (JVY) FIXME !!! Will decide later 713 // NOTE (JVY) FIXME !!! Will decide later how/if to make this one configurable... 767 // 714 // 768 SetMaxNumberOfCollisions( Plab, 2.0 ); 715 SetMaxNumberOfCollisions( Plab, 2.0 ); 769 716 770 // projectile destruction - does NOT reall 717 // projectile destruction - does NOT really matter for particle projectile, only for a nucleus projectile 771 // 718 // 772 double coeff = 0.; 719 double coeff = 0.; 773 coeff = fArrayParCollBaryonProj[indexTune] << 720 coeff = fParCollBaryonProj.GetNuclearProjDestructP1(); 774 // 721 // 775 // NOTE (JVY): Set this switch to false/tr 722 // NOTE (JVY): Set this switch to false/true on line 136 776 // 723 // 777 if ( fArrayParCollBaryonProj[indexTune].Is << 724 if ( fParCollBaryonProj.IsNuclearProjDestructP1_NBRNDEP() ) 778 { 725 { 779 coeff *= G4double(AbsProjectileBaryonNum 726 coeff *= G4double(AbsProjectileBaryonNumber); 780 } 727 } 781 double exfactor = G4Exp( fArrayParCollBary << 728 double exfactor = G4Exp( fParCollBaryonProj.GetNuclearProjDestructP2()*(Ylab-fParCollBaryonProj.GetNuclearProjDestructP3()) ); 782 (Ylab-fArrayParCollBaryonProj[index << 783 coeff *= exfactor; 729 coeff *= exfactor; 784 coeff /= ( 1.+ exfactor ); 730 coeff /= ( 1.+ exfactor ); 785 SetCofNuclearDestructionPr( coeff ); 731 SetCofNuclearDestructionPr( coeff ); 786 732 787 // target desctruction 733 // target desctruction 788 // 734 // 789 coeff = fArrayParCollBaryonProj[indexTune] << 735 coeff = fParCollBaryonProj.GetNuclearTgtDestructP1(); 790 // 736 // 791 // NOTE (JVY): Set this switch to false/tr 737 // NOTE (JVY): Set this switch to false/true on line 138 792 // 738 // 793 if ( fArrayParCollBaryonProj[indexTune].Is << 739 if ( fParCollBaryonProj.IsNuclearTgtDestructP1_ADEP() ) 794 { 740 { 795 coeff *= G4double(NumberOfTargetNucleons 741 coeff *= G4double(NumberOfTargetNucleons); 796 } 742 } 797 exfactor = G4Exp( fArrayParCollBaryonProj[ << 743 exfactor = G4Exp( fParCollBaryonProj.GetNuclearTgtDestructP2()*(Ylab-fParCollBaryonProj.GetNuclearTgtDestructP3()) ); 798 (Ylab-fArrayParCollBaryonProj[indexT << 799 coeff *= exfactor; 744 coeff *= exfactor; 800 coeff /= ( 1.+ exfactor ); 745 coeff /= ( 1.+ exfactor ); 801 SetCofNuclearDestruction( coeff ); 746 SetCofNuclearDestruction( coeff ); 802 747 803 SetR2ofNuclearDestruction( fArrayParCollBa << 748 SetR2ofNuclearDestruction( fParCollBaryonProj.GetR2ofNuclearDestruct() ); 804 SetDofNuclearDestruction( fArrayParCollBar << 749 SetDofNuclearDestruction( fParCollBaryonProj.GetDofNuclearDestruct() ); 805 750 806 coeff = fArrayParCollBaryonProj[indexTune] << 751 coeff = fParCollBaryonProj.GetPt2NuclearDestructP2(); 807 exfactor = G4Exp( fArrayParCollBaryonProj[ << 752 exfactor = G4Exp( fParCollBaryonProj.GetPt2NuclearDestructP3()*(Ylab-fParCollBaryonProj.GetPt2NuclearDestructP4()) ); 808 (Ylab-fArrayParCollBaryonProj[indexT << 809 coeff *= exfactor; 753 coeff *= exfactor; 810 coeff /= ( 1. + exfactor ); 754 coeff /= ( 1. + exfactor ); 811 SetPt2ofNuclearDestruction( (fArrayParColl << 755 SetPt2ofNuclearDestruction( (fParCollBaryonProj.GetPt2NuclearDestructP1()+coeff)*CLHEP::GeV*CLHEP::GeV ); 812 756 813 SetMaxPt2ofNuclearDestruction( fArrayParCo << 757 SetMaxPt2ofNuclearDestruction( fParCollBaryonProj.GetMaxPt2ofNuclearDestruct() ); 814 SetExcitationEnergyPerWoundedNucleon( fArr << 758 SetExcitationEnergyPerWoundedNucleon( fParCollBaryonProj.GetExciEnergyPerWoundedNucleon() ); 815 759 816 } 760 } 817 761 818 #ifdef debugFTFparams 762 #ifdef debugFTFparams 819 G4cout<<"CofNuclearDestructionPr " 763 G4cout<<"CofNuclearDestructionPr "<< GetCofNuclearDestructionPr() << G4endl; 820 G4cout<<"CofNuclearDestructionTr " 764 G4cout<<"CofNuclearDestructionTr "<< GetCofNuclearDestruction() << G4endl; 821 G4cout<<"R2ofNuclearDestruction " 765 G4cout<<"R2ofNuclearDestruction "<< GetR2ofNuclearDestruction()/fermi/fermi <<" fermi^2"<< G4endl; 822 G4cout<<"DofNuclearDestruction " 766 G4cout<<"DofNuclearDestruction "<< GetDofNuclearDestruction() << G4endl; 823 G4cout<<"Pt2ofNuclearDestruction " 767 G4cout<<"Pt2ofNuclearDestruction "<< GetPt2ofNuclearDestruction()/GeV/GeV <<" GeV^2"<< G4endl; 824 G4cout<<"ExcitationEnergyPerWoundedNucleon " 768 G4cout<<"ExcitationEnergyPerWoundedNucleon "<< GetExcitationEnergyPerWoundedNucleon() <<" MeV"<< G4endl; 825 #endif 769 #endif 826 770 827 //SetCofNuclearDestruction( 0.47*G4Exp( 2.0* 771 //SetCofNuclearDestruction( 0.47*G4Exp( 2.0*(Ylab - 2.5) )/( 1.0 + G4Exp( 2.0*(Ylab - 2.5) ) ) ); 828 //SetPt2ofNuclearDestruction( ( 0.035 + 0.1* 772 //SetPt2ofNuclearDestruction( ( 0.035 + 0.1*G4Exp( 4.0*(Ylab - 3.0) )/( 1.0 + G4Exp( 4.0*(Ylab - 3.0) ) ) )*GeV*GeV ); 829 773 830 //SetMagQuarkExchange( 120.0 ); // 210 774 //SetMagQuarkExchange( 120.0 ); // 210.0 PipP 831 //SetSlopeQuarkExchange( 2.0 ); 775 //SetSlopeQuarkExchange( 2.0 ); 832 //SetDeltaProbAtQuarkExchange( 0.6 ); 776 //SetDeltaProbAtQuarkExchange( 0.6 ); 833 //SetProjMinDiffMass( 0.7 ); // GeV 777 //SetProjMinDiffMass( 0.7 ); // GeV 1.1 834 //SetProjMinNonDiffMass( 0.7 ); // GeV 778 //SetProjMinNonDiffMass( 0.7 ); // GeV 835 //SetProbabilityOfProjDiff( 0.0); // 0.8 779 //SetProbabilityOfProjDiff( 0.0); // 0.85*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.5 ) ); // 40/32 X-dif/X-inel 836 //SetTarMinDiffMass( 1.1 ); // GeV 780 //SetTarMinDiffMass( 1.1 ); // GeV 837 //SetTarMinNonDiffMass( 1.1 ); // GeV 781 //SetTarMinNonDiffMass( 1.1 ); // GeV 838 //SetProbabilityOfTarDiff( 0.0 ); // 0.8 782 //SetProbabilityOfTarDiff( 0.0 ); // 0.85*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.5 ) ); // 40/32 X-dif/X-inel 839 783 840 //SetAveragePt2( 0.0 ); // GeV 784 //SetAveragePt2( 0.0 ); // GeV^2 0.3 841 //------------------------------------ 785 //------------------------------------ 842 //SetProbabilityOfElasticScatt( 1.0, 1.0); 786 //SetProbabilityOfElasticScatt( 1.0, 1.0); //(Xtotal, Xelastic); 843 //SetProbabilityOfProjDiff( 1.0*0.62*G4Pow:: 787 //SetProbabilityOfProjDiff( 1.0*0.62*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.51 ) ); // 0->1 844 //SetProbabilityOfTarDiff( 4.0*0.62*G4Pow::G 788 //SetProbabilityOfTarDiff( 4.0*0.62*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.51 ) ); // 2->4 845 //SetAveragePt2( 0.3 ); 789 //SetAveragePt2( 0.3 ); // (0.15) 846 //SetAvaragePt2ofElasticScattering( 0.0 ); 790 //SetAvaragePt2ofElasticScattering( 0.0 ); 847 791 848 //SetMaxNumberOfCollisions( Plab, 6.0 ); //( 792 //SetMaxNumberOfCollisions( Plab, 6.0 ); //(4.0*(Plab + 0.01), Plab); // 6.0 ); 849 //SetAveragePt2( 0.15 ); 793 //SetAveragePt2( 0.15 ); 850 //SetCofNuclearDestruction(-1.);//( 0.75 ); 794 //SetCofNuclearDestruction(-1.);//( 0.75 ); // (0.25) 851 //SetExcitationEnergyPerWoundedNucleon(0.);/ 795 //SetExcitationEnergyPerWoundedNucleon(0.);//( 30.0*MeV ); // (75.0*MeV) 852 //SetDofNuclearDestruction(0.);//( 0.2 ); // 796 //SetDofNuclearDestruction(0.);//( 0.2 ); //0.4 // 0.3 0.5 853 797 854 /* 798 /* 855 SetAveragePt2(0.3); 799 SetAveragePt2(0.3); 856 SetCofNuclearDestructionPr(0.); 800 SetCofNuclearDestructionPr(0.); 857 SetCofNuclearDestruction(0.); // 801 SetCofNuclearDestruction(0.); //( 0.5 ); (0.25) 858 SetExcitationEnergyPerWoundedNucleon(0.); // 802 SetExcitationEnergyPerWoundedNucleon(0.); // 30.0*MeV; (75.0*MeV) 859 SetDofNuclearDestruction(0.); // 803 SetDofNuclearDestruction(0.); // 0.2; 0.4; 0.3; 0.5 860 SetPt2ofNuclearDestruction(0.); // 804 SetPt2ofNuclearDestruction(0.); //(2.*0.075*GeV*GeV); ( 0.3*GeV*GeV ); (0.168*GeV*GeV) 861 */ 805 */ 862 806 863 //SetExcitationEnergyPerWoundedNucleon(0.001 807 //SetExcitationEnergyPerWoundedNucleon(0.001); 864 //SetPt2Kink( 0.0*GeV*GeV ); 808 //SetPt2Kink( 0.0*GeV*GeV ); 865 809 866 //SetRadiusOfHNinteractions2( Xtotal/pi/10.0 810 //SetRadiusOfHNinteractions2( Xtotal/pi/10.0 /2.); 867 //SetRadiusOfHNinteractions2( (Xtotal - Xela 811 //SetRadiusOfHNinteractions2( (Xtotal - Xelastic)/pi/10.0 ); 868 //SetProbabilityOfElasticScatt( 1.0, 0.0); 812 //SetProbabilityOfElasticScatt( 1.0, 0.0); 869 /* 813 /* 870 G4cout << "Pt2 " << GetAveragePt2()<<" "<<Ge 814 G4cout << "Pt2 " << GetAveragePt2()<<" "<<GetAveragePt2()/GeV/GeV<<G4endl; 871 G4cout << "Cnd " << GetCofNuclearDestruction 815 G4cout << "Cnd " << GetCofNuclearDestruction() << G4endl; 872 G4cout << "Dnd " << GetDofNuclearDestruction 816 G4cout << "Dnd " << GetDofNuclearDestruction() << G4endl; 873 G4cout << "Pt2 " << GetPt2ofNuclearDestructi 817 G4cout << "Pt2 " << GetPt2ofNuclearDestruction()/GeV/GeV << G4endl; 874 */ 818 */ 875 819 876 } << 820 } 877 821 878 //============================================ 822 //============================================================================ 879 823 880 G4double G4FTFParameters::GetMinMass( const G4 824 G4double G4FTFParameters::GetMinMass( const G4ParticleDefinition* aParticle ) { 881 // The code is used for estimating the mini 825 // The code is used for estimating the minimal string mass produced in diffraction dissociation. 882 // The indices used for minMassQDiQStr must 826 // The indices used for minMassQDiQStr must be between 1 and 5, corresponding to the 5 considered 883 // quarks: d, u, s, c and b; enforcing this 827 // quarks: d, u, s, c and b; enforcing this explicitly avoids compilation errors. 884 G4double EstimatedMass = 0.0; 828 G4double EstimatedMass = 0.0; 885 G4int partID = std::abs(aParticle->GetPDGEn 829 G4int partID = std::abs(aParticle->GetPDGEncoding()); 886 G4int Qleft = std::max( partID/100, 1 830 G4int Qleft = std::max( partID/100, 1 ); 887 G4int Qright = std::max( (partID/ 10)%10, 1 831 G4int Qright = std::max( (partID/ 10)%10, 1 ); 888 if ( Qleft < 6 && Qright < 6 ) { 832 if ( Qleft < 6 && Qright < 6 ) { // Q-Qbar string 889 EstimatedMass = StringMass->minMassQQbarS 833 EstimatedMass = StringMass->minMassQQbarStr[Qleft-1][Qright-1]; 890 } else if ( Qleft < 6 && Qright > 6 ) { 834 } else if ( Qleft < 6 && Qright > 6 ) { // Q - DiQ string 891 G4int q1 = std::max( std::min( Qright/10, 835 G4int q1 = std::max( std::min( Qright/10, 5 ), 1 ); 892 G4int q2 = std::max( std::min( Qright%10, 836 G4int q2 = std::max( std::min( Qright%10, 5 ), 1 ); 893 EstimatedMass = StringMass->minMassQDiQSt 837 EstimatedMass = StringMass->minMassQDiQStr[Qleft-1][q1-1][q2-1]; 894 } else if ( Qleft > 6 && Qright < 6 ) { 838 } else if ( Qleft > 6 && Qright < 6 ) { // DiQ - Q string 895 G4int q1 = std::max( std::min( Qleft/10, 839 G4int q1 = std::max( std::min( Qleft/10, 5 ), 1 ); 896 G4int q2 = std::max( std::min( Qleft%10, 840 G4int q2 = std::max( std::min( Qleft%10, 5 ), 1 ); 897 EstimatedMass = StringMass->minMassQDiQSt 841 EstimatedMass = StringMass->minMassQDiQStr[Qright-1][q1-1][q2-1]; 898 } 842 } 899 return EstimatedMass; 843 return EstimatedMass; 900 } 844 } 901 845 902 //============================================ 846 //============================================================================ 903 847 904 G4double G4FTFParameters::GetProcProb( const G 848 G4double G4FTFParameters::GetProcProb( const G4int ProcN, const G4double y ) { 905 G4double Prob( 0.0 ); 849 G4double Prob( 0.0 ); 906 if ( y < ProcParams[ProcN][6] ) { 850 if ( y < ProcParams[ProcN][6] ) { 907 Prob = ProcParams[ProcN][5]; 851 Prob = ProcParams[ProcN][5]; 908 if (Prob < 0.) Prob=0.; 852 if (Prob < 0.) Prob=0.; 909 return Prob; 853 return Prob; 910 } 854 } 911 Prob = ProcParams[ProcN][0] * G4Exp( -ProcPa 855 Prob = ProcParams[ProcN][0] * G4Exp( -ProcParams[ProcN][1]*y ) + 912 ProcParams[ProcN][2] * G4Exp( -ProcPa 856 ProcParams[ProcN][2] * G4Exp( -ProcParams[ProcN][3]*y ) + 913 ProcParams[ProcN][4]; 857 ProcParams[ProcN][4]; 914 if (Prob < 0.) Prob=0.; 858 if (Prob < 0.) Prob=0.; 915 return Prob; 859 return Prob; 916 } 860 } >> 861 >> 862 //============================================================================ >> 863 >> 864 G4HadronicDeveloperParameters& HDP = G4HadronicDeveloperParameters::GetInstance(); >> 865 >> 866 >> 867 class G4FTFSettingDefaultHDP >> 868 { >> 869 public: >> 870 >> 871 // ctor >> 872 G4FTFSettingDefaultHDP() { >> 873 >> 874 //================================================================== >> 875 // >> 876 // Cross sections for elementary processes >> 877 // >> 878 // these are for Inelastic interactions, i.e. Xinelastic=(Xtotal-Xelastix)>0. >> 879 // for elastic, all the A's & B's, Atop & Ymin are zeros >> 880 // general formula: Pp = A1*exp(B1*Y) + A2*exp(B2*Y) + A3 >> 881 // but if Y<Ymin, then Pp=max(0.,Atop) >> 882 // for details, see also G4FTFParameters::GetProcProb( ProcN, y ) >> 883 // >> 884 // baryons >> 885 // >> 886 /* JVY, Oct. 31, 2017: Per Alberto R. & Vladimir U., keep this group of parameters FIXED */ >> 887 /* JVY, June 11, 2020: try to open up... */ >> 888 // Process=0 --> Qexchg w/o excitation >> 889 // >> 890 HDP.SetDefault( "FTF_BARYON_PROC0_A1", 13.71 ); >> 891 HDP.SetDefault( "FTF_BARYON_PROC0_B1", 1.75 ); >> 892 HDP.SetDefault( "FTF_BARYON_PROC0_A2", -30.69 ); >> 893 HDP.SetDefault( "FTF_BARYON_PROC0_B2", 3.0 ); >> 894 HDP.SetDefault( "FTF_BARYON_PROC0_A3", 0.0 ); >> 895 HDP.SetDefault( "FTF_BARYON_PROC0_ATOP", 1.0 ); >> 896 HDP.SetDefault( "FTF_BARYON_PROC0_YMIN", 0.93 ); >> 897 /* */ >> 898 // >> 899 // Process=1 --> Qexchg w/excitation >> 900 // >> 901 HDP.SetDefault( "FTF_BARYON_PROC1_A1", 25. ); >> 902 HDP.SetDefault( "FTF_BARYON_PROC1_B1", 1. ); >> 903 HDP.SetDefault( "FTF_BARYON_PROC1_A2", -50.34 ); >> 904 HDP.SetDefault( "FTF_BARYON_PROC1_B2", 1.5 ); >> 905 HDP.SetDefault( "FTF_BARYON_PROC1_A3", 0. ); >> 906 HDP.SetDefault( "FTF_BARYON_PROC1_ATOP", 0. ); >> 907 HDP.SetDefault( "FTF_BARYON_PROC1_YMIN", 1.4 ); >> 908 /* */ >> 909 // >> 910 // NOTE: Process #2 & 3 are projectile & target diffraction >> 911 // they have more complex definition of A1 & A2 >> 912 // (see example below) >> 913 // SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Projectile diffraction >> 914 // SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Target diffraction >> 915 // >> 916 // Also, for ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) >> 917 // projectile and/or target diffraction (dissociation) may be switched ON/OFF >> 918 // >> 919 HDP.SetDefault( "FTF_BARYON_DIFF_DISSO_PROJ", false ); >> 920 HDP.SetDefault( "FTF_BARYON_DIFF_DISSO_TGT", false ); // as in hadr-string-diff-V10-03-07 >> 921 // >> 922 /* JVY, Oct. 31, 2017: Per Alberto R. & Vladimir U., keep this group of parameters FIXED */ >> 923 /* JVY, June 11, 2020: try to open up... */ >> 924 // Process=4 --> Qexchg w/additional multiplier in excitation >> 925 // >> 926 HDP.SetDefault( "FTF_BARYON_PROC4_A1", 0.6 ); >> 927 HDP.SetDefault( "FTF_BARYON_PROC4_B1", 0. ); >> 928 HDP.SetDefault( "FTF_BARYON_PROC4_A2", -1.2 ); >> 929 HDP.SetDefault( "FTF_BARYON_PROC4_B2", 0.5 ); >> 930 HDP.SetDefault( "FTF_BARYON_PROC4_A3", 0. ); >> 931 HDP.SetDefault( "FTF_BARYON_PROC4_ATOP",0. ); >> 932 HDP.SetDefault( "FTF_BARYON_PROC4_YMIN",1.4 ); >> 933 /* */ >> 934 // >> 935 // Parameters of participating hadron (baryon) excitation >> 936 // >> 937 HDP.SetDefault( "FTF_BARYON_DELTA_PROB_QEXCHG", 0. ); >> 938 HDP.SetDefault( "FTF_BARYON_PROB_SAME_QEXCHG", 0. ); >> 939 HDP.SetDefault( "FTF_BARYON_DIFF_M_PROJ", 1.16, 1.16, 3. ); // it's supposed to be in GeV but do NOT do (*CLHEP::GeV) >> 940 // because it'll be done in the G4FTFParameters::SetProjMinDiffMass >> 941 HDP.SetDefault( "FTF_BARYON_NONDIFF_M_PROJ", 1.16, 1.16, 3. ); // do NOT (*CLHEP::GeV) - same as above >> 942 HDP.SetDefault( "FTF_BARYON_DIFF_M_TGT", 1.16, 1.16, 3. ); // do NOT (*CLHEP::GeV) - same as above >> 943 HDP.SetDefault( "FTF_BARYON_NONDIFF_M_TGT", 1.16, 1.16, 3. ); // do NOT (*CLHEP::GeV) - same as above >> 944 HDP.SetDefault( "FTF_BARYON_AVRG_PT2", 0.3, 0.08, 1. ); // do NOT (*CLHEP::GeV*CLHEP::GeV) >> 945 // >> 946 // JVY, Oct. 6, 2017: Per Alberto R., keep these two settings fixed (for now) >> 947 // >> 948 // HDP.SetDefault( "FTF_BARYON_PROB_DISTR_PROJ", 0.3 ); >> 949 // HDP.SetDefault( "FTF_BARYON_PROB_DISTR_TGT", 0.3 ); >> 950 >> 951 >> 952 // pions >> 953 // >> 954 // JVY, Aug.8, 2018 --> Feb.14, 2019 --> June 25, 2019: >> 955 // Parameters of participating hadron (pions) excitation >> 956 // >> 957 /* JVY, June 25, 2019: For now, keep this group of parameters FIXED */ >> 958 // Process=0 --> Qexchg w/o excitation >> 959 // >> 960 HDP.SetDefault( "FTF_PION_PROC0_A1", 150.0 ); >> 961 HDP.SetDefault( "FTF_PION_PROC0_B1", 1.8 ); >> 962 HDP.SetDefault( "FTF_PION_PROC0_A2",-247.3 ); >> 963 HDP.SetDefault( "FTF_PION_PROC0_B2", 2.3 ); >> 964 HDP.SetDefault( "FTF_PION_PROC0_A3", 0.0 ); >> 965 HDP.SetDefault( "FTF_PION_PROC0_ATOP", 1.0 ); >> 966 HDP.SetDefault( "FTF_PION_PROC0_YMIN", 2.3 ); >> 967 // >> 968 // Process=1 --> Qexchg w/excitation >> 969 // >> 970 HDP.SetDefault( "FTF_PION_PROC1_A1", 5.77 ); >> 971 HDP.SetDefault( "FTF_PION_PROC1_B1", 0.6 ); >> 972 HDP.SetDefault( "FTF_PION_PROC1_A2", -5.77 ); >> 973 HDP.SetDefault( "FTF_PION_PROC1_B2", 0.8 ); >> 974 HDP.SetDefault( "FTF_PION_PROC1_A3", 0. ); >> 975 HDP.SetDefault( "FTF_PION_PROC1_ATOP", 0. ); >> 976 HDP.SetDefault( "FTF_PION_PROC1_YMIN", 0.0 ); >> 977 /* >> 978 // >> 979 // NOTE: Process #2 & 3 are projectile & target diffraction >> 980 // >> 981 // Process=2 --> Projectile diffraction >> 982 // >> 983 // Q: Would it even make sense to make these configurable ? >> 984 // The following is hadrcoded: >> 985 // Projectile Baryon Number > 10 (AbsProjectileBaryonNumber > 10) >> 986 // ... which is "strange" because projectile is a pion !!!... so it's always OFF >> 987 // (see also lines 1007-1016) >> 988 // >> 989 HDP.SetDefault( "FTF_PION_PROC2_A1", 2.27 ); >> 990 HDP.SetDefault( "FTF_PION_PROC2_B1", 0.5 ); >> 991 HDP.SetDefault( "FTF_PION_PROC2_A2", -98052.0); >> 992 HDP.SetDefault( "FTF_PION_PROC2_B2", 4.0 ); >> 993 HDP.SetDefault( "FTF_PION_PROC2_A3", 0. ); >> 994 HDP.SetDefault( "FTF_PION_PROC2_ATOP", 0. ); >> 995 HDP.SetDefault( "FTF_PION_PROC2_YMIN", 3.0 ); >> 996 */ >> 997 // >> 998 // Process=3 --> Target diffraction >> 999 // >> 1000 HDP.SetDefault( "FTF_PION_PROC3_A1", 7.0 ); >> 1001 HDP.SetDefault( "FTF_PION_PROC3_B1", 0.9 ); >> 1002 HDP.SetDefault( "FTF_PION_PROC3_A2", -85.28); >> 1003 HDP.SetDefault( "FTF_PION_PROC3_B2", 1.9 ); >> 1004 HDP.SetDefault( "FTF_PION_PROC3_A3", 0.08); >> 1005 HDP.SetDefault( "FTF_PION_PROC3_ATOP", 0. ); >> 1006 HDP.SetDefault( "FTF_PION_PROC3_YMIN", 2.2 ); >> 1007 // >> 1008 // projectile and/or target diffraction (dissociation) may be switched ON/OFF >> 1009 // >> 1010 // NOTE: Both projectile and target diffraction are turned OFF if >> 1011 // a) Number of Target Nucleons > 10 (NumberOfTargetNucleons > 10) >> 1012 // OR >> 1013 // b) Projectile Baryon Number > 10 (AbsProjectileBaryonNumber > 10) >> 1014 // ... which is "strange" because projectile is a pion !!!... so it's always OFF >> 1015 // >> 1016 HDP.SetDefault( "FTF_PION_DIFF_DISSO_PROJ", false ); >> 1017 HDP.SetDefault( "FTF_PION_DIFF_DISSO_TGT", false ); >> 1018 // >> 1019 /* JVY, June 25, 2019: For now keep this group of parameters FIXED */ >> 1020 /* JVY, June 11, 2020: try to open up... */ >> 1021 // Process=4 --> Qexchg w/additional multiplier in excitation >> 1022 // >> 1023 HDP.SetDefault( "FTF_PION_PROC4_A1", 1.0 ); >> 1024 HDP.SetDefault( "FTF_PION_PROC4_B1", 0. ); >> 1025 HDP.SetDefault( "FTF_PION_PROC4_A2",-11.02); >> 1026 HDP.SetDefault( "FTF_PION_PROC4_B2", 1.0 ); >> 1027 HDP.SetDefault( "FTF_PION_PROC4_A3", 0. ); >> 1028 HDP.SetDefault( "FTF_PION_PROC4_ATOP",0. ); >> 1029 HDP.SetDefault( "FTF_PION_PROC4_YMIN",2.4 ); >> 1030 /* */ >> 1031 // >> 1032 // NOTE; As of geant4-10-05, all these settings beloe are correct >> 1033 // (and are the same as they were in 10.4.ref06) >> 1034 >> 1035 HDP.SetDefault( "FTF_PION_DELTA_PROB_QEXCHG", 0.56 ); // in the past used to be 0.35 >> 1036 HDP.SetDefault( "FTF_PION_DIFF_M_PROJ", 1.0, 0.5, 3. ); // in the past used to be 0.5... >> 1037 HDP.SetDefault( "FTF_PION_NONDIFF_M_PROJ", 1.0, 0.5, 3. ); // so why not set 0.5 as a low limit ?... >> 1038 // ... or perhaps even lower ? >> 1039 HDP.SetDefault( "FTF_PION_DIFF_M_TGT", 1.16, 1.16, 3. ); // All (NON)DIFF_M's are supposed to be in GeV but do NOT do (*CLHEP::GeV) >> 1040 // because it'll be done in the G4FTFParameters::SetProjMinDiffMass >> 1041 HDP.SetDefault( "FTF_PION_NONDIFF_M_TGT", 1.16, 1.16, 3. ); >> 1042 HDP.SetDefault( "FTF_PION_AVRG_PT2", 0.3, 0.08, 1. ); // do NOT (*CLHEP::GeV*CLHEP::GeV) >> 1043 >> 1044 //================================================================== >> 1045 // >> 1046 // nuclear destruction >> 1047 // >> 1048 // NOTE: Settings of most of these parameters are the same >> 1049 // for different types of projectile hadron >> 1050 // However, we decided to introduce separate variables >> 1051 // and configuration cards for each type of projectile >> 1052 // >> 1053 // baryons >> 1054 // >> 1055 // projectile destruction >> 1056 // >> 1057 HDP.SetDefault( "FTF_BARYON_NUCDESTR_P1_PROJ", 1., 0., 1. ); // in principle, it should be 1./NBRN - FIXME later ! >> 1058 HDP.SetDefault( "FTF_BARYON_NUCDESTR_P1_NBRN_PROJ", false ); >> 1059 // >> 1060 // for now, keep fixed p2 & p3 for the proj destruction >> 1061 // they're defined explicitly in G4FTFParamCollection ctor >> 1062 // >> 1063 // target destruction >> 1064 // >> 1065 HDP.SetDefault( "FTF_BARYON_NUCDESTR_P1_TGT", 1., 0., 1. ); >> 1066 HDP.SetDefault( "FTF_BARYON_NUCDESTR_P1_ADEP_TGT", false ); >> 1067 HDP.SetDefault( "FTF_BARYON_NUCDESTR_P2_TGT", 4.0, 2., 16. ); >> 1068 HDP.SetDefault( "FTF_BARYON_NUCDESTR_P3_TGT", 2.1, 0., 4. ); >> 1069 // >> 1070 HDP.SetDefault( "FTF_BARYON_PT2_NUCDESTR_P1", 0.035, 0., 0.25 ); >> 1071 HDP.SetDefault( "FTF_BARYON_PT2_NUCDESTR_P2", 0.04, 0., 0.25 ); >> 1072 HDP.SetDefault( "FTF_BARYON_PT2_NUCDESTR_P3", 4.0, 2., 16. ); >> 1073 HDP.SetDefault( "FTF_BARYON_PT2_NUCDESTR_P4", 2.5, 0., 4. ); >> 1074 // >> 1075 HDP.SetDefault( "FTF_BARYON_NUCDESTR_R2", 1.5*CLHEP::fermi*CLHEP::fermi, 0.5*CLHEP::fermi*CLHEP::fermi, 2.*CLHEP::fermi*CLHEP::fermi ); >> 1076 HDP.SetDefault( "FTF_BARYON_EXCI_E_PER_WNDNUCLN", 40.*CLHEP::MeV, 0., 100.*CLHEP::MeV ); >> 1077 HDP.SetDefault( "FTF_BARYON_NUCDESTR_DISP", 0.3, 0.1, 0.4 ); >> 1078 // >> 1079 // JVY, Oct. 6, 2017: Per Alberto R., this is just a technical parameter, >> 1080 // and it should NOT be changed >> 1081 // >> 1082 // HDP.SetDefault( "FTF_BARYON_NUCDESTR_MAXPT2", 1. * CLHEP::GeV*CLHEP::GeV ); >> 1083 >> 1084 >> 1085 // mesons - these parameters are common for pions, kaons, etc. (per original code) >> 1086 // >> 1087 // NOTE: *NO* projectile destruction for mesons !!! >> 1088 // >> 1089 // target destruction >> 1090 // >> 1091 HDP.SetDefault( "FTF_MESON_NUCDESTR_P1_TGT", 0.00481, 0., 1. ); >> 1092 HDP.SetDefault( "FTF_MESON_NUCDESTR_P1_ADEP_TGT", true ); >> 1093 HDP.SetDefault( "FTF_MESON_NUCDESTR_P2_TGT", 4.0, 2., 16. ); >> 1094 HDP.SetDefault( "FTF_MESON_NUCDESTR_P3_TGT", 2.1, 0., 4. ); >> 1095 // >> 1096 HDP.SetDefault( "FTF_MESON_PT2_NUCDESTR_P1", 0.035, 0., 0.25 ); >> 1097 HDP.SetDefault( "FTF_MESON_PT2_NUCDESTR_P2", 0.04, 0., 0.25 ); >> 1098 HDP.SetDefault( "FTF_MESON_PT2_NUCDESTR_P3", 4.0, 2., 16. ); >> 1099 HDP.SetDefault( "FTF_MESON_PT2_NUCDESTR_P4", 2.5, 0., 4. ); >> 1100 // >> 1101 HDP.SetDefault( "FTF_MESON_NUCDESTR_R2", 1.5*CLHEP::fermi*CLHEP::fermi, >> 1102 0.5*CLHEP::fermi*CLHEP::fermi, >> 1103 2.*CLHEP::fermi*CLHEP::fermi ); >> 1104 HDP.SetDefault( "FTF_MESON_EXCI_E_PER_WNDNUCLN", 40.*CLHEP::MeV, 0., 100.*CLHEP::MeV ); >> 1105 HDP.SetDefault( "FTF_MESON_NUCDESTR_DISP", 0.3, 0.1, 0.4 ); >> 1106 >> 1107 } >> 1108 }; >> 1109 >> 1110 >> 1111 G4FTFSettingDefaultHDP FTFDefaultsHDP; >> 1112 >> 1113 >> 1114 G4FTFParamCollection::G4FTFParamCollection() >> 1115 { >> 1116 >> 1117 Reset(); // zero out everything >> 1118 >> 1119 // >> 1120 // keep the 2 parameters below fixed for now (i.e. do not take them from HDP) >> 1121 // >> 1122 fNuclearProjDestructP2 = 4.0; >> 1123 fNuclearProjDestructP3 = 2.1; >> 1124 >> 1125 } >> 1126 >> 1127 >> 1128 void G4FTFParamCollection::Reset() >> 1129 { >> 1130 // parameters of excitation >> 1131 >> 1132 // Proc=0 --> Qexchg w/o excitation >> 1133 fProc0A1 = 0.; >> 1134 fProc0B1 = 0.; >> 1135 fProc0A2 = 0.; >> 1136 fProc0B2 = 0.; >> 1137 fProc0A3 = 0.; >> 1138 fProc0Atop = 0.; >> 1139 fProc0Ymin = 0.; >> 1140 >> 1141 // Proc=1 --> Qexchg w/excitation >> 1142 fProc1A1 = 0.; >> 1143 fProc1B1 = 0.; >> 1144 fProc1A2 = 0.; >> 1145 fProc1B2 = 0.; >> 1146 fProc1A3 = 0.; >> 1147 fProc1Atop = 0.; >> 1148 fProc1Ymin = 0.; >> 1149 >> 1150 // Proc=2 & Proc=3 for ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 ) >> 1151 // Do NOT do anything as it's set once and for all !!! >> 1152 >> 1153 fProjDiffDissociation = false; >> 1154 fTgtDiffDissociation = false; >> 1155 >> 1156 // Proc=4 --> Qexchg w/additional multiplier in excitation >> 1157 fProc4A1 = 0.; >> 1158 fProc4B1 = 0.; >> 1159 fProc4A2 = 0.; >> 1160 fProc4B2 = 0.; >> 1161 fProc4A3 = 0.; >> 1162 fProc4Atop = 0.; >> 1163 fProc4Ymin = 0.; >> 1164 >> 1165 // parameters of participating baryon excitation >> 1166 >> 1167 fDeltaProbAtQuarkExchange = 0.; >> 1168 fProbOfSameQuarkExchange = 0.; >> 1169 fProjMinDiffMass = 0.; >> 1170 fProjMinNonDiffMass = 0.; >> 1171 fTgtMinDiffMass = 0.; >> 1172 fTgtMinNonDiffMass = 0.; >> 1173 fAveragePt2 = 0.; >> 1174 fProbLogDistrPrD = 0.; >> 1175 fProbLogDistr = 0.; >> 1176 >> 1177 // parameters of nuclear distruction >> 1178 >> 1179 // COMMONs >> 1180 fNuclearProjDestructP1 = 0.; >> 1181 fNuclearTgtDestructP1 = 0.; >> 1182 fNuclearProjDestructP2 = 0.; >> 1183 fNuclearProjDestructP3 = 0.; >> 1184 fNuclearTgtDestructP2 = 0.; >> 1185 fNuclearTgtDestructP3 = 0.; >> 1186 fPt2NuclearDestructP1 = 0.; >> 1187 fPt2NuclearDestructP2 = 0.; >> 1188 fPt2NuclearDestructP3 = 0.; >> 1189 fPt2NuclearDestructP4 = 0.; >> 1190 >> 1191 // baryons >> 1192 fR2ofNuclearDestruct = 0.; >> 1193 fExciEnergyPerWoundedNucleon = 0.; >> 1194 fDofNuclearDestruct = 0.; >> 1195 fMaxPt2ofNuclearDestruct = 0.; >> 1196 >> 1197 return; >> 1198 } >> 1199 >> 1200 //============================================================================ >> 1201 >> 1202 G4FTFParamCollBaryonProj::G4FTFParamCollBaryonProj() >> 1203 : G4FTFParamCollection() >> 1204 { >> 1205 >> 1206 // parameters of participating hadron (baryon) excitation >> 1207 // >> 1208 // baryons projectile >> 1209 // >> 1210 // Proc=0 --> Qexchg w/o excitation >> 1211 // >> 1212 /* As of Oct. 31, 2017 keep these fixed */ >> 1213 HDP.DeveloperGet( "FTF_BARYON_PROC0_A1", fProc0A1 ); >> 1214 HDP.DeveloperGet( "FTF_BARYON_PROC0_B1", fProc0B1 ); >> 1215 HDP.DeveloperGet( "FTF_BARYON_PROC0_A2", fProc0A2 ); >> 1216 HDP.DeveloperGet( "FTF_BARYON_PROC0_B2", fProc0B2 ); >> 1217 HDP.DeveloperGet( "FTF_BARYON_PROC0_A3", fProc0A3 ); >> 1218 HDP.DeveloperGet( "FTF_BARYON_PROC0_ATOP", fProc0Atop ); >> 1219 HDP.DeveloperGet( "FTF_BARYON_PROC0_YMIN", fProc0Ymin ); >> 1220 /* */ >> 1221 // >> 1222 /* JVY, June 11, 2020: make configurable >> 1223 fProc0A1 = 13.71; >> 1224 fProc0B1 = 1.75; >> 1225 fProc0A2 = -30.69; // (or -214.5 as in Doc ?) >> 1226 fProc0B2 = 3.; // ( or 4. as in Doc ?) >> 1227 fProc0A3 = 0.; >> 1228 fProc0Atop = 1.; // ( or 0.5 as in Doc ?) >> 1229 fProc0Ymin = 0.93; // (or 1.1 as in Doc ?) >> 1230 */ >> 1231 // >> 1232 // Proc=1 --> Qexchg w/excitation >> 1233 // >> 1234 /* As of Oct. 31, 2017 keep these fixed */ >> 1235 HDP.DeveloperGet( "FTF_BARYON_PROC1_A1", fProc1A1 ); >> 1236 HDP.DeveloperGet( "FTF_BARYON_PROC1_B1", fProc1B1 ); >> 1237 HDP.DeveloperGet( "FTF_BARYON_PROC1_A2", fProc1A2 ); >> 1238 HDP.DeveloperGet( "FTF_BARYON_PROC1_B2", fProc1B2 ); >> 1239 HDP.DeveloperGet( "FTF_BARYON_PROC1_A3", fProc1A3 ); >> 1240 HDP.DeveloperGet( "FTF_BARYON_PROC1_ATOP", fProc1Atop ); >> 1241 HDP.DeveloperGet( "FTF_BARYON_PROC1_YMIN", fProc1Ymin ); >> 1242 /* */ >> 1243 // >> 1244 /* JVY, June 11, 2020: make configurable >> 1245 fProc1A1 = 25.; >> 1246 fProc1B1 = 1.; >> 1247 fProc1A2 = -50.34; >> 1248 fProc1B2 = 1.5; >> 1249 fProc1A3 = 0.; >> 1250 fProc1Atop = 0.; >> 1251 fProc1Ymin = 1.4; >> 1252 */ >> 1253 // >> 1254 // Proc=2 & Proc=3 for the case ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) >> 1255 // (diffraction dissociation) >> 1256 // NOTE-1: used to be ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 )... >> 1257 // NOTE-2: As of 10.5, both are set to false (via HDP) >> 1258 // >> 1259 HDP.DeveloperGet( "FTF_BARYON_DIFF_DISSO_PROJ", fProjDiffDissociation ); >> 1260 HDP.DeveloperGet( "FTF_BARYON_DIFF_DISSO_TGT", fTgtDiffDissociation ); >> 1261 // >> 1262 // >> 1263 // Proc=4 --> Qexchg "w/additional multiplier" in excitation >> 1264 // >> 1265 /* As of Oct. 31, 2017 keep these fixed */ >> 1266 /* */ >> 1267 HDP.DeveloperGet( "FTF_BARYON_PROC4_A1", fProc4A1 ); >> 1268 HDP.DeveloperGet( "FTF_BARYON_PROC4_B1", fProc4B1 ); >> 1269 HDP.DeveloperGet( "FTF_BARYON_PROC4_A2", fProc4A2 ); >> 1270 HDP.DeveloperGet( "FTF_BARYON_PROC4_B2", fProc4B2 ); >> 1271 HDP.DeveloperGet( "FTF_BARYON_PROC4_A3", fProc4A3 ); >> 1272 HDP.DeveloperGet( "FTF_BARYON_PROC4_ATOP", fProc4Atop ); >> 1273 HDP.DeveloperGet( "FTF_BARYON_PROC4_YMIN", fProc4Ymin ); >> 1274 /* */ >> 1275 // >> 1276 /* JVY, June 11, 2020: make configurable >> 1277 fProc4A1 = 0.6; // (or 1. as in Doc ?) >> 1278 fProc4B1 = 0.; >> 1279 fProc4A2 = -1.2; // (or -2.01 as in Doc ?) >> 1280 fProc4B2 = 0.5; >> 1281 fProc4A3 = 0.; >> 1282 fProc4Atop = 0.; >> 1283 fProc4Ymin = 1.4; >> 1284 */ >> 1285 // >> 1286 // >> 1287 HDP.DeveloperGet( "FTF_BARYON_DELTA_PROB_QEXCHG", fDeltaProbAtQuarkExchange ); >> 1288 HDP.DeveloperGet( "FTF_BARYON_PROB_SAME_QEXCHG", fProbOfSameQuarkExchange ); >> 1289 HDP.DeveloperGet( "FTF_BARYON_DIFF_M_PROJ", fProjMinDiffMass ); >> 1290 HDP.DeveloperGet( "FTF_BARYON_NONDIFF_M_PROJ", fProjMinNonDiffMass ); >> 1291 HDP.DeveloperGet( "FTF_BARYON_DIFF_M_TGT", fTgtMinDiffMass ); >> 1292 HDP.DeveloperGet( "FTF_BARYON_NONDIFF_M_TGT", fTgtMinNonDiffMass ); >> 1293 HDP.DeveloperGet( "FTF_BARYON_AVRG_PT2", fAveragePt2 ); >> 1294 // >> 1295 // JVY - Per Alberto R., we're curretly keeping these two settings fixed, >> 1296 // thus they're defined here explicitly, rather than via HDP >> 1297 // >> 1298 // HDP.DeveloperGet( "FTF_BARYON_PROB_DISTR_PROJ", fProbLogDistrPrD ); >> 1299 // HDP.DeveloperGet( "FTF_BARYON_PROB_DISTR_TGT", fProbLogDistr ); >> 1300 fProbLogDistrPrD = 0.55; >> 1301 fProbLogDistr = 0.55; >> 1302 >> 1303 // nuclear destruction >> 1304 // >> 1305 // ---> LATER !!! ---> fBaryonMaxNumberOfCollisions = 2.; >> 1306 // >> 1307 >> 1308 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_P1_PROJ", fNuclearProjDestructP1 ); >> 1309 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_P1_NBRN_PROJ",fNuclearProjDestructP1_NBRNDEP ); >> 1310 // >> 1311 // keep the 2 parameters below fixed for now (i.e. do not take them from HDP) >> 1312 // >> 1313 fNuclearProjDestructP2 = 4.0; >> 1314 fNuclearProjDestructP3 = 2.1; >> 1315 >> 1316 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_P1_TGT", fNuclearTgtDestructP1 ); >> 1317 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_P1_ADEP_TGT", fNuclearTgtDestructP1_ADEP ); >> 1318 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_P2_TGT", fNuclearTgtDestructP2 ); >> 1319 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_P3_TGT", fNuclearTgtDestructP3 ); >> 1320 // >> 1321 HDP.DeveloperGet( "FTF_BARYON_PT2_NUCDESTR_P1", fPt2NuclearDestructP1 ); >> 1322 HDP.DeveloperGet( "FTF_BARYON_PT2_NUCDESTR_P2", fPt2NuclearDestructP2 ); >> 1323 HDP.DeveloperGet( "FTF_BARYON_PT2_NUCDESTR_P3", fPt2NuclearDestructP3 ); >> 1324 HDP.DeveloperGet( "FTF_BARYON_PT2_NUCDESTR_P4", fPt2NuclearDestructP4 ); >> 1325 // >> 1326 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_R2", fR2ofNuclearDestruct ); >> 1327 HDP.DeveloperGet( "FTF_BARYON_EXCI_E_PER_WNDNUCLN", fExciEnergyPerWoundedNucleon ); >> 1328 // >> 1329 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_DISP", fDofNuclearDestruct ); // NOTE: "Dof" means "Dispersion of..." >> 1330 // >> 1331 // NOTE-1: this parameter has changed from 1. to 9. between 10.2 and 10.3.ref07 !!! >> 1332 // ... then it went back to 1. for the 10.4-candidate... >> 1333 // NOTE-2: this is a "technical" parameter, it should not be changed; this is why >> 1334 // it is defined explicitly rather than via HDP >> 1335 // --> HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_MAXPT2", fMaxPt2ofNuclearDestruct ); >> 1336 fMaxPt2ofNuclearDestruct = 9. * CLHEP::GeV*CLHEP::GeV; >> 1337 } >> 1338 >> 1339 >> 1340 G4FTFParamCollMesonProj::G4FTFParamCollMesonProj() >> 1341 : G4FTFParamCollection() >> 1342 { >> 1343 // nuclear destruction >> 1344 // >> 1345 // JVY, Aug.8, 2018 --> Feb.14, 2018 --> June 25, 2019: >> 1346 // These parameters are common for all mesons >> 1347 // >> 1348 >> 1349 HDP.DeveloperGet( "FTF_MESON_NUCDESTR_P1_TGT", fNuclearTgtDestructP1 ); >> 1350 HDP.DeveloperGet( "FTF_MESON_NUCDESTR_P1_ADEP_TGT", fNuclearTgtDestructP1_ADEP ); >> 1351 HDP.DeveloperGet( "FTF_MESON_NUCDESTR_P2_TGT", fNuclearTgtDestructP2 ); >> 1352 HDP.DeveloperGet( "FTF_MESON_NUCDESTR_P3_TGT", fNuclearTgtDestructP3 ); >> 1353 // >> 1354 HDP.DeveloperGet( "FTF_MESON_PT2_NUCDESTR_P1", fPt2NuclearDestructP1 ); >> 1355 HDP.DeveloperGet( "FTF_MESON_PT2_NUCDESTR_P2", fPt2NuclearDestructP2 ); >> 1356 HDP.DeveloperGet( "FTF_MESON_PT2_NUCDESTR_P3", fPt2NuclearDestructP3 ); >> 1357 HDP.DeveloperGet( "FTF_MESON_PT2_NUCDESTR_P4", fPt2NuclearDestructP4 ); >> 1358 // >> 1359 HDP.DeveloperGet( "FTF_MESON_NUCDESTR_R2", fR2ofNuclearDestruct ); >> 1360 HDP.DeveloperGet( "FTF_MESON_EXCI_E_PER_WNDNUCLN", fExciEnergyPerWoundedNucleon ); >> 1361 HDP.DeveloperGet( "FTF_MESON_NUCDESTR_DISP", fDofNuclearDestruct ); // NOTE: "Dof" means "Dispersion of..." >> 1362 // >> 1363 // NOTE: it is a "technical" parameter, it should not be changed; >> 1364 // this is why it is defined explicitly rather than via HDP >> 1365 // >> 1366 fMaxPt2ofNuclearDestruct = 1. * CLHEP::GeV*CLHEP::GeV; >> 1367 } >> 1368 >> 1369 >> 1370 G4FTFParamCollPionProj::G4FTFParamCollPionProj() >> 1371 : G4FTFParamCollMesonProj() >> 1372 { >> 1373 // parameters of participating pion excitation (pi+/- or pi0) >> 1374 // >> 1375 // Proc=0 --> Qexchg w/o excitation >> 1376 // >> 1377 /* As of June 25, 2019 keep these fixed */ >> 1378 HDP.DeveloperGet( "FTF_PION_PROC0_A1", fProc0A1 ); >> 1379 HDP.DeveloperGet( "FTF_PION_PROC0_B1", fProc0B1 ); >> 1380 HDP.DeveloperGet( "FTF_PION_PROC0_A2", fProc0A2 ); >> 1381 HDP.DeveloperGet( "FTF_PION_PROC0_B2", fProc0B2 ); >> 1382 HDP.DeveloperGet( "FTF_PION_PROC0_A3", fProc0A3 ); >> 1383 HDP.DeveloperGet( "FTF_PION_PROC0_ATOP", fProc0Atop ); >> 1384 HDP.DeveloperGet( "FTF_PION_PROC0_YMIN", fProc0Ymin ); >> 1385 /* */ >> 1386 // >> 1387 /* JVY, June 11, 2020: make configurable >> 1388 fProc0A1 = 150.0; >> 1389 fProc0B1 = 1.8; >> 1390 fProc0A2 =-247.3; >> 1391 fProc0B2 = 2.3; // ( or 4. as in Doc ?) >> 1392 fProc0A3 = 0.; >> 1393 fProc0Atop = 1.; // ( or 0.5 as in Doc ?) >> 1394 fProc0Ymin = 2.3; // (or 1.1 as in Doc ?) >> 1395 */ >> 1396 // >> 1397 // Proc=1 --> Qexchg w/excitation >> 1398 // >> 1399 /* As of Oct. 31, 2017 keep these fixed */ >> 1400 HDP.DeveloperGet( "FTF_PION_PROC1_A1", fProc1A1 ); >> 1401 HDP.DeveloperGet( "FTF_PION_PROC1_B1", fProc1B1 ); >> 1402 HDP.DeveloperGet( "FTF_PION_PROC1_A2", fProc1A2 ); >> 1403 HDP.DeveloperGet( "FTF_PION_PROC1_B2", fProc1B2 ); >> 1404 HDP.DeveloperGet( "FTF_PION_PROC1_A3", fProc1A3 ); >> 1405 HDP.DeveloperGet( "FTF_PION_PROC1_ATOP", fProc1Atop ); >> 1406 HDP.DeveloperGet( "FTF_PION_PROC1_YMIN", fProc1Ymin ); >> 1407 /* */ >> 1408 // >> 1409 /* JVY, June 11, 2020: make configurable >> 1410 fProc1A1 = 5.77; >> 1411 fProc1B1 = 0.6; >> 1412 fProc1A2 = -5.77; >> 1413 fProc1B2 = 0.8; >> 1414 fProc1A3 = 0.; >> 1415 fProc1Atop = 0.; >> 1416 fProc1Ymin = 0.0; >> 1417 */ >> 1418 // >> 1419 // Proc=2 --> Projectile diffraction >> 1420 // >> 1421 // Q: Would it even make sense to make these configurable ? >> 1422 // The following is hadrcoded: >> 1423 // Projectile Baryon Number > 10 (AbsProjectileBaryonNumber > 10) >> 1424 // ... which is "strange" because projectile is a pion !!!... so it's always OFF >> 1425 // (see also lines 1007-1016) >> 1426 // >> 1427 /* As of Oct. 31, 2017 keep these fixed >> 1428 HDP.DeveloperGet( "FTF_PION_PROC2_A1", fProc2A1 ); >> 1429 HDP.DeveloperGet( "FTF_PION_PROC2_B1", fProc2B1 ); >> 1430 HDP.DeveloperGet( "FTF_PION_PROC2_A2", fProc2A2 ); >> 1431 HDP.DeveloperGet( "FTF_PION_PROC2_B2", fProc2B2 ); >> 1432 HDP.DeveloperGet( "FTF_PION_PROC2_A3", fProc2A3 ); >> 1433 HDP.DeveloperGet( "FTF_PION_PROC2_ATOP", fProc2Atop ); >> 1434 HDP.DeveloperGet( "FTF_PION_PROC2_YMIN", fProc2Ymin ); >> 1435 */ >> 1436 // keep fixed so far; see note above >> 1437 fProc2A1 = 2.27; >> 1438 fProc2B1 = 0.5; >> 1439 fProc2A2 =-98052.0; >> 1440 fProc2B2 = 4.0; >> 1441 fProc2A3 = 0.; >> 1442 fProc2Atop = 0.; >> 1443 fProc2Ymin = 3.0; >> 1444 // >> 1445 // Proc=3 --> Target diffraction >> 1446 // >> 1447 /* As of Oct. 31, 2017 keep these fixed */ >> 1448 HDP.DeveloperGet( "FTF_PION_PROC3_A1", fProc3A1 ); >> 1449 HDP.DeveloperGet( "FTF_PION_PROC3_B1", fProc3B1 ); >> 1450 HDP.DeveloperGet( "FTF_PION_PROC3_A2", fProc3A2 ); >> 1451 HDP.DeveloperGet( "FTF_PION_PROC3_B2", fProc3B2 ); >> 1452 HDP.DeveloperGet( "FTF_PION_PROC3_A3", fProc3A3 ); >> 1453 HDP.DeveloperGet( "FTF_PION_PROC3_ATOP", fProc3Atop ); >> 1454 HDP.DeveloperGet( "FTF_PION_PROC3_YMIN", fProc3Ymin ); >> 1455 /* */ >> 1456 // >> 1457 /* JVY, June 11, 2020: make configurable >> 1458 fProc3A1 = 7.0; >> 1459 fProc3B1 = 0.9; >> 1460 fProc3A2 = -85.28; >> 1461 fProc3B2 = 1.9; >> 1462 fProc3A3 = 0.08; >> 1463 fProc3Atop = 0.; >> 1464 fProc3Ymin = 2.2; >> 1465 */ >> 1466 // >> 1467 // for Proc2 & Proc3, pprojectile or target diffraction can be turned ON/OFF >> 1468 // if num.baryons >10 (which is strange for projectile which is pion !!!) >> 1469 // >> 1470 HDP.DeveloperGet( "FTF_PION_DIFF_DISSO_PROJ", fProjDiffDissociation ); >> 1471 HDP.DeveloperGet( "FTF_PION_DIFF_DISSO_TGT", fTgtDiffDissociation ); >> 1472 // >> 1473 // Proc=4 --> Qexchg "w/additional multiplier" in excitation >> 1474 // >> 1475 /* As of Oct. 31, 2017 keep these fixed */ >> 1476 HDP.DeveloperGet( "FTF_PION_PROC4_A1", fProc4A1 ); >> 1477 HDP.DeveloperGet( "FTF_PION_PROC4_B1", fProc4B1 ); >> 1478 HDP.DeveloperGet( "FTF_PION_PROC4_A2", fProc4A2 ); >> 1479 HDP.DeveloperGet( "FTF_PION_PROC4_B2", fProc4B2 ); >> 1480 HDP.DeveloperGet( "FTF_PION_PROC4_A3", fProc4A3 ); >> 1481 HDP.DeveloperGet( "FTF_PION_PROC4_ATOP", fProc4Atop ); >> 1482 HDP.DeveloperGet( "FTF_PION_PROC4_YMIN", fProc4Ymin ); >> 1483 /* */ >> 1484 // >> 1485 /* JVY, June 11, 2020: make configurable >> 1486 fProc4A1 = 1.0; >> 1487 fProc4B1 = 0.; >> 1488 fProc4A2 = -11.02; >> 1489 fProc4B2 = 1.0; >> 1490 fProc4A3 = 0.; >> 1491 fProc4Atop = 0.; >> 1492 fProc4Ymin = 2.4; >> 1493 */ >> 1494 // >> 1495 // >> 1496 HDP.DeveloperGet( "FTF_PION_DELTA_PROB_QEXCHG", fDeltaProbAtQuarkExchange ); >> 1497 HDP.DeveloperGet( "FTF_PION_DIFF_M_PROJ", fProjMinDiffMass ); >> 1498 HDP.DeveloperGet( "FTF_PION_NONDIFF_M_PROJ", fProjMinNonDiffMass ); >> 1499 HDP.DeveloperGet( "FTF_PION_DIFF_M_TGT", fTgtMinDiffMass ); >> 1500 HDP.DeveloperGet( "FTF_PION_NONDIFF_M_TGT", fTgtMinNonDiffMass ); >> 1501 HDP.DeveloperGet( "FTF_PION_AVRG_PT2", fAveragePt2 ); >> 1502 // >> 1503 fProbOfSameQuarkExchange = 0.; // This does NOT seem to apply to the pion case >> 1504 // >> 1505 // currently keep these two parameters fixed >> 1506 // thus they're defined here explicitly, rather than via HDP >> 1507 // >> 1508 fProbLogDistrPrD = 0.55; >> 1509 fProbLogDistr = 0.55; >> 1510 } >> 1511 917 1512 918 //============================================ 1513 //============================================================================ 919 1514 920 G4FTFParameters::~G4FTFParameters() { 1515 G4FTFParameters::~G4FTFParameters() { 921 if ( StringMass ) delete StringMass; 1516 if ( StringMass ) delete StringMass; 922 } 1517 } 923 1518 924 //============================================ 1519 //============================================================================ 925 1520 926 void G4FTFParameters::Reset() 1521 void G4FTFParameters::Reset() 927 { 1522 { 928 FTFhNcmsEnergy = 0.0; 1523 FTFhNcmsEnergy = 0.0; 929 FTFXtotal = 0.0; 1524 FTFXtotal = 0.0; 930 FTFXelastic = 0.0; 1525 FTFXelastic = 0.0; 931 FTFXinelastic = 0.0; 1526 FTFXinelastic = 0.0; 932 FTFXannihilation = 0.0; 1527 FTFXannihilation = 0.0; 933 ProbabilityOfAnnihilation = 0.0; 1528 ProbabilityOfAnnihilation = 0.0; 934 ProbabilityOfElasticScatt = 0.0; 1529 ProbabilityOfElasticScatt = 0.0; 935 RadiusOfHNinteractions2 = 0.0; 1530 RadiusOfHNinteractions2 = 0.0; 936 FTFSlope = 0.0; 1531 FTFSlope = 0.0; 937 AvaragePt2ofElasticScattering = 0.0; 1532 AvaragePt2ofElasticScattering = 0.0; 938 FTFGamma0 = 0.0; 1533 FTFGamma0 = 0.0; 939 DeltaProbAtQuarkExchange = 0.0; 1534 DeltaProbAtQuarkExchange = 0.0; 940 ProbOfSameQuarkExchange = 0.0; 1535 ProbOfSameQuarkExchange = 0.0; 941 ProjMinDiffMass = 0.0; 1536 ProjMinDiffMass = 0.0; 942 ProjMinNonDiffMass = 0.0; 1537 ProjMinNonDiffMass = 0.0; 943 ProbLogDistrPrD = 0.0; 1538 ProbLogDistrPrD = 0.0; 944 TarMinDiffMass = 0.0; 1539 TarMinDiffMass = 0.0; 945 TarMinNonDiffMass = 0.0; 1540 TarMinNonDiffMass = 0.0; 946 AveragePt2 = 0.0; 1541 AveragePt2 = 0.0; 947 ProbLogDistr = 0.0; 1542 ProbLogDistr = 0.0; 948 Pt2kink = 0.0; 1543 Pt2kink = 0.0; 949 MaxNumberOfCollisions = 0.0; 1544 MaxNumberOfCollisions = 0.0; 950 ProbOfInelInteraction = 0.0; 1545 ProbOfInelInteraction = 0.0; 951 CofNuclearDestructionPr = 0.0; 1546 CofNuclearDestructionPr = 0.0; 952 CofNuclearDestruction = 0.0; 1547 CofNuclearDestruction = 0.0; 953 R2ofNuclearDestruction = 0.0; 1548 R2ofNuclearDestruction = 0.0; 954 ExcitationEnergyPerWoundedNucleon = 0.0; 1549 ExcitationEnergyPerWoundedNucleon = 0.0; 955 DofNuclearDestruction = 0.0; 1550 DofNuclearDestruction = 0.0; 956 Pt2ofNuclearDestruction = 0.0; 1551 Pt2ofNuclearDestruction = 0.0; 957 MaxPt2ofNuclearDestruction = 0.0; 1552 MaxPt2ofNuclearDestruction = 0.0; 958 1553 959 for ( G4int i = 0; i < 4; i++ ) { 1554 for ( G4int i = 0; i < 4; i++ ) { 960 for ( G4int j = 0; j < 7; j++ ) { 1555 for ( G4int j = 0; j < 7; j++ ) { 961 ProcParams[i][j] = 0.0; 1556 ProcParams[i][j] = 0.0; 962 } 1557 } 963 } 1558 } 964 1559 965 return; 1560 return; 966 } 1561 } 967 1562 968 1563