CMS 3D CMS Logo

RealisticCluster.h
Go to the documentation of this file.
1 #ifndef __RecoParticleFlow_PFClusterProducer_RealisticCluster_H__
2 #define __RecoParticleFlow_PFClusterProducer_RealisticCluster_H__
3 
4 #include <array>
5 #include <vector>
6 #include <algorithm>
7 
9  using Hit3DPosition = std::array<float, 3>;
10 
11 public:
12  // for each SimCluster and for each layer, we store the position of the most energetic hit of the simcluster in the layer
13 
14  struct LayerInfo {
18  };
19 
21 
22  void increaseEnergy(float value) { totalEnergy += value; }
24 
26  float fraction = 0.f;
27  if (totalEnergy > 0.f) {
28  fraction = exclusiveEnergy / totalEnergy;
29  }
30  return fraction;
31  }
32 
33  float getEnergy() const { return totalEnergy; }
34 
35  float getExclusiveEnergy() const { return exclusiveEnergy; }
36 
37  bool isVisible() const { return visible; }
38 
39  void setVisible(bool vis) { visible = vis; }
40 
41  void setCenterOfGravity(unsigned int layerId, const Hit3DPosition& position) {
42  layerInfo_[layerId].centerOfGravityAtLayer_ = position;
43  }
44 
45  Hit3DPosition getCenterOfGravity(unsigned int layerId) const { return layerInfo_[layerId].centerOfGravityAtLayer_; }
46 
47  bool setMaxEnergyHit(unsigned int layerId, float newEnergy, const Hit3DPosition position) {
48  if (newEnergy > layerInfo_[layerId].maxEnergyHitAtLayer_) {
49  layerInfo_[layerId].maxEnergyHitAtLayer_ = newEnergy;
50  layerInfo_[layerId].maxHitPosAtLayer_ = position;
51  return true;
52  } else
53  return false;
54  }
55 
56  Hit3DPosition getMaxEnergyPosition(unsigned int layerId) const { return layerInfo_[layerId].maxHitPosAtLayer_; }
57 
58  float getMaxEnergy(unsigned int layerId) const { return layerInfo_[layerId].maxEnergyHitAtLayer_; }
59 
60  void setLayersNum(unsigned int numberOfLayers) { layerInfo_.resize(numberOfLayers); }
61 
62  unsigned int getLayersNum() const { return layerInfo_.size(); }
63 
64  void addHitAndFraction(unsigned int hit, float fraction) { hitIdsAndFractions_.emplace_back(hit, fraction); }
65 
66  void modifyFractionForHitId(float fraction, unsigned int hitId) {
67  auto it = std::find_if(hitIdsAndFractions_.begin(),
68  hitIdsAndFractions_.end(),
69  [&hitId](const std::pair<unsigned int, float>& element) { return element.first == hitId; });
70 
71  it->second = fraction;
72  }
73 
74  void modifyFractionByIndex(float fraction, unsigned int index) { hitIdsAndFractions_[index].second = fraction; }
75 
76  const std::vector<std::pair<unsigned int, float> >& hitsIdsAndFractions() const { return hitIdsAndFractions_; }
77 
78 private:
79  std::vector<std::pair<unsigned int, float> > hitIdsAndFractions_;
80  std::vector<LayerInfo> layerInfo_;
81 
82  float totalEnergy;
84  bool visible;
85 };
86 
87 #endif
void increaseExclusiveEnergy(float value)
std::array< float, 3 > Hit3DPosition
float getMaxEnergy(unsigned int layerId) const
unsigned int getLayersNum() const
bool isVisible() const
std::vector< std::pair< unsigned int, float > > hitIdsAndFractions_
Hit3DPosition centerOfGravityAtLayer_
double f[11][100]
Definition: value.py:1
const std::vector< std::pair< unsigned int, float > > & hitsIdsAndFractions() const
Hit3DPosition getMaxEnergyPosition(unsigned int layerId) const
float getEnergy() const
void setCenterOfGravity(unsigned int layerId, const Hit3DPosition &position)
const map< TString, int > numberOfLayers(TString Year="2018")
Definition: DMRtrends.cc:254
std::vector< LayerInfo > layerInfo_
float getExclusiveEnergy() const
void setVisible(bool vis)
float getExclusiveEnergyFraction() const
void modifyFractionByIndex(float fraction, unsigned int index)
bool setMaxEnergyHit(unsigned int layerId, float newEnergy, const Hit3DPosition position)
void increaseEnergy(float value)
static int position[264][3]
Definition: ReadPGInfo.cc:289
Hit3DPosition getCenterOfGravity(unsigned int layerId) const
void setLayersNum(unsigned int numberOfLayers)
void modifyFractionForHitId(float fraction, unsigned int hitId)
void addHitAndFraction(unsigned int hit, float fraction)