Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 //--------------------------------------------------------------------------- 28 // 29 // ClassName: G4FTFTunings 30 // 31 // Author: 2022 Alberto Ribon 32 // 33 // Description: Singleton to keep sets of parameters, called "tunes", 34 // for the FTF model. 35 // 36 // Please NOTE that, as of now (Fall 2022) ONLY ONE tune 37 // can be selected/applied; attempt to select multiple tunes 38 // will not results in any error messages, however further 39 // down the workflow only the FIRST of the activated tunes 40 // will be used. 41 // 42 // To use one of the tunes of this class, there is no need to 43 // change anything in this class, and use instead one of the 44 // following two UI commands, before initialization: 45 // /process/had/models/ftf/selectTuneByIndex integerIndex 46 // or /process/had/models/ftf/selectTuneByName stringName 47 // for instance: 48 // /process/had/models/ftf/selectTuneByIndex 1 49 // or 50 // /process/had/models/ftf/selectTuneByIndex 2 51 // or 52 // /process/had/models/ftf/selectTuneByIndex 3 53 // or 54 // /process/had/models/ftf/selectTuneByName baryon-tune2022-v0 55 // or 56 // /process/had/models/ftf/selectTuneByName pion-tune2022-v0 57 // or 58 // /process/had/models/ftf/selectTuneByName combined-tune2022-v0 59 // 60 // If you want to create a new tune, then you need to modify 61 // this class as follows: look for the first "dummy" tune 62 // available; if you find it, then specify its name in the 63 // std::array fNameOfTunes and the values of the parameters 64 // in the methods: G4FTFParamCollection::SetTuneN() 65 // G4FTFParamCollBaryonProj::SetTuneN() 66 // G4FTFParamCollMesonProj::SetTuneN() 67 // G4FTFParamCollPionProj::SetTuneN 68 // Note that you need to set explicitly only the parameters 69 // with non-default values - all the others inherit the 70 // corresponding default values. 71 // If you don't find available "dummy" tune, then you need 72 // to increase by (at least) 1 the number of tunes, and add 73 // the corresponding "SetTuneN()" methods in the 4 classes 74 // G4FTFParamCollection, G4FTFParamCollBaryonProj, 75 // G4FTFParamCollMesonProj, G4FTFParamCollPionProj 76 // 77 // In order to explore some variations of FTF parameters 78 // (for instance to find out a new tune), please select 79 // (via UI command, as explained above) the existing tune 80 // from which you want to start with as "baseline", and 81 // then set the values of the parameters you want to change 82 // via the following C++ code (to used before initialization): 83 // G4HadronicDeveloperParameters::GetInstance()->Set(...) 84 // 85 // Note: in its current, first version, of this class, 86 // any FTF tune is applied "globally", i.e. for all 87 // projectile hadrons and regardless of their kinetic 88 // energy. 89 // In future versions, we might try to have tunes that 90 // are meant for specific projectile type and/or for 91 // intervals of kinetic energy (e.g. low-energy, 92 // medium-energy, high-energy). 93 // 94 // Note: a few classes (written by Julia Yarba) used only in 95 // G4FTFParameters, related to the set of parameters of 96 // the FTF models, have been moved from the header and 97 // source files of the class G4FTFParameters to this 98 // (G4FTFTunings) class, with minimal modifications. 99 // 100 // Modified: 101 // 102 //---------------------------------------------------------------------------- 103 104 #include "G4FTFTunings.hh" 105 #include <CLHEP/Units/PhysicalConstants.h> 106 #include "G4ApplicationState.hh" 107 #include "G4StateManager.hh" 108 #include "G4HadronicDeveloperParameters.hh" 109 #include "G4ParticleDefinition.hh" 110 #include "G4FTFTuningsMessenger.hh" 111 #include "G4Threading.hh" 112 #include "G4AutoLock.hh" 113 114 115 116 G4FTFTunings* G4FTFTunings::sInstance = nullptr; 117 118 namespace { G4Mutex paramMutex = G4MUTEX_INITIALIZER; } 119 120 121 G4FTFTunings* G4FTFTunings::Instance() { 122 if ( sInstance == nullptr ) { 123 G4AutoLock l( ¶mMutex ); 124 if ( sInstance == nullptr ) { 125 static G4FTFTunings theFTFTuningsObject; 126 sInstance = &theFTFTuningsObject; 127 } 128 l.unlock(); 129 } 130 return sInstance; 131 } 132 133 134 G4FTFTunings::~G4FTFTunings() { 135 delete fMessenger; 136 } 137 138 139 G4FTFTunings::G4FTFTunings() { 140 fMessenger = new G4FTFTuningsMessenger; 141 } 142 143 144 G4bool G4FTFTunings::IsLocked() const { 145 return ( ! G4Threading::IsMasterThread() || 146 G4StateManager::GetStateManager()->GetCurrentState() != G4State_PreInit ); 147 } 148 149 150 void G4FTFTunings::SetTuneApplicabilityState( const G4int index, const G4int state ) { 151 if ( IsLocked() || index < 0 || index >= sNumberOfTunes ) return; 152 fApplicabilityOfTunes[index] = state; 153 } 154 155 156 G4int G4FTFTunings::GetIndexTune( const G4ParticleDefinition* /* particleDef */, const G4double /* ekin */ ) const { 157 // For the time being, select the first alternative (i.e. with index > 0) tune which is switched on. 158 // If nothing is found, then returns 0 (which corresponds to the default set of parameters). 159 G4int indexTune = 0; 160 for ( G4int i = 1; i < sNumberOfTunes; ++i ) { 161 if ( GetTuneApplicabilityState(i) != 0 ) { // tune i-th is switched on 162 indexTune = i; 163 break; 164 } 165 } 166 167 /* For the future 168 G4int pdgCode = std::abs( particleDef->GetPDGEncoding() ); 169 if ( particleDef != nullptr && ekin >= 0.0 && pdgCode != 0 ) { 170 G4bool isLowEnergy = ( ekin < fLowEnergyThreshold ); 171 G4bool isHighEnergy = ( ekin > fHighEnergyThreshold ); 172 G4bool isMediumEnergy = ( ( ! isLowEnergy ) && ( ! isHighEnergy ) ); 173 G4bool isMeson = ( pdgCode < 1000 ); 174 G4bool isPion = ( pdgCode == 211 || pdgCode == 111 ); 175 G4bool isKaon = ( pdgCode == 321 || pdgCode == 311 || pdgCode == 130 || pdgCode == 310 ); 176 G4bool isBaryon = ( pdgCode > 1000 ); 177 G4bool isNucleon = ( pdgCode == 2212 || pdgCode == 2112 ); 178 G4bool isAntiBaryon = particleDef->GetBaryonNumber() < 0; 179 // Based on the projectile type, its kinetic energy, and the "applicability" flag 180 // of each tune, find the right tune to be applicable in this case. 181 // ... 182 } 183 */ 184 185 //G4cout << "G4FTFTunings::GetIndexTune : projectile=" << particleDef->GetParticleName() 186 // << " ekin[MeV]=" << ekin << " -> indexTune=" << indexTune 187 // << " " << fNameOfTunes[indexTune] << G4endl; 188 189 return indexTune; 190 } 191 192 193 //============================================================================ 194 195 G4HadronicDeveloperParameters& HDP = G4HadronicDeveloperParameters::GetInstance(); 196 197 198 class G4FTFSettingDefaultHDP { 199 public: 200 G4FTFSettingDefaultHDP() { 201 // Cross sections for elementary processes 202 // 203 // these are for Inelastic interactions, i.e. Xinelastic=(Xtotal-Xelastix)>0. 204 // for elastic, all the A's & B's, Atop & Ymin are zeros 205 // general formula: Pp = A1*exp(B1*Y) + A2*exp(B2*Y) + A3 206 // but if Y<Ymin, then Pp=max(0.,Atop) 207 // for details, see also G4FTFParameters::GetProcProb( ProcN, y ) 208 // 209 // Baryons 210 /* JVY, Oct. 31, 2017: Per Alberto R. & Vladimir U., keep this group of parameters FIXED */ 211 /* JVY, June 11, 2020: try to open up... */ 212 // Process=0 --> Qexchg w/o excitation 213 HDP.SetDefault( "FTF_BARYON_PROC0_A1", 13.71 ); 214 HDP.SetDefault( "FTF_BARYON_PROC0_B1", 1.75 ); 215 HDP.SetDefault( "FTF_BARYON_PROC0_A2", -30.69 ); 216 HDP.SetDefault( "FTF_BARYON_PROC0_B2", 3.0 ); 217 HDP.SetDefault( "FTF_BARYON_PROC0_A3", 0.0 ); 218 HDP.SetDefault( "FTF_BARYON_PROC0_ATOP", 1.0 ); 219 HDP.SetDefault( "FTF_BARYON_PROC0_YMIN", 0.93 ); 220 // Process=1 --> Qexchg w/excitation 221 HDP.SetDefault( "FTF_BARYON_PROC1_A1", 25.0 ); 222 HDP.SetDefault( "FTF_BARYON_PROC1_B1", 1.0 ); 223 HDP.SetDefault( "FTF_BARYON_PROC1_A2", -50.34 ); 224 HDP.SetDefault( "FTF_BARYON_PROC1_B2", 1.5 ); 225 HDP.SetDefault( "FTF_BARYON_PROC1_A3", 0.0 ); 226 HDP.SetDefault( "FTF_BARYON_PROC1_ATOP", 0.0 ); 227 HDP.SetDefault( "FTF_BARYON_PROC1_YMIN", 1.4 ); 228 // Note: Process #2 & 3 are projectile & target diffraction 229 // they have more complex definition of A1 & A2 230 // (see example below) 231 // SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0, 0.93 ); // Projectile diffraction 232 // SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0, 0.93 ); // Target diffraction 233 // Also, for ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) 234 // projectile and/or target diffraction (dissociation) may be switched ON/OFF 235 HDP.SetDefault( "FTF_BARYON_DIFF_DISSO_PROJ", false ); 236 HDP.SetDefault( "FTF_BARYON_DIFF_DISSO_TGT", false ); 237 /* JVY, Oct. 31, 2017: Per Alberto R. & Vladimir U., keep this group of parameters FIXED */ 238 /* JVY, June 11, 2020: try to open up... */ 239 // Process=4 --> Qexchg w/additional multiplier in excitation 240 HDP.SetDefault( "FTF_BARYON_PROC4_A1", 0.6 ); 241 HDP.SetDefault( "FTF_BARYON_PROC4_B1", 0.0 ); 242 HDP.SetDefault( "FTF_BARYON_PROC4_A2", -1.2 ); 243 HDP.SetDefault( "FTF_BARYON_PROC4_B2", 0.5 ); 244 HDP.SetDefault( "FTF_BARYON_PROC4_A3", 0.0 ); 245 HDP.SetDefault( "FTF_BARYON_PROC4_ATOP", 0.0 ); 246 HDP.SetDefault( "FTF_BARYON_PROC4_YMIN", 1.4 ); 247 // Parameters of participating hadron (baryon) excitation 248 HDP.SetDefault( "FTF_BARYON_DELTA_PROB_QEXCHG", 0.0 ); 249 HDP.SetDefault( "FTF_BARYON_PROB_SAME_QEXCHG", 0.0 ); 250 HDP.SetDefault( "FTF_BARYON_DIFF_M_PROJ", 1.16, 1.16, 3.0 ); // it's supposed to be in GeV but do NOT do (*CLHEP::GeV) 251 // because it'll be done in the G4FTFParameters::SetProjMinDiffMass 252 HDP.SetDefault( "FTF_BARYON_NONDIFF_M_PROJ", 1.16, 1.16, 3.0 ); // do NOT (*CLHEP::GeV) - same as above 253 HDP.SetDefault( "FTF_BARYON_DIFF_M_TGT", 1.16, 1.16, 3.0 ); // do NOT (*CLHEP::GeV) - same as above 254 HDP.SetDefault( "FTF_BARYON_NONDIFF_M_TGT", 1.16, 1.16, 3.0 ); // do NOT (*CLHEP::GeV) - same as above 255 HDP.SetDefault( "FTF_BARYON_AVRG_PT2", 0.3, 0.08, 1.0 ); // do NOT (*CLHEP::GeV*CLHEP::GeV) 256 // JVY, Oct. 6, 2017: Per Alberto R., keep these two settings fixed (for now) 257 // HDP.SetDefault( "FTF_BARYON_PROB_DISTR_PROJ", 0.3 ); 258 // HDP.SetDefault( "FTF_BARYON_PROB_DISTR_TGT", 0.3 ); 259 // Pions 260 // JVY, Aug.8, 2018 --> Feb.14, 2019 --> June 25, 2019: 261 // Parameters of participating hadron (pions) excitation 262 /* JVY, June 25, 2019: For now, keep this group of parameters FIXED */ 263 // Process=0 --> Qexchg w/o excitation 264 HDP.SetDefault( "FTF_PION_PROC0_A1", 150.0 ); 265 HDP.SetDefault( "FTF_PION_PROC0_B1", 1.8 ); 266 HDP.SetDefault( "FTF_PION_PROC0_A2", -247.3 ); 267 HDP.SetDefault( "FTF_PION_PROC0_B2", 2.3 ); 268 HDP.SetDefault( "FTF_PION_PROC0_A3", 0.0 ); 269 HDP.SetDefault( "FTF_PION_PROC0_ATOP", 1.0 ); 270 HDP.SetDefault( "FTF_PION_PROC0_YMIN", 2.3 ); 271 // Process=1 --> Qexchg w/excitation 272 HDP.SetDefault( "FTF_PION_PROC1_A1", 5.77 ); 273 HDP.SetDefault( "FTF_PION_PROC1_B1", 0.6 ); 274 HDP.SetDefault( "FTF_PION_PROC1_A2", -5.77 ); 275 HDP.SetDefault( "FTF_PION_PROC1_B2", 0.8 ); 276 HDP.SetDefault( "FTF_PION_PROC1_A3", 0.0 ); 277 HDP.SetDefault( "FTF_PION_PROC1_ATOP", 0.0 ); 278 HDP.SetDefault( "FTF_PION_PROC1_YMIN", 0.0 ); 279 /* 280 // Note: Process #2 & 3 are projectile & target diffraction 281 // Process=2 --> Projectile diffraction 282 // Q: Would it even make sense to make these configurable ? 283 // The following is hadrcoded: 284 // Projectile Baryon Number > 10 (AbsProjectileBaryonNumber > 10) 285 // ... which is "strange" because projectile is a pion !!!... so it's always OFF 286 // (see also lines 1007-1016) 287 HDP.SetDefault( "FTF_PION_PROC2_A1", 2.27 ); 288 HDP.SetDefault( "FTF_PION_PROC2_B1", 0.5 ); 289 HDP.SetDefault( "FTF_PION_PROC2_A2", -98052.0 ); 290 HDP.SetDefault( "FTF_PION_PROC2_B2", 4.0 ); 291 HDP.SetDefault( "FTF_PION_PROC2_A3", 0.0 ); 292 HDP.SetDefault( "FTF_PION_PROC2_ATOP", 0.0 ); 293 HDP.SetDefault( "FTF_PION_PROC2_YMIN", 3.0 ); 294 */ 295 // Process=3 --> Target diffraction 296 HDP.SetDefault( "FTF_PION_PROC3_A1", 7.0 ); 297 HDP.SetDefault( "FTF_PION_PROC3_B1", 0.9 ); 298 HDP.SetDefault( "FTF_PION_PROC3_A2", -85.28 ); 299 HDP.SetDefault( "FTF_PION_PROC3_B2", 1.9 ); 300 HDP.SetDefault( "FTF_PION_PROC3_A3", 0.08 ); 301 HDP.SetDefault( "FTF_PION_PROC3_ATOP", 0.0 ); 302 HDP.SetDefault( "FTF_PION_PROC3_YMIN", 2.2 ); 303 // projectile and/or target diffraction (dissociation) may be switched ON/OFF 304 // Note: Both projectile and target diffraction are turned OFF if 305 // a) Number of Target Nucleons > 10 (NumberOfTargetNucleons > 10) 306 // OR 307 // b) Projectile Baryon Number > 10 (AbsProjectileBaryonNumber > 10) 308 // ... which is "strange" because projectile is a pion !!!... so it's always OFF 309 HDP.SetDefault( "FTF_PION_DIFF_DISSO_PROJ", false ); 310 HDP.SetDefault( "FTF_PION_DIFF_DISSO_TGT", false ); 311 /* JVY, June 25, 2019: For now keep this group of parameters FIXED */ 312 /* JVY, June 11, 2020: try to open up... */ 313 // Process=4 --> Qexchg w/additional multiplier in excitation 314 HDP.SetDefault( "FTF_PION_PROC4_A1", 1.0 ); 315 HDP.SetDefault( "FTF_PION_PROC4_B1", 0.0 ); 316 HDP.SetDefault( "FTF_PION_PROC4_A2", -11.02 ); 317 HDP.SetDefault( "FTF_PION_PROC4_B2", 1.0 ); 318 HDP.SetDefault( "FTF_PION_PROC4_A3", 0.0 ); 319 HDP.SetDefault( "FTF_PION_PROC4_ATOP", 0.0 ); 320 HDP.SetDefault( "FTF_PION_PROC4_YMIN", 2.4 ); 321 // 322 HDP.SetDefault( "FTF_PION_DELTA_PROB_QEXCHG", 0.56 ); 323 HDP.SetDefault( "FTF_PION_DIFF_M_PROJ", 1.0, 0.5, 3.0 ); 324 HDP.SetDefault( "FTF_PION_NONDIFF_M_PROJ", 1.0, 0.5, 3.0 ); 325 HDP.SetDefault( "FTF_PION_DIFF_M_TGT", 1.16, 1.16, 3.0 ); // All (NON)DIFF_M's are supposed to be in GeV but do NOT do (*CLHEP::GeV) 326 // because it'll be done in the G4FTFParameters::SetProjMinDiffMass 327 HDP.SetDefault( "FTF_PION_NONDIFF_M_TGT", 1.16, 1.16, 3.0 ); 328 HDP.SetDefault( "FTF_PION_AVRG_PT2", 0.3, 0.08, 1.0 ); // do NOT (*CLHEP::GeV*CLHEP::GeV) 329 // Nuclear destruction 330 // Note: Settings of most of these parameters are the same 331 // for different types of projectile hadron 332 // However, we decided to introduce separate variables 333 // and configuration cards for each type of projectile 334 // Baryons 335 // Projectile destruction 336 HDP.SetDefault( "FTF_BARYON_NUCDESTR_P1_PROJ", 1.0, 0.0, 1.0 ); // in principle, it should be 1./NBRN - FIXME later ! 337 HDP.SetDefault( "FTF_BARYON_NUCDESTR_P1_NBRN_PROJ", false ); 338 // for now, keep fixed p2 & p3 for the proj destruction 339 // they're defined explicitly in G4FTFParamCollection ctor 340 // Target destruction 341 HDP.SetDefault( "FTF_BARYON_NUCDESTR_P1_TGT", 1.0, 0.0, 1.0 ); 342 HDP.SetDefault( "FTF_BARYON_NUCDESTR_P1_ADEP_TGT", false ); 343 HDP.SetDefault( "FTF_BARYON_NUCDESTR_P2_TGT", 4.0, 2.0, 16.0 ); 344 HDP.SetDefault( "FTF_BARYON_NUCDESTR_P3_TGT", 2.1, 0.0, 4.0 ); 345 // 346 HDP.SetDefault( "FTF_BARYON_PT2_NUCDESTR_P1", 0.035, 0.0, 0.25 ); 347 HDP.SetDefault( "FTF_BARYON_PT2_NUCDESTR_P2", 0.04, 0.0, 0.25 ); 348 HDP.SetDefault( "FTF_BARYON_PT2_NUCDESTR_P3", 4.0, 2.0, 16.0 ); 349 HDP.SetDefault( "FTF_BARYON_PT2_NUCDESTR_P4", 2.5, 0.0, 4.0 ); 350 // 351 HDP.SetDefault( "FTF_BARYON_NUCDESTR_R2", 1.5*CLHEP::fermi*CLHEP::fermi, 0.5*CLHEP::fermi*CLHEP::fermi, 2.0*CLHEP::fermi*CLHEP::fermi ); 352 HDP.SetDefault( "FTF_BARYON_EXCI_E_PER_WNDNUCLN", 40.0*CLHEP::MeV, 0.0, 100.0*CLHEP::MeV ); 353 HDP.SetDefault( "FTF_BARYON_NUCDESTR_DISP", 0.3, 0.1, 0.4 ); 354 // JVY, Oct. 6, 2017: Per Alberto R., this is just a technical parameter, 355 // and it should NOT be changed 356 // HDP.SetDefault( "FTF_BARYON_NUCDESTR_MAXPT2", 1. * CLHEP::GeV*CLHEP::GeV ); 357 // Mesons - these parameters are common for pions, kaons, etc. (per original code) 358 // Note: *NO* projectile destruction for mesons !!! 359 // Target destruction 360 HDP.SetDefault( "FTF_MESON_NUCDESTR_P1_TGT", 0.00481, 0.0, 1.0 ); 361 HDP.SetDefault( "FTF_MESON_NUCDESTR_P1_ADEP_TGT", true ); 362 HDP.SetDefault( "FTF_MESON_NUCDESTR_P2_TGT", 4.0, 2.0, 16.0 ); 363 HDP.SetDefault( "FTF_MESON_NUCDESTR_P3_TGT", 2.1, 0.0, 4.0 ); 364 // 365 HDP.SetDefault( "FTF_MESON_PT2_NUCDESTR_P1", 0.035, 0.0, 0.25 ); 366 HDP.SetDefault( "FTF_MESON_PT2_NUCDESTR_P2", 0.04, 0.0, 0.25 ); 367 HDP.SetDefault( "FTF_MESON_PT2_NUCDESTR_P3", 4.0, 2.0, 16.0 ); 368 HDP.SetDefault( "FTF_MESON_PT2_NUCDESTR_P4", 2.5, 0.0, 4.0 ); 369 // 370 HDP.SetDefault( "FTF_MESON_NUCDESTR_R2", 1.5*CLHEP::fermi*CLHEP::fermi, 371 0.5*CLHEP::fermi*CLHEP::fermi, 372 2.0*CLHEP::fermi*CLHEP::fermi ); 373 HDP.SetDefault( "FTF_MESON_EXCI_E_PER_WNDNUCLN", 40.0*CLHEP::MeV, 0.0, 100.0*CLHEP::MeV ); 374 HDP.SetDefault( "FTF_MESON_NUCDESTR_DISP", 0.3, 0.1, 0.4 ); 375 } 376 }; 377 378 379 G4FTFSettingDefaultHDP FTFDefaultsHDP; 380 381 382 G4FTFParamCollection::G4FTFParamCollection() { 383 // Zero out everything 384 // Parameters of excitation 385 // Proc=0 --> Qexchg w/o excitation 386 fProc0A1 = 0.0; 387 fProc0B1 = 0.0; 388 fProc0A2 = 0.0; 389 fProc0B2 = 0.0; 390 fProc0A3 = 0.0; 391 fProc0Atop = 0.0; 392 fProc0Ymin = 0.0; 393 // Proc=1 --> Qexchg w/excitation 394 fProc1A1 = 0.0; 395 fProc1B1 = 0.0; 396 fProc1A2 = 0.0; 397 fProc1B2 = 0.0; 398 fProc1A3 = 0.0; 399 fProc1Atop = 0.0; 400 fProc1Ymin = 0.0; 401 // 402 fProjDiffDissociation = false; 403 fTgtDiffDissociation = false; 404 // Proc=2 --> Projectile diffraction 405 fProc2A1 = 0.0; 406 fProc2B1 = 0.0; 407 fProc2A2 = 0.0; 408 fProc2B2 = 0.0; 409 fProc2A3 = 0.0; 410 fProc2Atop = 0.0; 411 fProc2Ymin = 0.0; 412 // Proc=3 --> Target diffraction 413 fProc3A1 = 0.0; 414 fProc3B1 = 0.0; 415 fProc3A2 = 0.0; 416 fProc3B2 = 0.0; 417 fProc3A3 = 0.0; 418 fProc3Atop = 0.0; 419 fProc3Ymin = 0.0; 420 // Proc=4 --> Qexchg w/additional multiplier in excitation 421 fProc4A1 = 0.0; 422 fProc4B1 = 0.0; 423 fProc4A2 = 0.0; 424 fProc4B2 = 0.0; 425 fProc4A3 = 0.0; 426 fProc4Atop = 0.0; 427 fProc4Ymin = 0.0; 428 // Parameters of participating baryon excitation 429 fDeltaProbAtQuarkExchange = 0.0; 430 fProbOfSameQuarkExchange = 0.0; 431 fProjMinDiffMass = 0.0; 432 fProjMinNonDiffMass = 0.0; 433 fTgtMinDiffMass = 0.0; 434 fTgtMinNonDiffMass = 0.0; 435 fAveragePt2 = 0.0; 436 fProbLogDistrPrD = 0.0; 437 fProbLogDistr = 0.0; 438 // Parameters of nuclear distruction 439 // COMMONs 440 fNuclearProjDestructP1 = 0.0; 441 fNuclearProjDestructP1_NBRNDEP = false; 442 fNuclearTgtDestructP1 = 0.0; 443 fNuclearTgtDestructP1_ADEP = false; 444 fNuclearProjDestructP2 = 0.0; 445 fNuclearProjDestructP3 = 0.0; 446 fNuclearTgtDestructP2 = 0.0; 447 fNuclearTgtDestructP3 = 0.0; 448 fPt2NuclearDestructP1 = 0.0; 449 fPt2NuclearDestructP2 = 0.0; 450 fPt2NuclearDestructP3 = 0.0; 451 fPt2NuclearDestructP4 = 0.0; 452 // Baryons 453 fR2ofNuclearDestruct = 0.0; 454 fExciEnergyPerWoundedNucleon = 0.0; 455 fDofNuclearDestruct = 0.0; 456 fMaxPt2ofNuclearDestruct = 0.0; 457 // Keep the 2 parameters below fixed for now (i.e. do not take them from HDP) 458 fNuclearProjDestructP2 = 4.0; 459 fNuclearProjDestructP3 = 2.1; 460 } 461 462 463 G4FTFParamCollBaryonProj::G4FTFParamCollBaryonProj() : G4FTFParamCollection() { 464 // Parameters of participating hadron (baryon) excitation 465 // Baryons projectile 466 // Proc=0 --> Qexchg w/o excitation 467 HDP.DeveloperGet( "FTF_BARYON_PROC0_A1", fProc0A1 ); 468 HDP.DeveloperGet( "FTF_BARYON_PROC0_B1", fProc0B1 ); 469 HDP.DeveloperGet( "FTF_BARYON_PROC0_A2", fProc0A2 ); 470 HDP.DeveloperGet( "FTF_BARYON_PROC0_B2", fProc0B2 ); 471 HDP.DeveloperGet( "FTF_BARYON_PROC0_A3", fProc0A3 ); 472 HDP.DeveloperGet( "FTF_BARYON_PROC0_ATOP", fProc0Atop ); 473 HDP.DeveloperGet( "FTF_BARYON_PROC0_YMIN", fProc0Ymin ); 474 // Proc=1 --> Qexchg w/excitation 475 HDP.DeveloperGet( "FTF_BARYON_PROC1_A1", fProc1A1 ); 476 HDP.DeveloperGet( "FTF_BARYON_PROC1_B1", fProc1B1 ); 477 HDP.DeveloperGet( "FTF_BARYON_PROC1_A2", fProc1A2 ); 478 HDP.DeveloperGet( "FTF_BARYON_PROC1_B2", fProc1B2 ); 479 HDP.DeveloperGet( "FTF_BARYON_PROC1_A3", fProc1A3 ); 480 HDP.DeveloperGet( "FTF_BARYON_PROC1_ATOP", fProc1Atop ); 481 HDP.DeveloperGet( "FTF_BARYON_PROC1_YMIN", fProc1Ymin ); 482 // Proc=2 & Proc=3 for the case ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) 483 // (diffraction dissociation) 484 // Note-1: used to be ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 )... 485 // Note-2: As of 10.5, both are set to false (via HDP) 486 HDP.DeveloperGet( "FTF_BARYON_DIFF_DISSO_PROJ", fProjDiffDissociation ); 487 HDP.DeveloperGet( "FTF_BARYON_DIFF_DISSO_TGT", fTgtDiffDissociation ); 488 // Proc=4 --> Qexchg "w/additional multiplier" in excitation 489 HDP.DeveloperGet( "FTF_BARYON_PROC4_A1", fProc4A1 ); 490 HDP.DeveloperGet( "FTF_BARYON_PROC4_B1", fProc4B1 ); 491 HDP.DeveloperGet( "FTF_BARYON_PROC4_A2", fProc4A2 ); 492 HDP.DeveloperGet( "FTF_BARYON_PROC4_B2", fProc4B2 ); 493 HDP.DeveloperGet( "FTF_BARYON_PROC4_A3", fProc4A3 ); 494 HDP.DeveloperGet( "FTF_BARYON_PROC4_ATOP", fProc4Atop ); 495 HDP.DeveloperGet( "FTF_BARYON_PROC4_YMIN", fProc4Ymin ); 496 // 497 HDP.DeveloperGet( "FTF_BARYON_DELTA_PROB_QEXCHG", fDeltaProbAtQuarkExchange ); 498 HDP.DeveloperGet( "FTF_BARYON_PROB_SAME_QEXCHG", fProbOfSameQuarkExchange ); 499 HDP.DeveloperGet( "FTF_BARYON_DIFF_M_PROJ", fProjMinDiffMass ); 500 HDP.DeveloperGet( "FTF_BARYON_NONDIFF_M_PROJ", fProjMinNonDiffMass ); 501 HDP.DeveloperGet( "FTF_BARYON_DIFF_M_TGT", fTgtMinDiffMass ); 502 HDP.DeveloperGet( "FTF_BARYON_NONDIFF_M_TGT", fTgtMinNonDiffMass ); 503 HDP.DeveloperGet( "FTF_BARYON_AVRG_PT2", fAveragePt2 ); 504 // JVY - Per Alberto R., we're curretly keeping these two settings fixed, 505 // thus they're defined here explicitly, rather than via HDP 506 // HDP.DeveloperGet( "FTF_BARYON_PROB_DISTR_PROJ", fProbLogDistrPrD ); 507 // HDP.DeveloperGet( "FTF_BARYON_PROB_DISTR_TGT", fProbLogDistr ); 508 fProbLogDistrPrD = 0.55; 509 fProbLogDistr = 0.55; 510 // Nuclear destruction 511 // ---> LATER !!! ---> fBaryonMaxNumberOfCollisions = 2.; 512 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_P1_PROJ", fNuclearProjDestructP1 ); 513 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_P1_NBRN_PROJ",fNuclearProjDestructP1_NBRNDEP ); 514 // Keep the 2 parameters below fixed for now (i.e. do not take them from HDP) 515 fNuclearProjDestructP2 = 4.0; 516 fNuclearProjDestructP3 = 2.1; 517 // 518 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_P1_TGT", fNuclearTgtDestructP1 ); 519 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_P1_ADEP_TGT", fNuclearTgtDestructP1_ADEP ); 520 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_P2_TGT", fNuclearTgtDestructP2 ); 521 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_P3_TGT", fNuclearTgtDestructP3 ); 522 // 523 HDP.DeveloperGet( "FTF_BARYON_PT2_NUCDESTR_P1", fPt2NuclearDestructP1 ); 524 HDP.DeveloperGet( "FTF_BARYON_PT2_NUCDESTR_P2", fPt2NuclearDestructP2 ); 525 HDP.DeveloperGet( "FTF_BARYON_PT2_NUCDESTR_P3", fPt2NuclearDestructP3 ); 526 HDP.DeveloperGet( "FTF_BARYON_PT2_NUCDESTR_P4", fPt2NuclearDestructP4 ); 527 // 528 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_R2", fR2ofNuclearDestruct ); 529 HDP.DeveloperGet( "FTF_BARYON_EXCI_E_PER_WNDNUCLN", fExciEnergyPerWoundedNucleon ); 530 // 531 HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_DISP", fDofNuclearDestruct ); // Note: "Dof" means "Dispersion of..." 532 // 533 // Note-1: this parameter has changed from 1. to 9. between 10.2 and 10.3.ref07 !!! 534 // ... then it went back to 1. for the 10.4-candidate... 535 // Note-2: this is a "technical" parameter, it should not be changed; this is why 536 // it is defined explicitly rather than via HDP 537 // --> HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_MAXPT2", fMaxPt2ofNuclearDestruct ); 538 fMaxPt2ofNuclearDestruct = 9.0 * CLHEP::GeV*CLHEP::GeV; 539 } 540 541 542 G4FTFParamCollMesonProj::G4FTFParamCollMesonProj() : G4FTFParamCollection() { 543 // Nuclear destruction 544 // These parameters are common for all mesons 545 HDP.DeveloperGet( "FTF_MESON_NUCDESTR_P1_TGT", fNuclearTgtDestructP1 ); 546 HDP.DeveloperGet( "FTF_MESON_NUCDESTR_P1_ADEP_TGT", fNuclearTgtDestructP1_ADEP ); 547 HDP.DeveloperGet( "FTF_MESON_NUCDESTR_P2_TGT", fNuclearTgtDestructP2 ); 548 HDP.DeveloperGet( "FTF_MESON_NUCDESTR_P3_TGT", fNuclearTgtDestructP3 ); 549 // 550 HDP.DeveloperGet( "FTF_MESON_PT2_NUCDESTR_P1", fPt2NuclearDestructP1 ); 551 HDP.DeveloperGet( "FTF_MESON_PT2_NUCDESTR_P2", fPt2NuclearDestructP2 ); 552 HDP.DeveloperGet( "FTF_MESON_PT2_NUCDESTR_P3", fPt2NuclearDestructP3 ); 553 HDP.DeveloperGet( "FTF_MESON_PT2_NUCDESTR_P4", fPt2NuclearDestructP4 ); 554 // 555 HDP.DeveloperGet( "FTF_MESON_NUCDESTR_R2", fR2ofNuclearDestruct ); 556 HDP.DeveloperGet( "FTF_MESON_EXCI_E_PER_WNDNUCLN", fExciEnergyPerWoundedNucleon ); 557 HDP.DeveloperGet( "FTF_MESON_NUCDESTR_DISP", fDofNuclearDestruct ); // Note: "Dof" means "Dispersion of..." 558 // Note: it is a "technical" parameter, it should not be changed; 559 // this is why it is defined explicitly rather than via HDP 560 fMaxPt2ofNuclearDestruct = 1.0 * CLHEP::GeV*CLHEP::GeV; 561 } 562 563 564 G4FTFParamCollPionProj::G4FTFParamCollPionProj() : G4FTFParamCollMesonProj() { 565 // Parameters of participating pion excitation (pi+/- or pi0) 566 // Proc=0 --> Qexchg w/o excitation 567 HDP.DeveloperGet( "FTF_PION_PROC0_A1", fProc0A1 ); 568 HDP.DeveloperGet( "FTF_PION_PROC0_B1", fProc0B1 ); 569 HDP.DeveloperGet( "FTF_PION_PROC0_A2", fProc0A2 ); 570 HDP.DeveloperGet( "FTF_PION_PROC0_B2", fProc0B2 ); 571 HDP.DeveloperGet( "FTF_PION_PROC0_A3", fProc0A3 ); 572 HDP.DeveloperGet( "FTF_PION_PROC0_ATOP", fProc0Atop ); 573 HDP.DeveloperGet( "FTF_PION_PROC0_YMIN", fProc0Ymin ); 574 // Proc=1 --> Qexchg w/excitation 575 HDP.DeveloperGet( "FTF_PION_PROC1_A1", fProc1A1 ); 576 HDP.DeveloperGet( "FTF_PION_PROC1_B1", fProc1B1 ); 577 HDP.DeveloperGet( "FTF_PION_PROC1_A2", fProc1A2 ); 578 HDP.DeveloperGet( "FTF_PION_PROC1_B2", fProc1B2 ); 579 HDP.DeveloperGet( "FTF_PION_PROC1_A3", fProc1A3 ); 580 HDP.DeveloperGet( "FTF_PION_PROC1_ATOP", fProc1Atop ); 581 HDP.DeveloperGet( "FTF_PION_PROC1_YMIN", fProc1Ymin ); 582 // Proc=2 --> Projectile diffraction 583 // Q: Would it even make sense to make these configurable ? 584 // The following is hadrcoded: 585 // Projectile Baryon Number > 10 (AbsProjectileBaryonNumber > 10) 586 // ... which is "strange" because projectile is a pion !!!... so it's always OFF 587 // (see also lines 1007-1016) 588 /* As of Oct. 31, 2017 keep these fixed 589 HDP.DeveloperGet( "FTF_PION_PROC2_A1", fProc2A1 ); 590 HDP.DeveloperGet( "FTF_PION_PROC2_B1", fProc2B1 ); 591 HDP.DeveloperGet( "FTF_PION_PROC2_A2", fProc2A2 ); 592 HDP.DeveloperGet( "FTF_PION_PROC2_B2", fProc2B2 ); 593 HDP.DeveloperGet( "FTF_PION_PROC2_A3", fProc2A3 ); 594 HDP.DeveloperGet( "FTF_PION_PROC2_ATOP", fProc2Atop ); 595 HDP.DeveloperGet( "FTF_PION_PROC2_YMIN", fProc2Ymin ); 596 */ 597 // Keep fixed so far; see note above 598 fProc2A1 = 2.27; 599 fProc2B1 = 0.5; 600 fProc2A2 = -98052.0; 601 fProc2B2 = 4.0; 602 fProc2A3 = 0.0; 603 fProc2Atop = 0.0; 604 fProc2Ymin = 3.0; 605 // 606 // Proc=3 --> Target diffraction 607 HDP.DeveloperGet( "FTF_PION_PROC3_A1", fProc3A1 ); 608 HDP.DeveloperGet( "FTF_PION_PROC3_B1", fProc3B1 ); 609 HDP.DeveloperGet( "FTF_PION_PROC3_A2", fProc3A2 ); 610 HDP.DeveloperGet( "FTF_PION_PROC3_B2", fProc3B2 ); 611 HDP.DeveloperGet( "FTF_PION_PROC3_A3", fProc3A3 ); 612 HDP.DeveloperGet( "FTF_PION_PROC3_ATOP", fProc3Atop ); 613 HDP.DeveloperGet( "FTF_PION_PROC3_YMIN", fProc3Ymin ); 614 // For Proc2 & Proc3, pprojectile or target diffraction can be turned ON/OFF 615 // if num.baryons >10 (which is strange for projectile which is pion !!!) 616 HDP.DeveloperGet( "FTF_PION_DIFF_DISSO_PROJ", fProjDiffDissociation ); 617 HDP.DeveloperGet( "FTF_PION_DIFF_DISSO_TGT", fTgtDiffDissociation ); 618 // Proc=4 --> Qexchg "w/additional multiplier" in excitation 619 HDP.DeveloperGet( "FTF_PION_PROC4_A1", fProc4A1 ); 620 HDP.DeveloperGet( "FTF_PION_PROC4_B1", fProc4B1 ); 621 HDP.DeveloperGet( "FTF_PION_PROC4_A2", fProc4A2 ); 622 HDP.DeveloperGet( "FTF_PION_PROC4_B2", fProc4B2 ); 623 HDP.DeveloperGet( "FTF_PION_PROC4_A3", fProc4A3 ); 624 HDP.DeveloperGet( "FTF_PION_PROC4_ATOP", fProc4Atop ); 625 HDP.DeveloperGet( "FTF_PION_PROC4_YMIN", fProc4Ymin ); 626 // 627 HDP.DeveloperGet( "FTF_PION_DELTA_PROB_QEXCHG", fDeltaProbAtQuarkExchange ); 628 HDP.DeveloperGet( "FTF_PION_DIFF_M_PROJ", fProjMinDiffMass ); 629 HDP.DeveloperGet( "FTF_PION_NONDIFF_M_PROJ", fProjMinNonDiffMass ); 630 HDP.DeveloperGet( "FTF_PION_DIFF_M_TGT", fTgtMinDiffMass ); 631 HDP.DeveloperGet( "FTF_PION_NONDIFF_M_TGT", fTgtMinNonDiffMass ); 632 HDP.DeveloperGet( "FTF_PION_AVRG_PT2", fAveragePt2 ); 633 // 634 fProbOfSameQuarkExchange = 0.0; // This does NOT seem to apply to the pion case 635 // Currently keep these two parameters fixed 636 // thus they're defined here explicitly, rather than via HDP 637 fProbLogDistrPrD = 0.55; 638 fProbLogDistr = 0.55; 639 } 640 641 642 void G4FTFParamCollection::SetTune( const G4int tuneIndex ) { 643 if ( tuneIndex <= 0 || tuneIndex >= G4FTFTunings::sNumberOfTunes ) return; 644 switch ( tuneIndex ) { 645 case 1 : 646 if ( G4FTFTunings::Instance()->GetTuneApplicabilityState(1) != 0 ) SetTune1(); 647 break; 648 case 2 : 649 if ( G4FTFTunings::Instance()->GetTuneApplicabilityState(2) != 0 ) SetTune2(); 650 break; 651 case 3 : 652 if ( G4FTFTunings::Instance()->GetTuneApplicabilityState(3) != 0 ) SetTune3(); 653 break; 654 case 4 : 655 if ( G4FTFTunings::Instance()->GetTuneApplicabilityState(4) != 0 ) SetTune4(); 656 break; 657 case 5 : 658 if ( G4FTFTunings::Instance()->GetTuneApplicabilityState(5) != 0 ) SetTune5(); 659 break; 660 case 6 : 661 if ( G4FTFTunings::Instance()->GetTuneApplicabilityState(6) != 0 ) SetTune6(); 662 break; 663 case 7 : 664 if ( G4FTFTunings::Instance()->GetTuneApplicabilityState(7) != 0 ) SetTune7(); 665 break; 666 case 8 : 667 if ( G4FTFTunings::Instance()->GetTuneApplicabilityState(8) != 0 ) SetTune8(); 668 break; 669 case 9 : 670 if ( G4FTFTunings::Instance()->GetTuneApplicabilityState(9) != 0 ) SetTune9(); 671 break; 672 // Add here other cases 673 default: 674 G4ExceptionDescription ed; 675 ed << " tuneIndex= " << tuneIndex << G4endl; 676 G4Exception( "G4FTFParamCollection::SetTune", "FTF_PARAM_COLLECTION_001", FatalException, 677 "Not present corresponding SetTuneN() method !" ); 678 } 679 //G4cout << "Called G4FTFParamCollection::SetTune with tuneIndex=" << tuneIndex 680 // << " " << G4FTFTunings::Instance()->fNameOfTunes[tuneIndex] << G4endl; 681 } 682 683 684 //==================================================================== 685 // 1st (alternative) TUNE (i.e. indexTune == 1 ) 686 // 687 // This realistic, alternative tune has been determined by Julia Yarba 688 // and presented at the hadronic group meeting on 20-Jul-2022 689 // 690 // Note: the 0th tune, i.e. indexTune == 0, corresponds to the default 691 // set of FTF parameters. 692 // 693 //==================================================================== 694 695 void G4FTFParamCollection::SetTune1() { 696 // An empty method implies the take the default values, 697 // i.e. as set in G4FTFParamCollection::G4FTFParamCollection() 698 } 699 700 701 void G4FTFParamCollBaryonProj::SetTune1() { 702 G4FTFParamCollection::SetTune1(); 703 /* 704 // Parameters of participating hadron (baryon) excitation 705 // Baryons projectile 706 // Proc=0 --> Qexchg w/o excitation 707 fProc0A1 = ???; // FTF_BARYON_PROC0_A1 708 fProc0B1 = ???; // FTF_BARYON_PROC0_B1 709 fProc0A2 = ???; // FTF_BARYON_PROC0_A2 710 fProc0B2 = ???; // FTF_BARYON_PROC0_B2 711 fProc0A3 = ???; // FTF_BARYON_PROC0_A3 712 fProc0Atop = ???; // FTF_BARYON_PROC0_ATOP 713 fProc0Ymin = ???; // FTF_BARYON_PROC0_YMIN 714 // Proc=1 --> Qexchg w/excitation 715 fProc1A1 = ???; // FTF_BARYON_PROC1_A1 716 fProc1B1 = ???; // FTF_BARYON_PROC1_B1 717 fProc1A2 = ???; // FTF_BARYON_PROC1_A2 718 fProc1B2 = ???; // FTF_BARYON_PROC1_B2 719 fProc1A3 = ???; // FTF_BARYON_PROC1_A3 720 fProc1Atop = ???; // FTF_BARYON_PROC1_ATOP 721 fProc1Ymin = ???; // FTF_BARYON_PROC1_YMIN 722 // Proc=2 & Proc=3 for the case (diffraction dissociation) 723 fProjDiffDissociation = ???; // FTF_BARYON_DIFF_DISSO_PROJ 724 fTgtDiffDissociation = ???; // FTF_BARYON_DIFF_DISSO_TGT 725 // Proc=4 --> Qexchg "w/additional multiplier" in excitation 726 fProc4A1 = ???; // FTF_BARYON_PROC4_A1 727 fProc4B1 = ???; // FTF_BARYON_PROC4_B1 728 fProc4A2 = ???; // FTF_BARYON_PROC4_A2 729 fProc4B2 = ???; // FTF_BARYON_PROC4_B2 730 fProc4A3 = ???; // FTF_BARYON_PROC4_A3 731 fProc4Atop = ???; // FTF_BARYON_PROC4_ATOP 732 fProc4Ymin = ???; // FTF_BARYON_PROC4_YMIN 733 // 734 fDeltaProbAtQuarkExchange = ???; // FTF_BARYON_DELTA_PROB_QEXCHG 735 fProbOfSameQuarkExchange = ???; // FTF_BARYON_PROB_SAME_QEXCHG 736 fProjMinDiffMass = ???; // FTF_BARYON_DIFF_M_PROJ 737 fProjMinNonDiffMass = ???; // FTF_BARYON_NONDIFF_M_PROJ 738 fTgtMinDiffMass = ???; // FTF_BARYON_DIFF_M_TGT 739 fTgtMinNonDiffMass = ???; // FTF_BARYON_NONDIFF_M_TGT 740 fAveragePt2 = ???; // FTF_BARYON_AVRG_PT2 741 // Nuclear destruction 742 fNuclearProjDestructP1 = ???; // FTF_BARYON_NUCDESTR_P1_PROJ 743 fNuclearProjDestructP1_NBRNDEP = ???; // FTF_BARYON_NUCDESTR_P1_NBRN_PROJ 744 // 745 fNuclearTgtDestructP1 = ???; // FTF_BARYON_NUCDESTR_P1_TGT 746 fNuclearTgtDestructP1_ADEP = ???; // FTF_BARYON_NUCDESTR_P1_ADEP_TGT 747 fNuclearTgtDestructP2 = ???; // FTF_BARYON_NUCDESTR_P2_TGT 748 fNuclearTgtDestructP3 = ???; // FTF_BARYON_NUCDESTR_P3_TGT 749 // 750 fPt2NuclearDestructP1 = ???; // FTF_BARYON_PT2_NUCDESTR_P1 751 fPt2NuclearDestructP2 = ???; // FTF_BARYON_PT2_NUCDESTR_P2 752 fPt2NuclearDestructP3 = ???; // FTF_BARYON_PT2_NUCDESTR_P3 753 fPt2NuclearDestructP4 = ???; // FTF_BARYON_PT2_NUCDESTR_P4 754 // 755 fR2ofNuclearDestruct = ???; // FTF_BARYON_NUCDESTR_R2 756 fExciEnergyPerWoundedNucleon = ???; // FTF_BARYON_EXCI_E_PER_WNDNUCLN 757 // 758 fDofNuclearDestruct = ???; // FTF_BARYON_NUCDESTR_DISP 759 */ 760 // Values below from Julia Yarba's slides at the hadronic group meeting on 20-Jul-2022 761 fExciEnergyPerWoundedNucleon = 26.1; // +/- 0.4 // FTF_BARYON_EXCI_E_PER_WNDNUCLN 762 fNuclearTgtDestructP1 = 0.00173; // +/- 0.00004 // FTF_BARYON_NUCDESTR_P1_TGT 763 fNuclearTgtDestructP1_ADEP = true; // FTF_BARYON_NUCDESTR_P1_ADEP_TGT 764 fProc1A1 = 23.6; // +/- 0.8 // FTF_BARYON_PROC1_A1 765 fProc1A2 = -99.3; // +/- 0.4 // FTF_BARYON_PROC1_A2 766 fProc1B1 = 0.815; // +/- 0.007 // FTF_BARYON_PROC1_B1 767 fProc1B2 = 1.98; // +/- 0.03 // FTF_BARYON_PROC1_B2 768 } 769 770 771 void G4FTFParamCollMesonProj::SetTune1() { 772 G4FTFParamCollection::SetTune1(); 773 /* 774 // Nuclear destruction 775 fNuclearTgtDestructP1 = ???; // FTF_MESON_NUCDESTR_P1_TGT 776 fNuclearTgtDestructP1_ADEP = ???; // FTF_MESON_NUCDESTR_P1_ADEP_TGT 777 fNuclearTgtDestructP2 = ???; // FTF_MESON_NUCDESTR_P2_TGT 778 fNuclearTgtDestructP3 = ???; // FTF_MESON_NUCDESTR_P3_TGT 779 // 780 fPt2NuclearDestructP1 = ???; // FTF_MESON_PT2_NUCDESTR_P1 781 fPt2NuclearDestructP2 = ???; // FTF_MESON_PT2_NUCDESTR_P2 782 fPt2NuclearDestructP3 = ???; // FTF_MESON_PT2_NUCDESTR_P3 783 fPt2NuclearDestructP4 = ???; // FTF_MESON_PT2_NUCDESTR_P4 784 // 785 fR2ofNuclearDestruct = ???; // FTF_MESON_NUCDESTR_R2 786 fExciEnergyPerWoundedNucleon = ???; // FTF_MESON_EXCI_E_PER_WNDNUCLN 787 fDofNuclearDestruct = ???; // FTF_MESON_NUCDESTR_DISP 788 */ 789 } 790 791 792 void G4FTFParamCollPionProj::SetTune1( ) { 793 G4FTFParamCollMesonProj::SetTune1(); 794 /* 795 // Parameters of participating pion excitation (pi+/- or pi0) 796 // Proc=0 --> Qexchg w/o excitation 797 fProc0A1 = ???; // FTF_PION_PROC0_A1 798 fProc0B1 = ???; // FTF_PION_PROC0_B1 799 fProc0A2 = ???; // FTF_PION_PROC0_A2 800 fProc0B2 = ???; // FTF_PION_PROC0_B2 801 fProc0A3 = ???; // FTF_PION_PROC0_A3 802 fProc0Atop = ???; // FTF_PION_PROC0_ATOP 803 fProc0Ymin = ???; // FTF_PION_PROC0_YMIN 804 // Proc=1 --> Qexchg w/excitation 805 fProc1A1 = ???; // FTF_PION_PROC1_A1 806 fProc1B1 = ???; // FTF_PION_PROC1_B1 807 fProc1A2 = ???; // FTF_PION_PROC1_A2 808 fProc1B2 = ???; // FTF_PION_PROC1_B2 809 fProc1A3 = ???; // FTF_PION_PROC1_A3 810 fProc1Atop = ???; // FTF_PION_PROC1_ATOP 811 fProc1Ymin = ???; // FTF_PION_PROC1_YMIN 812 // Proc=2 --> Projectile diffraction : keep these fixed 813 //Fixed fProc2A1 = ???; // FTF_PION_PROC2_A1 814 //Fixed fProc2B1 = ???; // FTF_PION_PROC2_B1 815 //Fixed fProc2A2 = ???; // FTF_PION_PROC2_A2 816 //Fixed fProc2B2 = ???; // FTF_PION_PROC2_B2 817 //Fixed fProc2A3 = ???; // FTF_PION_PROC2_A3 818 //Fixed fProc2Atop = ???; // FTF_PION_PROC2_ATOP 819 //Fixed fProc2Ymin = ???; // FTF_PION_PROC2_YMIN 820 // Proc=3 --> Target diffraction 821 fProc3A1 = ???; // FTF_PION_PROC3_A1 822 fProc3B1 = ???; // FTF_PION_PROC3_B1 823 fProc3A2 = ???; // FTF_PION_PROC3_A2 824 fProc3B2 = ???; // FTF_PION_PROC3_B2 825 fProc3A3 = ???; // FTF_PION_PROC3_A3 826 fProc3Atop = ???; // FTF_PION_PROC3_ATOP 827 fProc3Ymin = ???; // FTF_PION_PROC3_YMIN 828 // 829 fProjDiffDissociation = ???; // FTF_PION_DIFF_DISSO_PROJ 830 fTgtDiffDissociation = ???; // FTF_PION_DIFF_DISSO_TGT 831 // 832 // Proc=4 --> Qexchg "w/additional multiplier" in excitation 833 fProc4A1 = ???; // FTF_PION_PROC4_A1 834 fProc4B1 = ???; // FTF_PION_PROC4_B1 835 fProc4A2 = ???; // FTF_PION_PROC4_A2 836 fProc4B2 = ???; // FTF_PION_PROC4_B2 837 fProc4A3 = ???; // FTF_PION_PROC4_A3 838 fProc4Atop = ???; // FTF_PION_PROC4_ATOP 839 fProc4Ymin = ???; // FTF_PION_PROC4_YMIN 840 // 841 fDeltaProbAtQuarkExchange = ???; // FTF_PION_DELTA_PROB_QEXCHG 842 fProjMinDiffMass = ???; // FTF_PION_DIFF_M_PROJ 843 fProjMinNonDiffMass = ???; // FTF_PION_NONDIFF_M_PROJ 844 fTgtMinDiffMass = ???; // FTF_PION_DIFF_M_TGT 845 fTgtMinNonDiffMass = ???; // FTF_PION_NONDIFF_M_TGT 846 fAveragePt2 = ???; // FTF_PION_AVRG_PT2 847 */ 848 } 849 850 //==================================================================== 851 // 2nd (alternative) TUNE (i.e. indexTune == 2 ) 852 // 853 // This is work-in-progress, very preliminary alternative tune that 854 // has been outlined by Julia Yarba presented at the 27th CM on 26-JSept-2022 855 // The nuclear destruction parameters that are common for *all mesons* 856 // (see G4FTFParamCollMesonProj::SetTune2) 857 // while the Qexchg with excitationn of participants parameters are 858 // for *pion" projectile only (see G4FTFParamCollPionProj::SetTune2) 859 // 860 //==================================================================== 861 862 void G4FTFParamCollection::SetTune2() { 863 // An empty method implies the take the default values, 864 // i.e. as set in G4FTFParamCollection::G4FTFParamCollection() 865 } 866 867 868 void G4FTFParamCollBaryonProj::SetTune2() { 869 G4FTFParamCollection::SetTune2(); 870 //... 871 } 872 873 874 void G4FTFParamCollMesonProj::SetTune2() { 875 G4FTFParamCollection::SetTune2(); 876 // Nuclear destruction 877 // Note: these values are the same for all mesons 878 // (although bear in mind that they've been obtained for the pion projectile 879 // via fits against experimaental data for the pion beam) 880 fExciEnergyPerWoundedNucleon = 58.1; // +/- 0.7 // FTF_MESON_EXCI_E_PER_WNDNUCLN 881 fNuclearTgtDestructP1 = 0.001026; // +/- 0.00003 // FTF_MESON_NUCDESTR_P1_TGT 882 fNuclearTgtDestructP1_ADEP = true; // FTF_MESON_NUCDESTR_P1_ADEP_TGT 883 } 884 885 886 void G4FTFParamCollPionProj::SetTune2( ) { 887 G4FTFParamCollMesonProj::SetTune2(); 888 // Proc=1 --> Qexchg w/excitation 889 fProc1A1 = 5.84; // +/- 0.12 // FTF_PION_PROC1_A1 890 fProc1B1 = 0.337; // +/- 0.006 // FTF_PION_PROC1_B1 891 fProc1A2 = -7.57; // +/- 0.08 // FTF_PION_PROC1_A2 892 fProc1B2 = 0.44; // +/- 0.008 // FTF_PION_PROC1_B2 893 } 894 895 //==================================================================== 896 // 3rd (alternative) TUNE (i.e. indexTune == 3 ) 897 // 898 // Combination of the 1st (baryon) and 2nd (pion) tunes 899 // 900 //==================================================================== 901 902 void G4FTFParamCollection::SetTune3() { 903 // An empty method implies the take the default values, 904 // i.e. as set in G4FTFParamCollection::G4FTFParamCollection() 905 } 906 907 908 void G4FTFParamCollBaryonProj::SetTune3() { 909 G4FTFParamCollection::SetTune3(); 910 // Values below from Julia Yarba's slides at the hadronic group meeting on 20-Jul-2022 911 fExciEnergyPerWoundedNucleon = 26.1; // +/- 0.4 // FTF_BARYON_EXCI_E_PER_WNDNUCLN 912 fNuclearTgtDestructP1 = 0.00173; // +/- 0.00004 // FTF_BARYON_NUCDESTR_P1_TGT 913 fNuclearTgtDestructP1_ADEP = true; // FTF_BARYON_NUCDESTR_P1_ADEP_TGT 914 fProc1A1 = 23.6; // +/- 0.8 // FTF_BARYON_PROC1_A1 915 fProc1A2 = -99.3; // +/- 0.4 // FTF_BARYON_PROC1_A2 916 fProc1B1 = 0.815; // +/- 0.007 // FTF_BARYON_PROC1_B1 917 fProc1B2 = 1.98; // +/- 0.03 // FTF_BARYON_PROC1_B2 918 } 919 920 921 void G4FTFParamCollMesonProj::SetTune3() { 922 G4FTFParamCollection::SetTune3(); 923 // Nuclear destruction 924 // Note: These values are the same for all mesons 925 // (although bear in mind that they've been obtained for the pion projectile 926 // via fits against experimaental data for the pion beam) 927 // 928 fExciEnergyPerWoundedNucleon = 58.1; // +/- 0.7 // FTF_MESON_EXCI_E_PER_WNDNUCLN 929 fNuclearTgtDestructP1 = 0.001026; // +/- 0.00003 // FTF_MESON_NUCDESTR_P1_TGT 930 fNuclearTgtDestructP1_ADEP = true; // FTF_MESON_NUCDESTR_P1_ADEP_TGT 931 } 932 933 934 void G4FTFParamCollPionProj::SetTune3( ) { 935 G4FTFParamCollMesonProj::SetTune3(); 936 // Proc=1 --> Qexchg w/excitation 937 fProc1A1 = 5.84; // +/- 0.12 // FTF_PION_PROC1_A1 938 fProc1B1 = 0.337; // +/- 0.006 // FTF_PION_PROC1_B1 939 fProc1A2 = -7.57; // +/- 0.08 // FTF_PION_PROC1_A2 940 fProc1B2 = 0.44; // +/- 0.008 // FTF_PION_PROC1_B2 941 } 942 943 //==================================================================== 944 // 4th (alternative) TUNE (i.e. indexTune == 4 ) 945 // 946 // Tune meant to overcome the too narrow (i.e. optimistic) pion shower 947 // energy resolutions in ATLAS calorimeters with respect to test-beam 948 // data. 949 // 950 //==================================================================== 951 952 void G4FTFParamCollection::SetTune4() { 953 // An empty method implies the take the default values, 954 // i.e. as set in G4FTFParamCollection::G4FTFParamCollection() 955 } 956 957 958 void G4FTFParamCollBaryonProj::SetTune4() { 959 G4FTFParamCollection::SetTune4(); 960 } 961 962 963 void G4FTFParamCollMesonProj::SetTune4() { 964 G4FTFParamCollection::SetTune4(); 965 // Nuclear destruction 966 // Note: these values are the same for all mesons 967 fExciEnergyPerWoundedNucleon = 50.0; // FTF_MESON_EXCI_E_PER_WNDNUCLN 968 fNuclearTgtDestructP1 = 1.0; // FTF_MESON_NUCDESTR_P1_TGT 969 fNuclearTgtDestructP1_ADEP = false; // FTF_MESON_NUCDESTR_P1_ADEP_TGT 970 } 971 972 973 void G4FTFParamCollPionProj::SetTune4( ) { 974 G4FTFParamCollMesonProj::SetTune4(); 975 // Proc=0 --> Quark exchange without excitation 976 fProc0A1 = 720.0; // FTF_PION_PROC0_A1 977 fProc0B1 = 2.5; // FTF_PION_PROC0_B1 978 fProc0A2 = 2.3; // FTF_PION_PROC0_A2 979 fProc0B2 = 1.0; // FTF_PION_PROC0_B2 980 fProc0A3 = 0.0; // FTF_PION_PROC0_A3 981 fProc0Atop = 1.0; // FTF_PION_PROC0_Atop 982 fProc0Ymin = 2.7; // FTF_PION_PROC0_Ymin 983 // Proc=1 --> Quark exchange with excitation 984 fProc1A1 = 12.87; // FTF_PION_PROC1_A1 985 fProc1B1 = 0.5; // FTF_PION_PROC1_B1 986 fProc1A2 = -44.91; // FTF_PION_PROC1_A2 987 fProc1B2 = 1.0; // FTF_PION_PROC1_B2 988 fProc1A3 = 0.0; // FTF_PION_PROC1_A3 989 fProc1Atop = 0.0; // FTF_PION_PROC1_Atop 990 fProc1Ymin = 2.5; // FTF_PION_PROC1_Ymin 991 // Proc=4 --> Quark exchange with excitation multiplier 992 fProc4A1 = 1.0; // FTF_PION_PROC4_A1 993 fProc4B1 = 0.0; // FTF_PION_PROC4_B1 994 fProc4A2 = -3.49; // FTF_PION_PROC4_A2 995 fProc4B2 = 0.5; // FTF_PION_PROC4_B2 996 fProc4A3 = 0.0; // FTF_PION_PROC4_A3 997 fProc4Atop = 0.0; // FTF_PION_PROC4_Atop 998 fProc4Ymin = 2.5; // FTF_PION_PROC4_Ymin 999 } 1000 1001 //==================================================================== 1002 // 5th (alternative) TUNE (i.e. indexTune == 5 ) 1003 // 1004 // DUMMY tune: identical to the default set of parameters. 1005 // You can replace it with a "real" tune by specifying 1006 // only the non-default parameters. 1007 //==================================================================== 1008 1009 void G4FTFParamCollection::SetTune5() { 1010 // An empty method implies the take the default values, 1011 // i.e. as set in G4FTFParamCollection::G4FTFParamCollection() 1012 } 1013 1014 1015 void G4FTFParamCollBaryonProj::SetTune5() { 1016 G4FTFParamCollection::SetTune5(); 1017 //... 1018 } 1019 1020 1021 void G4FTFParamCollMesonProj::SetTune5() { 1022 G4FTFParamCollection::SetTune5(); 1023 //... 1024 } 1025 1026 1027 void G4FTFParamCollPionProj::SetTune5( ) { 1028 G4FTFParamCollMesonProj::SetTune5(); 1029 //... 1030 } 1031 1032 //==================================================================== 1033 // 6th (alternative) TUNE (i.e. indexTune == 6 ) 1034 // 1035 // DUMMY tune: identical to the default set of parameters. 1036 // You can replace it with a "real" tune by specifying 1037 // only the non-default parameters. 1038 //==================================================================== 1039 1040 void G4FTFParamCollection::SetTune6() { 1041 // An empty method implies the take the default values, 1042 // i.e. as set in G4FTFParamCollection::G4FTFParamCollection() 1043 } 1044 1045 1046 void G4FTFParamCollBaryonProj::SetTune6() { 1047 G4FTFParamCollection::SetTune6(); 1048 //... 1049 } 1050 1051 1052 void G4FTFParamCollMesonProj::SetTune6() { 1053 G4FTFParamCollection::SetTune6(); 1054 //... 1055 } 1056 1057 1058 void G4FTFParamCollPionProj::SetTune6( ) { 1059 G4FTFParamCollMesonProj::SetTune6(); 1060 //... 1061 } 1062 1063 //==================================================================== 1064 // 7th (alternative) TUNE (i.e. indexTune == 7 ) 1065 // 1066 // DUMMY tune: identical to the default set of parameters. 1067 // You can replace it with a "real" tune by specifying 1068 // only the non-default parameters. 1069 //==================================================================== 1070 1071 void G4FTFParamCollection::SetTune7() { 1072 // An empty method implies the take the default values, 1073 // i.e. as set in G4FTFParamCollection::G4FTFParamCollection() 1074 } 1075 1076 1077 void G4FTFParamCollBaryonProj::SetTune7() { 1078 G4FTFParamCollection::SetTune7(); 1079 //... 1080 } 1081 1082 1083 void G4FTFParamCollMesonProj::SetTune7() { 1084 G4FTFParamCollection::SetTune7(); 1085 //... 1086 } 1087 1088 1089 void G4FTFParamCollPionProj::SetTune7( ) { 1090 G4FTFParamCollMesonProj::SetTune7(); 1091 //... 1092 } 1093 1094 //==================================================================== 1095 // 8th (alternative) TUNE (i.e. indexTune == 8 ) 1096 // 1097 // DUMMY tune: identical to the default set of parameters. 1098 // You can replace it with a "real" tune by specifying 1099 // only the non-default parameters. 1100 //==================================================================== 1101 1102 void G4FTFParamCollection::SetTune8() { 1103 // An empty method implies the take the default values, 1104 // i.e. as set in G4FTFParamCollection::G4FTFParamCollection() 1105 } 1106 1107 1108 void G4FTFParamCollBaryonProj::SetTune8() { 1109 G4FTFParamCollection::SetTune8(); 1110 //... 1111 } 1112 1113 1114 void G4FTFParamCollMesonProj::SetTune8() { 1115 G4FTFParamCollection::SetTune8(); 1116 //... 1117 } 1118 1119 1120 void G4FTFParamCollPionProj::SetTune8( ) { 1121 G4FTFParamCollMesonProj::SetTune8(); 1122 //... 1123 } 1124 1125 //==================================================================== 1126 // 9th (alternative) TUNE (i.e. indexTune == 9 ) 1127 // 1128 // DUMMY tune: identical to the default set of parameters. 1129 // You can replace it with a "real" tune by specifying 1130 // only the non-default parameters. 1131 //==================================================================== 1132 1133 void G4FTFParamCollection::SetTune9() { 1134 // An empty method implies the take the default values, 1135 // i.e. as set in G4FTFParamCollection::G4FTFParamCollection() 1136 } 1137 1138 1139 void G4FTFParamCollBaryonProj::SetTune9() { 1140 G4FTFParamCollection::SetTune9(); 1141 //... 1142 } 1143 1144 1145 void G4FTFParamCollMesonProj::SetTune9() { 1146 G4FTFParamCollection::SetTune9(); 1147 //... 1148 } 1149 1150 1151 void G4FTFParamCollPionProj::SetTune9( ) { 1152 G4FTFParamCollMesonProj::SetTune9(); 1153 //... 1154 } 1155 1156 //... 1157