Open dengzy opened 12 years ago
貌似Reemission出来的光子,发射时间为0
Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 1.24e+04 -9.15e+03 -6.63e+03 3.11e-06 0 0 0 pTarget initStep DsG4Scintillation::PostStepDoIt Optical photon. Process name is Scintillation track status: 2 step status: 4 flag of Reemission is 1!! TotalEnergyDeposit: 0 TotalEnergyDeposit 0 material LS MaterialPropertyVectors: Fast_Intensity 0x16aba700 Slow_Intensity 0x16abbe60 Reemission_Prob 0x16abf1e0 Fast_Intensity 0x16aba700 Slow_Intensity 0x16abbe60 nscnt 2 the process name is Scintillation!! flagReemission 1 weight 1 set scint photon weight to 1 after multiplying original weight by fPhotonWeight 1 NumTracks = 1 NumTracks: 1 MaterialPropertyVector table 0 for FASTTIMECONSTANT MaterialPropertyVector table 0 for SLOWTIMECONSTANT generate 0 optical photons with scintTime 0 slowTimeConstant 0 fastTimeConstant 0 generate 1 optical photons with scintTime 0 slowTimeConstant 0 fastTimeConstant 0 aSecondaryTrack->SetWeight( 1 ) ; aSecondaryTrack->GetWeight() = 1
Exiting from G4Scintillation::DoIt -- NumberOfSecondaries = 1 1 1.23e+04 -9.17e+03 -6.67e+03 3.11e-06 0 91.4 91.4 pTarget OpAbsorption
由于目前只对LS定义了GammaFASTTIMECONSTANT, GammaSLOWTIMECONSTANT, GammaYIELDRATIO, 对于OpticalPhoton,则去取FASTTIMECONSTANT,SLOWTIMECONSTANT,YIELDRATIO,会取不到值。
对于OpticalPhoton,判断其track status和step status,来决定改光子是否要Reemission, flagReemission= doReemission && aTrack.GetTrackStatus() == fStopAndKill && aStep.GetPostStepPoint()->GetStepStatus() != fGeomBoundary;
aTrack.GetTrackStatus()==2 && aStep.GetPostStepPoint()->GetStepStatus() ==4对应于光子被液闪吸收,process name为OpAbsorption。此时根据液闪的吸收重发射几率抽样决定是否重发射:
G4double p_reemission= Reemission_Prob->GetProperty(aTrack.GetKineticEnergy()); if (G4UniformRand() >= p_reemission) return G4VRestDiscreteProcess::PostStepDoIt(aTrack, aStep);
aTrack.GetTrackStatus()==2 && aStep.GetPostStepPoint()->GetStepStatus() ==6对应于光子被PMT接收到,process name为fast_sim_man。
aTrack.GetTrackStatus()==0 && aStep.GetPostStepPoint()->GetStepStatus() ==1对应于光子仍在传输过程中。
enum G4TrackStatus ////////////////// {
fAlive, // Continue the tracking fStopButAlive, // Invoke active rest physics processes and // and kill the current track afterward fStopAndKill, // Kill the current track
fKillTrackAndSecondaries, // Kill the current track and also associated // secondaries. fSuspend, // Suspend the current track fPostponeToNextEvent // Postpones the tracking of thecurrent track // to the next event.
};
////////////////// enum G4StepStatus ////////////////// { fWorldBoundary, // Step reached the world boundary fGeomBoundary, // Step defined by a geometry boundary fAtRestDoItProc, // Step defined by a PreStepDoItVector fAlongStepDoItProc, // Step defined by a AlongStepDoItVector fPostStepDoItProc, // Step defined by a PostStepDoItVector fUserDefinedLimit, // Step defined by the user Step limit in the logical volume fExclusivelyForcedProc, // Step defined by an exclusively forced PostStepDoIt process fUndefined // Step not defined yet };