3 #include "TInterpreter.h"
5 #include "TApplication.h"
24 TString
dir = gSystem->UnixPathName(gInterpreter->GetCurrentMacroName());
25 dir.ReplaceAll(
"fragmentEnergy.C",
"");
26 dir.ReplaceAll(
"/./",
"/");
28 TString macroPath(gROOT->GetMacroPath());
29 gROOT->SetMacroPath(macroPath +
":RootScripts/iaeaBenchmark");
34 in.open(Form(
"experimentalData/iaeaBenchmark/fragmentEnergySpctra279mmWater0deg.dat",dir.Data()));
37 TFile *
f =
new TFile(
"fragmentEnergy.root",
"RECREATE");
38 TNtuple *
ntuple =
new TNtuple(
"ntuple",
"Data from ascii file",
"Energy:He:B:H:Li:Be");
42 Char_t n1[6], n2[2], n3[2], n4[2], n5[2], n6[2];
43 in >> DATAFLAG >> NDATA ;
44 in >> n1 >> n2 >> n3 >> n4 >> n5 >> n6;
46 cout <<n1<<
" "<<n2<<
" "<<n3<<
" "<<n4<<
" "<<n5<<
" "<<n6<<
"\n";
48 in >> f1 >> f2 >> f3 >>f4 >> f5 >> f6;
49 if (!in.good())
break;
50 if (nlines < 500 )
printf(
"%f %0.2f %0.2f %0.2f %0.2f %0.2f \n",f1,f2,f3,f4,f5,f6);
51 ntuple->Fill(f1,f2,f3,f4,f5,f6);
55 printf(
" found %d points\n",nlines);
58 TFile *MCData = TFile::Open(
"IAEA_15.9.root");
59 TH1F* MC_helium = (TH1F*)MCData->Get(
"heliumEnergyAfterPhantom");
60 TH1F* MC_hydrogen = (TH1F*)MCData->Get(
"hydrogenEnergyAfterPhantom");
62 TNtuple *fragments = (TNtuple*) MCData->Get(
"fragmentNtuple");
65 TNtuple *metadata = (TNtuple*) MCData->Get(
"metaData");
66 Float_t events, detectorDistance,waterThickness,beamEnergy,energyError,phantomCenterDistance;
67 metadata->SetBranchAddress(
"events",&events);
68 metadata->SetBranchAddress(
"waterThickness",&waterThickness);
69 metadata->SetBranchAddress(
"detectorDistance",&detectorDistance);
70 metadata->SetBranchAddress(
"beamEnergy",&beamEnergy);
71 metadata->SetBranchAddress(
"energyError",&energyError);
72 metadata->SetBranchAddress(
"phantomCenterDistance",&phantomCenterDistance);
73 metadata->GetEntry(0);
76 Double_t scatteringDistance = detectorDistance - phantomCenterDistance;
82 fragments->SetLineColor(kRed);
83 fragments->SetMarkerStyle(22);
86 TH1F* posYHisto =
new TH1F(
"vertical",
"Vertical distribution of beam",200,-2.,2.);
87 TH1F* posZHisto =
new TH1F(
"horizontal",
"horizontal distribution of beam",200,-2.,2.);
88 TH2F* posHisto =
new TH2F(
"posHisto",
"Distribution of beam",200,-2.,2.,200,-2.,2.);
90 fragments->Project(
"vertical",
"posZ",
"abs(posZ) < 2 && abs(posY) < 2 && Z == 6");
91 fragments->Project(
"horizontal",
"posY",
"abs(posZ) < 2 && abs(posY) < 2 && Z == 6");
92 Float_t maxVal = posYHisto->GetMaximum();
93 std::cout <<
"maximum: " << maxVal << endl;
98 Float_t fwhm = 0.0, middle = 0.0, curVal;
101 for(
int i = 0; i < posYHisto->GetNbinsX(); i++){
103 curVal = posYHisto->GetBinContent(i);
104 if(pow(maxVal/2 - middle, 2.0) > pow(maxVal/2 - curVal, 2.0)){
105 fwhm = 2*TMath::Abs(posYHisto->GetBinCenter(i));
119 TF1* fitgaus =
new TF1(
"fitgaus",
"gaus");
120 fitgaus->SetLineColor(2);
121 posYHisto->Fit(fitgaus,
"");
123 std::cout <<
"fitted FWHM from normal distribution is: " << fitgaus->GetParameter(2)*10*2.35482 << endl;
128 std::cout <<
"Calculated (closest point) FWHM of Monte-Carlo simulation to be: " << fwhm*10 <<
" mm" << endl;
129 std::cout <<
"beam contained " << fragments->GetEntries(
"Z == 6") <<
" carbon nuclei." << endl;
printf("%d Experimental points found\n", nlines)