Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/parton_string/diffraction/src/G4FTFTunings.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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( &paramMutex );
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