89 const uint32_t recHitFlag = hit.
flags();
94 if (severityLevel == 0)
157 const edm::Handle<std::vector<reco::TrackExtrapolation> >& trackextrapcoll_h,
172 if (!objectvalidator.
validHit(*hit))
184 if (!objectvalidator.
validHit(*hit))
194 if (!objectvalidator.
validHit(*hit))
201 for (std::vector<reco::TrackExtrapolation>::const_iterator it = trackextrapcoll_h->begin();
202 it != trackextrapcoll_h->end();
217 if (std::fabs(
point.eta()) < 1.479) {
236 if (
id.ietaAbs() == 29)
242 std::set<PhysicsTower, towercmp>::iterator it = towers_.find(dummy);
244 if (it == towers_.end())
257 if (
id.ietaAbs() == 29)
263 std::set<PhysicsTower, towercmp>::iterator it = towers_.find(dummy);
265 if (it == towers_.end())
272 return findTower(tid);
277 return findTower(tid);
281 std::set<const PhysicsTower*>& neighbors)
const {
287 std::vector<CaloTowerDetId>
ids;
289 if (
id.ietaAbs() <= 20) {
302 if (
id.ietaAbs() <= 20) {
315 if (
id.ietaAbs() == 20 && (
id.
iphi() % 2) == 0)
321 if (
id.ietaAbs() == 21) {
324 }
else if (
id.ietaAbs() == 1) {
331 if (
id.ietaAbs() <= 19 || (
id.ietaAbs() == 20 && (
id.
iphi() % 2) == 0)) {
336 }
else if (
id.ietaAbs() >= 21) {
344 if (
id.ietaAbs() <= 19) {
349 }
else if (
id.ietaAbs() >= 21 || (
id.ietaAbs() == 20 && (
id.
iphi() % 2) == 1)) {
357 if (
id.ietaAbs() == 1) {
362 }
else if (
id.ietaAbs() <= 20) {
367 }
else if (
id.ietaAbs() >= 21) {
375 if (
id.ietaAbs() == 1) {
380 }
else if (
id.ietaAbs() <= 20) {
385 }
else if (
id.ietaAbs() >= 22) {
390 }
else if (
id.ietaAbs() == 21) {
401 for (std::vector<CaloTowerDetId>::const_iterator it = ids.begin(); it != ids.end(); ++it) {
404 neighbors.insert(twr);
411 findNeighbors(twr->
id, neighbors);
422 if (twr ==
nullptr) {
424 if (
id.ietaAbs() == 29)
429 towers_.insert(dummy);
438 if (twr ==
nullptr) {
440 if (
id.ietaAbs() == 29)
445 towers_.insert(dummy);
454 if (twr ==
nullptr) {
456 if (
id.ietaAbs() == 29)
460 dummy.
tracks.insert(track);
461 towers_.insert(dummy);
463 twr->
tracks.insert(track);
475 hitEnergy_ = hitEnergyTrkFid_ = -999.;
477 hcalEnergySameTowers_ = ecalEnergySameTowers_ = trackEnergySameTowers_ = -999.;
478 nHcalHitsSameTowers_ = nEcalHitsSameTowers_ = nTracksSameTowers_ = -999;
479 hcalEnergyNeighborTowers_ = ecalEnergyNeighborTowers_ = trackEnergyNeighborTowers_ = -999.;
480 nHcalHitsNeighborTowers_ = nEcalHitsNeighborTowers_ = nTracksNeighborTowers_ = -999;
484 if (hitEnergy_ < -900)
496 if (hitEnergyTrkFid_ < -900)
498 return hitEnergyTrkFid_;
502 if (hcalEnergySameTowers_ < -900)
503 calcHcalSameTowers_();
504 return hcalEnergySameTowers_;
508 if (nHcalHitsSameTowers_ < -900)
509 calcHcalSameTowers_();
510 return nHcalHitsSameTowers_;
514 if (ecalEnergySameTowers_ < -900)
515 calcEcalSameTowers_();
516 return ecalEnergySameTowers_;
520 if (nEcalHitsSameTowers_ < -900)
521 calcEcalSameTowers_();
522 return nEcalHitsSameTowers_;
526 if (trackEnergySameTowers_ < -900)
527 calcTracksSameTowers_();
528 return trackEnergySameTowers_;
532 if (nTracksSameTowers_ < -900)
533 calcTracksSameTowers_();
534 return nTracksSameTowers_;
540 for (std::set<const HBHERecHit*>::const_iterator it2 = it1->second->hcalhits.begin();
541 it2 != it1->second->hcalhits.end();
555 v.insert(it1->second->ecalhits.begin(), it1->second->ecalhits.end());
563 v.insert(it1->second->tracks.begin(), it1->second->tracks.end());
569 if (hcalEnergyNeighborTowers_ < -900)
570 calcHcalNeighborTowers_();
571 return hcalEnergyNeighborTowers_;
575 if (nHcalHitsNeighborTowers_ < -900)
576 calcHcalNeighborTowers_();
577 return nHcalHitsNeighborTowers_;
581 if (ecalEnergyNeighborTowers_ < -900)
582 calcEcalNeighborTowers_();
583 return ecalEnergyNeighborTowers_;
587 if (nEcalHitsNeighborTowers_ < -900)
588 calcEcalNeighborTowers_();
589 return nEcalHitsNeighborTowers_;
593 if (trackEnergyNeighborTowers_ < -900)
594 calcTracksNeighborTowers_();
595 return trackEnergyNeighborTowers_;
599 if (nTracksNeighborTowers_ < -900)
600 calcTracksNeighborTowers_();
601 return nTracksNeighborTowers_;
636 neighbors_.insert(neighbors.begin(), neighbors.end());
644 if (find != endNeighbors())
645 neighbors_.erase(find);
653 hitEnergyTrkFid_ = 0;
657 hitEnergyTrkFid_ += hit->
energy();
658 hitEnergy_ += hit->
energy();
665 hcalEnergySameTowers_ = 0;
666 nHcalHitsSameTowers_ = 0;
667 std::set<const HBHERecHit*>
v;
668 hcalHitsSameTowers(v);
669 for (std::set<const HBHERecHit*>::const_iterator it = v.begin(); it != v.end(); ++it) {
671 hcalEnergySameTowers_ += hit->
energy();
672 ++nHcalHitsSameTowers_;
678 ecalEnergySameTowers_ = 0;
679 nEcalHitsSameTowers_ = 0;
680 std::set<const EcalRecHit*>
v;
681 ecalHitsSameTowers(v);
682 for (std::set<const EcalRecHit*>::const_iterator it = v.begin(); it != v.end(); ++it) {
684 ecalEnergySameTowers_ += hit->
energy();
685 ++nEcalHitsSameTowers_;
691 trackEnergySameTowers_ = 0;
692 nTracksSameTowers_ = 0;
693 std::set<const reco::Track*>
v;
695 for (std::set<const reco::Track*>::const_iterator it = v.begin(); it != v.end(); ++it) {
697 trackEnergySameTowers_ += trk->
p();
698 ++nTracksSameTowers_;
704 hcalEnergyNeighborTowers_ = 0;
705 nHcalHitsNeighborTowers_ = 0;
706 std::set<const HBHERecHit*>
v;
707 hcalHitsNeighborTowers(v);
708 for (std::set<const HBHERecHit*>::const_iterator it = v.begin(); it != v.end(); ++it) {
710 hcalEnergyNeighborTowers_ += hit->
energy();
711 ++nHcalHitsNeighborTowers_;
717 ecalEnergyNeighborTowers_ = 0;
718 nEcalHitsNeighborTowers_ = 0;
719 std::set<const EcalRecHit*>
v;
720 ecalHitsNeighborTowers(v);
721 for (std::set<const EcalRecHit*>::const_iterator it = v.begin(); it != v.end(); ++it) {
723 ecalEnergyNeighborTowers_ += hit->
energy();
724 ++nEcalHitsNeighborTowers_;
730 trackEnergyNeighborTowers_ = 0;
731 nTracksNeighborTowers_ = 0;
732 std::set<const reco::Track*>
v;
733 tracksNeighborTowers(v);
734 for (std::set<const reco::Track*>::const_iterator it = v.begin(); it != v.end(); ++it) {
736 trackEnergyNeighborTowers_ += trk->
p();
737 ++nTracksNeighborTowers_;
762 std::set<const PhysicsTower*> neighbors;
767 rbxs_[rbxidnum].insert(hit, tower, neighbors);
771 hpds_[hpdidnum].insert(hit, tower, neighbors);
774 std::vector<const HBHERecHit*> hpdneighbors;
777 if (hpdneighbors.size() == 1) {
778 std::vector<const HBHERecHit*> hpdneighborsneighbors;
781 if (hpdneighborsneighbors.size() == 1 && hpdneighborsneighbors[0] == hit &&
782 hit->
energy() > hpdneighbors[0]->energy()) {
788 std::set<const PhysicsTower*> neighbors2;
792 dihit.
insert(hit, tower, neighbors);
793 dihit.
insert(hpdneighbors[0], tower2, neighbors2);
796 }
else if (hpdneighbors.empty()) {
799 monohit.
insert(hit, tower, neighbors);
808 for (std::map<int, HBHEHitMap>::const_iterator it =
rbxs_.begin(); it !=
rbxs_.end(); ++it) {
817 for (std::map<int, HBHEHitMap>::const_iterator it =
hpds_.begin(); it !=
hpds_.end(); ++it) {
826 for (std::vector<HBHEHitMap>::const_iterator it =
dihits_.begin(); it !=
dihits_.end(); ++it) {
827 if (it->hitEnergy() >
energy)
834 for (std::vector<HBHEHitMap>::const_iterator it =
monohits_.begin(); it !=
monohits_.end(); ++it) {
835 if (it->hitEnergy() >
energy)
842 std::vector<const HBHERecHit*>& neighbors,
844 std::set<const PhysicsTower*>
temp;
851 for (std::set<const PhysicsTower*>::const_iterator it1 = temp.begin(); it1 != temp.end(); ++it1) {
852 for (std::set<const HBHERecHit*>::const_iterator it2 = (*it1)->hcalhits.begin(); it2 != (*it1)->hcalhits.end();
856 neighbors.push_back(hit2);
constexpr float energy() const
void getHPDNeighbors(const HBHERecHit *hit, std::vector< const HBHERecHit * > &neighbors, const PhysicsTowerOrganizer &pto)
double p() const
momentum vector magnitude
double hcalEnergySameTowers(void) const
std::set< const HBHERecHit * > hcalhits
T getParameter(std::string const &) const
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
void tracksNeighborTowers(std::set< const reco::Track * > &v) const
int nHcalHitsSameTowers(void) const
HcalSubdetector subdet() const
get the subdetector
EcalSeverityLevel::SeverityLevel severityLevel(const DetId &id) const
Evaluate status from id use channelStatus from DB.
double MinValidTrackPtBarrel_
std::vector< typename T::const_iterator > findHit(edm::Handle< T > &hits, DetId thisDet, bool debug=false)
std::map< const HBHERecHit *, const PhysicsTower * >::const_iterator hitmap_const_iterator
int ietaAbs() const
get the absolute value of the tower ieta
std::vector< HBHEHitMap > dihits_
constexpr const DetId & detid() const
void getHPDs(std::vector< HBHEHitMap > &v, double energy) const
HBHEHitMapOrganizer(const edm::Handle< HBHERecHitCollection > &hbhehitcoll_h, const ObjectValidatorAbs &objvalidator, const PhysicsTowerOrganizer &pto, const HcalFrontEndMap *hfemap)
HcalDetId id() const
get the id
uint32_t auxPhase1() const
const int lookupRMIndex(DetId fId) const
const DetId & detid() const
std::vector< T >::const_iterator const_iterator
virtual bool validTrack(const reco::Track &) const =0
int nEcalHitsNeighborTowers(void) const
const Item * getValues(DetId fId, bool throwOnFail=true) const
void getRBXs(std::vector< HBHEHitMap > &v, double energy) const
const Vector & momentum() const
track momentum vector
ObjectValidator(const edm::ParameterSet &)
void ecalHitsNeighborTowers(std::set< const EcalRecHit * > &v) const
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
bool UseAllCombinedRechits_
void getMonoHits(std::vector< HBHEHitMap > &v, double energy) const
void ecalHitsSameTowers(std::set< const EcalRecHit * > &v) const
PhysicsTowerOrganizer(const edm::Event &iEvent, const edm::EventSetup &evSetup, const edm::Handle< HBHERecHitCollection > &hbhehitcoll_h, const edm::Handle< EcalRecHitCollection > &ebhitcoll_h, const edm::Handle< EcalRecHitCollection > &eehitcoll_h, const edm::Handle< std::vector< reco::TrackExtrapolation > > &trackextrapcoll_h, const ObjectValidatorAbs &objectvalidator, const CaloTowerConstituentsMap &ctcm)
void calcTracksSameTowers_(void) const
uint32_t HcalAcceptSeverityLevel_
double ecalEnergyNeighborTowers(void) const
void insert(const HBHERecHit *hit, const PhysicsTower *twr, std::set< const PhysicsTower * > &neighbors)
const PhysicsTower * findTower(const CaloTowerDetId &id) const
void tracksSameTowers(std::set< const reco::Track * > &v) const
const int lookupRBXIndex(DetId fId) const
int nHcalHitsNeighborTowers(void) const
CaloTowerDetId towerOf(const DetId &id) const
Get the tower id for this det id (or null if not known)
void calcHcalSameTowers_(void) const
std::map< int, HBHEHitMap > rbxs_
bool UseHcalRecoveredHits_
double pt() const
track transverse momentum
const EcalChannelStatus * theEcalChStatus_
virtual bool validHit(const HBHERecHit &) const =0
bool recoveredRecHit(const DetId &myid, const uint32_t &myflag) const
const EcalRecHitCollection * theEERecHitCollection_
int ieta() const
get the cell ieta
double hcalEnergyNeighborTowers(void) const
int iphi() const
get the tower iphi
double trackEnergySameTowers(void) const
void insert_(CaloTowerDetId &id, const HBHERecHit *hit)
bool validTrack(const reco::Track &) const override
unsigned short numberOfValidHits() const
number of valid hits found
const EcalRecHitCollection * theEBRecHitCollection_
std::set< const PhysicsTower * >::const_iterator neighbor_const_iterator
constexpr bool getBit(const uint32_t u, const unsigned bitnum)
std::map< int, HBHEHitMap > hpds_
~ObjectValidator() override
int ietaAbs() const
get the absolute value of the cell ieta
const_iterator end() const
virtual DetId getClosestCell(const GlobalPoint &r) const
int iphi() const
get the cell iphi
double hitEnergy(void) const
void calcEcalSameTowers_(void) const
DetId id() const
get the id
void calcTracksNeighborTowers_(void) const
void calcHcalNeighborTowers_(void) const
int zside() const
get the z-side of the tower (1/-1)
const EcalSeverityLevelAlgo * theEcalSevLvlAlgo_
int getSeverityLevel(const DetId &myid, const uint32_t &myflag, const uint32_t &mystatus) const
std::set< const EcalRecHit * > ecalhits
uint32_t EcalAcceptSeverityLevel_
double trackEnergyNeighborTowers(void) const
double hitEnergyTrackFiducial(void) const
void calcHits_(void) const
std::set< const reco::Track * > tracks
void calcEcalNeighborTowers_(void) const
static const unsigned OFF_COMBINED
std::vector< HBHEHitMap > monohits_
bool validHit(const HBHERecHit &) const override
int nTracksSameTowers(void) const
void getDiHits(std::vector< HBHEHitMap > &v, double energy) const
double ecalEnergySameTowers(void) const
const HcalChannelQuality * theHcalChStatus_
int nEcalHitsSameTowers(void) const
int nTracksNeighborTowers(void) const
uint32_t getValue() const
const HcalFrontEndMap * hfemap_
void hcalHitsSameTowers(std::set< const HBHERecHit * > &v) const
const HcalSeverityLevelComputer * theHcalSevLvlComputer_
T const * product() const
constexpr uint32_t flags() const
void byTowers(std::vector< twrinfo > &v) const
void findNeighbors(const CaloTowerDetId &id, std::set< const PhysicsTower * > &neighbors) const
*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
const_iterator begin() const
bool UseEcalRecoveredHits_
void hcalHitsNeighborTowers(std::set< const HBHERecHit * > &v) const