00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef G4VLongitudinalStringDecay_h
00036 #define G4VLongitudinalStringDecay_h 1
00037 #include "G4VStringFragmentation.hh"
00038 #include "G4DynamicParticle.hh"
00039 #include "G4KineticTrack.hh"
00040 #include "G4KineticTrackVector.hh"
00041 #include "G4HadronBuilder.hh"
00042
00043 class G4FragmentingString;
00044
00045
00046 class G4VLongitudinalStringDecay
00047 {
00048 public:
00049 G4VLongitudinalStringDecay();
00050 virtual ~G4VLongitudinalStringDecay();
00051
00052 private:
00053
00054 G4VLongitudinalStringDecay(const G4VLongitudinalStringDecay &right);
00055 const G4VLongitudinalStringDecay & operator=(const G4VLongitudinalStringDecay &right);
00056 int operator==(const G4VLongitudinalStringDecay &right) const;
00057 int operator!=(const G4VLongitudinalStringDecay &right) const;
00058
00059 public:
00060 virtual G4KineticTrackVector* FragmentString(const G4ExcitedString& theString)=0;
00061
00062 protected:
00063
00064
00065 virtual void SetMassCut(G4double aValue);
00066
00067
00068 G4KineticTrackVector * LightFragmentationTest(const G4ExcitedString * const theString);
00069
00070
00071 typedef std::pair<G4ParticleDefinition*, G4ParticleDefinition*> pDefPair;
00072
00073
00074 typedef G4ParticleDefinition * (G4HadronBuilder::*Pcreate)
00075 (G4ParticleDefinition*, G4ParticleDefinition*);
00076
00077
00078
00079
00080 G4double FragmentationMass(const G4FragmentingString * const string,
00081 Pcreate build=0,
00082 pDefPair * pdefs=0);
00083
00084 G4ParticleDefinition* FindParticle(G4int Encoding);
00085
00086 virtual void Sample4Momentum(G4LorentzVector* Mom, G4double Mass,
00087 G4LorentzVector* AntiMom, G4double AntiMass,
00088 G4double InitialMass)=0;
00089
00090
00091 virtual G4bool StopFragmenting(const G4FragmentingString * const string)=0;
00092 virtual G4bool IsFragmentable(const G4FragmentingString * const string)=0;
00093
00094
00095 virtual G4bool SplitLast(G4FragmentingString * string,
00096 G4KineticTrackVector * LeftVector,
00097 G4KineticTrackVector * RightVector)=0;
00098
00099
00100
00101
00102
00103 G4ExcitedString *CPExcited(const G4ExcitedString& string);
00104
00105 G4KineticTrack * Splitup(G4FragmentingString *string,
00106 G4FragmentingString *&newString);
00107
00108 G4ParticleDefinition * QuarkSplitup(G4ParticleDefinition* decay,
00109 G4ParticleDefinition *&created);
00110
00111 G4ParticleDefinition * DiQuarkSplitup(G4ParticleDefinition* decay,
00112 G4ParticleDefinition *&created);
00113
00114 pDefPair CreatePartonPair(G4int NeedParticle, G4bool AllowDiquarks=true);
00115
00116 public:
00117
00118 G4int SampleQuarkFlavor(void);
00119 G4ThreeVector SampleQuarkPt(G4double ptMax=-1.);
00120
00121 protected:
00122
00123
00124
00125
00126
00127
00128 virtual G4LorentzVector * SplitEandP(G4ParticleDefinition * pHadron,
00129 G4FragmentingString * string,
00130 G4FragmentingString * newString )=0;
00131
00132 virtual G4double GetLightConeZ(G4double zmin, G4double zmax,
00133 G4int PartonEncoding,
00134 G4ParticleDefinition* pHadron,
00135 G4double Px, G4double Py ) = 0;
00136
00137 void CalculateHadronTimePosition(G4double theInitialStringMass,
00138 G4KineticTrackVector *);
00139
00140
00141 void ConstructParticle();
00142
00143 G4ParticleDefinition* CreateHadron(G4int id1, G4int id2,
00144 G4bool theGivenSpin, G4int theSpin);
00145
00146
00147 public:
00148
00149 G4KineticTrackVector* DecayResonans (G4KineticTrackVector* aHadrons);
00150
00151 void SetSigmaTransverseMomentum(G4double aQT);
00152 void SetStrangenessSuppression(G4double aValue);
00153 void SetDiquarkSuppression(G4double aValue);
00154 void SetDiquarkBreakProbability(G4double aValue);
00155
00156 void SetVectorMesonProbability(G4double aValue);
00157 void SetSpinThreeHalfBarionProbability(G4double aValue);
00158
00159 void SetScalarMesonMixings( std::vector<G4double> aVector);
00160 void SetVectorMesonMixings( std::vector<G4double> aVector);
00161
00162 void SetStringTensionParameter(G4double aValue);
00163
00164
00165 protected:
00166 G4double GetDiquarkSuppress() {return DiquarkSuppress;};
00167 G4double GetDiquarkBreakProb() {return DiquarkBreakProb;};
00168 G4double GetStrangeSuppress() {return StrangeSuppress;};
00169 G4double GetClusterMass() {return ClusterMass;};
00170 G4int GetClusterLoopInterrupt() {return ClusterLoopInterrupt;};
00171
00172 G4double GetStringTensionParameter() {return Kappa;};
00173
00174
00175 protected:
00176 G4double MassCut;
00177 G4double ClusterMass;
00178 G4double SigmaQT;
00179 G4double DiquarkSuppress;
00180 G4double DiquarkBreakProb;
00181 G4double SmoothParam;
00182 G4double StrangeSuppress ;
00183 G4int StringLoopInterrupt;
00184 G4int ClusterLoopInterrupt;
00185 G4HadronBuilder *hadronizer;
00186
00187 G4double pspin_meson;
00188 G4double pspin_barion;
00189 std::vector<G4double> vectorMesonMix;
00190 std::vector<G4double> scalarMesonMix;
00191
00192 G4bool PastInitPhase;
00193
00194 G4double Kappa;
00195
00196
00197
00198
00199
00200 };
00201
00202
00203
00204 #endif