File indexing completed on 2024-09-07 04:35:33
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0010
0011 #include "CondCore/Utilities/interface/PayloadInspectorModule.h"
0012 #include "CondCore/Utilities/interface/PayloadInspector.h"
0013 #include "CondCore/CondDB/interface/Time.h"
0014 #include "CondCore/SiPixelPlugins/interface/SiPixelPayloadInspectorHelper.h"
0015 #include "CondCore/SiPixelPlugins/interface/SiPixelTemplateHelper.h"
0016 #include "DQM/TrackerRemapper/interface/Phase1PixelMaps.h"
0017 #include "CalibTracker/StandaloneTrackerTopology/interface/StandaloneTrackerTopology.h"
0018
0019
0020 #include "CondFormats/SiPixelObjects/interface/SiPixelTemplateDBObject.h"
0021 #include "CondFormats/SiPixelTransient/interface/SiPixelTemplate.h"
0022 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0023 #include "DataFormats/DetId/interface/DetId.h"
0024 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0025
0026 #include <memory>
0027 #include <map>
0028 #include <sstream>
0029 #include <iostream>
0030 #include <algorithm>
0031
0032
0033 #include "TH2.h"
0034 #include "TProfile2D.h"
0035 #include "TH2Poly.h"
0036 #include "TGraph.h"
0037 #include "TH2F.h"
0038 #include "TLegend.h"
0039 #include "TCanvas.h"
0040 #include "TLine.h"
0041 #include "TGraph.h"
0042 #include "TStyle.h"
0043 #include "TLatex.h"
0044 #include "TPave.h"
0045 #include "TPaveStats.h"
0046 #include "TGaxis.h"
0047
0048 namespace {
0049
0050 using namespace cond::payloadInspector;
0051
0052
0053
0054
0055 class SiPixelTemplateDBObjectTest : public Histogram1D<SiPixelTemplateDBObject, SINGLE_IOV> {
0056 public:
0057 SiPixelTemplateDBObjectTest()
0058 : Histogram1D<SiPixelTemplateDBObject, SINGLE_IOV>(
0059 "SiPixelTemplateDBObject test", "SiPixelTemplateDBObject test", 10, 0.0, 100.) {}
0060
0061 bool fill() override {
0062 auto tag = PlotBase::getTag<0>();
0063 for (auto const& iov : tag.iovs) {
0064 std::vector<SiPixelTemplateStore> thePixelTemp_;
0065 std::shared_ptr<SiPixelTemplateDBObject> payload = Base::fetchPayload(std::get<1>(iov));
0066 if (payload.get()) {
0067 if (!SiPixelTemplate::pushfile(*payload, thePixelTemp_)) {
0068 throw cms::Exception("SiPixelTemplateDBObject_PayloadInspector")
0069 << "\nERROR: Templates not filled correctly. Check the conditions. Using "
0070 "SiPixelTemplateDBObject version "
0071 << payload->version() << "\n\n";
0072 }
0073
0074 SiPixelTemplate templ(thePixelTemp_);
0075
0076 for (const auto& theTemp : thePixelTemp_) {
0077 std::cout << "\n\n"
0078 << "Template ID = " << theTemp.head.ID << ", Template Version " << theTemp.head.templ_version
0079 << ", Bfield = " << theTemp.head.Bfield << ", NTy = " << theTemp.head.NTy
0080 << ", NTyx = " << theTemp.head.NTyx << ", NTxx = " << theTemp.head.NTxx
0081 << ", Dtype = " << theTemp.head.Dtype << ", Bias voltage " << theTemp.head.Vbias
0082 << ", temperature " << theTemp.head.temperature << ", fluence " << theTemp.head.fluence
0083 << ", Q-scaling factor " << theTemp.head.qscale << ", 1/2 multi dcol threshold "
0084 << theTemp.head.s50 << ", 1/2 single dcol threshold " << theTemp.head.ss50 << ", y Lorentz Width "
0085 << theTemp.head.lorywidth << ", y Lorentz Bias " << theTemp.head.lorybias << ", x Lorentz width "
0086 << theTemp.head.lorxwidth << ", x Lorentz Bias " << theTemp.head.lorxbias
0087 << ", Q/Q_avg fractions for Qbin defs " << theTemp.head.fbin[0] << ", " << theTemp.head.fbin[1]
0088 << ", " << theTemp.head.fbin[2] << ", pixel x-size " << theTemp.head.xsize << ", y-size "
0089 << theTemp.head.ysize << ", zsize " << theTemp.head.zsize << "\n"
0090 << std::endl;
0091 }
0092
0093 std::map<unsigned int, short> templMap = payload->getTemplateIDs();
0094 for (auto const& entry : templMap) {
0095 std::cout << "DetID: " << entry.first << " template ID: " << entry.second << std::endl;
0096 templ.interpolate(entry.second, 0.f, 0.f, 1.f, 1.f);
0097
0098 std::cout << "\t lorywidth " << templ.lorywidth() << " lorxwidth: " << templ.lorxwidth() << " lorybias "
0099 << templ.lorybias() << " lorxbias: " << templ.lorxbias() << "\n"
0100 << std::endl;
0101 }
0102
0103 fillWithValue(1.);
0104
0105 }
0106 }
0107 return true;
0108 }
0109 };
0110
0111
0112
0113
0114 template <SiPixelPI::DetType myType>
0115 class SiPixelTemplateLA : public PlotImage<SiPixelTemplateDBObject, SINGLE_IOV> {
0116 struct header_info {
0117 int ID;
0118 float lorywidth;
0119 float lorxwidth;
0120 float lorybias;
0121 float lorxbias;
0122 float Vbias;
0123 float temperature;
0124 int templ_version;
0125 float Bfield;
0126 float xsize;
0127 float ysize;
0128 float zsize;
0129 };
0130
0131 public:
0132 SiPixelTemplateLA() : PlotImage<SiPixelTemplateDBObject, SINGLE_IOV>("SiPixelTemplate assumed value of uH") {}
0133
0134 bool fill() override {
0135 gStyle->SetPalette(kRainBow);
0136 TGaxis::SetMaxDigits(2);
0137
0138 auto tag = PlotBase::getTag<0>();
0139 auto iov = tag.iovs.front();
0140 const auto& tagname = tag.name;
0141 std::vector<SiPixelTemplateStore> thePixelTemp_;
0142 std::shared_ptr<SiPixelTemplateDBObject> payload = fetchPayload(std::get<1>(iov));
0143
0144 if (payload.get()) {
0145 if (!SiPixelTemplate::pushfile(*payload, thePixelTemp_)) {
0146 throw cms::Exception("SiPixelTemplateDBObject_PayloadInspector")
0147 << "\nERROR: Templates not filled correctly. Check the conditions. Using "
0148 "SiPixelTemplateDBObject version "
0149 << payload->version() << "\n\n";
0150 }
0151
0152
0153 SiPixelTemplate templ(thePixelTemp_);
0154 std::map<int, header_info> theInfos;
0155 for (const auto& theTemp : thePixelTemp_) {
0156 header_info info;
0157 info.ID = theTemp.head.ID;
0158 info.lorywidth = theTemp.head.lorywidth;
0159 info.lorxwidth = theTemp.head.lorxwidth;
0160 info.lorybias = theTemp.head.lorybias;
0161 info.lorxbias = theTemp.head.lorxbias;
0162 info.Vbias = theTemp.head.Vbias;
0163 info.temperature = theTemp.head.temperature;
0164 info.templ_version = theTemp.head.templ_version;
0165 info.Bfield = theTemp.head.Bfield;
0166 info.xsize = theTemp.head.xsize;
0167 info.ysize = theTemp.head.ysize;
0168 info.zsize = theTemp.head.zsize;
0169
0170 theInfos[theTemp.head.ID] = info;
0171 }
0172
0173
0174 Phase1PixelMaps theMaps("");
0175 if (myType == SiPixelPI::t_all) {
0176 theMaps.resetOption("COLZA L");
0177 } else {
0178 theMaps.resetOption("COLZL");
0179 }
0180
0181 if (myType == SiPixelPI::t_barrel) {
0182 theMaps.bookBarrelHistograms("templateLABarrel", "#muH", "#mu_{H} [1/T]");
0183 } else if (myType == SiPixelPI::t_forward) {
0184 theMaps.bookForwardHistograms("templateLAForward", "#muH", "#mu_{H} [1/T]");
0185 } else if (myType == SiPixelPI::t_all) {
0186 theMaps.bookBarrelHistograms("templateLA", "#muH", "#mu_{H} [1/T]");
0187 theMaps.bookForwardHistograms("templateLA", "#muH", "#mu_{H} [1/T]");
0188 } else {
0189 edm::LogError("SiPixelTemplateDBObject_PayloadInspector")
0190 << " un-recognized detector type " << myType << std::endl;
0191 return false;
0192 }
0193
0194 std::map<unsigned int, short> templMap = payload->getTemplateIDs();
0195 if (templMap.size() == SiPixelPI::phase0size || templMap.size() > SiPixelPI::phase1size) {
0196 edm::LogError("SiPixelTemplateDBObject_PayloadInspector")
0197 << "There are " << templMap.size()
0198 << " DetIds in this payload. SiPixelTempate Lorentz Angle maps are not supported for non-Phase1 Pixel "
0199 "geometries !";
0200 TCanvas canvas("Canv", "Canv", 1200, 1000);
0201 SiPixelPI::displayNotSupported(canvas, templMap.size());
0202 std::string fileName(m_imageFileName);
0203 canvas.SaveAs(fileName.c_str());
0204 return false;
0205 } else {
0206 if (templMap.size() < SiPixelPI::phase1size) {
0207 edm::LogWarning("SiPixelTemplateDBObject_PayloadInspector")
0208 << "\n ********* WARNING! ********* \n There are " << templMap.size() << " DetIds in this payload !"
0209 << "\n **************************** \n";
0210 }
0211 }
0212
0213 for (auto const& entry : templMap) {
0214 templ.interpolate(entry.second, 0.f, 0.f, 1.f, 1.f);
0215
0216
0217 float uH = templ.lorxwidth() / theInfos[entry.second].zsize / theInfos[entry.second].Bfield;
0218 COUT << "uH: " << uH << " lor x width:" << templ.lorxwidth() << " z size: " << theInfos[entry.second].zsize
0219 << " B-field: " << theInfos[entry.second].Bfield << std::endl;
0220
0221 auto detid = DetId(entry.first);
0222 if (myType == SiPixelPI::t_all) {
0223 if ((detid.subdetId() == PixelSubdetector::PixelBarrel)) {
0224 theMaps.fillBarrelBin("templateLA", entry.first, uH);
0225 }
0226 if ((detid.subdetId() == PixelSubdetector::PixelEndcap)) {
0227 theMaps.fillForwardBin("templateLA", entry.first, uH);
0228 }
0229 } else if ((detid.subdetId() == PixelSubdetector::PixelBarrel) && (myType == SiPixelPI::t_barrel)) {
0230 theMaps.fillBarrelBin("templateLABarrel", entry.first, uH);
0231 } else if ((detid.subdetId() == PixelSubdetector::PixelEndcap) && (myType == SiPixelPI::t_forward)) {
0232 theMaps.fillForwardBin("templateLAForward", entry.first, uH);
0233 }
0234 }
0235
0236 theMaps.beautifyAllHistograms();
0237
0238 TCanvas canvas("Canv", "Canv", (myType == SiPixelPI::t_barrel) ? 1200 : 1600, 1000);
0239 if (myType == SiPixelPI::t_barrel) {
0240 theMaps.drawBarrelMaps("templateLABarrel", canvas);
0241 } else if (myType == SiPixelPI::t_forward) {
0242 theMaps.drawForwardMaps("templateLAForward", canvas);
0243 } else if (myType == SiPixelPI::t_all) {
0244 theMaps.drawSummaryMaps("templateLA", canvas);
0245 }
0246
0247 canvas.cd();
0248 TPaveText ksPt(0, 0, 0.88, 0.04, "NDC");
0249 ksPt.SetBorderSize(0);
0250 ksPt.SetFillColor(0);
0251 const char* textToAdd = Form("Template Tag: #color[2]{%s}, IOV: #color[2]{%s}. Payload hash: #color[2]{%s}",
0252 tagname.c_str(),
0253 std::to_string(std::get<0>(iov)).c_str(),
0254 (std::get<1>(iov)).c_str());
0255 ksPt.AddText(textToAdd);
0256 ksPt.Draw();
0257
0258 canvas.cd();
0259 std::string fileName(m_imageFileName);
0260 canvas.SaveAs(fileName.c_str());
0261 }
0262 return true;
0263 }
0264 };
0265
0266 using SiPixelTemplateLABPixMap = SiPixelTemplateLA<SiPixelPI::t_barrel>;
0267 using SiPixelTemplateLAFPixMap = SiPixelTemplateLA<SiPixelPI::t_forward>;
0268 using SiPixelTemplateLAMap = SiPixelTemplateLA<SiPixelPI::t_all>;
0269
0270 using namespace templateHelper;
0271
0272
0273
0274
0275 using SiPixelTemplateIDsFullPixelMap =
0276 SiPixelFullPixelIDMap<SiPixelTemplateDBObject, SiPixelTemplateStore, SiPixelTemplate>;
0277
0278
0279
0280
0281 using SiPixelTemplateTitles_Display =
0282 SiPixelTitles_Display<SiPixelTemplateDBObject, SiPixelTemplateStore, SiPixelTemplate>;
0283
0284
0285
0286
0287 using SiPixelTemplateHeaderTable = SiPixelHeaderTable<SiPixelTemplateDBObject, SiPixelTemplateStore, SiPixelTemplate>;
0288
0289
0290
0291
0292 using SiPixelTemplateIDsBPixMap = SiPixelIDs<SiPixelTemplateDBObject, SiPixelPI::t_barrel>;
0293 using SiPixelTemplateIDsFPixMap = SiPixelIDs<SiPixelTemplateDBObject, SiPixelPI::t_forward>;
0294 using SiPixelTemplateIDsMap = SiPixelIDs<SiPixelTemplateDBObject, SiPixelPI::t_all>;
0295
0296
0297
0298
0299 using SiPixelTemplateQScaleBPixMap = SiPixelTemplateHeaderInfo<SiPixelTemplateDBObject,
0300 SiPixelTemplateStore,
0301 SiPixelTemplate,
0302 SiPixelPI::t_barrel,
0303 headerParam::k_qscale>;
0304 using SiPixelTemplateQScaleFPixMap = SiPixelTemplateHeaderInfo<SiPixelTemplateDBObject,
0305 SiPixelTemplateStore,
0306 SiPixelTemplate,
0307 SiPixelPI::t_forward,
0308 headerParam::k_qscale>;
0309 using SiPixelTemplateQScaleMap = SiPixelTemplateHeaderInfo<SiPixelTemplateDBObject,
0310 SiPixelTemplateStore,
0311 SiPixelTemplate,
0312 SiPixelPI::t_all,
0313 headerParam::k_qscale>;
0314
0315
0316
0317
0318 using SiPixelTemplateVbiasBPixMap = SiPixelTemplateHeaderInfo<SiPixelTemplateDBObject,
0319 SiPixelTemplateStore,
0320 SiPixelTemplate,
0321 SiPixelPI::t_barrel,
0322 headerParam::k_Vbias>;
0323 using SiPixelTemplateVbiasFPixMap = SiPixelTemplateHeaderInfo<SiPixelTemplateDBObject,
0324 SiPixelTemplateStore,
0325 SiPixelTemplate,
0326 SiPixelPI::t_forward,
0327 headerParam::k_Vbias>;
0328 using SiPixelTemplateVbiasMap = SiPixelTemplateHeaderInfo<SiPixelTemplateDBObject,
0329 SiPixelTemplateStore,
0330 SiPixelTemplate,
0331 SiPixelPI::t_all,
0332 headerParam::k_Vbias>;
0333 }
0334
0335
0336 PAYLOAD_INSPECTOR_MODULE(SiPixelTemplateDBObject) {
0337 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateDBObjectTest);
0338 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateIDsFullPixelMap);
0339 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateTitles_Display);
0340 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateHeaderTable);
0341 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateIDsMap);
0342 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateIDsBPixMap);
0343 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateIDsFPixMap);
0344 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateLAMap);
0345 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateLABPixMap);
0346 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateLAFPixMap);
0347 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateQScaleBPixMap);
0348 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateQScaleFPixMap);
0349 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateQScaleMap);
0350 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateVbiasBPixMap);
0351 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateVbiasFPixMap);
0352 PAYLOAD_INSPECTOR_CLASS(SiPixelTemplateVbiasMap);
0353 }