Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:18:39

0001 // -*- C++ -*-
0002 //
0003 // Package:    EcalSimpleUncalibRecHitFilter
0004 // Class:      EcalSimpleUncalibRecHitFilter
0005 //
0006 /**\class EcalSimpleUncalibRecHitFilter EcalSimpleUncalibRecHitFilter.cc Work/EcalSimpleUncalibRecHitFilter/src/EcalSimpleUncalibRecHitFilter.cc
0007 
0008  Description: <one line class summary>
0009 
0010  Implementation:
0011      <Notes on implementation>
0012 */
0013 //
0014 // Original Author:  Giovanni FRANZONI
0015 //         Created:  Wed Sep 19 16:21:29 CEST 2007
0016 //
0017 //
0018 
0019 // system include files
0020 #include <memory>
0021 
0022 // user include files
0023 #include "FWCore/Framework/interface/Frameworkfwd.h"
0024 #include "FWCore/Framework/interface/global/EDFilter.h"
0025 #include "FWCore/Framework/interface/Event.h"
0026 
0027 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0028 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0029 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0030 
0031 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0032 
0033 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
0034 #include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h"
0035 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
0036 
0037 //
0038 // class declaration
0039 //
0040 
0041 class EcalSimpleUncalibRecHitFilter : public edm::global::EDFilter<> {
0042 public:
0043   explicit EcalSimpleUncalibRecHitFilter(const edm::ParameterSet &);
0044   ~EcalSimpleUncalibRecHitFilter() override;
0045 
0046   static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);
0047 
0048 private:
0049   bool filter(edm::StreamID, edm::Event &, edm::EventSetup const &) const override;
0050 
0051   // ----------member data ---------------------------
0052   const edm::EDGetTokenT<EcalUncalibratedRecHitCollection> EcalUncalibRecHitToken_;
0053   const double minAdc_;
0054   const std::vector<int> maskedList_;
0055 };
0056 
0057 //
0058 // constructors and destructor
0059 //
0060 EcalSimpleUncalibRecHitFilter::EcalSimpleUncalibRecHitFilter(const edm::ParameterSet &iConfig)
0061     : EcalUncalibRecHitToken_(consumes<EcalUncalibratedRecHitCollection>(
0062           iConfig.getParameter<edm::InputTag>("EcalUncalibRecHitCollection"))),
0063       minAdc_(iConfig.getUntrackedParameter<double>("adcCut", 12)),
0064       maskedList_(iConfig.getUntrackedParameter<std::vector<int>>("maskedChannels",
0065                                                                   std::vector<int>{}))  // this is using the ashed index
0066 {
0067   // now do what ever initialization is needed
0068 }
0069 
0070 EcalSimpleUncalibRecHitFilter::~EcalSimpleUncalibRecHitFilter() {
0071   // do anything here that needs to be done at desctruction time
0072   // (e.g. close files, deallocate resources etc.)
0073 }
0074 
0075 //
0076 // member functions
0077 //
0078 
0079 // ------------ method called on each new Event  ------------
0080 bool EcalSimpleUncalibRecHitFilter::filter(edm::StreamID, edm::Event &iEvent, edm::EventSetup const &iSetup) const {
0081   using namespace edm;
0082 
0083   // getting very basic uncalRH
0084   Handle<EcalUncalibratedRecHitCollection> crudeHits;
0085   if (not iEvent.getByToken(EcalUncalibRecHitToken_, crudeHits)) {
0086     edm::EDConsumerBase::Labels labels;
0087     labelsForToken(EcalUncalibRecHitToken_, labels);
0088     LogWarning("EcalSimpleUncalibRecHitFilter")
0089         << "InputTag:  label = \"" << labels.module << "\", instance = \"" << labels.productInstance
0090         << "\", process = \"" << labels.process << "\" is not available";
0091     return false;
0092   }
0093 
0094   bool thereIsSignal = false;
0095   // loop on crude rechits
0096   for (auto hit : *crudeHits) {
0097     // masking noisy channels
0098     auto result = std::find(maskedList_.begin(), maskedList_.end(), EBDetId(hit.id()).hashedIndex());
0099     if (result != maskedList_.end())
0100       // LogWarning("EcalFilter") << "skipping uncalRecHit for channel: " << ic << " with amplitude " << ampli_ ;
0101       continue;
0102 
0103     float ampli_ = hit.amplitude();
0104 
0105     // seeking channels with signal and displaced jitter
0106     if (ampli_ >= minAdc_) {
0107       thereIsSignal = true;
0108       // LogWarning("EcalFilter")  << "at evet: " << iEvent.id().event()
0109       //                       << " and run: " << iEvent.id().run()
0110       //                       << " there is OUT OF TIME signal at chanel: " << ic
0111       //                       << " with amplitude " << ampli_  << " and max at: " << jitter_;
0112       break;
0113     }
0114   }
0115 
0116   return thereIsSignal;
0117 }
0118 
0119 void EcalSimpleUncalibRecHitFilter::fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
0120   edm::ParameterSetDescription desc;
0121 
0122   desc.add<edm::InputTag>("EcalUncalibRecHitCollection",
0123                           edm::InputTag("ecalWeightUncalibRecHit", "EcalUncalibRecHitsEB"));
0124   desc.addUntracked<double>("adcCut", 12.);
0125   desc.addUntracked<std::vector<int>>("maskedChannels", std::vector<int>{});
0126 
0127   descriptions.add("ecalSimpleUncalibRecHitFilter", desc);
0128 }
0129 
0130 // declare this class as a framework plugin
0131 #include "FWCore/Framework/interface/MakerMacros.h"
0132 DEFINE_FWK_MODULE(EcalSimpleUncalibRecHitFilter);