44 for (
G4int i = 0; i < 20; i++) dndl[i] = 0.0;
51 pt = std::max( 0.001, pt );
57 for (
G4int i = 1; i < 20; i++) {
59 term1 = 1. + parMass*parMass*x*x;
60 term2 = pt*x*et*pt*x*et + pt*pt + secMass*secMass;
61 dndl[i] = dx / std::sqrt( term1*term1*term1*term2 )
70 G4bool& incidentHasChanged,
95 if (vecLen == 0)
return false;
104 G4bool veryForward =
false;
111 G4double centerofmassEnergy = std::sqrt( mOriginal*mOriginal +
112 targetMass*targetMass +
113 2.0*targetMass*etOriginal );
115 targetMass = targetParticle.
GetMass()/GeV;
120 for (i=0; i<vecLen; ++i) {
123 *vec[itemp] = *vec[i];
127 if (currentMass == 0.0 && targetMass == 0.0) {
133 currentParticle = *vec[0];
135 targetParticle = *vec[1];
137 for( i=0; i<(vecLen-2); ++i )*vec[i] = *vec[i+2];
140 temp = vec[vecLen-2];
143 currentMass = currentParticle.
GetMass()/GeV;
144 targetMass = targetParticle.
GetMass()/GeV;
145 incidentHasChanged =
true;
146 targetHasChanged =
true;
158 currentParticle = targetParticle;
159 targetParticle = temp;
160 incidentHasChanged =
true;
161 targetHasChanged =
true;
162 currentMass = currentParticle.
GetMass()/GeV;
163 targetMass = targetParticle.
GetMass()/GeV;
165 const G4double afc = std::min( 0.75,
166 0.312+0.200*std::log(std::log(centerofmassEnergy*centerofmassEnergy))+
167 std::pow(centerofmassEnergy*centerofmassEnergy,1.5)/6000.0 );
169 G4double freeEnergy = centerofmassEnergy-currentMass-targetMass;
170 G4double forwardEnergy = freeEnergy/2.;
171 G4int forwardCount = 1;
173 G4double backwardEnergy = freeEnergy/2.;
174 G4int backwardCount = 1;
177 if(currentParticle.
GetSide()==-1)
179 forwardEnergy += currentMass;
181 backwardEnergy -= currentMass;
184 if(targetParticle.
GetSide()!=-1)
186 backwardEnergy += targetMass;
188 forwardEnergy -= targetMass;
193 for (i=0; i<vecLen; ++i) {
194 if( vec[i]->GetSide() == -1 )
197 backwardEnergy -= vec[i]->GetMass()/GeV;
200 forwardEnergy -= vec[i]->GetMass()/GeV;
208 if (backwardEnergy < 0.0) {
209 for (i = 0; i < vecLen; ++i) {
210 if (vec[i]->GetSide() == -1) {
211 backwardEnergy += vec[i]->GetMass()/GeV;
214 forwardEnergy -= vec[i]->GetMass()/GeV;
216 if (backwardEnergy > 0.0)
break;
221 if (forwardEnergy < 0.0) {
222 for (i = 0; i < vecLen; ++i) {
223 if (vec[i]->GetSide() == 1) {
224 forwardEnergy += vec[i]->GetMass()/GeV;
227 backwardEnergy -= vec[i]->GetMass()/GeV;
229 if (forwardEnergy > 0.0)
break;
237 if (forwardEnergy > 0.0 && backwardEnergy < 0.0) {
238 forwardEnergy += backwardEnergy;
243 if (forwardEnergy + backwardEnergy < 0.0)
return false;
260 xtarg = afc * (std::pow(atomicWeight,0.33)-1.0) * (2.0*backwardCount+vecLen+2)/2.0;
262 xtarg = afc * (std::pow(atomicWeight,0.33)-1.0) * (2.0*backwardCount);
263 if( xtarg <= 0.0 )xtarg = 0.01;
267 if(atomicWeight<1.0001) nuclearExcitationCount = 0;
268 G4int extraNucleonCount = 0;
271 if (nuclearExcitationCount > 0) {
272 const G4double nucsup[] = { 1.00, 0.7, 0.5, 0.4, 0.35, 0.3 };
273 const G4double psup[] = { 3., 6., 20., 50., 100., 1000. };
274 G4int momentumBin = 0;
275 while( (momentumBin < 6) &&
278 momentumBin = std::min( 5, momentumBin );
284 for (i = 0; i < nuclearExcitationCount; ++i) {
297 extraNucleonMass += pVec->
GetMass()/GeV;
308 else if( ran < 0.6819 )
313 if (backwardEnergy > pVec->
GetMass()/GeV) {
314 backwardEnergy -= pVec->
GetMass()/GeV;
331 for (i = 0; i < 8; ++i) pseudoParticle[i].SetZero();
333 pseudoParticle[0].
SetMass( mOriginal*GeV );
334 pseudoParticle[0].
SetMomentum( 0.0, 0.0, pOriginal*GeV );
336 std::sqrt( pOriginal*pOriginal + mOriginal*mOriginal )*GeV );
338 pseudoParticle[1].
SetMass(protonMass);
341 pseudoParticle[3].
SetMass(protonMass*(1+extraNucleonCount) );
342 pseudoParticle[3].
SetTotalEnergy(protonMass*(1+extraNucleonCount) );
344 pseudoParticle[2] = pseudoParticle[0] + pseudoParticle[1];
345 pseudoParticle[3] = pseudoParticle[3] + pseudoParticle[0];
347 pseudoParticle[0].
Lorentz( pseudoParticle[0], pseudoParticle[2] );
348 pseudoParticle[1].
Lorentz( pseudoParticle[1], pseudoParticle[2] );
353 G4double aspar, pt, et, x, pp, pp1, wgt;
354 G4int innerCounter, outerCounter;
355 G4bool eliminateThisParticle, resetEnergies, constantCrossSection;
365 G4int backwardNucleonCount = 0;
366 G4double totalEnergy, kineticEnergy, vecMass;
369 for (i = vecLen-1; i >= 0; --i) {
371 if (vec[i]->GetNewlyAdded()) {
372 if (vec[i]->GetSide() == -2) {
373 if (backwardNucleonCount < 18) {
374 if (vec[i]->GetDefinition()->GetParticleSubType() ==
"pi") {
375 for (
G4int j = 0; j < vecLen; j++)
delete vec[j];
378 "G4RPGFragmentation::ReactionStage : a pion has been counted as a backward nucleon");
381 ++backwardNucleonCount;
392 vecMass = vec[i]->GetMass()/GeV;
395 if (vec[i]->GetSide() == -2) {
397 pt = std::sqrt( std::pow( ran, 1.2 ) );
400 if (vec[i]->GetDefinition()->GetParticleSubType() ==
"pi") {
402 pt = std::sqrt( std::pow( ran, 1.7 ) );
403 }
else if (vec[i]->GetDefinition()->GetParticleSubType() ==
"kaon") {
405 pt = std::sqrt( std::pow( ran, 1.7 ) );
408 pt = std::sqrt( std::pow( ran, 1.5 ) );
412 pt = std::max( 0.001, pt );
414 vec[i]->SetMomentum( pt*std::cos(phi)*GeV, pt*std::sin(phi)*GeV );
415 if (vec[i]->GetSide() > 0)
424 eliminateThisParticle =
true;
425 resetEnergies =
true;
428 while (++outerCounter < 3) {
432 vec[i]->SetMomentum( pt*std::cos(phi)*GeV, pt*std::sin(phi)*GeV );
436 while (++innerCounter < 7) {
440 while( ( ran > dndl[l] ) && ( l < 19 ) ) l++;
442 if (vec[i]->GetSide() < 0) x *= -1.;
443 vec[i]->SetMomentum( x*et*GeV );
444 totalEnergy = std::sqrt( x*et*x*et + pt*pt + vecMass*vecMass );
445 vec[i]->SetTotalEnergy( totalEnergy*GeV );
446 kineticEnergy = vec[i]->GetKineticEnergy()/GeV;
448 if (vec[i]->GetSide() > 0) {
449 if( (forwardKinetic+kineticEnergy) < 0.95*forwardEnergy ) {
452 pseudoParticle[4] = pseudoParticle[4] + (*vec[i]);
453 forwardKinetic += kineticEnergy;
455 eliminateThisParticle =
false;
456 resetEnergies =
false;
459 if( innerCounter > 5 )
break;
460 if( backwardEnergy >= vecMass )
463 forwardEnergy += vecMass;
464 backwardEnergy -= vecMass;
472 if (extraNucleonCount < 20) xxx = 0.95+0.05*extraNucleonCount/20.0;
474 if ((backwardKinetic+kineticEnergy) < xxx*backwardEnergy) {
475 pseudoParticle[5] = pseudoParticle[5] + (*vec[i]);
476 backwardKinetic += kineticEnergy;
478 eliminateThisParticle =
false;
479 resetEnergies =
false;
482 if (innerCounter > 5)
break;
483 if (forwardEnergy >= vecMass) {
485 forwardEnergy -= vecMass;
486 backwardEnergy += vecMass;
491 vec[i]->SetMomentum( momentum.
x() * 0.9, momentum.
y() * 0.9 );
502 ReduceEnergiesOfSecondaries(i+1, forwardKinetic, backwardKinetic,
504 pseudoParticle[4], pseudoParticle[5],
509 if (eliminateThisParticle && vec[i]->GetMayBeKilled()) {
512 if (vec[i]->GetSide() > 0) {
514 forwardEnergy += vecMass;
517 if (vec[i]->GetSide() == -2) {
519 extraNucleonMass -= vecMass;
521 backwardEnergy += vecMass;
525 for(
G4int j=i; j<(vecLen-1); ++j )*vec[j] = *vec[j+1];
531 G4cout <<
" FALSE RETURN DUE TO ENERGY BALANCE " <<
G4endl;
539 G4double forwardKEDiff = forwardEnergy - forwardKinetic;
540 G4double backwardKEDiff = backwardEnergy - backwardKinetic;
542 if (forwardKEDiff < 0.0 || backwardKEDiff < 0.0) {
543 ReduceEnergiesOfSecondaries(0, forwardKinetic, backwardKinetic,
545 pseudoParticle[4], pseudoParticle[5],
548 forwardKEDiff = forwardEnergy - forwardKinetic;
549 backwardKEDiff = backwardEnergy - backwardKinetic;
550 if (backwardKEDiff < 0.0) {
551 if (forwardKEDiff + backwardKEDiff > 0.0) {
552 backwardEnergy = backwardKinetic;
553 forwardEnergy += backwardKEDiff;
554 forwardKEDiff = forwardEnergy - forwardKinetic;
555 backwardKEDiff = 0.0;
557 G4cout <<
" False return due to insufficient backward energy " <<
G4endl;
562 if (forwardKEDiff < 0.0) {
563 if (forwardKEDiff + backwardKEDiff > 0.0) {
564 forwardEnergy = forwardKinetic;
565 backwardEnergy += forwardKEDiff;
566 backwardKEDiff = backwardEnergy - backwardKinetic;
569 G4cout <<
" False return due to insufficient forward energy " <<
G4endl;
583 pt = std::sqrt( std::pow( ran/6.0, 1.7 ) );
586 pt = std::sqrt( std::pow( ran/5.0, 1.4 ) );
589 pt = std::sqrt( std::pow( ran/4.0, 1.2 ) );
593 currentParticle.
SetMomentum(pt*std::cos(phi)*GeV, pt*std::sin(phi)*GeV);
596 vecMass = currentParticle.
GetMass()/GeV;
602 while( ( ran > dndl[l] ) && ( l < 19 ) ) l++;
606 if (forwardEnergy < forwardKinetic) {
607 totalEnergy = vecMass + 0.04*std::fabs(
normal());
608 G4cout <<
" Not enough forward energy: forwardEnergy = "
609 << forwardEnergy <<
" forwardKinetic = "
610 << forwardKinetic <<
" total energy left = "
611 << backwardKEDiff + forwardKEDiff <<
G4endl;
613 totalEnergy = vecMass + forwardEnergy - forwardKinetic;
614 forwardKinetic = forwardEnergy;
617 pp = std::sqrt(std::abs( totalEnergy*totalEnergy - vecMass*vecMass) )*GeV;
620 if (pp1 < 1.0e-6*GeV) {
626 pseudoParticle[4] = pseudoParticle[4] + currentParticle;
632 if (backwardNucleonCount < 18) {
634 ++backwardNucleonCount;
640 vecMass = targetParticle.
GetMass()/GeV;
643 pt = std::max( 0.001, std::sqrt( std::pow( ran/4.0, 1.2 ) ) );
645 targetParticle.
SetMomentum(pt*std::cos(phi)*GeV, pt*std::sin(phi)*GeV);
649 G4bool marginalEnergy =
true;
652 if( extraNucleonCount < 20 ) xxx = 0.95+0.05*extraNucleonCount/20.0;
655 while (++outerCounter < 4) {
658 for (innerCounter = 0; innerCounter < 6; innerCounter++) {
661 while( ( ran > dndl[l] ) && ( l < 19 ) ) l++;
664 totalEnergy = std::sqrt(x*et*x*et + pt*pt + vecMass*vecMass);
667 if ((backwardKinetic+totalEnergy-vecMass) < xxx*backwardEnergy) {
668 pseudoParticle[5] = pseudoParticle[5] + targetParticle;
669 backwardKinetic += totalEnergy - vecMass;
671 marginalEnergy =
false;
675 targetParticle.
SetMomentum(momentum.
x() * 0.9, momentum.
y() * 0.9);
681 if (marginalEnergy) {
682 G4cout <<
" Extra backward kinetic energy = "
683 << 0.999*backwardEnergy - backwardKinetic <<
G4endl;
684 totalEnergy = vecMass + 0.999*backwardEnergy - backwardKinetic;
686 pp = std::sqrt(std::abs(totalEnergy*totalEnergy - vecMass*vecMass) )*GeV;
687 targetParticle.
SetMomentum(momentum.
x()/0.9, momentum.
y()/0.9);
690 pseudoParticle[5] = pseudoParticle[5] + targetParticle;
691 backwardKinetic = 0.999*backwardEnergy;
696 if (backwardEnergy < backwardKinetic)
697 G4cout <<
" Backward Edif = " << backwardEnergy - backwardKinetic <<
G4endl;
698 if (forwardEnergy != forwardKinetic)
699 G4cout <<
" Forward Edif = " << forwardEnergy - forwardKinetic <<
G4endl;
709 pseudoParticle[6].
Lorentz( pseudoParticle[3], pseudoParticle[2] );
710 pseudoParticle[6] = pseudoParticle[6] - pseudoParticle[4];
711 pseudoParticle[6] = pseudoParticle[6] - pseudoParticle[5];
713 if (backwardNucleonCount == 1) {
718 std::min(backwardEnergy-backwardKinetic, centerofmassEnergy/2.0-protonMass/GeV);
720 if( ekin < 0.04 )ekin = 0.04 * std::fabs(
normal() );
721 vecMass = targetParticle.
GetMass()/GeV;
722 totalEnergy = ekin + vecMass;
724 pp = std::sqrt(std::abs(totalEnergy*totalEnergy - vecMass*vecMass) )*GeV;
726 if (pp1 < 1.0e-6*GeV) {
730 targetParticle.
SetMomentum( pseudoParticle[6].GetMomentum() * (pp/pp1));
732 pseudoParticle[5] = pseudoParticle[5] + targetParticle;
734 }
else if (backwardNucleonCount > 1) {
738 if (backwardNucleonCount < 5) tempCount = backwardNucleonCount;
742 if (targetParticle.
GetSide() == -3)
743 clusterMass = targetParticle.
GetMass()/GeV;
744 for (i = 0; i < vecLen; ++i)
745 if (vec[i]->GetSide() == -3) clusterMass += vec[i]->GetMass()/GeV;
746 clusterMass += backwardEnergy - backwardKinetic;
749 pseudoParticle[6].
SetMass(clusterMass*GeV);
751 pp = std::sqrt(std::abs(totalEnergy*totalEnergy -
752 clusterMass*clusterMass) )*GeV;
754 if (pp1 < 1.0e-6*GeV) {
758 pseudoParticle[6].
SetMomentum(pseudoParticle[6].GetMomentum() * (-pp/pp1));
761 std::vector<G4ReactionProduct*> tempList;
762 if (targetParticle.
GetSide() == -3) tempList.push_back(&targetParticle);
763 for (i = 0; i < vecLen; ++i)
764 if (vec[i]->GetSide() == -3) tempList.push_back(vec[i]);
766 constantCrossSection =
true;
768 if (tempList.size() > 1) {
771 constantCrossSection, tempList);
773 if (targetParticle.
GetSide() == -3) {
774 targetParticle = *tempList[0];
775 targetParticle.
Lorentz(targetParticle, pseudoParticle[6]);
779 for (i = 0; i < vecLen; ++i) {
780 if (vec[i]->GetSide() == -3) {
781 *vec[i] = *tempList[n_entry];
782 vec[i]->Lorentz(*vec[i], pseudoParticle[6]);
789 if (vecLen == 0)
return false;
793 currentParticle.
Lorentz( currentParticle, pseudoParticle[1] );
794 targetParticle.
Lorentz( targetParticle, pseudoParticle[1] );
795 for (i = 0; i < vecLen; ++i) vec[i]->Lorentz(*vec[i], pseudoParticle[1]);
805 G4bool leadingStrangeParticleHasChanged =
true;
809 leadingStrangeParticleHasChanged =
false;
810 if (leadingStrangeParticleHasChanged &&
812 leadingStrangeParticleHasChanged =
false;
813 if( leadingStrangeParticleHasChanged )
815 for( i=0; i<vecLen; i++ )
817 if( vec[i]->GetDefinition() == leadingStrangeParticle.
GetDefinition() )
819 leadingStrangeParticleHasChanged =
false;
824 if( leadingStrangeParticleHasChanged )
835 if( (leadTest&&targetTest) || !(leadTest||targetTest) )
838 targetHasChanged =
true;
843 incidentHasChanged =
false;
851 std::pair<G4int, G4int> finalStateNucleons =
854 G4int protonsInFinalState = finalStateNucleons.first;
855 G4int neutronsInFinalState = finalStateNucleons.second;
857 G4int numberofFinalStateNucleons =
858 protonsInFinalState + neutronsInFinalState;
864 numberofFinalStateNucleons++;
866 numberofFinalStateNucleons = std::max(1, numberofFinalStateNucleons);
868 G4int PinNucleus = std::max(0,
870 G4int NinNucleus = std::max(0,
873 pseudoParticle[3].
SetMomentum( 0.0, 0.0, pOriginal*GeV );
874 pseudoParticle[3].
SetMass( mOriginal*GeV );
876 std::sqrt( pOriginal*pOriginal + mOriginal*mOriginal )*GeV );
881 if(numberofFinalStateNucleons == 1) diff = 0;
883 pseudoParticle[4].
SetMass( protonMass*(numberofFinalStateNucleons-diff) );
884 pseudoParticle[4].
SetTotalEnergy( protonMass*(numberofFinalStateNucleons-diff) );
889 for (i = 0; i < vecLen; ++i) theoreticalKinetic -= vec[i]->GetMass();
893 for (i = 0; i < vecLen; ++i)
894 simulatedKinetic += vec[i]->GetKineticEnergy();
896 pseudoParticle[5] = pseudoParticle[3] + pseudoParticle[4];
897 pseudoParticle[3].
Lorentz( pseudoParticle[3], pseudoParticle[5] );
898 pseudoParticle[4].
Lorentz( pseudoParticle[4], pseudoParticle[5] );
901 pseudoParticle[7] = pseudoParticle[7] + currentParticle;
902 pseudoParticle[7] = pseudoParticle[7] + targetParticle;
903 for (i = 0; i < vecLen; ++i)
904 pseudoParticle[7] = pseudoParticle[7] + *vec[i];
949 if (simulatedKinetic != 0.0) {
950 wgt = theoreticalKinetic/simulatedKinetic;
952 simulatedKinetic = theoreticalKinetic;
956 if (pp1 < 1.0e-6*GeV) {
965 simulatedKinetic += theoreticalKinetic;
969 if (pp1 < 1.0e-6*GeV) {
976 for (i = 0; i < vecLen; ++i ) {
977 theoreticalKinetic = vec[i]->GetKineticEnergy() * wgt;
978 simulatedKinetic += theoreticalKinetic;
979 vec[i]->SetKineticEnergy(theoreticalKinetic);
980 pp = vec[i]->GetTotalMomentum();
981 pp1 = vec[i]->GetMomentum().mag();
982 if( pp1 < 1.0e-6*GeV ) {
984 vec[i]->SetMomentum(iso.
x(), iso.
y(), iso.
z() );
986 vec[i]->SetMomentum(vec[i]->GetMomentum() * (pp/pp1) );
999 if( atomicWeight >= 1.5 )
1039 if (epnb > pnCutOff)
1041 npnb =
G4Poisson((1.5+1.25*numberofFinalStateNucleons)*epnb/(epnb+edta));
1042 if (numberofFinalStateNucleons + npnb > atomicWeight)
1043 npnb =
G4int(atomicWeight+0.00001 - numberofFinalStateNucleons);
1044 npnb = std::min( npnb, 127-vecLen );
1046 if( edta >= dtaCutOff )
1048 ndta =
G4Poisson((1.5+1.25*numberofFinalStateNucleons)*edta/(epnb+edta));
1049 ndta = std::min( ndta, 127-vecLen );
1051 if (npnb == 0 && ndta == 0) npnb = 1;
1054 PinNucleus, NinNucleus, targetNucleus,
1065 if( (atomicWeight >= 1.5) && (atomicWeight <= 230.0) && (ekOriginal <= 0.2) )
1067 1.0-500.0*std::exp(-ekOriginal/0.04)*std::log(
G4UniformRand()) );
1069 currentParticle.
SetTOF( 1.0 );
1075void G4RPGFragmentation::
1076ReduceEnergiesOfSecondaries(
G4int startingIndex,
1097 forwardKinetic = 0.0;
1098 backwardKinetic = 0.0;
1099 forwardPseudoParticle.
SetZero();
1100 backwardPseudoParticle.
SetZero();
1102 for (i = startingIndex; i < vecLen; i++) {
1108 pp = std::sqrt( std::abs( totalEnergy*totalEnergy - mass*mass ) );
1110 if (pp1 < 1.0e-6*GeV) {
1119 pt = std::max(1.0, std::sqrt( px*px + py*py ) )/GeV;
1122 forwardPseudoParticle = forwardPseudoParticle + (*pVec);
1125 backwardPseudoParticle = backwardPseudoParticle + (*pVec);
G4long G4Poisson(G4double mean)
G4DLLIMPORT std::ostream G4cout
void SetElement(G4int anIndex, Type *anElement)
const G4ParticleDefinition * GetDefinition() const
static G4Lambda * Lambda()
static G4Neutron * Neutron()
G4double GetAnnihilationPNBlackTrackEnergy() const
G4double GetPNBlackTrackEnergy() const
G4double GetAnnihilationDTABlackTrackEnergy() const
G4double GetDTABlackTrackEnergy() const
G4double GetPDGMass() const
G4int GetBaryonNumber() const
const G4String & GetParticleSubType() const
static G4PionMinus * PionMinus()
static G4PionPlus * PionPlus()
static G4PionZero * PionZero()
static G4Proton * Proton()
G4bool ReactionStage(const G4HadProjectile *, G4ReactionProduct &, G4bool &, const G4DynamicParticle *, G4ReactionProduct &, G4bool &, const G4Nucleus &, G4ReactionProduct &, G4FastVector< G4ReactionProduct, 256 > &, G4int &, G4bool, G4ReactionProduct &)
void FragmentationIntegral(G4double, G4double, G4double, G4double)
G4double GenerateNBodyEventT(const G4double totalEnergy, const G4bool constantCrossSection, std::vector< G4ReactionProduct * > &list)
std::pair< G4int, G4int > GetFinalStateNucleons(const G4DynamicParticle *originalTarget, const G4FastVector< G4ReactionProduct, 256 > &vec, const G4int &vecLen)
void AddBlackTrackParticles(const G4double, const G4int, const G4double, const G4int, const G4ReactionProduct &, G4int, G4int, const G4Nucleus &, G4FastVector< G4ReactionProduct, 256 > &, G4int &)
G4ThreeVector Isotropic(const G4double &)
void SetMomentum(const G4double x, const G4double y, const G4double z)
void SetTotalEnergy(const G4double en)
G4double GetTotalMomentum() const
G4double GetKineticEnergy() const
G4double GetTotalEnergy() const
void SetNewlyAdded(const G4bool f)
G4ThreeVector GetMomentum() const
void SetSide(const G4int sid)
void SetDefinitionAndUpdateE(G4ParticleDefinition *aParticleDefinition)
void Lorentz(const G4ReactionProduct &p1, const G4ReactionProduct &p2)
void SetKineticEnergy(const G4double en)
G4ParticleDefinition * GetDefinition() const
void SetTOF(const G4double t)
void SetDefinition(G4ParticleDefinition *aParticleDefinition)
void SetMass(const G4double mas)