Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /geant4/examples/advanced/dna/cellularPhantom/src/Run.cc was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 // -----------------------------------------------------------------------------
0027 //       MONTE CARLO SIMULATION OF REALISTIC GEOMETRY FROM MICROSCOPES IMAGES
0028 //
0029 // Authors and contributors:
0030 // P. Barberet (a), S. Incerti (a), N. H. Tran (a), L. Morelli (a,b)
0031 //
0032 // a) University of Bordeaux, CNRS, LP2i, UMR5797, Gradignan, France
0033 // b) Politecnico di Milano, Italy
0034 //
0035 // If you use this code, please cite the following publication:
0036 // P. Barberet et al.,
0037 // "Monte-Carlo dosimetry on a realistic cell monolayer
0038 // geometry exposed to alpha particles."
0039 // Ph. Barberet et al 2012 Phys. Med. Biol. 57 2189
0040 // doi: 110.1088/0031-9155/57/8/2189
0041 // -----------------------------------------------------------------------------
0042 
0043 #include "Run.hh"
0044 
0045 #include "G4SystemOfUnits.hh"
0046 #include "G4UnitsTable.hh"
0047 
0048 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0049 
0050 Run::Run()
0051 :G4Run()
0052 {
0053   G4int nbVoxel = CellParameterisation::Instance()->GetPhantomTotalPixels();
0054   fVoxelEdeposit = new G4double[nbVoxel];
0055   for (G4int i=0; i<nbVoxel; ++i) fVoxelEdeposit[i] = 0;
0056 }
0057 
0058 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0059 
0060 Run::~Run()
0061 {
0062   delete[] fVoxelEdeposit;
0063 }
0064 
0065 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0066 
0067 void Run::Merge(const G4Run* run)
0068 {
0069   const Run* localRun = static_cast<const Run*>(run);
0070 
0071   // Accumulate energy deposits per voxel
0072   G4int nbVoxel = CellParameterisation::Instance()->GetPhantomTotalPixels();
0073   for (G4int i=0; i<nbVoxel; ++i)
0074     fVoxelEdeposit[i] += localRun->fVoxelEdeposit[i];
0075 
0076   G4Run::Merge(run);
0077 }
0078 
0079 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0080 
0081 void Run::EndOfRun()
0082 {
0083   G4double nrjRed=0;
0084   G4double doseRed=0;
0085   G4double nrjGreen=0;
0086   G4double doseGreen=0;
0087   G4double nrjBlue=0;
0088   G4double doseBlue=0;
0089 
0090   fMyPhantomParam = CellParameterisation::Instance();
0091 
0092   G4double redMassTot = fMyPhantomParam->GetRedMass();
0093   G4double greenMassTot = fMyPhantomParam->GetGreenMass();
0094   G4double blueMassTot = fMyPhantomParam->GetBlueMass();
0095 
0096   for (G4int i = 0; i < fMyPhantomParam->GetPhantomTotalPixels(); i++)
0097   {
0098     if (fVoxelEdeposit[i] > 0.)
0099     {
0100       if (fMyPhantomParam->GetMaterial(i) == 1)
0101       {
0102         nrjRed=nrjRed+fVoxelEdeposit[i];
0103         doseRed=doseRed+(fVoxelEdeposit[i]/redMassTot);
0104       }
0105       else if (fMyPhantomParam->GetMaterial(i) == 2)
0106       {
0107         nrjGreen=nrjGreen+fVoxelEdeposit[i];
0108         doseGreen=doseGreen+(fVoxelEdeposit[i]/greenMassTot);
0109       }
0110       else if (fMyPhantomParam->GetMaterial(i) == 3)
0111       {
0112         nrjBlue=nrjBlue+fVoxelEdeposit[i];
0113         doseBlue=doseBlue+(fVoxelEdeposit[i]/blueMassTot);
0114       }
0115     }
0116   }
0117 
0118   G4int numberVoxTot = fMyPhantomParam->GetPhantomTotalPixels();
0119   G4int numberVoxRed = fMyPhantomParam->GetRedTotalPixels();
0120   G4int numberVoxGreen = fMyPhantomParam->GetGreenTotalPixels();
0121   G4int numberVoxBlue = fMyPhantomParam->GetBlueTotalPixels();
0122 
0123   G4cout << G4endl;
0124   G4cout << "- Summary --------------------------------------------------" << G4endl;
0125   G4cout << G4endl;
0126   G4cout << "  Total number of voxels in phantom           = " << numberVoxTot << G4endl;
0127   G4cout << "  Total number of RED voxels in phantom       = " << numberVoxRed << G4endl;
0128   G4cout << "  Total number of GREEN voxels in phantom     = " << numberVoxGreen << G4endl;
0129   G4cout << "  Total number of BLUE voxels in phantom      = " << numberVoxBlue << G4endl;
0130   G4cout << G4endl;
0131   G4cout << "  Total absorbed energy in RED   voxels (MeV) = "  << nrjRed/MeV << G4endl;
0132   G4cout << "  Total absorbed energy in GREEN voxels (MeV) = "  << nrjGreen/MeV << G4endl;
0133   G4cout << "  Total absorbed energy in BLUE  voxels (MeV) = "  << nrjBlue/MeV << G4endl;
0134   G4cout << G4endl;
0135   G4cout << "  Total absorbed dose   in RED   voxels (Gy)  = "  << doseRed/(joule/kg) << G4endl;
0136   G4cout << "  Total absorbed dose   in GREEN voxels (Gy)  = "  << doseGreen/(joule/kg) << G4endl;
0137   G4cout << "  Total absorbed dose   in BLUE  voxels (Gy)  = "  << doseBlue/(joule/kg) << G4endl;
0138   G4cout << G4endl;
0139   G4cout << "------------------------------------------------------------" << G4endl;
0140 
0141 }