#include #include #include #include #include "Stntuple/alg/TLikelihood.hh" ClassImp(TLikelihood) //____________________________________________________________________________ TLikelihood::TLikelihood(){ } //_____________________________________________________________________________ TLikelihood::~TLikelihood() { } // Central EM sent by Colin Wolfe Aug 30 2004 double TLikelihood::CentralEmIdLikelihood_tIso(double tIso) { double edges[46] = { 0.0132703, 0.454044, 0.666963, 0.946602, 1.27501, 1.64419, 2.03973, 2.43986, 2.85545, 3.27334, 3.69554, 4.10289, 4.50833, 4.90151, 5.30347, 5.6888, 6.08031, 6.48319, 6.87255, 7.28954, 7.68694, 8.07431, 8.47402, 8.87542, 9.29237, 9.70882, 10.1353, 10.5869, 11.0373, 11.5206, 12.0219, 12.5462, 13.0728, 13.6367, 14.2384, 14.8631, 15.548, 16.2709, 17.0707, 17.9548, 18.95, 20.0921, 21.4604, 23.1575, 25.4846, 29.148 }; double l[47] = { 17.848, 9.94125, 6.51659, 4.38564, 2.90282, 1.94241, 1.25096, 0.885184, 0.624486, 0.484896, 0.37601, 0.297027, 0.267767, 0.246464, 0.216404, 0.229878, 0.167739, 0.191191, 0.189718, 0.163372, 0.167739, 0.169077, 0.170717, 0.131625, 0.159013, 0.135925, 0.13736, 0.138699, 0.140283, 0.120202, 0.134443, 0.121626, 0.115975, 0.128763, 0.124434, 0.0989907, 0.0961067, 0.100401, 0.0947007, 0.115894, 0.0862853, 0.0989216, 0.0877465, 0.0639929, 0.0765648, 0.0529905, 0.0466043 }; int i = 0; while(i<46 && tIso>edges[i]) i++; return(log10(l[i])); } double TLikelihood::CentralEmIdLikelihood_isoGeV(double isoGeV) { double edges[51] = { 0.0839215, 0.154994, 0.249648, 0.350473, 0.462286, 0.589823, 0.73057, 0.875174, 1.02859, 1.19017, 1.35243, 1.51489, 1.68188, 1.85147, 2.01679, 2.18188, 2.35415, 2.52096, 2.69225, 2.85717, 3.02634, 3.19907, 3.36902, 3.54197, 3.70897, 3.889, 4.07112, 4.2553, 4.44488, 4.63764, 4.83435, 5.04642, 5.26248, 5.48574, 5.72171, 5.96309, 6.22106, 6.4923, 6.78069, 7.0991, 7.43572, 7.80094, 8.20516, 8.66034, 9.14118, 9.7259, 10.39, 11.1724, 12.1721, 13.5206, 15.7303 }; double l[52] = { 21.945, 16.753, 13.941, 11.121, 9.20271, 7.08422, 6.02035, 4.63836, 3.75368, 2.86224, 2.39646, 1.88884, 1.6549, 1.28362, 1.05803, 0.856019, 0.662788, 0.534436, 0.44628, 0.37275, 0.284624, 0.250982, 0.260009, 0.182409, 0.180877, 0.177946, 0.154646, 0.156095, 0.111664, 0.141606, 0.111703, 0.107415, 0.104588, 0.111664, 0.111664, 0.0960955, 0.0947558, 0.113042, 0.0765293, 0.107453, 0.0905096, 0.0905096, 0.0975364, 0.0821097, 0.0668007, 0.0849058, 0.0709643, 0.0584994, 0.0751366, 0.0821097, 0.0849058, 0.0767924 }; int i = 0; while(i<51 && isoGeV>edges[i]) i++; return(log10(l[i])); } double TLikelihood::CentralEmIdLikelihood_lshr(double lshr) { double edges[50] = { -1.76822, -0.435224, -0.176172, -0.107258, -0.0804843, -0.0631705, -0.050488, -0.0403123, -0.0315443, -0.0240255, -0.0168844, -0.0104115, -0.00400776, 5.14805e-08, 0.00684462, 0.0147121, 0.0242471, 0.0354475, 0.0485655, 0.0637972, 0.0803699, 0.0994539, 0.120818, 0.144668, 0.170477, 0.198621, 0.229159, 0.260826, 0.294318, 0.32949, 0.366606, 0.405513, 0.446138, 0.490334, 0.53716, 0.585464, 0.638357, 0.693925, 0.7588, 0.823433, 0.896075, 0.9755, 1.06213, 1.15695, 1.269, 1.39607, 1.54005, 1.71454, 1.92352, 2.17316 }; double l[51] = { 0.125893, 0.173561, 0.38242, 1.62801, 4.10154, 5.55423, 5.90177, 6.88817, 7.17983, 6.94937, 7.11602, 6.32108, 6.72828, 6.8082, 4.84409, 3.82089, 3.0684, 2.25402, 1.77656, 1.3481, 1.00678, 0.688304, 0.525818, 0.359945, 0.318584, 0.209012, 0.198556, 0.143099, 0.137347, 0.133045, 0.114424, 0.111706, 0.0891093, 0.100356, 0.10459, 0.0989124, 0.100391, 0.0891093, 0.0695771, 0.0947249, 0.070966, 0.0863073, 0.065371, 0.0821402, 0.0474855, 0.111588, 0.0835383, 0.0960642, 0.0877383, 0.0848782, 0.586795 }; int i = 0; while(i<50 && lshr>edges[i]) i++; return(log10(l[i])); } double TLikelihood::CentralEmIdLikelihood_hadem(double hadem) { double edges[53] = { -0.00912321, -0.00771863, -0.00659958, -0.00543564, -0.00438024, -0.00337598, -0.00239999, -0.00141053, -0.000435467, 0.000600156, 0.00167538, 0.0028217, 0.0040526, 0.00533481, 0.0067065, 0.00824635, 0.00988012, 0.011716, 0.0138118, 0.0159517, 0.0183319, 0.0209685, 0.0237243, 0.0266472, 0.0296592, 0.0328967, 0.0362419, 0.0396254, 0.0429801, 0.0464163, 0.0499553, 0.0535439, 0.0571604, 0.0607095, 0.0643703, 0.0679922, 0.0716386, 0.0754204, 0.07916, 0.0831556, 0.0869058, 0.0910104, 0.095238, 0.0996973, 0.104286, 0.1091, 0.114628, 0.122858, 0.135507, 0.153066, 0.180059, 0.223267, 0.315145 }; double l[54] = { 9.44583, 4.86683, 4.04572, 4.04021, 4.01824, 3.74329, 3.6227, 3.41585, 3.50584, 3.42054, 3.02598, 2.91045, 2.88217, 2.66028, 2.51299, 2.41724, 2.33449, 1.9153, 1.71774, 1.44898, 1.22758, 1.10592, 0.874276, 0.72774, 0.543075, 0.476377, 0.426408, 0.356728, 0.296978, 0.243399, 0.23887, 0.19116, 0.188214, 0.163345, 0.141649, 0.158987, 0.14736, 0.111698, 0.12014, 0.14458, 0.104583, 0.125885, 0.103135, 0.0947514, 0.0891031, 0.121606, 0.0905054, 0.0862412, 0.0919408, 0.0877017, 0.0891031, 0.0751331, 0.111659, 0.110785 }; int i = 0; while(i<53 && hadem>edges[i]) i++; return(log10(l[i])); } double TLikelihood::CentralEmIdLikelihood_cesStr(double cesStr) { double edges[53] = { 0.196862, 0.319767, 0.425587, 0.527828, 0.626703, 0.73077, 0.84039, 0.95019, 1.06559, 1.18637, 1.31604, 1.4536, 1.60698, 1.77049, 1.94922, 2.14239, 2.35227, 2.58643, 2.84639, 3.13406, 3.44704, 3.78613, 4.17758, 4.59925, 5.05546, 5.57114, 6.14632, 6.78465, 7.5186, 8.34725, 9.26289, 10.2871, 11.3808, 12.5662, 13.8694, 15.3081, 16.7941, 18.31, 19.8882, 21.5304, 23.3678, 25.3906, 27.7693, 30.4966, 33.6511, 37.3169, 41.6308, 46.7821, 53.1757, 61.1644, 71.89, 87.708, 115.218 }; double l[54] = { 4.37893, 3.20676, 3.11091, 3.33717, 3.05547, 3.09376, 2.8862, 2.80656, 2.96773, 2.8286, 2.59464, 2.5058, 2.35241, 2.32556, 2.19474, 2.14407, 2.05283, 1.85373, 1.59064, 1.5591, 1.40418, 1.14806, 1.10372, 1.02068, 0.88303, 0.771452, 0.696968, 0.612062, 0.508621, 0.510135, 0.385768, 0.385623, 0.26295, 0.287801, 0.219355, 0.222346, 0.201503, 0.19116, 0.213387, 0.208923, 0.229757, 0.213464, 0.22085, 0.179403, 0.207437, 0.197064, 0.173549, 0.148856, 0.166255, 0.14597, 0.144529, 0.160439, 0.188214, 0.246427 }; int i = 0; while(i<53 && cesStr>edges[i]) i++; return(log10(l[i])); } double TLikelihood::CentralEmIdLikelihood(double tIso, double isoGeV, double lshr, double hadem, double cesStr) { return( CentralEmIdLikelihood_tIso(tIso) + CentralEmIdLikelihood_isoGeV(isoGeV) + CentralEmIdLikelihood_lshr(lshr) + CentralEmIdLikelihood_hadem(hadem) + CentralEmIdLikelihood_cesStr(cesStr) ); } // muon likelihood sent by Colin Wolfe Aug 30 2004 double TLikelihood::MuonLikelihood_iso4(double iso4) { double edges[20] = { 0.0187173, 0.119364, 0.154063, 0.201518, 0.258561, 0.326921, 0.407762, 0.49741, 0.613965, 0.755347, 0.938163, 1.18288, 1.50894, 2.00428, 2.79375, 4.37551, 6.43208, 8.98571, 11.8521, 16.0836 }; double l[21] = { 32.3831, 24.0487, 24.0768, 17.5741, 13.8094, 18.8514, 13.8094, 13.1035, 7.82005, 5.5229, 4.95121, 3.6952, 2.22512, 1.31549, 0.768936, 0.196835, 0.0527002, 0.0244818, 0.0117734, 0.0125392, 0.00623436 }; int i = 0; while(i<20 && iso4>edges[i]) i++; return(log10(l[i])); } double TLikelihood::MuonLikelihood_tIso(double tIso) { double edges[13] = { 0.0985694, 0.376415, 0.511858, 0.678915, 0.908669, 1.24814, 1.80379, 2.79936, 4.30274, 6.53151, 9.41064, 14.0733, 23.725 }; double l[14] = { 8.4709, 4.64937, 4.08554, 3.2654, 2.37204, 1.40995, 0.910167, 0.345624, 0.112021, 0.0611021, 0.0436616, 0.0395559, 0.0294865, 0.0596036 }; int i = 0; while(i<13 && tIso>edges[i]) i++; return(log10(l[i])); } double TLikelihood::MuonLikelihood_hadE(double hadE) { double edges[27] = { 0.561405, 1.01, 1.18181, 1.3025, 1.38699, 1.46689, 1.53378, 1.59818, 1.65944, 1.71969, 1.78423, 1.84659, 1.91124, 1.98193, 2.05918, 2.14718, 2.24443, 2.3619, 2.50378, 2.70579, 3.01179, 3.63395, 5.50667, 9.86534, 13.5223, 17.1989, 22.6365 }; double l[28] = { 1.48117, 3.13325, 5.65726, 10.8774, 6.57508, 7.36178, 6.94717, 7.14871, 7.36178, 7.14871, 5.52756, 7.82665, 5.06067, 6.40298, 4.75675, 7.37941, 4.31477, 4.57256, 3.58218, 3.27092, 2.34947, 1.39055, 0.397903, 0.0333279, 0.00541998, 0.0114016, 0.014482, 0.0333378 }; int i = 0; while(i<27 && hadE>edges[i]) i++; return(log10(l[i])); } double TLikelihood::MuonLikelihood_emE(double emE) { double edges[27] = { 0.169595, 0.216775, 0.235961, 0.250576, 0.263205, 0.273381, 0.284246, 0.29406, 0.304078, 0.314175, 0.324811, 0.336067, 0.348997, 0.362548, 0.378541, 0.39628, 0.418619, 0.447135, 0.489225, 0.547881, 0.633144, 0.778566, 1.08025, 1.79586, 4.23103, 8.56469, 17.841 }; double l[28] = { 3.5266, 5.96344, 3.78241, 4.2364, 4.86603, 4.47989, 3.75904, 4.10256, 4.03639, 3.76371, 3.6394, 4.1658, 3.42435, 3.24006, 3.69833, 3.09359, 2.71479, 2.96912, 2.49112, 1.81963, 1.54289, 0.736024, 0.601465, 0.336765, 0.0437354, 0.0117834, 0.0106406, 0.0204915 }; int i = 0; while(i<27 && emE>edges[i]) i++; return(log10(l[i])); } double TLikelihood::MuonLikelihood(double iso4, double tIso, double hadE, double emE) { return( MuonLikelihood_iso4(iso4) + MuonLikelihood_tIso(tIso) + MuonLikelihood_hadE(hadE) + MuonLikelihood_emE(emE) ); } // Plug EM by Colin Wolfe Nov 9 2004 MCWplugEmIdLikelihood double TLikelihood::PlugEmIdLikelihood_fraciso4(double fraciso4) { double edges[18] = { -0.00194071, 0.00180158, 0.00536948, 0.00943392, 0.0140622, 0.0200566, 0.0273265, 0.0397794, 0.0667639, 0.146686, 0.288063, 0.522803, 0.947566, 1.70789, 2.69042, 4.32006, 7.16875, 12.4774 }; double l[19] = { 198.301, 185.359, 76.4546, 96.4157, 61.2597, 62.3897, 28.2288, 22.4861, 5.76871, 1.02097, 0.258795, 0.100525, 0.0211041, 0.00221264, 0.000201149, 0.000201149, 0.000201149, 0.000201149, 0.00020435 }; int i = 0; while(i<18 && fraciso4>edges[i]) i++; return(log10(l[i])); } double TLikelihood::PlugEmIdLikelihood_pes(double pes) { double edges[15] = { 0, 0.298729, 0.612163, 0.657406, 0.694345, 0.725575, 0.748528, 0.765578, 0.778074, 0.789532, 0.797788, 0.80726, 0.817263, 0.829384, 0.849714 }; double l[16] = { 6.50183e-05, 8.84846e-05, 0.19549, 0.321804, 0.508019, 0.763401, 1.58431, 3.61243, 4.72075, 7.13967, 8.16647, 10.8454, 12.6965, 17.0313, 25.8761, 12.5822 }; int i = 0; while(i<15 && pes>edges[i]) i++; return(log10(l[i])); } double TLikelihood::PlugEmIdLikelihood_hadem(double hadem) { double edges[17] = { 0.000418384, 0.00238132, 0.00379096, 0.00510554, 0.00653946, 0.00823279, 0.0100995, 0.0122736, 0.0156113, 0.0202604, 0.0275629, 0.037618, 0.0492608, 0.0630372, 0.0765585, 0.0904401, 0.104558 }; double l[18] = { 0.584629, 29.6401, 14.8683, 10.9626, 9.75444, 8.74377, 4.49215, 4.68261, 2.90111, 2.02821, 0.999751, 0.458115, 0.208912, 0.110122, 0.06898, 0.0615316, 0.0457507, 0.0385842 }; int i = 0; while(i<17 && hadem>edges[i]) i++; return(log10(l[i])); } double TLikelihood::PlugEmIdLikelihood(double fraciso4, double pes, double hadem) { return( PlugEmIdLikelihood_fraciso4(fraciso4) + PlugEmIdLikelihood_pes(pes) + PlugEmIdLikelihood_hadem(hadem) ); }