ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Reconstruction
RecoTools
TrackToCalo
TrackToCalo
CaloCellHelpers.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#ifndef REC_CALOCELLHELPERS_H
6
#define REC_CALOCELLHELPERS_H
7
8
#include <cmath>
9
10
#include "
CaloEvent/CaloCell.h
"
11
#include "
CaloGeoHelpers/CaloPhiRange.h
"
12
13
inline
double
phiMean
(
double
a
,
double
b) {
return
0.5 * (
a
+ b) + (
a
* b < 0) *
M_PI
; }
14
16
inline
bool
crossedPhi
(
const
CaloCell
& cell,
double
phi_entrance,
double
phi_exit) {
17
double
mean_phi =
phiMean
(phi_entrance, phi_exit);
18
double
dphi = fabs(
CaloPhiRange::diff
(phi_entrance, phi_exit));
19
double
phi_min = mean_phi - dphi, phi_max = mean_phi + dphi;
20
21
return
(
CaloPhiRange::diff
(cell.phi() + cell.caloDDE()->dphi() / 2., phi_min) > 0 &&
22
CaloPhiRange::diff
(phi_max, cell.phi() - cell.caloDDE()->dphi() / 2.) > 0);
23
}
24
26
inline
double
getPathLengthInEta
(
const
CaloCell
& cell,
double
eta_entrance,
double
eta_exit) {
27
double
etaMin = cell.eta() - 0.5 * cell.caloDDE()->deta();
28
double
etaMax = cell.eta() + 0.5 * cell.caloDDE()->deta();
29
if
(fabs(eta_entrance - eta_exit) < 1e-6)
// to avoid FPE
30
return
eta_entrance > etaMin && eta_entrance < etaMax;
31
32
double
etaMinTrack = std::min(eta_entrance, eta_exit);
33
double
etaMaxTrack = std::max(eta_entrance, eta_exit);
34
return
(std::min(etaMax, etaMaxTrack) - std::max(etaMin, etaMinTrack)) / (etaMaxTrack - etaMinTrack);
35
}
36
38
inline
double
getPathLengthInZ
(
double
zMin,
double
zMax,
double
z_entrance,
double
z_exit) {
39
if
(fabs(z_entrance - z_exit) < 1e-6)
// to avoid FPE
40
return
z_entrance > zMin && z_entrance < zMax;
41
42
double
zMinTrack = std::min(z_entrance, z_exit);
43
double
zMaxTrack = std::max(z_entrance, z_exit);
44
return
(std::min(zMax, zMaxTrack) - std::max(zMin, zMinTrack)) / (zMaxTrack - zMinTrack);
45
}
46
48
inline
double
getPathLengthInZ
(
const
CaloCell
& cell,
double
z_entrance,
double
z_exit) {
49
return
getPathLengthInZ
(cell.z() - 0.5 * cell.caloDDE()->dz(), cell.z() + 0.5 * cell.caloDDE()->dz(), z_entrance, z_exit);
50
}
51
52
// /** Return the % of path length crossed by the track inside a cell in Z for a ladder shaped cell **/
53
// inline double getPathLengthInZTileBar1(const CaloCell& cell, double z_entrance, double z_exit) {
54
// // Divide the problem in 2 rectangles: the cell contains 6 tile rows, 3 in the bottom part, 3 in the top
55
// // Calculate the point where the track crossed the boundary between the bottom and top parts
56
// // and determine the path lenght inside each part
57
// TileCellDim *cell_dim = m_tileDDM->get_cell_dim(cell.caloDDE()->identify());
58
// if (!cell_dim || cell_dim->getNRows() != 6) // should always be the case for this sampling
59
// return 0;
60
61
// // Get the percentage in depth covered by the bottom part of the cell
62
// double R = (cell_dim->getRMax(2) - cell_dim->getRMin(0))/(cell_dim->getRMax(5) - cell_dim->getRMin(0));
63
64
// // The point where the track crossed the boundary
65
// double z_middle = z_entrance + R*(z_exit - z_entrance);
66
67
// // Get the boundaries of the 2 half-cells
68
// double zBottom_min = cell_dim->getZMin(0), zBottom_max = cell_dim->getZMax(0);
69
// double zTop_min = cell_dim->getZMin(3), zTop_max = cell_dim->getZMax(3);
70
// double pathBottom = getPathLengthInZ(zBottom_min, zBottom_max, z_entrance, z_middle);
71
72
// // Calculate the path traversed in the bottom and top parts
73
// if (zTop_min == zTop_max) { // top part of B9 cell has 0 width. Don't take the mean in this case
74
// if ( fabs(z_middle) > fabs(zBottom_max) && pathBottom > 0)
75
// pathBottom = 1;
76
// return pathBottom;
77
// }
78
// double pathTop = getPathLengthInZ(zTop_min, zTop_max, z_middle, z_exit);
79
// // Take the weighted mean using the depth ratio since the method gives the %
80
// return R*pathBottom + (1.-R)*pathTop;
81
// }
82
84
inline
double
pathInsideCell
(
const
CaloCell
& cell,
const
Amg::Vector3D
& entry,
const
Amg::Vector3D
& exit) {
85
if
(!
crossedPhi
(cell, entry.phi(), exit.phi()))
return
0;
86
double
pathCrossed = 0;
87
if
(cell.caloDDE()->getSubCalo() !=
CaloCell_ID::TILE
)
88
pathCrossed =
getPathLengthInEta
(cell, entry.eta(), exit.eta());
89
else
if
(cell.caloDDE()->getSampling() == CaloCell_ID::TileBar1)
// ladder shape cells, divide the problem in 2
90
pathCrossed = 0;
// getPathLengthInZTileBar1(cell, entry.z(), exit.z());
91
else
92
pathCrossed =
getPathLengthInZ
(cell, entry.z(), exit.z());
93
if
(pathCrossed <= 0)
return
0;
94
return
pathCrossed;
95
}
96
97
#endif
M_PI
#define M_PI
Definition
ActiveFraction.h:14
getPathLengthInEta
double getPathLengthInEta(const CaloCell &cell, double eta_entrance, double eta_exit)
Return the % of path length crossed by the track inside a cell in eta.
Definition
CaloCellHelpers.h:26
pathInsideCell
double pathInsideCell(const CaloCell &cell, const Amg::Vector3D &entry, const Amg::Vector3D &exit)
Return the % of the path crossed inside the cell, given the parameters for the extrapolation at entra...
Definition
CaloCellHelpers.h:84
crossedPhi
bool crossedPhi(const CaloCell &cell, double phi_entrance, double phi_exit)
Return true if the cell crossed was crossed by the track in phi.
Definition
CaloCellHelpers.h:16
phiMean
double phiMean(double a, double b)
Definition
CaloCellHelpers.h:13
getPathLengthInZ
double getPathLengthInZ(double zMin, double zMax, double z_entrance, double z_exit)
Return the % of path length crossed by the track inside a cell in Z.
Definition
CaloCellHelpers.h:38
CaloCell.h
CaloPhiRange.h
CaloPhiRange class declaration.
a
static Double_t a
Definition
LArPhysWaveHECTool.cxx:38
CaloCell_Base_ID::TILE
@ TILE
Definition
CaloCell_Base_ID.h:45
CaloCell
Data object for each calorimeter readout cell.
Definition
CaloCell.h:57
CaloPhiRange::diff
static double diff(double phi1, double phi2)
simple phi1 - phi2 calculation, but result is fixed to respect range.
Definition
CaloPhiRange.cxx:22
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition
GeoPrimitives.h:47
Generated on
for ATLAS Offline Software by
1.17.0