G4PSCellFluxForCylinder3D.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 //
00027 // $Id$
00028 // GEANT4 tag $Name: geant4-09-04 $
00029 //
00030 // G4PSCellFluxForCylinder3D
00031 #include "G4PSCellFluxForCylinder3D.hh"
00032 #include "G4PhysicalConstants.hh"
00033 #include "G4SystemOfUnits.hh"
00034 
00036 // (Description)
00037 //   This is a primitive scorer class for 3D scoring cell flux.
00038 //   The Cell Flux is defined by  a sum of track length divided
00039 //   by the geometry volume, where all of the tracks in the geometry
00040 //   are taken into account. e.g. the unit of Cell Flux is mm/mm3.
00041 //
00042 //
00043 //   If you want to score only tracks passing through the geometry volume,
00044 //  please use G4PSPassageCellFlux3D.
00045 //
00046 //
00047 // Created: 2007-08-14  Tsukasa ASO
00048 // 2010-07-22   Introduce Unit specification.
00049 // 2011-03-24   Give Size and Segmentation for relicated volume in cylinder. 
00050 // 
00052 
00053 G4PSCellFluxForCylinder3D::G4PSCellFluxForCylinder3D(G4String name,
00054                                G4int ni, G4int nj, G4int nk,
00055                                G4int depi, G4int depj, G4int depk)
00056   :G4PSCellFlux3D(name,ni,nj,nk,depi,depj,depk)
00057 {
00058   nSegment[0] = nSegment[1] = nSegment[2] = 0;
00059 }
00060 
00061 G4PSCellFluxForCylinder3D::G4PSCellFluxForCylinder3D(G4String name,const G4String& unit,
00062                                G4int ni, G4int nj, G4int nk,
00063                                G4int depi, G4int depj, G4int depk)
00064   :G4PSCellFlux3D(name,unit,ni,nj,nk,depi,depj,depk)
00065 {
00066   nSegment[0] = nSegment[1] = nSegment[2] = 0;
00067 }
00068 
00069 G4PSCellFluxForCylinder3D::~G4PSCellFluxForCylinder3D()
00070 {;}
00071 
00072 void G4PSCellFluxForCylinder3D::SetCylinderSize(G4double dr, G4double dz){
00073   cylinderSize.setX(dz);        //Z Phi R
00074   cylinderSize.setY(twopi);     //Z Phi R
00075   cylinderSize.setZ(dr);        //Z Phi R
00076 }
00077 void G4PSCellFluxForCylinder3D::SetNumberOfSegments(G4int nSeg[3]){
00078   nSegment[0] = nSeg[0];  // Z
00079   nSegment[1] = nSeg[1];  // Phi
00080   nSegment[2] = nSeg[2];  // R
00081 }
00082 
00083 G4double G4PSCellFluxForCylinder3D::ComputeVolume(G4Step*, G4int idx){
00084   G4double r0 = (cylinderSize[2]/nSegment[2])*(idx);
00085   G4double r1 = (cylinderSize[2]/nSegment[2])*(idx+1);
00086   G4double dRArea = (r1*r1-r0*r0)*pi;
00087 
00088   // cylinderSize is given in Half Size
00089   G4double fullz      = cylinderSize[0]/nSegment[0]*2.;  
00090   G4double phiRatio  = 1./nSegment[1];
00091   G4double v = dRArea*fullz*phiRatio;
00092 
00093   if ( verboseLevel > 9 ){
00094     G4cout << " r0= " <<r0/cm <<"  r1= " << r1/cm<<" fullz="<<fullz/cm<<G4endl;
00095     G4cout << " idx= " <<idx <<"  v(cm3)= " << v/cm3<<G4endl;
00096   }
00097 
00098   return v;
00099 }

Generated on Mon May 27 17:49:27 2013 for Geant4 by  doxygen 1.4.7