CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Private Attributes
ReducedESRecHitCollectionProducer Class Reference
Inheritance diagram for ReducedESRecHitCollectionProducer:
edm::stream::EDProducer<>

Public Member Functions

void beginRun (edm::Run const &, const edm::EventSetup &) final
 
void collectIds (const ESDetId strip1, const ESDetId strip2, const int &row=0)
 
void produce (edm::Event &e, const edm::EventSetup &c) override
 
 ReducedESRecHitCollectionProducer (const edm::ParameterSet &pset)
 
 ~ReducedESRecHitCollectionProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Private Attributes

edm::ESGetToken< CaloGeometry,
CaloGeometryRecord
caloGeometryToken_
 
std::set< DetIdcollectedIds_
 
const EcalPreshowerGeometrygeometry_p
 
edm::EDGetTokenT
< ESRecHitCollection
InputRecHitES_
 
edm::EDGetTokenT
< reco::SuperClusterCollection
InputSuperClusterEE_
 
std::vector< edm::EDGetTokenT
< DetIdCollection > > 
interestingDetIdCollections_
 
std::vector< edm::EDGetTokenT
< DetIdCollection > > 
interestingDetIdCollectionsNotToClean_
 
std::string OutputLabelES_
 
double scEtThresh_
 
std::unique_ptr
< CaloSubdetectorTopology
topology_p
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T...>
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T...>
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 31 of file ReducedESRecHitCollectionProducer.cc.

Constructor & Destructor Documentation

ReducedESRecHitCollectionProducer::ReducedESRecHitCollectionProducer ( const edm::ParameterSet pset)

Definition at line 63 of file ReducedESRecHitCollectionProducer.cc.

References caloGeometryToken_, edm::ParameterSet::getParameter(), InputRecHitES_, InputSuperClusterEE_, interestingDetIdCollections_, OutputLabelES_, scEtThresh_, AlCaHLTBitMon_QueryRunRegistry::string, GlobalPosition_Frontier_DevDB_cff::tag, and edm::vector_transform().

64  : geometry_p(nullptr) {
65  scEtThresh_ = ps.getParameter<double>("scEtThreshold");
66 
67  InputRecHitES_ = consumes<ESRecHitCollection>(ps.getParameter<edm::InputTag>("EcalRecHitCollectionES"));
69  consumes<reco::SuperClusterCollection>(ps.getParameter<edm::InputTag>("EndcapSuperClusterCollection"));
70  caloGeometryToken_ = esConsumes<CaloGeometry, CaloGeometryRecord, edm::Transition::BeginRun>();
71 
72  OutputLabelES_ = ps.getParameter<std::string>("OutputLabel_ES");
73 
75  edm::vector_transform(ps.getParameter<std::vector<edm::InputTag>>("interestingDetIds"),
76  [this](edm::InputTag const& tag) { return consumes<DetIdCollection>(tag); });
77 
79  edm::vector_transform(ps.getParameter<std::vector<edm::InputTag>>("interestingDetIdsNotToClean"),
80  [this](edm::InputTag const& tag) { return consumes<DetIdCollection>(tag); });
81 
82  produces<EcalRecHitCollection>(OutputLabelES_);
83 }
std::vector< edm::EDGetTokenT< DetIdCollection > > interestingDetIdCollectionsNotToClean_
std::vector< edm::EDGetTokenT< DetIdCollection > > interestingDetIdCollections_
auto vector_transform(std::vector< InputType > const &input, Function predicate) -> std::vector< typename std::remove_cv< typename std::remove_reference< decltype(predicate(input.front()))>::type >::type >
Definition: transform.h:11
edm::EDGetTokenT< ESRecHitCollection > InputRecHitES_
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > caloGeometryToken_
edm::EDGetTokenT< reco::SuperClusterCollection > InputSuperClusterEE_
ReducedESRecHitCollectionProducer::~ReducedESRecHitCollectionProducer ( )
overridedefault

Member Function Documentation

void ReducedESRecHitCollectionProducer::beginRun ( edm::Run const &  ,
const edm::EventSetup iSetup 
)
final

Definition at line 87 of file ReducedESRecHitCollectionProducer.cc.

References caloGeometryToken_, DetId::Ecal, EcalPreshower, geometry_p, edm::EventSetup::getHandle(), and topology_p.

87  {
89  geometry_p =
90  dynamic_cast<const EcalPreshowerGeometry*>(geoHandle->getSubdetectorGeometry(DetId::Ecal, EcalPreshower));
91  if (!geometry_p) {
92  edm::LogError("WrongGeometry") << "could not cast the subdet geometry to preshower geometry";
93  }
94 
95  if (geometry_p)
96  topology_p = std::make_unique<EcalPreshowerTopology>();
97 }
Log< level::Error, false > LogError
std::unique_ptr< CaloSubdetectorTopology > topology_p
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > caloGeometryToken_
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:157
void ReducedESRecHitCollectionProducer::collectIds ( const ESDetId  strip1,
const ESDetId  strip2,
const int &  row = 0 
)

Definition at line 188 of file ReducedESRecHitCollectionProducer.cc.

References collectedIds_, mps_fire::i, GetRecoTauVFromDQM_MC_cff::next, CaloNavigator< T, TOPO >::setHome(), and topology_p.

Referenced by produce().

188  {
189  //cout<<row<<endl;
190 
191  map<DetId, const EcalRecHit*>::iterator it;
192  map<DetId, int>::iterator itu;
193  ESDetId next;
194  ESDetId strip1;
195  ESDetId strip2;
196 
197  strip1 = esDetId1;
198  strip2 = esDetId2;
199 
200  EcalPreshowerNavigator theESNav1(strip1, topology_p.get());
201  theESNav1.setHome(strip1);
202 
203  EcalPreshowerNavigator theESNav2(strip2, topology_p.get());
204  theESNav2.setHome(strip2);
205 
206  if (row == 1) {
207  if (strip1 != ESDetId(0))
208  strip1 = theESNav1.north();
209  if (strip2 != ESDetId(0))
210  strip2 = theESNav2.east();
211  } else if (row == -1) {
212  if (strip1 != ESDetId(0))
213  strip1 = theESNav1.south();
214  if (strip2 != ESDetId(0))
215  strip2 = theESNav2.west();
216  }
217 
218  // Plane 1
219  if (strip1 == ESDetId(0)) {
220  } else {
221  collectedIds_.insert(strip1);
222  //cout<<"center : "<<strip1<<endl;
223  // east road
224  for (int i = 0; i < 15; ++i) {
225  next = theESNav1.east();
226  //cout<<"east : "<<i<<" "<<next<<endl;
227  if (next != ESDetId(0)) {
228  collectedIds_.insert(next);
229  } else {
230  break;
231  }
232  }
233 
234  // west road
235  theESNav1.setHome(strip1);
236  theESNav1.home();
237  for (int i = 0; i < 15; ++i) {
238  next = theESNav1.west();
239  //cout<<"west : "<<i<<" "<<next<<endl;
240  if (next != ESDetId(0)) {
241  collectedIds_.insert(next);
242  } else {
243  break;
244  }
245  }
246  }
247 
248  if (strip2 == ESDetId(0)) {
249  } else {
250  collectedIds_.insert(strip2);
251  //cout<<"center : "<<strip2<<endl;
252  // north road
253  for (int i = 0; i < 15; ++i) {
254  next = theESNav2.north();
255  //cout<<"north : "<<i<<" "<<next<<endl;
256  if (next != ESDetId(0)) {
257  collectedIds_.insert(next);
258  } else {
259  break;
260  }
261  }
262 
263  // south road
264  theESNav2.setHome(strip2);
265  theESNav2.home();
266  for (int i = 0; i < 15; ++i) {
267  next = theESNav2.south();
268  //cout<<"south : "<<i<<" "<<next<<endl;
269  if (next != ESDetId(0)) {
270  collectedIds_.insert(next);
271  } else {
272  break;
273  }
274  }
275  }
276 }
void setHome(const T &startingPoint)
set the starting position
Definition: CaloNavigator.h:90
std::unique_ptr< CaloSubdetectorTopology > topology_p
void ReducedESRecHitCollectionProducer::produce ( edm::Event e,
const edm::EventSetup c 
)
override

Definition at line 99 of file ReducedESRecHitCollectionProducer.cc.

References collectedIds_, collectIds(), geometry_p, edm::Event::getByToken(), EcalPreshowerGeometry::getClosestCellInPlane(), hit::id, InputRecHitES_, InputSuperClusterEE_, interestingDetIdCollections_, interestingDetIdCollectionsNotToClean_, edm::HandleBase::isValid(), HLT_FULL_cff::labels, eostools::move(), convertSQLitetoXML_cfg::output, OutputLabelES_, point, edm::Event::put(), scEtThresh_, submitPVValidationJobs::t, and unpackBuffers-CaloStage2::token.

99  {
101  e.getByToken(InputRecHitES_, ESRecHits_);
102 
103  auto output = std::make_unique<EcalRecHitCollection>();
104 
105  edm::Handle<reco::SuperClusterCollection> pEndcapSuperClusters;
106  e.getByToken(InputSuperClusterEE_, pEndcapSuperClusters);
107  {
108  const reco::SuperClusterCollection* eeSuperClusters = pEndcapSuperClusters.product();
109 
110  for (reco::SuperClusterCollection::const_iterator isc = eeSuperClusters->begin(); isc != eeSuperClusters->end();
111  ++isc) {
112  if (isc->energy() < scEtThresh_)
113  continue;
114  if (fabs(isc->eta()) < 1.65 || fabs(isc->eta()) > 2.6)
115  continue;
116  //cout<<"SC energy : "<<isc->energy()<<" "<<isc->eta()<<endl;
117 
118  //Int_t nBC = 0;
119  reco::CaloCluster_iterator ibc = isc->clustersBegin();
120  for (; ibc != isc->clustersEnd(); ++ibc) {
121  //cout<<"BC : "<<nBC<<endl;
122 
123  const GlobalPoint point((*ibc)->x(), (*ibc)->y(), (*ibc)->z());
124 
127 
128  collectIds(esId1, esId2, 0);
129  collectIds(esId1, esId2, 1);
130  collectIds(esId1, esId2, -1);
131 
132  //nBC++;
133  }
134  }
135  }
136 
138  for (unsigned int t = 0; t < interestingDetIdCollections_.size(); ++t) {
140  if (!detId.isValid()) {
141  Labels labels;
142  labelsForToken(interestingDetIdCollections_[t], labels);
143  edm::LogError("MissingInput") << "no reason to skip detid from : (" << labels.module << ", "
144  << labels.productInstance << ", " << labels.process << ")" << std::endl;
145  continue;
146  }
147  collectedIds_.insert(detId->begin(), detId->end());
148  }
149 
150  //screw it, cant think of a better solution, not the best but lets run over all the rec hits, remove the ones failing cleaning
151  //and then merge in the collection not to be cleaned
152  //mainly as I suspect its more efficient to find an object in the DetIdSet rather than the rec-hit in the rec-hit collecition
153  //with only a det id
154  //if its a CPU issues then revisit
155  for (const auto& hit : *ESRecHits_) {
156  if (hit.recoFlag() == 1 || hit.recoFlag() == 14 ||
157  (hit.recoFlag() <= 10 && hit.recoFlag() >= 5)) { //right we might need to erase it from the collection
158  auto idIt = collectedIds_.find(hit.id());
159  if (idIt != collectedIds_.end())
160  collectedIds_.erase(idIt);
161  }
162  }
163 
164  for (const auto& token : interestingDetIdCollectionsNotToClean_) {
165  e.getByToken(token, detId);
166  if (!detId.isValid()) { //meh might as well keep the warning
167  Labels labels;
168  labelsForToken(token, labels);
169  edm::LogError("MissingInput") << "no reason to skip detid from : (" << labels.module << ", "
170  << labels.productInstance << ", " << labels.process << ")" << std::endl;
171  continue;
172  }
173  collectedIds_.insert(detId->begin(), detId->end());
174  }
175 
176  output->reserve(collectedIds_.size());
178  for (it = ESRecHits_->begin(); it != ESRecHits_->end(); ++it) {
179  if (collectedIds_.find(it->id()) != collectedIds_.end()) {
180  output->push_back(*it);
181  }
182  }
183  collectedIds_.clear();
184 
186 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
std::vector< edm::EDGetTokenT< DetIdCollection > > interestingDetIdCollectionsNotToClean_
std::vector< edm::EDGetTokenT< DetIdCollection > > interestingDetIdCollections_
std::vector< EcalRecHit >::const_iterator const_iterator
Log< level::Error, false > LogError
void collectIds(const ESDetId strip1, const ESDetId strip2, const int &row=0)
std::vector< SuperCluster > SuperClusterCollection
collection of SuperCluser objectr
def move
Definition: eostools.py:511
virtual DetId getClosestCellInPlane(const GlobalPoint &r, int plane) const
bool isValid() const
Definition: HandleBase.h:70
unsigned int id
edm::EDGetTokenT< ESRecHitCollection > InputRecHitES_
edm::EDGetTokenT< reco::SuperClusterCollection > InputSuperClusterEE_
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Definition: invegas.h:5

Member Data Documentation

edm::ESGetToken<CaloGeometry, CaloGeometryRecord> ReducedESRecHitCollectionProducer::caloGeometryToken_
private
std::set<DetId> ReducedESRecHitCollectionProducer::collectedIds_
private

Definition at line 53 of file ReducedESRecHitCollectionProducer.cc.

Referenced by collectIds(), and produce().

const EcalPreshowerGeometry* ReducedESRecHitCollectionProducer::geometry_p
private

Definition at line 40 of file ReducedESRecHitCollectionProducer.cc.

Referenced by beginRun(), and produce().

edm::EDGetTokenT<ESRecHitCollection> ReducedESRecHitCollectionProducer::InputRecHitES_
private
edm::EDGetTokenT<reco::SuperClusterCollection> ReducedESRecHitCollectionProducer::InputSuperClusterEE_
private
std::vector<edm::EDGetTokenT<DetIdCollection> > ReducedESRecHitCollectionProducer::interestingDetIdCollections_
private
std::vector<edm::EDGetTokenT<DetIdCollection> > ReducedESRecHitCollectionProducer::interestingDetIdCollectionsNotToClean_
private

Definition at line 51 of file ReducedESRecHitCollectionProducer.cc.

Referenced by produce().

std::string ReducedESRecHitCollectionProducer::OutputLabelES_
private
double ReducedESRecHitCollectionProducer::scEtThresh_
private
std::unique_ptr<CaloSubdetectorTopology> ReducedESRecHitCollectionProducer::topology_p
private

Definition at line 41 of file ReducedESRecHitCollectionProducer.cc.

Referenced by beginRun(), and collectIds().