Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 // 28 // ----------------------------------------------------------------------------- 29 // GEANT 4 class implementation file 30 // ----------------------------------------------------------------------------- 31 #ifndef G4VLongitudinalStringDecay_h 32 #define G4VLongitudinalStringDecay_h 1 33 34 #include "G4HadronicInteraction.hh" 35 #include "G4VStringFragmentation.hh" 36 #include "G4DynamicParticle.hh" 37 #include "G4KineticTrack.hh" 38 #include "G4KineticTrackVector.hh" 39 #include "G4HadronBuilder.hh" 40 #include <vector> 41 42 //***************************************************************************** 43 44 class G4FragmentingString; 45 46 class G4VLongitudinalStringDecay : public G4HadronicInteraction 47 { 48 public: 49 50 G4VLongitudinalStringDecay(const G4String& name = "StringDecay"); 51 virtual ~G4VLongitudinalStringDecay(); 52 53 G4HadFinalState *ApplyYourself(const G4HadProjectile&, G4Nucleus&) final; 54 55 private: 56 // not implemented to protect/forbid use 57 G4VLongitudinalStringDecay(const G4VLongitudinalStringDecay &right); 58 const G4VLongitudinalStringDecay & operator=(const G4VLongitudinalStringDecay &right); 59 G4bool operator==(const G4VLongitudinalStringDecay &right) const; 60 G4bool operator!=(const G4VLongitudinalStringDecay &right) const; 61 62 public: 63 virtual G4KineticTrackVector* FragmentString(const G4ExcitedString& theString)=0; 64 65 void AddNewParticles(); 66 void EraseNewParticles(); 67 //struct DeleteString { void operator()(G4ExcitedString* aS){delete aS;} }; 68 69 // To set minimal mass of a string. The string with mass above the minimal mass can fragment. 70 void SetMinMasses(); 71 void SetMinimalStringMass(const G4FragmentingString * const string); 72 void SetMinimalStringMass2(const G4double aValue); 73 74 protected: 75 // For changing Mass Cut used for selection of very small mass strings 76 virtual void SetMassCut(G4double aValue); 77 G4double GetMassCut(); 78 79 // For handling a string with very low mass 80 G4KineticTrackVector * ProduceOneHadron(const G4ExcitedString * const theString); 81 82 // To store created quarks or 2 last hadrons 83 typedef std::pair<G4ParticleDefinition*, G4ParticleDefinition*> pDefPair; 84 85 // For creation of hadrons from given quark pair 86 typedef G4ParticleDefinition * (G4HadronBuilder::*Pcreate) 87 (G4ParticleDefinition*, G4ParticleDefinition*); 88 89 // Used by ProduceOneHadron method for estimation of lowest possible mass of 90 // given quark system -- string. 91 G4double PossibleHadronMass(const G4FragmentingString * const string, 92 Pcreate build=0, pDefPair * pdefs=0); 93 94 G4ParticleDefinition* FindParticle(G4int Encoding); 95 96 // For decision on continue or stop string fragmentation 97 virtual G4bool StopFragmenting(const G4FragmentingString * const string)=0; 98 virtual G4bool IsItFragmentable(const G4FragmentingString * const string)=0; 99 100 // If a string can not fragment, make last break into 2 hadrons 101 virtual G4bool SplitLast(G4FragmentingString * string, 102 G4KineticTrackVector * LeftVector, 103 G4KineticTrackVector * RightVector)=0; 104 105 virtual void Sample4Momentum(G4LorentzVector* Mom, G4double Mass, 106 G4LorentzVector* AntiMom, G4double AntiMass, 107 G4double InitialMass)=0; 108 109 // If a string can fragment, do the following: 110 111 // Make a copy of a string 112 G4ExcitedString *CopyExcited(const G4ExcitedString& string); 113 114 // Produce a hadron at Splitup of the string 115 virtual G4KineticTrack * Splitup(G4FragmentingString *string, 116 G4FragmentingString *&newString)=0; 117 118 // The hadron can be producet at QuarkSplitup or DiQuarkSplitup 119 virtual G4ParticleDefinition * QuarkSplitup(G4ParticleDefinition* decay, 120 G4ParticleDefinition *&created); 121 122 virtual G4ParticleDefinition * DiQuarkSplitup(G4ParticleDefinition* decay, 123 G4ParticleDefinition *&created)=0; 124 125 // All of them are going through quak-antiquark pair creation 126 pDefPair CreatePartonPair(G4int NeedParticle, G4bool AllowDiquarks=true); 127 128 public: 129 // For a pair it is needed: 130 G4int SampleQuarkFlavor(void); 131 G4ThreeVector SampleQuarkPt(G4double ptMax=-1.); // -1. no limit on maxpt. 132 133 protected: 134 // For determination of kinematical properties of the created hadron 135 virtual G4LorentzVector * SplitEandP(G4ParticleDefinition * pHadron, 136 G4FragmentingString * string, 137 G4FragmentingString * newString )=0; 138 139 virtual G4double GetLightConeZ(G4double zmin, G4double zmax, 140 G4int PartonEncoding, 141 G4ParticleDefinition* pHadron, 142 G4double Px, G4double Py ) = 0; 143 144 void CalculateHadronTimePosition(G4double theInitialStringMass, 145 G4KineticTrackVector *); 146 147 // Used for some test purposes 148 void ConstructParticle(); 149 150 G4ParticleDefinition* CreateHadron(G4int id1, G4int id2, 151 G4bool theGivenSpin, G4int theSpin); 152 153 public: 154 void SetSigmaTransverseMomentum(G4double aQT); 155 void SetStrangenessSuppression(G4double aValue); 156 void SetDiquarkSuppression(G4double aValue); 157 void SetDiquarkBreakProbability(G4double aValue); 158 159 void SetSpinThreeHalfBarionProbability(G4double aValue); 160 161 void SetScalarMesonMixings( std::vector<G4double> aVector); 162 void SetVectorMesonMixings( std::vector<G4double> aVector); 163 164 void SetStringTensionParameter(G4double aValue); 165 166 void SetProbCCbar(G4double aValue); 167 void SetProbEta_c(G4double aValue); 168 void SetProbBBbar(G4double aValue); 169 void SetProbEta_b(G4double aValue); 170 171 protected: 172 G4double GetDiquarkSuppress() {return DiquarkSuppress;}; 173 G4double GetDiquarkBreakProb() {return DiquarkBreakProb;}; 174 G4double GetStrangeSuppress() {return StrangeSuppress;}; 175 G4int GetClusterLoopInterrupt() {return ClusterLoopInterrupt;}; 176 177 G4double GetProbCCbar(){return ProbCCbar;}; 178 G4double GetProbEta_c(){return ProbEta_c;}; 179 G4double GetProbBBbar(){return ProbBBbar;}; 180 G4double GetProbEta_b(){return ProbEta_b;}; 181 182 G4double GetStringTensionParameter() {return Kappa;}; 183 184 protected: 185 G4double MassCut; 186 G4double SigmaQT; // sigma_q_t of quark/hadron transverse momentum distribution parameter 187 G4double DiquarkSuppress; // Diquark suppression parameter 188 G4double DiquarkBreakProb; // Diquark breaking probability, qq->h+qq' 189 G4double StrangeSuppress ; 190 G4int StringLoopInterrupt; 191 G4int ClusterLoopInterrupt; 192 193 G4HadronBuilder *hadronizer; 194 195 std::vector<G4double> pspin_meson; 196 G4double pspin_barion; 197 std::vector<G4double> vectorMesonMix; 198 std::vector<G4double> scalarMesonMix; 199 200 G4double ProbCCbar; // Probability of C-Cbar pair creation 201 G4double ProbEta_c; // Mixing of Eta_c and J/Psi 202 203 G4double ProbBBbar; // Probability of B-Bbar pair creation 204 G4double ProbEta_b; // Mixing of Eta_b and Ipsilon_b 205 206 G4double ProbCB; // = ProbCCbar + ProbBBbar 207 208 G4double MaxMass; 209 210 G4bool PastInitPhase; 211 212 G4double Kappa; // String tension parameter 213 214 std::vector<G4ParticleDefinition *> NewParticles; 215 216 public: 217 // ------ For estimation of a minimal string mass --------------- 218 G4double Mass_of_light_quark; 219 G4double Mass_of_s_quark; 220 G4double Mass_of_c_quark; 221 G4double Mass_of_b_quark; 222 G4double Mass_of_string_junction; 223 224 G4double minMassQQbarStr[5][5]; 225 G4double minMassQDiQStr[5][5][5]; 226 227 // ------ An estimated minimal string mass ---------------------- 228 G4double MinimalStringMass; 229 G4double MinimalStringMass2; 230 231 G4int Qcharge[5]; // quark charges 232 G4int Meson[5][5][7]; 233 G4double MesonWeight[5][5][7]; 234 235 G4int Baryon[5][5][5][4]; 236 G4double BaryonWeight[5][5][5][4]; 237 238 G4double Prob_QQbar[5]; 239 240 G4int DecayQuark; 241 G4int NewQuark; 242 /* 243 G4double FFq2q[5][5][2]; 244 G4double FFq2qq[5][15][2]; 245 G4double FFqq2q[15][5][2]; 246 G4double FFqq2qq[15][5][2]; 247 */ 248 249 // ------ To improve the code structure 250 G4ParticleDefinition * FS_LeftHadron[350], * FS_RightHadron[350]; 251 G4double FS_Weight[350]; 252 G4int NumberOf_FS; 253 }; 254 255 //****************************************************************************** 256 // Class G4VLongitudinalStringDecay 257 258 #endif 259 260