327 lines
11 KiB
C++
327 lines
11 KiB
C++
// -------------------------------------------------------------------
|
|
// -------------------------------------------------------------------
|
|
//
|
|
// *********************************************************************
|
|
// To execute this macro under ROOT,
|
|
// 1 - launch ROOT (usually type 'root' at your machine's prompt)
|
|
// 2 - type '.X plot.C' at the ROOT session prompt
|
|
// Written by S. Incerti, 25/01/2025
|
|
// *********************************************************************
|
|
{
|
|
gROOT->Reset();
|
|
gROOT->SetStyle("Plain");
|
|
gStyle->SetOptStat(0000);
|
|
gStyle->SetPalette(1);
|
|
|
|
auto c1 = new TCanvas ("c1","",20,20,1200,900);
|
|
c1->Divide(4,3);
|
|
|
|
//------------------------------
|
|
// Original phantom file view
|
|
//------------------------------
|
|
|
|
FILE * fp = fopen("phantoms/phantom.dat","r");
|
|
|
|
Double_t X, Y, Z, mat, tmp;
|
|
char unit[100];
|
|
Double_t voxelSizeX, voxelSizeY, voxelSizeZ;
|
|
Long_t numberVoxTot, numberVoxRed, numberVoxGreen, numberVoxBlue;
|
|
|
|
TNtuple *ntuplePhantom = new TNtuple("PHANTOM","ntuple","X:Y:Z:mat");
|
|
|
|
Long_t nlines=0;
|
|
Long_t ncols=0;
|
|
|
|
while (1)
|
|
{
|
|
if ( nlines == 0 ) ncols = fscanf(fp,"%ld %ld %ld %ld",&numberVoxTot,&numberVoxRed,&numberVoxGreen,&numberVoxBlue);
|
|
if ( nlines == 1 ) ncols = fscanf(fp,"%lf %lf %lf %s",&tmp,&tmp,&tmp,unit);
|
|
if ( nlines == 2 ) ncols = fscanf(fp,"%lf %lf %lf %s",&voxelSizeX,&voxelSizeY,&voxelSizeZ, unit);
|
|
if ( nlines >= 3 ) ncols = fscanf(fp,"%lf %lf %lf %lf", &X, &Y, &Z, &mat);
|
|
//cout << X << " " << Y << " " << Z << " " << mat << endl;
|
|
if (ncols < 0) break;
|
|
ntuplePhantom->Fill(X,Y,Z,mat);
|
|
nlines++;
|
|
}
|
|
fclose(fp);
|
|
|
|
c1->cd(1);
|
|
|
|
ntuplePhantom->SetMarkerColor(1);
|
|
ntuplePhantom->Draw("Y:X");
|
|
// RED
|
|
ntuplePhantom->SetMarkerColor(2);
|
|
ntuplePhantom->Draw("Y:X","mat==1","same");
|
|
// GREEN
|
|
ntuplePhantom->SetMarkerColor(3);
|
|
ntuplePhantom->Draw("Y:X","mat==2","same");
|
|
// BLUE
|
|
ntuplePhantom->SetMarkerColor(4);
|
|
ntuplePhantom->Draw("Y:X","mat==3","same");
|
|
//
|
|
TH2F *htemp = (TH2F*)gPad->GetPrimitive("htemp");
|
|
htemp->GetXaxis()->SetTitle("X (microns)");
|
|
htemp->GetYaxis()->SetTitle("Y (mirons)");
|
|
htemp->GetXaxis()->SetLabelSize(0.025);
|
|
htemp->GetYaxis()->SetLabelSize(0.025);
|
|
htemp->GetXaxis()->SetTitleSize(0.035);
|
|
htemp->GetYaxis()->SetTitleSize(0.035);
|
|
htemp->GetXaxis()->SetTitleOffset(1.4);
|
|
htemp->GetYaxis()->SetTitleOffset(1.4);
|
|
htemp->SetTitle("RGB phantom YX view");
|
|
|
|
c1->cd(5);
|
|
|
|
ntuplePhantom->SetMarkerColor(1);
|
|
ntuplePhantom->Draw("Y:Z");
|
|
// RED
|
|
ntuplePhantom->SetMarkerColor(2);
|
|
ntuplePhantom->Draw("Y:Z","mat==1","same");
|
|
// GREEN
|
|
ntuplePhantom->SetMarkerColor(3);
|
|
ntuplePhantom->Draw("Y:Z","mat==2","same");
|
|
// BLUE
|
|
ntuplePhantom->SetMarkerColor(4);
|
|
ntuplePhantom->Draw("Y:Z","mat==3","same");
|
|
//
|
|
TH2F *htempBis = (TH2F*)gPad->GetPrimitive("htemp");
|
|
htempBis->GetXaxis()->SetTitle("Z (microns)");
|
|
htempBis->GetYaxis()->SetTitle("Y (mirons)");
|
|
htempBis->GetXaxis()->SetLabelSize(0.025);
|
|
htempBis->GetYaxis()->SetLabelSize(0.025);
|
|
htempBis->GetXaxis()->SetTitleSize(0.035);
|
|
htempBis->GetYaxis()->SetTitleSize(0.035);
|
|
htempBis->GetXaxis()->SetTitleOffset(1.4);
|
|
htempBis->GetYaxis()->SetTitleOffset(1.4);
|
|
htempBis->SetTitle("RGB phantom YZ view");
|
|
|
|
c1->cd(9);
|
|
|
|
ntuplePhantom->SetMarkerColor(1);
|
|
ntuplePhantom->Draw("X:Z");
|
|
// RED
|
|
ntuplePhantom->SetMarkerColor(2);
|
|
ntuplePhantom->Draw("X:Z","mat==1","same");
|
|
// GREEN
|
|
ntuplePhantom->SetMarkerColor(3);
|
|
ntuplePhantom->Draw("X:Z","mat==2","same");
|
|
// BLUE
|
|
ntuplePhantom->SetMarkerColor(4);
|
|
ntuplePhantom->Draw("X:Z","mat==3","same");
|
|
//
|
|
TH2F *htempTer = (TH2F*)gPad->GetPrimitive("htemp");
|
|
htempTer->GetXaxis()->SetTitle("Z (microns)");
|
|
htempTer->GetYaxis()->SetTitle("X (mirons)");
|
|
htempTer->GetXaxis()->SetLabelSize(0.025);
|
|
htempTer->GetYaxis()->SetLabelSize(0.025);
|
|
htempTer->GetXaxis()->SetTitleSize(0.035);
|
|
htempTer->GetYaxis()->SetTitleSize(0.035);
|
|
htempTer->GetXaxis()->SetTitleOffset(1.4);
|
|
htempTer->GetYaxis()->SetTitleOffset(1.4);
|
|
htempTer->SetTitle("RGB phantom XZ view");
|
|
|
|
//------------------
|
|
// Read ROOT file
|
|
//------------------
|
|
|
|
TFile *f = new TFile ("phantom.root");
|
|
|
|
TNtuple* ntuple1;
|
|
TNtuple* ntuple2;
|
|
TNtuple* ntuple3;
|
|
|
|
ntuple1 = (TNtuple*)f->Get("ntuple1");
|
|
ntuple2 = (TNtuple*)f->Get("ntuple2");
|
|
ntuple3 = (TNtuple*)f->Get("ntuple3");
|
|
|
|
Double_t x, y, z, energy, dose;
|
|
Int_t voxelID;
|
|
|
|
ntuple1->SetBranchAddress("x",&x);
|
|
ntuple1->SetBranchAddress("y",&y);
|
|
ntuple1->SetBranchAddress("z",&z);
|
|
ntuple1->SetBranchAddress("energy",&energy);
|
|
ntuple1->SetBranchAddress("dose",&dose);
|
|
ntuple1->SetBranchAddress("voxelID",&voxelID);
|
|
|
|
ntuple2->SetBranchAddress("x",&x);
|
|
ntuple2->SetBranchAddress("y",&y);
|
|
ntuple2->SetBranchAddress("z",&z);
|
|
ntuple2->SetBranchAddress("energy",&energy);
|
|
ntuple2->SetBranchAddress("dose",&dose);
|
|
ntuple2->SetBranchAddress("voxelID",&voxelID);
|
|
|
|
ntuple3->SetBranchAddress("x",&x);
|
|
ntuple3->SetBranchAddress("y",&y);
|
|
ntuple3->SetBranchAddress("z",&z);
|
|
ntuple3->SetBranchAddress("energy",&energy);
|
|
ntuple3->SetBranchAddress("dose",&dose);
|
|
ntuple3->SetBranchAddress("voxelID",&voxelID);
|
|
|
|
//---------------------------------
|
|
// Absorbed energy distributions
|
|
//---------------------------------
|
|
|
|
c1->cd(2);
|
|
gPad->SetLogy();
|
|
ntuple1->Draw("energy","energy>0");
|
|
TH1F *htemp2 = (TH1F*)gPad->GetPrimitive("htemp");
|
|
htemp2->GetXaxis()->SetTitle("Energy (keV)");
|
|
htemp2->GetXaxis()->SetLabelSize(0.025);
|
|
htemp2->GetXaxis()->SetTitleSize(0.035);
|
|
htemp2->GetXaxis()->SetTitleOffset(1.4);
|
|
htemp2->SetTitle("RED voxel energy");
|
|
htemp2->SetFillStyle(1001);
|
|
htemp2->SetFillColor(2);
|
|
|
|
c1->cd(6);
|
|
gPad->SetLogy();
|
|
ntuple2->Draw("energy","energy>0");
|
|
TH1F *htemp3 = (TH1F*)gPad->GetPrimitive("htemp");
|
|
htemp3->GetXaxis()->SetTitle("Energy (keV)");
|
|
htemp3->GetXaxis()->SetLabelSize(0.025);
|
|
htemp3->GetXaxis()->SetTitleSize(0.035);
|
|
htemp3->GetXaxis()->SetTitleOffset(1.4);
|
|
htemp3->SetTitle("GREEN voxel energy");
|
|
htemp3->SetFillStyle(1001);
|
|
htemp3->SetFillColor(3);
|
|
|
|
c1->cd(10);
|
|
gPad->SetLogy();
|
|
ntuple3->Draw("energy","energy>0");
|
|
TH1F *htemp4 = (TH1F*)gPad->GetPrimitive("htemp");
|
|
htemp4->GetXaxis()->SetTitle("Energy (keV)");
|
|
htemp4->GetXaxis()->SetLabelSize(0.025);
|
|
htemp4->GetXaxis()->SetTitleSize(0.035);
|
|
htemp4->GetXaxis()->SetTitleOffset(1.4);
|
|
htemp4->SetTitle("BLUE voxel energy");
|
|
htemp4->SetFillStyle(1001);
|
|
htemp4->SetFillColor(4);
|
|
|
|
//------------------------------
|
|
// Map of energy distribution
|
|
//------------------------------
|
|
|
|
c1->cd(3);
|
|
TH2F *histNrjRed = new TH2F("histNrjRed","histNrjRed",100,0,800,100,0,800);
|
|
ntuple1->Draw("y:x>>histNrjRed","energy","contz");
|
|
gPad->SetLogz();
|
|
histNrjRed->Draw("contz");
|
|
histNrjRed->GetXaxis()->SetTitle("X (microns)");
|
|
histNrjRed->GetYaxis()->SetTitle("Y (mirons)");
|
|
histNrjRed->GetZaxis()->SetTitle("Energy (keV)");
|
|
histNrjRed->GetXaxis()->SetLabelSize(0.025);
|
|
histNrjRed->GetYaxis()->SetLabelSize(0.025);
|
|
histNrjRed->GetZaxis()->SetLabelSize(0.025);
|
|
histNrjRed->GetXaxis()->SetTitleSize(0.035);
|
|
histNrjRed->GetYaxis()->SetTitleSize(0.035);
|
|
histNrjRed->GetZaxis()->SetTitleSize(0.035);
|
|
histNrjRed->GetXaxis()->SetTitleOffset(1.4);
|
|
histNrjRed->GetYaxis()->SetTitleOffset(1.4);
|
|
histNrjRed->GetZaxis()->SetTitleOffset(.6);
|
|
histNrjRed->SetTitle("Energy map for RED voxels");
|
|
|
|
c1->cd(7);
|
|
TH2F *histNrjGreen = new TH2F("histNrjGreen","histNrjGreen",100,0,800,100,0,800);
|
|
ntuple2->Draw("y:x>>histNrjGreen","energy","contz");
|
|
gPad->SetLogz();
|
|
histNrjGreen->Draw("contz");
|
|
histNrjGreen->GetXaxis()->SetTitle("X (microns)");
|
|
histNrjGreen->GetYaxis()->SetTitle("Y (mirons)");
|
|
histNrjGreen->GetZaxis()->SetTitle("Energy (keV)");
|
|
histNrjGreen->GetXaxis()->SetLabelSize(0.025);
|
|
histNrjGreen->GetYaxis()->SetLabelSize(0.025);
|
|
histNrjGreen->GetZaxis()->SetLabelSize(0.025);
|
|
histNrjGreen->GetXaxis()->SetTitleSize(0.035);
|
|
histNrjGreen->GetYaxis()->SetTitleSize(0.035);
|
|
histNrjGreen->GetZaxis()->SetTitleSize(0.035);
|
|
histNrjGreen->GetXaxis()->SetTitleOffset(1.4);
|
|
histNrjGreen->GetYaxis()->SetTitleOffset(1.4);
|
|
histNrjGreen->GetZaxis()->SetTitleOffset(.6);
|
|
histNrjGreen->SetTitle("Energy map for GREEN voxels");
|
|
|
|
c1->cd(11);
|
|
TH2F *histNrjBlue = new TH2F("histNrjBlue","histNrjBlue",100,0,800,100,0,800);
|
|
ntuple3->Draw("y:x>>histNrjBlue","energy","contz");
|
|
gPad->SetLogz();
|
|
histNrjBlue->Draw("contz");
|
|
histNrjBlue->GetXaxis()->SetTitle("X (microns)");
|
|
histNrjBlue->GetYaxis()->SetTitle("Y (mirons)");
|
|
histNrjBlue->GetZaxis()->SetTitle("Energy (keV)");
|
|
histNrjBlue->GetXaxis()->SetLabelSize(0.025);
|
|
histNrjBlue->GetYaxis()->SetLabelSize(0.025);
|
|
histNrjBlue->GetZaxis()->SetLabelSize(0.025);
|
|
histNrjBlue->GetXaxis()->SetTitleSize(0.035);
|
|
histNrjBlue->GetYaxis()->SetTitleSize(0.035);
|
|
histNrjBlue->GetZaxis()->SetTitleSize(0.035);
|
|
histNrjBlue->GetXaxis()->SetTitleOffset(1.4);
|
|
histNrjBlue->GetYaxis()->SetTitleOffset(1.4);
|
|
histNrjBlue->GetZaxis()->SetTitleOffset(.6);
|
|
histNrjBlue->SetTitle("Energy map for BLUE voxels");
|
|
|
|
//----------------------------
|
|
// Map of dose distribution
|
|
//----------------------------
|
|
|
|
c1->cd(4);
|
|
TH2F *histDoseRed = new TH2F("histDoseRed","histDoseRed",100,0,800,100,0,800);
|
|
// WARNING : dose scaling to mGy
|
|
ntuple1->Draw("y:x>>histDoseRed","dose/1000","contz");
|
|
//gPad->SetLogz();
|
|
histDoseRed->Draw("contz");
|
|
histDoseRed->GetXaxis()->SetTitle("X (microns)");
|
|
histDoseRed->GetYaxis()->SetTitle("Y (mirons)");
|
|
histDoseRed->GetZaxis()->SetTitle("Dose (mGy)");
|
|
histDoseRed->GetXaxis()->SetLabelSize(0.025);
|
|
histDoseRed->GetYaxis()->SetLabelSize(0.025);
|
|
histDoseRed->GetZaxis()->SetLabelSize(0.025);
|
|
histDoseRed->GetXaxis()->SetTitleSize(0.035);
|
|
histDoseRed->GetYaxis()->SetTitleSize(0.035);
|
|
histDoseRed->GetZaxis()->SetTitleSize(0.035);
|
|
histDoseRed->GetXaxis()->SetTitleOffset(1.4);
|
|
histDoseRed->GetYaxis()->SetTitleOffset(1.4);
|
|
histDoseRed->GetZaxis()->SetTitleOffset(.6);
|
|
histDoseRed->SetTitle("Dose map for RED voxels");
|
|
|
|
c1->cd(8);
|
|
TH2F *histDoseGreen = new TH2F("histDoseGreen","histDoseGreen",100,0,800,100,0,800);
|
|
// WARNING : dose scaling to mGy
|
|
ntuple2->Draw("y:x>>histDoseGreen","dose/1000","contz");
|
|
//gPad->SetLogz();
|
|
histDoseGreen->Draw("contz");
|
|
histDoseGreen->GetXaxis()->SetTitle("X (microns)");
|
|
histDoseGreen->GetYaxis()->SetTitle("Y (mirons)");
|
|
histDoseGreen->GetZaxis()->SetTitle("Dose (mGy)");
|
|
histDoseGreen->GetXaxis()->SetLabelSize(0.025);
|
|
histDoseGreen->GetYaxis()->SetLabelSize(0.025);
|
|
histDoseGreen->GetZaxis()->SetLabelSize(0.025);
|
|
histDoseGreen->GetXaxis()->SetTitleSize(0.035);
|
|
histDoseGreen->GetYaxis()->SetTitleSize(0.035);
|
|
histDoseGreen->GetZaxis()->SetTitleSize(0.035);
|
|
histDoseGreen->GetXaxis()->SetTitleOffset(1.4);
|
|
histDoseGreen->GetYaxis()->SetTitleOffset(1.4);
|
|
histDoseGreen->GetZaxis()->SetTitleOffset(.6);
|
|
histDoseGreen->SetTitle("Dose map for GREEN voxels");
|
|
|
|
c1->cd(12);
|
|
TH2F *histDoseBlue = new TH2F("histDoseBlue","histDoseBlue",100,0,800,100,0,800);
|
|
// WARNING : dose scaling to mGy
|
|
ntuple3->Draw("y:x>>histDoseBlue","dose/1000","contz");
|
|
//gPad->SetLogz();
|
|
histDoseBlue->Draw("contz");
|
|
histDoseBlue->GetXaxis()->SetTitle("X (microns)");
|
|
histDoseBlue->GetYaxis()->SetTitle("Y (mirons)");
|
|
histDoseBlue->GetZaxis()->SetTitle("Dose (mGy)");
|
|
histDoseBlue->GetXaxis()->SetLabelSize(0.025);
|
|
histDoseBlue->GetYaxis()->SetLabelSize(0.025);
|
|
histDoseBlue->GetZaxis()->SetLabelSize(0.025);
|
|
histDoseBlue->GetXaxis()->SetTitleSize(0.035);
|
|
histDoseBlue->GetYaxis()->SetTitleSize(0.035);
|
|
histDoseBlue->GetZaxis()->SetTitleSize(0.035);
|
|
histDoseBlue->GetXaxis()->SetTitleOffset(1.4);
|
|
histDoseBlue->GetYaxis()->SetTitleOffset(1.4);
|
|
histDoseBlue->GetZaxis()->SetTitleOffset(.6);
|
|
histDoseBlue->SetTitle("Dose map for BLUE voxels");
|
|
|
|
}
|