118 if (initialS > finalS) {
119 std::swap(initialS, finalS);
126 value_t::iterator setIt = val.begin();
127 const value_t::iterator setEnd = val.end();
129 for (; setIt != setEnd; ++ setIt) {
135 bool extendedExisting =
false;
136 for (
auto it = itpair.first; it != itpair.second; ++ it) {
137 key_t ¤tRange = it->second;
140 currentRange.
end = key.end;
141 extendedExisting =
true;
145 if (!extendedExisting) {
184 std::vector<std::tuple<double, std::vector<double>, std::string> > sectors;
196 for (; mapIti != mapItf; mapIti++) {
197 const auto §orElements = (*mapIti).second;
198 if (sectorElements.empty())
201 const auto §orRange = (*mapIti).first;
203 double sectorBegin = sectorRange.begin;
204 double sectorEnd = sectorRange.end;
206 std::vector<std::tuple<double, std::vector<double>, std::string> > currentSector(4);
207 std::get<0>(currentSector[0]) = sectorBegin;
208 std::get<0>(currentSector[1]) = sectorBegin;
209 std::get<0>(currentSector[2]) = sectorEnd;
210 std::get<0>(currentSector[3]) = sectorEnd;
212 for (
unsigned short i = 0; i < 4; ++ i) {
213 auto &flags = std::get<1>(currentSector[i]);
214 flags.resize(
SIZE, 0);
217 for (
auto element: sectorElements) {
219 auto passage = elementPassages.first;
220 auto end = elementPassages.second;
221 for (; passage !=
end; ++ passage) {
222 const auto &elementRange = (*passage).second;
223 double elementBegin = elementRange.begin;
224 double elementEnd = elementRange.end;
226 if (elementBegin <= sectorBegin &&
227 elementEnd >= sectorEnd) {
232 const auto &elementRange = (*passage).second;
233 if (elementRange.begin < sectorBegin) {
234 ::insertFlags(std::get<1>(currentSector[0]), element);
235 std::get<2>(currentSector[0]) += element->getName() +
", ";
238 ::insertFlags(std::get<1>(currentSector[1]), element);
239 std::get<2>(currentSector[1]) += element->getName() +
", ";
241 ::insertFlags(std::get<1>(currentSector[2]), element);
242 std::get<2>(currentSector[2]) += element->getName() +
", ";
244 if (elementRange.end > sectorEnd) {
245 ::insertFlags(std::get<1>(currentSector[3]), element);
246 std::get<2>(currentSector[3]) += element->getName() +
", ";
250 for (
unsigned short i = 0; i < 4; ++ i) {
251 sectors.push_back(currentSector[i]);
256 const unsigned int numEntries = sectors.size();
259 for (; it !=
end; ++ it) {
260 auto element = (*it).first;
261 auto name = element->getName();
262 auto type = element->getType();
268 auto range = (*it).second;
271 for (; i < numEntries; ++ i) {
272 if (std::get<0>(sectors[i]) >= range.begin) {
277 if (i == numEntries)
continue;
279 unsigned int j = ++ i;
280 while (std::get<0>(sectors[j]) < range.end) {
284 double length = range.end - range.begin;
285 for (; i <= j; ++ i) {
286 double pos = std::get<0>(sectors[i]);
287 auto &items = std::get<1>(sectors[i]);
289 items[
RFCAVITY] = 1.0 - 2 * (pos - range.begin) / length;
294 if (!sectors.empty() &&
295 std::get<0>(sectors[0]) > initialPathLength) {
297 sectors = std::vector<std::tuple<double, std::vector<double>, std::string> >(1);
298 std::get<0>(sectors[0]) = initialPathLength;
299 std::get<1>(sectors[0]).resize(
SIZE, 0.0);
301 sectors.insert(sectors.end(), tmp.begin(), tmp.end());
310 for (
auto sector: sectors) {
311 std::string names = std::get<2>(sector);
312 if (!names.empty()) {
313 names = names.substr(0, names.length() - 2);
315 names =
"\"" + names +
"\"";
316 writer.addRow(std::get<0>(sector),
380 double position)
const {
381 double minDistance = std::numeric_limits<double>::max();
382 key_t range{0.0, 0.0};
383 const std::pair<invertedMap_t::const_iterator, invertedMap_t::const_iterator> its =
mapElement2Range_m.equal_range(element);
384 if (std::distance(its.first, its.second) == 0)
386 "Element \"" + element->getName() +
"\" not registered");
388 for (invertedMap_t::const_iterator it = its.first; it != its.second; ++ it) {
389 double distance = std::min(std::abs((*it).second.begin - position),
390 std::abs((*it).second.end - position));
391 if (distance < minDistance) {
392 minDistance = distance;
393 range = (*it).second;