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.3.p2)


  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 // $Id: G4FTFParameters.cc 101902 2016-12-07 08:40:04Z gcosmo $
                                                   >>  28 // GEANT4 tag $Name:  $
 27 //                                                 29 //
 28                                                    30 
 29 #include <utility>                                 31 #include <utility>                                        
 30                                                    32 
 31 #include "G4FTFParameters.hh"                      33 #include "G4FTFParameters.hh"
 32                                                    34 
 33 #include "G4ios.hh"                                35 #include "G4ios.hh"
 34 #include "G4PhysicalConstants.hh"                  36 #include "G4PhysicalConstants.hh"
 35 #include "G4SystemOfUnits.hh"                      37 #include "G4SystemOfUnits.hh"
 36                                                    38 
 37 #include "G4ParticleDefinition.hh"                 39 #include "G4ParticleDefinition.hh"
                                                   >>  40 
 38 #include "G4Proton.hh"                             41 #include "G4Proton.hh"
 39 #include "G4Neutron.hh"                            42 #include "G4Neutron.hh"
                                                   >>  43 
 40 #include "G4PionPlus.hh"                           44 #include "G4PionPlus.hh"
 41 #include "G4PionMinus.hh"                          45 #include "G4PionMinus.hh"
 42 #include "G4KaonPlus.hh"                           46 #include "G4KaonPlus.hh"
 43 #include "G4KaonMinus.hh"                          47 #include "G4KaonMinus.hh"
 44                                                    48 
 45 #include "G4CrossSectionDataSetRegistry.hh"    << 
 46 #include "G4VComponentCrossSection.hh"         << 
 47 #include "G4ComponentGGHadronNucleusXsc.hh"    << 
 48 #include "G4LundStringFragmentation.hh"        << 
 49                                                << 
 50 #include "G4Exp.hh"                                49 #include "G4Exp.hh"
 51 #include "G4Log.hh"                                50 #include "G4Log.hh"
 52 #include "G4Pow.hh"                                51 #include "G4Pow.hh"
 53                                                    52 
 54 #include "G4HadronicDeveloperParameters.hh"    << 
 55 #include "G4HadronicParameters.hh"             << 
 56                                                << 
 57 //============================================     53 //============================================================================
 58                                                    54 
 59 //#define debugFTFparams                           55 //#define debugFTFparams
 60                                                    56 
                                                   >>  57 
 61 //============================================     58 //============================================================================
 62                                                    59 
 63 G4FTFParameters::G4FTFParameters()             <<  60 G4FTFParameters::G4FTFParameters() :
                                                   >>  61   FTFhNcmsEnergy( 0.0 ), 
                                                   >>  62   FTFxsManager( 0 ),
                                                   >>  63   FTFXtotal( 0.0 ), FTFXelastic( 0.0 ), FTFXinelastic( 0.0 ), FTFXannihilation( 0.0 ),
                                                   >>  64   ProbabilityOfAnnihilation( 0.0 ), ProbabilityOfElasticScatt( 0.0 ),
                                                   >>  65   RadiusOfHNinteractions2( 0.0 ), FTFSlope( 0.0 ), 
                                                   >>  66   AvaragePt2ofElasticScattering( 0.0 ), FTFGamma0( 0.0 ),
                                                   >>  67   DeltaProbAtQuarkExchange( 0.0 ), ProbOfSameQuarkExchange( 0.0 ), 
                                                   >>  68   ProjMinDiffMass( 0.0 ), ProjMinNonDiffMass( 0.0 ), ProbLogDistrPrD(0.0),
                                                   >>  69   TarMinDiffMass( 0.0 ), TarMinNonDiffMass( 0.0 ),
                                                   >>  70   AveragePt2( 0.0 ), ProbLogDistr( 0.0 ),
                                                   >>  71   Pt2kink( 0.0 ),
                                                   >>  72   MaxNumberOfCollisions( 0.0 ), ProbOfInelInteraction( 0.0 ), 
                                                   >>  73   CofNuclearDestructionPr( 0.0 ), CofNuclearDestruction( 0.0 ),
                                                   >>  74   R2ofNuclearDestruction( 0.0 ), ExcitationEnergyPerWoundedNucleon( 0.0 ),
                                                   >>  75   DofNuclearDestruction( 0.0 ), Pt2ofNuclearDestruction( 0.0 ), MaxPt2ofNuclearDestruction( 0.0 ) 
 64 {                                                  76 {
 65   // Set-up alternative sets of FTF parameters <<  77   for ( G4int i = 0; i < 4; i++ ) {
 66   // Note that the very first tune (with index <<  78     for ( G4int j = 0; j < 7; j++ ) {
 67   // set of parameters, which does not need to <<  79       ProcParams[i][j] = 0.0;
 68   // the for loop below starts from 1 and not  <<  80     }
 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;  << 
 78   Reset();                                     << 
 79   csGGinstance =                               << 
 80     G4CrossSectionDataSetRegistry::Instance()- << 
 81   if (!csGGinstance) {                         << 
 82     csGGinstance = new G4ComponentGGHadronNucl << 
 83   }                                                81   }
 84                                                << 
 85   EnableDiffDissociationForBGreater10 = G4Hadr << 
 86                                                << 
 87   // Set parameters of a string kink           << 
 88   SetPt2Kink( 0.0*GeV*GeV );  // To switch off << 
 89   G4double Puubar( 1.0/3.0 ), Pddbar( 1.0/3.0  << 
 90   //G4double Puubar( 0.41 ), Pddbar( 0.41 ), P << 
 91   SetQuarkProbabilitiesAtGluonSplitUp( Puubar, << 
 92 }                                                  82 }
 93                                                    83 
                                                   >>  84 
                                                   >>  85 //============================================================================
                                                   >>  86 
                                                   >>  87 G4FTFParameters::~G4FTFParameters() {}
                                                   >>  88 
                                                   >>  89 
 94 //============================================     90 //============================================================================
 95                                                    91 
 96 void G4FTFParameters::InitForInteraction( cons <<  92 G4ThreadLocal bool G4FTFParameters::chipsComponentXSisInitialized = false;
 97                                           G4in <<  93 G4ThreadLocal G4ChipsComponentXS* G4FTFParameters::chipsComponentXSinstance = 0;
                                                   >>  94 
                                                   >>  95 
                                                   >>  96 //============================================================================
                                                   >>  97 
                                                   >>  98 G4FTFParameters::G4FTFParameters( const G4ParticleDefinition* particle, 
                                                   >>  99                                   G4int theA, G4int theZ, G4double PlabPerParticle ) :
                                                   >> 100   FTFhNcmsEnergy( 0.0 ), 
                                                   >> 101   FTFxsManager( 0 ),
                                                   >> 102   FTFXtotal( 0.0 ), FTFXelastic( 0.0 ), FTFXinelastic( 0.0 ), FTFXannihilation( 0.0 ),
                                                   >> 103   ProbabilityOfAnnihilation( 0.0 ), ProbabilityOfElasticScatt( 0.0 ),
                                                   >> 104   RadiusOfHNinteractions2( 0.0 ), FTFSlope( 0.0 ), 
                                                   >> 105   AvaragePt2ofElasticScattering( 0.0 ), FTFGamma0( 0.0 ),
                                                   >> 106   DeltaProbAtQuarkExchange( 0.0 ), ProbOfSameQuarkExchange( 0.0 ), 
                                                   >> 107   ProjMinDiffMass( 0.0 ), ProjMinNonDiffMass( 0.0 ), ProbLogDistrPrD(0.0),
                                                   >> 108   TarMinDiffMass( 0.0 ), TarMinNonDiffMass( 0.0 ),
                                                   >> 109   AveragePt2( 0.0 ), ProbLogDistr( 0.0 ),
                                                   >> 110   Pt2kink( 0.0 ),
                                                   >> 111   MaxNumberOfCollisions( 0.0 ), ProbOfInelInteraction( 0.0 ), 
                                                   >> 112   CofNuclearDestructionPr( 0.0 ), CofNuclearDestruction( 0.0 ),
                                                   >> 113   R2ofNuclearDestruction( 0.0 ), ExcitationEnergyPerWoundedNucleon( 0.0 ),
                                                   >> 114   DofNuclearDestruction( 0.0 ), Pt2ofNuclearDestruction( 0.0 ), MaxPt2ofNuclearDestruction( 0.0 ) 
 98 {                                                 115 {
 99   Reset();                                     << 116   for ( G4int i = 0; i < 4; i++ ) {
                                                   >> 117     for ( G4int j = 0; j < 7; j++ ) {
                                                   >> 118       ProcParams[i][j] = 0.0;
                                                   >> 119     }
                                                   >> 120   }
100                                                   121 
101   G4int    ProjectilePDGcode    = particle->Ge    122   G4int    ProjectilePDGcode    = particle->GetPDGEncoding();
102   G4int    ProjectileabsPDGcode = std::abs( Pr    123   G4int    ProjectileabsPDGcode = std::abs( ProjectilePDGcode );
103   G4double ProjectileMass       = particle->Ge    124   G4double ProjectileMass       = particle->GetPDGMass();
104   G4double ProjectileMass2      = ProjectileMa    125   G4double ProjectileMass2      = ProjectileMass * ProjectileMass;
105                                                   126 
106   G4int ProjectileBaryonNumber( 0 ), AbsProjec    127   G4int ProjectileBaryonNumber( 0 ), AbsProjectileBaryonNumber( 0 ), AbsProjectileCharge( 0 );
107   G4bool ProjectileIsNucleus = false;             128   G4bool ProjectileIsNucleus = false;
108                                                << 129 
109   if ( std::abs( particle->GetBaryonNumber() )    130   if ( std::abs( particle->GetBaryonNumber() ) > 1 ) {  // The projectile is a nucleus
110     ProjectileIsNucleus       = true;             131     ProjectileIsNucleus       = true;
111     ProjectileBaryonNumber    = particle->GetB    132     ProjectileBaryonNumber    = particle->GetBaryonNumber();
112     AbsProjectileBaryonNumber = std::abs( Proj    133     AbsProjectileBaryonNumber = std::abs( ProjectileBaryonNumber );
113     AbsProjectileCharge       = std::abs( G4in << 134     AbsProjectileCharge       = G4int( particle->GetPDGCharge() );
114     if ( ProjectileBaryonNumber > 1 ) {           135     if ( ProjectileBaryonNumber > 1 ) {
115       ProjectilePDGcode = 2212; ProjectileabsP    136       ProjectilePDGcode = 2212; ProjectileabsPDGcode = 2212;  // Proton
116     } else {                                      137     } else { 
117       ProjectilePDGcode = -2212; Projectileabs    138       ProjectilePDGcode = -2212; ProjectileabsPDGcode = 2212;  // Anti-Proton
118     }                                             139     }
119     ProjectileMass  = G4Proton::Proton()->GetP    140     ProjectileMass  = G4Proton::Proton()->GetPDGMass();
120     ProjectileMass2 = sqr( ProjectileMass );      141     ProjectileMass2 = sqr( ProjectileMass );
121   }                                               142   } 
122                                                   143 
123   G4double TargetMass  = G4Proton::Proton()->G    144   G4double TargetMass  = G4Proton::Proton()->GetPDGMass();
124   G4double TargetMass2 = TargetMass * TargetMa    145   G4double TargetMass2 = TargetMass * TargetMass;
125                                                   146 
126   G4double Plab = PlabPerParticle;                147   G4double Plab = PlabPerParticle;
127   G4double Elab = std::sqrt( Plab*Plab + Proje    148   G4double Elab = std::sqrt( Plab*Plab + ProjectileMass2 );
128   G4double KineticEnergy = Elab - ProjectileMa    149   G4double KineticEnergy = Elab - ProjectileMass;
129                                                   150 
130   G4double S = ProjectileMass2 + TargetMass2 +    151   G4double S = ProjectileMass2 + TargetMass2 + 2.0*TargetMass*Elab;
131                                                   152 
132   #ifdef debugFTFparams                           153   #ifdef debugFTFparams
133   G4cout << "--------- FTF Parameters --------    154   G4cout << "--------- FTF Parameters --------------" << G4endl << "Proj Plab " 
134          << ProjectilePDGcode << " " << Plab <    155          << ProjectilePDGcode << " " << Plab << G4endl << "Mass KinE " << ProjectileMass
135          << " " << KineticEnergy << G4endl <<     156          << " " << KineticEnergy << G4endl << " A Z " << theA << " " << theZ << G4endl;
136   #endif                                          157   #endif
137                                                << 158 
138   G4double Ylab, Xtotal( 0.0 ), Xelastic( 0.0  << 159   G4double Ylab, Xtotal, Xelastic, Xannihilation;
139   G4int NumberOfTargetNucleons;                   160   G4int NumberOfTargetNucleons;
140                                                   161 
141   Ylab = 0.5 * G4Log( (Elab + Plab)/(Elab - Pl    162   Ylab = 0.5 * G4Log( (Elab + Plab)/(Elab - Plab) );
142                                                   163 
143   G4double ECMSsqr = S/GeV/GeV;                   164   G4double ECMSsqr = S/GeV/GeV;
144   G4double SqrtS   = std::sqrt( S )/GeV;          165   G4double SqrtS   = std::sqrt( S )/GeV;
145                                                   166 
146   #ifdef debugFTFparams                           167   #ifdef debugFTFparams
147   G4cout << "Sqrt(s) " << SqrtS << G4endl;        168   G4cout << "Sqrt(s) " << SqrtS << G4endl;
148   #endif                                          169   #endif
149                                                   170 
150   TargetMass     /= GeV; TargetMass2     /= (G    171   TargetMass     /= GeV; TargetMass2     /= (GeV*GeV);
151   ProjectileMass /= GeV; ProjectileMass2 /= (G    172   ProjectileMass /= GeV; ProjectileMass2 /= (GeV*GeV);
152                                                   173 
                                                   >> 174   // Andrea Dotti (13Jan2013):
                                                   >> 175   // The following lines are changed for G4MT. Originally the code was:
                                                   >> 176   //   static G4ChipsComponentXS* _instance = new G4ChipsComponentXS();  // Witek Pokorski
                                                   >> 177   // Note the code could go back at original if _instance could be shared among threads
                                                   >> 178   if ( ! chipsComponentXSisInitialized ) {
                                                   >> 179     chipsComponentXSisInitialized = true;
                                                   >> 180     chipsComponentXSinstance = new G4ChipsComponentXS();
                                                   >> 181   }
                                                   >> 182   G4ChipsComponentXS* _instance = chipsComponentXSinstance;
                                                   >> 183   FTFxsManager = _instance;
                                                   >> 184 
153   Plab /= GeV;                                    185   Plab /= GeV;
154   G4double Xftf = 0.0;                            186   G4double Xftf = 0.0;
155                                                   187 
156   G4int NumberOfTargetProtons  = theZ;            188   G4int NumberOfTargetProtons  = theZ; 
157   G4int NumberOfTargetNeutrons = theA - theZ;     189   G4int NumberOfTargetNeutrons = theA - theZ;
158   NumberOfTargetNucleons = NumberOfTargetProto    190   NumberOfTargetNucleons = NumberOfTargetProtons + NumberOfTargetNeutrons;
159                                                   191 
160   // ---------- hadron projectile ------------ << 192   if ( ProjectilePDGcode == 2212  ||  ProjectilePDGcode == 2112 ) {  // Projectile is nucleon        
161   if ( AbsProjectileBaryonNumber <= 1 ) {  //  << 193     G4ParticleDefinition* Proton = G4Proton::Proton();                                          //ALB 
162                                                << 194     G4double XtotPP = FTFxsManager->GetTotalElementCrossSection( Proton, KineticEnergy, 1, 0 ); //ALB
163     // Interaction on P                        << 195 
164     G4double xTtP = csGGinstance->GetTotalIsot << 196     G4ParticleDefinition* Neutron = G4Neutron::Neutron();
165     G4double xElP = csGGinstance->GetElasticIs << 197     G4double XtotPN = FTFxsManager->GetTotalElementCrossSection( Neutron, KineticEnergy, 1, 0 ); //ALB
166                                                << 198     G4double XelPP  = FTFxsManager->GetElasticElementCrossSection( Proton, KineticEnergy, 1, 0 );
167     // Interaction on N                        << 199     G4double XelPN  = FTFxsManager->GetElasticElementCrossSection( Neutron, KineticEnergy, 1, 0 );
168     G4double xTtN = csGGinstance->GetTotalIsot << 
169     G4double xElN = csGGinstance->GetElasticIs << 
170                                                << 
171     // Average properties of h+N interactions  << 
172     Xtotal   = ( NumberOfTargetProtons * xTtP  << 
173     Xelastic = ( NumberOfTargetProtons * xElP  << 
174     Xannihilation = 0.0;                       << 
175                                                << 
176     Xtotal /= millibarn;                       << 
177     Xelastic /= millibarn;                     << 
178                                                   200 
179     #ifdef debugFTFparams                         201     #ifdef debugFTFparams
180     G4cout<<"Estimated cross sections (total a << 202     G4cout << "XsPP " << XtotPP/millibarn << " " << XelPP/millibarn << G4endl
                                                   >> 203            << "XsPN " << XtotPN/millibarn << " " << XelPN/millibarn << G4endl;
181     #endif                                        204     #endif
182   }                                            << 
183                                                << 
184   // ---------- nucleus projectile ----------- << 
185   if ( ProjectileIsNucleus  &&  ProjectileBary << 
186                                                << 
187     #ifdef debugFTFparams                      << 
188     G4cout<<"Projectile is a nucleus: A and Z  << 
189     #endif                                     << 
190                                                << 
191     const G4ParticleDefinition* Proton = G4Pro << 
192     // Interaction on P                        << 
193     G4double XtotPP = csGGinstance->GetTotalIs << 
194     G4double XelPP  = csGGinstance->GetElastic << 
195                                                << 
196     const G4ParticleDefinition* Neutron = G4Ne << 
197     // Interaction on N                        << 
198     G4double XtotPN = csGGinstance->GetTotalIs << 
199     G4double XelPN  = csGGinstance->GetElastic << 
200                                                   205 
201     #ifdef debugFTFparams                      << 206     if ( ! ProjectileIsNucleus ) {  // Projectile is hadron
202     G4cout << "XsPP (total and elastic) " << X << 207       Xtotal   = ( NumberOfTargetProtons * XtotPP + NumberOfTargetNeutrons * XtotPN ) /
203            << "XsPN (total and elastic) " << X << 208                  NumberOfTargetNucleons;
204     #endif                                     << 209       Xelastic = ( NumberOfTargetProtons * XelPP  + NumberOfTargetNeutrons * XelPN  ) / 
205                                                << 210                  NumberOfTargetNucleons;
206     Xtotal = (                                 << 211     } else {  // Projectile is a nucleus
                                                   >> 212       Xtotal = ( 
207                   AbsProjectileCharge * Number    213                   AbsProjectileCharge * NumberOfTargetProtons * XtotPP + 
208                   ( AbsProjectileBaryonNumber     214                   ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
209                       NumberOfTargetNeutrons *    215                       NumberOfTargetNeutrons * XtotPP 
210                 +                                 216                 + 
211                   ( AbsProjectileCharge * Numb    217                   ( AbsProjectileCharge * NumberOfTargetNeutrons +
212                     ( AbsProjectileBaryonNumbe    218                     ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
213                         NumberOfTargetProtons     219                         NumberOfTargetProtons ) * XtotPN
214                 ) / ( AbsProjectileBaryonNumbe    220                 ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons );
215     Xelastic= (                                << 221       Xelastic= (
216                   AbsProjectileCharge * Number    222                   AbsProjectileCharge * NumberOfTargetProtons * XelPP + 
217                   ( AbsProjectileBaryonNumber     223                   ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
218                       NumberOfTargetNeutrons *    224                       NumberOfTargetNeutrons * XelPP 
219                  +                                225                  + 
220                   ( AbsProjectileCharge * Numb    226                   ( AbsProjectileCharge * NumberOfTargetNeutrons +
221                     ( AbsProjectileBaryonNumbe    227                     ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
222                         NumberOfTargetProtons     228                         NumberOfTargetProtons ) * XelPN
223                 ) / ( AbsProjectileBaryonNumbe    229                 ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons );
                                                   >> 230     }
224                                                   231 
225     Xannihilation = 0.0;                          232     Xannihilation = 0.0;
226     Xtotal /= millibarn;                          233     Xtotal /= millibarn;
227     Xelastic /= millibarn;                        234     Xelastic /= millibarn;
228   }                                            << 
229                                                   235 
230   // ---------- The projectile is anti-baryon  << 236   } else if ( ProjectilePDGcode < -1000 ) { // Projectile is anti_baryon
231   //                     anti  Sigma^0_c       << 
232   if ( ProjectilePDGcode >= -4112  &&  Project << 
233     // Only non-strange and strange baryons ar << 
234                                                << 
235     #ifdef debugFTFparams                      << 
236     G4cout<<"Projectile is a anti-baryon or an << 
237     G4cout<<"(Only non-strange and strange bar << 
238     #endif                                     << 
239                                                   237 
240     G4double X_a( 0.0 ), X_b( 0.0 ), X_c( 0.0     238     G4double X_a( 0.0 ), X_b( 0.0 ), X_c( 0.0 ), X_d( 0.0 );
241     G4double MesonProdThreshold = ProjectileMa    239     G4double MesonProdThreshold = ProjectileMass + TargetMass + 
242                                   ( 2.0 * 0.14    240                                   ( 2.0 * 0.14 + 0.016 ); // 2 Mpi + DeltaE;
243                                                   241 
244     if ( PlabPerParticle < 40.0*MeV ) { // Low    242     if ( PlabPerParticle < 40.0*MeV ) { // Low energy limits. Projectile at rest.
245       Xtotal =   1512.9;    // mb                 243       Xtotal =   1512.9;    // mb
246       Xelastic =  473.2;    // mb                 244       Xelastic =  473.2;    // mb
247       X_a =       625.1;    // mb                 245       X_a =       625.1;    // mb
248       X_b =         9.780;  // mb                 246       X_b =         9.780;  // mb
249       X_c =        49.989;  // mb                 247       X_c =        49.989;  // mb
250       X_d =         6.614;  // mb                 248       X_d =         6.614;  // mb
251     } else { // Total and elastic cross sectio    249     } else { // Total and elastic cross section of PbarP interactions a'la Arkhipov
252       G4double LogS = G4Log( ECMSsqr / 33.0625    250       G4double LogS = G4Log( ECMSsqr / 33.0625 );
253       G4double Xasmpt = 36.04 + 0.304*LogS*Log    251       G4double Xasmpt = 36.04 + 0.304*LogS*LogS;  // mb
254       LogS = G4Log( SqrtS / 20.74 );              252       LogS = G4Log( SqrtS / 20.74 );
255       G4double Basmpt = 11.92 + 0.3036*LogS*Lo    253       G4double Basmpt = 11.92 + 0.3036*LogS*LogS;  // GeV^(-2)
256       G4double R0 = std::sqrt( 0.40874044*Xasm    254       G4double R0 = std::sqrt( 0.40874044*Xasmpt - Basmpt );  // GeV^(-1)
257                                                   255 
258       G4double FlowF = SqrtS / std::sqrt( ECMS    256       G4double FlowF = SqrtS / std::sqrt( ECMSsqr*ECMSsqr + ProjectileMass2*ProjectileMass2 +
259                                           Targ    257                                           TargetMass2*TargetMass2 - 2.0*ECMSsqr*ProjectileMass2
260                                           - 2.    258                                           - 2.0*ECMSsqr*TargetMass2 
261                                           - 2.    259                                           - 2.0*ProjectileMass2*TargetMass2 );
262                                                   260 
263       Xtotal = Xasmpt * ( 1.0 + 13.55*FlowF/R0    261       Xtotal = Xasmpt * ( 1.0 + 13.55*FlowF/R0/R0/R0*
264                                 (1.0 - 4.47/Sq    262                                 (1.0 - 4.47/SqrtS + 12.38/ECMSsqr - 12.43/SqrtS/ECMSsqr) );  // mb
265                                                   263 
266       Xasmpt = 4.4 + 0.101*LogS*LogS;  // mb      264       Xasmpt = 4.4 + 0.101*LogS*LogS;  // mb
267       Xelastic = Xasmpt * ( 1.0 + 59.27*FlowF/    265       Xelastic = Xasmpt * ( 1.0 + 59.27*FlowF/R0/R0/R0*
268                                   (1.0 - 6.95/    266                                   (1.0 - 6.95/SqrtS + 23.54/ECMSsqr - 25.34/SqrtS/ECMSsqr ) ); // mb
269                                                   267 
                                                   >> 268       //G4cout << "Param Xtotal Xelastic " << Xtotal << " " << Xelastic << G4endl
                                                   >> 269       //       << "FlowF " << FlowF << " SqrtS " << SqrtS << G4endl
                                                   >> 270       //       << "Param Xelastic-NaN " << Xelastic << " " 
                                                   >> 271       //       << 1.5*16.654/pow(ECMSsqr/2.176/2.176,2.2) << " " << ECMSsqr << G4endl;
                                                   >> 272 
270       X_a = 25.0*FlowF;  // mb, 3-shirts diagr    273       X_a = 25.0*FlowF;  // mb, 3-shirts diagram
271                                                   274 
272       if ( SqrtS < MesonProdThreshold ) {         275       if ( SqrtS < MesonProdThreshold ) {
273         X_b = 3.13 + 140.0*G4Pow::GetInstance(    276         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->    277         Xelastic -= 3.0*X_b;  // Xel-X(PbarP->NNbar)
275       } else {                                    278       } else {
276         X_b = 6.8/SqrtS;  // mb anti-quark-qua    279         X_b = 6.8/SqrtS;  // mb anti-quark-quark annihilation
277         Xelastic -= 3.0*X_b;  // Xel-X(PbarP->    280         Xelastic -= 3.0*X_b;  // Xel-X(PbarP->NNbar)
278       }                                           281       }
279                                                   282 
280       X_c = 2.0*FlowF*sqr( ProjectileMass + Ta    283       X_c = 2.0*FlowF*sqr( ProjectileMass + TargetMass )/ECMSsqr;  // mb rearrangement
281                                                   284 
282       X_d = 23.3/ECMSsqr;  // mb anti-quark-qu    285       X_d = 23.3/ECMSsqr;  // mb anti-quark-quark string creation
283     }                                             286     }
284                                                   287 
                                                   >> 288     //G4cout << "Param Xtotal Xelastic " << Xtotal << " " << Xelastic << G4endl
                                                   >> 289     //       << "Para a b c d " << X_a << " " << X_b << " " << X_c << " " << X_d << G4endl;
                                                   >> 290     //       << "Para a b c d " << X_a << " " << 5.*X_b << " " << 5.*X_c << " " << 6.*X_d 
                                                   >> 291     //       << G4endl;
                                                   >> 292 
285     G4double Xann_on_P( 0.0), Xann_on_N( 0.0 )    293     G4double Xann_on_P( 0.0), Xann_on_N( 0.0 );
286                                                   294 
287     if ( ProjectilePDGcode == -2212 ) {        << 295     if ( ProjectilePDGcode == -2212 ) {  // Pbar+P/N
288       Xann_on_P = X_a + X_b*5.0 + X_c*5.0 + X_    296       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_    297       Xann_on_N = X_a + X_b*4.0 + X_c*4.0 + X_d*4.0;
290     } else if ( ProjectilePDGcode == -2112 ) { << 298     } else if ( ProjectilePDGcode == -2112 ) {  // NeutrBar+P/N
291       Xann_on_P = X_a + X_b*4.0 + X_c*4.0 + X_    299       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_    300       Xann_on_N = X_a + X_b*5.0 + X_c*5.0 + X_d*6.0;
293     } else if ( ProjectilePDGcode == -3122 ) { << 301     } else if ( ProjectilePDGcode == -3122 ) {  // LambdaBar+P/N
294       Xann_on_P = X_a + X_b*3.0 + X_c*3.0 + X_    302       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_    303       Xann_on_N = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
296     } else if ( ProjectilePDGcode == -3112 ) { << 304     } else if ( ProjectilePDGcode == -3112 ) {  // Sigma-Bar+P/N
297       Xann_on_P = X_a + X_b*2.0 + X_c*2.0 + X_    305       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_    306       Xann_on_N = X_a + X_b*4.0 + X_c*4.0 + X_d*2.0;
299     } else if ( ProjectilePDGcode == -3212 ) { << 307     } else if ( ProjectilePDGcode == -3212 ) {  // Sigma0Bar+P/N
300       Xann_on_P = X_a + X_b*3.0 + X_c*3.0 + X_    308       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_    309       Xann_on_N = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
302     } else if ( ProjectilePDGcode == -3222 ) { << 310     } else if ( ProjectilePDGcode == -3222 ) {  // Sigma+Bar+P/N
303       Xann_on_P = X_a + X_b*4.0 + X_c*4.0 + X_    311       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_    312       Xann_on_N = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
305     } else if ( ProjectilePDGcode == -3312 ) { << 313     } else if ( ProjectilePDGcode == -3312 ) {  // Xi-Bar+P/N
306       Xann_on_P = X_a + X_b*1.0 + X_c*1.0 + X_    314       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_    315       Xann_on_N = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
308     } else if ( ProjectilePDGcode == -3322 ) { << 316     } else if ( ProjectilePDGcode == -3322 ) {  // Xi0Bar+P/N
309       Xann_on_P = X_a + X_b*2.0 + X_c*2.0 + X_    317       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_    318       Xann_on_N = X_a + X_b*1.0 + X_c*1.0 + X_d*0.0;
311     } else if ( ProjectilePDGcode == -3334 ) { << 319     } else if ( ProjectilePDGcode == -3334 ) {  // Omega-Bar+P/N
312       Xann_on_P = X_a + X_b*0.0 + X_c*0.0 + X_    320       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_    321       Xann_on_N = X_a + X_b*0.0 + X_c*0.0 + X_d*0.0;
314     } else {                                      322     } else {
315       G4cout << "Unknown anti-baryon for FTF a    323       G4cout << "Unknown anti-baryon for FTF annihilation" << G4endl;
316     }                                             324     }
317                                                   325 
318     //G4cout << "Sum          " << Xann_on_P <    326     //G4cout << "Sum          " << Xann_on_P << G4endl;
319                                                   327 
320     if ( ! ProjectileIsNucleus ) {  // Project    328     if ( ! ProjectileIsNucleus ) {  // Projectile is anti-baryon
321       Xannihilation = ( NumberOfTargetProtons     329       Xannihilation = ( NumberOfTargetProtons * Xann_on_P  + NumberOfTargetNeutrons * Xann_on_N  )
322                       / NumberOfTargetNucleons    330                       / NumberOfTargetNucleons;
323     } else {  // Projectile is a nucleus          331     } else {  // Projectile is a nucleus
324       Xannihilation = (                           332       Xannihilation = (
325                         ( AbsProjectileCharge     333                         ( AbsProjectileCharge * NumberOfTargetProtons + 
326                           ( AbsProjectileBaryo    334                           ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
327                           NumberOfTargetNeutro    335                           NumberOfTargetNeutrons ) * Xann_on_P 
328                        +                          336                        + 
329                         ( AbsProjectileCharge     337                         ( AbsProjectileCharge * NumberOfTargetNeutrons +
330                           ( AbsProjectileBaryo    338                           ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
331                           NumberOfTargetProton    339                           NumberOfTargetProtons ) * Xann_on_N
332                       ) / ( AbsProjectileBaryo    340                       ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons );
333     }                                             341     }
334                                                   342 
335     //G4double Xftf = 0.0;                        343     //G4double Xftf = 0.0;  
336     MesonProdThreshold = ProjectileMass + Targ    344     MesonProdThreshold = ProjectileMass + TargetMass + (0.14 + 0.08); // Mpi + DeltaE
337     if ( SqrtS > MesonProdThreshold ) {           345     if ( SqrtS > MesonProdThreshold ) {
338       Xftf = 36.0 * ( 1.0 - MesonProdThreshold    346       Xftf = 36.0 * ( 1.0 - MesonProdThreshold/SqrtS );
339     }                                             347     }
340                                                   348 
341     Xtotal = Xelastic + Xannihilation + Xftf;     349     Xtotal = Xelastic + Xannihilation + Xftf;
342                                                   350 
343     #ifdef debugFTFparams                         351     #ifdef debugFTFparams
344     G4cout << "Plab Xtotal, Xelastic  Xinel Xf    352     G4cout << "Plab Xtotal, Xelastic  Xinel Xftf " << Plab << " " << Xtotal << " " << Xelastic
345            << " " << Xtotal - Xelastic << " "  << 353            << " " << Xtotal - Xelastic << " " << Xtotal - Xelastic - Xannihilation << G4endl
346            << "Plab Xelastic/Xtotal,  Xann/Xin    354            << "Plab Xelastic/Xtotal,  Xann/Xin " << Plab << " " << Xelastic/Xtotal << " " 
347            << Xannihilation/(Xtotal - Xelastic    355            << Xannihilation/(Xtotal - Xelastic) << G4endl;
348     #endif                                        356     #endif
349                                                   357 
350   }                                            << 358   } else if ( ProjectilePDGcode == 211 ) {  // Projectile is PionPlus
                                                   >> 359 
                                                   >> 360     G4double XtotPiP = FTFxsManager->GetTotalElementCrossSection( particle, KineticEnergy, 1, 0 ); 
                                                   >> 361     G4ParticleDefinition* PionMinus = G4PionMinus::PionMinus();
                                                   >> 362     G4double XtotPiN = FTFxsManager->GetTotalElementCrossSection( PionMinus, KineticEnergy, 1, 0 ); 
                                                   >> 363     G4double XelPiP  = FTFxsManager->GetElasticElementCrossSection( particle, KineticEnergy, 1, 0 ); 
                                                   >> 364     G4double XelPiN  = FTFxsManager->GetElasticElementCrossSection( PionMinus, KineticEnergy, 1, 0 );
                                                   >> 365     Xtotal   = ( NumberOfTargetProtons * XtotPiP + NumberOfTargetNeutrons * XtotPiN ) 
                                                   >> 366                / NumberOfTargetNucleons;
                                                   >> 367     Xelastic = ( NumberOfTargetProtons * XelPiP  + NumberOfTargetNeutrons * XelPiN ) 
                                                   >> 368                / NumberOfTargetNucleons; 
                                                   >> 369     Xannihilation = 0.0;
                                                   >> 370     Xtotal /= millibarn;
                                                   >> 371     Xelastic /= millibarn;
                                                   >> 372   
                                                   >> 373   } else if ( ProjectilePDGcode == -211 ) {  // Projectile is PionMinus
                                                   >> 374  
                                                   >> 375     G4double XtotPiP = FTFxsManager->GetTotalElementCrossSection( particle, KineticEnergy, 1, 0 );
                                                   >> 376     G4ParticleDefinition* PionPlus = G4PionPlus::PionPlus();
                                                   >> 377     G4double XtotPiN = FTFxsManager->GetTotalElementCrossSection( PionPlus, KineticEnergy, 1, 0 );   
                                                   >> 378     G4double XelPiP  = FTFxsManager->GetElasticElementCrossSection( particle, KineticEnergy, 1, 0 );
                                                   >> 379     G4double XelPiN  = FTFxsManager->GetElasticElementCrossSection( PionPlus, KineticEnergy, 1, 0 );
                                                   >> 380     Xtotal   = ( NumberOfTargetProtons * XtotPiP + NumberOfTargetNeutrons * XtotPiN )
                                                   >> 381                / NumberOfTargetNucleons;
                                                   >> 382     Xelastic = ( NumberOfTargetProtons * XelPiP  + NumberOfTargetNeutrons * XelPiN )
                                                   >> 383                / NumberOfTargetNucleons;
                                                   >> 384     Xannihilation = 0.0;
                                                   >> 385     Xtotal /= millibarn;
                                                   >> 386     Xelastic /= millibarn;
                                                   >> 387       
                                                   >> 388   } else if ( ProjectilePDGcode == 111 ) {  // Projectile is PionZero
                                                   >> 389       
                                                   >> 390     G4ParticleDefinition* PionPlus = G4PionPlus::PionPlus();
                                                   >> 391     G4double XtotPipP = FTFxsManager->GetTotalElementCrossSection( PionPlus, KineticEnergy, 1, 0 );
                                                   >> 392     G4ParticleDefinition* PionMinus = G4PionMinus::PionMinus();
                                                   >> 393     G4double XtotPimP = FTFxsManager->GetTotalElementCrossSection( PionMinus, KineticEnergy, 1, 0 ); 
                                                   >> 394     G4double XelPipP = FTFxsManager->GetElasticElementCrossSection( PionPlus, KineticEnergy, 1, 0 );
                                                   >> 395     G4double XelPimP = FTFxsManager->GetElasticElementCrossSection( PionMinus, KineticEnergy, 1, 0 );
                                                   >> 396     G4double XtotPiP = ( XtotPipP + XtotPimP ) / 2.0;
                                                   >> 397     G4double XtotPiN = XtotPiP;
                                                   >> 398     G4double XelPiP = ( XelPipP  + XelPimP ) / 2.0;
                                                   >> 399     G4double XelPiN = XelPiP;
                                                   >> 400     Xtotal   = ( NumberOfTargetProtons * XtotPiP + NumberOfTargetNeutrons * XtotPiN )
                                                   >> 401                / NumberOfTargetNucleons;
                                                   >> 402     Xelastic = ( NumberOfTargetProtons * XelPiP  + NumberOfTargetNeutrons * XelPiN )
                                                   >> 403                / NumberOfTargetNucleons; 
                                                   >> 404     Xannihilation = 0.0;
                                                   >> 405     Xtotal /= millibarn;
                                                   >> 406     Xelastic /= millibarn;
                                                   >> 407       
                                                   >> 408   } else if ( ProjectilePDGcode == 321 ) {  // Projectile is KaonPlus
                                                   >> 409 
                                                   >> 410     G4double XtotKP = FTFxsManager->GetTotalElementCrossSection( particle, KineticEnergy, 1, 0 );
                                                   >> 411     G4ParticleDefinition* KaonMinus = G4KaonMinus::KaonMinus();
                                                   >> 412     G4double XtotKN = FTFxsManager->GetTotalElementCrossSection( KaonMinus, KineticEnergy, 1, 0 );
                                                   >> 413     G4double XelKP  = FTFxsManager->GetElasticElementCrossSection( particle, KineticEnergy, 1, 0 );
                                                   >> 414     G4double XelKN  = FTFxsManager->GetElasticElementCrossSection( KaonMinus, KineticEnergy, 1, 0 );
                                                   >> 415     Xtotal   = ( NumberOfTargetProtons * XtotKP + NumberOfTargetNeutrons * XtotKN )
                                                   >> 416                / NumberOfTargetNucleons;
                                                   >> 417     Xelastic = ( NumberOfTargetProtons * XelKP  + NumberOfTargetNeutrons * XelKN )
                                                   >> 418                / NumberOfTargetNucleons;
                                                   >> 419     Xannihilation = 0.0;
                                                   >> 420     Xtotal /= millibarn;
                                                   >> 421     Xelastic /= millibarn;
                                                   >> 422 
                                                   >> 423   } else if ( ProjectilePDGcode == -321 ) {  // Projectile is KaonMinus
351                                                   424 
352   if ( Xtotal == 0.0 ) {  // Projectile is und << 425     G4double XtotKP = FTFxsManager->GetTotalElementCrossSection( particle, KineticEnergy, 1, 0 );
                                                   >> 426     G4ParticleDefinition* KaonPlus = G4KaonPlus::KaonPlus();
                                                   >> 427     G4double XtotKN = FTFxsManager->GetTotalElementCrossSection( KaonPlus, KineticEnergy, 1, 0 );
                                                   >> 428     G4double XelKP  = FTFxsManager->GetElasticElementCrossSection( particle, KineticEnergy, 1, 0 );
                                                   >> 429     G4double XelKN  = FTFxsManager->GetElasticElementCrossSection( KaonPlus, KineticEnergy, 1, 0 ); 
                                                   >> 430     Xtotal   = ( NumberOfTargetProtons * XtotKP + NumberOfTargetNeutrons * XtotKN )
                                                   >> 431                / NumberOfTargetNucleons;
                                                   >> 432     Xelastic = ( NumberOfTargetProtons * XelKP  + NumberOfTargetNeutrons * XelKN )
                                                   >> 433                / NumberOfTargetNucleons;
                                                   >> 434     Xannihilation = 0.0;
                                                   >> 435     Xtotal /= millibarn;
                                                   >> 436     Xelastic /= millibarn;
                                                   >> 437 
                                                   >> 438   } else if ( ProjectilePDGcode == 311  ||  ProjectilePDGcode == 130  ||  
                                                   >> 439               ProjectilePDGcode == 310 ) {  // Projectile is KaonZero
                                                   >> 440 
                                                   >> 441     G4ParticleDefinition* KaonPlus = G4KaonPlus::KaonPlus();
                                                   >> 442     G4double XtotKpP = FTFxsManager->GetTotalElementCrossSection( KaonPlus, KineticEnergy, 1, 0 );
                                                   >> 443     G4ParticleDefinition* KaonMinus = G4KaonMinus::KaonMinus();
                                                   >> 444     G4double XtotKmP = FTFxsManager->GetTotalElementCrossSection( KaonMinus, KineticEnergy, 1, 0 );
                                                   >> 445     G4double XelKpP = FTFxsManager->GetElasticElementCrossSection( KaonPlus, KineticEnergy, 1, 0 );
                                                   >> 446     G4double XelKmP = FTFxsManager->GetElasticElementCrossSection( KaonMinus, KineticEnergy, 1, 0 );
                                                   >> 447     G4double XtotKP = ( XtotKpP + XtotKmP ) / 2.0;
                                                   >> 448     G4double XtotKN = XtotKP;
                                                   >> 449     G4double XelKP = ( XelKpP + XelKmP ) / 2.0; 
                                                   >> 450     G4double XelKN = XelKP;
                                                   >> 451     Xtotal   = ( NumberOfTargetProtons * XtotKP + NumberOfTargetNeutrons * XtotKN )
                                                   >> 452                / NumberOfTargetNucleons;
                                                   >> 453     Xelastic = ( NumberOfTargetProtons * XelKP  + NumberOfTargetNeutrons * XelKN )
                                                   >> 454                / NumberOfTargetNucleons;
                                                   >> 455     Xannihilation = 0.0;
                                                   >> 456     Xtotal /= millibarn;
                                                   >> 457     Xelastic /= millibarn;
353                                                   458 
354     const G4ParticleDefinition* Proton = G4Pro << 459   } else {  // Projectile is undefined, Nucleon assumed
355     // Interaction on P                        << 
356     G4double XtotPP = csGGinstance->GetTotalIs << 
357     G4double XelPP  = csGGinstance->GetElastic << 
358                                                << 
359     // Interaction on N                        << 
360     G4double XtotPN = csGGinstance->GetTotalIs << 
361     G4double XelPN  = csGGinstance->GetElastic << 
362                                                   460 
                                                   >> 461     G4ParticleDefinition* Proton = G4Proton::Proton();
                                                   >> 462     G4double XtotPP = FTFxsManager->GetTotalElementCrossSection( Proton, KineticEnergy, 1, 0 );
                                                   >> 463     G4ParticleDefinition* Neutron = G4Neutron::Neutron();
                                                   >> 464     G4double XtotPN = FTFxsManager->GetTotalElementCrossSection( Neutron, KineticEnergy, 1, 0 );
                                                   >> 465     G4double XelPP  = FTFxsManager->GetElasticElementCrossSection( Proton, KineticEnergy, 1, 0 );
                                                   >> 466     G4double XelPN  = FTFxsManager->GetElasticElementCrossSection( Neutron, KineticEnergy, 1, 0 );
363     Xtotal   = ( NumberOfTargetProtons  * Xtot    467     Xtotal   = ( NumberOfTargetProtons  * XtotPP + NumberOfTargetNeutrons * XtotPN )
364                / NumberOfTargetNucleons;          468                / NumberOfTargetNucleons;
365     Xelastic = ( NumberOfTargetProtons  * XelP    469     Xelastic = ( NumberOfTargetProtons  * XelPP  + NumberOfTargetNeutrons * XelPN )
366                / NumberOfTargetNucleons;          470                / NumberOfTargetNucleons;
367     Xannihilation = 0.0;                          471     Xannihilation = 0.0;
368     Xtotal /= millibarn;                          472     Xtotal /= millibarn;
369     Xelastic /= millibarn;                        473     Xelastic /= millibarn;
                                                   >> 474 
370   };                                              475   };
371                                                   476 
372   // Geometrical parameters                       477   // Geometrical parameters
373   SetTotalCrossSection( Xtotal );                 478   SetTotalCrossSection( Xtotal );
374   SetElasticCrossSection( Xelastic );          << 479   SetElastisCrossSection( Xelastic );
375   SetInelasticCrossSection( Xtotal - Xelastic     480   SetInelasticCrossSection( Xtotal - Xelastic );
376                                                   481 
                                                   >> 482   //G4cout << "Plab Xtotal, Xelastic Xinel Xftf " << Plab << " " << Xtotal << " " << Xelastic 
                                                   >> 483   //       << " " << Xtotal - Xelastic << " " << Xtotal - Xelastic - Xannihilation << G4endl;
                                                   >> 484   //if (Xtotal - Xelastic != 0.0 ) {
                                                   >> 485   //  G4cout << "Plab Xelastic/Xtotal,  Xann/Xin " << Plab << " " << Xelastic/Xtotal 
                                                   >> 486   //         << " " << Xannihilation / (Xtotal - Xelastic) << G4endl;
                                                   >> 487   //} else {
                                                   >> 488   //  G4cout << "Plab Xelastic/Xtotal,  Xann     " << Plab << " " << Xelastic/Xtotal
                                                   >> 489   //         << " " << Xannihilation << G4endl;
                                                   >> 490   //}
                                                   >> 491   //G4int Uzhi; G4cin >> Uzhi;
                                                   >> 492 
377   // Interactions with elastic and inelastic c    493   // Interactions with elastic and inelastic collisions
378   SetProbabilityOfElasticScatt( Xtotal, Xelast    494   SetProbabilityOfElasticScatt( Xtotal, Xelastic );
379                                                << 
380   SetRadiusOfHNinteractions2( Xtotal/pi/10.0 )    495   SetRadiusOfHNinteractions2( Xtotal/pi/10.0 );
381                                                << 496   if ( Xtotal - Xelastic == 0.0 ) {
382   if ( ( Xtotal - Xelastic ) == 0.0 ) {        << 
383     SetProbabilityOfAnnihilation( 0.0 );          497     SetProbabilityOfAnnihilation( 0.0 );
384   } else {                                        498   } else {
385     SetProbabilityOfAnnihilation( Xannihilatio    499     SetProbabilityOfAnnihilation( Xannihilation / (Xtotal - Xelastic) );
386   }                                               500   }
387                                                   501 
388   if(Xelastic > 0.0) {                         << 502   // No elastic scattering 
389     SetSlope( Xtotal*Xtotal/16.0/pi/Xelastic/0 << 503   //SetProbabilityOfElasticScatt( Xtotal, 0.0 );
390                                                << 504   //SetRadiusOfHNinteractions2( (Xtotal - Xelastic)/pi/10.0 );
391     // Parameters of elastic scattering        << 505   //SetProbabilityOfAnnihilation( 1.0 );
392     // Gaussian parametrization of elastic sca << 506   //SetProbabilityOfAnnihilation( 0.0 );
393     SetAvaragePt2ofElasticScattering( 1.0/( Xt << 507 
394   } else {                                     << 508   SetSlope( Xtotal*Xtotal/16.0/pi/Xelastic/0.3894 ); // Slope parameter of elastic scattering
395     SetSlope(1.0);                             << 509                                                      // (GeV/c)^(-2))
396     SetAvaragePt2ofElasticScattering( 0.0);    << 510   //G4cout << "Slope " << GetSlope() << G4endl;
397   }                                            << 
398   SetGamma0( GetSlope()*Xtotal/10.0/2.0/pi );     511   SetGamma0( GetSlope()*Xtotal/10.0/2.0/pi );
399                                                   512 
400   G4double Xinel = Xtotal - Xelastic;          << 513   // Parameters of elastic scattering
                                                   >> 514   // Gaussian parametrization of elastic scattering amplitude assumed
                                                   >> 515   SetAvaragePt2ofElasticScattering( 1.0/( Xtotal*Xtotal/16.0/pi/Xelastic/0.3894 )*GeV*GeV );
                                                   >> 516   //G4cout << "AvaragePt2ofElasticScattering " << GetAvaragePt2ofElasticScattering() << G4endl;
401                                                   517 
402   #ifdef debugFTFparams                        << 518   // Parameters of excitations
403   G4cout<< "Slope of hN elastic scattering" << << 
404   G4cout << "AvaragePt2ofElasticScattering " < << 
405   G4cout<<"Parameters of excitation for projec << 
406   #endif                                       << 
407                                                   519 
408   if ( (ProjectilePDGcode == 2212) || (Project << 520   G4double Xinel = Xtotal - Xelastic;
409                                                << 521   //G4cout << "Param ProjectilePDGcode " << ProjectilePDGcode << G4endl;
410     const G4int indexTune = G4FTFTunings::Inst << 
411                                                << 
412     // A process probability is parameterized  << 
413     // y is a rapidity of a partcle in the tar << 
414                                                   522 
                                                   >> 523   if ( ProjectilePDGcode > 1000 ) {  // Projectile is baryon
415     //        Proc#   A1      B1            A2    524     //        Proc#   A1      B1            A2       B2   A3   Atop       Ymin
416     /* original hadr-string-diff-V10-03-07 (si << 
417     SetParams( 0,     13.71, 1.75,          -2    525     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    526     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 << 527     if( Xinel > 0.) {
420     SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*1 << 528       SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0  ,     0.93);// Projectile diffraction
421     SetParams( 4,       1.0, 0.0 ,          -2 << 529       SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0  ,     0.93);// Target diffraction
422     */                                         << 530       SetParams( 4,       1.0, 0.0 ,          -2.01 , 0.5 , 0.0, 0.0  ,     1.4 );// Qexchange with Exc. Additional multiply
423                                                << 531     } else {
424     //         Proc#                           << 532       SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0  ,     0.0);
425     SetParams( 0, fArrayParCollBaryonProj[inde << 533       SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0  ,     0.0);
426             fArrayParCollBaryonProj[indexTune] << 534       SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0  ,     0.0);
427       fArrayParCollBaryonProj[indexTune].GetPr << 
428             fArrayParCollBaryonProj[indexTune] << 
429       fArrayParCollBaryonProj[indexTune].GetPr << 
430             fArrayParCollBaryonProj[indexTune] << 
431       fArrayParCollBaryonProj[indexTune].GetPr << 
432     SetParams( 1, fArrayParCollBaryonProj[inde << 
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 ) {                       << 
440       SetParams( 2, 6.0/Xinel, 0.0, -6.0/Xinel << 
441       SetParams( 3, 6.0/Xinel, 0.0, -6.0/Xinel << 
442                                                << 
443       SetParams( 4, fArrayParCollBaryonProj[in << 
444         fArrayParCollBaryonProj[indexTune].Get << 
445         fArrayParCollBaryonProj[indexTune].Get << 
446         fArrayParCollBaryonProj[indexTune].Get << 
447         fArrayParCollBaryonProj[indexTune].Get << 
448         fArrayParCollBaryonProj[indexTune].Get << 
449         fArrayParCollBaryonProj[indexTune].Get << 
450     } else {  // if Xinel=0., zero everything  << 
451       SetParams( 2, 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 << 
453       SetParams( 4, 0.0, 0.0, 0.0, 0.0, 0.0, 0 << 
454     }                                             535     }
455                                                   536 
456     if ( (AbsProjectileBaryonNumber > 10 || Nu << 537     if ( AbsProjectileBaryonNumber > 1  ||  NumberOfTargetNucleons > 1 ) {
457       // It is not decided what to do with dif    538       // It is not decided what to do with diffraction dissociation in Had-Nucl and Nucl-Nucl interactions
458       // For the moment both ProjDiffDisso & T << 539       SetParams( 2,       0.0, 0.0 ,           0.0  , 0.0 , 0.0, 0.0   , -100.0  );  // Projectile diffraction
459       // so both projectile and target diffrac << 540       //SetParams( 3,       0.0, 0.0 ,           0.0  , 0.0 , 0.0, 0.0   , -100.0  );  // Target diffraction
460       if ( ! fArrayParCollBaryonProj[indexTune << 
461          SetParams( 2, 0.0, 0.0, 0.0, 0.0, 0.0 << 
462       if ( ! fArrayParCollBaryonProj[indexTune << 
463          SetParams( 3, 0.0, 0.0, 0.0, 0.0, 0.0 << 
464     }                                             541     }
465                                                   542 
466     SetDeltaProbAtQuarkExchange( fArrayParColl << 543     SetDeltaProbAtQuarkExchange( 0.0 );
467                                                << 
468     if ( NumberOfTargetNucleons > 26 ) {          544     if ( NumberOfTargetNucleons > 26 ) {
469       SetProbOfSameQuarkExchange( 1.0 );       << 545       SetProbOfSameQuarkExchange( 1.0);
470     } else {                                      546     } else {
471       SetProbOfSameQuarkExchange( fArrayParCol << 547       SetProbOfSameQuarkExchange( 0.0 );
472     }                                             548     }
                                                   >> 549     SetProjMinDiffMass( 1.16 );     // GeV 
                                                   >> 550     SetProjMinNonDiffMass( 1.16 );  // GeV 
                                                   >> 551     SetTarMinDiffMass( 1.16 );      // GeV
                                                   >> 552     SetTarMinNonDiffMass( 1.16 );   // GeV 
                                                   >> 553     SetAveragePt2( 0.15 );          // GeV^2
                                                   >> 554     SetProbLogDistrPrD( 0.3 );      // Before it was: 0.5
                                                   >> 555     SetProbLogDistr(0.3 );          // Before it was: 0.5
473                                                   556 
474     SetProjMinDiffMass(    fArrayParCollBaryon << 557   } else if( ProjectilePDGcode < -1000 ) {  // Projectile is anti_baryon
475     SetProjMinNonDiffMass( fArrayParCollBaryon << 
476                                                << 
477     SetTarMinDiffMass(     fArrayParCollBaryon << 
478     SetTarMinNonDiffMass(  fArrayParCollBaryon << 
479                                                   558 
480     SetAveragePt2(         fArrayParCollBaryon << 
481     SetProbLogDistrPrD(    fArrayParCollBaryon << 
482     SetProbLogDistr(       fArrayParCollBaryon << 
483                                                << 
484   } else if ( ProjectilePDGcode == -2212  ||   << 
485                                                << 
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    559     //        Proc#   A1      B1            A2       B2   A3   Atop       Ymin
493     SetParams( 0,      0.0 , 0.0 ,           0    560     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    561     SetParams( 1,      0.0 , 0.0 ,           0.0  , 0.0 , 0.0, 0.0  ,  1000.0  );  // Qexchange with    Exc.
495     if ( Xinel > 0.) {                         << 562     if( Xinel > 0.) {
496       SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel << 563       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 << 564       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 ,           << 565       SetParams( 4,       1.0, 0.0 ,             0.0, 0.0 , 0.0, 0.0  ,    0.93 );  // Qexchange with    Exc. Additional multiply
499     } else {                                      566     } else {
500       SetParams( 2, 0.0, 0.0, 0.0, 0.0, 0.0, 0 << 567       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 << 568       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 << 569       SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0  ,     0.0);
503     }                                             570     }
504                                                   571 
505     if ( AbsProjectileBaryonNumber > 10  ||  N << 572     if ( AbsProjectileBaryonNumber > 1  ||  NumberOfTargetNucleons > 1 ) {
506       // It is not decided what to do with dif << 573       SetParams( 2,      0.0 , 0.0 ,           0.0  , 0.0 , 0.0, 0.0  ,  -100.0  );  // Projectile diffraction
507       // For the moment both ProjDiffDisso & T << 574       //SetParams( 3,      0.0 , 0.0 ,           0.0  , 0.0 , 0.0, 0.0  ,  -100.0  );  // Target diffraction
508       // so both projectile and target diffrac << 
509       if ( ! fArrayParCollBaryonProj[indexTune << 
510          SetParams( 2,       0.0, 0.0 ,        << 
511       if ( ! fArrayParCollBaryonProj[indexTune << 
512          SetParams( 3,       0.0, 0.0 ,        << 
513     }                                             575     }
514                                                   576 
515     SetDeltaProbAtQuarkExchange( 0.0 );           577     SetDeltaProbAtQuarkExchange( 0.0 );
516     SetProbOfSameQuarkExchange( 0.0 );            578     SetProbOfSameQuarkExchange( 0.0 );
517     SetProjMinDiffMass( ProjectileMass + 0.22     579     SetProjMinDiffMass( ProjectileMass + 0.22 );     // GeV 
518     SetProjMinNonDiffMass( ProjectileMass + 0.    580     SetProjMinNonDiffMass( ProjectileMass + 0.22 );  // GeV
519     SetTarMinDiffMass( TargetMass + 0.22 );       581     SetTarMinDiffMass( TargetMass + 0.22 );          // GeV
520     SetTarMinNonDiffMass( TargetMass + 0.22 );    582     SetTarMinNonDiffMass( TargetMass + 0.22 );       // GeV
521     SetAveragePt2( 0.3 );                      << 583     SetAveragePt2( 0.15 );                           // GeV^2
522     SetProbLogDistrPrD( 0.55 );                << 584     SetProbLogDistrPrD( 0.3 );
523     SetProbLogDistr( 0.55 );                   << 585     SetProbLogDistr( 0.3 );
524                                                   586             
525   } else if ( ProjectileabsPDGcode == 211  ||  << 587   } else if ( ProjectileabsPDGcode == 211  ||  ProjectilePDGcode ==  111 ) {  // Projectile is Pion 
526                                                << 588 
527     const G4int indexTune = G4FTFTunings::Inst << 589     //        Proc#   A1      B1            A2       B2   A3   Atop       Ymin
528                                                << 590     SetParams( 0,  720.0,    2.5 ,         2.3 ,     1.0,    0.,   1. ,       2.7 ); 
529     //        Proc#   A1      B1            A2 << 591     SetParams( 1,  12.87,    0.5 ,       -44.91,     1.0,    0.,   0. ,       2.5 );
530     /* --> original code                       << 592     SetParams( 2,  0.086,    0.  ,        -0.3 ,     0.5,    0.,   0. ,       2.5 ); 
531     SetParams( 0,  150.0,    1.8 ,       -247. << 593     SetParams( 3,   32.8,    1.0 ,      -114.5 ,     1.5, 0.084,   0. ,       2.5 );
532     SetParams( 1,   5.77,    0.6 ,        -5.7 << 594     SetParams( 4,    1.0,    0.0 ,        -3.49,     0.5,   0.0,   0. ,       2.5 );  // Qexchange with    Exc. Additional multiply
533     SetParams( 2,   2.27,    0.5 ,     -98052. << 595 
534     SetParams( 3,    7.0,    0.9,        -85.2 << 596     if ( AbsProjectileBaryonNumber > 1  ||  NumberOfTargetNucleons > 1 ) {
535     SetParams( 4,    1.0,    0.0 ,       -11.0 << 597       SetParams( 2,      0.0 , 0.0 ,           0.0  , 0.0 , 0.0, 0.0  ,  -100.0  );  // Projectile diffraction
536     */                                         << 598       //SetParams( 3,      0.0 , 0.0 ,           0.0  , 0.0 , 0.0, 0.0  ,  -100.0  );  // Target diffraction
537     //         Proc#                           << 599     }
538     SetParams( 0, fArrayParCollPionProj[indexT << 600 
539             fArrayParCollPionProj[indexTune].G << 601     SetDeltaProbAtQuarkExchange( 0.56 );  // (0.35)
540       fArrayParCollPionProj[indexTune].GetProc << 602     SetProjMinDiffMass( 0.5 );            // (0.5)  // GeV
541             fArrayParCollPionProj[indexTune].G << 603     SetProjMinNonDiffMass( 0.5 );         // (0.5)  // GeV 
542       fArrayParCollPionProj[indexTune].GetProc << 604     SetTarMinDiffMass( 1.16 );                      // GeV
543             fArrayParCollPionProj[indexTune].G << 605     SetTarMinNonDiffMass( 1.16 );                   // GeV
544       fArrayParCollPionProj[indexTune].GetProc << 606     SetAveragePt2( 0.15 );                          // GeV^2
545     SetParams( 1, fArrayParCollPionProj[indexT << 607     SetProbLogDistrPrD( 0.3 );
546             fArrayParCollPionProj[indexTune].G << 608     SetProbLogDistr( 0.3 );
547       fArrayParCollPionProj[indexTune].GetProc << 
548             fArrayParCollPionProj[indexTune].G << 
549       fArrayParCollPionProj[indexTune].GetProc << 
550             fArrayParCollPionProj[indexTune].G << 
551       fArrayParCollPionProj[indexTune].GetProc << 
552     SetParams( 2, fArrayParCollPionProj[indexT << 
553             fArrayParCollPionProj[indexTune].G << 
554       fArrayParCollPionProj[indexTune].GetProc << 
555             fArrayParCollPionProj[indexTune].G << 
556       fArrayParCollPionProj[indexTune].GetProc << 
557             fArrayParCollPionProj[indexTune].G << 
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                                                << 
574     // NOTE: how can it be |ProjectileBaryonNu << 
575     //                                         << 
576     if ( AbsProjectileBaryonNumber > 10  ||  N << 
577        if ( ! fArrayParCollPionProj[indexTune] << 
578           SetParams( 2,      0.0 , 0.0 ,       << 
579        if ( ! fArrayParCollPionProj[indexTune] << 
580           SetParams( 3,      0.0 , 0.0 ,       << 
581     }                                          << 
582                                                << 
583     /* original code -->                       << 
584     SetDeltaProbAtQuarkExchange( 0.56 );       << 
585     SetProjMinDiffMass( 1.0 );            // G << 
586     SetProjMinNonDiffMass( 1.0 );         // G << 
587     SetTarMinDiffMass( 1.16 );            // G << 
588     SetTarMinNonDiffMass( 1.16 );         // G << 
589     SetAveragePt2( 0.3 );                 // G << 
590     SetProbLogDistrPrD( 0.55 );                << 
591     SetProbLogDistr( 0.55 );                   << 
592     */                                         << 
593                                                << 
594     // JVY update, Aug.8, 2018 --> Feb.14, 201 << 
595     //                                         << 
596     SetDeltaProbAtQuarkExchange( fArrayParColl << 
597     SetProjMinDiffMass( fArrayParCollPionProj[ << 
598     SetProjMinNonDiffMass( fArrayParCollPionPr << 
599     SetTarMinDiffMass( fArrayParCollPionProj[i << 
600     SetTarMinNonDiffMass( fArrayParCollPionPro << 
601     SetAveragePt2( fArrayParCollPionProj[index << 
602     SetProbLogDistrPrD( fArrayParCollPionProj[ << 
603     SetProbLogDistr( fArrayParCollPionProj[ind << 
604                                                << 
605     // ---> end update                         << 
606                                                   609 
607   } else if ( ProjectileabsPDGcode == 321  ||     610   } else if ( ProjectileabsPDGcode == 321  ||  ProjectileabsPDGcode == 311  || 
608               ProjectilePDGcode == 130     ||     611               ProjectilePDGcode == 130     ||  ProjectilePDGcode == 310 ) {  // Projectile is Kaon
609                                                   612 
610     //        Proc#   A1      B1            A2    613     //        Proc#   A1      B1            A2       B2   A3   Atop       Ymin
611     SetParams( 0,     60.0 , 2.5 ,           0    614     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    615     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    616     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    617     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    618     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 << 619 
                                                   >> 620     if ( AbsProjectileBaryonNumber > 1  ||  NumberOfTargetNucleons > 1 ) {
617       SetParams( 2,      0.0 , 0.0 ,              621       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 ,           << 622       //SetParams( 3,      0.0 , 0.0 ,           0.0  , 0.0 , 0.0, 0.0  ,  -100.0  );  // Target diffraction
619     }                                             623     }
620                                                   624 
621     SetDeltaProbAtQuarkExchange( 0.6 );           625     SetDeltaProbAtQuarkExchange( 0.6 );
622     SetProjMinDiffMass( 0.7 );     // GeV      << 626     SetProjMinDiffMass( 0.7 );     // (1.4) // (0.7) // GeV 
623     SetProjMinNonDiffMass( 0.7 );  // GeV      << 627     SetProjMinNonDiffMass( 0.7 );  // (1.4) // (0.7) // GeV 
624     SetTarMinDiffMass( 1.16 );     // GeV      << 628     SetTarMinDiffMass( 1.16 );                       // GeV
625     SetTarMinNonDiffMass( 1.16 );  // GeV      << 629     SetTarMinNonDiffMass( 1.16 );                    // GeV
626     SetAveragePt2( 0.3 );          // GeV^2    << 630     SetAveragePt2( 0.15 );                           // GeV^2
627     SetProbLogDistrPrD( 0.55 );                << 631     SetProbLogDistrPrD( 0.5 );
628     SetProbLogDistr( 0.55 );                   << 632     SetProbLogDistr( 0.3 );
629                                                << 
630   } else {  // Projectile is not p, n, Pi0, Pi << 
631                                                << 
632     if ( ProjectileabsPDGcode > 1000 ) {  // T << 
633       //        Proc#   A1      B1             << 
634       SetParams( 0,     13.71, 1.75,           << 
635       SetParams( 1,      25.0, 1.0,          - << 
636       if ( Xinel > 0.) {                       << 
637         SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xin << 
638         SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xin << 
639         SetParams( 4,       1.0, 0.0 ,         << 
640       } else {                                 << 
641         SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0 << 
642         SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0 << 
643         SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0 << 
644       }                                        << 
645                                                   633 
646     } else {  // The projectile is a meson as  << 634    } else {  // Projectile is undefined, Nucleon assumed
647       //        Proc#   A1      B1             << 
648       SetParams( 0,     60.0 , 2.5 ,           << 
649       SetParams( 1,      6.0 , 1.0 ,         - << 
650       SetParams( 2,      2.76, 1.2 ,         - << 
651       SetParams( 3,      1.09, 0.5 ,           << 
652       SetParams( 4,       1.0, 0.0 ,           << 
653     }                                          << 
654                                                   635 
655     if ( AbsProjectileBaryonNumber > 10  ||  N << 636     //        Proc#   A1      B1            A2       B2   A3   Atop       Ymin
                                                   >> 637     SetParams( 0,     13.71, 1.75,          -214.5, 4.25, 0.0, 0.5  ,     1.1 );  // Qexchange without Exc.
                                                   >> 638     SetParams( 1,      25.0, 1.0,          -50.34,  1.5 , 0.0, 0.0  ,     1.4 );  // Qexchange with    Exc.
                                                   >> 639     if( Xinel > 0.) {
                                                   >> 640       SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0  ,   0.93);  // Projectile diffraction
                                                   >> 641       SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0  ,   0.93);  // Target diffraction
                                                   >> 642       SetParams( 4,       1.0, 0.0 ,          -2.01 , 0.5 , 0.0, 0.0  ,   1.4 );  // Qexchange with    Exc. Additional multiply
                                                   >> 643     } else {
                                                   >> 644       SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0  ,     0.0);
                                                   >> 645       SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0  ,     0.0);
                                                   >> 646       SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0  ,     0.0);
                                                   >> 647     }
                                                   >> 648     if ( AbsProjectileBaryonNumber > 1  ||  NumberOfTargetNucleons > 1 ) {
656       SetParams( 2,      0.0 , 0.0 ,              649       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 ,           << 650       //SetParams( 3,      0.0 , 0.0 ,            0.0 , 0.0 , 0.0, 0.0  ,  -100.0  );  // Target diffraction
658     }                                             651     }
659                                                << 652     SetDeltaProbAtQuarkExchange( 0.0 );              // 7 June 2011
660     SetDeltaProbAtQuarkExchange( 0.0 );        << 
661     SetProbOfSameQuarkExchange( 0.0 );            653     SetProbOfSameQuarkExchange( 0.0 );
662                                                << 654     SetProjMinDiffMass( ProjectileMass + 0.22 );     // GeV 
663     SetProjMinDiffMass(    GetMinMass(particle << 655     SetProjMinNonDiffMass( ProjectileMass + 0.22 );  // GeV
664     SetProjMinNonDiffMass( GetMinMass(particle << 656     SetTarMinDiffMass( TargetMass + 0.22 );          // GeV
665                                                << 657     SetTarMinNonDiffMass( TargetMass + 0.22 );       // GeV
666     const G4ParticleDefinition* Neutron = G4Ne << 658     SetAveragePt2( 0.15 );                           // GeV^2
667     SetTarMinDiffMass(    GetMinMass(Neutron)/ << 659     SetProbLogDistrPrD( 0.3 );
668     SetTarMinNonDiffMass( GetMinMass(Neutron)/ << 660     SetProbLogDistr( 0.3 );
669                                                << 
670     SetAveragePt2( 0.3 );  // GeV^2            << 
671     SetProbLogDistrPrD( 0.55 );                << 
672     SetProbLogDistr( 0.55 );                   << 
673                                                   661 
674   }                                               662   }
675                                                   663 
676   #ifdef debugFTFparams                        << 664   // Set parameters of a string kink
677   G4cout<<"DeltaProbAtQuarkExchange "<< GetDel << 665   //  SetPt2Kink( 6.0*GeV*GeV );
678   G4cout<<"ProbOfSameQuarkExchange  "<< GetPro << 666   SetPt2Kink( 0.0*GeV*GeV );  // Uzhi Oct 2014 to switch off kinky strings
679   G4cout<<"ProjMinDiffMass          "<< GetPro << 667   G4double Puubar( 1.0/3.0 ), Pddbar( 1.0/3.0 ), Pssbar( 1.0/3.0 );  // SU(3) symmetry
680   G4cout<<"ProjMinNonDiffMass       "<< GetPro << 668   //G4double Puubar( 0.41 ), Pddbar( 0.41 ), Pssbar( 0.18 );  // Broken SU(3) symmetry
681   G4cout<<"TarMinDiffMass           "<< GetTar << 669   SetQuarkProbabilitiesAtGluonSplitUp( Puubar, Pddbar, Pssbar );
682   G4cout<<"TarMinNonDiffMass        "<< GetTar << 
683   G4cout<<"AveragePt2               "<< GetAve << 
684   G4cout<<"ProbLogDistrPrD          "<< GetPro << 
685   G4cout<<"ProbLogDistrTrD          "<< GetPro << 
686   #endif                                       << 
687                                                   670 
688   // Set parameters of nuclear destruction        671   // Set parameters of nuclear destruction
689                                                << 
690   if ( ProjectileabsPDGcode < 1000 ) {  // Mes    672   if ( ProjectileabsPDGcode < 1000 ) {  // Meson projectile
691                                                << 
692     const G4int indexTune = G4FTFTunings::Inst << 
693                                                << 
694     SetMaxNumberOfCollisions( Plab, 2.0 );  //    673     SetMaxNumberOfCollisions( Plab, 2.0 );  //  3.0 )
695     //                                         << 674     //AR-18May2016  SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)*             // Uzhi 3.05.2015
696     // target destruction                      << 675     SetCofNuclearDestruction( 1.0*                                                                  // AR-18May2016
697     //                                         << 
698     /* original code --->                      << 
699     SetCofNuclearDestruction( 0.00481*G4double << 
700             G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 +     676             G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
701                                                << 
702     SetR2ofNuclearDestruction( 1.5*fermi*fermi    677     SetR2ofNuclearDestruction( 1.5*fermi*fermi );
703     SetDofNuclearDestruction( 0.3 );              678     SetDofNuclearDestruction( 0.3 );
704     SetPt2ofNuclearDestruction( ( 0.035 + 0.04    679     SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
705                                          ( 1.0    680                                          ( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV );
706     SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV    681     SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV );
707     SetExcitationEnergyPerWoundedNucleon( 40.0    682     SetExcitationEnergyPerWoundedNucleon( 40.0*MeV );
708     */                                         << 683   } else if ( ProjectilePDGcode < -1000 ) {  // for anti-baryon projectile
709     double coeff = fArrayParCollMesonProj[inde << 684     SetMaxNumberOfCollisions( Plab, 2.0 );  // 3.0 )
710     //                                         << 685     //AR-18May2016  SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)*             // Uzhi 3.05.2015
711     // NOTE (JVY): Set this switch to false/tr << 686     SetCofNuclearDestruction( 1.0*                                                                  // AR-18May2016
712     //                                         << 
713     if ( fArrayParCollMesonProj[indexTune].IsN << 
714     {                                          << 
715       coeff *= G4double(NumberOfTargetNucleons << 
716     }                                          << 
717     double exfactor = G4Exp( fArrayParCollMeso << 
718                            * (Ylab-fArrayParCo << 
719     coeff *= exfactor;                         << 
720     coeff /= ( 1.+ exfactor );                 << 
721                                                << 
722     SetCofNuclearDestruction( coeff );         << 
723                                                << 
724     SetR2ofNuclearDestruction( fArrayParCollMe << 
725     SetDofNuclearDestruction( fArrayParCollMes << 
726     coeff = fArrayParCollMesonProj[indexTune]. << 
727     exfactor = G4Exp( fArrayParCollMesonProj[i << 
728                     * (Ylab-fArrayParCollMeson << 
729     coeff *= exfactor;                         << 
730     coeff /= ( 1. + exfactor );                << 
731     SetPt2ofNuclearDestruction( (fArrayParColl << 
732                                                << 
733     SetMaxPt2ofNuclearDestruction( fArrayParCo << 
734     SetExcitationEnergyPerWoundedNucleon( fArr << 
735                                                << 
736   } else if ( ProjectilePDGcode == -2212  ||   << 
737                                                << 
738     SetMaxNumberOfCollisions( Plab, 2.0 );     << 
739                                                << 
740     SetCofNuclearDestruction( 0.00481*G4double << 
741            G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G    687            G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
742     SetR2ofNuclearDestruction( 1.5*fermi*fermi    688     SetR2ofNuclearDestruction( 1.5*fermi*fermi );
743     SetDofNuclearDestruction( 0.3 );              689     SetDofNuclearDestruction( 0.3 );
744     SetPt2ofNuclearDestruction( ( 0.035 + 0.04    690     SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
745                                          ( 1.0    691                                          ( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV );
746     SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV    692     SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV );
747     SetExcitationEnergyPerWoundedNucleon( 40.0    693     SetExcitationEnergyPerWoundedNucleon( 40.0*MeV );
748     if ( Plab < 2.0 ) {  // 2 GeV/c               694     if ( Plab < 2.0 ) {  // 2 GeV/c
749       // For slow anti-baryon we have to garan    695       // For slow anti-baryon we have to garanty putting on mass-shell
750       SetCofNuclearDestruction( 0.0 );            696       SetCofNuclearDestruction( 0.0 );
751       SetR2ofNuclearDestruction( 1.5*fermi*fer << 697       SetR2ofNuclearDestruction( 1.5*fermi*fermi );
752                                                << 
753       SetDofNuclearDestruction( 0.01 );           698       SetDofNuclearDestruction( 0.01 );
754       SetPt2ofNuclearDestruction( 0.035*GeV*Ge    699       SetPt2ofNuclearDestruction( 0.035*GeV*GeV );
755       SetMaxPt2ofNuclearDestruction( 0.04*GeV*    700       SetMaxPt2ofNuclearDestruction( 0.04*GeV*GeV );
                                                   >> 701       //SetExcitationEnergyPerWoundedNucleon( 0.0 );   // ?????
756     }                                             702     }
757                                                << 
758   } else {  // Projectile baryon assumed          703   } else {  // Projectile baryon assumed
759                                                << 704     SetMaxNumberOfCollisions( Plab, 2.0 ); // 3.0 )
760     // Below, in the call to the G4FTFTunings: << 705     //AR-18May2016  SetCofNuclearDestructionPr( 0.00481*G4double(AbsProjectileBaryonNumber)*           // Uzhi 3.05.2015
761     // as projectile, instead of the real one, << 706     SetCofNuclearDestructionPr( 1.0*                                                                   // AR-18May2016  
762     // destruction, we assume for this categor << 707             G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
763     // as for "baryon".                        << 708     //AR-18May2016  SetCofNuclearDestruction(   0.00481*G4double(NumberOfTargetNucleons)*             // Uzhi 3.05.2015
764     const G4int indexTune = G4FTFTunings::Inst << 709     SetCofNuclearDestruction(   1.0*                                                                  // AR-18May2016
765                                                << 710             G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
766     // NOTE (JVY) FIXME !!! Will decide later  << 711     SetR2ofNuclearDestruction( 1.5*fermi*fermi );
767     //                                         << 712     SetDofNuclearDestruction( 0.3 );
768     SetMaxNumberOfCollisions( Plab, 2.0 );     << 713     SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
769                                                << 714                                          ( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV );
770     // projectile destruction - does NOT reall << 715     SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV );
771     //                                         << 716     SetExcitationEnergyPerWoundedNucleon( 40.0*MeV );
772     double coeff = 0.;                         << 
773     coeff = fArrayParCollBaryonProj[indexTune] << 
774     //                                         << 
775     // NOTE (JVY): Set this switch to false/tr << 
776     //                                         << 
777     if ( fArrayParCollBaryonProj[indexTune].Is << 
778     {                                          << 
779       coeff *= G4double(AbsProjectileBaryonNum << 
780     }                                          << 
781     double exfactor = G4Exp( fArrayParCollBary << 
782            (Ylab-fArrayParCollBaryonProj[index << 
783     coeff *= exfactor;                         << 
784     coeff /= ( 1.+ exfactor );                 << 
785     SetCofNuclearDestructionPr( coeff );       << 
786                                                << 
787     // target desctruction                     << 
788     //                                         << 
789     coeff = fArrayParCollBaryonProj[indexTune] << 
790     //                                         << 
791     // NOTE (JVY): Set this switch to false/tr << 
792     //                                         << 
793     if ( fArrayParCollBaryonProj[indexTune].Is << 
794     {                                          << 
795       coeff *= G4double(NumberOfTargetNucleons << 
796     }                                          << 
797     exfactor = G4Exp( fArrayParCollBaryonProj[ << 
798           (Ylab-fArrayParCollBaryonProj[indexT << 
799     coeff *= exfactor;                         << 
800     coeff /= ( 1.+ exfactor );                 << 
801     SetCofNuclearDestruction(   coeff );       << 
802                                                << 
803     SetR2ofNuclearDestruction( fArrayParCollBa << 
804     SetDofNuclearDestruction( fArrayParCollBar << 
805                                                << 
806     coeff = fArrayParCollBaryonProj[indexTune] << 
807     exfactor = G4Exp( fArrayParCollBaryonProj[ << 
808           (Ylab-fArrayParCollBaryonProj[indexT << 
809     coeff *= exfactor;                         << 
810     coeff /= ( 1. + exfactor );                << 
811     SetPt2ofNuclearDestruction( (fArrayParColl << 
812                                                << 
813     SetMaxPt2ofNuclearDestruction( fArrayParCo << 
814     SetExcitationEnergyPerWoundedNucleon( fArr << 
815                                                << 
816   }                                               717   }
817                                                   718 
818   #ifdef debugFTFparams                        << 
819   G4cout<<"CofNuclearDestructionPr           " << 
820   G4cout<<"CofNuclearDestructionTr           " << 
821   G4cout<<"R2ofNuclearDestruction            " << 
822   G4cout<<"DofNuclearDestruction             " << 
823   G4cout<<"Pt2ofNuclearDestruction           " << 
824   G4cout<<"ExcitationEnergyPerWoundedNucleon " << 
825   #endif                                       << 
826                                                << 
827   //SetCofNuclearDestruction( 0.47*G4Exp( 2.0*    719   //SetCofNuclearDestruction( 0.47*G4Exp( 2.0*(Ylab - 2.5) )/( 1.0 + G4Exp( 2.0*(Ylab - 2.5) ) ) ); 
828   //SetPt2ofNuclearDestruction( ( 0.035 + 0.1*    720   //SetPt2ofNuclearDestruction( ( 0.035 + 0.1*G4Exp( 4.0*(Ylab - 3.0) )/( 1.0 + G4Exp( 4.0*(Ylab - 3.0) ) ) )*GeV*GeV );
829                                                   721 
830   //SetMagQuarkExchange( 120.0 );       // 210    722   //SetMagQuarkExchange( 120.0 );       // 210.0 PipP
831   //SetSlopeQuarkExchange( 2.0 );                 723   //SetSlopeQuarkExchange( 2.0 );
832   //SetDeltaProbAtQuarkExchange( 0.6 );           724   //SetDeltaProbAtQuarkExchange( 0.6 );
833   //SetProjMinDiffMass( 0.7 );          // GeV    725   //SetProjMinDiffMass( 0.7 );          // GeV 1.1
834   //SetProjMinNonDiffMass( 0.7 );       // GeV    726   //SetProjMinNonDiffMass( 0.7 );       // GeV
835   //SetProbabilityOfProjDiff( 0.0);     // 0.8    727   //SetProbabilityOfProjDiff( 0.0);     // 0.85*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.5 ) ); // 40/32 X-dif/X-inel
836   //SetTarMinDiffMass( 1.1 );           // GeV    728   //SetTarMinDiffMass( 1.1 );           // GeV
837   //SetTarMinNonDiffMass( 1.1 );        // GeV    729   //SetTarMinNonDiffMass( 1.1 );        // GeV
838   //SetProbabilityOfTarDiff( 0.0 );     // 0.8    730   //SetProbabilityOfTarDiff( 0.0 );     // 0.85*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.5 ) ); // 40/32 X-dif/X-inel
839                                                   731 
840   //SetAveragePt2( 0.0 );               // GeV    732   //SetAveragePt2( 0.0 );               // GeV^2   0.3
841   //------------------------------------          733   //------------------------------------
842   //SetProbabilityOfElasticScatt( 1.0, 1.0);      734   //SetProbabilityOfElasticScatt( 1.0, 1.0);                            //(Xtotal, Xelastic);
843   //SetProbabilityOfProjDiff( 1.0*0.62*G4Pow::    735   //SetProbabilityOfProjDiff( 1.0*0.62*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.51 ) );  // 0->1
844   //SetProbabilityOfTarDiff( 4.0*0.62*G4Pow::G    736   //SetProbabilityOfTarDiff( 4.0*0.62*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.51 ) );   // 2->4
845   //SetAveragePt2( 0.3 );                         737   //SetAveragePt2( 0.3 );                                               // (0.15)
846   //SetAvaragePt2ofElasticScattering( 0.0 );      738   //SetAvaragePt2ofElasticScattering( 0.0 );
847                                                   739 
848   //SetMaxNumberOfCollisions( Plab, 6.0 ); //(    740   //SetMaxNumberOfCollisions( Plab, 6.0 ); //(4.0*(Plab + 0.01), Plab); // 6.0 );
849   //SetAveragePt2( 0.15 );                        741   //SetAveragePt2( 0.15 );
850   //SetCofNuclearDestruction(-1.);//( 0.75 );     742   //SetCofNuclearDestruction(-1.);//( 0.75 );                           // (0.25)             
851   //SetExcitationEnergyPerWoundedNucleon(0.);/    743   //SetExcitationEnergyPerWoundedNucleon(0.);//( 30.0*MeV );            // (75.0*MeV) 
852   //SetDofNuclearDestruction(0.);//( 0.2 ); //    744   //SetDofNuclearDestruction(0.);//( 0.2 ); //0.4                       // 0.3 0.5
853                                                   745 
854   /*                                           << 746   //SetPt2ofNuclearDestruction(0.);//(2.*0.075*GeV*GeV); //( 0.3*GeV*GeV ); // (0.168*GeV*GeV) 
855   SetAveragePt2(0.3);                          << 747   //SetMaxNumberOfCollisions( Plab, 78.0 ); // 3.0 )
856   SetCofNuclearDestructionPr(0.);              << 
857   SetCofNuclearDestruction(0.);             // << 
858   SetExcitationEnergyPerWoundedNucleon(0.); // << 
859   SetDofNuclearDestruction(0.);             // << 
860   SetPt2ofNuclearDestruction(0.);           // << 
861   */                                           << 
862                                                << 
863   //SetExcitationEnergyPerWoundedNucleon(0.001 << 
864   //SetPt2Kink( 0.0*GeV*GeV );                 << 
865                                                   748 
866   //SetRadiusOfHNinteractions2( Xtotal/pi/10.0 << 749   //G4cout << "Cnd " << GetCofNuclearDestruction() << G4endl;
867   //SetRadiusOfHNinteractions2( (Xtotal - Xela << 750   //G4cout << "Dnd " << GetDofNuclearDestruction() << G4endl;
868   //SetProbabilityOfElasticScatt( 1.0, 0.0);   << 751   //G4cout << "Pt2 " << GetPt2ofNuclearDestruction()/GeV/GeV << G4endl;
869   /*                                           << 752   //G4int Uzhi; G4cin >> Uzhi;
870   G4cout << "Pt2 " << GetAveragePt2()<<" "<<Ge << 753 } 
871   G4cout << "Cnd " << GetCofNuclearDestruction << 
872   G4cout << "Dnd " << GetDofNuclearDestruction << 
873   G4cout << "Pt2 " << GetPt2ofNuclearDestructi << 
874   */                                           << 
875                                                << 
876 }                                              << 
877                                                   754 
878 //============================================ << 
879                                                << 
880 G4double G4FTFParameters::GetMinMass( const G4 << 
881    // The code is used for estimating the mini << 
882    // The indices used for minMassQDiQStr must << 
883    // quarks: d, u, s, c and b; enforcing this << 
884    G4double EstimatedMass = 0.0;               << 
885    G4int partID = std::abs(aParticle->GetPDGEn << 
886    G4int Qleft  = std::max(  partID/100,     1 << 
887    G4int Qright = std::max( (partID/ 10)%10, 1 << 
888    if        ( Qleft < 6  &&  Qright < 6 ) {   << 
889      EstimatedMass = StringMass->minMassQQbarS << 
890    } else if ( Qleft < 6  &&  Qright > 6 ) {   << 
891      G4int q1 = std::max( std::min( Qright/10, << 
892      G4int q2 = std::max( std::min( Qright%10, << 
893      EstimatedMass = StringMass->minMassQDiQSt << 
894    } else if ( Qleft > 6  &&  Qright < 6 ) {   << 
895      G4int q1 = std::max( std::min( Qleft/10,  << 
896      G4int q2 = std::max( std::min( Qleft%10,  << 
897      EstimatedMass = StringMass->minMassQDiQSt << 
898    }                                           << 
899    return EstimatedMass;                       << 
900 }                                              << 
901                                                   755 
902 //============================================    756 //============================================================================
903                                                   757 
904 G4double G4FTFParameters::GetProcProb( const G    758 G4double G4FTFParameters::GetProcProb( const G4int ProcN, const G4double y ) {
905   G4double Prob( 0.0 );                           759   G4double Prob( 0.0 );
906   if ( y < ProcParams[ProcN][6] ) {               760   if ( y < ProcParams[ProcN][6] ) {
907     Prob = ProcParams[ProcN][5];                  761     Prob = ProcParams[ProcN][5]; 
908     if (Prob < 0.) Prob=0.;                    << 762     if(Prob < 0.) Prob=0.;
909     return Prob;                                  763     return Prob;
910   }                                               764   }
911   Prob = ProcParams[ProcN][0] * G4Exp( -ProcPa    765   Prob = ProcParams[ProcN][0] * G4Exp( -ProcParams[ProcN][1]*y ) +
912          ProcParams[ProcN][2] * G4Exp( -ProcPa    766          ProcParams[ProcN][2] * G4Exp( -ProcParams[ProcN][3]*y ) +
913          ProcParams[ProcN][4];                    767          ProcParams[ProcN][4];
914   if (Prob < 0.) Prob=0.;                      << 768   if(Prob < 0.) Prob=0.;
915   return Prob;                                    769   return Prob;
916 }                                                 770 }
917                                                << 
918 //============================================ << 
919                                                << 
920 G4FTFParameters::~G4FTFParameters() {          << 
921   if ( StringMass ) delete StringMass;         << 
922 }                                              << 
923                                                << 
924 //============================================ << 
925                                                << 
926 void G4FTFParameters::Reset()                  << 
927 {                                              << 
928   FTFhNcmsEnergy  = 0.0;                       << 
929   FTFXtotal = 0.0;                             << 
930   FTFXelastic = 0.0;                           << 
931   FTFXinelastic = 0.0;                         << 
932   FTFXannihilation = 0.0;                      << 
933   ProbabilityOfAnnihilation = 0.0;             << 
934   ProbabilityOfElasticScatt  = 0.0;            << 
935   RadiusOfHNinteractions2 = 0.0;               << 
936   FTFSlope = 0.0;                              << 
937   AvaragePt2ofElasticScattering = 0.0;         << 
938   FTFGamma0 = 0.0;                             << 
939   DeltaProbAtQuarkExchange = 0.0;              << 
940   ProbOfSameQuarkExchange = 0.0;               << 
941   ProjMinDiffMass = 0.0;                       << 
942   ProjMinNonDiffMass = 0.0;                    << 
943   ProbLogDistrPrD = 0.0;                       << 
944   TarMinDiffMass = 0.0;                        << 
945   TarMinNonDiffMass = 0.0;                     << 
946   AveragePt2 = 0.0;                            << 
947   ProbLogDistr  = 0.0;                         << 
948   Pt2kink = 0.0;                               << 
949   MaxNumberOfCollisions = 0.0;                 << 
950   ProbOfInelInteraction = 0.0;                 << 
951   CofNuclearDestructionPr = 0.0;               << 
952   CofNuclearDestruction = 0.0;                 << 
953   R2ofNuclearDestruction  = 0.0;               << 
954   ExcitationEnergyPerWoundedNucleon  = 0.0;    << 
955   DofNuclearDestruction  = 0.0;                << 
956   Pt2ofNuclearDestruction = 0.0;               << 
957   MaxPt2ofNuclearDestruction = 0.0;            << 
958                                                << 
959   for ( G4int i = 0; i < 4; i++ ) {            << 
960     for ( G4int j = 0; j < 7; j++ ) {          << 
961       ProcParams[i][j] = 0.0;                  << 
962     }                                          << 
963   }                                            << 
964                                                << 
965   return;                                      << 
966 }                                              << 
967                                                << 
968                                                   771