30 #include "G4StepPoint.hh" 31 #include "G4VParticleChange.hh" 65 G4cout<<
"\n ExExChProcessChanneling::Constructor:";
66 G4cout<<
"Geometry surface tolerance is: ";
201 G4cout <<
"ChannelingProcess::UpdatePositionMomentumDensity::";
208 aTrack.GetStep()->GetPreStepPoint());
220 bHasToComputeTrajectory =
false;
238 if(
GetXPL(aTrack)->IsBent()){
264 kBeta = aTrack.GetVelocity()/
c_light;
275 fPosHalf += (fMom * kPos * 0.5);
282 fMomHalf.
x() + kBR * 0.5 /
287 fPos += (fMomHalf * kPos);
353 if(
GetXPL(aTrack)->IsBent() ==
false){
355 (
G4Box*) vStepVol->GetPhysicalVolume()
356 ->GetLogicalVolume()->GetSolid();
363 (
G4Tubs*) vStepVol->GetPhysicalVolume()
364 ->GetLogicalVolume()->GetSolid();
375 G4StepPoint* vStepPre = aTrack.GetStep()->GetPreStepPoint();
376 G4StepPoint* vStepPost = aTrack.GetStep()->GetPostStepPoint();
385 && vStep == vStepPost &&
386 vStepPost->GetStepStatus() == fGeomBoundary) {
394 vStepPre->GetStepStatus() == fGeomBoundary) {
407 G4StepPoint* vStepPre = aTrack.GetStep()->GetPreStepPoint();
408 G4StepPoint* vStepPost = aTrack.GetStep()->GetPostStepPoint();
417 vStep == vStepPost &&
418 vStepPost->GetStepStatus() == fGeomBoundary) {
426 vStepPre->GetStepStatus() == fGeomBoundary) {
439 if(vMom.
x() != 0.0 || vMom.
y() != 0.0){
440 double xy2 = vMom.
x() * vMom.
x() + vMom.
y()*vMom.
y();
445 aTrack.GetStep()->GetPreStepPoint()->GetTotalEnergy() /
450 aTrack.GetStep()->GetPreStepPoint()->GetTotalEnergy() /
580 return vTransverseEnergy;
592 aTrack.GetStep()->GetPostStepPoint()->GetTotalEnergy();
599 (vMom.
z() * vMom.
z()) / vTotalEnergy);
601 return vKineticEnergy;
620 return vPotentialEnergy;
633 aTrack.GetStep()->GetPreStepPoint()->GetTotalEnergy();
642 if(
GetXPL(aTrack)->IsBent()){
645 GetXPL(aTrack)->GetCurvatureRadius().
x(),
650 return vEnergyVariation;
667 ProjectMomentumVectorFromWorldToLattice(vMomentum,vPosition);
682 aTrack.GetStep()->GetPreStepPoint()->GetTotalEnergy();
685 if(
GetXPL(aTrack)->IsBent()){
687 GetXPL(aTrack)->ComputeInterplanarPeriod() /
688 GetXPL(aTrack)->GetCurvatureRadius().
x(),
693 return vEnergyVariation;
721 return vCriticalEnergy;
746 return vCriticalEnergy;
759 aTrack.GetStep()->GetPostStepPoint()->GetTotalEnergy();
760 G4double vCriticalAngle = std::pow( 2.0 *
763 / vTotalEnergy ) , 0.5);
764 return vCriticalAngle;
780 return vOscillationPeriod;
793 aTrack.GetStep()->GetPreStepPoint()->GetTotalEnergy();
797 vCriticalRadius = vTotalEnergy
800 return vCriticalRadius;
814 G4double vCentreX = vInterplanarPeriodHalf;
816 if(
GetXPL(aTrack)->IsBent()){
818 aTrack.GetStep()->GetPreStepPoint()->GetTotalEnergy();
824 vCentreX *= (1. - 0.5 * vTotalEnergy /
825 vPotentialWellDepth /
827 vInterplanarPeriodHalf );
858 aTrack.GetStep()->GetPostStepPoint()->GetPhysicalVolume())){
860 ->GetPostStepPoint()->GetPhysicalVolume());
863 ->GetPhysicalVolume()) &&
864 aTrack.GetStep()->GetPostStepPoint()->GetStepStatus()
867 ->GetPreStepPoint()->GetPhysicalVolume());
879 ->GetPostStepPoint()->GetPhysicalVolume())){
904 GetPhysicalVolume()) &&
905 aTrack.GetStep()->GetPreStepPoint()->GetStepStatus() == fGeomBoundary) {
918 GetPostStepPoint()->GetPhysicalVolume()) &&
919 aTrack.GetStep()->GetPostStepPoint()->GetStepStatus() == fGeomBoundary) {
944 if(aTrack.GetStep()->GetPreStepPoint()->GetStepStatus() != fGeomBoundary){
956 if(aTrack.GetStep()->GetPostStepPoint()->GetStepStatus() != fGeomBoundary){
XLatticeManager3 * fLatticeManager
G4double condition(const G4ErrorSymMatrix &m)
G4ThreeVector ComputeCentrifugalEnergy(const G4Track &, G4ThreeVector)
G4double ComputeCriticalEnergyMinimum(const G4Track &)
XVCrystalCharacteristic * fElectronDensity
G4bool HasLattice(const G4Track &)
G4double ComputeCriticalRadius(const G4Track &)
static XLatticeManager3 * GetXLatticeManager()
void SetMomentumChanneledInitial(G4ThreeVector)
virtual ~ExExChProcessChanneling()
CLHEP::Hep3Vector G4ThreeVector
XVCrystalCharacteristic * GetNucleiDensity()
const G4NavigationHistory * GetHistory() const
G4bool ParticleIsNegative(const G4Track &)
G4ThreeVector ComputeMomentum(const G4Track &, G4StepPoint *)
ExExChProcessChanneling(const G4String &processName="ExExChProcessChanneling")
G4ThreeVector GetCurvatureRadius()
G4ThreeVector ComputeKineticEnergy(const G4Track &)
G4String fFileCharacteristicsName
G4double GetSurfaceTolerance() const
virtual G4double GetMinimum(XPhysicalLattice *)
G4ThreeVector ComputePotentialEnergy(const G4Track &)
G4ThreeVector ComputeCentrifugalEnergyMaximumVariation(const G4Track &)
G4double fIntegrationPeriod
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
XCrystalIntegratedDensityHub * fIntegratedDensity
G4double GetXHalfLength() const
G4bool HasBeenInitialized(XPhysicalLattice *)
void SetXPhysicalLattice(XPhysicalLattice *)
G4double ComputeCriticalEnergyMaximum(const G4Track &)
void SetMomentumChanneled(G4ThreeVector)
const G4String & GetProcessName() const
static const double angstrom
void SetInTheCrystal(G4int aInt)
G4bool ParticleIsNotOnBoundary(const G4Track &)
G4GLOB_DLL std::ostream G4cout
XVCrystalCharacteristic * GetElectronDensity()
G4StepPoint * CheckStepPointLatticeForVolume(G4StepPoint *, const G4Track &)
G4double GetZHalfLength() const
void SetPositionChanneled(G4ThreeVector)
G4bool HasLatticeOnBoundary(const G4Track &)
XVCrystalCharacteristic * GetElectricField()
G4double fTransverseVariationMax
XVCrystalCharacteristic * fNucleiDensity
void SetPotential(XVCrystalCharacteristic *)
Hep3Vector & rotateZ(double)
virtual void PrintOnFile(const G4String &, XPhysicalLattice *, G4double=1)=0
G4bool bHasToComputeTrajectory
void SetElectronDensity(G4double)
G4StepPoint * CheckStepPointLatticeForPosition(G4StepPoint *, const G4Track &)
XVCrystalCharacteristic * fElectricField
G4ThreeVector GetEC(G4ThreeVector, XPhysicalLattice *)
void SetIntegratedDensity(XCrystalIntegratedDensityHub *)
G4bool UpdateInitialParameters(const G4Track &)
G4double GetYHalfLength() const
G4ThreeVector ComputeTransverseEnergy(const G4Track &)
G4ParticleDefinition * GetParticleDefinition(const G4Track &aTrack)
G4ThreeVector ProjectMomentumVectorFromLatticeToWorld(G4ThreeVector &, G4ThreeVector &)
G4bool ParticleIsNotOnBoundaryPost(const G4Track &)
G4ThreeVector ComputePotentialWellCentre(const G4Track &)
void SetElectricField(XVCrystalCharacteristic *)
void UpdateParameters(const G4Track &)
void InitializePhysicalLattice(XPhysicalLattice *)
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 *)
XCrystalIntegratedDensityHub * GetIntegratedDensity()
void SetNucleiDensity(XVCrystalCharacteristic *)
G4bool HasLatticeOnBoundaryPost(const G4Track &)
G4ParticleChange aParticleChange
G4bool UpdateIntegrationStep(const G4Track &, G4ThreeVector &)
const G4AffineTransform & GetTopTransform() const
ExExChParticleUserInfo * GetInfo(const G4Track &)
void SetElectronDensity(XVCrystalCharacteristic *)
XPhysicalLattice * GetXPL(const G4Track &)
G4ThreeVector ComputePositionInTheCrystal(G4StepPoint *, const G4Track &)
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
G4double ComputeCriticalAngle(const G4Track &)
void ComputeCrystalCharacteristic(const G4Track &)
void ReadFromFiles(const G4String &)
G4double GetStartPhiAngle() const
void StoreDensityPreviousStep()
void ResetDensity(const G4Track &)
G4double ComputeInterplanarPeriod()
G4double GetPDGCharge() const
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 *)