From 58edeb1b05efba046d86db4142348d650cf53884 Mon Sep 17 00:00:00 2001 From: Vickie Lynch Date: Mon, 16 Dec 2013 13:34:35 -0500 Subject: [PATCH] Refs #8571 modifications for WISH --- .../Crystal/inc/MantidCrystal/LoadIsawPeaks.h | 1 + .../Framework/Crystal/src/LoadIsawPeaks.cpp | 46 +++++++++++++++---- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/Code/Mantid/Framework/Crystal/inc/MantidCrystal/LoadIsawPeaks.h b/Code/Mantid/Framework/Crystal/inc/MantidCrystal/LoadIsawPeaks.h index e7100e0ede94..79a4db870cf5 100644 --- a/Code/Mantid/Framework/Crystal/inc/MantidCrystal/LoadIsawPeaks.h +++ b/Code/Mantid/Framework/Crystal/inc/MantidCrystal/LoadIsawPeaks.h @@ -31,6 +31,7 @@ namespace Crystal /// Returns a confidence value that this algorithm can load a file virtual int confidence(Kernel::FileDescriptor & descriptor) const; + int findPixelID(Geometry::Instrument_const_sptr inst, std::string bankName, int col, int row); private: /// Sets documentation strings for this algorithm diff --git a/Code/Mantid/Framework/Crystal/src/LoadIsawPeaks.cpp b/Code/Mantid/Framework/Crystal/src/LoadIsawPeaks.cpp index f3727656dddd..429a2d492c49 100644 --- a/Code/Mantid/Framework/Crystal/src/LoadIsawPeaks.cpp +++ b/Code/Mantid/Framework/Crystal/src/LoadIsawPeaks.cpp @@ -238,8 +238,9 @@ namespace Crystal } std::string SbankNum = boost::lexical_cast(bankNum); - - std::string bankName = "bank"+SbankNum; + std::string bankName = "bank"; + if (instr->getName() == "WISH") bankName = "WISHpanel0"; + bankName += SbankNum; boost::shared_ptr bank =instr_old->getComponentByName( bankName ); if( !bank) @@ -262,6 +263,8 @@ namespace Crystal boost::shared_ptr< const Geometry::RectangularDetector>bankR= boost::dynamic_pointer_cast ( bank); + if (!bankR)return startChar; + double DetWScale = 1, DetHtScale = 1; if( bank) { @@ -431,15 +434,11 @@ namespace Crystal // Find the detector ID from row/col Instrument_const_sptr inst = outWS->getInstrument(); if (!inst) throw std::runtime_error("No instrument in PeaksWorkspace!"); - IComponent_const_sptr bank = inst->getComponentByName(bankName); - if (!bank) throw std::runtime_error("Bank named " + bankName + " not found!"); - RectangularDetector_const_sptr rect = boost::dynamic_pointer_cast(bank); - if (!rect) throw std::runtime_error("Bank named " + bankName + " is not a RectangularDetector!"); - IDetector_sptr det = rect->getAtXY(int(col), int(row)); - if (!det) throw std::runtime_error("Detector not found on " + bankName + "!"); + LoadIsawPeaks u; + int pixelID = u.findPixelID(inst, bankName, static_cast(col), static_cast(row)); //Create the peak object - Peak peak(outWS->getInstrument(), det->getID(), wl); + Peak peak(outWS->getInstrument(), pixelID, wl); // HKL's are flipped by -1 because of the internal Q convention peak.setHKL(-h,-k,-l); peak.setIntensity(Inti); @@ -449,6 +448,31 @@ namespace Crystal return peak; } + int LoadIsawPeaks::findPixelID(Instrument_const_sptr inst, std::string bankName, int col, int row) + { + boost::shared_ptr parent = inst->getComponentByName(bankName); + if (parent->type().compare("RectangularDetector") == 0) + { + boost::shared_ptr RDet = boost::dynamic_pointer_cast< + const RectangularDetector>(parent); + + boost::shared_ptr pixel = RDet->getAtXY(col, row); + return pixel->getID(); + } + else + { + std::vector children; + boost::shared_ptr asmb = boost::dynamic_pointer_cast(parent); + asmb->getChildren(children, false); + int col0 = (col%2==0 ? col/2+75 : (col-1)/2); + boost::shared_ptr asmb2 = boost::dynamic_pointer_cast(children[col0]); + std::vector grandchildren; + asmb2->getChildren(grandchildren,false); + Geometry::IComponent_const_sptr first = grandchildren[row-1]; + Geometry::IDetector_const_sptr det = boost::dynamic_pointer_cast(first); + return det->getID(); + } + } //----------------------------------------------------------------------------------------------- @@ -548,7 +572,9 @@ namespace Crystal std::ostringstream oss; - oss << "bank" << bankNum; + std::string bankString = "bank"; + if (outWS->getInstrument()->getName() == "WISH") bankString = "WISHpanel0"; + oss << bankString << bankNum; std::string bankName = oss.str(); int seqNum = -1;