File indexing completed on 2024-04-06 12:24:11
0001 #ifndef TagProbeFitter_h
0002 #define TagProbeFitter_h
0003
0004 #include "TFile.h"
0005 #include "TChain.h"
0006 #include "TGraphAsymmErrors.h"
0007 #include "RooWorkspace.h"
0008 #include "RooFitResult.h"
0009 #include "RooDataSet.h"
0010
0011 class TagProbeFitter {
0012 public:
0013
0014 TagProbeFitter(const std::vector<std::string>& inputFileNames,
0015 std::string inputDirectoryName,
0016 std::string inputTreeName,
0017 std::string outputFileName,
0018 int numCPU = 1,
0019 bool saveWorkspace_ = false,
0020 bool floatShapeParameters = true,
0021 const std::vector<std::string>& fixVars_ = std::vector<std::string>());
0022
0023
0024 ~TagProbeFitter();
0025
0026
0027 bool addVariable(std::string variableName, std::string title, double low, double hi, std::string units);
0028
0029
0030 bool addCategory(std::string categoryName, std::string title, std::string expression);
0031
0032
0033 bool addExpression(std::string expressionName,
0034 std::string title,
0035 std::string expression,
0036 const std::vector<std::string>& arguments);
0037
0038
0039 bool addThresholdCategory(std::string categoryName, std::string title, std::string varName, double cutValue);
0040
0041
0042
0043 void addPdf(std::string pdfName, std::vector<std::string>& pdfCommands);
0044
0045
0046 void addFixedVariavles(const std::vector<std::string>&);
0047
0048
0049 std::string calculateEfficiency(std::string dirName,
0050 std::string efficiencyCategory,
0051 std::string efficiencyState,
0052 std::vector<std::string>& unbinnedVariables,
0053 std::map<std::string, std::vector<double> >& binnedReals,
0054 std::map<std::string, std::vector<std::string> >& binnedCategories,
0055 std::vector<std::string>& binToPDFmap) {
0056 std::vector<std::string> efficiencyCategories(1, efficiencyCategory);
0057 std::vector<std::string> efficiencyStates(1, efficiencyState);
0058 return calculateEfficiency(
0059 dirName, efficiencyCategories, efficiencyStates, unbinnedVariables, binnedReals, binnedCategories, binToPDFmap);
0060 }
0061
0062 std::string calculateEfficiency(std::string dirName,
0063 const std::vector<std::string>& efficiencyCategories,
0064 const std::vector<std::string>& efficiencyStates,
0065 std::vector<std::string>& unbinnedVariables,
0066 std::map<std::string, std::vector<double> >& binnedReals,
0067 std::map<std::string, std::vector<std::string> >& binnedCategories,
0068 std::vector<std::string>& binToPDFmap);
0069
0070
0071 void setBinnedFit(bool binned, int bins = 0) {
0072 binnedFit = binned;
0073 massBins = bins;
0074 }
0075
0076
0077 void setBinsForMassPlots(int bins);
0078
0079
0080 void setSaveDistributionsPlot(bool saveDistributionsPlot_) { doSaveDistributionsPlot = saveDistributionsPlot_; }
0081
0082
0083 void setWeightVar(const std::string& weight);
0084
0085
0086 void setQuiet(bool quiet_ = true);
0087
0088
0089
0090
0091 void setSplitMode(unsigned int nevents);
0092
0093 protected:
0094
0095 TChain* inputTree;
0096
0097
0098 TFile* outputFile;
0099
0100
0101 TDirectory* outputDirectory;
0102
0103
0104 int numCPU;
0105
0106
0107 bool doSaveDistributionsPlot;
0108
0109
0110 bool saveWorkspace;
0111
0112
0113 int binnedFit;
0114
0115
0116 int massBins;
0117
0118
0119 std::map<std::string, std::vector<std::string> > pdfs;
0120
0121
0122 RooArgSet variables;
0123
0124
0125 std::string weightVar;
0126
0127
0128
0129 std::vector<std::pair<std::pair<std::string, std::string>, std::pair<std::string, std::vector<std::string> > > >
0130 expressionVars;
0131
0132
0133
0134 std::vector<std::pair<std::pair<std::string, std::string>, std::pair<std::string, double> > > thresholdCategories;
0135
0136
0137 std::vector<std::string> fixVars;
0138 std::vector<double> fixVarValues;
0139
0140
0141
0142
0143 bool floatShapeParameters;
0144
0145
0146 RooWorkspace parameterParser;
0147
0148
0149 bool quiet;
0150
0151
0152
0153
0154 unsigned int split_mode;
0155
0156
0157 void varFixer(RooWorkspace* w, bool fix);
0158
0159 void varSaver(RooWorkspace* w);
0160
0161 void varRestorer(RooWorkspace* w);
0162
0163
0164 void doFitEfficiency(RooWorkspace* w, std::string pdfName, RooRealVar& efficiency);
0165
0166
0167 void doSBSEfficiency(RooWorkspace* w, RooRealVar& efficiency);
0168
0169
0170 void doCntEfficiency(RooWorkspace* w, RooRealVar& efficiency);
0171
0172
0173 void createPdf(RooWorkspace* w, std::vector<std::string>& pdfCommands);
0174
0175
0176 void setInitialValues(RooWorkspace* w);
0177
0178
0179 void saveFitPlot(RooWorkspace* w);
0180
0181
0182 void saveDistributionsPlot(RooWorkspace* w);
0183
0184
0185 void saveEfficiencyPlots(RooDataSet& eff,
0186 const TString& effName,
0187 RooArgSet& binnedVariables,
0188 RooArgSet& mappedCategories);
0189
0190
0191 void makeEfficiencyPlot1D(RooDataSet& eff,
0192 RooRealVar& v,
0193 const TString& plotName,
0194 const TString& plotTitle,
0195 const TString& effName,
0196 const char* catName = nullptr,
0197 int catIndex = -1);
0198
0199
0200 void makeEfficiencyPlot2D(RooDataSet& eff,
0201 RooRealVar& v1,
0202 RooRealVar& v2,
0203 const TString& plotName,
0204 const TString& plotTitle,
0205 const TString& effName,
0206 const char* catName = nullptr,
0207 int catIndex = -1);
0208 };
0209
0210 #endif