File indexing completed on 2024-04-06 12:03:24
0001
0002 #include <sys/time.h>
0003 #include <memory>
0004
0005
0006 #include "CLHEP/Random/RandGauss.h"
0007
0008
0009 #include "CondCore/DBOutputService/interface/PoolDBOutputService.h"
0010 #include "CondFormats/SiPixelObjects/interface/SiPixelPerformanceSummary.h"
0011 #include "FWCore/Framework/interface/ESHandle.h"
0012 #include "FWCore/Framework/interface/Event.h"
0013 #include "FWCore/Framework/interface/Frameworkfwd.h"
0014 #include "FWCore/Framework/interface/MakerMacros.h"
0015 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0016 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0018 #include "FWCore/ServiceRegistry/interface/Service.h"
0019 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0020 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0021 #include "Geometry/CommonTopologies/interface/PixelTopology.h"
0022 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0023 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0024
0025 namespace cms {
0026 class SiPixelPerformanceSummaryBuilder : public edm::one::EDAnalyzer<> {
0027 public:
0028 explicit SiPixelPerformanceSummaryBuilder(const edm::ParameterSet&);
0029 ~SiPixelPerformanceSummaryBuilder() override;
0030 void analyze(const edm::Event&, const edm::EventSetup&) override;
0031
0032 private:
0033 edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> tkGeomToken_;
0034 std::vector<uint32_t> detectorModules_;
0035 };
0036 }
0037
0038 using namespace cms;
0039
0040 SiPixelPerformanceSummaryBuilder::SiPixelPerformanceSummaryBuilder(const edm::ParameterSet& iConfig)
0041 : tkGeomToken_(esConsumes()) {}
0042
0043 SiPixelPerformanceSummaryBuilder::~SiPixelPerformanceSummaryBuilder() = default;
0044
0045 void SiPixelPerformanceSummaryBuilder::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0046 const TrackerGeometry* pDD = &iSetup.getData(tkGeomToken_);
0047 edm::LogInfo("SiPixelPerformanceSummaryBuilder") << pDD->detUnits().size() << " detectors" << std::endl;
0048
0049 for (const auto& it : pDD->detUnits()) {
0050 if (dynamic_cast<PixelGeomDetUnit const*>(it) != nullptr) {
0051 detectorModules_.push_back(it->geographicalId().rawId());
0052 }
0053 }
0054 edm::LogInfo("Modules") << "detectorModules_.size() = " << detectorModules_.size();
0055
0056 SiPixelPerformanceSummary performanceSummary;
0057
0058 for (std::vector<uint32_t>::const_iterator iDet = detectorModules_.begin();
0059 iDet != detectorModules_.end();
0060 ++iDet) {
0061 float nDigisMean = (float)CLHEP::RandGauss::shoot(50., 20.);
0062 float nDigisRMS = (float)CLHEP::RandGauss::shoot(20., 4.);
0063 float emptyFraction = (float)CLHEP::RandGauss::shoot(.5, .2);
0064
0065 performanceSummary.setNumberOfDigis(*iDet, nDigisMean, nDigisRMS, emptyFraction);
0066 }
0067 clock_t presentTime = clock();
0068 performanceSummary.setTimeStamp((unsigned long long)presentTime);
0069 performanceSummary.print();
0070
0071 edm::Service<cond::service::PoolDBOutputService> poolDBService;
0072 if (poolDBService.isAvailable()) {
0073 try {
0074 if (poolDBService->isNewTagRequest("SiPixelPerformanceSummaryRcd")) {
0075 edm::LogInfo("Tag") << " is a new tag request.";
0076 poolDBService->createOneIOV<SiPixelPerformanceSummary>(
0077 performanceSummary, poolDBService->beginOfTime(), "SiPixelPerformanceSummaryRcd");
0078 } else {
0079 edm::LogInfo("Tag") << " tag exists already";
0080 poolDBService->appendOneIOV<SiPixelPerformanceSummary>(
0081 performanceSummary, poolDBService->currentTime(), "SiPixelPerformanceSummaryRcd");
0082 }
0083 } catch (const cond::Exception& err) {
0084 edm::LogError("DBWriting") << err.what() << std::endl;
0085 } catch (const std::exception& err) {
0086 edm::LogError("DBWriting") << "caught std::exception " << err.what() << std::endl;
0087 } catch (...) {
0088 edm::LogError("DBWriting") << "unknown error" << std::endl;
0089 }
0090 } else
0091 edm::LogError("PoolDBOutputService") << "service unavailable" << std::endl;
0092 }
0093 DEFINE_FWK_MODULE(SiPixelPerformanceSummaryBuilder);