SiPixelQualityESProducer

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
// -*- C++ -*-
//
// Package:    SiPixelQualityESProducer
// Class:      SiPixelQualityESProducer
//
/**\class SiPixelQualityESProducer SiPixelQualityESProducer.h CalibTracker/SiPixelESProducer/src/SiPixelQualityESProducer.cc

 Description: <one line class summary>

 Implementation:
     <Notes on implementation>
*/
//
// Original Author: Gemma Tinti
//         Created:  Jan 13 2011
//
//

#include <memory>

#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/ESProducer.h"
#include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h"
#include "FWCore/Framework/interface/ModuleFactory.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "CondFormats/DataRecord/interface/SiPixelQualityFromDbRcd.h"
#include "CondFormats/DataRecord/interface/SiPixelQualityRcd.h"
#include "CondFormats/SiPixelObjects/interface/SiPixelQuality.h"
#include "CondFormats/SiStripObjects/interface/SiStripDetVOff.h"

class SiPixelQualityESProducer : public edm::ESProducer, public edm::EventSetupRecordIntervalFinder {
public:
  SiPixelQualityESProducer(const edm::ParameterSet& iConfig);
  ~SiPixelQualityESProducer() override = default;

  std::unique_ptr<SiPixelQuality> produce(const SiPixelQualityRcd& iRecord);

  static void fillDescriptions(edm::ConfigurationDescriptions&);

private:
  void setIntervalFor(const edm::eventsetup::EventSetupRecordKey&,
                      const edm::IOVSyncValue&,
                      edm::ValidityInterval&) override;

  edm::ESGetToken<SiPixelQuality, SiPixelQualityFromDbRcd> siPixelQualityFromDbToken_;
  edm::ESGetToken<SiStripDetVOff, SiPixelDetVOffRcd> voffToken_;
};

SiPixelQualityESProducer::SiPixelQualityESProducer(const edm::ParameterSet& iConfig) {
  // setWhatProduced internally uses "appendToDataLabel" to name the output product of this ESProducer
  auto const& appendToDataLabel = iConfig.getParameter<std::string>("appendToDataLabel");
  auto esCC = setWhatProduced(this);

  // "siPixelQualityFromDbLabel" corresponds to the Label of a tag with Record
  // "SiPixelQualityFromDbRcd" in the EventSetup (normally provided by the GlobalTag)
  auto const& siPixelQualityFromDbLabel = iConfig.getParameter<std::string>("siPixelQualityFromDbLabel");
  siPixelQualityFromDbToken_ = esCC.consumes(edm::ESInputTag{"", siPixelQualityFromDbLabel});
  voffToken_ = esCC.consumes();

  findingRecord<SiPixelQualityRcd>();

  edm::LogInfo("SiPixelQualityESProducer")
      << "Module = \"" << description().label_ << "\" (appendToDataLabel = \"" << appendToDataLabel
      << "\", siPixelQualityFromDbLabel = \"" << siPixelQualityFromDbLabel << "\")";
}

std::unique_ptr<SiPixelQuality> SiPixelQualityESProducer::produce(const SiPixelQualityRcd& iRecord) {
  ///////////////////////////////////////////////////////
  //  errortype "whole" = int 0 in DB  BadRocs = 65535 //
  //  errortype "tbmA" = int 1 in DB  BadRocs = 255    //
  //  errortype "tbmB" = int 2 in DB  Bad Rocs = 65280 //
  //  errortype "none" = int 3 in DB                   //
  ///////////////////////////////////////////////////////

  //if I have understood this is the one got from the DB or file, but in any case the ORIGINAL(maybe i need to get the record for it)
  //SiPixelQuality * obj = new SiPixelQuality();
  //SiPixelQuality::disabledModuleType BadModule;
  //BadModule.DetID = 1; BadModule.errorType = 0; BadModule.BadRocs = 65535; obj->addDisabledModule(BadModule);

  //now the dbobject is the one copied from the db
  auto dbptr = std::make_unique<SiPixelQuality>(iRecord.get(siPixelQualityFromDbToken_));

  //here is the magic line in which it switches off Bad Modules
  dbptr->add(&(iRecord.get(voffToken_)));
  return dbptr;
}

void SiPixelQualityESProducer::setIntervalFor(const edm::eventsetup::EventSetupRecordKey&,
                                              const edm::IOVSyncValue& iosv,
                                              edm::ValidityInterval& oValidity) {
  edm::ValidityInterval infinity(iosv.beginOfTime(), iosv.endOfTime());
  oValidity = infinity;
}

void SiPixelQualityESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
  edm::ParameterSetDescription desc;
  desc.add<std::string>("siPixelQualityFromDbLabel", "");
  {
    edm::ParameterSetDescription desc_ps;
    desc_ps.add<std::string>("record", "SiPixelQualityFromDbRcd");
    desc_ps.add<std::string>("tag", "");
    std::vector<edm::ParameterSet> default_ps;
    default_ps.reserve(2);
    {
      edm::ParameterSet temp;
      temp.addParameter<std::string>("record", "SiPixelQualityFromDbRcd");
      temp.addParameter<std::string>("tag", "");
      default_ps.push_back(temp);
    }
    {
      edm::ParameterSet temp;
      temp.addParameter<std::string>("record", "SiPixelDetVOffRcd");
      temp.addParameter<std::string>("tag", "");
      default_ps.push_back(temp);
    }
    desc.addVPSet("ListOfRecordToMerge", desc_ps, default_ps);
  }
  descriptions.addWithDefaultLabel(desc);
}

DEFINE_FWK_EVENTSETUP_MODULE(SiPixelQualityESProducer);