Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/parton_string/hadronization/src/G4VLongitudinalStringDecay.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/hadronization/src/G4VLongitudinalStringDecay.cc (Version 11.3.0) and /processes/hadronic/models/parton_string/hadronization/src/G4VLongitudinalStringDecay.cc (Version 10.6.p1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //                                                 26 //
 27 //                                                 27 //
 28 // -------------------------------------------     28 // -----------------------------------------------------------------------------
 29 //      GEANT 4 class implementation file          29 //      GEANT 4 class implementation file
 30 //                                                 30 //
 31 //      History: first implementation, Maxim K     31 //      History: first implementation, Maxim Komogorov, 1-Jul-1998
 32 //               redesign  Gunter Folger, Augu     32 //               redesign  Gunter Folger, August/September 2001
 33 // -------------------------------------------     33 // -----------------------------------------------------------------------------
 34 #include "G4VLongitudinalStringDecay.hh"           34 #include "G4VLongitudinalStringDecay.hh"
 35 #include "G4PhysicalConstants.hh"                  35 #include "G4PhysicalConstants.hh"
 36 #include "G4SystemOfUnits.hh"                      36 #include "G4SystemOfUnits.hh"
 37 #include "G4ios.hh"                                37 #include "G4ios.hh"
 38 #include "Randomize.hh"                            38 #include "Randomize.hh"
 39 #include "G4FragmentingString.hh"                  39 #include "G4FragmentingString.hh"
 40                                                    40 
 41 #include "G4ParticleDefinition.hh"                 41 #include "G4ParticleDefinition.hh"
 42 #include "G4ParticleTypes.hh"                      42 #include "G4ParticleTypes.hh"
 43 #include "G4ParticleChange.hh"                     43 #include "G4ParticleChange.hh"
 44 #include "G4VShortLivedParticle.hh"                44 #include "G4VShortLivedParticle.hh"
 45 #include "G4ShortLivedConstructor.hh"              45 #include "G4ShortLivedConstructor.hh"
 46 #include "G4ParticleTable.hh"                      46 #include "G4ParticleTable.hh"
 47 #include "G4PhaseSpaceDecayChannel.hh"             47 #include "G4PhaseSpaceDecayChannel.hh"
 48 #include "G4VDecayChannel.hh"                      48 #include "G4VDecayChannel.hh"
 49 #include "G4DecayTable.hh"                         49 #include "G4DecayTable.hh"
 50                                                    50 
 51 #include "G4DiQuarks.hh"                           51 #include "G4DiQuarks.hh"
 52 #include "G4Quarks.hh"                             52 #include "G4Quarks.hh"
 53 #include "G4Gluons.hh"                             53 #include "G4Gluons.hh"
 54                                                    54 
 55 #include "G4Exp.hh"                                55 #include "G4Exp.hh"
 56 #include "G4Log.hh"                                56 #include "G4Log.hh"
 57                                                    57 
 58 #include "G4HadronicException.hh"              << 
 59                                                << 
 60 //------------------------debug switches           58 //------------------------debug switches
 61 //#define debug_VStringDecay                       59 //#define debug_VStringDecay
 62 //#define debug_heavyHadrons                   << 
 63                                                    60 
 64 //******************************************** <<  61 //********************************************************************************
 65 // Constructors                                    62 // Constructors
 66                                                    63 
 67 G4VLongitudinalStringDecay::G4VLongitudinalStr <<  64 G4VLongitudinalStringDecay::G4VLongitudinalStringDecay() : ProbCCbar(0.0), ProbBBbar(0.0) 
 68   : G4HadronicInteraction(name), ProbCCbar(0.0 << 
 69 {                                                  65 {
 70    MassCut = 210.0*MeV;   // Mpi + Delta           66    MassCut = 210.0*MeV;   // Mpi + Delta
 71                                                    67 
 72    StringLoopInterrupt  = 1000;                    68    StringLoopInterrupt  = 1000;
 73    ClusterLoopInterrupt =  500;                    69    ClusterLoopInterrupt =  500;
 74                                                    70 
 75    // Changable Parameters below.                  71    // Changable Parameters below.
 76    SigmaQT = 0.5 * GeV;                            72    SigmaQT = 0.5 * GeV;
 77                                                    73    
 78    StrangeSuppress  = 0.44;    // =0.27/2.27 s <<  74    StrangeSuppress  = 0.44;    // =0.27/2.27 suppresion of strange quark pait prodution, ie. u:d:s=1:1:0.27
 79    DiquarkSuppress  = 0.07;    // Probability      75    DiquarkSuppress  = 0.07;    // Probability of qq-qqbar pair production
 80    DiquarkBreakProb = 0.1;     // Probability      76    DiquarkBreakProb = 0.1;     // Probability of (qq)->h+(qq)'
 81                                                    77    
 82    //... pspin_meson is probability to create      78    //... pspin_meson is probability to create pseudo-scalar meson 
 83    pspin_meson.resize(3);                      <<  79    pspin_meson = 0.5;
 84    pspin_meson[0] = 0.5;  // u or d + anti-u o <<  80 
 85    pspin_meson[1] = 0.4;  // one of the quark  << 
 86    pspin_meson[2] = 0.3;  // both of the quark << 
 87                                                << 
 88    //... pspin_barion is probability to create     81    //... pspin_barion is probability to create 1/2 barion 
 89    pspin_barion = 0.5;                             82    pspin_barion = 0.5;
 90                                                    83 
 91    //... vectorMesonMix[] is quark mixing para     84    //... vectorMesonMix[] is quark mixing parameters for vector mesons (Variable spin = 3)
 92    vectorMesonMix.resize(6);                       85    vectorMesonMix.resize(6);
 93    vectorMesonMix[0] = 0.0;                        86    vectorMesonMix[0] = 0.0;
 94    vectorMesonMix[1] = 0.5;                    <<  87    vectorMesonMix[1] = 0.375;
 95    vectorMesonMix[2] = 0.0;                        88    vectorMesonMix[2] = 0.0;
 96    vectorMesonMix[3] = 0.5;                    <<  89    vectorMesonMix[3] = 0.375;
 97    vectorMesonMix[4] = 1.0;                        90    vectorMesonMix[4] = 1.0;
 98    vectorMesonMix[5] = 1.0;                        91    vectorMesonMix[5] = 1.0;
 99                                                    92 
100    //... scalarMesonMix[] is quark mixing para     93    //... scalarMesonMix[] is quark mixing parameters for scalar mesons (Variable spin=1)
101    scalarMesonMix.resize(6);                       94    scalarMesonMix.resize(6);
102    scalarMesonMix[0] = 0.5;                        95    scalarMesonMix[0] = 0.5;
103    scalarMesonMix[1] = 0.25;                       96    scalarMesonMix[1] = 0.25;
104    scalarMesonMix[2] = 0.5;                        97    scalarMesonMix[2] = 0.5;
105    scalarMesonMix[3] = 0.25;                       98    scalarMesonMix[3] = 0.25;
106    scalarMesonMix[4] = 1.0;                        99    scalarMesonMix[4] = 1.0;
107    scalarMesonMix[5] = 0.5;                       100    scalarMesonMix[5] = 0.5;
108                                                   101 
109    SetProbCCbar(0.0);  // Probability of CCbar << 102    // For the time being, set to 0.0 the probabilities for c-cbar and b-bbar creation.
                                                   >> 103    SetProbCCbar(0.0);  //SetProbCCbar(0.43e-11); // Probability of CCbar pair creation
                                                   >> 104                        //Pythia8 and Pythia 6.4 Comp. Phys. Commun. 191 (2015) 159; arXiv:1410.3012
110    SetProbEta_c(0.1);  // Mixing of Eta_c and     105    SetProbEta_c(0.1);  // Mixing of Eta_c and J/Psi
111    SetProbBBbar(0.0);  // Probability of BBbar << 106    SetProbBBbar(0.0);  // Probability of BBbar pair creation,
112    SetProbEta_b(0.0);  // Mixing of Eta_b and  << 107    SetProbEta_b(0.0);  // Mixing of Eta_b and Ipsilon_b
113                                                   108 
114    // Parameters may be changed until the firs    109    // Parameters may be changed until the first fragmentation starts
115    PastInitPhase=false;                           110    PastInitPhase=false;
116    hadronizer = new G4HadronBuilder( pspin_mes << 111    hadronizer = new G4HadronBuilder(pspin_meson,pspin_barion,
117                                      ProbEta_c << 112               scalarMesonMix,vectorMesonMix,
                                                   >> 113                                     ProbEta_c, ProbEta_b);
118                                                   114 
119    MaxMass=-350.0*GeV;  // If there will be a     115    MaxMass=-350.0*GeV;  // If there will be a particle with mass larger than Higgs the value must be changed.
120                                                   116 
121    SetMinMasses();  // Re-calculation of minim    117    SetMinMasses();  // Re-calculation of minimal mass of strings and weights of particles in 2-part. decays
122                                                   118 
123    Kappa = 1.0 * GeV/fermi;                       119    Kappa = 1.0 * GeV/fermi;
124    DecayQuark = NewQuark = 0;                  << 
125 }                                                 120 }
126                                                   121 
                                                   >> 122 
127 G4VLongitudinalStringDecay::~G4VLongitudinalSt    123 G4VLongitudinalStringDecay::~G4VLongitudinalStringDecay()
128 {                                                 124 {
129    delete hadronizer;                             125    delete hadronizer;
130 }                                                 126 }
131                                                   127 
132 G4HadFinalState*                               << 128 //=============================================================================
133 G4VLongitudinalStringDecay::ApplyYourself(cons << 129 
                                                   >> 130 // Operators
                                                   >> 131 
                                                   >> 132 //-----------------------------------------------------------------------------
                                                   >> 133 
                                                   >> 134 G4bool G4VLongitudinalStringDecay::operator==(const G4VLongitudinalStringDecay &) const
134 {                                                 135 {
135   return nullptr;                              << 136    throw G4HadronicException(__FILE__, __LINE__, "G4VLongitudinalStringDecay::operator== forbidden");
                                                   >> 137    return false;
136 }                                                 138 }
137                                                   139 
138 //============================================ << 140 //-------------------------------------------------------------------------------------
                                                   >> 141 
                                                   >> 142 G4bool G4VLongitudinalStringDecay::operator!=(const G4VLongitudinalStringDecay &) const
                                                   >> 143 {
                                                   >> 144    throw G4HadronicException(__FILE__, __LINE__, "G4VLongitudinalStringDecay::operator!= forbidden");
                                                   >> 145    return true;
                                                   >> 146 }
                                                   >> 147 
                                                   >> 148 //***********************************************************************************
139                                                   149 
140 // For changing Mass Cut used for selection of    150 // For changing Mass Cut used for selection of very small mass strings
141 void G4VLongitudinalStringDecay::SetMassCut(G4 << 151 void     G4VLongitudinalStringDecay::SetMassCut(G4double aValue){ MassCut=aValue; }
142 G4double G4VLongitudinalStringDecay::GetMassCu    152 G4double G4VLongitudinalStringDecay::GetMassCut() { return MassCut; }
143                                                   153 
144 //--------------------------------------------    154 //-----------------------------------------------------------------------------
145                                                   155 
146 // For handling a string with very low mass       156 // For handling a string with very low mass
147                                                   157 
148 G4KineticTrackVector* G4VLongitudinalStringDec    158 G4KineticTrackVector* G4VLongitudinalStringDecay::ProduceOneHadron(const G4ExcitedString * const string)
149 {                                                 159 {
150         G4KineticTrackVector* result = nullptr << 160         // Check string decay threshold 
151         pDefPair hadrons( nullptr, nullptr );  << 161   G4KineticTrackVector * result=0;  // return 0 when string exceeds the mass cut
152         G4FragmentingString aString( *string ) << 162   
                                                   >> 163   pDefPair hadrons((G4ParticleDefinition *)0,(G4ParticleDefinition *)0);
                                                   >> 164 
                                                   >> 165   G4FragmentingString aString(*string);
153                                                   166 
154         #ifdef debug_VStringDecay                 167         #ifdef debug_VStringDecay
155         G4cout<<"G4VLongitudinalStringDecay::P    168         G4cout<<"G4VLongitudinalStringDecay::ProduceOneHadron: PossibleHmass StrMass "
156               <<aString.Mass()<<" MassCut "<<M    169               <<aString.Mass()<<" MassCut "<<MassCut<<G4endl;
                                                   >> 170         G4cout<<"G4VLongitudinalStringDecay::ProduceOneHadron: PossibleHmass StrMass WWW "
                                                   >> 171               <<aString.Mass()<<G4endl;
157         #endif                                    172         #endif
                                                   >> 173 
                                                   >> 174   if ( sqr(PossibleHadronMass(&aString,0,&hadrons)+MassCut) < aString.Mass2()) {
                                                   >> 175     return 0;
                                                   >> 176   }
                                                   >> 177 
                                                   >> 178         // The string mass has low mass---------------------------
                                                   >> 179   
                                                   >> 180   result=new G4KineticTrackVector;
158                                                   181         
159         SetMinimalStringMass( &aString );      << 182   if ( hadrons.second ==0 )
160         PossibleHadronMass( &aString, 0, &hadr << 183   {
161         result = new G4KineticTrackVector;     << 
162         if ( hadrons.first != nullptr ) {      << 
163            if ( hadrons.second == nullptr ) {  << 
164                // Substitute string by light h    184                // Substitute string by light hadron, Note that Energy is not conserved here!
165                                                   185 
166                #ifdef debug_VStringDecay          186                #ifdef debug_VStringDecay
167                G4cout << "VlongSD Warning repl << 187          G4cout << "VlongSF Warning replacing string by single hadron (G4VLongitudinalStringDecay)" <<G4endl;
168                G4cout << hadrons.first->GetPar << 188          G4cout << hadrons.first->GetParticleName()<<G4endl
169                       << "string .. " << strin << 189                 << "string .. " << string->Get4Momentum() << " " 
170                       << string->Get4Momentum( << 190                 << string->Get4Momentum().m() << G4endl;
171                #endif                          << 191                #endif   
172                                                   192 
173                G4ThreeVector   Mom3 = string->    193                G4ThreeVector   Mom3 = string->Get4Momentum().vect();
174                G4LorentzVector Mom( Mom3, std: << 194          G4LorentzVector Mom( Mom3, std::sqrt( Mom3.mag2() + sqr(hadrons.first->GetPDGMass())) );
175                result->push_back( new G4Kineti    195                result->push_back( new G4KineticTrack( hadrons.first, 0, string->GetPosition(), Mom ) );
176            } else {                            << 196   } else 
                                                   >> 197   {
                                                   >> 198                // I do not know if this part work?
177                //... string was qq--qqbar type    199                //... string was qq--qqbar type: Build two stable hadrons,
178                                                   200 
179                #ifdef debug_VStringDecay          201                #ifdef debug_VStringDecay
180                G4cout << "VlongSD Warning repl << 202          G4cout << "VlongSF Warning replacing qq-qqbar string by TWO hadrons (G4VLongitudinalStringDecay)" 
181                       << hadrons.first->GetPar << 203                 << hadrons.first->GetParticleName() << " / " 
182                       << hadrons.second->GetPa << 204                 << hadrons.second->GetParticleName()
183                       << "string .. " << strin << 205                 << "string .. " << string->Get4Momentum() << " " 
184                       << string->Get4Momentum( << 206                 << string->Get4Momentum().m() << G4endl;
185                #endif                             207                #endif
186                                                   208 
187                G4LorentzVector  Mom1, Mom2;    << 209          G4LorentzVector  Mom1, Mom2;
188                Sample4Momentum( &Mom1, hadrons << 210          Sample4Momentum(&Mom1, hadrons.first->GetPDGMass(), 
189                                 &Mom2, hadrons << 211              &Mom2,hadrons.second->GetPDGMass(),
190                                 string->Get4Mo << 212              string->Get4Momentum().mag());
191                                                   213 
192                result->push_back( new G4Kineti << 214          result->push_back( new G4KineticTrack( hadrons.first, 0, string->GetPosition(), Mom1 ) );
193                result->push_back( new G4Kineti << 215          result->push_back( new G4KineticTrack( hadrons.second, 0, string->GetPosition(), Mom2) );
194                                                   216 
195                G4ThreeVector Velocity = string    217                G4ThreeVector Velocity = string->Get4Momentum().boostVector();
196                result->Boost(Velocity);           218                result->Boost(Velocity);          
197            }                                   << 219   }
198         }                                      << 220 
199         return result;                         << 221   return result;
200 }                                                 222 }
201                                                   223 
202 //--------------------------------------------    224 //----------------------------------------------------------------------------------------
203                                                   225 
204 G4double G4VLongitudinalStringDecay::PossibleH    226 G4double G4VLongitudinalStringDecay::PossibleHadronMass( const G4FragmentingString * const string,
205                                                   227                                                          Pcreate build, pDefPair * pdefs )
206 {                                                 228 {
207         G4double mass = 0.0;                   << 229         G4double mass;
208                                                   230 
209   if ( build==0 ) build=&G4HadronBuilder::Buil    231   if ( build==0 ) build=&G4HadronBuilder::BuildLowSpin;
210                                                   232 
211         G4ParticleDefinition* Hadron1 = nullpt << 233         G4ParticleDefinition *Hadron1, *Hadron2=0;
212   G4ParticleDefinition* Hadron2 = nullptr;     << 
213                                                   234 
214         if (!string->IsAFourQuarkString() )       235         if (!string->IsAFourQuarkString() )
215         {                                         236         {
216            // spin 0 meson or spin 1/2 barion     237            // spin 0 meson or spin 1/2 barion will be built
217                                                   238 
218            Hadron1 = (hadronizer->*build)(stri    239            Hadron1 = (hadronizer->*build)(string->GetLeftParton(), string->GetRightParton());
219            #ifdef debug_VStringDecay              240            #ifdef debug_VStringDecay
220      G4cout<<"VlongSD PossibleHadronMass"<<G4e << 241            G4cout<<"VlongSF Quarks at the string ends "<<string->GetLeftParton()->GetParticleName()
221            G4cout<<"VlongSD Quarks at the stri << 
222                  <<" "<<string->GetRightParton    242                  <<" "<<string->GetRightParton()->GetParticleName()<<G4endl;
223            if ( Hadron1 != nullptr) {          << 243            if ( Hadron1 != NULL) {
224              G4cout<<"(G4VLongitudinalStringDe    244              G4cout<<"(G4VLongitudinalStringDecay) Hadron "<<Hadron1->GetParticleName()
225                    <<" "<<Hadron1->GetPDGMass(    245                    <<" "<<Hadron1->GetPDGMass()<<G4endl;
226            }                                      246            }
227            #endif                                 247            #endif
228            if ( Hadron1 != nullptr) { mass = ( << 248            if ( Hadron1 != NULL) { mass = (Hadron1)->GetPDGMass();}
229            else                  { mass = MaxM    249            else                  { mass = MaxMass;}
230         } else                                    250         } else
231         {                                         251         {
232            //... string is qq--qqbar: Build tw    252            //... string is qq--qqbar: Build two stable hadrons,
                                                   >> 253            //...    with extra uubar or ddbar quark pair
233                                                   254 
234            #ifdef debug_VStringDecay              255            #ifdef debug_VStringDecay
235            G4cout<<"VlongSD PossibleHadronMass << 256            G4cout<<"VlongSF string is qq--qqbar: Build two stable hadrons"<<G4endl; 
236            G4cout<<"VlongSD string is qq--qqba << 
237            #endif                                 257            #endif
238                                                   258 
239            G4double StringMass   = string->Mas << 259      G4int iflc = (G4UniformRand() < 0.5)? 1 : 2;
240            G4int cClusterInterrupt = 0;        << 260      if (string->GetLeftParton()->GetPDGEncoding() < 0) iflc = -iflc;
241            do                                  << 261 
242            {                                   << 262      //... theSpin = 4; spin 3/2 baryons will be built
243              if (cClusterInterrupt++ >= Cluste << 263      Hadron1 = (hadronizer->*build)(string->GetLeftParton(), FindParticle(iflc));
244                                                << 264      Hadron2 = (hadronizer->*build)(string->GetRightParton(), FindParticle(-iflc));
245              G4int LeftQuark1= string->GetLeft << 
246              G4int LeftQuark2=(string->GetLeft << 
247                                                << 
248              G4int RightQuark1= string->GetRig << 
249              G4int RightQuark2=(string->GetRig << 
250                                                << 
251              if (G4UniformRand()<0.5) {        << 
252                Hadron1 =hadronizer->Build(Find << 
253                Hadron2 =hadronizer->Build(Find << 
254              } else {                          << 
255                Hadron1 =hadronizer->Build(Find << 
256                Hadron2 =hadronizer->Build(Find << 
257              }                                 << 
258              //... repeat procedure, if mass o << 
259              //... ClusterMassCut = 0.15*GeV m << 
260            }                                   << 
261            while ( Hadron1 == nullptr || Hadro << 
262                    ( StringMass <= Hadron1->Ge << 
263                                                   265 
264      mass = (Hadron1)->GetPDGMass() + (Hadron2 << 266            if ( (Hadron1 != NULL) && (Hadron2 != NULL) ) { mass = (Hadron1)->GetPDGMass() + (Hadron2)->GetPDGMass();}
                                                   >> 267            else                                          { mass = MaxMass;}
265         }                                         268         }
266                                                   269 
267         #ifdef debug_VStringDecay                 270         #ifdef debug_VStringDecay
268         G4cout<<"VlongSD *Hadrons 1 and 2, pro << 271         G4cout<<"VlongSF *Hadrons 1 and 2, proposed mass "<<Hadron1<<" "<<Hadron2<<" "<<mass<<G4endl; 
269         #endif                                    272         #endif
270                                                   273   
271   if ( pdefs != 0 )                               274   if ( pdefs != 0 ) 
272   { // need to return hadrons as well....         275   { // need to return hadrons as well....
273      pdefs->first  = Hadron1;                     276      pdefs->first  = Hadron1;
274      pdefs->second = Hadron2;                     277      pdefs->second = Hadron2;
275   }                                               278   }
276                                                   279      
277         return mass;                              280         return mass;
278 }                                                 281 }
279                                                   282 
280 //--------------------------------------------    283 //----------------------------------------------------------------------------
281                                                   284 
282 G4ParticleDefinition* G4VLongitudinalStringDec    285 G4ParticleDefinition* G4VLongitudinalStringDecay::FindParticle(G4int Encoding) 
283 {                                                 286 {
284   /*                                              287   /*
285   G4cout<<Encoding<<" G4VLongitudinalStringDec    288   G4cout<<Encoding<<" G4VLongitudinalStringDecay::FindParticle Check di-quarks *******************"<<G4endl;
286   for (G4int i=4; i<6;i++){                       289   for (G4int i=4; i<6;i++){
287     for (G4int j=1;j<6;j++){                      290     for (G4int j=1;j<6;j++){
288       G4cout<<i<<" "<<j<<" ";                     291       G4cout<<i<<" "<<j<<" ";
289       G4int Code = 1000 * i + 100 * j +1;         292       G4int Code = 1000 * i + 100 * j +1;
290       G4ParticleDefinition* ptr1 = G4ParticleT    293       G4ParticleDefinition* ptr1 = G4ParticleTable::GetParticleTable()->FindParticle(Code);
291       Code +=2;                                   294       Code +=2;
292       G4ParticleDefinition* ptr2 = G4ParticleT    295       G4ParticleDefinition* ptr2 = G4ParticleTable::GetParticleTable()->FindParticle(Code);
293       G4cout<<"Code "<<Code - 2<<" ptr "<<ptr1    296       G4cout<<"Code "<<Code - 2<<" ptr "<<ptr1<<" :: Code "<<Code<<" ptr "<<ptr2<<G4endl;
294     }                                             297     }
295     G4cout<<G4endl;                               298     G4cout<<G4endl;
296   }                                               299   }
297   */                                              300   */
298                                                   301 
299   G4ParticleDefinition* ptr = G4ParticleTable:    302   G4ParticleDefinition* ptr = G4ParticleTable::GetParticleTable()->FindParticle(Encoding);
300                                                   303 
301   if (ptr == nullptr)                          << 304   if (ptr == NULL)
302   {                                               305   {
303      for (size_t i=0; i < NewParticles.size();    306      for (size_t i=0; i < NewParticles.size(); i++)
304      {                                            307      {
305        if ( Encoding == NewParticles[i]->GetPD    308        if ( Encoding == NewParticles[i]->GetPDGEncoding() ) { ptr = NewParticles[i]; return ptr;}
306      }                                            309      }
307   }                                               310   }
308                                                   311 
309   return ptr;                                     312   return ptr;    
310 }                                                 313 }
311                                                   314 
312 //********************************************    315 //*********************************************************************************
313 //   For decision on continue or stop string f    316 //   For decision on continue or stop string fragmentation
314 //   virtual G4bool StopFragmenting(const G4Fr    317 //   virtual G4bool StopFragmenting(const G4FragmentingString  * const string)=0;
315 //   virtual G4bool IsItFragmentable(const G4F    318 //   virtual G4bool IsItFragmentable(const G4FragmentingString * const string)=0;
316 //                                                319 //
317 //   If a string can not fragment, make last b    320 //   If a string can not fragment, make last break into 2 hadrons
318 //   virtual G4bool SplitLast(G4FragmentingStr    321 //   virtual G4bool SplitLast(G4FragmentingString * string, 
319 //                            G4KineticTrackVe    322 //                            G4KineticTrackVector * LeftVector,
320 //                            G4KineticTrackVe    323 //                            G4KineticTrackVector * RightVector)=0;
321 //--------------------------------------------    324 //-----------------------------------------------------------------------------
322 //                                                325 //
323 //   If a string can fragment, do the followin    326 //   If a string can fragment, do the following
324 //                                                327 //
325 //   For transver of a string to its CMS frame    328 //   For transver of a string to its CMS frame
326 //--------------------------------------------    329 //-----------------------------------------------------------------------------
327                                                   330 
328 G4ExcitedString *G4VLongitudinalStringDecay::C    331 G4ExcitedString *G4VLongitudinalStringDecay::CopyExcited(const G4ExcitedString & in)
329 {                                                 332 {
330   G4Parton *Left=new G4Parton(*in.GetLeftParto    333   G4Parton *Left=new G4Parton(*in.GetLeftParton());
331   G4Parton *Right=new G4Parton(*in.GetRightPar    334   G4Parton *Right=new G4Parton(*in.GetRightParton());
332   return new G4ExcitedString(Left,Right,in.Get    335   return new G4ExcitedString(Left,Right,in.GetDirection());
333 }                                                 336 }
334                                                   337 
335 //--------------------------------------------    338 //-----------------------------------------------------------------------------
336                                                   339 
337 G4ParticleDefinition * G4VLongitudinalStringDe    340 G4ParticleDefinition * G4VLongitudinalStringDecay::QuarkSplitup( G4ParticleDefinition* decay,
338                                                   341                                                                  G4ParticleDefinition *&created )
339 {                                                 342 {
340    #ifdef debug_VStringDecay                      343    #ifdef debug_VStringDecay
341    G4cout<<"VlongSD QuarkSplitup: quark ID "<< << 344    G4cout<<"VlongSF QuarkSplitup: quark ID "<<decay->GetPDGEncoding()<<G4endl; 
342    #endif                                         345    #endif
343                                                << 346 
344    G4int IsParticle=(decay->GetPDGEncoding()>0    347    G4int IsParticle=(decay->GetPDGEncoding()>0) ? -1 : +1;  // if we have a quark, we need antiquark (or diquark)
345                                                   348 
346    pDefPair QuarkPair = CreatePartonPair(IsPar    349    pDefPair QuarkPair = CreatePartonPair(IsParticle);
347    created = QuarkPair.second;                    350    created = QuarkPair.second;
348                                                   351 
349    DecayQuark = decay->GetPDGEncoding();          352    DecayQuark = decay->GetPDGEncoding();
350    NewQuark   = created->GetPDGEncoding();        353    NewQuark   = created->GetPDGEncoding();
351                                                   354 
352    #ifdef debug_VStringDecay                      355    #ifdef debug_VStringDecay
353    G4cout<<"VlongSD QuarkSplitup: "<<decay->Ge << 356    G4cout<<"VlongSF QuarkSplitup: "<<decay->GetPDGEncoding()<<" -> "<<QuarkPair.second->GetPDGEncoding()<<G4endl;
354    G4cout<<"hadronizer->Build(QuarkPair.first,    357    G4cout<<"hadronizer->Build(QuarkPair.first, decay)"<<G4endl;
355    #endif                                         358    #endif
356                                                << 
357    return hadronizer->Build(QuarkPair.first, d    359    return hadronizer->Build(QuarkPair.first, decay);
358 }                                                 360 }
359                                                   361 
360 //--------------------------------------------    362 //-----------------------------------------------------------------------------
361                                                   363 
362 G4VLongitudinalStringDecay::pDefPair G4VLongit    364 G4VLongitudinalStringDecay::pDefPair G4VLongitudinalStringDecay::
363 CreatePartonPair(G4int NeedParticle,G4bool All    365 CreatePartonPair(G4int NeedParticle,G4bool AllowDiquarks)
364 {                                                 366 {
365     //  NeedParticle = +1 for Particle, -1 for    367     //  NeedParticle = +1 for Particle, -1 for Antiparticle
366     if ( AllowDiquarks && G4UniformRand() < Di    368     if ( AllowDiquarks && G4UniformRand() < DiquarkSuppress )
367     {                                             369     {
368       // Create a Diquark - AntiDiquark pair ,    370       // Create a Diquark - AntiDiquark pair , first in pair is anti to IsParticle
369       #ifdef debug_VStringDecay                   371       #ifdef debug_VStringDecay
370       G4cout<<"VlongSD Create a Diquark - Anti << 372       G4cout<<"VlongSF Create a Diquark - AntiDiquark pair"<<G4endl;
371       #endif                                      373       #endif
372       G4int q1(0), q2(0), spin(0), PDGcode(0);    374       G4int q1(0), q2(0), spin(0), PDGcode(0);
373                                                   375 
374       q1  = SampleQuarkFlavor();                  376       q1  = SampleQuarkFlavor();
375       q2  = SampleQuarkFlavor();                  377       q2  = SampleQuarkFlavor();
376                                                   378 
377       spin = (q1 != q2 && G4UniformRand() <= 0    379       spin = (q1 != q2 && G4UniformRand() <= 0.5)? 1 : 3;
378                                      //   conv    380                                      //   convention: quark with higher PDG number is first
379       PDGcode = (std::max(q1,q2) * 1000 + std:    381       PDGcode = (std::max(q1,q2) * 1000 + std::min(q1,q2) * 100 + spin) * NeedParticle;
380                                                   382 
381       return pDefPair (FindParticle(-PDGcode),    383       return pDefPair (FindParticle(-PDGcode),FindParticle(PDGcode));
382                                                   384 
383     } else {                                      385     } else {
384       // Create a Quark - AntiQuark pair, firs    386       // Create a Quark - AntiQuark pair, first in pair  IsParticle
385       #ifdef debug_VStringDecay                   387       #ifdef debug_VStringDecay
386       G4cout<<"VlongSD Create a Quark - AntiQu << 388       G4cout<<"VlongSF Create a Quark - AntiQuark pair"<<G4endl; 
387       #endif                                      389       #endif
388       G4int PDGcode=SampleQuarkFlavor()*NeedPa    390       G4int PDGcode=SampleQuarkFlavor()*NeedParticle;
389       return pDefPair (FindParticle(PDGcode),F    391       return pDefPair (FindParticle(PDGcode),FindParticle(-PDGcode));
390     }                                             392     }
391 }                                                 393 }
392                                                   394 
393 //--------------------------------------------    395 //-----------------------------------------------------------------------------
394                                                   396 
395 G4int G4VLongitudinalStringDecay::SampleQuarkF    397 G4int G4VLongitudinalStringDecay::SampleQuarkFlavor(void)
396 {                                                 398 {
397    G4int  quark(1);                               399    G4int  quark(1);
398    G4double ksi = G4UniformRand();                400    G4double ksi = G4UniformRand();
399    if ( ksi < ProbCB ) {                          401    if ( ksi < ProbCB ) {
400       if ( ksi < ProbCCbar ) {quark = 4;}   //    402       if ( ksi < ProbCCbar ) {quark = 4;}   // c quark
401       else                   {quark = 5;}   //    403       else                   {quark = 5;}   // b quark
402       #ifdef debug_heavyHadrons                << 
403       G4cout << "G4VLongitudinalStringDecay::S << 
404        << quark << G4endl;                     << 
405       #endif                                   << 
406    } else {                                       404    } else {
407      quark = 1 + (int)(G4UniformRand()/Strange    405      quark = 1 + (int)(G4UniformRand()/StrangeSuppress);
408    }                                              406    }
409    #ifdef debug_VStringDecay                      407    #ifdef debug_VStringDecay
410    G4cout<<"VlongSD SampleQuarkFlavor "<<quark << 408    G4cout<<"VlongSF SampleQuarkFlavor "<<quark<<" (ProbCB ProbCCbar ProbBBbar "<<ProbCB
411          <<" "<<ProbCCbar<<" "<<ProbBBbar<<" )    409          <<" "<<ProbCCbar<<" "<<ProbBBbar<<" )"<<G4endl; 
412    #endif                                         410    #endif
413    return quark;                                  411    return quark;
414 }                                                 412 }
415                                                   413 
416 //--------------------------------------------    414 //-----------------------------------------------------------------------------
417                                                   415 
418 G4ThreeVector G4VLongitudinalStringDecay::Samp    416 G4ThreeVector G4VLongitudinalStringDecay::SampleQuarkPt(G4double ptMax)
419 {                                                 417 {
420    G4double Pt;                                   418    G4double Pt;
421    if ( ptMax < 0 ) {                             419    if ( ptMax < 0 ) {
422       // sample full gaussian                     420       // sample full gaussian
423       Pt = -G4Log(G4UniformRand());               421       Pt = -G4Log(G4UniformRand());
424    } else {                                       422    } else {
425       // sample in limited range                  423       // sample in limited range
426       G4double q = ptMax/SigmaQT;              << 424       Pt = -G4Log(G4RandFlat::shoot(G4Exp(-sqr(ptMax)/sqr(SigmaQT)), 1.));
427       G4double ymin = (q > 20.) ? 0.0 : G4Exp( << 
428       Pt = -G4Log(G4RandFlat::shoot(ymin, 1.)) << 
429    }                                              425    }
430    Pt = SigmaQT * std::sqrt(Pt);                  426    Pt = SigmaQT * std::sqrt(Pt);
431    G4double phi = 2.*pi*G4UniformRand();          427    G4double phi = 2.*pi*G4UniformRand();
432    return G4ThreeVector(Pt * std::cos(phi),Pt     428    return G4ThreeVector(Pt * std::cos(phi),Pt * std::sin(phi),0);
433 }                                                 429 }
434                                                   430 
435 //********************************************    431 //******************************************************************************
436                                                   432 
437 void G4VLongitudinalStringDecay::CalculateHadr    433 void G4VLongitudinalStringDecay::CalculateHadronTimePosition(G4double theInitialStringMass, 
438                                                   434                                                              G4KineticTrackVector* Hadrons)
439 {                                                 435 {
440    //   `yo-yo` formation time                    436    //   `yo-yo` formation time
441    //   const G4double kappa = 1.0 * GeV/fermi    437    //   const G4double kappa = 1.0 * GeV/fermi/4.;      
442    G4double kappa = GetStringTensionParameter(    438    G4double kappa = GetStringTensionParameter();
443    for (size_t c1 = 0; c1 < Hadrons->size(); c    439    for (size_t c1 = 0; c1 < Hadrons->size(); c1++)
444    {                                              440    {
445       G4double SumPz = 0;                         441       G4double SumPz = 0; 
446       G4double SumE  = 0;                         442       G4double SumE  = 0;
447       for (size_t c2 = 0; c2 < c1; c2++)          443       for (size_t c2 = 0; c2 < c1; c2++)
448       {                                           444       {
449          SumPz += Hadrons->operator[](c2)->Get    445          SumPz += Hadrons->operator[](c2)->Get4Momentum().pz();
450          SumE  += Hadrons->operator[](c2)->Get    446          SumE  += Hadrons->operator[](c2)->Get4Momentum().e();   
451       }                                           447       } 
452       G4double HadronE  = Hadrons->operator[](    448       G4double HadronE  = Hadrons->operator[](c1)->Get4Momentum().e();
453       G4double HadronPz = Hadrons->operator[](    449       G4double HadronPz = Hadrons->operator[](c1)->Get4Momentum().pz();
454       Hadrons->operator[](c1)->SetFormationTim    450       Hadrons->operator[](c1)->SetFormationTime(
455         (theInitialStringMass - 2.*SumPz + Had    451         (theInitialStringMass - 2.*SumPz + HadronE - HadronPz ) / (2.*kappa) / c_light ); 
456       G4ThreeVector aPosition( 0, 0,              452       G4ThreeVector aPosition( 0, 0,
457         (theInitialStringMass - 2.*SumE  - Had    453         (theInitialStringMass - 2.*SumE  - HadronE + HadronPz) / (2.*kappa) );
458       Hadrons->operator[](c1)->SetPosition(aPo    454       Hadrons->operator[](c1)->SetPosition(aPosition);
459    }                                              455    }
460 }                                                 456 }
461                                                   457 
462 //--------------------------------------------    458 //-----------------------------------------------------------------------------
463                                                   459 
464 void G4VLongitudinalStringDecay::SetSigmaTrans    460 void G4VLongitudinalStringDecay::SetSigmaTransverseMomentum(G4double aValue)
465 {                                                 461 {
466    if ( PastInitPhase ) {                         462    if ( PastInitPhase ) {
467      throw G4HadronicException(__FILE__, __LIN    463      throw G4HadronicException(__FILE__, __LINE__, 
468        "G4VLongitudinalStringDecay::SetSigmaTr    464        "G4VLongitudinalStringDecay::SetSigmaTransverseMomentum after FragmentString() not allowed");
469    } else {                                       465    } else {
470      SigmaQT = aValue;                            466      SigmaQT = aValue;
471    }                                              467    }
472 }                                                 468 }
473                                                   469 
474 //--------------------------------------------    470 //----------------------------------------------------------------------------------------------------------
475                                                   471 
476 void G4VLongitudinalStringDecay::SetStrangenes    472 void G4VLongitudinalStringDecay::SetStrangenessSuppression(G4double aValue)
477 {                                                 473 {
478    StrangeSuppress = aValue;                      474    StrangeSuppress = aValue;
479 }                                                 475 }
480                                                   476 
481 //--------------------------------------------    477 //----------------------------------------------------------------------------------------------------------
482                                                   478 
483 void G4VLongitudinalStringDecay::SetDiquarkSup    479 void G4VLongitudinalStringDecay::SetDiquarkSuppression(G4double aValue)
484 {                                                 480 {
485    DiquarkSuppress = aValue;                      481    DiquarkSuppress = aValue;
486 }                                                 482 }
487                                                   483 
488 //--------------------------------------------    484 //----------------------------------------------------------------------------------------
489                                                   485 
490 void G4VLongitudinalStringDecay::SetDiquarkBre    486 void G4VLongitudinalStringDecay::SetDiquarkBreakProbability(G4double aValue)
491 {                                                 487 {
492   if ( PastInitPhase ) {                          488   if ( PastInitPhase ) {
493     throw G4HadronicException(__FILE__, __LINE    489     throw G4HadronicException(__FILE__, __LINE__, 
494       "G4VLongitudinalStringDecay::SetDiquarkB    490       "G4VLongitudinalStringDecay::SetDiquarkBreakProbability after FragmentString() not allowed");
495   } else {                                        491   } else {
496     DiquarkBreakProb = aValue;                    492     DiquarkBreakProb = aValue;
497   }                                               493   }
498 }                                                 494 }
499                                                   495 
500 //--------------------------------------------    496 //----------------------------------------------------------------------------------------------------------
501                                                   497 
                                                   >> 498 void G4VLongitudinalStringDecay::SetVectorMesonProbability(G4double aValue)
                                                   >> 499 {
                                                   >> 500   if ( PastInitPhase ) {
                                                   >> 501     throw G4HadronicException(__FILE__, __LINE__, 
                                                   >> 502       "G4VLongitudinalStringDecay::SetVectorMesonProbability after FragmentString() not allowed");
                                                   >> 503   } else {
                                                   >> 504     pspin_meson = aValue;
                                                   >> 505     delete hadronizer;
                                                   >> 506     hadronizer = new G4HadronBuilder( pspin_meson, pspin_barion, scalarMesonMix, vectorMesonMix, ProbEta_c, ProbEta_b );
                                                   >> 507   }
                                                   >> 508 }
                                                   >> 509 
                                                   >> 510 //----------------------------------------------------------------------------------------------------------
                                                   >> 511 
502 void G4VLongitudinalStringDecay::SetSpinThreeH    512 void G4VLongitudinalStringDecay::SetSpinThreeHalfBarionProbability(G4double aValue)
503 {                                                 513 {
504   if ( PastInitPhase ) {                          514   if ( PastInitPhase ) {
505     throw G4HadronicException(__FILE__, __LINE    515     throw G4HadronicException(__FILE__, __LINE__, 
506       "G4VLongitudinalStringDecay::SetSpinThre    516       "G4VLongitudinalStringDecay::SetSpinThreeHalfBarionProbability after FragmentString() not allowed");
507   } else {                                        517   } else {
508     pspin_barion = aValue;                        518     pspin_barion = aValue;
509     delete hadronizer;                            519     delete hadronizer;
510     hadronizer = new G4HadronBuilder( pspin_me << 520     hadronizer = new G4HadronBuilder( pspin_meson, pspin_barion, scalarMesonMix, vectorMesonMix, ProbEta_c, ProbEta_b );
511                                       ProbEta_ << 
512   }                                               521   }
513 }                                                 522 }
514                                                   523 
515 //--------------------------------------------    524 //----------------------------------------------------------------------------------------------------------
516                                                   525 
517 void G4VLongitudinalStringDecay::SetScalarMeso    526 void G4VLongitudinalStringDecay::SetScalarMesonMixings(std::vector<G4double> aVector)
518 {                                                 527 {
519   if ( PastInitPhase ) {                          528   if ( PastInitPhase ) {
520     throw G4HadronicException(__FILE__, __LINE    529     throw G4HadronicException(__FILE__, __LINE__, 
521       "G4VLongitudinalStringDecay::SetScalarMe    530       "G4VLongitudinalStringDecay::SetScalarMesonMixings after FragmentString() not allowed");
522   } else {                                        531   } else {
523     if ( aVector.size() < 6 )                     532     if ( aVector.size() < 6 ) 
524       throw G4HadronicException(__FILE__, __LI    533       throw G4HadronicException(__FILE__, __LINE__, 
525         "G4VLongitudinalStringDecay::SetScalar    534         "G4VLongitudinalStringDecay::SetScalarMesonMixings( argument Vector too small");
526     scalarMesonMix[0] = aVector[0];               535     scalarMesonMix[0] = aVector[0];
527     scalarMesonMix[1] = aVector[1];               536     scalarMesonMix[1] = aVector[1];
528     scalarMesonMix[2] = aVector[2];               537     scalarMesonMix[2] = aVector[2];
529     scalarMesonMix[3] = aVector[3];               538     scalarMesonMix[3] = aVector[3];
530     scalarMesonMix[4] = aVector[4];               539     scalarMesonMix[4] = aVector[4];
531     scalarMesonMix[5] = aVector[5];               540     scalarMesonMix[5] = aVector[5];
532     delete hadronizer;                            541     delete hadronizer;
533     hadronizer = new G4HadronBuilder( pspin_me << 542     hadronizer = new G4HadronBuilder( pspin_meson, pspin_barion, scalarMesonMix, vectorMesonMix, ProbEta_c, ProbEta_b );
534                                       ProbEta_ << 
535   }                                               543   }
536 }                                                 544 }
537                                                   545 
538 //--------------------------------------------    546 //----------------------------------------------------------------------------------------------------------
539                                                   547 
540 void G4VLongitudinalStringDecay::SetVectorMeso    548 void G4VLongitudinalStringDecay::SetVectorMesonMixings(std::vector<G4double> aVector)
541 {                                                 549 {
542   if ( PastInitPhase ) {                          550   if ( PastInitPhase ) {
543     throw G4HadronicException(__FILE__, __LINE    551     throw G4HadronicException(__FILE__, __LINE__, 
544       "G4VLongitudinalStringDecay::SetVectorMe    552       "G4VLongitudinalStringDecay::SetVectorMesonMixings after FragmentString() not allowed");
545   } else {                                        553   } else {
546     if ( aVector.size() < 6 )                     554     if ( aVector.size() < 6 ) 
547       throw G4HadronicException(__FILE__, __LI    555       throw G4HadronicException(__FILE__, __LINE__, 
548         "G4VLongitudinalStringDecay::SetVector    556         "G4VLongitudinalStringDecay::SetVectorMesonMixings( argument Vector too small");
549     vectorMesonMix[0] = aVector[0];               557     vectorMesonMix[0] = aVector[0];
550     vectorMesonMix[1] = aVector[1];               558     vectorMesonMix[1] = aVector[1];
551     vectorMesonMix[2] = aVector[2];               559     vectorMesonMix[2] = aVector[2];
552     vectorMesonMix[3] = aVector[3];               560     vectorMesonMix[3] = aVector[3];
553     vectorMesonMix[4] = aVector[4];               561     vectorMesonMix[4] = aVector[4];
554     vectorMesonMix[5] = aVector[5];               562     vectorMesonMix[5] = aVector[5];
555     delete hadronizer;                            563     delete hadronizer;
556     hadronizer = new G4HadronBuilder( pspin_me << 564     hadronizer = new G4HadronBuilder( pspin_meson, pspin_barion, scalarMesonMix, vectorMesonMix, ProbEta_c, ProbEta_b );
557                                       ProbEta_ << 
558   }                                               565   }
559 }                                                 566 }
560                                                   567 
561 //--------------------------------------------    568 //-------------------------------------------------------------------------------------------
562                                                   569 
563 void G4VLongitudinalStringDecay::SetProbCCbar(    570 void G4VLongitudinalStringDecay::SetProbCCbar(G4double aValue)
564 {                                                 571 {
565    ProbCCbar = aValue;                            572    ProbCCbar = aValue;
566    ProbCB = ProbCCbar + ProbBBbar;                573    ProbCB = ProbCCbar + ProbBBbar;
567 }                                                 574 }
568                                                   575 
569 //--------------------------------------------    576 //-------------------------------------------------------------------------------------------
570                                                   577 
571 void G4VLongitudinalStringDecay::SetProbEta_c(    578 void G4VLongitudinalStringDecay::SetProbEta_c(G4double aValue)
572 {                                                 579 {
573    ProbEta_c = aValue;                            580    ProbEta_c = aValue;
574 }                                                 581 }
575                                                   582 
576 //--------------------------------------------    583 //-------------------------------------------------------------------------------------------
577                                                   584 
578 void G4VLongitudinalStringDecay::SetProbBBbar(    585 void G4VLongitudinalStringDecay::SetProbBBbar(G4double aValue)
579 {                                                 586 {
580    ProbBBbar = aValue;                            587    ProbBBbar = aValue;
581    ProbCB = ProbCCbar + ProbBBbar;                588    ProbCB = ProbCCbar + ProbBBbar;
582 }                                                 589 }
583                                                   590 
584 //--------------------------------------------    591 //-------------------------------------------------------------------------------------------
585                                                   592 
586 void G4VLongitudinalStringDecay::SetProbEta_b(    593 void G4VLongitudinalStringDecay::SetProbEta_b(G4double aValue)
587 {                                                 594 {
588    ProbEta_b = aValue;                            595    ProbEta_b = aValue;
589 }                                                 596 }
590                                                   597 
591 //--------------------------------------------    598 //-------------------------------------------------------------------------------------------
592                                                   599 
593 void G4VLongitudinalStringDecay::SetStringTens    600 void G4VLongitudinalStringDecay::SetStringTensionParameter(G4double aValue)
594 {                                                 601 {
595    Kappa = aValue * GeV/fermi;                    602    Kappa = aValue * GeV/fermi;
596 }                                                 603 } 
597                                                   604 
598 //--------------------------------------------    605 //-----------------------------------------------------------------------
599                                                   606 
600 void G4VLongitudinalStringDecay::SetMinMasses(    607 void G4VLongitudinalStringDecay::SetMinMasses()
601 {                                                 608 {
602     // ------ For estimation of a minimal stri    609     // ------ For estimation of a minimal string mass ---------------
603     Mass_of_light_quark =140.*MeV;                610     Mass_of_light_quark =140.*MeV;
604     Mass_of_s_quark     =500.*MeV;                611     Mass_of_s_quark     =500.*MeV;
605     Mass_of_c_quark     =1600.*MeV;            << 612     Mass_of_c_quark     = 0.*MeV;     // ???
606     Mass_of_b_quark     =4500.*MeV;            << 613     Mass_of_b_quark     = 0.*MeV;     // ???
607     Mass_of_string_junction=720.*MeV;             614     Mass_of_string_junction=720.*MeV;
608                                                   615 
609     // ---------------- Determination of minim    616     // ---------------- Determination of minimal mass of q-qbar strings -------------------
610     G4ParticleDefinition * hadron1;    G4int C    617     G4ParticleDefinition * hadron1;    G4int Code1;
611     G4ParticleDefinition * hadron2;    G4int C    618     G4ParticleDefinition * hadron2;    G4int Code2;
612     for (G4int i=1; i < 6; i++) {                 619     for (G4int i=1; i < 6; i++) {
613         Code1 = 100*i + 10*1 + 1;                 620         Code1 = 100*i + 10*1 + 1;
614         hadron1 = FindParticle(Code1);            621         hadron1 = FindParticle(Code1);
615                                                   622 
616         if (hadron1 != nullptr) {              << 623         if (hadron1 != NULL) {
617            for (G4int j=1; j < 6; j++) {          624            for (G4int j=1; j < 6; j++) {
618                Code2 = 100*j + 10*1 + 1;          625                Code2 = 100*j + 10*1 + 1;
619                hadron2 = FindParticle(Code2);     626                hadron2 = FindParticle(Code2);
620                if (hadron2 != nullptr) {       << 627                if (hadron2 != NULL) {
621                  minMassQQbarStr[i-1][j-1] = h    628                  minMassQQbarStr[i-1][j-1] = hadron1->GetPDGMass() + hadron2->GetPDGMass() + 70.0 * MeV;
622                }                                  629                }
623            }                                      630            } 
624         }                                         631         }
625     }                                             632     }
626                                                   633 
627     minMassQQbarStr[1][1] = minMassQQbarStr[0]    634     minMassQQbarStr[1][1] = minMassQQbarStr[0][0];   // u-ubar = 0.5 Pi0 + 0.24 Eta + 0.25 Eta'
628                                                   635 
629     // ---------------- Determination of minim    636     // ---------------- Determination of minimal mass of qq-q strings -------------------
630     G4ParticleDefinition * hadron3;               637     G4ParticleDefinition * hadron3;
631     G4int kfla, kflb;                             638     G4int kfla, kflb;
632     //  MaxMass = -350.0*GeV;   // If there wi    639     //  MaxMass = -350.0*GeV;   // If there will be a particle with mass larger than Higgs the value must be changed.
633                                                   640 
634     for (G4int i=1; i < 6; i++) {   //i=1         641     for (G4int i=1; i < 6; i++) {   //i=1
635         Code1 = 100*i + 10*1 + 1;                 642         Code1 = 100*i + 10*1 + 1;
636         hadron1 = FindParticle(Code1);            643         hadron1 = FindParticle(Code1);
637         for (G4int j=1; j < 6; j++) {             644         for (G4int j=1; j < 6; j++) {
638             for (G4int k=1; k < 6; k++) {         645             for (G4int k=1; k < 6; k++) {
639                 kfla = std::max(j,k);             646                 kfla = std::max(j,k);
640                 kflb = std::min(j,k);             647                 kflb = std::min(j,k);
641                                                   648 
642     // Add d-quark                                649     // Add d-quark
643                 Code2 = 1000*kfla + 100*kflb +    650                 Code2 = 1000*kfla + 100*kflb + 10*1 + 2;
644     if ( (j == 1) && (k==1)) Code2 = 1000*2 +     651     if ( (j == 1) && (k==1)) Code2 = 1000*2 + 100*1 + 10*1 + 2; // In the case - add u-quark.
645                                                   652 
646                 hadron2 = G4ParticleTable::Get    653                 hadron2 = G4ParticleTable::GetParticleTable()->FindParticle(Code2);
647                 hadron3 = G4ParticleTable::Get    654                 hadron3 = G4ParticleTable::GetParticleTable()->FindParticle(Code2 + 2);
648                                                   655 
649                 if ((hadron2 == nullptr) && (h << 656                 if ((hadron2 == NULL) && (hadron3 == NULL)) {minMassQDiQStr[i-1][j-1][k-1] = MaxMass; continue;};
650                                                   657 
651                 if ((hadron2 != nullptr) && (h << 658                 if ((hadron2 != NULL) && (hadron3 != NULL)) {
652                    if (hadron2->GetPDGMass() >    659                    if (hadron2->GetPDGMass() > hadron3->GetPDGMass() ) { hadron2 = hadron3; }
653                 };                                660                 };
654                                                   661 
655                 if ((hadron2 != nullptr) && (h << 662                 if ((hadron2 != NULL) && (hadron3 == NULL)) {};
656                                                   663 
657                 if ((hadron2 == nullptr) && (h << 664                 if ((hadron2 == NULL) && (hadron3 != NULL)) {hadron2 = hadron3;};
658                                                   665 
659                 minMassQDiQStr[i-1][j-1][k-1]     666                 minMassQDiQStr[i-1][j-1][k-1] = hadron1->GetPDGMass() + hadron2->GetPDGMass() + 70.0 * MeV;
660             }                                     667             }
661         }                                         668         }
662     }                                             669     }
663                                                   670 
664     // ------ An estimated minimal string mass    671     // ------ An estimated minimal string mass ----------------------
665     MinimalStringMass  = 0.;                      672     MinimalStringMass  = 0.;
666     MinimalStringMass2 = 0.;                      673     MinimalStringMass2 = 0.;
667     // q charges  d               u               674     // q charges  d               u                s               c                b
668     Qcharge[0] = -1; Qcharge[1] = 2; Qcharge[2    675     Qcharge[0] = -1; Qcharge[1] = 2; Qcharge[2] = -1; Qcharge[3] = 2; Qcharge[4] = -1;
669                                                   676 
670     // For treating of small string decays        677     // For treating of small string decays
671     for (G4int i=0; i<5; i++)                     678     for (G4int i=0; i<5; i++)
672     {  for (G4int j=0; j<5; j++)                  679     {  for (G4int j=0; j<5; j++)
673        {  for (G4int k=0; k<7; k++)               680        {  for (G4int k=0; k<7; k++)
674           {                                       681           {
675             Meson[i][j][k]=0; MesonWeight[i][j    682             Meson[i][j][k]=0; MesonWeight[i][j][k]=0.;
676           }                                       683           }
677        }                                          684        }
678     }                                             685     }
679     //--------------------------                  686     //--------------------------
680     G4int StrangeQ = 0;                        << 
681     G4int StrangeAQ = 0;                       << 
682     for (G4int i=0; i<5; i++)                     687     for (G4int i=0; i<5; i++)
683     {                                          << 688     {  for (G4int j=0; j<5; j++)
684        if( i >= 2 ) StrangeQ=1;                << 689        {
685        for (G4int j=0; j<5; j++)               << 
686        {                                       << 
687          StrangeAQ = 0;                        << 
688          if( j >= 2 ) StrangeAQ=1;             << 
689          Meson[i][j][0]       = 100 * (std::ma    690          Meson[i][j][0]       = 100 * (std::max(i,j)+1) + 10 * (std::min(i,j)+1) + 1; // Scalar meson
690          MesonWeight[i][j][0] = (   pspin_meso << 691          MesonWeight[i][j][0] = (   pspin_meson);
691          Meson[i][j][1]       = 100 * (std::ma    692          Meson[i][j][1]       = 100 * (std::max(i,j)+1) + 10 * (std::min(i,j)+1) + 3; // Vector meson
692          MesonWeight[i][j][1] = (1.-pspin_meso << 693          MesonWeight[i][j][1] = (1.-pspin_meson);
693        }                                          694        }
694     }                                             695     }
695                                                   696 
696     //qqs                                         697     //qqs                                                                                                         indexes
697     //dd1 -> scalarMesonMix[0] * 111 + (1-scal    698     //dd1 -> scalarMesonMix[0] * 111 + (1-scalarMesonMix[0]-scalarMesonMix[1]) * 221 + scalarMesonMix[1] * 331     (000)
698     //dd1 ->                     Pi0              699     //dd1 ->                     Pi0                                             Eta                       Eta'
699                                                   700 
700     Meson[0][0][0] = 111; MesonWeight[0][0][0] << 701     Meson[0][0][0] = 111; MesonWeight[0][0][0] = (   pspin_meson) * (  scalarMesonMix[0]                  );  // Pi0
701     Meson[0][0][2] = 221; MesonWeight[0][0][3] << 702     Meson[0][0][2] = 221; MesonWeight[0][0][3] = (   pspin_meson) * (1-scalarMesonMix[0]-scalarMesonMix[1]);  // Eta
702     Meson[0][0][3] = 331; MesonWeight[0][0][4] << 703     Meson[0][0][3] = 331; MesonWeight[0][0][4] = (   pspin_meson) * (                    scalarMesonMix[1]);  // Eta'
703                                                << 704 
704     //dd3 -> (1-vectorMesonMix[1] * 113 + vect << 705     //dd3 -> vectorMesonMix[0] * 113 + (1-vectorMesonMix[0]-vectorMesonMix[1]) * 223 + vectorMesonMix[1] * 333     (001)
705     //dd3 ->                       rho_0       << 706     //dd3 ->                    rho_0                                           omega                      fi
706                                                << 707 
707     Meson[0][0][1] = 113; MesonWeight[0][0][1] << 708     Meson[0][0][1] = 113; MesonWeight[0][0][1] = (1.-pspin_meson) * (  vectorMesonMix[0]                  );  // Rho
708     Meson[0][0][4] = 223; MesonWeight[0][0][4] << 709     Meson[0][0][4] = 223; MesonWeight[0][0][4] = (1.-pspin_meson) * (1-vectorMesonMix[0]-vectorMesonMix[1]);  // omega
                                                   >> 710     Meson[0][0][5] = 333; MesonWeight[0][0][5] = (1.-pspin_meson) * (                    vectorMesonMix[1]);  // fi
709                                                   711 
710     //uu1 -> scalarMesonMix[0] * 111 + (1-scal    712     //uu1 -> scalarMesonMix[0] * 111 + (1-scalarMesonMix[0]-scalarMesonMix[1]) * 221 + scalarMesonMix[1] * 331     (110)
711     //uu1 ->                     Pi0              713     //uu1 ->                     Pi0                                             Eta                       Eta'
712                                                   714 
713     Meson[1][1][0] = 111; MesonWeight[1][1][0] << 715     Meson[1][1][0] = 111; MesonWeight[1][1][0] = (   pspin_meson) * (  scalarMesonMix[0]                  );  // Pi0
714     Meson[1][1][2] = 221; MesonWeight[1][1][2] << 716     Meson[1][1][2] = 221; MesonWeight[1][1][2] = (   pspin_meson) * (1-scalarMesonMix[0]-scalarMesonMix[1]);  // Eta
715     Meson[1][1][3] = 331; MesonWeight[1][1][3] << 717     Meson[1][1][3] = 331; MesonWeight[1][1][3] = (   pspin_meson) * (                    scalarMesonMix[1]);  // Eta'
716                                                << 718 
717     //uu3 -> (1-vectorMesonMix[1]) * 113 + vec << 719     //uu3 -> vectorMesonMix[0] * 113 + (1-vectorMesonMix[0]-vectorMesonMix[1]) * 223 + vectorMesonMix[1] * 333     (111)
718     //uu3 ->                        rho_0      << 720     //uu3 ->                    rho_0                                           omega                      fi
719                                                << 721 
720     Meson[1][1][1] = 113; MesonWeight[1][1][1] << 722     Meson[1][1][1] = 113; MesonWeight[1][1][1] = (1.-pspin_meson) * (  vectorMesonMix[0]                  );  // Rho
721     Meson[1][1][4] = 223; MesonWeight[1][1][4] << 723     Meson[1][1][4] = 223; MesonWeight[1][1][4] = (1.-pspin_meson) * (1-vectorMesonMix[0]-vectorMesonMix[1]);  // omega
                                                   >> 724     Meson[1][1][5] = 333; MesonWeight[1][1][5] = (1.-pspin_meson) * (                    vectorMesonMix[1]);  // fi
722                                                   725 
723     //ss1     ->                                  726     //ss1     ->                                             (1-scalarMesonMix[5]) * 221 + scalarMesonMix[5] * 331   (220)
724     //ss1     ->                                  727     //ss1     ->                                                                     Eta                       Eta'
725                                                   728 
726     Meson[2][2][0] = 221; MesonWeight[2][2][0] << 729     Meson[2][2][0] = 221; MesonWeight[2][2][0] = (   pspin_meson) * (1-scalarMesonMix[5]                  );  // Eta
727     Meson[2][2][2] = 331; MesonWeight[2][2][2] << 730     Meson[2][2][2] = 331; MesonWeight[2][2][2] = (   pspin_meson) * (                    scalarMesonMix[5]);  // Eta'
728                                                   731 
729     //ss3     ->                               << 732     //ss3     ->                                             (1-vectorMesonMix[5]) * 223 + vectorMesonMix[5] * 333   (221)
730     //ss3     ->                               << 733     //ss3     ->                                                                    omega                      fi
731                                                   734 
732     Meson[2][2][1] = 333; MesonWeight[2][2][1] << 735     Meson[2][2][1] = 223; MesonWeight[2][2][1] = (1.-pspin_meson) * (1-vectorMesonMix[5]                  );  // omega
                                                   >> 736     Meson[2][2][3] = 333; MesonWeight[2][2][3] = (1.-pspin_meson) * (                    vectorMesonMix[5]);  // fi
733                                                   737 
734     //cc1     ->    ProbEta_c /(1-pspin_meson)    738     //cc1     ->    ProbEta_c /(1-pspin_meson) 441  (330) Probability of Eta_c
735     //cc3     -> (1-ProbEta_c)/(  pspin_meson)    739     //cc3     -> (1-ProbEta_c)/(  pspin_meson) 443  (331) Probability of J/Psi
736                                                   740 
737     //bb1     ->    ProbEta_b /pspin_meson 551    741     //bb1     ->    ProbEta_b /pspin_meson 551  (440) Probability of Eta_b
738     //bb3     -> (1-ProbEta_b)/pspin_meson 553 << 742     //bb3     -> (1-ProbEta_b)/pspin_meson 553  (441) Probability of ipsilon
739                                                   743 
740     if ( pspin_meson[2] != 0. ) {              << 744     if ( pspin_meson != 0. ) {
741        Meson[3][3][0] *= (    ProbEta_c)/(   p << 745        Meson[3][3][0] *= (    ProbEta_c)/(   pspin_meson);   // Eta_c
742        Meson[3][3][1] *= (1.0-ProbEta_c)/(1.-p << 746        Meson[3][3][1] *= (1.0-ProbEta_c)/(1.-pspin_meson);   // J/Psi
743                                                   747 
744        Meson[4][4][0] *= (    ProbEta_b)/(   p << 748        Meson[4][4][0] *= (    ProbEta_b)/(   pspin_meson);   // Eta_b
745        Meson[4][4][1] *= (1.0-ProbEta_b)/(1.-p << 749        Meson[4][4][1] *= (1.0-ProbEta_b)/(1.-pspin_meson);   // ipsilon
746     }                                             750     }
747                                                   751 
748     //--------------------------                  752     //--------------------------
749                                                   753 
750     for (G4int i=0; i<5; i++)                     754     for (G4int i=0; i<5; i++)
751     {  for (G4int j=0; j<5; j++)                  755     {  for (G4int j=0; j<5; j++)
752        {  for (G4int k=0; k<5; k++)               756        {  for (G4int k=0; k<5; k++)
753           {  for (G4int l=0; l<4; l++)            757           {  for (G4int l=0; l<4; l++)
754              { Baryon[i][j][k][l]=0; BaryonWei    758              { Baryon[i][j][k][l]=0; BaryonWeight[i][j][k][l]=0.;}
755           }                                       759           }
756        }                                          760        }
757     }                                             761     }
758                                                   762 
759           kfla =0;  kflb =0;                      763           kfla =0;  kflb =0;
760     G4int                   kflc(0), kfld(0),     764     G4int                   kflc(0), kfld(0), kfle(0), kflf(0);
761     for (G4int i=0; i<5; i++)                     765     for (G4int i=0; i<5; i++)
762     {  for (G4int j=0; j<5; j++)                  766     {  for (G4int j=0; j<5; j++)
763        {  for (G4int k=0; k<5; k++)               767        {  for (G4int k=0; k<5; k++)
764           {                                       768           {  
765            kfla = i+1; kflb = j+1; kflc = k+1;    769            kfla = i+1; kflb = j+1; kflc = k+1;
766      kfld = std::max(kfla,kflb);                  770      kfld = std::max(kfla,kflb);
767      kfld = std::max(kfld,kflc);                  771      kfld = std::max(kfld,kflc);
768                                                   772 
769      kflf = std::min(kfla,kflb);                  773      kflf = std::min(kfla,kflb);
770      kflf = std::min(kflf,kflc);                  774      kflf = std::min(kflf,kflc);
771                                                   775 
772            kfle = kfla + kflb + kflc - kfld -     776            kfle = kfla + kflb + kflc - kfld - kflf;
773                                                   777 
774            Baryon[i][j][k][0]       = 1000 * k    778            Baryon[i][j][k][0]       = 1000 * kfld + 100 * kfle + 10 * kflf + 2; // spin=1/2
775            BaryonWeight[i][j][k][0] = (   pspi    779            BaryonWeight[i][j][k][0] = (   pspin_barion);
776            Baryon[i][j][k][1]       = 1000 * k    780            Baryon[i][j][k][1]       = 1000 * kfld + 100 * kfle + 10 * kflf + 4; // spin=3/2
777            BaryonWeight[i][j][k][1] = (1.-pspi    781            BaryonWeight[i][j][k][1] = (1.-pspin_barion);
778           }                                       782           }
779        }                                          783        }
780     }                                             784     }
781                                                   785 
782     // Delta-  ddd - only 1114                    786     // Delta-  ddd - only 1114
783     Baryon[0][0][0][0] = 1114;    BaryonWeight    787     Baryon[0][0][0][0] = 1114;    BaryonWeight[0][0][0][0] = 1.0; 
784     Baryon[0][0][0][1] =    0;    BaryonWeight    788     Baryon[0][0][0][1] =    0;    BaryonWeight[0][0][0][1] = 0.0; 
785                                                   789 
786     // Delta++ uuu - only 2224                    790     // Delta++ uuu - only 2224
787     Baryon[1][1][1][0] = 2224;    BaryonWeight    791     Baryon[1][1][1][0] = 2224;    BaryonWeight[1][1][1][0] = 1.0; 
788     Baryon[1][1][1][1] =    0;    BaryonWeight    792     Baryon[1][1][1][1] =    0;    BaryonWeight[1][1][1][1] = 0.0; 
789                                                   793 
790     // Omega- sss - only 3334                     794     // Omega- sss - only 3334
791     Baryon[2][2][2][0] = 3334;    BaryonWeight    795     Baryon[2][2][2][0] = 3334;    BaryonWeight[2][2][2][0] = 1.0; 
792     Baryon[2][2][2][1] =    0;    BaryonWeight    796     Baryon[2][2][2][1] =    0;    BaryonWeight[2][2][2][1] = 0.0; 
793                                                   797 
794     // Omega_cc++ ccc - only 4444                 798     // Omega_cc++ ccc - only 4444
795     Baryon[3][3][3][0] = 4444;    BaryonWeight    799     Baryon[3][3][3][0] = 4444;    BaryonWeight[3][3][3][0] = 1.0; 
796     Baryon[3][3][3][1] =    0;    BaryonWeight    800     Baryon[3][3][3][1] =    0;    BaryonWeight[3][3][3][1] = 0.0; 
797                                                   801 
798     // Omega_bb-  bbb - only 5554              << 802     // Omega_bb-  bbb - only 5454
799     Baryon[4][4][4][0] = 5554;    BaryonWeight    803     Baryon[4][4][4][0] = 5554;    BaryonWeight[4][4][4][0] = 1.0; 
800     Baryon[4][4][4][1] =    0;    BaryonWeight    804     Baryon[4][4][4][1] =    0;    BaryonWeight[4][4][4][1] = 0.0; 
801                                                   805 
802     // Lambda/Sigma0 sud - 3122/3212              806     // Lambda/Sigma0 sud - 3122/3212
803     Baryon[0][1][2][0] = 3122;    BaryonWeight    807     Baryon[0][1][2][0] = 3122;    BaryonWeight[0][1][2][0] *= 0.5;                  // Lambda
804     Baryon[0][2][1][0] = 3122;    BaryonWeight    808     Baryon[0][2][1][0] = 3122;    BaryonWeight[0][2][1][0] *= 0.5;
805     Baryon[1][0][2][0] = 3122;    BaryonWeight    809     Baryon[1][0][2][0] = 3122;    BaryonWeight[1][0][2][0] *= 0.5;
806     Baryon[1][2][0][0] = 3122;    BaryonWeight    810     Baryon[1][2][0][0] = 3122;    BaryonWeight[1][2][0][0] *= 0.5;
807     Baryon[2][0][1][0] = 3122;    BaryonWeight    811     Baryon[2][0][1][0] = 3122;    BaryonWeight[2][0][1][0] *= 0.5;
808     Baryon[2][1][0][0] = 3122;    BaryonWeight    812     Baryon[2][1][0][0] = 3122;    BaryonWeight[2][1][0][0] *= 0.5;
809                                                   813 
810     Baryon[0][1][2][2] = 3212;    BaryonWeight    814     Baryon[0][1][2][2] = 3212;    BaryonWeight[0][1][2][2]  = 0.5 * pspin_barion;   // Sigma0
811     Baryon[0][2][1][2] = 3212;    BaryonWeight    815     Baryon[0][2][1][2] = 3212;    BaryonWeight[0][2][1][2]  = 0.5 * pspin_barion;
812     Baryon[1][0][2][2] = 3212;    BaryonWeight    816     Baryon[1][0][2][2] = 3212;    BaryonWeight[1][0][2][2]  = 0.5 * pspin_barion;
813     Baryon[1][2][0][2] = 3212;    BaryonWeight    817     Baryon[1][2][0][2] = 3212;    BaryonWeight[1][2][0][2]  = 0.5 * pspin_barion;
814     Baryon[2][0][1][2] = 3212;    BaryonWeight    818     Baryon[2][0][1][2] = 3212;    BaryonWeight[2][0][1][2]  = 0.5 * pspin_barion;
815     Baryon[2][1][0][2] = 3212;    BaryonWeight    819     Baryon[2][1][0][2] = 3212;    BaryonWeight[2][1][0][2]  = 0.5 * pspin_barion;
816                                                   820 
817     // Lambda_c+/Sigma_c+ cud - 4122/4212         821     // Lambda_c+/Sigma_c+ cud - 4122/4212
818     Baryon[0][1][3][0] = 4122;    BaryonWeight    822     Baryon[0][1][3][0] = 4122;    BaryonWeight[0][1][3][0] *= 0.5;                  // Lambda_c+
819     Baryon[0][3][1][0] = 4122;    BaryonWeight    823     Baryon[0][3][1][0] = 4122;    BaryonWeight[0][3][1][0] *= 0.5;
820     Baryon[1][0][3][0] = 4122;    BaryonWeight    824     Baryon[1][0][3][0] = 4122;    BaryonWeight[1][0][3][0] *= 0.5;
821     Baryon[1][3][0][0] = 4122;    BaryonWeight    825     Baryon[1][3][0][0] = 4122;    BaryonWeight[1][3][0][0] *= 0.5;
822     Baryon[3][0][1][0] = 4122;    BaryonWeight    826     Baryon[3][0][1][0] = 4122;    BaryonWeight[3][0][1][0] *= 0.5;
823     Baryon[3][1][0][0] = 4122;    BaryonWeight    827     Baryon[3][1][0][0] = 4122;    BaryonWeight[3][1][0][0] *= 0.5;
824                                                   828 
825     Baryon[0][1][3][2] = 4212;    BaryonWeight    829     Baryon[0][1][3][2] = 4212;    BaryonWeight[0][1][3][2]  = 0.5 * pspin_barion;   // SigmaC+
826     Baryon[0][3][1][2] = 4212;    BaryonWeight    830     Baryon[0][3][1][2] = 4212;    BaryonWeight[0][3][1][2]  = 0.5 * pspin_barion;
827     Baryon[1][0][3][2] = 4212;    BaryonWeight    831     Baryon[1][0][3][2] = 4212;    BaryonWeight[1][0][3][2]  = 0.5 * pspin_barion;
828     Baryon[1][3][0][2] = 4212;    BaryonWeight    832     Baryon[1][3][0][2] = 4212;    BaryonWeight[1][3][0][2]  = 0.5 * pspin_barion;
829     Baryon[3][0][1][2] = 4212;    BaryonWeight    833     Baryon[3][0][1][2] = 4212;    BaryonWeight[3][0][1][2]  = 0.5 * pspin_barion;
830     Baryon[3][1][0][2] = 4212;    BaryonWeight    834     Baryon[3][1][0][2] = 4212;    BaryonWeight[3][1][0][2]  = 0.5 * pspin_barion;
831                                                   835 
832     // Xi_c+/Xi_c+' cus - 4232/4322               836     // Xi_c+/Xi_c+' cus - 4232/4322
833     Baryon[1][2][3][0] = 4232;    BaryonWeight    837     Baryon[1][2][3][0] = 4232;    BaryonWeight[1][2][3][0] *= 0.5;                  // Xi_c+
834     Baryon[1][3][2][0] = 4232;    BaryonWeight    838     Baryon[1][3][2][0] = 4232;    BaryonWeight[1][3][2][0] *= 0.5;
835     Baryon[2][1][3][0] = 4232;    BaryonWeight    839     Baryon[2][1][3][0] = 4232;    BaryonWeight[2][1][3][0] *= 0.5;
836     Baryon[2][3][1][0] = 4232;    BaryonWeight    840     Baryon[2][3][1][0] = 4232;    BaryonWeight[2][3][1][0] *= 0.5;
837     Baryon[3][1][2][0] = 4232;    BaryonWeight    841     Baryon[3][1][2][0] = 4232;    BaryonWeight[3][1][2][0] *= 0.5;
838     Baryon[3][2][1][0] = 4232;    BaryonWeight    842     Baryon[3][2][1][0] = 4232;    BaryonWeight[3][2][1][0] *= 0.5;
839                                                   843 
840     Baryon[1][2][3][2] = 4322;    BaryonWeight    844     Baryon[1][2][3][2] = 4322;    BaryonWeight[1][2][3][2]  = 0.5 * pspin_barion;   // Xi_c+'
841     Baryon[1][3][2][2] = 4322;    BaryonWeight    845     Baryon[1][3][2][2] = 4322;    BaryonWeight[1][3][2][2]  = 0.5 * pspin_barion;
842     Baryon[2][1][3][2] = 4322;    BaryonWeight    846     Baryon[2][1][3][2] = 4322;    BaryonWeight[2][1][3][2]  = 0.5 * pspin_barion;
843     Baryon[2][3][1][2] = 4322;    BaryonWeight    847     Baryon[2][3][1][2] = 4322;    BaryonWeight[2][3][1][2]  = 0.5 * pspin_barion;
844     Baryon[3][1][2][2] = 4322;    BaryonWeight    848     Baryon[3][1][2][2] = 4322;    BaryonWeight[3][1][2][2]  = 0.5 * pspin_barion;
845     Baryon[3][2][1][2] = 4322;    BaryonWeight    849     Baryon[3][2][1][2] = 4322;    BaryonWeight[3][2][1][2]  = 0.5 * pspin_barion;
846                                                   850 
847     // Xi_c0/Xi_c0' cus - 4132/4312            << 851     // Xi_c0/Xi_c0' cus - 4232/4322
848     Baryon[0][2][3][0] = 4132;    BaryonWeight    852     Baryon[0][2][3][0] = 4132;    BaryonWeight[0][2][3][0] *= 0.5;                  // Xi_c0
849     Baryon[0][3][2][0] = 4132;    BaryonWeight    853     Baryon[0][3][2][0] = 4132;    BaryonWeight[0][3][2][0] *= 0.5;
850     Baryon[2][0][3][0] = 4132;    BaryonWeight    854     Baryon[2][0][3][0] = 4132;    BaryonWeight[2][0][3][0] *= 0.5;
851     Baryon[2][3][0][0] = 4132;    BaryonWeight    855     Baryon[2][3][0][0] = 4132;    BaryonWeight[2][3][0][0] *= 0.5;
852     Baryon[3][0][2][0] = 4132;    BaryonWeight    856     Baryon[3][0][2][0] = 4132;    BaryonWeight[3][0][2][0] *= 0.5;
853     Baryon[3][2][0][0] = 4132;    BaryonWeight    857     Baryon[3][2][0][0] = 4132;    BaryonWeight[3][2][0][0] *= 0.5;
854                                                   858 
855     Baryon[0][2][3][2] = 4312;    BaryonWeight    859     Baryon[0][2][3][2] = 4312;    BaryonWeight[0][2][3][2]  = 0.5 * pspin_barion;   // Xi_c0'
856     Baryon[0][3][2][2] = 4312;    BaryonWeight    860     Baryon[0][3][2][2] = 4312;    BaryonWeight[0][3][2][2]  = 0.5 * pspin_barion;
857     Baryon[2][0][3][2] = 4312;    BaryonWeight    861     Baryon[2][0][3][2] = 4312;    BaryonWeight[2][0][3][2]  = 0.5 * pspin_barion;
858     Baryon[2][3][0][2] = 4312;    BaryonWeight    862     Baryon[2][3][0][2] = 4312;    BaryonWeight[2][3][0][2]  = 0.5 * pspin_barion;
859     Baryon[3][0][2][2] = 4312;    BaryonWeight    863     Baryon[3][0][2][2] = 4312;    BaryonWeight[3][0][2][2]  = 0.5 * pspin_barion;
860     Baryon[3][2][0][2] = 4312;    BaryonWeight    864     Baryon[3][2][0][2] = 4312;    BaryonWeight[3][2][0][2]  = 0.5 * pspin_barion;
861                                                   865 
862     // Lambda_b0/Sigma_b0 bud - 5122/5212         866     // Lambda_b0/Sigma_b0 bud - 5122/5212
863     Baryon[0][1][4][0] = 5122;    BaryonWeight    867     Baryon[0][1][4][0] = 5122;    BaryonWeight[0][1][4][0] *= 0.5;                  // Lambda_b0
864     Baryon[0][4][1][0] = 5122;    BaryonWeight    868     Baryon[0][4][1][0] = 5122;    BaryonWeight[0][4][1][0] *= 0.5;
865     Baryon[1][0][4][0] = 5122;    BaryonWeight    869     Baryon[1][0][4][0] = 5122;    BaryonWeight[1][0][4][0] *= 0.5;
866     Baryon[1][4][0][0] = 5122;    BaryonWeight    870     Baryon[1][4][0][0] = 5122;    BaryonWeight[1][4][0][0] *= 0.5;
867     Baryon[4][0][1][0] = 5122;    BaryonWeight    871     Baryon[4][0][1][0] = 5122;    BaryonWeight[4][0][1][0] *= 0.5;
868     Baryon[4][1][0][0] = 5122;    BaryonWeight    872     Baryon[4][1][0][0] = 5122;    BaryonWeight[4][1][0][0] *= 0.5;
869                                                   873 
870     Baryon[0][1][4][2] = 5212;    BaryonWeight    874     Baryon[0][1][4][2] = 5212;    BaryonWeight[0][1][4][2]  = 0.5 * pspin_barion;   // Sigma_b0
871     Baryon[0][4][1][2] = 5212;    BaryonWeight    875     Baryon[0][4][1][2] = 5212;    BaryonWeight[0][4][1][2]  = 0.5 * pspin_barion;
872     Baryon[1][0][4][2] = 5212;    BaryonWeight    876     Baryon[1][0][4][2] = 5212;    BaryonWeight[1][0][4][2]  = 0.5 * pspin_barion;
873     Baryon[1][4][0][2] = 5212;    BaryonWeight    877     Baryon[1][4][0][2] = 5212;    BaryonWeight[1][4][0][2]  = 0.5 * pspin_barion;
874     Baryon[4][0][1][2] = 5212;    BaryonWeight    878     Baryon[4][0][1][2] = 5212;    BaryonWeight[4][0][1][2]  = 0.5 * pspin_barion;
875     Baryon[4][1][0][2] = 5212;    BaryonWeight    879     Baryon[4][1][0][2] = 5212;    BaryonWeight[4][1][0][2]  = 0.5 * pspin_barion;
876                                                   880 
877     // Xi_b0/Xi_b0' bus - 5232/5322            << 881     // Xi_b-/Xi_b-' bus - 5232/5322
878     Baryon[1][2][4][0] = 5232;    BaryonWeight << 882     Baryon[1][2][4][0] = 5232;    BaryonWeight[1][2][4][0] *= 0.5;                  // Xi_b-
879     Baryon[1][4][2][0] = 5232;    BaryonWeight    883     Baryon[1][4][2][0] = 5232;    BaryonWeight[1][4][2][0] *= 0.5;
880     Baryon[2][1][4][0] = 5232;    BaryonWeight    884     Baryon[2][1][4][0] = 5232;    BaryonWeight[2][1][4][0] *= 0.5;
881     Baryon[2][4][1][0] = 5232;    BaryonWeight    885     Baryon[2][4][1][0] = 5232;    BaryonWeight[2][4][1][0] *= 0.5;
882     Baryon[4][1][2][0] = 5232;    BaryonWeight    886     Baryon[4][1][2][0] = 5232;    BaryonWeight[4][1][2][0] *= 0.5;
883     Baryon[4][2][1][0] = 5232;    BaryonWeight    887     Baryon[4][2][1][0] = 5232;    BaryonWeight[4][2][1][0] *= 0.5;
884                                                   888 
885     Baryon[1][2][4][2] = 5322;    BaryonWeight << 889     Baryon[1][2][4][2] = 5322;    BaryonWeight[1][2][4][2]  = 0.5 * pspin_barion;   // Xi_b-'
886     Baryon[1][4][2][2] = 5322;    BaryonWeight    890     Baryon[1][4][2][2] = 5322;    BaryonWeight[1][4][2][2]  = 0.5 * pspin_barion;
887     Baryon[2][1][4][2] = 5322;    BaryonWeight    891     Baryon[2][1][4][2] = 5322;    BaryonWeight[2][1][4][2]  = 0.5 * pspin_barion;
888     Baryon[2][4][1][2] = 5322;    BaryonWeight    892     Baryon[2][4][1][2] = 5322;    BaryonWeight[2][4][1][2]  = 0.5 * pspin_barion;
889     Baryon[4][1][2][2] = 5322;    BaryonWeight    893     Baryon[4][1][2][2] = 5322;    BaryonWeight[4][1][2][2]  = 0.5 * pspin_barion;
890     Baryon[4][2][1][2] = 5322;    BaryonWeight    894     Baryon[4][2][1][2] = 5322;    BaryonWeight[4][2][1][2]  = 0.5 * pspin_barion;
891                                                   895 
892     // Xi_b-/Xi_b-' bus - 5132/5312            << 896     // Xi_b0/Xi_b0' bus - 5232/5322
893     Baryon[0][2][4][0] = 5132;    BaryonWeight << 897     Baryon[0][2][4][0] = 5132;    BaryonWeight[0][2][4][0] *= 0.5;                  // Xi_b0
894     Baryon[0][4][2][0] = 5132;    BaryonWeight    898     Baryon[0][4][2][0] = 5132;    BaryonWeight[0][4][2][0] *= 0.5;
895     Baryon[2][0][4][0] = 5132;    BaryonWeight    899     Baryon[2][0][4][0] = 5132;    BaryonWeight[2][0][4][0] *= 0.5;
896     Baryon[2][4][0][0] = 5132;    BaryonWeight    900     Baryon[2][4][0][0] = 5132;    BaryonWeight[2][4][0][0] *= 0.5;
897     Baryon[4][0][2][0] = 5132;    BaryonWeight    901     Baryon[4][0][2][0] = 5132;    BaryonWeight[4][0][2][0] *= 0.5;
898     Baryon[4][2][0][0] = 5132;    BaryonWeight    902     Baryon[4][2][0][0] = 5132;    BaryonWeight[4][2][0][0] *= 0.5;
899                                                   903 
900     Baryon[0][2][4][2] = 5312;    BaryonWeight << 904     Baryon[0][2][4][2] = 5312;    BaryonWeight[0][2][4][2]  = 0.5 * pspin_barion;   // Xi_b0'
901     Baryon[0][4][2][2] = 5312;    BaryonWeight    905     Baryon[0][4][2][2] = 5312;    BaryonWeight[0][4][2][2]  = 0.5 * pspin_barion;
902     Baryon[2][0][4][2] = 5312;    BaryonWeight    906     Baryon[2][0][4][2] = 5312;    BaryonWeight[2][0][4][2]  = 0.5 * pspin_barion;
903     Baryon[2][4][0][2] = 5312;    BaryonWeight    907     Baryon[2][4][0][2] = 5312;    BaryonWeight[2][4][0][2]  = 0.5 * pspin_barion;
904     Baryon[4][0][2][2] = 5312;    BaryonWeight    908     Baryon[4][0][2][2] = 5312;    BaryonWeight[4][0][2][2]  = 0.5 * pspin_barion;
905     Baryon[4][2][0][2] = 5312;    BaryonWeight    909     Baryon[4][2][0][2] = 5312;    BaryonWeight[4][2][0][2]  = 0.5 * pspin_barion;
906                                                   910 
907     for (G4int i=0; i<5; i++)                     911     for (G4int i=0; i<5; i++)
908     {  for (G4int j=0; j<5; j++)                  912     {  for (G4int j=0; j<5; j++)
909     {  for (G4int k=0; k<5; k++)                  913     {  for (G4int k=0; k<5; k++)
910      {  for (G4int l=0; l<4; l++)                 914      {  for (G4int l=0; l<4; l++)
911         {                                         915         { 
912                      G4ParticleDefinition * Te    916                      G4ParticleDefinition * TestHadron=
913                        G4ParticleTable::GetPar    917                        G4ParticleTable::GetParticleTable()->FindParticle(Baryon[i][j][k][l]);
914                      /*                           918                      /*
915                      G4cout<<i<<" "<<j<<" "<<k    919                      G4cout<<i<<" "<<j<<" "<<k<<" "<<l<<" "<<Baryon[i][j][k][l]<<" "<<TestHadron<<" "<<BaryonWeight[i][j][k][l];
916                      if (TestHadron != nullptr << 920                      if (TestHadron != NULL) G4cout<<" "<<TestHadron->GetParticleName();
917                      if ((TestHadron == nullpt << 921                      if ((TestHadron == NULL)&&(Baryon[i][j][k][l] != 0)) G4cout<<" *****";
918                      if ((TestHadron == nullpt << 922                      if ((TestHadron == NULL)&&(Baryon[i][j][k][l] == 0)) G4cout<<" ---------------";
919                      G4cout<<G4endl;              923                      G4cout<<G4endl;
920                      */                           924                      */
921                      if ((TestHadron == nullpt << 925                      if ((TestHadron == NULL)&&(Baryon[i][j][k][l] != 0)) Baryon[i][j][k][l] = 0;
922                     }                             926                     }
923      }                                            927      }
924     }                                             928     }
925     }                                             929     }
926                                                   930 
927     // --------- Probabilities of q-qbar pair     931     // --------- Probabilities of q-qbar pair productions for kink or gluons.
928     G4double ProbUUbar = 0.33;                    932     G4double ProbUUbar = 0.33;
929     Prob_QQbar[0]=ProbUUbar;         // Probab    933     Prob_QQbar[0]=ProbUUbar;         // Probability of ddbar production
930     Prob_QQbar[1]=ProbUUbar;         // Probab    934     Prob_QQbar[1]=ProbUUbar;         // Probability of uubar production
931     Prob_QQbar[2]=1.0-2.*ProbUUbar;  // Probab    935     Prob_QQbar[2]=1.0-2.*ProbUUbar;  // Probability of ssbar production 
932     Prob_QQbar[3]=0.0;               // Probab    936     Prob_QQbar[3]=0.0;               // Probability of ccbar production
933     Prob_QQbar[4]=0.0;               // Probab    937     Prob_QQbar[4]=0.0;               // Probability of bbbar production
934                                                   938 
935     for ( G4int i=0 ; i<350 ; i++ ) { // Must     939     for ( G4int i=0 ; i<350 ; i++ ) { // Must be checked
936       FS_LeftHadron[i] = 0;                       940       FS_LeftHadron[i] = 0;
937       FS_RightHadron[i] = 0;                      941       FS_RightHadron[i] = 0;
938       FS_Weight[i] = 0.0;                         942       FS_Weight[i] = 0.0; 
939     }                                             943     }
940                                                   944 
941     NumberOf_FS = 0;                              945     NumberOf_FS = 0;
942 }                                                 946 }
943                                                   947 
944 // -------------------------------------------    948 // --------------------------------------------------------------
945                                                   949 
946 void G4VLongitudinalStringDecay::SetMinimalStr    950 void G4VLongitudinalStringDecay::SetMinimalStringMass(const G4FragmentingString * const string)  
947 {                                                 951 {
948         //MaxMass = -350.0*GeV;                   952         //MaxMass = -350.0*GeV;
949   G4double EstimatedMass=MaxMass;              << 953   G4double EstimatedMass=0.;
950                                                   954 
951         G4ParticleDefinition* LeftParton  = st << 
952         G4ParticleDefinition* RightParton = st << 
953         if( LeftParton->GetParticleSubType() = << 
954           if( LeftParton->GetPDGEncoding() * R << 
955             // Not allowed combination of the  << 
956             throw G4HadronicException(__FILE__ << 
957               "G4VLongitudinalStringDecay::Set << 
958           }                                    << 
959         }                                      << 
960         if( LeftParton->GetParticleSubType() ! << 
961           if( LeftParton->GetPDGEncoding() * R << 
962             // Not allowed combination of the  << 
963             throw G4HadronicException(__FILE__ << 
964               "G4VLongitudinalStringDecay::Set << 
965           }                                    << 
966         }                                      << 
967                                                << 
968         G4int Qleft =std::abs(string->GetLeftP    955         G4int Qleft =std::abs(string->GetLeftParton()->GetPDGEncoding());
969         G4int Qright=std::abs(string->GetRight    956         G4int Qright=std::abs(string->GetRightParton()->GetPDGEncoding());
970                                                   957 
971         if ((Qleft < 6) && (Qright < 6)) {   /    958         if ((Qleft < 6) && (Qright < 6)) {   // Q-Qbar string
972           EstimatedMass=minMassQQbarStr[Qleft-    959           EstimatedMass=minMassQQbarStr[Qleft-1][Qright-1];
973           MinimalStringMass=EstimatedMass;        960           MinimalStringMass=EstimatedMass;
974           SetMinimalStringMass2(EstimatedMass)    961           SetMinimalStringMass2(EstimatedMass);
975           return;                                 962           return;
976         }                                         963         }
977                                                   964 
978         if ((Qleft < 6) && (Qright > 1000)) {     965         if ((Qleft < 6) && (Qright > 1000)) {   // Q - DiQ string
979           G4int q1=Qright/1000;                   966           G4int q1=Qright/1000;
980           G4int q2=(Qright/100)%10;               967           G4int q2=(Qright/100)%10;
981           EstimatedMass=minMassQDiQStr[Qleft-1    968           EstimatedMass=minMassQDiQStr[Qleft-1][q1-1][q2-1];
982           MinimalStringMass=EstimatedMass;        969           MinimalStringMass=EstimatedMass;                    // It can be negative!
983           SetMinimalStringMass2(EstimatedMass)    970           SetMinimalStringMass2(EstimatedMass);
984           return;                                 971           return;
985         }                                         972         }
986                                                   973 
987         if ((Qleft > 1000) && (Qright < 6)) {     974         if ((Qleft > 1000) && (Qright < 6)) {   // DiQ - Q string   6 6 6
988           G4int q1=Qleft/1000;                    975           G4int q1=Qleft/1000;
989           G4int q2=(Qleft/100)%10;                976           G4int q2=(Qleft/100)%10;
990           EstimatedMass=minMassQDiQStr[Qright-    977           EstimatedMass=minMassQDiQStr[Qright-1][q1-1][q2-1];
991           MinimalStringMass=EstimatedMass;        978           MinimalStringMass=EstimatedMass;                    // It can be negative!
992           SetMinimalStringMass2(EstimatedMass)    979           SetMinimalStringMass2(EstimatedMass);
993           return;                                 980           return;
994         }                                         981         }
995                                                   982 
996         // DiQuark - Anti DiQuark string -----    983         // DiQuark - Anti DiQuark string -----------------
997                                                   984 
998   G4double StringM=string->Get4Momentum().mag(    985   G4double StringM=string->Get4Momentum().mag();
999                                                   986 
1000         #ifdef debug_LUNDfragmentation           987         #ifdef debug_LUNDfragmentation
1001         // G4cout<<"MinStringMass// Input Str    988         // G4cout<<"MinStringMass// Input String mass "<<string->Get4Momentum().mag()<<" Qleft "<<Qleft<<G4endl;
1002         #endif                                   989         #endif
1003                                                  990 
1004         G4int q1= Qleft/1000    ;                991         G4int q1= Qleft/1000    ;
1005         G4int q2=(Qleft/100)%10 ;                992         G4int q2=(Qleft/100)%10 ;
1006                                                  993 
1007         G4int q3= Qright/1000   ;                994         G4int q3= Qright/1000   ;
1008         G4int q4=(Qright/100)%10;                995         G4int q4=(Qright/100)%10;
1009                                                  996 
1010         // -------------- 2 baryon production    997         // -------------- 2 baryon production or 2 mesons production --------
1011                                                  998 
1012         G4double EstimatedMass1 = minMassQDiQ    999         G4double EstimatedMass1 = minMassQDiQStr[q1-1][q2-1][0];
1013         G4double EstimatedMass2 = minMassQDiQ    1000         G4double EstimatedMass2 = minMassQDiQStr[q3-1][q4-1][0];
1014         // Mass is negative if there is no co    1001         // Mass is negative if there is no corresponding particle.
1015                                                  1002 
1016         if ( (EstimatedMass1 > 0.) && (Estima    1003         if ( (EstimatedMass1 > 0.) && (EstimatedMass2 > 0.)) {
1017            EstimatedMass = EstimatedMass1 + E    1004            EstimatedMass = EstimatedMass1 + EstimatedMass2;
1018            if ( StringM > EstimatedMass ) {      1005            if ( StringM > EstimatedMass ) {                     // 2 baryon production is possible.
1019               MinimalStringMass=EstimatedMass    1006               MinimalStringMass=EstimatedMass1 + EstimatedMass2;
1020               SetMinimalStringMass2(Estimated    1007               SetMinimalStringMass2(EstimatedMass);
1021               return;                            1008               return;
1022           }                                      1009           }
1023         }                                        1010         }
1024                                                  1011 
1025         if ( (EstimatedMass1 < 0.) && (Estima    1012         if ( (EstimatedMass1 < 0.) && (EstimatedMass2 > 0.)) {
1026            EstimatedMass = MaxMass;              1013            EstimatedMass = MaxMass;
1027            MinimalStringMass=EstimatedMass;      1014            MinimalStringMass=EstimatedMass;
1028            SetMinimalStringMass2(EstimatedMas    1015            SetMinimalStringMass2(EstimatedMass);
1029            return;                               1016            return;
1030         }                                        1017         }
1031                                                  1018 
1032         if ( (EstimatedMass1 > 0.) && (Estima    1019         if ( (EstimatedMass1 > 0.) && (EstimatedMass2 < 0.)) {
1033            EstimatedMass = EstimatedMass1;       1020            EstimatedMass = EstimatedMass1;
1034            MinimalStringMass=EstimatedMass;      1021            MinimalStringMass=EstimatedMass;
1035            SetMinimalStringMass2(EstimatedMas    1022            SetMinimalStringMass2(EstimatedMass);
1036            return;                               1023            return;
1037         }                                        1024         }
1038                                                  1025 
1039         //      if ( EstimatedMass >= StringM    1026         //      if ( EstimatedMass >= StringM ) {
1040         // ------------- Re-orangement ------    1027         // ------------- Re-orangement ---------------
1041         EstimatedMass=std::min(minMassQQbarSt    1028         EstimatedMass=std::min(minMassQQbarStr[q1-1][q3-1] + minMassQQbarStr[q2-1][q4-1],
1042                                minMassQQbarSt    1029                                minMassQQbarStr[q1-1][q4-1] + minMassQQbarStr[q2-1][q3-1]);
1043                                                  1030 
1044         // In principle, re-arrangement and 2 << 1031         // In principle, re-orangement and 2 baryon production can compite.
1045         // More physics consideration is need    1032         // More physics consideration is needed.
1046                                                  1033 
1047         MinimalStringMass=EstimatedMass;         1034         MinimalStringMass=EstimatedMass;
1048         SetMinimalStringMass2(EstimatedMass);    1035         SetMinimalStringMass2(EstimatedMass);
1049                                                  1036 
1050         return;                                  1037         return;
1051 }                                                1038 }
1052                                                  1039 
1053 //-------------------------------------------    1040 //--------------------------------------------------------------------------------------
1054                                                  1041 
1055 void G4VLongitudinalStringDecay::SetMinimalSt    1042 void G4VLongitudinalStringDecay::SetMinimalStringMass2(const G4double aValue)
1056 {                                                1043 {
1057   MinimalStringMass2=aValue * aValue;            1044   MinimalStringMass2=aValue * aValue;
1058 }                                                1045 }
1059                                                  1046 
1060                                                  1047