43 HadrontherapyAnalysisManager::HadrontherapyAnalysisManager() 
 
   44 #ifdef G4ANALYSIS_USE_ROOT  
   46 analysisFileName(
"DoseDistribution.root"),theTFile(0), histo1(0), histo2(0), histo3(0),
 
   47 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),
 
   49 kineticEnergyPrimaryNtuple(0),
 
   67 #ifdef G4ANALYSIS_USE_ROOT 
   77 #ifdef G4ANALYSIS_USE_ROOT 
   85     delete fragmentNtuple;
 
   88     delete theROOTIonTuple;
 
  146 void HadrontherapyAnalysisManager::SetAnalysisFileName(
G4String aFileName)
 
  148     this->analysisFileName = aFileName;
 
  152 G4bool HadrontherapyAnalysisManager::IsTheTFile()
 
  154     return (theTFile) ? 
true:
false; 
 
  156 void HadrontherapyAnalysisManager::book()
 
  160     theTFile = 
new TFile(analysisFileName, 
"RECREATE");
 
  163     histo1 = createHistogram1D(
"braggPeak",
"slice, energy", 400, 0., 80); 
 
  164     histo2 = createHistogram1D(
"h20",
"Secondary protons - slice, energy", 400, 0., 400.);
 
  165     histo3 = createHistogram1D(
"h30",
"Secondary neutrons - slice, energy", 400, 0., 400.);
 
  166     histo4 = createHistogram1D(
"h40",
"Secondary alpha - slice, energy", 400, 0., 400.);
 
  167     histo5 = createHistogram1D(
"h50",
"Secondary gamma - slice, energy", 400, 0., 400.);
 
  168     histo6 = createHistogram1D(
"h60",
"Secondary electron - slice, energy", 400, 0., 400.);
 
  169     histo7 = createHistogram1D(
"h70",
"Secondary triton - slice, energy", 400, 0., 400.);
 
  170     histo8 = createHistogram1D(
"h80",
"Secondary deuteron - slice, energy", 400, 0., 400.);
 
  171     histo9 = createHistogram1D(
"h90",
"Secondary pion - slice, energy", 400, 0., 400.);
 
  172     histo10 = createHistogram1D(
"h100",
"Energy distribution of secondary electrons", 70, 0., 70.);
 
  173     histo11 = createHistogram1D(
"h110",
"Energy distribution of secondary photons", 70, 0., 70.);
 
  174     histo12 = createHistogram1D(
"h120",
"Energy distribution of secondary deuterons", 70, 0., 70.);
 
  175     histo13 = createHistogram1D(
"h130",
"Energy distribution of secondary tritons", 70, 0., 70.);
 
  176     histo14 = createHistogram1D(
"h140",
"Energy distribution of secondary alpha particles", 70, 0., 70.);
 
  177     histo15 = createHistogram1D(
"heliumEnergyAfterPhantom",
"Energy distribution of secondary helium fragments after the phantom",
 
  179     histo16 = createHistogram1D(
"hydrogenEnergyAfterPhantom",
"Energy distribution of secondary helium fragments after the phantom",
 
  182     kinFragNtuple  = 
new TNtuple(
"kinFragNtuple", 
 
  183         "Kinetic energy by voxel & fragment", 
 
  184         "i:j:k:A:Z:kineticEnergy");
 
  185     kineticEnergyPrimaryNtuple= 
new TNtuple(
"kineticEnergyPrimaryNtuple", 
 
  186         "Kinetic energy by voxel of primary", 
 
  187         "i:j:k:kineticEnergy");
 
  188     doseFragNtuple = 
new TNtuple(
"doseFragNtuple",
 
  189         "Energy deposit by voxel & fragment",
 
  192     fluenceFragNtuple = 
new TNtuple(
"fluenceFragNtuple", 
 
  193         "Fluence by voxel & fragment",
 
  194         "i:j:k:A:Z:fluence");
 
  196     letFragNtuple = 
new TNtuple(
"letFragNtuple", 
 
  197         "Let by voxel & fragment",
 
  198         "i:j:k:A:Z:letT:letD");
 
  200     theROOTNtuple =   
new TNtuple(
"theROOTNtuple", 
 
  201         "Energy deposit by slice",
 
  204     theROOTIonTuple = 
new TNtuple(
"theROOTIonTuple",
 
  205         "Generic ion information",
 
  206         "a:z:occupancy:energy");
 
  208     fragmentNtuple =  
new TNtuple(
"fragmentNtuple",
 
  210         "A:Z:energy:posX:posY:posZ");
 
  212     metaData =        
new TNtuple(
"metaData",
 
  214         "events:detectorDistance:waterThickness:beamEnergy:energyError:phantomCenterDistance");
 
  218 void HadrontherapyAnalysisManager::FillEnergyDeposit(
G4int i,
 
  225         theROOTNtuple->Fill(i, j, k, energy);
 
  230 void HadrontherapyAnalysisManager::BraggPeak(
G4int slice, 
G4double energy)
 
  232     histo1->SetBinContent(slice, energy); 
 
  236 void HadrontherapyAnalysisManager::SecondaryProtonEnergyDeposit(
G4int slice, 
G4double energy)
 
  238     histo2->Fill(slice, energy);
 
  242 void HadrontherapyAnalysisManager::SecondaryNeutronEnergyDeposit(
G4int slice, 
G4double energy)
 
  244     histo3->Fill(slice, energy);
 
  248 void HadrontherapyAnalysisManager::SecondaryAlphaEnergyDeposit(
G4int slice, 
G4double energy)
 
  250     histo4->Fill(slice, energy);
 
  254 void HadrontherapyAnalysisManager::SecondaryGammaEnergyDeposit(
G4int slice, 
G4double energy)
 
  256     histo5->Fill(slice, energy);
 
  260 void HadrontherapyAnalysisManager::SecondaryElectronEnergyDeposit(
G4int slice, 
G4double energy)
 
  262     histo6->Fill(slice, energy);
 
  266 void HadrontherapyAnalysisManager::SecondaryTritonEnergyDeposit(
G4int slice, 
G4double energy)
 
  268     histo7->Fill(slice, energy);
 
  272 void HadrontherapyAnalysisManager::SecondaryDeuteronEnergyDeposit(
G4int slice, 
G4double energy)
 
  274     histo8->Fill(slice, energy);
 
  278 void HadrontherapyAnalysisManager::SecondaryPionEnergyDeposit(
G4int slice, 
G4double energy)
 
  280     histo9->Fill(slice, energy);
 
  284 void HadrontherapyAnalysisManager::electronEnergyDistribution(
G4double energy)
 
  286     histo10->Fill(energy);
 
  290 void HadrontherapyAnalysisManager::gammaEnergyDistribution(
G4double energy)
 
  292     histo11->Fill(energy);
 
  296 void HadrontherapyAnalysisManager::deuteronEnergyDistribution(
G4double energy)
 
  298     histo12->Fill(energy);
 
  302 void HadrontherapyAnalysisManager::tritonEnergyDistribution(
G4double energy)
 
  304     histo13->Fill(energy);
 
  308 void HadrontherapyAnalysisManager::alphaEnergyDistribution(
G4double energy)
 
  310     histo14->Fill(energy);
 
  313 void HadrontherapyAnalysisManager::heliumEnergy(
G4double secondaryParticleKineticEnergy)
 
  315     histo15->Fill(secondaryParticleKineticEnergy);
 
  319 void HadrontherapyAnalysisManager::hydrogenEnergy(
G4double secondaryParticleKineticEnergy)
 
  321     histo16->Fill(secondaryParticleKineticEnergy);
 
  329     kinFragNtuple -> 
Fill(i, j, k, A, Z, kinEnergy);
 
  335 void HadrontherapyAnalysisManager::FillKineticEnergyPrimaryNTuple(
G4int i, 
G4int j, 
G4int k, 
G4double kinEnergy)
 
  337     kineticEnergyPrimaryNtuple -> 
Fill(i, j, k, kinEnergy);
 
  348     doseFragNtuple ->    
Fill( i, j, k, A, Z, energy );
 
  352         fluenceFragNtuple -> 
Fill( i, j, k, A, Z, fluence );
 
  359   letFragNtuple -> 
Fill( i, j, k, A, Z, letD/
MeV);
 
  364     fragmentNtuple->Fill(A, Z, energy, posX, posY, posZ);
 
  368 void HadrontherapyAnalysisManager::genericIonInformation(
G4int a,
 
  370                                                          G4int electronOccupancy,
 
  373     if (theROOTIonTuple) {
 
  374         theROOTIonTuple->Fill(a, z, electronOccupancy, energy);
 
  379 void HadrontherapyAnalysisManager::startNewEvent()
 
  384 void HadrontherapyAnalysisManager::setGeometryMetaData(
G4double endDetectorPosition, 
G4double waterThickness, 
G4double phantomCenter)
 
  386     this->detectorDistance = endDetectorPosition;
 
  387     this->phantomDepth = waterThickness;
 
  388     this->phantomCenterDistance = phantomCenter;
 
  390 void HadrontherapyAnalysisManager::setBeamMetaData(
G4double meanKineticEnergy,
G4double sigmaEnergy)
 
  392     this->beamEnergy = meanKineticEnergy;
 
  393     this->energyError = sigmaEnergy;
 
  397 void HadrontherapyAnalysisManager::flush()
 
static HadrontherapyAnalysisManager * GetInstance()
 
ntupleExperimental Fill(depthExp, EdepExp)
 
static HadrontherapyAnalysisManager * instance
 
HadrontherapyAnalysisFileMessenger * fMess
 
~HadrontherapyAnalysisManager()