176 int dPhiToMETfunc(
const std::vector<reco::Jet> &jetTVec,
const double &dPhiCutVal, std::vector<reco::Jet> &closeToMETjetsVec);
200 if(
isdata )
std::cout<<
"\nInput dataset is DATA"<<std::endl<<std::endl;
201 else std::cout<<
"\nInput dataset is MC"<<std::endl<<std::endl;
223 ,
jetSelCuts_ (iConfig.getParameter<
std::vector<double> >(
"jetSelCuts"))
236 ,
isProd_ (iConfig.getUntrackedParameter<
bool>(
"isProd"))
239 ,
doCracks_ (iConfig.getUntrackedParameter<
bool>(
"doCracks"))
247 produces<int> (
"deadCellStatus"); produces<int> (
"boundaryStatus");
252 h1_dummy =
new TH1F(
"dummy",
"dummy", 500, 0, 500);
276 if( !
ecalStatus.isValid() )
throw "Failed to get ECAL channel status!";
277 if( !
geometry.isValid() )
throw "Failed to get the geometry!";
294 std::vector<reco::Jet> seledJets;
302 if( seledJets.empty() )
return pass;
306 std::vector<reco::Jet> closeToMETjetsVec;
308 int dPhiToMETstatus =
dPhiToMETfunc(seledJets, dPhiToMET, closeToMETjetsVec);
316 printf(
"\nrun : %8u event : %12llu ls : %8u dPhiToMETstatus : %d deadCellStatus : %d boundaryStatus : %d\n",
run,
event,
ls, dPhiToMETstatus, deadCellStatus, boundaryStatus);
317 printf(
"met : %6.2f metphi : % 6.3f dPhiToMET : %5.3f dRtoDeadCell : %5.3f\n", (*
met)[0].
pt(), (*
met)[0].
phi(), dPhiToMET, dRtoDeadCell);
324 iEvent.
put(std::make_unique<int>(deadCellStatus),
"deadCellStatus");
325 iEvent.
put(std::make_unique<int>(boundaryStatus),
"boundaryStatus");
327 if( deadCellStatus || (
doCracks_ && boundaryStatus) ) pass =
false;
329 iEvent.
put(std::make_unique<bool>(pass));
375 for(
unsigned int ij=0; ij<jetTVec.size(); ij++){
377 double recoJetEta = jetTVec[ij].eta();
382 if( isClose/
pow(10, cntOrder10) >=3 ) cntOrder10 = isClose/10 + 1;
393 closeToMETjetsVec.clear();
395 double minDphi = 999.0;
397 for(
unsigned int ii=0;
ii<jetTVec.size();
ii++){
402 if( deltaPhi > dPhiCutVal )
continue;
404 closeToMETjetsVec.push_back(jetTVec[
ii]);
406 if( deltaPhi < minDphi ){
416 return (
int)closeToMETjetsVec.size();
424 for(
unsigned int ii=0;
ii<jetTVec.size();
ii++){
428 std::map<double, DetId>
dummy;
431 if( isPerJetClose ){ isClose ++; }
443 deltaRdetIdMap.clear();
445 double min_dist = 999;
448 std::map<DetId, std::vector<int> >::iterator bitItor;
451 DetId maskedDetId = bitItor->first;
453 int status = bitItor->second.back();
455 if( chnStatus >0 && status != chnStatus )
continue;
456 if( chnStatus <0 && status <
abs(chnStatus) )
continue;
461 double eta = (valItor->second)[0],
phi = (valItor->second)[1];
465 if( min_dist > dist ){ min_dist = dist; min_detId = maskedDetId; }
468 if( min_dist > deltaRCut && deltaRCut >0 )
return 0;
470 deltaRdetIdMap.insert( std::make_pair(min_dist, min_detId) );
481 for(
int ieta=-85; ieta<=85; ieta++ ){
482 for(
int iphi=0; iphi<=360; iphi++ ){
488 int status = ( chit !=
ecalStatus->end() ) ? chit->getStatusCode() & 0x1F : -1;
492 double eta = cellGeom->getPosition ().eta ();
493 double phi = cellGeom->getPosition ().phi ();
494 double theta = cellGeom->getPosition().theta();
497 std::vector<double> valVec; std::vector<int> bitVec;
498 valVec.push_back(eta); valVec.push_back(phi); valVec.push_back(theta);
499 bitVec.push_back(1); bitVec.push_back(ieta); bitVec.push_back(iphi); bitVec.push_back(status);
507 for(
int ix=0; ix<=100; ix++ ){
508 for(
int iy=0; iy<=100; iy++ ){
509 for(
int iz=-1; iz<=1; iz++ ){
515 int status = ( chit !=
ecalStatus->end() ) ? chit->getStatusCode() & 0x1F : -1;
519 double eta = cellGeom->getPosition ().eta () ;
520 double phi = cellGeom->getPosition ().phi () ;
521 double theta = cellGeom->getPosition().theta();
524 std::vector<double> valVec; std::vector<int> bitVec;
525 valVec.push_back(eta); valVec.push_back(phi); valVec.push_back(theta);
526 bitVec.push_back(2); bitVec.push_back(ix); bitVec.push_back(iy); bitVec.push_back(iz); bitVec.push_back(status);
535 std::map<DetId, std::vector<int> >::iterator bitItor;
537 const DetId id = bitItor->first;
constexpr double deltaPhi(double phi1, double phi2)
EventNumber_t event() const
EcalDeadCellDeltaRFilter(const edm::ParameterSet &)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
double eta() const final
momentum pseudorapidity
edm::EDGetTokenT< edm::View< reco::Jet > > jetToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const std::vector< double > cracksHBHEdef_
Base class for all types of Jets.
int getChannelStatusMaps()
std::map< DetId, EcalTrigTowerDetId > EcalAllDeadChannelsTTMap
Geom::Theta< T > theta() const
unsigned long long EventNumber_t
edm::LuminosityBlockNumber_t luminosityBlock() const
const int chnStatusToBeEvaluated_
int dPhiToMETfunc(const std::vector< reco::Jet > &jetTVec, const double &dPhiCutVal, std::vector< reco::Jet > &closeToMETjetsVec)
unsigned int LuminosityBlockNumber_t
void beginRun(const edm::Run &, const edm::EventSetup &) override
EcalTrigTowerDetId towerOf(const DetId &id) const
Get the tower id for this det id (or null if not known)
static bool validDetId(int i, int j)
check if a valid index combination
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
bool filter(edm::Event &, const edm::EventSetup &) override
int dRtoMaskedChnsEvtFilterFunc(const std::vector< reco::Jet > &jetTVec, const int &chnStatus, const double &dRCutVal)
int isCloseToBadEcalChannel(const reco::Jet &jet, const double &deltaRCut, const int &chnStatus, std::map< double, DetId > &deltaRdetIdMap)
#define DEFINE_FWK_MODULE(type)
void loadMET(const edm::Event &iEvent, const edm::EventSetup &iSetup)
edm::Handle< edm::View< reco::MET > > met
edm::LuminosityBlockNumber_t ls
void loadEventInfo(const edm::Event &iEvent, const edm::EventSetup &iSetup)
const std::vector< double > cracksHEHFdef_
Abs< T >::type abs(const T &t)
edm::EDGetTokenT< edm::View< reco::MET > > metToken_
void endRun(const edm::Run &, const edm::EventSetup &) override
virtual void envSet(const edm::EventSetup &)
edm::ESHandle< EcalTrigTowerConstituentsMap > ttMap_
edm::ESHandle< CaloGeometry > geometry
static const int ETAPHIMODE
std::map< DetId, std::vector< double > > EcalAllDeadChannelsValMap
const bool printSkimInfo_
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
int etaToBoundary(const std::vector< reco::Jet > &jetTVec)
virtual std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
static bool validDetId(int crystal_ix, int crystal_iy, int iz)
std::vector< Item >::const_iterator const_iterator
void beginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) override
void loadJets(const edm::Event &iEvent, const edm::EventSetup &iSetup)
const std::vector< double > jetSelCuts_
~EcalDeadCellDeltaRFilter() override
std::map< DetId, std::vector< int > > EcalAllDeadChannelsBitMap
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
edm::ESHandle< EcalChannelStatus > ecalStatus
const bool makeProfileRoot_
edm::Handle< edm::View< reco::Jet > > jets
const std::vector< double > EcalDeadCellDeltaRFilterInput_
const int maskedEcalChannelStatusThreshold_
edm::ESHandle< HcalChannelQuality > hcalStatus
double phi() const final
momentum azimuthal angle
const std::string profileRootName_
Power< A, B >::type pow(const A &a, const B &b)