Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 11:59:34

0001 #ifndef CALIBTRACKER_SIPIXELCALIBDIGIPRODUCER_H
0002 #define CALIBTRACKER_SIPIXELCALIBDIGIPRODUCER_H
0003 
0004 //
0005 // Package:    SiPixelCalibDigiProducer
0006 // Class:      SiPixelCalibDigiProducer
0007 //
0008 /**\class SiPixelCalibDigiProducer SiPixelCalibDigiProducer.cc CalibTracker/SiPixelGainCalibration/src/SiPixelCalibDigiProducer.cc
0009 
0010  Description: <one line class summary>
0011 
0012  Implementation:
0013      <Notes on implementation>
0014 */
0015 //
0016 // Original Author:  Freya Blekman
0017 //         Created:  Wed Oct 31 15:28:52 CET 2007
0018 //
0019 //
0020 
0021 // system include files
0022 #include <memory>
0023 
0024 // user include files
0025 #include "FWCore/Framework/interface/Frameworkfwd.h"
0026 #include "FWCore/Framework/interface/stream/EDProducer.h"
0027 #include "FWCore/Framework/interface/Event.h"
0028 #include "FWCore/Framework/interface/MakerMacros.h"
0029 
0030 #include "FWCore/ServiceRegistry/interface/Service.h"
0031 
0032 #include "FWCore/Utilities/interface/InputTag.h"
0033 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0034 
0035 #include "DataFormats/Common/interface/DetSetVector.h"
0036 
0037 #include "DataFormats/SiPixelDigi/interface/SiPixelCalibDigifwd.h"
0038 #include "DataFormats/SiPixelDigi/interface/SiPixelCalibDigi.h"
0039 #include "DataFormats/SiPixelDigi/interface/PixelDigi.h"
0040 #include "DataFormats/SiPixelDigi/interface/SiPixelCalibDigiError.h"
0041 
0042 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0043 #include "CondFormats/SiPixelObjects/interface/SiPixelCalibConfiguration.h"
0044 #include "CondFormats/DataRecord/interface/SiPixelCalibConfigurationRcd.h"
0045 #include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h"
0046 #include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h"
0047 
0048 #include <map>
0049 #include <vector>
0050 #include <iostream>
0051 //
0052 // class decleration
0053 //
0054 
0055 class SiPixelCalibDigiProducer : public edm::stream::EDProducer<> {
0056 public:
0057   explicit SiPixelCalibDigiProducer(const edm::ParameterSet& iConfig);
0058   ~SiPixelCalibDigiProducer() override;
0059 
0060 private:
0061   void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override;
0062   virtual bool store();
0063   virtual void setPattern();
0064   virtual void fill(edm::Event& iEvent, const edm::EventSetup& iSetup);
0065   virtual void fillPixel(uint32_t detid, short row, short col, short ipoint, short adc);
0066   virtual bool checkPixel(uint32_t detid, short row, short col);
0067   virtual bool checkFED(uint32_t detid);
0068   virtual void clear();
0069   typedef std::pair<uint32_t, std::pair<short, short>> pixelstruct;
0070   // ----------member data ---------------------------
0071   edm::InputTag src_;
0072   edm::EDGetTokenT<edm::DetSetVector<PixelDigi>> tPixelDigi;
0073   uint32_t iEventCounter_;
0074 
0075   bool ignore_non_pattern_;
0076   bool control_pattern_size_;
0077   bool includeErrors_;
0078   int errorType;
0079   edm::ParameterSet conf_;
0080   std::string label_;
0081   std::string instance_;
0082   uint32_t number_of_pixels_per_pattern_;
0083   bool use_realeventnumber_;
0084 
0085   edm::ESHandle<SiPixelCalibConfiguration> calib_;  // keeps track of the calibration constants
0086   edm::ESHandle<TrackerGeometry> theGeometry_;      // the tracker geometry
0087   edm::ESHandle<SiPixelFedCablingMap> theCablingMap_;
0088 
0089   edm::ESGetToken<SiPixelCalibConfiguration, SiPixelCalibConfigurationRcd> calibToken_;
0090   edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> trackerGeomToken_;
0091   edm::ESGetToken<SiPixelFedCablingMap, SiPixelFedCablingMapRcd> cablingMapToken_;
0092 
0093   // worker variables
0094   std::map<pixelstruct, SiPixelCalibDigi>
0095       intermediate_data_;  // data container, copied over into the event every pattern_repeat_ events
0096   std::map<pixelstruct, SiPixelCalibDigiError> error_data_;
0097   //      std::vector<SiPixelCalibDigi> intermediate_data_; // data container, copied over into the event every pattern_repeat_ events
0098   std::vector<pixelstruct> detPixelMap_;  // map to keep track of which pixels are filled where in intermediate_data_
0099   uint32_t pattern_repeat_;               // keeps track of when the pattern should change
0100   std::map<uint32_t, uint32_t> detid_to_fedid_;  // keeps track in which fed each detid is present.
0101 
0102   std::vector<std::pair<short, short>> currentpattern_;  // keeps track of which pattern we are at
0103   std::pair<short, short> currentpair_;                  //worker class to keep track of pairs
0104 };
0105 
0106 #endif