CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
tmtt::Sector Class Reference

#include <Sector.h>

Public Member Functions

float etaMax () const
 
float etaMin () const
 
unsigned int iEtaReg () const
 
bool inside (const Stub *stub) const
 
bool insideEta (const Stub *stub) const
 
bool insideEtaReg (const TP &tp) const
 
std::vector< bool > insideEtaSubSecs (const Stub *stub) const
 
bool insidePhi (const Stub *stub) const
 
bool insidePhiSec (const TP &tp) const
 
unsigned int iPhiSec () const
 
void numStubsInside (const TP &tp, unsigned int &nStubsInsideEtaPhi, unsigned int &nStubsInsideEta, unsigned int &nStubsInsidePhi) const
 
float phiCentre () const
 
 Sector (const Settings *settings, unsigned int iPhiSec, unsigned int iEtaSec)
 
float sectorHalfWidth () const
 
std::unordered_map< const Stub *, std::pair< bool, bool > > stubsInside (const TP &tp) const
 
float zAtChosenR_Max () const
 
float zAtChosenR_Min () const
 

Private Member Functions

int64_t forceBitWidth (const float value, const UInt_t nBits) const
 
bool insideEtaRange (const Stub *stub, float zRangeMin, float zRangeMax) const
 
std::vector< bool > subEtaFwCalc (const int rT, const int z) const
 

Private Attributes

float assumedPhiTrkRes_
 
float beamWindowZ_
 
bool calcPhiTrkRes_
 
float chosenRofPhi_
 
float chosenRofZ_
 
float etaMax_
 
float etaMin_
 
unsigned int iEtaReg_
 
unsigned int iPhiSec_
 
float minPt_
 
unsigned int numSubSecsEta_
 
float phiCentre_
 
float sectorHalfWidth_
 
const Settingssettings_
 
bool useStubPhi_
 
bool useStubPhiTrk_
 
float zOuterMax_
 
std::vector< float > zOuterMaxSub_
 
float zOuterMin_
 
std::vector< float > zOuterMinSub_
 

Detailed Description

Definition at line 14 of file Sector.h.

Constructor & Destructor Documentation

◆ Sector()

tmtt::Sector::Sector ( const Settings settings,
unsigned int  iPhiSec,
unsigned int  iEtaSec 
)

Definition at line 13 of file Sector.cc.

References chosenRofZ_, etaMax_, etaMin_, JetChargeProducer_cfi::exp, dqmMemoryStats::float, mps_fire::i, iPhiSec(), M_PI, tmtt::Settings::numPhiNonants(), tmtt::Settings::numPhiSectors(), numSubSecsEta_, phiCentre_, sectorHalfWidth_, funct::tan(), zOuterMaxSub_, and zOuterMinSub_.

14  : settings_(settings),
15  // Sector number
18 
19  beamWindowZ_(settings->beamWindowZ()), // Assumed half-length of beam-spot
20 
21  //=== Characteristics of this eta region.
22  // Using lines of specified rapidity drawn from centre of CMS, determine the z coords at which
23  // they cross the radius chosenRofZ_.
24  etaMin_(settings->etaRegions()[iEtaReg]),
25  etaMax_(settings->etaRegions()[iEtaReg + 1]),
26  chosenRofZ_(settings->chosenRofZ()),
27  // Get range in z of tracks covered by this sector at chosen radius from beam-line
28  zOuterMin_(chosenRofZ_ / tan(2. * atan(exp(-etaMin_)))),
29  zOuterMax_(chosenRofZ_ / tan(2. * atan(exp(-etaMax_)))),
30 
31  //=== Characteristics of this phi region.
32  chosenRofPhi_(settings->chosenRofPhi()),
33  minPt_(settings->houghMinPt()), // Min Pt covered by HT array.
34  assumedPhiTrkRes_(settings->assumedPhiTrkRes()),
35  useStubPhi_(settings->useStubPhi()),
36  useStubPhiTrk_(settings->useStubPhiTrk()),
37  calcPhiTrkRes_(settings->calcPhiTrkRes()),
38  //=== Check if subsectors in eta are being used within each sector.
39  numSubSecsEta_(settings->numSubSecsEta()) {
40  // Centre of phi (tracking) nonant zero must be along x-axis to be consistent with tracker cabling map.
41  // Define phi sector zero to start at lower end of phi range in nonant 0.
42  float phiCentreSec0 = -M_PI / float(settings->numPhiNonants()) + M_PI / float(settings->numPhiSectors());
43  // Centre of sector in phi
44  phiCentre_ = 2. * M_PI * float(iPhiSec) / float(settings->numPhiSectors()) + phiCentreSec0;
45  sectorHalfWidth_ = M_PI / float(settings->numPhiSectors()); // Sector half width excluding overlaps.
46 
47  // If eta subsectors have equal width in rapidity, do this.
48  float subSecWidth = (etaMax_ - etaMin_) / float(numSubSecsEta_);
49  for (unsigned int i = 0; i < numSubSecsEta_; i++) {
50  float subSecEtaMin = etaMin_ + i * subSecWidth;
51  float subSecEtaMax = subSecEtaMin + subSecWidth;
52  float subSecZmin = chosenRofZ_ / tan(2. * atan(exp(-subSecEtaMin)));
53  float subSecZmax = chosenRofZ_ / tan(2. * atan(exp(-subSecEtaMax)));
54  zOuterMinSub_.push_back(subSecZmin);
55  zOuterMaxSub_.push_back(subSecZmax);
56  }
57  }
unsigned int iEtaReg() const
Definition: Sector.h:28
std::vector< float > zOuterMaxSub_
Definition: Sector.h:96
float chosenRofZ_
Definition: Sector.h:79
float phiCentre_
Definition: Sector.h:84
unsigned int iPhiSec() const
Definition: Sector.h:27
unsigned int iEtaReg_
Definition: Sector.h:75
float beamWindowZ_
Definition: Sector.h:76
float assumedPhiTrkRes_
Definition: Sector.h:88
unsigned int numSubSecsEta_
Definition: Sector.h:94
bool useStubPhiTrk_
Definition: Sector.h:90
float sectorHalfWidth_
Definition: Sector.h:85
bool calcPhiTrkRes_
Definition: Sector.h:91
float minPt_
Definition: Sector.h:87
const Settings * settings_
Definition: Sector.h:71
float etaMin_
Definition: Sector.h:77
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
#define M_PI
float zOuterMax_
Definition: Sector.h:81
float etaMax_
Definition: Sector.h:78
bool useStubPhi_
Definition: Sector.h:89
float zOuterMin_
Definition: Sector.h:80
unsigned int iPhiSec_
Definition: Sector.h:74
float chosenRofPhi_
Definition: Sector.h:86
std::vector< float > zOuterMinSub_
Definition: Sector.h:95

Member Function Documentation

◆ etaMax()

float tmtt::Sector::etaMax ( ) const
inline

Definition at line 31 of file Sector.h.

References etaMax_.

Referenced by tmtt::L1track3D::cheat(), tmtt::MiniHTstage::exec(), and tmtt::TMTrackProducer::produce().

31 { return etaMax_; } // Eta range covered by this sector.
float etaMax_
Definition: Sector.h:78

◆ etaMin()

float tmtt::Sector::etaMin ( ) const
inline

Definition at line 30 of file Sector.h.

References etaMin_.

Referenced by tmtt::L1track3D::cheat(), tmtt::MiniHTstage::exec(), and tmtt::TMTrackProducer::produce().

30 { return etaMin_; } // Eta range covered by this sector.
float etaMin_
Definition: Sector.h:77

◆ forceBitWidth()

int64_t tmtt::Sector::forceBitWidth ( const float  value,
const UInt_t  nBits 
) const
private

Definition at line 192 of file Sector.cc.

References funct::abs(), gpuClustering::pixelStatus::mask, mps_fire::result, and Validation_hcalonly_cfi::sign.

Referenced by subEtaFwCalc().

192  {
193  // slightly hand-waving treatment of 2s complement
194  int64_t sign = 1;
195  if (value < 0)
196  sign = -1;
197  int64_t iValue = int64_t(std::abs(value));
198  int64_t mask = (int64_t(1) << nBits) - int64_t(1);
199  int64_t result = sign * (iValue & mask);
200  if (std::abs(result - value) > 1)
201  throw cms::Exception("LogicError")
202  << "Sector::forceBitWidth is messing up by using too few bits to digitize number"
203  << " nBits=" << nBits << " Input float=" << value << " Output digi = " << result;
204  return result;
205  // Check that result is compatible with value. Throw error if not.
206  }
constexpr uint32_t mask
Definition: gpuClustering.h:24
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Definition: value.py:1

◆ iEtaReg()

unsigned int tmtt::Sector::iEtaReg ( ) const
inline

Definition at line 28 of file Sector.h.

References iEtaReg_.

28 { return iEtaReg_; }
unsigned int iEtaReg_
Definition: Sector.h:75

◆ inside()

bool tmtt::Sector::inside ( const Stub stub) const
inline

Definition at line 20 of file Sector.h.

References insideEta(), and insidePhi().

Referenced by tmtt::Histos::fillEtaPhiSectors(), insideEta(), insideEtaRange(), insideEtaSubSecs(), and stubsInside().

20 { return (this->insideEta(stub) && this->insidePhi(stub)); }
bool insidePhi(const Stub *stub) const
Definition: Sector.cc:111
bool insideEta(const Stub *stub) const
Definition: Sector.cc:61

◆ insideEta()

bool tmtt::Sector::insideEta ( const Stub stub) const

Definition at line 61 of file Sector.cc.

References inside(), insideEtaRange(), zOuterMax_, and zOuterMin_.

Referenced by tmtt::Histos::fillEtaPhiSectors(), inside(), numStubsInside(), and stubsInside().

61  {
62  // Lower edge of this eta region defined by line from (r,z) = (0,-beamWindowZ) to (chosenRofZ_, zOuterMin_).
63  // Upper edge of this eta region defined by line from (r,z) = (0, beamWindowZ) to (chosenRofZ_, zOuterMax_).
64 
65  bool inside = this->insideEtaRange(stub, zOuterMin_, zOuterMax_);
66  return inside;
67  }
bool inside(const Stub *stub) const
Definition: Sector.h:20
float zOuterMax_
Definition: Sector.h:81
float zOuterMin_
Definition: Sector.h:80
bool insideEtaRange(const Stub *stub, float zRangeMin, float zRangeMax) const
Definition: Sector.cc:93

◆ insideEtaRange()

bool tmtt::Sector::insideEtaRange ( const Stub stub,
float  zRangeMin,
float  zRangeMax 
) const
private

Definition at line 93 of file Sector.cc.

References funct::abs(), beamWindowZ_, chosenRofZ_, inside(), tmtt::Stub::r(), tmtt::Stub::z(), photonAnalyzer_cfi::zMax, and photonAnalyzer_cfi::zMin.

Referenced by insideEta(), and insideEtaSubSecs().

93  {
94  // Lower edge of this eta region defined by line from (r,z) = (0,-beamWindowZ) to (chosenRofZ_, zRangeMin).
95  // Upper edge of this eta region defined by line from (r,z) = (0, beamWindowZ) to (chosenRofZ_, zRangeMax).
96 
97  float zMin, zMax;
98  bool inside;
99 
100  // Calculate z coordinate of lower edge of this eta region, evaluated at radius of stub.
101  zMin = (zRangeMin * stub->r() - beamWindowZ_ * std::abs(stub->r() - chosenRofZ_)) / chosenRofZ_;
102  // Calculate z coordinate of upper edge of this eta region, evaluated at radius of stub.
103  zMax = (zRangeMax * stub->r() + beamWindowZ_ * std::abs(stub->r() - chosenRofZ_)) / chosenRofZ_;
104 
105  inside = (stub->z() > zMin && stub->z() < zMax);
106  return inside;
107  }
float chosenRofZ_
Definition: Sector.h:79
float beamWindowZ_
Definition: Sector.h:76
bool inside(const Stub *stub) const
Definition: Sector.h:20
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

◆ insideEtaReg()

bool tmtt::Sector::insideEtaReg ( const TP tp) const
inline

Definition at line 56 of file Sector.h.

References chosenRofZ_, cmsswSequenceInfo::tp, zOuterMax_, and zOuterMin_.

56  {
57  return (tp.trkZAtR(chosenRofZ_) > zOuterMin_ && tp.trkZAtR(chosenRofZ_) < zOuterMax_);
58  }
float chosenRofZ_
Definition: Sector.h:79
float zOuterMax_
Definition: Sector.h:81
float zOuterMin_
Definition: Sector.h:80

◆ insideEtaSubSecs()

vector< bool > tmtt::Sector::insideEtaSubSecs ( const Stub stub) const

Definition at line 71 of file Sector.cc.

References tmtt::Stub::digitalStub(), tmtt::Settings::enableDigitize(), mps_fire::i, tmtt::DigitalStub::iDigi_Rt(), tmtt::DigitalStub::iDigi_Z(), inside(), insideEtaRange(), numSubSecsEta_, settings_, subEtaFwCalc(), zOuterMaxSub_, and zOuterMinSub_.

Referenced by tmtt::MiniHTstage::exec().

71  {
72  if (settings_->enableDigitize() && numSubSecsEta_ == 2) {
73  // Use (complicated) digitized firmware emulation
74  return subEtaFwCalc(stub->digitalStub()->iDigi_Rt(), stub->digitalStub()->iDigi_Z());
75 
76  } else {
77  // Use (simpler) floating point calculation.
78 
79  vector<bool> insideVec;
80 
81  // Loop over subsectors.
82  for (unsigned int i = 0; i < numSubSecsEta_; i++) {
83  bool inside = this->insideEtaRange(stub, zOuterMinSub_[i], zOuterMaxSub_[i]);
84  insideVec.push_back(inside);
85  }
86 
87  return insideVec;
88  }
89  }
std::vector< float > zOuterMaxSub_
Definition: Sector.h:96
bool enableDigitize() const
Definition: Settings.h:80
unsigned int numSubSecsEta_
Definition: Sector.h:94
bool inside(const Stub *stub) const
Definition: Sector.h:20
std::vector< bool > subEtaFwCalc(const int rT, const int z) const
Definition: Sector.cc:211
const Settings * settings_
Definition: Sector.h:71
bool insideEtaRange(const Stub *stub, float zRangeMin, float zRangeMax) const
Definition: Sector.cc:93
std::vector< float > zOuterMinSub_
Definition: Sector.h:95

◆ insidePhi()

bool tmtt::Sector::insidePhi ( const Stub stub) const

Definition at line 111 of file Sector.cc.

References funct::abs(), assumedPhiTrkRes_, calcPhiTrkRes_, chosenRofPhi_, delPhi(), reco::deltaPhi(), SiStripPI::min, minPt_, tmtt::Stub::phi(), phiCentre_, tmtt::Stub::phiDiff(), sectorHalfWidth_, tmtt::Stub::trkPhiAtR(), tmtt::Stub::trkPhiAtRcut(), useStubPhi_, and useStubPhiTrk_.

Referenced by tmtt::Histos::fillEtaPhiSectors(), inside(), numStubsInside(), and stubsInside().

111  {
112  // N.B. The logic here for preventing a stub being assigned to > 2 sectors seems overly agressive.
113  // But attempts at improving it have failed ...
114 
115  bool okPhi = true;
116  bool okPhiTrk = true;
117 
118  if (useStubPhi_) {
119  float delPhi =
120  reco::deltaPhi(stub->phi(), phiCentre_); // Phi difference between stub & sector in range -PI to +PI.
121  float tolerancePhi = stub->phiDiff(
122  chosenRofPhi_, minPt_); // How much stub phi might differ from track phi because of track curvature.
123  float outsidePhi = std::abs(delPhi) - sectorHalfWidth_ -
124  tolerancePhi; // If > 0, then stub is not compatible with being inside this sector.
125  if (outsidePhi > 0)
126  okPhi = false;
127  }
128 
129  if (useStubPhiTrk_) {
130  // Estimate either phi0 of track from stub info, or phi of the track at radius chosenRofPhi_.
131  float phiTrk = stub->trkPhiAtR(chosenRofPhi_);
132  // Phi difference between stub & sector in range -PI to +PI.
133  float delPhiTrk = reco::deltaPhi(phiTrk, phiCentre_);
134  // Set tolerance equal to nominal resolution assumed in phiTrk
135  float tolerancePhiTrk = assumedPhiTrkRes_ * (2 * sectorHalfWidth_);
136  if (calcPhiTrkRes_) {
137  // Calculate uncertainty in phiTrk due to poor resolution in stub bend
138  float phiTrkRes = stub->trkPhiAtRcut(chosenRofPhi_);
139  // Reduce tolerance if this is smaller than the nominal assumed resolution.
140  tolerancePhiTrk = min(tolerancePhiTrk, phiTrkRes);
141  }
142  // If following > 0, then stub is not compatible with being inside this sector.
143  float outsidePhiTrk = std::abs(delPhiTrk) - sectorHalfWidth_ - tolerancePhiTrk;
144 
145  if (outsidePhiTrk > 0)
146  okPhiTrk = false;
147  }
148 
149  return (okPhi && okPhiTrk);
150  }
constexpr double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:26
float phiCentre_
Definition: Sector.h:84
float assumedPhiTrkRes_
Definition: Sector.h:88
bool useStubPhiTrk_
Definition: Sector.h:90
float sectorHalfWidth_
Definition: Sector.h:85
static double delPhi(const double phi1, const double phi2)
bool calcPhiTrkRes_
Definition: Sector.h:91
float minPt_
Definition: Sector.h:87
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool useStubPhi_
Definition: Sector.h:89
float chosenRofPhi_
Definition: Sector.h:86

◆ insidePhiSec()

bool tmtt::Sector::insidePhiSec ( const TP tp) const
inline

Definition at line 53 of file Sector.h.

References funct::abs(), chosenRofPhi_, phiCentre_, sectorHalfWidth_, and cmsswSequenceInfo::tp.

53  {
54  return (std::abs(tp.trkPhiAtR(chosenRofPhi_) - phiCentre_) < sectorHalfWidth_);
55  }
float phiCentre_
Definition: Sector.h:84
float sectorHalfWidth_
Definition: Sector.h:85
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
float chosenRofPhi_
Definition: Sector.h:86

◆ iPhiSec()

unsigned int tmtt::Sector::iPhiSec ( ) const
inline

Definition at line 27 of file Sector.h.

References iPhiSec_.

Referenced by Sector().

27 { return iPhiSec_; } // Sector number.
unsigned int iPhiSec_
Definition: Sector.h:74

◆ numStubsInside()

void tmtt::Sector::numStubsInside ( const TP tp,
unsigned int &  nStubsInsideEtaPhi,
unsigned int &  nStubsInsideEta,
unsigned int &  nStubsInsidePhi 
) const

Definition at line 171 of file Sector.cc.

References insideEta(), insidePhi(), and stubsInside().

174  {
175  nStubsInsideEtaPhi = 0;
176  nStubsInsideEta = 0;
177  nStubsInsidePhi = 0;
178  for (const auto& iter : this->stubsInside(tp)) {
179  bool insidePhi = iter.second.first;
180  bool insideEta = iter.second.second;
181  if (insidePhi && insideEta)
182  nStubsInsideEtaPhi++;
183  if (insideEta)
184  nStubsInsideEta++;
185  if (insidePhi)
186  nStubsInsidePhi++;
187  }
188  }
bool insidePhi(const Stub *stub) const
Definition: Sector.cc:111
bool insideEta(const Stub *stub) const
Definition: Sector.cc:61
std::unordered_map< const Stub *, std::pair< bool, bool > > stubsInside(const TP &tp) const
Definition: Sector.cc:156

◆ phiCentre()

float tmtt::Sector::phiCentre ( ) const
inline

Definition at line 29 of file Sector.h.

References phiCentre_.

Referenced by tmtt::L1track3D::cheat(), tmtt::MiniHTstage::exec(), and tmtt::TMTrackProducer::produce().

29 { return phiCentre_; } // Return phi of centre of this sector.
float phiCentre_
Definition: Sector.h:84

◆ sectorHalfWidth()

float tmtt::Sector::sectorHalfWidth ( ) const
inline

Definition at line 33 of file Sector.h.

References sectorHalfWidth_.

33 { return sectorHalfWidth_; } // Half width in phi of sector measured in radians.
float sectorHalfWidth_
Definition: Sector.h:85

◆ stubsInside()

unordered_map< const Stub *, pair< bool, bool > > tmtt::Sector::stubsInside ( const TP tp) const

Definition at line 156 of file Sector.cc.

References inside(), insideEta(), insidePhi(), and cmsswSequenceInfo::tp.

Referenced by numStubsInside().

156  {
157  unordered_map<const Stub*, pair<bool, bool> > inside;
158  // Loop over stubs produced by tracking particle
159  const vector<const Stub*>& assStubs = tp.assocStubs();
160  for (const Stub* stub : assStubs) {
161  // Check if this stub is inside sector
162  inside[stub] = pair<bool, bool>(this->insidePhi(stub), this->insideEta(stub));
163  }
164  return inside;
165  }
bool insidePhi(const Stub *stub) const
Definition: Sector.cc:111
bool inside(const Stub *stub) const
Definition: Sector.h:20
bool insideEta(const Stub *stub) const
Definition: Sector.cc:61

◆ subEtaFwCalc()

vector< bool > tmtt::Sector::subEtaFwCalc ( const int  rT,
const int  z 
) const
private

Definition at line 211 of file Sector.cc.

References funct::abs(), beamWindowZ_, chosenRofPhi_, chosenRofZ_, cm_to_mm, tmtt::Settings::etaRegions(), JetChargeProducer_cfi::exp, forceBitWidth(), g, iEtaReg_, funct::pow(), tmtt::Settings::rtBits(), tmtt::Settings::rtRange(), settings_, funct::tan(), tmtt::Settings::zBits(), tmtt::Settings::zRange(), and beampixel_dqm_sourceclient-live_cfg::zRange.

Referenced by insideEtaSubSecs().

211  {
212  // Note number of reference bits used to digitize rT and z, used when GP authors determined some constants below.
213  unsigned int rtBitsRef = 10;
214  unsigned int zBitsRef = 12;
215 
216  // This replaces Kristian's hard-wired constants with configurable ones.
217  unsigned int rtBits = settings_->rtBits();
218  unsigned int zBits = settings_->zBits();
219  float rtRange = settings_->rtRange();
220  float zRange = settings_->zRange();
221  constexpr float cm_to_mm = 10.; // firwmare is in mm and CMSSW in cm.
222  float zBase = cm_to_mm / (pow(2, zBits) / zRange);
223  float rTBase = cm_to_mm / (pow(2, rtBits) / rtRange);
224 
225  // Number of bits used by DSP in UltraScale-Plus FPGA (where DSP does D = A*B + C)
226  constexpr unsigned int nDSPa = 27;
227  //constexpr unsigned int nDSPb = 18;
228  constexpr unsigned int nDSPc = 48;
229  constexpr unsigned int nDSPd = 48;
230 
231  // unit transformations: firmware uses mm, software uses cm
232  float BeamWindow = cm_to_mm * beamWindowZ_;
233  float T_rphi = cm_to_mm * chosenRofPhi_;
234  float T_rz = cm_to_mm * chosenRofZ_;
235 
236  // actual algorithm as used in firmware, mostly using same variable names
237  float Beam_over_T = BeamWindow / T_rz;
238  // Value chosen so that number digitized below when calculating "bot" uses most of the nDSPa bits, without overflowing them. This is done assuming reference number of bits for rT and z mentioned above.
239  unsigned int nShiftA = 24;
240  // Guess from to keep "bot" in correct range (nDSPa) if number of digitsation bits are changed.
241  nShiftA += (rtBits - rtBitsRef) - (zBits - zBitsRef);
242  float Beam_over_T_base = 1. / (1 << nShiftA);
243  int64_t bot = forceBitWidth(Beam_over_T * rTBase / zBase / Beam_over_T_base, nDSPa);
244  int64_t bw = forceBitWidth(BeamWindow / zBase / Beam_over_T_base, nDSPc);
245  float etaSecMid = (settings_->etaRegions()[iEtaReg_] + settings_->etaRegions()[iEtaReg_ + 1]) / 2.0;
246  float tanlSecMid = 1.0 / tan(2.0 * atan(exp(-etaSecMid)));
247  // Value chosen so that number digitized below when calculating "tanlSec_Mid" uses most of the nDSPa bits, without overflowing them. This is done assuming reference number of bits for rT and z mentioned above.
248  unsigned int nShiftB = 16;
249  // Guess to keep "tanlSec_Mid" in correct range (nDSPa) if number of digitsation bits are changed.
250  nShiftB += (rtBits - rtBitsRef) - (zBits - zBitsRef);
251  float tanlSecBase = 1. / (1 << nShiftB);
252  int64_t tanlSec_Mid = forceBitWidth(int(tanlSecMid * rTBase / zBase / tanlSecBase), nDSPa);
253  // Number of extra bits used to digitise r instead of rT within GP code, if both encoded as signed int.
254  constexpr unsigned int nExtraBitsR = 2;
255  unsigned int rBits = rtBits + nExtraBitsR;
256  int64_t r = forceBitWidth(rT + T_rphi / rTBase, rBits);
257  int64_t g = forceBitWidth(bot * r - bw, nDSPd);
258  int64_t absg = abs(g);
259  // Number of useful bits left of the nDSPd assigned to "absg" after right-shifting by nShiftA bits.
260  const unsigned nBitsRemainingA = nDSPd - nShiftA;
261  int64_t shift_g = forceBitWidth((absg >> nShiftA), nBitsRemainingA);
262  // Number of bits is sum of those in two numbers being multiplied.
263  int64_t tlsr = forceBitWidth(tanlSec_Mid * r, nDSPa + rBits);
264  // Number of useful bits left of (nDSPa + rBits) assigned to "tlsr" after right-shifting by nShiftB bits.
265  const unsigned nBitsRemainingB = (nDSPa + rBits) - nShiftB;
266  int64_t shift_tlsr = forceBitWidth((tlsr >> nShiftB), nBitsRemainingB);
267 
268  vector<bool> insideVec;
269  insideVec.push_back(z <= (shift_tlsr + shift_g));
270  insideVec.push_back(z >= (shift_tlsr - shift_g));
271  return insideVec;
272  }
float chosenRofZ_
Definition: Sector.h:79
unsigned int iEtaReg_
Definition: Sector.h:75
float beamWindowZ_
Definition: Sector.h:76
double zRange() const
Definition: Settings.h:88
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
unsigned int zBits() const
Definition: Settings.h:87
const Settings * settings_
Definition: Sector.h:71
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int64_t forceBitWidth(const float value, const UInt_t nBits) const
Definition: Sector.cc:192
float chosenRofPhi_
Definition: Sector.h:86
unsigned int rtBits() const
Definition: Settings.h:85
const std::vector< double > & etaRegions() const
Definition: Settings.h:124
double rtRange() const
Definition: Settings.h:86
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
static const double cm_to_mm

◆ zAtChosenR_Max()

float tmtt::Sector::zAtChosenR_Max ( ) const
inline

Definition at line 37 of file Sector.h.

References zOuterMax_.

37 { return zOuterMax_; }
float zOuterMax_
Definition: Sector.h:81

◆ zAtChosenR_Min()

float tmtt::Sector::zAtChosenR_Min ( ) const
inline

Definition at line 34 of file Sector.h.

References zOuterMin_.

34  {
35  return zOuterMin_;
36  } // Range in z of particle at chosen radius from beam line covered by this sector.
float zOuterMin_
Definition: Sector.h:80

Member Data Documentation

◆ assumedPhiTrkRes_

float tmtt::Sector::assumedPhiTrkRes_
private

Definition at line 88 of file Sector.h.

Referenced by insidePhi().

◆ beamWindowZ_

float tmtt::Sector::beamWindowZ_
private

Definition at line 76 of file Sector.h.

Referenced by insideEtaRange(), and subEtaFwCalc().

◆ calcPhiTrkRes_

bool tmtt::Sector::calcPhiTrkRes_
private

Definition at line 91 of file Sector.h.

Referenced by insidePhi().

◆ chosenRofPhi_

float tmtt::Sector::chosenRofPhi_
private

Definition at line 86 of file Sector.h.

Referenced by insidePhi(), insidePhiSec(), and subEtaFwCalc().

◆ chosenRofZ_

float tmtt::Sector::chosenRofZ_
private

Definition at line 79 of file Sector.h.

Referenced by insideEtaRange(), insideEtaReg(), Sector(), and subEtaFwCalc().

◆ etaMax_

float tmtt::Sector::etaMax_
private

Definition at line 78 of file Sector.h.

Referenced by etaMax(), and Sector().

◆ etaMin_

float tmtt::Sector::etaMin_
private

Definition at line 77 of file Sector.h.

Referenced by etaMin(), and Sector().

◆ iEtaReg_

unsigned int tmtt::Sector::iEtaReg_
private

Definition at line 75 of file Sector.h.

Referenced by iEtaReg(), and subEtaFwCalc().

◆ iPhiSec_

unsigned int tmtt::Sector::iPhiSec_
private

Definition at line 74 of file Sector.h.

Referenced by iPhiSec().

◆ minPt_

float tmtt::Sector::minPt_
private

Definition at line 87 of file Sector.h.

Referenced by insidePhi().

◆ numSubSecsEta_

unsigned int tmtt::Sector::numSubSecsEta_
private

Definition at line 94 of file Sector.h.

Referenced by insideEtaSubSecs(), and Sector().

◆ phiCentre_

float tmtt::Sector::phiCentre_
private

Definition at line 84 of file Sector.h.

Referenced by insidePhi(), insidePhiSec(), phiCentre(), and Sector().

◆ sectorHalfWidth_

float tmtt::Sector::sectorHalfWidth_
private

Definition at line 85 of file Sector.h.

Referenced by insidePhi(), insidePhiSec(), Sector(), and sectorHalfWidth().

◆ settings_

const Settings* tmtt::Sector::settings_
private

Definition at line 71 of file Sector.h.

Referenced by insideEtaSubSecs(), and subEtaFwCalc().

◆ useStubPhi_

bool tmtt::Sector::useStubPhi_
private

Definition at line 89 of file Sector.h.

Referenced by insidePhi().

◆ useStubPhiTrk_

bool tmtt::Sector::useStubPhiTrk_
private

Definition at line 90 of file Sector.h.

Referenced by insidePhi().

◆ zOuterMax_

float tmtt::Sector::zOuterMax_
private

Definition at line 81 of file Sector.h.

Referenced by insideEta(), insideEtaReg(), and zAtChosenR_Max().

◆ zOuterMaxSub_

std::vector<float> tmtt::Sector::zOuterMaxSub_
private

Definition at line 96 of file Sector.h.

Referenced by insideEtaSubSecs(), and Sector().

◆ zOuterMin_

float tmtt::Sector::zOuterMin_
private

Definition at line 80 of file Sector.h.

Referenced by insideEta(), insideEtaReg(), and zAtChosenR_Min().

◆ zOuterMinSub_

std::vector<float> tmtt::Sector::zOuterMinSub_
private

Definition at line 95 of file Sector.h.

Referenced by insideEtaSubSecs(), and Sector().