File indexing completed on 2024-04-06 11:59:57
0001 #ifndef LA_FILLER_FITTER_H
0002 #define LA_FILLER_FITTER_H
0003
0004 #include <string>
0005 #include <vector>
0006 #include <map>
0007 #include "DataFormats/SiStripDetId/interface/SiStripDetId.h"
0008 #include "CalibTracker/SiStripCommon/interface/Book.h"
0009 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0010 #include <TTree.h>
0011 #include "SymmetryFit.h"
0012 class TProfile;
0013
0014 class LA_Filler_Fitter {
0015 public:
0016
0017 LA_Filler_Fitter(int methods, int M, int N, double low, double up, unsigned max, const TrackerTopology* tTopo)
0018 : ensembleSize_(M),
0019 ensembleBins_(N),
0020 ensembleLow_(low),
0021 ensembleUp_(up),
0022 byLayer_(true),
0023 byModule_(false),
0024 localYbin_(0),
0025 stripsPerBin_(0),
0026 maxEvents_(max),
0027 methods_(methods),
0028 tTopo_(tTopo) {}
0029
0030
0031 LA_Filler_Fitter(int methods,
0032 bool layer,
0033 bool module,
0034 float localybin,
0035 unsigned stripbin,
0036 unsigned max,
0037 const TrackerTopology* tTopo)
0038 : ensembleSize_(0),
0039 ensembleBins_(0),
0040 ensembleLow_(0),
0041 ensembleUp_(0),
0042 byLayer_(layer),
0043 byModule_(module),
0044 localYbin_(localybin),
0045 stripsPerBin_(stripbin),
0046 maxEvents_(max),
0047 methods_(methods),
0048 tTopo_(tTopo) {}
0049
0050 enum Method {
0051 WIDTH = 1 << 0,
0052 FIRST_METHOD = 1 << 0,
0053 PROB1 = 1 << 1,
0054 AVGV2 = 1 << 2,
0055 AVGV3 = 1 << 3,
0056 RMSV2 = 1 << 4,
0057 RMSV3 = 1 << 5,
0058 LAST_METHOD = 1 << 5
0059 };
0060
0061 static std::string method(Method m, bool fit = true) {
0062 switch (m) {
0063 case WIDTH:
0064 return "_width_prof";
0065 case PROB1:
0066 return fit ? SymmetryFit::name(method(m, false)) : "_prob_w1";
0067 case AVGV2:
0068 return fit ? SymmetryFit::name(method(m, false)) : "_avg_var_w2";
0069 case AVGV3:
0070 return fit ? SymmetryFit::name(method(m, false)) : "_avg_var_w3";
0071 case RMSV2:
0072 return fit ? SymmetryFit::name(method(m, false)) : "_rms_var_w2";
0073 case RMSV3:
0074 return fit ? SymmetryFit::name(method(m, false)) : "_rms_var_w3";
0075 default:
0076 return "_UNKNOWN";
0077 }
0078 }
0079
0080 struct Result {
0081 std::pair<float, float> reco, measured, calMeasured;
0082 float field, chi2;
0083 unsigned ndof, entries;
0084 Result() : reco(1000, 0), measured(1000, 0), calMeasured(1000, 0), field(0), chi2(0), ndof(0), entries(0) {}
0085 };
0086
0087 struct EnsembleSummary {
0088 std::pair<float, float> meanMeasured, sigmaMeasured, meanUncertainty, pull;
0089 float truth;
0090 unsigned samples;
0091 EnsembleSummary()
0092 : meanMeasured(0, 0), sigmaMeasured(0, 0), meanUncertainty(0, 0), pull(0, 0), truth(0), samples(0) {}
0093 };
0094
0095
0096 void fill(TTree*, Book&) const;
0097 void fill_one_cluster(
0098 Book&, const poly<std::string>&, const unsigned, const float, const float, const float, const float) const;
0099 poly<std::string> allAndOne(const unsigned width) const;
0100 poly<std::string> varWidth(const unsigned width) const;
0101 poly<std::string> granularity(const SiStripDetId, const float, const Long64_t, const float, const unsigned) const;
0102 static std::string subdetLabel(const SiStripDetId);
0103 static std::string moduleLabel(const SiStripDetId);
0104 std::string layerLabel(const SiStripDetId) const;
0105 static unsigned layer_index(bool TIB, bool stereo, unsigned layer) {
0106 return layer + (TIB ? 0 : 6) + (stereo ? 1 : 0) + ((layer > 2) ? 1 : (layer == 1) ? -1 : 0);
0107 }
0108
0109
0110 static void fit(Book& book) {
0111 make_and_fit_symmchi2(book);
0112 fit_width_profile(book);
0113 }
0114 static void make_and_fit_symmchi2(Book&);
0115 static void fit_width_profile(Book&);
0116 static TH1* rms_profile(const std::string, const TProfile* const);
0117 static TH1* subset_probability(const std::string name, const TH1* const, const TH1* const);
0118 static unsigned find_rebin(const TH1* const);
0119
0120
0121 void summarize_ensembles(Book&) const;
0122 static Result result(Method, const std::string name, const Book&);
0123 static std::map<std::string, Result> layer_results(const Book&, const Method);
0124 static std::map<uint32_t, Result> module_results(const Book&, const Method);
0125 static std::map<std::string, std::vector<Result> > ensemble_results(const Book&, const Method);
0126 static std::map<std::string, std::vector<EnsembleSummary> > ensemble_summary(const Book&);
0127 static std::pair<std::pair<float, float>, std::pair<float, float> > offset_slope(const std::vector<EnsembleSummary>&);
0128 static float pull(const std::vector<EnsembleSummary>&);
0129
0130 private:
0131 const int ensembleSize_, ensembleBins_;
0132 const double ensembleLow_, ensembleUp_;
0133 const bool byLayer_, byModule_;
0134 const float localYbin_;
0135 const unsigned stripsPerBin_;
0136 const Long64_t maxEvents_;
0137 const int methods_;
0138 const TrackerTopology* tTopo_;
0139 };
0140
0141 std::ostream& operator<<(std::ostream&, const LA_Filler_Fitter::Result&);
0142 std::ostream& operator<<(std::ostream&, const LA_Filler_Fitter::EnsembleSummary&);
0143
0144 #endif