33 #include "TVirtualFitter.h"
96 std::cerr <<
"*******Nuclei not found!" << endl;
115 std::cerr <<
"*******Nuclei not found!" << endl;
131 fEnergySpecCanvas =
new TCanvas(
"fEnergySpecCanvas",
"Uncalibrated spectrum",800,600);
136 std::cout <<
"Found " <<
nPeaksFound <<
" Peaks:" <<endl;
150 TVirtualFitter::SetPrecision(1e-5);
156 fEnergySpecCanvas =
new TCanvas(
"fEnergySpecCanvas",
"Uncalibrated spectrum",800,600);
168 sprintf(buf,
"FitFunc_%d",
i+1);
174 sprintf(buf,
"FitFunc_%d",
i+1);
181 sprintf(buf,
"FitFunc_%d",
i+1);
190 sprintf(buf,
"FitFunc_%d",
i+1);
196 sprintf(buf,
"FitFunc_%d",
i+1);
204 sprintf(buf,
"AmplGaus_%d",
i+1);
218 sprintf(buf,
"x0_%d",
i+1);
226 sprintf(buf,
"sigma_%d",i+1);
230 FitFunc[
i]->SetParLimits(2,0,UpperSigmaFitLimit);
235 sprintf(buf,
"AmplSmoStep_%d",i+1);
241 FitFunc[
i]->SetParLimits(3,0.000001,100);
244 sprintf(buf,
"linBg_%d",i+1);
252 sprintf(buf,
"constBg_%d",i+1);
256 FitFunc[
i]->SetParLimits(5,200,700);
264 sprintf(buf,
"AmplSkGaus_%d",i+1);
272 sprintf(buf,
"beta_%d",i+1);
276 FitFunc[
i]->SetParLimits(7,0.000001,100);
284 sprintf(buf,
"x0SkewedGaus_%d",i+1);
290 sprintf(buf,
"sigmaSkewedGausn_%d",i+1);
293 FitFunc[
i]->SetParLimits(9,0.1,UpperSigmaFitLimit);
303 sprintf(buf,
"AmplSecondGaus_%d",i+1);
312 sprintf(buf,
"x0SecondGaus_%d",i+1);
318 sprintf(buf,
"sigmaSecondGaus_%d",i+1);
321 FitFunc[
i]->SetParLimits(8,0.1,UpperSigmaFitLimit*5);
328 sprintf(buf,
"lambda_%d",
i+1);
333 sprintf(buf,
"XPosSkew_%d",
i+1);
338 sprintf(buf,
"SigmaSkew_%d",i+1);
343 sprintf(buf,
"AmplitudeSkew_%d",i+1);
348 sprintf(buf,
"AmplitudeGaus_%d",i+1);
353 sprintf(buf,
"XPosGaus_%d",i+1);
358 sprintf(buf,
"SigmaGaus_%d",i+1);
363 sprintf(buf,
"Offset_%d",i+1);
366 FitFunc[
i]->SetParLimits(7,0.1,1000);
371 std::cout <<
"Start Fitting Peak " <<
i << endl;
384 TFile *bla =
new TFile(
"bla.root",
"RECREATE");
385 TCanvas *c123 =
new TCanvas(
"c123",
"",800,600);
403 cout <<
"Chi²" <<
FitFunc[
i]->GetChisquare() << endl;
404 cout <<
"NDF" <<
FitFunc[
i]-> GetNDF() << endl;
405 cout <<
"Chi²_red" <<
FitFunc[
i]->GetChisquare()/
FitFunc[
i]-> GetNDF() << endl;
442 sprintf(buf,
"FuncGaus_%d",
i+1);
449 sprintf(buf,
"FuncSmoothedStep_%d",
i+1);
456 sprintf(buf,
"FuncLinear_%d",
i+1);
468 sprintf(buf,
"SkewedGausian_%d",
i+1);
478 sprintf(buf,
"SkewedGausian_%d",
i+1);
488 sprintf(buf,
"SecondGausian_%d",
i+1);
499 fSubstractCanvas=
new TCanvas(
"fSubstractCanvas",
"Substracted spectrum",800,600);
500 fSubstractCanvas->cd();
515 std::cout <<
"Starting energy calibration" << endl;
516 fCalCanvas =
new TCanvas(
"fCalCanvas",
"Energy Calibration",800,600);
525 CalFunc =
new TF1(
"CalFunc",
"pol1",0,8000);
596 NucleiName.ToLower();
597 if(!NucleiName.CompareTo(
"co60") )
600 std::cout <<
"Found Co60"<< endl;
608 if(!NucleiName.CompareTo(
"co60bg") )
611 std::cout <<
"Found Co60 and K40"<< endl;
621 if( !NucleiName.CompareTo(
"eu152") )
623 std::cout <<
"Found Eu152"<< endl;
648 if( !NucleiName.CompareTo(
"eu152bg") )
650 std::cout <<
"Found Eu152 and K40"<< endl;
654 if(!NucleiName.CompareTo(
"cs137") )
656 std::cout <<
"Found Cs137"<< endl;
660 if(!NucleiName.CompareTo(
"cs137bg") )
662 std::cout <<
"Found Cs137 and K40"<< endl;
666 if(!NucleiName.CompareTo(
"na22") )
668 std::cout <<
"Found Na22"<< endl;
672 if(!NucleiName.CompareTo(
"na22bg") )
674 std::cout <<
"Found Na22 and K40"<< endl;
677 if(!NucleiName.CompareTo(
"jülich") )
680 std::cout <<
"Found jülich beam time configuration"<< endl;
693 if(!NucleiName.CompareTo(
"jülich2") )
696 std::cout <<
"Found jülich beam time configuration"<< endl;
731 std::cout <<
"Sorting Peaks" << endl;
760 std::cout <<
"Drawing of CalibratedSpectrum" <<endl;
761 fCalSpecCanvas =
new TCanvas(
"fCalSpecCanvas",
"Calibrated spectrum",800,600);
768 double new_bins[nbins+1];
782 std::map<double,double>::const_iterator it=
FWHM_en.begin();
783 std::map<double,double>::const_iterator it2=
FWTM_en.begin();
838 sprintf(TextBuffer,
"%.2f keV",it->second);
841 FWHMText->SetTextAlign(22);
842 FWHMText->SetTextFont(63);
843 FWHMText->SetTextSizePixels(22);
845 sprintf(TextBuffer,
"%.2f keV",it2->second);
847 FWTMText->SetTextAlign(22);
848 FWTMText->SetTextFont(63);
849 FWTMText->SetTextSizePixels(22);
867 return a + b *Channel + c * Channel * Channel;
879 TxtFile.open(TxtFilenameWithPath.Data());
881 TxtFile <<
"Nuclei:\t" << endl;
882 TxtFile <<
"Energy [keV]\t\tFWHM [keV]\t\tFWTM [keV]\t\tFWTM/FWHM\t\tPeakCounts" << endl;
884 std::map<double,double>::const_iterator it=
FWHM_en.begin();
885 std::map<double,double>::const_iterator it2=
FWTM_en.begin();
889 TxtFile << it->first <<
"\t\t" << it->second <<
"\t\t"<< it2->second <<
"\t\t" << it2->second/it->second <<
"\t\t" <<
PeakCounts[j] << endl;
905 RootFile = (TFile*)gROOT->FindObject(RootFilenameWithPath);
908 RootFile =
new TFile(RootFilenameWithPath,
"RECREATE",RootFilenameWithPath);
910 TNtuple* DataNTuple =
new TNtuple(
"DataNTuple",
"Data ntuple",
"PeakNumber:Energy:FWHM:FWTM:FWTMtoFWHMratio:PeakCounts");
911 Double_t wEnergy,wFWHM,wFWTM,wRatio,wPeakCounts;
913 std::map<double,double>::const_iterator it=
FWHM_en.begin();
914 std::map<double,double>::const_iterator it2=
FWTM_en.begin();
921 wRatio = it2->second/it->second;
923 DataNTuple->Fill(wPeakNumber,wEnergy,wFWHM,wFWTM,wRatio,wPeakCounts);
1060 while (threshold < histo->GetBinContent(histo->FindBin(StartingValue) -
i)+ histo->GetBinErrorUp(histo->FindBin(StartingValue) -
i))
1062 cout <<
"t" << threshold << endl;
1063 cout << histo->GetBinContent(histo->FindBin(StartingValue)) << endl;
1065 if (i == 100)
break;
1066 LowerErrorValue= histo->GetBinCenter(histo->FindBin(StartingValue) - (i-1));
1067 cout <<
"bla " << LowerErrorValue << endl;
1069 LowerErrorValue= histo->GetBinCenter(histo->FindBin(StartingValue) - (i-1));
1070 return LowerErrorValue;
1077 while (threshold > histo->GetBinContent(histo->FindBin(StartingValue) +
i)- histo->GetBinErrorLow(histo->FindBin(StartingValue) +
i))
1080 if (i == 100)
break;
1083 UpperErrorValue= histo->GetBinCenter(histo->FindBin(StartingValue) + (i-1));
1084 return UpperErrorValue;
1090 while (threshold > histo->GetBinContent(histo->FindBin(StartingValue) -
i)- histo->GetBinErrorLow(histo->FindBin(StartingValue) -
i))
1093 if (i == 100)
break;
1095 LowerErrorValue= histo->GetBinCenter(histo->FindBin(StartingValue) - (i-1));
1096 return LowerErrorValue;
1103 while (threshold < histo->GetBinContent(histo->FindBin(StartingValue) +
i)+ histo->GetBinErrorUp(histo->FindBin(StartingValue) +
i))
1106 if (i == 100)
break;
1108 UpperErrorValue= histo->GetBinCenter(histo->FindBin(StartingValue) + (i-1));
1109 return UpperErrorValue;
1123 if (OnlyTwoPiSimulated)
void SetOutputPath(TString OutputPath_ext)
Double_t FWHMlowRightBorderEnergy[50]
void SetSecondGausianFitting()
Double_t FWHMhighEnergy[50]
virtual ~PndHypGeSpectrumAnalyser()
Int_t AnalyseSimulationSpectrum()
TF1 * FuncSmoothedStep[50]
TF1 * FitFuncWithoutBg[50]
Int_t ExportToRootFile(TString RootFilename_ext="test.root")
void SetRootFileOutputName(TString RootFilename_ext)
map< double, double > FWTM_en
Double_t LinearOnly(Double_t *x, Double_t *par)
map< double, double > FWHM_en
friend F32vec4 sqrt(const F32vec4 &a)
Bool_t IsFreeSkewedFitting()
Double_t fInputHistogramResolution
Double_t FWHMlowLeftBorderEnergy[50]
map< double, double > FWHM_ch
Int_t fSolidAngleCorrectionFactor
static T Sqrt(const T &x)
Bool_t IsNewFunctionFitting()
vector< double > EnergyErrors
Double_t FWHMlowRightBorder[50]
void SetInputHistogramResolution(Double_t InputHistogramResolution_ext)
Double_t FWHMlowEnergy[50]
Double_t FWHMhighLeftBorder[50]
TCanvas * fSubstractCanvas
map< double, double > FWTM_ch
cout<< "ifile "<< ifile<< endl;cout<< " momentum sampled over "<< nsteps<< " with step width "<< 1.5/nsteps<< endl;cout<< endl;cout<< "MEAN DEDX PARAMETRIZATION"<< endl;cout<< "mom limits "<< mean_inf<< " "<< mean_sup<< endl;cout<< "mu: ";for(int param=0;param< npardedx;param++) cout<< fdedx-> GetParameter(param)<< "
Int_t DoEnergyCalibration()
Double_t FWTMhighEnergy[50]
Double_t CalculateUpperErrorLeft(Double_t threshold, TH1D *histo, Double_t StartingValue)
Int_t CompareNuclei(TString NucleiName)
PndHypGeSpectrumAnalyser(TH1D *hEnergySpec_ext, Int_t nPeaks=2, Int_t FuncWidthExt=100)
Double_t FWHMhighLeftBorderEnergy[50]
Int_t DrawCalibratedSpectrum()
Double_t fFEPEfficiencyError
TF1 * CalibratedFunction[50]
Double_t CalculateUpperErrorRight(Double_t threshold, TH1D *histo, Double_t StartingValue)
Double_t GetEfficiencyError()
Double_t SecondGausOnly(Double_t *x, Double_t *par)
Double_t PeakFunc(Double_t *x, Double_t *par)
Double_t NewFunction(Double_t *x, Double_t *par)
Double_t PeakFuncDoubleGausian(Double_t *x, Double_t *par)
void SetNumberOfSimEvents(Int_t NumberOfSimEvents_ext, Bool_t OnlyTwoPiSimulated=1)
Bool_t IsGaussianFitting()
TH1D * fhCalibratedSpectrum
void SetGaussianFitting()
vector< double > Energies
void SetEnergySpectrum(TH1D *hEnergySpec_ext)
void SetNewFunctionFitting()
void SetTxtFileOutputName(TString TxtFilename_ext)
Double_t CalculateLowerErrorRight(Double_t threshold, TH1D *histo, Double_t StartingValue)
Int_t DrawSimulationSpectrum()
TCanvas * fEnergySpecCanvas
Double_t SkewedOnly(Double_t *x, Double_t *par)
void SetNoDrawingMode(Bool_t NoDrawingMode_ext=true)
TH1D * fhSubstractSpectrum
vector< double > PeakFitXError
Double_t FreeSkewedOnly(Double_t *x, Double_t *par)
Double_t Calibrate(Double_t Channel)
TH1D * fhFitErrorhistogram[50]
Double_t CalculateLowerErrorLeft(Double_t threshold, TH1D *histo, Double_t StartingValue)
Double_t CalculateEfficiency()
Double_t SmoothedStepOnly(Double_t *x, Double_t *par)
Double_t GausOnly(Double_t *x, Double_t *par)
vector< double > PeakFitX
Double_t FindUpperSigmaFitLimit(Double_t threshold, Float_t StartingPoint)
void SetFreeSkewedFitting()
Double_t FWHMlowLeftBorder[50]
Double_t FWHMhighRightBorder[50]
void SetSearchRange(Double_t RangeMin, Double_t RangeMax)
TGraphErrors * fgCalibration
Double_t FWTMlowEnergy[50]
Double_t PeakFuncGaussian(Double_t *x, Double_t *par)
Int_t ExportToTextFile(TString TxtFilename_ext="test.txt")
vector< double > PeakCounts
Double_t PeakFuncFreeSkewedPositionWithoutFirstGausian(Double_t *x, Double_t *par)
Double_t FWHMhighRightBorderEnergy[50]
Bool_t IsSecondGausianFitting()