Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/parton_string/diffraction/src/G4FTFParameters.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 ]

Diff markup

Differences between /processes/hadronic/models/parton_string/diffraction/src/G4FTFParameters.cc (Version 11.3.0) and /processes/hadronic/models/parton_string/diffraction/src/G4FTFParameters.cc (Version 10.7)


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