Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-12 23:30:05

0001 /**********************************************************************
0002  *
0003  * Author: F.Ferro fabrizio.ferro@ge.infn.it - INFN Genova - 2017
0004  *
0005  **********************************************************************/
0006 
0007 #include <memory>
0008 #include <vector>
0009 
0010 #include "CondFormats/DataRecord/interface/CTPPSPixelAnalysisMaskRcd.h"
0011 #include "CondFormats/DataRecord/interface/CTPPSPixelDAQMappingRcd.h"
0012 #include "CondFormats/DataRecord/interface/CTPPSPixelGainCalibrationsRcd.h"
0013 #include "CondFormats/PPSObjects/interface/CTPPSPixelAnalysisMask.h"
0014 #include "CondFormats/PPSObjects/interface/CTPPSPixelDAQMapping.h"
0015 #include "CondFormats/PPSObjects/interface/CTPPSPixelGainCalibrations.h"
0016 #include "DataFormats/CTPPSDetId/interface/CTPPSPixelDetId.h"
0017 #include "DataFormats/CTPPSDigi/interface/CTPPSPixelDigi.h"
0018 #include "DataFormats/CTPPSReco/interface/CTPPSPixelCluster.h"
0019 #include "DataFormats/Common/interface/DetSet.h"
0020 #include "DataFormats/Common/interface/DetSetVector.h"
0021 #include "DataFormats/Common/interface/Handle.h"
0022 #include "DataFormats/DetId/interface/DetId.h"
0023 #include "FWCore/Framework/interface/ESHandle.h"
0024 #include "FWCore/Framework/interface/Event.h"
0025 #include "FWCore/Framework/interface/EventSetup.h"
0026 #include "FWCore/Framework/interface/stream/EDProducer.h"
0027 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0028 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0029 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0030 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0031 #include "FWCore/Utilities/interface/ESGetToken.h"
0032 #include "FWCore/Utilities/interface/EDGetToken.h"
0033 #include "FWCore/Utilities/interface/EDPutToken.h"
0034 #include "FWCore/Utilities/interface/InputTag.h"
0035 #include "RecoPPS/Local/interface/RPixDetClusterizer.h"
0036 
0037 class CTPPSPixelClusterProducer : public edm::stream::EDProducer<> {
0038 public:
0039   explicit CTPPSPixelClusterProducer(const edm::ParameterSet &param);
0040 
0041   ~CTPPSPixelClusterProducer() override = default;
0042 
0043   void produce(edm::Event &, const edm::EventSetup &) override;
0044   static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);
0045 
0046 private:
0047   const edm::EDGetTokenT<edm::DetSetVector<CTPPSPixelDigi>> tokenCTPPSPixelDigi_;
0048   const edm::EDPutTokenT<edm::DetSetVector<CTPPSPixelCluster>> tokenCTPPSPixelCluster_;
0049   const edm::ESGetToken<CTPPSPixelAnalysisMask, CTPPSPixelAnalysisMaskRcd> tokenCTPPSPixelAnalysisMask_;
0050   const edm::ESGetToken<CTPPSPixelGainCalibrations, CTPPSPixelGainCalibrationsRcd> tokenGainCalib_;
0051   const int verbosity_;
0052   RPixDetClusterizer clusterizer_;
0053 
0054   void run(const edm::DetSetVector<CTPPSPixelDigi> &input,
0055            edm::DetSetVector<CTPPSPixelCluster> &output,
0056            const CTPPSPixelAnalysisMask &mask,
0057            const CTPPSPixelGainCalibrations &gainCalibration);
0058 };
0059 
0060 CTPPSPixelClusterProducer::CTPPSPixelClusterProducer(const edm::ParameterSet &conf)
0061     : tokenCTPPSPixelDigi_(consumes<edm::DetSetVector<CTPPSPixelDigi>>(conf.getParameter<edm::InputTag>("tag"))),
0062       tokenCTPPSPixelCluster_(produces()),
0063       tokenCTPPSPixelAnalysisMask_(esConsumes()),
0064       tokenGainCalib_(esConsumes()),
0065       verbosity_(conf.getUntrackedParameter<int>("RPixVerbosity")),
0066       clusterizer_(conf) {}
0067 
0068 void CTPPSPixelClusterProducer::fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
0069   edm::ParameterSetDescription desc;
0070   desc.addUntracked<int>("RPixVerbosity", 0);
0071   desc.add<edm::InputTag>("tag", edm::InputTag("ctppsPixelDigis"));
0072   desc.add<int>("SeedADCThreshold", 2);
0073   desc.add<int>("ADCThreshold", 2);
0074   desc.add<double>("ElectronADCGain", 135.0);
0075   desc.add<int>("VCaltoElectronGain", 50);
0076   desc.add<int>("VCaltoElectronOffset", -411);
0077   desc.add<bool>("doSingleCalibration", false);
0078   descriptions.add("ctppsPixelClusters", desc);
0079 }
0080 
0081 void CTPPSPixelClusterProducer::produce(edm::Event &event, const edm::EventSetup &setup) {
0082   // get inputs
0083   edm::DetSetVector<CTPPSPixelDigi> const &rpd = event.get(tokenCTPPSPixelDigi_);
0084 
0085   edm::DetSetVector<CTPPSPixelCluster> output;
0086 
0087   if (not rpd.empty()) {
0088     // get analysis mask to mask channels
0089     const auto &mask = setup.getData(tokenCTPPSPixelAnalysisMask_);
0090     // get calibration DB
0091     const auto &gainCalibrations = setup.getData(tokenGainCalib_);
0092     // run clusterisation
0093     run(rpd, output, mask, gainCalibrations);
0094   }
0095 
0096   // write output
0097   event.emplace(tokenCTPPSPixelCluster_, std::move(output));
0098 }
0099 
0100 void CTPPSPixelClusterProducer::run(const edm::DetSetVector<CTPPSPixelDigi> &input,
0101                                     edm::DetSetVector<CTPPSPixelCluster> &output,
0102                                     const CTPPSPixelAnalysisMask &mask,
0103                                     const CTPPSPixelGainCalibrations &gainCalibration) {
0104   for (const auto &ds_digi : input) {
0105     edm::DetSet<CTPPSPixelCluster> &ds_cluster = output.find_or_insert(ds_digi.id);
0106     clusterizer_.buildClusters(ds_digi.id, ds_digi.data, ds_cluster.data, &gainCalibration, &mask);
0107 
0108     if (verbosity_) {
0109       unsigned int cluN = 0;
0110       for (std::vector<CTPPSPixelCluster>::iterator iit = ds_cluster.data.begin(); iit != ds_cluster.data.end();
0111            iit++) {
0112         edm::LogInfo("CTPPSPixelClusterProducer") << "Cluster " << ++cluN << " avg row " << (*iit).avg_row()
0113                                                   << " avg col " << (*iit).avg_col() << " ADC.size " << (*iit).size();
0114       }
0115     }
0116   }
0117 }
0118 
0119 #include "FWCore/Framework/interface/MakerMacros.h"
0120 DEFINE_FWK_MODULE(CTPPSPixelClusterProducer);