Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4INCLParticle.hh
Go to the documentation of this file.
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// INCL++ intra-nuclear cascade model
27// Pekka Kaitaniemi, CEA and Helsinki Institute of Physics
28// Davide Mancusi, CEA
29// Alain Boudard, CEA
30// Sylvie Leray, CEA
31// Joseph Cugnon, University of Liege
32//
33// INCL++ revision: v5.1.8
34//
35#define INCLXX_IN_GEANT4_MODE 1
36
37#include "globals.hh"
38
39/*
40 * Particle.hh
41 *
42 * \date Jun 5, 2009
43 * \author Pekka Kaitaniemi
44 */
45
46#ifndef PARTICLE_HH_
47#define PARTICLE_HH_
48
49#include "G4INCLThreeVector.hh"
51#include "G4INCLParticleType.hh"
53#include "G4INCLLogger.hh"
54#include <list>
55#include <sstream>
56#include <string>
57#include <algorithm>
58
59namespace G4INCL {
60
61 class Particle;
62
63 typedef std::list<G4INCL::Particle*> ParticleList;
64 typedef std::list<G4INCL::Particle*>::const_iterator ParticleIter;
65
66 class Particle {
67 public:
68 Particle();
71 virtual ~Particle() {}
72
73 /** \brief Copy constructor
74 *
75 * Does not copy the particle ID.
76 */
77 Particle(const Particle &rhs) :
78 theZ(rhs.theZ),
79 theA(rhs.theA),
81 theType(rhs.theType),
88 nDecays(rhs.nDecays),
90 theHelicity(rhs.theHelicity),
91 emissionTime(rhs.emissionTime),
92 outOfWell(rhs.outOfWell),
93 theMass(rhs.theMass)
94 {
97 else
101 else
103 // ID intentionally not copied
104 ID = nextID++;
105 }
106
107 protected:
108 /// \brief Helper method for the assignment operator
109 void swap(Particle &rhs) {
110 std::swap(theZ, rhs.theZ);
111 std::swap(theA, rhs.theA);
113 std::swap(theType, rhs.theType);
114 if(rhs.thePropagationEnergy == &(rhs.theFrozenEnergy))
116 else
118 std::swap(theEnergy, rhs.theEnergy);
119 std::swap(theFrozenEnergy, rhs.theFrozenEnergy);
122 else
124 std::swap(theMomentum, rhs.theMomentum);
125 std::swap(theFrozenMomentum, rhs.theFrozenMomentum);
126 std::swap(thePosition, rhs.thePosition);
127 std::swap(nCollisions, rhs.nCollisions);
128 std::swap(nDecays, rhs.nDecays);
130 // ID intentionally not swapped
131
132 std::swap(theHelicity, rhs.theHelicity);
133 std::swap(emissionTime, rhs.emissionTime);
134 std::swap(outOfWell, rhs.outOfWell);
135
136 std::swap(theMass, rhs.theMass);
137 }
138
139 public:
140
141 /** \brief Assignment operator
142 *
143 * Does not copy the particle ID.
144 */
146 Particle temporaryParticle(rhs);
147 swap(temporaryParticle);
148 return *this;
149 }
150
151 /**
152 * Get the particle type.
153 * @see G4INCL::ParticleType
154 */
156 return theType;
157 };
158
159 /// \brief Get the particle species
161 return ParticleSpecies(theType);
162 };
163
165 theType = t;
166 switch(theType)
167 {
168 case DeltaPlusPlus:
169 theA = 1;
170 theZ = 2;
171 break;
172 case Proton:
173 case DeltaPlus:
174 theA = 1;
175 theZ = 1;
176 break;
177 case Neutron:
178 case DeltaZero:
179 theA = 1;
180 theZ = 0;
181 break;
182 case DeltaMinus:
183 theA = 1;
184 theZ = -1;
185 break;
186 case PiPlus:
187 theA = 0;
188 theZ = 1;
189 break;
190 case PiZero:
191 theA = 0;
192 theZ = 0;
193 break;
194 case PiMinus:
195 theA = 0;
196 theZ = -1;
197 break;
198 case Composite:
199 // ERROR("Trying to set particle type to Composite! Construct a Cluster object instead" << std::endl);
200 theA = 0;
201 theZ = 0;
202 break;
203 case UnknownParticle:
204 theA = 0;
205 theZ = 0;
206 ERROR("Trying to set particle type to Unknown!" << std::endl);
207 break;
208 }
209
210 if( !isResonance() && t!=Composite )
211 setINCLMass();
212 }
213
214 /**
215 * Is this a nucleon?
216 */
219 return true;
220 else
221 return false;
222 };
223
225 return theParticipantType;
226 }
227
230 }
231
234 }
235
238 }
239
242 }
243
244 virtual void makeParticipant() {
246 }
247
248 virtual void makeTargetSpectator() {
250 }
251
252 virtual void makeProjectileSpectator() {
254 }
255
256 /** \brief Is this a pion? */
257 G4bool isPion() const { return (theType == PiPlus || theType == PiZero || theType == PiMinus); }
258
259 /** \brief Is it a resonance? */
260 inline G4bool isResonance() const { return isDelta(); }
261
262 /** \brief Is it a Delta? */
263 inline G4bool isDelta() const {
264 return (theType==DeltaPlusPlus || theType==DeltaPlus ||
266 }
267
268 /** \brief Returns the baryon number. */
269 G4int getA() const { return theA; }
270
271 /** \brief Returns the charge number. */
272 G4int getZ() const { return theZ; }
273
275 const G4double P = theMomentum.mag();
276 return P/theEnergy;
277 }
278
279 /**
280 * Returns a three vector we can give to the boost() -method.
281 *
282 * In order to go to the particle rest frame you need to multiply
283 * the boost vector by -1.0.
284 */
286 return theMomentum / theEnergy;
287 }
288
289 /**
290 * Boost the particle using a boost vector.
291 *
292 * Example (go to the particle rest frame):
293 * particle->boost(particle->boostVector());
294 */
295 void boost(const ThreeVector &aBoostVector) {
296 const G4double beta2 = aBoostVector.mag2();
297 const G4double gamma = 1.0 / std::sqrt(1.0 - beta2);
298 const G4double bp = theMomentum.dot(aBoostVector);
299 const G4double alpha = (gamma*gamma)/(1.0 + gamma);
300
301 theMomentum = theMomentum + aBoostVector * (alpha * bp - gamma * theEnergy);
302 theEnergy = gamma * (theEnergy - bp);
303 }
304
305 /** \brief Lorentz-contract the particle position around some center
306 *
307 * Apply Lorentz contraction to the position component along the
308 * direction of the boost vector.
309 *
310 * \param aBoostVector the boost vector (velocity) [c]
311 * \param refPos the reference position
312 */
313 void lorentzContract(const ThreeVector &aBoostVector, const ThreeVector &refPos) {
314 const G4double beta2 = aBoostVector.mag2();
315 const G4double gamma = 1.0 / std::sqrt(1.0 - beta2);
316 const ThreeVector theRelativePosition = thePosition - refPos;
317 const ThreeVector transversePosition = theRelativePosition - aBoostVector * (theRelativePosition.dot(aBoostVector) / aBoostVector.mag2());
318 const ThreeVector longitudinalPosition = theRelativePosition - transversePosition;
319
320 thePosition = refPos + transversePosition + longitudinalPosition / gamma;
321 }
322
323 /** \brief Get the cached particle mass. */
324 inline G4double getMass() const { return theMass; }
325
326 /** \brief Get the INCL particle mass. */
327 inline G4double getINCLMass() const {
328 switch(theType) {
329 case Proton:
330 case Neutron:
331 case PiPlus:
332 case PiMinus:
333 case PiZero:
335 break;
336
337 case DeltaPlusPlus:
338 case DeltaPlus:
339 case DeltaZero:
340 case DeltaMinus:
341 return theMass;
342 break;
343
344 case Composite:
346 break;
347
348 default:
349 ERROR("Particle::getINCLMass: Unknown particle type." << std::endl);
350 return 0.0;
351 break;
352 }
353 }
354
355 /** \brief Get the tabulated particle mass. */
356 inline virtual G4double getTableMass() const {
357 switch(theType) {
358 case Proton:
359 case Neutron:
360 case PiPlus:
361 case PiMinus:
362 case PiZero:
364 break;
365
366 case DeltaPlusPlus:
367 case DeltaPlus:
368 case DeltaZero:
369 case DeltaMinus:
370 return theMass;
371 break;
372
373 case Composite:
375 break;
376
377 default:
378 ERROR("Particle::getTableMass: Unknown particle type." << std::endl);
379 return 0.0;
380 break;
381 }
382 }
383
384 /** \brief Get the real particle mass. */
385 inline G4double getRealMass() const {
386 switch(theType) {
387 case Proton:
388 case Neutron:
389 case PiPlus:
390 case PiMinus:
391 case PiZero:
393 break;
394
395 case DeltaPlusPlus:
396 case DeltaPlus:
397 case DeltaZero:
398 case DeltaMinus:
399 return theMass;
400 break;
401
402 case Composite:
404 break;
405
406 default:
407 ERROR("Particle::getRealMass: Unknown particle type." << std::endl);
408 return 0.0;
409 break;
410 }
411 }
412
413 /// \brief Set the mass of the Particle to its real mass
415
416 /// \brief Set the mass of the Particle to its table mass
418
419 /// \brief Set the mass of the Particle to its table mass
421
422 /**\brief Computes correction on the emission Q-value
423 *
424 * Computes the correction that must be applied to INCL particles in
425 * order to obtain the correct Q-value for particle emission from a given
426 * nucleus. For absorption, the correction is obviously equal to minus
427 * the value returned by this function.
428 *
429 * \param AParent the mass number of the emitting nucleus
430 * \param ZParent the charge number of the emitting nucleus
431 * \return the correction
432 */
433 G4double getEmissionQValueCorrection(const G4int AParent, const G4int ZParent) const {
434 const G4int ADaughter = AParent - theA;
435 const G4int ZDaughter = ZParent - theZ;
436
437 // Note the minus sign here
438 G4double theQValue;
439 if(isCluster())
440 theQValue = -ParticleTable::getTableQValue(theA, theZ, ADaughter, ZDaughter);
441 else {
442 const G4double massTableParent = ParticleTable::getTableMass(AParent,ZParent);
443 const G4double massTableDaughter = ParticleTable::getTableMass(ADaughter,ZDaughter);
444 const G4double massTableParticle = getTableMass();
445 theQValue = massTableParent - massTableDaughter - massTableParticle;
446 }
447
448 const G4double massINCLParent = ParticleTable::getINCLMass(AParent,ZParent);
449 const G4double massINCLDaughter = ParticleTable::getINCLMass(ADaughter,ZDaughter);
450 const G4double massINCLParticle = getINCLMass();
451
452 // The rhs corresponds to the INCL Q-value
453 return theQValue - (massINCLParent-massINCLDaughter-massINCLParticle);
454 }
455
456 /**\brief Computes correction on the transfer Q-value
457 *
458 * Computes the correction that must be applied to INCL particles in
459 * order to obtain the correct Q-value for particle transfer from a given
460 * nucleus to another.
461 *
462 * Assumes that the receving nucleus is INCL's target nucleus, with the
463 * INCL separation energy.
464 *
465 * \param AFrom the mass number of the donating nucleus
466 * \param ZFrom the charge number of the donating nucleus
467 * \param ATo the mass number of the receiving nucleus
468 * \param ZTo the charge number of the receiving nucleus
469 * \return the correction
470 */
471 G4double getTransferQValueCorrection(const G4int AFrom, const G4int ZFrom, const G4int ATo, const G4int ZTo) const {
472 const G4int AFromDaughter = AFrom - theA;
473 const G4int ZFromDaughter = ZFrom - theZ;
474 const G4int AToDaughter = ATo + theA;
475 const G4int ZToDaughter = ZTo + theZ;
476 const G4double theQValue = ParticleTable::getTableQValue(AToDaughter,ZToDaughter,AFromDaughter,ZFromDaughter,AFrom,ZFrom);
477
478 const G4double massINCLTo = ParticleTable::getINCLMass(ATo,ZTo);
479 const G4double massINCLToDaughter = ParticleTable::getINCLMass(AToDaughter,ZToDaughter);
480 /* Note that here we have to use the table mass in the INCL Q-value. We
481 * cannot use theMass, because at this stage the particle is probably
482 * still off-shell; and we cannot use getINCLMass(), because it leads to
483 * violations of global energy conservation.
484 */
485 const G4double massINCLParticle = getTableMass();
486
487 // The rhs corresponds to the INCL Q-value for particle absorption
488 return theQValue - (massINCLToDaughter-massINCLTo-massINCLParticle);
489 }
490
491 /** \brief Get the the particle invariant mass.
492 *
493 * Uses the relativistic invariant
494 * \f[ m = \sqrt{E^2 - {\vec p}^2}\f]
495 **/
497 const G4double mass = std::pow(theEnergy, 2) - theMomentum.dot(theMomentum);
498 if(mass < 0.0) {
499 ERROR("E*E - p*p is negative." << std::endl);
500 return 0.0;
501 } else {
502 return std::sqrt(mass);
503 }
504 };
505
506 /// \brief Get the particle kinetic energy.
507 inline G4double getKineticEnergy() const { return theEnergy - theMass; }
508
509 /// \brief Get the particle potential energy.
511
512 /// \brief Set the particle potential energy.
514
515 /**
516 * Get the energy of the particle in MeV.
517 */
519 {
520 return theEnergy;
521 };
522
523 /**
524 * Set the mass of the particle in MeV/c^2.
525 */
526 void setMass(G4double mass)
527 {
528 this->theMass = mass;
529 }
530
531 /**
532 * Set the energy of the particle in MeV.
533 */
534 void setEnergy(G4double energy)
535 {
536 this->theEnergy = energy;
537 };
538
539 /**
540 * Get the momentum vector.
541 */
543 {
544 return theMomentum;
545 };
546
547 /** Get the angular momentum w.r.t. the origin */
549 {
551 };
552
553 /**
554 * Set the momentum vector.
555 */
556 virtual void setMomentum(const G4INCL::ThreeVector &momentum)
557 {
558 this->theMomentum = momentum;
559 };
560
561 /**
562 * Set the position vector.
563 */
565 {
566 return thePosition;
567 };
568
570 {
571 this->thePosition = position;
572 };
573
574 G4double getHelicity() { return theHelicity; };
575 void setHelicity(G4double h) { theHelicity = h; };
576
577 void propagate(G4double step) {
578 thePosition += ((*thePropagationMomentum)*(step/(*thePropagationEnergy)));
579 };
580
581 /** \brief Return the number of collisions undergone by the particle. **/
583
584 /** \brief Set the number of collisions undergone by the particle. **/
586
587 /** \brief Increment the number of collisions undergone by the particle. **/
589
590 /** \brief Return the number of decays undergone by the particle. **/
591 G4int getNumberOfDecays() const { return nDecays; }
592
593 /** \brief Set the number of decays undergone by the particle. **/
595
596 /** \brief Increment the number of decays undergone by the particle. **/
598
599 /** \brief Mark the particle as out of its potential well
600 *
601 * This flag is used to control pions created outside their potential well
602 * in delta decay. The pion potential checks it and returns zero if it is
603 * true (necessary in order to correctly enforce energy conservation). The
604 * Nucleus::applyFinalState() method uses it to determine whether new
605 * avatars should be generated for the particle.
606 */
607 void setOutOfWell() { outOfWell = true; }
608
609 /// \brief Check if the particle is out of its potential well
610 G4bool isOutOfWell() const { return outOfWell; }
611
612 void setEmissionTime(G4double t) { emissionTime = t; }
613 G4double getEmissionTime() { return emissionTime; };
614
615 /** \brief Transverse component of the position w.r.t. the momentum. */
618 }
619
620 /** \brief Longitudinal component of the position w.r.t. the momentum. */
623 }
624
625 /** \brief Rescale the momentum to match the total energy. */
627
628 /** \brief Recompute the energy to match the momentum. */
630
631 /** \brief Check if the particle belongs to a given list **/
632 G4bool isInList(ParticleList const &l) const {
633 return (std::find(l.begin(), l.end(), this)!=l.end());
634 }
635
637 return (theType == Composite);
638 }
639
640 /// \brief Set the frozen particle momentum
641 void setFrozenMomentum(const ThreeVector &momentum) { theFrozenMomentum = momentum; }
642
643 /// \brief Set the frozen particle momentum
644 void setFrozenEnergy(const G4double energy) { theFrozenEnergy = energy; }
645
646 /// \brief Get the frozen particle momentum
648
649 /// \brief Get the frozen particle momentum
651
652 /// \brief Get the propagation velocity of the particle
653 ThreeVector getPropagationVelocity() const { return (*thePropagationMomentum)/(*thePropagationEnergy); }
654
655 /** \brief Freeze particle propagation
656 *
657 * Make the particle use theFrozenMomentum and theFrozenEnergy for
658 * propagation. The normal state can be restored by calling the
659 * thawPropagation() method.
660 */
664 }
665
666 /** \brief Unfreeze particle propagation
667 *
668 * Make the particle use theMomentum and theEnergy for propagation. Call
669 * this method to restore the normal propagation if the
670 * freezePropagation() method has been called.
671 */
675 }
676
677 /** \brief Rotate the particle position and momentum
678 *
679 * \param angle the rotation angle
680 * \param axis a unit vector representing the rotation axis
681 */
682 virtual void rotate(const G4double angle, const ThreeVector &axis) {
683 thePosition.rotate(angle, axis);
684 theMomentum.rotate(angle, axis);
685 theFrozenMomentum.rotate(angle, axis);
686 }
687
688 std::string print() const {
689 std::stringstream ss;
690 ss << "Particle (ID = " << ID << ") type = ";
692 ss << std::endl
693 << " energy = " << theEnergy << std::endl
694 << " momentum = "
695 << theMomentum.print()
696 << std::endl
697 << " position = "
698 << thePosition.print()
699 << std::endl;
700 return ss.str();
701 };
702
703 std::string dump() const {
704 std::stringstream ss;
705 ss << "(particle " << ID << " ";
707 ss << std::endl
708 << thePosition.dump()
709 << std::endl
710 << theMomentum.dump()
711 << std::endl
712 << theEnergy << ")" << std::endl;
713 return ss.str();
714 };
715
716 long getID() const { return ID; };
717
718 /**
719 * Return a NULL pointer
720 */
721 ParticleList const *getParticles() const {
722 WARN("Particle::getParticles() method was called on a Particle object" << std::endl);
723 return 0;
724 }
725
726 protected:
740 long ID;
741
742 private:
743 G4double theHelicity;
744 G4double emissionTime;
745 G4bool outOfWell;
746
747 G4double theMass;
748 static long nextID;
749
750 };
751}
752
753#endif /* PARTICLE_HH_ */
#define WARN(x)
#define ERROR(x)
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
static G4double getINCLMass(const G4int A, const G4int Z)
Get INCL nuclear mass (in MeV/c^2)
static NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.
static ParticleMassFn getTableParticleMass
Static pointer to the mass function for particles.
static G4double getRealMass(const G4INCL::ParticleType t)
Get particle mass (in MeV/c^2)
static std::string getName(const ParticleType t)
Get the native INCL name of the particle.
static G4double getTableQValue(const G4int A1, const G4int Z1, const G4int A2, const G4int Z2)
Get Q-value (in MeV/c^2)
G4bool isCluster() const
ThreeVector boostVector() const
G4double getINCLMass() const
Get the INCL particle mass.
virtual G4INCL::ParticleSpecies getSpecies() const
Get the particle species.
void setPotentialEnergy(G4double v)
Set the particle potential energy.
ParticleList const * getParticles() const
G4INCL::ThreeVector * thePropagationMomentum
G4bool isOutOfWell() const
Check if the particle is out of its potential well.
G4double getEmissionQValueCorrection(const G4int AParent, const G4int ZParent) const
Computes correction on the emission Q-value.
G4INCL::ThreeVector theMomentum
virtual G4INCL::ThreeVector getAngularMomentum() const
void setFrozenMomentum(const ThreeVector &momentum)
Set the frozen particle momentum.
G4double getFrozenEnergy() const
Get the frozen particle momentum.
G4double getEnergy() const
G4double getPotentialEnergy() const
Get the particle potential energy.
void incrementNumberOfDecays()
Increment the number of decays undergone by the particle.
G4double getHelicity()
void setMass(G4double mass)
void lorentzContract(const ThreeVector &aBoostVector, const ThreeVector &refPos)
Lorentz-contract the particle position around some center.
virtual void makeTargetSpectator()
ParticipantType getParticipantType() const
void setHelicity(G4double h)
void setFrozenEnergy(const G4double energy)
Set the frozen particle momentum.
ThreeVector getPropagationVelocity() const
Get the propagation velocity of the particle.
G4double thePotentialEnergy
void setParticipantType(ParticipantType const p)
virtual void rotate(const G4double angle, const ThreeVector &axis)
Rotate the particle position and momentum.
ParticipantType theParticipantType
std::string dump() const
void propagate(G4double step)
G4int getZ() const
Returns the charge number.
const G4INCL::ThreeVector & getPosition() const
G4double getBeta() const
G4bool isParticipant() const
G4double getKineticEnergy() const
Get the particle kinetic energy.
G4INCL::ParticleType theType
Particle(const Particle &rhs)
Copy constructor.
G4bool isTargetSpectator() const
void setEmissionTime(G4double t)
ThreeVector getLongitudinalPosition() const
Longitudinal component of the position w.r.t. the momentum.
G4int getNumberOfCollisions() const
Return the number of collisions undergone by the particle.
virtual void makeProjectileSpectator()
G4double adjustEnergyFromMomentum()
Recompute the energy to match the momentum.
void setNumberOfDecays(G4int n)
Set the number of decays undergone by the particle.
G4int getNumberOfDecays() const
Return the number of decays undergone by the particle.
const ThreeVector & adjustMomentumFromEnergy()
Rescale the momentum to match the total energy.
G4bool isPion() const
Is this a pion?
void setINCLMass()
Set the mass of the Particle to its table mass.
G4double theFrozenEnergy
void incrementNumberOfCollisions()
Increment the number of collisions undergone by the particle.
G4double getTransferQValueCorrection(const G4int AFrom, const G4int ZFrom, const G4int ATo, const G4int ZTo) const
Computes correction on the transfer Q-value.
ThreeVector getFrozenMomentum() const
Get the frozen particle momentum.
G4bool isInList(ParticleList const &l) const
Check if the particle belongs to a given list.
G4double getRealMass() const
Get the real particle mass.
G4bool isProjectileSpectator() const
const G4INCL::ThreeVector & getMomentum() const
Particle & operator=(const Particle &rhs)
Assignment operator.
virtual void setMomentum(const G4INCL::ThreeVector &momentum)
G4INCL::ParticleType getType() const
void thawPropagation()
Unfreeze particle propagation.
virtual G4double getTableMass() const
Get the tabulated particle mass.
G4double getInvariantMass() const
Get the the particle invariant mass.
G4double getEmissionTime()
virtual void makeParticipant()
G4bool isResonance() const
Is it a resonance?
void setEnergy(G4double energy)
void setType(ParticleType t)
std::string print() const
ThreeVector getTransversePosition() const
Transverse component of the position w.r.t. the momentum.
G4double getMass() const
Get the cached particle mass.
void boost(const ThreeVector &aBoostVector)
virtual void setPosition(const G4INCL::ThreeVector &position)
void setTableMass()
Set the mass of the Particle to its table mass.
void setOutOfWell()
Mark the particle as out of its potential well.
void swap(Particle &rhs)
Helper method for the assignment operator.
long getID() const
G4double * thePropagationEnergy
G4bool isDelta() const
Is it a Delta?
void freezePropagation()
Freeze particle propagation.
void setRealMass()
Set the mass of the Particle to its real mass.
G4int getA() const
Returns the baryon number.
G4INCL::ThreeVector thePosition
G4INCL::ThreeVector theFrozenMomentum
void setNumberOfCollisions(G4int n)
Set the number of collisions undergone by the particle.
G4bool isNucleon() const
std::string dump() const
G4double mag() const
std::string print() const
void rotate(const G4double angle, const ThreeVector &axis)
Rotate the vector by a given angle around a given axis.
G4double dot(const ThreeVector &v) const
G4double mag2() const
ThreeVector vector(const ThreeVector &v) const
std::list< G4INCL::Particle * > ParticleList
std::list< G4INCL::Particle * >::const_iterator ParticleIter
#define position
Definition: xmlparse.cc:605