File indexing completed on 2024-04-06 11:59:57
0001 #ifndef CalibTracker_SiStripLorentzAngle_SymmetryFit
0002 #define CalibTracker_SiStripLorentzAngle_SymmetryFit
0003
0004 #include "TH1.h"
0005 #include "TF1.h"
0006 #include <string>
0007
0008 class SymmetryFit {
0009 public:
0010 static TH1* symmetryChi2(std::string, const std::vector<TH1*>&, const std::pair<unsigned, unsigned>);
0011 static TH1* symmetryChi2(const TH1*, const std::pair<unsigned, unsigned>);
0012 static std::string name(std::string base) { return base + "_symmchi2"; }
0013 static TF1* fitfunction();
0014 static std::vector<double> pol2_from_pol2(TH1* hist);
0015 static std::vector<double> pol2_from_pol3(TH1* hist);
0016
0017 private:
0018 SymmetryFit(const TH1*, const std::pair<unsigned, unsigned>);
0019 std::pair<unsigned, unsigned> findUsableMinMax() const;
0020 std::vector<std::pair<unsigned, unsigned> > continuousRanges() const;
0021 float chi2_element(std::pair<unsigned, unsigned>);
0022 float chi2(std::pair<unsigned, unsigned>);
0023 void makeChi2Histogram();
0024 void fillchi2();
0025 int fit();
0026 SymmetryFit operator+=(const SymmetryFit& R) {
0027 ndf_ += R.ndf_;
0028 chi2_->Add(R.chi2_);
0029 return *this;
0030 }
0031
0032 const TH1* symm_candidate_;
0033 const unsigned minDF_;
0034 const std::pair<unsigned, unsigned> range_, minmaxUsable_;
0035 unsigned ndf_;
0036 TH1* chi2_;
0037 };
0038
0039 #endif