CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
KDTreeLinkerPSEcal Class Reference
Inheritance diagram for KDTreeLinkerPSEcal:
KDTreeLinkerBase

Public Member Functions

void buildTree () override
 
void clear () override
 
void insertFieldClusterElt (reco::PFBlockElement *ecalCluster) override
 
void insertTargetElt (reco::PFBlockElement *psCluster) override
 
 KDTreeLinkerPSEcal (const edm::ParameterSet &conf)
 
void searchLinks () override
 
void updatePFBlockEltWithLinks () override
 
 ~KDTreeLinkerPSEcal () override
 
- Public Member Functions inherited from KDTreeLinkerBase
const reco::PFBlockElement::TypefieldType () const
 
 KDTreeLinkerBase (const edm::ParameterSet &conf)
 
void process ()
 
void setDebug (bool isDebug)
 
void setFieldType (const reco::PFBlockElement::Type &fld)
 
void setTargetType (const reco::PFBlockElement::Type &tgt)
 
const reco::PFBlockElement::TypetargetType () const
 
virtual ~KDTreeLinkerBase ()
 

Private Member Functions

void buildTree (const RecHitSet &rechitsSet, KDTreeLinkerAlgo< reco::PFRecHit const * > &tree)
 

Private Attributes

BlockEltSet fieldClusterSet_
 
const double ps1ToEcal_
 
const double ps2ToEcal_
 
RecHit2BlockEltMap rechit2ClusterLinks_
 
RecHitSet rechitsNegSet_
 
RecHitSet rechitsPosSet_
 
const double resPSlength_
 
const double resPSpitch_
 
BlockElt2BlockEltMap target2ClusterLinks_
 
BlockEltSet targetSet_
 
KDTreeLinkerAlgo< reco::PFRecHit const * > treeNeg_
 
KDTreeLinkerAlgo< reco::PFRecHit const * > treePos_
 

Additional Inherited Members

- Protected Attributes inherited from KDTreeLinkerBase
reco::PFBlockElement::Type _fieldType
 
reco::PFBlockElement::Type _targetType
 
float cristalPhiEtaMaxSize_ = 0.04
 
float cristalXYMaxSize_ = 3.
 
const float cutOffFrac = 1E-4
 
bool debug_ = false
 
float phiOffset_ = 0.25
 

Detailed Description

Definition at line 10 of file KDTreeLinkerPSEcal.cc.

Constructor & Destructor Documentation

◆ KDTreeLinkerPSEcal()

KDTreeLinkerPSEcal::KDTreeLinkerPSEcal ( const edm::ParameterSet conf)

Definition at line 73 of file KDTreeLinkerPSEcal.cc.

74  : KDTreeLinkerBase(conf), resPSpitch_(0.19), resPSlength_(6.1), ps1ToEcal_(1.072), ps2ToEcal_(1.057) {}

◆ ~KDTreeLinkerPSEcal()

KDTreeLinkerPSEcal::~KDTreeLinkerPSEcal ( )
override

Definition at line 76 of file KDTreeLinkerPSEcal.cc.

76 { clear(); }

References clear().

Member Function Documentation

◆ buildTree() [1/2]

void KDTreeLinkerPSEcal::buildTree ( )
overridevirtual

Implements KDTreeLinkerBase.

Definition at line 116 of file KDTreeLinkerPSEcal.cc.

References rechitsNegSet_, rechitsPosSet_, treeNeg_, and treePos_.

◆ buildTree() [2/2]

void KDTreeLinkerPSEcal::buildTree ( const RecHitSet rechitsSet,
KDTreeLinkerAlgo< reco::PFRecHit const * > &  tree 
)
private

Definition at line 121 of file KDTreeLinkerPSEcal.cc.

121  {
122  // List of pseudo-rechits that will be used to create the KDTree
123  std::vector<KDTreeNodeInfo<reco::PFRecHit const *, 2>> eltList;
124 
125  // Filling of this eltList
126  for (RecHitSet::const_iterator it = rechitsSet.begin(); it != rechitsSet.end(); it++) {
127  const reco::PFRecHit *rh = *it;
128  const auto &posxyz = rh->position();
129 
130  KDTreeNodeInfo<reco::PFRecHit const *, 2> rhinfo{rh, posxyz.x(), posxyz.y()};
131  eltList.push_back(rhinfo);
132  }
133 
134  // xmin-xmax, ymain-ymax
135  KDTreeBox region{-150.f, 150.f, -150.f, 150.f};
136 
137  // We may now build the KDTree
138  tree.build(eltList, region);
139 }

References reco::PFRecHit::position(), and HLT_2018_cff::region.

◆ clear()

void KDTreeLinkerPSEcal::clear ( void  )
overridevirtual

Implements KDTreeLinkerBase.

Definition at line 251 of file KDTreeLinkerPSEcal.cc.

251  {
252  targetSet_.clear();
253  fieldClusterSet_.clear();
254 
255  rechitsNegSet_.clear();
256  rechitsPosSet_.clear();
257 
258  rechit2ClusterLinks_.clear();
259  target2ClusterLinks_.clear();
260 
261  treeNeg_.clear();
262  treePos_.clear();
263 }

References KDTreeLinkerAlgo< DATA, DIM >::clear(), fieldClusterSet_, rechit2ClusterLinks_, rechitsNegSet_, rechitsPosSet_, target2ClusterLinks_, targetSet_, treeNeg_, and treePos_.

Referenced by ~KDTreeLinkerPSEcal().

◆ insertFieldClusterElt()

void KDTreeLinkerPSEcal::insertFieldClusterElt ( reco::PFBlockElement ecalCluster)
overridevirtual

Implements KDTreeLinkerBase.

Definition at line 85 of file KDTreeLinkerPSEcal.cc.

85  {
86  const reco::PFClusterRef &clusterref = ecalCluster->clusterRef();
87 
88  if (clusterref->layer() != PFLayer::ECAL_ENDCAP)
89  return;
90 
91  const std::vector<reco::PFRecHitFraction> &fraction = clusterref->recHitFractions();
92 
93  // We create a list of cluster
94  fieldClusterSet_.insert(ecalCluster);
95 
96  double clusterz = clusterref->position().Z();
97  RecHitSet &rechitsSet = (clusterz < 0) ? rechitsNegSet_ : rechitsPosSet_;
98 
99  for (size_t rhit = 0; rhit < fraction.size(); ++rhit) {
100  const reco::PFRecHitRef &rh = fraction[rhit].recHitRef();
101  double fract = fraction[rhit].fraction();
102 
103  if ((rh.isNull()) || (fract < cutOffFrac))
104  continue;
105 
106  const reco::PFRecHit &rechit = *rh;
107 
108  // We save the links rechit to Clusters
109  rechit2ClusterLinks_[&rechit].insert(ecalCluster);
110 
111  // We create a liste of rechits
112  rechitsSet.insert(&rechit);
113  }
114 }

References reco::PFBlockElement::clusterRef(), KDTreeLinkerBase::cutOffFrac, PFLayer::ECAL_ENDCAP, fieldClusterSet_, funct::fract(), HLT_2018_cff::fraction, edm::Ref< C, T, F >::isNull(), rechit2ClusterLinks_, rechitsNegSet_, and rechitsPosSet_.

◆ insertTargetElt()

void KDTreeLinkerPSEcal::insertTargetElt ( reco::PFBlockElement psCluster)
overridevirtual

Implements KDTreeLinkerBase.

Definition at line 78 of file KDTreeLinkerPSEcal.cc.

78  {
79  // This test is more or less done in PFBlockAlgo.h. In others cases, it should be switch on.
80  //if (!((psCluster->clusterRef()->layer() == PFLayer::PS1) || (psCluster->clusterRef()->layer() == PFLayer::PS2)))
81  // return;
82  targetSet_.insert(psCluster);
83 }

References targetSet_.

◆ searchLinks()

void KDTreeLinkerPSEcal::searchLinks ( )
overridevirtual

Implements KDTreeLinkerBase.

Definition at line 141 of file KDTreeLinkerPSEcal.cc.

141  {
142  // Most of the code has been taken from LinkByRecHit.cc
143 
144  // We iterate over the PS clusters.
145  for (BlockEltSet::iterator it = targetSet_.begin(); it != targetSet_.end(); it++) {
146  (*it)->setIsValidMultilinks(true);
147 
148  reco::PFClusterRef clusterPSRef = (*it)->clusterRef();
149  const reco::PFCluster &clusterPS = *clusterPSRef;
150 
151  // PS cluster position, extrapolated to ECAL
152  double zPS = clusterPS.position().Z();
153  double xPS = clusterPS.position().X();
154  double yPS = clusterPS.position().Y();
155 
156  double etaPS = fabs(clusterPS.positionREP().eta());
157  double deltaX = 0.;
158  double deltaY = 0.;
159  float xPSonEcal = xPS;
160  float yPSonEcal = yPS;
161 
162  if (clusterPS.layer() == PFLayer::PS1) { // PS1
163 
164  // vertical strips, measure x with pitch precision
165  deltaX = resPSpitch_;
166  deltaY = resPSlength_;
167  xPSonEcal *= ps1ToEcal_;
168  yPSonEcal *= ps1ToEcal_;
169 
170  } else { // PS2
171 
172  // horizontal strips, measure y with pitch precision
173  deltaY = resPSpitch_;
174  deltaX = resPSlength_;
175  xPSonEcal *= ps2ToEcal_;
176  yPSonEcal *= ps2ToEcal_;
177  }
178 
179  // Estimate the maximal envelope in phi/eta that will be used to find rechit candidates.
180  // Same envelope for cap et barrel rechits.
181 
182  double maxEcalRadius = cristalXYMaxSize_ / 2.;
183 
184  // The inflation factor includes the approximate projection from Preshower to ECAL
185  double inflation = 2.4 - (etaPS - 1.6);
186  float rangeX = maxEcalRadius * (1 + (0.05 + 1.0 / maxEcalRadius * deltaX / 2.)) * inflation;
187  float rangeY = maxEcalRadius * (1 + (0.05 + 1.0 / maxEcalRadius * deltaY / 2.)) * inflation;
188 
189  // We search for all candidate recHits, ie all recHits contained in the maximal size envelope.
190  std::vector<reco::PFRecHit const *> recHits;
191  KDTreeBox trackBox(xPSonEcal - rangeX, xPSonEcal + rangeX, yPSonEcal - rangeY, yPSonEcal + rangeY);
192 
193  if (zPS < 0)
194  treeNeg_.search(trackBox, recHits);
195  else
196  treePos_.search(trackBox, recHits);
197 
198  for (auto const &recHit : recHits) {
199  const auto &corners = recHit->getCornersXYZ();
200 
201  // Find all clusters associated to given rechit
202  RecHit2BlockEltMap::iterator ret = rechit2ClusterLinks_.find(recHit);
203 
204  for (BlockEltSet::const_iterator clusterIt = ret->second.begin(); clusterIt != ret->second.end(); clusterIt++) {
205  reco::PFClusterRef clusterref = (*clusterIt)->clusterRef();
206  double clusterz = clusterref->position().z();
207 
208  const auto &posxyz = recHit->position() * zPS / clusterz;
209 
210  double x[5];
211  double y[5];
212  for (unsigned jc = 0; jc < 4; ++jc) {
213  auto cornerpos = corners[jc].basicVector() * zPS / clusterz;
214  x[3 - jc] = cornerpos.x() +
215  (cornerpos.x() - posxyz.x()) * (0.05 + 1.0 / fabs((cornerpos.x() - posxyz.x())) * deltaX / 2.);
216  y[3 - jc] = cornerpos.y() +
217  (cornerpos.y() - posxyz.y()) * (0.05 + 1.0 / fabs((cornerpos.y() - posxyz.y())) * deltaY / 2.);
218  }
219 
220  x[4] = x[0];
221  y[4] = y[0];
222 
223  bool isinside = TMath::IsInside(xPS, yPS, 5, x, y);
224 
225  // Check if the track and the cluster are linked
226  if (isinside)
227  target2ClusterLinks_[*it].insert(*clusterIt);
228  }
229  }
230  }
231 }

References KDTreeLinkerBase::cristalXYMaxSize_, reco::PFCluster::layer(), reco::CaloCluster::position(), reco::PFCluster::positionREP(), PFLayer::PS1, ps1ToEcal_, ps2ToEcal_, rpcPointValidation_cfi::recHit, rechit2ClusterLinks_, FastTrackerRecHitMaskProducer_cfi::recHits, resPSlength_, resPSpitch_, runTheMatrix::ret, KDTreeLinkerAlgo< DATA, DIM >::search(), target2ClusterLinks_, targetSet_, treeNeg_, treePos_, x, and y.

◆ updatePFBlockEltWithLinks()

void KDTreeLinkerPSEcal::updatePFBlockEltWithLinks ( )
overridevirtual

Implements KDTreeLinkerBase.

Definition at line 233 of file KDTreeLinkerPSEcal.cc.

233  {
234  //TODO YG : Check if cluster positionREP() is valid ?
235 
236  // Here we save in each track the list of phi/eta values of linked clusters.
237  for (BlockElt2BlockEltMap::iterator it = target2ClusterLinks_.begin(); it != target2ClusterLinks_.end(); ++it) {
238  reco::PFMultiLinksTC multitracks(true);
239 
240  for (BlockEltSet::iterator jt = it->second.begin(); jt != it->second.end(); ++jt) {
241  double clusterphi = (*jt)->clusterRef()->positionREP().phi();
242  double clustereta = (*jt)->clusterRef()->positionREP().eta();
243 
244  multitracks.linkedClusters.push_back(std::make_pair(clusterphi, clustereta));
245  }
246 
247  it->first->setMultilinks(multitracks);
248  }
249 }

References reco::PFMultiLinksTC::linkedClusters, and target2ClusterLinks_.

Member Data Documentation

◆ fieldClusterSet_

BlockEltSet KDTreeLinkerPSEcal::fieldClusterSet_
private

Definition at line 51 of file KDTreeLinkerPSEcal.cc.

Referenced by clear(), and insertFieldClusterElt().

◆ ps1ToEcal_

const double KDTreeLinkerPSEcal::ps1ToEcal_
private

Definition at line 46 of file KDTreeLinkerPSEcal.cc.

Referenced by searchLinks().

◆ ps2ToEcal_

const double KDTreeLinkerPSEcal::ps2ToEcal_
private

Definition at line 47 of file KDTreeLinkerPSEcal.cc.

Referenced by searchLinks().

◆ rechit2ClusterLinks_

RecHit2BlockEltMap KDTreeLinkerPSEcal::rechit2ClusterLinks_
private

Definition at line 62 of file KDTreeLinkerPSEcal.cc.

Referenced by clear(), insertFieldClusterElt(), and searchLinks().

◆ rechitsNegSet_

RecHitSet KDTreeLinkerPSEcal::rechitsNegSet_
private

Definition at line 55 of file KDTreeLinkerPSEcal.cc.

Referenced by buildTree(), clear(), and insertFieldClusterElt().

◆ rechitsPosSet_

RecHitSet KDTreeLinkerPSEcal::rechitsPosSet_
private

Definition at line 56 of file KDTreeLinkerPSEcal.cc.

Referenced by buildTree(), clear(), and insertFieldClusterElt().

◆ resPSlength_

const double KDTreeLinkerPSEcal::resPSlength_
private

Definition at line 45 of file KDTreeLinkerPSEcal.cc.

Referenced by searchLinks().

◆ resPSpitch_

const double KDTreeLinkerPSEcal::resPSpitch_
private

Definition at line 44 of file KDTreeLinkerPSEcal.cc.

Referenced by searchLinks().

◆ target2ClusterLinks_

BlockElt2BlockEltMap KDTreeLinkerPSEcal::target2ClusterLinks_
private

Definition at line 59 of file KDTreeLinkerPSEcal.cc.

Referenced by clear(), searchLinks(), and updatePFBlockEltWithLinks().

◆ targetSet_

BlockEltSet KDTreeLinkerPSEcal::targetSet_
private

Definition at line 50 of file KDTreeLinkerPSEcal.cc.

Referenced by clear(), insertTargetElt(), and searchLinks().

◆ treeNeg_

KDTreeLinkerAlgo<reco::PFRecHit const *> KDTreeLinkerPSEcal::treeNeg_
private

Definition at line 65 of file KDTreeLinkerPSEcal.cc.

Referenced by buildTree(), clear(), and searchLinks().

◆ treePos_

KDTreeLinkerAlgo<reco::PFRecHit const *> KDTreeLinkerPSEcal::treePos_
private

Definition at line 66 of file KDTreeLinkerPSEcal.cc.

Referenced by buildTree(), clear(), and searchLinks().

runTheMatrix.ret
ret
prodAgent to be discontinued
Definition: runTheMatrix.py:355
DDAxes::y
KDTreeLinkerBase::cristalXYMaxSize_
float cristalXYMaxSize_
Definition: KDTreeLinkerBase.h:78
reco::PFCluster::layer
PFLayer::Layer layer() const
cluster layer, see PFLayer.h in this directory
Definition: PFCluster.cc:100
edm::Ref::isNull
bool isNull() const
Checks for null.
Definition: Ref.h:235
tree
Definition: tree.py:1
KDTreeLinkerPSEcal::rechitsPosSet_
RecHitSet rechitsPosSet_
Definition: KDTreeLinkerPSEcal.cc:56
DDAxes::x
rpcPointValidation_cfi.recHit
recHit
Definition: rpcPointValidation_cfi.py:7
KDTreeLinkerBase::cutOffFrac
const float cutOffFrac
Definition: KDTreeLinkerBase.h:87
edm::Ref< PFClusterCollection >
KDTreeLinkerPSEcal::target2ClusterLinks_
BlockElt2BlockEltMap target2ClusterLinks_
Definition: KDTreeLinkerPSEcal.cc:59
PFLayer::PS1
Definition: PFLayer.h:31
KDTreeLinkerAlgo::search
void search(const KDTreeBox< DIM > &searchBox, std::vector< DATA > &resRecHitList)
Definition: KDTreeLinkerAlgo.h:203
KDTreeLinkerPSEcal::treePos_
KDTreeLinkerAlgo< reco::PFRecHit const * > treePos_
Definition: KDTreeLinkerPSEcal.cc:66
KDTreeLinkerPSEcal::treeNeg_
KDTreeLinkerAlgo< reco::PFRecHit const * > treeNeg_
Definition: KDTreeLinkerPSEcal.cc:65
KDTreeBox
Definition: KDTreeLinkerAlgo.h:14
reco::PFMultiLinksTC
Definition: PFMultilinksTC.h:14
reco::PFCluster::positionREP
const REPPoint & positionREP() const
cluster position: rho, eta, phi
Definition: PFCluster.h:96
KDTreeLinkerPSEcal::targetSet_
BlockEltSet targetSet_
Definition: KDTreeLinkerPSEcal.cc:50
FastTrackerRecHitMaskProducer_cfi.recHits
recHits
Definition: FastTrackerRecHitMaskProducer_cfi.py:8
KDTreeLinkerPSEcal::fieldClusterSet_
BlockEltSet fieldClusterSet_
Definition: KDTreeLinkerPSEcal.cc:51
KDTreeLinkerPSEcal::rechit2ClusterLinks_
RecHit2BlockEltMap rechit2ClusterLinks_
Definition: KDTreeLinkerPSEcal.cc:62
funct::fract
const Fraction< n, m >::type & fract()
Definition: Fraction.h:36
KDTreeNodeInfo
Definition: KDTreeLinkerAlgo.h:34
reco::CaloCluster::position
const math::XYZPoint & position() const
cluster centroid position
Definition: CaloCluster.h:154
KDTreeLinkerPSEcal::clear
void clear() override
Definition: KDTreeLinkerPSEcal.cc:251
KDTreeLinkerPSEcal::ps1ToEcal_
const double ps1ToEcal_
Definition: KDTreeLinkerPSEcal.cc:46
KDTreeLinkerAlgo::clear
void clear()
Definition: KDTreeLinkerAlgo.h:122
RecHitSet
std::set< const reco::PFRecHit * > RecHitSet
Definition: KDTreeLinkerBase.h:14
reco::PFCluster
Particle flow cluster, see clustering algorithm in PFClusterAlgo.
Definition: PFCluster.h:46
HLT_2018_cff.region
region
Definition: HLT_2018_cff.py:81479
KDTreeLinkerBase::KDTreeLinkerBase
KDTreeLinkerBase(const edm::ParameterSet &conf)
Definition: KDTreeLinkerBase.h:21
reco::PFRecHit::position
PositionType const & position() const
rechit cell centre x, y, z
Definition: PFRecHit.h:117
reco::PFRecHit
Particle flow rechit (rechit + geometry and topology information). See clustering algorithm in PFClus...
Definition: PFRecHit.h:31
KDTreeLinkerPSEcal::resPSlength_
const double resPSlength_
Definition: KDTreeLinkerPSEcal.cc:45
KDTreeLinkerPSEcal::ps2ToEcal_
const double ps2ToEcal_
Definition: KDTreeLinkerPSEcal.cc:47
KDTreeLinkerPSEcal::resPSpitch_
const double resPSpitch_
Definition: KDTreeLinkerPSEcal.cc:44
KDTreeLinkerPSEcal::buildTree
void buildTree() override
Definition: KDTreeLinkerPSEcal.cc:116
PFLayer::ECAL_ENDCAP
Definition: PFLayer.h:32
HLT_2018_cff.fraction
fraction
Definition: HLT_2018_cff.py:51317
KDTreeLinkerPSEcal::rechitsNegSet_
RecHitSet rechitsNegSet_
Definition: KDTreeLinkerPSEcal.cc:55
reco::PFBlockElement::clusterRef
virtual const PFClusterRef & clusterRef() const
Definition: PFBlockElement.h:90