130 std::map<Int_t, Float_t> txvec;
131 for (std::map<Int_t, Float_t>::const_iterator it = xvec.begin();
132 it != xvec.end(); ++it) {
133 Float_t coordinate = it->second;
134 Int_t dim = it->first;
137 if (coordinate <= fXmin[dim])
138 coordinate = fXmin[dim] + std::numeric_limits<float>::epsilon();
139 else if (coordinate >= fXmax[dim])
140 coordinate = fXmax[dim] - std::numeric_limits<float>::epsilon();
142 txvec.insert(std::pair<Int_t, Float_t>(dim, VarTransform(dim, coordinate)));
146 std::map<Int_t, Float_t>
target;
149 std::vector<PDEFoamCell*> cells = FindCells(txvec);
153 return std::vector<Float_t>(GetTotDim() - xvec.size(), 0);
157 for (
Int_t idim = 0; idim < GetTotDim(); ++idim) {
159 if (txvec.find(idim) == txvec.end())
160 target.insert(std::pair<Int_t, Float_t>(idim, 0));
163 switch (fTargetSelection) {
165 CalculateMean(
target, cells);
168 CalculateMpv(
target, cells);
171 Log() <<
"<PDEFoamMultiTarget::GetCellValue>: "
172 <<
"unknown target selection type!" <<
Endl;
177 std::vector<Float_t>
result;
179 for (std::map<Int_t, Float_t>::const_iterator it =
target.begin();
181 result.push_back(it->second);
206 for (std::vector<PDEFoamCell*>::const_iterator cell_it = cells.begin();
207 cell_it != cells.end(); ++cell_it) {
210 const Double_t cell_density = GetCellValue(*cell_it, kValueDensity);
213 if (cell_density > max_dens) {
215 PDEFoamVect cellPosi(GetTotDim()), cellSize(GetTotDim());
216 (*cell_it)->GetHcub(cellPosi, cellSize);
219 max_dens = cell_density;
222 for (std::map<Int_t, Float_t>::iterator target_it =
target.begin();
223 target_it !=
target.end(); ++target_it) {
224 const Int_t dim = target_it->first;
226 VarTransformInvers(dim, cellPosi[dim] + 0.5 * cellSize[dim]);
250 std::map<Int_t, Float_t> norm;
253 for (std::vector<PDEFoamCell*>::const_iterator cell_it = cells.begin();
254 cell_it != cells.end(); ++cell_it) {
257 const Double_t cell_density = GetCellValue(*cell_it, kValueDensity);
260 PDEFoamVect cellPosi(GetTotDim()), cellSize(GetTotDim());
261 (*cell_it)->GetHcub(cellPosi, cellSize);
264 for (std::map<Int_t, Float_t>::iterator target_it =
target.begin();
265 target_it !=
target.end(); ++target_it) {
266 const Int_t dim = target_it->first;
267 target_it->second += cell_density *
268 VarTransformInvers(dim, cellPosi[dim] + 0.5 * cellSize[dim]);
269 norm[dim] += cell_density;
274 for (std::map<Int_t, Float_t>::iterator target_it =
target.begin();
275 target_it !=
target.end(); ++target_it) {
278 const Int_t dim = target_it->first;
281 if (norm[dim] > std::numeric_limits<Float_t>::epsilon()) {
286 target[dim] = (fXmax[dim] - fXmin[dim]) / 2.;