CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
EEBadScFilter Class Reference
Inheritance diagram for EEBadScFilter:
edm::global::EDFilter<> edm::global::EDFilterBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 EEBadScFilter (const edm::ParameterSet &iConfig)
 
 ~EEBadScFilter () override
 
- Public Member Functions inherited from edm::global::EDFilter<>
 EDFilter ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDFilterBase
 EDFilterBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDFilterBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

bool filter (edm::StreamID, edm::Event &iEvent, const edm::EventSetup &iSetup) const override
 
virtual void scan5x5 (const DetId &det, const edm::Handle< EcalRecHitCollection > &hits, const edm::ESHandle< CaloTopology > &caloTopo, const edm::ESHandle< CaloGeometry > &geometry, int &nHits, float &totEt) const
 

Private Attributes

const std::vector< int > badsc_
 
const bool debug_
 
const edm::EDGetTokenT< EcalRecHitCollectioneeRHSrcToken_
 
const double Emin_
 
const double EtminSC_
 
const int nBadHitsSC_
 
const int side_
 
const bool taggingMode_
 

Additional Inherited Members

- Public Types inherited from edm::global::EDFilterBase
typedef EDFilterBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::global::EDFilterBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 36 of file EEBadScFilter.cc.

Constructor & Destructor Documentation

EEBadScFilter::EEBadScFilter ( const edm::ParameterSet iConfig)
explicit

Definition at line 71 of file EEBadScFilter.cc.

72  : eeRHSrcToken_ (consumes<EcalRecHitCollection>(iConfig.getParameter<edm::InputTag>("EERecHitSource")))
73  , Emin_ (iConfig.getParameter<double>("EminHit"))
74  , EtminSC_ (iConfig.getParameter<double>("EtminSC"))
75  , side_ (iConfig.getParameter<int>("SCsize"))
76  , nBadHitsSC_ (iConfig.getParameter<int>("nBadHitsSC"))
77  , badsc_ (iConfig.getParameter<std::vector<int> >("badscEE"))
78  , taggingMode_ (iConfig.getParameter<bool>("taggingMode"))
79  , debug_ (iConfig.getParameter<bool>("debug"))
80 {
81  produces<bool>();
82 }
const edm::EDGetTokenT< EcalRecHitCollection > eeRHSrcToken_
T getParameter(std::string const &) const
const double Emin_
const std::vector< int > badsc_
const bool debug_
const int nBadHitsSC_
const bool taggingMode_
const int side_
const double EtminSC_
EEBadScFilter::~EEBadScFilter ( )
inlineoverride

Definition at line 41 of file EEBadScFilter.cc.

References filter(), hfClusterShapes_cfi::hits, iEvent, and scan5x5().

41 {}

Member Function Documentation

bool EEBadScFilter::filter ( edm::StreamID  ,
edm::Event iEvent,
const edm::EventSetup iSetup 
) const
overrideprivate

Definition at line 136 of file EEBadScFilter.cc.

References badsc_, debug_, DEFINE_FWK_MODULE, eeRHSrcToken_, EtminSC_, edm::EventSetup::get(), edm::Event::getByToken(), createfilelist::int, nBadHitsSC_, nhits, edm::Event::put(), scan5x5(), and taggingMode_.

Referenced by ~EEBadScFilter().

136  {
137 
138 
139  // load required collections
140 
141 
142  // EE rechit collection
144  iEvent.getByToken(eeRHSrcToken_, eeRHs);
145 
146  // Calo Geometry - needed for computing E_t
148  iSetup.get<CaloGeometryRecord>().get(pG);
149 
150  // Calo Toplology - needed for navigating the 5x5 xtal array around the centre of a SC
151  edm::ESHandle<CaloTopology> pTopology;
152  iSetup.get<CaloTopologyRecord>().get(pTopology);
153 
154  // by default the event is OK
155  bool pass = true;
156 
157 
158  // set discriminating variables to zero
159  int nhits=0;
160  float totEt=0.0;
161 
162 
163  // define detid variables and ix,iy,iz coordinates
164 
165  EEDetId scdet;
166  DetId det;
167 
168  int ix,iy,iz;
169 
170  // loop over the list of bad SCs (defined in the python file)
171 
172  for (std::vector<int>::const_iterator scit = badsc_.begin(); scit != badsc_.end(); ++ scit) {
173 
174 
175 
176  // unpack the SC coordinates from the python file into ix,iy,iz
177 
178  iz=int(*scit/1000000);
179  iy=*scit%100*iz;
180  ix=int((*scit-iy-1000000*iz)/1000)*iz;
181 
182  // make the DetId from these coordinates
183  scdet=EEDetId(ix,iy,iz);
184  det=scdet;
185 
186  // loop over the 5x5 SC centered on this DetId and fill discriminating variables
187 
188  scan5x5(det,eeRHs,pTopology,pG,nhits,totEt);
189 
190  // print some debug info
191 
192  if (debug_) {
193  edm::LogInfo("EEBadScFilter") << "SCID=" << *scit;
194  edm::LogInfo("EEBadScFilter") << "ix=" << ix << " iy=" << iy << " iz=" << iz;
195  edm::LogInfo("EEBadScFilter") << "Et(5x5)=" << totEt << " nbadhits=" << nhits;
196  }
197 
198 
199  // if 5x5 transverse energy is above threshold and number of bad hits above threshold
200  // event is bad
201 
202  if (totEt>EtminSC_ && nhits>=nBadHitsSC_) pass=false;
203 
204 
205  }
206 
207  // print the decision if event is bad
208  if (pass==false && debug_) edm::LogInfo("EEBadScFilter") << "REJECT EVENT!!!";
209 
210 
211  iEvent.put(std::make_unique<bool>(pass));
212 
213  // return the decision
214 
215  return taggingMode_ || pass;
216 }
const edm::EDGetTokenT< EcalRecHitCollection > eeRHSrcToken_
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
virtual void scan5x5(const DetId &det, const edm::Handle< EcalRecHitCollection > &hits, const edm::ESHandle< CaloTopology > &caloTopo, const edm::ESHandle< CaloGeometry > &geometry, int &nHits, float &totEt) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
const std::vector< int > badsc_
const bool debug_
const int nBadHitsSC_
const bool taggingMode_
Definition: DetId.h:18
T get() const
Definition: EventSetup.h:71
const double EtminSC_
void EEBadScFilter::scan5x5 ( const DetId det,
const edm::Handle< EcalRecHitCollection > &  hits,
const edm::ESHandle< CaloTopology > &  caloTopo,
const edm::ESHandle< CaloGeometry > &  geometry,
int &  nHits,
float &  totEt 
) const
privatevirtual

Definition at line 85 of file EEBadScFilter.cc.

References EcalRecHit::checkFlag(), Emin_, edm::SortedCollection< T, SORT >::end(), EcalRecHit::energy(), edm::SortedCollection< T, SORT >::find(), CaloTopology::getSubdetectorTopology(), CaloNavigator< T, TOPO >::home(), mps_fire::i, EcalRecHit::kGood, CaloNavigator< T, TOPO >::offsetBy(), AlCaHLTBitMon_ParallelJobs::p, edm::ESHandle< T >::product(), and side_.

Referenced by filter(), and ~EEBadScFilter().

86 {
87 
88  // function to compute: total transverse energy in a given supercrystal (totEt)
89  // number of hits with E>Emin_ and rechit flag != kGood (nHits)
90  // bad events have large totEt and many high energy hits with rechit flags !kGood
91 
92  nHits = 0;
93  totEt = 0;
94 
95  // navigator to define a 5x5 region around the input DetId
96 
98  const CaloGeometry* geo = geometry.product();
99 
100  // loop over a 5x5 array centered on the input DetId
101 
102  for(int j=side_/2; j>=-side_/2; --j)
103  {
104  for(int i=-side_/2; i<=side_/2; ++i)
105  {
106  cursor.home();
107  cursor.offsetBy(i,j);
108  if(hits->find(*cursor)!=hits->end()) // if hit exists in the rechit collection
109  {
110  EcalRecHit tmpHit = *hits->find(*cursor); // get rechit with detID at cursor
111 
112 
113  const GlobalPoint p ( geo->getPosition(*cursor) ) ; // calculate Et of the rechit
114  TVector3 hitPos(p.x(),p.y(),p.z());
115  hitPos *= 1.0/hitPos.Mag();
116  hitPos *= tmpHit.energy();
117  float rechitEt = hitPos.Pt();
118 
119  //--- add rechit E_t to the total for this supercrystal
120  totEt += rechitEt;
121 
122  // increment nHits if E>Emin and rechit flag is not kGood
123  if(tmpHit.energy()>Emin_ && !tmpHit.checkFlag(EcalRecHit::kGood))nHits++;
124 
125  }
126  }
127  }
128 
129 
130 }
const double Emin_
T offsetBy(int deltaX, int deltaY) const
Free movement of arbitray steps.
Definition: CaloNavigator.h:80
bool checkFlag(int flag) const
check if the flag is true
Definition: EcalRecHit.h:187
const int side_
float energy() const
Definition: EcalRecHit.h:68
const_iterator end() const
void home() const
move the navigator back to the starting point
const CaloSubdetectorTopology * getSubdetectorTopology(const DetId &id) const
access the subdetector Topology for the given subdetector directly
Definition: CaloTopology.cc:20
iterator find(key_type k)
T const * product() const
Definition: ESHandle.h:86

Member Data Documentation

const std::vector<int> EEBadScFilter::badsc_
private

Definition at line 63 of file EEBadScFilter.cc.

Referenced by filter().

const bool EEBadScFilter::debug_
private

Definition at line 66 of file EEBadScFilter.cc.

Referenced by filter().

const edm::EDGetTokenT<EcalRecHitCollection> EEBadScFilter::eeRHSrcToken_
private

Definition at line 56 of file EEBadScFilter.cc.

Referenced by filter().

const double EEBadScFilter::Emin_
private

Definition at line 59 of file EEBadScFilter.cc.

Referenced by scan5x5().

const double EEBadScFilter::EtminSC_
private

Definition at line 60 of file EEBadScFilter.cc.

Referenced by filter().

const int EEBadScFilter::nBadHitsSC_
private

Definition at line 62 of file EEBadScFilter.cc.

Referenced by filter().

const int EEBadScFilter::side_
private

Definition at line 61 of file EEBadScFilter.cc.

Referenced by scan5x5().

const bool EEBadScFilter::taggingMode_
private

Definition at line 65 of file EEBadScFilter.cc.

Referenced by filter().