#include "TF1.h" #include "TH2.h" #include "TH2D.h" #include "TH1.h" #include "TMath.h" #include #include "TGraph.h" #include using namespace std; void norm_th1_per_bin_width_per_primaries(TH1D* histo, int total_primaries) { int xbins; double value,xbinwidth; //Normalize histogram per bin width and per incoming particle. xbins = histo->GetXaxis()->GetNbins(); for(int i=1; iGetBinWidth(i); value = histo->GetBinContent(i); value = value/xbinwidth/(total_primaries*1.); histo->SetBinContent(i,value); //Setting error bin content value = histo->GetBinError(i); value = value/xbinwidth/(total_primaries*1.); histo->SetBinError(i,value); } } void norm_th2_per_bin_width_per_primaries(TH2D* histo, int total_primaries) { int xbins,ybins; double value,xbinwidth,ybinwidth; //Normalize histogram per bin width and per incoming particle. xbins = histo->GetXaxis()->GetNbins(); ybins = histo->GetYaxis()->GetNbins(); for(int i=1; iGetXaxis()->GetBinWidth(i); for(int j=1; jGetYaxis()->GetBinWidth(j); value = histo->GetBinContent(i,j); value = value/xbinwidth/ybinwidth/(total_primaries*1.); histo->SetBinContent(i,j,value); //Setting error bin content value = histo->GetBinError(i,j); value = value/xbinwidth/ybinwidth/(total_primaries*1.); histo->SetBinError(i,j,value); } } } void Plot(){ //PARAMETERS double tMin = 0; double tMax = 30.; //in hour(s) double halfLifeLimit = 1./60.; //in hour(s) double tIrradiation; //in hour(s) double beamCurrent; //in µA int total_primaries; //VARIABLES string endLine; //Getting the parameters from the G4 output file. ifstream G4output; G4output.open("Output_General.txt"); for(int i=0;i<6;i++)getline(G4output,endLine); G4output >> beamCurrent; getline(G4output,endLine); G4output >> tIrradiation; getline(G4output,endLine); for(int i=0;i<6;i++)getline(G4output,endLine); G4output >> total_primaries; G4output.close(); beamCurrent*=1e6; //<--- convert from A to µA. /* cout << "Irradiation time = " << tIrradiation << " h." << endl; cout << "Beam current = " << beamCurrent << " µA." << endl; cout << "Total primaries = " << total_primaries << endl; getchar();*/ system("rm -r Results"); system("mkdir Results"); system("mkdir Results/IsotopesProduction"); system("mkdir Results/ParticlesEnergySpectra"); system("mkdir Results/ParticlesEnergySpectra/Beam"); system("mkdir Results/ParticlesEnergySpectra/Decay"); system("mkdir Results/BeamData"); ofstream results; results.open("Results.txt"); results << "Parameters: " << endl; results << "Time of irradiation: " << tIrradiation << " hour(s)." << endl; results << "Beam current: " << beamCurrent << " µA." << endl; results << "Total number of simulated primaries: " << total_primaries << endl; results << "Please check they are the same as in the simulation. Otherwise change it by modifying the Plot.C file." << endl; //Opening root file. stringstream name_root_file; name_root_file << "./SolidTargetCyclotron.root"; TFile *f = new TFile(name_root_file.str().c_str(),"open"); //---------------------------------------------------------------// // Energy Profile of the beam before/after the target // //---------------------------------------------------------------// TCanvas *BeamEnergyTarget = new TCanvas("Beam energy profile before the target", "BeamTargetProfile"); TH1D *energyProfileBeamTarget = (TH1D*)f->Get("H10;1"); energyProfileBeamTarget->GetXaxis()->SetTitle("Energy (MeV)"); energyProfileBeamTarget->GetYaxis()->SetTitle("P(E) (MeV^{-1}.particle^{-1})"); energyProfileBeamTarget->SetTitle("Primary particles energy when reaching the target, per primary particle"); energyProfileBeamTarget->GetXaxis()->SetMaxDigits(2); energyProfileBeamTarget->GetYaxis()->SetMaxDigits(3); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(energyProfileBeamTarget,total_primaries); energyProfileBeamTarget->Draw("H"); BeamEnergyTarget->Print("./Results/BeamData/BeamEnergyInTarget.pdf"); TCanvas *BeamEnergyOutTarget = new TCanvas("Beam energy profile after the target", "BeamTargetOutProfile"); TH1D *energyProfileBeamOutTarget = (TH1D*)f->Get("H12;1"); energyProfileBeamOutTarget->GetXaxis()->SetTitle("Energy (MeV)"); energyProfileBeamOutTarget->GetYaxis()->SetTitle("P(E) (MeV^{-1}.particle^{-1})"); energyProfileBeamOutTarget->SetTitle("Primary particles energy when going out of the target, per primary particle"); energyProfileBeamOutTarget->GetXaxis()->SetMaxDigits(2); energyProfileBeamOutTarget->GetYaxis()->SetMaxDigits(3); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(energyProfileBeamOutTarget,total_primaries); energyProfileBeamOutTarget->Draw("H"); BeamEnergyOutTarget->Print("./Results/BeamData/BeamEnergyOutTarget.pdf"); //---------------------------------------------------------------// // Energy Profile of the beam before/after the foil // //---------------------------------------------------------------// TCanvas *BeamEnergyFoil = new TCanvas("Beam energy profile before the foil", "BeamFoilProfile"); TH1D *energyProfileBeamFoil = (TH1D*)f->Get("H11;1"); energyProfileBeamFoil->GetXaxis()->SetTitle("Energy (MeV)"); energyProfileBeamFoil->GetYaxis()->SetTitle("P(E) (MeV^{-1}.particle^{-1})"); energyProfileBeamFoil->SetTitle("Primary particles energy when reaching the foil, per primary particle"); energyProfileBeamFoil->GetXaxis()->SetMaxDigits(2); energyProfileBeamFoil->GetYaxis()->SetMaxDigits(3); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(energyProfileBeamFoil,total_primaries); energyProfileBeamFoil->Draw("H"); BeamEnergyFoil->Print("./Results/BeamData/BeamEnergyInFoil.pdf"); TCanvas *BeamEnergyOutFoil = new TCanvas("Beam energy profile after the foil", "BeamFoilOutProfile"); TH1D *energyProfileBeamOutFoil = (TH1D*)f->Get("H13;1"); energyProfileBeamOutFoil->GetXaxis()->SetTitle("Energy (MeV)"); energyProfileBeamOutFoil->GetYaxis()->SetTitle("P(E) (MeV^{-1}.particle^{-1})"); energyProfileBeamOutFoil->SetTitle("Primary particles energy when going out of the foil, per primary particle"); energyProfileBeamOutFoil->GetXaxis()->SetMaxDigits(2); energyProfileBeamOutFoil->GetYaxis()->SetMaxDigits(3); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(energyProfileBeamOutFoil,total_primaries); energyProfileBeamOutFoil->Draw("H"); BeamEnergyOutFoil->Print("./Results/BeamData/BeamEnergyOutFoil.pdf"); //---------------------------------------------------------------// // Depth of isotope creation in the target // //---------------------------------------------------------------// TCanvas *depthCreation = new TCanvas("DepthCreation", "Depth of isotope creation in the target per primary particle."); TH1D *hDepthCreation = (TH1D*) f->Get("H14;1"); hDepthCreation->SetTitle("Depth of isotope creation in the target per primary particle."); hDepthCreation->GetXaxis()->SetTitle("Depth (mm)"); hDepthCreation->GetYaxis()->SetTitle("N isotopes (mm^{-1}.particle^{-1})"); hDepthCreation->GetYaxis()->SetMaxDigits(3); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(hDepthCreation,total_primaries); hDepthCreation->SetMarkerStyle(4); hDepthCreation->SetMarkerSize(1); hDepthCreation->Draw("l"); depthCreation->Print("./Results/IsotopesProduction/DepthCreation.pdf"); //---------------------------------------------------------------// // Energy spectrum // //---------------------------------------------------------------// //----------------->> PARTICLES EMITTED DUE TO BEAM INTERACTIONS WITH THE TARGET //Positrons// TCanvas *PositronSpectrumBeam = new TCanvas("PositronSpectrumBeam", "Spectrum of the positrons created by the beam in the target"); TH1D *hPositronSpectrumBeam = (TH1D*) f->Get("H15;1"); if(hPositronSpectrumBeam->GetEntries()!=0) { hPositronSpectrumBeam->GetXaxis()->SetTitle("Energy (MeV)"); hPositronSpectrumBeam->GetYaxis()->SetTitle("N positrons (MeV^{-1}.particle^{-1})"); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(hPositronSpectrumBeam,total_primaries); hPositronSpectrumBeam->GetYaxis()->SetMaxDigits(3); hPositronSpectrumBeam->GetYaxis()->SetTitleOffset(1.2); hPositronSpectrumBeam->Draw("H"); PositronSpectrumBeam->SetLogy(); PositronSpectrumBeam->Print("./Results/ParticlesEnergySpectra/Beam/PositronSpectrumBeam.pdf"); } //Electrons// TCanvas *ElectronSpectrumBeam = new TCanvas("ElectronSpectrumBeam", "Spectrum of the electrons created by the beam in the target"); TH1D *hElectronSpectrumBeam = (TH1D*) f->Get("H16;1"); if(hElectronSpectrumBeam->GetEntries() !=0) { hElectronSpectrumBeam->GetXaxis()->SetTitle("Energy (MeV)"); hElectronSpectrumBeam->GetYaxis()->SetTitle("N electrons (MeV^{-1}.particle^{-1})"); hElectronSpectrumBeam->GetYaxis()->SetTitleOffset(1.2); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(hElectronSpectrumBeam,total_primaries); hElectronSpectrumBeam->Draw("H"); ElectronSpectrumBeam->SetLogy(); ElectronSpectrumBeam->Print("./Results/ParticlesEnergySpectra/Beam/ElectronSpectrumBeam.pdf"); } //Gammas// TCanvas *GammaSpectrumBeam = new TCanvas("GammaSpectrumBeam", "Spectrum of the gammas created by the beam in the target"); TH1D *hGammaSpectrumBeam = (TH1D*) f->Get("H17;1"); if(hGammaSpectrumBeam->GetEntries() !=0) { hGammaSpectrumBeam->GetXaxis()->SetTitle("Energy (MeV)"); hGammaSpectrumBeam->GetYaxis()->SetTitle("N Gammas (MeV^{-1}.particle^{-1})"); hGammaSpectrumBeam->GetYaxis()->SetTitleOffset(1.2); hGammaSpectrumBeam->Draw("H"); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(hGammaSpectrumBeam,total_primaries); GammaSpectrumBeam->SetLogy(); GammaSpectrumBeam->Print("./Results/ParticlesEnergySpectra/Beam/GammaSpectrumBeam.pdf"); } //Neutrons// TCanvas *NeutronSpectrumBeam = new TCanvas("NeutronSpectrumBeam", "Spectrum of the neutrons created by the beam in the target"); TH1D *hNeutronSpectrumBeam = (TH1D*) f->Get("H18;1"); if(hNeutronSpectrumBeam->GetEntries() !=0) { hNeutronSpectrumBeam->GetXaxis()->SetTitle("Energy (MeV)"); hNeutronSpectrumBeam->GetYaxis()->SetTitle("N neutrons (MeV^{-1}.particle^{-1})"); hNeutronSpectrumBeam->GetYaxis()->SetTitleOffset(1.2); hNeutronSpectrumBeam->Draw("H"); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(hNeutronSpectrumBeam,total_primaries); NeutronSpectrumBeam->SetLogy(); NeutronSpectrumBeam->Print("./Results/ParticlesEnergySpectra/Beam/NeutronSpectrumBeam.pdf"); } //----------------->> PARTICLES EMITTED DUE TO ISOTOPE DECAY //Positrons// TCanvas *PositronSpectrumDecay = new TCanvas("PositronSpectrumDecay", "Spectrum of the positrons created by the decays in the target"); TH1D *hPositronSpectrumDecay = (TH1D*) f->Get("H19;1"); if(hPositronSpectrumDecay->GetEntries() !=0) { hPositronSpectrumDecay->GetXaxis()->SetTitle("Energy (MeV)"); hPositronSpectrumDecay->GetYaxis()->SetTitle("N positrons (MeV^{-1}.particle^{-1})"); hPositronSpectrumDecay->GetYaxis()->SetTitleOffset(1.2); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(hPositronSpectrumDecay,total_primaries); hPositronSpectrumDecay->Draw("H"); PositronSpectrumDecay->SetLogy(); PositronSpectrumDecay->Print("./Results/ParticlesEnergySpectra/Decay/PositronSpectrumDecay.pdf"); } //Electrons// TCanvas *ElectronSpectrumDecay = new TCanvas("ElectronSpectrumDecay", "Spectrum of the electrons created by the decays in the target"); TH1D *hElectronSpectrumDecay = (TH1D*) f->Get("H110;1"); if(hElectronSpectrumDecay->GetEntries() !=0) { hElectronSpectrumDecay->GetXaxis()->SetTitle("Energy (MeV)"); hElectronSpectrumDecay->GetYaxis()->SetTitle("N electrons (MeV^{-1}.particle^{-1})"); hElectronSpectrumDecay->GetYaxis()->SetTitleOffset(1.2); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(hElectronSpectrumDecay,total_primaries); hElectronSpectrumDecay->Draw("H"); ElectronSpectrumDecay->SetLogy(); ElectronSpectrumDecay->Print("./Results/ParticlesEnergySpectra/Decay/ElectronSpectrumDecay.pdf"); } //Gammas// TCanvas *GammaSpectrumDecay = new TCanvas("GammaSpectrumDecay", "Spectrum of the gammas created by the decays in the target"); TH1D *hGammaSpectrumDecay = (TH1D*) f->Get("H111;1"); if(hGammaSpectrumDecay->GetEntries() !=0) { hGammaSpectrumDecay->GetXaxis()->SetTitle("Energy (MeV)"); hGammaSpectrumDecay->GetYaxis()->SetTitle("N Gammas (MeV^{-1}.particle^{-1})"); hGammaSpectrumDecay->GetYaxis()->SetTitleOffset(1.2); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(hGammaSpectrumDecay,total_primaries); hGammaSpectrumDecay->Draw("H"); GammaSpectrumDecay->SetLogy(); GammaSpectrumDecay->Print("./Results/ParticlesEnergySpectra/Decay/GammaSpectrumDecay.pdf"); } //Neutrons// TCanvas *NeutronSpectrumDecay = new TCanvas("NeutronSpectrumDecay", "Spectrum of the neutrons created by the decays in the target"); TH1D *hNeutronSpectrumDecay = (TH1D*) f->Get("H112;1"); if(hNeutronSpectrumDecay->GetEntries() !=0) { hNeutronSpectrumDecay->GetXaxis()->SetTitle("Energy (MeV)"); hNeutronSpectrumDecay->GetYaxis()->SetTitle("N Gammas (MeV^{-1}.particle^{-1})"); hNeutronSpectrumDecay->GetYaxis()->SetTitleOffset(1.2); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(hNeutronSpectrumDecay,total_primaries); hNeutronSpectrumDecay->Draw("H"); NeutronSpectrumDecay->SetLogy(); NeutronSpectrumDecay->Print("./Results/ParticlesEnergySpectra/Decay/NeutronSpectrumBeam.pdf"); } //Nu_e// TCanvas *NuESpectrumDecay = new TCanvas("NuESpectrumDecay", "Spectrum of the Nu_e created by the decays in the target"); TH1D *hNuESpectrumDecay = (TH1D*) f->Get("H113;1"); if(hNuESpectrumDecay->GetEntries() !=0) { hNuESpectrumDecay->GetXaxis()->SetTitle("Energy (MeV)"); hNuESpectrumDecay->GetYaxis()->SetTitle("N Nu_{e} (MeV^{-1}.particle^{-1})"); hNuESpectrumDecay->GetYaxis()->SetTitleOffset(1.2); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(hNuESpectrumDecay,total_primaries); hNuESpectrumDecay->Draw("H"); NuESpectrumDecay->SetLogy(); NuESpectrumDecay->Print("./Results/ParticlesEnergySpectra/Decay/NuESpectrumDecay.pdf"); } //AntiNu_e// TCanvas *AntiNuESpectrumDecay = new TCanvas("AntiNuESpectrumDecay", "Spectrum of the Anti_Nu_e created by the decays in the target"); TH1D *hAntiNuESpectrumDecay = (TH1D*) f->Get("H114;1"); if(hAntiNuESpectrumDecay->GetEntries() !=0) { hAntiNuESpectrumDecay->GetXaxis()->SetTitle("Energy (MeV)"); hAntiNuESpectrumDecay->GetYaxis()->SetTitle("N AntiNu_{e} (MeV^{-1}.particle^{-1})"); hAntiNuESpectrumDecay->GetYaxis()->SetTitleOffset(1.2); //Normalize histogram per bin width and per incoming particle. norm_th1_per_bin_width_per_primaries(hAntiNuESpectrumDecay,total_primaries); hAntiNuESpectrumDecay->Draw("H"); AntiNuESpectrumDecay->SetLogy(); AntiNuESpectrumDecay->Print("./Results/ParticlesEnergySpectra/Decay/AntiNuESpectrumDecay.pdf"); } ///////////////// //2D histograms// ///////////////// TH2D *hBeamIntensityTarget = (TH2D*) f->Get("H20;1"); if(hBeamIntensityTarget->GetEntries()!=0) { TCanvas *BeamIntensityTarget = new TCanvas("BeamIntensityTarget", "Beam intensity (particle^{-1}.mm^{-2}) before hiting the target"); hBeamIntensityTarget->GetXaxis()->SetTitle("X axis (mm)"); hBeamIntensityTarget->GetYaxis()->SetTitle("Y axis (mm)"); hBeamIntensityTarget->SetTitle("Beam intensity (particle^{-1}.mm^{-2}) before hiting the target"); //Normalizing norm_th2_per_bin_width_per_primaries(hBeamIntensityTarget, total_primaries); hBeamIntensityTarget->GetXaxis()->SetMaxDigits(3); hBeamIntensityTarget->GetYaxis()->SetMaxDigits(3); hBeamIntensityTarget->GetZaxis()->SetMaxDigits(3); hBeamIntensityTarget->Draw("colz"); gStyle->SetOptStat(0); BeamIntensityTarget->Update(); BeamIntensityTarget->Print("./Results/BeamData/BeamIntensityTarget.pdf"); BeamIntensityTarget->Print("./Results/BeamData/BeamIntensityTarget.jpg"); } TH2D *hBeamIntensityFoil = (TH2D*) f->Get("H21;1"); if(hBeamIntensityFoil->GetEntries()!=0) { TCanvas *BeamIntensityFoil = new TCanvas("BeamIntensityFoil", "Beam intensity before hiting the foil"); hBeamIntensityFoil->GetXaxis()->SetTitle("X axis (mm)"); hBeamIntensityFoil->GetYaxis()->SetTitle("Y axis (mm)"); hBeamIntensityFoil->SetTitle("Beam intensity (particle^{-1}.mm^{-2}) before hiting the foil"); //Normalizing norm_th2_per_bin_width_per_primaries(hBeamIntensityFoil, total_primaries); hBeamIntensityFoil->GetXaxis()->SetMaxDigits(3); hBeamIntensityFoil->GetYaxis()->SetMaxDigits(3); hBeamIntensityFoil->GetZaxis()->SetMaxDigits(3); hBeamIntensityFoil->Draw("colz"); BeamIntensityFoil->Print("./Results/BeamData/BeamIntensityFoil.pdf"); } TH2D *hBeamIntensityOutTarget = (TH2D*) f->Get("H24;1"); if(hBeamIntensityOutTarget->GetEntries()!=0) { TCanvas *BeamIntensityOutTarget = new TCanvas("BeamIntensityOutTarget", "Beam intensity going out from the target"); hBeamIntensityOutTarget->GetXaxis()->SetTitle("X axis (mm)"); hBeamIntensityOutTarget->GetYaxis()->SetTitle("Y axis (mm)"); hBeamIntensityOutTarget->SetTitle("Beam intensity (particle^{-1}.mm^{-2}) after hiting the target"); hBeamIntensityOutTarget->Draw("colz"); //Normalizing norm_th2_per_bin_width_per_primaries(hBeamIntensityOutTarget, total_primaries); hBeamIntensityOutTarget->GetXaxis()->SetMaxDigits(3); hBeamIntensityOutTarget->GetYaxis()->SetMaxDigits(3); hBeamIntensityOutTarget->GetZaxis()->SetMaxDigits(3); BeamIntensityOutTarget->Print("./Results/BeamData/BeamIntensityOutTarget.pdf"); } TH2D *hRadioisotopeProduction = (TH2D*) f->Get("H22;1"); if(hRadioisotopeProduction->GetEntries()!=0) { TCanvas *RadioisotopeProduction = new TCanvas("RadioisotopeProduction", "Radioisotope production"); hRadioisotopeProduction->GetXaxis()->SetTitle("Z"); hRadioisotopeProduction->GetXaxis()->SetTitleOffset(1.2); hRadioisotopeProduction->GetYaxis()->SetTitle("A"); hRadioisotopeProduction->GetYaxis()->SetTitleOffset(1.3); hRadioisotopeProduction->GetZaxis()->SetTitle("N radioisotopes (particle^{-1}.mm^{-2})"); hRadioisotopeProduction->GetZaxis()->SetTitleOffset(1.3); hRadioisotopeProduction->SetTitle("Number of radioisotopes produced in the target (particle^{-1}.mm^{-2})"); //Normalizing norm_th2_per_bin_width_per_primaries(hRadioisotopeProduction, total_primaries); hRadioisotopeProduction->GetXaxis()->SetMaxDigits(3); hRadioisotopeProduction->GetYaxis()->SetMaxDigits(3); hRadioisotopeProduction->GetZaxis()->SetMaxDigits(3); hRadioisotopeProduction->Draw("lego2"); RadioisotopeProduction->SetLogz(); RadioisotopeProduction->Print("./Results/IsotopesProduction/RadioisotopeProduction.pdf"); RadioisotopeProduction->Print("./Results/IsotopesProduction/RadioisotopeProduction.jpg"); } TH2D *hEnergyDepth = (TH2D*) f->Get("H23;1"); if(hEnergyDepth->GetEntries()!=0) { TCanvas *EnergyDepth = new TCanvas("EnergyDepth", "Energy of the proton according to their depth in the target"); hEnergyDepth->GetXaxis()->SetTitle("Depth (mm)"); hEnergyDepth->GetYaxis()->SetTitle("Energy (MeV)"); hEnergyDepth->SetTitle("Energy of the proton according to their depth in the target (particle^{-1}.mm^{-1}.MeV^{-1})"); norm_th2_per_bin_width_per_primaries(hEnergyDepth, total_primaries); hEnergyDepth->GetXaxis()->SetMaxDigits(3); hEnergyDepth->GetYaxis()->SetMaxDigits(3); hEnergyDepth->GetZaxis()->SetMaxDigits(3); hEnergyDepth->Draw("colz"); EnergyDepth->SetLogz(); EnergyDepth->Print("./Results/BeamData/EnergyDepth.pdf"); } ///////////////////////////////////////// //Stable isotope production by the beam// ///////////////////////////////////////// //---------------------------------------------------------------// // Activity // //---------------------------------------------------------------// /* TCanvas *ActivityPrimary = new TCanvas("ActivityPerParentIsotope", "Activity in mCi per parent isotope, and total activity"); TH1D *hActivityPrimary = (TH1D*) f->Get("H12;1"); hActivityPrimary->GetXaxis()->Set(hActivityPrimary->GetEntries(),0.5,hActivityPrimary->GetEntries()+0.5); hActivityPrimary->GetXaxis()->SetTitle("Isotope"); hActivityPrimary->GetYaxis()->SetTitle("Activity (mCi)"); hActivityPrimary->Draw(); ActivityPrimary->SetLogy(); ActivityPrimary->Print("./Results/ActivityPerParentIsotope.pdf"); TCanvas *ActivityDaughter = new TCanvas("ActivityPerDaughterIsotope", "Activity in mCi per daughter isotope, and total activity"); hActivityDaughter = (TH1F*) h1DH118->Clone(); hActivityDaughter->GetXaxis()->Set(hActivityDaughter.GetEntries(),0.5,hActivityDaughter.GetEntries()+0.5); hActivityDaughter->GetXaxis()->SetTitle("Isotope"); hActivityDaughter->GetYaxis()->SetTitle("Activity (mCi)"); hActivityDaughter->Draw(); ActivityDaughter->SetLogy(); ActivityDaughter->Print("./Results/ActivityPerDaughterIsotope.pdf");*/ /* TCanvas *StableIsotopes = new TCanvas("StableIsotopes", "Production of stable isotopes in the target"); hStableIsotopes = (TH1F*) h1DH117->Clone(); hStableIsotopes->GetXaxis()->Set(hStableIsotopes->GetEntries(),0.5,hStableIsotopes->GetEntries()+0.5); hStableIsotopes->GetXaxis()->SetTitle("Stable Isotope"); hStableIsotopes->GetYaxis()->SetTitle("Yield"); hStableIsotopes->Draw(); StableIsotopes->SetLogy(); StableIsotopes->Print("./Results/IsotopesProduction/StableIsotopes.pdf"); */ /* ///////////////////// //Yield per isotope// ///////////////////// TCanvas *YieldParent = new TCanvas("YieldPerParentIsotope", "Yield per parent isotope"); hYieldParent = (TH1F*) h1DH14->Clone(); hYieldParent->GetXaxis()->Set(hYieldParent.GetEntries(),0.5,hYieldParent.GetEntries()+0.5); hYieldParent->GetXaxis()->SetTitle("Isotope"); hYieldParent->GetYaxis()->SetTitle("Yield"); hYieldParent->Draw(); YieldParent->SetLogy(); YieldParent->Print("./Results/YieldPerParentIsotope.pdf"); TCanvas *YieldDaughter = new TCanvas("YieldPerDaughterIsotope", "Yield per daughter isotope"); hYieldDaughter = (TH1F*) h1DH119->Clone(); hYieldDaughter->GetXaxis()->Set(hYieldDaughter.GetEntries(),0.5,hYieldDaughter.GetEntries()+0.5); hYieldDaughter->GetXaxis()->SetTitle("Isotope"); hYieldDaughter->GetYaxis()->SetTitle("Yield"); hYieldDaughter->Draw(); YieldDaughter->SetLogy(); YieldDaughter->Print("./Results/YieldPerDaughterIsotope.pdf"); TCanvas *ProductionPerSecParent = new TCanvas("ProductionPerSecParent", "Production per second per parent"); hProdPerSec = (TH1F*) h1DH123->Clone(); hProdPerSec->GetXaxis()->Set(hProdPerSec.GetEntries(),0.5,hProdPerSec.GetEntries()+0.5); hProdPerSec->GetXaxis()->SetTitle("Isotope"); hProdPerSec->GetYaxis()->SetTitle("Production of isotope per second"); hProdPerSec->Draw(); ProductionPerSecParent->SetLogy(); ProductionPerSecParent->Print("./Results/ProductionPerSec.pdf"); TCanvas *ProductionPerSecDaughter = new TCanvas("ProductionPerSecDaughter", "Production per second per of the parent of the isotopes"); hProdPerSecDaughter = (TH1F*) h1DH124->Clone(); hProdPerSecDaughter->GetXaxis()->Set(hProdPerSecDaughter.GetEntries(),0.5,hProdPerSecDaughter.GetEntries()+0.5); hProdPerSecDaughter->GetXaxis()->SetTitle("Isotope"); hProdPerSecDaughter->GetYaxis()->SetTitle("Production of the parent of the isotope per second"); hProdPerSecDaughter->Draw(); ProductionPerSecDaughter->SetLogy(); ProductionPerSecDaughter->Print("./Results/ProductionPerSecDaughter.pdf"); */ ////////////////// //Decay constant// ////////////////// /* TH1D *hYieldParent = (TH1D*) f->Get("H14;1"); hYieldParent->GetXaxis()->Set(hYieldParent->GetEntries(),0.5,hYieldParent->GetEntries()+0.5); TH1D *hYieldDaughter = (TH1D*) f->Get("H119"); hYieldDaughter->GetXaxis()->Set(hYieldDaughter->GetEntries(),0.5,hYieldDaughter->GetEntries()+0.5); TH1D *hProdPerSec = (TH1D*) f->Get("H123"); hProdPerSec->GetXaxis()->Set(hProdPerSec->GetEntries(),0.5,hProdPerSec->GetEntries()+0.5); TH1D *hProdPerSecDaughter = (TH1D*) f->Get("H124"); hProdPerSecDaughter->GetXaxis()->Set(hProdPerSecDaughter->GetEntries(),0.5,hProdPerSecDaughter->GetEntries()+0.5); TH1D *hConstantParent = (TH1D*) f->Get("H120;1"); hConstantParent->GetXaxis()->Set(hConstantParent->GetEntries(),0.5,hConstantParent->GetEntries()+0.5); TH1D *hConstantDaughter = (TH1D*) f->Get("H121;1"); hConstantDaughter->GetXaxis()->Set(hConstantDaughter->GetEntries(),0.5,hConstantDaughter->GetEntries()+0.5); TH1D *hConstantDaughterParent = (TH1D*) f->Get("H122;1"); hConstantDaughterParent->GetXaxis()->Set(hConstantDaughterParent->GetEntries(),0.5,hConstantDaughterParent->GetEntries()+0.5); */ ///////////////////////////// //Plots of theorical curves// ///////////////////////////// //---------------------------------------------------------------------------- // CASE OF PARENT ISOTOPES //---------------------------------------------------------------------------- vector name; //<---- name of the isotope vector hDecayConstant; //<---- in s-1 vector hHalfLifeTime; //<---- in h vector hProdPerSec; //<---- nuclei per sec vector hYieldParent; //<---- yield at the EOB vector hActivityParent; //<---- activity (mCi) at the EOB string s_tmp; double x_tmp; int i_tmp; bool isEoF = false; //------------------------ READING THE INPUTS G4output.open("Output_ParentIsotopes.txt"); for(int i=0;i<4;i++)getline(G4output,endLine); //<--- read header. while(!isEoF) { G4output >> s_tmp; getline(G4output,endLine); //<--- name of isotope isEoF = G4output.eof(); if(!isEoF) { name.push_back(s_tmp); getline(G4output,endLine); //number of isotopes in the simulation G4output >> x_tmp; getline(G4output,endLine); //<--- decay constant (s-1) hDecayConstant.push_back(x_tmp); G4output >> x_tmp; getline(G4output,endLine); //<--- half life time hHalfLifeTime.push_back(x_tmp); getline(G4output,endLine); //<--- process G4output >> x_tmp; getline(G4output,endLine); //<--- nuclei per sec hProdPerSec.push_back(x_tmp); G4output >> x_tmp; getline(G4output,endLine); //<--- yield EOB hYieldParent.push_back(x_tmp); G4output >> x_tmp; getline(G4output,endLine); //<--- activity EOB hActivityParent.push_back(x_tmp); getline(G4output,endLine); //<--- end of isotope case } } G4output.close(); //------------------------ CALCULATING THE YIELDS/ACTIVITIES const int size_parents = hYieldParent.size(); //---> Yield TF1* table[size_parents] ; TLegend* leg = new TLegend(0.85,0.35,0.95,0.95); double maximum; //---> Activity TF1* tableActivity [size_parents] ; TLegend* legActivity = new TLegend(0.85,0.35,0.95,0.95); double maximumActivity = 0; stringstream ssTotalActivity; for(int i=0;i" << tIrradiation << ")*" << yield << "*exp(-" << decayConstant << "*(x- " << tIrradiation <<"))"; //STRINGSTREAM FOR THE SATURATION ss1Yield << nucleiPerSec/decayConstant << "*(1 - exp(-" << decayConstant << "*x))"; //STRINGSTREAM FOR ACTIVITY ACCORDING TO TIME ssActivity << "(x<="<< tIrradiation << ")*" << conv*nucleiPerSec << "*(1 - exp(-" << decayConstant << "*x)) + (x>" << tIrradiation << ")*" << conv*decayConstant*yield << "*exp(-" << decayConstant << "*(x- " << tIrradiation <<"))"; //STRINGSTREAM FOR ACTIVITY SATURATION ss1Activity << conv*nucleiPerSec << "*(1 - exp(-" << decayConstant << "*x))"; //TOTAL ACTIVITY if(halfLifeTime > halfLifeLimit) { if(i == 0){ ssTotalActivity << "(x<="<< tIrradiation << ")*" << conv*nucleiPerSec << "*(1 - exp(-" << decayConstant << "*x)) + (x>" << tIrradiation << ")*" << conv*decayConstant*yield << "*exp(-" << decayConstant << "*(x- " << tIrradiation <<"))"; } if(i > 0){ ssTotalActivity << " + (x<="<< tIrradiation << ")*" << conv*nucleiPerSec << "*(1 - exp(-" << decayConstant << "*x)) + (x>" << tIrradiation << ")*" << conv*decayConstant*yield << "*exp(-" << decayConstant << "*(x- " << tIrradiation <<"))"; } } double max; //PLOT OF NUCLEI PRODUCTION TF1 *fProd = new TF1(titleHisto.str().c_str(),ssYield.str().c_str(),tMin,tMax); fProd->SetTitle(titleHisto.str().c_str()); fProd->GetXaxis()->SetTitle("Time (hour)"); fProd->GetYaxis()->SetTitle("Number of nuclei"); max = fProd->GetMaximum(); if(max>maximum){ maximum = max;}; TF1 *fActivity = new TF1(titleHisto.str().c_str(),ssActivity.str().c_str(),tMin,tMax); fActivity->SetTitle(titleHisto.str().c_str()); fActivity->GetXaxis()->SetTitle("Time (hour)"); fActivity->GetYaxis()->SetTitle("Activity (mCi)"); max = fActivity->GetMaximum(); if(max>maximumActivity){ maximumActivity = max;}; leg->AddEntry(fProd,titleLeg.str().c_str()); table[i]=fProd; legActivity->AddEntry(fActivity,titleLeg.str().c_str()); tableActivity[i]=fActivity; //---->Plotting yield as a function of time TCanvas *canvasYield = new TCanvas(titleCanvas.str().c_str(),titleCanvas.str().c_str()); if(halfLifeTime > halfLifeLimit) //has a life time larger than one minute to plot outputs. { fProd->Draw(); stringstream saveName; saveName << "./Results/IsotopesProduction/YieldOf" << nameIsotope << ".pdf"; canvasYield->Print(saveName.str().c_str()); } //---->Plotting activity as a function of time TCanvas *canvasActivity = new TCanvas(titleCanvas.str().c_str(),titleCanvas.str().c_str()); if(halfLifeTime > halfLifeLimit) //has a life time larger than one minute to plot outputs. { fActivity->Draw(); stringstream saveName; saveName << "./Results/IsotopesProduction/ActivityOf" << nameIsotope << ".pdf"; canvasActivity->Print(saveName.str().c_str()); } //PLOT OF SATURATION CURVES stringstream titleCanvas1; stringstream titleHisto1; titleHisto1 << nameIsotope << " saturation" ; titleCanvas1 << nameIsotope << " Saturation"; TCanvas *canvasSaturationYield = new TCanvas(titleCanvas1.str().c_str(),titleCanvas1.str().c_str()); TF1 *fSaturationYield = new TF1(titleHisto1.str().c_str(),ss1Yield.str().c_str(),tMin,timeSaturationCalculation); fSaturationYield->SetTitle(titleHisto1.str().c_str()); fSaturationYield->GetXaxis()->SetTitle("Time (hour)"); fSaturationYield->GetYaxis()->SetTitle("Number of nuclei"); fSaturationYield->Draw(); stringstream saveName1Yield; saveName1Yield << "./Results/IsotopesProduction/SaturationYieldOf" << nameIsotope << ".pdf"; canvasSaturationYield->Print(saveName1Yield.str().c_str()); TCanvas *canvasSaturationActivity = new TCanvas(titleCanvas1.str().c_str(),titleCanvas1.str().c_str()); TF1 *fSaturationActivity = new TF1(titleHisto1.str().c_str(),ss1Activity.str().c_str(),tMin,timeSaturationCalculation); fSaturationActivity->SetTitle(titleHisto1.str().c_str()); fSaturationActivity->GetXaxis()->SetTitle("Time (hour)"); fSaturationActivity->GetYaxis()->SetTitle("Activity (mCi)"); fSaturationActivity->Draw(); stringstream saveName1Activity; saveName1Activity << "./Results/IsotopesProduction/ActivitiySaturationOf" << nameIsotope << ".pdf"; canvasSaturationActivity->Print(saveName1Activity.str().c_str()); } //------------------------ PLOT ALL YIELDS ON THE SAME CANVAS TCanvas* productionGraph = new TCanvas("ProductionOfIsotopes", "Production of isotopes"); for(int i=0; i halfLifeLimit) { int color = i+2; //<-- color to plot. if(color == 10) color = 35; TF1* histo = (TF1*)table[i]; histo->GetYaxis()->SetRangeUser(0.,maximum*1.2); histo->SetTitle("Production of isotopes"); histo->SetLineColor(color); histo->SetNpx(1000); if(i==0)histo->Draw(); else histo->Draw("][sames"); } } leg->Draw("C,same"); productionGraph->SetGridy(); productionGraph->SetTicky(); productionGraph->SetLogy(); productionGraph->SetTitle("Radioisotope production"); productionGraph->Print("./Results/IsotopesProduction/Yield.pdf"); productionGraph->Print("./Results/IsotopesProduction/Yield.jpg"); //------------------------ PLOT ALL YIELDS ON THE SAME CANVAS TCanvas* ActivityGraph = new TCanvas("ActivityOfIsotopes", "Activity of isotopes"); TF1* histoActivity = (TF1*)tableActivity[0]; histoActivity->SetLineColor(2); histoActivity->GetYaxis()->SetRangeUser(0.,maximumActivity*1.2); histoActivity->SetTitle("Activity of isotopes"); histoActivity->Draw(); for(int i=1; i halfLifeLimit) { int color = i+2; //<-- color to plot. if(color == 10) color = 35; TF1* histo = (TF1*)tableActivity[i]; histo->GetYaxis()->SetRangeUser(0.,maximumActivity*1.2); histo->SetTitle("Activity of isotopes"); histo->SetLineColor(color); histo->SetNpx(1000); if(i==0) histo->Draw(); else histo->Draw("][sames"); } } legActivity->Draw("same"); ActivityGraph->SetGridy(); ActivityGraph->SetTicky(); ActivityGraph->SetLogy(); ActivityGraph->Print("./Results/IsotopesProduction/Activity.pdf"); ActivityGraph->Print("./Results/IsotopesProduction/Activity.jpg"); TCanvas* TotalActivityGraph = new TCanvas("TotalActivity", "Total Activity"); TF1 *fActivity = new TF1("TotalActivity",ssTotalActivity.str().c_str(),tMin,tMax); fActivity->SetTitle("Sum of the activity of each isotope"); fActivity->GetXaxis()->SetTitle("Time (hour)"); fActivity->GetYaxis()->SetTitle("Activity (mCi)"); fActivity->Draw(); TotalActivityGraph->SetGridy(); TotalActivityGraph->SetTicky(); TotalActivityGraph->SetLogy(); TotalActivityGraph->Print("./Results/IsotopesProduction/TotalActivity.pdf"); //---------------------------------------------------------------------------- // CASE OF DAUGHTER ISOTOPES //---------------------------------------------------------------------------- vector nameParent; //<---- name of the isotope vector nameDaughter; //<---- name of the isotope vector hDecayConstantParent; //<---- in s-1 vector hDecayConstantDaughter; //<---- in s-1 vector hHalfLifeTimeParent; //<---- in h vector hHalfLifeTimeDaughter; //<---- in h vector hProdPerSecDecay; //<---- nuclei per sec vector hYieldDecay; //<---- yield at the EOB vector hActivityDecay; //<---- activity (mCi) at the EOB //------------------------ READING THE INPUTS G4output.open("Output_DaughterIsotopes.txt"); isEoF=false; for(int i=0;i<5;i++)getline(G4output,endLine); //<--- read header. while(!isEoF) { G4output >> s_tmp; getline(G4output,endLine); //<--- name of daughter isotope isEoF = G4output.eof(); if(!isEoF) { nameDaughter.push_back(s_tmp); //cout << s_tmp << " + " << endLine << endl; G4output >> s_tmp; getline(G4output,endLine); //<--- name of parent isotope nameParent.push_back(s_tmp); //cout << s_tmp << " + " << endLine << endl; G4output >> x_tmp; getline(G4output,endLine); //<--- decay constant (s-1) daughter hDecayConstantDaughter.push_back(x_tmp); //cout << x_tmp << " + " << endLine << endl; G4output >> x_tmp; getline(G4output,endLine); //<--- decay constant (s-1) parent hDecayConstantParent.push_back(x_tmp); //cout << x_tmp << " + " << endLine << endl; G4output >> x_tmp; getline(G4output,endLine); //<--- half life time hHalfLifeTimeDaughter.push_back(x_tmp); //cout << x_tmp << " + " << endLine << endl; G4output >> x_tmp; getline(G4output,endLine); //<--- half life time hHalfLifeTimeParent.push_back(x_tmp); //cout << x_tmp << " + " << endLine << endl; G4output >> x_tmp; getline(G4output,endLine); //<--- nuclei per sec hProdPerSecDecay.push_back(x_tmp); //cout << x_tmp << " + " << endLine << endl; G4output >> x_tmp; getline(G4output,endLine); //<--- yield EOB hYieldDecay.push_back(x_tmp); //cout << x_tmp << " + " << endLine << endl; G4output >> x_tmp; getline(G4output,endLine); //<--- activity EOB hActivityDecay.push_back(x_tmp); //cout << x_tmp << " + " << endLine << endl; getline(G4output,endLine); //<--- end of isotope case //getchar(); } } G4output.close(); //------------------------ CALCULATING THE YIELDS/ACTIVITIES for(int i=1;i<=hDecayConstantDaughter.size();i++){ string nameIsotope = nameDaughter[i]; double yieldEOBDaughter = hYieldDecay[i]; double decayConstantDaughter = hDecayConstantDaughter[i]*3600.; double decayConstantParent = hDecayConstantParent[i]*3600; double halfLifeDaughter = hHalfLifeTimeDaughter[i]*3600.; double halfLifeParent = hHalfLifeTimeParent[i]*3600; double nucleiPerSec = hProdPerSecDecay[i]*3600.; double yieldEOBParent = nucleiPerSec/decayConstantParent*(1-exp(-decayConstantParent*tIrradiation)); if(halfLifeDaughter > halfLifeLimit && halfLifeParent > halfLifeLimit){ stringstream titleCanvas; stringstream titleHisto; titleCanvas << nameIsotope << " Decay"; titleHisto << nameIsotope << " Decay" ; double yieldEOBcalc = nucleiPerSec*((1-exp(-decayConstantDaughter*tIrradiation))/decayConstantDaughter + (exp(-decayConstantDaughter*tIrradiation)-exp(-decayConstantParent*tIrradiation))/(decayConstantDaughter - decayConstantParent)); cout << "Isotope : " << nameIsotope << " with yield at the EOB " << yieldEOBDaughter << " calculation : " << yieldEOBcalc << " decay constant : " << decayConstantDaughter << " parent decay constant : " << decayConstantParent << " nucleiPerSec of the parent " << nucleiPerSec << " yieldEOBParent " << yieldEOBParent << endl; TCanvas *canvasYield = new TCanvas(titleCanvas.str().c_str(),titleCanvas.str().c_str()); stringstream ss; ss << "(x<="<< tIrradiation << ")*" << nucleiPerSec << "*((1 - exp(-" << decayConstantDaughter << "*x))/" << decayConstantDaughter << " + (exp(-" << decayConstantDaughter << "*x)-exp(-" << decayConstantParent << "*x))/(" << decayConstantDaughter-decayConstantParent << "))+ (x>" << tIrradiation << ")*" << yieldEOBcalc << "*exp(-" << decayConstantDaughter << "*(x - " << tIrradiation << ")) + " << decayConstantParent*yieldEOBParent/(decayConstantDaughter-decayConstantParent) << "*(exp(- " << decayConstantParent << "*(x - " << tIrradiation << ")) - exp(- " << decayConstantDaughter << "*(x-" << tIrradiation << ")))"; TF1 *fProd = new TF1(titleHisto.str().c_str(),ss.str().c_str(),tMin, tMax); fProd->SetTitle(titleHisto.str().c_str()); fProd->GetXaxis()->SetTitle("Time (hour)"); fProd->GetYaxis()->SetTitle("Number of nuclei"); } } f->Close(); results.close(); }