42 #include <CLHEP/Random/Stat.h>
60 #define State(theXInfo) (GetState<G4ITBrownianState>()->theXInfo)
70 #define GREEN_ON_BLUE "\033[1;32;44m"
71 #define RESET "\033[0m"
75 return CLHEP::HepStat::inverseErf(x);
80 return CLHEP::HepStat::inverseErf(1.-x);
111 if (
this == &rhs)
return *
this;
142 const double timeStep,
158 if(
GetIT(track)->GetTrackingInfo()->IsLeadingStep())
161 bool makeException =
true;
169 exceptionDescription <<
"ComputeStep is called while the track has the minimum interaction time";
170 exceptionDescription <<
" so it should not recompute a timeStep ";
171 G4Exception(
"G4DNABrownianTransportation::ComputeStep",
"G4DNABrownianTransportation001",
176 State(fGeometryLimitedStep) =
false;
187 while(spaceStep >
State(endpointDistance))
196 spaceStep = sqrt(x*x + y*y + z*z);
211 State(fEndGlobalTimeComputed) = true ;
218 <<
"G4ITBrownianTransportation::ComputeStep() : "
220 <<
" : Molecule name: " << molecule-> GetName()
222 <<
"Diffusion length : " <<
G4BestUnit(spaceStep,
"Length")
223 <<
" within time step : " <<
G4BestUnit(timeStep,
"Time")
239 <<
"G4ITBrownianTransportation::PostStepDoIt() :"
261 << setw(18)<<
"G4DNABrownianTransportation::Diffusion :"
275 if(waterDensity == 0.0)
296 G4double xMomentum = cos(phi)* sin(theta);
297 G4double yMomentum = sin(theta)*sin(phi);
301 State(fMomentumChanged) =
true;
329 if(
State(fGeometryLimitedStep))
345 State(fPathLengthWasCorrected) =
false;
350 State(fPathLengthWasCorrected) =
true;
351 State(endpointDistance) = geometryStepLength;
354 return geometryStepLength ;
ThreeVector shoot(const G4int Ap, const G4int Af)
const std::vector< double > * GetDensityTableFor(const G4Material *) const
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
G4double GetLocalTime() const
G4ParticleChangeForTransport fParticleChange
G4DNABrownianTransportation & operator=(const G4DNABrownianTransportation &other)
std::ostringstream G4ExceptionDescription
G4double GetStepLength() const
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
virtual G4VParticleChange * AlongStepDoIt(const G4Track &track, const G4Step &)
const G4ThreeVector & GetPosition() const
virtual G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &)
G4double GetDiffusionCoefficient() const
Returns the diffusion coefficient D.
virtual void StartTracking(G4Track *aTrack)
virtual G4VParticleChange * AlongStepDoIt(const G4Track &track, const G4Step &stepData)
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
virtual const G4String & GetName() const =0
virtual G4double AlongStepGetPhysicalInteractionLength(const G4Track &track, G4double, G4double currentMinimumStep, G4double ¤tSafety, G4GPILSelection *selection)
static double InvErfc(double x)
static G4NistManager * Instance()
const G4String & GetParticleName() const
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
G4StepPoint * GetPreStepPoint() const
const G4String & GetName() const
Returns the name of the molecule.
G4bool fUseMaximumTimeBeforeReachingBoundary
virtual void StartTracking(G4Track *aTrack)
const G4ThreeVector & GetMomentumDirection() const
G4IT * GetIT(const G4Track *track)
G4GLOB_DLL std::ostream G4cout
G4bool fPathLengthWasCorrected
G4int GetCurrentStepNumber() const
void SetInstantiateProcessState(G4bool flag)
void SetProcessSubType(G4int)
G4double GetDeltaTime() const
G4double GetGlobalTime() const
G4Molecule * GetMolecule(const G4Track &track)
const G4String & GetProcessName() const
G4Material * GetMaterial() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
static G4DNAMolecularMaterial * Instance()
const G4VProcess * GetProcessDefinedStep() const
G4StepPoint * GetPostStepPoint() const
virtual void ComputeStep(const G4Track &, const G4Step &, const double, double &)
void ProposeEnergy(G4double finalEnergy)
G4::shared_ptr< G4ProcessState > fpState
void Diffusion(const G4Track &track)
G4DNABrownianTransportation(const G4String &aName="DNABrownianTransportation", G4int verbosityLevel=1)
G4double GetGlobalTime() const
virtual G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &)
Class Description The dynamic molecule holds all the data that change for a molecule It has a pointer...
static double InvErf(double x)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
void ProposeTrackStatus(G4TrackStatus status)
virtual ~G4DNABrownianTransportation()
G4bool ProposesTimeStep() const
G4VITProcess inherits from G4VProcess.
void SetMomentumChanged(G4bool b)
G4double * theInteractionTimeLeft
G4int GetProcessSubType() const
const std::vector< G4double > * fpWaterDensity
virtual G4double AlongStepGetPhysicalInteractionLength(const G4Track &, G4double, G4double, G4double &, G4GPILSelection *)