00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "G4PSDoseDeposit3D.hh"
00031
00033
00034
00035
00036
00037
00038
00040
00041 G4PSDoseDeposit3D::G4PSDoseDeposit3D(G4String name,
00042 G4int ni, G4int nj, G4int nk,
00043 G4int di, G4int dj, G4int dk)
00044 :G4PSDoseDeposit(name),
00045 fDepthi(di),fDepthj(dj),fDepthk(dk)
00046 {
00047 fNi=ni;
00048 fNj=nj;
00049 fNk=nk;
00050 }
00051
00052 G4PSDoseDeposit3D::G4PSDoseDeposit3D(G4String name,
00053 const G4String& unit,
00054 G4int ni, G4int nj, G4int nk,
00055 G4int di, G4int dj, G4int dk)
00056 :G4PSDoseDeposit(name),
00057 fDepthi(di),fDepthj(dj),fDepthk(dk)
00058 {
00059 fNi=ni;
00060 fNj=nj;
00061 fNk=nk;
00062 SetUnit(unit);
00063 }
00064
00065 G4PSDoseDeposit3D::~G4PSDoseDeposit3D()
00066 {;}
00067
00068 G4int G4PSDoseDeposit3D::GetIndex(G4Step* aStep)
00069 {
00070 const G4VTouchable* touchable = aStep->GetPreStepPoint()->GetTouchable();
00071 G4int i = touchable->GetReplicaNumber(fDepthi);
00072 G4int j = touchable->GetReplicaNumber(fDepthj);
00073 G4int k = touchable->GetReplicaNumber(fDepthk);
00074
00075 if(i<0||j<0||k<0)
00076 {
00077 G4ExceptionDescription ED;
00078 ED << "GetReplicaNumber is negative" << G4endl
00079 << "touchable->GetReplicaNumber(fDepthi) returns i,j,k = "
00080 << i << "," << j << "," << k << " for volume "
00081 << touchable->GetVolume(fDepthi)->GetName() << ","
00082 << touchable->GetVolume(fDepthj)->GetName() << ","
00083 << touchable->GetVolume(fDepthk)->GetName() << G4endl;
00084 G4Exception("G4PSDoseDeposit3D::GetIndex","DetPS0005",JustWarning,ED);
00085 }
00086
00087 return i*fNj*fNk+j*fNk+k;
00088 }