94 {
95 if (
hits.empty())
return;
96 if (
m_debug) std::cout <<
" filling layers, hits " <<
hits.size() <<
" subtract " << subtract << std::endl;
97 int prevlayer = -1;
98 int prevbinmin = 10000;
99 int prevbinmax = -1;
100
101 PhiHitVec::const_iterator
it =
hits.begin();
102 PhiHitVec::const_iterator it_end =
hits.end();
103 for (;
it != it_end; ++
it) {
104 std::pair<int, int>
minMax =
range((*it)->r, (*it)->phimin, (*it)->phimax);
105
106 int binmin =
minMax.first;
107 int binmax =
minMax.second;
108
109 if (binmin >=
m_nbins)
continue;
110 if (binmax < 0) continue;
111
112 if (binmin < 0) binmin = 0;
115 std::cout << " layer " << (*it)->layer << " r " << (*it)->r << " phimin " << (*it)->phimin << " phimax " << (*it)->phimax
116 << " new min " << binmin << " " << binmax << std::endl;
117
118
119 if (prevbinmax == -1) {
121 std::cout << " first range " << (*it)->layer << " r " << (*it)->r << " range " << binmin << " " << binmax << " new min "
122 << binmin << " " << binmax << std::endl;
123 prevbinmin = binmin;
124 prevbinmax = binmax;
125 prevlayer = (*it)->layer;
126 continue;
127 }
128
129 if (binmin < prevbinmin && prevlayer == (*it)->layer)
130 std::cout << "Error hits are out of order: min " << binmin << " max " << binmax << std::endl;
131
132
133
134 if (prevbinmax < binmin || prevlayer != (*it)->layer) {
136 std::cout << " filling " << (*it)->layer << " r " << (*it)->r << " phimin " << (*it)->phimin << " phimax "
137 << (*it)->phimax << " range " << prevbinmin << " " << prevbinmax << " new min " << binmin << " " << binmax
138 << std::endl;
139 for (
int n = prevbinmin;
n <= prevbinmax; ++
n) {
141 int w = 1000 * (*it)->w;
142 if (subtract)
w *= -1;
143 if (w < 0 && (int)val < -w)
145 else
147 }
148 prevbinmin = binmin;
149 prevbinmax = binmax;
150 prevlayer = (*it)->layer;
151
152 } else {
153
155 std::cout << " updating range " << (*it)->layer << " r " << (*it)->r << " phimin " << (*it)->phimin << " phimax "
156 << (*it)->phimax << " range " << prevbinmin << " " << prevbinmax << " new min " << binmin << " " << binmax
157 << std::endl;
158 prevbinmax = binmax;
159 }
160 }
161 if (prevbinmax != -1) {
163 std::cout <<
" filling " <<
hits.back()->layer <<
" r " <<
hits.back()->r <<
" phimin " <<
hits.back()->phimin <<
" phimax "
164 <<
hits.back()->phimax <<
" range " << prevbinmin <<
" " << prevbinmax << std::endl;
165 for (
int n = prevbinmin;
n <= prevbinmax; ++
n) {
167 int w = 1000 *
hits.back()->w;
168 if (subtract)
w *= -1;
169 if (w < 0 && (int)val < -w)
171 else
173 }
174 }
175 }