54 widthOfPtSquare(-2*
sqr(sigmaPt)) , minExtraMass(minextraMass),
88 Psum=Pprojectile+Ptarget;
94 if ( Ptmp.pz() <= 0. )
101 toCms.rotateZ(-1*Ptmp.phi());
102 toCms.rotateY(-1*Ptmp.theta());
111 Pprojectile.transform(toCms);
112 Ptarget.transform(toCms);
120 if (whilecount++ >= 500 && (whilecount%100)==0)
124 if (whilecount > 1000 )
140 G4double Qplus =-1 * pt2 / Xminus/Ptarget.minus();
141 G4double Qminus= pt2 / Xplus /Pprojectile.plus();
143 if ( KeepProjectile )
146 / (Pprojectile.plus() + Qplus )
147 - Pprojectile.minus();
150 Qplus = Ptarget.plus()
152 / (Ptarget.minus() - Qminus );
155 Qmomentum.setPz( (Qplus-Qminus)/2 );
156 Qmomentum.setE( (Qplus+Qminus)/2 );
164 }
while ( (Ptarget-Qmomentum).mag2() <= Mtarget2
165 || (Pprojectile+Qmomentum).mag2() <= Mprojectile2
166 || (Ptarget-Qmomentum).e() < 0.
167 || (Pprojectile+Qmomentum).e() < 0. );
172 Pprojectile += Qmomentum;
174 Ptarget -= Qmomentum;
189 Pprojectile.transform(toLab);
190 Ptarget.transform(toLab);
215 if ( Xmin <= 0. || range <=0. )
217 G4cout <<
" Xmin, range : " << Xmin <<
" , " << range <<
G4endl;
218 throw G4HadronicException(__FILE__, __LINE__,
"G4SingleDiffractiveExcitation::ChooseX : Invalid arguments ");
235 const G4int maxNumberOfLoops = 1000;
236 G4int loopCounter = -1;
239 }
while ( ( pt2 > maxPtSquare) && ++loopCounter < maxNumberOfLoops );
240 if ( loopCounter >= maxNumberOfLoops ) pt2 = 0.0;
246 return G4ThreeVector (pt2*std::cos(phi), pt2*std::sin(phi), 0.);
~G4SingleDiffractiveExcitation()
G4bool ExciteParticipants(G4VSplitableHadron *aPartner, G4VSplitableHadron *bPartner) const
G4double ChooseX(G4double Xmin, G4double Xmax) const
CLHEP::Hep3Vector G4ThreeVector
CLHEP::HepLorentzRotation G4LorentzRotation
const G4double widthOfPtSquare
const G4ParticleDefinition * GetDefinition() const
G4GLOB_DLL std::ostream G4cout
static const double twopi
static const double perCent
const G4LorentzVector & Get4Momentum() const
G4double G4Log(G4double x)
G4double GetPDGMass() const
G4SingleDiffractiveExcitation(G4double sigmaPt=0.6 *CLHEP::GeV, G4double minExtraMass=250 *CLHEP::MeV, G4double x0mass=250 *CLHEP::MeV)
G4ThreeVector GaussianPt(G4double widthSquare, G4double maxPtSquare) const
const G4double x[NPOINTSGL]
void Set4Momentum(const G4LorentzVector &a4Momentum)
const G4double minExtraMass
CLHEP::HepLorentzVector G4LorentzVector