File indexing completed on 2024-04-06 12:02:43
0001 #include <cassert>
0002 #include <iostream>
0003 #include <sstream>
0004 #include <string>
0005
0006 #include "CondFormats/BTauObjects/interface/BTagEntry.h"
0007 #include "CondFormats/BTauObjects/interface/BTagCalibration.h"
0008 #include "CondTools/BTau/interface/BTagCalibrationReader.h"
0009
0010 static bool eq(float a, float b, float prec = 1e-8) {
0011 float d = a - b;
0012 float d2 = d * d;
0013 return (d2 < prec);
0014 }
0015
0016 int main() {
0017 using namespace std;
0018
0019 string csv1(
0020 "0, comb, central, 0, 0, 1, 0, 1, 0, 999, \"2*x\" \n"
0021 "0, comb, central, 0, 0, 1, 1, 2, 0, 999, \"2*x\" \n"
0022 "0, comb, central, 0, 1, 2, 0, 1, 0, 999, \"-2*x\" \n"
0023 "0, comb, central, 0, 1, 2, 1, 2, 0, 999, \"-2*x\" \n"
0024 "3, comb, central, 0, 0, 1, 0, 1, 2, 3, \"2*x\" \n"
0025 "3, comb, central, 0, -1, 0, 0, 1, 2, 3, \"-2*x\" \n"
0026 "1, test, central, 1, -2, 2, 50, 500, 0, 999, \"2*x\" \n"
0027 "1, test, up, 1, -2, 2, 50, 500, 0, 999, \"2.1*x\" \n"
0028 "1, test, down, 1, -2, 2, 50, 500, 0, 999, \"1.9*x\" \n");
0029 stringstream csv1Stream(csv1);
0030 BTagCalibration bc1("csv");
0031 bc1.readCSV(csv1Stream, true);
0032
0033
0034 BTagCalibrationReader bcr1(BTagEntry::OP_LOOSE);
0035 bcr1.load(bc1, BTagEntry::FLAV_B, "comb");
0036 assert(eq(bcr1.eval(BTagEntry::FLAV_B, 3.0, 1.5), 0.));
0037 assert(eq(bcr1.eval(BTagEntry::FLAV_B, 1.5, 3.0), 0.));
0038 assert(eq(bcr1.eval(BTagEntry::FLAV_B, 0.5, 0.5), 1.));
0039 assert(eq(bcr1.eval(BTagEntry::FLAV_B, 0.5, 1.5), 3.));
0040 assert(eq(bcr1.eval(BTagEntry::FLAV_B, 1.5, 0.5), -1.));
0041 assert(eq(bcr1.eval(BTagEntry::FLAV_B, 1.5, 1.5), -3.));
0042 assert(eq(bcr1.eval(BTagEntry::FLAV_B, -1.5, 1.5), -3.));
0043
0044
0045 BTagCalibrationReader bcr2(BTagEntry::OP_RESHAPING);
0046 bcr2.load(bc1, BTagEntry::FLAV_B, "comb");
0047 assert(eq(bcr2.eval(BTagEntry::FLAV_B, 0.5, 0.5, 1.0), 0.));
0048 assert(eq(bcr2.eval(BTagEntry::FLAV_B, 0.5, 0.5, 4.0), 0.));
0049 assert(eq(bcr2.eval(BTagEntry::FLAV_B, 0.5, 0.5, 2.5), 5.));
0050 assert(eq(bcr2.eval(BTagEntry::FLAV_B, -0.5, 0.5, 2.5), -5.));
0051
0052
0053 BTagCalibrationReader bcr3(BTagEntry::OP_MEDIUM, "central", {"up", "down"});
0054 bcr3.load(bc1, BTagEntry::FLAV_C, "test");
0055 assert(eq(bcr3.eval_auto_bounds("central", BTagEntry::FLAV_C, 0.5, 100.), 200., 1e-3));
0056 assert(eq(bcr3.eval_auto_bounds("up", BTagEntry::FLAV_C, 0.5, 100.), 210., 1e-3));
0057 assert(eq(bcr3.eval_auto_bounds("down", BTagEntry::FLAV_C, 0.5, 100.), 190., 1e-3));
0058 assert(eq(bcr3.eval_auto_bounds("central", BTagEntry::FLAV_C, 0.5, 20.), 100., 1e-3));
0059 assert(eq(bcr3.eval_auto_bounds("up", BTagEntry::FLAV_C, 0.5, 20.), 110., 1e-3));
0060 assert(eq(bcr3.eval_auto_bounds("down", BTagEntry::FLAV_C, 0.5, 20.), 90., 1e-3));
0061 assert(eq(bcr3.eval_auto_bounds("central", BTagEntry::FLAV_C, 0.5, 999.), 1000., 1e-3));
0062 assert(eq(bcr3.eval_auto_bounds("up", BTagEntry::FLAV_C, 0.5, 999.), 1100., 1e-3));
0063 assert(eq(bcr3.eval_auto_bounds("down", BTagEntry::FLAV_C, 0.5, 999.), 900., 1e-3));
0064 assert(eq(bcr3.eval_auto_bounds("central", BTagEntry::FLAV_C, 2.5, 100.), 1., 1e-3));
0065 assert(eq(bcr3.eval_auto_bounds("up", BTagEntry::FLAV_C, 2.5, 100.), 1., 1e-3));
0066 assert(eq(bcr3.eval_auto_bounds("down", BTagEntry::FLAV_C, 2.5, 100.), 1., 1e-3));
0067 assert(eq(bcr3.eval_auto_bounds("central", BTagEntry::FLAV_C, -2.5, 100.), 1., 1e-3));
0068 assert(eq(bcr3.eval_auto_bounds("up", BTagEntry::FLAV_C, -2.5, 100.), 1., 1e-3));
0069 assert(eq(bcr3.eval_auto_bounds("down", BTagEntry::FLAV_C, -2.5, 100.), 1., 1e-3));
0070
0071 return 0.;
0072 }