Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Classes | Public Member Functions | Private Attributes | List of all members
FPGATrackSimGenScanKeyLyrHelper Class Reference

#include <FPGATrackSimGenScanBinning.h>

Collaboration diagram for FPGATrackSimGenScanKeyLyrHelper:

Classes

struct  KeyLyrPars
 
struct  rotatedConfig
 

Public Member Functions

 FPGATrackSimGenScanKeyLyrHelper (double r1, double r2)
 
 FPGATrackSimGenScanKeyLyrHelper ()
 
std::pair< double, double > getXY (double r, double phi) const
 
std::pair< double, double > getRotationAngles (const std::pair< double, double > &xy1, const std::pair< double, double > &xy2) const
 
std::pair< double, double > rotateXY (const std::pair< double, double > &xy, const std::pair< double, double > &ang) const
 
rotatedConfig getRotatedConfig (const KeyLyrPars &keypars) const
 
std::pair< double, double > getRotatedHit (const std::pair< double, double > &rotang, const FPGATrackSimHit *hit) const
 
KeyLyrPars trackParsToKeyPars (const FPGATrackSimTrackPars &pars) const
 
FPGATrackSimTrackPars keyParsToTrackPars (const KeyLyrPars &keypars) const
 
double zExpected (const KeyLyrPars &keypars, double r) const
 
double xExpected (const KeyLyrPars &keypars, const FPGATrackSimHit *hit) const
 
double xmForHit (const KeyLyrPars &keypars, const FPGATrackSimHit *hit) const
 
double deltaX (const KeyLyrPars &keypars, const FPGATrackSimHit *hit) const
 
double R1 () const
 
double R2 () const
 
void setR1 (const double r1)
 
void setR2 (const double r2)
 

Private Attributes

double m_R1 {}
 
double m_R2 {}
 

Detailed Description

Definition at line 387 of file FPGATrackSimGenScanBinning.h.

Constructor & Destructor Documentation

◆ FPGATrackSimGenScanKeyLyrHelper() [1/2]

FPGATrackSimGenScanKeyLyrHelper::FPGATrackSimGenScanKeyLyrHelper ( double  r1,
double  r2 
)
inline

Definition at line 390 of file FPGATrackSimGenScanBinning.h.

390 : m_R1(r1), m_R2(r2) {}

◆ FPGATrackSimGenScanKeyLyrHelper() [2/2]

FPGATrackSimGenScanKeyLyrHelper::FPGATrackSimGenScanKeyLyrHelper ( )
inline

Definition at line 391 of file FPGATrackSimGenScanBinning.h.

391 {} // NOTE r1 and r2 must be set before using class

Member Function Documentation

◆ deltaX()

double FPGATrackSimGenScanKeyLyrHelper::deltaX ( const KeyLyrPars keypars,
const FPGATrackSimHit hit 
) const

Definition at line 387 of file FPGATrackSimGenScanBinning.cxx.

388 {
389  auto rotated_coords = getRotatedConfig(keypars);
390 
391  auto rotang = rotated_coords.rotang;
392 
393  auto xyhp = getRotatedHit(rotang, hit);
394 
395  double xh = xyhp.first-rotated_coords.xy1p.first;
396 
397  return xh - xExpected(keypars,hit);
398 }

◆ getRotatedConfig()

FPGATrackSimGenScanKeyLyrHelper::rotatedConfig FPGATrackSimGenScanKeyLyrHelper::getRotatedConfig ( const KeyLyrPars keypars) const

Definition at line 263 of file FPGATrackSimGenScanBinning.cxx.

264 {
265  rotatedConfig result;
266 
267  auto xy1 = getXY(m_R1, keypars.phi1);
268  auto xy2 = getXY(m_R2, keypars.phi2);
269 
270  result.rotang = getRotationAngles(xy1, xy2);
271  result.xy1p = rotateXY(xy1, result.rotang);
272  result.xy2p = rotateXY(xy2, result.rotang);
273  result.y = result.xy2p.second - result.xy1p.second;
274 
275  return result;
276 }

◆ getRotatedHit()

std::pair< double, double > FPGATrackSimGenScanKeyLyrHelper::getRotatedHit ( const std::pair< double, double > &  rotang,
const FPGATrackSimHit hit 
) const

Definition at line 278 of file FPGATrackSimGenScanBinning.cxx.

279 {
280  auto xyh = getXY(hit->getR(), hit->getGPhi());
281  return rotateXY(xyh, rotang);
282 }

◆ getRotationAngles()

std::pair< double, double > FPGATrackSimGenScanKeyLyrHelper::getRotationAngles ( const std::pair< double, double > &  xy1,
const std::pair< double, double > &  xy2 
) const

Definition at line 247 of file FPGATrackSimGenScanBinning.cxx.

248 {
249  double dr12x = xy2.first - xy1.first;
250  double dr12y = xy2.second - xy1.second;
251  double dr12mag = std::hypot(dr12x, dr12y);
252  double cos_rot = dr12y / dr12mag;
253  double sin_rot = -dr12x / dr12mag;
254  return std::pair<double, double>(cos_rot, sin_rot);
255 }

◆ getXY()

std::pair< double, double > FPGATrackSimGenScanKeyLyrHelper::getXY ( double  r,
double  phi 
) const

Definition at line 242 of file FPGATrackSimGenScanBinning.cxx.

243 {
244  return std::pair<double, double>(r * cos(phi), r * sin(phi));
245 }

◆ keyParsToTrackPars()

FPGATrackSimTrackPars FPGATrackSimGenScanKeyLyrHelper::keyParsToTrackPars ( const KeyLyrPars keypars) const

Definition at line 310 of file FPGATrackSimGenScanBinning.cxx.

311 {
312 
314  pars[FPGATrackSimTrackPars::IZ0] = (keypars.z1 * m_R2 - keypars.z2 * m_R1) / (m_R2 - m_R1);
316 
317  // This is the exact math which is a bit messy
318  // if you want the math contact lipeles@sas.upenn.edu
319 
320  double xm = keypars.xm;
321 
322  auto rotated_coords = getRotatedConfig(keypars);
323  auto xy1p = rotated_coords.xy1p;
324  auto rotang = rotated_coords.rotang;
325  auto y = rotated_coords.y;
326 
327  // reverse rotation
328  auto revang = rotang;
329  revang.second = -rotang.second;
330 
331  if (xm != 0)
332  {
333  double Rinv = 2 * xm / (xm * xm + (y / 2) * (y / 2));
334  double d = (y * y / 4.0 - xm * xm) / (2.0 * xm);
335  double sign = (xm > 0) - (xm < 0);
336 
338 
339  std::pair<double, double> xycp(-d + xy1p.first, y / 2.0 + xy1p.second);
340 
341  pars[FPGATrackSimTrackPars::ID0] = -1 * sign * (std::abs(1 / Rinv) - std::hypot(xycp.first, xycp.second));
342 
343  auto xyc = rotateXY(xycp, revang);
344 
345  pars[FPGATrackSimTrackPars::IPHI] = atan2(sign * -xyc.first, sign * xyc.second);
346  }
347  else
348  {
350  pars[FPGATrackSimTrackPars::ID0] = -1 * xy1p.first;
351  pars[FPGATrackSimTrackPars::IPHI] = atan2(rotang.first, -rotang.second);
352  }
353 
354  return pars;
355 }

◆ R1()

double FPGATrackSimGenScanKeyLyrHelper::R1 ( ) const
inline

Definition at line 444 of file FPGATrackSimGenScanBinning.h.

444 {return m_R1;}

◆ R2()

double FPGATrackSimGenScanKeyLyrHelper::R2 ( ) const
inline

Definition at line 445 of file FPGATrackSimGenScanBinning.h.

445 {return m_R2;}

◆ rotateXY()

std::pair< double, double > FPGATrackSimGenScanKeyLyrHelper::rotateXY ( const std::pair< double, double > &  xy,
const std::pair< double, double > &  ang 
) const

Definition at line 257 of file FPGATrackSimGenScanBinning.cxx.

258 {
259  return std::pair<double, double>(xy.first * ang.first + xy.second * ang.second,
260  -xy.first * ang.second + xy.second * ang.first);
261 }

◆ setR1()

void FPGATrackSimGenScanKeyLyrHelper::setR1 ( const double  r1)
inline

Definition at line 446 of file FPGATrackSimGenScanBinning.h.

446 {m_R1=r1;}

◆ setR2()

void FPGATrackSimGenScanKeyLyrHelper::setR2 ( const double  r2)
inline

Definition at line 447 of file FPGATrackSimGenScanBinning.h.

447 {m_R2=r2;}

◆ trackParsToKeyPars()

FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars FPGATrackSimGenScanKeyLyrHelper::trackParsToKeyPars ( const FPGATrackSimTrackPars pars) const

Definition at line 284 of file FPGATrackSimGenScanBinning.cxx.

285 {
286  KeyLyrPars retv;
291 
293  if (Rinv != 0)
294  {
295  double R = 1 / Rinv;
296  auto xy1 = getXY(m_R1, retv.phi1);
297  auto xy2 = getXY(m_R2, retv.phi2);
298  double ysqr = (xy2.first - xy1.first) * (xy2.first - xy1.first) + (xy2.second - xy1.second) * (xy2.second - xy1.second);
299  double sign = (R > 0) - (R < 0);
300  retv.xm = -1 * sign * (std::abs(R) - sqrt(R * R - ysqr / 4.0));
301  }
302  else
303  {
304  retv.xm = 0;
305  }
306 
307  return retv;
308 }

◆ xExpected()

double FPGATrackSimGenScanKeyLyrHelper::xExpected ( const KeyLyrPars keypars,
const FPGATrackSimHit hit 
) const

Definition at line 401 of file FPGATrackSimGenScanBinning.cxx.

402 {
403  auto rotated_coords = getRotatedConfig(keypars);
404 
405  auto rotang = rotated_coords.rotang;
406  auto y = rotated_coords.y;
407 
408  auto xyhp = getRotatedHit(rotang, hit);
409 
410  double yh = xyhp.second-rotated_coords.xy1p.second;
411 
412  return keypars.xm * (keypars.xm * keypars.xm + yh * (y - yh)) / (keypars.xm * keypars.xm + (y / 2) * (y / 2));
413 }

◆ xmForHit()

double FPGATrackSimGenScanKeyLyrHelper::xmForHit ( const KeyLyrPars keypars,
const FPGATrackSimHit hit 
) const

Definition at line 363 of file FPGATrackSimGenScanBinning.cxx.

364 {
365  auto rotated_coords = getRotatedConfig(keypars);
366  auto xy1p = rotated_coords.xy1p;
367  auto rotang = rotated_coords.rotang;
368  auto y = rotated_coords.y;
369 
370  auto xyhp = getRotatedHit(rotang, hit);
371  double xh = xyhp.first - xy1p.first;
372  double yh = xyhp.second - xy1p.second;
373 
374  // use taylor expanded xm calculation
375  double sign = ((yh > 0) && (yh < y)) ? 1 : -1;
376  if ((std::abs(yh) < std::abs(xh)) || (std::abs(y - yh) < std::abs(xh)))
377  {
378  return ((xh > 0) ? 1 : -1) * 100000;
379  }
380 
381  double xm_taylor = sign * y * y / (y * y - 4 * xh * xh - 4 * (yh - y / 2.0) * (yh - y / 2.0)) * xh;
382 
383  return xm_taylor;
384 }

◆ zExpected()

double FPGATrackSimGenScanKeyLyrHelper::zExpected ( const KeyLyrPars keypars,
double  r 
) const

Definition at line 357 of file FPGATrackSimGenScanBinning.cxx.

358 {
359  return (keypars.z2 - keypars.z1) / (m_R2 - m_R1) * (r - m_R1) + keypars.z1;
360 }

Member Data Documentation

◆ m_R1

double FPGATrackSimGenScanKeyLyrHelper::m_R1 {}
private

Definition at line 450 of file FPGATrackSimGenScanBinning.h.

◆ m_R2

double FPGATrackSimGenScanKeyLyrHelper::m_R2 {}
private

Definition at line 451 of file FPGATrackSimGenScanBinning.h.


The documentation for this class was generated from the following files:
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
FPGATrackSimGenScanGeomHelpers::phiFromPars
static double phiFromPars(double r, const FPGATrackSimTrackPars &pars)
Definition: FPGATrackSimGenScanBinning.cxx:221
FPGATrackSimTrackPars::IHIP
@ IHIP
Definition: FPGATrackSimTrackPars.h:49
beamspotman.r
def r
Definition: beamspotman.py:676
FPGATrackSimTrackPars::ID0
@ ID0
Definition: FPGATrackSimTrackPars.h:49
get_generator_info.result
result
Definition: get_generator_info.py:21
FPGATrackSimGenScanKeyLyrHelper::rotateXY
std::pair< double, double > rotateXY(const std::pair< double, double > &xy, const std::pair< double, double > &ang) const
Definition: FPGATrackSimGenScanBinning.cxx:257
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
FPGATrackSimGenScanGeomHelpers::CurvatureConstant
static constexpr double CurvatureConstant
Definition: FPGATrackSimGenScanBinning.h:288
FPGATrackSimGenScanKeyLyrHelper::getXY
std::pair< double, double > getXY(double r, double phi) const
Definition: FPGATrackSimGenScanBinning.cxx:242
FPGATrackSimTrackPars
Definition: FPGATrackSimTrackPars.h:22
hist_file_dump.d
d
Definition: hist_file_dump.py:143
FPGATrackSimTrackPars::IZ0
@ IZ0
Definition: FPGATrackSimTrackPars.h:49
FPGATrackSimGenScanKeyLyrHelper::m_R2
double m_R2
Definition: FPGATrackSimGenScanBinning.h:451
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
MCP::ScaleSmearParam::r2
@ r2
FPGATrackSimHit::getGPhi
float getGPhi() const
Definition: FPGATrackSimHit.h:144
FPGATrackSimGenScanKeyLyrHelper::getRotatedHit
std::pair< double, double > getRotatedHit(const std::pair< double, double > &rotang, const FPGATrackSimHit *hit) const
Definition: FPGATrackSimGenScanBinning.cxx:278
sign
int sign(int a)
Definition: TRT_StrawNeighbourSvc.h:107
AnalysisUtils::Delta::R
double R(const INavigable4Momentum *p1, const double v_eta, const double v_phi)
Definition: AnalysisMisc.h:49
FPGATrackSimGenScanKeyLyrHelper::getRotationAngles
std::pair< double, double > getRotationAngles(const std::pair< double, double > &xy1, const std::pair< double, double > &xy2) const
Definition: FPGATrackSimGenScanBinning.cxx:247
FPGATrackSimGenScanKeyLyrHelper::getRotatedConfig
rotatedConfig getRotatedConfig(const KeyLyrPars &keypars) const
Definition: FPGATrackSimGenScanBinning.cxx:263
FPGATrackSimTrackPars::IPHI
@ IPHI
Definition: FPGATrackSimTrackPars.h:49
FPGATrackSimGenScanKeyLyrHelper::xExpected
double xExpected(const KeyLyrPars &keypars, const FPGATrackSimHit *hit) const
Definition: FPGATrackSimGenScanBinning.cxx:401
FPGATrackSimHit::getR
float getR() const
Definition: FPGATrackSimHit.h:143
y
#define y
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
MCP::ScaleSmearParam::r1
@ r1
FPGATrackSimGenScanKeyLyrHelper::m_R1
double m_R1
Definition: FPGATrackSimGenScanBinning.h:450
FPGATrackSimGenScanGeomHelpers::EtaFromTheta
static double EtaFromTheta(double theta)
Definition: FPGATrackSimGenScanBinning.cxx:205
FPGATrackSimGenScanGeomHelpers::zFromPars
static double zFromPars(double r, const FPGATrackSimTrackPars &pars)
Definition: FPGATrackSimGenScanBinning.cxx:210
FPGATrackSimTrackPars::IETA
@ IETA
Definition: FPGATrackSimTrackPars.h:49