FairRoot/PandaRoot
FitGammaSpectra.C
Go to the documentation of this file.
1 using namespace std;
2 
3 int FitGammaSpectra(TString Filename="Combined_Ana_Geo36_E1.000MeV_Evts10000000_FileEvts50000_Gen1_ST12.root")
4 {
5  //gROOT->Macro("$VMCWORKDIR/gconfig/rootlogon.C");
6  gROOT->LoadMacro("$VMCWORKDIR/macro/hypGe/Marcell/SharedMacros/SharedMacroFunctions.C");
7  gSystem->Load("libHypGe");
8 
9  TString Path = getenv("SIMDATADIR");
10  TString FullPath= Path+"/Gamma/Ana/CombinedData/";
11  TString OutputFullPath= Path+"/Gamma/Ana/CombinedData/Fitted/";
12  TString FilenameWithPath= FullPath+Filename;
13  //TString TxtFilename = OutputFullPath +"FittedData.txt";
14  //TString TxtFilename = OutputFullPath +"FittedDataLowEnergy.txt"; // changed output file for low energy tests (20.07.15 steinen)
15  TString TxtFilename = OutputFullPath +"FittedDataNewGeometry.txt"; // changed output file for low energy tests (20.07.15 steinen)
16  TString RootFilename = OutputFullPath+"Fitted_"+Filename;
17 
18 
19 
20  //get energy from filename
21  Double_t energy = GetEnergyFromFilename(FilenameWithPath);
22  Int_t CombinedEvents=GetNumberOfCombinedEventsFromFilename(Filename);
23  Int_t Geo = GetGeoFromFilename(Filename);
24  Int_t Sektar = GetIfTargetIsSimulated(Filename);
26  cout << nEvents << endl;
27  cout << energy << endl;
28  // get Spectrum from file
29  TFile *file = new TFile(FilenameWithPath);
30  TH1D* hEnergySpec;
31  file ->GetObject("GamEnergy",hEnergySpec);
32 
33 // PndHypGeSpectrumAnalyser *Ana = new PndHypGeSpectrumAnalyser(hEnergySpec, Energies, 100);
34 // Ana->SetOutputPath(OutputFullPath);
35 // Ana->SetTxtFileOutputName(TxtFilename);
36 // Ana->SetRootFileOutputName(RootFilename);
37 // Ana->SetGaussianFitting();
38 // Ana->SetInputHistogramResolution(0.0001);
39 // Ana->SetNumberOfSimEvents(CombinedEvents, 1);
40 
41  int NPeaks;
42  if (energy > 1.022)
43  {
44  NPeaks = 3;
45  }
46  else
47  if (energy > 0.511)
48  {
49  NPeaks=2;
50  }
51  else
52  NPeaks = 1;
53 
54  TF1 *Gausfunc[3];
55  TF1 *fitfunc[3];
56  Double_t FWHM[3];
57  Double_t FWHMError[3];
58  Double_t Efficiency[3];
59  Efficiency[1] = 0;
60  Efficiency[2] = 0;
61  Double_t EfficiencyError[3];
62  EfficiencyError[1]=0;
63  EfficiencyError[2]=0;
64  char buf[20];
65  for(int i = 0; i<NPeaks;i++)
66  {
67  sprintf(buf, "gausfunc_%d",i);
68  Gausfunc[i] = new TF1(buf, "gausn(0)", energy-i*0.511-0.02,energy-i*0.511+0.02);
69  Gausfunc[i]-> SetParameter(0, 100);
70  Gausfunc[i]-> SetParLimits(0,1,300);
71 
72  Gausfunc[i]-> SetParameter(1, energy-i*0.511);
73  Gausfunc[i]-> SetParLimits(1,energy-i*0.511-0.01,energy-i*0.511+0.01);
74  Gausfunc[i]-> SetParameter(2, 0.0004);
75  Gausfunc[i]-> SetParLimits(2,0.00001,0.01);
76 
77  hEnergySpec->Fit(buf,"rN");
78  sprintf(buf, "fitfunc_%d",i);
79  fitfunc[i] = new TF1(buf, "gausn(0)+pol1(3)", energy-i*0.511-0.02,energy-i*0.511+0.02);
80  fitfunc[i]-> SetParameter(0, Gausfunc[i]-> GetParameter(0));
81  fitfunc[i]-> SetParLimits(0,Gausfunc[i]-> GetParameter(0)*0.9,Gausfunc[i]-> GetParameter(0)*1.1);
82  //fitfunc[i]-> SetParLimits(1,10,300);
83  fitfunc[i]-> SetParameter(1, Gausfunc[i]-> GetParameter(1));
84  fitfunc[i]-> SetParLimits(1,Gausfunc[i]->GetParameter(1)*0.9,Gausfunc[i]-> GetParameter(1)*1.1);
85  fitfunc[i]-> SetParameter(2, Gausfunc[i]-> GetParameter(2));
86  fitfunc[i]-> SetParLimits(2,Gausfunc[i]->GetParameter(2)*0.9,Gausfunc[i]-> GetParameter(2)*1.1);
87 
88  hEnergySpec->Fit(buf,"r+");
89 
90  FWHM[i] = fitfunc[i]->GetParameter(2)*2.3548;
91  FWHMError[i] = fitfunc[i]->GetParError(2)*2.3548;
92  Efficiency[i] =fitfunc[i]->GetParameter(0)*1000000/2/nEvents;
93  EfficiencyError[i] = fitfunc[i]->GetParError(0)*1E6/2/nEvents;
94  //delete Ana;
95  cout << "eff " << i << "\t" << Efficiency[i] << endl;
96  cout << "effError " << i << "\t" << EfficiencyError[i] << endl;
97  }
98  Double_t EffInclSEP = Efficiency[0]+Efficiency[1];
99  Double_t EffInclSEPError = sqrt(EfficiencyError[0]*EfficiencyError[0]+EfficiencyError[1]*EfficiencyError[1]);
100  Double_t EffInclSEPDEP = Efficiency[0]+Efficiency[1]+Efficiency[2];
101  Double_t EffInclSEPDEPError = sqrt(EfficiencyError[0]*EfficiencyError[0]+EfficiencyError[1]*EfficiencyError[1]+EfficiencyError[2]*EfficiencyError[2]);
102 
103  cout << "eff1 " << "\t" << Efficiency[0] << endl;
104  cout << "eff2 " << "\t" << EffInclSEP << endl;
105  cout << "eff3 " << "\t" << EffInclSEPDEP << endl;
106  ofstream txtfile (TxtFilename.Data(),std::ofstream::out | std::ofstream::app);
107  txtfile << Geo <<"\t" << Sektar <<"\t"<< energy <<"\t"<< nEvents <<"\t"<< Efficiency[0] <<"\t"<< EfficiencyError[0] <<"\t"<<FWHM[0] <<"\t"<< FWHMError[0]<< "\t" << EffInclSEP <<"\t" << EffInclSEPError <<"\t" << EffInclSEPDEP <<"\t" << EffInclSEPDEPError <<endl;
108  txtfile.close();
109  cout << RootFilename.Data()<< endl;
110 // TFile *fileOut = new TFile(RootFilename,"RECREATE",RootFilename);
111 // hEnergySpec->Write();
112 // fileOut->Close();
113  file->Close();
114  return 0;
115 }
Int_t i
Definition: run_full.C:25
TFile * file
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
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)<< "
Double_t
Int_t nEvents
Definition: hit_dirc.C:11
Double_t GetGeoFromFilename(TString Filename)
TFile * out
Definition: reco_muo.C:20
Int_t GetIfTargetIsSimulated(TString Filename)
Double_t GetEnergyFromFilename(TString Filename)
return buf
Int_t GetNumberOfCombinedEventsFromFilename(TString Filename)
int FitGammaSpectra(TString Filename="Combined_Ana_Geo36_E1.000MeV_Evts10000000_FileEvts50000_Gen1_ST12.root")
Double_t energy
Definition: plot_dirc.C:15