88 if (cosl < 1.E-30) cosl = 1.E-30;
95 vUperp *= 1./vUperp.
mag();
96 vVperp *= 1./vVperp.
mag();
100 G4cout <<
" CHECK: vUN " << vUN <<
" = " << vUperp <<
" diff " << (vUN-vUperp).mag() <<
G4endl;
101 G4cout <<
" CHECK: vVN " << vVN <<
" = " << vVperp <<
" diff " << (vVN-vVperp).mag() <<
G4endl;
128 if( magHPre != 0. ) {
132 G4double sinz = -HPre*vUperp * magHPreM2;
133 G4double cosz = HPre*vVperp * magHPreM2;
135 transfM[1][3] = -Q*dir.
y()*sinz;
136 transfM[1][4] = -Q*dir.
z()*sinz;
137 transfM[2][3] = -Q*dir.
y()*cosz*invCosTheta;
138 transfM[2][4] = -Q*dir.
z()*cosz*invCosTheta;
143 transfM[1][1] = dir.
x()*dVU;
144 transfM[1][2] = dir.
x()*dVV;
145 transfM[2][1] = dir.
x()*dUU*invCosTheta;
146 transfM[2][2] = dir.
x()*dUV*invCosTheta;
162void G4ErrorFreeTrajState::Init()
180 fTrajParam.
Update( aTrack );
189 std::ios::fmtflags orig_flags = out.flags();
191 out.setf(std::ios::fixed,std::ios::floatfield);
195 out <<
" G4ErrorFreeTrajState: Params: " << ts.fTrajParam <<
G4endl;
197 out.flags(orig_flags);
211 if( std::fabs(stepLengthCm) <= kCarTolerance/cm )
return 0;
225 if( vpPre.
mag() == vpPre.
z() ) vpPre.
setX( 1.E-6*MeV );
226 if( vpPost.
mag() == vpPost.
z() ) vpPost.
setX( 1.E-6*MeV );
233 <<
"G4EP: vposPost " << vposPost <<
G4endl;
235 <<
"G4EP: vpPost " << vpPost <<
G4endl;
237 G4cout <<
"G4EP: stepLengthCm " << stepLengthCm <<
G4endl;
241 if( pPre == 0. || pPost == 0 )
return 2;
244 G4double deltaPInv = pInvPost - pInvPre;
250 if( 1. - std::fabs(vpPostNorm.
z()) < kCarTolerance )
return 4;
262 transf[3][2] = stepLengthCm * sinpPost;
263 transf[4][1] = stepLengthCm;
264 for(
size_t ii=0;ii < 5; ii++ ){
269 G4cout <<
"G4EP: transf matrix neutral " << transf;
284 G4double pos1[3]; pos1[0] = vposPre.
x()*cm; pos1[1] = vposPre.
y()*cm; pos1[2] = vposPre.
z()*cm;
285 G4double pos2[3]; pos2[0] = vposPost.
x()*cm; pos2[1] = vposPost.
y()*cm; pos2[2] = vposPost.
z()*cm;
289 if( !field )
return 0;
292 if( charge != 0. && field ) {
302 <<
"G4EP: HPost " << HPost <<
G4endl;
305 if( magHPre + magHPost != 0. ) {
309 if( magHPost != 0. ){
310 gam = HPost * vpPostNorm / magHPost;
312 gam = HPre * vpPreNorm / magHPre;
317 G4double diffHSqr = ( HPre * pInvPre - HPost * pInvPost ).mag2();
320 if(
iverbose >= 2 )
G4cout <<
" G4EP: gam " << gam <<
" alphaSqr " << alphaSqr <<
" diffHSqr " << diffHSqr <<
G4endl;
322 if( diffHSqr * alphaSqr > delhp6Sqr )
return 3;
326 G4double pInvAver = 1./(pInvPre + pInvPost );
329 G4ThreeVector vHAverNorm( (HPre*pInvPre + HPost*pInvPost ) * pInvAver * charge * CFACT8 );
332 vHAverNorm *= invHAver;
334 if(
iverbose >= 2 )
G4cout <<
" G4EP: HaverNorm " << vHAverNorm <<
" magHAver " << HAver <<
" charge " << charge<<
G4endl;
339 G4double thetaAver = QAver * stepLengthCm;
340 G4double sinThetaAver = std::sin(thetaAver);
341 G4double cosThetaAver = std::cos(thetaAver);
342 G4double gamma = vHAverNorm * vpPostNorm;
354 vpPreNorm.
z()*vUPre.
x(),
355 vpPreNorm.
x()*vUPre.
y() - vpPreNorm.
y()*vUPre.
x() );
358 AU = 1./vpPostNorm.perp();
364 vpPostNorm.z()*vUPost.
x(),
365 vpPostNorm.x()*vUPost.
y() - vpPostNorm.y()*vUPost.
x() );
368 if(
iverbose >= 2 )
G4cout <<
" G4EP: AU " << AU <<
" vUPre " << vUPre <<
" vVPre " << vVPre <<
" vUPost " << vUPost <<
" vVPost " << vVPost <<
G4endl;
370 G4Point3D deltaPos( vposPre - vposPost );
378 if(
iverbose >= 2)
G4cout <<
" G4EP: QP " << QP <<
" QAver " << QAver <<
" pAver " << pAver <<
G4endl;
380 G4double ANV = -( vHAverNorm.
x()*vUPost.
x() + vHAverNorm.
y()*vUPost.
y() );
381 G4double ANU = ( vHAverNorm.
x()*vVPost.
x() + vHAverNorm.
y()*vVPost.
y() + vHAverNorm.
z()*vVPost.
z() );
382 G4double OMcosThetaAver = 1. - cosThetaAver;
384 if(
iverbose >= 2)
G4cout <<
"G4EP: OMcosThetaAver " << OMcosThetaAver <<
" cosThetaAver " << cosThetaAver <<
" thetaAver " << thetaAver <<
" QAver " << QAver <<
" stepLengthCm " << stepLengthCm <<
G4endl;
386 G4double TMSINT = thetaAver - sinThetaAver;
392 vHAverNorm.
z() * vUPre.
x(),
393 vHAverNorm.
x() * vUPre.
y() - vHAverNorm.
y() * vUPre.
x() );
398 vHAverNorm.
z() * vVPre.
x() - vHAverNorm.
x() * vVPre.
z(),
399 vHAverNorm.
x() * vVPre.
y() - vHAverNorm.
y() * vVPre.
x() );
407 transf[0][0] = 1.-deltaPInv*pAver*(1.+(vpPostNorm.x()*deltaPos.
x()+vpPostNorm.y()*deltaPos.
y()+vpPostNorm.z()*deltaPos.
z())/stepLengthCm)
410 transf[0][1] = -deltaPInv/thetaAver*
411 ( TMSINT*gamma*(vHAverNorm.
x()*vVPre.
x()+vHAverNorm.
y()*vVPre.
y()+vHAverNorm.
z()*vVPre.
z()) +
412 sinThetaAver*(vVPre.
x()*vpPostNorm.x()+vVPre.
y()*vpPostNorm.y()+vVPre.
z()*vpPostNorm.z()) +
413 OMcosThetaAver*(vHVPre.
x()*vpPostNorm.x()+vHVPre.
y()*vpPostNorm.y()+vHVPre.
z()*vpPostNorm.z()) );
415 transf[0][2] = -sinpPre*deltaPInv/thetaAver*
416 ( TMSINT*gamma*(vHAverNorm.
x()*vUPre.
x()+vHAverNorm.
y()*vUPre.
y() ) +
417 sinThetaAver*(vUPre.
x()*vpPostNorm.x()+vUPre.
y()*vpPostNorm.y() ) +
418 OMcosThetaAver*(vHUPre.
x()*vpPostNorm.x()+vHUPre.
y()*vpPostNorm.y()+vHUPre.
z()*vpPostNorm.z()) );
420 transf[0][3] = -deltaPInv/stepLengthCm*(vUPre.
x()*vpPostNorm.x()+vUPre.
y()*vpPostNorm.y() );
422 transf[0][4] = -deltaPInv/stepLengthCm*(vVPre.
x()*vpPostNorm.x()+vVPre.
y()*vpPostNorm.y()+vVPre.
z()*vpPostNorm.z());
425 transf[1][0] = -QP*ANV*(vpPostNorm.x()*deltaPos.
x()+vpPostNorm.y()*deltaPos.
y()+vpPostNorm.z()*deltaPos.
z())
426 *(1.+deltaPInv*pAver);
428 if(
iverbose >= 3)
G4cout <<
"ctransf10= " << transf[1][0] <<
" " << -QP<<
" " << ANV<<
" " << vpPostNorm.x()<<
" " << deltaPos.
x()<<
" " << vpPostNorm.y()<<
" " << deltaPos.
y()<<
" " << vpPostNorm.z()<<
" " << deltaPos.
z()
429 <<
" " << deltaPInv<<
" " << pAver <<
G4endl;
432 transf[1][1] = cosThetaAver*(vVPre.
x()*vVPost.
x()+vVPre.
y()*vVPost.
y()+vVPre.
z()*vVPost.
z()) +
433 sinThetaAver*(vHVPre.
x()*vVPost.
x()+vHVPre.
y()*vVPost.
y()+vHVPre.
z()*vVPost.
z()) +
434 OMcosThetaAver*(vHAverNorm.
x()*vVPre.
x()+vHAverNorm.
y()*vVPre.
y()+vHAverNorm.
z()*vVPre.
z())*
435 (vHAverNorm.
x()*vVPost.
x()+vHAverNorm.
y()*vVPost.
y()+vHAverNorm.
z()*vVPost.
z()) +
436 ANV*( -sinThetaAver*(vVPre.
x()*vpPostNorm.x()+vVPre.
y()*vpPostNorm.y()+vVPre.
z()*vpPostNorm.z()) +
437 OMcosThetaAver*(vVPre.
x()*AN2.
x()+vVPre.
y()*AN2.
y()+vVPre.
z()*AN2.
z()) -
438 TMSINT*gamma*(vHAverNorm.
x()*vVPre.
x()+vHAverNorm.
y()*vVPre.
y()+vHAverNorm.
z()*vVPre.
z()) );
440 transf[1][2] = cosThetaAver*(vUPre.
x()*vVPost.
x()+vUPre.
y()*vVPost.
y() ) +
441 sinThetaAver*(vHUPre.
x()*vVPost.
x()+vHUPre.
y()*vVPost.
y()+vHUPre.
z()*vVPost.
z()) +
442 OMcosThetaAver*(vHAverNorm.
x()*vUPre.
x()+vHAverNorm.
y()*vUPre.
y() )*
443 (vHAverNorm.
x()*vVPost.
x()+vHAverNorm.
y()*vVPost.
y()+vHAverNorm.
z()*vVPost.
z()) +
444 ANV*( -sinThetaAver*(vUPre.
x()*vpPostNorm.x()+vUPre.
y()*vpPostNorm.y() ) +
445 OMcosThetaAver*(vUPre.
x()*AN2.
x()+vUPre.
y()*AN2.
y() ) -
446 TMSINT*gamma*(vHAverNorm.
x()*vUPre.
x()+vHAverNorm.
y()*vUPre.
y() ) );
447 transf[1][2] = sinpPre*transf[1][2];
449 transf[1][3] = -QAver*ANV*(vUPre.
x()*vpPostNorm.x()+vUPre.
y()*vpPostNorm.y() );
451 transf[1][4] = -QAver*ANV*(vVPre.
x()*vpPostNorm.x()+vVPre.
y()*vpPostNorm.y()+vVPre.
z()*vpPostNorm.z());
455 transf[2][0] = -QP*ANU*(vpPostNorm.x()*deltaPos.
x()+vpPostNorm.y()*deltaPos.
y()+vpPostNorm.z()*deltaPos.
z())*sinpPostInv
456 *(1.+deltaPInv*pAver);
458 if(
iverbose >= 3)
G4cout <<
"ctransf20= " << transf[2][0] <<
" "<< -QP<<
" "<<ANU<<
" "<<vpPostNorm.x()<<
" "<<deltaPos.
x()<<
" "<<vpPostNorm.y()<<
" "<<deltaPos.
y()<<
" "<<vpPostNorm.z()<<
" "<<deltaPos.
z()<<
" "<<sinpPostInv
459 <<
" "<<deltaPInv<<
" "<<pAver<<
G4endl;
461 transf[2][1] = cosThetaAver*(vVPre.
x()*vUPost.
x()+vVPre.
y()*vUPost.
y() ) +
462 sinThetaAver*(vHVPre.
x()*vUPost.
x()+vHVPre.
y()*vUPost.
y() ) +
463 OMcosThetaAver*(vHAverNorm.
x()*vVPre.
x()+vHAverNorm.
y()*vVPre.
y()+vHAverNorm.
z()*vVPre.
z())*
464 (vHAverNorm.
x()*vUPost.
x()+vHAverNorm.
y()*vUPost.
y() ) +
465 ANU*( -sinThetaAver*(vVPre.
x()*vpPostNorm.x()+vVPre.
y()*vpPostNorm.y()+vVPre.
z()*vpPostNorm.z()) +
466 OMcosThetaAver*(vVPre.
x()*AN2.
x()+vVPre.
y()*AN2.
y()+vVPre.
z()*AN2.
z()) -
467 TMSINT*gamma*(vHAverNorm.
x()*vVPre.
x()+vHAverNorm.
y()*vVPre.
y()+vHAverNorm.
z()*vVPre.
z()) );
468 transf[2][1] = sinpPostInv*transf[2][1];
470 transf[2][2] = cosThetaAver*(vUPre.
x()*vUPost.
x()+vUPre.
y()*vUPost.
y() ) +
471 sinThetaAver*(vHUPre.
x()*vUPost.
x()+vHUPre.
y()*vUPost.
y() ) +
472 OMcosThetaAver*(vHAverNorm.
x()*vUPre.
x()+vHAverNorm.
y()*vUPre.
y() )*
473 (vHAverNorm.
x()*vUPost.
x()+vHAverNorm.
y()*vUPost.
y() ) +
474 ANU*( -sinThetaAver*(vUPre.
x()*vpPostNorm.x()+vUPre.
y()*vpPostNorm.y() ) +
475 OMcosThetaAver*(vUPre.
x()*AN2.
x()+vUPre.
y()*AN2.
y() ) -
476 TMSINT*gamma*(vHAverNorm.
x()*vUPre.
x()+vHAverNorm.
y()*vUPre.
y() ) );
477 transf[2][2] = sinpPostInv*sinpPre*transf[2][2];
479 transf[2][3] = -QAver*ANU*(vUPre.
x()*vpPostNorm.x()+vUPre.
y()*vpPostNorm.y() )*sinpPostInv;
481 if(
iverbose >= 3)
G4cout <<
"ctransf23= " << transf[2][3] <<
" "<< -QAver<<
" "<<ANU<<
" "<<vUPre.
x()<<
" "<<vpPostNorm.x()<<
" "<< vUPre.
y()<<
" "<<vpPostNorm.y()<<
" "<<sinpPostInv<<
G4endl;
484 transf[2][4] = -QAver*ANU*(vVPre.
x()*vpPostNorm.x()+vVPre.
y()*vpPostNorm.y()+vVPre.
z()*vpPostNorm.z())*sinpPostInv;
488 transf[3][0] = pAver*(vUPost.
x()*deltaPos.
x()+vUPost.
y()*deltaPos.
y() )
489 *(1.+deltaPInv*pAver);
491 if(
iverbose >= 3)
G4cout <<
"ctransf30= " << transf[3][0] <<
" "<< pAver<<
" "<<vUPost.
x()<<
" "<<deltaPos.
x()<<
" "<<vUPost.
y()<<
" "<<deltaPos.
y()
492 <<
" "<<deltaPInv<<
" "<<pAver<<
G4endl;
495 transf[3][1] = ( sinThetaAver*(vVPre.
x()*vUPost.
x()+vVPre.
y()*vUPost.
y() ) +
496 OMcosThetaAver*(vHVPre.
x()*vUPost.
x()+vHVPre.
y()*vUPost.
y() ) +
497 TMSINT*(vHAverNorm.
x()*vUPost.
x()+vHAverNorm.
y()*vUPost.
y() )*
498 (vHAverNorm.
x()*vVPre.
x()+vHAverNorm.
y()*vVPre.
y()+vHAverNorm.
z()*vVPre.
z()) )/QAver;
500 transf[3][2] = ( sinThetaAver*(vUPre.
x()*vUPost.
x()+vUPre.
y()*vUPost.
y() ) +
501 OMcosThetaAver*(vHUPre.
x()*vUPost.
x()+vHUPre.
y()*vUPost.
y() ) +
502 TMSINT*(vHAverNorm.
x()*vUPost.
x()+vHAverNorm.
y()*vUPost.
y() )*
503 (vHAverNorm.
x()*vUPre.
x()+vHAverNorm.
y()*vUPre.
y() ) )*sinpPre/QAver;
505 if(
iverbose >= 3)
G4cout <<
"ctransf32= " << transf[3][2] <<
" "<< sinThetaAver<<
" "<<vUPre.
x()<<
" "<<vUPost.
x()<<
" "<<vUPre.
y()<<
" "<<vUPost.
y() <<
" "<<
506 OMcosThetaAver<<
" "<<vHUPre.
x()<<
" "<<vUPost.
x()<<
" "<<vHUPre.
y()<<
" "<<vUPost.
y() <<
" "<<
507 TMSINT<<
" "<<vHAverNorm.
x()<<
" "<<vUPost.
x()<<
" "<<vHAverNorm.
y()<<
" "<<vUPost.
y() <<
" "<<
508 vHAverNorm.
x()<<
" "<<vUPre.
x()<<
" "<<vHAverNorm.
y()<<
" "<<vUPre.
y() <<
" "<<sinpPre<<
" "<<QAver<<
G4endl;
511 transf[3][3] = (vUPre.
x()*vUPost.
x()+vUPre.
y()*vUPost.
y() );
513 transf[3][4] = (vVPre.
x()*vUPost.
x()+vVPre.
y()*vUPost.
y() );
516 transf[4][0] = pAver*(vVPost.
x()*deltaPos.
x()+vVPost.
y()*deltaPos.
y()+vVPost.
z()*deltaPos.
z())
517 *(1.+deltaPInv*pAver);
519 transf[4][1] = ( sinThetaAver*(vVPre.
x()*vVPost.
x()+vVPre.
y()*vVPost.
y()+vVPre.
z()*vVPost.
z()) +
520 OMcosThetaAver*(vHVPre.
x()*vVPost.
x()+vHVPre.
y()*vVPost.
y()+vHVPre.
z()*vVPost.
z()) +
521 TMSINT*(vHAverNorm.
x()*vVPost.
x()+vHAverNorm.
y()*vVPost.
y()+vHAverNorm.
z()*vVPost.
z())*
522 (vHAverNorm.
x()*vVPre.
x()+vHAverNorm.
y()*vVPre.
y()+vHAverNorm.
z()*vVPre.
z()) )/QAver;
524 if(
iverbose >= 3)
G4cout <<
"ctransf41= " << transf[4][1] <<
" "<< sinThetaAver<<
" "<< OMcosThetaAver <<
" "<<TMSINT<<
" "<< vVPre <<
" "<<vVPost <<
" "<<vHVPre<<
" "<<vHAverNorm <<
" "<< QAver<<
G4endl;
527 transf[4][2] = ( sinThetaAver*(vUPre.
x()*vVPost.
x()+vUPre.
y()*vVPost.
y() ) +
528 OMcosThetaAver*(vHUPre.
x()*vVPost.
x()+vHUPre.
y()*vVPost.
y()+vHUPre.
z()*vVPost.
z()) +
529 TMSINT*(vHAverNorm.
x()*vVPost.
x()+vHAverNorm.
y()*vVPost.
y()+vHAverNorm.
z()*vVPost.
z())*
530 (vHAverNorm.
x()*vUPre.
x()+vHAverNorm.
y()*vUPre.
y() ) )*sinpPre/QAver;
532 transf[4][3] = (vUPre.
x()*vVPost.
x()+vUPre.
y()*vVPost.
y() );
534 transf[4][4] = (vVPre.
x()*vVPost.
x()+vVPre.
y()*vVPost.
y()+vVPre.
z()*vVPost.
z());
559 theTransfMat = transf;
563 <<
" transf matrix " << theTransfMat.
T() <<
G4endl;
576 PropagateErrorMSC( aTrack );
578 PropagateErrorIoni( aTrack );
585G4int G4ErrorFreeTrajState::PropagateErrorMSC(
const G4Track* aTrack )
594 CalculateEffectiveZandA( mate, effZ, effA );
599 <<
" " << effZ <<
" " << effA
605 if(
iverbose >= 4 )
G4cout << std::setprecision(6) << std::setw(6) <<
"G4EP:MSC: RI " << RI <<
" stepLengthCm " << stepLengthCm <<
" radlen " << (mate->
GetRadlen()/cm) <<
" " << RI*1.e10 <<
G4endl;
608 G4double DD = 1.8496E-4*RI*(charge/pBeta * charge/pBeta );
612 G4double S1 = DD*stepLengthCm*stepLengthCm/3.;
616 G4double CLA = std::sqrt( vpPre.
x() * vpPre.
x() + vpPre.
y() * vpPre.
y() )/pPre;
618 if(
iverbose >= 2 )
G4cout << std::setw(6) <<
"G4EP:MSC: RI " << RI <<
" S1 " << S1 <<
" S2 " << S2 <<
" S3 " << S3 <<
" CLA " << CLA <<
G4endl;
622 fError[2][2] += S2/CLA/CLA;
642 for(ii=0; ii < nelem; ii++ ) {
651G4int G4ErrorFreeTrajState::PropagateErrorIoni(
const G4Track* aTrack )
656 if( stepLengthCm < 1.E-7 ) {
663 CalculateEffectiveZandA( mate, effZ, effA );
676 G4cout <<
"G4EP:IONI: XI " << XI <<
" beta " << beta <<
" gamma " << gamma <<
G4endl;
677 G4cout <<
" density " << (mate->
GetDensity()/mg*mole) <<
" effA " << effA <<
" step " << stepLengthCm <<
G4endl;
686 G4double F2 = 1. + 2. * massRatio * gamma + massRatio * massRatio;
690 G4double dedxSq = XI*Emax*(1.-(beta*beta/2.))*1.E-12;
692 if(
iverbose >= 2 )
G4cout <<
"G4EP:IONI: DEDX2 " << dedxSq <<
" emass " << eMass <<
" Emax " << Emax <<
G4endl;
696 pPre6 = std::pow(pPre6, 6 );
698 fError[0][0] += Etot*Etot*dedxSq / pPre6;
700 if(
iverbose >= 2 )
G4cout <<
"G4:IONI getot " << Etot <<
" dedx2 " << dedxSq <<
" p " << pPre6 <<
G4endl;
701 if(
iverbose >= 2 )
G4cout <<
"G4EP:IONI: error_from_ionisation " << (Etot*Etot*dedxSq) / pPre6 <<
G4endl;
std::ostream & operator<<(std::ostream &out, const G4ErrorFreeTrajState &ts)
@ G4ErrorMode_PropBackwards
G4ErrorSymMatrix G4ErrorTrajErr
CLHEP::Hep3Vector G4ThreeVector
HepGeom::Vector3D< G4double > G4Vector3D
G4DLLIMPORT std::ostream G4cout
Hep3Vector cross(const Hep3Vector &) const
G4double GetCharge() const
void Update(const G4Track *aTrack)
G4double GetLambda() const
G4Vector3D GetDirection() const
virtual G4int Update(const G4Track *aTrack)
virtual G4int PropagateError(const G4Track *aTrack)
G4ErrorFreeTrajParam GetParameters() const
virtual void Dump(std::ostream &out=G4cout) const
static G4ErrorPropagatorData * GetErrorPropagatorData()
G4Vector3D GetVectorW() const
G4Vector3D GetVectorV() const
G4Vector3D GetVectorW() const
G4ErrorSurfaceTrajParam GetParameters() const
G4Vector3D GetVectorV() const
G4ErrorSymMatrix similarity(const G4ErrorMatrix &m1) const
G4ErrorSymMatrix T() const
void DumpPosMomError(std::ostream &out=G4cout) const
void UpdatePosMom(const G4Point3D &pos, const G4Vector3D &mom)
G4ErrorTrajErr GetError() const
const G4Field * GetDetectorField() const
virtual void GetFieldValue(const double Point[4], double *fieldArr) const =0
G4double GetSurfaceTolerance() const
static G4GeometryTolerance * GetInstance()
G4Material * GetMaterial() const
G4double GetDensity() const
const G4Element * GetElement(G4int iel) const
const G4double * GetFractionVector() const
size_t GetNumberOfElements() const
G4double GetRadlen() const
const G4String & GetName() const
G4double GetNuclearInterLength() const
G4ThreeVector GetMomentum() const
const G4ThreeVector & GetPosition() const
G4StepPoint * GetPreStepPoint() const
G4double GetStepLength() const
G4VPhysicalVolume * GetVolume() const
const G4ThreeVector & GetPosition() const
G4ThreeVector GetMomentum() const
const G4DynamicParticle * GetDynamicParticle() const
G4double GetTotalEnergy() const
const G4Step * GetStep() const
static G4TransportationManager * GetTransportationManager()
G4FieldManager * GetFieldManager() const
G4LogicalVolume * GetLogicalVolume() const
BasicVector3D< T > cross(const BasicVector3D< T > &v) const