** Warning **
Issuing rollback() due to DESTROY without explicit disconnect() of DBD::mysql::db handle dbname=lxr at /lxr/lib/LXR/Common.pm line 1113.
Last-Modified: Tue, 5 Jun 2023 01:26:39 GMT
Content-Type: text/html; charset=utf-8
/CMSSW_13_2_X_2023-06-04-2300/RecoParticleFlow/PFClusterProducer/plugins/PFRecHitProducer.cc
File indexing completed on 2023-03-17 11:21:04
0001 #include "FWCore /Framework /interface /Event.h "
0002 #include "FWCore /Framework /interface /Frameworkfwd.h "
0003 #include "FWCore /Framework /interface /MakerMacros.h "
0004 #include "FWCore /Framework /interface /stream /EDProducer.h "
0005 #include "FWCore /ParameterSet /interface /ParameterSet.h "
0006 #include "FWCore /Utilities /interface /RunningAverage.h "
0007 #include "RecoParticleFlow /PFClusterProducer /interface /PFRecHitCreatorBase.h "
0008 #include "RecoParticleFlow /PFClusterProducer /interface /PFRecHitNavigatorBase.h "
0009
0010 #include <memory>
0011
0012
0013
0014
0015
0016 class PFRecHitProducer final : public edm ::stream ::EDProducer <> {
0017 public :
0018 explicit PFRecHitProducer(const edm ::ParameterSet & iConfig );
0019 ~PFRecHitProducer() override ;
0020
0021 static void fillDescriptions (edm ::ConfigurationDescriptions & descriptions );
0022
0023 private :
0024 void produce (edm ::Event &, const edm ::EventSetup &) override ;
0025 void beginRun (edm ::Run const &, const edm ::EventSetup &) override ;
0026 std ::vector <std ::unique_ptr <PFRecHitCreatorBase> > creators_;
0027 std ::unique_ptr <PFRecHitNavigatorBase> navigator_;
0028 bool init_ ;
0029 };
0030
0031 #include "FWCore /Framework /interface /MakerMacros.h "
0032 DEFINE_FWK_MODULE (PFRecHitProducer);
0033
0034 namespace {
0035 bool sortByDetId(const reco ::PFRecHit & a , const reco ::PFRecHit & b ) { return a .detId () < b .detId (); }
0036
0037 edm ::RunningAverage localRA1;
0038 edm ::RunningAverage localRA2;
0039 }
0040
0041 PFRecHitProducer::PFRecHitProducer(const edm ::ParameterSet & iConfig ) {
0042 produces <reco ::PFRecHitCollection >();
0043 produces <reco ::PFRecHitCollection >("Cleaned" );
0044
0045 edm ::ConsumesCollector cc = consumesCollector ();
0046
0047 std ::vector <edm ::ParameterSet > creators = iConfig .getParameter <std ::vector <edm ::ParameterSet > >("producers" );
0048 for (auto & creator : creators) {
0049 std ::string name = creator .getParameter <std ::string >("name" );
0050 creators_.emplace_back (PFRecHitFactory::get ()->create (name , creator , cc ));
0051 }
0052
0053 edm ::ParameterSet navSet = iConfig .getParameter <edm ::ParameterSet >("navigator" );
0054 navigator_ = PFRecHitNavigationFactory::get ()->create (navSet.getParameter <std ::string >("name" ), navSet, cc );
0055 }
0056
0057 PFRecHitProducer::~PFRecHitProducer() = default ;
0058
0059
0060
0061
0062
0063 void PFRecHitProducer::beginRun (edm ::Run const & iRun , const edm ::EventSetup & iSetup) {
0064 for (const auto & creator : creators_) {
0065 creator ->init (iSetup);
0066 }
0067 navigator_->init (iSetup);
0068 }
0069
0070
0071 void PFRecHitProducer::produce (edm ::Event & iEvent , const edm ::EventSetup & iSetup) {
0072 using namespace edm ;
0073 auto out = std ::make_unique <reco ::PFRecHitCollection >();
0074 auto cleaned = std ::make_unique <reco ::PFRecHitCollection >();
0075
0076 out ->reserve (localRA1.upper ());
0077 cleaned ->reserve (localRA2.upper ());
0078
0079 for (const auto & creator : creators_) {
0080 creator ->importRecHits(out , cleaned , iEvent , iSetup);
0081 }
0082
0083 if (out ->capacity () > 2 * out ->size ())
0084 out ->shrink_to_fit ();
0085 if (cleaned ->capacity () > 2 * cleaned ->size ())
0086 cleaned ->shrink_to_fit ();
0087 localRA1.update (out ->size ());
0088 localRA2.update (cleaned ->size ());
0089 std ::sort (out ->begin (), out ->end (), sortByDetId);
0090
0091
0092 edm ::RefProd <reco ::PFRecHitCollection > refProd = iEvent .getRefBeforePut <reco ::PFRecHitCollection >();
0093
0094 for (auto & pfrechit : *out ) {
0095 navigator_->associateNeighbours(pfrechit, out , refProd );
0096 }
0097
0098 iEvent .put (std ::move (out ), "" );
0099 iEvent .put (std ::move (cleaned ), "Cleaned" );
0100 }
0101
0102 void PFRecHitProducer::fillDescriptions (edm ::ConfigurationDescriptions & descriptions ) {
0103
0104
0105 edm ::ParameterSetDescription desc ;
0106 desc .setUnknown ();
0107 descriptions .addDefault (desc );
0108 }