8#include "GaudiKernel/MsgStream.h"
12 double threshold_histo,
int number_of_sectors) :
36 std::unique_ptr<MuonHoughHisto2D> histo = std::make_unique<MuonHoughHisto2D>(nbins, -detectorsize, detectorsize, nbins_angle, 0., detectorsize_angle);
38 m_histos.push_back(std::move(histo));
52 for (
int i = 0; i <
m_histos.size(); ++i)
m_histos.getHisto(i)->setMaximumIsValid(
false);
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());
59 for (
unsigned int hitid = 0; hitid <
m_eventsize; hitid++) {
fillHit(event.getHit(hitid), event.getHit(hitid)->getWeight()); }
64 double maximum_residu_grad,
int maximum_number)
const {
65 std::unique_ptr<MuonHoughPattern> houghpattern{};
66 std::pair<double, double> coordsmaximum;
67 std::pair<int, int> maximumbin;
68 maximumbin =
m_histos.getMaximumBinnumber();
70 int sector = maximumbin.first;
73 coordsmaximum =
m_histos.getHisto(
sector)->getCoordsMaximum(maximum_number);
74 if (maximumbin.second == -1){
79 <<
" value: " <<
m_histos.getHisto(
sector)->getBinContent(maximumbin.second));
80 ATH_MSG_VERBOSE(
" coordinates: " << coordsmaximum.first <<
" second " << coordsmaximum.second<<
" sector: "<<
sector);
82 if (houghpattern) { houghpattern->setMaximumHistogram(
m_histos.getHisto(
sector)->getBinContent(maximumbin.second)); }
92 double maximum_residu_mm,
double maximum_residu_angle,
int sector)
const {
97 double maximum_residu_mm,
double maximum_residu_angle,
int sector)
const {
99 " maximum of histogram: " <<
m_histos.getHisto(
sector)->getBinContent(binnumber));
101 std::pair<double, double> coordsmaximum =
m_histos.getHisto(
sector)->binnumberToCoords(binnumber);
103 maximum_residu_mm, maximum_residu_angle,
sector);
104 houghpattern->setMaximumHistogram(
m_histos.getHisto(
sector)->getBinContent(binnumber));
109 std::pair<double, double> endpoints(-radius + 0.00001, radius);
113 endpoints.first =
m_histos.getHisto(
sector)->getXmin() + 0.5 * stepsize;
123 std::vector<std::pair<int, int> > maximumbins;
125 std::vector<std::pair<std::pair<int, int>,
double> > maxima;
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);
139 unsigned int count_maxima = 0;
140 int number_of_patterns = 0;
141 std::set<int> sectors;
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;
147 int sector = maximumbin.first;
149 if (sectors.find(
sector) != sectors.end()) { check =
false; }
152 maximumbins.push_back(maximumbin);
153 sectors.insert(maximumbin.first);
155 int sectormin =
sector - 1;
156 int sectorplus =
sector + 1;
160 sectors.insert(sectormin);
161 sectors.insert(sectorplus);
165 int sectorminmin = sectormin - 1;
166 int sectorplusplus = sectorplus + 1;
167 sectors.insert(sectorminmin);
168 sectors.insert(sectorplusplus);
172 number_of_patterns++;
#define ATH_MSG_VERBOSE(x)
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
AthMessaging(IMessageSvc *msgSvc, const std::string &name)
Constructor.
singleton-like access to IMessageSvc via open function and helper