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
00036
00037
00038
00039
00040
00041
00042
00043
00044 #ifndef G4Quasmon_h
00045 #define G4Quasmon_h 1
00046
00047
00048 #include "G4ios.hh"
00049 #include "globals.hh"
00050 #include "G4ThreeVector.hh"
00051 #include "G4LorentzVector.hh"
00052 #include "G4LorentzRotation.hh"
00053
00054 #include "G4QCHIPSWorld.hh"
00055 #include "G4QChipolino.hh"
00056 #include "G4QHadronVector.hh"
00057 #include "G4QNucleus.hh"
00058
00059 class G4Quasmon
00060 {
00061 public:
00062 G4Quasmon(G4QContent qQCont = G4QContent(0,0,0,0,0,0),
00063 G4LorentzVector q4M = G4LorentzVector(0.,0.,0.,0.),
00064 G4LorentzVector ph4M = G4LorentzVector(0.,0.,0.,0.));
00065 G4Quasmon(const G4Quasmon& right);
00066 G4Quasmon(G4Quasmon* right);
00067
00068 ~G4Quasmon();
00069
00070
00071 const G4Quasmon& operator=(const G4Quasmon& right);
00072 G4bool operator==(const G4Quasmon &right) const;
00073 G4bool operator!=(const G4Quasmon &right) const;
00074
00075
00076 static void SetParameters(G4double temper=180., G4double ssin2g=.3, G4double etaetap=.3);
00077 static void SetTemper(G4double temperature);
00078 static void SetSOverU(G4double ssin2g);
00079 static void SetEtaSup(G4double etaetap);
00080 static void OpenElectromagneticDecays();
00081 static void CloseElectromagneticDecays();
00082
00083
00084 G4double GetTemper() const;
00085 G4double GetSOverU() const;
00086 G4double GetEtaSup() const;
00087 G4LorentzVector Get4Momentum() const;
00088 G4QContent GetQC() const;
00089 G4QPDGCode GetQPDG() const;
00090 G4int GetStatus() const;
00091 G4int GetCharge() const;
00092 G4int GetBaryonNumber() const;
00093 G4int GetStrangeness() const;
00094
00095
00096 void Set4Momentum(G4LorentzVector Q4M) {q4Mom=Q4M;}
00097 void SetQC(G4QContent QQC) {valQ=QQC;}
00098 void Boost(const G4LorentzVector& theBoost);
00099 void Boost(const G4ThreeVector& B){q4Mom.boost(B);}
00100
00101 G4QHadronVector* Fragment(G4QNucleus& nucEnviron, G4int nQ = 1);
00102 G4QHadronVector* DecayQuasmon();
00103 G4QHadronVector* DecayQHadron(G4QHadron* hadron);
00104 void ClearOutput();
00105 void InitQuasmon(const G4QContent& qQCont, const G4LorentzVector& q4M);
00106 void IncreaseBy(const G4Quasmon* pQuasm);
00107 void IncreaseBy(G4QContent& qQCont, const G4LorentzVector& q4M);
00108 void ClearQuasmon();
00109 void KillQuasmon();
00110 G4int CalculateNumberOfQPartons(G4double qMass);
00111
00112 private:
00113 G4QHadronVector HadronizeQuasmon(G4QNucleus& qEnv, G4int nQ=1);
00114 G4double GetRandomMass(G4int PDGCode, G4double maxM);
00115 void ModifyInMatterCandidates();
00116 void CalculateHadronizationProbabilities(G4double excE, G4double kQ,
00117 G4LorentzVector k4M, G4bool piF,
00118 G4bool gaF, G4bool first=false);
00119 void FillHadronVector(G4QHadron* qHadron);
00120 G4int RandomPoisson(G4double meanValue);
00121 G4double GetQPartonMomentum(G4double mMinResidual2, G4double mCandidate2);
00122 G4bool CheckGroundState(G4bool corFlag=false);
00123 void KillEnvironment();
00124
00125
00126 private:
00127
00128 static G4double Temperature;
00129 static G4double SSin2Gluons;
00130 static G4double EtaEtaprime;
00131 static G4bool WeakDecays;
00132 static G4bool ElMaDecays;
00133
00134 G4LorentzVector q4Mom;
00135 G4QContent valQ;
00136 G4QNucleus theEnvironment;
00137
00138 G4int status;
00139 G4QHadronVector theQHadrons;
00140
00141 G4QCHIPSWorld* theWorld;
00142 G4LorentzVector phot4M;
00143 G4int nBarClust;
00144 G4int nOfQ;
00145 G4QCandidateVector theQCandidates;
00146 G4double f2all;
00147 G4double rEP;
00148 G4double rMo;
00149 G4double totMass;
00150 G4int bEn;
00151 G4double mbEn;
00152 G4LorentzVector bEn4M;
00153 G4QContent bEnQC;
00154 };
00155
00156 inline G4bool G4Quasmon::operator==(const G4Quasmon &rhs) const {return this == &rhs;}
00157 inline G4bool G4Quasmon::operator!=(const G4Quasmon &rhs) const {return this != &rhs;}
00158 inline G4double G4Quasmon::GetTemper() const {return Temperature;}
00159 inline G4double G4Quasmon::GetSOverU() const {return SSin2Gluons;}
00160 inline G4double G4Quasmon::GetEtaSup() const {return EtaEtaprime;}
00161 inline G4LorentzVector G4Quasmon::Get4Momentum() const {return q4Mom;}
00162 inline G4QContent G4Quasmon::GetQC() const {return valQ;}
00163 inline G4int G4Quasmon::GetCharge() const{return valQ.GetCharge();}
00164 inline G4int G4Quasmon::GetBaryonNumber() const{return valQ.GetBaryonNumber();}
00165 inline G4int G4Quasmon::GetStrangeness() const{return valQ.GetStrangeness();}
00166 inline G4QPDGCode G4Quasmon::GetQPDG() const {return G4QPDGCode(valQ);}
00167 inline G4int G4Quasmon::GetStatus() const {return status;}
00168 inline void G4Quasmon::ClearOutput()
00169 {std::for_each(theQHadrons.begin(), theQHadrons.end(), DeleteQHadron());
00170 theQHadrons.clear();
00171 }
00172 inline void G4Quasmon::KillEnvironment()
00173 {theEnvironment=G4QNucleus(0,0,0,G4LorentzVector(0.,0.,0.,0.));}
00174 inline G4double G4Quasmon::GetRandomMass(G4int PDG, G4double maxM)
00175 {
00176 G4QParticle* part = theWorld->GetQParticle(PDG);
00177 return G4QHadron(part, maxM).GetMass();
00178 }
00179
00180 inline void G4Quasmon::IncreaseBy(const G4Quasmon* pQuasm)
00181 {
00182 valQ += pQuasm->GetQC();
00183 q4Mom += pQuasm->Get4Momentum();
00184 status= 3;
00185 }
00186 inline void G4Quasmon::IncreaseBy(G4QContent& qQCont, const G4LorentzVector& q4M)
00187 {
00188 valQ += qQCont;
00189 q4Mom += q4M;
00190 status= 3;
00191 }
00192
00193 inline void G4Quasmon::InitQuasmon(const G4QContent& qQCont, const G4LorentzVector& q4M)
00194 {
00195 valQ = qQCont;
00196 q4Mom = q4M;
00197 status= 3;
00198 }
00199
00200 inline void G4Quasmon::ClearQuasmon()
00201 {
00202 static const G4QContent zeroQC(0,0,0,0,0,0);
00203 static const G4LorentzVector nothing(0.,0.,0.,0.);
00204 phot4M= nothing;
00205 valQ = zeroQC;
00206 q4Mom = nothing;
00207 status= 0;
00208 std::for_each(theQCandidates.begin(), theQCandidates.end(), DeleteQCandidate());
00209 theQCandidates.clear();
00210
00211 }
00212
00213 inline void G4Quasmon::KillQuasmon()
00214 {
00215 ClearQuasmon();
00216 ClearOutput();
00217 }
00218
00219 #endif
00220
00221
00222
00223
00224