File indexing completed on 2024-04-06 12:22:44
0001 #include "TF1.h"
0002 #include <cmath>
0003 #include <iostream>
0004 #include "TFile.h"
0005 #include "TH1F.h"
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 Double_t integralPart(Double_t *x, Double_t *par)
0019 {
0020 std::cout << "x[0] = " << x[0] << std::endl;
0021 std::cout << "par[0] = " << par[0] << std::endl;
0022 std::cout << "par[1] = " << par[1] << std::endl;
0023
0024 return exp(-x[0]*x[0])/(par[0]*par[0] + (par[1] - x[0])*(par[1] - x[0]));
0025 }
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037 Double_t crystalBall(Double_t *x, Double_t *par)
0038 {
0039 double x_0 = par[0];
0040 double sigma = par[1];
0041 double n = par[2];
0042 double alpha = par[3];
0043 double N = par[4];
0044
0045 double A = pow(n/fabs(alpha), n)*exp(-(alpha*alpha)/2);
0046 double B = n/fabs(alpha) - fabs(alpha);
0047
0048 if((x[0]-x_0)/sigma > -alpha) {
0049 return N*exp(-(x[0]-x_0)*(x[0]-x_0)/(2*sigma*sigma));
0050 }
0051 else {
0052 return N*A*pow( (B - (x[0]-x_0)/sigma), -n );
0053 }
0054 }
0055 TF1 * crystalBallFit()
0056 {
0057 TF1 * functionToFit = new TF1("functionToFit", crystalBall, 42, 160, 5);
0058 functionToFit->SetParameter(0, 90);
0059 functionToFit->SetParameter(1, 10);
0060 functionToFit->SetParameter(2, 1.);
0061 functionToFit->SetParameter(3, 1.);
0062 functionToFit->SetParameter(4, 1.);
0063 return functionToFit;
0064 }
0065
0066
0067
0068 TF1 * lorentzian = new TF1( "lorentzian", "[2]/((x-[0])*(x-[0])+(([1]/2)*([1]/2)))", 0, 1000);
0069 TF1 * lorentzianFit()
0070 {
0071 TF1 * functionToFit = new TF1("functionToFit", lorentzian, 42, 160, 3);
0072 functionToFit->SetParameter(0, 90);
0073 functionToFit->SetParameter(1, 10);
0074 return functionToFit;
0075 }
0076
0077
0078
0079 TF1 * powerLaw = new TF1( "powerLaw", "[0] + [1]*pow(x, [2])", 0, 1000 );
0080 TF1 * powerLawFit()
0081 {
0082 TF1 * functionToFit = new TF1("functionToFit", powerLaw, 42, 160, 3);
0083 return functionToFit;
0084 }
0085
0086
0087 TF1 * lorentzianAndPowerLaw()
0088 {
0089 TF1 * functionToFit = new TF1("functionToFit", "[2]/((x-[0])*(x-[0])+(([1]/2)*([1]/2))) + ([3] + [4]*pow(x, [5]))", 42, 160);
0090 functionToFit->SetParameter(0, 90);
0091 functionToFit->SetParameter(1, 10);
0092 functionToFit->SetParameter(2, 0.33);
0093 functionToFit->SetParameter(3, -0.0220578);
0094 functionToFit->SetParameter(4, 0.0357716);
0095 functionToFit->SetParameter(5, -0.0962408);
0096 return functionToFit;
0097 }
0098
0099
0100
0101 TF1 * exponential = new TF1 ("exponential", "[0]*exp([1]*x)", 0, 1000 );
0102 TF1 * exponentialFit()
0103 {
0104 TF1 * functionToFit = new TF1("functionToFit", exponential, 42, 160, 2);
0105 return functionToFit;
0106 }
0107
0108
0109
0110 TF1 * lorenzianAndExponentialFit()
0111 {
0112 TF1 * functionToFit = new TF1("functionToFit", "[2]/((x-[0])*(x-[0])+(([1]/2)*([1]/2))) + [3]*exp([4]*x)", 42, 160);
0113 functionToFit->SetParameter(0, 90);
0114 functionToFit->SetParameter(1, 10);
0115 functionToFit->SetParameter(2, 0.33);
0116 functionToFit->SetParameter(3, 0.0115272);
0117 functionToFit->SetParameter(4, -0.0294229);
0118 return functionToFit;
0119 }
0120
0121
0122
0123 void BackgroundFit() {
0124 TFile* inputFile = new TFile("0_MuScleFit.root", "READ");
0125 TH1F* histo = (TH1F*)inputFile->FindObjectAny("hRecBestRes_Mass");
0126 histo->Rebin(30);
0127 histo->Scale(1/histo->GetEntries());
0128
0129
0130
0131
0132
0133
0134 TF1 * functionToFit = lorenzianAndExponentialFit();
0135
0136 histo->Fit(functionToFit, "M", "", 42, 160);
0137
0138 }