38 #ifdef G4ANALYSIS_USE_ROOT  
   40 analysisFileName(
"DoseDistribution.root"),theTFile(0), histo1(0), histo2(0), histo3(0),
 
   41 histo4(0), histo5(0), histo6(0), histo7(0), histo8(0), histo9(0), histo10(0), histo11(0), histo12(0), histo13(0), histo14(0), histo15(0), histo16(0),
 
   43 kineticEnergyPrimaryNtuple(0),
 
   61 #ifdef G4ANALYSIS_USE_ROOT 
   71 #ifdef G4ANALYSIS_USE_ROOT 
   79         delete fragmentNtuple;
 
   82         delete theROOTIonTuple;
 
  140 void HadrontherapyAnalysisManager::SetAnalysisFileName(
G4String aFileName)
 
  142         this->analysisFileName = aFileName;
 
  146 G4bool HadrontherapyAnalysisManager::IsTheTFile()
 
  148     return (theTFile) ? 
true:
false; 
 
  150 void HadrontherapyAnalysisManager::book()
 
  154         theTFile = 
new TFile(analysisFileName, 
"RECREATE");
 
  157         histo1 = createHistogram1D(
"braggPeak",
"slice, energy", 400, 0., 80); 
 
  158         histo2 = createHistogram1D(
"h20",
"Secondary protons - slice, energy", 400, 0., 400.);
 
  159         histo3 = createHistogram1D(
"h30",
"Secondary neutrons - slice, energy", 400, 0., 400.);
 
  160         histo4 = createHistogram1D(
"h40",
"Secondary alpha - slice, energy", 400, 0., 400.);
 
  161         histo5 = createHistogram1D(
"h50",
"Secondary gamma - slice, energy", 400, 0., 400.);
 
  162         histo6 = createHistogram1D(
"h60",
"Secondary electron - slice, energy", 400, 0., 400.);
 
  163         histo7 = createHistogram1D(
"h70",
"Secondary triton - slice, energy", 400, 0., 400.);
 
  164         histo8 = createHistogram1D(
"h80",
"Secondary deuteron - slice, energy", 400, 0., 400.);
 
  165         histo9 = createHistogram1D(
"h90",
"Secondary pion - slice, energy", 400, 0., 400.);
 
  166         histo10 = createHistogram1D(
"h100",
"Energy distribution of secondary electrons", 70, 0., 70.);
 
  167         histo11 = createHistogram1D(
"h110",
"Energy distribution of secondary photons", 70, 0., 70.);
 
  168         histo12 = createHistogram1D(
"h120",
"Energy distribution of secondary deuterons", 70, 0., 70.);
 
  169         histo13 = createHistogram1D(
"h130",
"Energy distribution of secondary tritons", 70, 0., 70.);
 
  170         histo14 = createHistogram1D(
"h140",
"Energy distribution of secondary alpha particles", 70, 0., 70.);
 
  171         histo15 = createHistogram1D(
"heliumEnergyAfterPhantom",
"Energy distribution of secondary helium fragments after the phantom",
 
  173         histo16 = createHistogram1D(
"hydrogenEnergyAfterPhantom",
"Energy distribution of secondary helium fragments after the phantom",
 
  176         kinFragNtuple  = 
new TNtuple(
"kinFragNtuple", 
 
  177                 "Kinetic energy by voxel & fragment", 
 
  178                 "i:j:k:A:Z:kineticEnergy");
 
  179         kineticEnergyPrimaryNtuple= 
new TNtuple(
"kineticEnergyPrimaryNtuple", 
 
  180                 "Kinetic energy by voxel of primary", 
 
  181                 "i:j:k:kineticEnergy");
 
  182         doseFragNtuple = 
new TNtuple(
"doseFragNtuple",
 
  183                 "Energy deposit by voxel & fragment",
 
  186         fluenceFragNtuple = 
new TNtuple(
"fluenceFragNtuple", 
 
  187                 "Fluence by voxel & fragment",
 
  188                 "i:j:k:A:Z:fluence");
 
  190         letFragNtuple = 
new TNtuple(
"letFragNtuple", 
 
  191                 "Let by voxel & fragment",
 
  192                 "i:j:k:A:Z:letT:letD");
 
  194         theROOTNtuple =   
new TNtuple(
"theROOTNtuple", 
 
  195                 "Energy deposit by slice",
 
  198         theROOTIonTuple = 
new TNtuple(
"theROOTIonTuple",
 
  199                 "Generic ion information",
 
  200                 "a:z:occupancy:energy");
 
  202         fragmentNtuple =  
new TNtuple(
"fragmentNtuple",
 
  204                 "A:Z:energy:posX:posY:posZ");
 
  206         metaData =        
new TNtuple(
"metaData",
 
  208                 "events:detectorDistance:waterThickness:beamEnergy:energyError:phantomCenterDistance");
 
  212 void HadrontherapyAnalysisManager::FillEnergyDeposit(
G4int i,
 
  219                 theROOTNtuple->Fill(i, j, k, energy);
 
  224 void HadrontherapyAnalysisManager::BraggPeak(
G4int slice, 
G4double energy)
 
  226         histo1->SetBinContent(slice, energy); 
 
  230 void HadrontherapyAnalysisManager::SecondaryProtonEnergyDeposit(
G4int slice, 
G4double energy)
 
  232         histo2->Fill(slice, energy);
 
  236 void HadrontherapyAnalysisManager::SecondaryNeutronEnergyDeposit(
G4int slice, 
G4double energy)
 
  238         histo3->Fill(slice, energy);
 
  242 void HadrontherapyAnalysisManager::SecondaryAlphaEnergyDeposit(
G4int slice, 
G4double energy)
 
  244         histo4->Fill(slice, energy);
 
  248 void HadrontherapyAnalysisManager::SecondaryGammaEnergyDeposit(
G4int slice, 
G4double energy)
 
  250         histo5->Fill(slice, energy);
 
  254 void HadrontherapyAnalysisManager::SecondaryElectronEnergyDeposit(
G4int slice, 
G4double energy)
 
  256         histo6->Fill(slice, energy);
 
  260 void HadrontherapyAnalysisManager::SecondaryTritonEnergyDeposit(
G4int slice, 
G4double energy)
 
  262         histo7->Fill(slice, energy);
 
  266 void HadrontherapyAnalysisManager::SecondaryDeuteronEnergyDeposit(
G4int slice, 
G4double energy)
 
  268         histo8->Fill(slice, energy);
 
  272 void HadrontherapyAnalysisManager::SecondaryPionEnergyDeposit(
G4int slice, 
G4double energy)
 
  274         histo9->Fill(slice, energy);
 
  278 void HadrontherapyAnalysisManager::electronEnergyDistribution(
G4double energy)
 
  280         histo10->Fill(energy);
 
  284 void HadrontherapyAnalysisManager::gammaEnergyDistribution(
G4double energy)
 
  286         histo11->Fill(energy);
 
  290 void HadrontherapyAnalysisManager::deuteronEnergyDistribution(
G4double energy)
 
  292         histo12->Fill(energy);
 
  296 void HadrontherapyAnalysisManager::tritonEnergyDistribution(
G4double energy)
 
  298         histo13->Fill(energy);
 
  302 void HadrontherapyAnalysisManager::alphaEnergyDistribution(
G4double energy)
 
  304         histo14->Fill(energy);
 
  307 void HadrontherapyAnalysisManager::heliumEnergy(
G4double secondaryParticleKineticEnergy)
 
  309         histo15->Fill(secondaryParticleKineticEnergy);
 
  313 void HadrontherapyAnalysisManager::hydrogenEnergy(
G4double secondaryParticleKineticEnergy)
 
  315         histo16->Fill(secondaryParticleKineticEnergy);
 
  323     kinFragNtuple -> Fill(i, j, k, A, Z, kinEnergy);
 
  329 void HadrontherapyAnalysisManager::FillKineticEnergyPrimaryNTuple(
G4int i, 
G4int j, 
G4int k, 
G4double kinEnergy)
 
  331     kineticEnergyPrimaryNtuple -> Fill(i, j, k, kinEnergy);
 
  342     doseFragNtuple ->    Fill( i, j, k, A, Z, energy );
 
  346                 fluenceFragNtuple -> Fill( i, j, k, A, Z, fluence );
 
  353   letFragNtuple -> Fill( i, j, k, A, Z, letD/
MeV);
 
  358         fragmentNtuple->Fill(A, Z, energy, posX, posY, posZ);
 
  362 void HadrontherapyAnalysisManager::genericIonInformation(
G4int a,
 
  364                                                                                                                  G4int electronOccupancy,
 
  367         if (theROOTIonTuple) {
 
  368                 theROOTIonTuple->Fill(a, z, electronOccupancy, energy);
 
  373 void HadrontherapyAnalysisManager::startNewEvent()
 
  378 void HadrontherapyAnalysisManager::setGeometryMetaData(
G4double endDetectorPosition, 
G4double waterThickness, 
G4double phantomCenter)
 
  380         this->detectorDistance = endDetectorPosition;
 
  381         this->phantomDepth = waterThickness;
 
  382         this->phantomCenterDistance = phantomCenter;
 
  384 void HadrontherapyAnalysisManager::setBeamMetaData(
G4double meanKineticEnergy,
G4double sigmaEnergy)
 
  386         this->beamEnergy = meanKineticEnergy;
 
  387         this->energyError = sigmaEnergy;
 
  391 void HadrontherapyAnalysisManager::flush()
 
static HadrontherapyAnalysisManager * GetInstance()
Get the pointer to the analysis manager. 
 
static HadrontherapyAnalysisManager * instance
 
A messenger object of this class is created by the AnalysisManager. 
 
double A(double temperature)
 
HadrontherapyAnalysisFileMessenger * fMess
 
G4double energy(const ThreeVector &p, const G4double m)
 
HadrontherapyAnalysisManager()
Analysis manager is a singleton object (there is only one instance). 
 
A class for connecting the simulation to an analysis package. 
 
~HadrontherapyAnalysisManager()