From 635e3fd511635e8b912be720d73ca7eb75bdcde6 Mon Sep 17 00:00:00 2001 From: Karl Palmen <karl.palmen@stfc.ac.uk> Date: Wed, 22 Feb 2012 10:59:18 +0000 Subject: [PATCH] Separate data for detectors and monitors re #4781 Also renamed new_group extra_data and made other groups all lowercase. Signed-off-by: Karl Palmen <karl.palmen@stfc.ac.uk> --- .../Framework/API/src/ExperimentInfo.cpp | 94 +++++++++++++------ 1 file changed, 63 insertions(+), 31 deletions(-) diff --git a/Code/Mantid/Framework/API/src/ExperimentInfo.cpp b/Code/Mantid/Framework/API/src/ExperimentInfo.cpp index 477cbd4aed0..9a5c38268b5 100644 --- a/Code/Mantid/Framework/API/src/ExperimentInfo.cpp +++ b/Code/Mantid/Framework/API/src/ExperimentInfo.cpp @@ -573,7 +573,7 @@ namespace API file->closeGroup(); // Add new group that could contain instrument data - file->makeGroup("new_group","NXData", true); + file->makeGroup("extra_data","NXdata", true); std::vector<detid_t> detectorIDs; std::vector<detid_t> detmonIDs; std::vector<IDetector_const_sptr> detectors; @@ -581,44 +581,76 @@ namespace API detectorIDs = getInstrument()->getDetectorIDs( true ); detmonIDs = getInstrument()->getDetectorIDs( false ); detectors = getInstrument()->getDetectors( detectorIDs ); + detmons = getInstrument()->getDetectors( detmonIDs ); file->writeData("number_of_detectors_and_monitors", detmonIDs.size() ); - file->makeGroup("Detectors","NXData", true); - file->writeData("number_of_detectors", detectorIDs.size() ); - file->writeData("Detector_IDs", detectorIDs); - std::vector<double> a_angles( detectorIDs.size() ); - std::vector<double> p_angles( detectorIDs.size() ); - std::vector<double> distances( detectorIDs.size() ); - - if (detectorIDs.size() > 0) { + if( detmonIDs.size() > 0 ) + { + // Add detectors group + file->makeGroup("detectors","NXdetector", true); + file->writeData("number_of_detectors", detectorIDs.size() ); Geometry::IObjComponent_const_sptr sample = getInstrument()->getSample(); - Kernel::V3D sample_pos = sample->getPos(); - for (int i=0; i < detectorIDs.size(); i++) + Kernel::V3D sample_pos; + if(sample) sample_pos = sample->getPos(); + + if (detectorIDs.size() > 0) { + std::vector<double> a_angles( detectorIDs.size() ); + std::vector<double> p_angles( detectorIDs.size() ); + std::vector<double> distances( detectorIDs.size() ); + + for (int i=0; i < detectorIDs.size(); i++) + { + if( sample) + { + Kernel::V3D pos = detectors[i]->getPos() - sample_pos; + pos.getSpherical( distances[i], p_angles[i], a_angles[i]); + } else { + a_angles[i] = detectors[i]->getPhi()*180.0/M_PI; + } + } + file->writeData("detector_nummber", detectorIDs); + if(sample) file->writeData("polar_angle", p_angles); + file->writeData("azimuthal_angle", a_angles); + if(sample) file->writeData("distance", distances); + } + file->closeGroup(); // detectors + + // Create Monitor IDs vector + std::vector<detid_t> monitorIDs; + for (int i=0; i < detmonIDs.size(); i++) + { + if( detmons[i]->isMonitor()) monitorIDs.push_back( detmonIDs[i] ); + } + std::vector<IDetector_const_sptr> monitors; + monitors = getInstrument()->getDetectors( monitorIDs ); + // Add Monitors group + file->makeGroup("monitors","NXmonitor", true); + file->writeData("number_of_monitors", monitorIDs.size() ); + if( monitorIDs.size() > 0) { - if( sample) + std::vector<double> mon_a_angles( monitorIDs.size() ); + std::vector<double> mon_p_angles( monitorIDs.size() ); + std::vector<double> mon_distances( monitorIDs.size() ); + + for (int i=0; i < monitorIDs.size(); i++) { - Kernel::V3D pos = detectors[i]->getPos() - sample_pos; - pos.getSpherical( distances[i], p_angles[i], a_angles[i]); - } else { - distances[i] = detectors[i]->getDistance( *sample ); - a_angles[i] = detectors[i]->getPhi()*180.0/M_PI; + if( sample) + { + Kernel::V3D pos = monitors[i]->getPos() - sample_pos; + pos.getSpherical( mon_distances[i], mon_p_angles[i], mon_a_angles[i]); + } else { + mon_distances[i] = monitors[i]->getDistance( *sample ); + mon_a_angles[i] = monitors[i]->getPhi()*180.0/M_PI; + } } + file->writeData("monitor_nummber", monitorIDs); + if(sample) file->writeData("polar_angle", mon_p_angles); + file->writeData("azimuthal_angle", mon_a_angles); + if(sample) file->writeData("distance", mon_distances); } - file->makeGroup("detectors","NXDetector", true); - file->writeData("Number_of_Detectors", detectors.size() ); - - file->writeData("detector_number", detectorIDs); - if(sample) file->writeData("polar_angle", p_angles); - file->writeData("azimuthal_angle", a_angles); - if(sample) file->writeData("distance", distances); - file->closeGroup(); // Detectors + file->closeGroup(); // monitors } - file->writeData("azimuthal_angle", a_angles); - file->writeData("polar_angle", p_angles); - file->writeData("distance", distances); - - file->closeGroup(); // Detector_IDs - file->closeGroup(); // new_group + file->closeGroup(); // extra_data file->closeGroup(); // (close the instrument group) -- GitLab