CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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,
EcalRecHit
RecHitsMap
 

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

Definition at line 22 of file PreshowerPhiClusterAlgo.h.

Definition at line 19 of file PreshowerPhiClusterAlgo.h.

Definition at line 21 of file PreshowerPhiClusterAlgo.h.

Constructor & Destructor Documentation

PreshowerPhiClusterAlgo::PreshowerPhiClusterAlgo ( )
inline

Definition at line 24 of file PreshowerPhiClusterAlgo.h.

PreshowerPhiClusterAlgo::PreshowerPhiClusterAlgo ( float  stripEnergyCut)
inline

Definition at line 26 of file PreshowerPhiClusterAlgo.h.

26 : esStripEnergyCut_(stripEnergyCut) {}
PreshowerPhiClusterAlgo::~PreshowerPhiClusterAlgo ( )
inline

Definition at line 28 of file PreshowerPhiClusterAlgo.h.

28 {};

Member Function Documentation

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)
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(), reco::deltaPhi(), edm::SortedCollection< T, SORT >::end(), PV3DBase< T, PVType, FrameType >::eta(), CaloSubdetectorGeometry::getGeometry(), goodStrip(), PV3DBase< T, PVType, FrameType >::phi(), ESDetId::plane(), position, edm::SortedCollection< T, SORT >::push_back(), rechits_map, used_s, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

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 y() const
Definition: PV3DBase.h:60
void push_back(T const &t)
static const double deltaEta
Definition: CaloConstants.h:8
bool goodStrip(RecHitsMap::iterator candidate_it)
T z() const
Definition: PV3DBase.h:61
std::vector< EcalRecHit >::iterator iterator
const_iterator end() const
Definition: DetId.h:17
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.
T eta() const
Definition: PV3DBase.h:73
Structure Point Contains parameters of Gaussian fits to DMRs.
Definition: DMRtrends.cc:57
static int position[264][3]
Definition: ReadPGInfo.cc:289
int plane() const
Definition: ESDetId.h:41
T x() const
Definition: PV3DBase.h:59
const_iterator begin() const

Member Data Documentation

float PreshowerPhiClusterAlgo::esStripEnergyCut_
private

Definition at line 41 of file PreshowerPhiClusterAlgo.h.

Referenced by goodStrip().

RecHitsMap* PreshowerPhiClusterAlgo::rechits_map
private

Definition at line 46 of file PreshowerPhiClusterAlgo.h.

Referenced by goodStrip(), and makeOneCluster().

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

Definition at line 43 of file PreshowerPhiClusterAlgo.h.

HitsID* PreshowerPhiClusterAlgo::used_s
private

Definition at line 49 of file PreshowerPhiClusterAlgo.h.

Referenced by goodStrip(), and makeOneCluster().