CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Attributes
PreshowerPhiClusterAlgo Class Reference

#include <PreshowerPhiClusterAlgo.h>

Public Types

typedef std::set< DetIdHitsID
 
typedef math::XYZPoint Point
 
typedef std::map< DetId, EcalRecHitRecHitsMap
 

Public Member Functions

bool goodStrip (RecHitsMap::iterator candidate_it)
 
reco::PreshowerCluster makeOneCluster (ESDetId strip, HitsID *used_strips, RecHitsMap *rechits_map, const CaloSubdetectorGeometry *geometry_p, double deltaEta, double minDeltaPhi, double maxDeltaPhi)
 
 PreshowerPhiClusterAlgo ()
 
 PreshowerPhiClusterAlgo (float stripEnergyCut)
 
 ~PreshowerPhiClusterAlgo ()
 

Private Attributes

float esStripEnergyCut_
 
RecHitsMaprechits_map
 
std::vector< ESDetIdroad_2d
 
HitsIDused_s
 

Detailed Description

Definition at line 17 of file PreshowerPhiClusterAlgo.h.

Member Typedef Documentation

◆ HitsID

Definition at line 22 of file PreshowerPhiClusterAlgo.h.

◆ Point

Definition at line 19 of file PreshowerPhiClusterAlgo.h.

◆ RecHitsMap

Definition at line 21 of file PreshowerPhiClusterAlgo.h.

Constructor & Destructor Documentation

◆ PreshowerPhiClusterAlgo() [1/2]

PreshowerPhiClusterAlgo::PreshowerPhiClusterAlgo ( )
inline

Definition at line 24 of file PreshowerPhiClusterAlgo.h.

◆ PreshowerPhiClusterAlgo() [2/2]

PreshowerPhiClusterAlgo::PreshowerPhiClusterAlgo ( float  stripEnergyCut)
inline

Definition at line 26 of file PreshowerPhiClusterAlgo.h.

26 : esStripEnergyCut_(stripEnergyCut) {}

◆ ~PreshowerPhiClusterAlgo()

PreshowerPhiClusterAlgo::~PreshowerPhiClusterAlgo ( )
inline

Definition at line 28 of file PreshowerPhiClusterAlgo.h.

28 {};

Member Function Documentation

◆ goodStrip()

bool PreshowerPhiClusterAlgo::goodStrip ( RecHitsMap::iterator  candidate_it)

Definition at line 99 of file PreshowerPhiClusterAlgo.cc.

References esStripEnergyCut_, LogTrace, rechits_map, and used_s.

Referenced by makeOneCluster().

99  {
100  if (used_s->find(candidate_it->first) != used_s->end())
101  LogTrace("PreShowerPhiClusterAlgo") << " This strip is in use";
102  if (candidate_it == rechits_map->end())
103  LogTrace("PreShowerPhiClusterAlgo") << " No such a strip in rechits_map";
104  if (candidate_it->second.energy() <= esStripEnergyCut_)
105  LogTrace("PreShowerPhiClusterAlgo") << "Strip energy" << candidate_it->second.energy() << "is below threshold";
106 
107  // crystal should not be included...
108  if ((used_s->find(candidate_it->first) != used_s->end()) || // ...if it already belongs to a cluster
109  (candidate_it == rechits_map->end()) || // ...if it corresponds to a hit
110  (candidate_it->second.energy() <= esStripEnergyCut_)) // ...if it has a negative or zero energy
111  {
112  return false;
113  }
114  return true;
115 }
#define LogTrace(id)

◆ makeOneCluster()

reco::PreshowerCluster PreshowerPhiClusterAlgo::makeOneCluster ( ESDetId  strip,
HitsID used_strips,
RecHitsMap rechits_map,
const CaloSubdetectorGeometry geometry_p,
double  deltaEta,
double  minDeltaPhi,
double  maxDeltaPhi 
)

Definition at line 15 of file PreshowerPhiClusterAlgo.cc.

References edm::SortedCollection< T, SORT >::begin(), spr::deltaEta, reco::deltaPhi(), edm::SortedCollection< T, SORT >::end(), PV3DBase< T, PVType, FrameType >::eta(), CaloSubdetectorGeometry::getGeometry(), goodStrip(), CommPDSkim_cfg::maxDeltaPhi, VBFGenJetFilter_cfi::minDeltaPhi, PV3DBase< T, PVType, FrameType >::phi(), ESDetId::plane(), position, edm::SortedCollection< T, SORT >::push_back(), rechits_map, nano_mu_digi_cff::strip, and used_s.

21  {
22  rechits_map = the_rechitsMap_p;
23  used_s = used_strips;
24 
25  int plane = strip.plane();
26 
27  // create null-cluster
28  std::vector<std::pair<DetId, float> > dummy;
29  Point posi(0, 0, 0);
30  reco::PreshowerCluster nullcluster = reco::PreshowerCluster(0., posi, dummy, plane);
31  if (strip == ESDetId(0))
32  return nullcluster; // works in case of no intersected strip found (e.g. in the Barrel)
33 
34  auto refCell = geometry_p->getGeometry(strip);
35  const GlobalPoint& refpos = refCell->getPosition();
36  double refEta = refpos.eta();
37  double refPhi = refpos.phi();
38 
39  // Collection of cluster strips
40  EcalRecHitCollection clusterRecHits;
41 
42  double x_pos = 0;
43  double y_pos = 0;
44  double z_pos = 0;
45 
46  RecHitsMap::iterator strip_it;
47  for (strip_it = rechits_map->begin(); strip_it != rechits_map->end(); ++strip_it) {
48  if (!goodStrip(strip_it))
49  continue;
50 
51  ESDetId mystrip = (strip_it->first == DetId(0)) ? ESDetId(0) : ESDetId(strip_it->first);
52  if (mystrip.plane() != plane)
53  continue;
54 
55  auto thisCell = geometry_p->getGeometry(strip_it->first);
56  const GlobalPoint& position = thisCell->getPosition();
57 
58  if (fabs(position.eta() - refEta) < deltaEta) {
59  //std::cout<<"all strips : "<<mystrip.plane()<<" "<<position.phi()<<" "<<reco::deltaPhi(position.phi(), refPhi)<<std::endl;
60 
61  if (reco::deltaPhi(position.phi(), refPhi) > 0 && reco::deltaPhi(position.phi(), refPhi) > maxDeltaPhi)
62  continue;
63  if (reco::deltaPhi(position.phi(), refPhi) < 0 && reco::deltaPhi(position.phi(), refPhi) < minDeltaPhi)
64  continue;
65 
66  //std::cout<<mystrip.zside()<<" "<<mystrip.plane()<<" "<<mystrip.six()<<" "<<mystrip.siy()<<" "<<mystrip.strip()<<" "<<position.eta()<<" "<<position.phi()<<" "<<strip_it->second.energy()<<" "<<strip_it->second.recoFlag()<<" "<<refEta<<" "<<refPhi<<" "<<reco::deltaPhi(position.phi(), refPhi)<<std::endl;
67 
68  clusterRecHits.push_back(strip_it->second);
69  used_s->insert(strip_it->first);
70 
71  x_pos += strip_it->second.energy() * position.x();
72  y_pos += strip_it->second.energy() * position.y();
73  z_pos += strip_it->second.energy() * position.z();
74  }
75  }
76 
78  double Eclust = 0;
79 
80  std::vector<std::pair<DetId, float> > usedHits;
81  for (it = clusterRecHits.begin(); it != clusterRecHits.end(); it++) {
82  Eclust += it->energy();
83  usedHits.push_back(std::pair<DetId, float>(it->id(), 1.));
84  }
85 
86  if (Eclust > 0.) {
87  x_pos /= Eclust;
88  y_pos /= Eclust;
89  z_pos /= Eclust;
90  }
91  Point pos(x_pos, y_pos, z_pos);
92 
93  reco::PreshowerCluster cluster = reco::PreshowerCluster(Eclust, pos, usedHits, plane);
94 
95  return cluster;
96 }
constexpr double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:26
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
T eta() const
Definition: PV3DBase.h:73
void push_back(T const &t)
static const double deltaEta
Definition: CaloConstants.h:8
bool goodStrip(RecHitsMap::iterator candidate_it)
int plane() const
Definition: ESDetId.h:41
const_iterator begin() const
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.
std::vector< EcalRecHit >::iterator iterator
const_iterator end() const
Definition: DetId.h:17
Structure Point Contains parameters of Gaussian fits to DMRs.
static int position[264][3]
Definition: ReadPGInfo.cc:289

Member Data Documentation

◆ esStripEnergyCut_

float PreshowerPhiClusterAlgo::esStripEnergyCut_
private

Definition at line 41 of file PreshowerPhiClusterAlgo.h.

Referenced by goodStrip().

◆ rechits_map

RecHitsMap* PreshowerPhiClusterAlgo::rechits_map
private

Definition at line 46 of file PreshowerPhiClusterAlgo.h.

Referenced by goodStrip(), and makeOneCluster().

◆ road_2d

std::vector<ESDetId> PreshowerPhiClusterAlgo::road_2d
private

Definition at line 43 of file PreshowerPhiClusterAlgo.h.

◆ used_s

HitsID* PreshowerPhiClusterAlgo::used_s
private

Definition at line 49 of file PreshowerPhiClusterAlgo.h.

Referenced by goodStrip(), and makeOneCluster().