ATLAS Offline Software
Loading...
Searching...
No Matches
MuonHoughTransformer_xyz Class Referenceabstract

abstract base class for hough transform with carthesian coordinates More...

#include <MuonHoughTransformer_xyz.h>

Inheritance diagram for MuonHoughTransformer_xyz:
Collaboration diagram for MuonHoughTransformer_xyz:

Public Member Functions

virtual ~MuonHoughTransformer_xyz ()=default
 destructor
void fillHit (const std::shared_ptr< MuonHoughHit > &hit, double weight) override final
 fill hit in histogram
int fillHisto (double r0, double phi, double weight, int sector) override final
 fill transformed values in histogram
int sector (const std::shared_ptr< MuonHoughHit > &hit) const override final
 returns the rz sector
virtual std::unique_ptr< MuonHoughPatterninitialiseHoughPattern () const =0
 build new houghpattern
float weightHoughTransform (double r0) const override final
 put weight on houghtransform dependent on r0
virtual std::pair< double, double > getHitPos (const MuonHoughHitContainer &event, int hitid) const =0
 returns the relevant 2d hit position
virtual void fill (const MuonHoughHitContainer &event, bool subtract=false)
 fill histograms with hitcontainer
std::unique_ptr< MuonHoughPatternassociateHitsToMaximum (const MuonHoughHitContainer &event, double residu_mm, double residu_grad, int maximum_number) const
 associate hits to certain maximum number of histograms
std::unique_ptr< MuonHoughPatternassociateHitsToCoords (const MuonHoughHitContainer &event, std::pair< double, double > coords, double residu_mm, double residu_angle, int sector=0) const
 associate hits to certain coordinates and sector
std::unique_ptr< MuonHoughPatternassociateHitsToBinnumber (const MuonHoughHitContainer &event, int binnumber, double maximum_residu_mm, double maximum_residu_angle, int sector=0) const
 associate hits to certain binnumber and sector
void resetHisto ()
 reset histograms
void useNegativeWeights (bool use_negative_weights)
 use negative weights
std::vector< std::pair< int, int > > getMaxima (int max_patterns) const
 return the first certain number of maxima of histograms
void setIP (bool ip_setting)
 set m_ip_setting (e.g.
const MuonHoughHisto2DContainerhistos () const
 access to histograms
bool msgLvl (const MSG::Level lvl) const
 Test the output level.
MsgStream & msg () const
 The standard message stream.
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream.
void setLevel (MSG::Level lvl)
 Change the current logging level.

Static Public Member Functions

static double calculateAngle (double hitx, double hity, double r0)
 calcalates the phi angle for a given hit and r0

Protected Member Functions

 MuonHoughTransformer_xyz (int nbins, int nbins_angle, double detectorsize, double detectorsize_angle, double threshold_histo, int number_of_sectors=1)
 constructor
std::unique_ptr< MuonHoughPatternhookAssociateHitsToMaximum (const MuonHoughHitContainer &event, std::pair< double, double > coordsmaximum, double residu_mm, double residu_grad, int sector) const override final
 associate hits to maximum found
std::pair< double, double > getEndPointsFillLoop (double radius, double stepsize, int sector) const
 returns begin and end value of the filling loop

Protected Attributes

MuonHoughHisto2DContainer m_histos
 histogram container
double m_threshold_histo
 threshold of histograms
unsigned int m_eventsize
 size of event to be filled (can be used for weighting)
double m_eventsize_weightfactor
 weightfactor based on eventsize (used in curved hough transform)
bool m_add_weight_angle
 use weight of patterns in angle coordinate
double m_weight_constant_angle
 weight constant of patterns in angle coordinate
bool m_add_weight_radius
 use weight of patterns in radius coordinate
double m_weight_constant_radius
 weight constant of patterns in radius coordinate
bool m_use_negative_weights
 use of negative weights
MuonHoughMathUtils m_muonhoughmathutils
 object for use of mathematical formulas for trackmodels
const int m_nbins
 number of bins in histograms in radius coordinate
const int m_nbins_plus3
 number of bins in histograms in radius coordinate
const int m_nbins_angle
 number of bins in histograms in angle coordinate
const double m_detectorsize
 range of radius coordinate
const double m_detectorsize_angle
 range of angle coordinate
double m_binwidthx
 x-binwidth of histogram
double m_binwidthy
 y-binwidth of histogram
double m_stepsize
 stepsize of transform for radius coordinate
double m_stepsize_per_angle
 stepsize of transform for angle coordinate
bool m_ip_setting
 use settings for patterns originating from origin
const int m_number_of_sectors
 number of histograms (1 for cosmics 16 for rz)

Private Member Functions

void initMessaging () const
 Initialize our message level and MessageSvc.

Private Attributes

std::string m_nm
 Message source name.
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels)
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer.
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level.
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging)

Detailed Description

abstract base class for hough transform with carthesian coordinates

Definition at line 11 of file MuonHoughTransformer_xyz.h.

Constructor & Destructor Documentation

◆ MuonHoughTransformer_xyz()

MuonHoughTransformer_xyz::MuonHoughTransformer_xyz ( int nbins,
int nbins_angle,
double detectorsize,
double detectorsize_angle,
double threshold_histo,
int number_of_sectors = 1 )
protected

constructor

Definition at line 8 of file MuonHoughTransformer_xyz.cxx.

9 :
10 MuonHoughTransformer("MuonHoughTransformer_xyz", nbins, nbins_angle, detectorsize, detectorsize_angle, threshold_histo, number_of_sectors) {
13}
double m_weight_constant_radius
weight constant of patterns in radius coordinate
bool m_add_weight_radius
use weight of patterns in radius coordinate
MuonHoughTransformer(const std::string &tr_name, int nbins, int nbins_angle, double detectorsize, double detectorsize_angle, double threshold_histo, int number_of_sectors=1)
constructor, input values are those of histograms

◆ ~MuonHoughTransformer_xyz()

virtual MuonHoughTransformer_xyz::~MuonHoughTransformer_xyz ( )
virtualdefault

destructor

Member Function Documentation

◆ associateHitsToBinnumber()

std::unique_ptr< MuonHoughPattern > MuonHoughTransformer::associateHitsToBinnumber ( const MuonHoughHitContainer & event,
int binnumber,
double maximum_residu_mm,
double maximum_residu_angle,
int sector = 0 ) const
inherited

associate hits to certain binnumber and sector

Definition at line 96 of file MuonHoughTransformer.cxx.

97 {
98 ATH_MSG_VERBOSE("associateHitsToBinnumber() -- sector "<<sector<<",binnumber "<<binnumber<<
99 " maximum of histogram: " << m_histos.getHisto(sector)->getBinContent(binnumber));
100
101 std::pair<double, double> coordsmaximum = m_histos.getHisto(sector)->binnumberToCoords(binnumber);
102 std::unique_ptr<MuonHoughPattern> houghpattern = hookAssociateHitsToMaximum(event, coordsmaximum,
103 maximum_residu_mm, maximum_residu_angle, sector);
104 houghpattern->setMaximumHistogram(m_histos.getHisto(sector)->getBinContent(binnumber));
105 return houghpattern;
106}
#define ATH_MSG_VERBOSE(x)
MuonHoughHisto2DContainer m_histos
histogram container
virtual std::unique_ptr< MuonHoughPattern > hookAssociateHitsToMaximum(const MuonHoughHitContainer &event, std::pair< double, double > coordsmaximum, double residu_mm, double residu_angle, int sector) const =0
pure virtual method for derived class implementation of associateHitsToMaximum method
virtual int sector(const std::shared_ptr< MuonHoughHit > &hit) const =0
returns sector for coords

◆ associateHitsToCoords()

std::unique_ptr< MuonHoughPattern > MuonHoughTransformer::associateHitsToCoords ( const MuonHoughHitContainer & event,
std::pair< double, double > coords,
double residu_mm,
double residu_angle,
int sector = 0 ) const
inherited

associate hits to certain coordinates and sector

Definition at line 91 of file MuonHoughTransformer.cxx.

92 {
93 return hookAssociateHitsToMaximum(event, coordsmaximum, maximum_residu_mm, maximum_residu_angle, sector);
94}

◆ associateHitsToMaximum()

std::unique_ptr< MuonHoughPattern > MuonHoughTransformer::associateHitsToMaximum ( const MuonHoughHitContainer & event,
double residu_mm,
double residu_grad,
int maximum_number ) const
inherited

associate hits to certain maximum number of histograms

Definition at line 63 of file MuonHoughTransformer.cxx.

64 {
65 std::unique_ptr<MuonHoughPattern> houghpattern{};
66 std::pair<double, double> coordsmaximum;
67 std::pair<int, int> maximumbin;
68 maximumbin = m_histos.getMaximumBinnumber();
69
70 int sector = maximumbin.first;
71
72 if (sector != -1) {
73 coordsmaximum = m_histos.getHisto(sector)->getCoordsMaximum(maximum_number);
74 if (maximumbin.second == -1){ // no maximum, no bin above threshold
75 ATH_MSG_VERBOSE("No Maximum Found");
76 return nullptr;
77 }
78 ATH_MSG_VERBOSE("maximum binnumber of histogram: " << maximumbin.second
79 << " value: " << m_histos.getHisto(sector)->getBinContent(maximumbin.second));
80 ATH_MSG_VERBOSE(" coordinates: " << coordsmaximum.first << " second " << coordsmaximum.second<<" sector: "<<sector);
81 houghpattern = hookAssociateHitsToMaximum(event, coordsmaximum, maximum_residu_mm, maximum_residu_grad, sector);
82 if (houghpattern) { houghpattern->setMaximumHistogram(m_histos.getHisto(sector)->getBinContent(maximumbin.second)); }
83 } else {
84 ATH_MSG_VERBOSE("No Maximum Found sector is -1");
85 return nullptr;
86 }
87
88 return houghpattern;
89}

◆ calculateAngle()

double MuonHoughTransformer_xyz::calculateAngle ( double hitx,
double hity,
double r0 )
static

calcalates the phi angle for a given hit and r0

Definition at line 103 of file MuonHoughTransformer_xyz.cxx.

103 {
104 double phi = 0;
105 double height_squared = hitx * hitx + hity * hity - r0 * r0;
106 if (height_squared >= 0) {
107 double height = std::sqrt(height_squared);
108 phi = std::atan2(hity, hitx) + std::atan2(r0, height);
109 }
110
111 else {
112 phi = std::atan2(hity, hitx);
113 }
114
115 if (phi < 0) { phi += MuonHough::two_Pi; }
117
118 return phi;
119}
Scalar phi() const
phi method
constexpr double two_Pi
const double r0
electron radius{cm}

◆ fill()

void MuonHoughTransformer::fill ( const MuonHoughHitContainer & event,
bool subtract = false )
virtualinherited

fill histograms with hitcontainer

Definition at line 47 of file MuonHoughTransformer.cxx.

47 {
48 m_eventsize = event.size();
49 m_eventsize_weightfactor = 20. * std::sqrt(m_eventsize) / std::sqrt(7000.);
50 if (subtract) {
51 // invalidate maxima
52 for (int i = 0; i < m_histos.size(); ++i) m_histos.getHisto(i)->setMaximumIsValid(false);
53
54 for (unsigned int hitid = 0; hitid < m_eventsize; hitid++) {
55 std::shared_ptr<MuonHoughHit> hit = event.getHit(hitid);
56 if (hit->getAssociated()) fillHit(hit, -1. * hit->getWeight());
57 }
58 } else {
59 for (unsigned int hitid = 0; hitid < m_eventsize; hitid++) { fillHit(event.getHit(hitid), event.getHit(hitid)->getWeight()); }
60 }
61}
virtual void fillHit(const std::shared_ptr< MuonHoughHit > &hit, double weight=1.)=0
fill histograms with hit
unsigned int m_eventsize
size of event to be filled (can be used for weighting)
double m_eventsize_weightfactor
weightfactor based on eventsize (used in curved hough transform)

◆ fillHisto()

int MuonHoughTransformer_xyz::fillHisto ( double r0,
double phi,
double weight,
int sector )
finaloverridevirtual

fill transformed values in histogram

Implements MuonHoughTransformer.

Definition at line 46 of file MuonHoughTransformer_xyz.cxx.

47{
48 MuonHoughHisto2D* histo = m_histos.getHisto(sector);
49
50 const int filled_binnumber = histo->fill(r0, phi, weight);
51
52 // applying a 'butterfly' weighting effect:
53 bool butterfly = true;
54 if (butterfly) {
55 // nearby sectors:
56 if (m_number_of_sectors >= 3) {
57 double third_weight = weight / 3.;
58 if (sector != 0 && sector != m_number_of_sectors - 1) {
59 m_histos.getHisto(sector + 1)->fill(filled_binnumber, third_weight);
60 m_histos.getHisto(sector - 1)->fill(filled_binnumber, third_weight);
61 } else if (sector == 0) {
62 m_histos.getHisto(sector + 1)->fill(filled_binnumber, third_weight);
63 } else // sector == m_number_of_sectors - 1
64 {
65 m_histos.getHisto(sector - 1)->fill(filled_binnumber, third_weight);
66 }
67 }
68
69 double half_weight = 0.5 * weight;
70
71 histo->fill(filled_binnumber - 1, half_weight);
72 histo->fill(filled_binnumber + 1, half_weight);
73
74 const int upperright = filled_binnumber + m_nbins_plus3;
75 const int lowerleft = filled_binnumber - m_nbins_plus3;
76
77 if (phi - m_binwidthy < 0) {
78 histo->fill(r0 - m_binwidthx, phi - m_binwidthy + m_detectorsize_angle, half_weight); // should calculate binnumber..
79 histo->fill(upperright, half_weight);
81 histo->fill(r0 + m_binwidthx, phi - m_binwidthy + m_detectorsize_angle, -half_weight);
82 histo->fill(upperright - 2, -half_weight);
83 }
84 } else if (phi + m_binwidthy > m_detectorsize_angle) {
85 histo->fill(lowerleft, half_weight);
86 histo->fill(r0 + m_binwidthx, phi + m_binwidthy - m_detectorsize_angle, half_weight);
88 histo->fill(lowerleft + 2, -half_weight);
89 histo->fill(r0 - m_binwidthx, phi + m_binwidthy - m_detectorsize_angle, -half_weight);
90 }
91 } else {
92 histo->fill(lowerleft, half_weight);
93 histo->fill(upperright, half_weight);
95 histo->fill(lowerleft + 2, -half_weight);
96 histo->fill(upperright - 2, -half_weight);
97 }
98 }
99 }
100 return filled_binnumber;
101}
int sector(const std::shared_ptr< MuonHoughHit > &hit) const override final
returns the rz sector
const double m_detectorsize_angle
range of angle coordinate
bool m_use_negative_weights
use of negative weights
const int m_number_of_sectors
number of histograms (1 for cosmics 16 for rz)
double m_binwidthx
x-binwidth of histogram
const int m_nbins_plus3
number of bins in histograms in radius coordinate
double m_binwidthy
y-binwidth of histogram

◆ fillHit()

void MuonHoughTransformer_xyz::fillHit ( const std::shared_ptr< MuonHoughHit > & hit,
double weight )
finaloverridevirtual

fill hit in histogram

Implements MuonHoughTransformer.

Definition at line 15 of file MuonHoughTransformer_xyz.cxx.

15 {
16 double radius = hit->getRadius();
17 double hitx = hit->getHitx();
18 double hity = hit->getHity();
19 int sectorhit = sector(hit);
20 double dotprod{0.};
21
22 if (m_ip_setting) {
23 std::pair<double, double> endpoints = getEndPointsFillLoop(radius, m_stepsize, sectorhit);
24 for (double r0 = endpoints.first; r0 < endpoints.second; r0 += m_stepsize) {
25 double phi = calculateAngle(hitx, hity, r0);
26 CxxUtils::sincos scphi(phi);
27 dotprod = scphi.apply(hity, hitx); // hity * sincosphi[0] + hitx * sincosphi[1];
28 if (dotprod >= 0) {
29 double phi_in_grad = phi * MuonHough::rad_degree_conversion_factor;
30 fillHisto(r0, phi_in_grad, weight, sectorhit);
31 }
32 }
33 } // m_ip_setting
34
35 else // m_ip_setting == false
36 {
38 double phi_in_rad = MuonHough::degree_rad_conversion_factor * phi;
39 CxxUtils::sincos scphi(phi_in_rad);
40 double r0 = scphi.apply(hitx, -hity);
41 fillHisto(r0, phi, weight, sectorhit);
42 }
43 }
44}
double getHity() const
returns y position
double getRadius() const
returns radius
double getHitx() const
returns x position
static double calculateAngle(double hitx, double hity, double r0)
calcalates the phi angle for a given hit and r0
int fillHisto(double r0, double phi, double weight, int sector) override final
fill transformed values in histogram
bool m_ip_setting
use settings for patterns originating from origin
double m_stepsize_per_angle
stepsize of transform for angle coordinate
double m_stepsize
stepsize of transform for radius coordinate
std::pair< double, double > getEndPointsFillLoop(double radius, double stepsize, int sector) const
returns begin and end value of the filling loop
constexpr double degree_rad_conversion_factor
constexpr double rad_degree_conversion_factor

◆ getEndPointsFillLoop()

std::pair< double, double > MuonHoughTransformer::getEndPointsFillLoop ( double radius,
double stepsize,
int sector ) const
protectedinherited

returns begin and end value of the filling loop

Definition at line 108 of file MuonHoughTransformer.cxx.

108 {
109 std::pair<double, double> endpoints(-radius + 0.00001, radius); // why +0.00001?
110
111 if (-radius < m_histos.getHisto(sector)->getXmin()) // randomizer to avoid binning effects
112 {
113 endpoints.first = m_histos.getHisto(sector)->getXmin() + 0.5 * stepsize; // no randomizer! no radius constraint
114 }
115
116 if (radius > m_histos.getHisto(sector)->getXmax()) { endpoints.second = m_histos.getHisto(sector)->getXmax(); }
117 return endpoints;
118}

◆ getHitPos()

virtual std::pair< double, double > MuonHoughTransformer_xyz::getHitPos ( const MuonHoughHitContainer & event,
int hitid ) const
pure virtual

returns the relevant 2d hit position

Implemented in MuonHoughTransformer_xy, and MuonHoughTransformer_yz.

◆ getMaxima()

std::vector< std::pair< int, int > > MuonHoughTransformer::getMaxima ( int max_patterns) const
inherited

return the first certain number of maxima of histograms

Definition at line 122 of file MuonHoughTransformer.cxx.

122 {
123 std::vector<std::pair<int, int> > maximumbins; // sorted
124
125 std::vector<std::pair<std::pair<int, int>, double> > maxima;
126
127 for (int sector = 0; sector < m_number_of_sectors; sector++) // to be made more general when m_number_of_sectors ==1 e.g.
128 {
129 std::pair<int, double> maximumbin = m_histos.getHisto(sector)->getMax();
130 std::pair<std::pair<int, int>, double> maximum;
131 maximum.first.first = sector;
132 maximum.first.second = maximumbin.first;
133 maximum.second = maximumbin.second;
134 maxima.push_back(maximum);
135 }
136
137 sort(maxima.begin(), maxima.end(), maximaCompare());
138
139 unsigned int count_maxima = 0; // should be iterator
140 int number_of_patterns = 0;
141 std::set<int> sectors; // sectors that are already used
142 const unsigned int size = maxima.size();
143 while (count_maxima != size && number_of_patterns != max_patterns) {
144 std::pair<int, int> maximumbin = maxima[count_maxima].first;
145
146 bool check = true; // check if sector is not nearby a sector already chosen
147 int sector = maximumbin.first;
148
149 if (sectors.find(sector) != sectors.end()) { check = false; }
150
151 if (check) {
152 maximumbins.push_back(maximumbin);
153 sectors.insert(maximumbin.first);
154
155 int sectormin = sector - 1;
156 int sectorplus = sector + 1;
157 if (sectormin < 0) { sectormin = m_number_of_sectors; }
158 if (sectorplus > m_number_of_sectors) { sectorplus = 0; }
159
160 sectors.insert(sectormin);
161 sectors.insert(sectorplus);
162
163 if (m_number_of_sectors > 20 && maximumbin.first % 2 == 1) // hack for new single and overlap filling curved transform!
164 {
165 int sectorminmin = sectormin - 1;
166 int sectorplusplus = sectorplus + 1;
167 sectors.insert(sectorminmin);
168 sectors.insert(sectorplusplus);
169 }
170
171 count_maxima++;
172 number_of_patterns++;
173 } else {
174 count_maxima++;
175 }
176 }
177
178 return maximumbins;
179}
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.

◆ histos()

const MuonHoughHisto2DContainer & MuonHoughTransformer::histos ( ) const
inlineinherited

access to histograms

Definition at line 60 of file MuonHoughTransformer.h.

60{ return m_histos; }

◆ hookAssociateHitsToMaximum()

std::unique_ptr< MuonHoughPattern > MuonHoughTransformer_xyz::hookAssociateHitsToMaximum ( const MuonHoughHitContainer & event,
std::pair< double, double > coordsmaximum,
double residu_mm,
double residu_grad,
int sector ) const
finaloverrideprotectedvirtual

associate hits to maximum found

Implements MuonHoughTransformer.

Definition at line 121 of file MuonHoughTransformer_xyz.cxx.

123 {
124 std::unique_ptr<MuonHoughPattern> houghpattern{initialiseHoughPattern()};
125 ATH_MSG_DEBUG("MuonHoughTransformer_xyz::hookAssociateHitsToMaximum (start)");
126
127
128 double ephi{0.}, eradius{0.}, sin_phi{0.}, cos_phi{0.};
129 double dotprod{0.}, etheta{0.}, residu_distance{0.};
130
131 ATH_MSG_DEBUG("MuonHoughTransformer_xyz::size_event: " << event.size() );
132 ATH_MSG_DEBUG("MuonHoughTransformer_xyz::found_maximum: r: " << coordsmaximum.first << " phi: " << coordsmaximum.second
133 << " sector: " << max_sector);
134
135
136
137 double phimax = m_muonhoughmathutils.angleFromGradToRadial(coordsmaximum.second);
138 CxxUtils::sincos scphimax(phimax);
139
140 int max_secmax = max_sector + 1;
141 int max_secmin = max_sector - 1;
142 if (max_secmin < 0) max_secmin = max_sector;
143 if (max_secmax > m_number_of_sectors - 1) max_secmax = max_sector;
144
145 for (unsigned int i = 0; i < event.size(); i++) {
146 double hitx = event.getHitx(i);
147 double hity = event.getHity(i);
148 double hitz = event.getHitz(i);
149
150 double radiushit = std::sqrt(hitx * hitx + hity * hity);
151 int sectorhit = sector(event.getHit(i));
152
153 if (sectorhit == max_sector || sectorhit == max_secmin || sectorhit == max_secmax) {
154 if (!m_ip_setting) {
155 dotprod = 1.;
156 } else {
157 dotprod = scphimax.apply(getHitPos(event, i).second,
158 getHitPos(event, i).first);
159 }
160 if (dotprod >= 0) {
161 residu_distance = -coordsmaximum.first +
162 scphimax.apply(getHitPos(event, i).first,
163 -getHitPos(event, i).second);
164 ATH_MSG_VERBOSE("MuonHoughTransformer_xyz::hitx: " << getHitPos(event, i).first
165 << " hity: " << getHitPos(event, i).second << " dotprod: " << dotprod << " sector: "
166 << sectorhit<<",residu_distance: " << residu_distance);
167
168 if (std::abs(residu_distance) < max_residu_mm) {
169 houghpattern->addHit(event.getHit(i));
170
171 ATH_MSG_VERBOSE("MuonHoughTransformer_xyz::hit added to houghpattern!");
172 ATH_MSG_VERBOSE(" hit already earlier associated to pattern!");
173
174 event.getHit(i)->setAssociated(true);
175
176 double phi = calculateAngle(hitx, hity, coordsmaximum.first);
177
178 double thetah = std::atan2(radiushit, hitz);
179 ATH_MSG_VERBOSE(" X Y hit added to hough pattern phi hit " << std::atan2(event.getHity(i), event.getHitx(i))
180 << " phi_calc: " << phi << " phi all " << phimax << " theta hit " << thetah );
181
182
183 etheta += thetah;
184 CxxUtils::sincos scphi(phi);
185
186 sin_phi += scphi.sn;
187 cos_phi += scphi.cs;
188
189 double radius = MuonHoughMathUtils::signedDistanceOfLineToOrigin2D(event.getHitx(i), event.getHity(i), phimax);
190 eradius += radius;
191 ATH_MSG_VERBOSE(" calculateAngle: " << phi << " calculateradius: " << radius);
192 }
193 } // dotprod >=0
194 } // sector requirement
195 } // size
196
197 eradius = eradius / (houghpattern->size() + 0.0001);
198 etheta = etheta / (houghpattern->size() + 0.0001);
199 ephi = std::atan2(sin_phi, cos_phi);
200
201 ATH_MSG_VERBOSE("ephi: " << ephi << " eradius: " << eradius << " etheta " << etheta);
202
203 if (m_ip_setting)
204 houghpattern->setEPhi(ephi);
205 else {
206 houghpattern->setEPhi(phimax);
207 }
208
209 houghpattern->setERPhi(coordsmaximum.first);
210 houghpattern->setETheta(etheta);
211
212 if (!houghpattern->empty() && std::abs(std::sin(houghpattern->getEPhi() - phimax)) > 0.05) {
213 ATH_MSG_WARNING("MuonHoughTransformer_xyz:: Ephi calculation went wrong -- histo radius: "
214 << coordsmaximum.first << " phi: " << phimax <<", ephi: " << ephi);
215 houghpattern->setEPhi(MuonHoughMathUtils::angleFromMinusPiToPi(phimax));
216 houghpattern->setERPhi(coordsmaximum.first);
217 }
218
219 if (!m_ip_setting) {
220 houghpattern->updateParametersRPhi(true); // switch off ip constraint! (cosmics==true), on by default (cosmics== false)
221
222 ATH_MSG_VERBOSE("updateParameterstheta new phi (phi flipped Pi for cosmics): " << houghpattern->getEPhi()
223 << " old phi: " << phimax <<" new r0: " << houghpattern->getERPhi()
224 << " old r0: " << coordsmaximum.first);
225 }
226
227 return houghpattern;
228}
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
static double signedDistanceOfLineToOrigin2D(double x, double y, double phi)
signed distance of line with point (x,y) and angle phi to origin
static double angleFromMinusPiToPi(double angle)
computes angle in rad between -Pi and Pi
virtual std::unique_ptr< MuonHoughPattern > initialiseHoughPattern() const =0
build new houghpattern
virtual std::pair< double, double > getHitPos(const MuonHoughHitContainer &event, int hitid) const =0
returns the relevant 2d hit position
MuonHoughMathUtils m_muonhoughmathutils
object for use of mathematical formulas for trackmodels

◆ initialiseHoughPattern()

virtual std::unique_ptr< MuonHoughPattern > MuonHoughTransformer_xyz::initialiseHoughPattern ( ) const
pure virtual

build new houghpattern

Implemented in MuonHoughTransformer_xy, and MuonHoughTransformer_yz.

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40{
42 // If user did not set an explicit level, set a default
43 if (m_lvl == MSG::NIL) {
44 m_lvl = m_imsg ?
45 static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
46 MSG::INFO;
47 }
48}
std::string m_nm
Message source name.
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
std::atomic< MSG::Level > m_lvl
Current logging level.
IMessageSvc * getMessageSvc(bool quiet=false)

◆ msg() [1/2]

MsgStream & AthMessaging::msg ( ) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 163 of file AthMessaging.h.

164{
165 MsgStream* ms = m_msg_tls.get();
166 if (!ms) {
167 if (!m_initialized.test_and_set()) initMessaging();
168 ms = new MsgStream(m_imsg,m_nm);
169 m_msg_tls.reset( ms );
170 }
171
172 ms->setLevel (m_lvl);
173 return *ms;
174}
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels)
void initMessaging() const
Initialize our message level and MessageSvc.

◆ msg() [2/2]

MsgStream & AthMessaging::msg ( const MSG::Level lvl) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 178 of file AthMessaging.h.

179{ return msg() << lvl; }
MsgStream & msg() const
The standard message stream.

◆ msgLvl()

bool AthMessaging::msgLvl ( const MSG::Level lvl) const
inlineinherited

Test the output level.

Parameters
lvlThe message level to test against
Returns
boolean Indicating if messages at given level will be printed
Return values
trueMessages at level "lvl" will be printed

Definition at line 151 of file AthMessaging.h.

152{
153 if (m_lvl <= lvl) {
154 msg() << lvl;
155 return true;
156 } else {
157 return false;
158 }
159}

◆ resetHisto()

void MuonHoughTransformer::resetHisto ( )
inherited

reset histograms

Definition at line 120 of file MuonHoughTransformer.cxx.

120{ m_histos.reset(); }

◆ sector()

int MuonHoughTransformer_xyz::sector ( const std::shared_ptr< MuonHoughHit > & hit) const
finaloverridevirtual

returns the rz sector

Implements MuonHoughTransformer.

Definition at line 238 of file MuonHoughTransformer_xyz.cxx.

238 {
239 double radius = hit->getRadius();
240 double hitz = hit->getHitz();
241
242 // returns the sector number of the hit 0..m_number_of_sectors-1
243
244 // Peter Kluit correction
245 double theta = std::atan2(radius, hitz); // radius>0 : theta: [0,Pi]
246
247 int sectorhit = static_cast<int>(theta * m_number_of_sectors / M_PI);
248 if (sectorhit == m_number_of_sectors) sectorhit += -1; // could happen in rare cases
249 return sectorhit; // only valid for xy!! yz to be done (or to be abondoned)
250}
#define M_PI
Scalar theta() const
theta method
double getHitz() const
returns z position

◆ setIP()

void MuonHoughTransformer::setIP ( bool ip_setting)
inlineinherited

set m_ip_setting (e.g.

to not split patterns)

Definition at line 140 of file MuonHoughTransformer.h.

140{ m_ip_setting = ip_setting; }

◆ setLevel()

void AthMessaging::setLevel ( MSG::Level lvl)
inherited

Change the current logging level.

Use this rather than msg().setLevel() for proper operation with MT.

Definition at line 28 of file AthMessaging.cxx.

29{
30 m_lvl = lvl;
31}

◆ useNegativeWeights()

void MuonHoughTransformer::useNegativeWeights ( bool use_negative_weights)
inlineinherited

use negative weights

Definition at line 141 of file MuonHoughTransformer.h.

141{ m_use_negative_weights = use_negative_weights; }

◆ weightHoughTransform()

float MuonHoughTransformer_xyz::weightHoughTransform ( double r0) const
finaloverridevirtual

put weight on houghtransform dependent on r0

Implements MuonHoughTransformer.

Definition at line 230 of file MuonHoughTransformer_xyz.cxx.

230 {
232 return (1. / (std::abs(r0 / m_weight_constant_radius) + 1.));
233 } else {
234 return 1;
235 } // weight function, to give more importance to patterns close to origin
236}

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::atomic_flag m_initialized AthMessaging::ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
mutableprivateinherited

Messaging initialized (initMessaging)

Definition at line 141 of file AthMessaging.h.

◆ m_add_weight_angle

bool MuonHoughTransformer::m_add_weight_angle
protectedinherited

use weight of patterns in angle coordinate

Definition at line 90 of file MuonHoughTransformer.h.

◆ m_add_weight_radius

bool MuonHoughTransformer::m_add_weight_radius
protectedinherited

use weight of patterns in radius coordinate

Definition at line 94 of file MuonHoughTransformer.h.

◆ m_binwidthx

double MuonHoughTransformer::m_binwidthx
protectedinherited

x-binwidth of histogram

Definition at line 115 of file MuonHoughTransformer.h.

◆ m_binwidthy

double MuonHoughTransformer::m_binwidthy
protectedinherited

y-binwidth of histogram

Definition at line 117 of file MuonHoughTransformer.h.

◆ m_detectorsize

const double MuonHoughTransformer::m_detectorsize
protectedinherited

range of radius coordinate

Definition at line 111 of file MuonHoughTransformer.h.

◆ m_detectorsize_angle

const double MuonHoughTransformer::m_detectorsize_angle
protectedinherited

range of angle coordinate

Definition at line 113 of file MuonHoughTransformer.h.

◆ m_eventsize

unsigned int MuonHoughTransformer::m_eventsize
protectedinherited

size of event to be filled (can be used for weighting)

Definition at line 85 of file MuonHoughTransformer.h.

◆ m_eventsize_weightfactor

double MuonHoughTransformer::m_eventsize_weightfactor
protectedinherited

weightfactor based on eventsize (used in curved hough transform)

Definition at line 87 of file MuonHoughTransformer.h.

◆ m_histos

MuonHoughHisto2DContainer MuonHoughTransformer::m_histos
protectedinherited

histogram container

Definition at line 79 of file MuonHoughTransformer.h.

◆ m_imsg

std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr }
mutableprivateinherited

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

135{ nullptr };

◆ m_ip_setting

bool MuonHoughTransformer::m_ip_setting
protectedinherited

use settings for patterns originating from origin

Definition at line 125 of file MuonHoughTransformer.h.

◆ m_lvl

std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL }
mutableprivateinherited

Current logging level.

Definition at line 138 of file AthMessaging.h.

138{ MSG::NIL };

◆ m_msg_tls

boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls
mutableprivateinherited

MsgStream instance (a std::cout like with print-out levels)

Definition at line 132 of file AthMessaging.h.

◆ m_muonhoughmathutils

MuonHoughMathUtils MuonHoughTransformer::m_muonhoughmathutils
protectedinherited

object for use of mathematical formulas for trackmodels

Definition at line 102 of file MuonHoughTransformer.h.

◆ m_nbins

const int MuonHoughTransformer::m_nbins
protectedinherited

number of bins in histograms in radius coordinate

Definition at line 105 of file MuonHoughTransformer.h.

◆ m_nbins_angle

const int MuonHoughTransformer::m_nbins_angle
protectedinherited

number of bins in histograms in angle coordinate

Definition at line 109 of file MuonHoughTransformer.h.

◆ m_nbins_plus3

const int MuonHoughTransformer::m_nbins_plus3
protectedinherited

number of bins in histograms in radius coordinate

Definition at line 107 of file MuonHoughTransformer.h.

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ m_number_of_sectors

const int MuonHoughTransformer::m_number_of_sectors
protectedinherited

number of histograms (1 for cosmics 16 for rz)

Definition at line 128 of file MuonHoughTransformer.h.

◆ m_stepsize

double MuonHoughTransformer::m_stepsize
protectedinherited

stepsize of transform for radius coordinate

Definition at line 120 of file MuonHoughTransformer.h.

◆ m_stepsize_per_angle

double MuonHoughTransformer::m_stepsize_per_angle
protectedinherited

stepsize of transform for angle coordinate

Definition at line 122 of file MuonHoughTransformer.h.

◆ m_threshold_histo

double MuonHoughTransformer::m_threshold_histo
protectedinherited

threshold of histograms

Definition at line 82 of file MuonHoughTransformer.h.

◆ m_use_negative_weights

bool MuonHoughTransformer::m_use_negative_weights
protectedinherited

use of negative weights

Definition at line 99 of file MuonHoughTransformer.h.

◆ m_weight_constant_angle

double MuonHoughTransformer::m_weight_constant_angle
protectedinherited

weight constant of patterns in angle coordinate

Definition at line 92 of file MuonHoughTransformer.h.

◆ m_weight_constant_radius

double MuonHoughTransformer::m_weight_constant_radius
protectedinherited

weight constant of patterns in radius coordinate

Definition at line 96 of file MuonHoughTransformer.h.


The documentation for this class was generated from the following files: