CMS 3D CMS Logo

EcalTPSkimmer.cc
Go to the documentation of this file.
1 
24 
26 public:
27  explicit EcalTPSkimmer(const edm::ParameterSet& ps);
28  ~EcalTPSkimmer() override;
29  void produce(edm::Event& evt, const edm::EventSetup& es) override;
30 
31 private:
34 
36 
38  bool doBarrel_;
39  bool doEndcap_;
40 
41  std::vector<uint32_t> chStatusToSelectTP_;
45 
46  std::set<EcalTrigTowerDetId> insertedTP_;
47 
49 
51 };
52 
54  skipModule_ = ps.getParameter<bool>("skipModule");
55 
56  doBarrel_ = ps.getParameter<bool>("doBarrel");
57  doEndcap_ = ps.getParameter<bool>("doEndcap");
58 
59  chStatusToSelectTP_ = ps.getParameter<std::vector<uint32_t> >("chStatusToSelectTP");
60 
61  tpOutputCollection_ = ps.getParameter<std::string>("tpOutputCollection");
62  tpInputToken_ = consumes<EcalTrigPrimDigiCollection>(ps.getParameter<edm::InputTag>("tpInputCollection"));
63  ttMapToken_ = esConsumes<EcalTrigTowerConstituentsMap, IdealGeometryRecord>();
64  if (not skipModule_) {
65  chStatusToken_ = esConsumes<EcalChannelStatus, EcalChannelStatusRcd>();
66  }
67  produces<EcalTrigPrimDigiCollection>(tpOutputCollection_);
68 }
69 
71 
73  insertedTP_.clear();
74 
75  using namespace edm;
76 
78 
79  // collection of rechits to put in the event
80  auto tpOut = std::make_unique<EcalTrigPrimDigiCollection>();
81 
82  if (skipModule_) {
83  evt.put(std::move(tpOut), tpOutputCollection_);
84  return;
85  }
86 
88 
90  evt.getByToken(tpInputToken_, tpIn);
91 
92  if (doBarrel_) {
94  uint16_t code = 0;
95  for (int i = 0; i < EBDetId::kSizeForDenseIndexing; ++i) {
97  continue;
99  chit = chStatus->find(id);
100  // check if the channel status means TP to be kept
101  if (chit != chStatus->end()) {
102  code = (*chit).getStatusCode();
103  if (std::find(chStatusToSelectTP_.begin(), chStatusToSelectTP_.end(), code) != chStatusToSelectTP_.end()) {
104  // retrieve the TP DetId
105  EcalTrigTowerDetId ttDetId(((EBDetId)id).tower());
106  // insert the TP if not done already
107  if (!alreadyInserted(ttDetId))
108  insertTP(ttDetId, tpIn, *tpOut);
109  }
110  } else {
111  edm::LogError("EcalDetIdToBeRecoveredProducer") << "No channel status found for xtal " << id.rawId()
112  << "! something wrong with EcalChannelStatus in your DB? ";
113  }
114  }
115  }
116 
117  if (doEndcap_) {
119  uint16_t code = 0;
120  for (int i = 0; i < EEDetId::kSizeForDenseIndexing; ++i) {
122  continue;
124  chit = chStatus->find(id);
125  // check if the channel status means TP to be kept
126  if (chit != chStatus->end()) {
127  code = (*chit).getStatusCode();
128  if (std::find(chStatusToSelectTP_.begin(), chStatusToSelectTP_.end(), code) != chStatusToSelectTP_.end()) {
129  // retrieve the TP DetId
130  EcalTrigTowerDetId ttDetId = ttMap_->towerOf(id);
131  // insert the TP if not done already
132  if (!alreadyInserted(ttDetId))
133  insertTP(ttDetId, tpIn, *tpOut);
134  }
135  } else {
136  edm::LogError("EcalDetIdToBeRecoveredProducer") << "No channel status found for xtal " << id.rawId()
137  << "! something wrong with EcalChannelStatus in your DB? ";
138  }
139  }
140  }
141 
142  // put the collection of reconstructed hits in the event
143  LogInfo("EcalTPSkimmer") << "total # of TP inserted: " << tpOut->size();
144 
145  evt.put(std::move(tpOut), tpOutputCollection_);
146 }
147 
149 
154  if (tpIt != tpIn->end()) {
155  tpOut.push_back(*tpIt);
156  insertedTP_.insert(ttId);
157  }
158 }
159 
static EEDetId detIdFromDenseIndex(uint32_t din)
Definition: EEDetId.h:220
edm::ESGetToken< EcalChannelStatus, EcalChannelStatusRcd > chStatusToken_
static constexpr int kSizeForDenseIndexing
Definition: EEDetId.h:328
std::string tpCollection_
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
std::vector< uint32_t > chStatusToSelectTP_
EcalTPSkimmer(const edm::ParameterSet &ps)
void produce(edm::Event &evt, const edm::EventSetup &es) override
std::vector< T >::const_iterator const_iterator
void push_back(T const &t)
std::set< EcalTrigTowerDetId > insertedTP_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:526
Log< level::Error, false > LogError
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
unsigned ttId(DetId const &, EcalElectronicsMapping const *)
EcalTrigTowerDetId towerOf(const DetId &id) const
Get the tower id for this det id (or null if not known)
static EBDetId detIdFromDenseIndex(uint32_t di)
Definition: EBDetId.h:107
edm::ESGetToken< EcalTrigTowerConstituentsMap, IdealGeometryRecord > ttMapToken_
edm::ESHandle< EcalTrigTowerConstituentsMap > ttMap_
static constexpr int kSizeForDenseIndexing
Definition: EBDetId.h:155
std::string tpOutputCollection_
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:130
const_iterator find(uint32_t rawId) const
const_iterator end() const
Log< level::Info, false > LogInfo
std::vector< Item >::const_iterator const_iterator
~EcalTPSkimmer() override
bool alreadyInserted(EcalTrigTowerDetId ttId)
void insertTP(EcalTrigTowerDetId ttId, edm::Handle< EcalTrigPrimDigiCollection > &in, EcalTrigPrimDigiCollection &out)
static bool validDenseIndex(uint32_t din)
Definition: EEDetId.h:213
iterator find(key_type k)
HLT enums.
edm::EDGetTokenT< EcalTrigPrimDigiCollection > tpInputToken_
const_iterator end() const
def move(src, dest)
Definition: eostools.py:511
static bool validDenseIndex(uint32_t din)
Definition: EBDetId.h:105