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 template<class ParticipantType>
00029 G4QGSModel<ParticipantType>::G4QGSModel()
00030 {
00031 G4VPartonStringModel::SetThisPointer(this);
00032 SetEnergyMomentumCheckLevels(2*CLHEP::perCent, 150*CLHEP::MeV);
00033 }
00034 template<class ParticipantType>
00035 G4QGSModel<ParticipantType>::G4QGSModel(const G4QGSModel &right)
00036 {
00037 G4VPartonStringModel::SetThisPointer(this);
00038 std::pair<G4double, G4double> levels=right.GetEnergyMomentumCheckLevels();
00039 SetEnergyMomentumCheckLevels(levels.first, levels.second);
00040 }
00041
00042 template<class ParticipantType>
00043 G4QGSModel<ParticipantType>& G4QGSModel<ParticipantType>::operator=(const G4QGSModel &right)
00044 {
00045 if (this != &right )
00046 {
00047 G4VPartonStringModel::SetThisPointer(this);
00048 std::pair<G4double, G4double> levels=right.GetEnergyMomentumCheckLevels();
00049 SetEnergyMomentumCheckLevels(levels.first, levels.second);
00050 }
00051 }
00052 template<class ParticipantType>
00053 G4QGSModel<ParticipantType>::~G4QGSModel()
00054 {
00055 }
00056
00057 template<class ParticipantType>
00058 void G4QGSModel<ParticipantType>::Init(const G4Nucleus & aNucleus, const G4DynamicParticle & aProjectile)
00059 {
00060
00061 theParticipants.Init(aNucleus.GetA_asInt(),aNucleus.GetZ_asInt());
00062 theCurrentVelocity.setX(0);
00063 theCurrentVelocity.setY(0);
00064
00065
00066
00067
00068 G4double nCons = 1;
00069 if(std::abs(aProjectile.GetDefinition()->GetBaryonNumber()) !=0)
00070 {
00071 nCons = std::abs(aProjectile.GetDefinition()->GetBaryonNumber());
00072 }
00073 G4double pz_per_projectile = aProjectile.Get4Momentum().pz()/nCons;
00074
00075
00076
00077 G4double e_per_projectile = aProjectile.Get4Momentum()*aProjectile.Get4Momentum();
00078 e_per_projectile += aProjectile.Get4Momentum().vect()*aProjectile.Get4Momentum().vect();
00079 e_per_projectile /=nCons*nCons;
00080 e_per_projectile = std::sqrt(e_per_projectile);
00081 e_per_projectile += G4Proton::Proton()->GetPDGMass();
00082 G4double vz = pz_per_projectile/e_per_projectile;
00083
00084 theCurrentVelocity.setZ(vz);
00085 theParticipants.DoLorentzBoost(-theCurrentVelocity);
00086 G4LorentzVector Mom = aProjectile.Get4Momentum();
00087 Mom.boost(-theCurrentVelocity);
00088 G4ReactionProduct theProjectile;
00089 theProjectile.SetDefinition(aProjectile.GetDefinition());
00090 theProjectile.SetTotalEnergy(Mom.e());
00091 theProjectile.SetMomentum(Mom.vect());
00092
00093 theParticipants.BuildInteractions(theProjectile);
00094 theParticipants.GetWoundedNucleus()->DoLorentzBoost(theCurrentVelocity);
00095 }
00096
00097 template<class ParticipantType>
00098 G4ExcitedStringVector * G4QGSModel<ParticipantType>::GetStrings()
00099 {
00100
00101
00102
00103 G4PartonPair* aPair;
00104 G4ExcitedStringVector* theStrings = new G4ExcitedStringVector;
00105 G4ExcitedString * aString;
00106 while( (aPair = theParticipants.GetNextPartonPair()) )
00107 {
00108 if (aPair->GetCollisionType() == G4PartonPair::DIFFRACTIVE)
00109 {
00110 aString = theDiffractiveStringBuilder.BuildString(aPair);
00111
00112 }
00113 else
00114 {
00115 aString = theSoftStringBuilder.BuildString(aPair);
00116
00117 }
00118
00119 aString->Boost(theCurrentVelocity);
00120 theStrings->push_back(aString);
00121 delete aPair;
00122 }
00123
00124
00125
00126
00127
00128 return theStrings;
00129 }
00130
00131 template<class ParticipantType>
00132 G4V3DNucleus* G4QGSModel<ParticipantType>::GetWoundedNucleus() const
00133 {
00134 return theParticipants.GetWoundedNucleus();
00135 }
00136
00137 template<class ParticipantType>
00138 void G4QGSModel<ParticipantType>::ModelDescription(std::ostream& outFile) const
00139 {
00140 outFile << "The Quark-Gluon String (QGS) model simulates the interaction\n"
00141 << "of protons, neutrons, pions and kaons with nuclei in the\n"
00142 << "approximate energy range 20 GeV to 50 TeV. The model handles\n"
00143 << "the selection of collision partners, splitting of the nucleons\n"
00144 << "into quarks and di-quarks, the formation and excitation of\n"
00145 << "quark-gluon strings, string hadronization and diffractive dissociation.\n";
00146 }
00147
00148