src
RecoParticleFlow
PFClusterProducer
interface
PFRecHitCaloNavigator.h
Go to the documentation of this file.
1
#ifndef RecoParticleFlow_PFClusterProducer_PFRecHitCaloNavigator_h
2
#define RecoParticleFlow_PFClusterProducer_PFRecHitCaloNavigator_h
3
4
#include "
RecoParticleFlow/PFClusterProducer/interface/PFRecHitNavigatorBase.h
"
5
#include "
Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h
"
6
#include "
Geometry/CaloGeometry/interface/CaloGeometry.h
"
7
8
#include "
RecoCaloTools/Navigation/interface/CaloNavigator.h
"
9
#include "
DataFormats/EcalDetId/interface/EBDetId.h
"
10
#include "
DataFormats/EcalDetId/interface/EEDetId.h
"
11
#include "
DataFormats/EcalDetId/interface/ESDetId.h
"
12
#include "
DataFormats/HcalDetId/interface/HcalDetId.h
"
13
14
#include "
Geometry/CaloTopology/interface/EcalEndcapTopology.h
"
15
#include "
Geometry/CaloTopology/interface/EcalBarrelTopology.h
"
16
#include "
Geometry/CaloTopology/interface/EcalPreshowerTopology.h
"
17
#include "
Geometry/CaloTopology/interface/HcalTopology.h
"
18
19
#include "
Geometry/CaloTopology/interface/CaloTowerTopology.h
"
20
#include "
DataFormats/CaloTowers/interface/CaloTowerDetId.h
"
21
22
template
<
typename
DET,
typename
TOPO,
bool
ownsTopo = true>
23
class
PFRecHitCaloNavigator
:
public
PFRecHitNavigatorBase
{
24
public
:
25
~PFRecHitCaloNavigator
()
override
{
26
if
(!ownsTopo) {
27
topology_
.release();
28
}
29
}
30
31
void
associateNeighbours
(
reco::PFRecHit
&
hit
,
32
std::unique_ptr<reco::PFRecHitCollection>&
hits
,
33
edm::RefProd<reco::PFRecHitCollection>
& refProd)
override
{
34
DetId
detid(
hit
.detId());
35
36
CaloNavigator<DET>
navigator
(detid,
topology_
.get());
37
38
DetId
N
(0);
39
DetId
E(0);
40
DetId
S
(0);
41
DetId
W(0);
42
DetId
NW(0);
43
DetId
NE(0);
44
DetId
SW(0);
45
DetId
SE(0);
46
47
N
=
navigator
.north();
48
associateNeighbour
(
N
,
hit
,
hits
, refProd, 0, 1, 0);
49
50
if
(
N
!=
DetId
(0)) {
51
NE =
navigator
.east();
52
}
else
{
53
navigator
.home();
54
E =
navigator
.east();
55
NE =
navigator
.north();
56
}
57
associateNeighbour
(NE,
hit
,
hits
, refProd, 1, 1, 0);
58
navigator
.home();
59
60
S
=
navigator
.south();
61
associateNeighbour
(
S
,
hit
,
hits
, refProd, 0, -1, 0);
62
63
if
(
S
!=
DetId
(0)) {
64
SW =
navigator
.west();
65
}
else
{
66
navigator
.home();
67
W =
navigator
.west();
68
SW =
navigator
.south();
69
}
70
associateNeighbour
(SW,
hit
,
hits
, refProd, -1, -1, 0);
71
navigator
.home();
72
73
E =
navigator
.east();
74
associateNeighbour
(E,
hit
,
hits
, refProd, 1, 0, 0);
75
76
if
(E !=
DetId
(0)) {
77
SE =
navigator
.south();
78
}
else
{
79
navigator
.home();
80
S
=
navigator
.south();
81
SE =
navigator
.east();
82
}
83
associateNeighbour
(SE,
hit
,
hits
, refProd, 1, -1, 0);
84
navigator
.home();
85
86
W =
navigator
.west();
87
associateNeighbour
(W,
hit
,
hits
, refProd, -1, 0, 0);
88
89
if
(W !=
DetId
(0)) {
90
NW =
navigator
.north();
91
}
else
{
92
navigator
.home();
93
N
=
navigator
.north();
94
NW =
navigator
.west();
95
}
96
associateNeighbour
(NW,
hit
,
hits
, refProd, -1, 1, 0);
97
}
98
99
protected
:
100
std::unique_ptr<const TOPO>
topology_
;
101
};
102
103
#endif
PFRecHitNavigatorBase::associateNeighbour
void associateNeighbour(const DetId &id, reco::PFRecHit &hit, std::unique_ptr< reco::PFRecHitCollection > &hits, edm::RefProd< reco::PFRecHitCollection > &refProd, short eta, short phi, short depth)
Definition:
PFRecHitNavigatorBase.h:40
hfClusterShapes_cfi.hits
hits
Definition:
hfClusterShapes_cfi.py:5
CaloNavigator.h
EcalPreshowerTopology.h
reco::PFRecHit
Particle flow rechit (rechit + geometry and topology information). See clustering algorithm in PFClus...
Definition:
PFRecHit.h:31
EcalBarrelTopology.h
edm::RefProd
Definition:
EDProductfwd.h:25
HcalDetId.h
EcalEndcapTopology.h
CaloSubdetectorGeometry.h
S
Definition:
CSCDBL1TPParametersExtended.h:16
PFRecHitCaloNavigator::associateNeighbours
void associateNeighbours(reco::PFRecHit &hit, std::unique_ptr< reco::PFRecHitCollection > &hits, edm::RefProd< reco::PFRecHitCollection > &refProd) override
Definition:
PFRecHitCaloNavigator.h:31
CaloTowerTopology.h
PFRecHitCaloNavigator
Definition:
PFRecHitCaloNavigator.h:23
PFRecHitNavigatorBase
Definition:
PFRecHitNavigatorBase.h:25
PFRecHitNavigatorBase.h
CaloTowerDetId.h
DetId
Definition:
DetId.h:17
CaloNavigator
Definition:
CaloNavigator.h:7
N
#define N
Definition:
blowfish.cc:9
CaloGeometry.h
hit
Definition:
SiStripHitEffFromCalibTree.cc:88
HLT_2023v12_cff.navigator
navigator
Definition:
HLT_2023v12_cff.py:10011
EBDetId.h
EEDetId.h
ESDetId.h
PFRecHitCaloNavigator::~PFRecHitCaloNavigator
~PFRecHitCaloNavigator() override
Definition:
PFRecHitCaloNavigator.h:25
PFRecHitCaloNavigator::topology_
std::unique_ptr< const TOPO > topology_
Definition:
PFRecHitCaloNavigator.h:100
HcalTopology.h
Generated for CMSSW Reference Manual by
1.8.14