diff --git a/DQM/EcalMonitorClient/interface/MLClient.h b/DQM/EcalMonitorClient/interface/MLClient.h index d8d8a2af92ba8..777e1de6bbf29 100644 --- a/DQM/EcalMonitorClient/interface/MLClient.h +++ b/DQM/EcalMonitorClient/interface/MLClient.h @@ -18,22 +18,48 @@ namespace ecaldqm { private: void setParams(edm::ParameterSet const&) override; - //Each Ecal Barrel occupancy map is plotted at the tower level - //34 towers in the eta and 72 towers in the phi directions - static const int nEtaTowers = 34; - static const int nPhiTowers = 72; - //After padding with two rows above and below to prevent the edge effect, 36 towers in eta direction - static const int nEtaTowersPad = 36; - float MLThreshold_; - float PUcorr_slope_; - float PUcorr_intercept_; - size_t nLS = 3; //No.of lumisections to add the occupancy over + //Occcupancy map is plotted at the tower level + //For the EB: 34 towers in the eta and 72 towers in the phi directions + static const int nEBEtaTowers = 34; + static const int nEBPhiTowers = 72; + //For the EE: 20 towers in the eta and 20 towers in the phi directions + static const int nEEEtaTowers = 20; + static const int nEEPhiTowers = 20; + //After padding with two rows above and below to prevent the edge effect + //For EB: 36 towers in eta direction + //For EE: padding on all four sides, 22 towers in both eta and phi directions. + static const int nEBEtaTowersPad = 36; + static const int nEETowersPad = 22; + float EBThreshold_; + float EEpThreshold_; + float EEmThreshold_; + float EB_PUcorr_slope_; + float EEp_PUcorr_slope_; + float EEm_PUcorr_slope_; + float EB_PUcorr_intercept_; + float EEp_PUcorr_intercept_; + float EEm_PUcorr_intercept_; + + size_t nLS = 4; //No.of lumisections to add the occupancy over size_t nLSloss = 6; //No.of lumisections to multiply the loss over + int nbadtowerEB; //count the no.of bad towers flagged by the ML model. + int nbadtowerEE; + int LScount = 0; //count no.of lumisections over which the MLquality is made. + + std::deque NEventQ; //To keep the no.of events in each occupancy plot - std::deque NEventQ; //To keep the no.of events in each occupancy plot - std::deque> ebOccMap1dQ; //To keep the input occupancy plots to be summed - std::vector avgOcc_; //To keep the average occupancy to do response correction - std::deque>> lossMap2dQ; //To keep the ML losses to be multiplied + //To keep the input occupancy plots to be summed + std::deque> ebOccMap1dQ; + std::deque> eepOccMap1dQ; + std::deque> eemOccMap1dQ; + //To keep the average occupancy to do response correction + std::vector EBavgOcc; + std::vector EEpavgOcc; + std::vector EEmavgOcc; + //To keep the ML losses to be multiplied + std::deque>> EBlossMap2dQ; + std::deque>> EEplossMap2dQ; + std::deque>> EEmlossMap2dQ; }; } // namespace ecaldqm diff --git a/DQM/EcalMonitorClient/python/MLClient_cfi.py b/DQM/EcalMonitorClient/python/MLClient_cfi.py index b5aca211b590a..61c4df38bc52c 100644 --- a/DQM/EcalMonitorClient/python/MLClient_cfi.py +++ b/DQM/EcalMonitorClient/python/MLClient_cfi.py @@ -2,395 +2,40 @@ from DQM.EcalMonitorTasks.OccupancyTask_cfi import ecalOccupancyTask -#parameters dervied from training -MLThreshold = 0.1761 -PUcorr_slope = 8625.62354249 -PUcorr_intercept= 354776.97564344 -#Avg Occupancy of 2018 data -avgOcc = (1.4228867,1.4111477,1.4235557,1.403253 ,1.2926203,1.3110067,1.4317631, - 1.3582464,1.3350165,1.3870461,1.4315553,1.4340966,1.3463646,1.4664359, - 1.4383692,1.4883132,1.4921986,1.4414848,1.4935918,1.5053873,1.4814812, - 1.4806937,1.4688585,1.3852754,1.2133822,1.217942 ,1.2934631,1.2623638, - 1.4084297,1.2852081,1.3383209,1.3197039,1.2672714,1.2089411,1.2792134, - 1.2820784,1.2973225,1.2019042,0.0000001,1.2586329,1.424472 ,1.4129552, - 1.5303715,1.5035893,1.3739808,1.4674091,1.3101934,1.3559604,1.3654169, - 1.3723816,1.351616 ,1.3782867,1.6634412,1.6218939,1.5776167,1.5967489, - 1.4352198,1.4457697,1.5257363,1.5936497,1.2177914,1.1892394,1.2968882, - 1.2645309,1.333104 ,1.246442 ,1.2484925,1.2413881,1.3511598,1.3742812, - 1.3659753,1.3767184,1.4228867,1.4111477,1.4235557,1.403253 ,1.2926203, - 1.3110067,1.4317631,1.3582464,1.3350165,1.3870461,1.4315553,1.4340966, - 1.3463646,1.4664359,1.4383692,1.4883132,1.4921986,1.4414848,1.4935918, - 1.5053873,1.4814812,1.4806937,1.4688585,1.3852754,1.2133822,1.217942 , - 1.2934631,1.2623638,1.4084297,1.2852081,1.3383209,1.3197039,1.2672714, - 1.2089411,1.2792134,1.2820784,1.2973225,1.2019042,0.0000001,1.2586329, - 1.424472 ,1.4129552,1.5303715,1.5035893,1.3739808,1.4674091,1.3101934, - 1.3559604,1.3654169,1.3723816,1.351616 ,1.3782867,1.6634412,1.6218939, - 1.5776167,1.5967489,1.4352198,1.4457697,1.5257363,1.5936497,1.2177914, - 1.1892394,1.2968882,1.2645309,1.333104 ,1.246442 ,1.2484925,1.2413881, - 1.3511598,1.3742812,1.3659753,1.3767184,1.1556679,1.3391551,1.373256 , - 1.3540887,1.2471408,1.2453951,1.2790504,1.3212276,1.3020328,1.3587664, - 1.3487176,1.3814243,1.3593339,1.3286781,1.2952926,1.3192601,1.4060221, - 1.4540101,1.4574795,1.3729581,1.4051903,1.3568325,1.3918067,1.4169109, - 1.3129637,1.2971104,1.2642334,1.289142 ,1.3558336,1.2786664,1.296219 , - 1.298685 ,1.2628139,1.2494673,1.294434 ,1.2733648,1.2478417,1.1872551, - 1.2146964,2.0395069,1.5262315,1.4894062,1.4284101,1.4169872,1.352527 , - 1.3618537,1.3673831,1.334716 ,1.3480678,1.4098777,1.4061071,1.3918567, - 1.5523838,1.5230404,1.4913341,1.4753877,1.4160846,1.4024036,1.4175566, - 1.4888357,1.2680489,1.2883663,1.3472272,1.3023057,1.3586241,1.3383816, - 1.2996044,1.3184984,1.3418843,1.3903407,1.4139845,1.4251099,1.305113 , - 1.2633995,1.2851918,1.2743814,1.1825788,1.2547469,1.2440559,1.2770063, - 1.2717891,1.3396428,1.3710004,1.3859975,1.2798804,1.2516749,1.2677492, - 1.2683048,1.2613889,1.2783653,1.2966883,1.2827859,1.3206561,1.3148078, - 1.2636309,1.3001962,1.2161207,1.1910689,1.1688411,1.1911243,1.2880307, - 1.2225945,1.2570652,1.2086593,1.2767646,1.2320539,1.1953772,1.2159386, - 1.2037021,1.1857734,1.1674342,1.1956853,1.3138844,1.2758864,1.2300162, - 0.6665614,1.3036094,1.3088627,1.2554388,1.2967263,1.2841691,1.2875917, - 1.3089112,1.3331639,1.266067 ,1.2455457,1.2334898,1.2674097,1.276027 , - 1.1690655,1.1995609,1.199487 ,1.1338224,1.1563799,1.2194781,1.2064027, - 1.2493043,1.2673064,1.2891188,1.2735461,1.2408122,1.2415621,1.254231 , - 1.2100532,1.226575 ,1.2035872,1.2445701,1.1773577,1.1374254,1.1708428, - 1.1746327,1.1776469,1.2238355,1.2399627,1.2557915,1.2581828,1.1821021, - 1.1796409,1.2347831,1.248196 ,1.2299678,1.2151593,1.2597338,1.2399808, - 1.1583205,1.1536306,1.2159789,1.3336231,1.1655421,1.1663706,1.5020412, - 1.1574144,1.1892532,1.1677798,1.1635669,1.1543789,1.3043314,1.1876005, - 0.9521286,1.2199527,1.0653542,1.0589734,1.117103 ,1.0546287,1.2312565, - 1.1999464,1.1566527,1.1649921,1.246702 ,1.2841538,1.2533325,1.180725 , - 1.2153618,1.2312846,1.3220999,1.1518214,1.1985146,1.1956019,1.2026757, - 1.220378 ,1.2158185,1.1656332,1.1459147,1.1440367,0.0000001,1.106721 , - 1.2046571,1.1799783,1.1971282,1.2399644,1.2104925,1.1782469,1.2648659, - 1.2725782,1.2706518,1.2750179,1.1781482,1.1746165,1.1428392,1.1554896, - 1.08052 ,1.1252075,1.0796442,1.0661097,1.1994307,1.1427931,1.1547704, - 1.1450479,1.1638263,1.1558805,1.1312499,1.1190377,1.1767929,1.1355052, - 1.1739364,1.1897258,1.1543195,1.2075775,1.1802915,1.1443394,1.0686296, - 1.0484798,1.1059129,1.1041118,1.0907497,1.0863662,1.0989137,1.1160423, - 1.1354574,1.0911841,1.0848287,1.0849218,1.0303825,1.0509577,1.1060627, - 1.0906715,1.163807 ,1.1446611,1.1357274,1.1637452,1.1761752,1.1996605, - 1.1433704,1.1708797,1.0934016,1.1287714,1.1213528,0.9135892,1.1128932, - 1.1062543,1.0822164,1.1020374,1.1105623,1.0700424,1.0619079,1.1016523, - 1.0585421,1.0115267,1.031876 ,1.0759147,1.1201001,1.1058998,1.0973803, - 1.1015209,1.1435407,1.14981 ,1.1311004,1.1691828,1.1759555,1.1401734, - 1.1672325,1.1874546,1.0948305,1.0863739,1.1059391,1.0986216,1.1788837, - 1.1270268,1.1239996,1.1002039,1.1389588,1.141233 ,1.083227 ,1.0877259, - 1.1431438,1.1221772,1.1199503,1.1654431,1.1736141,1.1989235,1.1978018, - 1.167959 ,1.0133513,1.0567273,1.0395187,1.0680603,1.0610994,1.0597148, - 1.0684566,1.0339921,1.1405144,1.1203558,1.0788041,1.0960815,1.0242732, - 0.9811422,1.0137647,1.0043021,1.1159075,1.1183313,1.1035389,1.1150508, - 1.117763 ,1.1088306,1.0894555,1.1437987,1.1288823,1.1197007,1.1289188, - 1.1122833,1.1094319,1.0663022,1.0441525,1.0901659,1.1118773,1.1093612, - 1.0880778,1.0673048,1.0135869,0.9895969,1.0111624,0.994159 ,1.157239 , - 1.1461102,1.0853236,1.0694305,1.2243338,1.1992161,1.1530303,1.2302727, - 1.1132525,1.0987779,1.1112196,1.0841962,1.1152277,1.0965806,1.1059502, - 1.0867471,1.1308132,1.1056805,1.0888016,1.073627 ,1.1095271,1.0971298, - 1.0672264,1.0892332,1.1054503,1.0687332,1.0934203,1.1355063,1.24187 , - 1.2197568,1.2120614,1.1968735,1.0238991,0.9819736,0.9891209,1.0145121, - 1.0608021,1.0184129,1.0311555,1.0517814,1.1033106,1.0689223,1.0606674, - 1.0605292,1.0284557,0.971954 ,0.9526132,1.04703 ,1.128279 ,1.0795844, - 1.0738314,1.107188 ,1.1450828,1.1231935,1.0905402,1.1256251,1.1096694, - 1.0497596,1.0524868,1.0812023,1.0472693,1.0021344,1.0382787,1.0649058, - 1.0950122,1.0948782,1.0399659,1.0673079,1.0342895,1.0013512,0.9988917, - 1.0112954,1.0890151,1.042002 ,1.041176 ,1.0243192,1.1275606,1.1135633, - 1.1377431,1.1745214,1.1230987,1.0614204,1.0361215,1.1119354,1.0850902, - 1.0927483,1.1078453,1.077041 ,1.0753678,1.0642383,1.067675 ,1.1028837, - 1.0942855,1.0852079,1.0798481,1.088132 ,1.1058763,1.0810122,1.0625142, - 1.1011781,1.1856151,1.196195 ,1.1612228,1.1422418,0.9793076,0.9765419, - 0.9804395,1.0156407,1.0480926,1.0464298,1.0522102,1.0688092,1.1212629, - 1.0395747,0.9926344,1.0080917,1.0007402,0.9855192,0.9907292,0.9954209, - 1.1032989,1.0986856,1.1330308,1.1098777,1.1356755,1.1181957,1.113232 , - 1.1295322,1.1084793,1.0193369,1.0491607,1.0724577,1.0785445,1.0371226, - 0.0036721,1.0269073,1.0965271,1.0695037,1.0664477,1.087617 ,0.9891936, - 0.9989811,1.0070362,1.0190035,1.0781424,1.0664753,1.0687553,1.0421116, - 1.1388807,1.1237614,1.1355482,1.1830119,1.0553507,1.044697 ,1.0408233, - 1.0398819,1.0669746,1.0332361,1.0301825,0.9893497,1.059479 ,1.0278772, - 1.0176086,1.0205175,1.0467259,1.0548677,1.0646734,1.0527669,1.0866866, - 1.0472943,1.0426059,1.0849829,1.0999873,1.1246853,1.1031482,1.0814158, - 0.9405594,0.9336581,0.9254869,0.9352036,1.0345708,0.9965525,0.9950148, - 1.0257301,1.1129664,0.9780049,0.9502401,0.9700456,1.0284607,1.0213796, - 0.9910805,1.0367672,1.0796332,1.0587161,1.0674927,1.0761822,1.0794786, - 1.0831254,1.0830816,1.1075894,0.0126334,0.92802 ,0.9371951,0.9496164, - 1.0454251,1.0489166,1.0143294,1.0061715,1.0771358,1.0521995,1.0829998, - 1.0526272,0.9770707,0.9811446,0.9211687,0.947929 ,1.0504178,0.0000001, - 1.0035456,1.0284821,1.1091976,1.0872326,1.0880209,1.133727 ,1.014713 , - 0.9581099,0.9811009,1.0093567,1.0370228,0.989569 ,0.9988301,0.9841469, - 0.9527792,0.9855899,0.9826103,0.9610231,1.0160042,0.9992726,1.0005047, - 0.9965398,1.0511478,0.9744592,1.0089016,1.0331134,1.0977989,1.0927752, - 1.0878357,1.0548981,0.9570927,0.9533063,0.9489567,0.9408886,0.9869403, - 0.9708263,0.9788091,0.9671838,0.9488644,0.9382011,0.9179539,0.9175838, - 0.9908231,0.933664 ,0.9034764,0.929096 ,1.0545647,0.9846775,1.0010679, - 0.9964607,1.0280262,1.0288763,0.9798051,0.9853348,0.9509227,0.9410004, - 0.8996611,0.9309286,1.0092912,0.9800311,0.9862539,0.9823382,0.9956134, - 0.9848503,0.9927089,0.9988752,0.9427151,0.9123654,0.9192433,0.9211756, - 0.9682457,0.9614248,0.940841 ,2.9108264,1.0182347,1.0328737,1.0335125, - 1.0162688,0.9742591,0.9400508,0.9223933,0.9612672,0.9902653,0.9835137, - 0.9622135,0.9489338,0.9200854,0.9142317,0.9246915,0.9710323,0.9510582, - 0.986548 ,0.9715658,0.9551507,0.9795502,0.9373934,0.9590609,0.9864878, - 1.0536214,1.0606204,1.0470799,1.0450804,0.9423648,0.9130962,1.2390996, - 0.9090152,0.9728571,0.9594254,0.9378965,0.9442697,0.9128348,0.9111411, - 0.8573027,0.9057387,0.8775638,0.8585867,0.871328 ,0.8851443,1.0256898, - 0.9997756,1.0087074,0.9802992,1.0048345,0.986007 ,0.9939928,0.9924014, - 0.9393591,0.8975831,0.9569556,0.9221528,1.0005504,0.9573966,0.9446875, - 0.9525049,0.9864134,0.9616978,0.9709904,0.9688258,0.9331638,0.8939223, - 0.9041911,0.9179978,0.9570236,0.9535987,0.9462896,0.9406717,1.0385262, - 1.0471946,1.0040003,1.0764723,0.9440772,0.9303069,0.9388188,0.9624437, - 0.9522971,0.9236505,0.921064 ,0.9153899,0.9239462,0.9149684,0.9110753, - 0.9250061,0.9977021,0.9575272,0.9395442,0.9242274,0.8905004,1.215517 , - 0.9538251,0.9689807,1.0420041,1.0098691,1.0688168,0.9420413,0.9071479, - 0.9233371,0.8648853,0.9046464,0.944227 ,0.9231179,0.9260064,0.9462502, - 0.8824298,0.0000001,0.8896712,0.9343744,0.9496966,0.9062078,0.9076006, - 0.8920029,0.9911788,0.9509735,0.9620247,0.9532838,0.9553664,0.966219 , - 0.9766419,0.9830272,0.9704874,0.9066846,0.9014828,0.9114758,0.9525748, - 0.9449465,0.9234739,0.9165454,0.9440705,0.9461663,0.936758 ,0.9713703, - 0.9236538,0.9208513,0.891026 ,0.8855084,0.9444764,0.9177411,0.9162141, - 0.9445439,1.0220059,1.0118829,1.0278999,1.0203037,0.9124752,0.8955967, - 0.9001777,0.8839747,0.8924397,0.884959 ,0.9014532,0.8925565,0.7268787, - 0.8359309,0.8754961,0.8911034,0.9268813,0.9161255,0.9086187,0.853088 , - 0.9073059,0.8781778,0.9306351,0.9155804,0.9369089,0.9953336,0.9929911, - 0.9851077,0.8977557,0.8955045,0.8884436,0.8941315,0.921898 ,0.8701018, - 0.9078636,0.8981934,0.8977088,0.8691131,0.8413706,0.8976212,0.876539 , - 1.4657505,0.8280094,0.8627123,0.9547047,0.9364532,0.9272763,0.9186774, - 0.941437 ,0.9263571,0.9280555,0.9123494,0.9105576,0.9997209,0.9331673, - 0.9702676,0.911276 ,0.8823292,0.9235324,0.915177 ,0.9073598,0.8663465, - 0.8806252,0.8953832,0.8542768,0.8170022,0.8364354,0.8324253,0.9117646, - 0.8914846,0.882292 ,0.8745112,0.9651436,0.9339125,0.908168 ,0.8983836, - 1.0204283,1.014069 ,0.8514856,0.8366709,0.0000001,0.8435681,0.8716656, - 0.8663046,0.8687047,0.8607368,0.853239 ,0.8538001,0.9117879,0.8984275, - 0.9074128,0.8910619,0.9175624,0.9058829,0.9104028,0.9016951,0.9979504, - 1.0018495,0.9727136,0.9829723,0.8593063,0.8864803,0.8331164,0.8243229, - 0.8761157,0.84732 ,0.8649628,0.8924447,0.8528641,0.8461951,0.8256967, - 0.8219401,0.8493258,0.8396199,0.8288802,0.8688241,0.9221398,0.9144458, - 0.9145495,0.8767081,0.9111733,0.9246608,0.9190454,0.9145585,0.8979622, - 0.9213055,0.9043622,0.9187738,0.8733439,0.9010628,0.8879052,0.8862385, - 0.886833 ,0.8412263,0.8744929,0.8971784,0.7947825,0.7808067,0.720468 , - 0.7835823,0.8811975,0.8858461,0.8736796,0.8753381,0.9216196,0.9133907, - 0.877441 ,0.9787805,0.8858882,1.0329753,0.8817087,0.0000001,0.8540137, - 0.8454756,0.8776406,0.8772608,0.878461 ,0.817844 ,0.8320211,0.7978509, - 0.9232702,0.9232559,0.9103069,0.9115226,0.9466796,0.9346468,0.9280509, - 0.9378798,0.9828502,0.9918494,0.9742755,0.9657697,0.8602819,0.8742782, - 0.8663973,0.8632851,0.9069272,0.8904232,0.892713 ,0.9054623,0.8925498, - 0.868188 ,0.8912911,0.8767484,0.8553541,0.8425062,0.8211766,0.8539204, - 0.9321883,0.9126161,0.9168343,0.8570537,0.8895695,0.8795208,0.9255748, - 0.9180104,0.9300255,0.9378335,0.9242839,0.9336899,0.920904 ,2.8812766, - 0.9271864,0.8993225,0.8857986,0.8936499,0.8895433,0.8900022,0.8410531, - 0.8081046,0.8150144,0.8173641,0.8881866,0.8837494,0.8417418,0.8877832, - 0.9664047,0.9465755,0.8891603,1.0593798,1.0501429,1.0378563,0.9041524, - 0.9222154,0.9227488,0.8894223,1.1206282,0.8359311,1.1750071,0.8632696, - 0.0000001,0.8440654,0.9061905,0.9033526,0.9075296,0.9265232,0.9251202, - 0.9390653,0.9226105,0.935118 ,1.0248573,0.9950228,1.016836 ,1.0150337, - 0.8846998,0.8870716,0.8825005,0.8993919,0.9015642,0.917635 ,0.9108042, - 0.9158255,0.8933692,0.8818774,0.8733479,0.8590702,0.8610741,0.8412985, - 0.8419823,0.8535126,0.9552853,0.9233503,0.9074404,0.8874421,0.0000001, - 0.9037543,0.9428068,0.9528409,0.8795176,0.8777585,0.9160822,0.9397873, - 0.9309441,0.9063056,0.9192985,0.9255057,0.9270568,0.9176704,0.9140722, - 0.9111696,0.8597785,0.8489559,0.843753 ,0.8581451,0.9068368,0.8959244, - 0.9229929,0.871972 ,0.9834073,0.9476991,0.9360896,1.081524 ,0.9255442, - 0.9070221,0.9115756,0.9298295,0.9134066,0.9056591,0.9027434,0.8674105, - 0.9019305,0.8612094,0.8585056,0.854815 ,0.0000001,0.9021256,0.9177787, - 0.9240243,0.9644239,0.9404687,0.9274049,0.9379409,1.0399606,1.033352 , - 1.0249641,1.0473272,0.8932669,0.9111941,0.8852406,0.8920174,0.9242499, - 0.9056967,0.9006191,0.9015262,0.9182317,0.9183906,0.9038095,0.904799 , - 0.8838023,0.8785893,0.8584824,0.8979258,0.9706077,0.9469935,0.9398977, - 0.894461 ,0.93994 ,0.923337 ,0.9488781,0.9627277,0.9054735,0.9163985, - 0.8944787,0.9150251,1.0493075,0.9096289,0.9115776,0.9412426,0.9343278, - 0.9121064,0.9117633,0.9251044,0.8971121,0.8652557,0.8633423,0.8604623, - 0.9248523,0.9076622,0.917069 ,0.8871456,0.7269943,0.9629616,0.9667225, - 0.9250519,0.9176884,0.8880241,0.9236936,0.9247792,1.0054232,1.0092628, - 0.9994277,0.9991693,0.9058928,0.91171 ,0.9149265,0.915843 ,0.8517995, - 1.2385432,0.8757702,0.8800565,0.9347579,0.9362207,0.9103072,0.9455385, - 0.8727469,0.8400666,0.8438162,0.8415763,0.9646621,0.9707538,0.9637925, - 0.9641757,0.9592127,0.952417 ,0.943792 ,0.925786 ,0.9483845,0.9503665, - 0.9362003,0.9343288,0.9373538,0.9214206,0.9170751,0.9483343,0.9092611, - 0.9025595,0.9094557,0.8846688,0.9492338,0.9302807,0.9313844,0.9440831, - 0.9525137,0.9451442,0.9452839,0.9544351,1.036723 ,1.0263921,0.9881323, - 0.9197441,0.9673854,0.9597923,0.9846507,0.9979741,0.9559562,0.9387934, - 0.9402372,0.9639017,0.9070854,0.9081604,0.8969148,0.8985816,0.8914095, - 0.9212565,0.9167472,0.9287409,0.902436 ,0.8889644,0.8948577,0.9066438, - 0.9909534,0.9763708,0.9878008,0.9885211,0.8955337,0.8991327,0.8798093, - 0.8914046,0.8749264,0.8727064,0.8536081,0.8715125,0.8831692,0.8919016, - 0.890573 ,0.8926457,0.8800267,0.8306233,0.0000001,0.8467921,0.9303848, - 0.9340462,0.9263893,0.9474682,0.9142375,0.9178317,0.8966044,0.8933908, - 1.0630243,0.9105239,0.8925556,0.908989 ,0.9122123,0.894343 ,0.9251699, - 0.9552048,0.900656 ,0.8886392,0.9272086,0.8625895,0.9300183,0.934134 , - 0.9291555,0.9527701,0.9416874,0.9565993,0.9468805,0.9310883,0.9963626, - 0.981036 ,0.9834724,0.8948759,0.8951459,0.9467054,1.045526 ,0.9973741, - 0.9467732,0.9394466,0.9388553,0.9175566,0.8865193,0.8930401,0.8786154, - 0.8805791,0.9849347,0.8849503,0.9020472,0.9081354,0.8883678,0.8618975, - 0.8621318,0.8847593,0.9791163,0.9981784,0.9598348,0.9630426,0.8954888, - 0.9089435,0.906523 ,0.9254694,0.8724284,1.549498 ,0.854642 ,0.8899876, - 0.884106 ,0.8911538,0.8788657,0.8989016,0.8683069,0.8187966,0.8331737, - 0.8169547,0.9497713,0.9372764,0.9718387,0.9716983,0.8817951,0.9177381, - 0.9272385,0.9305192,0.9138 ,0.8917226,0.9022007,0.8728969,0.8857559, - 0.8511966,0.8776945,0.9188874,0.8799872,0.8727769,0.8972793,0.8775748, - 0.9025099,0.9059016,0.9018834,0.9358472,0.9280242,0.9306515,0.930319 , - 0.9408762,0.9894212,0.9801961,0.9481966,0.930518 ,0.9068527,0.926452 , - 0.9481174,0.9932294,0.9508854,0.9168876,0.8955552,0.9298086,0.8856096, - 0.8778232,0.8678781,0.8428098,0.8649303,0.8521905,0.8853881,0.896262 , - 0.8637611,0.8508386,0.8579808,0.8781487,0.9782724,0.9819542,0.967945 , - 0.9718521,0.8657284,0.8617702,0.8596571,0.8718904,0.815865 ,0.9508535, - 0.8448715,0.8618798,0.9203976,0.8956626,0.9108895,0.9208714,0.8267219, - 0.8333327,0.8175609,0.8405349,0.9207596,0.9302374,0.922721 ,0.9375702, - 0.8972806,0.9022034,0.9092163,0.8919818,0.9115573,0.8941678,0.9727003, - 0.8788491,0.8066372,0.8540529,0.8720537,0.9097501,0.881356 ,0.8739368, - 0.9094095,0.8718069,0.9059213,0.9068483,0.8904512,0.903352 ,0.9266117, - 0.9053527,0.8990905,0.9183056,0.9928399,0.9813229,0.9759782,0.9492933, - 0.9382915,0.9312818,0.9518742,0.9820717,0.9150143,0.8835462,0.905087 , - 0.9380701,0.8669695,0.8730215,0.8537797,0.842343 ,0.8181646,0.8662508, - 0.8914459,0.8917838,0.8953646,0.8582759,0.8843335,0.9019104,0.9775726, - 0.9695851,0.9684169,0.9945092,0.8906423,0.9011754,0.8905966,0.9067472, - 0.8615755,0.8759038,0.8511059,0.8939573,0.9214789,0.8934948,0.9003874, - 0.9254834,0.8977927,0.8781966,0.8783478,0.8897681,0.9544448,0.9752168, - 0.9538611,0.9523727,0.8953019,0.8955504,0.8835472,0.9036127,0.9425184, - 0.9428679,0.9121487,0.8942021,0.8973826,0.8607216,0.8798548,0.9563062, - 0.9242093,0.8927971,0.9064167,0.8659616,0.9165348,0.9324718,0.9197962, - 0.9270453,0.9173116,0.9100388,0.8664268,0.9012297,0.9287284,0.9629037, - 0.9950356,1.0044856,0.9998307,0.9981116,1.0173699,1.0312284,0.9523295, - 0.927979 ,0.9188983,0.9468584,0.8899338,0.8799069,0.8932109,0.8625482, - 0.8758663,0.8662992,0.8897169,0.8896759,0.9471669,0.8646078,0.9203457, - 0.9465771,1.0671935,1.0762529,1.0574509,1.0543979,0.950247 ,0.9430968, - 0.9417606,0.960602 ,0.8665491,0.8781953,0.8720518,0.8933613,0.9384555, - 0.9348907,0.9343287,0.9597977,0.9400162,0.9181851,0.9304919,0.9181332, - 0.9856796,0.989359 ,0.979789 ,0.9625634,1.0298804,0.9681855,0.926324 , - 0.9493014,0.952226 ,0.9659102,0.9622204,0.9933803,0.9975445,0.9534022, - 0.9508471,1.0023971,0.925873 ,0.9181251,0.9037386,0.9369083,0.9686341, - 0.951229 ,0.9527286,0.9704438,0.952726 ,0.9563661,0.9672213,0.9009546, - 0.891305 ,0.9141365,0.9042941,0.9908844,1.02451 ,1.0002937,1.0145459, - 1.0238333,0.9640087,0.9803975,0.9345359,0.9562771,0.9798419,0.9632123, - 0.9474075,0.9594575,0.9523167,0.9568143,0.9725029,0.9635358,0.8913772, - 0.9376766,0.9153062,0.9443082,1.0907506,1.0779955,1.0835589,1.077103 , - 0.94592 ,0.9423046,0.9353216,1.0058889,0.8812236,0.8900912,0.8739714, - 0.908954 ,0.9684916,0.9758947,0.9528789,0.9715638,0.9147444,0.9392554, - 0.9166325,0.9577266,1.0328426,1.0275623,0.9930462,1.0105317,1.0487862, - 1.0094688,0.9696991,0.9790145,0.9874703,0.9714156,1.0046459,0.9714112, - 0.9987967,0.9554723,0.9812179,1.0174359,0.9316527,0.9212265,0.9473284, - 0.9529327,0.9768106,0.9761072,0.9925398,1.0105116,0.9765943,0.9735287, - 0.9720789,0.9780715,0.8837507,0.9996244,1.0094591,0.963135 ,1.0569199, - 1.0577636,1.0485023,1.0917665,1.0001658,0.9943501,0.994733 ,0.9737829, - 0.9874289,0.9499856,0.9437758,0.9718275,0.9466712,0.9368256,0.9245117, - 0.9746943,0.9231877,0.94381 ,0.9099722,0.9743401,1.0912923,1.0798532, - 1.0705048,1.0671401,1.0020626,0.9723217,0.9538407,1.0237085,0.9082063, - 0.9232261,0.9122615,0.9056468,1.0189087,1.0061275,1.0277444,1.0416385, - 0.962988 ,0.9448321,0.9274885,0.9500597,1.0350192,1.0535637,1.0434896, - 1.0389384,1.0624195,1.0245159,1.0062119,1.0112492,0.9908073,1.0161494, - 1.0189636,1.0372617,1.0417999,0.9965699,0.98918 ,1.0221821,0.9552784, - 0.9465883,0.9436496,0.9627379,0.9957007,0.9908555,1.0349085,1.051325 , - 1.028265 ,0.9742572,0.9853188,1.0277784,1.0784379,1.0248644,1.003191 , - 1.053859 ,1.0747 ,1.0681137,1.0964813,1.1012894,1.0878161,1.0215803, - 1.0319945,1.0705597,1.0117067,1.0089118,0.9623004,0.9945062,0.9931936, - 0.9826046,0.9807656,0.9893571,0.9855912,0.9956348,1.0180117,1.0992355, - 1.1510247,1.1642762,1.1348028,1.173378 ,1.0495415,1.0537665,1.0280858, - 1.0769577,0.9539952,0.9503716,0.9480621,0.9564386,1.0447392,1.055281 , - 1.0632157,1.0446833,0.9611291,0.9580613,1.0140576,1.0192964,1.1120509, - 1.0763414,1.0876051,1.0807177,1.0965352,1.0385919,1.0403399,1.010437 , - 1.0453093,1.0263721,1.0174105,1.0635544,1.0635546,1.0340421,0.9741846, - 1.0584152,1.0422455,0.9897347,0.9849003,1.0250511,1.0373392,1.0450774, - 1.0938035,1.0942651,1.0443715,1.0503259,1.057446 ,1.0592597,1.0620625, - 1.1111387,1.1216173,1.07478 ,1.1132259,1.1209106,1.1106815,1.1423119, - 1.1024584,1.1221232,1.0857874,1.119742 ,1.0454632,1.0458753,1.0386395, - 1.0446345,1.0093486,1.031795 ,1.0488297,1.0821855,1.0077721,0.989686 , - 1.0048161,1.0512829,1.1880068,1.1788449,1.1607702,1.1446868,1.0427889, - 1.0694175,1.0607653,1.0898038,1.0094677,0.9899454,1.0312396,1.035437 , - 1.1059195,1.1086949,1.0641108,1.0961732,0.9638143,0.9419206,0.9821325, - 1.029164 ,1.1191941,1.1493175,1.1181508,1.1407369,1.1214831,1.0663868, - 1.0815727,1.1323632,1.080952 ,1.0808178,1.0681598,1.0592092,1.1199073, - 1.0957614,1.0681812,1.095979 ,1.0511014,1.0613471,1.0412358,1.0636799, - 1.1067268,1.0797632,1.0823264,1.1153238,1.1133441,1.0766457,1.0854424, - 1.0825747,1.0796758,1.077734 ,1.0952778,1.0772076,1.116454 ,1.1395183, - 1.1075819,1.1624501,1.1176701,1.0958973,1.1218029,1.1186683,1.0628506, - 1.1145004,1.082948 ,2.0175941,1.0875287,1.1025825,1.0269455,1.051285 , - 1.0476145,1.0404844,1.04963 ,1.0591438,1.1902895,1.2070227,1.070815 , - 1.1989648,1.0498666,1.0610474,1.0391423,1.1304657,1.0339167,0.9998445, - 1.0041345,1.0160474,1.0799819,1.0712526,1.0879661,1.1218227,1.009931 , - 0.9974062,1.0133066,1.0665259,1.146356 ,1.11963 ,1.1033186,1.1570126, - 1.0548068,1.0348623,1.0482756,1.0204102,1.1040101,1.0592386,0.0000001, - 1.0342314,1.103851 ,1.1129369,1.086817 ,1.1150911,1.0553069,1.1031967, - 1.0349835,1.0537988,1.057883 ,1.0326748,1.0403845,1.0982782,1.1092652, - 1.1100249,1.0888118,1.2074842,1.0731583,1.0833149,1.0942907,1.1083862, - 1.1723955,1.1690109,1.1536716,1.1711152,1.0897936,1.0986527,1.1139878, - 1.1540499,1.1051458,1.0760595,1.0817837,1.0871581,1.0496042,1.0790346, - 1.0484509,1.0936309,1.1005198,1.0929288,1.0838492,1.0982997,1.1599445, - 1.1893239,1.1655681,1.2092586,1.0883923,0.0000001,1.0871845,1.1466825, - 1.0404817,1.0230678,1.0366768,1.0639437,1.1151003,1.1272596,1.1084887, - 1.172429 ,1.0334686,1.056801 ,1.0597215,1.1326951,1.1498877,1.1962935, - 1.1868553,1.197981 ,1.1254083,1.1704431,1.1394123,1.1020141,1.1297313, - 1.0543509,1.0454857,1.0557848,1.1286277,1.1447449,1.1176616,1.1541518, - 1.0896667,1.0803887,1.0532128,1.092551 ,1.1030624,1.1308889,1.1280392, - 1.1362039,1.1384581,1.1629614,1.1217985,1.1243501,1.1104747,1.1264488, - 1.1229146,1.1263402,1.1778469,1.1807829,1.1596237,1.2130113,1.1391164, - 1.1422114,1.1164465,1.1751232,1.1258872,1.099769 ,1.0997097,1.1154337, - 1.0979413,1.1053877,1.1027399,1.1099522,1.0839096,1.0836432,1.0714954, - 1.1008861,1.2654308,1.2331656,1.2076157,1.1879531,1.0935781,1.7174256, - 1.1764588,1.1788416,1.0990402,1.0679119,1.045539 ,1.0417056,1.1428436, - 1.11865 ,1.1203463,1.1667153,1.0560808,1.059954 ,1.0763974,1.0821347, - 1.1756307,1.2023616,1.1829935,1.1883497,1.0870489,1.095404 ,1.1019858, - 1.1221294,1.0918556,1.1270142,1.1056459,1.1165003,1.1656616,1.1915104, - 0.002418 ,1.1863734,1.1364913,1.1363342,1.1130465,1.110378 ,1.1059235, - 1.1423405,1.1317402,1.1555637,1.19754 ,1.2092884,1.1779846,1.1680648, - 1.0450194,1.0761367,1.0764713,1.0921346,1.2287006,1.1786282,1.1539404, - 1.1696078,1.1572577,1.1409811,1.1399884,1.1648638,1.1468616,1.1229811, - 1.126923 ,1.1402842,1.0744516,1.1010847,1.1182138,1.129174 ,1.1766611, - 1.1814339,1.1808836,1.2256684,1.1890299,1.09418 ,1.2673656,1.2581869, - 1.1922612,1.2071455,1.1834393,1.189612 ,1.1241446,1.1361836,1.2856306, - 1.0855542,1.1677229,1.129777 ,1.1726019,1.1948112,1.177284 ,1.1930918, - 1.2184905,1.2298344,1.2539822,1.2478415,1.2095121,1.2372787,1.1454738, - 3.1246946,1.1560615,1.1634603,1.2031316,1.1657577,1.1755668,1.1764408, - 1.2373508,1.2221774,1.2183428,1.238299 ,1.1809549,1.191622 ,1.151616 , - 1.2120161,1.1659451,1.1903535,1.1537067,1.2121307,1.2561139,1.2496953, - 1.2179667,1.1991129,1.0504661,1.1208445,1.0576257,1.0786569,1.2795471, - 1.2460271,1.2595681,1.2700136,1.2370667,1.2096518,1.1916556,1.193431 , - 1.0698317,1.144996 ,1.0978631,1.1083387,1.1395663,1.1424139,1.1672275, - 1.1997005,1.2066722,1.2632322,1.2644491,1.2359862,1.30099 ,1.3310392, - 1.3187488,1.3390772,1.2772553,1.2618415,1.2443427,1.2669835,1.1606162, - 1.1572101,1.166028 ,1.1820868,1.237196 ,1.2618593,1.2292744,1.2615335, - 1.2021271,1.2560732,1.0985605,1.1192125,1.2854187,1.2854668,1.2659054, - 1.2904642,1.204288 ,1.2769686,1.22887 ,1.2694381,1.262182 ,1.2492793, - 1.2524626,1.2057602,1.285684 ,1.3115458,1.3069377,1.3391898,1.2591854, - 1.2057227,1.2264768,1.2316214,1.2125773,1.228851 ,1.2327005,1.2707509, - 1.2734746,1.3064344,1.2484472,1.2517314,1.3417968,1.3300421,1.3112333, - 1.3796477,1.2670193,1.2653888,1.3392452,1.3002052,1.2524494,1.254415 , - 1.2804451,1.2688684,1.2028832,1.1860383,1.1875746,1.1912442,0.0000001, - 1.2032371,1.2014136,1.231438 ,1.3126636,1.331844 ,1.3611454,1.4050549, - 1.4224403,1.4060786,1.3756822,1.3766484,1.3069599,1.2942712,1.2930294, - 1.3145667,1.3122438,1.2794976,1.2148988,1.3100493,1.3224905,1.3191464, - 1.3389342,1.361294 ,1.2701417,1.3292892,1.1934788,1.2651747,1.5510794, - 1.4734362,1.4419538,1.4431967,1.2666522,1.2626339,1.2941803,1.3723079, - 1.3035368,1.3176153,1.2581673,1.2753432,1.3376918,1.3208125,1.3536242, - 1.4160626,1.4042524,1.344823 ,1.2438911,1.2328366,1.3651066,1.3063282, - 1.3048015,1.4230167,1.35694 ,1.4077983,1.3601282,1.3300114,1.3991088, - 1.4520401,1.4256567,1.3559659,1.4381483,1.4401627,1.3999768,1.4125986, - 1.5223697,1.4434851,1.4603108,1.5000014,1.2174413,1.2294974,1.2586482, - 1.216323 ,1.2512149,1.2926644,1.2528789,1.2970006,1.3622391,1.3856924, - 1.4004105,1.4416406,1.4794058,1.4634441,1.4094539,1.4000301,1.3603994, - 1.3507206,1.2953093,1.3714509,1.2608073,1.2605048,1.1679753,1.2375603, - 1.301859 ,1.3278127,1.3557078,1.3832617,1.2936115,1.3297484,1.3304836, - 1.3198843,1.5357888,1.5275854,1.4613336,1.3965021,1.2506508,1.2348884, - 1.2870482,1.3202029,1.3375303,0.0000001,1.298619 ,1.3328781,1.4041303, - 1.4315721,1.3459045,1.3987832,1.4487712,1.3514799,1.3224082,1.3118832, - 0.7346643,1.4961067,1.5317262,1.5882863,1.3276595,1.3988692,1.3189229, - 1.3246715,1.4484233,1.459936 ,1.4757891,1.4265023,1.3769624,1.4194289, - 1.4359689,1.4053208,1.5716549,1.5246555,1.4746208,1.34677 ,1.2433277, - 1.2356131,1.2907763,1.2757168,1.3311623,1.3449943,1.2992672,0.0000001, - 1.3622391,1.3856924,1.4004105,1.4416406,1.4794058,1.4634441,1.4094539, - 1.4000301,1.3603994,1.3507206,1.2953093,1.3714509,1.2608073,1.2605048, - 1.1679753,1.2375603,1.301859 ,1.3278127,1.3557078,1.3832617,1.2936115, - 1.3297484,1.3304836,1.3198843,1.5357888,1.5275854,1.4613336,1.3965021, - 1.2506508,1.2348884,1.2870482,1.3202029,1.3375303,0.0000001,1.298619 , - 1.3328781,1.4041303,1.4315721,1.3459045,1.3987832,1.4487712,1.3514799, - 1.3224082,1.3118832,0.7346643,1.4961067,1.5317262,1.5882863,1.3276595, - 1.3988692,1.3189229,1.3246715,1.4484233,1.459936 ,1.4757891,1.4265023, - 1.3769624,1.4194289,1.4359689,1.4053208,1.5716549,1.5246555,1.4746208, - 1.34677 ,1.2433277,1.2356131,1.2907763,1.2757168,1.3311623,1.3449943, - 1.2992672,0.0000001) +#parameters derived from training +EBThreshold = 0.1761 +EEpThreshold = 0.0003009 +EEmThreshold = 0.0004360 + +EB_PUcorr_slope = 9087.286563128135 +EB_PUcorr_intercept = 391987.0277612837 + +EEp_PUcorr_slope = 2.097273231210836457e+03 +EEp_PUcorr_intercept= 4.905224959496531665e+04 + +EEm_PUcorr_slope = 2.029645065864053095e+03 +EEm_PUcorr_intercept= 4.874167219924630626e+04 ecalMLClient = cms.untracked.PSet( params = cms.untracked.PSet( - MLThreshold = cms.untracked.double(MLThreshold), - PUcorr_slope = cms.untracked.double(PUcorr_slope), - PUcorr_intercept = cms.untracked.double(PUcorr_intercept), - avgOcc = cms.untracked.vdouble(avgOcc) + EBThreshold = cms.untracked.double(EBThreshold), + EEpThreshold = cms.untracked.double(EEpThreshold), + EEmThreshold = cms.untracked.double(EEmThreshold), + EB_PUcorr_slope = cms.untracked.double(EB_PUcorr_slope), + EB_PUcorr_intercept = cms.untracked.double(EB_PUcorr_intercept), + EEp_PUcorr_slope = cms.untracked.double(EEp_PUcorr_slope), + EEp_PUcorr_intercept = cms.untracked.double(EEp_PUcorr_intercept), + EEm_PUcorr_slope = cms.untracked.double(EEm_PUcorr_slope), + EEm_PUcorr_intercept = cms.untracked.double(EEm_PUcorr_intercept) ), sources = cms.untracked.PSet( DigiAllByLumi = ecalOccupancyTask.MEs.DigiAllByLumi, AELoss = ecalOccupancyTask.MEs.AELoss, + AEReco = ecalOccupancyTask.MEs.AEReco, PU = ecalOccupancyTask.MEs.PU, - NumEvents = ecalOccupancyTask.MEs.NEvents + NumEvents = ecalOccupancyTask.MEs.NEvents, + BadTowerCount = ecalOccupancyTask.MEs.BadTowerCount, + BadTowerCountNorm = ecalOccupancyTask.MEs.BadTowerCountNorm ), MEs = cms.untracked.PSet( MLQualitySummary = cms.untracked.PSet( @@ -406,6 +51,13 @@ otype = cms.untracked.string('Ecal2P'), btype = cms.untracked.string('Trend'), description = cms.untracked.string('Trend of the number of events in an image fed into the ML model') + ), + TrendMLBadTower = cms.untracked.PSet( + path = cms.untracked.string('Ecal/Trends/Number of bad towers from MLDQM %(prefix)s'), + kind = cms.untracked.string('TProfile'), + otype = cms.untracked.string('Ecal2P'), + btype = cms.untracked.string('Trend'), + description = cms.untracked.string('Trend of the number of bad towers flagged by the MLDQM model') ) ) ) diff --git a/DQM/EcalMonitorClient/src/MLClient.cc b/DQM/EcalMonitorClient/src/MLClient.cc index 6b55e7ce5bf1c..bc84593b0145f 100644 --- a/DQM/EcalMonitorClient/src/MLClient.cc +++ b/DQM/EcalMonitorClient/src/MLClient.cc @@ -1,7 +1,5 @@ #include "DQM/EcalMonitorClient/interface/MLClient.h" -#include "DataFormats/EcalDetId/interface/EcalTrigTowerDetId.h" - #include "CondFormats/EcalObjects/interface/EcalDQMStatusHelper.h" #include "DQM/EcalCommon/interface/EcalDQMCommonUtils.h" @@ -12,6 +10,7 @@ #include "DQM/EcalCommon/interface/MESetNonObject.h" +#include #include using namespace cms::Ort; @@ -20,10 +19,16 @@ namespace ecaldqm { MLClient::MLClient() : DQWorkerClient() { qualitySummaries_.insert("MLQualitySummary"); } void MLClient::setParams(edm::ParameterSet const& _params) { - MLThreshold_ = _params.getUntrackedParameter("MLThreshold"); - PUcorr_slope_ = _params.getUntrackedParameter("PUcorr_slope"); - PUcorr_intercept_ = _params.getUntrackedParameter("PUcorr_intercept"); - avgOcc_ = _params.getUntrackedParameter>("avgOcc"); + EBThreshold_ = _params.getUntrackedParameter("EBThreshold"); + EEpThreshold_ = _params.getUntrackedParameter("EEpThreshold"); + EEmThreshold_ = _params.getUntrackedParameter("EEmThreshold"); + EB_PUcorr_slope_ = _params.getUntrackedParameter("EB_PUcorr_slope"); + EB_PUcorr_intercept_ = _params.getUntrackedParameter("EB_PUcorr_intercept"); + EEp_PUcorr_slope_ = _params.getUntrackedParameter("EEp_PUcorr_slope"); + EEp_PUcorr_intercept_ = _params.getUntrackedParameter("EEp_PUcorr_intercept"); + EEm_PUcorr_slope_ = _params.getUntrackedParameter("EEm_PUcorr_slope"); + EEm_PUcorr_intercept_ = _params.getUntrackedParameter("EEm_PUcorr_intercept"); + if (!onlineMode_) { MEs_.erase(std::string("MLQualitySummary")); MEs_.erase(std::string("EventsperMLImage")); @@ -31,12 +36,17 @@ namespace ecaldqm { sources_.erase(std::string("NumEvents")); sources_.erase(std::string("DigiAllByLumi")); sources_.erase(std::string("AELoss")); + sources_.erase(std::string("BadTowerCount")); + sources_.erase(std::string("BadTowerCountNorm")); } } void MLClient::producePlots(ProcessType) { if (!onlineMode_) return; + nbadtowerEB = 0; + nbadtowerEE = 0; + using namespace std; MESet& meMLQualitySummary(MEs_.at("MLQualitySummary")); MESet& meEventsperMLImage(MEs_.at("EventsperMLImage")); @@ -47,6 +57,7 @@ namespace ecaldqm { //Get the no.of events and the PU per LS calculated in OccupancyTask int nEv = sNumEvents.getFloatValue(); double pu = sPU.getFloatValue(); + //Do not compute ML quality if PU is non existent. if (pu < 0.) { return; @@ -70,22 +81,48 @@ namespace ecaldqm { //This padding is then removed during inference on the model output. //Get the histogram of the input digi occupancy per lumisection. + TH2F* hEEmDigiMap((sources_.at("DigiAllByLumi")).getME(0)->getTH2F()); TH2F* hEbDigiMap((sources_.at("DigiAllByLumi")).getME(1)->getTH2F()); + TH2F* hEEpDigiMap((sources_.at("DigiAllByLumi")).getME(2)->getTH2F()); + + size_t nEBTowers = nEBEtaTowers * nEBPhiTowers; //Each EB occupancy map is of size 34x72 towers + size_t nEETowers = nEEEtaTowers * nEEPhiTowers; //Each EE occupancy map is of size 20x20 towers + + //Vectors to feed into the ML network + std::vector ebOccMap1dCumulPad; + std::vector eemOccMap1dCumulPad; + std::vector eepOccMap1dCumulPad; + + //Array to store occupancy maps + std::valarray ebOccMap1d(nEBTowers); + std::valarray eemOccMap1d(nEETowers); + std::valarray eepOccMap1d(nEETowers); - size_t nTowers = nEtaTowers * nPhiTowers; //Each occupancy map is of size 34x72 towers - std::vector ebOccMap1dCumulPad; //Vector to feed into the ML network - std::valarray ebOccMap1d(nTowers); //Array to store occupancy map of size 34x72 //Store the values from the input histogram into the array //to do preprocessing for (int i = 0; i < hEbDigiMap->GetNbinsY(); i++) { //NbinsY = 34, NbinsX = 72 for (int j = 0; j < hEbDigiMap->GetNbinsX(); j++) { int bin = hEbDigiMap->GetBin(j + 1, i + 1); - int k = (i * nPhiTowers) + j; + int k = (i * nEBPhiTowers) + j; ebOccMap1d[k] = hEbDigiMap->GetBinContent(bin); } } ebOccMap1dQ.push_back(ebOccMap1d); //Queue which stores input occupancy maps for nLS lumis - NEventQ.push_back(nEv); //Queue which stores the no.of events per LS for nLS lumis + + for (int i = 0; i < hEEpDigiMap->GetNbinsY(); i++) { //NbinsY = 20, NbinsX = 20 + for (int j = 0; j < hEEpDigiMap->GetNbinsX(); j++) { + int bin = hEEpDigiMap->GetBin(j + 1, i + 1); + int k = (i * nEEPhiTowers) + j; + eemOccMap1d[k] = hEEmDigiMap->GetBinContent(bin); + eepOccMap1d[k] = hEEpDigiMap->GetBinContent(bin); + } + } + + //Queue which stores input occupancy maps for nLS lumis + eemOccMap1dQ.push_back(eemOccMap1d); + eepOccMap1dQ.push_back(eepOccMap1d); + + NEventQ.push_back(nEv); //Queue which stores the no.of events per LS for nLS lumis if (NEventQ.size() < nLS) { return; //Should have nLS lumis to add the occupancy over. @@ -95,48 +132,139 @@ namespace ecaldqm { } if (ebOccMap1dQ.size() > nLS) { ebOccMap1dQ.pop_front(); //Same conditon for the input occupancy maps. + eemOccMap1dQ.pop_front(); + eepOccMap1dQ.pop_front(); } int TNum = 0; for (size_t i = 0; i < nLS; i++) { TNum += NEventQ[i]; //Total no.of events over nLS lumis } - if (TNum < 200) { - return; //The total no.of events should be atleast 200 over nLS for meaningful statistics + + if (TNum < 400) { + return; //The total no.of events should be atleast 400 over nLS for meaningful statistics } //Fill the ME to monitor the trend of the total no.of events in each input image to the ML model meEventsperMLImage.fill(getEcalDQMSetupObjects(), EcalBarrel, double(timestamp_.iLumi), double(TNum)); - //Array to hold the sum of inputs, which make atleast 200 events. - std::valarray ebOccMap1dCumul(0., nTowers); + //Array to hold the sum of inputs, which make atleast 400 events. + std::valarray ebOccMap1dCumul(0., nEBTowers); + std::valarray eemOccMap1dCumul(0., nEETowers); + std::valarray eepOccMap1dCumul(0., nEETowers); + //Sum the input arrays of nLS. for (size_t i = 0; i < ebOccMap1dQ.size(); i++) { - ebOccMap1dCumul += ebOccMap1dQ[i]; //Sum the input arrays of N LS. + ebOccMap1dCumul += ebOccMap1dQ[i]; + eemOccMap1dCumul += eemOccMap1dQ[i]; + eepOccMap1dCumul += eepOccMap1dQ[i]; } + //Applying PU correction derived from training - ebOccMap1dCumul = ebOccMap1dCumul / (PUcorr_slope_ * pu + PUcorr_intercept_); + ebOccMap1dCumul = ebOccMap1dCumul / (EB_PUcorr_slope_ * pu + EB_PUcorr_intercept_); + eemOccMap1dCumul = eemOccMap1dCumul / (EEm_PUcorr_slope_ * pu + EEm_PUcorr_intercept_); + eepOccMap1dCumul = eepOccMap1dCumul / (EEp_PUcorr_slope_ * pu + EEp_PUcorr_intercept_); - //Scaling up to match input dimensions. 36*72 used instead of 34*72 to accommodate the additional padding - //of 2 rows to prevent the "edge effect" which is done below - ebOccMap1dCumul = ebOccMap1dCumul * (nEtaTowersPad * nPhiTowers); + //Scaling up to match input dimensions. + ebOccMap1dCumul = ebOccMap1dCumul * (nEBEtaTowers * nEBPhiTowers); + eemOccMap1dCumul = eemOccMap1dCumul * nEEEtaTowers * nEEPhiTowers; //(nEETowersPad * nEETowersPad); + eepOccMap1dCumul = eepOccMap1dCumul * nEEEtaTowers * nEEPhiTowers; //(nEETowersPad * nEETowersPad); //Correction for no.of events in each input image as originally model trained with 500 events per image ebOccMap1dCumul = ebOccMap1dCumul * (500. / TNum); + eemOccMap1dCumul = eemOccMap1dCumul * (500. / TNum); + eepOccMap1dCumul = eepOccMap1dCumul * (500. / TNum); + + std::vector> ebOccMap2dCumul(nEBEtaTowers, std::vector(nEBPhiTowers, 0.)); + //Convert 1dCumul to 2d + for (size_t i = 0; i < nEBEtaTowers; i++) { + for (size_t j = 0; j < nEBPhiTowers; j++) { + int k = (i * nEBPhiTowers) + j; + ebOccMap2dCumul[i][j] = ebOccMap1dCumul[k]; + } + } + + std::vector pad_top; + std::vector pad_bottom; + std::vector pad_left; + std::vector pad_right; - //The pre-processed input is now fed into the input tensor vector which will go into the ML model - ebOccMap1dCumulPad.assign(std::begin(ebOccMap1dCumul), std::end(ebOccMap1dCumul)); + pad_top = ebOccMap2dCumul[0]; + pad_bottom = ebOccMap2dCumul[ebOccMap2dCumul.size() - 1]; - //Replicate and pad with the first and last row to prevent the edge effect - for (int k = 0; k < nPhiTowers; k++) { - float val = ebOccMap1dCumulPad[nPhiTowers - 1]; - ebOccMap1dCumulPad.insert(ebOccMap1dCumulPad.begin(), - val); //padding in the beginning with the first row elements + ebOccMap2dCumul.insert(ebOccMap2dCumul.begin(), pad_top); + ebOccMap2dCumul.push_back(pad_bottom); + + //// Endcaps /// + std::vector> eemOccMap2dCumul(nEEEtaTowers, std::vector(nEEPhiTowers, 0.)); + std::vector> eepOccMap2dCumul(nEEEtaTowers, std::vector(nEEPhiTowers, 0.)); + + for (size_t i = 0; i < nEEEtaTowers; i++) { + for (size_t j = 0; j < nEEPhiTowers; j++) { + int k = (i * nEEPhiTowers) + j; + eemOccMap2dCumul[i][j] = eemOccMap1dCumul[k]; + eepOccMap2dCumul[i][j] = eepOccMap1dCumul[k]; + } } - int size = ebOccMap1dCumulPad.size(); - for (int k = (size - nPhiTowers); k < size; k++) { - float val = ebOccMap1dCumulPad[k]; - ebOccMap1dCumulPad.push_back(val); //padding at the end with the last row elements + // EE - // + pad_top.clear(); + pad_bottom.clear(); + pad_left.clear(); + pad_right.clear(); + + pad_top = eemOccMap2dCumul[0]; + pad_bottom = eemOccMap2dCumul[eemOccMap2dCumul.size() - 1]; + + eemOccMap2dCumul.insert(eemOccMap2dCumul.begin(), pad_top); + eemOccMap2dCumul.push_back(pad_bottom); + + for (auto& row : eemOccMap2dCumul) { + pad_left.push_back(row[0]); + pad_right.push_back(row[row.size() - 1]); + } + + std::size_t Lindex = 0; + std::size_t Rindex = 0; + + for (auto& row : eemOccMap2dCumul) { + row.insert(row.begin(), pad_left[Lindex++]); + row.insert(row.end(), pad_right[Rindex++]); + } + + // EE + // + pad_top.clear(); + pad_bottom.clear(); + + pad_top = eepOccMap2dCumul[0]; + pad_bottom = eepOccMap2dCumul[eepOccMap2dCumul.size() - 1]; + + eepOccMap2dCumul.insert(eepOccMap2dCumul.begin(), pad_top); + eepOccMap2dCumul.push_back(pad_bottom); + + for (auto& row : eepOccMap2dCumul) { + pad_left.push_back(row[0]); + pad_right.push_back(row[row.size() - 1]); + } + + Lindex = 0; + Rindex = 0; + + for (auto& row : eepOccMap2dCumul) { + row.insert(row.begin(), pad_left[Lindex++]); + row.insert(row.end(), pad_right[Rindex++]); + } + + //The pre-processed input is now fed into the 1D input tensor vector which will go into the ML model + for (auto& row : ebOccMap2dCumul) { + ebOccMap1dCumulPad.insert(ebOccMap1dCumulPad.end(), row.begin(), row.end()); + } + + for (auto& row : eemOccMap2dCumul) { + eemOccMap1dCumulPad.insert(eemOccMap1dCumulPad.end(), row.begin(), row.end()); + } + + for (auto& row : eepOccMap2dCumul) { + eepOccMap1dCumulPad.insert(eepOccMap1dCumulPad.end(), row.begin(), row.end()); } ///// Model Inference ////// @@ -181,7 +309,7 @@ namespace ecaldqm { std::vector outputDims = outputTensorInfo.GetShape(); - size_t TensorSize = nEtaTowersPad * nPhiTowers; + size_t TensorSize = nEBEtaTowersPad * nEBPhiTowers; std::vector ebRecoOccMap1dPad(TensorSize); //To store the output reconstructed occupancy std::vector inputNames{inputName.c_str()}; @@ -205,63 +333,281 @@ namespace ecaldqm { outputTensors.data(), 1); + //Endcaps + // EE- // + + inputDims.clear(); + outputDims.clear(); + inputNames.clear(); + outputNames.clear(); + inputTensors.clear(); + outputTensors.clear(); + + modelFilepath = edm::FileInPath("DQM/EcalMonitorClient/data/onnxModels/EEm_resnet2018.onnx").fullPath(); + + Ort::Session EEm_session(env, modelFilepath.c_str(), sessionOptions); + + inputName = EEm_session.GetInputNameAllocated(0, allocator).get(); + + inputTypeInfo = EEm_session.GetInputTypeInfo(0); + auto EEm_inputTensorInfo = inputTypeInfo.GetTensorTypeAndShapeInfo(); + + inputDims = EEm_inputTensorInfo.GetShape(); + + outputName = EEm_session.GetOutputNameAllocated(0, allocator).get(); + + //Ort::TypeInfo + outputTypeInfo = EEm_session.GetOutputTypeInfo(0); + auto EEm_outputTensorInfo = outputTypeInfo.GetTensorTypeAndShapeInfo(); + + outputDims = EEm_outputTensorInfo.GetShape(); + + size_t EE_TensorSize = nEETowersPad * nEETowersPad; + std::vector eemRecoOccMap1dPad(EE_TensorSize); //To store the output reconstructed occupancy + + inputNames.push_back(inputName.c_str()); + outputNames.push_back(outputName.c_str()); + + //Ort::MemoryInfo + memoryInfo = Ort::MemoryInfo::CreateCpu(OrtAllocatorType::OrtArenaAllocator, OrtMemType::OrtMemTypeDefault); + inputTensors.push_back(Ort::Value::CreateTensor( + memoryInfo, eemOccMap1dCumulPad.data(), EE_TensorSize, inputDims.data(), inputDims.size())); + + outputTensors.push_back(Ort::Value::CreateTensor( + memoryInfo, eemRecoOccMap1dPad.data(), EE_TensorSize, outputDims.data(), outputDims.size())); + + EEm_session.Run(Ort::RunOptions{nullptr}, + inputNames.data(), + inputTensors.data(), + 1, + outputNames.data(), + outputTensors.data(), + 1); + + // EE+ // + inputDims.clear(); + outputDims.clear(); + inputNames.clear(); + outputNames.clear(); + inputTensors.clear(); + outputTensors.clear(); + + modelFilepath = edm::FileInPath("DQM/EcalMonitorClient/data/onnxModels/EEp_resnet2018.onnx").fullPath(); + + Ort::Session EEp_session(env, modelFilepath.c_str(), sessionOptions); + + inputName = EEp_session.GetInputNameAllocated(0, allocator).get(); + + inputTypeInfo = EEp_session.GetInputTypeInfo(0); + auto EEp_inputTensorInfo = inputTypeInfo.GetTensorTypeAndShapeInfo(); + + inputDims = EEp_inputTensorInfo.GetShape(); + + outputName = EEp_session.GetOutputNameAllocated(0, allocator).get(); + + outputTypeInfo = EEp_session.GetOutputTypeInfo(0); + + auto EEp_outputTensorInfo = outputTypeInfo.GetTensorTypeAndShapeInfo(); + + outputDims = EEp_outputTensorInfo.GetShape(); + + std::vector eepRecoOccMap1dPad(EE_TensorSize); //To store the output reconstructed occupancy + + inputNames.push_back(inputName.c_str()); + outputNames.push_back(outputName.c_str()); + + //Ort::MemoryInfo + memoryInfo = Ort::MemoryInfo::CreateCpu(OrtAllocatorType::OrtArenaAllocator, OrtMemType::OrtMemTypeDefault); + inputTensors.push_back(Ort::Value::CreateTensor( + memoryInfo, eepOccMap1dCumulPad.data(), EE_TensorSize, inputDims.data(), inputDims.size())); + + outputTensors.push_back(Ort::Value::CreateTensor( + memoryInfo, eepRecoOccMap1dPad.data(), EE_TensorSize, outputDims.data(), outputDims.size())); + + EEp_session.Run(Ort::RunOptions{nullptr}, + inputNames.data(), + inputTensors.data(), + 1, + outputNames.data(), + outputTensors.data(), + 1); + ///Inference on the output from the model/// //2D Loss map to store tower by tower loss between the output (reconstructed) and input occupancies, //Have same dimensions as the occupancy plot - std::valarray> lossMap2d(std::valarray(nPhiTowers), nEtaTowers); + std::valarray> EBlossMap2d(std::valarray(nEBPhiTowers), nEBEtaTowers); + std::valarray> EEmlossMap2d(std::valarray(nEEPhiTowers), nEEEtaTowers); + std::valarray> EEplossMap2d(std::valarray(nEEPhiTowers), nEEEtaTowers); //1D val arrays to store row wise information corresponding to the reconstructed, input and average occupancies, and loss. //and to do element wise (tower wise) operations on them to calculate the MSE loss between the reco and input occupancy. - std::valarray recoOcc1d(0., nPhiTowers); - std::valarray inputOcc1d(0., nPhiTowers); - std::valarray avgOcc1d(0., nPhiTowers); - std::valarray loss_; + std::valarray EBrecoOcc1d(0., nEBPhiTowers); + std::valarray EBinputOcc1d(0., nEBPhiTowers); + std::valarray EBavgOcc1d(0., nEBPhiTowers); + std::valarray EBloss_; + + std::valarray EEmrecoOcc1d(0., nEEPhiTowers); + std::valarray EEminputOcc1d(0., nEEPhiTowers); + std::valarray EEmavgOcc1d(0., nEEPhiTowers); + std::valarray EEmloss_; + + std::valarray EEprecoOcc1d(0., nEEPhiTowers); + std::valarray EEpinputOcc1d(0., nEEPhiTowers); + std::valarray EEpavgOcc1d(0., nEEPhiTowers); + std::valarray EEploss_; + + std::string EBOccpath = + edm::FileInPath("DQM/EcalMonitorClient/data/MLAvgOccupancy/EB_avgocc_Run2022_500ev.dat").fullPath(); + std::ifstream inFile; + double val; + inFile.open((EBOccpath).c_str()); + while (inFile) { + inFile >> val; + if (inFile.eof()) + break; + EBavgOcc.push_back(val); + } + inFile.close(); + + std::string EEmOccpath = + edm::FileInPath("DQM/EcalMonitorClient/data/MLAvgOccupancy/EEm_avgocc_Run2022_500ev.dat").fullPath(); + inFile.open((EEmOccpath).c_str()); + while (inFile) { + inFile >> val; + if (inFile.eof()) + break; + EEmavgOcc.push_back(val); + } + inFile.close(); + + std::string EEpOccpath = + edm::FileInPath("DQM/EcalMonitorClient/data/MLAvgOccupancy/EEp_avgocc_Run2022_500ev.dat").fullPath(); + inFile.open((EEpOccpath).c_str()); + while (inFile) { + inFile >> val; + if (inFile.eof()) + break; + EEpavgOcc.push_back(val); + } + inFile.close(); //Loss calculation //Ignore the top and bottom replicated padded rows when doing inference - //by making index i run over (1,35) instead of (0,36) - for (int i = 1; i < 35; i++) { - for (int j = 0; j < nPhiTowers; j++) { - int k = (i * nPhiTowers) + j; - recoOcc1d[j] = ebRecoOccMap1dPad[k]; - inputOcc1d[j] = ebOccMap1dCumulPad[k]; - avgOcc1d[j] = avgOcc_[k]; + //by making index i run over (1,35) instead of (0,36) for EB, and over (1,21) for EE + + MESet const& sAEReco(sources_.at("AEReco")); + TH2F* hEBRecoMap2d(sAEReco.getME(1)->getTH2F()); + + for (int i = 1; i < nEBEtaTowersPad - 1; i++) { + for (int j = 0; j < nEBPhiTowers; j++) { + int k = (i * nEBPhiTowers) + j; + int bin_ = hEBRecoMap2d->GetBin(j + 1, i); + EBrecoOcc1d[j] = ebRecoOccMap1dPad[k]; + EBinputOcc1d[j] = ebOccMap1dCumulPad[k]; + EBavgOcc1d[j] = EBavgOcc[k]; + double content = ebRecoOccMap1dPad[k]; + hEBRecoMap2d->SetBinContent(bin_, content); } //Calculate the MSE loss = (output-input)^2, with avg response correction - loss_ = std::pow((recoOcc1d / avgOcc1d - inputOcc1d / avgOcc1d), 2); - lossMap2d[i - 1] = (loss_); + EBloss_ = std::pow((EBrecoOcc1d / EBavgOcc1d - EBinputOcc1d / EBavgOcc1d), 2); + EBlossMap2d[i - 1] = (EBloss_); } - lossMap2dQ.push_back(lossMap2d); //Store each loss map from the output in the queue - if (lossMap2dQ.size() > nLSloss) { - lossMap2dQ.pop_front(); //Keep exactly nLSloss loss maps to multiply + TH2F* hEEmRecoMap2d(sAEReco.getME(0)->getTH2F()); + TH2F* hEEpRecoMap2d(sAEReco.getME(2)->getTH2F()); + + for (int i = 1; i < nEETowersPad - 1; i++) { + for (int j = 0; j < nEEPhiTowers; j++) { + int k = (i * nEETowersPad) + j + 1; + int bin_ = hEEmRecoMap2d->GetBin(j + 1, i); + + EEmrecoOcc1d[j] = eemRecoOccMap1dPad[k]; + EEminputOcc1d[j] = eemOccMap1dCumulPad[k]; + EEmavgOcc1d[j] = EEmavgOcc[k]; + double EEmcontent = eemRecoOccMap1dPad[k]; + hEEmRecoMap2d->SetBinContent(bin_, EEmcontent); + + EEprecoOcc1d[j] = eepRecoOccMap1dPad[k]; + EEpinputOcc1d[j] = eepOccMap1dCumulPad[k]; + EEpavgOcc1d[j] = EEpavgOcc[k]; + double EEpcontent = eepRecoOccMap1dPad[k]; + hEEpRecoMap2d->SetBinContent(bin_, EEpcontent); + } + //Calculate the MSE loss = (output-input)^2, with avg response correction + EEmloss_ = std::pow((EEmrecoOcc1d / EEmavgOcc1d - EEminputOcc1d / EEmavgOcc1d), 2); + EEmlossMap2d[i - 1] = (EEmloss_); + + EEploss_ = std::pow((EEprecoOcc1d / EEpavgOcc1d - EEpinputOcc1d / EEpavgOcc1d), 2); + EEplossMap2d[i - 1] = (EEploss_); + } + + //Store each loss map from the output in the queue + EBlossMap2dQ.push_back(EBlossMap2d); + EEmlossMap2dQ.push_back(EEmlossMap2d); + EEplossMap2dQ.push_back(EEplossMap2d); + + //Keep exactly nLSloss loss maps to multiply + if (EBlossMap2dQ.size() > nLSloss) { + EBlossMap2dQ.pop_front(); + EEmlossMap2dQ.pop_front(); + EEplossMap2dQ.pop_front(); } - if (lossMap2dQ.size() < nLSloss) { //Exit if there are not nLSloss loss maps + if (EBlossMap2dQ.size() < nLSloss) { //Exit if there are not nLSloss loss maps return; } + //To hold the final multiplied loss - std::valarray> lossMap2dMult(std::valarray(1., nPhiTowers), nEtaTowers); + std::valarray> EBlossMap2dMult(std::valarray(1., nEBPhiTowers), nEBEtaTowers); + std::valarray> EEmlossMap2dMult(std::valarray(1., nEEPhiTowers), nEEEtaTowers); + std::valarray> EEplossMap2dMult(std::valarray(1., nEEPhiTowers), nEEEtaTowers); //Multiply together the last nLSloss loss maps //So that real anomalies which persist with time are enhanced and fluctuations are suppressed. - for (size_t i = 0; i < lossMap2dQ.size(); i++) { - lossMap2dMult *= lossMap2dQ[i]; + for (size_t i = 0; i < EBlossMap2dQ.size(); i++) { + EBlossMap2dMult *= EBlossMap2dQ[i]; + EEmlossMap2dMult *= EEmlossMap2dQ[i]; + EEplossMap2dMult *= EEplossMap2dQ[i]; } //Fill the AELoss ME with the values of this time multiplied loss map - MESet const& sAELoss(sources_.at("AELoss")); - TH2F* hLossMap2dMult(sAELoss.getME(1)->getTH2F()); - for (int i = 0; i < hLossMap2dMult->GetNbinsY(); i++) { - for (int j = 0; j < hLossMap2dMult->GetNbinsX(); j++) { - int bin_ = hLossMap2dMult->GetBin(j + 1, i + 1); - double content = lossMap2dMult[i][j]; - hLossMap2dMult->SetBinContent(bin_, content); + //MESet const& sAELoss(sources_.at("AELoss")); + MESet& sAELoss(sources_.at("AELoss")); + + TH2F* hEBLossMap2dMult(sAELoss.getME(1)->getTH2F()); + + for (int i = 0; i < hEBLossMap2dMult->GetNbinsY(); i++) { + for (int j = 0; j < hEBLossMap2dMult->GetNbinsX(); j++) { + int bin_ = hEBLossMap2dMult->GetBin(j + 1, i + 1); + double content = EBlossMap2dMult[i][j]; + hEBLossMap2dMult->SetBinContent(bin_, content); } } + + TH2F* hEEmLossMap2dMult(sAELoss.getME(0)->getTH2F()); + TH2F* hEEpLossMap2dMult(sAELoss.getME(2)->getTH2F()); + + for (int i = 0; i < hEEmLossMap2dMult->GetNbinsY(); i++) { + for (int j = 0; j < hEEmLossMap2dMult->GetNbinsX(); j++) { + int bin_ = hEEmLossMap2dMult->GetBin(j + 1, i + 1); + + double EEmcontent = EEmlossMap2dMult[i][j]; + hEEmLossMap2dMult->SetBinContent(bin_, EEmcontent); + + double EEpcontent = EEplossMap2dMult[i][j]; + hEEpLossMap2dMult->SetBinContent(bin_, EEpcontent); + } + } + ///////////////////// ML Quality Summary ///////////////////// //Apply the quality threshold on the time multiplied loss map stored in the ME AELoss //If anomalous, the tower entry will have a large loss value. If good, the value will be close to zero. + MESet& meBadTowerCount(sources_.at("BadTowerCount")); + MESet& meBadTowerCountNorm(sources_.at("BadTowerCountNorm")); + MESet& meTrendMLBadTower(MEs_.at("TrendMLBadTower")); + + LScount++; + MESet::const_iterator dAEnd(sAELoss.end(GetElectronicsMap())); for (MESet::const_iterator dItr(sAELoss.beginChannel(GetElectronicsMap())); dItr != dAEnd; dItr.toNextChannel(GetElectronicsMap())) { @@ -270,15 +616,40 @@ namespace ecaldqm { bool doMaskML(meMLQualitySummary.maskMatches(id, mask, statusManager_, GetTrigTowerMap())); float entries(dItr->getBinContent()); + int quality(doMaskML ? kMGood : kGood); + float MLThreshold; + + if (id.subdetId() == EcalEndcap) { + EEDetId eeid(id); + if (eeid.zside() > 0) + MLThreshold = EEpThreshold_; + else + MLThreshold = EEmThreshold_; + } else { + MLThreshold = EBThreshold_; + } + //If a trigger tower entry is greater than the ML threshold, set it to Bad quality, otherwise Good. - if (entries > MLThreshold_) { + if (entries > MLThreshold) { quality = doMaskML ? kMBad : kBad; + meBadTowerCount.fill(getEcalDQMSetupObjects(), id); + if (id.subdetId() == EcalEndcap) + nbadtowerEE++; + else + nbadtowerEB++; } //Fill the quality summary with the quality of the given tower id. meMLQualitySummary.setBinContent(getEcalDQMSetupObjects(), id, double(quality)); + + double badtowcount(meBadTowerCount.getBinContent(getEcalDQMSetupObjects(), id)); + meBadTowerCountNorm.setBinContent(getEcalDQMSetupObjects(), id, double(badtowcount / LScount)); } // ML Quality Summary - } // producePlots() + + meTrendMLBadTower.fill(getEcalDQMSetupObjects(), EcalBarrel, double(timestamp_.iLumi), double(nbadtowerEB)); + meTrendMLBadTower.fill(getEcalDQMSetupObjects(), EcalEndcap, double(timestamp_.iLumi), double(nbadtowerEE)); + + } // producePlots() DEFINE_ECALDQM_WORKER(MLClient); } // namespace ecaldqm diff --git a/DQM/EcalMonitorTasks/python/OccupancyTask_cfi.py b/DQM/EcalMonitorTasks/python/OccupancyTask_cfi.py index 3a02e5e06c7b0..852e1c1e04997 100644 --- a/DQM/EcalMonitorTasks/python/OccupancyTask_cfi.py +++ b/DQM/EcalMonitorTasks/python/OccupancyTask_cfi.py @@ -261,12 +261,19 @@ description = cms.untracked.string('Trend of the pile up per lumisection') ), AELoss = cms.untracked.PSet( - path = cms.untracked.string('%(subdet)s/%(prefix)sOccupancyTask/%(prefix)sOT AE Loss'), + path = cms.untracked.string('%(subdet)s/%(prefix)sOccupancyTask/%(prefix)sOT AE Loss%(suffix)s'), kind = cms.untracked.string('TH2F'), otype = cms.untracked.string('Ecal3P'), btype = cms.untracked.string('SuperCrystal'), description = cms.untracked.string('AE Loss from inference') ), + AEReco = cms.untracked.PSet( + path = cms.untracked.string('%(subdet)s/%(prefix)sOccupancyTask/%(prefix)sOT AE Reco%(suffix)s'), + kind = cms.untracked.string('TH2F'), + otype = cms.untracked.string('Ecal3P'), + btype = cms.untracked.string('SuperCrystal'), + description = cms.untracked.string('AE Reco') + ), PU = cms.untracked.PSet( path = cms.untracked.string('Ecal/EventInfo/PU in the lumi'), kind = cms.untracked.string('REAL'), @@ -280,9 +287,21 @@ otype = cms.untracked.string('None'), btype = cms.untracked.string('User'), description = cms.untracked.string('Number of events in this lumisection') + ), + BadTowerCount = cms.untracked.PSet( + path = cms.untracked.string('%(subdet)s/%(prefix)sOccupancyTask/%(prefix)sOT ML bad tower count%(suffix)s'), + kind = cms.untracked.string('TH2F'), + otype = cms.untracked.string('Ecal3P'), + btype = cms.untracked.string('SuperCrystal'), + description = cms.untracked.string('Count of bad towers flagged by the ML model.') + ), + BadTowerCountNorm = cms.untracked.PSet( + path = cms.untracked.string('%(subdet)s/%(prefix)sOccupancyTask/%(prefix)sOT ML bad tower count normalized%(suffix)s'), + kind = cms.untracked.string('TH2F'), + otype = cms.untracked.string('Ecal3P'), + btype = cms.untracked.string('SuperCrystal'), + description = cms.untracked.string('Count of bad towers flagged by the ML model normalized by the no.of LS') ) - - # TPDigiProjPhi = cms.untracked.PSet( # path = cms.untracked.string('%(subdet)s/%(prefix)sOccupancyTask/%(prefix)sOT TP digi occupancy%(suffix)s projection phi'), # kind = cms.untracked.string('TH1F'), diff --git a/DQM/EcalMonitorTasks/src/OccupancyTask.cc b/DQM/EcalMonitorTasks/src/OccupancyTask.cc index 14bd4e995b18e..364840cc193a9 100644 --- a/DQM/EcalMonitorTasks/src/OccupancyTask.cc +++ b/DQM/EcalMonitorTasks/src/OccupancyTask.cc @@ -20,6 +20,7 @@ namespace ecaldqm { MEs_.erase(std::string("TrendEventsperLumi")); MEs_.erase(std::string("TrendPUperLumi")); MEs_.erase(std::string("AELoss")); + MEs_.erase(std::string("AEReco")); } } @@ -124,9 +125,11 @@ namespace ecaldqm { MESet& meDigi1D(MEs_.at("Digi1D")); MESet& meTrendNDigi(MEs_.at("TrendNDigi")); MESet* meAELoss = nullptr; - if (onlineMode_) + MESet* meAEReco = nullptr; + if (onlineMode_) { meAELoss = &MEs_.at("AELoss"); - + meAEReco = &MEs_.at("AEReco"); + } std::for_each(_digis.begin(), _digis.end(), [&](typename DigiCollection::Digi const& digi) { DetId id(digi.id()); meDigi.fill(getEcalDQMSetupObjects(), id); @@ -135,8 +138,10 @@ namespace ecaldqm { meDigiAll.fill(getEcalDQMSetupObjects(), id); meDigiAllByLumi.fill(getEcalDQMSetupObjects(), id); meDigiDCC.fill(getEcalDQMSetupObjects(), id); - if (onlineMode_) + if (onlineMode_) { meAELoss->fill(getEcalDQMSetupObjects(), id); + meAEReco->fill(getEcalDQMSetupObjects(), id); + } }); int iSubdet(_collection == kEBDigi ? EcalBarrel : EcalEndcap);