68 G4cout<<
"\n ExExChProcessChanneling::Constructor:";
69 G4cout<<
"Geometry surface tolerance is: ";
184 if(
GetInfo(aTrack)->GetMomentumChanneledInitial().x() ==
DBL_MAX){
204 G4cout <<
"ChannelingProcess::UpdatePositionMomentumDensity::";
223 fHasToComputeTrajectory =
false;
241 if(
GetXPL(aTrack)->IsBent()){
278 fPosHalf += (fMom * kPos * 0.5);
285 fMomHalf.x() + kBR * 0.5 /
290 fPos += (fMomHalf * kPos);
356 if(
GetXPL(aTrack)->IsBent() ==
false){
388 && vStep == vStepPost &&
420 vStep == vStepPost &&
442 if(vMom.x() != 0.0 || vMom.y() != 0.0){
443 double xy2 = vMom.x() * vMom.x() + vMom.y()*vMom.y();
583 return vTransverseEnergy;
602 (vMom.z() * vMom.z()) / vTotalEnergy);
604 return vKineticEnergy;
623 return vPotentialEnergy;
638 G4double vPositionX = vPosition.x();
645 if(
GetXPL(aTrack)->IsBent()){
648 GetXPL(aTrack)->GetCurvatureRadius().x(),
653 return vEnergyVariation;
670 ProjectMomentumVectorFromWorldToLattice(vMomentum,vPosition);
688 if(
GetXPL(aTrack)->IsBent()){
690 GetXPL(aTrack)->ComputeInterplanarPeriod() /
691 GetXPL(aTrack)->GetCurvatureRadius().x(),
696 return vEnergyVariation;
724 return vCriticalEnergy;
749 return vCriticalEnergy;
763 G4double vCriticalAngle = std::pow( 2.0 *
766 / vTotalEnergy ) , 0.5);
767 return vCriticalAngle;
783 return vOscillationPeriod;
800 vCriticalRadius = vTotalEnergy
803 return vCriticalRadius;
817 G4double vCentreX = vInterplanarPeriodHalf;
819 if(
GetXPL(aTrack)->IsBent()){
827 vCentreX *= (1. - 0.5 * vTotalEnergy /
828 vPotentialWellDepth /
830 vInterplanarPeriodHalf );
907 GetPhysicalVolume()) &&
921 GetPostStepPoint()->GetPhysicalVolume()) &&
XLatticeManager3 * fLatticeManager
G4double GetTotalEnergy() const
G4double condition(const G4ErrorSymMatrix &m)
G4ThreeVector ComputeCentrifugalEnergy(const G4Track &, G4ThreeVector)
G4double ComputeCriticalEnergyMinimum(const G4Track &)
XVCrystalCharacteristic * fElectronDensity
G4double GetXHalfLength() const
G4bool HasLattice(const G4Track &)
G4double ComputeCriticalRadius(const G4Track &)
static XLatticeManager3 * GetXLatticeManager()
static constexpr double mm
void SetMomentumChanneledInitial(G4ThreeVector)
virtual ~ExExChProcessChanneling()
CLHEP::Hep3Vector G4ThreeVector
G4double GetVelocity() const
XVCrystalCharacteristic * GetNucleiDensity()
Definition of the XLogicalBase class.
Definition of the XLatticeManager3 class.
G4bool ParticleIsNegative(const G4Track &)
G4StepStatus GetStepStatus() const
G4double GetSurfaceTolerance() const
G4ThreeVector ComputeMomentum(const G4Track &, G4StepPoint *)
G4VSolid * GetSolid() const
ExExChProcessChanneling(const G4String &processName="ExExChProcessChanneling")
G4ThreeVector GetCurvatureRadius()
G4ThreeVector ComputeKineticEnergy(const G4Track &)
G4String fFileCharacteristicsName
Definition of the XLogicalAtomicLatticeDiamond class.
const G4VTouchable * GetTouchable() const
const G4Step * GetStep() const
G4double GetZHalfLength() const
virtual G4double GetMinimum(XPhysicalLattice *)
G4ThreeVector ComputePotentialEnergy(const G4Track &)
G4ThreeVector ComputeCentrifugalEnergyMaximumVariation(const G4Track &)
G4double fIntegrationPeriod
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
XCrystalIntegratedDensityHub * fIntegratedDensity
G4VUserTrackInformation * GetUserInformation() const
G4bool HasBeenInitialized(XPhysicalLattice *)
G4StepPoint * GetPreStepPoint() const
G4bool fHasToComputeTrajectory
Definition of the ExExChParticleUserInfo class.
void SetXPhysicalLattice(XPhysicalLattice *)
G4double ComputeCriticalEnergyMaximum(const G4Track &)
void SetMomentumChanneled(G4ThreeVector)
void SetInTheCrystal(G4int aInt)
G4bool ParticleIsNotOnBoundary(const G4Track &)
G4GLOB_DLL std::ostream G4cout
XVCrystalCharacteristic * GetElectronDensity()
static constexpr double m
G4StepPoint * CheckStepPointLatticeForVolume(G4StepPoint *, const G4Track &)
G4VPhysicalVolume * GetPhysicalVolume() const
const G4ThreeVector & GetPosition() const
Definition of the ExExChProcessChanneling class.
void SetPositionChanneled(G4ThreeVector)
G4bool HasLatticeOnBoundary(const G4Track &)
XVCrystalCharacteristic * GetElectricField()
G4double fTransverseVariationMax
XVCrystalCharacteristic * fNucleiDensity
void SetPotential(XVCrystalCharacteristic *)
const G4ParticleDefinition * GetParticleDefinition() const
static constexpr double eV
G4double GetYHalfLength() const
virtual void PrintOnFile(const G4String &, XPhysicalLattice *, G4double=1)=0
const G4double kCarTolerance
G4double GetStartPhiAngle() const
void SetElectronDensity(G4double)
const G4String & GetProcessName() const
G4StepPoint * CheckStepPointLatticeForPosition(G4StepPoint *, const G4Track &)
XVCrystalCharacteristic * fElectricField
G4ThreeVector GetEC(G4ThreeVector, XPhysicalLattice *)
void SetIntegratedDensity(XCrystalIntegratedDensityHub *)
G4bool UpdateInitialParameters(const G4Track &)
G4ThreeVector ComputeTransverseEnergy(const G4Track &)
G4ParticleDefinition * GetParticleDefinition(const G4Track &aTrack)
G4ThreeVector ProjectMomentumVectorFromLatticeToWorld(G4ThreeVector &, G4ThreeVector &)
G4ThreeVector GetMomentum() const
G4bool ParticleIsNotOnBoundaryPost(const G4Track &)
virtual void Initialize(const G4Track &)
G4ThreeVector ComputePotentialWellCentre(const G4Track &)
void SetElectricField(XVCrystalCharacteristic *)
void UpdateParameters(const G4Track &)
void InitializePhysicalLattice(XPhysicalLattice *)
G4LogicalVolume * GetLogicalVolume() const
XPhysicalLattice * GetXPhysicalLattice(G4VPhysicalVolume *)
G4bool HasLatticeOnBoundaryPre(const G4Track &)
virtual G4double GetMaximum(XPhysicalLattice *)
XVCrystalCharacteristic * GetPotential()
G4double ComputeOscillationPeriod(const G4Track &)
G4double GetChannelingMeanFreePath(const G4Track &)
virtual G4double GetMeanFreePath(const G4Track &, G4double, G4ForceCondition *)
G4StepPoint * GetPostStepPoint() const
XCrystalIntegratedDensityHub * GetIntegratedDensity()
void SetNucleiDensity(XVCrystalCharacteristic *)
G4bool HasLatticeOnBoundaryPost(const G4Track &)
G4ParticleChange aParticleChange
G4bool UpdateIntegrationStep(const G4Track &, G4ThreeVector &)
Definition of the XLogicalAtomicLattice class.
ExExChParticleUserInfo * GetInfo(const G4Track &)
void SetElectronDensity(XVCrystalCharacteristic *)
XPhysicalLattice * GetXPL(const G4Track &)
G4ThreeVector ComputePositionInTheCrystal(G4StepPoint *, const G4Track &)
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
static constexpr double angstrom
G4double ComputeCriticalAngle(const G4Track &)
const G4AffineTransform & GetTopTransform() const
static constexpr double pi
const G4NavigationHistory * GetHistory() const
void ComputeCrystalCharacteristic(const G4Track &)
void ReadFromFiles(const G4String &)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
void StoreDensityPreviousStep()
G4double GetPDGCharge() const
Definition of the XUnitCell class.
void ResetDensity(const G4Track &)
G4double ComputeInterplanarPeriod()
void SetPositionChanneledInitial(G4ThreeVector)
G4bool ParticleIsNotOnBoundaryPre(const G4Track &)
virtual G4bool IsApplicable(const G4ParticleDefinition &)
XVCrystalCharacteristic * fPotentialEnergy
static G4GeometryTolerance * GetInstance()
G4ThreeVector GetPositionChanneled()
void SetNucleiDensity(G4double)
virtual void ReadFromECHARM(const G4String &, G4double=1)=0
G4ThreeVector GetMomentumChanneled()
bool HasLattice(G4VPhysicalVolume *)