/** Get the list of banks, given the settings * * @return map with key = bank number; value = pointer to the rectangular *detector */ std::map<int, RectangularDetector_const_sptr> ConvertToDetectorFaceMD::getBanks() { Instrument_const_sptr inst = in_ws->getInstrument(); std::vector<int> bankNums = this->getProperty("BankNumbers"); std::sort(bankNums.begin(), bankNums.end()); std::map<int, RectangularDetector_const_sptr> banks; if (bankNums.empty()) { // --- Find all rectangular detectors ---- // Get all children std::vector<IComponent_const_sptr> comps; inst->getChildren(comps, true); for (auto &comp : comps) { // Retrieve it RectangularDetector_const_sptr det = boost::dynamic_pointer_cast<const RectangularDetector>(comp); if (det) { std::string name = det->getName(); if (name.size() < 5) continue; std::string bank = name.substr(4, name.size() - 4); int bankNum; if (Mantid::Kernel::Strings::convert(bank, bankNum)) banks[bankNum] = det; g_log.debug() << "Found bank " << bank << ".\n"; } } } else { // -- Find detectors using the numbers given --- for (auto &bankNum : bankNums) { std::string bankName = "bank" + Mantid::Kernel::Strings::toString(bankNum); IComponent_const_sptr comp = inst->getComponentByName(bankName); RectangularDetector_const_sptr det = boost::dynamic_pointer_cast<const RectangularDetector>(comp); if (det) banks[bankNum] = det; } } for (auto &bank : banks) { RectangularDetector_const_sptr det = bank.second; // Track the largest detector if (det->xpixels() > m_numXPixels) m_numXPixels = det->xpixels(); if (det->ypixels() > m_numYPixels) m_numYPixels = det->ypixels(); } if (banks.empty()) throw std::runtime_error("No RectangularDetectors with a name like " "'bankXX' found in the instrument."); return banks; }