52 if (TMath::Prob(redchi2 * 8, 8) < 0.99) {
68 double resid_sum = 0.;
69 double resid_sum2 = 0.;
75 double weight = 1. / redchi2;
80 if (fabs(residual) < 10.) {
81 resid_sum +=
weight * residual;
82 resid_sum2 +=
weight * residual * residual;
88 double resid_mean = resid_sum / resid_N;
89 double resid_stdev =
sqrt(resid_sum2 / resid_N -
pow(resid_sum / resid_N, 2));
98 double weight = 1. / redchi2;
103 if (fabs(residual - resid_mean) < 2.5 * resid_stdev) {
104 resid_sum +=
weight * residual;
105 resid_sum2 +=
weight * residual * residual;
111 resid_mean = resid_sum / resid_N;
112 resid_stdev =
sqrt(resid_sum2 / resid_N -
pow(resid_sum / resid_N, 2));
114 std::vector<int>
num;
115 std::vector<std::string>
name;
116 std::vector<double>
start;
117 std::vector<double>
step;
118 std::vector<double>
low;
119 std::vector<double>
high;
125 step.push_back(0.01 * resid_stdev);
131 start.push_back(resid_mean);
132 step.push_back(0.01 * resid_stdev);
138 start.push_back(resid_stdev);
139 step.push_back(0.01 * resid_stdev);
145 start.push_back(0.1 * resid_stdev);
146 step.push_back(0.01 * resid_stdev);
157 std::stringstream name_residual, name_residual_raw;
158 name_residual <<
name <<
"_residual";
159 name_residual_raw <<
name <<
"_residual_raw";
161 double min_residual = -100.;
162 double max_residual = 100.;
163 TH1F *hist_residual =
dir->make<TH1F>(name_residual.str().c_str(),
"", 100, min_residual, max_residual);
164 TH1F *hist_residual_raw =
dir->make<TH1F>(name_residual_raw.str().c_str(),
"", 100, min_residual, max_residual);
166 name_residual <<
"_fit";
167 TF1 *fit_residual =
nullptr;
198 fit_residual->SetLineColor(2);
199 fit_residual->SetLineWidth(2);
200 fit_residual->Write();
205 double weight = 1. / redchi2;
213 hist_residual_raw->Fill(10. * resid);
218 for (
int i = 1;
i <= hist_residual->GetNbinsX();
i++) {
219 double xi = hist_residual->GetBinCenter(
i);
220 double yi = hist_residual->GetBinContent(
i);
221 double yerri = hist_residual->GetBinError(
i);
222 double yth = fit_residual->Eval(
xi);
224 chi2 +=
pow((yth - yi) / yerri, 2);
double MuonResidualsFitter_logGaussPowerTails(double residual, double center, double sigma)
Double_t MuonResidualsFitter_powerLawTails_TF1(Double_t *xvec, Double_t *par)
int residualsModel() const
std::vector< double * >::const_iterator residuals_begin() const
static double MuonResiduals1DOFFitter_number_of_hits
MuonResidualsFitter * fitter()
std::vector< double * >::const_iterator residuals_end() const
bool dofit(void(*fcn)(int &, double *, double &, double *, int), std::vector< int > &parNum, std::vector< std::string > &parName, std::vector< double > &start, std::vector< double > &step, std::vector< double > &low, std::vector< double > &high)
double MuonResidualsFitter_logROOTVoigt(double residual, double center, double sigma, double gamma)
static TMinuit * MuonResiduals1DOFFitter_TMinuit
bool fit(Alignable *ali) override
double MuonResidualsFitter_logPowerLawTails(double residual, double center, double sigma, double gamma)
static bool MuonResiduals1DOFFitter_weightAlignment
Double_t MuonResidualsFitter_GaussPowerTails_TF1(Double_t *xvec, Double_t *par)
static double MuonResiduals1DOFFitter_sum_of_weights
Double_t MuonResidualsFitter_pureGaussian_TF1(Double_t *xvec, Double_t *par)
double plot(std::string name, TFileDirectory *dir, Alignable *ali) override
double sumofweights() override
Double_t MuonResidualsFitter_ROOTVoigt_TF1(Double_t *xvec, Double_t *par)
void MuonResiduals1DOFFitter_FCN(int &npar, double *gin, double &fval, double *par, int iflag)
double MuonResidualsFitter_logPureGaussian(double residual, double center, double sigma)
void inform(TMinuit *tMinuit) override