63 if ( (aTrack.GetTrackStatus() == fStopButAlive ) ||
64 (aTrack.GetTrackStatus() == fStopAndKill ) ){
81 G4double sint = std::sqrt((1.-cost)*(1.+cost));
91 parent_polarization.
setX(px);
92 parent_polarization.
setY(py);
93 parent_polarization.
setZ(pz);
105 G4ParticleChangeForDecay* pParticleChangeForDecay;
106 pParticleChangeForDecay = (G4ParticleChangeForDecay*)
G4Decay::DecayIt(aTrack,aStep);
108 pParticleChangeForDecay->ProposePolarization(parent_polarization);
114 return pParticleChangeForDecay;
132 G4double sint = std::sqrt((1.-cost)*(1.+cost));
142 parent_polarization.
setX(px);
143 parent_polarization.
setY(py);
144 parent_polarization.
setZ(pz);
149 GetLogicalVolume()->GetFieldManager();
156 if (fFieldPropagator) fieldMgr =
166 point[0] = (aStep.GetPostStepPoint()->GetPosition())[0];
167 point[1] = (aStep.GetPostStepPoint()->GetPosition())[1];
168 point[2] = (aStep.GetPostStepPoint()->GetPosition())[2];
169 point[3] = aTrack.GetGlobalTime();
172 field -> GetFieldValue(point,fieldValue);
177 if (B.
mag2() > 0.) parent_polarization =
191 G4ParticleChangeForDecay* pParticleChangeForDecay;
192 pParticleChangeForDecay = (G4ParticleChangeForDecay*)
G4Decay::DecayIt(aTrack,aStep);
194 pParticleChangeForDecay->ProposePolarization(parent_polarization);
196 return pParticleChangeForDecay;
205 G4double q = aStep.GetTrack()->GetDefinition()->GetPDGCharge();
209 G4double omega = -(q*s_omega)*(1.+a) * Bnorm;
211 G4double rotationangle = deltatime * omega;
215 G4Vector3D Spin = aStep.GetTrack() -> GetPolarization();
221 G4double normspin = std::sqrt(Spin*Spin);
222 G4double normnewspin = std::sqrt(newSpin*newSpin);
231 G4cout <<
"Checked norms : " << normspin <<
" " << normnewspin <<
G4endl;
virtual G4VParticleChange * AtRestDoIt(const G4Track &aTrack, const G4Step &aStep)
CLHEP::Hep3Vector G4ThreeVector
virtual G4VParticleChange * DecayIt(const G4Track &aTrack, const G4Step &aStep)
G4double fRemainderLifeTime
G4GLOB_DLL std::ostream G4cout
G4ThreeVector Spin_Precession(const G4Step &aStep, G4ThreeVector B, G4double deltatime)
static const double twopi
G4DecayTable * GetDecayTable() const
void SetProcessSubType(G4int)
virtual G4VParticleChange * PostStepDoIt(const G4Track &aTrack, const G4Step &aStep)
G4int GetVerboseLevel() const
static G4TransportationManager * GetTransportationManager()
virtual ~G4DecayWithSpin()
G4VDecayChannel * GetDecayChannel(G4int index) const
G4FieldManager * GetCurrentFieldManager()
const G4ThreeVector & GetPolarization() const
G4ParticleDefinition * GetDefinition() const
G4PropagatorInField * GetPropagatorInField() const
static const double kilogauss
G4DecayWithSpin(const G4String &processName="DecayWithSpin")
void SetPolarization(const G4ThreeVector &)
G4ParticleChangeForDecay fParticleChangeForDecay
const G4Field * GetDetectorField() const