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
00031 #include "G4PSDoseDepositForCylinder3D.hh"
00032 #include "G4PhysicalConstants.hh"
00033
00035
00036
00037
00038
00039
00040
00041
00043
00044 G4PSDoseDepositForCylinder3D::G4PSDoseDepositForCylinder3D(G4String name,
00045 G4int ni, G4int nj, G4int nk,
00046 G4int di, G4int dj, G4int dk)
00047 :G4PSDoseDeposit3D(name,ni,nj,nk,di,dj,dk)
00048 {
00049 nSegment[0] = nSegment[1] = nSegment[2] = 0;
00050 }
00051
00052 G4PSDoseDepositForCylinder3D::G4PSDoseDepositForCylinder3D(G4String name,
00053 const G4String& unit,
00054 G4int ni, G4int nj, G4int nk,
00055 G4int di, G4int dj, G4int dk)
00056 :G4PSDoseDeposit3D(name,unit,ni,nj,nk,di,dj,dk)
00057 {
00058 nSegment[0] = nSegment[1] = nSegment[2] = 0;
00059 }
00060
00061 G4PSDoseDepositForCylinder3D::~G4PSDoseDepositForCylinder3D()
00062 {;}
00063
00064 void G4PSDoseDepositForCylinder3D::SetCylinderSize(G4double dr, G4double dz){
00065 cylinderSize.setX(dz);
00066 cylinderSize.setY(twopi);
00067 cylinderSize.setZ(dr);
00068 }
00069 void G4PSDoseDepositForCylinder3D::SetNumberOfSegments(G4int nSeg[3]){
00070 nSegment[0] = nSeg[0];
00071 nSegment[1] = nSeg[1];
00072 nSegment[2] = nSeg[2];
00073 }
00074 G4double G4PSDoseDepositForCylinder3D::ComputeVolume(G4Step*, G4int idx){
00075 G4double r0 = (cylinderSize[2]/nSegment[2])*(idx);
00076 G4double r1 = (cylinderSize[2]/nSegment[2])*(idx+1);
00077 G4double dRArea = (r1*r1-r0*r0)*pi;
00078
00079
00080 G4double fullz = cylinderSize[0]/nSegment[0]*2.;
00081 G4double phiRatio = 1./nSegment[1];
00082 G4double v = dRArea*fullz*phiRatio;
00083
00084 return v;
00085 }