Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
SamplePointUtils.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
5 
10 
12 
13 #include <algorithm>
14 #include <ranges>
15 
16 namespace MuonCalib{
17  std::vector<SamplePoint> fetchDataPoints(const IRtRelation& rtRel, const double relUnc) {
18  assert(relUnc >0);
19  std::vector<SamplePoint> points{};
20  const double stepWidth = rtRel.tBinWidth();
21  double time = rtRel.tLower();
22  while (time <= rtRel.tUpper()){
23  const double r = rtRel.radius(time);
24  points.emplace_back(time, r, relUnc);
25  time+=stepWidth;
26  }
27  return points;
28  }
29  std::vector<SamplePoint> fetchDataPoints(const IRtRelation& rtRel, const IRtResolution& reso) {
30  std::vector<SamplePoint> points{};
31  const double stepWidth = rtRel.tBinWidth();
32  double time = rtRel.tLower();
33  while (time <= rtRel.tUpper()){
34  points.emplace_back(time,rtRel.radius(time), reso.resolution(time));
35  time+=stepWidth;
36  }
37  return points;
38  }
39  std::vector<SamplePoint> resoFromRadius(const std::vector<SamplePoint>& points,
40  const double uncert) {
41  std::vector<SamplePoint> outPoints{};
42  outPoints.reserve(points.size());
43  for (const SamplePoint& point: points) {
44  outPoints.emplace_back(point.x2(),point.error(), uncert);
45  }
46  return outPoints;
47  }
48  std::vector<SamplePoint> fetchResolution(const std::vector<SamplePoint>& points,
49  const double uncert) {
50  std::vector<SamplePoint> outPoints{};
51  outPoints.reserve(points.size());
52  for (const SamplePoint& point: points) {
53  outPoints.emplace_back(point.x1(),point.error(), uncert);
54  }
55  return outPoints;
56  }
57 
58 
59  std::vector<SamplePoint> swapCoordinates(const std::vector<SamplePoint>& inPoints,
60  const IRtRelation& rtRel) {
61 
62  std::vector<SamplePoint> outPoints{};
63  outPoints.reserve(inPoints.size());
64  /*
65  * Let's suppose that dY = f^{\prime} dX
66  */
67  for (const SamplePoint& in : inPoints) {
68  const double fPrime = std::abs(rtRel.driftVelocity(in.x1()));
69  outPoints.emplace_back(in.x2(), in.x1(), in.error() / (fPrime > 0 ? fPrime : 1.));
70  }
71  std::ranges::sort(outPoints, [](const SamplePoint& a, const SamplePoint& b) {
72  return a.x1() < b.x1();
73  });
74  return outPoints;
75  }
76  std::vector<SamplePoint> normalizeDomain(const std::vector<SamplePoint>& dataPoints) {
77  const auto [minX, maxX] = interval(dataPoints);
78  std::vector<SamplePoint> normedPoints{dataPoints};
79  for (unsigned k = 0; k < dataPoints.size(); ++k) {
80  normedPoints[k].set_x1(mapToUnitInterval(normedPoints[k].x1(), minX, maxX));
81  }
82  return normedPoints;
83  }
84  std::pair<double, double> minMax(const std::vector<SamplePoint>& points) {
86  for (const SamplePoint& point: points) {
87  min = std::min(min, point.x2());
88  max = std::max(max, point.x2());
89  }
90  return std::make_pair(min,max);
91  }
92  std::pair<double, double> interval(const std::vector<SamplePoint>& points) {
94  for (const SamplePoint& point: points) {
95  min = std::min(min, point.x1());
96  max = std::max(max, point.x1());
97  }
98  return std::make_pair(min, max);
99  }
100  double calculateChi2(const std::vector<SamplePoint>& dataPoints,
101  const IRtRelation& rtRel){
102  double chi2{0.};
103  for (const SamplePoint& point: dataPoints){
104  chi2+=std::pow((point.x2() - rtRel.radius(point.x1())) / point.error(), 2);
105  }
106  return chi2;
107  }
108  double calculateChi2(const std::vector<SamplePoint>& dataPoints,
109  const ITrRelation& trRel) {
110  double chi2{0.};
111  for (const SamplePoint& point: dataPoints){
112  chi2+=std::pow((point.x2() - trRel.driftTime(point.x1()).value_or(2.*trRel.maxRadius()) ) / point.error(), 2);
113  }
114  return chi2;
115  }
116  double calculateChi2(const std::vector<SamplePoint>& dataPoints,
117  const IRtResolution& rtReso) {
118  double chi2{0.};
119  for (const SamplePoint& point: dataPoints){
120  chi2+=std::pow((point.x2() - rtReso.resolution(point.x1())) / point.error(), 2);
121  }
122  return chi2;
123  }
124 }
beamspotman.r
def r
Definition: beamspotman.py:676
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
MuonCalib::IRtResolution::resolution
virtual double resolution(double t, double bgRate=0.0) const =0
returns resolution for a give time and background rate
MuonCalib::normalizeDomain
std::vector< SamplePoint > normalizeDomain(const std::vector< SamplePoint > &dataPoints)
Normalizes the domain of the samples points to the interval -1 to 1.
Definition: SamplePointUtils.cxx:76
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
MuonCalib::fetchResolution
std::vector< SamplePoint > fetchResolution(const std::vector< SamplePoint > &points, const double uncert)
Creates a new vector of sample points where the x2 is assigned to the uncertainty and the uncertainty...
Definition: SamplePointUtils.cxx:48
MuonCalib::calculateChi2
double calculateChi2(const std::vector< SamplePoint > &dataPoints, const IRtRelation &rtRel)
Returns the chi2 of the rt-relation w.r.t.
Definition: SamplePointUtils.cxx:100
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
MuonCalib::interval
std::pair< double, double > interval(const std::vector< SamplePoint > &points)
Returns the interval covered by the sample points.
Definition: SamplePointUtils.cxx:92
MuonCalib::minMax
std::pair< double, double > minMax(const std::vector< SamplePoint > &points)
Returns the minimum & maximum values covered by the sample points.
Definition: SamplePointUtils.cxx:84
MuonCalib::ITrRelation::driftTime
virtual std::optional< double > driftTime(const double r) const =0
Interface method for fetching the drift-time from the radius Returns a nullopt if the time is out of ...
MuonCalib::ITrRelation::maxRadius
virtual double maxRadius() const =0
Returns the maximum drift-radius.
UtilFunc.h
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:525
MuonCalib
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
Definition: CscCalcPed.cxx:22
RtResolutionLookUp.h
MuonCalib::IRtRelation::tUpper
virtual double tUpper() const =0
Returns the upper time covered by the r-t.
IRtResolution.h
MuonCalib::fetchDataPoints
std::vector< SamplePoint > fetchDataPoints(const IRtRelation &rtRel, const double relUnc)
Constructs a list of sample points from the rt-relation.
Definition: SamplePointUtils.cxx:17
MuonCalib::IRtRelation::radius
virtual double radius(double t) const =0
returns drift radius for a given time
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
MuonCalib::SamplePoint
Definition: SamplePoint.h:15
MuonCalib::IRtRelation::driftVelocity
virtual double driftVelocity(double t) const =0
Returns the drift velocity for a given time.
ITrRelation.h
MuonCalib::IRtResolution
Generic interface to retrieve the resolution on the drift radius as a function of the drift time.
Definition: IRtResolution.h:20
MuonCalib::IRtRelation::tLower
virtual double tLower() const =0
Returns the lower time covered by the r-t.
a
TList * a
Definition: liststreamerinfos.cxx:10
IRtRelation.h
MuonCalib::mapToUnitInterval
double mapToUnitInterval(const double x, const double lowerEdge, const double upperEdge)
Maps the number x which is in [lowEdge;upperEdge] to the interval [-1;1].
Definition: UtilFunc.h:12
MuonCalib::swapCoordinates
std::vector< SamplePoint > swapCoordinates(const std::vector< SamplePoint > &points, const IRtRelation &rtRel)
Creates a new vector of samples points with x1 exchanged by x2 and vice-versa.
Definition: SamplePointUtils.cxx:59
SamplePointUtils.h
MuonCalib::IRtRelation::tBinWidth
virtual double tBinWidth() const =0
Returns the step-size for the sampling.
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
MuonCalib::IRtRelation
generic interface for a rt-relation
Definition: IRtRelation.h:19
jobOptions.points
points
Definition: jobOptions.GenevaPy8_Zmumu.py:97
fitman.k
k
Definition: fitman.py:528
MuonCalib::resoFromRadius
std::vector< SamplePoint > resoFromRadius(const std::vector< SamplePoint > &points, const double uncert)
Creates a new vector of sample points where the x2 coordinate becomes the x1 coordinate and the resol...
Definition: SamplePointUtils.cxx:39
MuonCalib::ITrRelation
Definition: ITrRelation.h:17