ATLAS Offline Software
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
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 More...
 
void fillHit (const std::shared_ptr< MuonHoughHit > &hit, double weight) override final
 fill hit in histogram More...
 
int fillHisto (double r0, double phi, double weight, int sector) override final
 fill transformed values in histogram More...
 
int sector (const std::shared_ptr< MuonHoughHit > &hit) const override final
 returns the rz sector More...
 
virtual std::unique_ptr< MuonHoughPatterninitialiseHoughPattern () const =0
 build new houghpattern More...
 
float weightHoughTransform (double r0) const override final
 put weight on houghtransform dependent on r0 More...
 
virtual std::pair< double, double > getHitPos (const MuonHoughHitContainer &event, int hitid) const =0
 returns the relevant 2d hit position More...
 
virtual void fill (const MuonHoughHitContainer &event, bool subtract=false)
 fill histograms with hitcontainer More...
 
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 More...
 
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 More...
 
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 More...
 
void resetHisto ()
 reset histograms More...
 
void useNegativeWeights (bool use_negative_weights)
 use negative weights More...
 
std::vector< std::pair< int, int > > getMaxima (int max_patterns) const
 return the first certain number of maxima of histograms More...
 
void setIP (bool ip_setting)
 set m_ip_setting (e.g. More...
 
const MuonHoughHisto2DContainerhistos () const
 access to histograms More...
 
bool msgLvl (const MSG::Level lvl) const
 Test the output level. More...
 
MsgStream & msg () const
 The standard message stream. More...
 
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream. More...
 
void setLevel (MSG::Level lvl)
 Change the current logging level. More...
 

Static Public Member Functions

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

Protected Member Functions

 MuonHoughTransformer_xyz (int nbins, int nbins_angle, double detectorsize, double detectorsize_angle, double threshold_histo, int number_of_sectors=1)
 constructor More...
 
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 More...
 
std::pair< double, double > getEndPointsFillLoop (double radius, double stepsize, int sector) const
 returns begin and end value of the filling loop More...
 

Protected Attributes

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

Private Member Functions

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

Private Attributes

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

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) {
11  m_add_weight_radius = true;
13 }

◆ ~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 }

◆ 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 }

◆ 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 }

◆ 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 {
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 }

◆ 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 }

◆ 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_yz, and MuonHoughTransformer_xy.

◆ 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 }

◆ 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 }

◆ initialiseHoughPattern()

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

build new houghpattern

Implemented in MuonHoughTransformer_yz, and MuonHoughTransformer_xy.

◆ 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  m_lvl = m_imsg ?
43  static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
44  MSG::INFO;
45 }

◆ 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 164 of file AthMessaging.h.

165 {
166  MsgStream* ms = m_msg_tls.get();
167  if (!ms) {
168  if (!m_initialized.test_and_set()) initMessaging();
169  ms = new MsgStream(m_imsg,m_nm);
170  m_msg_tls.reset( ms );
171  }
172 
173  ms->setLevel (m_lvl);
174  return *ms;
175 }

◆ 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 179 of file AthMessaging.h.

180 { return msg() << lvl; }

◆ 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_initialized.test_and_set()) initMessaging();
154  if (m_lvl <= lvl) {
155  msg() << lvl;
156  return true;
157  } else {
158  return false;
159  }
160 }

◆ 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 }

◆ 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  {
231  if (m_add_weight_radius) {
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.

◆ 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.

◆ 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:
AthMessaging::m_lvl
std::atomic< MSG::Level > m_lvl
Current logging level.
Definition: AthMessaging.h:138
MuonHough::degree_rad_conversion_factor
constexpr double degree_rad_conversion_factor
Definition: MuonHoughMathUtils.h:17
MuonHoughHisto2D::getBinContent
double getBinContent(int binnumber) const
returns x axis
Definition: MuonHoughHisto2D.h:205
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
MuonHoughHisto2DContainer::getHisto
MuonHoughHisto2D * getHisto(int id) const
return histogram at place id
Definition: MuonHoughHisto2DContainer.h:39
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
MuonHoughHisto2D::getMax
std::pair< int, double > getMax() const
returns binnumber and maximum of histogram (doesn't use m_bins_above_threshold)
Definition: MuonHoughHisto2D.cxx:87
MuonHoughTransformer::m_muonhoughmathutils
MuonHoughMathUtils m_muonhoughmathutils
object for use of mathematical formulas for trackmodels
Definition: MuonHoughTransformer.h:102
MuonHoughHit::getHitz
double getHitz() const
returns z position
Definition: MuonHoughHit.h:161
MuonHoughHisto2D::setMaximumIsValid
void setMaximumIsValid(bool flag)
Definition: MuonHoughHisto2D.h:115
MuonHoughTransformer::m_weight_constant_radius
double m_weight_constant_radius
weight constant of patterns in radius coordinate
Definition: MuonHoughTransformer.h:96
MuonHoughHit::getHitx
double getHitx() const
returns x position
Definition: MuonHoughHit.h:159
MuonHoughTransformer_xyz::calculateAngle
static double calculateAngle(double hitx, double hity, double r0)
calcalates the phi angle for a given hit and r0
Definition: MuonHoughTransformer_xyz.cxx:103
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:71
M_PI
#define M_PI
Definition: ActiveFraction.h:11
MuonHoughHisto2DContainer::size
int size() const
returns size of container
Definition: MuonHoughHisto2DContainer.h:38
MuonHoughTransformer::m_use_negative_weights
bool m_use_negative_weights
use of negative weights
Definition: MuonHoughTransformer.h:99
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
MuonHoughHit::getHity
double getHity() const
returns y position
Definition: MuonHoughHit.h:160
MuonHoughTransformer::m_nbins_plus3
const int m_nbins_plus3
number of bins in histograms in radius coordinate
Definition: MuonHoughTransformer.h:107
MuonHoughTransformer::m_histos
MuonHoughHisto2DContainer m_histos
histogram container
Definition: MuonHoughTransformer.h:79
AthMessaging::m_imsg
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
Definition: AthMessaging.h:135
python.SystemOfUnits.ms
int ms
Definition: SystemOfUnits.py:132
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
std::sort
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
Definition: DVL_algorithms.h:554
MuonHoughTransformer::MuonHoughTransformer
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
Definition: MuonHoughTransformer.cxx:11
MuonHoughTransformer::m_binwidthx
double m_binwidthx
x-binwidth of histogram
Definition: MuonHoughTransformer.h:115
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
MuonHoughTransformer::m_eventsize_weightfactor
double m_eventsize_weightfactor
weightfactor based on eventsize (used in curved hough transform)
Definition: MuonHoughTransformer.h:87
MuonHoughTransformer::hookAssociateHitsToMaximum
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
SCT_CalibAlgs::nbins
@ nbins
Definition: SCT_CalibNumbers.h:10
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
MuonHoughTransformer::m_detectorsize_angle
const double m_detectorsize_angle
range of angle coordinate
Definition: MuonHoughTransformer.h:113
MuonHoughTransformer::m_stepsize
double m_stepsize
stepsize of transform for radius coordinate
Definition: MuonHoughTransformer.h:120
MuonHoughHisto2DContainer::reset
void reset() const
resets histograms
Definition: MuonHoughHisto2DContainer.cxx:26
TrigConf::MSGTC::Level
Level
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStream.h:21
MuonHough::rad_degree_conversion_factor
constexpr double rad_degree_conversion_factor
Definition: MuonHoughMathUtils.h:18
event
POOL::TEvent event(POOL::TEvent::kClassAccess)
lumiFormat.i
int i
Definition: lumiFormat.py:92
MuonHoughMathUtils::angleFromMinusPiToPi
static double angleFromMinusPiToPi(double angle)
computes angle in rad between -Pi and Pi
Definition: MuonHoughMathUtils.cxx:56
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MuonHoughMathUtils::signedDistanceOfLineToOrigin2D
static double signedDistanceOfLineToOrigin2D(double x, double y, double phi)
signed distance of line with point (x,y) and angle phi to origin
Definition: MuonHoughMathUtils.cxx:110
MuonHoughTransformer::m_stepsize_per_angle
double m_stepsize_per_angle
stepsize of transform for angle coordinate
Definition: MuonHoughTransformer.h:122
TRT_PAI_physicsConstants::r0
const double r0
electron radius{cm}
Definition: TRT_PAI_physicsConstants.h:20
MuonHoughHit::getRadius
double getRadius() const
returns radius
Definition: MuonHoughHit.h:166
MuonHoughHisto2D::binnumberToCoords
std::pair< double, double > binnumberToCoords(int binnumber, int printlevel=0) const
gives coordinates for certain binnumber
Definition: MuonHoughHisto2D.cxx:189
MuonHoughTransformer::m_number_of_sectors
const int m_number_of_sectors
number of histograms (1 for cosmics 16 for rz)
Definition: MuonHoughTransformer.h:128
AthMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AthMessaging.h:164
MuonHoughTransformer::fillHit
virtual void fillHit(const std::shared_ptr< MuonHoughHit > &hit, double weight=1.)=0
fill histograms with hit
MuonHough::two_Pi
constexpr double two_Pi
Definition: MuonHoughMathUtils.h:16
MuonHoughTransformer::getEndPointsFillLoop
std::pair< double, double > getEndPointsFillLoop(double radius, double stepsize, int sector) const
returns begin and end value of the filling loop
Definition: MuonHoughTransformer.cxx:108
MuonHoughTransformer_xyz::sector
int sector(const std::shared_ptr< MuonHoughHit > &hit) const override final
returns the rz sector
Definition: MuonHoughTransformer_xyz.cxx:238
MuonHoughTransformer_xyz::initialiseHoughPattern
virtual std::unique_ptr< MuonHoughPattern > initialiseHoughPattern() const =0
build new houghpattern
MuonHoughHit::getWeight
double getWeight() const
returns weight in histogram after rescaling
Definition: MuonHoughHit.h:162
LArNewCalib_Delay_OFC_Cali.check
check
Definition: LArNewCalib_Delay_OFC_Cali.py:208
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
MuonHoughHisto2D::getXmax
double getXmax() const
returns max x axis
Definition: MuonHoughHisto2D.h:210
MuonHoughPattern::setMaximumHistogram
void setMaximumHistogram(double maximumhistogram)
set maximum of histogram used to generate pattern
Definition: MuonHoughPattern.h:128
MuonHoughHisto2DContainer::getMaximumBinnumber
std::pair< int, int > getMaximumBinnumber() const
return maximum of container gives first id histogram (sector) and then maximumbin
Definition: MuonHoughHisto2DContainer.cxx:9
MuonHoughTransformer::m_binwidthy
double m_binwidthy
y-binwidth of histogram
Definition: MuonHoughTransformer.h:117
MuonHoughTransformer::m_ip_setting
bool m_ip_setting
use settings for patterns originating from origin
Definition: MuonHoughTransformer.h:125
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
AthMessaging::m_nm
std::string m_nm
Message source name.
Definition: AthMessaging.h:129
DeMoScan.first
bool first
Definition: DeMoScan.py:534
CxxUtils::sincos
Helper to simultaneously calculate sin and cos of the same angle.
Definition: sincos.h:76
MuonHoughHisto2D::fill
int fill(double x, double y, double weight=1.)
fill 2d histogram with point (x,y) with weight w, return binnumber filled
Definition: MuonHoughHisto2D.h:190
MuonHoughTransformer_xyz::fillHisto
int fillHisto(double r0, double phi, double weight, int sector) override final
fill transformed values in histogram
Definition: MuonHoughTransformer_xyz.cxx:46
MuonHoughTransformer::m_eventsize
unsigned int m_eventsize
size of event to be filled (can be used for weighting)
Definition: MuonHoughTransformer.h:85
MuonHoughTransformer::m_add_weight_radius
bool m_add_weight_radius
use weight of patterns in radius coordinate
Definition: MuonHoughTransformer.h:94
MuonHoughTransformer_xyz::getHitPos
virtual std::pair< double, double > getHitPos(const MuonHoughHitContainer &event, int hitid) const =0
returns the relevant 2d hit position
MuonHoughHisto2D::getCoordsMaximum
std::pair< double, double > getCoordsMaximum(unsigned int maximum_number=0)
returns coords of maximum number maximum_number
Definition: MuonHoughHisto2D.cxx:130
AthMessaging::initMessaging
void initMessaging() const
Initialize our message level and MessageSvc.
Definition: AthMessaging.cxx:39
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
MuonHoughHisto2D::getXmin
double getXmin() const
returns min x axis
Definition: MuonHoughHisto2D.h:209
AthMessaging::m_msg_tls
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels)
Definition: AthMessaging.h:132
plotBeamSpotCompare.histo
histo
Definition: plotBeamSpotCompare.py:415
MuonHoughMathUtils::angleFromGradToRadial
double angleFromGradToRadial(double angle) const
converts angle in degrees to rad
Definition: MuonHoughMathUtils.h:112
MuonHoughTransformer::sector
virtual int sector(const std::shared_ptr< MuonHoughHit > &hit) const =0
returns sector for coords
MuonHoughHit::getAssociated
bool getAssociated() const
return if hit already associated to pattern
Definition: MuonHoughHit.h:176
MuonHoughHisto2D
Histogram class, similar to Root's TH2D.
Definition: MuonHoughHisto2D.h:22