diff --git a/Code/Mantid/Build/CMake/DarwinSetup.cmake b/Code/Mantid/Build/CMake/DarwinSetup.cmake index 07a3461a5286059fcca389fc7ccc17fc0084310d..d26ddce540ee12ec9d6530bfce98dbd1d058aec3 100644 --- a/Code/Mantid/Build/CMake/DarwinSetup.cmake +++ b/Code/Mantid/Build/CMake/DarwinSetup.cmake @@ -128,9 +128,7 @@ else() set ( PYQT4_PYTHONPATH /usr/local/lib/python${PY_VER}/site-packages/PyQt4 ) set ( SITEPACKAGES /usr/local/lib/python${PY_VER}/site-packages ) # use homebrew OpenSSL package - EXEC_PROGRAM( brew ARGS info openssl | grep openssl: | cut -c 17-22 OUTPUT_VARIABLE _openssl_version ) - MESSAGE(STATUS "OpenSSL version: ${_openssl_version}") - set ( OPENSSL_ROOT_DIR /usr/local/Cellar/openssl/${_openssl_version}/ ) + set ( OPENSSL_ROOT_DIR /usr/local/opt/openssl ) endif() # Python packages diff --git a/Code/Mantid/Build/CMake/FindPyQt.py b/Code/Mantid/Build/CMake/FindPyQt.py index 3c24b73afb8412ef01cf5af313d42d1f413b2cf7..fa5618d045c7ea88d103e47256e6b5399286ae37 100644 --- a/Code/Mantid/Build/CMake/FindPyQt.py +++ b/Code/Mantid/Build/CMake/FindPyQt.py @@ -1,25 +1,48 @@ # Copyright (c) 2007, Simon Edwards <simon@simonzone.com> +# Copyright (c) 2014, Raphael Kubo da Costa <rakuco@FreeBSD.org> # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. -import PyQt4.pyqtconfig +import PyQt4.QtCore +import os +import sys -pyqtcfg = PyQt4.pyqtconfig.Configuration() -print("pyqt_version:%06.0x" % pyqtcfg.pyqt_version) -print("pyqt_version_str:%s" % pyqtcfg.pyqt_version_str) - -pyqt_version_tag = "" -in_t = False -for item in pyqtcfg.pyqt_sip_flags.split(' '): - if item=="-t": - in_t = True - elif in_t: - if item.startswith("Qt_4"): - pyqt_version_tag = item +def get_default_sip_dir(): + # This is based on QScintilla's configure.py, and only works for the + # default case where installation paths have not been changed in PyQt's + # configuration process. + if sys.platform == 'win32': + pyqt_sip_dir = os.path.join(sys.platform, 'sip', 'PyQt4') else: - in_t = False -print("pyqt_version_tag:%s" % pyqt_version_tag) + pyqt_sip_dir = os.path.join(sys.platform, 'share', 'sip', 'PyQt4') + return pyqt_sip_dir + +def get_qt4_tag(sip_flags): + in_t = False + for item in sip_flags.split(' '): + if item == '-t': + in_t = True + elif in_t: + if item.startswith('Qt_4'): + return item + else: + in_t = False + raise ValueError('Cannot find Qt\'s tag in PyQt4\'s SIP flags.') -print("pyqt_sip_dir:%s" % pyqtcfg.pyqt_sip_dir) -print("pyqt_sip_flags:%s" % pyqtcfg.pyqt_sip_flags) +if __name__ == '__main__': + try: + import PyQt4.pyqtconfig + pyqtcfg = PyQt4.pyqtconfig.Configuration() + sip_dir = pyqtcfg.pyqt_sip_dir + sip_flags = pyqtcfg.pyqt_sip_flags + except ImportError: + # PyQt4 >= 4.10.0 was built with configure-ng.py instead of + # configure.py, so pyqtconfig.py is not installed. + sip_dir = get_default_sip_dir() + sip_flags = PyQt4.QtCore.PYQT_CONFIGURATION['sip_flags'] + print('pyqt_version:%06.x' % PyQt4.QtCore.PYQT_VERSION) + print('pyqt_version_str:%s' % PyQt4.QtCore.PYQT_VERSION_STR) + print('pyqt_version_tag:%s' % get_qt4_tag(sip_flags)) + print('pyqt_sip_dir:%s' % sip_dir) + print('pyqt_sip_flags:%s' % sip_flags) diff --git a/Code/Mantid/Build/CMake/FindPyQt4.cmake b/Code/Mantid/Build/CMake/FindPyQt4.cmake index 9b45d5169b3c39f809e3ce58f77e33b1e1b22d5d..b3fe28c7e63b6e01484bb995c9b4b9f30f7c57df 100644 --- a/Code/Mantid/Build/CMake/FindPyQt4.cmake +++ b/Code/Mantid/Build/CMake/FindPyQt4.cmake @@ -9,16 +9,20 @@ # Find the installed version of PyQt4. FindPyQt4 should only be called after # Python has been found. # -# This file defines the following variables: +# This file defines the following variables, which can also be overriden by +# users: # # PYQT4_VERSION - The version of PyQt4 found expressed as a 6 digit hex number -# suitable for comparision as a string +# suitable for comparison as a string # # PYQT4_VERSION_STR - The version of PyQt4 as a human readable string. # -# PYQT4_VERSION_TAG - The PyQt version tag using by PyQt's sip files. +# PYQT4_VERSION_TAG - The Qt4 version tag used by PyQt's sip files. # -# PYQT4_SIP_DIR - The directory holding the PyQt4 .sip files. +# PYQT4_SIP_DIR - The directory holding the PyQt4 .sip files. This can be unset +# if PyQt4 was built using its new build system and pyqtconfig.py is not +# present on the system, as in this case its value cannot be determined +# automatically. # # PYQT4_SIP_FLAGS - The SIP flags used to build PyQt. @@ -30,19 +34,38 @@ ELSE(EXISTS PYQT4_VERSION) FIND_FILE(_find_pyqt_py FindPyQt.py PATHS ${CMAKE_MODULE_PATH}) EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_pyqt_py} OUTPUT_VARIABLE pyqt_config) - IF( NOT ${pyqt_config} MATCHES "Traceback" ) - STRING(REGEX REPLACE "^pyqt_version:([^\n]+).*$" "\\1" PYQT4_VERSION ${pyqt_config}) - STRING(REGEX REPLACE ".*\npyqt_version_str:([^\n]+).*$" "\\1" PYQT4_VERSION_STR ${pyqt_config}) - STRING(REGEX REPLACE ".*\npyqt_version_tag:([^\n]+).*$" "\\1" PYQT4_VERSION_TAG ${pyqt_config}) - STRING(REGEX REPLACE ".*\npyqt_sip_dir:([^\n]+).*$" "\\1" PYQT4_SIP_DIR ${pyqt_config}) - STRING(REGEX REPLACE ".*\npyqt_sip_flags:([^\n]+).*$" "\\1" PYQT4_SIP_FLAGS ${pyqt_config}) + IF(pyqt_config) + STRING(REGEX MATCH "^pyqt_version:([^\n]+).*$" _dummy ${pyqt_config}) + SET(PYQT4_VERSION "${CMAKE_MATCH_1}" CACHE STRING "PyQt4's version as a 6-digit hexadecimal number") - SET(PYQT4_FOUND TRUE) - ENDIF() + STRING(REGEX MATCH ".*\npyqt_version_str:([^\n]+).*$" _dummy ${pyqt_config}) + SET(PYQT4_VERSION_STR "${CMAKE_MATCH_1}" CACHE STRING "PyQt4's version as a human-readable string") - include ( FindPackageHandleStandardArgs ) - find_package_handle_standard_args ( PyQt4 DEFAULT_MSG PYQT4_VERSION ) + STRING(REGEX MATCH ".*\npyqt_version_tag:([^\n]+).*$" _dummy ${pyqt_config}) + SET(PYQT4_VERSION_TAG "${CMAKE_MATCH_1}" CACHE STRING "The Qt4 version tag used by PyQt4's .sip files") - mark_as_advanced ( _find_pyqt_py ) + STRING(REGEX MATCH ".*\npyqt_sip_dir:([^\n]+).*$" _dummy ${pyqt_config}) + SET(PYQT4_SIP_DIR "${CMAKE_MATCH_1}" CACHE FILEPATH "The base directory where PyQt4's .sip files are installed") + + STRING(REGEX MATCH ".*\npyqt_sip_flags:([^\n]+).*$" _dummy ${pyqt_config}) + SET(PYQT4_SIP_FLAGS "${CMAKE_MATCH_1}" CACHE STRING "The SIP flags used to build PyQt4") + + IF(NOT IS_DIRECTORY "${PYQT4_SIP_DIR}") + MESSAGE(WARNING "The base directory where PyQt4's SIP files are installed could not be determined. This usually means PyQt4 was built with its new build system and pyqtconfig.py is not present.\n" + "Please set the PYQT4_SIP_DIR variable manually.") + ELSE(NOT IS_DIRECTORY "${PYQT4_SIP_DIR}") + SET(PYQT4_FOUND TRUE) + ENDIF(NOT IS_DIRECTORY "${PYQT4_SIP_DIR}") + ENDIF(pyqt_config) + + IF(PYQT4_FOUND) + IF(NOT PYQT4_FIND_QUIETLY) + MESSAGE(STATUS "Found PyQt4 version: ${PYQT4_VERSION_STR}") + ENDIF(NOT PYQT4_FIND_QUIETLY) + ELSE(PYQT4_FOUND) + IF(PYQT4_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find Python") + ENDIF(PYQT4_FIND_REQUIRED) + ENDIF(PYQT4_FOUND) ENDIF(EXISTS PYQT4_VERSION) diff --git a/Code/Mantid/CMakeLists.txt b/Code/Mantid/CMakeLists.txt index ea8af240f8b7c6275b6fa0dd9765c40707121fca..2a19d9eb65ee9c89522c01cd24fade595d78b3c8 100644 --- a/Code/Mantid/CMakeLists.txt +++ b/Code/Mantid/CMakeLists.txt @@ -121,6 +121,7 @@ set ( CORE_MANTIDLIBS Kernel Geometry API ) # Add a target for all GUI tests add_custom_target ( GUITests ) +add_dependencies ( GUITests MantidWidgetsTest) add_dependencies ( check GUITests ) # Collect all tests together add_custom_target ( AllTests ) diff --git a/Code/Mantid/Framework/API/CMakeLists.txt b/Code/Mantid/Framework/API/CMakeLists.txt index 4957f3a3eb420cf77b6b7ca84c27f756ecc72ad6..63b186613846d8226eb06e7d276dd37fe11cb2ad 100644 --- a/Code/Mantid/Framework/API/CMakeLists.txt +++ b/Code/Mantid/Framework/API/CMakeLists.txt @@ -105,6 +105,7 @@ set ( SRC_FILES src/Run.cpp src/Sample.cpp src/SampleEnvironment.cpp + src/SampleShapeValidator.cpp src/ScopedWorkspace.cpp src/ScriptBuilder.cpp src/ScriptRepository.cpp @@ -264,6 +265,7 @@ set ( INC_FILES inc/MantidAPI/Run.h inc/MantidAPI/Sample.h inc/MantidAPI/SampleEnvironment.h + inc/MantidAPI/SampleShapeValidator.h inc/MantidAPI/ScopedWorkspace.h inc/MantidAPI/ScriptBuilder.h inc/MantidAPI/ScriptRepository.h @@ -355,6 +357,7 @@ set ( TEST_FILES PropertyNexusTest.h RunTest.h SampleEnvironmentTest.h + SampleShapeValidatorTest.h SampleTest.h ScopedWorkspaceTest.h ScriptBuilderTest.h diff --git a/Code/Mantid/Framework/API/inc/MantidAPI/MatrixWorkspace.h b/Code/Mantid/Framework/API/inc/MantidAPI/MatrixWorkspace.h index 01243eed4ae57d793b1dbd0e28d492c807ff5387..7ec8edb85097795ebb5329f12e4999db7fd3e5ed 100644 --- a/Code/Mantid/Framework/API/inc/MantidAPI/MatrixWorkspace.h +++ b/Code/Mantid/Framework/API/inc/MantidAPI/MatrixWorkspace.h @@ -16,6 +16,7 @@ #include "MantidAPI/Run.h" #include "MantidAPI/Sample.h" #include "MantidAPI/SpectraDetectorTypes.h" +#include "MantidKernel/EmptyValues.h" namespace Mantid @@ -33,6 +34,13 @@ namespace Mantid { class SpectrumDetectorMapping; + /// typedef for the image type + typedef std::vector<std::vector<double>> MantidImage; + /// shared pointer to MantidImage + typedef boost::shared_ptr<MantidImage> MantidImage_sptr; + /// shared pointer to const MantidImage + typedef boost::shared_ptr<const MantidImage> MantidImage_const_sptr; + //---------------------------------------------------------------------- /** Base MatrixWorkspace Abstract Class. @@ -227,6 +235,9 @@ namespace Mantid /// Return a vector with the integrated counts for all spectra withing the given range virtual void getIntegratedSpectra(std::vector<double> & out, const double minX, const double maxX, const bool entireRange) const; + /// Return an index in the X vector for an x-value close to a given value + std::pair<size_t,double> getXIndex(size_t i, double x, bool isLeft = true, size_t start = 0) const; + //---------------------------------------------------------------------- int axes() const; @@ -311,6 +322,25 @@ namespace Mantid // End IMDWorkspace methods //===================================================================================== + //===================================================================================== + // Image methods + //===================================================================================== + + /// Get start and end x indices for images + std::pair<size_t,size_t> getImageStartEndXIndices( size_t i, double startX, double endX ) const; + /// Create an image of Ys. + MantidImage_sptr getImageY (size_t start = 0, size_t stop = 0, size_t width = 0, double startX = EMPTY_DBL(), double endX = EMPTY_DBL() ) const; + /// Create an image of Es. + MantidImage_sptr getImageE (size_t start = 0, size_t stop = 0, size_t width = 0, double startX = EMPTY_DBL(), double endX = EMPTY_DBL() ) const; + /// Copy the data (Y's) from an image to this workspace. + void setImageY( const MantidImage &image, size_t start = 0 ); + /// Copy the data from an image to this workspace's errors. + void setImageE( const MantidImage &image, size_t start = 0 ); + + //===================================================================================== + // End image methods + //===================================================================================== + protected: MatrixWorkspace(Mantid::Geometry::INearestNeighboursFactory* factory = NULL); @@ -328,6 +358,10 @@ namespace Mantid MatrixWorkspace(const MatrixWorkspace&); /// Private copy assignment operator. NO ASSIGNMENT ALLOWED MatrixWorkspace& operator=(const MatrixWorkspace&); + /// Create an MantidImage instance. + MantidImage_sptr getImage(const MantidVec& (MatrixWorkspace::*read)(std::size_t const) const, size_t start, size_t stop, size_t width, size_t indexStart, size_t indexEnd) const; + /// Copy data from an image. + void setImage( MantidVec& (MatrixWorkspace::*dataVec)(const std::size_t), const MantidImage &image, size_t start ); /// Has this workspace been initialised? bool m_isInitialized; diff --git a/Code/Mantid/Framework/API/inc/MantidAPI/SampleShapeValidator.h b/Code/Mantid/Framework/API/inc/MantidAPI/SampleShapeValidator.h new file mode 100644 index 0000000000000000000000000000000000000000..57270adc5444e821d19ab0e4e7adcfd7807e0e68 --- /dev/null +++ b/Code/Mantid/Framework/API/inc/MantidAPI/SampleShapeValidator.h @@ -0,0 +1,52 @@ +#ifndef MANTID_API_SAMPLESHAPEVALIDATOR_H_ +#define MANTID_API_SAMPLESHAPEVALIDATOR_H_ + +#include "MantidAPI/DllConfig.h" +#include "MantidAPI/ExperimentInfo.h" + +#include "MantidKernel/TypedValidator.h" + +namespace Mantid +{ + namespace API + { + + /** + Verify that a workspace has valid sample shape. + + Copyright © 2014 ISIS Rutherford Appleton Laboratory + & NScD Oak Ridge National Laboratory + + This file is part of Mantid. + + Mantid is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + Mantid is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + File change history is stored at: <https://github.com/mantidproject/mantid> + Code Documentation is available at: <http://doxygen.mantidproject.org> + */ + class MANTID_API_DLL SampleShapeValidator : + public Kernel::TypedValidator<boost::shared_ptr<ExperimentInfo> > + { + public: + std::string getType() const; + Kernel::IValidator_sptr clone() const; + + private: + std::string checkValidity(const boost::shared_ptr<ExperimentInfo>& value) const; + }; + + } // namespace API +} // namespace Mantid + +#endif /* MANTID_API_SAMPLESHAPEVALIDATOR_H_ */ diff --git a/Code/Mantid/Framework/API/src/MatrixWorkspace.cpp b/Code/Mantid/Framework/API/src/MatrixWorkspace.cpp index 85d8c5556ab8d5211521770b6ce18ac8763e96b8..e0adfb391d6a442b5ff73d64186dda688c4c52e6 100644 --- a/Code/Mantid/Framework/API/src/MatrixWorkspace.cpp +++ b/Code/Mantid/Framework/API/src/MatrixWorkspace.cpp @@ -1715,6 +1715,288 @@ namespace Mantid return Mantid::API::None; } + /** + * Creates a 2D image. + * @param read :: Pointer to a method returning a MantidVec to provide data for the image. + * @param start :: First workspace index for the image. + * @param stop :: Last workspace index for the image. + * @param width :: Image width. Must divide (stop - start + 1) exactly. + * @param indexStart :: First index of the x integration range. + * @param indexEnd :: Last index of the x integration range. + */ + MantidImage_sptr MatrixWorkspace::getImage(const MantidVec& (MatrixWorkspace::*read)(std::size_t const) const, size_t start, size_t stop, size_t width, size_t indexStart, size_t indexEnd) const + { + // width must be provided (for now) + if ( width == 0 ) + { + throw std::runtime_error("Cannot create image with width 0"); + } + + size_t nHist = getNumberHistograms(); + // use all spectra by default + if ( stop == 0 ) + { + stop = nHist; + } + + // check start and stop + if ( stop < start ) + { + throw std::runtime_error("Cannot create image for an empty data set."); + } + + if ( start >= nHist ) + { + throw std::runtime_error("Cannot create image: start index is out of range"); + } + + if ( stop >= nHist ) + { + throw std::runtime_error("Cannot create image: stop index is out of range"); + } + + // calculate image geometry + size_t dataSize = stop - start + 1; + size_t height = dataSize / width; + + // and check that the data fits exactly into this geometry + if ( height * width != dataSize ) + { + throw std::runtime_error("Cannot create image: the data set cannot form a rectangle."); + } + + size_t nBins = blocksize(); + bool isHisto = isHistogramData(); + + // default indexEnd is the last index of the X vector + if ( indexEnd == 0 ) + { + indexEnd = nBins; + if ( !isHisto && indexEnd > 0 ) --indexEnd; + } + + // check the x-range indices + if ( indexEnd < indexStart ) + { + throw std::runtime_error("Cannot create image for an empty data set."); + } + + if ( indexStart >= nBins || indexEnd > nBins || (!isHisto && indexEnd == nBins) ) + { + throw std::runtime_error("Cannot create image: integration interval is out of range."); + } + + // initialize the image + auto image = boost::make_shared<MantidImage>( height ); + if ( !isHisto ) ++indexEnd; + + // deal separately with single-binned workspaces: no integration is required + if ( isHisto && indexEnd == indexStart + 1 ) + { + PARALLEL_FOR_NO_WSP_CHECK() + for(int i = 0; i < static_cast<int>(height); ++i) + { + auto &row = (*image)[i]; + row.resize( width ); + size_t spec = start + static_cast<size_t>(i) * width; + for(size_t j = 0; j< width; ++j, ++spec) + { + row[j] = (this->*read)(spec)[indexStart]; + } + } + } + else + { + // each image pixel is integrated over the x-range [indexStart,indexEnd) + PARALLEL_FOR_NO_WSP_CHECK() + for(int i = 0; i < static_cast<int>(height); ++i) + { + auto &row = (*image)[i]; + row.resize( width ); + size_t spec = start + static_cast<size_t>(i) * width; + for(size_t j = 0; j < width; ++j, ++spec) + { + auto &V = (this->*read)(spec); + row[j] = std::accumulate( V.begin() + indexStart, V.begin() + indexEnd, 0.0 ); + } + } + } + + return image; + } + + /** + * Get start and end x indices for images + * @param i :: Histogram index. + * @param startX :: Lower bound of the x integration range. + * @param endX :: Upper bound of the x integration range. + */ + std::pair<size_t,size_t> MatrixWorkspace::getImageStartEndXIndices( size_t i, double startX, double endX ) const + { + if ( startX == EMPTY_DBL() ) startX = readX(i).front(); + auto pStart = getXIndex( i, startX, true ); + if ( pStart.second != 0.0 ) + { + throw std::runtime_error("Start X value is required to be on bin boundary."); + } + if ( endX == EMPTY_DBL() ) endX = readX(i).back(); + auto pEnd = getXIndex( i, endX, false, pStart.first ); + if ( pEnd.second != 0.0 ) + { + throw std::runtime_error("End X value is required to be on bin boundary."); + } + return std::make_pair( pStart.first, pEnd.first ); + } + + /** + * Creates a 2D image of the y values in this workspace. + * @param start :: First workspace index for the image. + * @param stop :: Last workspace index for the image. + * @param width :: Image width. Must divide (stop - start + 1) exactly. + * @param startX :: Lower bound of the x integration range. + * @param endX :: Upper bound of the x integration range. + */ + MantidImage_sptr MatrixWorkspace::getImageY(size_t start, size_t stop, size_t width, double startX, double endX ) const + { + auto p = getImageStartEndXIndices( 0, startX, endX ); + return getImage(&MatrixWorkspace::readY,start,stop,width,p.first,p.second); + } + + /** + * Creates a 2D image of the error values in this workspace. + * @param start :: First workspace index for the image. + * @param stop :: Last workspace index for the image. + * @param width :: Image width. Must divide (stop - start + 1) exactly. + * @param startX :: Lower bound of the x integration range. + * @param endX :: Upper bound of the x integration range. + */ + MantidImage_sptr MatrixWorkspace::getImageE(size_t start, size_t stop, size_t width, double startX, double endX ) const + { + auto p = getImageStartEndXIndices( 0, startX, endX ); + return getImage(&MatrixWorkspace::readE,start,stop,width,p.first,p.second); + } + + /** + * Find an index in the X vector for an x-value close to a given value. It is returned as the first + * member of the pair. The second member is the fraction [0,1] of bin width cut off by the search value. + * If the first member == size of X vector then search failed. + * @param i :: Histogram index. + * @param x :: The value to find the index for. + * @param isLeft :: If true the left bin boundary is returned, if false - the right one. + * @param start :: Index to start the search from. + */ + std::pair<size_t,double> MatrixWorkspace::getXIndex(size_t i, double x, bool isLeft, size_t start) const + { + auto &X = readX(i); + auto nx = X.size(); + + // if start out of range - search failed + if ( start >= nx ) return std::make_pair( nx, 0.0 ); + if ( start > 0 && start == nx - 1 ) + { + // starting with the last index is allowed for right boundary search + if ( !isLeft ) return std::make_pair( start, 0.0 ); + return std::make_pair( nx, 0.0 ); + } + + // consider point data with single value + if ( nx == 1 ) + { + assert( start == 0 ); + if ( isLeft ) return x <= X[start] ? std::make_pair( start, 0.0 ) : std::make_pair( nx, 0.0 ); + return x >= X[start] ? std::make_pair( start, 0.0 ) : std::make_pair( nx, 0.0 ); + } + + // left boundaries below start value map to the start value + if ( x <= X[start] ) + { + return isLeft ? std::make_pair( start, 0.0 ) : std::make_pair( nx, 0.0 ); + } + // right boundary search returns last x value for all values above it + if ( x >= X.back() ) + { + return !isLeft ? std::make_pair( nx - 1, 0.0 ) : std::make_pair( nx, 0.0 ); + } + + // general case: find the boundary index and bin fraction + auto end = X.end(); + for(auto ix = X.begin() + start + 1; ix != end; ++ix) + { + if ( *ix >= x ) + { + auto index = static_cast<size_t>( std::distance(X.begin(),ix) ); + if ( isLeft ) --index; + return std::make_pair( index, fabs( (X[index] - x) / (*ix - *(ix - 1)) ) ); + } + } + // I don't think we can ever get here + return std::make_pair( nx, 0.0 ); + } + + /** + * Copy data from an image. + * @param dataVec :: A method returning non-const references to data vectors to copy the image to. + * @param image :: An image to copy the data from. + * @param start :: Startinf workspace indx to copy data to. + */ + void MatrixWorkspace::setImage( MantidVec& (MatrixWorkspace::*dataVec)(const std::size_t), const MantidImage &image, size_t start ) + { + + if ( image.empty() ) return; + if ( image[0].empty() ) return; + + if ( blocksize() != 1 ) + { + throw std::runtime_error("Cannot set image: a single bin workspace is expected."); + } + + size_t height = image.size(); + size_t width = image.front().size(); + size_t dataSize = width * height; + + if ( start + dataSize > getNumberHistograms() ) + { + throw std::runtime_error("Cannot set image: image is bigger than workspace."); + } + + PARALLEL_FOR_NO_WSP_CHECK() + for(int i = 0; i < static_cast<int>(height); ++i) + { + auto &row = image[i]; + if ( row.size() != width ) + { + throw std::runtime_error("Canot set image: image is corrupted."); + } + size_t spec = start + static_cast<size_t>(i) * width; + auto rowEnd = row.end(); + for(auto pixel = row.begin(); pixel != rowEnd; ++pixel,++spec) + { + (this->*dataVec)(spec)[0] = *pixel; + } + } + } + + /** + * Copy the data (Y's) from an image to this workspace. + * @param image :: An image to copy the data from. + * @param start :: Startinf workspace indx to copy data to. + */ + void MatrixWorkspace::setImageY( const MantidImage &image, size_t start ) + { + setImage( &MatrixWorkspace::dataY, image, start ); + } + + /** + * Copy the data from an image to this workspace's errors. + * @param image :: An image to copy the data from. + * @param start :: Startinf workspace indx to copy data to. + */ + void MatrixWorkspace::setImageE( const MantidImage &image, size_t start ) + { + setImage( &MatrixWorkspace::dataE, image, start ); + } + + } // namespace API } // Namespace Mantid diff --git a/Code/Mantid/Framework/API/src/SampleShapeValidator.cpp b/Code/Mantid/Framework/API/src/SampleShapeValidator.cpp new file mode 100644 index 0000000000000000000000000000000000000000..21ef26c0e49986efd2f8e32dd04c72c0d5c6e309 --- /dev/null +++ b/Code/Mantid/Framework/API/src/SampleShapeValidator.cpp @@ -0,0 +1,50 @@ +//----------------------------------------------------------------------------- +// Includes +//----------------------------------------------------------------------------- +#include "MantidAPI/SampleShapeValidator.h" +#include "MantidGeometry/Objects/Object.h" + +namespace Mantid +{ + namespace API + { + //----------------------------------------------------------------------------- + // Public methods + //----------------------------------------------------------------------------- + + /// @return A string identifier for the type of validator + std::string SampleShapeValidator::getType() const + { + return "SampleShape"; + } + + /// @return A copy of the validator as a new object + Kernel::IValidator_sptr SampleShapeValidator::clone() const + { + return boost::make_shared<SampleShapeValidator>(); + } + + //----------------------------------------------------------------------------- + // Private methods + //----------------------------------------------------------------------------- + + /** + * Checks that the workspace has a valid sample shape defined + * @param value :: The workspace to test + * @return A user level description if a problem exists or "" + */ + std::string SampleShapeValidator::checkValidity( const boost::shared_ptr<ExperimentInfo>& value ) const + { + const auto & sampleShape = value->sample().getShape(); + if(sampleShape.hasValidShape()) + { + return ""; + } + else + { + return "Invalid or no shape defined for sample"; + } + } + + } // namespace API +} // namespace Mantid diff --git a/Code/Mantid/Framework/API/test/MatrixWorkspaceTest.h b/Code/Mantid/Framework/API/test/MatrixWorkspaceTest.h index fff7167fda9b75ef7090e07ea53168e097887cf2..d7d490e1c59ca78c56e42b64d3a00317ee54c9e6 100644 --- a/Code/Mantid/Framework/API/test/MatrixWorkspaceTest.h +++ b/Code/Mantid/Framework/API/test/MatrixWorkspaceTest.h @@ -841,7 +841,478 @@ public: TSM_ASSERT( "Monitor workspace not successfully reset", ! ws->monitorWorkspace() ) } + void test_getXIndex() + { + WorkspaceTester ws; + ws.init(1,4,3); + auto &X = ws.dataX(0); + X[0] = 1.0; + X[1] = 2.0; + X[2] = 3.0; + X[3] = 4.0; + + auto ip = ws.getXIndex( 0, 0.0, true ); + TS_ASSERT_EQUALS( ip.first, 0 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 0.0, false ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 1.0, true ); + TS_ASSERT_EQUALS( ip.first, 0 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 1.0, false ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 5.0, true ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 5.0, false ); + TS_ASSERT_EQUALS( ip.first, 3 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 4.0, true ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 4.0, false ); + TS_ASSERT_EQUALS( ip.first, 3 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 5.0, true, 5 ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 5.0, false, 5 ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 3.0, true, 5 ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 3.0, false, 5 ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 4.0, true, 5 ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 4.0, false, 5 ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 4.0, true, 4 ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 4.0, false, 4 ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 4.0, true, 3 ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 4.0, false, 3 ); + TS_ASSERT_EQUALS( ip.first, 3 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 4.0, true ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 4.0, false ); + TS_ASSERT_EQUALS( ip.first, 3 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 2.0, true, 3 ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 2.0, false, 3 ); + TS_ASSERT_EQUALS( ip.first, 3 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 1.0, true, 3 ); + TS_ASSERT_EQUALS( ip.first, 4 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 1.0, false, 3 ); + TS_ASSERT_EQUALS( ip.first, 3 ); + TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 ); + + ip = ws.getXIndex( 0, 2.1, true ); + TS_ASSERT_EQUALS( ip.first, 1 ); + TS_ASSERT_DELTA( ip.second, 0.1, 1e-15 ); + + ip = ws.getXIndex( 0, 2.1, false ); + TS_ASSERT_EQUALS( ip.first, 2 ); + TS_ASSERT_DELTA( ip.second, 0.9, 1e-15 ); + } + + void test_getImage_0_width() + { + WorkspaceTester ws; + ws.init(9,2,1); + auto &X = ws.dataX(0); + X[0] = 1.0; + X[1] = 2.0; + const size_t start = 0; + const size_t stop = 8; + size_t width = 0; + TS_ASSERT_THROWS( ws.getImageY(start,stop,width), std::runtime_error ); + width = 3; + TS_ASSERT_THROWS_NOTHING( ws.getImageY(start,stop,width) ); + } + + void test_getImage_wrong_start() + { + WorkspaceTester ws; + ws.init(9,2,1); + auto &X = ws.dataX(0); + X[0] = 1.0; + X[1] = 2.0; + size_t start = 10; + size_t stop = 8; + size_t width = 3; + TS_ASSERT_THROWS( ws.getImageY(start,stop,width), std::runtime_error ); + start = 9; + TS_ASSERT_THROWS( ws.getImageY(start,stop,width), std::runtime_error ); + start = 0; + TS_ASSERT_THROWS_NOTHING( ws.getImageY(start,stop,width) ); + } + + void test_getImage_wrong_stop() + { + WorkspaceTester ws; + ws.init(9,2,1); + auto &X = ws.dataX(0); + X[0] = 1.0; + X[1] = 2.0; + size_t start = 0; + size_t stop = 18; + size_t width = 3; + TS_ASSERT_THROWS( ws.getImageY(start,stop,width), std::runtime_error ); + stop = 9; + TS_ASSERT_THROWS( ws.getImageY(start,stop,width), std::runtime_error ); + stop = 8; + TS_ASSERT_THROWS_NOTHING( ws.getImageY(start,stop,width) ); + } + + void test_getImage_empty_set() + { + WorkspaceTester ws; + ws.init(9,2,1); + auto &X = ws.dataX(0); + X[0] = 1.0; + X[1] = 2.0; + size_t start = 1; + size_t stop = 0; + size_t width = 1; + TS_ASSERT_THROWS( ws.getImageY(start,stop,width), std::runtime_error ); + stop = 1; + TS_ASSERT_THROWS_NOTHING( ws.getImageY(start,stop,width) ); + } + + void test_getImage_non_rectangular() + { + WorkspaceTester ws; + ws.init(9,2,1); + auto &X = ws.dataX(0); + X[0] = 1.0; + X[1] = 2.0; + size_t start = 0; + size_t stop = 7; + size_t width = 3; + TS_ASSERT_THROWS( ws.getImageY(start,stop,width), std::runtime_error ); + } + + void test_getImage_wrong_indexStart() + { + WorkspaceTester ws; + ws.init(9,2,1); + auto &X = ws.dataX(0); + X[0] = 1.0; + X[1] = 2.0; + const size_t start = 0; + const size_t stop = 8; + const size_t width = 3; + double startX = 3; + double endX = 4; + TS_ASSERT_THROWS( ws.getImageY(start,stop,width,startX,endX), std::runtime_error ); + + WorkspaceTester wsh; + wsh.init(9,1,1); + startX = 2; + endX = 2; + TS_ASSERT_THROWS( wsh.getImageY(start,stop,width,startX,endX), std::runtime_error ); + } + + void test_getImage_wrong_indexEnd() + { + WorkspaceTester ws; + ws.init(9,2,1); + auto &X = ws.dataX(0); + X[0] = 1.0; + X[1] = 2.0; + const size_t start = 0; + const size_t stop = 8; + const size_t width = 3; + double startX = 1.0; + double endX = 0.0; + TS_ASSERT_THROWS( ws.getImageY(start,stop,width,startX,endX), std::runtime_error ); + + WorkspaceTester wsh; + wsh.init(9,2,2); + auto &X1 = ws.dataX(0); + X1[0] = 1.0; + X1[1] = 2.0; + startX = 1.0; + endX = 0.0; + TS_ASSERT_THROWS( wsh.getImageY(start,stop,width,startX,endX), std::runtime_error ); + } + + void test_getImage_single_bin_histo() + { + WorkspaceTester ws; + ws.init(9,2,1); + auto &X = ws.dataX(0); + X[0] = 1.0; + X[1] = 2.0; + for(size_t i = 0; i < ws.getNumberHistograms(); ++i) + { + ws.dataY(i)[0] = static_cast<double>( i + 1 ); + } + const size_t start = 0; + const size_t stop = 8; + const size_t width = 3; + double startX = 0; + double endX = 3; + Mantid::API::MantidImage_sptr image; + TS_ASSERT_THROWS_NOTHING( image = ws.getImageY(start,stop,width,startX,endX) ); + if ( !image ) return; + TS_ASSERT_EQUALS( image->size(), 3 ); + TS_ASSERT_EQUALS( (*image)[0].size(), 3 ); + TS_ASSERT_EQUALS( (*image)[1].size(), 3 ); + TS_ASSERT_EQUALS( (*image)[2].size(), 3 ); + + TS_ASSERT_EQUALS( (*image)[0][0], 1 ); + TS_ASSERT_EQUALS( (*image)[0][1], 2 ); + TS_ASSERT_EQUALS( (*image)[0][2], 3 ); + TS_ASSERT_EQUALS( (*image)[1][0], 4 ); + TS_ASSERT_EQUALS( (*image)[1][1], 5 ); + TS_ASSERT_EQUALS( (*image)[1][2], 6 ); + TS_ASSERT_EQUALS( (*image)[2][0], 7 ); + TS_ASSERT_EQUALS( (*image)[2][1], 8 ); + TS_ASSERT_EQUALS( (*image)[2][2], 9 ); + + } + + void test_getImage_single_bin_points() + { + WorkspaceTester ws; + ws.init(9,1,1); + auto &X = ws.dataX(0); + X[0] = 1.0; + for(size_t i = 0; i < ws.getNumberHistograms(); ++i) + { + ws.dataY(i)[0] = static_cast<double>( i + 1 ); + } + const size_t start = 0; + const size_t stop = 8; + const size_t width = 3; + double startX = 1; + double endX = 1; + Mantid::API::MantidImage_sptr image; + TS_ASSERT_THROWS_NOTHING( image = ws.getImageY(start,stop,width,startX,endX) ); + if ( !image ) return; + TS_ASSERT_EQUALS( image->size(), 3 ); + TS_ASSERT_EQUALS( (*image)[0].size(), 3 ); + TS_ASSERT_EQUALS( (*image)[1].size(), 3 ); + TS_ASSERT_EQUALS( (*image)[2].size(), 3 ); + + TS_ASSERT_EQUALS( (*image)[0][0], 1 ); + TS_ASSERT_EQUALS( (*image)[0][1], 2 ); + TS_ASSERT_EQUALS( (*image)[0][2], 3 ); + TS_ASSERT_EQUALS( (*image)[1][0], 4 ); + TS_ASSERT_EQUALS( (*image)[1][1], 5 ); + TS_ASSERT_EQUALS( (*image)[1][2], 6 ); + TS_ASSERT_EQUALS( (*image)[2][0], 7 ); + TS_ASSERT_EQUALS( (*image)[2][1], 8 ); + TS_ASSERT_EQUALS( (*image)[2][2], 9 ); + + } + + void test_getImage_multi_bin_histo() + { + WorkspaceTester ws; + ws.init(9,4,3); + auto &X = ws.dataX(0); + X[0] = 1.0; + X[1] = 2.0; + X[2] = 3.0; + X[3] = 4.0; + for(size_t i = 0; i < ws.getNumberHistograms(); ++i) + { + ws.dataY(i)[0] = static_cast<double>( i + 1 ); + ws.dataY(i)[1] = static_cast<double>( i + 2 ); + ws.dataY(i)[2] = static_cast<double>( i + 3 ); + } + const size_t start = 0; + const size_t stop = 8; + const size_t width = 3; + Mantid::API::MantidImage_sptr image; + TS_ASSERT_THROWS_NOTHING( image = ws.getImageY(start,stop,width) ); + if ( !image ) return; + TS_ASSERT_EQUALS( image->size(), 3 ); + TS_ASSERT_EQUALS( (*image)[0].size(), 3 ); + TS_ASSERT_EQUALS( (*image)[1].size(), 3 ); + TS_ASSERT_EQUALS( (*image)[2].size(), 3 ); + + TS_ASSERT_EQUALS( (*image)[0][0], 6 ); + TS_ASSERT_EQUALS( (*image)[0][1], 9 ); + TS_ASSERT_EQUALS( (*image)[0][2], 12 ); + TS_ASSERT_EQUALS( (*image)[1][0], 15 ); + TS_ASSERT_EQUALS( (*image)[1][1], 18 ); + TS_ASSERT_EQUALS( (*image)[1][2], 21 ); + TS_ASSERT_EQUALS( (*image)[2][0], 24 ); + TS_ASSERT_EQUALS( (*image)[2][1], 27 ); + TS_ASSERT_EQUALS( (*image)[2][2], 30 ); + + } + + void test_getImage_multi_bin_points() + { + WorkspaceTester ws; + ws.init(9,3,3); + auto &X = ws.dataX(0); + X[0] = 1.0; + X[1] = 2.0; + X[2] = 3.0; + for(size_t i = 0; i < ws.getNumberHistograms(); ++i) + { + ws.dataY(i)[0] = static_cast<double>( i + 1 ); + ws.dataY(i)[1] = static_cast<double>( i + 2 ); + ws.dataY(i)[2] = static_cast<double>( i + 3 ); + } + const size_t start = 0; + const size_t stop = 8; + const size_t width = 3; + Mantid::API::MantidImage_sptr image; + TS_ASSERT_THROWS_NOTHING( image = ws.getImageY(start,stop,width) ); + if ( !image ) return; + TS_ASSERT_EQUALS( image->size(), 3 ); + TS_ASSERT_EQUALS( (*image)[0].size(), 3 ); + TS_ASSERT_EQUALS( (*image)[1].size(), 3 ); + TS_ASSERT_EQUALS( (*image)[2].size(), 3 ); + + TS_ASSERT_EQUALS( (*image)[0][0], 6 ); + TS_ASSERT_EQUALS( (*image)[0][1], 9 ); + TS_ASSERT_EQUALS( (*image)[0][2], 12 ); + TS_ASSERT_EQUALS( (*image)[1][0], 15 ); + TS_ASSERT_EQUALS( (*image)[1][1], 18 ); + TS_ASSERT_EQUALS( (*image)[1][2], 21 ); + TS_ASSERT_EQUALS( (*image)[2][0], 24 ); + TS_ASSERT_EQUALS( (*image)[2][1], 27 ); + TS_ASSERT_EQUALS( (*image)[2][2], 30 ); + + } + + void test_setImage_too_large() + { + auto image = createImage(2,3); + WorkspaceTester ws; + ws.init(2,2,1); + TS_ASSERT_THROWS( ws.setImageY( *image ), std::runtime_error ); + } + + void test_setImage_not_single_bin() + { + auto image = createImage(2,3); + WorkspaceTester ws; + ws.init(20,3,2); + TS_ASSERT_THROWS( ws.setImageY( *image ), std::runtime_error ); + } + + void test_setImageY() + { + auto image = createImage(2,3); + WorkspaceTester ws; + ws.init(6,2,1); + TS_ASSERT_THROWS_NOTHING( ws.setImageY( *image ) ); + TS_ASSERT_EQUALS( ws.readY(0)[0], 1 ); + TS_ASSERT_EQUALS( ws.readY(1)[0], 2 ); + TS_ASSERT_EQUALS( ws.readY(2)[0], 3 ); + TS_ASSERT_EQUALS( ws.readY(3)[0], 4 ); + TS_ASSERT_EQUALS( ws.readY(4)[0], 5 ); + TS_ASSERT_EQUALS( ws.readY(5)[0], 6 ); + } + + void test_setImageE() + { + auto image = createImage(2,3); + WorkspaceTester ws; + ws.init(6,2,1); + TS_ASSERT_THROWS_NOTHING( ws.setImageE( *image ) ); + TS_ASSERT_EQUALS( ws.readE(0)[0], 1 ); + TS_ASSERT_EQUALS( ws.readE(1)[0], 2 ); + TS_ASSERT_EQUALS( ws.readE(2)[0], 3 ); + TS_ASSERT_EQUALS( ws.readE(3)[0], 4 ); + TS_ASSERT_EQUALS( ws.readE(4)[0], 5 ); + TS_ASSERT_EQUALS( ws.readE(5)[0], 6 ); + } + + void test_setImageY_start() + { + auto image = createImage(2,3); + WorkspaceTester ws; + ws.init(9,2,1); + TS_ASSERT_THROWS_NOTHING( ws.setImageY( *image, 3 ) ); + TS_ASSERT_EQUALS( ws.readY(3)[0], 1 ); + TS_ASSERT_EQUALS( ws.readY(4)[0], 2 ); + TS_ASSERT_EQUALS( ws.readY(5)[0], 3 ); + TS_ASSERT_EQUALS( ws.readY(6)[0], 4 ); + TS_ASSERT_EQUALS( ws.readY(7)[0], 5 ); + TS_ASSERT_EQUALS( ws.readY(8)[0], 6 ); + } + + void test_setImageE_start() + { + auto image = createImage(2,3); + WorkspaceTester ws; + ws.init(9,2,1); + TS_ASSERT_THROWS_NOTHING( ws.setImageE( *image, 2 ) ); + TS_ASSERT_EQUALS( ws.readE(2)[0], 1 ); + TS_ASSERT_EQUALS( ws.readE(3)[0], 2 ); + TS_ASSERT_EQUALS( ws.readE(4)[0], 3 ); + TS_ASSERT_EQUALS( ws.readE(5)[0], 4 ); + TS_ASSERT_EQUALS( ws.readE(6)[0], 5 ); + TS_ASSERT_EQUALS( ws.readE(7)[0], 6 ); + } + private: + + Mantid::API::MantidImage_sptr createImage(size_t width, size_t height) + { + auto image = new Mantid::API::MantidImage(height); + double value = 1.0; + for(auto row = image->begin(); row != image->end(); ++row) + { + row->resize( width ); + for(auto pixel = row->begin(); pixel != row->end(); ++pixel, value += 1.0) + { + *pixel = value; + } + } + return Mantid::API::MantidImage_sptr( image ); + } + boost::shared_ptr<MatrixWorkspace> ws; }; diff --git a/Code/Mantid/Framework/API/test/SampleShapeValidatorTest.h b/Code/Mantid/Framework/API/test/SampleShapeValidatorTest.h new file mode 100644 index 0000000000000000000000000000000000000000..e61bcef54ef44a810b6080980aefaae11462372b --- /dev/null +++ b/Code/Mantid/Framework/API/test/SampleShapeValidatorTest.h @@ -0,0 +1,46 @@ +#ifndef MANTID_API_SAMPLESHAPEVALIDATORTEST_H_ +#define MANTID_API_SAMPLESHAPEVALIDATORTEST_H_ + +#include <cxxtest/TestSuite.h> + +#include "MantidAPI/SampleShapeValidator.h" +#include "MantidTestHelpers/ComponentCreationHelper.h" +#include "MantidTestHelpers/FakeObjects.h" + +#include "boost/make_shared.hpp" + +using Mantid::API::SampleShapeValidator; + +class SampleShapeValidatorTest : public CxxTest::TestSuite +{ +public: + // This pair of boilerplate methods prevent the suite being created statically + // This means the constructor isn't called when running other tests + static SampleShapeValidatorTest *createSuite() { return new SampleShapeValidatorTest(); } + static void destroySuite( SampleShapeValidatorTest *suite ) { delete suite; } + + void test_validator_passes_for_workspace_with_defined_sample_shape() + { + auto fakeWS = boost::make_shared<WorkspaceTester>(); + // Add a sample shape + auto sphere = ComponentCreationHelper::createSphere(1.0, V3D(), "sphere"); + fakeWS->mutableSample().setShape(*sphere); + + auto sampleValidator = boost::make_shared<SampleShapeValidator>(); + TS_ASSERT_EQUALS( sampleValidator->isValid(fakeWS), "" ); + } + + void test_validator_throws_error_for_workspace_without_shape() + { + auto fakeWS = boost::make_shared<WorkspaceTester>(); + + auto sampleValidator = boost::make_shared<SampleShapeValidator>(); + TS_ASSERT_EQUALS( sampleValidator->isValid(fakeWS), + "Invalid or no shape defined for sample" ); + } + + +}; + + +#endif /* MANTID_API_SAMPLESHAPEVALIDATORTEST_H_ */ diff --git a/Code/Mantid/Framework/Algorithms/src/ElasticWindow.cpp b/Code/Mantid/Framework/Algorithms/src/ElasticWindow.cpp index 7ca3cd780b56f909d58c758f06e4edb524d23fcf..4e988cc057d978f85c29b67e4bab02c6be4bac14 100644 --- a/Code/Mantid/Framework/Algorithms/src/ElasticWindow.cpp +++ b/Code/Mantid/Framework/Algorithms/src/ElasticWindow.cpp @@ -14,7 +14,6 @@ namespace Algorithms // Register the algorithm into the AlgorithmFactory DECLARE_ALGORITHM(ElasticWindow) - using namespace Kernel; using namespace API; @@ -48,16 +47,31 @@ void ElasticWindow::exec() MatrixWorkspace_sptr outputQ; MatrixWorkspace_sptr outputQSquared; - + const bool childAlgLogging(true); - double startProgress(0.0), stepProgress(0.0), endProgress(0.0); + double startProgress(0.0), endProgress(0.0); + + // Determine if we are converting from spectra number (red) or Q (Sqw) + const bool axisIsSpectrumNumber = inputWorkspace->getAxis(1)->isSpectra(); + g_log.information() << "Axis is spectrum number: " << axisIsSpectrumNumber << std::endl; + // Determine if we need to use the second time range... - if ( ! ( ( enR2S == enR2E ) && ( enR2S == EMPTY_DBL() ) ) ) + const bool backgroundSubtraction = !((enR2S == enR2E) && (enR2S == EMPTY_DBL())); + g_log.information() << "Use background subtraction: " << backgroundSubtraction << std::endl; + + // Calculate number of steps + size_t numSteps = 4; + if(backgroundSubtraction) + numSteps += 1; + if(axisIsSpectrumNumber) + numSteps += 1; + + double stepProgress = 1.0 / static_cast<double>(numSteps); + + if(backgroundSubtraction) { - stepProgress = 1.0/6.0; - // ... CalculateFlatBackground, Minus, Integration... - IAlgorithm_sptr flatBG = createChildAlgorithm("CalculateFlatBackground",startProgress, endProgress,childAlgLogging); + IAlgorithm_sptr flatBG = createChildAlgorithm("CalculateFlatBackground", startProgress, endProgress, childAlgLogging); flatBG->setProperty<MatrixWorkspace_sptr>("InputWorkspace", inputWorkspace); flatBG->setProperty<double>("StartX", enR2S); flatBG->setProperty<double>("EndX", enR2E); @@ -69,7 +83,7 @@ void ElasticWindow::exec() MatrixWorkspace_sptr flatBGws = flatBG->getProperty("OutputWorkspace"); - IAlgorithm_sptr integ = createChildAlgorithm("Integration",startProgress, endProgress,childAlgLogging); + IAlgorithm_sptr integ = createChildAlgorithm("Integration", startProgress, endProgress, childAlgLogging); integ->setProperty<MatrixWorkspace_sptr>("InputWorkspace", flatBGws); integ->setProperty<double>("RangeLower", enR1S); integ->setProperty<double>("RangeUpper", enR1E); @@ -80,10 +94,8 @@ void ElasticWindow::exec() } else { - stepProgress = 1.0/5.0; - // ... Just Integration ... - IAlgorithm_sptr integ = createChildAlgorithm("Integration",startProgress, endProgress,childAlgLogging); + IAlgorithm_sptr integ = createChildAlgorithm("Integration", startProgress, endProgress, childAlgLogging); integ->setProperty<MatrixWorkspace_sptr>("InputWorkspace", inputWorkspace); integ->setProperty<double>("RangeLower", enR1S); integ->setProperty<double>("RangeUpper", enR1E); @@ -95,45 +107,80 @@ void ElasticWindow::exec() startProgress += stepProgress; endProgress += stepProgress; - // ... ConvertSpectrumAxis (ElasticQ). Version 2 to give the correct number - const int version = 2; - IAlgorithm_sptr csaQ = createChildAlgorithm("ConvertSpectrumAxis",startProgress,endProgress,childAlgLogging,version); - csaQ->setProperty<MatrixWorkspace_sptr>("InputWorkspace", integWS); - csaQ->setPropertyValue("Target", "ElasticQ"); - csaQ->setPropertyValue("EMode", "Indirect"); - csaQ->setPropertyValue("OutputWorkspace", "csaQ"); - csaQ->execute(); - MatrixWorkspace_sptr csaQws = csaQ->getProperty("OutputWorkspace"); - startProgress += stepProgress; - endProgress += stepProgress; - - // ... ConvertSpectrumAxis (Q2) ... - IAlgorithm_sptr csaQ2 = createChildAlgorithm("ConvertSpectrumAxis",startProgress,endProgress,childAlgLogging,version); - csaQ2->setProperty<MatrixWorkspace_sptr>("InputWorkspace", integWS); - csaQ2->setPropertyValue("Target", "ElasticQSquared"); - csaQ2->setPropertyValue("EMode", "Indirect"); - csaQ2->setPropertyValue("OutputWorkspace", "csaQ2"); - csaQ2->execute(); - MatrixWorkspace_sptr csaQ2ws = csaQ2->getProperty("OutputWorkspace"); - startProgress += stepProgress; - endProgress += stepProgress; + if(axisIsSpectrumNumber) + { + // Use ConvertSpectrumAxis v2 for correct result + const int version = 2; + + // ... ConvertSpectrumAxis (Q) ... + IAlgorithm_sptr csaQ = createChildAlgorithm("ConvertSpectrumAxis", startProgress, endProgress, childAlgLogging, version); + csaQ->setProperty<MatrixWorkspace_sptr>("InputWorkspace", integWS); + csaQ->setPropertyValue("Target", "ElasticQ"); + csaQ->setPropertyValue("EMode", "Indirect"); + csaQ->setPropertyValue("OutputWorkspace", "csaQ"); + csaQ->execute(); + MatrixWorkspace_sptr csaQws = csaQ->getProperty("OutputWorkspace"); + startProgress += stepProgress; + endProgress += stepProgress; + // ... ConvertSpectrumAxis (Q2) ... + IAlgorithm_sptr csaQ2 = createChildAlgorithm("ConvertSpectrumAxis", startProgress, endProgress, childAlgLogging, version); + csaQ2->setProperty<MatrixWorkspace_sptr>("InputWorkspace", integWS); + csaQ2->setPropertyValue("Target", "ElasticQSquared"); + csaQ2->setPropertyValue("EMode", "Indirect"); + csaQ2->setPropertyValue("OutputWorkspace", "csaQ2"); + csaQ2->execute(); + MatrixWorkspace_sptr csaQ2ws = csaQ2->getProperty("OutputWorkspace"); + startProgress += stepProgress; + endProgress += stepProgress; - // ... Transpose A ... - IAlgorithm_sptr tranQ = createChildAlgorithm("Transpose",startProgress,endProgress,childAlgLogging); - tranQ->setProperty<MatrixWorkspace_sptr>("InputWorkspace",csaQws); - tranQ->setPropertyValue("OutputWorkspace", "outQ"); - tranQ->execute(); - outputQ = tranQ->getProperty("OutputWorkspace"); - startProgress += stepProgress; - endProgress += stepProgress; + // ... Transpose (Q) ... + IAlgorithm_sptr tranQ = createChildAlgorithm("Transpose", startProgress, endProgress, childAlgLogging); + tranQ->setProperty<MatrixWorkspace_sptr>("InputWorkspace", csaQws); + tranQ->setPropertyValue("OutputWorkspace", "outQ"); + tranQ->execute(); + outputQ = tranQ->getProperty("OutputWorkspace"); + startProgress += stepProgress; + endProgress += stepProgress; + + // ... Transpose (Q2) ... + IAlgorithm_sptr tranQ2 = createChildAlgorithm("Transpose", startProgress, endProgress, childAlgLogging); + tranQ2->setProperty<MatrixWorkspace_sptr>("InputWorkspace", csaQ2ws); + tranQ2->setPropertyValue("OutputWorkspace", "outQSquared"); + tranQ2->execute(); + outputQSquared = tranQ2->getProperty("OutputWorkspace"); + startProgress += stepProgress; + endProgress += stepProgress; + } + else + { + // ... Transpose (Q) ... + IAlgorithm_sptr tranQ = createChildAlgorithm("Transpose", startProgress, endProgress, childAlgLogging); + tranQ->setProperty<MatrixWorkspace_sptr>("InputWorkspace", integWS); + tranQ->setPropertyValue("OutputWorkspace", "outQ"); + tranQ->execute(); + outputQ = tranQ->getProperty("OutputWorkspace"); + startProgress += stepProgress; + endProgress += stepProgress; - // ... Transpose B ... - IAlgorithm_sptr tranQ2 = createChildAlgorithm("Transpose", startProgress,endProgress,childAlgLogging); - tranQ2->setProperty<MatrixWorkspace_sptr>("InputWorkspace",csaQ2ws); - tranQ2->setPropertyValue("OutputWorkspace", "outQSquared"); - tranQ2->execute(); - outputQSquared = tranQ2->getProperty("OutputWorkspace"); + // ... Convert to Histogram (Q2) ... + IAlgorithm_sptr histQ2 = createChildAlgorithm("ConvertToHistogram", startProgress, endProgress, childAlgLogging); + histQ2->setProperty<MatrixWorkspace_sptr>("InputWorkspace", outputQ); + histQ2->setPropertyValue("OutputWorkspace", "outQ"); + histQ2->execute(); + MatrixWorkspace_sptr qHistWS = histQ2->getProperty("OutputWorkspace"); + startProgress += stepProgress; + endProgress += stepProgress; + + // ... Convert Units (Q2) ... + IAlgorithm_sptr convUnitQ2 = createChildAlgorithm("ConvertUnits", startProgress, endProgress, childAlgLogging); + convUnitQ2->setProperty<MatrixWorkspace_sptr>("InputWorkspace", qHistWS); + convUnitQ2->setPropertyValue("Target", "QSquared"); + convUnitQ2->setPropertyValue("EMode", "Indirect"); + convUnitQ2->setPropertyValue("OutputWorkspace", "outQSquared"); + convUnitQ2->execute(); + outputQSquared = convUnitQ2->getProperty("OutputWorkspace"); + } setProperty("OutputInQ", outputQ); setProperty("OutputInQSquared", outputQSquared); diff --git a/Code/Mantid/Framework/Algorithms/src/Integration.cpp b/Code/Mantid/Framework/Algorithms/src/Integration.cpp index 5c9ce61cc666d2b9853a118b76f5010bebd732c2..1e906c79ea0a78a75c2f1975222e92ebf222b34b 100644 --- a/Code/Mantid/Framework/Algorithms/src/Integration.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Integration.cpp @@ -9,6 +9,7 @@ #include "MantidAPI/Progress.h" #include <cmath> +#include "MantidAPI/NumericAxis.h" #include "MantidAPI/TextAxis.h" #include "MantidKernel/BoundedValidator.h" @@ -46,6 +47,20 @@ void Integration::init() declareProperty("IncludePartialBins", false, "If true then partial bins from the beginning and end of the input range are also included in the integration."); } +/** + * Std-style comparision function object (satisfies the requirements of Compare) + * @return true if first argument < second argument (with some tolerance/epsilon) + */ +struct tolerant_less: public std::binary_function<double,double,bool> +{ +public: + bool operator()(const double &left, const double &right) const + { + // soft equal, if the diff left-right is below a numerical error (uncertainty) threshold, we cannot say + return (left < right) && (std::abs(left - right) > 1*std::numeric_limits<double>::epsilon()); + } +}; + /** Executes the algorithm * * @throw runtime_error Thrown if algorithm cannot execute @@ -89,6 +104,7 @@ void Integration::exec() Progress progress(this, 0, 1, m_MaxSpec-m_MinSpec+1); const bool axisIsText = localworkspace->getAxis(1)->isText(); + const bool axisIsNumeric = localworkspace->getAxis(1)->isNumeric(); // Loop over spectra PARALLEL_FOR2(localworkspace,outputWorkspace) @@ -104,6 +120,11 @@ void Integration::exec() Mantid::API::TextAxis* newAxis = dynamic_cast<Mantid::API::TextAxis*>(outputWorkspace->getAxis(1)); newAxis->setLabel(outWI, localworkspace->getAxis(1)->label(i)); } + else if ( axisIsNumeric ) + { + Mantid::API::NumericAxis* newAxis = dynamic_cast<Mantid::API::NumericAxis*>(outputWorkspace->getAxis(1)); + newAxis->setValue(outWI, (*(localworkspace->getAxis(1)))(i)); + } // This is the output ISpectrum * outSpec = outputWorkspace->getSpectrum(outWI); @@ -129,17 +150,29 @@ void Integration::exec() // Find the range [min,max] MantidVec::const_iterator lowit, highit; - if (m_MinRange == EMPTY_DBL()) lowit=X.begin(); - else lowit=std::lower_bound(X.begin(),X.end(),m_MinRange); + if (m_MinRange == EMPTY_DBL()) + { + lowit=X.begin(); + } + else + { + lowit = std::lower_bound(X.begin(), X.end(), m_MinRange, tolerant_less()); + } - if (m_MaxRange == EMPTY_DBL()) highit=X.end(); - else highit=std::find_if(lowit,X.end(),std::bind2nd(std::greater<double>(),m_MaxRange)); + if (m_MaxRange == EMPTY_DBL()) + { + highit=X.end(); + } + else + { + highit = std::upper_bound(lowit, X.end(), m_MaxRange, tolerant_less()); + } // If range specified doesn't overlap with this spectrum then bail out if ( lowit == X.end() || highit == X.begin() ) continue; // Upper limit is the bin before, i.e. the last value smaller than MaxRange - --highit; + --highit; // (note: decrementing 'end()' is safe for vectors, at least according to the C++ standard) MantidVec::difference_type distmin = std::distance(X.begin(),lowit); MantidVec::difference_type distmax = std::distance(X.begin(),highit); diff --git a/Code/Mantid/Framework/Algorithms/test/ElasticWindowTest.h b/Code/Mantid/Framework/Algorithms/test/ElasticWindowTest.h index 3a6747b79b47cadf774fadb5d0bb92c28a5f164b..9c0104fb8b98354cd41363a5f735414b30fb5246 100644 --- a/Code/Mantid/Framework/Algorithms/test/ElasticWindowTest.h +++ b/Code/Mantid/Framework/Algorithms/test/ElasticWindowTest.h @@ -9,6 +9,7 @@ #include "MantidKernel/System.h" #include "MantidAlgorithms/ConvertUnits.h" +#include "MantidAlgorithms/ConvertSpectrumAxis.h" #include "MantidAlgorithms/CreateSampleWorkspace.h" #include "MantidAlgorithms/ElasticWindow.h" #include "MantidAlgorithms/Rebin.h" @@ -64,6 +65,23 @@ public: setParamAlg.execute(); } + /** + * Converts the generated sample workspace spectra axis to Q. + */ + void convertSampleWsToQ() + { + ConvertSpectrumAxis convQAlg; + convQAlg.initialize(); + + TS_ASSERT_THROWS_NOTHING( convQAlg.setProperty("InputWorkspace", "__ElasticWindowTest_sample") ); + TS_ASSERT_THROWS_NOTHING( convQAlg.setProperty("Target", "MomentumTransfer") ); + TS_ASSERT_THROWS_NOTHING( convQAlg.setProperty("EMode", "Indirect") ); + TS_ASSERT_THROWS_NOTHING( convQAlg.setProperty("OutputWorkspace", "__ElasticWindowTest_sample") ); + + TS_ASSERT_THROWS_NOTHING( convQAlg.execute() ); + TS_ASSERT( convQAlg.isExecuted() ); + } + /** * Test initialization of the algorithm is successful. */ @@ -75,9 +93,9 @@ public: } /** - * Test running ElasticWindow with just the peak range defined. + * Test running ElasticWindow with just the peak range defined using reduced data. */ - void test_peakOnly() + void test_redPeakOnly() { ElasticWindow elwinAlg; elwinAlg.initialize(); @@ -96,9 +114,33 @@ public: } /** - * Test running ElasticWindow with both the peak and background ranges defined. + * Test running ElasticWindow with just the peak range defined using S(Q,w) data. + */ + void test_sqwPeakOnly() + { + // First convert the sample workspace from spectra number to elastic Q + convertSampleWsToQ(); + + ElasticWindow elwinAlg; + elwinAlg.initialize(); + + TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("InputWorkspace", "__ElasticWindowTest_sample") ); + TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("Range1Start", -0.1) ); + TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("Range1End", 0.1) ); + TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("OutputInQ", "__ElasticWindowTest_outputQ") ); + TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("OutputInQSquared", "__ElasticWindowTest_outputQsq") ); + + TS_ASSERT_THROWS_NOTHING( elwinAlg.execute() ); + TS_ASSERT( elwinAlg.isExecuted() ); + + MatrixWorkspace_sptr qWs = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("__ElasticWindowTest_outputQ"); + verifyQworkspace(qWs); + } + + /** + * Test running ElasticWindow with both the peak and background ranges defined using reduced data. */ - void test_peakAndBackground() + void test_redPeakAndBackground() { ElasticWindow elwinAlg; elwinAlg.initialize(); diff --git a/Code/Mantid/Framework/Algorithms/test/IntegrationTest.h b/Code/Mantid/Framework/Algorithms/test/IntegrationTest.h index ab4498a01145b5eb8a7ada3b4f772320379b001d..d3e1809ecb16159da1ba4a8979620c6d808dd0eb 100644 --- a/Code/Mantid/Framework/Algorithms/test/IntegrationTest.h +++ b/Code/Mantid/Framework/Algorithms/test/IntegrationTest.h @@ -354,6 +354,102 @@ public: doTestRebinned("-1.5", "1.75", 0, 3, true, 4, truth); } + void makeRealBinBoundariesWorkspace(const std::string inWsName) + { + const unsigned int lenX = 11, lenY = 10, lenE = lenY; + + Workspace_sptr wsAsWs = WorkspaceFactory::Instance().create("Workspace2D", 1, lenX, lenY); + Workspace2D_sptr ws = boost::dynamic_pointer_cast<Workspace2D>(wsAsWs); + + double x[lenX] = {-1, -0.8, -0.6, -0.4, -0.2, -2.22045e-16, 0.2, 0.4, 0.6, 0.8, 1}; + for (unsigned int i = 0; i < lenX; i++) + { + ws->dataX(0)[i] = x[i]; + // Generate some rounding errors. Note: if you increase errors by making this more complicated, + // you'll eventually make Integration "fail". + // Q is: how much tolerance should it have to inprecise numbers? For example, replace the 13.3 + // multiplier/divisor by 13, and you'll get a -0.199999... sufficiently different from the + // initial -0.2 that Integration will fail to catch one bin and because of that some tests will fail. + ws->dataX(0)[i] /= 2.5671; + ws->dataX(0)[i] *= 13.3; + ws->dataX(0)[i] /= 13.3; + ws->dataX(0)[i] *= 2.5671; + } + double y[lenY] = {0, 0, 0, 2, 2, 2, 2, 0 , 0, 0}; + for (unsigned int i = 0; i < lenY; i++) + { + ws->dataY(0)[i] = y[i]; + } + double e[lenE] = {0, 0, 0, 0, 0, 0, 0, 0 , 0, 0}; + for (unsigned int i = 0; i < lenE; i++) + { + ws->dataE(0)[i] = e[i]; + } + AnalysisDataService::Instance().add(inWsName, ws); + } + + void doTestRealBinBoundaries(const std::string inWsName, + const std::string rangeLower, + const std::string rangeUpper, + const double expectedVal, + const bool checkRanges = false, + const bool IncPartialBins = false) + { + Workspace_sptr auxWs; + TS_ASSERT_THROWS_NOTHING(auxWs = AnalysisDataService::Instance().retrieve(inWsName)); + Workspace2D_sptr inWs = boost::dynamic_pointer_cast<Workspace2D>(auxWs); + + std::string outWsName = "out_real_boundaries_ws"; + + Integration integ; + integ.initialize(); + integ.setPropertyValue("InputWorkspace", inWs->getName()); + integ.setPropertyValue("OutputWorkspace", outWsName); + integ.setPropertyValue("RangeLower", rangeLower); + integ.setPropertyValue("RangeUpper", rangeUpper); + integ.setProperty("IncludePartialBins", IncPartialBins); + integ.execute(); + + // should have created output work space + TS_ASSERT_THROWS_NOTHING(auxWs = AnalysisDataService::Instance().retrieve(outWsName)); + Workspace2D_sptr outWs = boost::dynamic_pointer_cast<Workspace2D>(auxWs); + TS_ASSERT_EQUALS(inWs->getNumberHistograms(), outWs->getNumberHistograms()); + + if (checkRanges) + { + TS_ASSERT_LESS_THAN_EQUALS(atof(rangeLower.c_str()), outWs->dataX(0).front()); + TS_ASSERT_LESS_THAN_EQUALS(outWs->dataX(0).back(), atof(rangeUpper.c_str())); + } + // At last, check numerical results + TS_ASSERT_DELTA(outWs->dataY(0)[0], expectedVal, 1e-8 ); + } + + void testProperHandlingOfIntegrationBoundaries() + { + std::string inWsName = "in_real_boundaries_ws"; + makeRealBinBoundariesWorkspace(inWsName); + + doTestRealBinBoundaries(inWsName, "-0.4", "-0.2", 2, true); + doTestRealBinBoundaries(inWsName, "-0.2", "-0.0", 2, true); + doTestRealBinBoundaries(inWsName, "-0.2", "0.2", 4, true); + doTestRealBinBoundaries(inWsName, "-0.2", "0.4", 6, true); + doTestRealBinBoundaries(inWsName, "-0.4", "0.2", 6, true); + doTestRealBinBoundaries(inWsName, "-0.4", "0.4", 8, true); + doTestRealBinBoundaries(inWsName, "-1", "1", 8, true); + doTestRealBinBoundaries(inWsName, "-1.8", "1.2", 8, true); + + doTestRealBinBoundaries(inWsName, "-0.4", "-0.200001", 0, true); + doTestRealBinBoundaries(inWsName, "-0.399999", "-0.2", 0, true); + doTestRealBinBoundaries(inWsName, "-0.399999", "-0.200001", 0, true); + doTestRealBinBoundaries(inWsName, "-0.3999", "-0.2", 0, true); + + doTestRealBinBoundaries(inWsName, "0.6", "6.5", 0, true); + doTestRealBinBoundaries(inWsName, "-1", "-0.8", 0, true); + doTestRealBinBoundaries(inWsName, "2.2", "3.03", 0); + doTestRealBinBoundaries(inWsName, "-42.2", "-3.03", 0); + + } + private: Integration alg; // Test with range limits Integration alg2; // Test without limits diff --git a/Code/Mantid/Framework/CurveFitting/CMakeLists.txt b/Code/Mantid/Framework/CurveFitting/CMakeLists.txt index c0906757d86a153f51650c8a9ad346827c2c05fa..6fd76d691ebf01ce829db46c196cbcb71e0a6d2e 100644 --- a/Code/Mantid/Framework/CurveFitting/CMakeLists.txt +++ b/Code/Mantid/Framework/CurveFitting/CMakeLists.txt @@ -12,6 +12,7 @@ set ( SRC_FILES src/Bk2BkExpConvPV.cpp src/BoundaryConstraint.cpp src/CalculateGammaBackground.cpp + src/CalculateMSVesuvio.cpp src/Chebyshev.cpp src/ComptonPeakProfile.cpp src/ComptonProfile.cpp @@ -56,6 +57,7 @@ set ( SRC_FILES src/LogNormal.cpp src/Lorentzian.cpp src/Lorentzian1D.cpp + src/MSVesuvioHelpers.cpp src/MultiDomainCreator.cpp src/MuonFInteraction.cpp src/NeutronBk2BkExpConvPVoigt.cpp @@ -99,7 +101,7 @@ set ( SRC_FILES src/FakeMinimizer.cpp ) - + set ( SRC_UNITY_IGNORE_FILES src/Fit1D.cpp src/GSLFunctions.cpp ) set ( INC_FILES @@ -117,6 +119,7 @@ set ( INC_FILES inc/MantidCurveFitting/Bk2BkExpConvPV.h inc/MantidCurveFitting/BoundaryConstraint.h inc/MantidCurveFitting/CalculateGammaBackground.h + inc/MantidCurveFitting/CalculateMSVesuvio.h inc/MantidCurveFitting/Chebyshev.h inc/MantidCurveFitting/ComptonPeakProfile.h inc/MantidCurveFitting/ComptonProfile.h @@ -165,6 +168,7 @@ set ( INC_FILES inc/MantidCurveFitting/LogNormal.h inc/MantidCurveFitting/Lorentzian.h inc/MantidCurveFitting/Lorentzian1D.h + inc/MantidCurveFitting/MSVesuvioHelpers.h inc/MantidCurveFitting/MultiDomainCreator.h inc/MantidCurveFitting/MuonFInteraction.h inc/MantidCurveFitting/NeutronBk2BkExpConvPVoigt.h @@ -206,7 +210,7 @@ set ( INC_FILES inc/MantidCurveFitting/VesuvioResolution.h inc/MantidCurveFitting/Voigt.h ) - + set ( TEST_FILES # ChebyshevPolynomialBackgroundTest.h # RefinePowderInstrumentParametersTest.h @@ -220,6 +224,7 @@ set ( TEST_FILES Bk2BkExpConvPVTest.h BoundaryConstraintTest.h CalculateGammaBackgroundTest.h + CalculateMSVesuvioTest.h ChebyshevTest.h CompositeFunctionTest.h ComptonPeakProfileTest.h diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/CalculateMSVesuvio.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/CalculateMSVesuvio.h new file mode 100644 index 0000000000000000000000000000000000000000..0938057d47fe86db09c1afc4aef41b77a3cf1a72 --- /dev/null +++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/CalculateMSVesuvio.h @@ -0,0 +1,148 @@ +#ifndef MANTID_CURVEFITTING_CALCULATEMSVESUVIO_H_ +#define MANTID_CURVEFITTING_CALCULATEMSVESUVIO_H_ +//----------------------------------------------------------------------------- +// Includes +//----------------------------------------------------------------------------- +#include "MantidAPI/Algorithm.h" +#include "MantidGeometry/Instrument/ReferenceFrame.h" +#include "MantidKernel/V3D.h" + +namespace Mantid +{ + namespace CurveFitting + { + //----------------------------------------------------------------------------- + // CurveFitting forward declarations + //----------------------------------------------------------------------------- + struct DetectorParams; + struct ResolutionParams; + namespace MSVesuvioHelper + { + class RandomNumberGenerator; + struct Simulation; + struct SimulationWithErrors; + } + + /** + Calculates the multiple scattering & total scattering contributions + for a flat-plate or cylindrical sample. + + Copyright © 2014 ISIS Rutherford Appleton Laboratory & + NScD Oak Ridge National Laboratory + + This file is part of Mantid. + + Mantid is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + Mantid is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + File change history is stored at: <https://github.com/mantidproject/mantid> + Code Documentation is available at: <http://doxygen.mantidproject.org> + */ + class DLLExport CalculateMSVesuvio : public API::Algorithm + { + private: + // Holds date on the compton scattering properties of an atom + struct ComptonNeutronAtom + { + ComptonNeutronAtom() + : mass(-1.0), sclength(-1.0), profile(-1.0) {} + double mass; // in amu + double sclength; // 4pi/xsec + double profile; // s.d of J(y) + }; + // Holds data about sample as a whole. + struct SampleComptonProperties + { + SampleComptonProperties(const int nprops) + : atoms(nprops), density(-1.0), totalxsec(-1.0), + mu(-1.0) {} + + std::vector<ComptonNeutronAtom> atoms; + double density; // g/cm^3 + double totalxsec; // total free-scattering cross section + double mu; // attenuation factor (1/m) + }; + + public: + CalculateMSVesuvio(); + ~CalculateMSVesuvio(); + + /// @copydoc Algorithm::name + virtual const std::string name() const { return "CalculateMSVesuvio"; } + /// @copydoc Algorithm::version + virtual int version() const { return 1; } + /// @copydoc Algorithm::category + virtual const std::string category() const { return "ISIS"; } + /// @copydoc Algorithm::summary + virtual const std::string summary() const + { + return "Calculates the contributions of multiple scattering " + "on a flat plate sample for VESUVIO"; + } + + private: + void init(); + void exec(); + + void cacheInputs(); + void calculateMS(const size_t wsIndex, API::ISpectrum & totalsc, + API::ISpectrum & multsc) const; + void simulate(const DetectorParams & detpar, + const ResolutionParams &respar, + MSVesuvioHelper::Simulation & simulCounts) const; + void assignToOutput(const MSVesuvioHelper::SimulationWithErrors & avgCounts, + API::ISpectrum & totalsc, API::ISpectrum & multsc) const; + double calculateCounts(const DetectorParams & detpar, + const ResolutionParams &respar, + MSVesuvioHelper::Simulation & simulation) const; + + // single-event helpers + Kernel::V3D generateSrcPos(const double l1) const; + double generateE0(const double l1, const double t2, double &weight) const; + double generateTOF(const double gaussTOF, const double dtof, const double dl1) const; + bool generateScatter(const Kernel::V3D &startPos, const Kernel::V3D &direc, double &weight, + Kernel::V3D &scatterPt) const; + std::pair<double, double> calculateE1Range(const double theta, const double en0) const; + double partialDiffXSec(const double en0, const double en1, const double theta) const; + Kernel::V3D generateDetectorPos(const Kernel::V3D & nominalPos, const double energy, + const Kernel::V3D &scatterPt, + const Kernel::V3D & direcBeforeSc, + double &scang, double &distToExit) const; + double generateE1(const double angle, const double e1nom, const double e1res) const; + + // Member Variables + MSVesuvioHelper::RandomNumberGenerator *m_randgen; // random number generator + + size_t m_acrossIdx, m_upIdx, m_beamIdx; // indices of each direction + Kernel::V3D m_beamDir; // Directional vector for beam + double m_srcR2; // beam penumbra radius (m) + double m_halfSampleHeight, m_halfSampleWidth, m_halfSampleThick; // (m) + double m_maxWidthSampleFrame; // Maximum width in sample frame (m) + Geometry::Object const *m_sampleShape; // sample shape + SampleComptonProperties *m_sampleProps; // description of sample properties + double m_detHeight, m_detWidth, m_detThick; // (m) + double m_tmin, m_tmax, m_delt; // min, max & dt TOF value + double m_foilRes; // resolution in energy of foil + + size_t m_nscatters; // highest order of scattering to generate + size_t m_nruns; // number of runs per spectrum + size_t m_nevents; // number of single events per run + + API::Progress *m_progress; + API::MatrixWorkspace_sptr m_inputWS; + }; + + } // namespace CurveFitting +} // namespace Mantid + +#endif /* MANTID_CURVEFITTING_CALCULATEMSVESUVIO_H_ */ diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/ConvertToYSpace.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/ConvertToYSpace.h index 3bbbfeaa2292096f0b959821d8654d151e5c719d..caadecb044346b81e564d8143d62fa86619f1ca9 100644 --- a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/ConvertToYSpace.h +++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/ConvertToYSpace.h @@ -14,6 +14,7 @@ namespace CurveFitting { double l1; ///< source-sample distance in metres double l2; ///< sample-detector distance in metres + Kernel::V3D pos; ///< Full 3D position double theta; ///< scattering angle in radians double t0; ///< time delay in seconds double efixed; ///< final energy diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/MSVesuvioHelpers.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/MSVesuvioHelpers.h new file mode 100644 index 0000000000000000000000000000000000000000..9084339ea9ebb6bb0ef59082cf96df0dd9d52e68 --- /dev/null +++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/MSVesuvioHelpers.h @@ -0,0 +1,75 @@ +#ifndef MANTID_CURVEFITTING_MSVESUVIOHELPERS_H +#define MANTID_CURVEFITTING_MSVESUVIOHELPERS_H + +#include <vector> + +#include <boost/random/mersenne_twister.hpp> +#include <boost/random/normal_distribution.hpp> +#include <boost/random/uniform_real.hpp> + +namespace Mantid { namespace CurveFitting +{ + namespace MSVesuvioHelper + { + // Absorption energy for double-difference gold foil + double finalEnergyAuDD(const double randv); + // Absorption energy for gold foil YAP + double finalEnergyAuYap(const double randv); + // Absorption energy for uranium + double finalEnergyUranium(const double randv); + + // Ties together random numbers with various probability distributions + // @todo: Should move to Kernel + class RandomNumberGenerator + { + typedef boost::uniform_real<double> uniform_double; + typedef boost::normal_distribution<double> gaussian_double; + public: + RandomNumberGenerator(const int seed); + /// Returns a flat random number between 0.0 & 1.0 + double flat(); + /// Returns a random number distributed by a normal distribution + double gaussian(const double mean, const double sigma); + + private: + RandomNumberGenerator(); + boost::mt19937 m_generator; + }; + + // Stores counts for each scatter order + // for a "run" of a given number of events + struct Simulation + { + Simulation(const size_t order, const size_t ntimes); + + std::vector<std::vector<double>> counts; + size_t maxorder; + }; + // Stores counts for each scatter order with errors + struct SimulationWithErrors + { + SimulationWithErrors(const size_t order, const size_t ntimes) : + sim(order, ntimes), errors(order, std::vector<double>(ntimes)) {} + + void normalise(); + Simulation sim; + std::vector<std::vector<double>> errors; + }; + + // Accumulates and averages the results of a set of simulations + struct SimulationAggregator + { + SimulationAggregator(const size_t nruns); + + // Creates a placeholder for a new simulation + Simulation & newSimulation(const size_t order, + const size_t ntimes); + SimulationWithErrors average() const; + + std::vector<Simulation> results; + }; + + } +}} + +#endif // MANTID_CURVEFITTING_MSVESUVIOHELPERS_H diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/VesuvioResolution.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/VesuvioResolution.h index f03970f602238b8b5c0353dbbb76c0d96c004b0c..543363c119e95124405196c895c33a190540195a 100644 --- a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/VesuvioResolution.h +++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/VesuvioResolution.h @@ -20,11 +20,12 @@ namespace CurveFitting /// It avoids some functions taking a huge number of arguments struct ResolutionParams { - double dl1; ///< spread in source-sample distance - double dl2; ///< spread in sample-detector distance - double dthe; ///< spread in scattering angle - double dEnLorentz; ///< lorentz width in energy - double dEnGauss; ///< gaussian width in energy + double dl1; ///< spread in source-sample distance (m) + double dl2; ///< spread in sample-detector distance (m) + double dtof; ///< spread in tof measurement (us) + double dthe; ///< spread in scattering angle (radians) + double dEnLorentz; ///< lorentz width in energy (meV) + double dEnGauss; ///< gaussian width in energy (meV }; /** @@ -54,6 +55,11 @@ namespace CurveFitting class MANTID_CURVEFITTING_DLL VesuvioResolution : public virtual API::ParamFunction, public virtual API::IFunction1D { public: + + /// Creates a POD struct containing the required resolution parameters for this spectrum + static ResolutionParams getResolutionParameters(const API::MatrixWorkspace_const_sptr & ws, + const size_t index); + /// Default constructor required for factory VesuvioResolution(); diff --git a/Code/Mantid/Framework/CurveFitting/src/CalculateMSVesuvio.cpp b/Code/Mantid/Framework/CurveFitting/src/CalculateMSVesuvio.cpp new file mode 100644 index 0000000000000000000000000000000000000000..17a999da97401b41b8218b2b78df592c71edbb8d --- /dev/null +++ b/Code/Mantid/Framework/CurveFitting/src/CalculateMSVesuvio.cpp @@ -0,0 +1,787 @@ +//----------------------------------------------------------------------------- +// Includes +//----------------------------------------------------------------------------- +#include "MantidCurveFitting/CalculateMSVesuvio.h" +// Use helpers for storing detector/resolution parameters +#include "MantidCurveFitting/ConvertToYSpace.h" +#include "MantidCurveFitting/MSVesuvioHelpers.h" +#include "MantidCurveFitting/VesuvioResolution.h" + +#include "MantidAPI/SampleShapeValidator.h" +#include "MantidAPI/WorkspaceValidators.h" + +#include "MantidGeometry/Instrument/ParameterMap.h" +#include "MantidGeometry/Objects/Track.h" + +#include "MantidKernel/ArrayLengthValidator.h" +#include "MantidKernel/ArrayProperty.h" +#include "MantidKernel/BoundedValidator.h" +#include "MantidKernel/CompositeValidator.h" +#include "MantidKernel/MersenneTwister.h" +#include "MantidKernel/VectorHelper.h" + +#include <boost/make_shared.hpp> + +namespace Mantid +{ + namespace CurveFitting + { + using namespace API; + using namespace Kernel; + using Geometry::Link; + using Geometry::ParameterMap; + using Geometry::Track; + + namespace + { + const size_t MAX_SCATTER_PT_TRIES = 25; + /// Conversion constant + const double MASS_TO_MEV = 0.5*PhysicalConstants::NeutronMass/PhysicalConstants::meV; + } // end anonymous namespace + + //------------------------------------------------------------------------- + // Member functions + //------------------------------------------------------------------------- + + // Register the algorithm into the AlgorithmFactory + DECLARE_ALGORITHM(CalculateMSVesuvio) + + /// Constructor + CalculateMSVesuvio::CalculateMSVesuvio() : Algorithm(), + m_randgen(NULL), + m_acrossIdx(0), m_upIdx(1), m_beamIdx(3), m_beamDir(), m_srcR2(0.0), + m_halfSampleHeight(0.0), m_halfSampleWidth(0.0), m_halfSampleThick(0.0), + m_maxWidthSampleFrame(0.0), m_sampleShape(NULL), m_sampleProps(NULL), + m_detHeight(-1.0), m_detWidth(-1.0), m_detThick(-1.0), + m_tmin(-1.0), m_tmax(-1.0), m_delt(-1.0), m_foilRes(-1.0), + m_nscatters(0), m_nruns(0), m_nevents(0), + m_progress(NULL), m_inputWS() + { + } + + /// Destructor + CalculateMSVesuvio::~CalculateMSVesuvio() + { + delete m_randgen; + delete m_progress; + delete m_sampleProps; + } + + /** + * Initialize the algorithm's properties. + */ + void CalculateMSVesuvio::init() + { + // Inputs + auto inputWSValidator = boost::make_shared<CompositeValidator>(); + inputWSValidator->add<WorkspaceUnitValidator>("TOF"); + inputWSValidator->add<SampleShapeValidator>(); + declareProperty(new WorkspaceProperty<>("InputWorkspace","", + Direction::Input, inputWSValidator), + "Input workspace to be corrected, in units of TOF."); + + // -- Sample -- + auto positiveInt = boost::make_shared<Kernel::BoundedValidator<int>>(); + positiveInt->setLower(1); + declareProperty("NoOfMasses", -1, positiveInt, + "The number of masses contained within the sample"); + + auto positiveNonZero = boost::make_shared<BoundedValidator<double>>(); + positiveNonZero->setLower(0.0); + positiveNonZero->setLowerExclusive(true); + declareProperty("SampleDensity", -1.0, positiveNonZero, + "The density of the sample in gm/cm^3"); + + auto nonEmptyArray = boost::make_shared<ArrayLengthValidator<double>>(); + nonEmptyArray->setLengthMin(3); + declareProperty(new ArrayProperty<double>("AtomicProperties", nonEmptyArray), + "Atomic properties of masses within the sample. " + "The expected format is 3 consecutive values per mass: " + "mass(amu), cross-section (barns) & s.d of Compton profile."); + setPropertyGroup("NoOfMasses", "Sample"); + setPropertyGroup("SampleDensity", "Sample"); + setPropertyGroup("AtomicProperties", "Sample"); + + // -- Beam -- + declareProperty("BeamRadius", -1.0, positiveNonZero, + "Radius, in cm, of beam"); + + // -- Algorithm -- + declareProperty("Seed", 123456789, positiveInt, + "Seed the random number generator with this value"); + declareProperty("NumScatters", 3, positiveInt, + "Number of scattering orders to calculate"); + declareProperty("NumRuns", 10, positiveInt, + "Number of simulated runs per spectrum"); + declareProperty("NumEventsPerRun", 50000, positiveInt, + "Number of events per run"); + setPropertyGroup("Seed", "Algorithm"); + setPropertyGroup("NumScatters", "Algorithm"); + setPropertyGroup("NumRuns", "Algorithm"); + setPropertyGroup("NumEventsPerRun", "Algorithm"); + + // Outputs + declareProperty(new WorkspaceProperty<>("TotalScatteringWS","", Direction::Output), + "Workspace to store the calculated total scattering counts"); + declareProperty(new WorkspaceProperty<>("MultipleScatteringWS","", Direction::Output), + "Workspace to store the calculated total scattering counts"); + } + + /** + * Execute the algorithm. + */ + void CalculateMSVesuvio::exec() + { + m_inputWS = getProperty("InputWorkspace"); + cacheInputs(); + + // Create new workspaces + MatrixWorkspace_sptr totalsc = WorkspaceFactory::Instance().create(m_inputWS); + MatrixWorkspace_sptr multsc = WorkspaceFactory::Instance().create(m_inputWS); + + // Initialize random number generator + m_randgen = new MSVesuvioHelper::RandomNumberGenerator(getProperty("Seed")); + + // Setup progress + const size_t nhist = m_inputWS->getNumberHistograms(); + m_progress = new API::Progress(this, 0.0, 1.0, nhist*m_nruns*2); + for(size_t i = 0; i < nhist; ++i) + { + + // Copy over the X-values + const MantidVec & xValues = m_inputWS->readX(i); + totalsc->dataX(i) = xValues; + multsc->dataX(i) = xValues; + + // Final detector position + Geometry::IDetector_const_sptr detector; + try + { + detector = m_inputWS->getDetector(i); + } + catch(Kernel::Exception::NotFoundError&) + { + // intel compiler doesn't like continue in a catch inside an OMP loop + } + if(!detector) + { + std::ostringstream os; + os << "No valid detector object found for spectrum at workspace index '" << i << "'. No correction calculated."; + g_log.information(os.str()); + continue; + } + + // the output spectrum objects have references to where the data will be stored + calculateMS(i, *totalsc->getSpectrum(i), *multsc->getSpectrum(i)); + } + + setProperty("TotalScatteringWS", totalsc); + setProperty("MultipleScatteringWS", multsc); + } + + /** + * Caches inputs insuitable form for speed in later calculations + */ + void CalculateMSVesuvio::cacheInputs() + { + // Algorithm + int nscatters = getProperty("NumScatters"); + m_nscatters = static_cast<size_t>(nscatters); + int nruns = getProperty("NumRuns"); + m_nruns = static_cast<size_t>(nruns); + int nevents = getProperty("NumEventsPerRun"); + m_nevents = static_cast<size_t>(nevents); + + // -- Geometry -- + const auto instrument = m_inputWS->getInstrument(); + m_beamDir = instrument->getSample()->getPos() - instrument->getSource()->getPos(); + m_beamDir.normalize(); + + const auto rframe = instrument->getReferenceFrame(); + m_acrossIdx = rframe->pointingHorizontal(); + m_upIdx = rframe->pointingUp(); + m_beamIdx = rframe->pointingAlongBeam(); + + m_srcR2 = getProperty("BeamRadius"); + // Convert to metres + m_srcR2 /= 100.0; + + // Sample shape + m_sampleShape = &(m_inputWS->sample().getShape()); + // We know the shape is valid from the property validator + // Use the bounding box as an approximation to determine the extents + // as this will match in both height and width for a cuboid & cylinder + // sample shape + Geometry::BoundingBox bounds = m_sampleShape->getBoundingBox(); + V3D boxWidth = bounds.width(); + // Use half-width/height for easier calculation later + m_halfSampleWidth = 0.5*boxWidth[m_acrossIdx]; + m_halfSampleHeight = 0.5*boxWidth[m_upIdx]; + m_halfSampleThick = 0.5*boxWidth[m_beamIdx]; + + // -- Workspace -- + const auto & inX = m_inputWS->readX(0); + m_tmin = inX.front()*1e-06; + m_tmax = inX.back()*1e-06; + m_delt = (inX[1] - inX.front()); + + // -- Sample -- + int nmasses = getProperty("NoOfMasses"); + std::vector<double> sampleInfo = getProperty("AtomicProperties"); + const int nInputAtomProps = static_cast<int>(sampleInfo.size()); + const int nExptdAtomProp(3); + if(nInputAtomProps != nExptdAtomProp*nmasses) + { + std::ostringstream os; + os << "Inconsistent AtomicProperties list defined. Expected " << nExptdAtomProp*nmasses + << " values, however, only " << sampleInfo.size() << " have been given."; + throw std::invalid_argument(os.str()); + } + const int natoms = nInputAtomProps/3; + m_sampleProps = new SampleComptonProperties(natoms); + m_sampleProps->density = getProperty("SampleDensity"); + + double totalMass(0.0); // total mass in grams + m_sampleProps->totalxsec = 0.0; + for(int i = 0; i < natoms; ++i) + { + auto & comptonAtom = m_sampleProps->atoms[i]; + comptonAtom.mass = sampleInfo[nExptdAtomProp*i]; + totalMass += comptonAtom.mass*PhysicalConstants::AtomicMassUnit*1000; + + const double xsec = sampleInfo[nExptdAtomProp*i + 1]; + comptonAtom.sclength = sqrt(xsec/(4.0*M_PI)); + const double factor = 1.0 + (PhysicalConstants::NeutronMassAMU/comptonAtom.mass); + m_sampleProps->totalxsec += (xsec/(factor*factor)); + + comptonAtom.profile = sampleInfo[nExptdAtomProp*i + 2]; + } + const double numberDensity = m_sampleProps->density*1e6/totalMass; // formula units/m^3 + m_sampleProps->mu = numberDensity*m_sampleProps->totalxsec*1e-28; + + // -- Detector geometry -- choose first detector that is not a monitor + Geometry::IDetector_const_sptr detPixel; + for(size_t i = 0; i < m_inputWS->getNumberHistograms(); ++i) + { + try + { + detPixel = m_inputWS->getDetector(i); + } + catch(Exception::NotFoundError &) + { + continue; + } + if(!detPixel->isMonitor()) break; + } + // Bounding box in detector frame + Geometry::Object_const_sptr pixelShape = detPixel->shape(); + if(!pixelShape || !pixelShape->hasValidShape()) + { + throw std::invalid_argument("Detector pixel has no defined shape!"); + } + Geometry::BoundingBox detBounds = pixelShape->getBoundingBox(); + V3D detBoxWidth = detBounds.width(); + m_detWidth = detBoxWidth[m_acrossIdx]; + m_detHeight = detBoxWidth[m_upIdx]; + m_detThick = detBoxWidth[m_beamIdx]; + + // Foil resolution + auto foil = instrument->getComponentByName("foil-pos0"); + if(!foil) + { + throw std::runtime_error("Workspace has no gold foil component defined."); + } + auto param = m_inputWS->instrumentParameters().get(foil.get(), "hwhm_lorentz"); + if(!param) + { + throw std::runtime_error("Foil component has no hwhm_lorentz parameter defined."); + } + m_foilRes = param->value<double>(); + } + + /** + * Calculate the total scattering and contributions from higher-order scattering for given + * spectrum + * @param wsIndex The index on the input workspace for the chosen spectrum + * @param totalsc A non-const reference to the spectrum that will contain the total scattering calculation + * @param multsc A non-const reference to the spectrum that will contain the multiple scattering contribution + */ + void CalculateMSVesuvio::calculateMS(const size_t wsIndex, API::ISpectrum & totalsc, + API::ISpectrum & multsc) const + { + // Detector information + DetectorParams detpar = ConvertToYSpace::getDetectorParameters(m_inputWS, wsIndex); + detpar.t0 *= 1e6; // t0 in microseconds here + ResolutionParams respar = VesuvioResolution::getResolutionParameters(m_inputWS, wsIndex); + + // Final counts averaged over all simulations + MSVesuvioHelper::SimulationAggregator accumulator(m_nruns); + for(size_t i = 0; i < m_nruns; ++i) + { + m_progress->report("MS calculation: idx=" + boost::lexical_cast<std::string>(wsIndex) + + ", run=" + boost::lexical_cast<std::string>(i)); + + simulate(detpar, respar, + accumulator.newSimulation(m_nscatters, m_inputWS->blocksize())); + + m_progress->report("MS calculation: idx=" + boost::lexical_cast<std::string>(wsIndex) + + ", run=" + boost::lexical_cast<std::string>(i)); + } + + // Average over all runs and assign to output workspaces + MSVesuvioHelper::SimulationWithErrors avgCounts = accumulator.average(); + avgCounts.normalise(); + assignToOutput(avgCounts, totalsc, multsc); + } + + /** + * Perform a single simulation of a given number of events for up to a maximum number of + * scatterings on a chosen detector + * @param detpar Detector information describing the final detector position + * @param respar Resolution information on the intrument as a whole + * @param simulCounts Simulation object used to storing the calculated number of counts + */ + void CalculateMSVesuvio::simulate(const DetectorParams & detpar, + const ResolutionParams &respar, + MSVesuvioHelper::Simulation & simulCounts) const + { + for(size_t i = 0; i < m_nevents; ++i) + { + calculateCounts(detpar, respar, simulCounts); + } + } + + /** + * Assign the averaged counts to the correct workspaces + * @param avgCounts Counts & errors separated for each scattering order + * @param totalsc A non-const reference to the spectrum for the total scattering calculation + * @param multsc A non-const reference to the spectrum for the multiple scattering contribution + */ + void + CalculateMSVesuvio::assignToOutput(const MSVesuvioHelper::SimulationWithErrors &avgCounts, + API::ISpectrum & totalsc, API::ISpectrum & multsc) const + { + // Sum up all multiple scatter events + auto & msscatY = multsc.dataY(); + auto & msscatE = multsc.dataE(); + for(size_t i = 1; i < m_nscatters; ++i) //(i >= 1 for multiple scatters) + { + const auto & counts = avgCounts.sim.counts[i]; + // equivalent to msscatY[j] += counts[j] + std::transform(counts.begin(), counts.end(), msscatY.begin(), msscatY.begin(), + std::plus<double>()); + const auto & scerrors = avgCounts.errors[i]; + // sum errors in quadrature + std::transform(scerrors.begin(), scerrors.end(), msscatE.begin(), msscatE.begin(), + VectorHelper::SumGaussError<double>()); + } + // for total scattering add on single-scatter events + auto & totalscY = totalsc.dataY(); + auto & totalscE = totalsc.dataE(); + const auto & counts0 = avgCounts.sim.counts.front(); + std::transform(counts0.begin(), counts0.end(), msscatY.begin(), totalscY.begin(), + std::plus<double>()); + const auto & errors0 = avgCounts.errors.front(); + std::transform(errors0.begin(), errors0.end(), msscatE.begin(), totalscE.begin(), + VectorHelper::SumGaussError<double>()); + } + + /** + * @param detpar Detector information describing the final detector position + * @param respar Resolution information on the intrument as a whole + * @param simulation [Output] Store the calculated counts here + * @return The sum of the weights for all scatters + */ + double CalculateMSVesuvio::calculateCounts(const DetectorParams &detpar, + const ResolutionParams &respar, + MSVesuvioHelper::Simulation &simulation) const + { + double weightSum(0.0); + + // moderator coord in lab frame + V3D srcPos = generateSrcPos(detpar.l1); + if(fabs(srcPos[m_acrossIdx]) > m_halfSampleWidth || + fabs(srcPos[m_upIdx]) > m_halfSampleHeight) + { + return 0.0; // misses sample + } + + // track various variables during calculation + std::vector<double> weights(m_nscatters, 1.0), // start at 1.0 + tofs(m_nscatters, 0.0), // tof accumulates for each piece of the calculation + en1(m_nscatters, 0.0); + + const double vel2 = sqrt(detpar.efixed/MASS_TO_MEV); + const double t2 = detpar.l2/vel2; + en1[0] = generateE0(detpar.l1, t2, weights[0]); + tofs[0] = generateTOF(en1[0], respar.dtof, respar.dl1); // correction for resolution in l1 + + // Neutron path + std::vector<V3D> scatterPts(m_nscatters), // track origin of each scatter + neutronDirs(m_nscatters); // neutron directions + V3D startPos(srcPos); + neutronDirs[0] = m_beamDir; + + generateScatter(startPos, neutronDirs[0], weights[0], scatterPts[0]); + double distFromStart = startPos.distance(scatterPts[0]); + // Compute TOF for first scatter event + const double vel0 = sqrt(en1[0]/MASS_TO_MEV); + tofs[0] += (distFromStart*1e6/vel0); + + // multiple scatter events within sample, i.e not including zeroth + for(size_t i = 1; i < m_nscatters; ++i) + { + weights[i] = weights[i-1]; + tofs[i] = tofs[i-1]; + + // Generate a new direction of travel + const V3D & prevSc = scatterPts[i-1]; + V3D & curSc = scatterPts[i]; + const V3D & oldDir = neutronDirs[i-1]; + V3D & newDir = neutronDirs[i]; + size_t ntries(0); + do + { + const double randth = acos(2.0*m_randgen->flat() - 1.0); + const double randphi = 2.0*M_PI*m_randgen->flat(); + newDir.azimuth_polar_SNS(1.0, randphi, randth); + + // Update weight + const double wgt = weights[i]; + if(generateScatter(prevSc, newDir, weights[i], curSc)) + break; + else + { + weights[i] = wgt; // put it back to what it was + ++ntries; + } + } + while(ntries < MAX_SCATTER_PT_TRIES); + if(ntries == MAX_SCATTER_PT_TRIES) + { + throw std::runtime_error("Unable to generate scatter point in sample. Check sample shape."); + } + + const double scang = newDir.angle(oldDir); + auto e1range = calculateE1Range(scang, en1[i-1]); + en1[i] = e1range.first + m_randgen->flat()*(e1range.second - e1range.first); + const double d2sig = partialDiffXSec(en1[i-1], en1[i], scang); + double weight = d2sig*4.0*M_PI*(e1range.second - e1range.first)/m_sampleProps->totalxsec; + // accumulate total weight + weightSum += weight; + weights[i] *= weight; // account for this scatter on top of previous + + // Increment time of flight... + const double veli = sqrt(en1[i]/MASS_TO_MEV); + tofs[i] += (curSc.distance(prevSc)*1e6/veli); + } + + // force all orders in to current detector + const auto & inX = m_inputWS->readX(0); + for(size_t i = 0; i < m_nscatters; ++i) + { + double scang(0.0), distToExit(0.0); + V3D detPos = generateDetectorPos(detpar.pos, en1[i], scatterPts[i], neutronDirs[i], + scang, distToExit); + // Weight by probability neutron leaves sample + double & curWgt = weights[i]; + curWgt *= exp(-m_sampleProps->mu*distToExit); + // Weight by cross-section for the final energy + const double efinal = generateE1(detpar.theta, detpar.efixed, m_foilRes); + curWgt *= partialDiffXSec(en1[i], efinal, scang)/m_sampleProps->totalxsec; + // final TOF + const double veli = sqrt(efinal/MASS_TO_MEV); + tofs[i] += detpar.t0 + (scatterPts[i].distance(detPos)*1e6)/veli; + // "Bin" weight into appropriate place + std::vector<double> &counts = simulation.counts[i]; + const double finalTOF = tofs[i]; + + for (size_t it = 0; it < inX.size(); ++it) + { + if (inX[it] - 0.5*m_delt < finalTOF && finalTOF < inX[it] + 0.5*m_delt) + { + counts[it] += curWgt; + break; + } + } + } + + return weightSum; + } + + /** + * Sample from the moderator assuming it can be seen + * as a cylindrical ring with inner and outer radius + * @param l1 Src-sample distance (m) + * @returns Position on the moderator of the generated point + */ + V3D CalculateMSVesuvio::generateSrcPos(const double l1) const + { + double radius(-1.0), widthPos(0.0), heightPos(0.0); + do + { + widthPos = -m_srcR2 + 2.0*m_srcR2*m_randgen->flat(); + heightPos = -m_srcR2 + 2.0*m_srcR2*m_randgen->flat(); + using std::sqrt; + radius = sqrt(widthPos*widthPos + heightPos*heightPos); + } + while(radius > m_srcR2); + // assign to output + V3D srcPos; + srcPos[m_acrossIdx] = widthPos; + srcPos[m_upIdx] = heightPos; + srcPos[m_beamIdx] = -l1; + + return srcPos; + } + + /** + * Generate an incident energy based on a randomly-selected TOF value + * It is assigned a weight = (2.0*E0/(T-t2))/E0^0.9. + * @param l1 Distance from src to sample (metres) + * @param t2 Nominal time from sample to detector (seconds) + * @param weight [Out] Weight factor to modify for the generated energy value + * @return + */ + double CalculateMSVesuvio::generateE0(const double l1, const double t2, double &weight) const + { + const double tof = m_tmin + (m_tmax - m_tmin)*m_randgen->flat(); + const double t1 = (tof - t2); + const double vel0 = l1/t1; + const double en0 = MASS_TO_MEV*vel0*vel0; + + weight = 2.0*en0/t1/pow(en0, 0.9); + weight *= 1e-4; // Reduce weight to ~1 + + return en0; + } + + /** + * Generate an initial tof from this distribution: + * 1-(0.5*X**2/T0**2+X/T0+1)*EXP(-X/T0), where x is the time and t0 + * is the src-sample time. + * @param dtof Error in time resolution (us) + * @param en0 Value of the incident energy + * @param dl1 S.d of moderator to sample distance + * @return tof Guass TOF modified for asymmetric pulse + */ + double CalculateMSVesuvio::generateTOF(const double en0, const double dtof, + const double dl1) const + { + const double vel1 = sqrt(en0/MASS_TO_MEV); + const double dt1 = (dl1/vel1)*1e6; + const double xmin(0.0), xmax(15.0*dt1); + double dx = 0.5*(xmax - xmin); + // Generate a random y position in th distribution + const double yv = m_randgen->flat(); + + double xt(xmin); + double tof = m_randgen->gaussian(0.0, dtof); + while(true) + { + xt += dx; + //Y=1-(0.5*X**2/T0**2+X/T0+1)*EXP(-X/T0) + double y = 1.0 - (0.5*xt*xt/(dt1*dt1) + xt/dt1 + 1)*exp(-xt/dt1); + if(fabs(y - yv) < 1e-4) + { + tof += xt - 3*dt1; + break; + } + if(y > yv) + { + dx = -fabs(0.5*dx); + } + else + { + dx = fabs(0.5*dx); + } + } + return tof; + } + + /** + * Generate a scatter event and update the weight according to the + * amount the beam would be attenuted by the sample + * @param startPos Starting position + * @param direc Direction of travel for the neutron + * @param weight [InOut] Multiply the incoming weight by the attenuation factor + * @param scatterPt [Out] Generated scattering point + * @return True if the scatter event was generated, false otherwise + */ + bool CalculateMSVesuvio::generateScatter(const Kernel::V3D &startPos, const Kernel::V3D &direc, + double &weight, V3D &scatterPt) const + { + Track particleTrack(startPos, direc); + if(m_sampleShape->interceptSurface(particleTrack) != 1) + { + return false; + } + // Find distance inside object and compute probability of scattering + const auto & link = particleTrack.begin(); + double totalObjectDist = link->distInsideObject; + const double scatterProb = 1.0 - exp(-m_sampleProps->mu*totalObjectDist); + // Select a random point on the track that is the actual scatter point + // from the scattering probability distribution + const double dist = -log(1.0 - m_randgen->flat()*scatterProb)/m_sampleProps->mu; + const double fraction = dist/totalObjectDist; + // Scatter point is then entry point + fraction of width in each direction + scatterPt = link->entryPoint; + V3D edgeDistances = (link->exitPoint - link->entryPoint); + scatterPt += edgeDistances*fraction; + // Update weight + weight *= scatterProb; + return true; + } + + /** + * @param theta Neutron scattering angle (radians) + * @param en0 Computed incident energy + * @return The range of allowed final energies for the neutron + */ + std::pair<double, double> CalculateMSVesuvio::calculateE1Range(const double theta, const double en0) const + { + const double k0 = sqrt(en0/PhysicalConstants::E_mev_toNeutronWavenumberSq); + const double sth(sin(theta)), cth(cos(theta)); + + double e1min(1e10), e1max(-1e10); // large so that anything else is smaller + const auto & atoms = m_sampleProps->atoms; + for(size_t i = 0; i < atoms.size(); ++i) + { + const double mass = atoms[i].mass; + + const double fraction = (cth + sqrt(mass*mass - sth*sth))/(1.0 + mass); + const double k1 = fraction*k0; + const double en1 = PhysicalConstants::E_mev_toNeutronWavenumberSq*k1*k1; + const double qr = sqrt(k0*k0 + k1*k1 - 2.0*k0*k1*cth); + const double wr = en0 - en1; + const double width = PhysicalConstants::E_mev_toNeutronWavenumberSq*atoms[i].profile*qr/mass; + const double e1a = en0 - wr - 10.0*width; + const double e1b = en0 - wr + 10.0*width; + if(e1a < e1min) e1min = e1a; + if(e1b > e1max) e1max = e1b; + } + if(e1min < 0.0) e1min = 0.0; + return std::make_pair(e1min, e1max); + } + + /** + * Compute the partial differential cross section for this energy and theta. + * @param en0 Initial energy (meV) + * @param en1 Final energy (meV) + * @param theta Scattering angle + * @return Value of differential cross section + */ + double CalculateMSVesuvio::partialDiffXSec(const double en0, const double en1, const double theta) const + { + const double rt2pi = sqrt(2.0*M_PI); + + const double k0 = sqrt(en0/PhysicalConstants::E_mev_toNeutronWavenumberSq); + const double k1 = sqrt(en1/PhysicalConstants::E_mev_toNeutronWavenumberSq); + const double q = sqrt(k0*k0 + k1*k1 - 2.0*k0*k1*cos(theta)); + const double w = en0 - en1; + + double pdcs(0.0); + const auto & atoms = m_sampleProps->atoms; + if(q > 0.0) // avoid continuous checking in loop + { + for(size_t i = 0; i < atoms.size(); ++i) + { + const double jstddev = atoms[i].profile; + const double mass = atoms[i].mass; + const double y = mass*w/(4.18036*q) - 0.5*q; + const double jy = exp(-0.5*y*y/(jstddev*jstddev))/(jstddev*rt2pi); + const double sqw = mass*jy/(4.18036*q); + + const double sclength = atoms[i].sclength; + pdcs += sclength*sclength*(k1/k0)*sqw; + } + } + else + { + for(size_t i = 0; i < atoms.size(); ++i) + { + const double sclength = atoms[i].sclength; + pdcs += sclength*sclength; + } + } + + return pdcs; + } + + /** + * Generate a random position within the final detector in the lab frame + * @param nominalPos The poisiton of the centre point of the detector + * @param energy The final energy of the neutron + * @param scatterPt The position of the scatter event that lead to this detector + * @param direcBeforeSc Directional vector that lead to scatter point that hit this detector + * @param scang [Output] The value of the scattering angle for the generated point + * @param distToExit [Output] The distance covered within the object from scatter to exit + * @return A new position in the detector + */ + V3D CalculateMSVesuvio::generateDetectorPos(const V3D &nominalPos, const double energy, + const V3D &scatterPt, const V3D &direcBeforeSc, + double &scang, double &distToExit) const + { + const double mu = 7430.0/sqrt(energy); // Inverse attenuation length (m-1) for vesuvio det. + const double ps = 1.0 - exp(-mu*m_detThick); // Probability of detection in path thickness. + V3D detPos; + scang = 0.0; distToExit = 0.0; + size_t ntries(0); + do + { + // Beam direction by moving to front of "box"define by detector dimensions and then + // computing expected distance travelled based on probability + detPos[m_beamIdx] = (nominalPos[m_beamIdx] - 0.5*m_detThick) - \ + (log(1.0 - m_randgen->flat()*ps)/mu); + // perturb away from nominal position + detPos[m_acrossIdx] = nominalPos[m_acrossIdx] + (m_randgen->flat() - 0.5)*m_detWidth; + detPos[m_upIdx] = nominalPos[m_upIdx] + (m_randgen->flat() - 0.5)*m_detHeight; + + // Distance to exit the sample for this order + V3D scToDet = detPos - scatterPt; + scToDet.normalize(); + Geometry::Track scatterToDet(scatterPt, scToDet); + if(m_sampleShape->interceptSurface(scatterToDet) > 0) + { + scang = direcBeforeSc.angle(scToDet); + const auto & link = scatterToDet.begin(); + distToExit = link->distInsideObject; + break; + } + // if point is very close surface then there may be no valid intercept so try again + } + while(ntries < MAX_SCATTER_PT_TRIES); + if(ntries == MAX_SCATTER_PT_TRIES) + { + throw std::runtime_error("Unable to create track from sample to detector. " + "Detector shape may be too small."); + } + return detPos; + } + + /** + * Generate the final energy of the analyser + * @param angle Detector angle from sample + * @param e1nom The nominal final energy of the analyzer + * @param e1res The resoltion in energy of the analyser + * @return A value for the final energy of the neutron + */ + double CalculateMSVesuvio::generateE1(const double angle, const double e1nom, + const double e1res) const + { + if(e1res == 0.0) return e1nom; + + const double randv = m_randgen->flat(); + if(e1nom < 5000.0) + { + if(angle > 90.0) return MSVesuvioHelper::finalEnergyAuDD(randv); + else return MSVesuvioHelper::finalEnergyAuYap(randv); + } + else + { + return MSVesuvioHelper::finalEnergyUranium(randv); + } + } + + } // namespace Algorithms +} // namespace Mantid diff --git a/Code/Mantid/Framework/CurveFitting/src/ConvertToYSpace.cpp b/Code/Mantid/Framework/CurveFitting/src/ConvertToYSpace.cpp index 0c615888a88a91e6f7020c659ff88ac64a62c23e..687fcf100e59e68fee55df64798b07b3dcad3163 100644 --- a/Code/Mantid/Framework/CurveFitting/src/ConvertToYSpace.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/ConvertToYSpace.cpp @@ -34,10 +34,10 @@ namespace Mantid //---------------------------------------------------------------------------------------------- /// Algorithm's name for identification. @see Algorithm::name - const std::string ConvertToYSpace::name() const { return "ConvertToYSpace";}; + const std::string ConvertToYSpace::name() const { return "ConvertToYSpace";} /// Algorithm's version for identification. @see Algorithm::version - int ConvertToYSpace::version() const { return 1;}; + int ConvertToYSpace::version() const { return 1;} /// Algorithm's category for identification. @see Algorithm::category const std::string ConvertToYSpace::category() const { return "Transforms\\Units";} @@ -75,6 +75,7 @@ namespace Mantid const auto & pmap = ws->constInstrumentParameters(); detpar.l1 = sample->getDistance(*source); detpar.l2 = det->getDistance(*sample); + detpar.pos = det->getPos(); detpar.theta = ws->detectorTwoTheta(det); detpar.t0 = ConvertToYSpace::getComponentParameter(det, pmap, "t0")*1e-6; // Convert to seconds detpar.efixed = ConvertToYSpace::getComponentParameter(det, pmap, "efixed"); diff --git a/Code/Mantid/Framework/CurveFitting/src/MSVesuvioHelpers.cpp b/Code/Mantid/Framework/CurveFitting/src/MSVesuvioHelpers.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7b6aef7d63655051deb98d771ed8f1704bbf16de --- /dev/null +++ b/Code/Mantid/Framework/CurveFitting/src/MSVesuvioHelpers.cpp @@ -0,0 +1,419 @@ +//----------------------------------------------------------------------------- +// Includes +//----------------------------------------------------------------------------- +#include "MantidCurveFitting/MSVesuvioHelpers.h" + +#include <algorithm> +#include <numeric> + +#include <boost/random/variate_generator.hpp> + +namespace Mantid { namespace CurveFitting +{ + namespace MSVesuvioHelper + { + + /** + * Generate the final energy of a neutron for gold foil analyser at 293K + * in double-difference mode: + * - THIN FOIL NUMBER DENSITY = 1.456E20 ATOMS/SQ CM. + * - THICK FOIL NUMBER DENSITY = 3.0* 1.456E20 ATOMS/SQ CM. + * @param randv A random number between 0.0 & 1.0, sample from a flat distribution + * @return A value to use for the final energy + */ + double finalEnergyAuDD(const double randv) + { + // Tabulated values of absoprtion energies from S.F. Mughabghab, Neutron Cross Sections, Academic + // Press, Orlando, Florida, 1984. + static const double ENERGIES[300] = {\ + 2000.0, 2020.7, 2041.5, 2062.2, 2082.9, 2103.7, 2124.4, 2145.2, 2165.9, 2186.6, 2207.4, 2228.1, + 2248.8, 2269.6, 2290.3, 2311.0, 2331.8, 2352.5, 2373.2, 2394.0, 2414.7, 2435.5, 2456.2, 2476.9, + 2497.7, 2518.4, 2539.1, 2559.9, 2580.6, 2601.3, 2622.1, 2642.8, 2663.5, 2684.3, 2705.0, 2725.8, + 2746.5, 2767.2, 2788.0, 2808.7, 2829.4, 2850.2, 2870.9, 2891.6, 2912.4, 2933.1, 2953.8, 2974.6, + 2995.3, 3016.1, 3036.8, 3057.5, 3078.3, 3099.0, 3119.7, 3140.5, 3161.2, 3181.9, 3202.7, 3223.4, + 3244.1, 3264.9, 3285.6, 3306.4, 3327.1, 3347.8, 3368.6, 3389.3, 3410.0, 3430.8, 3451.5, 3472.2, + 3493.0, 3513.7, 3534.4, 3555.2, 3575.9, 3596.7, 3617.4, 3638.1, 3658.9, 3679.6, 3700.3, 3721.1, + 3741.8, 3762.5, 3783.3, 3804.0, 3824.7, 3845.5, 3866.2, 3887.0, 3907.7, 3928.4, 3949.2, 3969.9, + 3990.6, 4011.4, 4032.1, 4052.8, 4073.6, 4094.3, 4115.1, 4135.8, 4156.5, 4177.3, 4198.0, 4218.7, + 4239.5, 4260.2, 4280.9, 4301.7, 4322.4, 4343.1, 4363.9, 4384.6, 4405.4, 4426.1, 4446.8, 4467.6, + 4488.3, 4509.0, 4529.8, 4550.5, 4571.2, 4592.0, 4612.7, 4633.4, 4654.2, 4674.9, 4695.7, 4716.4, + 4737.1, 4757.9, 4778.6, 4799.3, 4820.1, 4840.8, 4861.5, 4882.3, 4903.0, 4923.7, 4944.5, 4965.2, + 4986.0, 5006.7, 5027.4, 5048.2, 5068.9, 5089.6, 5110.4, 5131.1, 5151.8, 5172.6, 5193.3, 5214.0, + 5234.8, 5255.5, 5276.3, 5297.0, 5317.7, 5338.5, 5359.2, 5379.9, 5400.7, 5421.4, 5442.1, 5462.9, + 5483.6, 5504.3, 5525.1, 5545.8, 5566.6, 5587.3, 5608.0, 5628.8, 5649.5, 5670.2, 5691.0, 5711.7, + 5732.4, 5753.2, 5773.9, 5794.6, 5815.4, 5836.1, 5856.9, 5877.6, 5898.3, 5919.1, 5939.8, 5960.5, + 5981.3, 6002.0, 6022.7, 6043.5, 6064.2, 6085.0, 6105.7, 6126.4, 6147.2, 6167.9, 6188.6, 6209.4, + 6230.1, 6250.8, 6271.6, 6292.3, 6313.0, 6333.8, 6354.5, 6375.3, 6396.0, 6416.7, 6437.5, 6458.2, + 6478.9, 6499.7, 6520.4, 6541.1, 6561.9, 6582.6, 6603.3, 6624.1, 6644.8, 6665.6, 6686.3, 6707.0, + 6727.8, 6748.5, 6769.2, 6790.0, 6810.7, 6831.4, 6852.2, 6872.9, 6893.6, 6914.4, 6935.1, 6955.9, + 6976.6, 6997.3, 7018.1, 7038.8, 7059.5, 7080.3, 7101.0, 7121.7, 7142.5, 7163.2, 7183.9, 7204.7, + 7225.4, 7246.2, 7266.9, 7287.6, 7308.4, 7329.1, 7349.8, 7370.6, 7391.3, 7412.0, 7432.8, 7453.5, + 7474.2, 7495.0, 7515.7, 7536.5, 7557.2, 7577.9, 7598.7, 7619.4, 7640.1, 7660.9, 7681.6, 7702.3, + 7723.1, 7743.8, 7764.5, 7785.3, 7806.0, 7826.8, 7847.5, 7868.2, 7889.0, 7909.7, 7930.4, 7951.2, + 7971.9, 7992.6, 8013.4, 8034.1, 8054.8, 8075.6, 8096.3, 8117.1, 8137.8, 8158.5, 8179.3, 8200.0 + }; + static const double XVALUES[300] = {\ + 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, + 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, + 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00010, 0.00010, + 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, + 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, + 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00020, 0.00020, 0.00020, 0.00020, 0.00020, 0.00020, + 0.00020, 0.00020, 0.00020, 0.00020, 0.00020, 0.00020, 0.00030, 0.00030, 0.00030, 0.00030, 0.00030, 0.00030, + 0.00030, 0.00030, 0.00040, 0.00040, 0.00040, 0.00040, 0.00040, 0.00050, 0.00050, 0.00050, 0.00050, 0.00060, + 0.00060, 0.00070, 0.00070, 0.00070, 0.00080, 0.00090, 0.00090, 0.00100, 0.00110, 0.00110, 0.00120, 0.00130, + 0.00150, 0.00160, 0.00170, 0.00190, 0.00210, 0.00230, 0.00260, 0.00290, 0.00320, 0.00360, 0.00410, 0.00470, + 0.00540, 0.00620, 0.00720, 0.00840, 0.00990, 0.01180, 0.01420, 0.01740, 0.02140, 0.02680, 0.03410, 0.04400, + 0.05770, 0.07680, 0.10360, 0.14050, 0.18960, 0.25110, 0.32310, 0.40240, 0.48540, 0.56870, 0.64930, 0.72370, + 0.78850, 0.84150, 0.88240, 0.91260, 0.93440, 0.95000, 0.96130, 0.96960, 0.97570, 0.98030, 0.98380, 0.98650, + 0.98870, 0.99040, 0.99180, 0.99290, 0.99380, 0.99460, 0.99520, 0.99580, 0.99620, 0.99660, 0.99700, 0.99730, + 0.99750, 0.99770, 0.99790, 0.99810, 0.99830, 0.99840, 0.99850, 0.99860, 0.99870, 0.99880, 0.99890, 0.99900, + 0.99900, 0.99910, 0.99910, 0.99920, 0.99920, 0.99930, 0.99930, 0.99940, 0.99940, 0.99940, 0.99940, 0.99950, + 0.99950, 0.99950, 0.99950, 0.99960, 0.99960, 0.99960, 0.99960, 0.99960, 0.99960, 0.99970, 0.99970, 0.99970, + 0.99970, 0.99970, 0.99970, 0.99970, 0.99970, 0.99970, 0.99980, 0.99980, 0.99980, 0.99980, 0.99980, 0.99980, + 0.99980, 0.99980, 0.99980, 0.99980, 0.99980, 0.99980, 0.99980, 0.99980, 0.99980, 0.99980, 0.99990, 0.99990, + 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, + 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, + 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, + 0.99990, 0.99990, 0.99990, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, + 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, + 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000 + }; + + const double *xp1 = std::lower_bound(XVALUES, XVALUES+300, randv); + if(xp1 == XVALUES+300) return 0.0; + const double *xm1 = xp1 - 1; + const double *ep1 = ENERGIES + (xp1 - XVALUES); + const double *em1 = ep1 - 1; + const double ef = (*em1) + (randv - *xm1)*(*ep1 - *em1)/(*xp1 - *xm1); + if( ef < 100.0 ) return 0.0; + else return ef; + } + + /** + * Generate the final energy of a neutron for gold foil analyser at 293K + * with number density of 7.35E19 atoms/cm^2 in yap difference mode. + * @param randv A random number between 0.0 & 1.0, sample from a flat distribution + * @return A value to use for the final energy + */ + double finalEnergyAuYap(const double randv) + { + // Tabulated values of absoprtion energies from S.F. Mughabghab, Neutron Cross Sections, Academic + // Press, Orlando, Florida, 1984. + static const double ENERGIES[600] = {\ + 4000.0, 4003.3, 4006.7, 4010.0, 4013.4, 4016.7, 4020.0, 4023.4, 4026.7, 4030.1, 4033.4, 4036.7, + 4040.1, 4043.4, 4046.7, 4050.1, 4053.4, 4056.8, 4060.1, 4063.4, 4066.8, 4070.1, 4073.5, 4076.8, + 4080.1, 4083.5, 4086.8, 4090.2, 4093.5, 4096.8, 4100.2, 4103.5, 4106.8, 4110.2, 4113.5, 4116.9, + 4120.2, 4123.5, 4126.9, 4130.2, 4133.6, 4136.9, 4140.2, 4143.6, 4146.9, 4150.3, 4153.6, 4156.9, + 4160.3, 4163.6, 4166.9, 4170.3, 4173.6, 4177.0, 4180.3, 4183.6, 4187.0, 4190.3, 4193.7, 4197.0, + 4200.3, 4203.7, 4207.0, 4210.4, 4213.7, 4217.0, 4220.4, 4223.7, 4227.0, 4230.4, 4233.7, 4237.1, + 4240.4, 4243.7, 4247.1, 4250.4, 4253.8, 4257.1, 4260.4, 4263.8, 4267.1, 4270.5, 4273.8, 4277.1, + 4280.5, 4283.8, 4287.1, 4290.5, 4293.8, 4297.2, 4300.5, 4303.8, 4307.2, 4310.5, 4313.9, 4317.2, + 4320.5, 4323.9, 4327.2, 4330.6, 4333.9, 4337.2, 4340.6, 4343.9, 4347.2, 4350.6, 4353.9, 4357.3, + 4360.6, 4363.9, 4367.3, 4370.6, 4374.0, 4377.3, 4380.6, 4384.0, 4387.3, 4390.7, 4394.0, 4397.3, + 4400.7, 4404.0, 4407.3, 4410.7, 4414.0, 4417.4, 4420.7, 4424.0, 4427.4, 4430.7, 4434.1, 4437.4, + 4440.7, 4444.1, 4447.4, 4450.8, 4454.1, 4457.4, 4460.8, 4464.1, 4467.4, 4470.8, 4474.1, 4477.5, + 4480.8, 4484.1, 4487.5, 4490.8, 4494.2, 4497.5, 4500.8, 4504.2, 4507.5, 4510.9, 4514.2, 4517.5, + 4520.9, 4524.2, 4527.5, 4530.9, 4534.2, 4537.6, 4540.9, 4544.2, 4547.6, 4550.9, 4554.3, 4557.6, + 4560.9, 4564.3, 4567.6, 4571.0, 4574.3, 4577.6, 4581.0, 4584.3, 4587.6, 4591.0, 4594.3, 4597.7, + 4601.0, 4604.3, 4607.7, 4611.0, 4614.4, 4617.7, 4621.0, 4624.4, 4627.7, 4631.1, 4634.4, 4637.7, + 4641.1, 4644.4, 4647.7, 4651.1, 4654.4, 4657.8, 4661.1, 4664.4, 4667.8, 4671.1, 4674.5, 4677.8, + 4681.1, 4684.5, 4687.8, 4691.2, 4694.5, 4697.8, 4701.2, 4704.5, 4707.8, 4711.2, 4714.5, 4717.9, + 4721.2, 4724.5, 4727.9, 4731.2, 4734.6, 4737.9, 4741.2, 4744.6, 4747.9, 4751.3, 4754.6, 4757.9, + 4761.3, 4764.6, 4767.9, 4771.3, 4774.6, 4778.0, 4781.3, 4784.6, 4788.0, 4791.3, 4794.7, 4798.0, + 4801.3, 4804.7, 4808.0, 4811.4, 4814.7, 4818.0, 4821.4, 4824.7, 4828.0, 4831.4, 4834.7, 4838.1, + 4841.4, 4844.7, 4848.1, 4851.4, 4854.8, 4858.1, 4861.4, 4864.8, 4868.1, 4871.5, 4874.8, 4878.1, + 4881.5, 4884.8, 4888.1, 4891.5, 4894.8, 4898.2, 4901.5, 4904.8, 4908.2, 4911.5, 4914.9, 4918.2, + 4921.5, 4924.9, 4928.2, 4931.6, 4934.9, 4938.2, 4941.6, 4944.9, 4948.2, 4951.6, 4954.9, 4958.3, + 4961.6, 4964.9, 4968.3, 4971.6, 4975.0, 4978.3, 4981.6, 4985.0, 4988.3, 4991.7, 4995.0, 4998.3, + 5001.7, 5005.0, 5008.3, 5011.7, 5015.0, 5018.4, 5021.7, 5025.0, 5028.4, 5031.7, 5035.1, 5038.4, + 5041.7, 5045.1, 5048.4, 5051.8, 5055.1, 5058.4, 5061.8, 5065.1, 5068.4, 5071.8, 5075.1, 5078.5, + 5081.8, 5085.1, 5088.5, 5091.8, 5095.2, 5098.5, 5101.8, 5105.2, 5108.5, 5111.9, 5115.2, 5118.5, + 5121.9, 5125.2, 5128.5, 5131.9, 5135.2, 5138.6, 5141.9, 5145.2, 5148.6, 5151.9, 5155.3, 5158.6, + 5161.9, 5165.3, 5168.6, 5172.0, 5175.3, 5178.6, 5182.0, 5185.3, 5188.6, 5192.0, 5195.3, 5198.7, + 5202.0, 5205.3, 5208.7, 5212.0, 5215.4, 5218.7, 5222.0, 5225.4, 5228.7, 5232.1, 5235.4, 5238.7, + 5242.1, 5245.4, 5248.7, 5252.1, 5255.4, 5258.8, 5262.1, 5265.4, 5268.8, 5272.1, 5275.5, 5278.8, + 5282.1, 5285.5, 5288.8, 5292.2, 5295.5, 5298.8, 5302.2, 5305.5, 5308.8, 5312.2, 5315.5, 5318.9, + 5322.2, 5325.5, 5328.9, 5332.2, 5335.6, 5338.9, 5342.2, 5345.6, 5348.9, 5352.3, 5355.6, 5358.9, + 5362.3, 5365.6, 5368.9, 5372.3, 5375.6, 5379.0, 5382.3, 5385.6, 5389.0, 5392.3, 5395.7, 5399.0, + 5402.3, 5405.7, 5409.0, 5412.4, 5415.7, 5419.0, 5422.4, 5425.7, 5429.0, 5432.4, 5435.7, 5439.1, + 5442.4, 5445.7, 5449.1, 5452.4, 5455.8, 5459.1, 5462.4, 5465.8, 5469.1, 5472.5, 5475.8, 5479.1, + 5482.5, 5485.8, 5489.1, 5492.5, 5495.8, 5499.2, 5502.5, 5505.8, 5509.2, 5512.5, 5515.9, 5519.2, + 5522.5, 5525.9, 5529.2, 5532.6, 5535.9, 5539.2, 5542.6, 5545.9, 5549.2, 5552.6, 5555.9, 5559.3, + 5562.6, 5565.9, 5569.3, 5572.6, 5576.0, 5579.3, 5582.6, 5586.0, 5589.3, 5592.7, 5596.0, 5599.3, + 5602.7, 5606.0, 5609.3, 5612.7, 5616.0, 5619.4, 5622.7, 5626.0, 5629.4, 5632.7, 5636.1, 5639.4, + 5642.7, 5646.1, 5649.4, 5652.8, 5656.1, 5659.4, 5662.8, 5666.1, 5669.4, 5672.8, 5676.1, 5679.5, + 5682.8, 5686.1, 5689.5, 5692.8, 5696.2, 5699.5, 5702.8, 5706.2, 5709.5, 5712.9, 5716.2, 5719.5, + 5722.9, 5726.2, 5729.5, 5732.9, 5736.2, 5739.6, 5742.9, 5746.2, 5749.6, 5752.9, 5756.3, 5759.6, + 5762.9, 5766.3, 5769.6, 5773.0, 5776.3, 5779.6, 5783.0, 5786.3, 5789.6, 5793.0, 5796.3, 5799.7, + 5803.0, 5806.3, 5809.7, 5813.0, 5816.4, 5819.7, 5823.0, 5826.4, 5829.7, 5833.1, 5836.4, 5839.7, + 5843.1, 5846.4, 5849.7, 5853.1, 5856.4, 5859.8, 5863.1, 5866.4, 5869.8, 5873.1, 5876.5, 5879.8, + 5883.1, 5886.5, 5889.8, 5893.2, 5896.5, 5899.8, 5903.2, 5906.5, 5909.8, 5913.2, 5916.5, 5919.9, + 5923.2, 5926.5, 5929.9, 5933.2, 5936.6, 5939.9, 5943.2, 5946.6, 5949.9, 5953.3, 5956.6, 5959.9, + 5963.3, 5966.6, 5970.0, 5973.3, 5976.6, 5980.0, 5983.3, 5986.6, 5990.0, 5993.3, 5996.7, 6000.0 + }; + static const double XVALUES[600] = {\ + 0.00000, 0.00000, 0.00000, 0.00002, 0.00003, 0.00003, 0.00004, 0.00005, 0.00005, 0.00006, 0.00007, 0.00007, + 0.00008, 0.00009, 0.00010, 0.00010, 0.00011, 0.00012, 0.00013, 0.00014, 0.00015, 0.00015, 0.00016, 0.00017, + 0.00018, 0.00019, 0.00020, 0.00021, 0.00022, 0.00023, 0.00024, 0.00025, 0.00026, 0.00027, 0.00028, 0.00029, + 0.00030, 0.00031, 0.00032, 0.00033, 0.00034, 0.00035, 0.00037, 0.00038, 0.00039, 0.00040, 0.00041, 0.00043, + 0.00044, 0.00045, 0.00047, 0.00048, 0.00049, 0.00051, 0.00052, 0.00054, 0.00055, 0.00057, 0.00058, 0.00060, + 0.00061, 0.00063, 0.00065, 0.00066, 0.00068, 0.00070, 0.00072, 0.00074, 0.00075, 0.00077, 0.00079, 0.00081, + 0.00083, 0.00085, 0.00087, 0.00089, 0.00092, 0.00094, 0.00096, 0.00098, 0.00101, 0.00103, 0.00106, 0.00108, + 0.00111, 0.00113, 0.00116, 0.00118, 0.00121, 0.00124, 0.00127, 0.00130, 0.00133, 0.00136, 0.00139, 0.00142, + 0.00146, 0.00149, 0.00152, 0.00156, 0.00159, 0.00163, 0.00167, 0.00171, 0.00174, 0.00178, 0.00182, 0.00187, + 0.00191, 0.00195, 0.00200, 0.00204, 0.00209, 0.00214, 0.00219, 0.00224, 0.00229, 0.00235, 0.00240, 0.00246, + 0.00251, 0.00257, 0.00263, 0.00269, 0.00276, 0.00282, 0.00289, 0.00296, 0.00303, 0.00310, 0.00318, 0.00325, + 0.00333, 0.00341, 0.00349, 0.00358, 0.00367, 0.00376, 0.00385, 0.00394, 0.00404, 0.00414, 0.00425, 0.00435, + 0.00446, 0.00458, 0.00469, 0.00481, 0.00494, 0.00507, 0.00520, 0.00533, 0.00548, 0.00562, 0.00577, 0.00592, + 0.00608, 0.00625, 0.00642, 0.00659, 0.00677, 0.00696, 0.00716, 0.00736, 0.00757, 0.00778, 0.00800, 0.00823, + 0.00847, 0.00872, 0.00898, 0.00924, 0.00952, 0.00980, 0.01010, 0.01041, 0.01073, 0.01106, 0.01141, 0.01177, + 0.01214, 0.01253, 0.01293, 0.01335, 0.01379, 0.01425, 0.01472, 0.01522, 0.01573, 0.01627, 0.01683, 0.01742, + 0.01803, 0.01867, 0.01934, 0.02004, 0.02077, 0.02154, 0.02234, 0.02317, 0.02405, 0.02497, 0.02594, 0.02695, + 0.02801, 0.02913, 0.03030, 0.03153, 0.03282, 0.03419, 0.03561, 0.03712, 0.03871, 0.04037, 0.04213, 0.04398, + 0.04594, 0.04799, 0.05017, 0.05246, 0.05488, 0.05743, 0.06013, 0.06297, 0.06598, 0.06915, 0.07251, 0.07605, + 0.07979, 0.08374, 0.08791, 0.09230, 0.09694, 0.10183, 0.10698, 0.11241, 0.11812, 0.12411, 0.13041, 0.13703, + 0.14395, 0.15119, 0.15877, 0.16667, 0.17490, 0.18347, 0.19237, 0.20159, 0.21114, 0.22100, 0.23117, 0.24164, + 0.25240, 0.26344, 0.27473, 0.28628, 0.29807, 0.31007, 0.32228, 0.33468, 0.34725, 0.35999, 0.37286, 0.38586, + 0.39898, 0.41219, 0.42549, 0.43886, 0.45228, 0.46575, 0.47925, 0.49277, 0.50628, 0.51980, 0.53329, 0.54674, + 0.56016, 0.57350, 0.58677, 0.59996, 0.61304, 0.62600, 0.63883, 0.65152, 0.66403, 0.67638, 0.68853, 0.70048, + 0.71220, 0.72369, 0.73492, 0.74590, 0.75659, 0.76700, 0.77711, 0.78691, 0.79640, 0.80557, 0.81442, 0.82294, + 0.83113, 0.83900, 0.84654, 0.85376, 0.86067, 0.86726, 0.87355, 0.87954, 0.88525, 0.89067, 0.89583, 0.90073, + 0.90537, 0.90979, 0.91398, 0.91794, 0.92170, 0.92527, 0.92865, 0.93185, 0.93489, 0.93776, 0.94049, 0.94307, + 0.94552, 0.94784, 0.95005, 0.95213, 0.95412, 0.95600, 0.95779, 0.95949, 0.96110, 0.96264, 0.96410, 0.96549, + 0.96681, 0.96807, 0.96927, 0.97041, 0.97150, 0.97254, 0.97353, 0.97447, 0.97538, 0.97624, 0.97706, 0.97785, + 0.97860, 0.97933, 0.98002, 0.98068, 0.98131, 0.98192, 0.98250, 0.98306, 0.98359, 0.98411, 0.98460, 0.98507, + 0.98553, 0.98596, 0.98638, 0.98679, 0.98718, 0.98755, 0.98791, 0.98826, 0.98859, 0.98892, 0.98923, 0.98953, + 0.98981, 0.99009, 0.99036, 0.99062, 0.99087, 0.99111, 0.99135, 0.99158, 0.99179, 0.99201, 0.99221, 0.99241, + 0.99260, 0.99279, 0.99296, 0.99314, 0.99331, 0.99347, 0.99363, 0.99378, 0.99393, 0.99408, 0.99422, 0.99435, + 0.99448, 0.99461, 0.99473, 0.99486, 0.99497, 0.99509, 0.99520, 0.99530, 0.99541, 0.99551, 0.99561, 0.99571, + 0.99580, 0.99589, 0.99598, 0.99607, 0.99615, 0.99623, 0.99631, 0.99639, 0.99647, 0.99654, 0.99661, 0.99668, + 0.99675, 0.99682, 0.99688, 0.99694, 0.99701, 0.99707, 0.99713, 0.99718, 0.99724, 0.99729, 0.99735, 0.99740, + 0.99745, 0.99750, 0.99755, 0.99760, 0.99764, 0.99769, 0.99773, 0.99778, 0.99782, 0.99786, 0.99790, 0.99794, + 0.99798, 0.99802, 0.99806, 0.99809, 0.99813, 0.99816, 0.99820, 0.99823, 0.99827, 0.99830, 0.99833, 0.99836, + 0.99839, 0.99842, 0.99845, 0.99848, 0.99850, 0.99853, 0.99856, 0.99859, 0.99861, 0.99864, 0.99866, 0.99869, + 0.99871, 0.99873, 0.99876, 0.99878, 0.99880, 0.99882, 0.99884, 0.99886, 0.99889, 0.99891, 0.99893, 0.99895, + 0.99896, 0.99898, 0.99900, 0.99902, 0.99904, 0.99906, 0.99907, 0.99909, 0.99911, 0.99912, 0.99914, 0.99915, + 0.99917, 0.99919, 0.99920, 0.99922, 0.99923, 0.99924, 0.99926, 0.99927, 0.99929, 0.99930, 0.99931, 0.99933, + 0.99934, 0.99935, 0.99936, 0.99938, 0.99939, 0.99940, 0.99941, 0.99942, 0.99943, 0.99944, 0.99946, 0.99947, + 0.99948, 0.99949, 0.99950, 0.99951, 0.99952, 0.99953, 0.99954, 0.99955, 0.99956, 0.99956, 0.99957, 0.99958, + 0.99959, 0.99960, 0.99961, 0.99962, 0.99963, 0.99963, 0.99964, 0.99965, 0.99966, 0.99967, 0.99967, 0.99968, + 0.99969, 0.99970, 0.99970, 0.99971, 0.99972, 0.99973, 0.99973, 0.99974, 0.99975, 0.99975, 0.99976, 0.99977, + 0.99977, 0.99978, 0.99979, 0.99979, 0.99980, 0.99980, 0.99981, 0.99982, 0.99982, 0.99983, 0.99983, 0.99984, + 0.99984, 0.99985, 0.99985, 0.99986, 0.99986, 0.99987, 0.99988, 0.99988, 0.99989, 0.99989, 0.99990, 0.99990, + 0.99990, 0.99991, 0.99991, 0.99992, 0.99992, 0.99993, 0.99993, 0.99994, 0.99994, 0.99994, 0.99995, 0.99995, + 0.99996, 0.99996, 0.99997, 0.99997, 0.99997, 0.99998, 0.99998, 0.99998, 0.99999, 0.99999, 1.00000, 1.00000 + }; + + const double *xp1 = std::lower_bound(XVALUES, XVALUES+600, randv); + if(xp1 == XVALUES+600) return 0.0; + const double *xm1 = xp1 - 1; + const double *ep1 = ENERGIES + (xp1 - XVALUES); + const double *em1 = ep1 - 1; + return (*em1) + (randv - *xm1)*(*ep1 - *em1)/(*xp1 - *xm1); + } + + /** + * Generate the final energy of a neutron for uranium foil analyser at 293K + * with number density of 1.456E20 atoms/cm^2 in double-difference mode. + * @param randv A random number between 0.0 & 1.0, sample from a flat distribution + * @return A value to use for the final energy + */ + double finalEnergyUranium(const double randv) + { + static const double ENERGIES[201] = {\ + 5959.0, 5967.7, 5976.4, 5985.1, 5993.8, 6002.5, 6011.2, 6019.9, 6028.6, 6037.3, 6046.0, 6054.8, + 6063.5, 6072.2, 6080.9, 6089.6, 6098.3, 6107.0, 6115.7, 6124.4, 6133.1, 6141.8, 6150.5, 6159.2, + 6167.9, 6176.6, 6185.3, 6194.0, 6202.7, 6211.4, 6220.1, 6228.9, 6237.6, 6246.3, 6255.0, 6263.7, + 6272.4, 6281.1, 6289.8, 6298.5, 6307.2, 6315.9, 6324.6, 6333.3, 6342.0, 6350.7, 6359.4, 6368.1, + 6376.8, 6385.5, 6394.3, 6403.0, 6411.7, 6420.4, 6429.1, 6437.8, 6446.5, 6455.2, 6463.9, 6472.6, + 6481.3, 6490.0, 6498.7, 6507.4, 6516.1, 6524.8, 6533.5, 6542.2, 6550.9, 6559.6, 6568.4, 6577.1, + 6585.8, 6594.5, 6603.2, 6611.9, 6620.6, 6629.3, 6638.0, 6646.7, 6655.4, 6664.1, 6672.8, 6681.5, + 6690.2, 6698.9, 6707.6, 6716.3, 6725.0, 6733.7, 6742.5, 6751.2, 6759.9, 6768.6, 6777.3, 6786.0, + 6794.7, 6803.4, 6812.1, 6820.8, 6829.5, 6838.2, 6846.9, 6855.6, 6864.3, 6873.0, 6881.7, 6890.4, + 6899.1, 6907.8, 6916.5, 6925.3, 6934.0, 6942.7, 6951.4, 6960.1, 6968.8, 6977.5, 6986.2, 6994.9, + 7003.6, 7012.3, 7021.0, 7029.7, 7038.4, 7047.1, 7055.8, 7064.5, 7073.2, 7081.9, 7090.6, 7099.4, + 7108.1, 7116.8, 7125.5, 7134.2, 7142.9, 7151.6, 7160.3, 7169.0, 7177.7, 7186.4, 7195.1, 7203.8, + 7212.5, 7221.2, 7229.9, 7238.6, 7247.3, 7256.0, 7264.8, 7273.5, 7282.2, 7290.9, 7299.6, 7308.3, + 7317.0, 7325.7, 7334.4, 7343.1, 7351.8, 7360.5, 7369.2, 7377.9, 7386.6, 7395.3, 7404.0, 7412.7, + 7421.4, 7430.1, 7438.9, 7447.6, 7456.3, 7465.0, 7473.7, 7482.4, 7491.1, 7499.8, 7508.5, 7517.2, + 7525.9, 7534.6, 7543.3, 7552.0, 7560.7, 7569.4, 7578.1, 7586.8, 7595.5, 7604.2, 7613.0, 7621.7, + 7630.4, 7639.1, 7647.8, 7656.5, 7665.2, 7673.9, 7682.6, 7691.3, 7700.0 + }; + static const double XVALUES[201] = {\ + 0.00000, 0.00000, 0.00000, 0.00020, 0.00030, 0.00040, 0.00050, 0.00060, 0.00070, 0.00080, 0.00090, 0.00110, + 0.00120, 0.00140, 0.00150, 0.00170, 0.00190, 0.00210, 0.00230, 0.00250, 0.00270, 0.00290, 0.00310, 0.00340, + 0.00360, 0.00390, 0.00410, 0.00440, 0.00470, 0.00500, 0.00530, 0.00560, 0.00590, 0.00620, 0.00650, 0.00690, + 0.00720, 0.00760, 0.00800, 0.00840, 0.00880, 0.00920, 0.00960, 0.01010, 0.01050, 0.01100, 0.01150, 0.01210, + 0.01270, 0.01330, 0.01390, 0.01460, 0.01530, 0.01610, 0.01690, 0.01780, 0.01870, 0.01970, 0.02090, 0.02210, + 0.02350, 0.02500, 0.02660, 0.02850, 0.03070, 0.03320, 0.03620, 0.03990, 0.04440, 0.05020, 0.05780, 0.06790, + 0.08120, 0.09880, 0.12150, 0.15020, 0.18520, 0.22640, 0.27340, 0.32510, 0.38050, 0.43830, 0.49720, 0.55580, + 0.61290, 0.66710, 0.71740, 0.76250, 0.80190, 0.83510, 0.86220, 0.88380, 0.90050, 0.91340, 0.92340, 0.93100, + 0.93710, 0.94200, 0.94600, 0.94940, 0.95230, 0.95490, 0.95710, 0.95920, 0.96100, 0.96270, 0.96430, 0.96580, + 0.96710, 0.96840, 0.96950, 0.97060, 0.97170, 0.97270, 0.97360, 0.97450, 0.97540, 0.97620, 0.97700, 0.97770, + 0.97840, 0.97910, 0.97980, 0.98040, 0.98100, 0.98160, 0.98220, 0.98280, 0.98330, 0.98390, 0.98440, 0.98490, + 0.98540, 0.98590, 0.98630, 0.98680, 0.98720, 0.98770, 0.98810, 0.98850, 0.98890, 0.98930, 0.98970, 0.99010, + 0.99050, 0.99090, 0.99130, 0.99160, 0.99200, 0.99230, 0.99270, 0.99300, 0.99330, 0.99360, 0.99400, 0.99430, + 0.99460, 0.99480, 0.99510, 0.99540, 0.99560, 0.99590, 0.99610, 0.99640, 0.99660, 0.99680, 0.99710, 0.99730, + 0.99750, 0.99770, 0.99780, 0.99800, 0.99820, 0.99840, 0.99850, 0.99870, 0.99880, 0.99890, 0.99910, 0.99920, + 0.99930, 0.99940, 0.99950, 0.99960, 0.99960, 0.99970, 0.99980, 0.99980, 0.99990, 0.99990, 0.99990, 1.00000, + 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000 + }; + + const double *xp1 = std::lower_bound(XVALUES, XVALUES+201, randv); + if(xp1 == XVALUES+201) return 0.0; + const double *xm1 = xp1 - 1; + const double *ep1 = ENERGIES + (xp1 - XVALUES); + const double *em1 = ep1 - 1; + return (*em1) + (randv - *xm1)*(*ep1 - *em1)/(*xp1 - *xm1); + } + + //------------------------------------------------------------------------- + // RandomNumberGenerator + //------------------------------------------------------------------------- + /** + * Produces random numbers with various probability distributions + */ + RandomNumberGenerator::RandomNumberGenerator(const int seed) : m_generator() + { + m_generator.seed(static_cast<boost::mt19937::result_type>(seed)); + } + /// Returns a flat random number between 0.0 & 1.0 + double RandomNumberGenerator::flat() + { + typedef boost::variate_generator<boost::mt19937&, + uniform_double> uniform_generator; + return uniform_generator(m_generator, + uniform_double(0.0, 1.0))(); + } + /// Returns a random number distributed by a normal distribution + double RandomNumberGenerator::gaussian(const double mean, const double sigma) + { + typedef boost::variate_generator<boost::mt19937&, + gaussian_double> gauss_generator; + return gauss_generator(m_generator, + gaussian_double(mean, sigma))(); + } + + //------------------------------------------------------------------------- + // Simulation + //------------------------------------------------------------------------- + /** + * Stores counts for each scatter order + * for a "run" of a given number of events + */ + Simulation::Simulation(const size_t order, const size_t ntimes) : + counts(order, std::vector<double>(ntimes)), + maxorder(order) + {} + + //------------------------------------------------------------------------- + // SimulationAggreator + //------------------------------------------------------------------------- + /** + * Accumulates and averages the results + * of each simulation + * @param nruns The number of runs that will be computed + */ + SimulationAggregator::SimulationAggregator(const size_t nruns) + { + results.reserve(nruns); + } + + /** + * @param order The number of requested scatterings + * @param ntimes The number of times on input workspace + * @return A reference to a new Simulation object + */ + Simulation & SimulationAggregator::newSimulation(const size_t order, const size_t ntimes) + { + results.push_back(Simulation(order, ntimes)); + return results.back(); + } + + /** + * @return The mean and standard deviation of the current set of simulations + */ + SimulationWithErrors + SimulationAggregator::average() const + { + const size_t maxorder(results[0].maxorder), ntimes(results[0].counts[0].size()), + nruns(results.size()); + SimulationWithErrors retval(maxorder, ntimes); + + for(size_t i = 0; i < maxorder; ++i) + { + auto & orderCounts = retval.sim.counts[i]; + auto & orderErrors = retval.errors[i]; + for(size_t j = 0; j < ntimes; ++j) + { + double mean(0.0); + size_t npoints(0); + for(size_t k = 0; k < nruns; ++k) + { + const double val = results[k].counts[i][j]; + if(val > 0.0) + { + mean += val; + npoints +=1; + } + } + if(npoints < 2) + { + orderCounts[j] = 0.0; + orderErrors[j] = 0.0; + } + else + { + const double dblPts = static_cast<double>(npoints); + orderCounts[j] = mean/dblPts; + // error is std dev + double sumsq(0.0); + for(size_t k = 0; k < nruns; ++k) + { + const double val = results[k].counts[i][j]; + if(val > 0.0) + { + const double diff = (val - mean); + sumsq += diff*diff; + } + } + orderErrors[j] = sqrt(sumsq/(dblPts*(dblPts-1))); + } + } + } + + return retval; + } + //------------------------------------------------------------------------- + // SimulationWithErrors + //------------------------------------------------------------------------- + /** + * Normalise the counts so that the integral over the single-scatter + * events is 1. + */ + void SimulationWithErrors::normalise() + { + const double sumSingle = std::accumulate(sim.counts.front().begin(), + sim.counts.front().end(), 0.0); + if(sumSingle > 0.0) + { + const double invSum = 1.0/sumSingle; // multiply is faster + // Divide everything by the sum + const size_t nscatters = sim.counts.size(); + for(size_t i = 0; i < nscatters; ++i) + { + auto & counts = sim.counts[i]; + auto & scerrors = this->errors[i]; + for(auto cit = counts.begin(), eit = scerrors.begin(); cit != counts.end(); + ++cit, ++eit) + { + (*cit) *= invSum; + (*eit) *= invSum; + } + } + } + } + + } // namespace MSVesuvioHelper +}} diff --git a/Code/Mantid/Framework/CurveFitting/src/VesuvioResolution.cpp b/Code/Mantid/Framework/CurveFitting/src/VesuvioResolution.cpp index c0adfc1b6a560949ac48e89b3c5f1c2fff540e91..6bcf01387e115fa9ae72381405aaf5afe847f05a 100644 --- a/Code/Mantid/Framework/CurveFitting/src/VesuvioResolution.cpp +++ b/Code/Mantid/Framework/CurveFitting/src/VesuvioResolution.cpp @@ -22,8 +22,44 @@ namespace CurveFitting // Register into factory DECLARE_FUNCTION(VesuvioResolution); + //--------------------------------------------------------------------------- + // Static functions + //--------------------------------------------------------------------------- + /** - */ + * @param ws The workspace with attached instrument + * @param index Index of the spectrum + * @return DetectorParams structure containing the relevant parameters + */ + ResolutionParams VesuvioResolution::getResolutionParameters(const API::MatrixWorkspace_const_sptr & ws, + const size_t index) + { + Geometry::IDetector_const_sptr detector; + try + { + detector = ws->getDetector(index); + } + catch (Kernel::Exception::NotFoundError &) + { + throw std::invalid_argument("VesuvioResolution - Workspace has no detector attached to histogram at index " + \ + boost::lexical_cast<std::string>(index)); + } + + ResolutionParams respar; + const auto & pmap = ws->constInstrumentParameters(); + respar.dl1 = ConvertToYSpace::getComponentParameter(detector, pmap, "sigma_l1"); + respar.dl2 = ConvertToYSpace::getComponentParameter(detector, pmap, "sigma_l2"); + respar.dtof = ConvertToYSpace::getComponentParameter(detector, pmap, "sigma_tof"); + respar.dthe = ConvertToYSpace::getComponentParameter(detector, pmap, "sigma_theta"); //radians + respar.dEnLorentz = ConvertToYSpace::getComponentParameter(detector, pmap, "hwhm_lorentz"); + respar.dEnGauss = ConvertToYSpace::getComponentParameter(detector, pmap, "sigma_gauss"); + return respar; + } + + //--------------------------------------------------------------------------- + // Member functions + //--------------------------------------------------------------------------- + VesuvioResolution::VesuvioResolution() : API::ParamFunction(), API::IFunction1D(), m_log("VesuvioResolution"), m_wsIndex(0), m_mass(0.0), m_voigt(), @@ -63,34 +99,9 @@ namespace CurveFitting UNUSED_ARG(startX); UNUSED_ARG(endX); - auto inst = workspace->getInstrument(); - auto sample = inst->getSample(); - auto source = inst->getSource(); - if(!sample || !source) - { - throw std::invalid_argument("VesuvioResolution - Workspace has no source/sample."); - } m_wsIndex = wsIndex; - Geometry::IDetector_const_sptr det; - try - { - det = workspace->getDetector(m_wsIndex); - } - catch (Kernel::Exception::NotFoundError &) - { - throw std::invalid_argument("VesuvioResolution - Workspace has no detector attached to histogram at index " + boost::lexical_cast<std::string>(m_wsIndex)); - } - DetectorParams detpar = ConvertToYSpace::getDetectorParameters(workspace, m_wsIndex); - const auto & pmap = workspace->constInstrumentParameters(); - - ResolutionParams respar; - respar.dl1 = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_l1"); - respar.dl2 = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_l2"); - respar.dthe = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_theta"); //radians - respar.dEnLorentz = ConvertToYSpace::getComponentParameter(det, pmap, "hwhm_lorentz"); - respar.dEnGauss = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_gauss"); - + ResolutionParams respar = getResolutionParameters(workspace, m_wsIndex); this->cacheResolutionComponents(detpar, respar); } @@ -156,7 +167,7 @@ namespace CurveFitting double wl2 = 2.0*STDDEV_TO_HWHM*std::abs((std::pow(k0y0,3)/(k1*qy0*detpar.l1))*common)*respar.dl2; m_resolutionSigma = std::sqrt(std::pow(wgauss,2) + std::pow(wtheta,2) + std::pow(wl1,2) + std::pow(wl2,2)); - + m_log.notice() << "--------------------- Mass=" << m_mass << " -----------------------" << std::endl; m_log.notice() << "w_l1 (FWHM)=" << wl2 << std::endl; m_log.notice() << "w_l0 (FWHM)=" << wl1 << std::endl; @@ -203,7 +214,7 @@ namespace CurveFitting { voigtApprox(voigt, xValues, lorentzPos, lorentzAmp, m_lorentzFWHM, m_resolutionSigma); } - + /** * Transforms the input y coordinates using the Voigt function approximation. The area is normalized to lorentzAmp * @param voigt [Out] Output values (vector is expected to be of the correct size diff --git a/Code/Mantid/Framework/CurveFitting/test/CalculateMSVesuvioTest.h b/Code/Mantid/Framework/CurveFitting/test/CalculateMSVesuvioTest.h new file mode 100644 index 0000000000000000000000000000000000000000..1c58cb8e71c6a19691212373fd4c191d9d1c97d7 --- /dev/null +++ b/Code/Mantid/Framework/CurveFitting/test/CalculateMSVesuvioTest.h @@ -0,0 +1,212 @@ +#ifndef MANTID_CURVEFITTING_CALCULATEMSVESUIVIOTEST_H_ +#define MANTID_CURVEFITTING_CALCULATEMSVESUIVIOTEST_H_ + +#include <cxxtest/TestSuite.h> + +#include "MantidCurveFitting/CalculateMSVesuvio.h" +#include "MantidGeometry/Instrument/Goniometer.h" +#include "MantidGeometry/Objects/ShapeFactory.h" + +#include "MantidTestHelpers/ComponentCreationHelper.h" +#include "MantidTestHelpers/WorkspaceCreationHelper.h" + +#include "ComptonProfileTestHelpers.h" + +using Mantid::CurveFitting::CalculateMSVesuvio; + +class CalculateMSVesuvioTest : public CxxTest::TestSuite +{ +public: + // This pair of boilerplate methods prevent the suite being created statically + // This means the constructor isn't called when running other tests + static CalculateMSVesuvioTest *createSuite() { return new CalculateMSVesuvioTest(); } + static void destroySuite( CalculateMSVesuvioTest *suite ) { delete suite; } + + // ------------------------ Success Cases ----------------------------------------- + + void test_init() + { + CalculateMSVesuvio alg; + TS_ASSERT_THROWS_NOTHING(alg.initialize()); + TS_ASSERT(alg.isInitialized()); + } + + void test_exec_with_flat_plate_sample() + { + auto alg = createTestAlgorithm(createFlatPlateSampleWS()); + TS_ASSERT_THROWS_NOTHING(alg->execute()); + TS_ASSERT(alg->isExecuted()); + + checkOutputValuesAsExpected(alg, 0.0099824991, 0.0020558473); + } + + // ------------------------ Failure Cases ----------------------------------------- + + void test_setting_input_workspace_not_in_tof_throws_invalid_argument() + { + CalculateMSVesuvio alg; + alg.initialize(); + + auto testWS = WorkspaceCreationHelper::Create2DWorkspace(1, 1); + TS_ASSERT_THROWS(alg.setProperty("InputWorkspace", testWS), std::invalid_argument); + } + + void test_setting_workspace_with_no_sample_shape_throws_invalid_argument() + { + CalculateMSVesuvio alg; + alg.initialize(); + + auto testWS = WorkspaceCreationHelper::Create2DWorkspace(1, 1); + testWS->getAxis(0)->setUnit("TOF"); + TS_ASSERT_THROWS(alg.setProperty("InputWorkspace", testWS), std::invalid_argument); + } + + void test_setting_nmasses_zero_or_negative_throws_invalid_argument() + { + CalculateMSVesuvio alg; + alg.initialize(); + + TS_ASSERT_THROWS(alg.setProperty("NoOfMasses", -1), std::invalid_argument); + TS_ASSERT_THROWS(alg.setProperty("NoOfMasses", 0), std::invalid_argument); + } + + void test_setting_sampledensity_zero_or_negative_throws_invalid_argument() + { + CalculateMSVesuvio alg; + alg.initialize(); + + TS_ASSERT_THROWS(alg.setProperty("SampleDensity", -1), std::invalid_argument); + TS_ASSERT_THROWS(alg.setProperty("SampleDensity", 0), std::invalid_argument); + } + + void test_setting_atomic_properties_not_length_three_times_nmasses_throws_invalid_argument_on_execute() + { + auto alg = createTestAlgorithm(createFlatPlateSampleWS()); + + alg->setProperty("NoOfMasses", 2); + const double sampleProps[5] = {1.007900, 0.9272392, 5.003738, 16.00000, 3.2587662E-02}; + alg->setProperty("AtomicProperties", std::vector<double>(sampleProps, sampleProps + 5)); + + TS_ASSERT_THROWS(alg->execute(), std::invalid_argument); + } + + void test_setting_zero_or_negative_beam_radius_values_throws_invalid_argument() + { + CalculateMSVesuvio alg; + alg.initialize(); + + TS_ASSERT_THROWS(alg.setProperty("BeamRadius", -1.5), std::invalid_argument); + TS_ASSERT_THROWS(alg.setProperty("BeamRadius", 0.0), std::invalid_argument); + } + + void test_input_workspace_with_detector_that_has_no_shape_throws_exception() + { + auto alg = createTestAlgorithm(createFlatPlateSampleWS(false)); + + TS_ASSERT_THROWS(alg->execute(), std::invalid_argument); + } + +private: + + Mantid::API::IAlgorithm_sptr createTestAlgorithm(const Mantid::API::MatrixWorkspace_sptr & inputWS) + { + Mantid::API::IAlgorithm_sptr alg = boost::shared_ptr<Mantid::API::IAlgorithm>(new CalculateMSVesuvio); + alg->initialize(); + alg->setRethrows(true); + alg->setChild(true); + // inputs + alg->setProperty("InputWorkspace", inputWS); + alg->setProperty("NoOfMasses", 3); + alg->setProperty("SampleDensity", 241.0); + const double sampleProps[9] = {1.007900, 0.9272392, 5.003738, 16.00000, 3.2587662E-02, 13.92299, + 27.50000, 4.0172841E-02, 15.07701}; + alg->setProperty("AtomicProperties", std::vector<double>(sampleProps, sampleProps + 9)); + alg->setProperty("BeamRadius", 2.5); + // reduce number of events for test purposes + alg->setProperty("NumEventsPerRun", 10000); + + // outputs + alg->setPropertyValue("TotalScatteringWS", "__unused_for_child"); + alg->setPropertyValue("MultipleScatteringWS", "__unused_for_child"); + + return alg; + } + + Mantid::API::MatrixWorkspace_sptr createFlatPlateSampleWS(const bool detShape = true) + { + auto testWS = createTestWorkspace(detShape); + // Sample shape + const double halfHeight(0.05), halfWidth(0.05), halfThick(0.0025); + std::ostringstream sampleShapeXML; + sampleShapeXML << " <cuboid id=\"detector-shape\"> " + << "<left-front-bottom-point x=\"" << halfWidth << "\" y=\"" << -halfHeight << "\" z=\"" << -halfThick <<"\" /> " + << "<left-front-top-point x=\"" << halfWidth <<"\" y=\"" << halfHeight <<"\" z=\"" << -halfThick << "\" /> " + << "<left-back-bottom-point x=\"" << halfWidth <<"\" y=\"" << -halfHeight << "\" z=\"" << halfThick <<"\" /> " + << "<right-front-bottom-point x=\"" << -halfWidth <<"\" y=\"" << -halfHeight << "\" z=\"" << -halfThick << "\" /> " + << "</cuboid>"; + auto sampleShape = Mantid::Geometry::ShapeFactory().createShape(sampleShapeXML.str()); + testWS->mutableSample().setShape(*sampleShape); + + return testWS; + } + + + Mantid::API::MatrixWorkspace_sptr createTestWorkspace(const bool detShape = true) + { + using namespace Mantid::Geometry; + using namespace Mantid::Kernel; + + const int nhist(1); + const double x0(50.0), x1(562.0), dx(1.0); + const bool singleMassSpec(false), foilChanger(true); + auto ws2d = ComptonProfileTestHelpers::createTestWorkspace(nhist, x0, x1, dx, + singleMassSpec, foilChanger); + + if(detShape) + { + // replace instrument with one that has a detector with a shape + const std::string shapeXML = \ + "<cuboid id=\"shape\">" + "<left-front-bottom-point x=\"0.0125\" y=\"-0.0395\" z= \"0.0045\" />" + "<left-front-top-point x=\"0.0125\" y=\"0.0395\" z= \"0.0045\" />" + "<left-back-bottom-point x=\"0.0125\" y=\"-0.0395\" z= \"-0.0045\" />" + "<right-front-bottom-point x=\"-0.0125\" y=\"-0.0395\" z= \"0.0045\" />" + "</cuboid>" + "<algebra val=\"shape\" />"; + const auto pos = ws2d->getDetector(0)->getPos(); + auto instrument = ComptonProfileTestHelpers::createTestInstrumentWithFoilChanger(1, pos, shapeXML); + ws2d->setInstrument(instrument); + ComptonProfileTestHelpers::addResolutionParameters(ws2d, 1); + ComptonProfileTestHelpers::addFoilResolution(ws2d, "foil-pos0"); + } + + return ws2d; + } + + void checkOutputValuesAsExpected(const Mantid::API::IAlgorithm_sptr & alg, + const double expectedTotal, const double expectedMS) + { + using Mantid::API::MatrixWorkspace_sptr; + const size_t checkIdx = 100; + const double tolerance(1e-8); + + // Values for total scattering + MatrixWorkspace_sptr totScatter = alg->getProperty("TotalScatteringWS"); + TS_ASSERT(totScatter); + const auto & totY = totScatter->readY(0); + TS_ASSERT_DELTA(expectedTotal, totY[checkIdx], tolerance); + const auto & totX = totScatter->readX(0); + TS_ASSERT_DELTA(150.0, totX[checkIdx], tolerance); // based on workspace setup + + // Values for multiple scatters + MatrixWorkspace_sptr multScatter = alg->getProperty("MultipleScatteringWS"); + TS_ASSERT(multScatter); + const auto & msY = multScatter->readY(0); + TS_ASSERT_DELTA(expectedMS, msY[checkIdx], tolerance); + const auto & msX = multScatter->readX(0); + TS_ASSERT_DELTA(150.0, msX[checkIdx], tolerance); // based on workspace setup + } +}; + + +#endif /* MANTID_CURVEFITTING_CALCULATEMSVESUIVIOTEST_H_ */ diff --git a/Code/Mantid/Framework/CurveFitting/test/ComptonProfileTestHelpers.h b/Code/Mantid/Framework/CurveFitting/test/ComptonProfileTestHelpers.h index 199fabefdd645ca619ad54897ebaeb103bab3e0e..83c29bd6fb0ca8bd6e0dff62ed85d53de62d6242 100644 --- a/Code/Mantid/Framework/CurveFitting/test/ComptonProfileTestHelpers.h +++ b/Code/Mantid/Framework/CurveFitting/test/ComptonProfileTestHelpers.h @@ -2,6 +2,7 @@ #define COMPTONPROFILETESTHELPERS_H_ #include "MantidGeometry/Instrument/Detector.h" +#include "MantidGeometry/Objects/ShapeFactory.h" #include "MantidKernel/MersenneTwister.h" #include "MantidTestHelpers/ComponentCreationHelper.h" @@ -14,9 +15,12 @@ namespace ComptonProfileTestHelpers static Mantid::API::MatrixWorkspace_sptr createTestWorkspace(const size_t nhist,const double x0, const double x1, const double dx, const bool singleMassSpectrum = false, const bool addFoilChanger = false); - static Mantid::Geometry::Instrument_sptr createTestInstrumentWithFoilChanger(const Mantid::detid_t id,const Mantid::Kernel::V3D &); + static Mantid::Geometry::Instrument_sptr createTestInstrumentWithFoilChanger(const Mantid::detid_t id, + const Mantid::Kernel::V3D &, + const std::string &detShapeXML = ""); static Mantid::Geometry::Instrument_sptr createTestInstrumentWithNoFoilChanger(const Mantid::detid_t id, - const Mantid::Kernel::V3D &); + const Mantid::Kernel::V3D &, + const std::string & detShape = ""); static void addResolutionParameters(const Mantid::API::MatrixWorkspace_sptr & ws, const Mantid::detid_t detID); static void addFoilResolution(const Mantid::API::MatrixWorkspace_sptr & ws, @@ -60,14 +64,14 @@ namespace ComptonProfileTestHelpers { double r(0.553), theta(66.5993), phi(138.6); Mantid::Kernel::V3D detPos; - detPos.spherical(r, theta, phi); + detPos.spherical_rad(r, theta*M_PI/180.0, phi*M_PI/180.0); ws2d->setInstrument(createTestInstrumentWithFoilChanger(id,detPos)); } else { double r(0.55), theta(66.5993), phi(0.0); Mantid::Kernel::V3D detPos; - detPos.spherical(r, theta, phi); + detPos.spherical_rad(r, theta*M_PI/180.0, phi*M_PI/180.0); ws2d->setInstrument(createTestInstrumentWithNoFoilChanger(id,detPos)); } @@ -90,15 +94,19 @@ namespace ComptonProfileTestHelpers return ws2d; } - static Mantid::Geometry::Instrument_sptr createTestInstrumentWithFoilChanger(const Mantid::detid_t id, - const Mantid::Kernel::V3D & detPos) + static Mantid::Geometry::Instrument_sptr + createTestInstrumentWithFoilChanger(const Mantid::detid_t id, + const Mantid::Kernel::V3D & detPos, + const std::string &detShapeXML) { using Mantid::Kernel::V3D; using namespace Mantid::Geometry; - auto inst = createTestInstrumentWithNoFoilChanger(id, detPos); + auto inst = createTestInstrumentWithNoFoilChanger(id, detPos, detShapeXML); // add changer - auto changerShape = ComponentCreationHelper::createCappedCylinder(0.05,0.4,V3D(0.0,-0.2,0.0),V3D(0.0,1,0.0), "cylinder"); + auto changerShape = \ + ComponentCreationHelper::createCappedCylinder(0.05, 0.4, V3D(0.0,-0.2,0.0), + V3D(0.0,1,0.0), "cylinder"); auto *changer = new ObjComponent("foil-changer",changerShape); changer->setPos(V3D(0.0,0.0,0.0)); inst->add(changer); @@ -120,8 +128,10 @@ namespace ComptonProfileTestHelpers return inst; } - static Mantid::Geometry::Instrument_sptr createTestInstrumentWithNoFoilChanger(const Mantid::detid_t id, - const Mantid::Kernel::V3D & detPos) + static Mantid::Geometry::Instrument_sptr + createTestInstrumentWithNoFoilChanger(const Mantid::detid_t id, + const Mantid::Kernel::V3D & detPos, + const std::string &detShapeXML) { using Mantid::Kernel::V3D; using namespace Mantid::Geometry; @@ -140,7 +150,16 @@ namespace ComptonProfileTestHelpers inst->markAsSamplePos(sampleHolder); //Just give it a single detector - auto *det0 = new Detector("det0",id,NULL); + Detector *det0(NULL); + if(!detShapeXML.empty()) + { + auto shape = ShapeFactory().createShape(detShapeXML); + det0 = new Detector("det0", id, shape, NULL); + } + else + { + det0 = new Detector("det0", id, NULL); + } det0->setPos(detPos); inst->add(det0); inst->markAsDetector(det0); @@ -163,6 +182,7 @@ namespace ComptonProfileTestHelpers pmap.addDouble(compID, "t0", -0.32); pmap.addDouble(compID, "hwhm_lorentz", 24); pmap.addDouble(compID, "sigma_gauss", 73); + pmap.addDouble(compID, "sigma_tof", 0.3); } static void addFoilResolution(const Mantid::API::MatrixWorkspace_sptr & ws, diff --git a/Code/Mantid/Framework/DataHandling/CMakeLists.txt b/Code/Mantid/Framework/DataHandling/CMakeLists.txt index e0a7349e7f16a1db94ceaac57727904e938ede99..5df27be94a931908b81b813d713e90355e7669de 100644 --- a/Code/Mantid/Framework/DataHandling/CMakeLists.txt +++ b/Code/Mantid/Framework/DataHandling/CMakeLists.txt @@ -25,7 +25,6 @@ set ( SRC_FILES src/LoadAscii2.cpp src/LoadBBY.cpp src/LoadCalFile.cpp - src/LoadVulcanCalFile.cpp src/LoadCanSAS1D.cpp src/LoadCanSAS1D2.cpp src/LoadDaveGrp.cpp @@ -94,6 +93,7 @@ set ( SRC_FILES src/LoadSpec.cpp src/LoadSpice2D.cpp src/LoadTOFRawNexus.cpp + src/LoadVulcanCalFile.cpp src/MaskDetectors.cpp src/MaskDetectorsInShape.cpp src/MergeLogs.cpp @@ -128,9 +128,12 @@ set ( SRC_FILES src/SaveNXSPE.cpp src/SaveNexus.cpp src/SaveNexusProcessed.cpp + src/SaveNXTomo.cpp src/SaveParameterFile.cpp src/SavePAR.cpp + src/SavePDFGui.cpp src/SavePHX.cpp + src/SaveParameterFile.cpp src/SaveRKH.cpp src/SaveReflTBL.cpp src/SaveSPE.cpp @@ -166,9 +169,8 @@ set ( INC_FILES inc/MantidDataHandling/LoadANSTOHelper.h inc/MantidDataHandling/LoadAscii.h inc/MantidDataHandling/LoadAscii2.h - inc/MantidDataHandling/LoadBBY.h + inc/MantidDataHandling/LoadBBY.h inc/MantidDataHandling/LoadCalFile.h - inc/MantidDataHandling/LoadVulcanCalFile.h inc/MantidDataHandling/LoadCanSAS1D.h inc/MantidDataHandling/LoadCanSAS1D2.h inc/MantidDataHandling/LoadDaveGrp.h @@ -231,7 +233,8 @@ set ( INC_FILES inc/MantidDataHandling/LoadSassena.h inc/MantidDataHandling/LoadSpec.h inc/MantidDataHandling/LoadSpice2D.h - inc/MantidDataHandling/LoadTOFRawNexus.h + inc/MantidDataHandling/LoadTOFRawNexus.h + inc/MantidDataHandling/LoadVulcanCalFile.h inc/MantidDataHandling/MaskDetectors.h inc/MantidDataHandling/MaskDetectorsInShape.h inc/MantidDataHandling/MergeLogs.h @@ -266,9 +269,12 @@ set ( INC_FILES inc/MantidDataHandling/SaveNXSPE.h inc/MantidDataHandling/SaveNexus.h inc/MantidDataHandling/SaveNexusProcessed.h + inc/MantidDataHandling/SaveNXTomo.h inc/MantidDataHandling/SaveParameterFile.h inc/MantidDataHandling/SavePAR.h + inc/MantidDataHandling/SavePDFGui.h inc/MantidDataHandling/SavePHX.h + inc/MantidDataHandling/SaveParameterFile.h inc/MantidDataHandling/SaveRKH.h inc/MantidDataHandling/SaveReflTBL.h inc/MantidDataHandling/SaveSPE.h @@ -308,7 +314,6 @@ set ( TEST_FILES LoadAsciiTest.h LoadBBYTest.h LoadCalFileTest.h - LoadVulcanCalFileTest.h LoadCanSAS1dTest.h LoadDaveGrpTest.h LoadDetectorInfoTest.h @@ -366,6 +371,7 @@ set ( TEST_FILES LoadSpice2dTest.h LoadTOFRawNexusTest.h LoadTest.h + LoadVulcanCalFileTest.h MaskDetectorsInShapeTest.h MaskDetectorsTest.h MergeLogsTest.h @@ -399,9 +405,10 @@ set ( TEST_FILES SaveNXSPETest.h SaveNexusProcessedTest.h SaveNexusTest.h - SaveParameterFileTest.h SavePARTest.h + SavePDFGuiTest.h SavePHXTest.h + SaveParameterFileTest.h SaveRKHTest.h SaveReflTBLTest.h SaveSPETest.h diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadEventNexus.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadEventNexus.h index 6f149bf5747a1168774d169d9381bf2ddf1cbf7b..d680380e7c644f8ad59f7642b41f02e8487cbe48 100644 --- a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadEventNexus.h +++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadEventNexus.h @@ -145,6 +145,13 @@ namespace DataHandling /// Filter by a maximum time-of-flight double filter_tof_max; + /// Spectra list to load + std::vector<int32_t> m_specList; + /// Minimum spectrum to load + int32_t m_specMin; + /// Maximum spectrum to load + int32_t m_specMax; + /// Filter by start time Kernel::DateAndTime filter_time_start; /// Filter by stop time @@ -248,6 +255,9 @@ namespace DataHandling void filterDuringPause(API::MatrixWorkspace_sptr workspace); + // Validate the optional spectra input properties and initialize m_specList + void createSpectraList(int32_t min, int32_t max); + public: /// name of top level NXentry to use std::string m_top_entry_name; diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadFITS.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadFITS.h index 1ed0521b9067aa7862769ec7bf1a13561197bd84..dcfc964b646f4c3ac9af52b99f55ae3d2870a338 100644 --- a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadFITS.h +++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadFITS.h @@ -102,7 +102,9 @@ namespace DataHandling void loadChunkOfBinsFromFile(Mantid::API::MatrixWorkspace_sptr &workspace, vector<vector<double> > &yVals, vector<vector<double> > &eVals, void *&bufferAny, MantidVecPtr &x, size_t spetraCount, int bitsPerPixel, size_t binChunkStartIndex); /// Initialises a workspace with IDF and fills it with data API::MatrixWorkspace_sptr initAndPopulateHistogramWorkspace(); - + /// Creates a comma separated string of rotations from a file + std::string ReadRotations(std::string rotFilePath, size_t fileCount); + vector<FITSInfo> m_allHeaderInfo; size_t m_binChunkSize; static const int FIXED_HEADER_SIZE = 2880; diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SaveNXTomo.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SaveNXTomo.h new file mode 100644 index 0000000000000000000000000000000000000000..cf83e7184b31bc479edcb656e10864a40c015854 --- /dev/null +++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SaveNXTomo.h @@ -0,0 +1,106 @@ +#ifndef MANTID_DATAHANDLING_SAVENXTOMO_H_ +#define MANTID_DATAHANDLING_SAVENXTOMO_H_ + +//--------------------------------------------------- +// Includes +//--------------------------------------------------- +#include "vector" +#include "MantidGeometry/Instrument/RectangularDetector.h" + +namespace Mantid +{ + namespace DataHandling + { + + /** + * Saves a workspace into a NeXus/HDF5 NXTomo file. + * File format is defined here: http://download.nexusformat.org/sphinx/classes/applications/NXtomo.html + * + * Required properties: + * <ul> + * <li> InputWorkspace - The workspace to save. </li> + * <li> Filename - The filename for output </li> + * </ul> + * + * @author John R Hill, RAL + * @date 10/09/2014 + * + * This file is part of Mantid. + * + * Mantid is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Mantid is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * File change history is stored at: <https://github.com/mantidproject/mantid> + * Code Documentation is available at: <http://doxygen.mantidproject.org> + * + */ + + class DLLExport SaveNXTomo: public API::Algorithm + { + public: + SaveNXTomo(); + /// Virtual dtor + virtual ~SaveNXTomo() {} + + /// Algorithm's name for identification overriding a virtual method + virtual const std::string name() const { return "SaveNXTomo"; } + + ///Summary of algorithms purpose + virtual const std::string summary() const {return "Writes a MatrixWorkspace to a file in the NXTomo format.";} + + /// Algorithm's version + virtual int version() const { return (1); } + + /// Algorithm's category for identification + virtual const std::string category() const { return "DataHandling\\Nexus;DataHandling\\Tomo;Diffraction"; } + + private: + /// Initialisation code + void init(); + /// Execution code + void exec(); + + /// Save all data to file + + /// Save batch of images to the file + + /// Fetch all rectangular Detector objects defined for an instrument + std::vector<boost::shared_ptr<const Mantid::Geometry::RectangularDetector>> getRectangularDetectors(const Geometry::Instrument_const_sptr &instrument); + + /// Populate dims_array with the dimensions defined in the rectangular detector in the instrument + std::vector<int64_t> getDimensionsFromDetector(const std::vector<boost::shared_ptr<const Mantid::Geometry::RectangularDetector>> &rectDetectors, size_t useDetectorIndex = 0); + + // Number of rows to + size_t m_numberOfRows; + + // Include error data in the written file + bool m_includeError; + + ///the number of bins in each histogram, as the histogram must have common bins this shouldn't change + //size_t m_nBins; + /// The filename of the output file + std::string m_filename; + + // Some constants to be written for masked values. + /// Value for data if pixel is masked + static const double MASK_FLAG; + /// Value for error if pixel is masked + static const double MASK_ERROR; + /// file format version + static const std::string NXTOMO_VER; + }; + + } // namespace DataHandling +} // namespace Mantid + +#endif // MANTID_DATAHANDLING_SAVENXTOMO_H_ diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SavePDFGui.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SavePDFGui.h new file mode 100644 index 0000000000000000000000000000000000000000..3d147e8dc442e83b2c53fa436f8ec90db0a33785 --- /dev/null +++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SavePDFGui.h @@ -0,0 +1,55 @@ +#ifndef MANTID_DATAHANDLING_SAVEPDFGUI_H_ +#define MANTID_DATAHANDLING_SAVEPDFGUI_H_ + +#include "MantidKernel/System.h" +#include "MantidAPI/Algorithm.h" + +namespace Mantid +{ +namespace DataHandling +{ + + /** SavePDFGui : TODO: DESCRIPTION + + Copyright © 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory + + This file is part of Mantid. + + Mantid is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + Mantid is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + File change history is stored at: <https://github.com/mantidproject/mantid> + Code Documentation is available at: <http://doxygen.mantidproject.org> + */ + class DLLExport SavePDFGui : public API::Algorithm + { + public: + SavePDFGui(); + virtual ~SavePDFGui(); + + virtual const std::string name() const; + virtual int version() const; + virtual const std::string category() const; + virtual const std::string summary() const; + virtual std::map<std::string, std::string> validateInputs(); + + private: + void init(); + void exec(); + }; + + +} // namespace DataHandling +} // namespace Mantid + +#endif /* MANTID_DATAHANDLING_SAVEPDFGUI_H_ */ diff --git a/Code/Mantid/Framework/DataHandling/src/Load.cpp b/Code/Mantid/Framework/DataHandling/src/Load.cpp index 0ee51f8d0b4baa40c8ce61aefccee042f831e06e..e9702b44c91c6e3c3788b5a3cc4d44ce0f56c0bf 100644 --- a/Code/Mantid/Framework/DataHandling/src/Load.cpp +++ b/Code/Mantid/Framework/DataHandling/src/Load.cpp @@ -171,7 +171,7 @@ namespace Mantid std::string name = loader->name(); int version = loader->version(); - std::string ext = fileNames[0].substr(fileNames[0].find_last_of(".")); + //std::string ext = fileNames[0].substr(fileNames[0].find_last_of(".")); auto ifl = boost::dynamic_pointer_cast<IFileLoader<Kernel::FileDescriptor>>(loader); auto iflNexus = boost::dynamic_pointer_cast<IFileLoader<Kernel::NexusDescriptor>>(loader); @@ -181,10 +181,11 @@ namespace Mantid // If it's loading into a single file, perform a cursory check on file extensions only. if((ifl && ifl->loadMutipleAsOne()) || (iflNexus && iflNexus->loadMutipleAsOne())) { - if( fileNames[i].substr(fileNames[i].find_last_of(".")) != ext) + // Currently disabled for ticket http://trac.mantidproject.org/mantid/ticket/10397 : should be put back in when completing 10231 + /* if( fileNames[i].substr(fileNames[i].find_last_of(".")) != ext) { throw std::runtime_error("Cannot load multiple files when more than one Loader is needed."); - } + }*/ } else { @@ -320,6 +321,7 @@ namespace Mantid exts.push_back(".h5"); exts.push_back(".hd5"); exts.push_back(".sqw"); + exts.push_back(".fits"); declareProperty(new MultipleFileProperty("Filename", exts), "The name of the file(s) to read, including the full or relative " diff --git a/Code/Mantid/Framework/DataHandling/src/LoadEventNexus.cpp b/Code/Mantid/Framework/DataHandling/src/LoadEventNexus.cpp index cbbf619213de1339aa840dfe97d36bebbfcd6803..03e4ea316e363417fa16c5b9b24ff969791fbb9a 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadEventNexus.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadEventNexus.cpp @@ -165,9 +165,15 @@ namespace Mantid // ---- Pre-counting events per pixel ID ---- auto & outputWS = *(alg->WS); - if (alg->precount) { + + if ( alg->m_specMin !=EMPTY_INT() && alg->m_specMax !=EMPTY_INT() ) + { + m_min_id = alg->m_specMin; + m_max_id = alg->m_specMax; + } + std::vector<size_t> counts(m_max_id-m_min_id+1, 0); for (size_t i=0; i < numEvents; i++) { @@ -1108,7 +1114,14 @@ namespace Mantid setPropertyGroup("FilterMonByTimeStart", grp4); setPropertyGroup("FilterMonByTimeStop", grp4); - declareProperty( + declareProperty("SpectrumMin",(int32_t)EMPTY_INT(), mustBePositive, + "The number of the first spectrum to read."); + declareProperty("SpectrumMax",(int32_t)EMPTY_INT(), mustBePositive, + "The number of the last spectrum to read."); + declareProperty(new ArrayProperty<int32_t>("SpectrumList"), + "A comma-separated list of individual spectra to read."); + + declareProperty( new PropertyWithValue<bool>("MetaDataOnly", false, Direction::Input), "If true, only the meta data and sample logs will be loaded."); @@ -1785,6 +1798,40 @@ namespace Mantid } file.closeData(); + // get the experiment identifier + try { + file.openData("experiment_identifier"); + string expId(""); + if (file.getInfo().type == ::NeXus::CHAR) + { + expId = file.getStrData(); + } + if (!expId.empty()) { + WS->mutableRun().addProperty("experiment_identifier", expId); + } + file.closeData(); + } catch (::NeXus::Exception &) { + // let it drop on floor + } + + // get the sample name + try { + file.openGroup("sample", "NXsample"); + file.openData("name"); + string name(""); + if (file.getInfo().type == ::NeXus::CHAR) + { + name = file.getStrData(); + } + if (!name.empty()) { + WS->mutableSample().setName(name); + } + file.closeData(); + file.closeGroup(); + } catch (::NeXus::Exception &) { + // let it drop on floor + } + // get the duration file.openData("duration"); std::vector<double> duration; @@ -2134,6 +2181,10 @@ namespace Mantid const bool monitorsOnly, const std::vector<std::string> &bankNames) { bool spectramap = false; + m_specMin = getProperty("SpectrumMin"); + m_specMax = getProperty("SpectrumMax"); + m_specList = getProperty("SpectrumList"); + // set up the if( !monitorsOnly && !bankNames.empty() ) { @@ -2174,8 +2225,10 @@ namespace Mantid if( !spectramap ) { g_log.debug() << "No custom spectra mapping found, continuing with default 1:1 mapping of spectrum:detectorID\n"; + auto specList= WS->getInstrument()->getDetectorIDs(true); + createSpectraList(*std::min_element(specList.begin(),specList.end()),*std::max_element(specList.begin(),specList.end())); // The default 1:1 will suffice but exclude the monitors as they are always in a separate workspace - WS->padSpectra(); + WS->padSpectra(m_specList); g_log.debug() << "Populated 1:1 spectra map for the whole instrument \n"; } } @@ -2332,23 +2385,43 @@ namespace Mantid } else { - g_log.debug() << "Loading only detector spectra from " << filename << "\n"; - SpectrumDetectorMapping mapping(spec,udet, monitors); - WS->resizeTo(mapping.getMapping().size()); - // Make sure spectrum numbers are correct - auto uniqueSpectra = mapping.getSpectrumNumbers(); - auto itend = uniqueSpectra.end(); - size_t counter = 0; - for(auto it = uniqueSpectra.begin(); it != itend; ++it) - { - WS->getSpectrum(counter)->setSpectrumNo(*it); - ++counter; - } - // Fill detectors based on this mapping - WS->updateSpectraUsing(mapping); - } - return true; - } + g_log.debug() << "Loading only detector spectra from " << filename << "\n"; + + // If optional spectra are provided, if so, m_specList is initialized. spec is used if necessary + createSpectraList(*std::min_element(spec.begin(),spec.end()), *std::max_element(spec.begin(),spec.end())); + + if ( !m_specList.empty() ) { + int i=0; + std::vector<int32_t> spec_temp, udet_temp; + for(auto it=spec.begin(); it!=spec.end(); it++) + { + if ( find(m_specList.begin(),m_specList.end(),*it)!= m_specList.end() ) // spec element *it is not in spec_list + { + spec_temp.push_back( *it ); + udet_temp.push_back( udet.at(i) ); + } + i++; + } + spec=spec_temp; + udet=udet_temp; + } + + SpectrumDetectorMapping mapping(spec,udet, monitors); + WS->resizeTo(mapping.getMapping().size()); + // Make sure spectrum numbers are correct + auto uniqueSpectra = mapping.getSpectrumNumbers(); + auto itend = uniqueSpectra.end(); + size_t counter = 0; + for(auto it = uniqueSpectra.begin(); it != itend; ++it) + { + WS->getSpectrum(counter)->setSpectrumNo(*it); + ++counter; + } + // Fill detectors based on this mapping + WS->updateSpectraUsing(mapping); + } + return true; + } /** * Set the filters on TOF. @@ -2728,6 +2801,82 @@ namespace Mantid return out; } +/** +* Check the validity of the optional spectrum range/list provided and identify if partial data should be loaded. +* +* @param min :: The minimum spectrum number read from file +* @param max :: The maximum spectrum number read from file +*/ + +void LoadEventNexus::createSpectraList(int32_t min, int32_t max){ + + // check if range [SpectrumMin, SpectrumMax] was supplied + if( m_specMin != EMPTY_INT() || m_specMax != EMPTY_INT() ) + { + if ( m_specMax == EMPTY_INT() ) + { + m_specMax = max; + } + if ( m_specMin == EMPTY_INT() ) + { + m_specMin = min; + } + + if ( m_specMax > max ) + { + throw std::invalid_argument("Inconsistent range property: SpectrumMax is larger than maximum spectrum found in file."); + } + + // Sanity checks for min/max + if ( m_specMin > m_specMax ) + { + throw std::invalid_argument("Inconsistent range property: SpectrumMin is larger than SpectrumMax."); + } + + // Populate spec_list + for (int32_t i=m_specMin; i<=m_specMax; i++) + m_specList.push_back(i); + } + else{ + // Check if SpectrumList was supplied + + if ( !m_specList.empty() ) + { + // Check no negative/zero numbers have been passed + std::vector<int32_t>::iterator itr = std::find_if(m_specList.begin(), m_specList.end(), std::bind2nd(std::less<int32_t>(), 1)); + if( itr != m_specList.end() ) + { + throw std::invalid_argument("Negative/Zero SpectraList property encountered."); + } + + // Check range and set m_specMax to maximum value in m_specList + if ( (m_specMax=*std::max_element(m_specList.begin(),m_specList.end())) > *std::max_element(m_specList.begin(),m_specList.end()) ) + { + throw std::invalid_argument("Inconsistent range property: SpectrumMax is larger than number of spectra."); + } + + // Set m_specMin to minimum value in m_specList + m_specMin=*std::min_element(m_specList.begin(),m_specList.end()); + } + + } + + if ( !m_specList.empty() ) { + + // Check that spectra supplied by user do not correspond to monitors + auto nmonitors = WS->getInstrument()->getMonitors().size(); + + for( size_t i = 0; i < nmonitors; ++i ) + { + if ( std::find(m_specList.begin(),m_specList.end(),i+1)!= m_specList.end() ) + { + throw std::invalid_argument("Inconsistent range property: some of the selected spectra correspond to monitors."); + } + } + + } + +} } // namespace DataHandling } // namespace Mantid diff --git a/Code/Mantid/Framework/DataHandling/src/LoadFITS.cpp b/Code/Mantid/Framework/DataHandling/src/LoadFITS.cpp index 5b200bba28a6851f532420d2a199d66232d574f7..156624e622246bb78393a92b6ecf15a10102ab9a 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadFITS.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadFITS.cpp @@ -5,6 +5,7 @@ #include "MantidKernel/UnitFactory.h" #include <boost/algorithm/string.hpp> #include <Poco/BinaryReader.h> +#include <fstream> using namespace Mantid::DataHandling; using namespace Mantid::API; @@ -13,380 +14,463 @@ using namespace std; using namespace boost; using Poco::BinaryReader; +namespace +{ + /** + * Used with find_if to check a string isn't a fits file (by checking extension) + * @param s string to check for extension + * @returns bool Value indicating if the string ends with .fits or not + */ + bool IsNotFits(std::string s) + { + std::string tmp = s; + to_lower(tmp); + return !ends_with(tmp,".fits"); + } +} namespace Mantid { namespace DataHandling { - // Register the algorithm into the AlgorithmFactory - DECLARE_FILELOADER_ALGORITHM(LoadFITS); - - /** - * Return the confidence with with this algorithm can load the file - * @param descriptor A descriptor for the file - * @returns An integer specifying the confidence level. 0 indicates it will not be used - */ - int LoadFITS::confidence(Kernel::FileDescriptor & descriptor) const - { - // Should really improve this to check the file header (of first file at least) to make sure it contains the fields wanted - return (descriptor.extension() == ".fits" || descriptor.extension() == ".fit") ? 80 : 0; - } - - /** - * Initialise the algorithm. Declare properties which can be set before execution (input) or - * read from after the execution (output). - */ - void LoadFITS::init() - { - // Specify file extensions which can be associated with a FITS file. - std::vector<std::string> exts; - - // Declare the Filename algorithm property. Mandatory. Sets the path to the file to load. - exts.clear(); - exts.push_back(".fits"); - exts.push_back(".fit"); - - declareProperty(new MultipleFileProperty("Filename", exts), "The input filename of the stored data"); - declareProperty(new PropertyWithValue<size_t>("FileChunkSize", 100, Direction::Input), "Number of files to read into memory at a time - use lower values for machines with low memory"); - - declareProperty(new API::WorkspaceProperty<API::MatrixWorkspace>("OutputWorkspace", "", Kernel::Direction::Output)); - } - - /** - * Execute the algorithm. - */ - void LoadFITS::exec() - { - // Create FITS file information for each file selected - std::vector<std::string> paths; - string fName = getPropertyValue("Filename"); - boost::split(paths, fName, boost::is_any_of(",")); - m_binChunkSize = getProperty("FileChunkSize"); - - // Shrink chunk size to match number of files if it's over the amount (less memory allocated later) - if(m_binChunkSize > paths.size()) m_binChunkSize = static_cast<int>(paths.size()); - - m_allHeaderInfo.resize(paths.size()); - - // Check each header is valid for this loader, - standard (no extension to FITS), and has two axis - bool headerValid = true; - - for(size_t i=0; i<paths.size();++i) - { - m_allHeaderInfo[i].extension = ""; - m_allHeaderInfo[i].filePath = paths[i]; - // Get various pieces of information from the file header which are used to create the workspace - if(parseHeader(m_allHeaderInfo[i])) - { - // Get and convert specific standard header values which will help when parsing the data - // BITPIX, NAXIS, NAXISi (where i = 1..NAXIS, e.g. NAXIS2 for two axis), TOF, TIMEBIN, N_COUNTS, N_TRIGS - try - { - m_allHeaderInfo[i].bitsPerPixel = lexical_cast<int>(m_allHeaderInfo[i].headerKeys["BITPIX"]); - m_allHeaderInfo[i].numberOfAxis = lexical_cast<int>(m_allHeaderInfo[i].headerKeys["NAXIS"]); - - for(int j=0; j<m_allHeaderInfo[i].numberOfAxis; ++j) - { - string keyName = "NAXIS" + lexical_cast<string>(j+1); - m_allHeaderInfo[i].axisPixelLengths.push_back(lexical_cast<int>(m_allHeaderInfo[i].headerKeys[keyName])); - } - - m_allHeaderInfo[i].tof = lexical_cast<double>(m_allHeaderInfo[i].headerKeys["TOF"]); - m_allHeaderInfo[i].timeBin = lexical_cast<double>(m_allHeaderInfo[i].headerKeys["TIMEBIN"]); - m_allHeaderInfo[i].countsInImage = lexical_cast<long int>(m_allHeaderInfo[i].headerKeys["N_COUNTS"]); - m_allHeaderInfo[i].numberOfTriggers = lexical_cast<long int>(m_allHeaderInfo[i].headerKeys["N_TRIGS"]); - m_allHeaderInfo[i].extension = m_allHeaderInfo[i].headerKeys["XTENSION"]; // Various extensions are available to the FITS format, and must be parsed differently if this is present. Loader doesn't support this. - - } - catch(std::exception &) - { - //todo write error and fail this load with invalid data in file. - g_log.error("Unable to locate one or more valid BITPIX, NAXIS, TOF, TIMEBIN, N_COUNTS or N_TRIGS values in the FITS file header."); - throw std::runtime_error("Unable to locate one or more valid BITPIX, NAXIS, TOF, TIMEBIN, N_COUNTS or N_TRIGS values in the FITS file header."); - } - - if(m_allHeaderInfo[i].extension != "") headerValid = false; - if(m_allHeaderInfo[i].numberOfAxis != 2) headerValid = false; - - // Test current item has same axis values as first item. - if(m_allHeaderInfo[0].axisPixelLengths[0] != m_allHeaderInfo[i].axisPixelLengths[0]) headerValid = false; - if(m_allHeaderInfo[0].axisPixelLengths[1] != m_allHeaderInfo[i].axisPixelLengths[1]) headerValid = false; - } - else - { - // Unable to parse the header, throw. - g_log.error("Unable to open the FITS file."); - throw std::runtime_error("Unable to open the FITS file."); - } - - } - - // Check that the files use bit depths of either 8, 16 or 32 - if(m_allHeaderInfo[0].bitsPerPixel != 8 && m_allHeaderInfo[0].bitsPerPixel != 16 && m_allHeaderInfo[0].bitsPerPixel != 32) - { - g_log.error("FITS Loader only supports 8, 16 or 32 bits per pixel."); - throw std::runtime_error("FITS loader only supports 8, 16 or 32 bits per pixel."); - } - - // Check the format is correct and create the Workspace - if(headerValid) - { - // No extension is set, therefore it's the standard format which we can parse. - - // Delete the output workspace name if it existed - std::string outName = getPropertyValue("OutputWorkspace"); - if (AnalysisDataService::Instance().doesExist(outName)) AnalysisDataService::Instance().remove(outName); - - MatrixWorkspace_sptr ws; - - ws = initAndPopulateHistogramWorkspace(); - - // Assign it to the output workspace property - setProperty("OutputWorkspace",ws); - } - else - { - // Invalid files, record error - g_log.error("Loader currently doesn't support FITS files with non-standard extensions, greater than two axis of data, or has detected that all the files are not similar."); - throw std::runtime_error("Loader currently doesn't support FITS files with non-standard extensions, greater than two axis of data, or has detected that all the files are not similar."); - } - } - - /** - * Read a single files header and populate an object with the information - * @param headerInfo A FITSInfo file object to parse header information into - * @returns A bool specifying succes of the operation - */ - bool LoadFITS::parseHeader(FITSInfo &headerInfo) - { - bool ranSuccessfully = true; - try - { - ifstream istr(headerInfo.filePath.c_str(), ios::binary); - Poco::BinaryReader reader(istr); - - // Iterate 80 bytes at a time until header is parsed | 2880 bytes is the fixed header length of FITS - // 2880/80 = 36 iterations required - for(int i=0; i < 36; ++i) - { - // Keep vect of each header item, including comments, and also keep a map of individual keys. - string part; - reader.readRaw(80,part); - headerInfo.headerItems.push_back(part); - - // Add key/values - these are separated by the = symbol. - // If it doesn't have an = it's a comment to ignore. All keys should be unique - auto eqPos = part.find('='); - if(eqPos > 0) - { - string key = part.substr(0, eqPos); - string value = part.substr(eqPos+1); - - // Comments are added after the value separated by a / symbol. Remove. - auto slashPos = value.find('/'); - if(slashPos > 0) value = value.substr(0, slashPos); + // Register the algorithm into the AlgorithmFactory + DECLARE_FILELOADER_ALGORITHM(LoadFITS); + + /** + * Return the confidence with with this algorithm can load the file + * @param descriptor A descriptor for the file + * @returns An integer specifying the confidence level. 0 indicates it will not be used + */ + int LoadFITS::confidence(Kernel::FileDescriptor & descriptor) const + { + // Should really improve this to check the file header (of first file at least) to make sure it contains the fields wanted + return (descriptor.extension() == ".fits" || descriptor.extension() == ".fit") ? 80 : 0; + } + + /** + * Initialise the algorithm. Declare properties which can be set before execution (input) or + * read from after the execution (output). + */ + void LoadFITS::init() + { + // Specify file extensions which can be associated with a FITS file. + std::vector<std::string> exts; + + // Declare the Filename algorithm property. Mandatory. Sets the path to the file to load. + exts.clear(); + exts.push_back(".fits"); + exts.push_back(".fit"); + + declareProperty(new MultipleFileProperty("Filename", exts), "The input filename of the stored data"); + declareProperty(new PropertyWithValue<size_t>("FileChunkSize", 100, Direction::Input), "Number of files to read into memory at a time - use lower values for machines with low memory"); + + declareProperty(new API::WorkspaceProperty<API::MatrixWorkspace>("OutputWorkspace", "", Kernel::Direction::Output)); + } + + /** + * Execute the algorithm. + */ + void LoadFITS::exec() + { + // Create FITS file information for each file selected + std::vector<std::string> paths; + string fName = getPropertyValue("Filename"); + boost::split(paths, fName, boost::is_any_of(",")); + m_binChunkSize = getProperty("FileChunkSize"); + + // If paths contains a non fits file, assume (for now) that it contains information about the rotations + std::string rotFilePath = ""; + std::vector<std::string>::iterator it = std::find_if(paths.begin(),paths.end(),IsNotFits); + if(it != paths.end()) + { + rotFilePath = *it; + paths.erase(it); + } + + // Shrink chunk size to match number of files if it's over the amount (less memory allocated later) + if(m_binChunkSize > paths.size()) m_binChunkSize = static_cast<int>(paths.size()); + + m_allHeaderInfo.resize(paths.size()); + + // Check each header is valid for this loader, - standard (no extension to FITS), and has two axis + bool headerValid = true; + + for(size_t i=0; i<paths.size();++i) + { + m_allHeaderInfo[i].extension = ""; + m_allHeaderInfo[i].filePath = paths[i]; + // Get various pieces of information from the file header which are used to create the workspace + if(parseHeader(m_allHeaderInfo[i])) + { + // Get and convert specific standard header values which will help when parsing the data + // BITPIX, NAXIS, NAXISi (where i = 1..NAXIS, e.g. NAXIS2 for two axis), TOF, TIMEBIN, N_COUNTS, N_TRIGS + try + { + string tmpBitPix = m_allHeaderInfo[i].headerKeys["BITPIX"]; + if(boost::contains(tmpBitPix, "-")) + boost::erase_all(tmpBitPix,"-"); + m_allHeaderInfo[i].bitsPerPixel = lexical_cast<int>(tmpBitPix); + m_allHeaderInfo[i].numberOfAxis = lexical_cast<int>(m_allHeaderInfo[i].headerKeys["NAXIS"]); + + for(int j=0; j<m_allHeaderInfo[i].numberOfAxis; ++j) + { + string keyName = "NAXIS" + lexical_cast<string>(j+1); + m_allHeaderInfo[i].axisPixelLengths.push_back(lexical_cast<int>(m_allHeaderInfo[i].headerKeys[keyName])); + } + + //m_allHeaderInfo[i].tof = lexical_cast<double>(m_allHeaderInfo[i].headerKeys["TOF"]); + //m_allHeaderInfo[i].timeBin = lexical_cast<double>(m_allHeaderInfo[i].headerKeys["TIMEBIN"]); + //m_allHeaderInfo[i].countsInImage = lexical_cast<long int>(m_allHeaderInfo[i].headerKeys["N_COUNTS"]); + //m_allHeaderInfo[i].numberOfTriggers = lexical_cast<long int>(m_allHeaderInfo[i].headerKeys["N_TRIGS"]); + m_allHeaderInfo[i].extension = m_allHeaderInfo[i].headerKeys["XTENSION"]; // Various extensions are available to the FITS format, and must be parsed differently if this is present. Loader doesn't support this. + + } + catch(std::exception &) + { + //todo write error and fail this load with invalid data in file. + throw std::runtime_error("Unable to locate one or more valid BITPIX, NAXIS, TOF, TIMEBIN, N_COUNTS or N_TRIGS values in the FITS file header."); + } + + if(m_allHeaderInfo[i].extension != "") headerValid = false; + if(m_allHeaderInfo[i].numberOfAxis != 2) headerValid = false; + + // Test current item has same axis values as first item. + if(m_allHeaderInfo[0].axisPixelLengths[0] != m_allHeaderInfo[i].axisPixelLengths[0]) headerValid = false; + if(m_allHeaderInfo[0].axisPixelLengths[1] != m_allHeaderInfo[i].axisPixelLengths[1]) headerValid = false; + } + else + { + // Unable to parse the header, throw. + throw std::runtime_error("Unable to open the FITS file."); + } + + } + + // Check that the files use bit depths of either 8, 16 or 32 + if(m_allHeaderInfo[0].bitsPerPixel != 8 && m_allHeaderInfo[0].bitsPerPixel != 16 && m_allHeaderInfo[0].bitsPerPixel != 32) + { + throw std::runtime_error("FITS loader only supports 8, 16 or 32 bits per pixel."); + } + + // Check the format is correct and create the Workspace + if(headerValid) + { + // No extension is set, therefore it's the standard format which we can parse. + + // Delete the output workspace name if it existed + std::string outName = getPropertyValue("OutputWorkspace"); + if (AnalysisDataService::Instance().doesExist(outName)) AnalysisDataService::Instance().remove(outName); + + MatrixWorkspace_sptr ws; + + ws = initAndPopulateHistogramWorkspace(); + + // Set info in WS log to hold rotational information + if(rotFilePath != "") + { + string csvRotations = ReadRotations(rotFilePath, paths.size()); + Run &theRun = ws->mutableRun(); + theRun.addLogData(new PropertyWithValue<std::string>("Rotations", csvRotations)); + } + + // Assign it to the output workspace property + setProperty("OutputWorkspace",ws); + } + else + { + // Invalid files, record error + throw std::runtime_error("Loader currently doesn't support FITS files with non-standard extensions, greater than two axis of data, or has detected that all the files are not similar."); + } + } + + /** + * Read a single files header and populate an object with the information + * @param headerInfo A FITSInfo file object to parse header information into + * @returns A bool specifying succes of the operation + */ + bool LoadFITS::parseHeader(FITSInfo &headerInfo) + { + bool ranSuccessfully = true; + try + { + ifstream istr(headerInfo.filePath.c_str(), ios::binary); + Poco::BinaryReader reader(istr); + + // Iterate 80 bytes at a time until header is parsed | 2880 bytes is the fixed header length of FITS + // 2880/80 = 36 iterations required + for(int i=0; i < 36; ++i) + { + // Keep vect of each header item, including comments, and also keep a map of individual keys. + string part; + reader.readRaw(80,part); + headerInfo.headerItems.push_back(part); + + // Add key/values - these are separated by the = symbol. + // If it doesn't have an = it's a comment to ignore. All keys should be unique + auto eqPos = part.find('='); + if(eqPos > 0) + { + string key = part.substr(0, eqPos); + string value = part.substr(eqPos+1); + + // Comments are added after the value separated by a / symbol. Remove. + auto slashPos = value.find('/'); + if(slashPos > 0) value = value.substr(0, slashPos); - boost::trim(key); - boost::trim(value); - headerInfo.headerKeys[key] = value; - } - } - - istr.close(); - } - catch(...) - { - // Unable to read the file - ranSuccessfully = false; - } - - return ranSuccessfully; - } - - /** - * Create histogram workspace - * @returns Created workspace - */ - MatrixWorkspace_sptr LoadFITS::initAndPopulateHistogramWorkspace() - { - MantidVecPtr x; - x.access().resize(m_allHeaderInfo.size() + 1); - - // Init time bins - double binCount = 0; - for(size_t i=0;i<m_allHeaderInfo.size() + 1; ++i) - { - x.access()[i] = binCount; - if(i != m_allHeaderInfo.size()) binCount += m_allHeaderInfo[i].timeBin; - } - - size_t spectraCount = 0; - if(m_allHeaderInfo[0].numberOfAxis > 0) spectraCount += m_allHeaderInfo[0].axisPixelLengths[0]; - - // Presumably 2 axis, but futureproofing. - for(int i=1;i<m_allHeaderInfo[0].numberOfAxis;++i) - { - spectraCount *= m_allHeaderInfo[0].axisPixelLengths[i]; - } - - MatrixWorkspace_sptr retVal(new DataObjects::Workspace2D); - retVal->initialize(spectraCount, m_allHeaderInfo.size()+1, m_allHeaderInfo.size()); - - IAlgorithm_sptr loadInst = createChildAlgorithm("LoadInstrument"); + boost::trim(key); + boost::trim(value); + headerInfo.headerKeys[key] = value; + } + } + + istr.close(); + } + catch(...) + { + // Unable to read the file + ranSuccessfully = false; + } + + return ranSuccessfully; + } + + /** + * Create histogram workspace + * @returns Created workspace + */ + MatrixWorkspace_sptr LoadFITS::initAndPopulateHistogramWorkspace() + { + MantidVecPtr x; + x.access().resize(m_allHeaderInfo.size() + 1); + + // Init time bins + double binCount = 0; + for(size_t i=0;i<m_allHeaderInfo.size() + 1; ++i) + { + x.access()[i] = binCount; + if(i != m_allHeaderInfo.size()) binCount += 1;//m_allHeaderInfo[i].timeBin; + } + + size_t spectraCount = 0; + if(m_allHeaderInfo[0].numberOfAxis > 0) spectraCount += m_allHeaderInfo[0].axisPixelLengths[0]; + + // Presumably 2 axis, but futureproofing. + for(int i=1;i<m_allHeaderInfo[0].numberOfAxis;++i) + { + spectraCount *= m_allHeaderInfo[0].axisPixelLengths[i]; + } + + MatrixWorkspace_sptr retVal(new DataObjects::Workspace2D); + retVal->initialize(spectraCount, m_allHeaderInfo.size()+1, m_allHeaderInfo.size()); + + IAlgorithm_sptr loadInst = createChildAlgorithm("LoadInstrument"); - try - { - std::string directoryName = Kernel::ConfigService::Instance().getInstrumentDirectory(); - directoryName = directoryName + "/IMAT_Definition.xml"; - - loadInst->setPropertyValue("Filename", directoryName); - loadInst->setProperty<MatrixWorkspace_sptr>("Workspace", retVal); - loadInst->execute(); - } - catch (std::exception & ex) - { - g_log.information("Cannot load the instrument definition. " + string(ex.what()) ); - } - - int bitsPerPixel = m_allHeaderInfo[0].bitsPerPixel; // assumes all files have the same, which they should. - vector<vector<double> > yVals(spectraCount, std::vector<double>(m_binChunkSize)); - vector<vector<double> > eVals(spectraCount, std::vector<double>(m_binChunkSize)); - - // allocate memory to contain the data section of the file: - void * bufferAny = NULL; - bufferAny = malloc ((bitsPerPixel/8)*spectraCount); - - if (bufferAny == NULL) - { - throw std::runtime_error("FITS loader couldn't allocate enough memory to run. Try a smaller chunk size."); - } - - size_t steps = static_cast<size_t>(ceil(m_allHeaderInfo.size()/m_binChunkSize)); - Progress prog(this,0.0,1.0,steps); - - // Load a chunk of files at a time into workspace - try - { - for(size_t i=0; i<m_allHeaderInfo.size(); i+=m_binChunkSize) - { - loadChunkOfBinsFromFile(retVal, yVals, eVals, bufferAny, x, spectraCount, bitsPerPixel, i); - prog.report(name()); - } - } - catch(...) - { - // Exceptions should be handled internally, but catch here to free any memory. Belt and braces. - free(bufferAny); - g_log.error("FITS Loader unable to correctly parse files."); - throw std::runtime_error("FITS loader unable to correctly parse files."); - } - - // Memory no longer needed - free (bufferAny); - - retVal->mutableRun().addProperty("Filename", m_allHeaderInfo[0].filePath); - - // Set the Unit of the X Axis - try - { - retVal->getAxis(0)->unit() = UnitFactory::Instance().create("TOF"); - } - catch ( Exception::NotFoundError & ) - { - retVal->getAxis(0)->unit() = UnitFactory::Instance().create("Label"); - Unit_sptr unit = retVal->getAxis(0)->unit(); - boost::shared_ptr<Units::Label> label = boost::dynamic_pointer_cast<Units::Label>(unit); - label->setLabel("TOF", "TOF"); - } - - retVal->setYUnit("Counts"); - retVal->setTitle("Test Workspace"); - - return retVal; - } - - /** - * Loads data from a selection of the FITS files into the workspace - * @param workspace The workspace to insert data into - * @param yVals Reference to a pre-allocated vector to hold data values for the workspace - * @param eVals Reference to a pre-allocated vector to hold error values for the workspace - * @param bufferAny Pointer to an allocated memory region which will hold a files worth of data - * @param x Vector holding the X bin values - * @param spectraCount Number of data points in each file - * @param bitsPerPixel Number of bits used to represent one data point - * @param binChunkStartIndex Index for the first file to be processed in this chunk - */ - void LoadFITS::loadChunkOfBinsFromFile(MatrixWorkspace_sptr &workspace, vector<vector<double> > &yVals, vector<vector<double> > &eVals, void *&bufferAny, MantidVecPtr &x, size_t spectraCount, int bitsPerPixel, size_t binChunkStartIndex) - { - size_t binsThisChunk = m_binChunkSize; - if((binChunkStartIndex + m_binChunkSize) > m_allHeaderInfo.size()) - { - // No need to do extra processing if number of bins to process is lower than m_binChunkSize - // Also used to prevent out of bounds error where a greater number of elements have been reserved. - binsThisChunk = static_cast<size_t>(m_allHeaderInfo.size() - binChunkStartIndex); - } - - uint8_t *buffer8 = NULL; - uint16_t *buffer16 = NULL; - uint32_t *buffer32 = NULL; - - // create pointer of correct data type to void pointer of the buffer: - buffer8 = static_cast<uint8_t*>(bufferAny); - buffer16 = static_cast<uint16_t*>(bufferAny); - buffer32 = static_cast<uint32_t*>(bufferAny); - - for(size_t i=binChunkStartIndex; i < binChunkStartIndex+binsThisChunk ; ++i) - { - // Read Data - bool fileErr = false; - FILE * currFile = fopen ( m_allHeaderInfo[i].filePath.c_str(), "rb" ); - if (currFile==NULL) fileErr = true; - - size_t result = 0; - if(!fileErr) - { - fseek (currFile , FIXED_HEADER_SIZE , SEEK_CUR); - result = fread(bufferAny, bitsPerPixel/8, spectraCount, currFile); - } - - if (result != spectraCount) fileErr = true; - - if(fileErr) - { - throw std::runtime_error("Error reading file; possibly invalid data."); - } - - for(size_t j=0; j<spectraCount;++j) - { - double val = 0; - if(bitsPerPixel == 8) val = static_cast<double>(buffer8[j]); - if(bitsPerPixel == 16) val = static_cast<double>(buffer16[j]); - if(bitsPerPixel == 32) val = static_cast<double>(buffer32[j]); - - yVals[j][i-binChunkStartIndex] = val; - eVals[j][i-binChunkStartIndex] = sqrt(val); - } - - // Clear memory associated with the file load - fclose (currFile); - } - - // Now load chunk into workspace - PARALLEL_FOR1(workspace) - for (int64_t wi = 0; wi < static_cast<int64_t>(spectraCount); ++wi) - { - workspace->setX(wi, x); - MantidVec *currY = &workspace->dataY(wi); - MantidVec *currE = &workspace->dataE(wi); - - std::copy(yVals[wi].begin(), yVals[wi].end()-(m_binChunkSize-binsThisChunk), currY->begin()+binChunkStartIndex ); - std::copy(eVals[wi].begin(), eVals[wi].end()-(m_binChunkSize-binsThisChunk), currE->begin()+binChunkStartIndex ); - - // I expect this will be wanted once IDF is in a more useful state. - //workspace->getSpectrum(wi)->setDetectorID(detid_t(wi)); - //workspace->getSpectrum(wi)->setSpectrumNo(specid_t(wi+1)); - } - } + try + { + std::string directoryName = Kernel::ConfigService::Instance().getInstrumentDirectory(); + directoryName = directoryName + "/IMAT_Definition.xml"; + + loadInst->setPropertyValue("Filename", directoryName); + loadInst->setProperty<MatrixWorkspace_sptr>("Workspace", retVal); + loadInst->execute(); + } + catch (std::exception & ex) + { + g_log.information("Cannot load the instrument definition. " + string(ex.what()) ); + } + + int bitsPerPixel = m_allHeaderInfo[0].bitsPerPixel; // assumes all files have the same, which they should. + vector<vector<double> > yVals(spectraCount, std::vector<double>(m_binChunkSize)); + vector<vector<double> > eVals(spectraCount, std::vector<double>(m_binChunkSize)); + + // allocate memory to contain the data section of the file: + void * bufferAny = NULL; + bufferAny = malloc ((bitsPerPixel/8)*spectraCount); + + if (bufferAny == NULL) + { + throw std::runtime_error("FITS loader couldn't allocate enough memory to run. Try a smaller chunk size."); + } + + size_t steps = static_cast<size_t>(ceil(m_allHeaderInfo.size()/m_binChunkSize)); + Progress prog(this,0.0,1.0,steps); + + // Load a chunk of files at a time into workspace + try + { + for(size_t i=0; i<m_allHeaderInfo.size(); i+=m_binChunkSize) + { + loadChunkOfBinsFromFile(retVal, yVals, eVals, bufferAny, x, spectraCount, bitsPerPixel, i); + prog.report(name()); + } + } + catch(...) + { + // Exceptions should be handled internally, but catch here to free any memory. Belt and braces. + free(bufferAny); + throw std::runtime_error("FITS loader unable to correctly parse files."); + } + + // Memory no longer needed + free (bufferAny); + + retVal->mutableRun().addProperty("Filename", m_allHeaderInfo[0].filePath); + + // Set the Unit of the X Axis + try + { + retVal->getAxis(0)->unit() = UnitFactory::Instance().create("TOF"); + } + catch ( Exception::NotFoundError & ) + { + retVal->getAxis(0)->unit() = UnitFactory::Instance().create("Label"); + Unit_sptr unit = retVal->getAxis(0)->unit(); + boost::shared_ptr<Units::Label> label = boost::dynamic_pointer_cast<Units::Label>(unit); + label->setLabel("TOF", "TOF"); + } + + retVal->setYUnit("Counts"); + retVal->setTitle("Test Workspace"); + + return retVal; + } + + /** + * Loads data from a selection of the FITS files into the workspace + * @param workspace The workspace to insert data into + * @param yVals Reference to a pre-allocated vector to hold data values for the workspace + * @param eVals Reference to a pre-allocated vector to hold error values for the workspace + * @param bufferAny Pointer to an allocated memory region which will hold a files worth of data + * @param x Vector holding the X bin values + * @param spectraCount Number of data points in each file + * @param bitsPerPixel Number of bits used to represent one data point + * @param binChunkStartIndex Index for the first file to be processed in this chunk + */ + void LoadFITS::loadChunkOfBinsFromFile(MatrixWorkspace_sptr &workspace, vector<vector<double> > &yVals, vector<vector<double> > &eVals, void *&bufferAny, MantidVecPtr &x, size_t spectraCount, int bitsPerPixel, size_t binChunkStartIndex) + { + size_t binsThisChunk = m_binChunkSize; + if((binChunkStartIndex + m_binChunkSize) > m_allHeaderInfo.size()) + { + // No need to do extra processing if number of bins to process is lower than m_binChunkSize + // Also used to prevent out of bounds error where a greater number of elements have been reserved. + binsThisChunk = static_cast<size_t>(m_allHeaderInfo.size() - binChunkStartIndex); + } + + uint8_t *buffer8 = NULL; + uint16_t *buffer16 = NULL; + uint32_t *buffer32 = NULL; + + // create pointer of correct data type to void pointer of the buffer: + buffer8 = static_cast<uint8_t*>(bufferAny); + buffer16 = static_cast<uint16_t*>(bufferAny); + buffer32 = static_cast<uint32_t*>(bufferAny); + + for(size_t i=binChunkStartIndex; i < binChunkStartIndex+binsThisChunk ; ++i) + { + // Read Data + bool fileErr = false; + FILE * currFile = fopen ( m_allHeaderInfo[i].filePath.c_str(), "rb" ); + if (currFile==NULL) fileErr = true; + + size_t result = 0; + if(!fileErr) + { + fseek (currFile , FIXED_HEADER_SIZE , SEEK_CUR); + result = fread(bufferAny, bitsPerPixel/8, spectraCount, currFile); + } + + if (result != spectraCount) fileErr = true; + + if(fileErr) + { + throw std::runtime_error("Error reading file; possibly invalid data."); + } + + for(size_t j=0; j<spectraCount;++j) + { + double val = 0; + if(bitsPerPixel == 8) val = static_cast<double>(buffer8[j]); + if(bitsPerPixel == 16) val = static_cast<double>(buffer16[j]); + if(bitsPerPixel == 32) val = static_cast<double>(buffer32[j]); + + yVals[j][i-binChunkStartIndex] = val; + eVals[j][i-binChunkStartIndex] = sqrt(val); + } + + // Clear memory associated with the file load + fclose (currFile); + } + + // Now load chunk into workspace + PARALLEL_FOR1(workspace) + for (int64_t wi = 0; wi < static_cast<int64_t>(spectraCount); ++wi) + { + workspace->setX(wi, x); + MantidVec *currY = &workspace->dataY(wi); + MantidVec *currE = &workspace->dataE(wi); + + std::copy(yVals[wi].begin(), yVals[wi].end()-(m_binChunkSize-binsThisChunk), currY->begin()+binChunkStartIndex ); + std::copy(eVals[wi].begin(), eVals[wi].end()-(m_binChunkSize-binsThisChunk), currE->begin()+binChunkStartIndex ); + + // I expect this will be wanted once IDF is in a more useful state. + //workspace->getSpectrum(wi)->setDetectorID(detid_t(wi)); + //workspace->getSpectrum(wi)->setSpectrumNo(specid_t(wi+1)); + } + } + + /** + * Reads a file containing rotation values for each image into a comma separated string + * @param rotFilePath The path to a file containing rotation values + * @param fileCount number of images which should have corresponding rotation values in the file + * + * @returns string A comma separated string of doubles + */ + std::string LoadFITS::ReadRotations(std::string rotFilePath, size_t fileCount) + { + ifstream fStream(rotFilePath.c_str()); + std::string csvRotations = ""; + + try + { + // Ensure valid file + if(fStream.good()) + { + // Get lines, split words, verify and add to map. + string line; + vector<string> lineSplit; + size_t ind = -1; + while(getline(fStream, line)) + { + ind++; + boost::split(lineSplit,line, boost::is_any_of("\t")); + + if(ind==0 || lineSplit[0] == "") + continue; // Skip first iteration or where rotation value is empty + + if(ind!=1) // append a comma to separate values if not the first index + csvRotations += ","; + + csvRotations += lineSplit[1]; + } + + // Check the number of rotations in file matches number of files + if(ind != fileCount) + throw std::runtime_error("File error, throw higher up."); + + fStream.close(); + } + else + { + throw std::runtime_error("File error, throw higher up."); + } + } + catch(...) + { + throw std::runtime_error("Invalid file path or file format: Expected a file with a line separated list of rotations with the same number of entries as other files."); + } + + return csvRotations; + } + } } - diff --git a/Code/Mantid/Framework/DataHandling/src/LoadNexusMonitors.cpp b/Code/Mantid/Framework/DataHandling/src/LoadNexusMonitors.cpp index 56bc58ea0284148bf72858bfb5eab373465584c1..f28f17a6e772c9c37e5e85de7a76d973e26ef645 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadNexusMonitors.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadNexusMonitors.cpp @@ -471,6 +471,7 @@ void LoadNexusMonitors::runLoadLogs(const std::string filename, API::MatrixWorks { // do the actual work API::IAlgorithm_sptr loadLogs = createChildAlgorithm("LoadNexusLogs"); + // Now execute the Child Algorithm. Catch and log any error, but don't stop. try { diff --git a/Code/Mantid/Framework/DataHandling/src/SaveNXTomo.cpp b/Code/Mantid/Framework/DataHandling/src/SaveNXTomo.cpp new file mode 100644 index 0000000000000000000000000000000000000000..70b590cd733497baeeae792fd7da2e0bca140799 --- /dev/null +++ b/Code/Mantid/Framework/DataHandling/src/SaveNXTomo.cpp @@ -0,0 +1,417 @@ +#include "MantidAPI/FileProperty.h" +#include "MantidAPI/WorkspaceValidators.h" +#include "MantidDataHandling/FindDetectorsPar.h" +#include "MantidDataHandling/SaveNXTomo.h" +#include "MantidGeometry/IComponent.h" +#include "MantidKernel/MantidVersion.h" +#include "MantidNexus/NexusClasses.h" + +namespace Mantid +{ + namespace DataHandling + { + // Register the algorithm into the algorithm factory + DECLARE_ALGORITHM(SaveNXTomo) + + using namespace Kernel; + using namespace API; + using Geometry::RectangularDetector; + + const double SaveNXTomo::MASK_FLAG = std::numeric_limits<double>::quiet_NaN(); + const double SaveNXTomo::MASK_ERROR = 0.0; + const std::string SaveNXTomo::NXTOMO_VER = "2.0"; + + SaveNXTomo::SaveNXTomo() : API::Algorithm() + { + m_filename = ""; + m_includeError = false; + m_numberOfRows = 32; + } + + /** + * Initialise the algorithm + */ + void SaveNXTomo::init() + { + auto wsValidator = boost::make_shared<CompositeValidator>() ; + //wsValidator->add(boost::make_shared<API::WorkspaceUnitValidator>("DeltaE")); + wsValidator->add<API::CommonBinsValidator>(); + wsValidator->add<API::HistogramValidator>(); + + declareProperty(new WorkspaceProperty<MatrixWorkspace> ("InputWorkspace", "", Direction::Input, wsValidator), + "The name of the workspace to save."); + + declareProperty(new API::FileProperty("Filename", "", FileProperty::Save, std::vector<std::string>(1,".nxs")), + "The name of the NXTomo file to write, as a full or relative path"); + + declareProperty(new PropertyWithValue<size_t>("RowChunkSize", 32, Kernel::Direction::Input), + "Please use an evenly divisible number smaller than the image height"); + + declareProperty(new PropertyWithValue<bool>("IncludeError", false, Kernel::Direction::Input), + "Write the error values to NXTomo file?"); + } + + /** + * Execute the algorithm + */ + void SaveNXTomo::exec() + { + // Retrieve the input workspace + const MatrixWorkspace_const_sptr inputWS = getProperty("InputWorkspace"); + + m_numberOfRows = getProperty("RowChunkSize"); + m_includeError = getProperty("IncludeError"); + + const std::string workspaceID = inputWS->id(); + + if ((workspaceID.find("Workspace2D") == std::string::npos) && + (workspaceID.find("RebinnedOutput") == std::string::npos)) + throw Exception::NotImplementedError("SaveNXTomo passed invalid workspaces. Must be Workspace2D"); + + // Do the full check for common binning + if (!WorkspaceHelpers::commonBoundaries(inputWS)) + { + g_log.error("The input workspace must have common bins"); + throw std::invalid_argument("The input workspace must have common bins"); + } + + // Number of spectra + const size_t nHist = inputWS->getNumberHistograms(); + // Number of energy bins + //this->m_nBins = inputWS->blocksize(); + + // Get a pointer to the sample + //Geometry::IComponent_const_sptr sample = + // inputWS->getInstrument()->getSample(); + + // Retrieve the filename from the properties + this->m_filename = getPropertyValue("Filename"); + + // Dimensions for axis in nxTomo file. + std::vector<int64_t> dims_array; + + // Populate the array + dims_array = getDimensionsFromDetector(getRectangularDetectors(inputWS->getInstrument())); + + // Insert number of bins at front + dims_array.insert(dims_array.begin(), inputWS->blocksize()); // Number of bins + + // Create the file. + ::NeXus::File nxFile(this->m_filename, NXACC_CREATE5); + + // Make the top level entry (and open it) + nxFile.makeGroup("entry1", "NXentry", true); + + // Make a sub-group for the entry to work with DAWN software (and open it) + nxFile.makeGroup("tomo_entry", "NXsubentry", true); + + // Title + nxFile.writeData("title", this->m_filename); + + // Start Time; Format ISO8601 | unused but part of NXtomo schema + //nxFile.writeData("start_time", ); + + // End Time; Format ISO8601 | unused but part of NXtomo schema + //nxFile.writeData("end_time", ); + + // Definition name and version + nxFile.writeData("definition", "NXtomo"); + nxFile.openData("definition"); + nxFile.putAttr("version", NXTOMO_VER); + nxFile.closeData(); + + // Originating program name and version + nxFile.writeData("program_name", "mantid"); + nxFile.openData("program_name"); + nxFile.putAttr("version", Mantid::Kernel::MantidVersion::version()); + nxFile.closeData(); + + // ****************************************** + // NXinstrument + nxFile.makeGroup("instrument", "NXinstrument", true); + // Write the instrument name | could add short_name attribute to name + nxFile.writeData("name", inputWS->getInstrument()->getName()); + + // detector group - diamond example file contains {data,distance,image_key,x_pixel_size,y_pixel_size} Only adding image_key for now, 0 filled. + nxFile.makeGroup("detector", "NXdetector", true); + std::vector<double> imageKeys(dims_array[0],0); + nxFile.writeData("image_key", imageKeys); + // Create link to image_key + nxFile.openData("image_key"); + //NXlink imageKeyLink = nxFile.getDataID(); + nxFile.closeData(); + nxFile.closeGroup(); + + // source group // from diamond file contains {current,energy,name,probe,type} - probe = [neutron | x-ray | electron] + + nxFile.closeGroup(); // NXinstrument + + // ****************************************** + // NXsample + nxFile.makeGroup("sample", "NXsample", true); + // TODO: Write sample info + // name + + // Initialise rotations - if unknown, fill with equal steps from 0 to 180 over all frames. + std::vector<double> rotationAngles(dims_array[0]); + std::string rotValues = ""; + std::vector<std::string> rotSplit; + + if(inputWS->run().hasProperty("Rotations")) + { + rotValues = inputWS->run().getLogData("Rotations")->value(); + boost::split(rotSplit, rotValues, boost::is_any_of(",")); + } + + if(rotSplit.size() == static_cast<size_t>(dims_array[0]) ) + { + for(size_t i=0; i<rotSplit.size(); i++) + { + rotationAngles[i] = boost::lexical_cast<double>(rotSplit[i]); + } + } + else + { + // Make some fake values + g_log.notice("Unable to find a correctly formatted rotation angle file with same entry count as input; creating fake values."); + double step = static_cast<double>(180/dims_array[0]); + rotationAngles[0] = step; + + for(auto it = rotationAngles.begin()+1; it != rotationAngles.end(); ++it) + { + *it = (*(it-1)) + step; + } + } + + nxFile.writeData("rotation_angle", rotationAngles); + + // Create a link object for rotation_angle to use later + nxFile.openData("rotation_angle"); + NXlink rotationLink = nxFile.getDataID(); + nxFile.closeData(); + // x_translation + // y_translation + // z_translation + nxFile.closeGroup(); // NXsample + + // ****************************************** + // Make the NXmonitor group - Holds base beam intensity for each image + // If information is not present, set as 1 + + std::vector<double> intensity(dims_array[0],1); + nxFile.makeGroup("control", "NXmonitor", true); + nxFile.writeData("data", intensity); + nxFile.closeGroup(); // NXmonitor + + nxFile.makeGroup("data", "NXdata", true); + + nxFile.makeLink(rotationLink); + + nxFile.makeData("data", ::NeXus::FLOAT64, dims_array, false); + if(m_includeError) + nxFile.makeData("error", ::NeXus::FLOAT64, dims_array, false); + + std::vector<int64_t> slabStart; + std::vector<int64_t> slabSize; + + // What size slabs are we going to write + slabSize.push_back(dims_array[0]); + slabSize.push_back((int64_t)dims_array[1]); + slabSize.push_back((int64_t)m_numberOfRows); + + // Init start to first row + slabStart.push_back(0); + slabStart.push_back(0); + slabStart.push_back(0); + + // define the data and error vectors for masked detectors + std::vector<double> masked_data (dims_array[0], MASK_FLAG); + if(m_includeError) + std::vector<double> masked_error (dims_array[0], MASK_ERROR); + + // Create a progress reporting object + Progress progress(this,0,1,100); + const size_t progStep = static_cast<size_t>(ceil(static_cast<double>(nHist)/100.0)); + Geometry::IDetector_const_sptr det; + + double *dataArr = new double[dims_array[0]*dims_array[2]*m_numberOfRows]; + double *errorArr = NULL; + if(m_includeError) + errorArr = new double[dims_array[0]*dims_array[2]*m_numberOfRows]; + + int currY = 0; + size_t rowIndForSlab = 0; // as we're creating slabs of multiple rows, this says which y index we're at in current slab + + // Loop over detectors + for (size_t i = 0; i < nHist; ++i) + { + try + { + // detector exist + //det = inputWS->getDetector(i); + // Check that we aren't writing a monitor + //if (!det->isMonitor()) + //{ + //Geometry::IDetector_const_sptr det = inputWS->getDetector(i); + + // Figure out where this pixel is supposed to be going and set the correct slab start. + + if(i!=0 && (i)%dims_array[1] == 0){ // When this iteration matches end of a row + currY += 1; + } + size_t currX = (i) - (currY*dims_array[1]); + + const MantidVec & thisY = inputWS->readY(i); + // No masking - Set the data and error as is + for(int j=0; j<dims_array[0];++j) + { + const size_t currInd = j*dims_array[2]*m_numberOfRows + currX*m_numberOfRows + rowIndForSlab; + + // if(!det->isMasked()) + // { + dataArr[currInd] = thisY.at(j); + if(m_includeError) + errorArr[currInd] = inputWS->readE(i).at(j); + //} + //else + //{ + // dataArr[currInd] = masked_data[j]; + // if(m_includeError) + // errorArr[currInd] = masked_error[j]; + //} + } + + // If end of the row has been reached, check for end of slab (or end of row count) and write data/error + if(((i+1)%dims_array[2]) == 0) + { + rowIndForSlab += 1; + + // Check if we have collected all of the rows (prior to completing a slab) - if so, write the final section + // TODO:: + + + // if a slab has been collected. Put it into the file + if(rowIndForSlab >= m_numberOfRows) + { + slabStart[2] = currY-(rowIndForSlab-1); + + // Write Data + nxFile.openData("data"); + nxFile.putSlab(dataArr, slabStart, slabSize); + nxFile.closeData(); + // Write Error + if(m_includeError) + { + nxFile.openData("error"); + nxFile.putSlab(errorArr, slabStart, slabSize); + nxFile.closeData(); + } + // Reset slab index count + rowIndForSlab = 0; + } + } + } + catch(Exception::NotFoundError&) + { + /*Catch if no detector. Next line tests whether this happened - test placed + outside here because Mac Intel compiler doesn't like 'continue' in a catch + in an openmp block.*/ + } + // If no detector found, skip onto the next spectrum + if ( !det ) continue; + + // Make regular progress reports and check for canceling the algorithm + if ( i % progStep == 0 ) + { + progress.report(); + } + } + + // Create a link object for the data + nxFile.openData("data"); + NXlink dataLink = nxFile.getDataID(); + nxFile.closeData(); + + nxFile.closeGroup(); // Close Data group + + // Put a link to the data in instrument/detector + nxFile.openGroup("instrument","NXinstrument"); + nxFile.openGroup("detector","NXdetector"); + nxFile.makeLink(dataLink); + nxFile.closeGroup(); + nxFile.closeGroup(); + + + nxFile.closeGroup(); // tomo_entry sub-group + nxFile.closeGroup(); // Top level NXentry + + // Clean up memory + delete [] dataArr; + delete [] errorArr; + } + + /** + * Find all RectangularDetector objects in an instrument + * @param instrument instrument to search for detectors in + * @returns vector of all Rectangular Detectors + */ + std::vector<boost::shared_ptr<const RectangularDetector>> SaveNXTomo::getRectangularDetectors(const Geometry::Instrument_const_sptr &instrument) + { + std::vector<boost::shared_ptr<const Mantid::Geometry::IComponent>> components; + instrument->getChildren(components,true); + + std::vector<boost::shared_ptr<const RectangularDetector>> rectDetectors; + + for(auto it = components.begin(); it != components.end(); ++it) + { + // for all components, compare to RectangularDetector - if it is one, add it to detectors list. + auto ptr = boost::dynamic_pointer_cast<const RectangularDetector>(*it); + if(ptr != NULL) + { + rectDetectors.push_back(ptr); + } + } + + return rectDetectors; + } + + /** + * Populates the dimensions vector with number of files, x and y sizes from a specified rectangular detector + * @param rectDetectors List of rectangular detectors to get axis sizes from + * @param useDetectorIndex index of the detector to select from the list, default = 0 + * @returns vector of both axis dimensions for specified detector + * + * @throw runtime_error Thrown if there are no rectangular detectors + */ + std::vector<int64_t> SaveNXTomo::getDimensionsFromDetector(const std::vector<boost::shared_ptr<const RectangularDetector>> &rectDetectors, size_t useDetectorIndex) + { + // Add number of pixels in X and Y from instrument definition + // Throws if no rectangular detector is present. + + std::vector<int64_t> dims; + + if(rectDetectors.size() != 0) + { + // Assume the first rect detector is the desired one. + dims.push_back(rectDetectors[useDetectorIndex]->xpixels()); + dims.push_back(rectDetectors[useDetectorIndex]->ypixels()); + } + else + { + // Incorrect workspace : requires the x/y pixel count from the instrument definition + g_log.error("Unable to retrieve x and y pixel count from an instrument definition associated with this workspace."); + throw std::runtime_error("Unable to retrieve x and y pixel count from an instrument definition associated with this workspace."); + } + + return dims; + } + + //void someRoutineToAddDataToExisting() + //{ + // //TODO: + //} + + } // namespace DataHandling +} // namespace Mantid + + diff --git a/Code/Mantid/Framework/DataHandling/src/SavePDFGui.cpp b/Code/Mantid/Framework/DataHandling/src/SavePDFGui.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6d3b6480f1733153a0fe15be02eade4e64460e21 --- /dev/null +++ b/Code/Mantid/Framework/DataHandling/src/SavePDFGui.cpp @@ -0,0 +1,128 @@ +#include "MantidDataHandling/SavePDFGui.h" +#include "MantidAPI/FileProperty.h" +#include "MantidKernel/MantidVersion.h" +#include <fstream> +#include <iomanip> + +namespace Mantid +{ +namespace DataHandling +{ + + using Mantid::Kernel::Direction; + using Mantid::API::WorkspaceProperty; + + // Register the algorithm into the AlgorithmFactory + DECLARE_ALGORITHM(SavePDFGui) + + + + //---------------------------------------------------------------------------------------------- + /** Constructor + */ + SavePDFGui::SavePDFGui() + { + } + + //---------------------------------------------------------------------------------------------- + /** Destructor + */ + SavePDFGui::~SavePDFGui() + { + } + + + //---------------------------------------------------------------------------------------------- + + ///Algorithm's name for identification. @see Algorithm::name + const std::string SavePDFGui::name() const + { + return "SavePDFGui"; + } + + /// Algorithm's version for identification. @see Algorithm::version + int SavePDFGui::version() const + { + return 1; + } + + /// Algorithm's category for identification. @see Algorithm::category + const std::string SavePDFGui::category() const + { + return "DataHandling"; + } + + /// Algorithm's summary for use in the GUI and help. @see Algorithm::summary + const std::string SavePDFGui::summary() const + { + return "Save files readable by PDFGui"; + } + + //---------------------------------------------------------------------------------------------- + /** Initialize the algorithm's properties. + */ + void SavePDFGui::init() + { + declareProperty(new WorkspaceProperty<>("InputWorkspace","",Direction::Input), "An input workspace."); + declareProperty(new API::FileProperty("Filename", "", API::FileProperty::Save, ".gr"), + "The filename to use for the saved data"); + } + + /// @copydoc Algorithm::validateInputs + std::map<std::string, std::string> SavePDFGui::validateInputs(){ + std::map<std::string, std::string> result; + + API::MatrixWorkspace_const_sptr inputWS = getProperty("InputWorkspace"); + const int nHist = static_cast<int> (inputWS->getNumberHistograms()); + if (nHist != 1) + { + result["InputWorkspace"] = "Workspace must contain only one spectrum"; + } + else if (std::string(inputWS->getAxis(0)->unit()->label()) != "Angstrom") + { + result["InputWorkspace"] = "Expected x-units of Angstrom"; + } + + return result; + } + + //---------------------------------------------------------------------------------------------- + /** Execute the algorithm. + */ + void SavePDFGui::exec() + { + API::MatrixWorkspace_const_sptr inputWS = getProperty("InputWorkspace"); + const std::string filename = getProperty("Filename"); + + // --------- open the file + std::ofstream out; + out.open(filename.c_str(), std::ios_base::out); + + // --------- write the header // TODO + + // --------- write the label for the data + out << "##### start data\n"; + //out << "#O0 rg_int sig_rg_int low_int sig_low_int rmax rhofit\n"; // TODO + out << "#S 1 - PDF from Mantid " << Kernel::MantidVersion::version() << "\n"; + //out << "#P0 -22.03808 1.10131 2556.26392 0.03422 1.50 0.5985\n"; // TODO + out << "#L r G(r) dr dG(r)\n"; + + // --------- write the data + auto x = inputWS->readX(0); + auto dx = inputWS->readDx(0); + auto y = inputWS->readY(0); + auto dy = inputWS->readE(0); + const size_t length = x.size(); + for (size_t i = 0; i < length; ++i) + { + out << " " << x[i] << " " << y[i] << " " << dx[i] << " " << dy[i] << "\n"; + } + + // --------- close the file + out.close(); + } + + + +} // namespace DataHandling +} // namespace Mantid diff --git a/Code/Mantid/Framework/DataHandling/test/LoadEventNexusTest.h b/Code/Mantid/Framework/DataHandling/test/LoadEventNexusTest.h index 9739246443c0365af4a4c62245bc1240c173a946..18b9221ff970dccf31e47a6a556bb845c5ee6e4d 100644 --- a/Code/Mantid/Framework/DataHandling/test/LoadEventNexusTest.h +++ b/Code/Mantid/Framework/DataHandling/test/LoadEventNexusTest.h @@ -218,7 +218,35 @@ public: TSM_ASSERT("The min TOF in the workspace should be equal to or greater than the filtered cut-off", min >= filterStart); } - void test_Load_And_CompressEvents() + void test_partial_spectra_loading() + { + const std::string wsName = "test_partial_spectra_loading"; + std::vector<int32_t> specList; + specList.push_back(13); + specList.push_back(16); + specList.push_back(21); + specList.push_back(28); + + LoadEventNexus ld; + ld.initialize(); + ld.setPropertyValue("OutputWorkspace", wsName); + ld.setPropertyValue("Filename","CNCS_7860_event.nxs"); + ld.setProperty("SpectrumList", specList); + ld.setProperty<bool>("LoadLogs", false); // Time-saver + + TS_ASSERT( ld.execute() ); + + auto outWs = AnalysisDataService::Instance().retrieveWS<EventWorkspace>(wsName); + + TSM_ASSERT("The number of spectra in the workspace should be equal to the spectra filtered", outWs->getNumberHistograms()==specList.size()); + TSM_ASSERT("Some spectra were not found in the workspace", outWs->getSpectrum(0)->getSpectrumNo()==13); + TSM_ASSERT("Some spectra were not found in the workspace", outWs->getSpectrum(1)->getSpectrumNo()==16); + TSM_ASSERT("Some spectra were not found in the workspace", outWs->getSpectrum(2)->getSpectrumNo()==21); + TSM_ASSERT("Some spectra were not found in the workspace", outWs->getSpectrum(3)->getSpectrumNo()==28); + + } + + void test_Load_And_CompressEvents() { Mantid::API::FrameworkManager::Instance(); LoadEventNexus ld; diff --git a/Code/Mantid/Framework/DataHandling/test/SavePDFGuiTest.h b/Code/Mantid/Framework/DataHandling/test/SavePDFGuiTest.h new file mode 100644 index 0000000000000000000000000000000000000000..db962a619bbbea7fa59e277beaf114175bb9fc5c --- /dev/null +++ b/Code/Mantid/Framework/DataHandling/test/SavePDFGuiTest.h @@ -0,0 +1,97 @@ +#ifndef MANTID_DATAHANDLING_SAVEPDFGUITEST_H_ +#define MANTID_DATAHANDLING_SAVEPDFGUITEST_H_ + +#include <cxxtest/TestSuite.h> +#include <Poco/File.h> +#include <fstream> + +#include "MantidDataHandling/SavePDFGui.h" +#include "MantidDataHandling/LoadNexusProcessed.h" + +using Mantid::DataHandling::SavePDFGui; +using Mantid::DataHandling::LoadNexusProcessed; +using namespace Mantid::API; + +class SavePDFGuiTest : public CxxTest::TestSuite +{ +public: + // This pair of boilerplate methods prevent the suite being created statically + // This means the constructor isn't called when running other tests + static SavePDFGuiTest *createSuite() { return new SavePDFGuiTest(); } + static void destroySuite( SavePDFGuiTest *suite ) { delete suite; } + + + void test_Init() + { + SavePDFGui alg; + TS_ASSERT_THROWS_NOTHING( alg.initialize() ) + TS_ASSERT( alg.isInitialized() ) + } + + size_t read( std::istream & is, std::vector <char> & buff ) { + is.read( &buff[0], buff.size() ); + return is.gcount(); + } + + size_t countEOL( const std::vector <char> & buff, size_t sz ) { + size_t newlines = 0; + const char * p = &buff[0]; + for ( size_t i = 0; i < sz; i++ ) { + if ( p[i] == '\n' ) { + newlines++; + } + } + return newlines; + } + + size_t countLines(const std::string &filename) + { + const size_t BUFFER_SIZE = 1024 * 1024; + std::vector <char> buffer( BUFFER_SIZE ); + std::ifstream in( filename.c_str() ); + size_t n = 0; + while( size_t cc = read( in, buffer ) ) { + n += countEOL( buffer, cc ); + } + return n; + } + + void test_exec() + { + // name of workspace to create and save + const std::string wsName("SavePDFGuiTest_OutputWS"); + // name of the output file + const std::string outFilename("SavePDFGuiTest_Output.gr"); + + // Load a file to save out + LoadNexusProcessed load; + load.initialize(); + load.setProperty("Filename", "nom_gr.nxs"); + load.setProperty("OutputWorkspace", wsName); + load.execute(); + + // save the file + SavePDFGui alg; + TS_ASSERT_THROWS_NOTHING( alg.initialize() ) + TS_ASSERT( alg.isInitialized() ) + TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("InputWorkspace", wsName) ); + TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("Filename", outFilename) ); + TS_ASSERT_THROWS_NOTHING( alg.execute(); ); + TS_ASSERT( alg.isExecuted() ); + + // do the checks + Poco::File outFile(outFilename); + TS_ASSERT( outFile.isFile()); + TS_ASSERT_EQUALS( countLines(outFilename), 1003); + + // Remove workspace from the data service. + AnalysisDataService::Instance().remove(wsName); + + // remove the output file + outFile.remove(false); + } + +}; + + +#endif /* MANTID_DATAHANDLING_SAVEPDFGUITEST_H_ */ diff --git a/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/EventWorkspace.h b/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/EventWorkspace.h index 50ff948b4a36037cf8d590328299f8e034225afa..01ed2e99ef0f1f052856ab34a0b1efd5f6fa5868 100644 --- a/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/EventWorkspace.h +++ b/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/EventWorkspace.h @@ -152,6 +152,8 @@ class DLLExport EventWorkspace : public API::IEventWorkspace void resizeTo(const std::size_t numSpectra); // Pad pixels in the workspace using the loaded spectra. Requires a non-empty spectra-detector map void padSpectra(); + // Pad pixels in the workspace using specList. Requires a non-empty vector + void padSpectra(const std::vector<int32_t> & specList); // Remove pixels in the workspace that do not contain events. void deleteEmptyLists(); diff --git a/Code/Mantid/Framework/DataObjects/src/EventWorkspace.cpp b/Code/Mantid/Framework/DataObjects/src/EventWorkspace.cpp index 222e78fd56b6e519de39eba9088d32929190db03..5027c8a023a57af6fc03f812589f212a21c7c37f 100644 --- a/Code/Mantid/Framework/DataObjects/src/EventWorkspace.cpp +++ b/Code/Mantid/Framework/DataObjects/src/EventWorkspace.cpp @@ -615,6 +615,29 @@ namespace Mantid } } + /** Expands the workspace to a number of spectra corresponding to the number of + * pixels/detectors contained in specList. + * All events lists will be empty after calling this method. + */ + void EventWorkspace::padSpectra(const std::vector<int32_t> & specList) + { + if (specList.empty()) + { + padSpectra(); + } + else + { + resizeTo(specList.size()); + for (size_t i = 0; i < specList.size(); ++i) + { + // specList ranges from 1, ..., N + // detector ranges from 0, ..., N-1 + getSpectrum(i)->setDetectorID(specList[i]-1); + getSpectrum(i)->setSpectrumNo(specList[i]); + } + } + } + void EventWorkspace::deleteEmptyLists() { // figure out how much data to copy diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Line.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Line.h index e5f8957178be2654255fd5438b3e3c097eab24fa..45952481c5dfb5812c9e878ebec45afb8ad243d4 100644 --- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Line.h +++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Line.h @@ -62,7 +62,7 @@ namespace Mantid Kernel::V3D Direct; ///< Direction of outer surface (Unit Vector) int lambdaPair(const int ix,const std::pair<std::complex<double>, - std::complex<double> >& SQ,std::vector<Kernel::V3D>& PntOut) const; + std::complex<double> >& SQ,std::list<Kernel::V3D>& PntOut) const; public: @@ -86,10 +86,10 @@ namespace Mantid int setLine(const Kernel::V3D&,const Kernel::V3D&); ///< input Origin + direction - int intersect(std::vector<Kernel::V3D>&,const Quadratic&) const; - int intersect(std::vector<Kernel::V3D>&,const Cylinder&) const; - int intersect(std::vector<Kernel::V3D>&,const Plane&) const; - int intersect(std::vector<Kernel::V3D>&,const Sphere&) const; + int intersect(std::list<Kernel::V3D>&,const Quadratic&) const; + int intersect(std::list<Kernel::V3D>&,const Cylinder&) const; + int intersect(std::list<Kernel::V3D>&,const Plane&) const; + int intersect(std::list<Kernel::V3D>&,const Sphere&) const; }; diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/LineIntersectVisit.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/LineIntersectVisit.h index dba93f49362ab3e7acd7399ca4293d8945dc4ac2..f225702a7c68b28fb720534e728fecc835aa2695 100644 --- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/LineIntersectVisit.h +++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/LineIntersectVisit.h @@ -4,7 +4,7 @@ #include "MantidGeometry/Surfaces/BaseVisit.h" #include "MantidGeometry/Surfaces/Line.h" #include "MantidKernel/V3D.h" -#include <vector> +#include <list> namespace Mantid { @@ -56,8 +56,8 @@ namespace Mantid private: Line ATrack; ///< The line - std::vector<Kernel::V3D> PtOut; ///< The intersection point - std::vector<double> DOut; ///< The distance + std::list<Kernel::V3D> PtOut; ///< The intersection point + std::list<double> DOut; ///< The distance void procTrack(); @@ -66,7 +66,7 @@ namespace Mantid LineIntersectVisit(const Kernel::V3D&, const Kernel::V3D&); /// Destructor - virtual ~LineIntersectVisit() {}; + virtual ~LineIntersectVisit() {} void Accept(const Surface&); void Accept(const Quadratic&); @@ -78,10 +78,10 @@ namespace Mantid // Accessor /// Get the distance - const std::vector<double>& getDistance() const + const std::list<double>& getDistance() const { return DOut; } /// Get the intersection points - const std::vector<Kernel::V3D>& getPoints() const + const std::list<Kernel::V3D>& getPoints() const { return PtOut; } /// Get the number of intersection points unsigned long getNPoints() const { return (unsigned long)PtOut.size(); } diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Plane.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Plane.h index 8e4c34e0d412fb48ae83e4367c9adf82bf2a8c19..cdb7e3c93834ad0b65306a4a943cd091a134db53 100644 --- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Plane.h +++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Plane.h @@ -82,7 +82,7 @@ namespace Mantid double distance(const Kernel::V3D&) const; ///< distance from a point double getDistance() const { return Dist; } ///< Distance from origin - Kernel::V3D getNormal() const { return NormV; } ///< Normal to plane (+ve surface) + const Kernel::V3D & getNormal() const { return NormV; } ///< Normal to plane (+ve surface) void rotate(const Kernel::Matrix<double>&); void displace(const Kernel::V3D&); diff --git a/Code/Mantid/Framework/Geometry/src/Objects/Object.cpp b/Code/Mantid/Framework/Geometry/src/Objects/Object.cpp index 344fc90dd7954366387b63892125f24e96dfb1ed..221750d9bb4f589c80b7292f364c67e1ac5d69a2 100644 --- a/Code/Mantid/Framework/Geometry/src/Objects/Object.cpp +++ b/Code/Mantid/Framework/Geometry/src/Objects/Object.cpp @@ -810,16 +810,18 @@ namespace Mantid { (*vc)->acceptVisitor(LI); } - const std::vector<Kernel::V3D>& IPts(LI.getPoints()); - const std::vector<double>& dPts(LI.getDistance()); + const auto& IPts(LI.getPoints()); + const auto& dPts(LI.getDistance()); - for (unsigned int i = 0; i < IPts.size(); i++) + auto ditr = dPts.begin(); + auto itrEnd = IPts.end(); + for (auto iitr = IPts.begin(); iitr != itrEnd; ++iitr, ++ditr) { - if (dPts[i] > 0.0) // only interested in forward going points + if (*ditr > 0.0) // only interested in forward going points { // Is the point and enterance/exit Point - const int flag = calcValidType(IPts[i], UT.direction()); - UT.addPoint(flag, IPts[i], *this); + const int flag = calcValidType(*iitr, UT.direction()); + UT.addPoint(flag, *iitr, *this); } } UT.buildLink(); diff --git a/Code/Mantid/Framework/Geometry/src/Objects/RuleItems.cpp b/Code/Mantid/Framework/Geometry/src/Objects/RuleItems.cpp index b78500bee17f5be0a2c15210e762d4fdf0892d51..97a69ac7534f19476cee3caa39210b17b17b4073 100644 --- a/Code/Mantid/Framework/Geometry/src/Objects/RuleItems.cpp +++ b/Code/Mantid/Framework/Geometry/src/Objects/RuleItems.cpp @@ -292,9 +292,11 @@ Intersection::isValid(const Kernel::V3D& Vec) const @retval 0 :: Vec is outside object. */ { - if (!A || !B) - return false; - return (A->isValid(Vec) && B->isValid(Vec)) ? true : false; + if(A && B) + { + return (A->isValid(Vec) && B->isValid(Vec)); + } + return false; } bool @@ -849,9 +851,10 @@ SurfPoint::isValid(const Kernel::V3D& Pt) const */ { if (key) - return (key->side(Pt)*sign)>=0 ? true : false; - else - return false; + { + return (key->side(Pt)*sign)>=0; + } + return false; } bool diff --git a/Code/Mantid/Framework/Geometry/src/Surfaces/Line.cpp b/Code/Mantid/Framework/Geometry/src/Surfaces/Line.cpp index 69e2dbbc1e1dd17057ff2f9f95b07aaaec8557f8..c4c424e9fb55436078e497b83470407cfda37330 100644 --- a/Code/Mantid/Framework/Geometry/src/Surfaces/Line.cpp +++ b/Code/Mantid/Framework/Geometry/src/Surfaces/Line.cpp @@ -136,9 +136,9 @@ namespace Mantid } int - Line::lambdaPair(const int ix,const std::pair< + Line::lambdaPair(const int ix, const std::pair< std::complex<double>,std::complex<double> >& SQ, - std::vector<Kernel::V3D>& PntOut) const + std::list<Kernel::V3D> &PntOut) const /** Helper function to decide which roots to take. The assumption is that lambda has been solved by quadratic @@ -190,7 +190,7 @@ namespace Mantid } int - Line::intersect(std::vector<Kernel::V3D>& VecOut, + Line::intersect(std::list<Kernel::V3D> &VecOut, const Quadratic& Sur) const /** For the line that intersects the surfaces @@ -220,7 +220,7 @@ namespace Mantid } int - Line::intersect(std::vector<Kernel::V3D>& PntOut ,const Plane& Pln) const + Line::intersect(std::list<Kernel::V3D>& PntOut ,const Plane& Pln) const /** For the line that intersects the cylinder generate add the point to the VecOut, return number of points @@ -244,7 +244,7 @@ namespace Mantid } int - Line::intersect(std::vector<Kernel::V3D>& PntOut ,const Cylinder& Cyl) const + Line::intersect(std::list<Kernel::V3D> &PntOut , const Cylinder& Cyl) const /** For the line that intersects the cylinder generate add the point to the VecOut, return number of points @@ -273,7 +273,7 @@ namespace Mantid } int - Line::intersect(std::vector<Kernel::V3D>& PntOut ,const Sphere& Sph) const + Line::intersect(std::list<Kernel::V3D> &PntOut , const Sphere& Sph) const /** For the line that intersects the cylinder generate add the point to the VecOut, return number of points diff --git a/Code/Mantid/Framework/Geometry/src/Surfaces/Plane.cpp b/Code/Mantid/Framework/Geometry/src/Surfaces/Plane.cpp index 95962e6acb5e797a3a1b8e0838f9977885ae2f03..4e5004b92152aeebfaf0456353b085fa647efec8 100644 --- a/Code/Mantid/Framework/Geometry/src/Surfaces/Plane.cpp +++ b/Code/Mantid/Framework/Geometry/src/Surfaces/Plane.cpp @@ -220,8 +220,7 @@ Plane::side(const Kernel::V3D& A) const @retval 0 :: A is on the plane itself (within tolerence) */ { - double Dp=NormV.scalar_prod(A); - Dp-=Dist; + double Dp=NormV.scalar_prod(A)-Dist; if (Tolerance<fabs(Dp)) return (Dp>0) ? 1 : -1; return 0; diff --git a/Code/Mantid/Framework/Geometry/test/LineIntersectVisitTest.h b/Code/Mantid/Framework/Geometry/test/LineIntersectVisitTest.h index 448aafecbc6e82ab5ce61a09f21758ffa04dc657..24765b26c2704c84f3ed00786b567cbe460dfde6 100644 --- a/Code/Mantid/Framework/Geometry/test/LineIntersectVisitTest.h +++ b/Code/Mantid/Framework/Geometry/test/LineIntersectVisitTest.h @@ -20,8 +20,8 @@ public: void testConstructor(){ LineIntersectVisit A(V3D(-1.0,-1.0,-1.0),V3D(1.0,0.0,0.0)); TS_ASSERT_EQUALS(A.getNPoints(),0); - TS_ASSERT_EQUALS(A.getPoints(),std::vector<Kernel::V3D>()); - TS_ASSERT_EQUALS(A.getDistance(),std::vector<double>()); + TS_ASSERT_EQUALS(A.getPoints(),std::list<Kernel::V3D>()); + TS_ASSERT_EQUALS(A.getDistance(),std::list<double>()); } void testAcceptPlane(){ @@ -31,10 +31,10 @@ public: TS_ASSERT_EQUALS(extractString(B),"-1 px 0\n"); A.Accept(B); TS_ASSERT_EQUALS(A.getNPoints(),1); - std::vector<Kernel::V3D> Pnts; + std::list<Kernel::V3D> Pnts; Pnts.push_back(V3D(0.0,-1.0,-1.0)); TS_ASSERT_EQUALS(A.getPoints(),Pnts); - std::vector<double> Dist; + std::list<double> Dist; Dist.push_back(1.0); TS_ASSERT_EQUALS(A.getDistance(),Dist); } @@ -45,14 +45,13 @@ public: Sphere B; B.setSurface("s 0.0 0.0 0.0 2"); A.Accept(B); - std::vector<V3D> pntOut; + std::list<V3D> pntOut; // changed for forward going only intercepts on quadratice surfaces //pntOut.push_back(V3D(-2.0,0.0,0.0)); pntOut.push_back(V3D(2.0,0.0,0.0)); TS_ASSERT_EQUALS(A.getNPoints(),1); TS_ASSERT_EQUALS(A.getPoints(),pntOut); - std::vector<double> Dist; - //Dist.push_back(2.0); + std::list<double> Dist; Dist.push_back(2.0); TS_ASSERT_EQUALS(A.getDistance(),Dist); } @@ -67,19 +66,13 @@ public: A.Accept(B); // change for forward only intercept TS_ASSERT_EQUALS(A.getNPoints(),1); - std::vector<V3D> pntOut; - pntOut=A.getPoints(); - //TS_ASSERT_DELTA(pntOut[0].X(),-1,0.0000001); - //TS_ASSERT_DELTA(pntOut[0].Y(),0.0,0.0000001); - //TS_ASSERT_DELTA(pntOut[0].Z(),0.0,0.0000001); - TS_ASSERT_DELTA(pntOut[0].X(),1,0.0000001); - TS_ASSERT_DELTA(pntOut[0].Y(),0.0,0.0000001); - TS_ASSERT_DELTA(pntOut[0].Z(),0.0,0.0000001); + const auto &pntOut = A.getPoints(); + TS_ASSERT_DELTA(pntOut.front().X(),1,0.0000001); + TS_ASSERT_DELTA(pntOut.front().Y(),0.0,0.0000001); + TS_ASSERT_DELTA(pntOut.front().Z(),0.0,0.0000001); - std::vector<double> Dist; - Dist=A.getDistance(); - TS_ASSERT_DELTA(Dist[0],1.0,0.0000001); - //TS_ASSERT_DELTA(Dist[1],1.0,0.0000001); + const auto &Dist = A.getDistance(); + TS_ASSERT_DELTA(Dist.front(),1.0,0.0000001); } void testAcceptCylinder(){ @@ -92,13 +85,13 @@ public: TS_ASSERT_EQUALS(B.getNormal(),V3D(0,1,0)); A.Accept(B); - std::vector<V3D> pntOut; + std::list<V3D> pntOut; // forward only //pntOut.push_back(V3D(-1.0,0.0,0.0)); pntOut.push_back(V3D(1.0,0.0,0.0)); TS_ASSERT_EQUALS(A.getNPoints(),1); TS_ASSERT_EQUALS(A.getPoints(),pntOut); - std::vector<double> Dist; + std::list<double> Dist; //Dist.push_back(1.0); Dist.push_back(1.0); TS_ASSERT_EQUALS(A.getDistance(),Dist); @@ -106,14 +99,12 @@ public: LineIntersectVisit C(V3D(1.1,0.0,0.0),V3D(-1.0,0.0,0.0)); C.Accept(B); TS_ASSERT_EQUALS(C.getNPoints(),2); - std::vector<V3D> pntOut2; + std::list<V3D> pntOut2; pntOut2.push_back(V3D(-1.0,0.0,0.0)); pntOut2.push_back(V3D(1.0,0.0,0.0)); TS_ASSERT_EQUALS(C.getPoints(),pntOut2); } - void testAcceptGeneral(){ - } private: std::string extractString(const Surface& pv) diff --git a/Code/Mantid/Framework/Geometry/test/LineTest.h b/Code/Mantid/Framework/Geometry/test/LineTest.h index b0a2f59dc0f65faa9c49d77c0826223f6d39c6bd..2b2d4fcf56ba7cf89d7751afbed3022420f72784 100644 --- a/Code/Mantid/Framework/Geometry/test/LineTest.h +++ b/Code/Mantid/Framework/Geometry/test/LineTest.h @@ -142,13 +142,12 @@ public: TS_ASSERT_EQUALS(B.getRadius(),1); TS_ASSERT_EQUALS(B.getNormal(),V3D(0,1,0)); - std::vector<V3D> pntOut; + std::list<V3D> pntOut; A.intersect(pntOut,B); // forward only solution for cylinders - TS_ASSERT_EQUALS(pntOut.size(),1); - //TS_ASSERT_EQUALS(pntOut[0],V3D(-1.0,0.0,0.0)); - TS_ASSERT_EQUALS(pntOut[0],V3D(1.0,0.0,0.0)); + TS_ASSERT_EQUALS(pntOut.size(),1); + TS_ASSERT_EQUALS(pntOut.front(),V3D(1.0,0.0,0.0)); } //A Line with equation equivalent to x axis will cut A Cylinder with 1 radius with center at 0,0,0 y axis normal @@ -164,12 +163,13 @@ public: TS_ASSERT_EQUALS(B.getRadius(),1); TS_ASSERT_EQUALS(B.getNormal(),V3D(0,1,0)); - std::vector<V3D> pntOut; + std::list<V3D> pntOut; A.intersect(pntOut,B); - TS_ASSERT_EQUALS(pntOut.size(),2); - TS_ASSERT_EQUALS(pntOut[0],V3D(1.0,0.0,0.0)); - TS_ASSERT_EQUALS(pntOut[1],V3D(-1.0,0.0,0.0)); + TS_ASSERT_EQUALS(pntOut.size(),2); + auto itr = pntOut.begin(); + TS_ASSERT_EQUALS(*(itr++), V3D(1.0,0.0,0.0)); + TS_ASSERT_EQUALS(*itr,V3D(-1.0,0.0,0.0)); } //A Line with equation equivalent to x axis will cut a plane YZ with equation x=5 will cut at one point 5,0,0 @@ -181,11 +181,11 @@ public: Plane B; TS_ASSERT_EQUALS(B.setSurface("px 5 0 0"),0); - std::vector<V3D> pntOut; + std::list<V3D> pntOut; A.intersect(pntOut,B); - TS_ASSERT_EQUALS(pntOut.size(),1); - TS_ASSERT_EQUALS(pntOut[0],V3D(5.0,0.0,0.0)); + TS_ASSERT_EQUALS(pntOut.size(),1); + TS_ASSERT_EQUALS(pntOut.front(),V3D(5.0,0.0,0.0)); } //A Line with equation equivalent to x axis will cut A sphere with 2 radius with center at 0,0,0 @@ -197,12 +197,11 @@ public: Sphere B; B.setSurface("s 0.0 0.0 0.0 2"); - std::vector<V3D> pntOut; + std::list<V3D> pntOut; A.intersect(pntOut,B); // forward only solutions - TS_ASSERT_EQUALS(pntOut.size(),1); - //TS_ASSERT_EQUALS(pntOut[0],V3D(-2.0,0.0,0.0)); - TS_ASSERT_EQUALS(pntOut[0],V3D(2.0,0.0,0.0)); + TS_ASSERT_EQUALS(pntOut.size(),1); + TS_ASSERT_EQUALS(pntOut.front(),V3D(2.0,0.0,0.0)); } //A Line with equation equivalent to x axis starting at -10 will cut A sphere with 2 radius with center at 0,0,0 @@ -214,11 +213,12 @@ public: Sphere B; B.setSurface("s 0.0 0.0 0.0 2"); - std::vector<V3D> pntOut; + std::list<V3D> pntOut; A.intersect(pntOut,B); - TS_ASSERT_EQUALS(pntOut.size(),2); - TS_ASSERT_EQUALS(pntOut[0],V3D(2.0,0.0,0.0)); - TS_ASSERT_EQUALS(pntOut[1],V3D(-2.0,0.0,0.0)); + TS_ASSERT_EQUALS(pntOut.size(),2); + auto itr = pntOut.begin(); + TS_ASSERT_EQUALS(*(itr++), V3D(2.0,0.0,0.0)); + TS_ASSERT_EQUALS(*itr, V3D(-2.0,0.0,0.0)); } }; diff --git a/Code/Mantid/Framework/Kernel/inc/MantidKernel/PhysicalConstants.h b/Code/Mantid/Framework/Kernel/inc/MantidKernel/PhysicalConstants.h index c4c59f7bad30c1a99f1b23216382f39b1fad0681..fa19d947a33037a587f012ec097007534b7931e7 100644 --- a/Code/Mantid/Framework/Kernel/inc/MantidKernel/PhysicalConstants.h +++ b/Code/Mantid/Framework/Kernel/inc/MantidKernel/PhysicalConstants.h @@ -16,7 +16,7 @@ namespace Mantid @author Russell Taylor, Tessella Support Services plc @date 30/10/2007 - + Copyright © 2007-2010 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory This file is part of Mantid. @@ -34,7 +34,7 @@ namespace Mantid You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. - File change history is stored at: <https://github.com/mantidproject/mantid>. + File change history is stored at: <https://github.com/mantidproject/mantid>. Code Documentation is available at: <http://doxygen.mantidproject.org> */ namespace PhysicalConstants @@ -52,16 +52,19 @@ namespace PhysicalConstants /** Standard acceleration due to gravity. Precise value in ms<SUP>-2</SUP>. */ static const double g = 9.80665; - + /** Mass of the neutron in kg. Taken from <http://physics.nist.gov/cuu/Constants> on 30/10/2007. */ static const double NeutronMass = 1.674927211e-27; /** Mass of the neutron in AMU. Taken from <http://physics.nist.gov/cuu/Constants> on 02/01/2013. */ static const double NeutronMassAMU = 1.008664916; + /** AMU in kg. Taken from <http://physics.nist.gov/cuu/Constants> on 10/09/2014. */ + static const double AtomicMassUnit = 1.660538921e-27; + /** 1 meV in Joules. Taken from <http://physics.nist.gov/cuu/Constants> on 28/03/2008. */ static const double meV = 1.602176487e-22; - + /** 1 meV in wavenumber (cm<SUP>-1</SUP>). Taken from <http://physics.nist.gov/cuu/Constants> on 02/04/2008. */ static const double meVtoWavenumber = 8.06554465; @@ -74,10 +77,10 @@ namespace PhysicalConstants /** Muon lifetime. Taken from MuLan experiment on 08/12/2008. */ static const double MuonLifetime = 2.197019e-6; - /** Standard atmospheric pressure in kPa. + /** Standard atmospheric pressure in kPa. * Taken from <http://physics.nist.gov/cgi-bin/cuu/Value?stdatm|search_for=adopted_in!> on 01/12/2010 **/ static const double StandardAtmosphere = 101.325; - + /** Boltzmann Constant in meV/K * Taken from <http://physics.nist.gov/cuu/Constants> on 10/07/2012 */ diff --git a/Code/Mantid/Framework/Kernel/src/V3D.cpp b/Code/Mantid/Framework/Kernel/src/V3D.cpp index 8e06fb397002f4f228aeb5aa6cc3de72deb5d92d..1e6025349131047ff27d5691da3ee6c5ceab6e06 100644 --- a/Code/Mantid/Framework/Kernel/src/V3D.cpp +++ b/Code/Mantid/Framework/Kernel/src/V3D.cpp @@ -482,9 +482,8 @@ V3D::cross_prod(const V3D& v) const double V3D::distance(const V3D& v) const { - V3D dif(*this); - dif-=v; - return dif.norm(); + const double dx(x-v.x), dy(y-v.y), dz(z-v.z); + return sqrt(dx*dx +dy*dy + dz*dz); } /** Calculates the zenith angle (theta) of this vector with respect to another @@ -556,15 +555,10 @@ V3D::rotate(const Kernel::Matrix<double>& A) @param A :: Rotation matrix (needs to be >3x3) */ { - Matrix<double> Pv(3,1); - Pv[0][0]=x; - Pv[1][0]=y; - Pv[2][0]=z; - Matrix<double> Po=A*Pv; - x=Po[0][0]; - y=Po[1][0]; - z=Po[2][0]; - return; + double xold(x), yold(y), zold(z); + x = A[0][0]*xold + A[0][1]*yold + A[0][2]*zold; + y = A[1][0]*xold + A[1][1]*yold + A[1][2]*zold; + z = A[2][0]*xold + A[2][1]*yold + A[2][2]*zold; } /** diff --git a/Code/Mantid/Framework/Kernel/test/V3DTest.h b/Code/Mantid/Framework/Kernel/test/V3DTest.h index 98f6367c19481da8cf1d12c77a09f5950bfb348a..e5d7fb2112c905cbdf7b6c18d0fb547cc27e3d5a 100644 --- a/Code/Mantid/Framework/Kernel/test/V3DTest.h +++ b/Code/Mantid/Framework/Kernel/test/V3DTest.h @@ -8,6 +8,7 @@ #include <vector> #include "MantidKernel/V3D.h" +#include "MantidKernel/Matrix.h" #include "MantidTestHelpers/NexusTestHelper.h" using Mantid::Kernel::V3D; @@ -300,6 +301,63 @@ public: TS_ASSERT_DELTA( a.angle(d), M_PI, 0.0001); } + void testRotate() + { + V3D direc(1,1,1); + const double theta = 45.0*M_PI/180.0; + const double invRt2(1.0/sqrt(2.0)); + + // rotate around X + Mantid::Kernel::Matrix<double> rx(3,3); + rx[0][0] = 1.0; + rx[1][1] = cos(theta); + rx[1][2] = -sin(theta); + rx[2][2] = cos(theta); + rx[2][1] = sin(theta); + direc.rotate(rx); + + TS_ASSERT_DELTA(direc.X(), 1.0, 1e-08); + TS_ASSERT_DELTA(direc.Y(), 0.0, 1e-08); + TS_ASSERT_DELTA(direc.Z(), 2.0*invRt2, 1e-08); + + // rotate around Y + direc = V3D(1,1,1); + Mantid::Kernel::Matrix<double> ry(3,3); + ry[0][0] = cos(theta); + ry[0][2] = sin(theta); + ry[1][1] = 1.0; + ry[2][0] = -sin(theta); + ry[2][2] = cos(theta); + direc.rotate(ry); + + TS_ASSERT_DELTA(direc.X(), 2.0*invRt2, 1e-08); + TS_ASSERT_DELTA(direc.Y(), 1.0, 1e-08); + TS_ASSERT_DELTA(direc.Z(), 0.0, 1e-08); + + // rotate around Z + direc = V3D(1,1,1); + Mantid::Kernel::Matrix<double> rz(3,3); + rz[0][0] = cos(theta); + rz[0][1] = -sin(theta); + rz[1][0] = sin(theta); + rz[1][1] = cos(theta); + rz[2][2] = 1.0; + direc.rotate(rz); + + TS_ASSERT_DELTA(direc.X(), 0.0, 1e-08); + TS_ASSERT_DELTA(direc.Y(), 2.0*invRt2, 1e-08); + TS_ASSERT_DELTA(direc.Z(), 1.0, 1e-08); + + // General rotation + Mantid::Kernel::Matrix<double> Rt = rz*ry*rx; + direc = V3D(1,1,1); + direc.rotate(Rt); + + TS_ASSERT_DELTA(direc.X(), invRt2*(1+invRt2), 1e-08); + TS_ASSERT_DELTA(direc.Y(), invRt2*(1+invRt2), 1e-08); + TS_ASSERT_DELTA(direc.Z(), 1.0-invRt2, 1e-08); + } + void testSpherical() { double r = 3, theta = 45.0, phi = 45.0; @@ -539,4 +597,45 @@ public: }; +//--------------------------------------------------------------------------- +// Performance tests +//--------------------------------------------------------------------------- + +class V3DTestPerformance : public CxxTest::TestSuite +{ +public: + // This pair of boilerplate methods prevent the suite being created statically + // This means the constructor isn't called when running other tests + static V3DTestPerformance *createSuite() { return new V3DTestPerformance(); } + static void destroySuite( V3DTestPerformance *suite ) { delete suite; } + + V3DTestPerformance() + { + const double theta = 45.0*M_PI/180.0; + + // rotate around X + m_rotx = Mantid::Kernel::Matrix<double>(3,3); + m_rotx[0][0] = 1.0; + m_rotx[1][1] = cos(theta); + m_rotx[1][2] = -sin(theta); + m_rotx[2][2] = cos(theta); + m_rotx[2][1] = sin(theta); + } + + void testRotate() + { + V3D direction(1.0,1.0,1.0); + for(size_t i = 0; i < 100000; ++i) + { + direction = V3D(1.0,1.0,1.0); + direction.rotate(m_rotx); + } + // Do something so the compiler doesn't optimise the loop away + TS_ASSERT_DELTA(direction.Y(), 0.0, 1e-08); + } + +private: + Mantid::Kernel::Matrix<double> m_rotx; +}; + #endif diff --git a/Code/Mantid/Framework/MDAlgorithms/CMakeLists.txt b/Code/Mantid/Framework/MDAlgorithms/CMakeLists.txt index 23dbe3fd76b17c5605cbe2a58f990b6c30fd9bb8..e0fdf07f80079d8be53e1ec6a5f81cbab17f9267 100644 --- a/Code/Mantid/Framework/MDAlgorithms/CMakeLists.txt +++ b/Code/Mantid/Framework/MDAlgorithms/CMakeLists.txt @@ -22,6 +22,7 @@ set ( SRC_FILES src/CreateMDWorkspace.cpp src/DivideMD.cpp src/EqualToMD.cpp + src/EvaluateMDFunction.cpp src/ExponentialMD.cpp src/FakeMDEventData.cpp src/FindPeaksMD.cpp @@ -103,6 +104,7 @@ set ( INC_FILES inc/MantidMDAlgorithms/DllConfig.h inc/MantidMDAlgorithms/EqualToMD.h inc/MantidMDAlgorithms/ExponentialMD.h + inc/MantidMDAlgorithms/EvaluateMDFunction.h inc/MantidMDAlgorithms/FakeMDEventData.h inc/MantidMDAlgorithms/FindPeaksMD.h inc/MantidMDAlgorithms/GSLFunctions.h @@ -185,6 +187,7 @@ set ( TEST_FILES DivideMDTest.h EqualToMDTest.h ExponentialMDTest.h + EvaluateMDFunctionTest.h FakeMDEventDataTest.h FindPeaksMDTest.h FitResolutionConvolvedModelTest.h diff --git a/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/EvaluateMDFunction.h b/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/EvaluateMDFunction.h new file mode 100644 index 0000000000000000000000000000000000000000..ed2ee59597c9fba38dfe6a30709b6c5f39f40faa --- /dev/null +++ b/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/EvaluateMDFunction.h @@ -0,0 +1,56 @@ +#ifndef MANTID_MDALGORITHMS_EVALUATEMDFUNCTION_H_ +#define MANTID_MDALGORITHMS_EVALUATEMDFUNCTION_H_ + +#include "MantidKernel/System.h" +#include "MantidAPI/Algorithm.h" + +namespace Mantid +{ +namespace MDAlgorithms +{ + + /** EvaluateMDFunction : TODO: DESCRIPTION + + Copyright © 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory + + This file is part of Mantid. + + Mantid is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + Mantid is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + File change history is stored at: <https://github.com/mantidproject/mantid> + Code Documentation is available at: <http://doxygen.mantidproject.org> + */ + class DLLExport EvaluateMDFunction : public API::Algorithm + { + public: + EvaluateMDFunction(); + virtual ~EvaluateMDFunction(); + + virtual const std::string name() const {return "EvaluateMDFunction";} + virtual int version() const; + virtual const std::string category() const; + virtual const std::string summary() const; + + private: + void init(); + void exec(); + + + }; + + +} // namespace MDAlgorithms +} // namespace Mantid + +#endif /* MANTID_MDALGORITHMS_EVALUATEMDFUNCTION_H_ */ diff --git a/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/SXDMDNorm.h b/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/SXDMDNorm.h index 3ff33b52b27772a000db1df2226cc6c76b4474bb..a6d7c3e1218239423bbca99136a968d18e4b1eb6 100644 --- a/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/SXDMDNorm.h +++ b/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/SXDMDNorm.h @@ -66,6 +66,8 @@ namespace MDAlgorithms double KincidentMin,KincidentMax; ///index of h,k,l dimensions in the output workspaces size_t hIndex,kIndex,lIndex; + /// cached x values along dimensions h,k,l + std::vector<double> m_hX, m_kX, m_lX; }; diff --git a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDParent.cpp b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDParent.cpp index a8a64f5f1f360721d6d08c28249d7d94bdf3a5b5..c91bfedbcd0c4fafda1eb75ebdab47be009b0f15 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDParent.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDParent.cpp @@ -188,6 +188,30 @@ namespace Mantid if(oldInstrName==currentWSInstrumentName) { + // a direct mode instrument can be unchanged but incident energy can be different. + // It is cheap operation so we should always replace incident energy on the target workspace + bool hasEi= InWS2D->run().hasProperty("Ei"); + bool hasEfix= InWS2D->run().hasProperty("eFixed"); + if (hasEi||hasEfix) + { + + double Ei; + if (hasEi) Ei=InWS2D->run().getPropertyValueAsType<double>("Ei"); + if (hasEfix) Ei=InWS2D->run().getPropertyValueAsType<double>("eFixed"); + + TargTableWS->logs()->addProperty<double>("Ei",Ei,true); + } + else + { + Emode = Kernel::DeltaEMode().fromString(dEModeRequested); + if(Emode==Kernel::DeltaEMode::Direct) + throw(std::invalid_argument("Input neutron's energy has to be present at the workspace as Ei or eFixed number log in Direct inelastic mode")); + //if(Emode==Kernel::DeltaEMode::Indirect && !hasEfix) + // throw(std::invalid_argument("Input neutron's energy has to be present at the workspace as eFixed number log in Indirect inelastic mode")); + + } + + if(!updateMasks) return TargTableWS; //Target workspace with preprocessed detectors exists and seems is correct one. // We still need to update masked detectors information diff --git a/Code/Mantid/Framework/MDAlgorithms/src/EvaluateMDFunction.cpp b/Code/Mantid/Framework/MDAlgorithms/src/EvaluateMDFunction.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b4e1a6cc8203c426291e27c610be9f8a7cd2e629 --- /dev/null +++ b/Code/Mantid/Framework/MDAlgorithms/src/EvaluateMDFunction.cpp @@ -0,0 +1,98 @@ +#include "MantidMDAlgorithms/EvaluateMDFunction.h" +#include "MantidAPI/FunctionProperty.h" +#include "MantidAPI/IMDHistoWorkspace.h" +#include "MantidAPI/AlgorithmManager.h" +#include "MantidAPI/IMDIterator.h" +#include "MantidAPI/FunctionDomainMD.h" +#include "MantidAPI/FunctionValues.h" + +namespace Mantid +{ +namespace MDAlgorithms +{ + + using Mantid::Kernel::Direction; + using Mantid::API::WorkspaceProperty; + + // Register the algorithm into the AlgorithmFactory + DECLARE_ALGORITHM(EvaluateMDFunction) + + + + //---------------------------------------------------------------------------------------------- + /** Constructor + */ + EvaluateMDFunction::EvaluateMDFunction() + { + } + + //---------------------------------------------------------------------------------------------- + /** Destructor + */ + EvaluateMDFunction::~EvaluateMDFunction() + { + } + + + //---------------------------------------------------------------------------------------------- + + + /// Algorithm's version for identification. @see Algorithm::version + int EvaluateMDFunction::version() const { return 1;}; + + /// Algorithm's category for identification. @see Algorithm::category + const std::string EvaluateMDFunction::category() const { return "MDAlgorithms";} + + /// Algorithm's summary for use in the GUI and help. @see Algorithm::summary + const std::string EvaluateMDFunction::summary() const { return "Evaluates an MD function on a MD histo workspace.";}; + + //---------------------------------------------------------------------------------------------- + /** Initialize the algorithm's properties. + */ + void EvaluateMDFunction::init() + { + declareProperty(new WorkspaceProperty<API::IMDHistoWorkspace>("InputWorkspace","",Direction::Input), "An input workspace that provides dimensions for the output."); + declareProperty(new API::FunctionProperty("Function"),"Parameters defining the fitting function and its initial values"); + declareProperty(new WorkspaceProperty<API::IMDHistoWorkspace>("OutputWorkspace","",Direction::Output), "An output workspace."); + } + + //---------------------------------------------------------------------------------------------- + /** Execute the algorithm. + */ + void EvaluateMDFunction::exec() + { + API::IMDHistoWorkspace_sptr input = getProperty("InputWorkspace"); + + auto cloner = API::AlgorithmManager::Instance().create("CloneMDWorkspace"); + cloner->initialize(); + cloner->setChild(true); + cloner->setProperty("InputWorkspace", input); + cloner->setPropertyValue("OutputWorkspace", "_"); + cloner->execute(); + + API::IMDWorkspace_sptr clone = cloner->getProperty("OutputWorkspace"); + API::IMDHistoWorkspace_sptr output = boost::dynamic_pointer_cast<API::IMDHistoWorkspace>(clone); + + if ( !output ) + throw std::runtime_error("Cannot create output workspace"); + + API::IFunction_sptr function = getProperty("Function"); + function->setWorkspace( output ); + + API::FunctionDomainMD domain( output ); + API::FunctionValues values( domain ); + + function->function( domain, values ); + + double *data = values.getPointerToCalculated(0); + size_t length = values.size(); + double *outputData = output->getSignalArray(); + std::copy( data, data + length, outputData ); + + setProperty("OutputWorkspace",output); + } + + + +} // namespace MDAlgorithms +} // namespace Mantid diff --git a/Code/Mantid/Framework/MDAlgorithms/src/SXDMDNorm.cpp b/Code/Mantid/Framework/MDAlgorithms/src/SXDMDNorm.cpp index fefd5bc9731ac31cb6479c882f61a24ea98e6fbd..db70979476418d76a42f6ba3005159b844c8a2d6 100644 --- a/Code/Mantid/Framework/MDAlgorithms/src/SXDMDNorm.cpp +++ b/Code/Mantid/Framework/MDAlgorithms/src/SXDMDNorm.cpp @@ -17,7 +17,7 @@ namespace MDAlgorithms using namespace Mantid::Kernel; ///function to compare two intersections (h,k,l,Momentum) by Momentum - bool compareMomentum(Mantid::Kernel::VMD v1, Mantid::Kernel::VMD v2) + bool compareMomentum(const Mantid::Kernel::VMD &v1, const Mantid::Kernel::VMD &v2) { return (v1[3]<v2[3]); } @@ -235,6 +235,27 @@ namespace MDAlgorithms } } + auto &hDim = *m_normWS->getDimension(hIndex); + m_hX.resize( hDim.getNBins() ); + for(size_t i = 0; i < m_hX.size(); ++i) + { + m_hX[i] = hDim.getX(i); + } + + auto &kDim = *m_normWS->getDimension(kIndex); + m_kX.resize( kDim.getNBins() ); + for(size_t i = 0; i < m_kX.size(); ++i) + { + m_kX[i] = kDim.getX(i); + } + + auto &lDim = *m_normWS->getDimension(lIndex); + m_lX.resize( lDim.getNBins() ); + for(size_t i = 0; i < m_lX.size(); ++i) + { + m_lX[i] = lDim.getX(i); + } + Mantid::API::MatrixWorkspace_const_sptr fW=getProperty("FluxWorkspace"); Mantid::DataObjects::EventWorkspace_const_sptr fluxW = boost::dynamic_pointer_cast<const Mantid::DataObjects::EventWorkspace>(fW); KincidentMin=fluxW->getEventXMin(); @@ -266,16 +287,18 @@ namespace MDAlgorithms Mantid::API::Progress *prog=new Mantid::API::Progress(this,0.3,1,static_cast<int64_t>(detIDS.size())); const detid2index_map d2m=fluxW->getDetectorIDToWorkspaceIndexMap(); const detid2index_map d2mSA=sA->getDetectorIDToWorkspaceIndexMap(); + auto instrument = m_normWS->getExperimentInfo(0)->getInstrument(); PARALLEL_FOR1(m_normWS) for(int i=0;i<static_cast<int>(detIDS.size());i++) { PARALLEL_START_INTERUPT_REGION - Mantid::Geometry::IDetector_const_sptr detector=m_normWS->getExperimentInfo(0)->getInstrument()->getDetector(detIDS[i]); + Mantid::Geometry::IDetector_const_sptr detector=instrument->getDetector(detIDS[i]); if(!detector->isMonitor()&&!detector->isMasked()) { //get intersections std::vector<Mantid::Kernel::VMD> intersections=calculateIntersections(detector); + if(!intersections.empty()) { //calculate indices @@ -287,21 +310,35 @@ namespace MDAlgorithms std::vector<Mantid::DataObjects::WeightedEventNoTime> el=fluxW->getEventList(sp).getWeightedEventsNoTime(); //get iterator to the first event that has momentum >= (*intersections.begin())[3] std::vector<Mantid::DataObjects::WeightedEventNoTime>::iterator start=el.begin(); + // check that el isn't empty + if ( start == el.end() ) continue; while((*start).tof()<(*intersections.begin())[3]) ++start; double solid=sA->readY(d2mSA.find(detIDS[i])->second)[0]*PC; - std::vector<Mantid::Kernel::VMD>::iterator it; - for (it=intersections.begin()+1;it!=intersections.end();++it) + + const size_t sizeOfMVD = intersections.front().size(); + // pre-allocate for efficiency + std::vector<coord_t> pos( sizeOfMVD + otherValues.size() ); + + for (auto it=intersections.begin()+1;it!=intersections.end();++it) { - Mantid::Kernel::VMD deltav=(*it)-(*(it-1));//difference between consecutive intersections - Mantid::Kernel::VMD avev=((*it)+(*(it-1)))*0.5;//average between two intersection (to get position) + //Mantid::Kernel::VMD deltav=(*it)-(*(it-1));//difference between consecutive intersections + // the full vector isn't used so compute only what is necessary + double delta = (*it)[3] - (*(it-1))[3]; + double eps=1e-7;//do not integrate if momemntum difference is smaller than eps, assume contribution is 0 - if (deltav[3]>eps) + if (delta > eps) { - std::vector<coord_t> pos=avev.toVector<coord_t>(); - pos.insert(pos.end()-1,otherValues.begin(),otherValues.end()); - VMD posNew=mat*pos; - size_t linIndex=m_normWS->getLinearIndexAtCoord(posNew.toVector<coord_t>().data()); + //Mantid::Kernel::VMD avev=((*it)+(*(it-1)))*0.5;//average between two intersection (to get position) + //std::vector<coord_t> pos=avev.toVector<coord_t>(); + //pos.insert(pos.end()-1,otherValues.begin(),otherValues.end()); + // a bit longer and less readable but faster version of the above + std::transform( it->getBareArray(), it->getBareArray() + sizeOfMVD, (it-1)->getBareArray(), pos.begin(), std::plus<coord_t>() ); + std::transform( pos.begin(), pos.begin() + sizeOfMVD, pos.begin(), std::bind2nd( std::multiplies<coord_t>(), 0.5 ) ); + std::copy( otherValues.begin(), otherValues.end(), pos.begin() + sizeOfMVD ); + + std::vector<coord_t> posNew = mat*pos; + size_t linIndex=m_normWS->getLinearIndexAtCoord(posNew.data()); if(linIndex!=size_t(-1)) { @@ -351,6 +388,11 @@ namespace MDAlgorithms double eps=1e-7; + auto hNBins = m_hX.size(); + auto kNBins = m_kX.size(); + auto lNBins = m_lX.size(); + intersections.reserve( hNBins + kNBins + lNBins + 8 ); + //calculate intersections with planes perpendicular to h if (fabs(hStart-hEnd)>eps) { @@ -359,9 +401,9 @@ namespace MDAlgorithms double fl=(lEnd-lStart)/(hEnd-hStart); if(!hIntegrated) { - for(size_t i=0;i<m_normWS->getDimension(hIndex)->getNBins();i++) + for(size_t i=0;i<hNBins;i++) { - double hi=m_normWS->getDimension(hIndex)->getX(i); + double hi = m_hX[i]; if ((hi>=hMin)&&(hi<=hMax)&&((hStart-hi)*(hEnd-hi)<0)) { // if hi is between hStart and hEnd, then ki and li will be between kStart, kEnd and lStart, lEnd and momi will be between KincidentMin and KnincidemtmMax @@ -411,9 +453,9 @@ namespace MDAlgorithms double fl=(lEnd-lStart)/(kEnd-kStart); if(!kIntegrated) { - for(size_t i=0;i<m_normWS->getDimension(kIndex)->getNBins();i++) + for(size_t i=0;i<kNBins;i++) { - double ki=m_normWS->getDimension(kIndex)->getX(i); + double ki = m_kX[i]; if ((ki>=kMin)&&(ki<=kMax)&&((kStart-ki)*(kEnd-ki)<0)) { // if ki is between kStart and kEnd, then hi and li will be between hStart, hEnd and lStart, lEnd @@ -463,9 +505,9 @@ namespace MDAlgorithms double fk=(kEnd-kStart)/(lEnd-lStart); if(!lIntegrated) { - for(size_t i=0;i<m_normWS->getDimension(lIndex)->getNBins();i++) + for(size_t i=0;i<lNBins;i++) { - double li=m_normWS->getDimension(lIndex)->getX(i); + double li = m_lX[i]; if ((li>=lMin)&&(li<=lMax)&&((lStart-li)*(lEnd-li)<0)) { // if li is between lStart and lEnd, then hi and ki will be between hStart, hEnd and kStart, kEnd @@ -520,7 +562,9 @@ namespace MDAlgorithms } //sort intersections by momentum - std::stable_sort(intersections.begin(),intersections.end(),compareMomentum); + typedef std::vector<Mantid::Kernel::VMD>::iterator IterType; + std::stable_sort<IterType,bool (*)(const Mantid::Kernel::VMD&,const Mantid::Kernel::VMD&)>(intersections.begin(),intersections.end(),compareMomentum); + return intersections; } diff --git a/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDComponentsTest.h b/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDComponentsTest.h index 6c1ca26e41140036fc2452925c932e863ed8f641..958d745759d7954e1b0103840f3f2312415bc926 100644 --- a/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDComponentsTest.h +++ b/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDComponentsTest.h @@ -124,6 +124,11 @@ public: TS_ASSERT_EQUALS(9,TableWS6->rowCount()); TS_ASSERT_EQUALS(4,TableWS5->rowCount()); + // Trow on running the test again if the workspace does not have energy attached. + ws2DNew->mutableRun().removeProperty("Ei"); + TSM_ASSERT_THROWS("WS has to have input energy for indirect methods despite the table workspace is already calculated",pAlg->preprocessDetectorsPositions(ws2DNew),std::invalid_argument); + + } void testUpdateMasksSkipped() diff --git a/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDMinMaxLocalTest.h b/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDMinMaxLocalTest.h index 5ca43c8ba0ae23f9cdbaede1b68fa601da806a4e..3f555afd1bde0d0bd55a1ff12f10976872fe3e16 100644 --- a/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDMinMaxLocalTest.h +++ b/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDMinMaxLocalTest.h @@ -137,6 +137,7 @@ public: Mantid::API::FrameworkManager::Instance(); ConvertToMDMinMaxLocal alg; Mantid::API::MatrixWorkspace_sptr ws=MakeWorkspace(-2.5,0.05,true,0,5); + WorkspaceCreationHelper::storeWS(WSName,ws); TS_ASSERT_THROWS_NOTHING( alg.initialize() ) diff --git a/Code/Mantid/Framework/MDAlgorithms/test/EvaluateMDFunctionTest.h b/Code/Mantid/Framework/MDAlgorithms/test/EvaluateMDFunctionTest.h new file mode 100644 index 0000000000000000000000000000000000000000..f1fe2cbbc9cd60229a403ae30bc0df0240d80de9 --- /dev/null +++ b/Code/Mantid/Framework/MDAlgorithms/test/EvaluateMDFunctionTest.h @@ -0,0 +1,97 @@ +#ifndef MANTID_MDALGORITHMS_EVALUATEMDFUNCTIONTEST_H_ +#define MANTID_MDALGORITHMS_EVALUATEMDFUNCTIONTEST_H_ + +#include <cxxtest/TestSuite.h> + +#include "MantidMDAlgorithms/EvaluateMDFunction.h" +#include "MantidMDAlgorithms/CreateMDHistoWorkspace.h" + +using Mantid::MDAlgorithms::EvaluateMDFunction; +using Mantid::MDAlgorithms::CreateMDHistoWorkspace; +using namespace Mantid::API; + +class EvaluateMDFunctionTest : public CxxTest::TestSuite +{ +public: + // This pair of boilerplate methods prevent the suite being created statically + // This means the constructor isn't called when running other tests + static EvaluateMDFunctionTest *createSuite() { return new EvaluateMDFunctionTest(); } + static void destroySuite( EvaluateMDFunctionTest *suite ) { delete suite; } + + + void test_Init() + { + EvaluateMDFunction alg; + TS_ASSERT_THROWS_NOTHING( alg.initialize() ) + TS_ASSERT( alg.isInitialized() ) + } + + void test_exec() + { + // Name of the output workspace. + std::string outWSName("EvaluateMDFunctionTest_OutputWS"); + + const size_t nx = 3, ny = 4; + IMDHistoWorkspace_sptr inputWorkspace = createInputWorkspace(nx,ny); + TS_ASSERT( inputWorkspace ); + std::string funcStr = "name=UserFunctionMD,Formula=x+y"; + + EvaluateMDFunction alg; + TS_ASSERT_THROWS_NOTHING( alg.initialize() ) + TS_ASSERT( alg.isInitialized() ) + TS_ASSERT_THROWS_NOTHING( alg.setProperty("InputWorkspace", inputWorkspace) ); + TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("Function", funcStr) ); + TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("OutputWorkspace", outWSName) ); + TS_ASSERT_THROWS_NOTHING( alg.execute(); ); + TS_ASSERT( alg.isExecuted() ); + + IMDHistoWorkspace_sptr ws; + TS_ASSERT_THROWS_NOTHING( ws = AnalysisDataService::Instance().retrieveWS<IMDHistoWorkspace>(outWSName) ); + TS_ASSERT(ws); + if (!ws) return; + + for(size_t i = 0; i < nx; ++i) + for(size_t j = 0; j < ny; ++j) + { + size_t linearIndex = ws->getLinearIndex(i,j); + auto v = ws->getCenter(linearIndex); + auto x = v[0]; + auto y = v[1]; + auto f = ws->getSignalAt(linearIndex); + TS_ASSERT_DELTA( f, x + y, 1e-15 ); + } + + // Remove workspace from the data service. + AnalysisDataService::Instance().remove(outWSName); + } + + IMDHistoWorkspace_sptr createInputWorkspace(size_t nx, size_t ny) + { + + std::vector<double> values( nx * ny, 1.0 ); + std::vector<int> dims(2); + dims[0] = static_cast<int>(nx); + dims[1] = static_cast<int>(ny); + + CreateMDHistoWorkspace alg; + alg.initialize(); + alg.setProperty("SignalInput", values); + alg.setProperty("ErrorInput", values); + alg.setProperty("Dimensionality", 2); + alg.setProperty("NumberOfBins", dims); + alg.setPropertyValue("Extents", "-1,1,-1,1"); + alg.setPropertyValue("Names", "A,B"); + alg.setPropertyValue("Units", "U,U"); + alg.setPropertyValue("OutputWorkspace", "out"); + alg.execute(); + TS_ASSERT( alg.isExecuted() ); + + IMDHistoWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<IMDHistoWorkspace>("out"); + AnalysisDataService::Instance().remove("out"); + return ws; + } + +}; + + +#endif /* MANTID_MDALGORITHMS_EVALUATEMDFUNCTIONTEST_H_ */ diff --git a/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/FitMD.h b/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/FitMD.h index 95a0ffc00ec12252a640ecce32ccdc29d93dab6a..fd9de1a6ede89d05c8c6fa94e637edc39d2684fd 100644 --- a/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/FitMD.h +++ b/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/FitMD.h @@ -14,6 +14,8 @@ namespace Mantid class FunctionDomain; class FunctionDomainMD; class IMDWorkspace; + class IMDEventWorkspace; + class IMDHistoWorkspace; } namespace MDEvents @@ -82,6 +84,17 @@ namespace Mantid protected: /// Set all parameters void setParameters()const; + /// Create event output workspace + boost::shared_ptr<API::Workspace> createEventOutputWorkspace(const std::string& baseName, + const API::IMDEventWorkspace &inputWorkspace, + const API::FunctionValues &values, + const std::string& outputWorkspacePropertyName); + /// Create histo output workspace + boost::shared_ptr<API::Workspace> createHistoOutputWorkspace(const std::string& baseName, + API::IFunction_sptr function, + boost::shared_ptr<const API::IMDHistoWorkspace> inputWorkspace, + const std::string& outputWorkspacePropertyName); + /// Store workspace property name std::string m_workspacePropertyName; /// Store maxSize property name diff --git a/Code/Mantid/Framework/MDEvents/src/FitMD.cpp b/Code/Mantid/Framework/MDEvents/src/FitMD.cpp index d4ec3719ebe6fedb3b2d62585993df3c32b34744..0673b924ffe1e23bc77ee5570b1caaa761e477e2 100644 --- a/Code/Mantid/Framework/MDEvents/src/FitMD.cpp +++ b/Code/Mantid/Framework/MDEvents/src/FitMD.cpp @@ -10,6 +10,9 @@ #include "MantidAPI/IFunctionMD.h" #include "MantidAPI/MemoryManager.h" #include "MantidAPI/WorkspaceProperty.h" +#include "MantidAPI/AlgorithmFactory.h" +#include "MantidAPI/Algorithm.h" + #include "MantidGeometry/MDGeometry/MDHistoDimensionBuilder.h" #include "MantidMDEvents/MDEventFactory.h" @@ -121,9 +124,13 @@ namespace Mantid while(iter) { values->setFitData(i,iter->getNormalizedSignal()); - double err = iter->getNormalizedError(); - if (err <= 0.0) err = 1.0; - values->setFitWeight(i,1/err); + // there is a problem with errors in md workspaces. Until it is solved + // set all weights to 1.0 + // code commented out after the next line is the normal way of setting weights + values->setFitWeight(i,1.0); + //double err = iter->getNormalizedError(); + //if (err <= 0.0) err = 1.0; + //values->setFitWeight(i,1/err); iter = dmd->getNextIterator(); ++i; }; @@ -139,7 +146,7 @@ namespace Mantid * @param outputWorkspacePropertyName :: The property name */ boost::shared_ptr<API::Workspace> FitMD::createOutputWorkspace(const std::string& baseName, - API::IFunction_sptr, + API::IFunction_sptr function, boost::shared_ptr<API::FunctionDomain> domain, boost::shared_ptr<API::FunctionValues> values, const std::string& outputWorkspacePropertyName) @@ -154,12 +161,35 @@ namespace Mantid return boost::shared_ptr<API::Workspace>(); } API::IMDWorkspace_const_sptr domainWS = functionMD->getWorkspace(); - auto inputWS = boost::dynamic_pointer_cast<const API::IMDEventWorkspace>(domainWS); - if(!inputWS) + + auto inputEventWS = boost::dynamic_pointer_cast<const API::IMDEventWorkspace>(domainWS); + if( inputEventWS ) { - return boost::shared_ptr<API::Workspace>(); + return createEventOutputWorkspace( baseName, *inputEventWS, *values, outputWorkspacePropertyName ); + } + + auto inputHistoWS = boost::dynamic_pointer_cast<const API::IMDHistoWorkspace>(domainWS); + if( inputHistoWS ) + { + return createHistoOutputWorkspace( baseName, function, inputHistoWS, outputWorkspacePropertyName ); } - auto outputWS = MDEventFactory::CreateMDWorkspace(inputWS->getNumDims(), "MDEvent"); + + return boost::shared_ptr<API::Workspace>(); + } + + /** + * Create an output event workspace filled with data simulated with the fitting function. + * @param baseName :: The base name for the workspace + * @param inputWorkspace :: The input workspace. + * @param values :: The calculated values + * @param outputWorkspacePropertyName :: The property name + */ + boost::shared_ptr<API::Workspace> FitMD::createEventOutputWorkspace(const std::string& baseName, + const API::IMDEventWorkspace &inputWorkspace, + const API::FunctionValues &values, + const std::string& outputWorkspacePropertyName) + { + auto outputWS = MDEventFactory::CreateMDWorkspace(inputWorkspace.getNumDims(), "MDEvent"); // Add events // TODO: Generalize to ND (the current framework is a bit limiting) auto mdWS = boost::dynamic_pointer_cast<MDEvents::MDEventWorkspace<MDEvents::MDEvent<4>,4> >(outputWS); @@ -171,7 +201,7 @@ namespace Mantid // Bins extents and meta data for(size_t i = 0;i < 4; ++i) { - boost::shared_ptr<const Geometry::IMDDimension> inputDim = inputWS->getDimension(i); + boost::shared_ptr<const Geometry::IMDDimension> inputDim = inputWorkspace.getDimension(i); Geometry::MDHistoDimensionBuilder builder; builder.setName(inputDim->getName()); builder.setId(inputDim->getDimensionId()); @@ -184,7 +214,7 @@ namespace Mantid } // Run information - outputWS->copyExperimentInfos(*inputWS); + outputWS->copyExperimentInfos(inputWorkspace); // Set sensible defaults for splitting behaviour BoxController_sptr bc = outputWS->getBoxController(); bc->setSplitInto(3); @@ -192,13 +222,13 @@ namespace Mantid outputWS->initialize(); outputWS->splitBox(); - auto inputIter = inputWS->createIterator(); + auto inputIter = inputWorkspace.createIterator(); size_t resultValueIndex(0); const float errorSq = 0.0; do { const size_t numEvents = inputIter->getNumEvents(); - const float signal = static_cast<float>(values->getCalculated(resultValueIndex)); + const float signal = static_cast<float>(values.getCalculated(resultValueIndex)); for(size_t i = 0; i < numEvents; ++i) { coord_t centers[4] = { inputIter->getInnerPosition(i,0), inputIter->getInnerPosition(i,1), @@ -235,6 +265,44 @@ namespace Mantid return outputWS; } + /** + * Create an output histo workspace filled with data simulated with the fitting function. + * @param baseName :: The base name for the workspace + * @param function :: The function used for the calculation + * @param inputWorkspace :: The input workspace + * @param outputWorkspacePropertyName :: The property name + */ + boost::shared_ptr<API::Workspace> FitMD::createHistoOutputWorkspace(const std::string& baseName, + API::IFunction_sptr function, + API::IMDHistoWorkspace_const_sptr inputWorkspace, + const std::string& outputWorkspacePropertyName) + { + // have to cast const away to be able to pass the workspace to the algorithm + API::IMDHistoWorkspace_sptr nonConstInputWS = boost::const_pointer_cast<API::IMDHistoWorkspace,const API::IMDHistoWorkspace>( inputWorkspace ); + // evaluate the function on the input workspace + auto alg = API::AlgorithmFactory::Instance().create("EvaluateMDFunction",-1); + alg->setChild( true ); + alg->setRethrows( true ); + alg->initialize(); + alg->setProperty( "Function", function ); + alg->setProperty( "InputWorkspace", nonConstInputWS ); + alg->setProperty( "OutputWorkspace", "__FitMD_createHistoOutputWorkspace_outputWorkspace" ); + alg->execute(); + + // get the result + API::IMDHistoWorkspace_sptr outputWorkspace = alg->getProperty( "OutputWorkspace" ); + // Store it + if ( !outputWorkspacePropertyName.empty() ) + { + declareProperty(new API::WorkspaceProperty<API::IMDHistoWorkspace>(outputWorkspacePropertyName,"",Direction::Output), + "Name of the output Workspace holding resulting simulated spectrum"); + m_manager->setPropertyValue(outputWorkspacePropertyName,baseName+"Workspace"); + m_manager->setProperty(outputWorkspacePropertyName,outputWorkspace); + } + + return outputWorkspace; + } + /** * Set all parameters */ diff --git a/Code/Mantid/Framework/MDEvents/test/FitMDTest.h b/Code/Mantid/Framework/MDEvents/test/FitMDTest.h index 5f15aeae0d799865307c870ab1caee57fbe60941..300fdf2bd4bec3a88fc69d13a67e768decbfecc5 100644 --- a/Code/Mantid/Framework/MDEvents/test/FitMDTest.h +++ b/Code/Mantid/Framework/MDEvents/test/FitMDTest.h @@ -9,6 +9,7 @@ #include "MantidAPI/FrameworkManager.h" #include "MantidAPI/IMDIterator.h" #include "MantidAPI/ITableWorkspace.h" +#include "MantidAPI/IMDHistoWorkspace.h" #include "MantidMDEvents/UserFunctionMD.h" #include <sstream> @@ -212,10 +213,74 @@ public: TS_ASSERT_EQUALS(params->Double(2,2), 0.0); API::AnalysisDataService::Instance().clear(); - //--------------------------------------------------// } + void test_output_histo_workspace() + { + auto inputWS = createHistoWorkspace(3,4, "name=UserFunctionMD,Formula=10 + y + (2 + 0.1*y) * x"); + + auto fit = API::AlgorithmManager::Instance().create("Fit"); + fit->initialize(); + + fit->setProperty("Function","name=UserFunctionMD,Formula=h + y + (s + 0.1*y) * x, h = 0, s = 0"); + fit->setProperty("InputWorkspace",inputWS); + fit->setPropertyValue("Output","out"); + fit->execute(); + + IMDHistoWorkspace_sptr outputWS = AnalysisDataService::Instance().retrieveWS<IMDHistoWorkspace>( "out_Workspace" ); + TS_ASSERT( outputWS ); + if ( !outputWS ) return; + + TS_ASSERT_EQUALS( inputWS->getNPoints(), outputWS->getNPoints() ); + + uint64_t n = outputWS->getNPoints(); + coord_t invVolume = inputWS->getInverseVolume(); + for( uint64_t i = 0; i < n; ++i ) + { + TS_ASSERT_DELTA( outputWS->signalAt(i) / inputWS->signalAt(i) / invVolume, 1.0, 0.1 ); + } + + AnalysisDataService::Instance().clear(); + } + + // ---------------------------------------------------------- // + IMDHistoWorkspace_sptr createHistoWorkspace(size_t nx, size_t ny, const std::string& function) + { + + std::vector<double> values( nx * ny, 1.0 ); + std::vector<int> dims(2); + dims[0] = static_cast<int>(nx); + dims[1] = static_cast<int>(ny); + + auto alg = AlgorithmManager::Instance().create("CreateMDHistoWorkspace"); + alg->initialize(); + alg->setProperty("SignalInput", values); + alg->setProperty("ErrorInput", values); + alg->setProperty("Dimensionality", 2); + alg->setProperty("NumberOfBins", dims); + alg->setPropertyValue("Extents", "-1,1,-1,1"); + alg->setPropertyValue("Names", "A,B"); + alg->setPropertyValue("Units", "U,U"); + alg->setPropertyValue("OutputWorkspace", "out"); + alg->execute(); + TS_ASSERT( alg->isExecuted() ); + + IMDHistoWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<IMDHistoWorkspace>("out"); + + alg = AlgorithmManager::Instance().create("EvaluateMDFunction"); + alg->initialize(); + alg->setProperty("InputWorkspace", ws); + alg->setPropertyValue("Function",function); + alg->setPropertyValue("OutputWorkspace", "out"); + alg->execute(); + + ws = AnalysisDataService::Instance().retrieveWS<IMDHistoWorkspace>("out"); + + AnalysisDataService::Instance().remove("out"); + return ws; + } + }; diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportExperimentLog.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportExperimentLog.py index f618c0848a3cf6387d7ba506bdb5bc0aee597f5a..c5ba13a1e7fcd12554de9b4a6ed5fc3f1b42d993 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportExperimentLog.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportExperimentLog.py @@ -242,7 +242,10 @@ class ExportExperimentLog(PythonAlgorithm): logname = self._sampleLogNames[il] optype = self._sampleLogOperations[il] key = logname + "-" + optype - value = logvaluedict[key] + if key in logvaluedict.keys(): + value = logvaluedict[key] + elif logname in logvaluedict.keys(): + value = logvaluedict[logname] wbuf += "%s%s" % (str(value), self._valuesep) wbuf = wbuf[0:-1] diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PDDetermineCharacterizations.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PDDetermineCharacterizations.py index bd271db0e2fbf20886786620c560cf3930769783..9bb2ba9ed9a7b3a11ea5ae22967a2960e353317e 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PDDetermineCharacterizations.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PDDetermineCharacterizations.py @@ -143,11 +143,14 @@ class PDDetermineCharacterizations(PythonAlgorithm): # Convert comma-delimited list to array, else return the original # value. if type("") == type(val): - try: - val = [float(x) for x in val.split(',')] - except ValueError, err: - self.log().error("Error to parse key = %s value = %s. " % (str(key), str(val))) - raise NotImplementedError(str(err)) + if (len(val)==0) and (key in DEF_INFO.keys()): + val = DEF_INFO[key] + else: + try: + val = [float(x) for x in val.split(',')] + except ValueError, err: + self.log().error("Error to parse key: '%s' value = '%s'. " % (str(key), str(val))) + raise NotImplementedError(str(err)) try: prop_man[key] = val diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiMerge.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiMerge.py index 46eafcbd488656fa4db2162d551d58697583a2a5..612bd8ee0d8c9ea383b7917d3b700a5668c6fc48 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiMerge.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiMerge.py @@ -5,8 +5,12 @@ from mantid.api import * import numpy as np class PoldiMerge(PythonAlgorithm): - comparedPropertyNames = ["TablePositionX", "TablePositionY", "TablePositionZ", "ChopperSpeed"] + comparedPropertyNames = ["TablePositionX", "TablePositionY", "TablePositionZ"] + comparedInstrumentParameters = [("detector", "two_theta"), + ("chopper", "t0"), + ("chopper", "t0_const")] outputWorkspaceName = None + checkInstruments = True def category(self): return "SINQ\\Poldi" @@ -27,38 +31,37 @@ class PoldiMerge(PythonAlgorithm): direction=Direction.Output), doc="Workspace where all counts from the list workspaces have been added") + self.declareProperty("CheckInstruments", True, "If checked, only workspaces with equal instrument parameters are merged. Do not disable without a very good reason.") + def PyExec(self): + self.checkInstruments = self.getProperty("CheckInstruments").value + workspaceNames = self.getProperty("WorkspaceNames").value self.outputWorkspaceName = self.getProperty("OutputWorkspace").valueAsStr self.log().information("Workspaces to merge: %i" % (len(workspaceNames))) - if False in [AnalysisDataService.doesExist(x) for x in workspaceNames]: - raise KeyError("Not all strings in the input list are valid workspace names.") - - workspaces = [AnalysisDataService.retrieve(x) for x in workspaceNames] + workspaces = [] - # Create a target workspace for the summation. It inherits the log of - # the first workspace used in the summation. - output = WorkspaceFactory.create(workspaces[0]) + for wsName in workspaceNames: + if not AnalysisDataService.doesExist(wsName): + raise KeyError("Not all strings in the input list are valid workspace names.") - xdata = workspaces[0].dataX(0) - ydata = np.zeros(len(xdata)) + ws = AnalysisDataService.retrieve(wsName) + workspaces += self.getWorkspacesRecursive(ws) - for h in range(output.getNumberHistograms()): - output.setX(h, xdata) - output.setY(h, ydata) - AnalysisDataService.addOrReplace(self.outputWorkspaceName, output) + workspaceCount = len(workspaces) - while workspaces: - current = workspaces.pop(0) + for i in range(workspaceCount): + currentWorkspace = workspaces[i] + for j in range(i + 1, workspaceCount): + try: + self.canMerge(currentWorkspace, workspaces[j]) + except RuntimeError as error: + self.handleError(error) - try: - if self.canMerge(output, current): - output += current - except RuntimeError as error: - self.handleError(error) + output = MergeRuns(workspaceNames) self.setProperty("OutputWorkspace", output) @@ -69,7 +72,10 @@ class PoldiMerge(PythonAlgorithm): leftRun = leftWorkspace.getRun() rightRun = rightWorkspace.getRun() - return self.propertiesMatch(leftRun, rightRun) + if not self.chopperSpeedsMatch(leftRun, rightRun): + raise RuntimeError("Chopper speeds do not match (" + '&'.join((leftWorkspace.getName(), rightWorkspace.getName())) + ")") + + return self.propertiesMatch(leftRun, rightRun) and self.instrumentsMatch(leftWorkspace, rightWorkspace) def timingsMatch(self, leftXData, rightXData): leftDeltaX = leftXData[1] - leftXData[0] @@ -77,9 +83,43 @@ class PoldiMerge(PythonAlgorithm): return abs(leftDeltaX - rightDeltaX) < 1e-4 and abs(rightXData[0] - leftXData[0]) < 1e-4 + def chopperSpeedsMatch(self, leftRun, rightRun): + chopperSpeedLeft = self.makePlausibleChopperSpeed(self.getPropertyValue(leftRun.getProperty("ChopperSpeed"))) + chopperSpeedRight = self.makePlausibleChopperSpeed(self.getPropertyValue(rightRun.getProperty("ChopperSpeed"))) + + return abs(chopperSpeedLeft - chopperSpeedRight) < 1e-4 + + def makePlausibleChopperSpeed(self, chopperSpeed): + # This is related to ticket #10090, where a new field in new data is used + # when that ticket is finished, new data files will not need this + # cleanup method anymore. + return np.floor((chopperSpeed + 250.0) / 500.0) * 500.0; + + def instrumentsMatch(self, leftWorkspace, rightWorkspace): + leftInstrument = leftWorkspace.getInstrument() + rightInstrument = rightWorkspace.getInstrument() + + return (not self.checkInstruments) or self.instrumentParametersMatch(leftInstrument, rightInstrument) + + def instrumentParametersMatch(self, leftInstrument, rightInstrument): + if not (leftInstrument.getDetector(0).getPos() == rightInstrument.getDetector(0).getPos()): + raise RuntimeError("Detector positions are not equal") + + for parameterTuple in self.comparedInstrumentParameters: + leftValue = self.getParameterValue(leftInstrument, parameterTuple) + rightValue = self.getParameterValue(rightInstrument, parameterTuple) + + if abs(leftValue - rightValue) > 1e-12: + raise RuntimeError("Instrument parameter '%s'/'%s' does not match" % parameterTuple) + + return True; + + def getParameterValue(self, instrument, parameterTuple): + return instrument.getComponentByName(parameterTuple[0]).getNumberParameter(parameterTuple[1])[0] + def propertiesMatch(self, leftRun, rightRun): for propertyName in self.comparedPropertyNames: - if abs(self.getPropertyValue(leftRun.getProperty(propertyName)) - self.getPropertyValue(rightRun.getProperty(propertyName))) > 1e-4: + if abs(self.getPropertyValue(leftRun.getProperty(propertyName)) - self.getPropertyValue(rightRun.getProperty(propertyName))) > 5e-3: raise RuntimeError("Property '%s' does not match" % (propertyName)) return True @@ -96,4 +136,18 @@ class PoldiMerge(PythonAlgorithm): raise RuntimeError("Workspaces can not be merged. %s. Aborting." % (str(error))) + def getWorkspacesRecursive(self, workspace): + returnList = [] + if isinstance(workspace, WorkspaceGroup): + for i in range(workspace.getNumberOfEntries()): + returnList += self.getWorkspacesRecursive(workspace.getItem(i)) + + elif isinstance(workspace, MatrixWorkspace): + returnList.append(workspace) + + else: + raise RuntimeError("Can only merge MatrixWorkspaces, this is " + type(workspace)) + + return returnList + AlgorithmFactory.subscribe(PoldiMerge) diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefLReduction.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefLReduction.py index 028b3815f7f1df56526c4fed2837be7132095a8c..9c173170f685f0d5784f2d609a260d8e0de62848 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefLReduction.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefLReduction.py @@ -176,7 +176,7 @@ class RefLReduction(PythonAlgorithm): print '-> retrieving general informations' data_central_pixel = wks_utility.getCentralPixel(ws_event_data, dataPeakRange, - is_nexus_detector_rotated) + is_nexus_detector_rotated_flag) # get the distance moderator-detector and sample-detector [dMD, dSD] = wks_utility.getDistances(ws_event_data) # get theta diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Symmetrise.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Symmetrise.py index 6787d7e1cdb10a2f6c84c536191994b87ec118ea..c8a761f780ef09436136c2fd2ab2080196d39cda 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Symmetrise.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Symmetrise.py @@ -60,15 +60,11 @@ class Symmetrise(PythonAlgorithm): sample_x = mtd[self._sample].readX(0) - if self._x_max > sample_x[len(sample_x) - 1]: - raise ValueError('XMax value (%f) is greater than largest X value (%f)' % - (self._x_max, sample_x[len(sample_x) - 1])) - - if self._x_min < sample_x[0]: - raise ValueError('XMin value (%f) is less than smallest X value (%f)' % - (self._x_min, sample_x[0])) - - self._calculate_array_points(sample_x, sample_array_len) + # Get slice bounds of array + try: + self._calculate_array_points(sample_x, sample_array_len) + except Exception as e: + raise RuntimeError('Failed to calculate array slice boundaries: %s' % e.message) max_sample_index = sample_array_len - 1 centre_range_len = self._positive_min_index + self._negative_min_index @@ -103,7 +99,6 @@ class Symmetrise(PythonAlgorithm): # Copy logs and properties from sample workspace CopyLogs(InputWorkspace=self._sample, OutputWorkspace=temp_ws_name) CopyInstrumentParameters(InputWorkspace=self._sample, OutputWorkspace=temp_ws_name) - # CopySample(InputWorkspace=self._sample, OutputWorkspace=temp_ws_name) # For each spectrum copy positive values to the negative output_spectrum_index = 0 @@ -206,6 +201,15 @@ class Symmetrise(PythonAlgorithm): issues['XMin'] = 'XMin must be less than XMax' issues['XMax'] = 'XMax must be greater than XMin' + # Valudate X range against workspace X range + sample_x = mtd[input_workspace_name].readX(0) + + if x_max > sample_x[len(sample_x) - 1]: + issues['XMax'] = 'XMax value (%f) is greater than largest X value (%f)' % (self._x_max, sample_x[len(sample_x) - 1]) + + if -x_min < sample_x[0]: + issues['XMin'] = 'Negative XMin value (%f) is less than smallest X value (%f)' % (-x_min, sample_x[0]) + return issues diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectResolution.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectResolution.py index 7836213dd39eba59764935921ad9c65288e0b505..d521ad91d69e5e5cc091c27513f2a978d5417b35 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectResolution.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectResolution.py @@ -52,26 +52,16 @@ class IndirectResolution(DataProcessorAlgorithm): StartTime('IndirectResolution') self._setup() - # TODO: Replace with InelasticIndirectReduction algorithm - reducer = inelastic_indirect_reducer.IndirectReducer() - reducer.set_instrument_name(self._instrument) - reducer.set_detector_range(int(self._detector_range[0]) - 1, int(self._detector_range[1]) - 1) - for in_file in self._input_files: - reducer.append_data_file(in_file) - parfile = config['instrumentDefinition.directory'] - parfile += self._instrument + "_" + self._analyser + "_" + self._reflection + "_Parameters.xml" - reducer.set_parameter_file(parfile) - reducer.set_grouping_policy('All') - reducer.set_sum_files(True) - - try: - reducer.reduce() - except Exception, ex: - logger.error('IndirectResolution failed with error: ' + str(ex)) - EndTime('IndirectResolution') - return - - icon_ws = reducer.get_result_workspaces()[0] + InelasticIndirectReduction(Instrument=self._instrument, + Analyser=self._analyser, + Reflection=self._reflection, + Grouping='All', + SumFiles=True, + InputFiles=self._input_files, + DetectorRange=self._detector_range, + OutputWorkspaceGroup='__icon_ws_group') + + icon_ws = mtd['__icon_ws_group'].getItem(0).getName() if self._out_ws == "": self._out_ws = getWSprefix(icon_ws) + 'res' diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MSGDiffractionReduction.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MSGDiffractionReduction.py index f85252698cebebb6c911ccc694cfa5d8c588cbaf..ed75174e90ee1c387ea4673b7263dfe97d86bd30 100644 --- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MSGDiffractionReduction.py +++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MSGDiffractionReduction.py @@ -19,6 +19,9 @@ class MSGDiffractionReduction(PythonAlgorithm): self.declareProperty(name='SumFiles', defaultValue=False, doc='Enabled to sum spectra from each input file.') + self.declareProperty(name='IndividualGrouping', defaultValue=False, + doc='Do not group results into a single spectra.') + self.declareProperty(name='Instrument', defaultValue='IRIS', validator=StringListValidator(['IRIS', 'OSIRIS', 'TOSCA', 'VESUVIO']), doc='Instrument used for run') @@ -77,6 +80,7 @@ class MSGDiffractionReduction(PythonAlgorithm): input_files = self.getProperty('InputFiles').value sum_files = self.getProperty('SumFiles').value + individual_grouping = self.getProperty('IndividualGrouping').value instrument_name = self.getPropertyValue('Instrument') mode = self.getPropertyValue('Mode') detector_range = self.getProperty('DetectorRange').value @@ -93,6 +97,9 @@ class MSGDiffractionReduction(PythonAlgorithm): reducer.set_sum_files(sum_files) reducer.set_save_formats(save_formats) + if individual_grouping: + reducer.set_grouping_policy('Individual') + for in_file in input_files: reducer.append_data_file(in_file) diff --git a/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/PoldiMergeTest.py b/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/PoldiMergeTest.py index 97fdde8f1946c1119983fedb1edd9445571d6a6a..d139c7d894b10b89e7142ee08ccfdddbace9a967 100644 --- a/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/PoldiMergeTest.py +++ b/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/PoldiMergeTest.py @@ -25,6 +25,8 @@ class PoldiMergeTest(unittest.TestCase): self.badTimingOffset = CreateWorkspace(rightDataBadOffset, ydata, OutputWorkspace="BadTimingOffset") self.badTimingDelta = CreateWorkspace(rightDataBadDelta, ydata, OutputWorkspace="BadTimingDelta") + self.groupGood = GroupWorkspaces(["Base", "GoodTiming"], OutputWorkspace="GoodGroup") + goodProperty = 10.0 badProperty = 20.0 @@ -37,7 +39,7 @@ class PoldiMergeTest(unittest.TestCase): self.goodTimingBadProperties.getRun().addProperty(p, badProperty, True) def __runMerge__(self, workspaceNames): - return PoldiMerge(WorkspaceNames=workspaceNames, OutputWorkspace="PoldiMergeOutput") + return PoldiMerge(WorkspaceNames=workspaceNames, OutputWorkspace="PoldiMergeOutput", CheckInstruments=False) def test_happyCase(self): output = self.__runMerge__("Base,GoodTiming") @@ -56,6 +58,23 @@ class PoldiMergeTest(unittest.TestCase): DeleteWorkspace("PoldiMergeOutput") + def test_workspaceGroup(self): + output = self.__runMerge__("GoodGroup") + + self.assertTrue(isinstance(output, MatrixWorkspace)) + + dataX = output.dataX(0) + self.assertEqual(dataX[0], 0.0) + self.assertEqual(dataX[-1], 3.0) + self.assertEqual(len(dataX), 4) + + dataY = output.dataY(0) + self.assertEqual(dataY[0], 2.0) + self.assertEqual(dataY[1], 2.0) + self.assertEqual(len(dataY), 4) + + DeleteWorkspace("PoldiMergeOutput") + def test_timingDelta(self): self.assertRaises(RuntimeError, lambda: self.__runMerge__("Base,BadTimingDelta")) self.assertFalse(AnalysisDataService.doesExist("PoldiMergeOutput")) diff --git a/Code/Mantid/MantidPlot/src/ApplicationWindow.cpp b/Code/Mantid/MantidPlot/src/ApplicationWindow.cpp index 9bef2715e1ac9b6f4ffbb3aa064879244f01653c..9d8018dfc87a1d08c47720560475ed218b60222f 100644 --- a/Code/Mantid/MantidPlot/src/ApplicationWindow.cpp +++ b/Code/Mantid/MantidPlot/src/ApplicationWindow.cpp @@ -551,7 +551,8 @@ void ApplicationWindow::init(bool factorySettings, const QStringList& args) connect(lv, SIGNAL(itemRenamed(Q3ListViewItem *, int, const QString &)), this, SLOT(renameWindow(Q3ListViewItem *, int, const QString &))); - connect(recent, SIGNAL(activated(int)), this, SLOT(openRecentProject(int))); + connect(recentProjectsMenu, SIGNAL(activated(int)), this, SLOT(openRecentProject(int))); + connect(recentFilesMenu, SIGNAL(activated(int)), this, SLOT(openRecentFile(int))); //apply user settings updateAppFonts(); @@ -827,6 +828,7 @@ void ApplicationWindow::initGlobalConstants() confirmClosePlot2D = false; confirmClosePlot3D = false; confirmCloseNotes = false; + d_inform_delete_workspace = true; d_inform_rename_table = false; confirmCloseInstrWindow=false; @@ -1155,6 +1157,7 @@ void ApplicationWindow::insertTranslatedStrings() formatToolBar->setWindowTitle(tr("Format")); fileMenu->changeItem(recentMenuID, tr("&Recent Projects")); + fileMenu->changeItem(recentFilesMenuID, tr("R&ecent Files")); translateActionsStrings(); customMenu(activeWindow()); @@ -1166,8 +1169,9 @@ void ApplicationWindow::initMainMenu() fileMenu->setObjectName("fileMenu"); connect(fileMenu, SIGNAL(aboutToShow()), this, SLOT(fileMenuAboutToShow())); - recent = new QMenu(this); newMenu = new QMenu(this); + recentProjectsMenu = new QMenu(this); + recentFilesMenu = new QMenu(this); newMenu->setObjectName("newMenu"); exportPlotMenu = new QMenu(this); exportPlotMenu->setObjectName("exportPlotMenu"); @@ -3090,6 +3094,11 @@ Table* ApplicationWindow::newTable(const QString& caption, int r, int c) return w; } +bool ApplicationWindow::isDeleteWorkspacePromptEnabled() +{ + return d_inform_delete_workspace; +} + Table* ApplicationWindow::newTable(int r, int c, const QString& name, const QString& legend) { Table* w = new Table(scriptingEnv(), r, c, legend, this, 0); @@ -3502,14 +3511,22 @@ void ApplicationWindow::convertTableToWorkspace() void ApplicationWindow::convertTableToMatrixWorkspace() { Table* t = dynamic_cast<Table*>(activeWindow(TableWindow)); - if (!t) return; - if(auto *mt = dynamic_cast<MantidTable*>(t)) - { - mt = convertTableToTableWorkspace(t); - QHash<QString,QString> params; - params["InputWorkspace"] = QString::fromStdString(mt->getWorkspaceName()); - mantidUI->showAlgorithmDialog(QString("ConvertTableToMatrixWorkspace"),params); - } + if (!t) return; + + // dynamic_cast is successful when converting MantidTable to MatrixWorkspace + auto *mt = dynamic_cast<MantidTable*>(t); + + if (!mt){ + // if dynamic_cast is unsuccessful, create MantidTable from which to create MatrixWorkspace + mt = convertTableToTableWorkspace(t); + } + + if (mt){ + QHash<QString,QString> params; + params["InputWorkspace"] = QString::fromStdString(mt->getWorkspaceName()); + mantidUI->showAlgorithmDialog(QString("ConvertTableToMatrixWorkspace"),params); + } + } /** @@ -4461,9 +4478,30 @@ ApplicationWindow* ApplicationWindow::open(const QString& fn, bool factorySettin return app; } +void ApplicationWindow::openRecentFile(int index) +{ + QString fn = recentFilesMenu->text(index); + int pos = fn.find(" ",0); + fn = fn.right(fn.length()-pos-1); + + QFile f(fn); + if (!f.exists()){ + QMessageBox::critical(this, tr("MantidPlot - File Open Error"),//Mantid + tr("The file: <b> %1 </b> <p>is not there anymore!" + "<p>It will be removed from the list of recent files.").arg(fn)); + + recentFiles.remove(fn); + updateRecentFilesList(); + return; + } + + loadDataFileByName(fn); + saveSettings(); // save new list of recent files +} + void ApplicationWindow::openRecentProject(int index) { - QString fn = recent->text(index); + QString fn = recentProjectsMenu->text(index); int pos = fn.find(" ",0); fn = fn.right(fn.length()-pos-1); @@ -4471,7 +4509,7 @@ void ApplicationWindow::openRecentProject(int index) if (!f.exists()){ QMessageBox::critical(this, tr("MantidPlot - File Open Error"),//Mantid tr("The file: <b> %1 </b> <p>does not exist anymore!" - "<p>It will be removed from the list.").arg(fn)); + "<p>It will be removed from the list of recent projects.").arg(fn)); recentProjects.remove(fn); updateRecentProjectsList(); @@ -4502,6 +4540,7 @@ void ApplicationWindow::openRecentProject(int index) } } + ApplicationWindow* ApplicationWindow::openProject(const QString& fn, bool factorySettings, bool newProject) { ApplicationWindow *app = this; @@ -5039,6 +5078,7 @@ void ApplicationWindow::readSettings() show_windows_policy = (ShowWindowsPolicy)settings.value("/ShowWindowsPolicy", ApplicationWindow::ActiveFolder).toInt(); recentProjects = settings.value("/RecentProjects").toStringList(); + recentFiles = settings.value("/RecentFiles").toStringList(); //Follows an ugly hack added by Ion in order to fix Qt4 porting issues //(only needed on Windows due to a Qt bug?) #ifdef Q_OS_WIN @@ -5049,9 +5089,18 @@ void ApplicationWindow::readSettings() if (s.remove(QRegExp("\\s")).isEmpty()) recentProjects = QStringList(); } + + if (!recentFiles.isEmpty() && recentFiles[0].contains("^e")) + recentFiles = recentFiles[0].split("^e", QString::SkipEmptyParts); + else if (recentFiles.count() == 1){ + QString s = recentFiles[0]; + if (s.remove(QRegExp("\\s")).isEmpty()) + recentFiles = QStringList(); + } #endif updateRecentProjectsList(); + updateRecentFilesList(); changeAppStyle(settings.value("/Style", appStyle).toString()); autoSave = settings.value("/AutoSave", false).toBool(); @@ -5168,6 +5217,7 @@ void ApplicationWindow::readSettings() confirmClosePlot2D = settings.value("/Plot2D", false).toBool(); confirmClosePlot3D = settings.value("/Plot3D", false).toBool(); confirmCloseNotes = settings.value("/Note", false).toBool(); + d_inform_delete_workspace = settings.value("/DeleteWorkspace", true).toBool(); d_inform_rename_table = settings.value("/RenameTable", false).toBool(); confirmCloseInstrWindow=settings.value("/InstrumentWindow", false).toBool(); settings.endGroup(); // Confirmations @@ -5513,6 +5563,7 @@ void ApplicationWindow::saveSettings() settings.setValue("/Language", appLanguage); settings.setValue("/ShowWindowsPolicy", show_windows_policy); settings.setValue("/RecentProjects", recentProjects); + settings.setValue("/RecentFiles", recentFiles); settings.setValue("/Style", appStyle); settings.setValue("/AutoSave", autoSave); settings.setValue("/AutoSaveTime", autoSaveTime); @@ -5589,6 +5640,7 @@ void ApplicationWindow::saveSettings() settings.setValue("/Plot2D", confirmClosePlot2D); settings.setValue("/Plot3D", confirmClosePlot3D); settings.setValue("/Note", confirmCloseNotes); + settings.setValue("/DeleteWorkspace",d_inform_delete_workspace); settings.setValue("/RenameTable", d_inform_rename_table); settings.value("/InstrumentWindow", confirmCloseInstrWindow).toBool(); settings.endGroup(); // Confirmations @@ -6209,7 +6261,7 @@ void ApplicationWindow::savetoNexusFile() savedatainNexusFormat(wsName,fileName.toStdString()); MantidQt::API::AlgorithmInputHistory::Instance().setPreviousDirectory(QFileInfo(fileName).absoluteDir().path()); - + updateRecentFilesList(fileName); } } @@ -6218,18 +6270,26 @@ void ApplicationWindow::loadDataFile() // Ask user for file QString fn = QFileDialog::getOpenFileName( 0, tr("Mantidplot - Open file to load"), AlgorithmInputHistory::Instance().getPreviousDirectory()); if(fn != "") { - QFileInfo fnInfo(fn); - AlgorithmInputHistory::Instance().setPreviousDirectory(fnInfo.absoluteDir().path()); - if( fnInfo.suffix() == "py") - { // We have a python file, just load it into script window - loadScript( fn, true ); - } - else if(mantidUI) - { // Run Load algorithm on file - QHash<QString,QString> params; - params["Filename"] = fn; - mantidUI->showAlgorithmDialog(QString("Load"),params); - } + loadDataFileByName(fn); + } + saveSettings(); // save new list of recent files +} + +void ApplicationWindow::loadDataFileByName(QString fn) +{ + QFileInfo fnInfo(fn); + AlgorithmInputHistory::Instance().setPreviousDirectory(fnInfo.absoluteDir().path()); + if( fnInfo.suffix() == "py") + { + // We have a python file, just load it into script window + loadScript( fn, true ); + } + else if(mantidUI) + { + // Run Load algorithm on file + QHash<QString,QString> params; + params["Filename"] = fn; + mantidUI->showAlgorithmDialog(QString("Load"),params); } } @@ -9280,7 +9340,9 @@ void ApplicationWindow::fileMenuAboutToShow() openMenu->addAction(actionOpenProj); openMenu->addAction(actionLoadFile); - recentMenuID = fileMenu->insertItem(tr("&Recent Projects"), recent); + recentMenuID = fileMenu->insertItem(tr("&Recent Projects"), recentProjectsMenu); + + recentFilesMenuID = fileMenu->insertItem(tr("R&ecent Files"), recentFilesMenu); fileMenu->insertSeparator(); fileMenu->addAction(actionManageDirs); @@ -14438,10 +14500,24 @@ void ApplicationWindow::updateRecentProjectsList() while ((int)recentProjects.size() > MaxRecentProjects) recentProjects.pop_back(); - recent->clear(); + recentProjectsMenu->clear(); for (int i = 0; i<(int)recentProjects.size(); i++ ) - recent->insertItem("&" + QString::number(i+1) + " " + recentProjects[i]); + recentProjectsMenu->insertItem("&" + QString::number(i+1) + " " + recentProjects[i]); +} + +void ApplicationWindow::updateRecentFilesList(QString fname) +{ + if (!fname.isEmpty()) { + recentFiles.remove(fname); + recentFiles.push_front(fname); + } + while ((int)recentFiles.size() > MaxRecentFiles) + recentFiles.pop_back(); + + recentFilesMenu->clear(); + for (int i = 0; i<(int)recentFiles.size(); i++ ) + recentFilesMenu->insertItem("&" + QString::number(i+1) + " " + recentFiles[i]); } void ApplicationWindow::translateCurveHor() diff --git a/Code/Mantid/MantidPlot/src/ApplicationWindow.h b/Code/Mantid/MantidPlot/src/ApplicationWindow.h index 5de461c6140a469a75aa48ccf0b8250318c709a8..11aa20883421d39f1dab34992781ce38d6c5147f 100644 --- a/Code/Mantid/MantidPlot/src/ApplicationWindow.h +++ b/Code/Mantid/MantidPlot/src/ApplicationWindow.h @@ -199,6 +199,9 @@ public: int matrixUndoStackSize(){return d_matrix_undo_stack_size;}; void setMatrixUndoStackSize(int size); + + // Check if delete workspace prompt is enabled + bool isDeleteWorkspacePromptEnabled(); QString endOfLine(); bool autoUpdateTableValues(){return d_auto_update_table_values;}; @@ -213,8 +216,13 @@ public slots: ApplicationWindow* open(const QString& fn, bool factorySettings = false, bool newProject = true); ApplicationWindow* openProject(const QString& fn, bool factorySettings = false, bool newProject = true); ApplicationWindow* importOPJ(const QString& fn, bool factorySettings = false, bool newProject = true); - /// Load mantid data files using generic load algorithm + /// Load mantid data files using generic load algorithm, opening user dialog void loadDataFile(); + /// Load mantid data files (generic load algorithm) + void loadDataFileByName(QString fn); + /// Open from the list of recent files + void openRecentFile(int index); + /** * \brief Create a new project from a data file. * @@ -408,6 +416,7 @@ public slots: //@{ //! Creates an empty table Table* newTable(); + //! Used when loading a table from a project file Table* newTable(const QString& caption,int r, int c); Table* newTable(int r, int c, const QString& name = QString(),const QString& legend = QString()); @@ -619,6 +628,7 @@ public slots: Graph3D* openSurfacePlot(ApplicationWindow* app, const QStringList &lst); Graph* openGraph(ApplicationWindow* app, MultiLayer *plot, const QStringList &list); void openRecentProject(int index); + //@} //! \name Table Tools @@ -852,8 +862,12 @@ public slots: void custom3DGrids(int grids); //@} + //! Updates the recent projects list and menu (but doesn't insert anything) void updateRecentProjectsList(); + //! Inserts file name in the list of recent files (if fname not empty) and updates the "recent files" menu + void updateRecentFilesList(QString fname=""); + //! connected to the done(bool) signal of the http object //void receivedVersionFile(bool error); //! called when the user presses the actionCheckUpdates @@ -1216,7 +1230,7 @@ public: QPoint d_script_win_pos; QSize d_script_win_size; bool d_script_win_arrow; - bool d_inform_rename_table; + bool d_inform_rename_table, d_inform_delete_workspace; QString d_export_col_separator; bool d_export_col_names, d_export_table_selection, d_export_col_comment; @@ -1279,6 +1293,7 @@ public: //! Describes which windows are shown when the folder becomes the current folder ShowWindowsPolicy show_windows_policy; enum {MaxRecentProjects = 10}; + enum {MaxRecentFiles = MaxRecentProjects}; //! File version code used when opening project files (= maj * 100 + min * 10 + patch) int d_file_version; @@ -1327,9 +1342,9 @@ public: QColor tableBkgdColor, tableTextColor, tableHeaderColor; QString projectname, columnSeparator, helpFilePath, appLanguage; QString configFilePath, fitPluginsPath, fitModelsPath, asciiDirPath, imagesDirPath, scriptsDirPath; - int ignoredLines, savingTimerId, plot3DResolution, recentMenuID; + int ignoredLines, savingTimerId, plot3DResolution, recentMenuID, recentFilesMenuID; bool renameColumns, strip_spaces, simplify_spaces; - QStringList recentProjects; + QStringList recentProjects, recentFiles; bool saved, showPlot3DProjection, showPlot3DLegend, orthogonal3DPlots, autoscale3DPlots; QStringList plot3DColors, locales; QStringList functions; //user-defined functions; @@ -1413,7 +1428,8 @@ private: QWidget* catalogSearch; - QMenu *windowsMenu, *foldersMenu, *view, *graph, *fileMenu, *format, *edit, *recent, *interfaceMenu; + QMenu *windowsMenu, *foldersMenu, *view, *graph, *fileMenu, *format, *edit; + QMenu *recentProjectsMenu, *recentFilesMenu, *interfaceMenu; QMenu *help, *plot2DMenu, *analysisMenu, *multiPeakMenu, *icat; QMenu *matrixMenu, *plot3DMenu, *plotDataMenu, *tablesDepend, *scriptingMenu; diff --git a/Code/Mantid/MantidPlot/src/ConfigDialog.cpp b/Code/Mantid/MantidPlot/src/ConfigDialog.cpp index 1743a0b12c8e1068111a990fb59745a70a704b8f..f0ff62bef193d89f1b467947acc8324695ffb82d 100644 --- a/Code/Mantid/MantidPlot/src/ConfigDialog.cpp +++ b/Code/Mantid/MantidPlot/src/ConfigDialog.cpp @@ -1656,11 +1656,13 @@ void ConfigDialog::initConfirmationsPage() boxPromptRenameTables = new QCheckBox(); boxPromptRenameTables->setChecked(app->d_inform_rename_table); - + boxPromptDeleteWorkspace = new QCheckBox(); + boxPromptDeleteWorkspace->setChecked(app->d_inform_delete_workspace); QVBoxLayout * confirmPageLayout = new QVBoxLayout( confirm ); confirmPageLayout->addWidget(groupBoxConfirm); + confirmPageLayout->addWidget(boxPromptDeleteWorkspace); confirmPageLayout->addWidget(boxPromptRenameTables); confirmPageLayout->addStretch(); } @@ -1819,6 +1821,7 @@ void ConfigDialog::languageChange() buttonNumbersFont->setText( tr( "Axes &Numbers" ) ); buttonLegendFont->setText( tr( "&Legend" ) ); buttonTitleFont->setText( tr( "T&itle" ) ); + boxPromptDeleteWorkspace->setText( tr( "Prompt when deleting Workspaces" ) ); boxPromptRenameTables->setText( tr( "Prompt on &renaming tables when appending projects" ) ); //application page appTabWidget->setTabText(appTabWidget->indexOf(application), tr("Application")); @@ -2124,6 +2127,7 @@ void ConfigDialog::apply() QApplication::restoreOverrideCursor(); } // general page: confirmations tab + app->d_inform_delete_workspace = boxPromptDeleteWorkspace->isChecked(); app->d_inform_rename_table = boxPromptRenameTables->isChecked(); app->confirmCloseFolder = boxFolders->isChecked(); app->updateConfirmOptions(boxTables->isChecked(), boxMatrices->isChecked(), diff --git a/Code/Mantid/MantidPlot/src/ConfigDialog.h b/Code/Mantid/MantidPlot/src/ConfigDialog.h index c066b146b7dc79b2ec0d4c15d4021f4e0dbea302..4bad67ddbe9e6464ebf5b1e9b64fa52f7c7ee814 100644 --- a/Code/Mantid/MantidPlot/src/ConfigDialog.h +++ b/Code/Mantid/MantidPlot/src/ConfigDialog.h @@ -234,7 +234,7 @@ private: QLabel *lblScriptingLanguage, *lblInitWindow; QComboBox *boxScriptingLanguage, *boxInitWindow; QCheckBox *boxAntialiasing, *boxAutoscale3DPlots, *boxTableComments, *boxThousandsSeparator; - QCheckBox *boxPromptRenameTables, *boxBackupProject, *boxLabelsEditing; + QCheckBox *boxPromptRenameTables, *boxBackupProject, *boxLabelsEditing, *boxPromptDeleteWorkspace; QWidget *fileLocationsPage; QLabel *lblTranslationsPath, *lblHelpPath, *lblUndoStackSize, *lblEndOfLine; QLineEdit *translationsPathLine, *helpPathLine; diff --git a/Code/Mantid/MantidPlot/src/LabelTool.cpp b/Code/Mantid/MantidPlot/src/LabelTool.cpp index 06db0963ebc01595a64c8bba15206a52d8cf5340..48f7a4b2621c1b897af55de78386635b6c86809c 100644 --- a/Code/Mantid/MantidPlot/src/LabelTool.cpp +++ b/Code/Mantid/MantidPlot/src/LabelTool.cpp @@ -290,7 +290,9 @@ void LabelTool::blankRegionClicked() foreach(QString wsName, workspaceNames()) { - workspaces->addAction(new QAction(tr(wsName), this)); + QAction * qa = new QAction(tr(wsName),this); + workspaces->addAction(qa); + connect(qa,SIGNAL(triggered()),this,SLOT(insertLegend())); } // For viewing log values. @@ -298,7 +300,9 @@ void LabelTool::blankRegionClicked() foreach(QString logProperty, logValues()) { - logVals->addAction(new QAction(tr(logProperty), this)); + QAction * qa = new QAction(tr(logProperty),this); + logVals->addAction(qa); + connect(qa,SIGNAL(triggered()),this,SLOT(insertLegend())); } clickMenu->exec(QCursor::pos()); @@ -330,42 +334,41 @@ void LabelTool::dataPointClicked() // For workspace information. QMenu * info = clickMenu->addMenu(tr("More info...")); - QMenu * workspaces = info->addMenu(tr("Workspace")); - - QAction * wsNameToDisplay = new QAction((tr(m_curveWsName)), this); - workspaces->addAction(wsNameToDisplay); - - - /* - - // Before final testing, make sure that when you select a datapoint, its respective Ws name is displayed + QMenu * workspaces = info->addMenu(tr("Workspaces")); foreach(QString wsName, workspaceNames()) { - QAction * wsNameToDisplay = new QAction((tr(wsName)), this); - workspaces->addAction(wsNameToDisplay); + QAction * qa = new QAction(tr(wsName),this); + workspaces->addAction(qa); + connect(qa,SIGNAL(triggered()),this,SLOT(insertLegend())); } - - // For displaying workspace title. - Mantid::API::Workspace *name; - std::string wsTitle = name->getTitle(); - - QMenu * workspaceTitle = workspaces->addMenu(tr(wsTitle), this); - */ + // For viewing log values. + QMenu * logVals = info->addMenu(tr("Log values")); + foreach(QString logProperty, logValues()) + { + QAction * qa = new QAction(tr(logProperty),this); + logVals->addAction(qa); + connect(qa,SIGNAL(triggered()),this,SLOT(insertLegend())); + } - // For viewing log values. - QMenu * logVals = info->addMenu(tr("Log values")); - - foreach(QString logProperty, logValues()) - { - logVals->addAction(new QAction(tr(logProperty), this)); - } - clickMenu->exec(QCursor::pos()); } +/// Creates a label with size equal to the axisFont size +void LabelTool::insertLegend() +{ + QAction *action = qobject_cast<QAction *>(sender()); + if (action) + { + LegendWidget *label = new LegendWidget(d_graph->plotWidget()); + label->setOriginCoord(m_xPos,m_yPos); + label->setFont(d_graph->axisFont(0)); + label->setText(action->text()); + } +} + /// Displays a dialog box to input the contents of a label, then creates the label. void LabelTool::insertTextBox() { diff --git a/Code/Mantid/MantidPlot/src/LabelTool.h b/Code/Mantid/MantidPlot/src/LabelTool.h index 1ecc4848944f5299c2214a35b677be989a4b84a9..2a6134e969bc6a5a0205154f1f4bbddc054e16b6 100644 --- a/Code/Mantid/MantidPlot/src/LabelTool.h +++ b/Code/Mantid/MantidPlot/src/LabelTool.h @@ -92,7 +92,8 @@ private slots: void xAxisClicked(const QwtPolygon &); void yAxisClicked(const QwtPolygon &); - void insertTextBox(); + void insertLegend(); + void insertTextBox(); void insertXCoord(); void insertYCoord(); void insertDataCoord(); diff --git a/Code/Mantid/MantidPlot/src/Mantid/MantidDock.cpp b/Code/Mantid/MantidPlot/src/Mantid/MantidDock.cpp index 50e3fb85f3d61f7e0c881035e06be942bbb03852..c18c040073f2ff2422ffda667be53b49dc5dade5 100644 --- a/Code/Mantid/MantidPlot/src/Mantid/MantidDock.cpp +++ b/Code/Mantid/MantidPlot/src/Mantid/MantidDock.cpp @@ -45,6 +45,8 @@ MantidDockWidget::MantidDockWidget(MantidUI *mui, ApplicationWindow *parent) : setMinimumWidth(200); parent->addDockWidget( Qt::RightDockWidgetArea, this ); + m_appParent = parent; + QFrame *f = new QFrame(this); setWidget(f); @@ -878,26 +880,53 @@ deleteWorkspaces void MantidDockWidget::deleteWorkspaces() { QList<QTreeWidgetItem*> items = m_tree->selectedItems(); - if(items.empty()) + MantidMatrix* m = dynamic_cast<MantidMatrix*>(m_mantidUI->appWindow()->activeWindow()); + + bool deleteExplorer = false; + bool deleteActive = false; + + if((m_deleteButton->hasFocus() || m_tree->hasFocus()) && !items.empty()) { - MantidMatrix* m = dynamic_cast<MantidMatrix*>(m_mantidUI->appWindow()->activeWindow()); - if (!m || !m->isA("MantidMatrix")) return; - if(m->workspaceName().isEmpty()) return; + deleteExplorer = true; + } + if((m && m->isA("MantidMatrix")) && (!m->workspaceName().isEmpty() && m_ads.doesExist(m->workspaceName().toStdString()))) + { + deleteActive = true; + } - if(m_ads.doesExist(m->workspaceName().toStdString())) - { - m_mantidUI->deleteWorkspace(m->workspaceName()); + if(deleteActive || deleteExplorer) + { + QMessageBox::StandardButton reply; + + if(m_appParent->isDeleteWorkspacePromptEnabled()) + { + reply = QMessageBox::question(this, "Delete Workspaces", "Are you sure you want to delete the selected Workspaces?\n\nThis prompt can be disabled from:\nPreferences->General->Confirmations", + QMessageBox::Yes|QMessageBox::No); + } + else + { + reply = QMessageBox::Yes; + } + + if (reply == QMessageBox::Yes) + { + if(deleteExplorer) + { + //loop through multiple items selected from the mantid tree + QList<QTreeWidgetItem*>::iterator itr=items.begin(); + for (itr = items.begin(); itr != items.end(); ++itr) + { + //Sometimes we try to delete a workspace that's already been deleted. + if(m_ads.doesExist((*itr)->text(0).toStdString())) + m_mantidUI->deleteWorkspace((*itr)->text(0)); + }//end of for loop for selected items + } + else if(deleteActive) + { + m_mantidUI->deleteWorkspace(m->workspaceName()); + } } - return; } - //loop through multiple items selected from the mantid tree - QList<QTreeWidgetItem*>::iterator itr=items.begin(); - for (itr = items.begin(); itr != items.end(); ++itr) - { - //Sometimes we try to delete a workspace that's already been deleted. - if(m_ads.doesExist((*itr)->text(0).toStdString())) - m_mantidUI->deleteWorkspace((*itr)->text(0)); - }//end of for loop for selected items } void MantidDockWidget::sortAscending() diff --git a/Code/Mantid/MantidPlot/src/Mantid/MantidDock.h b/Code/Mantid/MantidPlot/src/Mantid/MantidDock.h index 4253a657ec4d058df304a4d78e405e14fd7849be..f492d63f32931b892bf2a56224c1555b248823d4 100644 --- a/Code/Mantid/MantidPlot/src/Mantid/MantidDock.h +++ b/Code/Mantid/MantidPlot/src/Mantid/MantidDock.h @@ -141,6 +141,8 @@ private: *m_convertToMatrixWorkspace, *m_convertMDHistoToMatrixWorkspace, *m_clearUB; + + ApplicationWindow *m_appParent; QAtomicInt m_updateCount; bool m_treeUpdating; diff --git a/Code/Mantid/MantidPlot/src/Mantid/MantidMatrix.cpp b/Code/Mantid/MantidPlot/src/Mantid/MantidMatrix.cpp index 750b2bc5d40f932e0a43ba4f9cdf87272247de59..64557708ea181b1b90e72a8408925e57b029f8db 100644 --- a/Code/Mantid/MantidPlot/src/Mantid/MantidMatrix.cpp +++ b/Code/Mantid/MantidPlot/src/Mantid/MantidMatrix.cpp @@ -1366,7 +1366,7 @@ QVariant MantidMatrixModel::data(const QModelIndex &index, int role) const bool MantidMatrixModel::checkMonitorCache(int row) const { row += m_startRow; //correctly offset the row - if (m_workspace->getAxis(1)->isSpectra()) + if (m_workspace->axes() > 1 && m_workspace->getAxis(1)->isSpectra()) { bool isMon = false; if (m_monCache.contains(row)) diff --git a/Code/Mantid/MantidPlot/src/Mantid/MantidUI.cpp b/Code/Mantid/MantidPlot/src/Mantid/MantidUI.cpp index 7c44182a9273ca48e6eb657d0d101cc63e25b0ba..777db23148a8aa698353a5efe2cf114056b2ede1 100644 --- a/Code/Mantid/MantidPlot/src/Mantid/MantidUI.cpp +++ b/Code/Mantid/MantidPlot/src/Mantid/MantidUI.cpp @@ -177,6 +177,9 @@ MantidUI::MantidUI(ApplicationWindow *aw): //connect(mantidMenu, SIGNAL(aboutToShow()), this, SLOT(mantidMenuAboutToShow())); mantidMenuAboutToShow(); + QShortcut* sc = new QShortcut(QKeySequence(QKeySequence::Delete), m_appWindow); + connect(sc, SIGNAL(activated()), this, SLOT(deletePressEvent())); + menuMantidMatrix = new QMenu(m_appWindow); connect(menuMantidMatrix, SIGNAL(aboutToShow()), this, SLOT(menuMantidMatrixAboutToShow())); @@ -1246,6 +1249,14 @@ Table* MantidUI::createDetectorTable(const QString & wsName, const Mantid::API:: return t; } +/** + * Triggered by a delete key press, and attempts to delete a workspace if it passes the focus checks + */ +void MantidUI::deletePressEvent() +{ + m_exploreMantid->deleteWorkspaces(); +} + /** * Check if drop event can be accepted */ @@ -1365,6 +1376,14 @@ void MantidUI::showAlgorithmDialog(const QString & algName, int version) Mantid::API::IAlgorithm_sptr alg = this->createAlgorithm(algName, version); if( !alg ) return; MantidQt::API::AlgorithmDialog* dlg = createAlgorithmDialog(alg); + + if (algName == "Load") + { + // when loading files, we'll need to update the list of recent files + // hook up MantidUI::fileDialogAccept() to the LoadDialog dialog accepted() signal + connect(dlg, SIGNAL(accepted()), this, SLOT(loadFileDialogAccept())); + } + dlg->show(); dlg->raise(); dlg->activateWindow(); @@ -1391,6 +1410,14 @@ void MantidUI::showAlgorithmDialog(QString algName, QHash<QString,QString> param alg->setPropertyValue(it.key().toStdString(),it.value().toStdString()); } MantidQt::API::AlgorithmDialog* dlg = createAlgorithmDialog(alg); + + if (algName == "Load") + { + // when loading files, we'll need to update the list of recent files + // hook up MantidUI::fileDialogAccept() to the LoadDialog dialog accepted() signal + connect(dlg, SIGNAL(accepted()), this, SLOT(loadFileDialogAccept())); + } + dlg->show(); dlg->raise(); dlg->activateWindow(); @@ -1759,6 +1786,21 @@ bool MantidUI::executeAlgorithmAsync(Mantid::API::IAlgorithm_sptr alg, const boo } } +/** +* Slot to update the recent files list (from main appWindow) when accepting LoadDialog dialogs +*/ +void MantidUI::loadFileDialogAccept() +{ + QObject* sender = QObject::sender(); + MantidQt::API::AlgorithmDialog* dlg = reinterpret_cast<MantidQt::API::AlgorithmDialog*>(sender); + if (!dlg) + return; // should never happen + + QString fn = MantidQt::API::AlgorithmInputHistory::Instance().previousInput("Load", "Filename"); + appWindow()->updateRecentFilesList(fn); + // recent files list updated. After this point, the Qt signal handler will go to LoadDialog::accept() +} + void MantidUI::handleLoadDAEFinishedNotification(const Poco::AutoPtr<Algorithm::FinishedNotification>& pNf) { std::string wsNAme = pNf->algorithm()->getProperty("OutputWorkspace"); diff --git a/Code/Mantid/MantidPlot/src/Mantid/MantidUI.h b/Code/Mantid/MantidPlot/src/Mantid/MantidUI.h index 5f7f9194029f43c4a9cd0463b53072e2167e696c..bfff7d0b09b4b2433272c47477f243eeb511346f 100644 --- a/Code/Mantid/MantidPlot/src/Mantid/MantidUI.h +++ b/Code/Mantid/MantidPlot/src/Mantid/MantidUI.h @@ -243,7 +243,8 @@ public: const std::vector<int>& indices, bool include_data = false); /// Create a table of detectors from a PeaksWorkspace Table* createDetectorTable(const QString & wsName, const Mantid::API::IPeaksWorkspace_sptr & ws); - + /// Triggers a workspace delete check + void deletePressEvent(); // Determine whether the workspace has a UB matrix bool hasUB(const QString& wsName); @@ -440,6 +441,10 @@ public: void memoryImage2(); #endif +private slots: + + // slot for file open dialogs created from the main app menu, or the workspaces dock window + void loadFileDialogAccept(); private: diff --git a/Code/Mantid/MantidQt/CustomInterfaces/CMakeLists.txt b/Code/Mantid/MantidQt/CustomInterfaces/CMakeLists.txt index 30186f5fc9f955aacd2282a4ba56550af5334750..d01e47d1aa4bf60db3850b706235ce3f8aaa699f 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/CMakeLists.txt +++ b/Code/Mantid/MantidQt/CustomInterfaces/CMakeLists.txt @@ -52,6 +52,7 @@ set ( SRC_FILES src/Muon/MuonAnalysisResultTableTab.cpp src/QReflTableModel.cpp src/QtReflMainView.cpp + src/QtReflOptionsDialog.cpp src/QtWorkspaceMementoModel.cpp src/Quasi.cpp src/RawFileMemento.cpp @@ -136,6 +137,7 @@ set ( INC_FILES inc/MantidQtCustomInterfaces/ReflMainViewPresenter.h inc/MantidQtCustomInterfaces/QReflTableModel.h inc/MantidQtCustomInterfaces/QtReflMainView.h + inc/MantidQtCustomInterfaces/QtReflOptionsDialog.h inc/MantidQtCustomInterfaces/QtWorkspaceMementoModel.h inc/MantidQtCustomInterfaces/Quasi.h inc/MantidQtCustomInterfaces/RawFileMemento.h @@ -206,6 +208,7 @@ set ( MOC_FILES inc/MantidQtCustomInterfaces/Background.h inc/MantidQtCustomInterfaces/Muon/MuonAnalysisResultTableTab.h inc/MantidQtCustomInterfaces/QReflTableModel.h inc/MantidQtCustomInterfaces/QtReflMainView.h + inc/MantidQtCustomInterfaces/QtReflOptionsDialog.h inc/MantidQtCustomInterfaces/Quasi.h inc/MantidQtCustomInterfaces/ResNorm.h inc/MantidQtCustomInterfaces/SANSAddFiles.h @@ -237,6 +240,7 @@ set ( UI_FILES inc/MantidQtCustomInterfaces/CreateMDWorkspace.ui inc/MantidQtCustomInterfaces/Muon/MuonAnalysis.ui inc/MantidQtCustomInterfaces/Quasi.ui inc/MantidQtCustomInterfaces/ReflMainWidget.ui + inc/MantidQtCustomInterfaces/ReflOptionsDialog.ui inc/MantidQtCustomInterfaces/ReflWindow.ui inc/MantidQtCustomInterfaces/ResNorm.ui inc/MantidQtCustomInterfaces/SANSPlotSpecial.ui diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IReflPresenter.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IReflPresenter.h index f561c8168c485ec05a3087e44f329cf5efe125ff..5755151a9b5211bed6a28ce67ede83c3c210a85f 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IReflPresenter.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IReflPresenter.h @@ -1,7 +1,13 @@ #ifndef MANTID_CUSTOMINTERFACES_IREFLPRESENTER_H #define MANTID_CUSTOMINTERFACES_IREFLPRESENTER_H +#include <map> +#include <string> + #include "MantidKernel/System.h" + +#include <QVariant> + namespace MantidQt { namespace CustomInterfaces @@ -36,6 +42,8 @@ namespace MantidQt virtual ~IReflPresenter() {}; //Tell the presenter something happened virtual void notify(int flag) = 0; + virtual const std::map<std::string,QVariant>& options() const = 0; + virtual void setOptions(const std::map<std::string,QVariant>& options) = 0; private: }; diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.ui b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.ui index 09cb300828eb7c56d9842ac60a60b3b2e9c73894..8890fb2b0b1010e25c1db0c8f105ee1bc6dcc77a 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.ui +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.ui @@ -1948,7 +1948,7 @@ Later steps in the process (saving, renaming) will not be done.</string> </sizepolicy> </property> <property name="autoLoad" stdset="0"> - <bool>false</bool> + <bool>true</bool> </property> <property name="loadLabelText" stdset="0"> <string>Plot Input</string> diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.h index 924729afa2e09f255d1d4321e2f425f91569104a..2631379786e760a448911465e25bda4f6836af30 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.h @@ -38,6 +38,7 @@ public slots: void runFilesChanged(); void runFilesFinding(); void runFilesFound(); + void individualGroupingToggled(int state); private: virtual void initLayout(); diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.ui b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.ui index 24ddd75627bec3b38a8ac6545747abe0af051e02..c439e8803cf6ae666e7da834397ea1356f7e4580 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.ui +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.ui @@ -7,437 +7,456 @@ <x>0</x> <y>0</y> <width>495</width> - <height>370</height> + <height>433</height> </rect> </property> <property name="windowTitle"> <string>Indirect Diffraction</string> </property> <widget class="QWidget" name="centralwidget"> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QGroupBox" name="gbInstrument"> - <property name="title"> - <string>Instrument</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_6"> - <item> - <widget class="MantidQt::MantidWidgets::InstrumentSelector" name="cbInst"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="techniques" stdset="0"> - <stringlist> - <string>TOF Indirect Geometry Spectroscopy</string> - <string>TOF Indirect Geometry Diffraction</string> - </stringlist> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="set_lbReflection"> - <property name="text"> - <string>Reflection</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="cbReflection"> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="gbInput"> - <property name="title"> - <string>Input</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_4"> - <property name="margin"> - <number>6</number> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QGroupBox" name="gbInstrument"> + <property name="title"> + <string>Instrument</string> </property> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <widget class="MantidQt::MantidWidgets::MWRunFiles" name="dem_rawFiles" native="true"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>41</verstretch> - </sizepolicy> - </property> - <property name="label" stdset="0"> - <string>Run Numbers</string> - </property> - <property name="multipleFiles" stdset="0"> - <bool>true</bool> - </property> - </widget> - </item> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <item> + <widget class="MantidQt::MantidWidgets::InstrumentSelector" name="cbInst"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="techniques" stdset="0"> + <stringlist> + <string>TOF Indirect Geometry Spectroscopy</string> + <string>TOF Indirect Geometry Diffraction</string> + </stringlist> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="set_lbReflection"> + <property name="text"> + <string>Reflection</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="cbReflection"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="gbInput"> + <property name="title"> + <string>Input</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <property name="margin"> + <number>6</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="MantidQt::MantidWidgets::MWRunFiles" name="dem_rawFiles" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>41</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Run Numbers</string> + </property> + <property name="multipleFiles" stdset="0"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="dem_ckSumFiles"> + <property name="text"> + <string>Sum Files</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_11"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Spectra Min</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="set_leSpecMin"/> + </item> + <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Spectra Max</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="set_leSpecMax"/> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QStackedWidget" name="swVanadium"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="page"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <property name="margin"> + <number>0</number> + </property> <item> - <widget class="QCheckBox" name="dem_ckSumFiles"> - <property name="text"> - <string>Sum Files</string> + <widget class="QGroupBox" name="gbCalibration"> + <property name="title"> + <string>Calibration</string> </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="margin"> + <number>6</number> + </property> + <item> + <widget class="MantidQt::MantidWidgets::MWRunFiles" name="dem_calFile" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Cal File</string> + </property> + <property name="multipleFiles" stdset="0"> + <bool>false</bool> + </property> + <property name="optional" stdset="0"> + <bool>false</bool> + </property> + <property name="fileExtensions" stdset="0"> + <stringlist> + <string>.cal</string> + </stringlist> + </property> + </widget> + </item> + <item> + <widget class="MantidQt::MantidWidgets::MWRunFiles" name="dem_vanadiumFile" native="true"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="label" stdset="0"> + <string>Vanadium Runs</string> + </property> + <property name="multipleFiles" stdset="0"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> </widget> </item> </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_11"> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Spectra Min</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="set_leSpecMin"/> - </item> + </widget> + <widget class="QWidget" name="page_2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <property name="margin"> + <number>0</number> + </property> <item> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Spectra Max</string> + <widget class="QGroupBox" name="gbRebin"> + <property name="title"> + <string>Rebin in D-Spacing (optional)</string> </property> + <layout class="QHBoxLayout" name="horizontalLayout_7"> + <property name="spacing"> + <number>6</number> + </property> + <property name="margin"> + <number>6</number> + </property> + <item> + <widget class="QLabel" name="lbRebinStart"> + <property name="text"> + <string>Start:</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="leRebinStart"/> + </item> + <item> + <widget class="QLabel" name="valRebinStart"> + <property name="styleSheet"> + <string notr="true">color: rgb(170, 0, 0);</string> + </property> + <property name="text"> + <string>*</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="lbRebinWidth"> + <property name="text"> + <string>Width:</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="leRebinWidth"/> + </item> + <item> + <widget class="QLabel" name="valRebinWidth"> + <property name="styleSheet"> + <string notr="true">color: rgb(170, 0, 0);</string> + </property> + <property name="text"> + <string>*</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="lbRebinEnd"> + <property name="text"> + <string>End:</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="leRebinEnd"/> + </item> + <item> + <widget class="QLabel" name="valRebinEnd"> + <property name="styleSheet"> + <string notr="true">color: rgb(170, 0, 0);</string> + </property> + <property name="text"> + <string>*</string> + </property> + </widget> + </item> + </layout> </widget> </item> - <item> - <widget class="QLineEdit" name="set_leSpecMax"/> - </item> </layout> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QStackedWidget" name="swVanadium"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="page"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + </widget> + </widget> + </item> + <item> + <widget class="QGroupBox" name="gbGeneralOptions"> + <property name="title"> + <string>Options</string> </property> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <property name="margin"> - <number>0</number> - </property> + <layout class="QVBoxLayout" name="verticalLayout_6"> <item> - <widget class="QGroupBox" name="gbCalibration"> - <property name="title"> - <string>Calibration</string> + <widget class="QCheckBox" name="ckIndividualGrouping"> + <property name="toolTip"> + <string><html><head/><body><p>When enabled spectra are not grouped and the output workspace will contain one spectrum per detector.</p></body></html></string> + </property> + <property name="text"> + <string>Use Individual Grouping</string> </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <property name="margin"> - <number>6</number> - </property> - <item> - <widget class="MantidQt::MantidWidgets::MWRunFiles" name="dem_calFile" native="true"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="label" stdset="0"> - <string>Cal File</string> - </property> - <property name="multipleFiles" stdset="0"> - <bool>false</bool> - </property> - <property name="optional" stdset="0"> - <bool>false</bool> - </property> - <property name="fileExtensions" stdset="0"> - <stringlist> - <string>.cal</string> - </stringlist> - </property> - </widget> - </item> - <item> - <widget class="MantidQt::MantidWidgets::MWRunFiles" name="dem_vanadiumFile" native="true"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="label" stdset="0"> - <string>Vanadium Runs</string> - </property> - <property name="multipleFiles" stdset="0"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> </widget> </item> </layout> </widget> - <widget class="QWidget" name="page_2"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + </item> + <item> + <widget class="QGroupBox" name="gbOutput"> + <property name="title"> + <string>Output</string> </property> - <layout class="QHBoxLayout" name="horizontalLayout_4"> + <layout class="QHBoxLayout" name="horizontalLayout"> <property name="margin"> - <number>0</number> + <number>6</number> </property> <item> - <widget class="QGroupBox" name="gbRebin"> - <property name="title"> - <string>Rebin in D-Spacing (optional)</string> + <widget class="QLabel" name="lbPlotType"> + <property name="text"> + <string>Plot Type:</string> </property> - <layout class="QHBoxLayout" name="horizontalLayout_7"> - <property name="spacing"> - <number>6</number> + </widget> + </item> + <item> + <widget class="QComboBox" name="cbPlotType"> + <item> + <property name="text"> + <string>None</string> </property> - <property name="margin"> - <number>6</number> + </item> + <item> + <property name="text"> + <string>Spectra</string> </property> - <item> - <widget class="QLabel" name="lbRebinStart"> - <property name="text"> - <string>Start:</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="leRebinStart"/> - </item> - <item> - <widget class="QLabel" name="valRebinStart"> - <property name="styleSheet"> - <string notr="true">color: rgb(170, 0, 0);</string> - </property> - <property name="text"> - <string>*</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="lbRebinWidth"> - <property name="text"> - <string>Width:</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="leRebinWidth"/> - </item> - <item> - <widget class="QLabel" name="valRebinWidth"> - <property name="styleSheet"> - <string notr="true">color: rgb(170, 0, 0);</string> - </property> - <property name="text"> - <string>*</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="lbRebinEnd"> - <property name="text"> - <string>End:</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="leRebinEnd"/> - </item> - <item> - <widget class="QLabel" name="valRebinEnd"> - <property name="styleSheet"> - <string notr="true">color: rgb(170, 0, 0);</string> - </property> - <property name="text"> - <string>*</string> - </property> - </widget> - </item> - </layout> + </item> </widget> </item> </layout> </widget> - </widget> - </item> - <item> - <widget class="QGroupBox" name="gbOutput"> - <property name="title"> - <string>Output</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout"> - <property name="margin"> - <number>6</number> + </item> + <item> + <widget class="QGroupBox" name="gbSave"> + <property name="toolTip"> + <string>Select which file formats the data should be saved in.</string> </property> + <property name="title"> + <string>Save Formats</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <property name="margin"> + <number>6</number> + </property> + <item> + <widget class="QCheckBox" name="ckGSS"> + <property name="text"> + <string>GSS</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="ckNexus"> + <property name="text"> + <string>Nexus</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="ckAscii"> + <property name="text"> + <string>ASCII (DAT)</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_10"> <item> - <widget class="QLabel" name="lbPlotType"> + <widget class="QPushButton" name="pbHelp"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> <property name="text"> - <string>Plot Type:</string> + <string>?</string> </property> </widget> </item> <item> - <widget class="QComboBox" name="cbPlotType"> - <item> - <property name="text"> - <string>None</string> - </property> - </item> - <item> - <property name="text"> - <string>Spectra</string> - </property> - </item> - </widget> + <spacer name="horizontalSpacer_14"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="gbSave"> - <property name="toolTip"> - <string>Select which file formats the data should be saved in.</string> - </property> - <property name="title"> - <string>Save Formats</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <property name="margin"> - <number>6</number> - </property> <item> - <widget class="QCheckBox" name="ckGSS"> + <widget class="QPushButton" name="pbRun"> <property name="text"> - <string>GSS</string> + <string>Run</string> </property> </widget> </item> <item> - <widget class="QCheckBox" name="ckNexus"> - <property name="text"> - <string>Nexus</string> + <spacer name="horizontalSpacer_11"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> </property> - </widget> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> </item> <item> - <widget class="QCheckBox" name="ckAscii"> + <widget class="QPushButton" name="pbManageDirs"> <property name="text"> - <string>ASCII (DAT)</string> + <string>Manage Directories</string> </property> </widget> </item> </layout> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_10"> - <item> - <widget class="QPushButton" name="pbHelp"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="maximumSize"> - <size> - <width>20</width> - <height>20</height> - </size> - </property> - <property name="text"> - <string>?</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_14"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="pbRun"> - <property name="text"> - <string>Run</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_11"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="pbManageDirs"> - <property name="text"> - <string>Manage Directories</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> + </item> + </layout> </widget> </widget> <customwidgets> diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSqw.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSqw.h index ad26ef5efddfb734edbf97b3fbc9df5b91a068c8..e616371e5669d291e430091d36006dc775777dd6 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSqw.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSqw.h @@ -47,8 +47,13 @@ namespace CustomInterfaces virtual bool validate(); private slots: - void sOfQwRebinE(bool state); - void sOfQwPlotInput(); + void energyRebinToggle(bool state); + void plotContour(); + void sqwAlgDone(bool error); + + private: + bool validateQRebin(); + bool validateEnergyRebin(); }; } // namespace CustomInterfaces diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QReflTableModel.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QReflTableModel.h index 13a72471440529d5eaab7a64d9435cac41773dd8..3e66f90a96f870d650b86fca788da6a0b62198c2 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QReflTableModel.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QReflTableModel.h @@ -44,16 +44,20 @@ namespace MantidQt //emit a signal saying things have changed void update(); //row and column counts - int rowCount(const QModelIndex &parent) const; - int columnCount(const QModelIndex &parent) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; //get data fro a cell - QVariant data(const QModelIndex &index, int role) const; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; //get header data for the table QVariant headerData(int section, Qt::Orientation orientation, int role) const; //get flags for a cell Qt::ItemFlags flags(const QModelIndex &index) const; - //chage or add data to the model - bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole ); + //change or add data to the model + bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); + //add new rows to the model + bool insertRows(int row, int count, const QModelIndex& parent = QModelIndex()); + //remove rows from the model + bool removeRows(int row, int count, const QModelIndex& parent = QModelIndex()); private: typedef QString ColumnNameType; @@ -119,6 +123,8 @@ namespace MantidQt ColumnIndexNameMap m_columnNameMap; }; + /// Typedef for a shared pointer to \c QReflTableModel + typedef boost::shared_ptr<QReflTableModel> QReflTableModel_sptr; } // namespace CustomInterfaces } // namespace Mantid diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QtReflMainView.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QtReflMainView.h index 2dcee3bf647cc32934009ad0db5f3b40b4a80f9f..380201dce1c9156999463d0ee5b92039d2a1f4ea 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QtReflMainView.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QtReflMainView.h @@ -5,7 +5,9 @@ #include "MantidQtAPI/UserSubWindow.h" #include "MantidQtCustomInterfaces/ReflMainView.h" #include "MantidQtCustomInterfaces/IReflPresenter.h" +#include "MantidQtCustomInterfaces/QReflTableModel.h" #include <boost/scoped_ptr.hpp> +#include <QSignalMapper> #include "ui_ReflMainWidget.h" namespace MantidQt @@ -48,7 +50,7 @@ namespace MantidQt static QString categoryInfo() { return "Reflectometry"; } //Connect the model - virtual void showTable(Mantid::API::ITableWorkspace_sptr model); + virtual void showTable(QReflTableModel_sptr model); //Dialog/Prompt methods virtual std::string askUserString(const std::string& prompt, const std::string& title, const std::string& defaultValue); @@ -62,33 +64,47 @@ namespace MantidQt virtual void setProgress(int progress); //Settor methods + virtual void setSelection(const std::set<int>& rows); + virtual void setTableList(const std::set<std::string>& tables); virtual void setInstrumentList(const std::vector<std::string>& instruments, const std::string& defaultInstrument); + virtual void setOptionsHintStrategy(MantidQt::MantidWidgets::HintStrategy* hintStrategy); //Accessor methods - virtual std::vector<size_t> getSelectedRowIndexes() const; + virtual std::set<int> getSelectedRows() const; virtual std::string getSearchInstrument() const; virtual std::string getProcessInstrument() const; virtual std::string getWorkspaceToOpen() const; + virtual boost::shared_ptr<IReflPresenter> getPresenter() const; + private: //initialise the interface virtual void initLayout(); //the presenter boost::shared_ptr<IReflPresenter> m_presenter; + //the model + QReflTableModel_sptr m_model; //the interface Ui::reflMainWidget ui; //the workspace the user selected to open std::string m_toOpen; + QSignalMapper* m_openMap; private slots: + void on_actionNewTable_triggered(); + void on_actionSaveTable_triggered(); + void on_actionSaveTableAs_triggered(); + void on_actionAppendRow_triggered(); + void on_actionPrependRow_triggered(); + void on_actionDeleteRow_triggered(); + void on_actionProcess_triggered(); + void on_actionGroupRows_triggered(); + void on_actionExpandSelection_triggered(); + void on_actionOptionsDialog_triggered(); + void setModel(QString name); - void actionNewTable(); - void actionSave(); - void actionSaveAs(); - void actionAddRow(); - void actionDeleteRow(); - void actionProcess(); - void actionGroupRows(); + void tableUpdated(const QModelIndex& topLeft, const QModelIndex& bottomRight); + void showContextMenu(const QPoint& pos); }; diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QtReflOptionsDialog.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QtReflOptionsDialog.h new file mode 100644 index 0000000000000000000000000000000000000000..670f779475766fdd9e4bab5d8fb6241e48d0810c --- /dev/null +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QtReflOptionsDialog.h @@ -0,0 +1,64 @@ +#ifndef MANTID_CUSTOMINTERFACES_QTREFLOPTIONSDIALOG_H +#define MANTID_CUSTOMINTERFACES_QTREFLOPTIONSDIALOG_H + +#include "MantidKernel/System.h" +#include "MantidQtCustomInterfaces/IReflPresenter.h" +#include "MantidQtCustomInterfaces/ReflMainView.h" + +#include <QDialog> + +#include "ui_ReflOptionsDialog.h" + +namespace MantidQt +{ + namespace CustomInterfaces + { + + /** QtReflOptionsDialog : Provides a dialog for setting Reflectometry UI options. + + Copyright © 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory + + This file is part of Mantid. + + Mantid is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + Mantid is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + File change history is stored at: <https://github.com/mantidproject/mantid> + Code Documentation is available at: <http://doxygen.mantidproject.org> + */ + + class DLLExport QtReflOptionsDialog : public QDialog + { + Q_OBJECT + public: + QtReflOptionsDialog(ReflMainView* view, boost::shared_ptr<IReflPresenter> presenter); + virtual ~QtReflOptionsDialog(); + protected: + void initLayout(); + void initBindings(); + protected slots: + void saveOptions(); + void loadOptions(); + protected: + //the interface + Ui::reflOptionsDialog ui; + //the presenter + boost::shared_ptr<IReflPresenter> m_presenter; + //maps option names to widget names + std::map<std::string,QString> m_bindings; + }; + + } //CustomInterfaces +} //MantidQt + +#endif /* MANTID_CUSTOMINTERFACES_QTREFLOPTIONSDIALOG_H */ diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainView.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainView.h index 7507cf17e6649bdc604cef428d8c3b50c3c05d15..4df2717d4554b83713bd4b2225732ca7378a55a1 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainView.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainView.h @@ -2,7 +2,9 @@ #define MANTID_CUSTOMINTERFACES_REFLMAINVIEW_H #include "MantidKernel/System.h" -#include "MantidAPI/ITableWorkspace.h" +#include "MantidQtCustomInterfaces/IReflPresenter.h" +#include "MantidQtCustomInterfaces/QReflTableModel.h" +#include "MantidQtMantidWidgets/HintStrategy.h" namespace MantidQt { @@ -40,7 +42,7 @@ namespace MantidQt virtual ~ReflMainView() {}; //Connect the model - virtual void showTable(Mantid::API::ITableWorkspace_sptr model) = 0; + virtual void showTable(QReflTableModel_sptr model) = 0; //Dialog/Prompt methods virtual std::string askUserString(const std::string& prompt, const std::string& title, const std::string& defaultValue) = 0; @@ -54,23 +56,32 @@ namespace MantidQt virtual void setProgress(int progress) = 0; //Settor methods + virtual void setSelection(const std::set<int>& rows) = 0; + virtual void setTableList(const std::set<std::string>& tables) = 0; virtual void setInstrumentList(const std::vector<std::string>& instruments, const std::string& defaultInstrument) = 0; + virtual void setOptionsHintStrategy(MantidQt::MantidWidgets::HintStrategy* hintStrategy) = 0; //Accessor methods - virtual std::vector<size_t> getSelectedRowIndexes() const = 0; + virtual std::set<int> getSelectedRows() const = 0; virtual std::string getSearchInstrument() const = 0; virtual std::string getProcessInstrument() const = 0; virtual std::string getWorkspaceToOpen() const = 0; - static const int NoFlags = 0; - static const int SaveFlag = 1; - static const int SaveAsFlag = 2; - static const int AddRowFlag = 3; - static const int DeleteRowFlag = 4; - static const int ProcessFlag = 5; - static const int GroupRowsFlag = 6; - static const int OpenTableFlag = 7; - static const int NewTableFlag = 8; + virtual boost::shared_ptr<IReflPresenter> getPresenter() const = 0; + + static const int NoFlags = 0; + static const int SaveFlag = 1; + static const int SaveAsFlag = 2; + static const int AppendRowFlag = 3; + static const int PrependRowFlag = 4; + static const int DeleteRowFlag = 5; + static const int ProcessFlag = 6; + static const int GroupRowsFlag = 7; + static const int OpenTableFlag = 8; + static const int NewTableFlag = 9; + static const int TableUpdatedFlag = 10; + static const int ExpandSelectionFlag = 11; + static const int OptionsDialogFlag = 12; }; } } diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainViewPresenter.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainViewPresenter.h index 72bb036b19404a46552c3f4655526d51a544668d..2c650332d88b06cebafcbd579a072c86240ca0e2 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainViewPresenter.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainViewPresenter.h @@ -1,11 +1,17 @@ #ifndef MANTID_CUSTOMINTERFACES_REFLMAINVIEWPRESENTER_H #define MANTID_CUSTOMINTERFACES_REFLMAINVIEWPRESENTER_H -#include "MantidKernel/System.h" +#include "MantidAPI/AnalysisDataService.h" #include "MantidAPI/ITableWorkspace.h" #include "MantidAPI/MatrixWorkspace.h" -#include "MantidQtCustomInterfaces/ReflMainView.h" +#include "MantidKernel/System.h" #include "MantidQtCustomInterfaces/IReflPresenter.h" +#include "MantidQtCustomInterfaces/ReflMainView.h" +#include "MantidQtCustomInterfaces/QReflTableModel.h" + +#include <Poco/AutoPtr.h> +#include <Poco/NObserver.h> + namespace MantidQt { namespace CustomInterfaces @@ -40,47 +46,81 @@ namespace MantidQt ReflMainViewPresenter(ReflMainView* view); virtual ~ReflMainViewPresenter(); virtual void notify(int flag); - + virtual const std::map<std::string,QVariant>& options() const; + virtual void setOptions(const std::map<std::string,QVariant>& options); //Public for the purposes of unit testing static std::map<std::string,std::string> parseKeyValueString(const std::string& str); protected: - Mantid::API::ITableWorkspace_sptr m_model; + //the workspace the model is currently representing + Mantid::API::ITableWorkspace_sptr m_ws; + //the model the table is currently representing + QReflTableModel_sptr m_model; + //the name of the workspace/table/model in the ADS, blank if unsaved std::string m_wsName; + //the view we're managing ReflMainView* m_view; + //stores whether or not the table has changed since it was last saved + bool m_tableDirty; + //stores the user options for the presenter + std::map<std::string,QVariant> m_options; //process selected rows virtual void process(); + //Reduce a row + void reduceRow(int rowNo); //load a run into the ADS, or re-use one in the ADS if possible Mantid::API::Workspace_sptr loadRun(const std::string& run, const std::string& instrument); //get the run number of a TOF workspace std::string getRunNumber(const Mantid::API::Workspace_sptr& ws); //get an unused group id - int getUnusedGroup(std::vector<size_t> ignoredRows = std::vector<size_t>()) const; + int getUnusedGroup(std::set<int> ignoredRows = std::set<int>()) const; //make a transmission workspace Mantid::API::MatrixWorkspace_sptr makeTransWS(const std::string& transString); //Validate a row - void validateRow(size_t rowNo) const; + void validateRow(int rowNo) const; //Autofill a row with sensible values - void autofillRow(size_t rowNo); + void autofillRow(int rowNo); //calculates qmin and qmax - static std::vector<double> calcQRange(Mantid::API::MatrixWorkspace_sptr ws, double theta); - //Process a row - void processRow(size_t rowNo); + std::vector<double> calcQRange(Mantid::API::MatrixWorkspace_sptr ws, double theta); + //get the number of rows in a group + size_t numRowsInGroup(int groupId) const; //Stitch some rows - void stitchRows(std::vector<size_t> rows); + void stitchRows(std::set<int> rows); //insert a row in the model before the given index - virtual void insertRow(size_t before); + virtual void insertRow(int index); //add row(s) to the model - virtual void addRow(); + virtual void appendRow(); + virtual void prependRow(); //delete row(s) from the model virtual void deleteRow(); //group selected rows together virtual void groupRows(); + //expand selection to group + virtual void expandSelection(); //table io methods virtual void newTable(); virtual void openTable(); virtual void saveTable(); virtual void saveTableAs(); + //options + void showOptionsDialog(); + void initOptions(); + + //List of workspaces the user can open + std::set<std::string> m_workspaceList; + + //To maintain a list of workspaces the user may open, we observe the ADS + Poco::NObserver<ReflMainViewPresenter, Mantid::API::WorkspaceAddNotification> m_addObserver; + Poco::NObserver<ReflMainViewPresenter, Mantid::API::WorkspacePostDeleteNotification> m_remObserver; + Poco::NObserver<ReflMainViewPresenter, Mantid::API::ClearADSNotification> m_clearObserver; + Poco::NObserver<ReflMainViewPresenter, Mantid::API::WorkspaceRenameNotification> m_renameObserver; + Poco::NObserver<ReflMainViewPresenter, Mantid::API::WorkspaceAfterReplaceNotification> m_replaceObserver; + + void handleAddEvent(Mantid::API::WorkspaceAddNotification_ptr pNf); + void handleRemEvent(Mantid::API::WorkspacePostDeleteNotification_ptr pNf); + void handleClearEvent(Mantid::API::ClearADSNotification_ptr pNf); + void handleRenameEvent(Mantid::API::WorkspaceRenameNotification_ptr pNf); + void handleReplaceEvent(Mantid::API::WorkspaceAfterReplaceNotification_ptr pNf); public: static const int COL_RUNS = 0; diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainWidget.ui b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainWidget.ui index beb3efec0c0b5ce09b9a0266d8034064a86c401a..424ab97c7d208c7878ca49242b5018bfda02e2a7 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainWidget.ui +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainWidget.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>875</width> - <height>425</height> + <width>825</width> + <height>275</height> </rect> </property> <property name="windowTitle"> @@ -232,82 +232,15 @@ <number>1</number> </property> <item> - <layout class="QHBoxLayout" name="layoutTableButtons"> - <item> - <widget class="QPushButton" name="buttonNew"> - <property name="toolTip"> - <string>Start a new table</string> - </property> - <property name="text"> - <string>New Table</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="buttonSave"> - <property name="toolTip"> - <string>Save the current table as a Table Workspace</string> - </property> - <property name="text"> - <string>Save Table</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="buttonSaveAs"> - <property name="toolTip"> - <string>Save the current table as a Table Workspace</string> - </property> - <property name="text"> - <string>Save Table As</string> - </property> - </widget> - </item> - <item> - <spacer name="spacerTableButtons"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="labelWorkspaceSelector"> - <property name="text"> - <string>Table:</string> - </property> - </widget> - </item> - <item> - <widget class="MantidQt::MantidWidgets::WorkspaceSelector" name="workspaceSelector"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>150</width> - <height>0</height> - </size> - </property> - <property name="toolTip"> - <string>Select the Table Workspace to display</string> - </property> - <property name="WorkspaceTypes" stdset="0"> - <stringlist> - <string>TableWorkspace</string> - </stringlist> - </property> - </widget> - </item> - </layout> + <widget class="QToolBar" name="rowToolBar"> + <property name="styleSheet"> + <string>QToolBar{border: none;}</string> + </property> + <addaction name="actionAppendRow"/> + <addaction name="actionDeleteRow"/> + <addaction name="actionGroupRows"/> + <addaction name="actionExpandSelection"/> + </widget> </item> <item> <widget class="QTableView" name="viewTable"> @@ -317,8 +250,8 @@ <verstretch>0</verstretch> </sizepolicy> </property> - <property name="toolTip"> - <string>Runs to process</string> + <property name="contextMenuPolicy"> + <enum>Qt::CustomContextMenu</enum> </property> <property name="editTriggers"> <set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set> @@ -327,7 +260,7 @@ <bool>true</bool> </property> <property name="selectionMode"> - <enum>QAbstractItemView::ContiguousSelection</enum> + <enum>QAbstractItemView::ExtendedSelection</enum> </property> <property name="selectionBehavior"> <enum>QAbstractItemView::SelectRows</enum> @@ -352,35 +285,12 @@ <number>1</number> </property> <item> - <widget class="QPushButton" name="buttonAddRow"> - <property name="toolTip"> - <string>Add a row beneath the selected row(s)</string> - </property> - <property name="text"> - <string>Add Row</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="buttonDeleteRow"> - <property name="toolTip"> - <string>Delete selected row(s) from the table</string> - </property> - <property name="text"> - <string>Delete Row</string> + <widget class="QProgressBar" name="progressBar"> + <property name="value"> + <number>0</number> </property> </widget> </item> - <item> - <widget class="QPushButton" name="buttonGroupRows"> - <property name="text"> - <string>Group Rows</string> - </property> - </widget> - </item> - <item> - <widget class="QProgressBar" name="progressBar"/> - </item> <item> <widget class="QLabel" name="labelProcessInstrument"> <property name="text"> @@ -402,25 +312,16 @@ </widget> </item> <item> - <widget class="QPushButton" name="buttonProcess"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="toolTip"> - <string>Process the selected rows</string> - </property> + <widget class="QToolButton" name="buttonProcess"> <property name="text"> <string>Process</string> </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="arrowType"> + <enum>Qt::NoArrow</enum> + </property> </widget> </item> </layout> @@ -433,98 +334,164 @@ </item> </layout> </widget> + <widget class="QMenuBar" name="menuBar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>825</width> + <height>23</height> + </rect> + </property> + <property name="nativeMenuBar"> + <bool>false</bool> + </property> + <widget class="QMenu" name="menuTable"> + <property name="title"> + <string>Table</string> + </property> + <widget class="QMenu" name="menuOpenTable"> + <property name="title"> + <string>Open Table</string> + </property> + <property name="icon"> + <iconset resource="../../../../MantidPlot/icons/icons.qrc"> + <normaloff>:/multiload.png</normaloff>:/multiload.png</iconset> + </property> + </widget> + <addaction name="menuOpenTable"/> + <addaction name="actionNewTable"/> + <addaction name="actionSaveTable"/> + <addaction name="actionSaveTableAs"/> + <addaction name="separator"/> + <addaction name="actionOptionsDialog"/> + </widget> + <widget class="QMenu" name="menuRows"> + <property name="title"> + <string>Row</string> + </property> + <addaction name="actionProcess"/> + <addaction name="actionExpandSelection"/> + <addaction name="separator"/> + <addaction name="actionPrependRow"/> + <addaction name="actionAppendRow"/> + <addaction name="actionGroupRows"/> + <addaction name="separator"/> + <addaction name="actionDeleteRow"/> + </widget> + <addaction name="menuTable"/> + <addaction name="menuRows"/> + </widget> <action name="actionNewTable"> + <property name="icon"> + <iconset resource="../../../../MantidPlot/icons/icons.qrc"> + <normaloff>:/new.png</normaloff>:/new.png</iconset> + </property> <property name="text"> <string>New Table</string> </property> </action> <action name="actionSaveTable"> + <property name="icon"> + <iconset resource="../../../../MantidPlot/icons/icons.qrc"> + <normaloff>:/filesave.png</normaloff>:/filesave.png</iconset> + </property> <property name="text"> <string>Save Table</string> </property> </action> <action name="actionSaveTableAs"> + <property name="icon"> + <iconset resource="../../../../MantidPlot/icons/icons.qrc"> + <normaloff>:/filesaveas.png</normaloff>:/filesaveas.png</iconset> + </property> <property name="text"> <string>Save Table As</string> </property> </action> - <action name="actionAddRow"> + <action name="actionAppendRow"> + <property name="icon"> + <iconset resource="../../../../MantidPlot/icons/icons.qrc"> + <normaloff>:/insert_row.png</normaloff>:/insert_row.png</iconset> + </property> <property name="text"> - <string>Add Row</string> + <string>Insert Row After</string> + </property> + <property name="toolTip"> + <string>Insert Row After</string> + </property> + </action> + <action name="actionPrependRow"> + <property name="icon"> + <iconset resource="../../../../MantidPlot/icons/icons.qrc"> + <normaloff>:/insert_row.png</normaloff>:/insert_row.png</iconset> + </property> + <property name="text"> + <string>Insert Row Before</string> + </property> + <property name="toolTip"> + <string>Insert Row Before</string> </property> </action> <action name="actionDeleteRow"> + <property name="icon"> + <iconset resource="../../../../MantidPlot/icons/icons.qrc"> + <normaloff>:/delete_row.png</normaloff>:/delete_row.png</iconset> + </property> <property name="text"> <string>Delete Row</string> </property> </action> <action name="actionGroupRows"> + <property name="icon"> + <iconset resource="../../../../MantidPlot/icons/icons.qrc"> + <normaloff>:/drag_curves.png</normaloff>:/drag_curves.png</iconset> + </property> <property name="text"> - <string>Group Rows</string> + <string>Group Selected</string> </property> </action> <action name="actionProcess"> + <property name="icon"> + <iconset resource="../../../../MantidPlot/icons/icons.qrc"> + <normaloff>:/stat_rows.png</normaloff>:/stat_rows.png</iconset> + </property> <property name="text"> <string>Process</string> </property> </action> + <action name="actionExpandSelection"> + <property name="icon"> + <iconset resource="../../../../MantidPlot/icons/icons.qrc"> + <normaloff>:/fit_frame.png</normaloff>:/fit_frame.png</iconset> + </property> + <property name="text"> + <string>Expand Selection</string> + </property> + <property name="toolTip"> + <string>Select an entire group</string> + </property> + </action> + <action name="actionOptionsDialog"> + <property name="icon"> + <iconset resource="../../../../MantidPlot/icons/icons.qrc"> + <normaloff>:/configure.png</normaloff>:/configure.png</iconset> + </property> + <property name="text"> + <string>Options...</string> + </property> + <property name="toolTip"> + <string>Set options for the Reflectometry UI</string> + </property> + </action> </widget> - <customwidgets> - <customwidget> - <class>MantidQt::MantidWidgets::WorkspaceSelector</class> - <extends>QComboBox</extends> - <header>MantidQtMantidWidgets/WorkspaceSelector.h</header> - </customwidget> - </customwidgets> <tabstops> <tabstop>comboSearchInstrument</tabstop> <tabstop>tableRuns</tabstop> <tabstop>viewTable</tabstop> - <tabstop>buttonProcess</tabstop> </tabstops> - <resources/> - <connections> - <connection> - <sender>buttonNew</sender> - <signal>clicked()</signal> - <receiver>actionNewTable</receiver> - <slot>trigger()</slot> - </connection> - <connection> - <sender>buttonAddRow</sender> - <signal>clicked()</signal> - <receiver>actionAddRow</receiver> - <slot>trigger()</slot> - </connection> - <connection> - <sender>buttonDeleteRow</sender> - <signal>clicked()</signal> - <receiver>actionDeleteRow</receiver> - <slot>trigger()</slot> - </connection> - <connection> - <sender>buttonGroupRows</sender> - <signal>clicked()</signal> - <receiver>actionGroupRows</receiver> - <slot>trigger()</slot> - </connection> - <connection> - <sender>buttonProcess</sender> - <signal>clicked()</signal> - <receiver>actionProcess</receiver> - <slot>trigger()</slot> - </connection> - <connection> - <sender>buttonSave</sender> - <signal>clicked()</signal> - <receiver>actionSaveTable</receiver> - <slot>trigger()</slot> - </connection> - <connection> - <sender>buttonSaveAs</sender> - <signal>clicked()</signal> - <receiver>actionSaveTableAs</receiver> - <slot>trigger()</slot> - </connection> - </connections> + <resources> + <include location="../../../../MantidPlot/icons/icons.qrc"/> + </resources> + <connections/> </ui> diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflOptionsDialog.ui b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflOptionsDialog.ui new file mode 100644 index 0000000000000000000000000000000000000000..d436410bd92a23f3e920b770ec9378dd794357c2 --- /dev/null +++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflOptionsDialog.ui @@ -0,0 +1,293 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>reflOptionsDialog</class> + <widget class="QDialog" name="reflOptionsDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>372</width> + <height>222</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="windowTitle"> + <string>Reflectometry UI Options</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QTabWidget" name="tabWidget"> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="tabWarnings"> + <attribute name="title"> + <string>Warnings</string> + </attribute> + <layout class="QFormLayout" name="formLayout"> + <item row="0" column="0"> + <widget class="QCheckBox" name="checkWarnProcessAll"> + <property name="text"> + <string>Warn when processing all rows</string> + </property> + <property name="reflOptionName" stdset="0"> + <string>WarnProcessAll</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QCheckBox" name="checkWarnDiscardChanges"> + <property name="text"> + <string>Warn when discarding unsaved changes</string> + </property> + <property name="reflOptionName" stdset="0"> + <string>WarnDiscardChanges</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QCheckBox" name="checkWarnProcessPartialGroup"> + <property name="text"> + <string>Warn when processing only part of a group</string> + </property> + <property name="reflOptionName" stdset="0"> + <string>WarnProcessPartialGroup</string> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="tabRounding"> + <attribute name="title"> + <string>Rounding</string> + </attribute> + <layout class="QGridLayout" name="gridLayout"> + <item row="2" column="0"> + <widget class="QCheckBox" name="checkRoundQMax"> + <property name="text"> + <string>Round q_max column to</string> + </property> + <property name="reflOptionName" stdset="0"> + <string>RoundQMax</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QSpinBox" name="spinQMinPrecision"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="reflOptionName" stdset="0"> + <string>RoundQMinPrecision</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QSpinBox" name="spinQMaxPrecision"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="reflOptionName" stdset="0"> + <string>RoundQMaxPrecision</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QSpinBox" name="spinDQQPrecision"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="reflOptionName" stdset="0"> + <string>RoundDQQPrecision</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QCheckBox" name="checkRoundQMin"> + <property name="text"> + <string>Round q_min column to</string> + </property> + <property name="reflOptionName" stdset="0"> + <string>RoundQMin</string> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QCheckBox" name="checkRoundDQQ"> + <property name="text"> + <string>Round dq/q column to</string> + </property> + <property name="reflOptionName" stdset="0"> + <string>RoundDQQ</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QCheckBox" name="checkRoundAngle"> + <property name="text"> + <string>Round Angle column to</string> + </property> + <property name="reflOptionName" stdset="0"> + <string>RoundAngle</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QSpinBox" name="spinAnglePrecision"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="reflOptionName" stdset="0"> + <string>RoundAnglePrecision</string> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QLabel" name="labelAnglePlaces"> + <property name="text"> + <string>decimal places</string> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QLabel" name="labelQMinPlaces"> + <property name="text"> + <string>decimal places</string> + </property> + </widget> + </item> + <item row="2" column="2"> + <widget class="QLabel" name="labelQMaxPlaces"> + <property name="text"> + <string>decimal places</string> + </property> + </widget> + </item> + <item row="3" column="2"> + <widget class="QLabel" name="labelDQQPlaces"> + <property name="text"> + <string>decimal places</string> + </property> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>reflOptionsDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>reflOptionsDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>checkRoundAngle</sender> + <signal>toggled(bool)</signal> + <receiver>spinAnglePrecision</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>106</x> + <y>53</y> + </hint> + <hint type="destinationlabel"> + <x>226</x> + <y>53</y> + </hint> + </hints> + </connection> + <connection> + <sender>checkRoundQMin</sender> + <signal>toggled(bool)</signal> + <receiver>spinQMinPrecision</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>106</x> + <y>84</y> + </hint> + <hint type="destinationlabel"> + <x>226</x> + <y>84</y> + </hint> + </hints> + </connection> + <connection> + <sender>checkRoundQMax</sender> + <signal>toggled(bool)</signal> + <receiver>spinQMaxPrecision</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>106</x> + <y>115</y> + </hint> + <hint type="destinationlabel"> + <x>226</x> + <y>115</y> + </hint> + </hints> + </connection> + <connection> + <sender>checkRoundDQQ</sender> + <signal>toggled(bool)</signal> + <receiver>spinDQQPrecision</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>106</x> + <y>146</y> + </hint> + <hint type="destinationlabel"> + <x>226</x> + <y>146</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDataReductionTab.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDataReductionTab.cpp index 003ca1f0cac550c0487b2a74c6f19495683dcd9a..bfc2d8c1d7fe585da51c9db9e52bf71b2215c8ec 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDataReductionTab.cpp +++ b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDataReductionTab.cpp @@ -225,6 +225,10 @@ namespace CustomInterfaces // Get the instrument workspace MatrixWorkspace_sptr instWorkspace = loadInstrumentIfNotExist(instrumentName, analyser, reflection); + // In the IRIS IPF there is no fmica component + if(instrumentName == "IRIS" && analyser == "fmica") + analyser = "mica"; + // Get the instrument auto instrument = instWorkspace->getInstrument()->getComponentByName(analyser); if(instrument == NULL) diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDiffractionReduction.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDiffractionReduction.cpp index dd704156f8df29d74cefad2bbcaf59332ed8cabd..e3c9a1c5a4068fe428ce67a0b061cb6a8fd40958 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDiffractionReduction.cpp +++ b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDiffractionReduction.cpp @@ -105,13 +105,22 @@ void IndirectDiffractionReduction::plotResults(bool error) QString instName = m_uiForm.cbInst->currentText(); QString mode = m_uiForm.cbReflection->currentText(); - QString pyInput = "from mantidplot import plotSpectrum\n"; - if(m_uiForm.cbPlotType->currentText() == "Spectra") + QString plotType = m_uiForm.cbPlotType->currentText(); + + QString pyInput = "from mantidplot import plotSpectrum, plot2D\n"; + + if(plotType == "Spectra" || plotType == "Both") { for(auto it = m_plotWorkspaces.begin(); it != m_plotWorkspaces.end(); ++it) pyInput += "plotSpectrum('" + *it + "', 0)\n"; } + if(plotType == "Contour" || plotType == "Both") + { + for(auto it = m_plotWorkspaces.begin(); it != m_plotWorkspaces.end(); ++it) + pyInput += "plot2D('" + *it + "')\n"; + } + runPythonCode(pyInput); } @@ -132,6 +141,8 @@ void IndirectDiffractionReduction::runGenericReduction(QString instName, QString if(!rebinStart.isEmpty() && !rebinWidth.isEmpty() && !rebinEnd.isEmpty()) rebin = rebinStart + "," + rebinWidth + "," + rebinEnd; + bool individualGrouping = m_uiForm.ckIndividualGrouping->isChecked(); + // Get detector range std::vector<long> detRange; detRange.push_back(m_uiForm.set_leSpecMin->text().toLong()); @@ -141,6 +152,7 @@ void IndirectDiffractionReduction::runGenericReduction(QString instName, QString IAlgorithm_sptr msgDiffReduction = AlgorithmManager::Instance().create("MSGDiffractionReduction"); msgDiffReduction->initialize(); + // Get save formats std::vector<std::string> saveFormats; if(m_uiForm.ckGSS->isChecked()) saveFormats.push_back("gss"); if(m_uiForm.ckNexus->isChecked()) saveFormats.push_back("nxs"); @@ -153,6 +165,7 @@ void IndirectDiffractionReduction::runGenericReduction(QString instName, QString msgDiffReduction->setProperty("InputFiles", m_uiForm.dem_rawFiles->getFilenames().join(",").toStdString()); msgDiffReduction->setProperty("DetectorRange", detRange); msgDiffReduction->setProperty("RebinParam", rebin.toStdString()); + msgDiffReduction->setProperty("IndividualGrouping", individualGrouping); msgDiffReduction->setProperty("SaveFormats", saveFormats); msgDiffReduction->setProperty("OutputWorkspaceGroup", "IndirectDiffraction_Workspaces"); @@ -343,15 +356,26 @@ void IndirectDiffractionReduction::reflectionSelected(int) // Hide options that the current instrument config cannot process if(instrumentName == "OSIRIS" && reflection == "diffonly") { + // Disable individual grouping + m_uiForm.ckIndividualGrouping->setToolTip("OSIRIS cannot group detectors individually in diffonly mode"); + m_uiForm.ckIndividualGrouping->setEnabled(false); + m_uiForm.ckIndividualGrouping->setChecked(false); + + // Disable sum files m_uiForm.dem_ckSumFiles->setToolTip("OSIRIS cannot sum files in diffonly mode"); m_uiForm.dem_ckSumFiles->setEnabled(false); m_uiForm.dem_ckSumFiles->setChecked(false); } else { + // Re-enable sum files m_uiForm.dem_ckSumFiles->setToolTip(""); m_uiForm.dem_ckSumFiles->setEnabled(true); m_uiForm.dem_ckSumFiles->setChecked(true); + + // Re-enable individual grouping + m_uiForm.ckIndividualGrouping->setToolTip(""); + m_uiForm.ckIndividualGrouping->setEnabled(true); } } @@ -403,6 +427,9 @@ void IndirectDiffractionReduction::initLayout() m_uiForm.leRebinWidth->setValidator(m_valDbl); m_uiForm.leRebinEnd->setValidator(m_valDbl); + // Update the list of plot options when individual grouping is toggled + connect(m_uiForm.ckIndividualGrouping, SIGNAL(stateChanged(int)), this, SLOT(individualGroupingToggled(int))); + loadSettings(); // Update invalid rebinning markers @@ -533,6 +560,43 @@ void IndirectDiffractionReduction::runFilesFound() m_uiForm.pbRun->setText("Run"); else m_uiForm.pbRun->setText("Invalid Run"); + + // Disable sum files if only one file is given + int fileCount = m_uiForm.dem_rawFiles->getFilenames().size(); + if(fileCount < 2) + m_uiForm.dem_ckSumFiles->setChecked(false); +} + +/** + * Handles the user toggling the individual grouping check box. + * + * @param state The selection state of the check box + */ +void IndirectDiffractionReduction::individualGroupingToggled(int state) +{ + int itemCount = m_uiForm.cbPlotType->count(); + + switch(state) + { + case Qt::Unchecked: + if(itemCount == 4) + { + m_uiForm.cbPlotType->removeItem(3); + m_uiForm.cbPlotType->removeItem(2); + } + break; + + case Qt::Checked: + if(itemCount == 2) + { + m_uiForm.cbPlotType->insertItem(2, "Contour"); + m_uiForm.cbPlotType->insertItem(3, "Both"); + } + break; + + default: + return; + } } } diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSqw.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSqw.cpp index c736b1a73397a511ae8fdd36556d9ccde7858c5d..de3a0ecd662c03648ce30b4e45260c9bf46e4b77 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSqw.cpp +++ b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSqw.cpp @@ -4,6 +4,9 @@ #include <QFileInfo> +using namespace Mantid::API; +using MantidQt::API::BatchAlgorithmRunner; + namespace MantidQt { namespace CustomInterfaces @@ -14,184 +17,254 @@ namespace CustomInterfaces IndirectSqw::IndirectSqw(Ui::IndirectDataReduction& uiForm, QWidget * parent) : IndirectDataReductionTab(uiForm, parent) { - connect(m_uiForm.sqw_ckRebinE, SIGNAL(toggled(bool)), this, SLOT(sOfQwRebinE(bool))); - connect(m_uiForm.sqw_dsSampleInput, SIGNAL(loadClicked()), this, SLOT(sOfQwPlotInput())); - m_uiForm.sqw_leELow->setValidator(m_valDbl); m_uiForm.sqw_leEWidth->setValidator(m_valDbl); m_uiForm.sqw_leEHigh->setValidator(m_valDbl); m_uiForm.sqw_leQLow->setValidator(m_valDbl); m_uiForm.sqw_leQWidth->setValidator(m_valDbl); m_uiForm.sqw_leQHigh->setValidator(m_valDbl); + + connect(m_uiForm.sqw_ckRebinE, SIGNAL(toggled(bool)), this, SLOT(energyRebinToggle(bool))); + connect(m_uiForm.sqw_dsSampleInput, SIGNAL(loadClicked()), this, SLOT(plotContour())); + + connect(m_batchAlgoRunner, SIGNAL(batchComplete(bool)), this, SLOT(sqwAlgDone(bool))); } - + //---------------------------------------------------------------------------------------------- /** Destructor */ IndirectSqw::~IndirectSqw() { } - + void IndirectSqw::setup() { } - void IndirectSqw::run() + bool IndirectSqw::validate() { - QString rebinString = m_uiForm.sqw_leQLow->text() + "," + m_uiForm.sqw_leQWidth->text() + - "," + m_uiForm.sqw_leQHigh->text(); - - QString wsname; - if(m_uiForm.sqw_dsSampleInput->isFileSelectorVisible()) - { - // Load Nexus file into workspace - QString filename = m_uiForm.sqw_dsSampleInput->getFullFilePath(); - QFileInfo fi(filename); - wsname = fi.baseName(); - - if(!loadFile(filename, wsname)) - { - emit showMessageBox("Could not load Nexus file"); - } - } - else - { - // Get the workspace - wsname = m_uiForm.sqw_dsSampleInput->getCurrentDataName(); - } - - QString pyInput = "from mantid.simpleapi import *\n"; + bool valid = true; - // Create output name before rebinning - pyInput += "sqwInput = '" + wsname + "'\n"; - pyInput += "sqwOutput = sqwInput[:-3] + 'sqw'\n"; + UserInputValidator uiv; + uiv.checkDataSelectorIsValid("Sample", m_uiForm.sqw_dsSampleInput); + QString error = uiv.generateErrorMessage(); - if ( m_uiForm.sqw_ckRebinE->isChecked() ) + if(!error.isEmpty()) { - QString eRebinString = m_uiForm.sqw_leELow->text() + "," + m_uiForm.sqw_leEWidth->text() + - "," + m_uiForm.sqw_leEHigh->text(); - - pyInput += "Rebin(InputWorkspace=sqwInput, OutputWorkspace=sqwInput+'_r', Params='" + eRebinString + "')\n" - "sqwInput += '_r'\n"; + valid = false; + emit showMessageBox(error); } - pyInput += - "efixed = " + m_uiForm.leEfixed->text() + "\n" - "rebin = '" + rebinString + "'\n"; + if(m_uiForm.sqw_ckRebinE->isChecked() && !validateEnergyRebin()) + valid = false; - QString rebinType = m_uiForm.sqw_cbRebinType->currentText(); - if(rebinType == "Centre (SofQW)") - pyInput += "SofQW(InputWorkspace=sqwInput, OutputWorkspace=sqwOutput, QAxisBinning=rebin, EMode='Indirect', EFixed=efixed)\n"; - else if(rebinType == "Parallelepiped (SofQW2)") - pyInput += "SofQW2(InputWorkspace=sqwInput, OutputWorkspace=sqwOutput, QAxisBinning=rebin, EMode='Indirect', EFixed=efixed)\n"; - else if(rebinType == "Parallelepiped/Fractional Area (SofQW3)") - pyInput += "SofQW3(InputWorkspace=sqwInput, OutputWorkspace=sqwOutput, QAxisBinning=rebin, EMode='Indirect', EFixed=efixed)\n"; + if(!validateQRebin()) + valid = false; - pyInput += "AddSampleLog(Workspace=sqwOutput, LogName='rebin_type', LogType='String', LogText='"+rebinType+"')\n"; + return valid; + } - if ( m_uiForm.sqw_ckSave->isChecked() ) - { - pyInput += "SaveNexus(InputWorkspace=sqwOutput, Filename=sqwOutput+'.nxs')\n"; + /** + * Validates the Q rebinning parameters. + * + * @returns If the rebinning is valid + */ + bool IndirectSqw::validateQRebin() + { + bool valid = true; - if (m_uiForm.sqw_ckVerbose->isChecked()) - { - pyInput += "logger.notice(\"Resolution file saved to default save directory.\")\n"; - } + if ( m_uiForm.sqw_leQLow->text() == "" ) + { + valid = false; + m_uiForm.sqw_valQLow->setText("*"); + } + else + { + m_uiForm.sqw_valQLow->setText(" "); } - if ( m_uiForm.sqw_cbPlotType->currentText() == "Contour" ) + if ( m_uiForm.sqw_leQWidth->text() == "" ) { - pyInput += "importMatrixWorkspace(sqwOutput).plotGraph2D()\n"; + valid = false; + m_uiForm.sqw_valQWidth->setText("*"); + } + else + { + m_uiForm.sqw_valQWidth->setText(" "); } - else if ( m_uiForm.sqw_cbPlotType->currentText() == "Spectra" ) + if ( m_uiForm.sqw_leQHigh->text() == "" ) { - pyInput += - "nspec = mtd[sqwOutput].getNumberHistograms()\n" - "plotSpectrum(sqwOutput, range(0, nspec))\n"; + valid = false; + m_uiForm.sqw_valQHigh->setText("*"); + } + else + { + m_uiForm.sqw_valQHigh->setText(" "); } - QString pyOutput = m_pythonRunner.runPythonCode(pyInput).trimmed(); + return valid; } - bool IndirectSqw::validate() + /** + * Validates the energy rebinning parameters. + * + * @returns If the rebinning is valid + */ + bool IndirectSqw::validateEnergyRebin() { bool valid = true; - UserInputValidator uiv; - uiv.checkDataSelectorIsValid("Sample", m_uiForm.sqw_dsSampleInput); - QString error = uiv.generateErrorMessage(); - - if (!error.isEmpty()) + if ( m_uiForm.sqw_leELow->text() == "" ) { valid = false; - emit showMessageBox(error); + m_uiForm.sqw_valELow->setText("*"); } - - if ( m_uiForm.sqw_ckRebinE->isChecked() ) + else { - if ( m_uiForm.sqw_leELow->text() == "" ) - { - valid = false; - m_uiForm.sqw_valELow->setText("*"); - } - else - { - m_uiForm.sqw_valELow->setText(" "); - } - - if ( m_uiForm.sqw_leEWidth->text() == "" ) - { - valid = false; - m_uiForm.sqw_valEWidth->setText("*"); - } - else - { - m_uiForm.sqw_valEWidth->setText(" "); - } - - if ( m_uiForm.sqw_leEHigh->text() == "" ) - { - valid = false; - m_uiForm.sqw_valEHigh->setText("*"); - } - else - { - m_uiForm.sqw_valEHigh->setText(" "); - } + m_uiForm.sqw_valELow->setText(" "); } - if ( m_uiForm.sqw_leQLow->text() == "" ) + if ( m_uiForm.sqw_leEWidth->text() == "" ) { valid = false; - m_uiForm.sqw_valQLow->setText("*"); + m_uiForm.sqw_valEWidth->setText("*"); } else { - m_uiForm.sqw_valQLow->setText(" "); + m_uiForm.sqw_valEWidth->setText(" "); } - if ( m_uiForm.sqw_leQWidth->text() == "" ) + if ( m_uiForm.sqw_leEHigh->text() == "" ) { valid = false; - m_uiForm.sqw_valQWidth->setText("*"); + m_uiForm.sqw_valEHigh->setText("*"); } else { - m_uiForm.sqw_valQWidth->setText(" "); + m_uiForm.sqw_valEHigh->setText(" "); } - if ( m_uiForm.sqw_leQHigh->text() == "" ) + return valid; + } + + void IndirectSqw::run() + { + QString sampleWsName = m_uiForm.sqw_dsSampleInput->getCurrentDataName(); + QString sqwWsName = sampleWsName.left(sampleWsName.length() - 4) + "_sqw"; + QString eRebinWsName = sampleWsName.left(sampleWsName.length() - 4) + "_r"; + + QString rebinString = m_uiForm.sqw_leQLow->text() + "," + m_uiForm.sqw_leQWidth->text() + + "," + m_uiForm.sqw_leQHigh->text(); + + // Rebin in energy + bool rebinInEnergy = m_uiForm.sqw_ckRebinE->isChecked(); + if(rebinInEnergy) { - valid = false; - m_uiForm.sqw_valQHigh->setText("*"); + QString eRebinString = m_uiForm.sqw_leELow->text() + "," + m_uiForm.sqw_leEWidth->text() + + "," + m_uiForm.sqw_leEHigh->text(); + + IAlgorithm_sptr energyRebinAlg = AlgorithmManager::Instance().create("Rebin"); + energyRebinAlg->initialize(); + + energyRebinAlg->setProperty("InputWorkspace", sampleWsName.toStdString()); + energyRebinAlg->setProperty("OutputWorkspace", eRebinWsName.toStdString()); + energyRebinAlg->setProperty("Params", eRebinString.toStdString()); + + m_batchAlgoRunner->addAlgorithm(energyRebinAlg); } + + // Get correct S(Q, w) algorithm + QString efixed = m_uiForm.leEfixed->text(); + + IAlgorithm_sptr sqwAlg; + QString rebinType = m_uiForm.sqw_cbRebinType->currentText(); + + if(rebinType == "Centre (SofQW)") + sqwAlg = AlgorithmManager::Instance().create("SofQW"); + else if(rebinType == "Parallelepiped (SofQW2)") + sqwAlg = AlgorithmManager::Instance().create("SofQW2"); + else if(rebinType == "Parallelepiped/Fractional Area (SofQW3)") + sqwAlg = AlgorithmManager::Instance().create("SofQW3"); + + // S(Q, w) algorithm + sqwAlg->initialize(); + + BatchAlgorithmRunner::AlgorithmRuntimeProps sqwInputProps; + if(rebinInEnergy) + sqwInputProps["InputWorkspace"] = eRebinWsName.toStdString(); else + sqwInputProps["InputWorkspace"] = sampleWsName.toStdString(); + + sqwAlg->setProperty("OutputWorkspace", sqwWsName.toStdString()); + sqwAlg->setProperty("QAxisBinning", rebinString.toStdString()); + sqwAlg->setProperty("EMode", "Indirect"); + sqwAlg->setProperty("EFixed", efixed.toStdString()); + + m_batchAlgoRunner->addAlgorithm(sqwAlg, sqwInputProps); + + // Add sample log for S(Q, w) algorithm used + IAlgorithm_sptr sampleLogAlg = AlgorithmManager::Instance().create("AddSampleLog"); + sampleLogAlg->initialize(); + + sampleLogAlg->setProperty("LogName", "rebin_type"); + sampleLogAlg->setProperty("LogType", "String"); + sampleLogAlg->setProperty("LogText", rebinType.toStdString()); + + BatchAlgorithmRunner::AlgorithmRuntimeProps inputToAddSampleLogProps; + inputToAddSampleLogProps["Workspace"] = sqwWsName.toStdString(); + + m_batchAlgoRunner->addAlgorithm(sampleLogAlg, inputToAddSampleLogProps); + + // Save S(Q, w) workspace + if(m_uiForm.sqw_ckSave->isChecked()) { - m_uiForm.sqw_valQHigh->setText(" "); + QString saveFilename = sqwWsName + ".nxs"; + + IAlgorithm_sptr saveNexusAlg = AlgorithmManager::Instance().create("SaveNexus"); + saveNexusAlg->initialize(); + + saveNexusAlg->setProperty("Filename", saveFilename.toStdString()); + + BatchAlgorithmRunner::AlgorithmRuntimeProps inputToSaveNexusProps; + inputToSaveNexusProps["InputWorkspace"] = sqwWsName.toStdString(); + + m_batchAlgoRunner->addAlgorithm(saveNexusAlg, inputToSaveNexusProps); } - return valid; + m_batchAlgoRunner->executeBatch(); + } + + /** + * Handles plotting the S(Q, w) workspace when the algorithm chain is finished. + * + * @param error If the algorithm chain failed + */ + void IndirectSqw::sqwAlgDone(bool error) + { + if(error) + return; + + // Get the workspace name + QString sampleWsName = m_uiForm.sqw_dsSampleInput->getCurrentDataName(); + QString sqwWsName = sampleWsName.left(sampleWsName.length() - 4) + "_sqw"; + + QString pyInput = "sqw_ws = '" + sqwWsName + "'\n"; + QString plotType = m_uiForm.sqw_cbPlotType->currentText(); + + if(plotType == "Contour") + { + pyInput += "plot2D(sqw_ws)\n"; + } + + else if(plotType == "Spectra") + { + pyInput += + "n_spec = mtd[sqw_ws].getNumberHistograms()\n" + "plotSpectrum(sqw_ws, range(0, n_spec))\n"; + } + + m_pythonRunner.runPythonCode(pyInput).trimmed(); } /** @@ -199,11 +272,14 @@ namespace CustomInterfaces * * @param state :: True to enable RiE UI, false to disable */ - void IndirectSqw::sOfQwRebinE(bool state) + void IndirectSqw::energyRebinToggle(bool state) { QString val; - if ( state ) val = "*"; - else val = " "; + if(state) + val = "*"; + else + val = " "; + m_uiForm.sqw_leELow->setEnabled(state); m_uiForm.sqw_leEWidth->setEnabled(state); m_uiForm.sqw_leEHigh->setEnabled(state); @@ -223,32 +299,26 @@ namespace CustomInterfaces * * Creates a colour 2D plot of the data */ - void IndirectSqw::sOfQwPlotInput() + void IndirectSqw::plotContour() { - QString pyInput = "from mantid.simpleapi import *\n" - "from mantidplot import *\n"; - - if (m_uiForm.sqw_dsSampleInput->isValid()) + if(m_uiForm.sqw_dsSampleInput->isValid()) { - if(m_uiForm.sqw_dsSampleInput->isFileSelectorVisible()) - { - //Load file into workspacwe - pyInput += "filename = r'" + m_uiForm.sqw_dsSampleInput->getFullFilePath() + "'\n" - "(dir, file) = os.path.split(filename)\n" - "(sqwInput, ext) = os.path.splitext(file)\n" - "LoadNexus(Filename=filename, OutputWorkspace=sqwInput)\n"; - } - else - { - //Use existing workspace - pyInput += "sqwInput = '" + m_uiForm.sqw_dsSampleInput->getCurrentDataName() + "'\n"; - } - - pyInput += "ConvertSpectrumAxis(InputWorkspace=sqwInput, OutputWorkspace=sqwInput[:-4]+'_rqw', Target='ElasticQ', EMode='Indirect')\n" - "ws = importMatrixWorkspace(sqwInput[:-4]+'_rqw')\n" - "ws.plotGraph2D()\n"; - - QString pyOutput = m_pythonRunner.runPythonCode(pyInput).trimmed(); + QString sampleWsName = m_uiForm.sqw_dsSampleInput->getCurrentDataName(); + + QString convertedWsName = sampleWsName.left(sampleWsName.length() - 4) + "_rqw"; + + IAlgorithm_sptr convertSpecAlg = AlgorithmManager::Instance().create("ConvertSpectrumAxis"); + convertSpecAlg->initialize(); + + convertSpecAlg->setProperty("InputWorkspace", sampleWsName.toStdString()); + convertSpecAlg->setProperty("OutputWorkspace", convertedWsName.toStdString()); + convertSpecAlg->setProperty("Target", "ElasticQ"); + convertSpecAlg->setProperty("EMode", "Indirect"); + + convertSpecAlg->execute(); + + QString pyInput = "plot2D('" + convertedWsName + "')\n"; + m_pythonRunner.runPythonCode(pyInput).trimmed(); } else { diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/QReflTableModel.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/QReflTableModel.cpp index afd0cee4c9cad15a510e9b57d94a7b06999ea02a..b6d0412a07eb077ae36bd1435c5811c118fb6b39 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/src/QReflTableModel.cpp +++ b/Code/Mantid/MantidQt/CustomInterfaces/src/QReflTableModel.cpp @@ -59,7 +59,7 @@ namespace MantidQt void QReflTableModel::invalidateDataCache(const int row) const { //If the row is in the cache, invalidate the cache. - if(row == m_dataCachePeakIndex) + if(row == m_dataCachePeakIndex || row == -1) m_dataCachePeakIndex = -1; } @@ -137,7 +137,10 @@ namespace MantidQt { if (role == Qt::TextAlignmentRole) { - return Qt::AlignRight; + if(index.column() == COL_OPTIONS) + return Qt::AlignLeft; + else + return Qt::AlignRight; } else if( role != Qt::DisplayRole && role != Qt::EditRole) { @@ -218,5 +221,51 @@ namespace MantidQt return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; } + /** + Insert the given number of rows at the specified position + @param row : The row to insert before + @param count : The number of rows to insert + @param parent : The parent index + */ + bool QReflTableModel::insertRows(int row, int count, const QModelIndex& parent) + { + if(count < 1) + return true; + + if(row < 0) + return false; + + beginInsertRows(parent, row, row + count - 1); + for(int i = 0; i < count; ++i) + m_tWS->insertRow(row + i); + endInsertRows(); + + invalidateDataCache(-1); + return true; + } + + /** + Remove the given number of rows from the specified position + @param row : The row index to remove from + @param count : The number of rows to remove + @param parent : The parent index + */ + bool QReflTableModel::removeRows(int row, int count, const QModelIndex& parent) + { + if(count < 1) + return true; + + if(row < 0) + return false; + + beginRemoveRows(parent, row, row + count - 1); + for(int i = 0; i < count; ++i) + m_tWS->removeRow(row); + endRemoveRows(); + + invalidateDataCache(-1); + return true; + } + } // namespace CustomInterfaces } // namespace Mantid diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/QtReflMainView.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/QtReflMainView.cpp index 9d16ea5a4f214c68eeee7d6b0ee66d714c0c0269..1b89cde69a1fa697f16121cde44f5d20ca1ae6e3 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/src/QtReflMainView.cpp +++ b/Code/Mantid/MantidQt/CustomInterfaces/src/QtReflMainView.cpp @@ -1,6 +1,7 @@ #include "MantidQtCustomInterfaces/QtReflMainView.h" #include "MantidQtCustomInterfaces/QReflTableModel.h" #include "MantidQtCustomInterfaces/ReflMainViewPresenter.h" +#include "MantidQtMantidWidgets/HintingLineEditFactory.h" #include "MantidAPI/ITableWorkspace.h" #include "MantidKernel/ConfigService.h" #include <qinputdialog.h> @@ -17,7 +18,7 @@ namespace MantidQt //---------------------------------------------------------------------------------------------- /** Constructor */ - QtReflMainView::QtReflMainView(QWidget *parent) : UserSubWindow(parent) + QtReflMainView::QtReflMainView(QWidget *parent) : UserSubWindow(parent), m_openMap(new QSignalMapper(this)) { } @@ -34,27 +35,18 @@ namespace MantidQt void QtReflMainView::initLayout() { ui.setupUi(this); - ui.workspaceSelector->refresh(); + + ui.buttonProcess->setDefaultAction(ui.actionProcess); //Expand the process runs column at the expense of the search column ui.splitterTables->setStretchFactor(0, 0); ui.splitterTables->setStretchFactor(1, 1); - //Zero out the progress bar - ui.progressBar->setRange(0, 100); - ui.progressBar->setValue(0); - //Allow rows to be reordered ui.viewTable->verticalHeader()->setMovable(true); - connect(ui.workspaceSelector, SIGNAL(activated(QString)), this, SLOT(setModel(QString))); - connect(ui.actionSaveTable, SIGNAL(triggered()), this, SLOT(actionSave())); - connect(ui.actionSaveTableAs, SIGNAL(triggered()), this, SLOT(actionSaveAs())); - connect(ui.actionNewTable, SIGNAL(triggered()), this, SLOT(actionNewTable())); - connect(ui.actionAddRow, SIGNAL(triggered()), this, SLOT(actionAddRow())); - connect(ui.actionDeleteRow, SIGNAL(triggered()), this, SLOT(actionDeleteRow())); - connect(ui.actionProcess, SIGNAL(triggered()), this, SLOT(actionProcess())); - connect(ui.actionGroupRows, SIGNAL(triggered()), this, SLOT(actionGroupRows())); + //Custom context menu for table + connect(ui.viewTable, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showContextMenu(const QPoint&))); //Finally, create a presenter to do the thinking for us m_presenter = boost::shared_ptr<IReflPresenter>(new ReflMainViewPresenter(this)); @@ -74,16 +66,40 @@ namespace MantidQt Set a new model in the tableview @param model : the model to be attached to the tableview */ - void QtReflMainView::showTable(ITableWorkspace_sptr model) + void QtReflMainView::showTable(QReflTableModel_sptr model) { - ui.viewTable->setModel(new QReflTableModel(model)); + m_model = model; + //So we can notify the presenter when the user updates the table + connect(m_model.get(), SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(tableUpdated(const QModelIndex&, const QModelIndex&))); + ui.viewTable->setModel(m_model.get()); ui.viewTable->resizeColumnsToContents(); } + /** + Set the list of tables the user is offered to open + @param tables : the names of the tables in the ADS + */ + void QtReflMainView::setTableList(const std::set<std::string>& tables) + { + ui.menuOpenTable->clear(); + + for(auto it = tables.begin(); it != tables.end(); ++it) + { + QAction* openTable = ui.menuOpenTable->addAction(QString::fromStdString(*it)); + openTable->setIcon(QIcon("://worksheet.png")); + + //Map this action to the table name + m_openMap->setMapping(openTable, QString::fromStdString(*it)); + + connect(openTable, SIGNAL(triggered()), m_openMap, SLOT(map())); + connect(m_openMap, SIGNAL(mapped(QString)), this, SLOT(setModel(QString))); + } + } + /** This slot notifies the presenter that the "save" button has been pressed */ - void QtReflMainView::actionSave() + void QtReflMainView::on_actionSaveTable_triggered() { m_presenter->notify(SaveFlag); } @@ -91,23 +107,31 @@ namespace MantidQt /** This slot notifies the presenter that the "save as" button has been pressed */ - void QtReflMainView::actionSaveAs() + void QtReflMainView::on_actionSaveTableAs_triggered() { m_presenter->notify(SaveAsFlag); } /** - This slot notifies the presenter that the "add row" button has been pressed + This slot notifies the presenter that the "append row" button has been pressed + */ + void QtReflMainView::on_actionAppendRow_triggered() + { + m_presenter->notify(AppendRowFlag); + } + + /** + This slot notifies the presenter that the "prepend row" button has been pressed */ - void QtReflMainView::actionAddRow() + void QtReflMainView::on_actionPrependRow_triggered() { - m_presenter->notify(AddRowFlag); + m_presenter->notify(PrependRowFlag); } /** This slot notifies the presenter that the "delete" button has been pressed */ - void QtReflMainView::actionDeleteRow() + void QtReflMainView::on_actionDeleteRow_triggered() { m_presenter->notify(DeleteRowFlag); } @@ -115,7 +139,7 @@ namespace MantidQt /** This slot notifies the presenter that the "process" button has been pressed */ - void QtReflMainView::actionProcess() + void QtReflMainView::on_actionProcess_triggered() { m_presenter->notify(ProcessFlag); } @@ -123,19 +147,65 @@ namespace MantidQt /** This slot notifies the presenter that the "group rows" button has been pressed */ - void QtReflMainView::actionGroupRows() + void QtReflMainView::on_actionGroupRows_triggered() { m_presenter->notify(GroupRowsFlag); } /** - This slot notifies the presenter that the "new table" button as been pressed + This slot notifies the presenter that the "new table" button has been pressed */ - void QtReflMainView::actionNewTable() + void QtReflMainView::on_actionNewTable_triggered() { m_presenter->notify(NewTableFlag); } + /** + This slot notifies the presenter that the "expand selection" button has been pressed + */ + void QtReflMainView::on_actionExpandSelection_triggered() + { + m_presenter->notify(ExpandSelectionFlag); + } + + /** + This slot notifies the presenter that the "options..." button has been pressed + */ + void QtReflMainView::on_actionOptionsDialog_triggered() + { + m_presenter->notify(OptionsDialogFlag); + } + + /** + This slot notifies the presenter that the table has been updated/changed by the user + */ + void QtReflMainView::tableUpdated(const QModelIndex& topLeft, const QModelIndex& bottomRight) + { + Q_UNUSED(topLeft); + Q_UNUSED(bottomRight); + m_presenter->notify(TableUpdatedFlag); + } + + /** + This slot is triggered when the user right clicks on the table + @param pos : The position of the right click within the table + */ + void QtReflMainView::showContextMenu(const QPoint& pos) + { + //parent widget takes ownership of QMenu + QMenu* menu = new QMenu(this); + menu->addAction(ui.actionProcess); + menu->addAction(ui.actionExpandSelection); + menu->addSeparator(); + menu->addAction(ui.actionPrependRow); + menu->addAction(ui.actionAppendRow); + menu->addAction(ui.actionGroupRows); + menu->addSeparator(); + menu->addAction(ui.actionDeleteRow); + + menu->popup(ui.viewTable->viewport()->mapToGlobal(pos)); + } + /** Show an information dialog @param prompt : The prompt to appear on the dialog @@ -217,6 +287,19 @@ namespace MantidQt ui.progressBar->setValue(progress); } + /** + Set which rows are selected + @param rows : The set of rows to select + */ + void QtReflMainView::setSelection(const std::set<int>& rows) + { + ui.viewTable->clearSelection(); + auto selectionModel = ui.viewTable->selectionModel(); + + for(auto row = rows.begin(); row != rows.end(); ++row) + selectionModel->select(ui.viewTable->model()->index((*row), 0), QItemSelectionModel::Select | QItemSelectionModel::Rows); + } + /** Set the list of available instruments to search and process for @param instruments : The list of instruments available @@ -239,6 +322,15 @@ namespace MantidQt ui.comboProcessInstrument->setCurrentIndex(index); } + /** + Set the strategy used for generating hints for the autocompletion in the options column. + @param hintStrategy The hinting strategy to use + */ + void QtReflMainView::setOptionsHintStrategy(HintStrategy* hintStrategy) + { + ui.viewTable->setItemDelegateForColumn(ReflMainViewPresenter::COL_OPTIONS, new HintingLineEditFactory(hintStrategy)); + } + /** Get the selected instrument for searching @returns the selected instrument to search for @@ -261,16 +353,14 @@ namespace MantidQt Get the indices of the highlighted rows @returns a vector of unsigned ints contianing the highlighted row numbers */ - std::vector<size_t> QtReflMainView::getSelectedRowIndexes() const + std::set<int> QtReflMainView::getSelectedRows() const { auto selectedRows = ui.viewTable->selectionModel()->selectedRows(); - //auto selectedType = ui.viewTable->selectionModel()->; - std::vector<size_t> rowIndexes; - for (auto idx = selectedRows.begin(); idx != selectedRows.end(); ++idx) - { - rowIndexes.push_back(idx->row()); - } - return rowIndexes; + std::set<int> rows; + for(auto it = selectedRows.begin(); it != selectedRows.end(); ++it) + rows.insert(it->row()); + + return rows; } /** @@ -282,5 +372,14 @@ namespace MantidQt return m_toOpen; } + /** + Get a pointer to the presenter that's currently controlling this view. + @returns A pointer to the presenter + */ + boost::shared_ptr<IReflPresenter> QtReflMainView::getPresenter() const + { + return m_presenter; + } + } // namespace CustomInterfaces } // namespace Mantid diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/QtReflOptionsDialog.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/QtReflOptionsDialog.cpp new file mode 100644 index 0000000000000000000000000000000000000000..501c461d1e06d0d9b6fab8f0c5303c4bf4cc2add --- /dev/null +++ b/Code/Mantid/MantidQt/CustomInterfaces/src/QtReflOptionsDialog.cpp @@ -0,0 +1,107 @@ +#include "MantidQtCustomInterfaces/QtReflOptionsDialog.h" +#include "MantidQtCustomInterfaces/QtReflMainView.h" + +namespace MantidQt +{ + namespace CustomInterfaces + { + /** Constructor */ + QtReflOptionsDialog::QtReflOptionsDialog(ReflMainView* view, boost::shared_ptr<IReflPresenter> presenter) : + QDialog(dynamic_cast<QtReflMainView*>(view)), + m_presenter(presenter) + { + initLayout(); + initBindings(); + loadOptions(); + } + + /** Destructor */ + QtReflOptionsDialog::~QtReflOptionsDialog() + { + } + + /** Initialise the ui */ + void QtReflOptionsDialog::initLayout() + { + ui.setupUi(this); + connect(ui.buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked()), this, SLOT(saveOptions())); + } + + /** Bind options to their widgets */ + void QtReflOptionsDialog::initBindings() + { + m_bindings.clear(); + + //Check all the widgets for the "reflOptionName" property. + //If it exists, bind the named option to that widget. + QList<QWidget*> widgets = findChildren<QWidget*>(); + for(auto it = widgets.begin(); it != widgets.end(); ++it) + { + QVariant binding = (*it)->property("reflOptionName"); + if(binding.isValid()) + m_bindings[binding.toString().toStdString()] = (*it)->objectName(); + } + } + + /** This slot saves the currently configured options to the presenter */ + void QtReflOptionsDialog::saveOptions() + { + std::map<std::string,QVariant> options = m_presenter->options(); + + //Iterate through all our bound widgets, pushing their value into the options map + for(auto it = m_bindings.begin(); it != m_bindings.end(); ++it) + { + QString widgetName = it->second; + if(widgetName.isEmpty()) + continue; + + QCheckBox* checkbox = findChild<QCheckBox*>(widgetName); + if(checkbox) + { + options[it->first] = checkbox->isChecked(); + continue; + } + + QSpinBox* spinbox = findChild<QSpinBox*>(widgetName); + if(spinbox) + { + options[it->first] = spinbox->value(); + continue; + } + } + + //Update the presenter's options + m_presenter->setOptions(options); + } + + /** This slot sets the ui to match the presenter's options */ + void QtReflOptionsDialog::loadOptions() + { + std::map<std::string,QVariant> options = m_presenter->options(); + + //Set the values from the options + for(auto it = options.begin(); it != options.end(); ++it) + { + QString widgetName = m_bindings[it->first]; + if(widgetName.isEmpty()) + continue; + + QCheckBox* checkbox = findChild<QCheckBox*>(widgetName); + if(checkbox) + { + checkbox->setChecked(it->second.toBool()); + continue; + } + + QSpinBox* spinbox = findChild<QSpinBox*>(widgetName); + if(spinbox) + { + spinbox->setValue(it->second.toInt()); + continue; + } + } + } + + } //CustomInterfaces +} //MantidQt + diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/ReflMainViewPresenter.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/ReflMainViewPresenter.cpp index fa0b58a7fc2740307b6362b03074ddefe99e6b2b..39638075735ccac36ca1602f45dac80b61db529d 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/src/ReflMainViewPresenter.cpp +++ b/Code/Mantid/MantidQt/CustomInterfaces/src/ReflMainViewPresenter.cpp @@ -7,18 +7,29 @@ #include "MantidKernel/TimeSeriesProperty.h" #include "MantidKernel/Utils.h" #include "MantidQtCustomInterfaces/ReflMainView.h" +#include "MantidQtCustomInterfaces/QReflTableModel.h" +#include "MantidQtCustomInterfaces/QtReflOptionsDialog.h" +#include "MantidQtMantidWidgets/AlgorithmHintStrategy.h" #include <boost/regex.hpp> #include <boost/tokenizer.hpp> +#include <QSettings> + using namespace Mantid::API; using namespace Mantid::Geometry; using namespace Mantid::Kernel; +using namespace MantidQt::MantidWidgets; namespace { - void checkValidModel(ITableWorkspace_sptr model) + const QString ReflSettingsGroup = "Mantid/CustomInterfaces/ISISReflectometry"; + + void validateModel(ITableWorkspace_sptr model) { + if(!model) + throw std::runtime_error("Null pointer"); + if(model->columnCount() != 9) throw std::runtime_error("Selected table has the incorrect number of columns (9) to be used as a reflectometry table."); @@ -40,6 +51,19 @@ namespace } } + bool isValidModel(Workspace_sptr model) + { + try + { + validateModel(boost::dynamic_pointer_cast<ITableWorkspace>(model)); + } + catch(...) + { + return false; + } + return true; + } + ITableWorkspace_sptr createWorkspace() { ITableWorkspace_sptr ws = WorkspaceFactory::Instance().createTable(); @@ -65,14 +89,33 @@ namespace return ws; } + + ITableWorkspace_sptr createDefaultWorkspace() + { + //Create a blank workspace with one line and set the scale column to 1 + auto ws = createWorkspace(); + ws->appendRow(); + ws->Double(0, MantidQt::CustomInterfaces::ReflMainViewPresenter::COL_SCALE) = 1.0; + return ws; + } } namespace MantidQt { namespace CustomInterfaces { - ReflMainViewPresenter::ReflMainViewPresenter(ReflMainView* view): m_view(view) + ReflMainViewPresenter::ReflMainViewPresenter(ReflMainView* view): + m_view(view), + m_tableDirty(false), + m_addObserver(*this, &ReflMainViewPresenter::handleAddEvent), + m_remObserver(*this, &ReflMainViewPresenter::handleRemEvent), + m_clearObserver(*this, &ReflMainViewPresenter::handleClearEvent), + m_renameObserver(*this, &ReflMainViewPresenter::handleRenameEvent), + m_replaceObserver(*this, &ReflMainViewPresenter::handleReplaceEvent) { + //Initialise options + initOptions(); + //Set up the instrument selectors std::vector<std::string> instruments; instruments.push_back("INTER"); @@ -87,34 +130,78 @@ namespace MantidQt else m_view->setInstrumentList(instruments, "INTER"); + //Populate an initial list of valid tables to open, and subscribe to the ADS to keep it up to date + Mantid::API::AnalysisDataServiceImpl& ads = Mantid::API::AnalysisDataService::Instance(); + + std::set<std::string> items; + items = ads.getObjectNames(); + for(auto it = items.begin(); it != items.end(); ++it ) + { + const std::string name = *it; + Workspace_sptr ws = ads.retrieve(name); + + if(isValidModel(ws)) + m_workspaceList.insert(name); + } + + ads.notificationCenter.addObserver(m_addObserver); + ads.notificationCenter.addObserver(m_remObserver); + ads.notificationCenter.addObserver(m_renameObserver); + ads.notificationCenter.addObserver(m_clearObserver); + ads.notificationCenter.addObserver(m_replaceObserver); + + if(m_view) + m_view->setTableList(m_workspaceList); + + //Provide autocompletion hints for the options column. We use the algorithm's properties minus + //those we blacklist. We blacklist any useless properties or ones we're handling that the user + //should'nt touch. + IAlgorithm_sptr alg = AlgorithmManager::Instance().create("ReflectometryReductionOneAuto"); + std::set<std::string> blacklist; + blacklist.insert("ThetaIn"); + blacklist.insert("ThetaOut"); + blacklist.insert("InputWorkspace"); + blacklist.insert("OutputWorkspace"); + blacklist.insert("OutputWorkspaceWavelength"); + blacklist.insert("FirstTransmissionRun"); + blacklist.insert("SecondTransmissionRun"); + m_view->setOptionsHintStrategy(new AlgorithmHintStrategy(alg, blacklist)); + + //Start with a blank table newTable(); } ReflMainViewPresenter::~ReflMainViewPresenter() { + Mantid::API::AnalysisDataServiceImpl& ads = Mantid::API::AnalysisDataService::Instance(); + ads.notificationCenter.removeObserver(m_addObserver); + ads.notificationCenter.removeObserver(m_remObserver); + ads.notificationCenter.removeObserver(m_clearObserver); + ads.notificationCenter.removeObserver(m_renameObserver); + ads.notificationCenter.removeObserver(m_replaceObserver); } /** * Finds the first unused group id */ - int ReflMainViewPresenter::getUnusedGroup(std::vector<size_t> ignoredRows) const + int ReflMainViewPresenter::getUnusedGroup(std::set<int> ignoredRows) const { - std::vector<int> usedGroups; + std::set<int> usedGroups; //Scan through all the rows, working out which group ids are used - for(size_t idx = 0; idx < m_model->rowCount(); ++idx) + for(int idx = 0; idx < m_model->rowCount(); ++idx) { - if(std::find(ignoredRows.begin(), ignoredRows.end(), idx) != ignoredRows.end()) + if(ignoredRows.find(idx) != ignoredRows.end()) continue; //This is an unselected row. Add it to the list of used group ids - usedGroups.push_back(m_model->Int(idx, COL_GROUP)); + usedGroups.insert(m_model->data(m_model->index(idx, COL_GROUP)).toInt()); } int groupId = 0; //While the group id is one of the used ones, increment it by 1 - while(std::find(usedGroups.begin(), usedGroups.end(), groupId) != usedGroups.end()) + while(usedGroups.find(groupId) != usedGroups.end()) groupId++; return groupId; @@ -123,6 +210,7 @@ namespace MantidQt /** Parses a string in the format `a = 1,b=2, c = "1,2,3,4", d = 5.0, e='a,b,c'` into a map of key/value pairs @param str The input string + @throws std::runtime_error on an invalid input string */ std::map<std::string,std::string> ReflMainViewPresenter::parseKeyValueString(const std::string& str) { @@ -149,8 +237,16 @@ namespace MantidQt boost::trim(key); boost::trim(value); + if(key.empty() || value.empty()) + throw std::runtime_error("Invalid key value pair, '" + *it + "'"); + + kvp[key] = value; } + else + { + throw std::runtime_error("Invalid key value pair, '" + *it + "'"); + } } return kvp; } @@ -166,33 +262,54 @@ namespace MantidQt return; } - std::vector<size_t> rows = m_view->getSelectedRowIndexes(); - if(rows.size() == 0) + std::set<int> rows = m_view->getSelectedRows(); + if(rows.empty()) { - //Does the user want to abort? - if(!m_view->askUserYesNo("This will process all rows in the table. Continue?","Process all rows?")) - return; + if(m_options["WarnProcessAll"].toBool()) + { + //Does the user want to abort? + if(!m_view->askUserYesNo("This will process all rows in the table. Continue?","Process all rows?")) + return; + } //They want to process all rows, so populate rows with every index in the model - for(size_t idx = 0; idx < m_model->rowCount(); ++idx) - rows.push_back(idx); + for(int idx = 0; idx < m_model->rowCount(); ++idx) + rows.insert(idx); + } + + //Map group numbers to the set of rows in that group we want to process + std::map<int,std::set<int> > groups; + for(auto it = rows.begin(); it != rows.end(); ++it) + groups[m_model->data(m_model->index(*it, COL_GROUP)).toInt()].insert(*it); + + //Check each group and warn if we're only partially processing it + for(auto gIt = groups.begin(); gIt != groups.end(); ++gIt) + { + const int& groupId = gIt->first; + const std::set<int>& groupRows = gIt->second; + //Are we only partially processing a group? + if(groupRows.size() < numRowsInGroup(gIt->first) && m_options["WarnProcessPartialGroup"].toBool()) + { + std::stringstream err; + err << "You have only selected " << groupRows.size() << " of the "; + err << numRowsInGroup(groupId) << " rows in group " << groupId << "."; + err << " Are you sure you want to continue?"; + if(!m_view->askUserYesNo(err.str(), "Continue Processing?")) + return; + } } - //Maps group numbers to the list of rows in that group we want to process - std::map<int,std::vector<size_t> > groups; + //Validate the rows for(auto it = rows.begin(); it != rows.end(); ++it) { try { validateRow(*it); autofillRow(*it); - - const int group = m_model->Int(*it, COL_GROUP); - groups[group].push_back(*it); } catch(std::exception& ex) { - const std::string rowNo = Mantid::Kernel::Strings::toString<size_t>(*it + 1); + const std::string rowNo = Mantid::Kernel::Strings::toString<int>(*it + 1); m_view->giveUserCritical("Error found in row " + rowNo + ":\n" + ex.what(), "Error"); return; } @@ -206,19 +323,19 @@ namespace MantidQt for(auto gIt = groups.begin(); gIt != groups.end(); ++gIt) { - const std::vector<size_t> groupRows = gIt->second; + const std::set<int> groupRows = gIt->second; - //Process each row individually + //Reduce each row for(auto rIt = groupRows.begin(); rIt != groupRows.end(); ++rIt) { try { - processRow(*rIt); + reduceRow(*rIt); m_view->setProgress(++progress); } catch(std::exception& ex) { - const std::string rowNo = Mantid::Kernel::Strings::toString<size_t>(*rIt + 1); + const std::string rowNo = Mantid::Kernel::Strings::toString<int>(*rIt + 1); const std::string message = "Error encountered while processing row " + rowNo + ":\n"; m_view->giveUserCritical(message + ex.what(), "Error"); m_view->setProgress(0); @@ -249,12 +366,12 @@ namespace MantidQt @param rowNo : The row in the model to validate @throws std::invalid_argument if the row fails validation */ - void ReflMainViewPresenter::validateRow(size_t rowNo) const + void ReflMainViewPresenter::validateRow(int rowNo) const { if(rowNo >= m_model->rowCount()) throw std::invalid_argument("Invalid row"); - if(m_model->String(rowNo, COL_RUNS).empty()) + if(m_model->data(m_model->index(rowNo, COL_RUNS)).toString().isEmpty()) throw std::invalid_argument("Run column may not be empty."); } @@ -263,16 +380,16 @@ namespace MantidQt @param rowNo : The row in the model to autofill @throws std::runtime_error if the row could not be auto-filled */ - void ReflMainViewPresenter::autofillRow(size_t rowNo) + void ReflMainViewPresenter::autofillRow(int rowNo) { if(rowNo >= m_model->rowCount()) throw std::runtime_error("Invalid row"); - const std::string runStr = m_model->String(rowNo, COL_RUNS); + const std::string runStr = m_model->data(m_model->index(rowNo, COL_RUNS)).toString().toStdString(); MatrixWorkspace_sptr run = boost::dynamic_pointer_cast<MatrixWorkspace>(loadRun(runStr, m_view->getProcessInstrument())); //Fetch two theta from the log if needed - if(m_model->String(rowNo, COL_ANGLE).empty()) + if(m_model->data(m_model->index(rowNo, COL_ANGLE)).toString().isEmpty()) { Property* logData = NULL; @@ -298,24 +415,30 @@ namespace MantidQt throw std::runtime_error("Value for two theta could not be found in log."); //Update the model - m_model->String(rowNo, COL_ANGLE) = Strings::toString<double>(Utils::roundToDP(thetaVal, 3)); + if(m_options["RoundAngle"].toBool()) + thetaVal = Utils::roundToDP(thetaVal, m_options["RoundAnglePrecision"].toInt()); + + m_model->setData(m_model->index(rowNo, COL_ANGLE), thetaVal); + m_tableDirty = true; } //If we need to calculate the resolution, do. - if(m_model->String(rowNo, COL_DQQ).empty()) + if(m_model->data(m_model->index(rowNo, COL_DQQ)).toString().isEmpty()) { IAlgorithm_sptr calcResAlg = AlgorithmManager::Instance().create("CalculateResolution"); calcResAlg->setProperty("Workspace", run); - calcResAlg->setProperty("TwoTheta", m_model->String(rowNo, COL_ANGLE)); + calcResAlg->setProperty("TwoTheta", m_model->data(m_model->index(rowNo, COL_ANGLE)).toString().toStdString()); calcResAlg->execute(); //Update the model double dqqVal = calcResAlg->getProperty("Resolution"); - m_model->String(rowNo, COL_DQQ) = Strings::toString<double>(dqqVal); - } - //Make sure the view updates - m_view->showTable(m_model); + if(m_options["RoundDQQ"].toBool()) + dqqVal = Utils::roundToDP(dqqVal, m_options["RoundDQQPrecision"].toInt()); + + m_model->setData(m_model->index(rowNo, COL_DQQ), dqqVal); + m_tableDirty = true; + } } /** @@ -410,22 +533,22 @@ namespace MantidQt } /** - Process a row - @param rowNo : The row in the model to process - @throws std::runtime_error if processing fails + Reduce a row + @param rowNo : The row in the model to reduce + @throws std::runtime_error if reduction fails */ - void ReflMainViewPresenter::processRow(size_t rowNo) + void ReflMainViewPresenter::reduceRow(int rowNo) { - const std::string run = m_model->String(rowNo, COL_RUNS); - const std::string transStr = m_model->String(rowNo, COL_TRANSMISSION); - const std::string options = m_model->String(rowNo, COL_OPTIONS); + const std::string run = m_model->data(m_model->index(rowNo, COL_RUNS)).toString().toStdString(); + const std::string transStr = m_model->data(m_model->index(rowNo, COL_TRANSMISSION)).toString().toStdString(); + const std::string options = m_model->data(m_model->index(rowNo, COL_OPTIONS)).toString().toStdString(); double theta = 0; - const bool thetaGiven = !m_model->String(rowNo, COL_ANGLE).empty(); + const bool thetaGiven = !m_model->data(m_model->index(rowNo, COL_ANGLE)).toString().isEmpty(); if(thetaGiven) - Mantid::Kernel::Strings::convert<double>(m_model->String(rowNo, COL_ANGLE), theta); + theta = m_model->data(m_model->index(rowNo, COL_ANGLE)).toDouble(); Workspace_sptr runWS = loadRun(run, m_view->getProcessInstrument()); const std::string runNo = getRunNumber(runWS); @@ -462,7 +585,7 @@ namespace MantidQt if(!algReflOne->isExecuted()) throw std::runtime_error("Failed to run ReflectometryReductionOneAuto."); - const double scale = m_model->Double(rowNo, COL_SCALE); + const double scale = m_model->data(m_model->index(rowNo, COL_SCALE)).toDouble(); if(scale != 1.0) { IAlgorithm_sptr algScale = AlgorithmManager::Instance().create("Scale"); @@ -476,19 +599,19 @@ namespace MantidQt throw std::runtime_error("Failed to run Scale algorithm"); } - //Processing has completed. Put Qmin and Qmax into the table if needed, for stitching. - if(m_model->String(rowNo, COL_QMIN).empty() || m_model->String(rowNo, COL_QMAX).empty()) + //Reduction has completed. Put Qmin and Qmax into the table if needed, for stitching. + if(m_model->data(m_model->index(rowNo, COL_QMIN)).toString().isEmpty() || m_model->data(m_model->index(rowNo, COL_QMAX)).toString().isEmpty()) { MatrixWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("IvsQ_" + runNo); std::vector<double> qrange = calcQRange(ws, theta); - if(m_model->String(rowNo, COL_QMIN).empty()) - m_model->String(rowNo, COL_QMIN) = Strings::toString<double>(qrange[0]); + if(m_model->data(m_model->index(rowNo, COL_QMIN)).toString().isEmpty()) + m_model->setData(m_model->index(rowNo, COL_QMIN), qrange[0]); - if(m_model->String(rowNo, COL_QMAX).empty()) - m_model->String(rowNo, COL_QMAX) = Strings::toString<double>(qrange[1]); + if(m_model->data(m_model->index(rowNo, COL_QMAX)).toString().isEmpty()) + m_model->setData(m_model->index(rowNo, COL_QMAX), qrange[1]); - m_view->showTable(m_model); + m_tableDirty = true; } } @@ -513,8 +636,12 @@ namespace MantidQt double qmin = 4 * M_PI / lmax * sin(theta * M_PI / 180.0); double qmax = 4 * M_PI / lmin * sin(theta * M_PI / 180.0); - qmin = Utils::roundToDP(qmin, 3); - qmax = Utils::roundToDP(qmax, 3); + + if(m_options["RoundQMin"].toBool()) + qmin = Utils::roundToDP(qmin, m_options["RoundQMinPrecision"].toInt()); + + if(m_options["RoundQMax"].toBool()) + qmax = Utils::roundToDP(qmax, m_options["RoundQMaxPrecision"].toInt()); std::vector<double> ret; ret.push_back(qmin); @@ -526,15 +653,12 @@ namespace MantidQt Stitches the workspaces created by the given rows together. @param rows : the list of rows */ - void ReflMainViewPresenter::stitchRows(std::vector<size_t> rows) + void ReflMainViewPresenter::stitchRows(std::set<int> rows) { //If we can get away with doing nothing, do. if(rows.size() < 2) return; - //Ensure the rows are in order. - std::sort(rows.begin(), rows.end()); - //Properties for Stitch1DMany std::vector<std::string> workspaceNames; std::vector<std::string> runs; @@ -546,13 +670,9 @@ namespace MantidQt //Go through each row and prepare the properties for(auto rowIt = rows.begin(); rowIt != rows.end(); ++rowIt) { - const std::string runStr = m_model->String(*rowIt, COL_RUNS); - const std::string qMinStr = m_model->String(*rowIt, COL_QMIN); - const std::string qMaxStr = m_model->String(*rowIt, COL_QMAX); - - double qmin, qmax; - Mantid::Kernel::Strings::convert<double>(qMinStr, qmin); - Mantid::Kernel::Strings::convert<double>(qMaxStr, qmax); + const std::string runStr = m_model->data(m_model->index(*rowIt, COL_RUNS)).toString().toStdString(); + const double qmin = m_model->data(m_model->index(*rowIt, COL_QMIN)).toDouble(); + const double qmax = m_model->data(m_model->index(*rowIt, COL_QMAX)).toDouble(); Workspace_sptr runWS = loadRun(runStr); if(runWS) @@ -569,9 +689,7 @@ namespace MantidQt endOverlaps.push_back(qmax); } - double dqq; - std::string dqqStr = m_model->String(rows.front(), COL_DQQ); - Mantid::Kernel::Strings::convert<double>(dqqStr, dqq); + double dqq = m_model->data(m_model->index(*(rows.begin()), COL_DQQ)).toDouble(); //params are qmin, -dqq, qmax for the final output params.push_back(*std::min_element(startOverlaps.begin(), startOverlaps.end())); @@ -652,31 +770,43 @@ namespace MantidQt /** Inserts a new row in the specified location - @param before The index to insert the new row before + @param index The index to insert the new row before */ - void ReflMainViewPresenter::insertRow(size_t before) + void ReflMainViewPresenter::insertRow(int index) { const int groupId = getUnusedGroup(); - size_t row = m_model->insertRow(before); + if(!m_model->insertRow(index)) + return; //Set the default scale to 1.0 - m_model->Double(row, COL_SCALE) = 1.0; + m_model->setData(m_model->index(index, COL_SCALE), 1.0); //Set the group id of the new row - m_model->Int(row, COL_GROUP) = groupId; - //Make sure the view updates - m_view->showTable(m_model); + m_model->setData(m_model->index(index, COL_GROUP), groupId); } /** - Add row(s) to the model + Insert a row after the last selected row */ - void ReflMainViewPresenter::addRow() + void ReflMainViewPresenter::appendRow() { - std::vector<size_t> rows = m_view->getSelectedRowIndexes(); - std::sort(rows.begin(), rows.end()); - if(rows.size() == 0) + std::set<int> rows = m_view->getSelectedRows(); + if(rows.empty()) insertRow(m_model->rowCount()); else insertRow(*rows.rbegin() + 1); + m_tableDirty = true; + } + + /** + Insert a row before the first selected row + */ + void ReflMainViewPresenter::prependRow() + { + std::set<int> rows = m_view->getSelectedRows(); + if(rows.empty()) + insertRow(0); + else + insertRow(*rows.begin()); + m_tableDirty = true; } /** @@ -684,12 +814,11 @@ namespace MantidQt */ void ReflMainViewPresenter::deleteRow() { - std::vector<size_t> rows = m_view->getSelectedRowIndexes(); - std::sort(rows.begin(), rows.end()); - for(size_t idx = rows.size(); 0 < idx; --idx) - m_model->removeRow(rows.at(0)); + std::set<int> rows = m_view->getSelectedRows(); + for(auto row = rows.rbegin(); row != rows.rend(); ++row) + m_model->removeRow(*row); - m_view->showTable(m_model); + m_tableDirty = true; } /** @@ -697,16 +826,15 @@ namespace MantidQt */ void ReflMainViewPresenter::groupRows() { - const std::vector<size_t> rows = m_view->getSelectedRowIndexes(); + const std::set<int> rows = m_view->getSelectedRows(); //Find the first unused group id, ignoring the selected rows const int groupId = getUnusedGroup(rows); //Now we just have to set the group id on the selected rows for(auto it = rows.begin(); it != rows.end(); ++it) - m_model->Int(*it, COL_GROUP) = groupId; + m_model->setData(m_model->index(*it, COL_GROUP), groupId); - //Make sure the view updates - m_view->showTable(m_model); + m_tableDirty = true; } /** @@ -716,14 +844,18 @@ namespace MantidQt { switch(flag) { - case ReflMainView::SaveAsFlag: saveTableAs(); break; - case ReflMainView::SaveFlag: saveTable(); break; - case ReflMainView::AddRowFlag: addRow(); break; - case ReflMainView::DeleteRowFlag: deleteRow(); break; - case ReflMainView::ProcessFlag: process(); break; - case ReflMainView::GroupRowsFlag: groupRows(); break; - case ReflMainView::OpenTableFlag: openTable(); break; - case ReflMainView::NewTableFlag: newTable(); break; + case ReflMainView::SaveAsFlag: saveTableAs(); break; + case ReflMainView::SaveFlag: saveTable(); break; + case ReflMainView::AppendRowFlag: appendRow(); break; + case ReflMainView::PrependRowFlag: prependRow(); break; + case ReflMainView::DeleteRowFlag: deleteRow(); break; + case ReflMainView::ProcessFlag: process(); break; + case ReflMainView::GroupRowsFlag: groupRows(); break; + case ReflMainView::OpenTableFlag: openTable(); break; + case ReflMainView::NewTableFlag: newTable(); break; + case ReflMainView::TableUpdatedFlag: m_tableDirty = true; break; + case ReflMainView::ExpandSelectionFlag: expandSelection(); break; + case ReflMainView::OptionsDialogFlag: showOptionsDialog(); break; case ReflMainView::NoFlags: return; } @@ -736,9 +868,14 @@ namespace MantidQt void ReflMainViewPresenter::saveTable() { if(!m_wsName.empty()) - AnalysisDataService::Instance().addOrReplace(m_wsName,boost::shared_ptr<ITableWorkspace>(m_model->clone())); + { + AnalysisDataService::Instance().addOrReplace(m_wsName,boost::shared_ptr<ITableWorkspace>(m_ws->clone())); + m_tableDirty = false; + } else + { saveTableAs(); + } } /** @@ -759,12 +896,16 @@ namespace MantidQt */ void ReflMainViewPresenter::newTable() { - m_model = createWorkspace(); + if(m_tableDirty && m_options["WarnDiscardChanges"].toBool()) + if(!m_view->askUserYesNo("Your current table has unsaved changes. Are you sure you want to discard them?","Start New Table?")) + return; + + m_ws = createDefaultWorkspace(); + m_model.reset(new QReflTableModel(m_ws)); m_wsName.clear(); m_view->showTable(m_model); - //Start with one blank row - insertRow(0); + m_tableDirty = false; } /** @@ -772,6 +913,10 @@ namespace MantidQt */ void ReflMainViewPresenter::openTable() { + if(m_tableDirty && m_options["WarnDiscardChanges"].toBool()) + if(!m_view->askUserYesNo("Your current table has unsaved changes. Are you sure you want to discard them?","Open Table?")) + return; + auto& ads = AnalysisDataService::Instance(); const std::string toOpen = m_view->getWorkspaceToOpen(); @@ -784,20 +929,190 @@ namespace MantidQt return; } - ITableWorkspace_sptr newModel = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>(toOpen); + ITableWorkspace_sptr origTable = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>(toOpen); + + //We create a clone of the table for live editing. The original is not updated unless we explicitly save. + ITableWorkspace_sptr newTable = boost::shared_ptr<ITableWorkspace>(origTable->clone()); try { - checkValidModel(newModel); + validateModel(newTable); + m_ws = newTable; + m_model.reset(new QReflTableModel(m_ws)); + m_wsName = toOpen; + m_view->showTable(m_model); + m_tableDirty = false; } catch(std::runtime_error& e) { - m_view->giveUserCritical("Invalid workspace to open:\n" + std::string(e.what()), "Error"); - return; + m_view->giveUserCritical("Could not open workspace: " + std::string(e.what()), "Error"); } + } - m_model = newModel; - m_wsName = toOpen; - m_view->showTable(m_model); + /** + Handle ADS add events + */ + void ReflMainViewPresenter::handleAddEvent(Mantid::API::WorkspaceAddNotification_ptr pNf) + { + const std::string name = pNf->objectName(); + + if(Mantid::API::AnalysisDataService::Instance().isHiddenDataServiceObject(name)) + return; + + if(!isValidModel(pNf->object())) + return; + + m_workspaceList.insert(name); + if(m_view) + m_view->setTableList(m_workspaceList); + } + + /** + Handle ADS remove events + */ + void ReflMainViewPresenter::handleRemEvent(Mantid::API::WorkspacePostDeleteNotification_ptr pNf) + { + const std::string name = pNf->objectName(); + m_workspaceList.erase(name); + if(m_view) + m_view->setTableList(m_workspaceList); + } + + /** + Handle ADS clear events + */ + void ReflMainViewPresenter::handleClearEvent(Mantid::API::ClearADSNotification_ptr) + { + m_workspaceList.clear(); + if(m_view) + m_view->setTableList(m_workspaceList); + } + + /** + Handle ADS rename events + */ + void ReflMainViewPresenter::handleRenameEvent(Mantid::API::WorkspaceRenameNotification_ptr pNf) + { + //If we have this workspace, rename it + const std::string name = pNf->objectName(); + const std::string newName = pNf->newObjectName(); + + if(m_workspaceList.find(name) == m_workspaceList.end()) + return; + + m_workspaceList.erase(name); + m_workspaceList.insert(newName); + if(m_view) + m_view->setTableList(m_workspaceList); + } + + /** + Handle ADS replace events + */ + void ReflMainViewPresenter::handleReplaceEvent(Mantid::API::WorkspaceAfterReplaceNotification_ptr pNf) + { + const std::string name = pNf->objectName(); + //Erase it + m_workspaceList.erase(name); + + //If it's a table workspace, bring it back + if(isValidModel(pNf->object())) + m_workspaceList.insert(name); + + if(m_view) + m_view->setTableList(m_workspaceList); + } + + /** Returns how many rows there are in a given group + @param groupId : The id of the group to count the rows of + @returns The number of rows in the group + */ + size_t ReflMainViewPresenter::numRowsInGroup(int groupId) const + { + size_t count = 0; + for(int i = 0; i < m_model->rowCount(); ++i) + if(m_model->data(m_model->index(i, COL_GROUP)).toInt() == groupId) + count++; + return count; + } + + /** Expands the current selection to all the rows in the selected groups */ + void ReflMainViewPresenter::expandSelection() + { + std::set<int> groupIds; + + std::set<int> rows = m_view->getSelectedRows(); + for(auto row = rows.begin(); row != rows.end(); ++row) + groupIds.insert(m_model->data(m_model->index(*row, COL_GROUP)).toInt()); + + std::set<int> selection; + + for(int i = 0; i < m_model->rowCount(); ++i) + if(groupIds.find(m_model->data(m_model->index(i, COL_GROUP)).toInt()) != groupIds.end()) + selection.insert(i); + + m_view->setSelection(selection); + } + + /** Shows the Refl Options dialog */ + void ReflMainViewPresenter::showOptionsDialog() + { + auto options = new QtReflOptionsDialog(m_view, m_view->getPresenter()); + //By default the dialog is only destroyed when ReflMainView is and so they'll stack up. + //This way, they'll be deallocated as soon as they've been closed. + options->setAttribute(Qt::WA_DeleteOnClose, true); + options->exec(); + } + + /** Gets the options used by the presenter + @returns The options used by the presenter + */ + const std::map<std::string,QVariant>& ReflMainViewPresenter::options() const + { + return m_options; + } + + /** Sets the options used by the presenter + @param options : The new options for the presenter to use + */ + void ReflMainViewPresenter::setOptions(const std::map<std::string,QVariant>& options) + { + //Overwrite the given options + for(auto it = options.begin(); it != options.end(); ++it) + m_options[it->first] = it->second; + + //Save any changes to disk + QSettings settings; + settings.beginGroup(ReflSettingsGroup); + for(auto it = m_options.begin(); it != m_options.end(); ++it) + settings.setValue(QString::fromStdString(it->first), it->second); + settings.endGroup(); + } + + /** Load options from disk if possible, or set to defaults */ + void ReflMainViewPresenter::initOptions() + { + m_options.clear(); + + //Set defaults + m_options["WarnProcessAll"] = true; + m_options["WarnDiscardChanges"] = true; + m_options["WarnProcessPartialGroup"] = true; + m_options["RoundAngle"] = false; + m_options["RoundQMin"] = false; + m_options["RoundQMax"] = false; + m_options["RoundDQQ"] = false; + m_options["RoundAnglePrecision"] = 3; + m_options["RoundQMinPrecision"] = 3; + m_options["RoundQMaxPrecision"] = 3; + m_options["RoundDQQPrecision"] = 3; + + //Load saved values from disk + QSettings settings; + settings.beginGroup(ReflSettingsGroup); + QStringList keys = settings.childKeys(); + for(auto it = keys.begin(); it != keys.end(); ++it) + m_options[it->toStdString()] = settings.value(*it); + settings.endGroup(); } } } diff --git a/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewMockObjects.h b/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewMockObjects.h index 616829c8e95251c201d295f969dfff13cd62e12c..b5673865d089995607079a491511a0f7eafb4b52 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewMockObjects.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewMockObjects.h @@ -3,20 +3,23 @@ #include <gmock/gmock.h> #include "MantidQtCustomInterfaces/ReflMainView.h" +#include "MantidQtCustomInterfaces/QReflTableModel.h" #include "MantidAPI/TableRow.h" using namespace MantidQt::CustomInterfaces; using namespace Mantid::API; //Clean flag aliases for use within tests. -const int NewTableFlag = ReflMainView::NewTableFlag; -const int OpenTableFlag = ReflMainView::OpenTableFlag; -const int SaveAsFlag = ReflMainView::SaveAsFlag; -const int SaveFlag = ReflMainView::SaveFlag; -const int ProcessFlag = ReflMainView::ProcessFlag; -const int AddRowFlag = ReflMainView::AddRowFlag; -const int DeleteRowFlag = ReflMainView::DeleteRowFlag; -const int GroupRowsFlag = ReflMainView::GroupRowsFlag; +const int NewTableFlag = ReflMainView::NewTableFlag; +const int OpenTableFlag = ReflMainView::OpenTableFlag; +const int SaveAsFlag = ReflMainView::SaveAsFlag; +const int SaveFlag = ReflMainView::SaveFlag; +const int ProcessFlag = ReflMainView::ProcessFlag; +const int AppendRowFlag = ReflMainView::AppendRowFlag; +const int PrependRowFlag = ReflMainView::PrependRowFlag; +const int DeleteRowFlag = ReflMainView::DeleteRowFlag; +const int GroupRowsFlag = ReflMainView::GroupRowsFlag; +const int ExpandSelectionFlag = ReflMainView::ExpandSelectionFlag; //Clean column ids for use within tests const int RunCol = ReflMainViewPresenter::COL_RUNS; @@ -33,7 +36,9 @@ class MockView : public ReflMainView { public: MockView(){}; - virtual void showTable(Mantid::API::ITableWorkspace_sptr model){ m_model = model;} + virtual ~MockView(){} + virtual void showTable(QReflTableModel_sptr model){ m_model = model;} + virtual void setOptionsHintStrategy(MantidQt::MantidWidgets::HintStrategy*) {}; MOCK_METHOD3(askUserString, std::string(const std::string& prompt, const std::string& title, const std::string& defaultValue)); MOCK_METHOD2(askUserYesNo, bool(std::string, std::string)); MOCK_METHOD2(giveUserCritical, void(std::string, std::string)); @@ -41,27 +46,17 @@ public: MOCK_METHOD2(giveUserWarning, void(std::string, std::string)); MOCK_METHOD2(setProgressRange, void(int, int)); MOCK_METHOD1(setProgress, void(int)); + MOCK_METHOD1(setTableList, void(const std::set<std::string>& tableList)); MOCK_METHOD2(setInstrumentList, void(const std::vector<std::string>& instruments, const std::string& defaultInstrument)); MOCK_METHOD1(setInstrument, void(const std::string&)); - MOCK_CONST_METHOD0(getSelectedRowIndexes, std::vector<size_t>()); + MOCK_METHOD1(setSelection, void(const std::set<int>& rows)); + MOCK_CONST_METHOD0(getSelectedRows, std::set<int>()); MOCK_CONST_METHOD0(getSearchInstrument, std::string()); MOCK_CONST_METHOD0(getProcessInstrument, std::string()); MOCK_CONST_METHOD0(getWorkspaceToOpen, std::string()); - virtual ~MockView(){} - void addDataForTest() - { - TableRow row = m_model->appendRow(); - row << "13460" << "0.7" << "13463,13464" << "0.01" << "0.06" << "0.04" << 1.0 << 3 << ""; - row = m_model->appendRow(); - row << "13462" << "2.3" << "13463,13464" << "0.035" << "0.3" << "0.04" << 1.0 << 3 << ""; - row = m_model->appendRow(); - row << "13469" << "0.7" << "13463,13464" << "0.01" << "0.06" << "0.04" << 1.0 << 1 << ""; - row = m_model->appendRow(); - row << "13470" << "2.3" << "13463,13464" << "0.035" << "0.3" << "0.04" << 1.0 << 1 << ""; - m_model->removeRow(0); - } + MOCK_CONST_METHOD0(getPresenter, boost::shared_ptr<IReflPresenter>()); private: - Mantid::API::ITableWorkspace_sptr m_model; + QReflTableModel_sptr m_model; }; #endif /*MANTID_CUSTOMINTERFACES_REFLMAINVIEWMOCKOBJECTS_H*/ diff --git a/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewPresenterTest.h b/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewPresenterTest.h index 24a0c8dac295956ee1a3ed17d761b3e47ae354f1..02c20e4f021bc5bd73c7f0c88eab6f92b767f23a 100644 --- a/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewPresenterTest.h +++ b/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewPresenterTest.h @@ -97,6 +97,7 @@ public: { MockView mockView; EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); ReflMainViewPresenter presenter(&mockView); createPrefilledWorkspace("TestWorkspace"); @@ -104,7 +105,6 @@ public: presenter.notify(OpenTableFlag); presenter.notify(SaveFlag); - TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView)); AnalysisDataService::Instance().remove("TestWorkspace"); } @@ -112,6 +112,7 @@ public: { MockView mockView; EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); ReflMainViewPresenter presenter(&mockView); createPrefilledWorkspace("TestWorkspace"); @@ -129,9 +130,6 @@ public: EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillOnce(Return("Workspace")); presenter.notify(SaveAsFlag); - //Check calls were made as expected - TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView)); - //Check that the workspace was saved TS_ASSERT(AnalysisDataService::Instance().doesExist("Workspace")); @@ -144,6 +142,7 @@ public: { MockView mockView; EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); ReflMainViewPresenter presenter(&mockView); createPrefilledWorkspace("TestWorkspace"); @@ -165,9 +164,6 @@ public: EXPECT_CALL(mockView, askUserString(_,_,_)).Times(0); presenter.notify(SaveFlag); - //Check calls were made as expected - TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView)); - //Check that the workspace was saved TS_ASSERT(AnalysisDataService::Instance().doesExist("Workspace")); @@ -176,10 +172,11 @@ public: AnalysisDataService::Instance().remove("Workspace"); } - void testAddRow() + void testAppendRow() { MockView mockView; EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); ReflMainViewPresenter presenter(&mockView); createPrefilledWorkspace("TestWorkspace"); @@ -198,17 +195,14 @@ public: TS_ASSERT_THROWS(ws->Int(5, GroupCol), std::runtime_error); TS_ASSERT_THROWS(ws->Int(6, GroupCol), std::runtime_error); - //The user hits "add row" twice with no rows selected - EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(2).WillRepeatedly(Return(std::vector<size_t>())); - presenter.notify(AddRowFlag); - presenter.notify(AddRowFlag); + //The user hits "append row" twice with no rows selected + EXPECT_CALL(mockView, getSelectedRows()).Times(2).WillRepeatedly(Return(std::set<int>())); + presenter.notify(AppendRowFlag); + presenter.notify(AppendRowFlag); //The user hits "save" presenter.notify(SaveFlag); - //Check the calls were made as expected - TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView)); - //Check that the table has been modified correctly ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace"); TS_ASSERT_EQUALS(ws->rowCount(), 6); @@ -224,18 +218,19 @@ public: AnalysisDataService::Instance().remove("TestWorkspace"); } - void testAddRowSpecify() + void testAppendRowSpecify() { MockView mockView; EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); ReflMainViewPresenter presenter(&mockView); createPrefilledWorkspace("TestWorkspace"); EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace")); presenter.notify(OpenTableFlag); - std::vector<size_t> rowlist; - rowlist.push_back(1); + std::set<int> rowlist; + rowlist.insert(1); //We should not receive any errors EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0); @@ -251,17 +246,14 @@ public: TS_ASSERT_THROWS(ws->Int(5, GroupCol), std::runtime_error); TS_ASSERT_THROWS(ws->Int(6, GroupCol), std::runtime_error); - //The user hits "add row" twice, with the second row selected - EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(2).WillRepeatedly(Return(rowlist)); - presenter.notify(AddRowFlag); - presenter.notify(AddRowFlag); + //The user hits "append row" twice, with the second row selected + EXPECT_CALL(mockView, getSelectedRows()).Times(2).WillRepeatedly(Return(rowlist)); + presenter.notify(AppendRowFlag); + presenter.notify(AppendRowFlag); //The user hits "save" presenter.notify(SaveFlag); - //Check the calls were made as expected - TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView)); - //Check that the table has been modified correctly ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace"); TS_ASSERT_EQUALS(ws->rowCount(), 6); @@ -279,20 +271,21 @@ public: AnalysisDataService::Instance().remove("TestWorkspace"); } - void testAddRowSpecifyPlural() + void testAppendRowSpecifyPlural() { MockView mockView; EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); ReflMainViewPresenter presenter(&mockView); createPrefilledWorkspace("TestWorkspace"); EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace")); presenter.notify(OpenTableFlag); - std::vector<size_t> rowlist; - rowlist.push_back(1); - rowlist.push_back(2); - rowlist.push_back(3); + std::set<int> rowlist; + rowlist.insert(1); + rowlist.insert(2); + rowlist.insert(3); //We should not receive any errors EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0); @@ -309,16 +302,13 @@ public: TS_ASSERT_THROWS(ws->Int(6, GroupCol), std::runtime_error); TS_ASSERT_THROWS(ws->Int(7, GroupCol), std::runtime_error); - //The user hits "add row" once, with the second, third, and fourth row selected. - EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist)); - presenter.notify(AddRowFlag); + //The user hits "append row" once, with the second, third, and fourth row selected. + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist)); + presenter.notify(AppendRowFlag); //The user hits "save" presenter.notify(SaveFlag); - //Check the calls were made as expected - TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView)); - //Check that the table was modified correctly ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace"); TS_ASSERT_EQUALS(ws->rowCount(), 5); @@ -336,10 +326,125 @@ public: AnalysisDataService::Instance().remove("TestWorkspace"); } + void testPrependRow() + { + MockView mockView; + EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); + ReflMainViewPresenter presenter(&mockView); + + createPrefilledWorkspace("TestWorkspace"); + EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace")); + presenter.notify(OpenTableFlag); + + //We should not receive any errors + EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0); + + //The user hits "prepend row" twice with no rows selected + EXPECT_CALL(mockView, getSelectedRows()).Times(2).WillRepeatedly(Return(std::set<int>())); + presenter.notify(PrependRowFlag); + presenter.notify(PrependRowFlag); + + //The user hits "save" + presenter.notify(SaveFlag); + + //Check that the table has been modified correctly + ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace"); + TS_ASSERT_EQUALS(ws->rowCount(), 6); + TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 2); + TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 0); + TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 3); + TS_ASSERT_EQUALS(ws->Int(3, GroupCol), 3); + TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 1); + TS_ASSERT_EQUALS(ws->Int(5, GroupCol), 1); + + //Tidy up + AnalysisDataService::Instance().remove("TestWorkspace"); + } + + void testPrependRowSpecify() + { + MockView mockView; + EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); + ReflMainViewPresenter presenter(&mockView); + + createPrefilledWorkspace("TestWorkspace"); + EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace")); + presenter.notify(OpenTableFlag); + + std::set<int> rowlist; + rowlist.insert(1); + + //We should not receive any errors + EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0); + + //The user hits "prepend row" twice, with the second row selected + EXPECT_CALL(mockView, getSelectedRows()).Times(2).WillRepeatedly(Return(rowlist)); + presenter.notify(PrependRowFlag); + presenter.notify(PrependRowFlag); + + //The user hits "save" + presenter.notify(SaveFlag); + + //Check that the table has been modified correctly + ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace"); + TS_ASSERT_EQUALS(ws->rowCount(), 6); + TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 3); + TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 2); + TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 0); + TS_ASSERT_EQUALS(ws->Int(3, GroupCol), 3); + TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 1); + TS_ASSERT_EQUALS(ws->Int(5, GroupCol), 1); + + //Tidy up + AnalysisDataService::Instance().remove("TestWorkspace"); + } + + void testPrependRowSpecifyPlural() + { + MockView mockView; + EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); + ReflMainViewPresenter presenter(&mockView); + + createPrefilledWorkspace("TestWorkspace"); + EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace")); + presenter.notify(OpenTableFlag); + + std::set<int> rowlist; + rowlist.insert(1); + rowlist.insert(2); + rowlist.insert(3); + + //We should not receive any errors + EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0); + + //The user hits "prepend row" once, with the second, third, and fourth row selected. + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist)); + presenter.notify(PrependRowFlag); + + //The user hits "save" + presenter.notify(SaveFlag); + + //Check that the table was modified correctly + ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace"); + TS_ASSERT_EQUALS(ws->rowCount(), 5); + TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 3); + TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 0); + TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 3); + TS_ASSERT_EQUALS(ws->Int(3, GroupCol), 1); + TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 1); + + //Tidy up + AnalysisDataService::Instance().remove("TestWorkspace"); + } + void testDeleteRowNone() { MockView mockView; EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); ReflMainViewPresenter presenter(&mockView); createPrefilledWorkspace("TestWorkspace"); @@ -356,15 +461,12 @@ public: TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 3); //The user hits "delete row" with no rows selected - EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(std::vector<size_t>())); + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(std::set<int>())); presenter.notify(DeleteRowFlag); //The user hits save presenter.notify(SaveFlag); - //Check the calls were made as expected - TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView)); - //Check that the table was not modified ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace"); TS_ASSERT_EQUALS(ws->rowCount(), 4); @@ -379,14 +481,15 @@ public: { MockView mockView; EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); ReflMainViewPresenter presenter(&mockView); createPrefilledWorkspace("TestWorkspace"); EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace")); presenter.notify(OpenTableFlag); - std::vector<size_t> rowlist; - rowlist.push_back(1); + std::set<int> rowlist; + rowlist.insert(1); //We should not receive any errors EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0); @@ -398,15 +501,12 @@ public: TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 3); //The user hits "delete row" with the second row selected - EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist)); + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist)); presenter.notify(DeleteRowFlag); //The user hits "save" presenter.notify(SaveFlag); - //Check the calls were made as expected - TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView)); - ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace"); TS_ASSERT_EQUALS(ws->rowCount(), 3); TS_ASSERT_EQUALS(ws->String(1, RunCol), "13469"); @@ -421,16 +521,17 @@ public: { MockView mockView; EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); ReflMainViewPresenter presenter(&mockView); createPrefilledWorkspace("TestWorkspace"); EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace")); presenter.notify(OpenTableFlag); - std::vector<size_t> rowlist; - rowlist.push_back(0); - rowlist.push_back(1); - rowlist.push_back(2); + std::set<int> rowlist; + rowlist.insert(0); + rowlist.insert(1); + rowlist.insert(2); //We should not receive any errors EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0); @@ -442,15 +543,12 @@ public: TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 3); //The user hits "delete row" with the first three rows selected - EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist)); + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist)); presenter.notify(DeleteRowFlag); //The user hits save presenter.notify(SaveFlag); - //Check the calls were made as expected - TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView)); - //Check the rows were deleted as expected ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace"); TS_ASSERT_EQUALS(ws->rowCount(), 1); @@ -468,29 +566,27 @@ public: { MockView mockView; EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); ReflMainViewPresenter presenter(&mockView); createPrefilledWorkspace("TestWorkspace"); EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace")); presenter.notify(OpenTableFlag); - std::vector<size_t> rowlist; - rowlist.push_back(0); - rowlist.push_back(1); + std::set<int> rowlist; + rowlist.insert(0); + rowlist.insert(1); //We should not receive any errors EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0); //The user hits the "process" button with the first two rows selected - EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist)); + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist)); EXPECT_CALL(mockView, getProcessInstrument()).WillRepeatedly(Return("INTER")); EXPECT_CALL(mockView, setProgressRange(_,_)); EXPECT_CALL(mockView, setProgress(_)).Times(4); presenter.notify(ProcessFlag); - //Check the calls were made as expected - TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView)); - //Check output workspaces were created as expected TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_13460")); TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsLam_13460")); @@ -537,27 +633,25 @@ public: MockView mockView; EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); ReflMainViewPresenter presenter(&mockView); EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace")); presenter.notify(OpenTableFlag); - std::vector<size_t> rowlist; - rowlist.push_back(0); - rowlist.push_back(1); + std::set<int> rowlist; + rowlist.insert(0); + rowlist.insert(1); //We should not receive any errors EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0); //The user hits the "process" button with the first two rows selected - EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist)); + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist)); EXPECT_CALL(mockView, getProcessInstrument()).WillRepeatedly(Return("INTER")); EXPECT_CALL(mockView, setProgressRange(_,_)); EXPECT_CALL(mockView, setProgress(_)).Times(4); presenter.notify(ProcessFlag); - //Check the calls were made as expected - TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView)); - //Check output workspaces were created as expected TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_dataA")); TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_13462")); @@ -591,19 +685,20 @@ public: MockView mockView; EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); ReflMainViewPresenter presenter(&mockView); EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace")); presenter.notify(OpenTableFlag); - std::vector<size_t> rowlist; - rowlist.push_back(0); - rowlist.push_back(1); + std::set<int> rowlist; + rowlist.insert(0); + rowlist.insert(1); //We should not receive any errors EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0); //The user hits the "process" button with the first two rows selected - EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist)); + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist)); EXPECT_CALL(mockView, getProcessInstrument()).WillRepeatedly(Return("INTER")); EXPECT_CALL(mockView, setProgressRange(_,_)); EXPECT_CALL(mockView, setProgress(_)).Times(4); @@ -612,20 +707,17 @@ public: //The user hits the "save" button presenter.notify(SaveFlag); - //Check the calls were made as expected - TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView)); - //Check the table was updated as expected ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace"); - TS_ASSERT_EQUALS(ws->String(0, ThetaCol), "0.7"); - TS_ASSERT_EQUALS(ws->String(0, DQQCol), "0.0340301"); - TS_ASSERT_EQUALS(ws->String(0, QMinCol), "0.009"); - TS_ASSERT_EQUALS(ws->String(0, QMaxCol), "0.154"); + TS_ASSERT_DELTA(boost::lexical_cast<double>(ws->String(0, ThetaCol)), 0.70002, 1e-5); + TS_ASSERT_DELTA(boost::lexical_cast<double>(ws->String(0, DQQCol)), 0.03402, 1e-5); + TS_ASSERT_DELTA(boost::lexical_cast<double>(ws->String(0, QMinCol)), 0.00903, 1e-5); + TS_ASSERT_DELTA(boost::lexical_cast<double>(ws->String(0, QMaxCol)), 0.15352, 1e-5); - TS_ASSERT_EQUALS(ws->String(1, ThetaCol), "2.3"); - TS_ASSERT_EQUALS(ws->String(1, DQQCol), "0.0340505"); - TS_ASSERT_EQUALS(ws->String(1, QMinCol), "0.03"); - TS_ASSERT_EQUALS(ws->String(1, QMaxCol), "0.504"); + TS_ASSERT_DELTA(boost::lexical_cast<double>(ws->String(1, ThetaCol)), 2.3, 1e-5); + TS_ASSERT_DELTA(boost::lexical_cast<double>(ws->String(1, DQQCol)), 0.03405, 1e-5); + TS_ASSERT_DELTA(boost::lexical_cast<double>(ws->String(1, QMinCol)), 0.02966, 1e-5); + TS_ASSERT_DELTA(boost::lexical_cast<double>(ws->String(1, QMaxCol)), 0.50431, 1e-5); //Tidy up AnalysisDataService::Instance().remove("TestWorkspace"); @@ -656,6 +748,7 @@ public: MockView mockView; EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); ReflMainViewPresenter presenter(&mockView); //We should receive an error @@ -671,6 +764,7 @@ public: { MockView mockView; EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); ReflMainViewPresenter presenter(&mockView); //Because we to open twice, get an error twice @@ -712,6 +806,225 @@ public: TS_ASSERT_EQUALS(kvp["e"], "4,5,6"); TS_ASSERT_EQUALS(kvp["f"], "1+1=2"); TS_ASSERT_EQUALS(kvp["g"], "'"); + + TS_ASSERT_THROWS(ReflMainViewPresenter::parseKeyValueString("a = 1, b = 2, c = 3,"), std::runtime_error); + TS_ASSERT_THROWS(ReflMainViewPresenter::parseKeyValueString("a = 1, b = 2, c = 3,d"), std::runtime_error); + TS_ASSERT_THROWS(ReflMainViewPresenter::parseKeyValueString(",a = 1"), std::runtime_error); + TS_ASSERT_THROWS(ReflMainViewPresenter::parseKeyValueString(",a = 1 = 2,="), std::runtime_error); + TS_ASSERT_THROWS(ReflMainViewPresenter::parseKeyValueString("=,=,="), std::runtime_error); + } + + void testPromptSaveAfterAppendRow() + { + MockView mockView; + EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); + ReflMainViewPresenter presenter(&mockView); + + //User hits "append row" + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(std::set<int>())); + presenter.notify(AppendRowFlag); + + //The user will decide not to discard their changes + EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(1).WillOnce(Return(false)); + + //Then hits "new table" without having saved + presenter.notify(NewTableFlag); + + //The user saves + EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillOnce(Return("Workspace")); + presenter.notify(SaveFlag); + + //The user tries to create a new table again, and does not get bothered + EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(0); + presenter.notify(NewTableFlag); + } + + void testPromptSaveAfterDeleteRow() + { + MockView mockView; + EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); + ReflMainViewPresenter presenter(&mockView); + + //User hits "append row" a couple of times + EXPECT_CALL(mockView, getSelectedRows()).Times(2).WillRepeatedly(Return(std::set<int>())); + presenter.notify(AppendRowFlag); + presenter.notify(AppendRowFlag); + + //The user saves + EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillOnce(Return("Workspace")); + presenter.notify(SaveFlag); + + //...then deletes the 2nd row + std::set<int> rows; + rows.insert(1); + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rows)); + presenter.notify(DeleteRowFlag); + + //The user will decide not to discard their changes when asked + EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(1).WillOnce(Return(false)); + + //Then hits "new table" without having saved + presenter.notify(NewTableFlag); + + //The user saves + presenter.notify(SaveFlag); + + //The user tries to create a new table again, and does not get bothered + EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(0); + presenter.notify(NewTableFlag); + } + + void testPromptSaveAndDiscard() + { + MockView mockView; + EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); + ReflMainViewPresenter presenter(&mockView); + + //User hits "append row" a couple of times + EXPECT_CALL(mockView, getSelectedRows()).Times(2).WillRepeatedly(Return(std::set<int>())); + presenter.notify(AppendRowFlag); + presenter.notify(AppendRowFlag); + + //Then hits "new table", and decides to discard + EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(1).WillOnce(Return(true)); + presenter.notify(NewTableFlag); + + //These next two times they don't get prompted - they have a new table + presenter.notify(NewTableFlag); + presenter.notify(NewTableFlag); + } + + void testPromptSaveOnOpen() + { + MockView mockView; + EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); + ReflMainViewPresenter presenter(&mockView); + + createPrefilledWorkspace("TestWorkspace"); + + //User hits "append row" + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(std::set<int>())); + presenter.notify(AppendRowFlag); + + //and tries to open a workspace, but gets prompted and decides not to discard + EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(1).WillOnce(Return(false)); + presenter.notify(OpenTableFlag); + + //the user does it again, but discards + EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(1).WillOnce(Return(true)); + EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace")); + presenter.notify(OpenTableFlag); + + //the user does it one more time, and is not prompted + EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace")); + EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(0); + presenter.notify(OpenTableFlag); + } + + void testExpandSelection() + { + auto ws = createWorkspace("TestWorkspace"); + TableRow row = ws->appendRow(); + row << "" << "" << "" << "" << "" << "" << 1.0 << 0 << ""; //Row 0 + row = ws->appendRow(); + row << "" << "" << "" << "" << "" << "" << 1.0 << 1 << ""; //Row 1 + row = ws->appendRow(); + row << "" << "" << "" << "" << "" << "" << 1.0 << 1 << ""; //Row 2 + row = ws->appendRow(); + row << "" << "" << "" << "" << "" << "" << 1.0 << 2 << ""; //Row 3 + row = ws->appendRow(); + row << "" << "" << "" << "" << "" << "" << 1.0 << 2 << ""; //Row 4 + row = ws->appendRow(); + row << "" << "" << "" << "" << "" << "" << 1.0 << 2 << ""; //Row 5 + row = ws->appendRow(); + row << "" << "" << "" << "" << "" << "" << 1.0 << 3 << ""; //Row 6 + row = ws->appendRow(); + row << "" << "" << "" << "" << "" << "" << 1.0 << 4 << ""; //Row 7 + row = ws->appendRow(); + row << "" << "" << "" << "" << "" << "" << 1.0 << 4 << ""; //Row 8 + row = ws->appendRow(); + row << "" << "" << "" << "" << "" << "" << 1.0 << 5 << ""; //Row 9 + + MockView mockView; + EXPECT_CALL(mockView, setInstrumentList(_,_)).Times(1); + EXPECT_CALL(mockView, setTableList(_)).Times(AnyNumber()); + ReflMainViewPresenter presenter(&mockView); + + EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace")); + presenter.notify(OpenTableFlag); + + //We should not receive any errors + EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0); + + std::set<int> selection; + std::set<int> expected; + + selection.insert(0); + expected.insert(0); + + //With row 0 selected, we shouldn't expand at all + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(selection)); + EXPECT_CALL(mockView, setSelection(ContainerEq(expected))).Times(1); + presenter.notify(ExpandSelectionFlag); + + //With 0,1 selected, we should finish with 0,1,2 selected + selection.clear(); + selection.insert(0); + selection.insert(1); + + expected.clear(); + expected.insert(0); + expected.insert(1); + expected.insert(2); + + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(selection)); + EXPECT_CALL(mockView, setSelection(ContainerEq(expected))).Times(1); + presenter.notify(ExpandSelectionFlag); + + //With 1,6 selected, we should finish with 1,2,6 selected + selection.clear(); + selection.insert(1); + selection.insert(6); + + expected.clear(); + expected.insert(1); + expected.insert(2); + expected.insert(6); + + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(selection)); + EXPECT_CALL(mockView, setSelection(ContainerEq(expected))).Times(1); + presenter.notify(ExpandSelectionFlag); + + //With 4,8 selected, we should finish with 3,4,5,7,8 selected + selection.clear(); + selection.insert(4); + selection.insert(8); + + expected.clear(); + expected.insert(3); + expected.insert(4); + expected.insert(5); + expected.insert(7); + expected.insert(8); + + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(selection)); + EXPECT_CALL(mockView, setSelection(ContainerEq(expected))).Times(1); + presenter.notify(ExpandSelectionFlag); + + //With nothing selected, we should finish with nothing selected + selection.clear(); + expected.clear(); + + EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(selection)); + EXPECT_CALL(mockView, setSelection(ContainerEq(expected))).Times(1); + presenter.notify(ExpandSelectionFlag); + + //Tidy up + AnalysisDataService::Instance().remove("TestWorkspace"); } }; diff --git a/Code/Mantid/MantidQt/MantidWidgets/CMakeLists.txt b/Code/Mantid/MantidQt/MantidWidgets/CMakeLists.txt index 64ebe528e24219b5c03cd3b499673b8c9d7814b1..d81e332cfdc21f380f59996da1427b0b5a751d01 100644 --- a/Code/Mantid/MantidQt/MantidWidgets/CMakeLists.txt +++ b/Code/Mantid/MantidQt/MantidWidgets/CMakeLists.txt @@ -12,6 +12,7 @@ set ( SRC_FILES src/FitPropertyBrowser.cpp src/FormulaDialogEditor.cpp src/FunctionBrowser.cpp + src/HintingLineEdit.cpp src/InstrumentSelector.cpp src/MantidHelpWindow.cpp src/MWDiag.cpp @@ -53,6 +54,7 @@ set ( MOC_FILES inc/MantidQtMantidWidgets/FindDialog.h inc/MantidQtMantidWidgets/FitPropertyBrowser.h inc/MantidQtMantidWidgets/FunctionBrowser.h + inc/MantidQtMantidWidgets/HintingLineEdit.h inc/MantidQtMantidWidgets/CatalogSearch.h inc/MantidQtMantidWidgets/CatalogSelector.h inc/MantidQtMantidWidgets/InstrumentSelector.h @@ -87,8 +89,10 @@ set ( MOC_FILES # Add the include files are NOT already in MOC_FILES set ( INC_FILES ${MOC_FILES} + inc/MantidQtMantidWidgets/AlgorithmHintStrategy.h inc/MantidQtMantidWidgets/CatalogHelper.h inc/MantidQtMantidWidgets/WidgetDllOption.h + inc/MantidQtMantidWidgets/HintStrategy.h ) # QtDesigner UI files to process @@ -113,6 +117,10 @@ set ( TEST_PY_FILES test/MWRunFilesTest.py ) +set ( TEST_FILES + AlgorithmHintStrategyTest.h +) + find_package (Qt4 REQUIRED QtHelp QtWebKit QtNetwork QUIET) include(${QT_USE_FILE}) @@ -141,12 +149,10 @@ target_link_libraries ( MantidWidgets MantidQtAPI QtPropertyBrowser ) ########################################################################### -# Unit tests setup +# Testing ########################################################################### -if ( PYUNITTEST_FOUND ) - pyunittest_add_test (${CMAKE_CURRENT_SOURCE_DIR}/test MantidWidgetsTest ${TEST_PY_FILES} ) -endif () +add_subdirectory ( test ) ########################################################################### # Installation settings diff --git a/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/AlgorithmHintStrategy.h b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/AlgorithmHintStrategy.h new file mode 100644 index 0000000000000000000000000000000000000000..760595d9561116f162af880aad35b6eb36de03d8 --- /dev/null +++ b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/AlgorithmHintStrategy.h @@ -0,0 +1,67 @@ +#ifndef MANTID_MANTIDWIDGETS_ALGORITHMHINTSTRATEGY_H +#define MANTID_MANTIDWIDGETS_ALGORITHMHINTSTRATEGY_H + +#include "MantidAPI/IAlgorithm.h" +#include "MantidQtMantidWidgets/HintStrategy.h" + +using namespace Mantid::API; + +namespace MantidQt +{ + namespace MantidWidgets + { + /** AlgorithmHintStrategy : Produces hints using a given algorithm's properties. + + Copyright © 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory + + This file is part of Mantid. + + Mantid is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + Mantid is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + File change history is stored at: <https://github.com/mantidproject/mantid> + Code Documentation is available at: <http://doxygen.mantidproject.org> + */ + class AlgorithmHintStrategy : public HintStrategy + { + public: + AlgorithmHintStrategy(IAlgorithm_sptr algorithm, std::set<std::string> blacklist) : m_algorithm(algorithm), m_blacklist(blacklist) + { + } + + virtual ~AlgorithmHintStrategy() {}; + + virtual std::map<std::string,std::string> createHints() + { + std::map<std::string,std::string> hints; + + auto properties = m_algorithm->getProperties(); + for(auto it = properties.begin(); it != properties.end(); ++it) + { + const std::string name = (*it)->name(); + + //If it's not in the blacklist, add the property to our hints + if(m_blacklist.find(name) == m_blacklist.end()) + hints[name] = (*it)->briefDocumentation(); + } + + return hints; + } + private: + IAlgorithm_sptr m_algorithm; + std::set<std::string> m_blacklist; + }; + } +} + +#endif /* MANTID_MANTIDWIDGETS_ALGORITHMHINTSTRATEGY_H */ diff --git a/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintStrategy.h b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintStrategy.h new file mode 100644 index 0000000000000000000000000000000000000000..0554ac3609d3a55ec41fa20eb5f0a1e4a8517224 --- /dev/null +++ b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintStrategy.h @@ -0,0 +1,48 @@ +#ifndef MANTID_MANTIDWIDGETS_HINTSTRATEGY_H +#define MANTID_MANTIDWIDGETS_HINTSTRATEGY_H + +#include <map> +#include <string> + +namespace MantidQt +{ + namespace MantidWidgets + { + /** HintStrategy : Provides an interface for generating hints to be used by a HintingLineEdit. + + Copyright © 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory + + This file is part of Mantid. + + Mantid is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + Mantid is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + File change history is stored at: <https://github.com/mantidproject/mantid> + Code Documentation is available at: <http://doxygen.mantidproject.org> + */ + class HintStrategy + { + public: + HintStrategy() {}; + virtual ~HintStrategy() {}; + + /** Create a list of hints for auto completion + + @returns A map of keywords to short descriptions for the keyword. + */ + virtual std::map<std::string,std::string> createHints() = 0; + }; + } +} + +#endif /* MANTID_MANTIDWIDGETS_HINTSTRATEGY_H */ diff --git a/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintingLineEdit.h b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintingLineEdit.h new file mode 100644 index 0000000000000000000000000000000000000000..76df20b98b42babb2621edfdfe5a5c9932f52133 --- /dev/null +++ b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintingLineEdit.h @@ -0,0 +1,67 @@ +#ifndef MANTID_MANTIDWIDGETS_HINTINGLINEEDIT_H_ +#define MANTID_MANTIDWIDGETS_HINTINGLINEEDIT_H_ + +#include "MantidKernel/System.h" +#include "MantidAPI/AlgorithmFactory.h" +#include "WidgetDllOption.h" + +#include <map> +#include <QtGui> +#include <string> + +//------------------------------------------------------------------------------ +// Forward declaration +//------------------------------------------------------------------------------ +namespace MantidQt +{ + namespace MantidWidgets + { + /** HintingLineEdit : A QLineEdit widget providing autocompletion. + + Copyright © 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory + + This file is part of Mantid. + + Mantid is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + Mantid is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + File change history is stored at: <https://github.com/mantidproject/mantid> + Code Documentation is available at: <http://doxygen.mantidproject.org> + */ + class EXPORT_OPT_MANTIDQT_MANTIDWIDGETS HintingLineEdit : public QLineEdit + { + Q_OBJECT + public: + HintingLineEdit(QWidget *parent, const std::map<std::string,std::string> &hints); + virtual ~HintingLineEdit(); + protected: + virtual void keyPressEvent(QKeyEvent* e); + void updateMatches(); + void showToolTip(); + void insertSuggestion(); + void clearSuggestion(); + void nextSuggestion(); + void prevSuggestion(); + std::string m_curKey; + std::string m_curMatch; + std::map<std::string,std::string> m_matches; + std::map<std::string,std::string> m_hints; + bool m_dontComplete; + QLabel* m_hintLabel; + protected slots: + void updateHints(const QString& text); + }; + } //namespace MantidWidgets +} //namepsace MantidQt + +#endif /* MANTID_MANTIDWIDGETS_HINTINGLINEEDIT_H_ */ diff --git a/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintingLineEditFactory.h b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintingLineEditFactory.h new file mode 100644 index 0000000000000000000000000000000000000000..1b14d6e39397726a742eea5333d3131d69fc64cb --- /dev/null +++ b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintingLineEditFactory.h @@ -0,0 +1,61 @@ +#ifndef MANTID_MANTIDWIDGETS_HINTINGLINEEDITFACTORY_H +#define MANTID_MANTIDWIDGETS_HINTINGLINEEDITFACTORY_H + +#include <QStyledItemDelegate> + +#include "MantidAPI/AlgorithmManager.h" +#include "MantidQtMantidWidgets/HintingLineEdit.h" +#include "MantidQtMantidWidgets/HintStrategy.h" + +using namespace Mantid::API; +using namespace Mantid::Kernel; +using namespace MantidQt::MantidWidgets; + +namespace MantidQt +{ + namespace CustomInterfaces + { + /** HintingLineEditFactory : A QStyledItemDelegate that produces HintingLineEdits using the given hint strategy. + + Copyright © 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory + + This file is part of Mantid. + + Mantid is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + Mantid is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + File change history is stored at: <https://github.com/mantidproject/mantid> + Code Documentation is available at: <http://doxygen.mantidproject.org> + */ + class HintingLineEditFactory : public QStyledItemDelegate + { + public: + HintingLineEditFactory(HintStrategy* hintStrategy) : m_strategy(hintStrategy) {}; + virtual ~HintingLineEditFactory() {}; + virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const + { + Q_UNUSED(option); + Q_UNUSED(index); + + auto editor = new HintingLineEdit(parent, m_strategy->createHints()); + editor->setFrame(false); + + return editor; + } + protected: + boost::scoped_ptr<HintStrategy> m_strategy; + }; + } +} + +#endif /* MANTID_MANTIDWIDGETS_HINTINGLINEEDITFACTORY_H */ diff --git a/Code/Mantid/MantidQt/MantidWidgets/src/FitPropertyBrowser.cpp b/Code/Mantid/MantidQt/MantidWidgets/src/FitPropertyBrowser.cpp index 7569e77f952bcddb3d7efc1411384f3c1cdd19a1..a722a10d84c6227e53bb1aa5ea45ff02f62a6d4e 100644 --- a/Code/Mantid/MantidQt/MantidWidgets/src/FitPropertyBrowser.cpp +++ b/Code/Mantid/MantidQt/MantidWidgets/src/FitPropertyBrowser.cpp @@ -3250,7 +3250,7 @@ void FitPropertyBrowser::functionHelp() if ( handler ) { // Create and open the URL of the help page - QString url = QString::fromStdString( "http://www.mantidproject.org/" + handler->ifun()->name() ); + QString url = QString::fromStdString( "http://docs.mantidproject.org/fitfunctions/" + handler->ifun()->name() ); QDesktopServices::openUrl(QUrl(url)); } } diff --git a/Code/Mantid/MantidQt/MantidWidgets/src/HintingLineEdit.cpp b/Code/Mantid/MantidQt/MantidWidgets/src/HintingLineEdit.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0c128d66690557795cd762a65db88befb2166fe7 --- /dev/null +++ b/Code/Mantid/MantidQt/MantidWidgets/src/HintingLineEdit.cpp @@ -0,0 +1,201 @@ +#include "MantidQtMantidWidgets/HintingLineEdit.h" + +#include <boost/algorithm/string.hpp> +#include <QToolTip> + +namespace MantidQt +{ + namespace MantidWidgets + { + HintingLineEdit::HintingLineEdit(QWidget *parent, const std::map<std::string,std::string> &hints) : QLineEdit(parent), m_hints(hints), m_dontComplete(false) + { + m_hintLabel = new QLabel(this, Qt::ToolTip); + m_hintLabel->setMargin(1 + style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, 0, m_hintLabel)); + m_hintLabel->setFrameStyle(QFrame::StyledPanel); + m_hintLabel->setAlignment(Qt::AlignLeft); + m_hintLabel->setWordWrap(true); + m_hintLabel->setIndent(1); + m_hintLabel->setAutoFillBackground(true); + m_hintLabel->setPalette(QToolTip::palette()); + m_hintLabel->setForegroundRole(QPalette::ToolTipText); + m_hintLabel->setBackgroundRole(QPalette::ToolTipBase); + m_hintLabel->ensurePolished(); + + connect(this, SIGNAL(textEdited(const QString&)), this, SLOT(updateHints(const QString&))); + } + + HintingLineEdit::~HintingLineEdit() + { + } + + /** Handle a key press event. + + @param e : A pointer to the event + */ + void HintingLineEdit::keyPressEvent(QKeyEvent* e) + { + m_dontComplete = (e->key() == Qt::Key_Backspace || e->key() == Qt::Key_Delete || e->key() == Qt::Key_Space); + + if(e->key() == Qt::Key_Up) + { + prevSuggestion(); + return; + } + + if(e->key() == Qt::Key_Down) + { + nextSuggestion(); + return; + } + QLineEdit::keyPressEvent(e); + } + + /** Rebuild a list of hints whenever the user edits the text, and use the hints + to make auto completion suggestions. + + @param text : The new contents of the QLineEdit + */ + void HintingLineEdit::updateHints(const QString& text) + { + const size_t curPos = (size_t)cursorPosition(); + const std::string line = text.toStdString(); + + //Get everything before the cursor + std::string prefix = line.substr(0, curPos); + + //Now remove everything before the last ',' to give us the current word + std::size_t startPos = prefix.find_last_of(","); + if(startPos != std::string::npos) + prefix = prefix.substr(startPos + 1, prefix.size() - (startPos + 1)); + + //Remove any leading or trailing whitespace + boost::trim(prefix); + + //Set the current key/prefix + m_curKey = prefix; + + //Update our current list of matches + updateMatches(); + + //Show the potential matches in a tooltip + showToolTip(); + + //Suggest one of them to the user via auto-completion + insertSuggestion(); + } + + /** Updates the list of hints matching the user's current input */ + void HintingLineEdit::updateMatches() + { + m_curMatch.clear(); + m_matches.clear(); + + for(auto it = m_hints.begin(); it != m_hints.end(); ++it) + { + const std::string& hint = it->first; + + if(hint.length() < m_curKey.length()) + continue; + + const std::string hintPrefix = hint.substr(0, m_curKey.length()); + + if(m_curKey == hintPrefix) + m_matches[hint] = it->second; + } + } + + /** Show a tooltip with the current relevant hints */ + void HintingLineEdit::showToolTip() + { + QString hintList; + for(auto mIt = m_matches.begin(); mIt != m_matches.end(); ++mIt) + { + hintList += "<b>" + QString::fromStdString(mIt->first) + "</b><br />\n"; + if(!mIt->second.empty()) + hintList += QString::fromStdString(mIt->second) + "<br />\n"; + } + + if(!hintList.trimmed().isEmpty()) + { + m_hintLabel->show(); + m_hintLabel->setText(hintList.trimmed()); + m_hintLabel->adjustSize(); + m_hintLabel->move(mapToGlobal(QPoint(0, height()))); + } + else + { + m_hintLabel->hide(); + } + } + + /** Insert an auto completion suggestion beneath the user's cursor and select it */ + void HintingLineEdit::insertSuggestion() + { + if(m_curKey.length() < 1 || m_matches.size() < 1 || m_dontComplete) + return; + + //If we don't have a match, just use the first one in the map + if(m_curMatch.empty()) + m_curMatch = m_matches.begin()->first; + + QString line = text(); + const int curPos = cursorPosition(); + + //Don't perform insertions mid-word + if(curPos + 1 < line.size() && line[curPos+1].isLetterOrNumber()) + return; + + //Insert a suggestion under the cursor, then select it + line = line.left(curPos) + QString::fromStdString(m_curMatch).mid((int)m_curKey.size()) + line.mid(curPos); + + setText(line); + setSelection(curPos, (int)m_curMatch.size()); + } + + /** Remove any existing auto completion suggestion */ + void HintingLineEdit::clearSuggestion() + { + if(!hasSelectedText()) + return; + + //Carefully cut out the selected text + QString line = text(); + line = line.left(selectionStart()) + line.mid(selectionStart() + selectedText().length()); + setText(line); + } + + /** Change to the next available auto completion suggestion */ + void HintingLineEdit::nextSuggestion() + { + clearSuggestion(); + //Find the next suggestion in the hint map + auto it = m_matches.find(m_curMatch); + if(it != m_matches.end()) + { + it++; + if(it == m_matches.end()) + m_curMatch = m_matches.begin()->first; + else + m_curMatch = it->first; + insertSuggestion(); + } + } + + /** Change to the previous auto completion suggestion */ + void HintingLineEdit::prevSuggestion() + { + clearSuggestion(); + //Find the previous suggestion in the hint map + auto it = m_matches.find(m_curMatch); + if(it != m_matches.end()) + { + it--; + if(it == m_matches.end()) + m_curMatch = m_matches.rbegin()->first; + else + m_curMatch = it->first; + insertSuggestion(); + } + } + } //namespace MantidWidgets +} //namepsace MantidQt diff --git a/Code/Mantid/MantidQt/MantidWidgets/test/AlgorithmHintStrategyTest.h b/Code/Mantid/MantidQt/MantidWidgets/test/AlgorithmHintStrategyTest.h new file mode 100644 index 0000000000000000000000000000000000000000..c0da65e6b89c8a987ac3d22d3be527cca037bad7 --- /dev/null +++ b/Code/Mantid/MantidQt/MantidWidgets/test/AlgorithmHintStrategyTest.h @@ -0,0 +1,64 @@ +#ifndef MANTID_MANTIDWIDGETS_ALGORITHMHINTSTRATEGYTEST_H +#define MANTID_MANTIDWIDGETS_ALGORITHMHINTSTRATEGYTEST_H + +#include <cxxtest/TestSuite.h> +#include "MantidAPI/FrameworkManager.h" +#include "MantidAPI/AlgorithmManager.h" +#include "MantidQtMantidWidgets/HintStrategy.h" +#include "MantidQtMantidWidgets/AlgorithmHintStrategy.h" + +using namespace MantidQt::MantidWidgets; +using namespace Mantid::API; + +//===================================================================================== +// Functional tests +//===================================================================================== +class AlgorithmHintStrategyTest : public CxxTest::TestSuite +{ +public: + // This pair of boilerplate methods prevent the suite being created statically + // This means the constructor isn't called when running other tests + static AlgorithmHintStrategyTest *createSuite() { return new AlgorithmHintStrategyTest(); } + static void destroySuite( AlgorithmHintStrategyTest *suite ) { delete suite; } + + AlgorithmHintStrategyTest() + { + FrameworkManager::Instance(); + m_propAlg = AlgorithmManager::Instance().create("PropertyAlgorithm"); + //Expected hints for PropertyAlgorithm + m_propMap["IntValue"] = ""; + m_propMap["DoubleValue"] = ""; + m_propMap["BoolValue"] = ""; + m_propMap["StringValue"] = ""; + m_propMap["PositiveIntValue"] = ""; + m_propMap["PositiveIntValue1"] = ""; + m_propMap["IntArray"] = ""; + m_propMap["DoubleArray"] = ""; + m_propMap["StringArray"] = ""; + } + + void testCreateHints() + { + boost::scoped_ptr<HintStrategy> strategy(new AlgorithmHintStrategy(m_propAlg, std::set<std::string>())); + TS_ASSERT_EQUALS(m_propMap, strategy->createHints()); + } + + void testBlacklist() + { + std::set<std::string> blacklist; + blacklist.insert("DoubleValue"); + blacklist.insert("IntArray"); + + boost::scoped_ptr<HintStrategy> strategy(new AlgorithmHintStrategy(m_propAlg, blacklist)); + auto expected = m_propMap; + expected.erase("DoubleValue"); + expected.erase("IntArray"); + TS_ASSERT_EQUALS(expected, strategy->createHints()); + } + +protected: + IAlgorithm_sptr m_propAlg; + std::map<std::string,std::string> m_propMap; +}; + +#endif /*MANTID_MANTIDWIDGETS_ALGORITHMHINTSTRATEGYTEST_H */ diff --git a/Code/Mantid/MantidQt/MantidWidgets/test/CMakeLists.txt b/Code/Mantid/MantidQt/MantidWidgets/test/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..33347b2cbb92e3b61cdf42e47a2eca132b0440dc --- /dev/null +++ b/Code/Mantid/MantidQt/MantidWidgets/test/CMakeLists.txt @@ -0,0 +1,13 @@ +if ( CXXTEST_FOUND ) + include_directories ( SYSTEM ${CXXTEST_INCLUDE_DIR} ${GMOCK_INCLUDE_DIR} ${GTEST_INCLUDE_DIR} ) + + cxxtest_add_test ( MantidWidgetsTest ${TEST_FILES} ) + target_link_libraries( MantidWidgetsTest MantidWidgets ) + + # Add to the 'UnitTests' group in VS + set_property( TARGET MantidWidgetsTest PROPERTY FOLDER "UnitTests" ) +endif () + +if ( PYUNITTEST_FOUND ) + pyunittest_add_test (${CMAKE_CURRENT_SOURCE_DIR} MantidWidgetsTest ${TEST_PY_FILES} ) +endif () diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SliderHandler.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SliderHandler.h index c4e7b2199168301f87329ad567d739f3b837c137..ca1ca8c7b2661a710e74553e0cf6fc5130aab9cc 100644 --- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SliderHandler.h +++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SliderHandler.h @@ -55,6 +55,10 @@ class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SliderHandler : public ISliderHandler void ConfigureSliders( QRect draw_area, SpectrumDataSource* data_source ); + /// Configure the image scrollbars for the specified data and drawing area + void ReConfigureSliders( QRect draw_area, + SpectrumDataSource* data_source ); + /// Configure the horizontal scrollbar to cover the specified range void ConfigureHSlider( int n_data_steps, int n_pixels ); diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumDisplay.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumDisplay.h index 1023476010caa50bd15e243e1961fb116b91301a..0e79a47189bc57de9a9e2bb4c53d0367af331b08 100644 --- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumDisplay.h +++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumDisplay.h @@ -76,6 +76,9 @@ class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SpectrumDisplay /// Rebuild the scroll bars and image due to change of xmin, xmax, step void UpdateRange(); + /// Updates scroll bars when window is resized + void HandleResize(); + /// Rebuild image from data source, due to resize or scroll bar movement void UpdateImage(); @@ -95,8 +98,17 @@ class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SpectrumDisplay /// Set vertical graph with data from the array at the specified x value void SetVGraph( double x ); + /// Show information about the point (x, y) on the image in the table + std::vector<std::string> ShowInfoList( double x, double y ); + + QPoint GetPlotTransform( QPair<double, double> values ); + QPair<double, double> GetPlotInvTransform( QPoint point ); + + // Gets the last Y value pointed at + double GetLastY(); + protected: - SpectrumPlotItem* spectrum_plot_item; + SpectrumPlotItem* spectrum_plot_item; private: /// Check if the DataSource has been changed under us @@ -105,20 +117,17 @@ class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SpectrumDisplay /// Get the rectangle currently covered by the image in pixel coordinates void GetDisplayRectangle( QRect &rect ); - /// Show information about the point (x, y) on the image in the table - void ShowInfoList( double x, double y ); - std::vector<QRgb> positive_color_table; std::vector<QRgb> negative_color_table; std::vector<double> intensity_table; - SpectrumDataSource* data_source; + SpectrumDataSource* data_source; DataArray* data_array; QwtPlot* spectrum_plot; - ISliderHandler* slider_handler; - IRangeHandler* range_handler; + ISliderHandler* slider_handler; + IRangeHandler* range_handler; GraphDisplay* h_graph_display; GraphDisplay* v_graph_display; @@ -134,6 +143,8 @@ class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SpectrumDisplay double total_y_max; double total_x_min; double total_x_max; + + double m_lastY; }; } // namespace SpectrumView diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumView.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumView.h index 346a1eddf1696aa76f30898df726307192ef47b7..64df84aadf0f916fad1c82b89db0bc5906285277 100644 --- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumView.h +++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumView.h @@ -58,6 +58,7 @@ class RangeHandler; class SliderHandler; class SpectrumDisplay; class SVConnections; +class MatrixWSDataSource; class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SpectrumView : public QMainWindow, public MantidQt::API::WorkspaceObserver { @@ -75,6 +76,7 @@ protected slots: void updateWorkspace(); protected: + virtual void resizeEvent(QResizeEvent * event); void preDeleteHandle(const std::string& wsName,const boost::shared_ptr<Mantid::API::Workspace> ws); void afterReplaceHandle(const std::string& wsName,const boost::shared_ptr<Mantid::API::Workspace> ws); @@ -84,6 +86,8 @@ private: GraphDisplay* h_graph; GraphDisplay* v_graph; + MatrixWSDataSource *m_data_source; + // keep void pointers to the following objects, to avoid having to // include ui_SpectrumView.h, which disappears by the time MantidPlot is // being built. We need the pointers so we can delete them in the diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/SVConnections.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/SVConnections.cpp index daa4f1203634fe869d5cb39d6c51789d660cf31d..0e63b331036a5c663c3fcc640343261df4ab1a57 100644 --- a/Code/Mantid/MantidQt/SpectrumViewer/src/SVConnections.cpp +++ b/Code/Mantid/MantidQt/SpectrumViewer/src/SVConnections.cpp @@ -308,32 +308,36 @@ bool SVConnections::eventFilter(QObject *object, QEvent *event) if (m_picker_x < 0) return false; if (m_picker_y < 0) return false; - // temporary variables so we can step back to previous state + // Convert Y position to values so that a change of 1 corresponds to a change in spec. no by 1 int newX = m_picker_x; - int newY = m_picker_y; + double lastY = spectrum_display->GetLastY(); QKeyEvent *keyEvent = dynamic_cast<QKeyEvent *>(event); int key = keyEvent->key(); switch (key) { case Qt::Key_Up: - newY += -1; + lastY += 1.0; break; case Qt::Key_Down: - newY += 1; + lastY -= 1.0; break; case Qt::Key_Left: - newX += -1; + newX--; break; case Qt::Key_Right: - newX += 1; + newX++; break; default: // this is not the event we were looking for return false; } - // see if we should react + // Convert Y position back to pixel position + QPoint newPoint = spectrum_display->GetPlotTransform(qMakePair(0.0, lastY)); + int newY = newPoint.y(); + + // Ignore the event if the position is outside of the plot area if (newX < 0) return false; if (newY < 0) return false; const QSize canvasSize = sv_ui->spectrumPlot->canvas()->size(); @@ -348,8 +352,14 @@ bool SVConnections::eventFilter(QObject *object, QEvent *event) QPoint canvasPos = sv_ui->spectrumPlot->canvas()->mapToGlobal(QPoint(0,0)); // move the cursor to the correct position sv_ui->spectrumPlot->canvas()->cursor().setPos(QPoint(canvasPos.x()+m_picker_x, canvasPos.y()+m_picker_y)); - // update the pointed at position - spectrum_display->SetPointedAtPoint( QPoint(m_picker_x, m_picker_y) ); + + QPair<double, double> transPoints = spectrum_display->GetPlotInvTransform(QPoint(newX, newY)); + + spectrum_display->SetHGraph( lastY ); + spectrum_display->SetVGraph( transPoints.first ); + + spectrum_display->ShowInfoList( transPoints.first, lastY ); + // consume the event return true; } @@ -371,6 +381,7 @@ void SVConnections::toggle_Hscroll() sv_ui->imageHorizontalScrollBar->setVisible( is_on ); sv_ui->imageHorizontalScrollBar->setEnabled( is_on ); spectrum_display->UpdateImage(); + spectrum_display->HandleResize(); } @@ -380,6 +391,7 @@ void SVConnections::toggle_Vscroll() sv_ui->imageVerticalScrollBar->setVisible( is_on ); sv_ui->imageVerticalScrollBar->setEnabled( is_on ); spectrum_display->UpdateImage(); + spectrum_display->HandleResize(); } @@ -425,6 +437,7 @@ void SVConnections::imageSplitter_moved() vgraph_sizes.append( sizes[1] ); sv_ui->vgraphSplitter->setSizes( vgraph_sizes ); spectrum_display->UpdateImage(); + spectrum_display->HandleResize(); } /** diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/SliderHandler.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/SliderHandler.cpp index e2ce4353c19ef72b9889a0931611e44b828356cd..cd74df61297bc9870dcb7f2c6d8207e40aeb3e13 100644 --- a/Code/Mantid/MantidQt/SpectrumViewer/src/SliderHandler.cpp +++ b/Code/Mantid/MantidQt/SpectrumViewer/src/SliderHandler.cpp @@ -3,6 +3,7 @@ #include <QScrollBar> #include "MantidQtSpectrumViewer/SliderHandler.h" +#include "MantidQtSpectrumViewer/SVUtils.h" namespace MantidQt { @@ -19,6 +20,30 @@ SliderHandler::SliderHandler( Ui_SpectrumViewer* sv_ui ) : ISliderHandler() } +/** + * Reconfigure the image scrollbars for the specified data and drawing area. + * + * Used when the size of the plot area has changed. + * + * @param draw_area Rectangle specifiying the region where the image will + * be drawn + * @param data_source SpectrumDataSource that provides the data to be drawn + */ +void SliderHandler::ReConfigureSliders( QRect draw_area, + SpectrumDataSource* data_source ) +{ + QScrollBar* v_scroll = sv_ui->imageVerticalScrollBar; + + int old_v_value = v_scroll->value(); + int n_rows = (int)data_source->GetNRows(); + int step = v_scroll->pageStep(); + + ConfigureSlider( v_scroll, n_rows, draw_area.height(), old_v_value ); + + v_scroll->setValue(old_v_value + (step / 2)); +} + + /** * Configure the image scrollbars for the specified data and drawing area. * diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumDisplay.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumDisplay.cpp index 0b5caea9fdbfc69d10e99fe483dbdad3cbe7f59e..0274180673c988bc19ae6dee7500cf9f0a5bca9e 100644 --- a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumDisplay.cpp +++ b/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumDisplay.cpp @@ -14,6 +14,7 @@ #include "MantidQtSpectrumViewer/ColorMaps.h" #include "MantidQtSpectrumViewer/QtUtils.h" #include "MantidQtSpectrumViewer/SVUtils.h" +#include "MantidQtSpectrumViewer/SliderHandler.h" namespace MantidQt { @@ -42,7 +43,8 @@ SpectrumDisplay::SpectrumDisplay( QwtPlot* spectrum_plot, QTableWidget* table_widget ) : data_source(0), spectrum_plot(spectrum_plot), slider_handler(slider_handler), range_handler(range_handler), h_graph_display(h_graph), v_graph_display(v_graph), - image_table(table_widget) + image_table(table_widget), + m_lastY(0.0) { ColorMaps::GetColorMap( ColorMaps::HEAT, 256, @@ -102,8 +104,8 @@ void SpectrumDisplay::SetDataSource( SpectrumDataSource* data_source ) pointed_at_x = DBL_MAX; pointed_at_y = DBL_MAX; - int n_rows = 500; // get reasonable size initial image data - int n_cols = 500; + int n_rows = static_cast<int>(total_y_max - total_y_min); // get reasonable size initial image data + int n_cols = 500; // data_array is deleted in the SpectrumPlotItem data_array = data_source->GetDataArray( total_x_min, total_x_max, total_y_min, total_y_max, @@ -164,6 +166,16 @@ void SpectrumDisplay::UpdateRange() UpdateImage(); } +/** + * Updates the rnages of the scroll bars when the window is resized. + */ +void SpectrumDisplay::HandleResize() +{ + QRect draw_area; + GetDisplayRectangle( draw_area ); + dynamic_cast<SliderHandler*>(slider_handler)->ReConfigureSliders( draw_area, data_source ); +} + /** * This will rebuild the image from the data source. It should be invoked * when the scroll bar is moved, the plot area is resize or the color or @@ -352,6 +364,24 @@ void SpectrumDisplay::SetIntensity( double control_parameter ) } +QPoint SpectrumDisplay::GetPlotTransform( QPair<double, double> values ) +{ + double x = spectrum_plot->transform( QwtPlot::xBottom, values.first ); + double y = spectrum_plot->transform( QwtPlot::yLeft, values.second ); + + return QPoint((int)x, (int)y); +} + + +QPair<double, double> SpectrumDisplay::GetPlotInvTransform( QPoint point ) +{ + double x = spectrum_plot->invTransform( QwtPlot::xBottom, point.x() ); + double y = spectrum_plot->invTransform( QwtPlot::yLeft, point.y() ); + + return qMakePair(x,y); +} + + /** * Extract data from horizontal and vertical cuts across the image and * show those as graphs in the horizontal and vertical graphs and show @@ -369,15 +399,14 @@ QPair<double,double> SpectrumDisplay::SetPointedAtPoint( QPoint point, int /*mou return qMakePair(0.0,0.0); } - double x = spectrum_plot->invTransform( QwtPlot::xBottom, point.x() ); - double y = spectrum_plot->invTransform( QwtPlot::yLeft, point.y() ); + QPair<double, double> transPoints = GetPlotInvTransform(point); - SetHGraph( y ); - SetVGraph( x ); + SetHGraph( transPoints.second ); + SetVGraph( transPoints.first ); - ShowInfoList( x, y ); + ShowInfoList( transPoints.first, transPoints.second ); - return qMakePair(x,y); + return transPoints; } /* @@ -478,8 +507,10 @@ void SpectrumDisplay::SetVGraph( double x ) * @param x The x coordinate of the pointed at location on the image. * @param y The y coordinate of the pointed at location on the image. */ -void SpectrumDisplay::ShowInfoList( double x, double y ) +std::vector<std::string> SpectrumDisplay::ShowInfoList( double x, double y ) { + m_lastY = y; + std::vector<std::string> info_list; data_source->GetInfoList( x, y, info_list ); int n_infos = (int)info_list.size() / 2; @@ -503,6 +534,17 @@ void SpectrumDisplay::ShowInfoList( double x, double y ) } image_table->resizeColumnsToContents(); + + return info_list; +} + + +/** + * Gets the last Y value (i.e. data row) the crosshair was pointed at. + */ +double SpectrumDisplay::GetLastY() +{ + return m_lastY; } diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumView.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumView.cpp index 12297305815a927362e73f6f5b460ca28c9c860b..4001f5c1690cf7d1f63b0e919b4319d219bf33db 100644 --- a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumView.cpp +++ b/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumView.cpp @@ -3,7 +3,6 @@ #include "MantidQtSpectrumViewer/SpectrumView.h" #include "MantidQtSpectrumViewer/ColorMaps.h" -#include "ui_SpectrumView.h" #include "MantidQtSpectrumViewer/SVConnections.h" #include "MantidQtSpectrumViewer/SpectrumDisplay.h" #include "MantidQtSpectrumViewer/SliderHandler.h" @@ -30,6 +29,7 @@ namespace SpectrumView SpectrumView::SpectrumView(QWidget *parent) : QMainWindow(parent, 0), WorkspaceObserver(), + m_data_source(NULL), m_ui(new Ui::SpectrumViewer()) { m_ui->setupUi(this); @@ -39,23 +39,33 @@ SpectrumView::~SpectrumView() { // std::cout << "SpectrumView destructor called" << std::endl; - delete h_graph; - delete v_graph; + delete h_graph; + delete v_graph; - delete m_ui; - delete m_slider_handler; - delete m_range_handler; - delete m_spectrum_display; - delete m_sv_connections; + delete m_ui; + delete m_slider_handler; + delete m_range_handler; + delete m_spectrum_display; + delete m_sv_connections; + delete m_data_source; if ( m_emode_handler) { delete m_emode_handler; } } + +void SpectrumView::resizeEvent(QResizeEvent * event) +{ + QMainWindow::resizeEvent(event); + + if(m_data_source) + m_spectrum_display->HandleResize(); +} + void SpectrumView::renderWorkspace(Mantid::API::MatrixWorkspace_const_sptr wksp) { - MatrixWSDataSource* data_source = new MatrixWSDataSource(wksp); - this->updateHandlers(data_source); + m_data_source = new MatrixWSDataSource(wksp); + this->updateHandlers(m_data_source); // Watch for the deletion of the associated workspace observeAfterReplace(); @@ -84,7 +94,7 @@ void SpectrumView::renderWorkspace(Mantid::API::MatrixWorkspace_const_sptr wksp) m_sv_connections = new SVConnections( m_ui, this, m_spectrum_display, h_graph, v_graph ); - m_spectrum_display->SetDataSource( data_source ); + m_spectrum_display->SetDataSource( m_data_source ); } /// Setup the various handlers (energy-mode, slider, range) @@ -109,7 +119,6 @@ void SpectrumView::updateHandlers(SpectrumDataSource* data_source) m_slider_handler = new SliderHandler( m_ui ); m_range_handler = new RangeHandler( m_ui ); - } /** Slot to close the window */ diff --git a/Code/Mantid/docs/source/algorithms/CalculateMSVesuvio-v1.rst b/Code/Mantid/docs/source/algorithms/CalculateMSVesuvio-v1.rst new file mode 100644 index 0000000000000000000000000000000000000000..8eddae38cacec7be66c60c70d46b481db262234b --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/CalculateMSVesuvio-v1.rst @@ -0,0 +1,59 @@ +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +Calculates the multiple scattering contribution for deep inelastic neutron scattering on +the `Vesuvio <http://www.isis.stfc.ac.uk/instruments/vesuvio/vesuvio4837.html>`__ instrument at +ISIS. The algorithm follows the procedures defined by J. Mayers et al. [1]_. + + +Usage +----- + +.. code-block:: python + + runs = "" # fill in run numbers here + ip_file = "" # fill in IP file here + data = LoadVesuvio(Filename=, SpectrumList=spectra, + Mode="SingleDifference", InstrumentParFile=ip_file) + # Cut it down to the typical range + data = CropWorkspace(raw_ws,XMin=50.0,XMax=562.0) + # Coarser binning + data = Rebin(raw_ws, Params=[49.5, 1.0, 562.5]) + + # Create sample shape + height = 0.1 # y-dir (m) + width = 0.1 # x-dir (m) + thick = 0.005 # z-dir (m) + + half_height, half_width, half_thick = 0.5*height, 0.5*width, 0.5*thick + xml_str = \ + " <cuboid id=\"sample-shape\"> " \ + + "<left-front-bottom-point x=\"%f\" y=\"%f\" z=\"%f\" /> " % (half_width,-half_height,half_thick) \ + + "<left-front-top-point x=\"%f\" y=\"%f\" z=\"%f\" /> " % (half_width, half_height, half_thick) \ + + "<left-back-bottom-point x=\"%f\" y=\"%f\" z=\"%f\" /> " % (half_width, -half_height, -half_thick) \ + + "<right-front-bottom-point x=\"%f\" y=\"%f\" z=\"%f\" /> " % (-half_width, -half_height, half_thick) \ + + "</cuboid>" + CreateSampleShape(data, xml_str) + atom_props = [1.007900, 0.9272392, 5.003738, + 16.00000, 3.2587662E-02, 13.92299, + 27.50000, 4.0172841E-02, 15.07701] + tot_scatter, ms_scatter = \ + CalculateMSVesuvio(data, NoOfMasses=3, SampleDensity=241, AtomicProperties=atom_props, + BeamRadius=2.5) + +References +---------- + +.. [1] J. Mayers, A.L. Fielding and R. Senesi, `Nucl. Inst Methods A 481, 454(2002) <http://dx.doi.org/10.1016/S0168-9002(01)01335-3>`__ + + + +.. categories:: diff --git a/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst b/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst index 7847a044b08c2530bab99a097c4a67c8b632892c..f8ed3e5798b872287d37fbf7041002d4d2578e3f 100644 --- a/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst +++ b/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst @@ -69,13 +69,12 @@ Usage **************************************************************** workspace 1 has 2 dimensions with 18231 points and 18231 events with d1 min_max=0.0:5.0, d2 min_max=-10.0:10.0 - workspace 2 has 2 dimensions with 15606 points and 15606 events + workspace 2 has 2 dimensions with 18360 points and 18360 events with d1 min_max=0.0:10.0, d2 min_max=-5.0:15.0 **************************************************************** - Merged WS has 2 dimensions with 33837 points and 33837 events + Merged WS has 2 dimensions with 36591 points and 36591 events with d1 min_max=0.0:10.0, d2 min_max=-10.0:15.0 **************************************************************** - .. categories:: diff --git a/Code/Mantid/docs/source/algorithms/SavePDFGui-v1.rst b/Code/Mantid/docs/source/algorithms/SavePDFGui-v1.rst new file mode 100644 index 0000000000000000000000000000000000000000..f81febe8d360da47932a45b170825fdb91fc4a9e --- /dev/null +++ b/Code/Mantid/docs/source/algorithms/SavePDFGui-v1.rst @@ -0,0 +1,57 @@ + +.. algorithm:: + +.. summary:: + +.. alias:: + +.. properties:: + +Description +----------- + +This algorithm saves G(r) files consistent with `PDFGui <http://www.diffpy.org/>`_. +The body of the file is of the form ``r Gr dr dGr``. + +Usage +----- +.. Try not to use files in your examples, + but if you cannot avoid it then the (small) files must be added to + autotestdata\UsageData and the following tag unindented + .. include:: ../usagedata-note.txt + +**Example - SavePDFGui** + +.. testcode:: SavePDFGuiExample + + # Create a host workspace + ws = CreateWorkspace(DataX=range(0,3), DataY=range(0,3), UnitX="Angstrom") + + # Create a filename + import os + path = os.path.join(os.path.expanduser("~"), "savepdfgui.gr") + + # Save as G(r) file + SavePDFGui(ws, path) + + # Check that the file exists + print os.path.isfile(path) + +Output: + +.. testoutput:: SavePDFGuiExample + + True + +.. testcleanup:: SavePDFGuiExample + + DeleteWorkspace(ws) + import os + try: + path = os.path.join(os.path.expanduser("~"), "savepdfgui.gr") + os.remove(path) + except: + pass + +.. categories:: + diff --git a/Code/Mantid/instrument/VESUVIO_Definition.xml b/Code/Mantid/instrument/VESUVIO_Definition.xml index fc0314f30a5d8cce1acc99f1880947f395442c2d..f2094e0a82d86de68fa02621c35cf82247ece61e 100644 --- a/Code/Mantid/instrument/VESUVIO_Definition.xml +++ b/Code/Mantid/instrument/VESUVIO_Definition.xml @@ -322,22 +322,22 @@ <type name="pixel forward" is="detector"> <cuboid id="shape"> - <left-front-bottom-point x="0.0125" y="-0.04" z="0.0" /> - <left-front-top-point x="0.0125" y="-0.04" z="0.003" /> - <left-back-bottom-point x="-0.0125" y="-0.04" z="0.0" /> - <right-front-bottom-point x="0.0125" y="0.04" z="0.0" /> + <left-front-bottom-point x="0.0125" y="-0.0395" z= "0.0045" /> + <left-front-top-point x="0.0125" y="0.0395" z= "0.0045" /> + <left-back-bottom-point x="0.0125" y="-0.0395" z= "-0.0045" /> + <right-front-bottom-point x="-0.0125" y="-0.0395" z= "0.0045" /> </cuboid> <algebra val="shape" /> </type> <type name="pixel back" is="detector"> - <cuboid id="shape"> - <left-front-bottom-point x="0.01" y="-0.02" z="0.0" /> - <left-front-top-point x="0.01" y="-0.02" z="0.003" /> - <left-back-bottom-point x="-0.01" y="-0.02" z="0.0" /> - <right-front-bottom-point x="0.01" y="0.02" z="0.0" /> + <cuboid id="shape" > + <left-front-bottom-point x="0.0125" y="-0.04" z= "0.0045" /> + <left-front-top-point x="0.0125" y="0.04" z= "0.0045" /> + <left-back-bottom-point x="0.0125" y="-0.04" z= "-0.0045" /> + <right-front-bottom-point x="-0.0125" y="-0.04" z= "0.0045" /> </cuboid> - <algebra val="shape" /> + <algebra val="shape" /> </type> <!-- DETECTOR ID LISTS --> @@ -357,4 +357,4 @@ <id start="3201" end="3232" /> </idlist> -</instrument> \ No newline at end of file +</instrument> diff --git a/Code/Mantid/instrument/VESUVIO_Parameters.xml b/Code/Mantid/instrument/VESUVIO_Parameters.xml index d1fcdc31ad6a09fa08cc82ad1f2cf21e231d59bd..f6d4504712725f916553e6e2dcac22fc428b26e9 100644 --- a/Code/Mantid/instrument/VESUVIO_Parameters.xml +++ b/Code/Mantid/instrument/VESUVIO_Parameters.xml @@ -7,106 +7,111 @@ <parameter name="monitor_spectrum"> <value val="1"/> </parameter> - + <!-- Back scattering spectrum numbers --> <parameter name="backward_scatter_spectra" type="string"> <value val="3-134"/> </parameter> - + <!-- Forward scattering spectrum numbers --> <parameter name="forward_scatter_spectra" type="string"> <value val="135-198"/> </parameter> - + <!-- Maximum TOF for loaded raw data (monitors use mon_tof_max below) --> <parameter name="tof_max"> <value val="600"/> </parameter> - + <!-- Maximum TOF for loaded monitor data --> <parameter name="monitor_tof_max"> <value val="700"/> </parameter> - + <!-- Constant that sets the monitor scale --> <parameter name="monitor_scale"> <value val="1000"/> </parameter> - + <!-- Double-difference mixing parameter (beta) --> <parameter name="double_diff_mixing"> <value val="0.28"/> </parameter> - + <!-- ======== Normalisation ranges. ======== These are different depending for the forward/backward scattering banks. --> - + <!-- Backward Scattering --> - + <!-- Sum over lower range --> <parameter name="backward_period_sum1" type="string"> <value val="300-400"/> </parameter> - + <!-- Sum over upper range --> <parameter name="backward_period_sum2" type="string"> <value val="550-600"/> </parameter> - + <!-- Monitor normalisation --> <parameter name="backward_monitor_norm" type="string"> <value val="600-700"/> </parameter> - + <!-- Normalisation by foil out --> <parameter name="backward_foil_out_norm" type="string"> <value val="410-430"/> </parameter> - + <!-- ====================================================== --> - + <!-- Forward Scattering --> <!-- Sum over lower range --> <parameter name="forward_period_sum1" type="string"> <value val="100-400"/> </parameter> - + <!-- Sum over upper range --> <parameter name="forward_period_sum2" type="string"> <value val="550-600"/> </parameter> - + <!-- Monitor normalisation --> <parameter name="forward_monitor_norm" type="string"> <value val="600-700"/> </parameter> - + <!-- Normalisation by foil out --> <parameter name="forward_foil_out_norm" type="string"> <value val="400-450"/> </parameter> - + <!-- ======== Resolution parameters ======== Defined at two levels: Instrument level for the common parameters then at component level below for the component specific ones --> - + <!-- Standard deviation of source-sample distribution (metres) --> <parameter name="sigma_l1"> <value val="0.021"/> </parameter> - + <!-- Standard deviation of sample-detector distribution (metres) --> <parameter name="sigma_l2"> <value val="0.023"/> </parameter> - + + <!-- Standard deviation of tof measurement (microseconds) --> + <parameter name="sigma_tof"> + <value val="0.3"/> + </parameter> + <!-- Standard deviation of detector theta distribution (radians) --> <parameter name="sigma_theta"> <value val="0.028"/> </parameter> - + <!-- Final energy of neutrons (meV) (Currently common but should it be?) --> <parameter name="efixed"> <value val="4908"/> @@ -117,7 +122,7 @@ <value val="24"/> </parameter> - <!-- Gaussian standard deviation of the analyser energy (efixed) (meV) + <!-- Gaussian standard deviation of the analyser energy (efixed) (meV) Note that this is not the HWHM but the standard deviation unlike the Lorentzian parameter --> <parameter name="sigma_gauss"> @@ -132,7 +137,35 @@ <value val="diffspec" /> </parameter> -</component-link> + <!-- Monitor workflow parameters --> + <parameter name="Workflow.Monitor1-SpectrumNumber" > + <value val="0" /> + </parameter> + + <!-- Area, thickness, attenuation and scale factor taken from TOSCA. --> + <!-- By lack of actual data and the fact the monitors would have been installed at --> + <!-- a similar time this is a reasonable guess. --> + <parameter name="Workflow.Monitor1-Area" > + <value val="5.391011e-5" /> + </parameter> + + <parameter name="Workflow.Monitor1-Thickness" > + <value val="0.013" /> + </parameter> + + <parameter name="Workflow.Monitor1-Attenuation" > + <value val="8.3" /> + </parameter> + + <parameter name="Workflow.Monitor1-ScalingFactor"> + <value val="1e9" /> + </parameter> + + <parameter name="Workflow.NamingConvention" type="string"> + <value val="AnalyserReflection" /> + </parameter> + +</component-link> <!-- End VESUVIO link --> <!-- ======================= Energy widths for foils ================================= --> @@ -143,7 +176,7 @@ <value val="144"/> </parameter> - <!-- Gaussian standard deviation of the foil energy (meV) + <!-- Gaussian standard deviation of the foil energy (meV) Note that this is not the HWHM but the standard deviation unlike the Lorentzian parameter --> <parameter name="sigma_gauss"> @@ -156,8 +189,8 @@ <parameter name="hwhm_lorentz"> <value val="144"/> </parameter> - - <!-- Gaussian standard deviation of the foil energy (meV) + + <!-- Gaussian standard deviation of the foil energy (meV) Note that this is not the HWHM but the standard deviation unlike the Lorentzian parameter --> <parameter name="sigma_gauss"> diff --git a/Code/Mantid/scripts/Inelastic/IndirectDiffractionReduction.py b/Code/Mantid/scripts/Inelastic/IndirectDiffractionReduction.py index fafc71c22180fbc7e5dedf17e2b6dcf864c3d967..f41533106ec1d3b1e82980bd7bb120bdb46e45ab 100644 --- a/Code/Mantid/scripts/Inelastic/IndirectDiffractionReduction.py +++ b/Code/Mantid/scripts/Inelastic/IndirectDiffractionReduction.py @@ -2,12 +2,14 @@ import mantid from msg_reducer import MSGReducer import inelastic_indirect_reduction_steps as steps + class MSGDiffractionReducer(MSGReducer): """Reducer for Diffraction on IRIS and TOSCA. """ def __init__(self): super(MSGDiffractionReducer, self).__init__() + self._grouping_policy = 'All' def _setup_steps(self): self.append_step(steps.IdentifyBadDetectors( @@ -36,11 +38,11 @@ class MSGDiffractionReducer(MSGReducer): self.append_step(steps.RebinToFirstSpectrum()) step = steps.Grouping() - step.set_grouping_policy("All") + step.set_grouping_policy(self._grouping_policy) self.append_step(step) # The "SaveItem" step saves the files in the requested formats. - if (len(self._save_formats) > 0): + if len(self._save_formats) > 0: step = steps.SaveItem() step.set_formats(self._save_formats) self.append_step(step) @@ -48,6 +50,17 @@ class MSGDiffractionReducer(MSGReducer): step = steps.Naming() self.append_step(step) + def set_grouping_policy(self, policy): + """ + Sets the grouping policy for the result data. + + @parm policy New grouping policy + """ + if not isinstance(policy, str): + raise ValueError('Grouping policy must be a string') + + self._grouping_policy = policy + def getStringProperty(workspace, property): """This function is used in the interface. diff --git a/Code/Mantid/scripts/Inelastic/dgreduce.py b/Code/Mantid/scripts/Inelastic/dgreduce.py index fed605942091eda6a0b2a3854b85ac8a85376aa9..df35acd037bc338f513e796bafa609b63921134f 100644 --- a/Code/Mantid/scripts/Inelastic/dgreduce.py +++ b/Code/Mantid/scripts/Inelastic/dgreduce.py @@ -45,7 +45,7 @@ def setup(instname=None,reload=False): def help(keyword=None) : """function returns help on reduction parameters. - Returns the list of the parameters availible if provided without arguments + Returns the list of the parameters available if provided without arguments or the description and the default value for the key requested """ if Reducer == None: @@ -54,7 +54,7 @@ def help(keyword=None) : Reducer.help(keyword) -def arb_units(wb_run,sample_run,ei_guess,rebin,map_file='default',monovan_run=None,**kwargs): +def arb_units(wb_run,sample_run,ei_guess,rebin,map_file='default',monovan_run=None,second_wb=None,**kwargs): """ One step conversion of run into workspace containing information about energy transfer Usage: >>arb_units(wb_run,sample_run,ei_guess,rebin) @@ -190,7 +190,10 @@ def arb_units(wb_run,sample_run,ei_guess,rebin,map_file='default',monovan_run=No wb_for_monovanadium = kwargs['wb_for_monovanadium'] del kwargs['wb_for_monovanadium'] else: - wb_for_monovanadium = wb_run; + if second_wb is None: + wb_for_monovanadium = wb_run; + else: + wb_for_monovanadium = second_wb; @@ -256,7 +259,7 @@ def arb_units(wb_run,sample_run,ei_guess,rebin,map_file='default',monovan_run=No #this sums the runs together before passing the summed file to the rest of the reduction #this circumvents the inbuilt method of summing which fails to sum the files for diag - #the D.E.C. tries to be too clever so we have to fool it into thinking the raw file is already exists as a workpsace + #the D.E.C. tries to be too clever so we have to fool it into thinking the raw file is already exists as a workspace sumfilename=Reducer.instr_name+str(sample_run[0])+'.raw' sample_run =sum_files(Reducer.instr_name,sumfilename, sample_run) common.apply_calibration(Reducer.instr_name,sample_run,Reducer.det_cal_file) @@ -291,7 +294,7 @@ def arb_units(wb_run,sample_run,ei_guess,rebin,map_file='default',monovan_run=No if not masks_done: print '########### Run diagnose for sample run ##############################' masking = Reducer.diagnose(wb_run,sample = mask_run, - second_white = None,print_results=True) + second_white=None,print_results=True) header = "Diag Processed workspace with {0:d} spectra and masked {1:d} bad spectra" @@ -329,7 +332,7 @@ def arb_units(wb_run,sample_run,ei_guess,rebin,map_file='default',monovan_run=No # calculate absolute units integral and apply it to the workspace if monovan_run != None or Reducer.mono_correction_factor != None : - deltaE_wkspace_sample = apply_absolute_normalization(Reducer,deltaE_wkspace_sample,monovan_run,ei_guess,wb_run) + deltaE_wkspace_sample = apply_absolute_normalization(Reducer,deltaE_wkspace_sample,monovan_run,ei_guess,wb_for_monovanadium) # Hack for multirep #if isinstance(monovan_run,int): # filename = common.find_file(monovan_run) @@ -412,7 +415,7 @@ def abs_units(wb_for_run,sample_run,monovan_run,wb_for_monovanadium,samp_rmm,sam variation -The number of medians the ratio of the first/second white beam can deviate from the average by (default=1.1) bleed_test - If true then the CreatePSDBleedMask algorithm is run - bleed_maxrate - If the bleed test is on then this is the maximum framerate allowed in a tube + bleed_maxrate - If the bleed test is on then this is the maximum frame rate allowed in a tube bleed_pixels - If the bleed test is on then this is the number of pixels ignored within the bleed test diagnostic print_results - If True then the results are printed to the screen @@ -438,11 +441,10 @@ def abs_units(wb_for_run,sample_run,monovan_run,wb_for_monovanadium,samp_rmm,sam abs_units_van_range=[-40,40] integral range for absolute vanadium data - mono_correction_factor=float User specified correction factor for absolute units normalisation + mono_correction_factor=float User specified correction factor for absolute units normalization """ kwargs['monovan_mapfile'] = monovan_mapfile - kwargs['wb_for_monovanadium']= wb_for_monovanadium kwargs['sample_mass'] = samp_mass kwargs['sample_rmm'] = samp_rmm @@ -462,7 +464,7 @@ def abs_units(wb_for_run,sample_run,monovan_run,wb_for_monovanadium,samp_rmm,sam results_name = wksp_out - wksp_out = arb_units(wb_for_run,sample_run,ei_guess,rebin,map_file,monovan_run,**kwargs) + wksp_out = arb_units(wb_for_run,sample_run,ei_guess,rebin,map_file,monovan_run,wb_for_monovanadium,**kwargs) if results_name != wksp_out.getName(): @@ -522,7 +524,7 @@ def apply_absolute_normalization(Reducer,deltaE_wkspace_sample,monovan_run,ei_gu def process_legacy_parameters(**kwargs) : """ The method to deal with old parameters which have logi c different from default and easy to process using - subprogram. All other parameters just copiet to output + subprogram. All other parameters just copied to output """ params = dict(); for key,value in kwargs.iteritems(): @@ -568,7 +570,7 @@ def get_abs_normalization_factor(Reducer,deltaE_wkspaceName,ei_monovan) : are different and accounted for by dividing each MV value by corresponding WBV value, the signal on a detector has poison distribution and the error for a detector is the square root of correspondent signal on a detector. - Error for WBV considered negligebly small wrt the error on MV + Error for WBV considered negligibly small wrt. the error on MV """ van_mass=Reducer.van_mass; @@ -627,7 +629,7 @@ def get_abs_normalization_factor(Reducer,deltaE_wkspaceName,ei_monovan) : weight = err_sq/signal signal3_sum += err_sq weight3_sum += weight - # Guess which estimatnes value sum(n_i^2/Sigma_i^2)/sum(n_i/Sigma_i^2) TGP suggestion from 12-2012 + # Guess which estimates value sum(n_i^2/Sigma_i^2)/sum(n_i/Sigma_i^2) TGP suggestion from 12-2012 signal4_sum += signal*signal/err_sq weight4_sum += signal/err_sq @@ -638,7 +640,7 @@ def get_abs_normalization_factor(Reducer,deltaE_wkspaceName,ei_monovan) : #---------------- Loop finished if( weight1_sum==0.0 or weight2_sum == 0.0 or weight3_sum == 0.0 or weight4_sum == 0.0) : - print "WB integral has been calculated incorrectrly, look at van_int workspace in the input workspace: ",deltaE_wkspaceName + print "WB integral has been calculated incorrectly, look at van_int workspace in the input workspace: ",deltaE_wkspaceName raise IOError(" divided by 0 weight") integral_monovanLibISIS=signal1_sum / weight1_sum @@ -693,7 +695,7 @@ def get_abs_normalization_factor(Reducer,deltaE_wkspaceName,ei_monovan) : def sum_files(inst_name, accumulator, files): """ Custom sum for multiple runs - Left for compartibility as internal summation had some unspecified problems. + Left for compatibility as internal summation had some unspecified problems. Will go in a future """ accum_name = accumulator diff --git a/Code/Mantid/scripts/Interface/reduction_gui/reduction/sans/hfir_options_script.py b/Code/Mantid/scripts/Interface/reduction_gui/reduction/sans/hfir_options_script.py index 2e417b07acb14ae4133b56721af9693ca0715969..32ad19dd277886ae81abd611bfec37149ab09aa5 100644 --- a/Code/Mantid/scripts/Interface/reduction_gui/reduction/sans/hfir_options_script.py +++ b/Code/Mantid/scripts/Interface/reduction_gui/reduction/sans/hfir_options_script.py @@ -38,6 +38,9 @@ class ReductionOptions(BaseScriptElement): n_q_bins = 100 n_sub_pix = 1 log_binning = False + + # Mask side + masked_side = None # Masking class RectangleMask(object): @@ -116,6 +119,9 @@ class ReductionOptions(BaseScriptElement): script += "IQxQy(nbins=%g)\n" % self.n_q_bins # Mask + # Detector plane + if self.masked_side is not None: + script += "MaskDetectorSide('%s')\n" % str(self.masked_side) # Edges if (self.top != 0 or self.bottom != 0 or self.left != 0 or self.right != 0): script += "Mask(nx_low=%d, nx_high=%d, ny_low=%d, ny_high=%d)\n" % (self.left, self.right, self.bottom, self.top) @@ -182,6 +188,8 @@ class ReductionOptions(BaseScriptElement): xml += " <mask_bottom>%g</mask_bottom>\n" % self.bottom xml += " <mask_left>%g</mask_left>\n" % self.left xml += " <mask_right>%g</mask_right>\n" % self.right + + xml += " <mask_side>%s</mask_side>\n" % str(self.masked_side) xml += " <Shapes>\n" for item in self.shapes: @@ -265,6 +273,8 @@ class ReductionOptions(BaseScriptElement): self.right = BaseScriptElement.getIntElement(mask_dom, "mask_right", default=ReductionOptions.right) self.left = BaseScriptElement.getIntElement(mask_dom, "mask_left", default=ReductionOptions.left) + self.masked_side = BaseScriptElement.getStringElement(mask_dom, "mask_side", default=ReductionOptions.masked_side) + self.shapes = [] shapes_dom_list = mask_dom.getElementsByTagName("Shapes") if len(shapes_dom_list)>0: @@ -409,6 +419,7 @@ class ReductionOptions(BaseScriptElement): self.detector_ids = [] self.mask_file = '' self.use_mask_file = ReductionOptions.use_mask_file + self.masked_side = None self.use_data_directory = ReductionOptions.use_data_directory self.output_directory = ReductionOptions.output_directory diff --git a/Code/Mantid/scripts/Interface/reduction_gui/widgets/sans/hfir_instrument.py b/Code/Mantid/scripts/Interface/reduction_gui/widgets/sans/hfir_instrument.py index 32b5983d9caece1449b96659bc856eb25c17a2e5..4f44d963b0f73f2ae92de94d63dfd67dbafefc7f 100644 --- a/Code/Mantid/scripts/Interface/reduction_gui/widgets/sans/hfir_instrument.py +++ b/Code/Mantid/scripts/Interface/reduction_gui/widgets/sans/hfir_instrument.py @@ -138,6 +138,14 @@ class SANSInstrumentWidget(BaseWidget): self.connect(self._summary.scale_chk, QtCore.SIGNAL("clicked(bool)"), self._scale_clicked) self._scale_clicked(self._summary.scale_chk.isChecked()) + # If we are not in debug/expert mode, hide some advanced options + if not self._settings.debug: + self._summary.mask_side_layout.deleteLater() + self._summary.mask_side_label.hide() + self._summary.mask_side_none_radio.hide() + self._summary.mask_side_front_radio.hide() + self._summary.mask_side_back_radio.hide() + if not self._in_mantidplot: self._summary.dark_plot_button.hide() self._summary.scale_data_plot_button.hide() @@ -340,6 +348,13 @@ class SANSInstrumentWidget(BaseWidget): self._mask_checked(state.use_mask_file) self._masked_detectors = state.detector_ids self.mask_reload = True + + if state.masked_side == 'Front': + self._summary.mask_side_front_radio.setChecked(True) + elif state.masked_side == 'Back': + self._summary.mask_side_back_radio.setChecked(True) + else: + self._summary.mask_side_none_radio.setChecked(True) def _prepare_field(self, is_enabled, stored_value, chk_widget, edit_widget, suppl_value=None, suppl_edit=None): #to_display = str(stored_value) if is_enabled else '' @@ -400,6 +415,14 @@ class SANSInstrumentWidget(BaseWidget): m.n_sub_pix = util._check_and_get_int_line_edit(self._summary.n_sub_pix_edit) m.log_binning = self._summary.log_binning_radio.isChecked() + # Detector side masking + if self._summary.mask_side_front_radio.isChecked(): + m.masked_side = 'Front' + elif self._summary.mask_side_back_radio.isChecked(): + m.masked_side = 'Back' + else: + m.masked_side = None + # Mask detector IDs m.use_mask_file = self._summary.mask_check.isChecked() m.mask_file = unicode(self._summary.mask_edit.text()) diff --git a/Code/Mantid/scripts/Interface/ui/sans/hfir_instrument.ui b/Code/Mantid/scripts/Interface/ui/sans/hfir_instrument.ui index 68d7d79351d68e9bf0791a48226326792a8ea41b..3ec86accdd4af608835c20f2207f3364e2cd4470 100644 --- a/Code/Mantid/scripts/Interface/ui/sans/hfir_instrument.ui +++ b/Code/Mantid/scripts/Interface/ui/sans/hfir_instrument.ui @@ -1052,6 +1052,72 @@ Values can be selected by hand by checking the boxes below.</string> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <layout class="QHBoxLayout" name="mask_side_layout"> + <item> + <widget class="QLabel" name="mask_side_label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>150</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>Mask detector side</string> + </property> + </widget> + </item> + <item> + <widget class="QRadioButton" name="mask_side_none_radio"> + <property name="toolTip"> + <string>Select to keep both sides of the detector active [default].</string> + </property> + <property name="text"> + <string>None</string> + </property> + </widget> + </item> + <item> + <widget class="QRadioButton" name="mask_side_front_radio"> + <property name="toolTip"> + <string>Select to mask the front panel of the detector.</string> + </property> + <property name="text"> + <string>Front</string> + </property> + </widget> + </item> + <item> + <widget class="QRadioButton" name="mask_side_back_radio"> + <property name="toolTip"> + <string>Select to mask the back panel of the detector.</string> + </property> + <property name="text"> + <string>Back</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_6"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> <item> <widget class="QLabel" name="label_5"> <property name="font"> diff --git a/Code/Mantid/scripts/Interface/ui/sans/ui_hfir_instrument.py b/Code/Mantid/scripts/Interface/ui/sans/ui_hfir_instrument.py index d9193459baae30ef040bb39a62fa501274470115..93b22de1ce872b69ae867590daa9ef413e87d9c9 100644 --- a/Code/Mantid/scripts/Interface/ui/sans/ui_hfir_instrument.py +++ b/Code/Mantid/scripts/Interface/ui/sans/ui_hfir_instrument.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'ui/sans/hfir_instrument.ui' # -# Created: Thu Jun 27 16:46:08 2013 +# Created: Fri Oct 10 11:46:57 2014 # by: PyQt4 UI code generator 4.7.4 # # WARNING! All changes made in this file will be lost! @@ -398,6 +398,29 @@ class Ui_Frame(object): self.verticalLayout_2.setObjectName("verticalLayout_2") self.verticalLayout_3 = QtGui.QVBoxLayout() self.verticalLayout_3.setObjectName("verticalLayout_3") + self.mask_side_layout = QtGui.QHBoxLayout() + self.mask_side_layout.setObjectName("mask_side_layout") + self.mask_side_label = QtGui.QLabel(self.groupBox) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.mask_side_label.sizePolicy().hasHeightForWidth()) + self.mask_side_label.setSizePolicy(sizePolicy) + self.mask_side_label.setMinimumSize(QtCore.QSize(150, 0)) + self.mask_side_label.setObjectName("mask_side_label") + self.mask_side_layout.addWidget(self.mask_side_label) + self.mask_side_none_radio = QtGui.QRadioButton(self.groupBox) + self.mask_side_none_radio.setObjectName("mask_side_none_radio") + self.mask_side_layout.addWidget(self.mask_side_none_radio) + self.mask_side_front_radio = QtGui.QRadioButton(self.groupBox) + self.mask_side_front_radio.setObjectName("mask_side_front_radio") + self.mask_side_layout.addWidget(self.mask_side_front_radio) + self.mask_side_back_radio = QtGui.QRadioButton(self.groupBox) + self.mask_side_back_radio.setObjectName("mask_side_back_radio") + self.mask_side_layout.addWidget(self.mask_side_back_radio) + spacerItem9 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.mask_side_layout.addItem(spacerItem9) + self.verticalLayout_3.addLayout(self.mask_side_layout) self.label_5 = QtGui.QLabel(self.groupBox) font = QtGui.QFont() font.setFamily("Bitstream Charter") @@ -428,13 +451,13 @@ class Ui_Frame(object): self.mask_plot_button = QtGui.QPushButton(self.groupBox) self.mask_plot_button.setObjectName("mask_plot_button") self.horizontalLayout.addWidget(self.mask_plot_button) - spacerItem9 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum) - self.horizontalLayout.addItem(spacerItem9) + spacerItem10 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem10) self.verticalLayout_3.addLayout(self.horizontalLayout) self.verticalLayout_2.addLayout(self.verticalLayout_3) self.verticalLayout_4.addWidget(self.groupBox) - spacerItem10 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.verticalLayout_4.addItem(spacerItem10) + spacerItem11 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.verticalLayout_4.addItem(spacerItem11) self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.verticalLayout.addWidget(self.scrollArea) @@ -501,6 +524,13 @@ class Ui_Frame(object): self.label_10.setText(QtGui.QApplication.translate("Frame", "Wavelength spread [ratio]", None, QtGui.QApplication.UnicodeUTF8)) self.wavelength_spread_edit.setToolTip(QtGui.QApplication.translate("Frame", "Enter the value of the neutron wavelength spread.", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox.setTitle(QtGui.QApplication.translate("Frame", "Mask", None, QtGui.QApplication.UnicodeUTF8)) + self.mask_side_label.setText(QtGui.QApplication.translate("Frame", "Mask detector side", None, QtGui.QApplication.UnicodeUTF8)) + self.mask_side_none_radio.setToolTip(QtGui.QApplication.translate("Frame", "Select to keep both sides of the detector active [default].", None, QtGui.QApplication.UnicodeUTF8)) + self.mask_side_none_radio.setText(QtGui.QApplication.translate("Frame", "None", None, QtGui.QApplication.UnicodeUTF8)) + self.mask_side_front_radio.setToolTip(QtGui.QApplication.translate("Frame", "Select to mask the front panel of the detector.", None, QtGui.QApplication.UnicodeUTF8)) + self.mask_side_front_radio.setText(QtGui.QApplication.translate("Frame", "Front", None, QtGui.QApplication.UnicodeUTF8)) + self.mask_side_back_radio.setToolTip(QtGui.QApplication.translate("Frame", "Select to mask the back panel of the detector.", None, QtGui.QApplication.UnicodeUTF8)) + self.mask_side_back_radio.setText(QtGui.QApplication.translate("Frame", "Back", None, QtGui.QApplication.UnicodeUTF8)) self.label_5.setText(QtGui.QApplication.translate("Frame", "Choose a file to set your mask. Note that only the mask information, not the data, will be used in the reduction.\n" "The data is only used to help you setting the mask.\n" "The mask information is saved separately so that your data file will NOT be modified.", None, QtGui.QApplication.UnicodeUTF8)) diff --git a/Code/Mantid/scripts/SANS/ISISCommandInterface.py b/Code/Mantid/scripts/SANS/ISISCommandInterface.py index c94dcc85e0bb80280238aaac897b5274ccd0ffd4..f3cd45cac67a1255d9fc631afdc5b711955a50eb 100644 --- a/Code/Mantid/scripts/SANS/ISISCommandInterface.py +++ b/Code/Mantid/scripts/SANS/ISISCommandInterface.py @@ -560,56 +560,56 @@ def _fitRescaleAndShift(rAnds, frontData, rearData): Fit rear data to FRONTnew(Q) = ( FRONT(Q) + SHIFT )xRESCALE, FRONT(Q) is the frontData argument. Returns scale and shift + Note SHIFT is shift of a constant back, not the Shift parameter in + TabulatedFunction. + @param rAnds: A DetectorBank -> _RescaleAndShift structure @param frontData: Reduced front data @param rearData: Reduced rear data """ if rAnds.fitScale==False and rAnds.fitShift==False: return rAnds.scale, rAnds.shift - #TODO: we should allow the user to add constraints? + if rAnds.fitScale==False: if rAnds.qRangeUserSelected: Fit(InputWorkspace=rearData, Function='name=TabulatedFunction, Workspace="'+str(frontData)+'"' - +";name=FlatBackground", Ties='f0.Scaling='+str(rAnds.scale), + +";name=FlatBackground", + Ties='f0.Scaling='+str(rAnds.scale)+',f0.Shift=0.0', Output="__fitRescaleAndShift", StartX=rAnds.qMin, EndX=rAnds.qMax) else: Fit(InputWorkspace=rearData, Function='name=TabulatedFunction, Workspace="'+str(frontData)+'"' - +";name=FlatBackground", Ties='f0.Scaling='+str(rAnds.scale), + +";name=FlatBackground", + Ties='f0.Scaling='+str(rAnds.scale)+',f0.Shift=0.0', Output="__fitRescaleAndShift") elif rAnds.fitShift==False: if rAnds.qRangeUserSelected: - function_input = 'name=TabulatedFunction, Workspace="'+str(frontData)+'"' +";name=FlatBackground" - ties = 'f1.A0='+str(rAnds.shift*rAnds.scale) - logger.warning('function input ' + str(function_input)) - Fit(InputWorkspace=rearData, Function='name=TabulatedFunction, Workspace="'+str(frontData)+'"' - +";name=FlatBackground", Ties='f1.A0='+str(rAnds.shift*rAnds.scale), + +";name=FlatBackground", + Ties='f1.A0='+str(rAnds.shift*rAnds.scale)+',f0.Shift=0.0', Output="__fitRescaleAndShift", StartX=rAnds.qMin, EndX=rAnds.qMax) else: Fit(InputWorkspace=rearData, Function='name=TabulatedFunction, Workspace="'+str(frontData)+'"' - +";name=FlatBackground", Ties='f1.A0='+str(rAnds.shift*rAnds.scale), + +";name=FlatBackground", + Ties='f1.A0='+str(rAnds.shift*rAnds.scale)+',f0.Shift=0.0', Output="__fitRescaleAndShift") else: if rAnds.qRangeUserSelected: Fit(InputWorkspace=rearData, Function='name=TabulatedFunction, Workspace="'+str(frontData)+'"' - +";name=FlatBackground", + +";name=FlatBackground", Ties=',f0.Shift=0.0', Output="__fitRescaleAndShift", StartX=rAnds.qMin, EndX=rAnds.qMax) else: Fit(InputWorkspace=rearData, Function='name=TabulatedFunction, Workspace="'+str(frontData)+'"' - +";name=FlatBackground",Output="__fitRescaleAndShift") + +";name=FlatBackground", Ties=',f0.Shift=0.0', Output="__fitRescaleAndShift") param = mtd['__fitRescaleAndShift_Parameters'] - row1 = param.row(0).items() - row2 = param.row(1).items() - row3 = param.row(2).items() - scale = row1[1][1] - chiSquared = row3[1][1] + scale = param.row(0).items()[1][1] + chiSquared = param.row(3).items()[1][1] fitSuccess = True if not chiSquared > 0: @@ -622,7 +622,7 @@ def _fitRescaleAndShift(rAnds, frontData, rearData): if fitSuccess == False: return rAnds.scale, rAnds.shift - shift = row2[1][1] / scale + shift = param.row(2).items()[1][1] / scale delete_workspaces('__fitRescaleAndShift_Parameters') delete_workspaces('__fitRescaleAndShift_NormalisedCovarianceMatrix') diff --git a/Test/AutoTestData/UsageData/GEM_Definition.vtp b/Test/AutoTestData/UsageData/GEM_Definition.vtp new file mode 100644 index 0000000000000000000000000000000000000000..d6415ab3b95141b2e810b9d735603aef0ff1a448 --- /dev/null +++ b/Test/AutoTestData/UsageData/GEM_Definition.vtp @@ -0,0 +1,2047 @@ +<VTKFile byte_order="LittleEndian" type="PolyData" version="1.0"> + <PolyData> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="64"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0101667 -0.0582343 0 -0.00533706 -0.0595284 0 -0.00533706 -0.0595284 0.001 -0.0101667 -0.0582343 0.001 -0.0101667 -0.0582343 0 -0.00533706 -0.0595284 0 -0.0025 -5.51091e-17 0 -0.00591826 -0.0390708 0 -0.00335619 -0.01961 0 -0.0101667 0.0582343 0 -0.00335619 0.01961 0 -0.00591826 0.0390708 0 -0.00533706 0.0595284 0 0.0025 -5.63338e-17 0 0.00162478 0.0200458 0 -0.000994217 0.0399391 0 -0.000994217 -0.0399391 0 0.00162478 -0.0200458 0 -0.00533706 -0.0595284 0 -0.00533706 -0.0595284 0.001 0.0025 -5.63338e-17 0.001 -0.000994217 -0.0399391 0.001 0.00162478 -0.0200458 0.001 0.0025 -5.63338e-17 0 -0.000994217 -0.0399391 0 0.00162478 -0.0200458 0 -0.0101667 -0.0582343 0.001 -0.00533706 -0.0595284 0.001 -0.0025 -5.51091e-17 0.001 -0.00591826 -0.0390708 0.001 -0.00335619 -0.01961 0.001 -0.0101667 0.0582343 0.001 -0.00335619 0.01961 0.001 -0.00591826 0.0390708 0.001 -0.00533706 0.0595284 0.001 0.0025 -5.63338e-17 0.001 0.00162478 0.0200458 0.001 -0.000994217 0.0399391 0.001 -0.000994217 -0.0399391 0.001 0.00162478 -0.0200458 0.001 -0.0101667 -0.0582343 0 -0.0101667 -0.0582343 0.001 -0.0025 -5.51091e-17 0.001 -0.00591826 -0.0390708 0.001 -0.00335619 -0.01961 0.001 -0.0025 -5.51091e-17 0 -0.00591826 -0.0390708 0 -0.00335619 -0.01961 0 -0.0025 -5.51091e-17 0 -0.0025 -5.51091e-17 0.001 -0.0101667 0.0582343 0.001 -0.00335619 0.01961 0.001 -0.00591826 0.0390708 0.001 -0.0101667 0.0582343 0 -0.00335619 0.01961 0 -0.00591826 0.0390708 0 -0.0101667 0.0582343 0 -0.00533706 0.0595284 0 -0.00533706 0.0595284 0.001 -0.0101667 0.0582343 0.001 0.0025 -5.63338e-17 0 0.0025 -5.63338e-17 0.001 -0.00533706 0.0595284 0.001 0.00162478 0.0200458 0.001 -0.000994217 0.0399391 0.001 -0.00533706 0.0595284 0 0.00162478 0.0200458 0 -0.000994217 0.0399391 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="65"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0103371 -0.0595284 0 -0.00550743 -0.0608225 0 -0.00550743 -0.0608225 0.001 -0.0103371 -0.0595284 0.001 -0.0103371 -0.0595284 0 -0.00550743 -0.0608225 0 -0.0025 -5.63338e-17 0 -0.00599422 -0.0399391 0 -0.00337522 -0.0200458 0 -0.0103371 0.0595284 0 -0.00337522 0.0200458 0 -0.00599422 0.0399391 0 -0.00550743 0.0608225 0 0.0025 -5.75584e-17 0 0.00160575 0.0204816 0 -0.00107018 0.0408073 0 -0.00107018 -0.0408073 0 0.00160575 -0.0204816 0 -0.00550743 -0.0608225 0 -0.00550743 -0.0608225 0.001 0.0025 -5.75584e-17 0.001 -0.00107018 -0.0408073 0.001 0.00160575 -0.0204816 0.001 0.0025 -5.75584e-17 0 -0.00107018 -0.0408073 0 0.00160575 -0.0204816 0 -0.0103371 -0.0595284 0.001 -0.00550743 -0.0608225 0.001 -0.0025 -5.63338e-17 0.001 -0.00599422 -0.0399391 0.001 -0.00337522 -0.0200458 0.001 -0.0103371 0.0595284 0.001 -0.00337522 0.0200458 0.001 -0.00599422 0.0399391 0.001 -0.00550743 0.0608225 0.001 0.0025 -5.75584e-17 0.001 0.00160575 0.0204816 0.001 -0.00107018 0.0408073 0.001 -0.00107018 -0.0408073 0.001 0.00160575 -0.0204816 0.001 -0.0103371 -0.0595284 0 -0.0103371 -0.0595284 0.001 -0.0025 -5.63338e-17 0.001 -0.00599422 -0.0399391 0.001 -0.00337522 -0.0200458 0.001 -0.0025 -5.63338e-17 0 -0.00599422 -0.0399391 0 -0.00337522 -0.0200458 0 -0.0025 -5.63338e-17 0 -0.0025 -5.63338e-17 0.001 -0.0103371 0.0595284 0.001 -0.00337522 0.0200458 0.001 -0.00599422 0.0399391 0.001 -0.0103371 0.0595284 0 -0.00337522 0.0200458 0 -0.00599422 0.0399391 0 -0.0103371 0.0595284 0 -0.00550743 0.0608225 0 -0.00550743 0.0608225 0.001 -0.0103371 0.0595284 0.001 0.0025 -5.75584e-17 0 0.0025 -5.75584e-17 0.001 -0.00550743 0.0608225 0.001 0.00160575 0.0204816 0.001 -0.00107018 0.0408073 0.001 -0.00550743 0.0608225 0 0.00160575 0.0204816 0 -0.00107018 0.0408073 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="74"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0118602 -0.0710976 0 -0.00703055 -0.0723917 0 -0.00703055 -0.0723917 0.001 -0.0118602 -0.0710976 0.001 -0.0118602 -0.0710976 0 -0.00703055 -0.0723917 0 -0.0025 -6.72821e-17 0 -0.00667331 -0.0477012 0 -0.00354532 -0.0239417 0 -0.0118602 0.0710976 0 -0.00354532 0.0239417 0 -0.00667331 0.0477012 0 -0.00703055 0.0723917 0 0.0025 -6.85067e-17 0 0.00143566 0.0243775 0 -0.00174927 0.0485694 0 -0.00174927 -0.0485694 0 0.00143566 -0.0243775 0 -0.00703055 -0.0723917 0 -0.00703055 -0.0723917 0.001 0.0025 -6.85067e-17 0.001 -0.00174927 -0.0485694 0.001 0.00143566 -0.0243775 0.001 0.0025 -6.85067e-17 0 -0.00174927 -0.0485694 0 0.00143566 -0.0243775 0 -0.0118602 -0.0710976 0.001 -0.00703055 -0.0723917 0.001 -0.0025 -6.72821e-17 0.001 -0.00667331 -0.0477012 0.001 -0.00354532 -0.0239417 0.001 -0.0118602 0.0710976 0.001 -0.00354532 0.0239417 0.001 -0.00667331 0.0477012 0.001 -0.00703055 0.0723917 0.001 0.0025 -6.85067e-17 0.001 0.00143566 0.0243775 0.001 -0.00174927 0.0485694 0.001 -0.00174927 -0.0485694 0.001 0.00143566 -0.0243775 0.001 -0.0118602 -0.0710976 0 -0.0118602 -0.0710976 0.001 -0.0025 -6.72821e-17 0.001 -0.00667331 -0.0477012 0.001 -0.00354532 -0.0239417 0.001 -0.0025 -6.72821e-17 0 -0.00667331 -0.0477012 0 -0.00354532 -0.0239417 0 -0.0025 -6.72821e-17 0 -0.0025 -6.72821e-17 0.001 -0.0118602 0.0710976 0.001 -0.00354532 0.0239417 0.001 -0.00667331 0.0477012 0.001 -0.0118602 0.0710976 0 -0.00354532 0.0239417 0 -0.00667331 0.0477012 0 -0.0118602 0.0710976 0 -0.00703055 0.0723917 0 -0.00703055 0.0723917 0.001 -0.0118602 0.0710976 0.001 0.0025 -6.85067e-17 0 0.0025 -6.85067e-17 0.001 -0.00703055 0.0723917 0.001 0.00143566 0.0243775 0.001 -0.00174927 0.0485694 0.001 -0.00703055 0.0723917 0 0.00143566 0.0243775 0 -0.00174927 0.0485694 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="75"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0120305 -0.0723917 0 -0.00720092 -0.0736858 0 -0.00720092 -0.0736858 0.001 -0.0120305 -0.0723917 0.001 -0.0120305 -0.0723917 0 -0.00720092 -0.0736858 0 -0.0025 -6.85067e-17 0 -0.00674927 -0.0485694 0 -0.00356434 -0.0243775 0 -0.0120305 0.0723917 0 -0.00356434 0.0243775 0 -0.00674927 0.0485694 0 -0.00720092 0.0736858 0 0.0025 -6.97314e-17 0 0.00141663 0.0248132 0 -0.00182523 0.0494376 0 -0.00182523 -0.0494376 0 0.00141663 -0.0248132 0 -0.00720092 -0.0736858 0 -0.00720092 -0.0736858 0.001 0.0025 -6.97314e-17 0.001 -0.00182523 -0.0494376 0.001 0.00141663 -0.0248132 0.001 0.0025 -6.97314e-17 0 -0.00182523 -0.0494376 0 0.00141663 -0.0248132 0 -0.0120305 -0.0723917 0.001 -0.00720092 -0.0736858 0.001 -0.0025 -6.85067e-17 0.001 -0.00674927 -0.0485694 0.001 -0.00356434 -0.0243775 0.001 -0.0120305 0.0723917 0.001 -0.00356434 0.0243775 0.001 -0.00674927 0.0485694 0.001 -0.00720092 0.0736858 0.001 0.0025 -6.97314e-17 0.001 0.00141663 0.0248132 0.001 -0.00182523 0.0494376 0.001 -0.00182523 -0.0494376 0.001 0.00141663 -0.0248132 0.001 -0.0120305 -0.0723917 0 -0.0120305 -0.0723917 0.001 -0.0025 -6.85067e-17 0.001 -0.00674927 -0.0485694 0.001 -0.00356434 -0.0243775 0.001 -0.0025 -6.85067e-17 0 -0.00674927 -0.0485694 0 -0.00356434 -0.0243775 0 -0.0025 -6.85067e-17 0 -0.0025 -6.85067e-17 0.001 -0.0120305 0.0723917 0.001 -0.00356434 0.0243775 0.001 -0.00674927 0.0485694 0.001 -0.0120305 0.0723917 0 -0.00356434 0.0243775 0 -0.00674927 0.0485694 0 -0.0120305 0.0723917 0 -0.00720092 0.0736858 0 -0.00720092 0.0736858 0.001 -0.0120305 0.0723917 0.001 0.0025 -6.97314e-17 0 0.0025 -6.97314e-17 0.001 -0.00720092 0.0736858 0.001 0.00141663 0.0248132 0.001 -0.00182523 0.0494376 0.001 -0.00720092 0.0736858 0 0.00141663 0.0248132 0 -0.00182523 0.0494376 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="76"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0121975 -0.0736599 0 -0.00736788 -0.074954 0 -0.00736788 -0.074954 0.001 -0.0121975 -0.0736599 0.001 -0.0121975 -0.0736599 0 -0.00736788 -0.074954 0 -0.0025 -6.97069e-17 0 -0.00682371 -0.0494203 0 -0.00358299 -0.0248045 0 -0.0121975 0.0736599 0 -0.00358299 0.0248045 0 -0.00682371 0.0494203 0 -0.00736788 0.074954 0 0.0025 -7.09315e-17 0 0.00139798 0.0252403 0 -0.00189967 0.0502885 0 -0.00189967 -0.0502885 0 0.00139798 -0.0252403 0 -0.00736788 -0.074954 0 -0.00736788 -0.074954 0.001 0.0025 -7.09315e-17 0.001 -0.00189967 -0.0502885 0.001 0.00139798 -0.0252403 0.001 0.0025 -7.09315e-17 0 -0.00189967 -0.0502885 0 0.00139798 -0.0252403 0 -0.0121975 -0.0736599 0.001 -0.00736788 -0.074954 0.001 -0.0025 -6.97069e-17 0.001 -0.00682371 -0.0494203 0.001 -0.00358299 -0.0248045 0.001 -0.0121975 0.0736599 0.001 -0.00358299 0.0248045 0.001 -0.00682371 0.0494203 0.001 -0.00736788 0.074954 0.001 0.0025 -7.09315e-17 0.001 0.00139798 0.0252403 0.001 -0.00189967 0.0502885 0.001 -0.00189967 -0.0502885 0.001 0.00139798 -0.0252403 0.001 -0.0121975 -0.0736599 0 -0.0121975 -0.0736599 0.001 -0.0025 -6.97069e-17 0.001 -0.00682371 -0.0494203 0.001 -0.00358299 -0.0248045 0.001 -0.0025 -6.97069e-17 0 -0.00682371 -0.0494203 0 -0.00358299 -0.0248045 0 -0.0025 -6.97069e-17 0 -0.0025 -6.97069e-17 0.001 -0.0121975 0.0736599 0.001 -0.00358299 0.0248045 0.001 -0.00682371 0.0494203 0.001 -0.0121975 0.0736599 0 -0.00358299 0.0248045 0 -0.00682371 0.0494203 0 -0.0121975 0.0736599 0 -0.00736788 0.074954 0 -0.00736788 0.074954 0.001 -0.0121975 0.0736599 0.001 0.0025 -7.09315e-17 0 0.0025 -7.09315e-17 0.001 -0.00736788 0.074954 0.001 0.00139798 0.0252403 0.001 -0.00189967 0.0502885 0.001 -0.00736788 0.074954 0 0.00139798 0.0252403 0 -0.00189967 0.0502885 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="77"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0123679 -0.074954 0 -0.00753825 -0.0762481 0 -0.00753825 -0.0762481 0.001 -0.0123679 -0.074954 0.001 -0.0123679 -0.074954 0 -0.00753825 -0.0762481 0 -0.0025 -7.09315e-17 0 -0.00689967 -0.0502885 0 -0.00360202 -0.0252403 0 -0.0123679 0.074954 0 -0.00360202 0.0252403 0 -0.00689967 0.0502885 0 -0.00753825 0.0762481 0 0.0025 -7.21562e-17 0 0.00137896 0.0256761 0 -0.00197564 0.0511568 0 -0.00197564 -0.0511568 0 0.00137896 -0.0256761 0 -0.00753825 -0.0762481 0 -0.00753825 -0.0762481 0.001 0.0025 -7.21562e-17 0.001 -0.00197564 -0.0511568 0.001 0.00137896 -0.0256761 0.001 0.0025 -7.21562e-17 0 -0.00197564 -0.0511568 0 0.00137896 -0.0256761 0 -0.0123679 -0.074954 0.001 -0.00753825 -0.0762481 0.001 -0.0025 -7.09315e-17 0.001 -0.00689967 -0.0502885 0.001 -0.00360202 -0.0252403 0.001 -0.0123679 0.074954 0.001 -0.00360202 0.0252403 0.001 -0.00689967 0.0502885 0.001 -0.00753825 0.0762481 0.001 0.0025 -7.21562e-17 0.001 0.00137896 0.0256761 0.001 -0.00197564 0.0511568 0.001 -0.00197564 -0.0511568 0.001 0.00137896 -0.0256761 0.001 -0.0123679 -0.074954 0 -0.0123679 -0.074954 0.001 -0.0025 -7.09315e-17 0.001 -0.00689967 -0.0502885 0.001 -0.00360202 -0.0252403 0.001 -0.0025 -7.09315e-17 0 -0.00689967 -0.0502885 0 -0.00360202 -0.0252403 0 -0.0025 -7.09315e-17 0 -0.0025 -7.09315e-17 0.001 -0.0123679 0.074954 0.001 -0.00360202 0.0252403 0.001 -0.00689967 0.0502885 0.001 -0.0123679 0.074954 0 -0.00360202 0.0252403 0 -0.00689967 0.0502885 0 -0.0123679 0.074954 0 -0.00753825 0.0762481 0 -0.00753825 0.0762481 0.001 -0.0123679 0.074954 0.001 0.0025 -7.21562e-17 0 0.0025 -7.21562e-17 0.001 -0.00753825 0.0762481 0.001 0.00137896 0.0256761 0.001 -0.00197564 0.0511568 0.001 -0.00753825 0.0762481 0 0.00137896 0.0256761 0 -0.00197564 0.0511568 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="78"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0125383 -0.0762481 0 -0.00770862 -0.0775422 0 -0.00770862 -0.0775422 0.001 -0.0125383 -0.0762481 0.001 -0.0125383 -0.0762481 0 -0.00770862 -0.0775422 0 -0.0025 -7.21562e-17 0 -0.00697564 -0.0511568 0 -0.00362104 -0.0256761 0 -0.0125383 0.0762481 0 -0.00362104 0.0256761 0 -0.00697564 0.0511568 0 -0.00770862 0.0775422 0 0.0025 -7.33808e-17 0 0.00135993 0.0261119 0 -0.0020516 0.052025 0 -0.0020516 -0.052025 0 0.00135993 -0.0261119 0 -0.00770862 -0.0775422 0 -0.00770862 -0.0775422 0.001 0.0025 -7.33808e-17 0.001 -0.0020516 -0.052025 0.001 0.00135993 -0.0261119 0.001 0.0025 -7.33808e-17 0 -0.0020516 -0.052025 0 0.00135993 -0.0261119 0 -0.0125383 -0.0762481 0.001 -0.00770862 -0.0775422 0.001 -0.0025 -7.21562e-17 0.001 -0.00697564 -0.0511568 0.001 -0.00362104 -0.0256761 0.001 -0.0125383 0.0762481 0.001 -0.00362104 0.0256761 0.001 -0.00697564 0.0511568 0.001 -0.00770862 0.0775422 0.001 0.0025 -7.33808e-17 0.001 0.00135993 0.0261119 0.001 -0.0020516 0.052025 0.001 -0.0020516 -0.052025 0.001 0.00135993 -0.0261119 0.001 -0.0125383 -0.0762481 0 -0.0125383 -0.0762481 0.001 -0.0025 -7.21562e-17 0.001 -0.00697564 -0.0511568 0.001 -0.00362104 -0.0256761 0.001 -0.0025 -7.21562e-17 0 -0.00697564 -0.0511568 0 -0.00362104 -0.0256761 0 -0.0025 -7.21562e-17 0 -0.0025 -7.21562e-17 0.001 -0.0125383 0.0762481 0.001 -0.00362104 0.0256761 0.001 -0.00697564 0.0511568 0.001 -0.0125383 0.0762481 0 -0.00362104 0.0256761 0 -0.00697564 0.0511568 0 -0.0125383 0.0762481 0 -0.00770862 0.0775422 0 -0.00770862 0.0775422 0.001 -0.0125383 0.0762481 0.001 0.0025 -7.33808e-17 0 0.0025 -7.33808e-17 0.001 -0.00770862 0.0775422 0.001 0.00135993 0.0261119 0.001 -0.0020516 0.052025 0.001 -0.00770862 0.0775422 0 0.00135993 0.0261119 0 -0.0020516 0.052025 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="79"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0127052 -0.0775163 0 -0.00787559 -0.0788104 0 -0.00787559 -0.0788104 0.001 -0.0127052 -0.0775163 0.001 -0.0127052 -0.0775163 0 -0.00787559 -0.0788104 0 -0.0025 -7.33563e-17 0 -0.00705008 -0.0520076 0 -0.00363969 -0.0261031 0 -0.0127052 0.0775163 0 -0.00363969 0.0261031 0 -0.00705008 0.0520076 0 -0.00787559 0.0788104 0 0.0025 -7.4581e-17 0 0.00134129 0.0265389 0 -0.00212604 0.0528759 0 -0.00212604 -0.0528759 0 0.00134129 -0.0265389 0 -0.00787559 -0.0788104 0 -0.00787559 -0.0788104 0.001 0.0025 -7.4581e-17 0.001 -0.00212604 -0.0528759 0.001 0.00134129 -0.0265389 0.001 0.0025 -7.4581e-17 0 -0.00212604 -0.0528759 0 0.00134129 -0.0265389 0 -0.0127052 -0.0775163 0.001 -0.00787559 -0.0788104 0.001 -0.0025 -7.33563e-17 0.001 -0.00705008 -0.0520076 0.001 -0.00363969 -0.0261031 0.001 -0.0127052 0.0775163 0.001 -0.00363969 0.0261031 0.001 -0.00705008 0.0520076 0.001 -0.00787559 0.0788104 0.001 0.0025 -7.4581e-17 0.001 0.00134129 0.0265389 0.001 -0.00212604 0.0528759 0.001 -0.00212604 -0.0528759 0.001 0.00134129 -0.0265389 0.001 -0.0127052 -0.0775163 0 -0.0127052 -0.0775163 0.001 -0.0025 -7.33563e-17 0.001 -0.00705008 -0.0520076 0.001 -0.00363969 -0.0261031 0.001 -0.0025 -7.33563e-17 0 -0.00705008 -0.0520076 0 -0.00363969 -0.0261031 0 -0.0025 -7.33563e-17 0 -0.0025 -7.33563e-17 0.001 -0.0127052 0.0775163 0.001 -0.00363969 0.0261031 0.001 -0.00705008 0.0520076 0.001 -0.0127052 0.0775163 0 -0.00363969 0.0261031 0 -0.00705008 0.0520076 0 -0.0127052 0.0775163 0 -0.00787559 0.0788104 0 -0.00787559 0.0788104 0.001 -0.0127052 0.0775163 0.001 0.0025 -7.4581e-17 0 0.0025 -7.4581e-17 0.001 -0.00787559 0.0788104 0.001 0.00134129 0.0265389 0.001 -0.00212604 0.0528759 0.001 -0.00787559 0.0788104 0 0.00134129 0.0265389 0 -0.00212604 0.0528759 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="80"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0128756 -0.0788104 0 -0.00804596 -0.0801045 0 -0.00804596 -0.0801045 0.001 -0.0128756 -0.0788104 0.001 -0.0128756 -0.0788104 0 -0.00804596 -0.0801045 0 -0.0025 -7.4581e-17 0 -0.00712604 -0.0528759 0 -0.00365871 -0.0265389 0 -0.0128756 0.0788104 0 -0.00365871 0.0265389 0 -0.00712604 0.0528759 0 -0.00804596 0.0801045 0 0.0025 -7.58056e-17 0 0.00132226 0.0269747 0 -0.002202 0.0537441 0 -0.002202 -0.0537441 0 0.00132226 -0.0269747 0 -0.00804596 -0.0801045 0 -0.00804596 -0.0801045 0.001 0.0025 -7.58056e-17 0.001 -0.002202 -0.0537441 0.001 0.00132226 -0.0269747 0.001 0.0025 -7.58056e-17 0 -0.002202 -0.0537441 0 0.00132226 -0.0269747 0 -0.0128756 -0.0788104 0.001 -0.00804596 -0.0801045 0.001 -0.0025 -7.4581e-17 0.001 -0.00712604 -0.0528759 0.001 -0.00365871 -0.0265389 0.001 -0.0128756 0.0788104 0.001 -0.00365871 0.0265389 0.001 -0.00712604 0.0528759 0.001 -0.00804596 0.0801045 0.001 0.0025 -7.58056e-17 0.001 0.00132226 0.0269747 0.001 -0.002202 0.0537441 0.001 -0.002202 -0.0537441 0.001 0.00132226 -0.0269747 0.001 -0.0128756 -0.0788104 0 -0.0128756 -0.0788104 0.001 -0.0025 -7.4581e-17 0.001 -0.00712604 -0.0528759 0.001 -0.00365871 -0.0265389 0.001 -0.0025 -7.4581e-17 0 -0.00712604 -0.0528759 0 -0.00365871 -0.0265389 0 -0.0025 -7.4581e-17 0 -0.0025 -7.4581e-17 0.001 -0.0128756 0.0788104 0.001 -0.00365871 0.0265389 0.001 -0.00712604 0.0528759 0.001 -0.0128756 0.0788104 0 -0.00365871 0.0265389 0 -0.00712604 0.0528759 0 -0.0128756 0.0788104 0 -0.00804596 0.0801045 0 -0.00804596 0.0801045 0.001 -0.0128756 0.0788104 0.001 0.0025 -7.58056e-17 0 0.0025 -7.58056e-17 0.001 -0.00804596 0.0801045 0.001 0.00132226 0.0269747 0.001 -0.002202 0.0537441 0.001 -0.00804596 0.0801045 0 0.00132226 0.0269747 0 -0.002202 0.0537441 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="81"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0130425 -0.0800786 0 -0.00821292 -0.0813727 0 -0.00821292 -0.0813727 0.001 -0.0130425 -0.0800786 0.001 -0.0130425 -0.0800786 0 -0.00821292 -0.0813727 0 -0.0025 -7.57811e-17 0 -0.00720048 -0.0537267 0 -0.00367736 -0.026966 0 -0.0130425 0.0800786 0 -0.00367736 0.026966 0 -0.00720048 0.0537267 0 -0.00821292 0.0813727 0 0.0025 -7.70058e-17 0 0.00130361 0.0274018 0 -0.00227644 0.054595 0 -0.00227644 -0.054595 0 0.00130361 -0.0274018 0 -0.00821292 -0.0813727 0 -0.00821292 -0.0813727 0.001 0.0025 -7.70058e-17 0.001 -0.00227644 -0.054595 0.001 0.00130361 -0.0274018 0.001 0.0025 -7.70058e-17 0 -0.00227644 -0.054595 0 0.00130361 -0.0274018 0 -0.0130425 -0.0800786 0.001 -0.00821292 -0.0813727 0.001 -0.0025 -7.57811e-17 0.001 -0.00720048 -0.0537267 0.001 -0.00367736 -0.026966 0.001 -0.0130425 0.0800786 0.001 -0.00367736 0.026966 0.001 -0.00720048 0.0537267 0.001 -0.00821292 0.0813727 0.001 0.0025 -7.70058e-17 0.001 0.00130361 0.0274018 0.001 -0.00227644 0.054595 0.001 -0.00227644 -0.054595 0.001 0.00130361 -0.0274018 0.001 -0.0130425 -0.0800786 0 -0.0130425 -0.0800786 0.001 -0.0025 -7.57811e-17 0.001 -0.00720048 -0.0537267 0.001 -0.00367736 -0.026966 0.001 -0.0025 -7.57811e-17 0 -0.00720048 -0.0537267 0 -0.00367736 -0.026966 0 -0.0025 -7.57811e-17 0 -0.0025 -7.57811e-17 0.001 -0.0130425 0.0800786 0.001 -0.00367736 0.026966 0.001 -0.00720048 0.0537267 0.001 -0.0130425 0.0800786 0 -0.00367736 0.026966 0 -0.00720048 0.0537267 0 -0.0130425 0.0800786 0 -0.00821292 0.0813727 0 -0.00821292 0.0813727 0.001 -0.0130425 0.0800786 0.001 0.0025 -7.70058e-17 0 0.0025 -7.70058e-17 0.001 -0.00821292 0.0813727 0.001 0.00130361 0.0274018 0.001 -0.00227644 0.054595 0.001 -0.00821292 0.0813727 0 0.00130361 0.0274018 0 -0.00227644 0.054595 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="82"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0132129 -0.0813727 0 -0.00838329 -0.0826668 0 -0.00838329 -0.0826668 0.001 -0.0132129 -0.0813727 0.001 -0.0132129 -0.0813727 0 -0.00838329 -0.0826668 0 -0.0025 -7.70058e-17 0 -0.00727644 -0.054595 0 -0.00369639 -0.0274018 0 -0.0132129 0.0813727 0 -0.00369639 0.0274018 0 -0.00727644 0.054595 0 -0.00838329 0.0826668 0 0.0025 -7.82304e-17 0 0.00128459 0.0278375 0 -0.0023524 0.0554632 0 -0.0023524 -0.0554632 0 0.00128459 -0.0278375 0 -0.00838329 -0.0826668 0 -0.00838329 -0.0826668 0.001 0.0025 -7.82304e-17 0.001 -0.0023524 -0.0554632 0.001 0.00128459 -0.0278375 0.001 0.0025 -7.82304e-17 0 -0.0023524 -0.0554632 0 0.00128459 -0.0278375 0 -0.0132129 -0.0813727 0.001 -0.00838329 -0.0826668 0.001 -0.0025 -7.70058e-17 0.001 -0.00727644 -0.054595 0.001 -0.00369639 -0.0274018 0.001 -0.0132129 0.0813727 0.001 -0.00369639 0.0274018 0.001 -0.00727644 0.054595 0.001 -0.00838329 0.0826668 0.001 0.0025 -7.82304e-17 0.001 0.00128459 0.0278375 0.001 -0.0023524 0.0554632 0.001 -0.0023524 -0.0554632 0.001 0.00128459 -0.0278375 0.001 -0.0132129 -0.0813727 0 -0.0132129 -0.0813727 0.001 -0.0025 -7.70058e-17 0.001 -0.00727644 -0.054595 0.001 -0.00369639 -0.0274018 0.001 -0.0025 -7.70058e-17 0 -0.00727644 -0.054595 0 -0.00369639 -0.0274018 0 -0.0025 -7.70058e-17 0 -0.0025 -7.70058e-17 0.001 -0.0132129 0.0813727 0.001 -0.00369639 0.0274018 0.001 -0.00727644 0.054595 0.001 -0.0132129 0.0813727 0 -0.00369639 0.0274018 0 -0.00727644 0.054595 0 -0.0132129 0.0813727 0 -0.00838329 0.0826668 0 -0.00838329 0.0826668 0.001 -0.0132129 0.0813727 0.001 0.0025 -7.82304e-17 0 0.0025 -7.82304e-17 0.001 -0.00838329 0.0826668 0.001 0.00128459 0.0278375 0.001 -0.0023524 0.0554632 0.001 -0.00838329 0.0826668 0 0.00128459 0.0278375 0 -0.0023524 0.0554632 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="83"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0133833 -0.0826668 0 -0.00855366 -0.0839609 0 -0.00855366 -0.0839609 0.001 -0.0133833 -0.0826668 0.001 -0.0133833 -0.0826668 0 -0.00855366 -0.0839609 0 -0.0025 -7.82304e-17 0 -0.0073524 -0.0554632 0 -0.00371541 -0.0278375 0 -0.0133833 0.0826668 0 -0.00371541 0.0278375 0 -0.0073524 0.0554632 0 -0.00855366 0.0839609 0 0.0025 -7.94551e-17 0 0.00126556 0.0282733 0 -0.00242836 0.0563315 0 -0.00242836 -0.0563315 0 0.00126556 -0.0282733 0 -0.00855366 -0.0839609 0 -0.00855366 -0.0839609 0.001 0.0025 -7.94551e-17 0.001 -0.00242836 -0.0563315 0.001 0.00126556 -0.0282733 0.001 0.0025 -7.94551e-17 0 -0.00242836 -0.0563315 0 0.00126556 -0.0282733 0 -0.0133833 -0.0826668 0.001 -0.00855366 -0.0839609 0.001 -0.0025 -7.82304e-17 0.001 -0.0073524 -0.0554632 0.001 -0.00371541 -0.0278375 0.001 -0.0133833 0.0826668 0.001 -0.00371541 0.0278375 0.001 -0.0073524 0.0554632 0.001 -0.00855366 0.0839609 0.001 0.0025 -7.94551e-17 0.001 0.00126556 0.0282733 0.001 -0.00242836 0.0563315 0.001 -0.00242836 -0.0563315 0.001 0.00126556 -0.0282733 0.001 -0.0133833 -0.0826668 0 -0.0133833 -0.0826668 0.001 -0.0025 -7.82304e-17 0.001 -0.0073524 -0.0554632 0.001 -0.00371541 -0.0278375 0.001 -0.0025 -7.82304e-17 0 -0.0073524 -0.0554632 0 -0.00371541 -0.0278375 0 -0.0025 -7.82304e-17 0 -0.0025 -7.82304e-17 0.001 -0.0133833 0.0826668 0.001 -0.00371541 0.0278375 0.001 -0.0073524 0.0554632 0.001 -0.0133833 0.0826668 0 -0.00371541 0.0278375 0 -0.0073524 0.0554632 0 -0.0133833 0.0826668 0 -0.00855366 0.0839609 0 -0.00855366 0.0839609 0.001 -0.0133833 0.0826668 0.001 0.0025 -7.94551e-17 0 0.0025 -7.94551e-17 0.001 -0.00855366 0.0839609 0.001 0.00126556 0.0282733 0.001 -0.00242836 0.0563315 0.001 -0.00855366 0.0839609 0 0.00126556 0.0282733 0 -0.00242836 0.0563315 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="66"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.010504 -0.0607966 0 -0.00567439 -0.0620907 0 -0.00567439 -0.0620907 0.001 -0.010504 -0.0607966 0.001 -0.010504 -0.0607966 0 -0.00567439 -0.0620907 0 -0.0025 -5.75339e-17 0 -0.00606866 -0.04079 0 -0.00339387 -0.0204729 0 -0.010504 0.0607966 0 -0.00339387 0.0204729 0 -0.00606866 0.04079 0 -0.00567439 0.0620907 0 0.0025 -5.87586e-17 0 0.00158711 0.0209087 0 -0.00114462 0.0416582 0 -0.00114462 -0.0416582 0 0.00158711 -0.0209087 0 -0.00567439 -0.0620907 0 -0.00567439 -0.0620907 0.001 0.0025 -5.87586e-17 0.001 -0.00114462 -0.0416582 0.001 0.00158711 -0.0209087 0.001 0.0025 -5.87586e-17 0 -0.00114462 -0.0416582 0 0.00158711 -0.0209087 0 -0.010504 -0.0607966 0.001 -0.00567439 -0.0620907 0.001 -0.0025 -5.75339e-17 0.001 -0.00606866 -0.04079 0.001 -0.00339387 -0.0204729 0.001 -0.010504 0.0607966 0.001 -0.00339387 0.0204729 0.001 -0.00606866 0.04079 0.001 -0.00567439 0.0620907 0.001 0.0025 -5.87586e-17 0.001 0.00158711 0.0209087 0.001 -0.00114462 0.0416582 0.001 -0.00114462 -0.0416582 0.001 0.00158711 -0.0209087 0.001 -0.010504 -0.0607966 0 -0.010504 -0.0607966 0.001 -0.0025 -5.75339e-17 0.001 -0.00606866 -0.04079 0.001 -0.00339387 -0.0204729 0.001 -0.0025 -5.75339e-17 0 -0.00606866 -0.04079 0 -0.00339387 -0.0204729 0 -0.0025 -5.75339e-17 0 -0.0025 -5.75339e-17 0.001 -0.010504 0.0607966 0.001 -0.00339387 0.0204729 0.001 -0.00606866 0.04079 0.001 -0.010504 0.0607966 0 -0.00339387 0.0204729 0 -0.00606866 0.04079 0 -0.010504 0.0607966 0 -0.00567439 0.0620907 0 -0.00567439 0.0620907 0.001 -0.010504 0.0607966 0.001 0.0025 -5.87586e-17 0 0.0025 -5.87586e-17 0.001 -0.00567439 0.0620907 0.001 0.00158711 0.0209087 0.001 -0.00114462 0.0416582 0.001 -0.00567439 0.0620907 0 0.00158711 0.0209087 0 -0.00114462 0.0416582 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="84"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0135503 -0.083935 0 -0.00872063 -0.0852291 0 -0.00872063 -0.0852291 0.001 -0.0135503 -0.083935 0.001 -0.0135503 -0.083935 0 -0.00872063 -0.0852291 0 -0.0025 -7.94306e-17 0 -0.00742685 -0.0563141 0 -0.00373406 -0.0282646 0 -0.0135503 0.083935 0 -0.00373406 0.0282646 0 -0.00742685 0.0563141 0 -0.00872063 0.0852291 0 0.0025 -8.06552e-17 0 0.00124691 0.0287004 0 -0.00250281 0.0571823 0 -0.00250281 -0.0571823 0 0.00124691 -0.0287004 0 -0.00872063 -0.0852291 0 -0.00872063 -0.0852291 0.001 0.0025 -8.06552e-17 0.001 -0.00250281 -0.0571823 0.001 0.00124691 -0.0287004 0.001 0.0025 -8.06552e-17 0 -0.00250281 -0.0571823 0 0.00124691 -0.0287004 0 -0.0135503 -0.083935 0.001 -0.00872063 -0.0852291 0.001 -0.0025 -7.94306e-17 0.001 -0.00742685 -0.0563141 0.001 -0.00373406 -0.0282646 0.001 -0.0135503 0.083935 0.001 -0.00373406 0.0282646 0.001 -0.00742685 0.0563141 0.001 -0.00872063 0.0852291 0.001 0.0025 -8.06552e-17 0.001 0.00124691 0.0287004 0.001 -0.00250281 0.0571823 0.001 -0.00250281 -0.0571823 0.001 0.00124691 -0.0287004 0.001 -0.0135503 -0.083935 0 -0.0135503 -0.083935 0.001 -0.0025 -7.94306e-17 0.001 -0.00742685 -0.0563141 0.001 -0.00373406 -0.0282646 0.001 -0.0025 -7.94306e-17 0 -0.00742685 -0.0563141 0 -0.00373406 -0.0282646 0 -0.0025 -7.94306e-17 0 -0.0025 -7.94306e-17 0.001 -0.0135503 0.083935 0.001 -0.00373406 0.0282646 0.001 -0.00742685 0.0563141 0.001 -0.0135503 0.083935 0 -0.00373406 0.0282646 0 -0.00742685 0.0563141 0 -0.0135503 0.083935 0 -0.00872063 0.0852291 0 -0.00872063 0.0852291 0.001 -0.0135503 0.083935 0.001 0.0025 -8.06552e-17 0 0.0025 -8.06552e-17 0.001 -0.00872063 0.0852291 0.001 0.00124691 0.0287004 0.001 -0.00250281 0.0571823 0.001 -0.00872063 0.0852291 0 0.00124691 0.0287004 0 -0.00250281 0.0571823 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="85"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0137206 -0.0852291 0 -0.008891 -0.0865232 0 -0.008891 -0.0865232 0.001 -0.0137206 -0.0852291 0.001 -0.0137206 -0.0852291 0 -0.008891 -0.0865232 0 -0.0025 -8.06552e-17 0 -0.00750281 -0.0571823 0 -0.00375309 -0.0287004 0 -0.0137206 0.0852291 0 -0.00375309 0.0287004 0 -0.00750281 0.0571823 0 -0.008891 0.0865232 0 0.0025 -8.18799e-17 0 0.00122789 0.0291362 0 -0.00257877 0.0580506 0 -0.00257877 -0.0580506 0 0.00122789 -0.0291362 0 -0.008891 -0.0865232 0 -0.008891 -0.0865232 0.001 0.0025 -8.18799e-17 0.001 -0.00257877 -0.0580506 0.001 0.00122789 -0.0291362 0.001 0.0025 -8.18799e-17 0 -0.00257877 -0.0580506 0 0.00122789 -0.0291362 0 -0.0137206 -0.0852291 0.001 -0.008891 -0.0865232 0.001 -0.0025 -8.06552e-17 0.001 -0.00750281 -0.0571823 0.001 -0.00375309 -0.0287004 0.001 -0.0137206 0.0852291 0.001 -0.00375309 0.0287004 0.001 -0.00750281 0.0571823 0.001 -0.008891 0.0865232 0.001 0.0025 -8.18799e-17 0.001 0.00122789 0.0291362 0.001 -0.00257877 0.0580506 0.001 -0.00257877 -0.0580506 0.001 0.00122789 -0.0291362 0.001 -0.0137206 -0.0852291 0 -0.0137206 -0.0852291 0.001 -0.0025 -8.06552e-17 0.001 -0.00750281 -0.0571823 0.001 -0.00375309 -0.0287004 0.001 -0.0025 -8.06552e-17 0 -0.00750281 -0.0571823 0 -0.00375309 -0.0287004 0 -0.0025 -8.06552e-17 0 -0.0025 -8.06552e-17 0.001 -0.0137206 0.0852291 0.001 -0.00375309 0.0287004 0.001 -0.00750281 0.0571823 0.001 -0.0137206 0.0852291 0 -0.00375309 0.0287004 0 -0.00750281 0.0571823 0 -0.0137206 0.0852291 0 -0.008891 0.0865232 0 -0.008891 0.0865232 0.001 -0.0137206 0.0852291 0.001 0.0025 -8.18799e-17 0 0.0025 -8.18799e-17 0.001 -0.008891 0.0865232 0.001 0.00122789 0.0291362 0.001 -0.00257877 0.0580506 0.001 -0.008891 0.0865232 0 0.00122789 0.0291362 0 -0.00257877 0.0580506 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="86"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0138876 -0.0864973 0 -0.00905796 -0.0877914 0 -0.00905796 -0.0877914 0.001 -0.0138876 -0.0864973 0.001 -0.0138876 -0.0864973 0 -0.00905796 -0.0877914 0 -0.0025 -8.18554e-17 0 -0.00757725 -0.0580332 0 -0.00377173 -0.0291274 0 -0.0138876 0.0864973 0 -0.00377173 0.0291274 0 -0.00757725 0.0580332 0 -0.00905796 0.0877914 0 0.0025 -8.308e-17 0 0.00120924 0.0295632 0 -0.00265321 0.0589015 0 -0.00265321 -0.0589015 0 0.00120924 -0.0295632 0 -0.00905796 -0.0877914 0 -0.00905796 -0.0877914 0.001 0.0025 -8.308e-17 0.001 -0.00265321 -0.0589015 0.001 0.00120924 -0.0295632 0.001 0.0025 -8.308e-17 0 -0.00265321 -0.0589015 0 0.00120924 -0.0295632 0 -0.0138876 -0.0864973 0.001 -0.00905796 -0.0877914 0.001 -0.0025 -8.18554e-17 0.001 -0.00757725 -0.0580332 0.001 -0.00377173 -0.0291274 0.001 -0.0138876 0.0864973 0.001 -0.00377173 0.0291274 0.001 -0.00757725 0.0580332 0.001 -0.00905796 0.0877914 0.001 0.0025 -8.308e-17 0.001 0.00120924 0.0295632 0.001 -0.00265321 0.0589015 0.001 -0.00265321 -0.0589015 0.001 0.00120924 -0.0295632 0.001 -0.0138876 -0.0864973 0 -0.0138876 -0.0864973 0.001 -0.0025 -8.18554e-17 0.001 -0.00757725 -0.0580332 0.001 -0.00377173 -0.0291274 0.001 -0.0025 -8.18554e-17 0 -0.00757725 -0.0580332 0 -0.00377173 -0.0291274 0 -0.0025 -8.18554e-17 0 -0.0025 -8.18554e-17 0.001 -0.0138876 0.0864973 0.001 -0.00377173 0.0291274 0.001 -0.00757725 0.0580332 0.001 -0.0138876 0.0864973 0 -0.00377173 0.0291274 0 -0.00757725 0.0580332 0 -0.0138876 0.0864973 0 -0.00905796 0.0877914 0 -0.00905796 0.0877914 0.001 -0.0138876 0.0864973 0.001 0.0025 -8.308e-17 0 0.0025 -8.308e-17 0.001 -0.00905796 0.0877914 0.001 0.00120924 0.0295632 0.001 -0.00265321 0.0589015 0.001 -0.00905796 0.0877914 0 0.00120924 0.0295632 0 -0.00265321 0.0589015 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="87"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.014058 -0.0877914 0 -0.00922833 -0.0890855 0 -0.00922833 -0.0890855 0.001 -0.014058 -0.0877914 0.001 -0.014058 -0.0877914 0 -0.00922833 -0.0890855 0 -0.0025 -8.308e-17 0 -0.00765321 -0.0589015 0 -0.00379076 -0.0295632 0 -0.014058 0.0877914 0 -0.00379076 0.0295632 0 -0.00765321 0.0589015 0 -0.00922833 0.0890855 0 0.0025 -8.43047e-17 0 0.00119022 0.029999 0 -0.00272917 0.0597697 0 -0.00272917 -0.0597697 0 0.00119022 -0.029999 0 -0.00922833 -0.0890855 0 -0.00922833 -0.0890855 0.001 0.0025 -8.43047e-17 0.001 -0.00272917 -0.0597697 0.001 0.00119022 -0.029999 0.001 0.0025 -8.43047e-17 0 -0.00272917 -0.0597697 0 0.00119022 -0.029999 0 -0.014058 -0.0877914 0.001 -0.00922833 -0.0890855 0.001 -0.0025 -8.308e-17 0.001 -0.00765321 -0.0589015 0.001 -0.00379076 -0.0295632 0.001 -0.014058 0.0877914 0.001 -0.00379076 0.0295632 0.001 -0.00765321 0.0589015 0.001 -0.00922833 0.0890855 0.001 0.0025 -8.43047e-17 0.001 0.00119022 0.029999 0.001 -0.00272917 0.0597697 0.001 -0.00272917 -0.0597697 0.001 0.00119022 -0.029999 0.001 -0.014058 -0.0877914 0 -0.014058 -0.0877914 0.001 -0.0025 -8.308e-17 0.001 -0.00765321 -0.0589015 0.001 -0.00379076 -0.0295632 0.001 -0.0025 -8.308e-17 0 -0.00765321 -0.0589015 0 -0.00379076 -0.0295632 0 -0.0025 -8.308e-17 0 -0.0025 -8.308e-17 0.001 -0.014058 0.0877914 0.001 -0.00379076 0.0295632 0.001 -0.00765321 0.0589015 0.001 -0.014058 0.0877914 0 -0.00379076 0.0295632 0 -0.00765321 0.0589015 0 -0.014058 0.0877914 0 -0.00922833 0.0890855 0 -0.00922833 0.0890855 0.001 -0.014058 0.0877914 0.001 0.0025 -8.43047e-17 0 0.0025 -8.43047e-17 0.001 -0.00922833 0.0890855 0.001 0.00119022 0.029999 0.001 -0.00272917 0.0597697 0.001 -0.00922833 0.0890855 0 0.00119022 0.029999 0 -0.00272917 0.0597697 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="88"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0142249 -0.0890596 0 -0.00939529 -0.0903537 0 -0.00939529 -0.0903537 0.001 -0.0142249 -0.0890596 0.001 -0.0142249 -0.0890596 0 -0.00939529 -0.0903537 0 -0.0025 -8.42802e-17 0 -0.00772765 -0.0597523 0 -0.0038094 -0.0299903 0 -0.0142249 0.0890596 0 -0.0038094 0.0299903 0 -0.00772765 0.0597523 0 -0.00939529 0.0903537 0 0.0025 -8.55048e-17 0 0.00117157 0.0304261 0 -0.00280361 0.0606206 0 -0.00280361 -0.0606206 0 0.00117157 -0.0304261 0 -0.00939529 -0.0903537 0 -0.00939529 -0.0903537 0.001 0.0025 -8.55048e-17 0.001 -0.00280361 -0.0606206 0.001 0.00117157 -0.0304261 0.001 0.0025 -8.55048e-17 0 -0.00280361 -0.0606206 0 0.00117157 -0.0304261 0 -0.0142249 -0.0890596 0.001 -0.00939529 -0.0903537 0.001 -0.0025 -8.42802e-17 0.001 -0.00772765 -0.0597523 0.001 -0.0038094 -0.0299903 0.001 -0.0142249 0.0890596 0.001 -0.0038094 0.0299903 0.001 -0.00772765 0.0597523 0.001 -0.00939529 0.0903537 0.001 0.0025 -8.55048e-17 0.001 0.00117157 0.0304261 0.001 -0.00280361 0.0606206 0.001 -0.00280361 -0.0606206 0.001 0.00117157 -0.0304261 0.001 -0.0142249 -0.0890596 0 -0.0142249 -0.0890596 0.001 -0.0025 -8.42802e-17 0.001 -0.00772765 -0.0597523 0.001 -0.0038094 -0.0299903 0.001 -0.0025 -8.42802e-17 0 -0.00772765 -0.0597523 0 -0.0038094 -0.0299903 0 -0.0025 -8.42802e-17 0 -0.0025 -8.42802e-17 0.001 -0.0142249 0.0890596 0.001 -0.0038094 0.0299903 0.001 -0.00772765 0.0597523 0.001 -0.0142249 0.0890596 0 -0.0038094 0.0299903 0 -0.00772765 0.0597523 0 -0.0142249 0.0890596 0 -0.00939529 0.0903537 0 -0.00939529 0.0903537 0.001 -0.0142249 0.0890596 0.001 0.0025 -8.55048e-17 0 0.0025 -8.55048e-17 0.001 -0.00939529 0.0903537 0.001 0.00117157 0.0304261 0.001 -0.00280361 0.0606206 0.001 -0.00939529 0.0903537 0 0.00117157 0.0304261 0 -0.00280361 0.0606206 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="89"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0143953 -0.0903537 0 -0.00956566 -0.0916478 0 -0.00956566 -0.0916478 0.001 -0.0143953 -0.0903537 0.001 -0.0143953 -0.0903537 0 -0.00956566 -0.0916478 0 -0.0025 -8.55048e-17 0 -0.00780361 -0.0606206 0 -0.00382843 -0.0304261 0 -0.0143953 0.0903537 0 -0.00382843 0.0304261 0 -0.00780361 0.0606206 0 -0.00956566 0.0916478 0 0.0025 -8.67295e-17 0 0.00115254 0.0308618 0 -0.00287957 0.0614888 0 -0.00287957 -0.0614888 0 0.00115254 -0.0308618 0 -0.00956566 -0.0916478 0 -0.00956566 -0.0916478 0.001 0.0025 -8.67295e-17 0.001 -0.00287957 -0.0614888 0.001 0.00115254 -0.0308618 0.001 0.0025 -8.67295e-17 0 -0.00287957 -0.0614888 0 0.00115254 -0.0308618 0 -0.0143953 -0.0903537 0.001 -0.00956566 -0.0916478 0.001 -0.0025 -8.55048e-17 0.001 -0.00780361 -0.0606206 0.001 -0.00382843 -0.0304261 0.001 -0.0143953 0.0903537 0.001 -0.00382843 0.0304261 0.001 -0.00780361 0.0606206 0.001 -0.00956566 0.0916478 0.001 0.0025 -8.67295e-17 0.001 0.00115254 0.0308618 0.001 -0.00287957 0.0614888 0.001 -0.00287957 -0.0614888 0.001 0.00115254 -0.0308618 0.001 -0.0143953 -0.0903537 0 -0.0143953 -0.0903537 0.001 -0.0025 -8.55048e-17 0.001 -0.00780361 -0.0606206 0.001 -0.00382843 -0.0304261 0.001 -0.0025 -8.55048e-17 0 -0.00780361 -0.0606206 0 -0.00382843 -0.0304261 0 -0.0025 -8.55048e-17 0 -0.0025 -8.55048e-17 0.001 -0.0143953 0.0903537 0.001 -0.00382843 0.0304261 0.001 -0.00780361 0.0606206 0.001 -0.0143953 0.0903537 0 -0.00382843 0.0304261 0 -0.00780361 0.0606206 0 -0.0143953 0.0903537 0 -0.00956566 0.0916478 0 -0.00956566 0.0916478 0.001 -0.0143953 0.0903537 0.001 0.0025 -8.67295e-17 0 0.0025 -8.67295e-17 0.001 -0.00956566 0.0916478 0.001 0.00115254 0.0308618 0.001 -0.00287957 0.0614888 0.001 -0.00956566 0.0916478 0 0.00115254 0.0308618 0 -0.00287957 0.0614888 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="90"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0145623 -0.0916219 0 -0.00973263 -0.092916 0 -0.00973263 -0.092916 0.001 -0.0145623 -0.0916219 0.001 -0.0145623 -0.0916219 0 -0.00973263 -0.092916 0 -0.0025 -8.6705e-17 0 -0.00787806 -0.0614715 0 -0.00384708 -0.0308531 0 -0.0145623 0.0916219 0 -0.00384708 0.0308531 0 -0.00787806 0.0614715 0 -0.00973263 0.092916 0 0.0025 -8.79296e-17 0 0.0011339 0.0312889 0 -0.00295402 0.0623397 0 -0.00295402 -0.0623397 0 0.0011339 -0.0312889 0 -0.00973263 -0.092916 0 -0.00973263 -0.092916 0.001 0.0025 -8.79296e-17 0.001 -0.00295402 -0.0623397 0.001 0.0011339 -0.0312889 0.001 0.0025 -8.79296e-17 0 -0.00295402 -0.0623397 0 0.0011339 -0.0312889 0 -0.0145623 -0.0916219 0.001 -0.00973263 -0.092916 0.001 -0.0025 -8.6705e-17 0.001 -0.00787806 -0.0614715 0.001 -0.00384708 -0.0308531 0.001 -0.0145623 0.0916219 0.001 -0.00384708 0.0308531 0.001 -0.00787806 0.0614715 0.001 -0.00973263 0.092916 0.001 0.0025 -8.79296e-17 0.001 0.0011339 0.0312889 0.001 -0.00295402 0.0623397 0.001 -0.00295402 -0.0623397 0.001 0.0011339 -0.0312889 0.001 -0.0145623 -0.0916219 0 -0.0145623 -0.0916219 0.001 -0.0025 -8.6705e-17 0.001 -0.00787806 -0.0614715 0.001 -0.00384708 -0.0308531 0.001 -0.0025 -8.6705e-17 0 -0.00787806 -0.0614715 0 -0.00384708 -0.0308531 0 -0.0025 -8.6705e-17 0 -0.0025 -8.6705e-17 0.001 -0.0145623 0.0916219 0.001 -0.00384708 0.0308531 0.001 -0.00787806 0.0614715 0.001 -0.0145623 0.0916219 0 -0.00384708 0.0308531 0 -0.00787806 0.0614715 0 -0.0145623 0.0916219 0 -0.00973263 0.092916 0 -0.00973263 0.092916 0.001 -0.0145623 0.0916219 0.001 0.0025 -8.79296e-17 0 0.0025 -8.79296e-17 0.001 -0.00973263 0.092916 0.001 0.0011339 0.0312889 0.001 -0.00295402 0.0623397 0.001 -0.00973263 0.092916 0 0.0011339 0.0312889 0 -0.00295402 0.0623397 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="91"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0147326 -0.092916 0 -0.009903 -0.0942101 0 -0.009903 -0.0942101 0.001 -0.0147326 -0.092916 0.001 -0.0147326 -0.092916 0 -0.009903 -0.0942101 0 -0.0025 -8.79296e-17 0 -0.00795402 -0.0623397 0 -0.0038661 -0.0312889 0 -0.0147326 0.092916 0 -0.0038661 0.0312889 0 -0.00795402 0.0623397 0 -0.009903 0.0942101 0 0.0025 -8.91543e-17 0 0.00111487 0.0317247 0 -0.00302998 0.0632079 0 -0.00302998 -0.0632079 0 0.00111487 -0.0317247 0 -0.009903 -0.0942101 0 -0.009903 -0.0942101 0.001 0.0025 -8.91543e-17 0.001 -0.00302998 -0.0632079 0.001 0.00111487 -0.0317247 0.001 0.0025 -8.91543e-17 0 -0.00302998 -0.0632079 0 0.00111487 -0.0317247 0 -0.0147326 -0.092916 0.001 -0.009903 -0.0942101 0.001 -0.0025 -8.79296e-17 0.001 -0.00795402 -0.0623397 0.001 -0.0038661 -0.0312889 0.001 -0.0147326 0.092916 0.001 -0.0038661 0.0312889 0.001 -0.00795402 0.0623397 0.001 -0.009903 0.0942101 0.001 0.0025 -8.91543e-17 0.001 0.00111487 0.0317247 0.001 -0.00302998 0.0632079 0.001 -0.00302998 -0.0632079 0.001 0.00111487 -0.0317247 0.001 -0.0147326 -0.092916 0 -0.0147326 -0.092916 0.001 -0.0025 -8.79296e-17 0.001 -0.00795402 -0.0623397 0.001 -0.0038661 -0.0312889 0.001 -0.0025 -8.79296e-17 0 -0.00795402 -0.0623397 0 -0.0038661 -0.0312889 0 -0.0025 -8.79296e-17 0 -0.0025 -8.79296e-17 0.001 -0.0147326 0.092916 0.001 -0.0038661 0.0312889 0.001 -0.00795402 0.0623397 0.001 -0.0147326 0.092916 0 -0.0038661 0.0312889 0 -0.00795402 0.0623397 0 -0.0147326 0.092916 0 -0.009903 0.0942101 0 -0.009903 0.0942101 0.001 -0.0147326 0.092916 0.001 0.0025 -8.91543e-17 0 0.0025 -8.91543e-17 0.001 -0.009903 0.0942101 0.001 0.00111487 0.0317247 0.001 -0.00302998 0.0632079 0.001 -0.009903 0.0942101 0 0.00111487 0.0317247 0 -0.00302998 0.0632079 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="92"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0148996 -0.0941843 0 -0.01007 -0.0954783 0 -0.01007 -0.0954783 0.001 -0.0148996 -0.0941843 0.001 -0.0148996 -0.0941843 0 -0.01007 -0.0954783 0 -0.0025 -8.91298e-17 0 -0.00802846 -0.0631906 0 -0.00388475 -0.031716 0 -0.0148996 0.0941843 0 -0.00388475 0.031716 0 -0.00802846 0.0631906 0 -0.01007 0.0954783 0 0.0025 -9.03544e-17 0 0.00109622 0.0321518 0 -0.00310442 0.0640588 0 -0.00310442 -0.0640588 0 0.00109622 -0.0321518 0 -0.01007 -0.0954783 0 -0.01007 -0.0954783 0.001 0.0025 -9.03544e-17 0.001 -0.00310442 -0.0640588 0.001 0.00109622 -0.0321518 0.001 0.0025 -9.03544e-17 0 -0.00310442 -0.0640588 0 0.00109622 -0.0321518 0 -0.0148996 -0.0941843 0.001 -0.01007 -0.0954783 0.001 -0.0025 -8.91298e-17 0.001 -0.00802846 -0.0631906 0.001 -0.00388475 -0.031716 0.001 -0.0148996 0.0941843 0.001 -0.00388475 0.031716 0.001 -0.00802846 0.0631906 0.001 -0.01007 0.0954783 0.001 0.0025 -9.03544e-17 0.001 0.00109622 0.0321518 0.001 -0.00310442 0.0640588 0.001 -0.00310442 -0.0640588 0.001 0.00109622 -0.0321518 0.001 -0.0148996 -0.0941843 0 -0.0148996 -0.0941843 0.001 -0.0025 -8.91298e-17 0.001 -0.00802846 -0.0631906 0.001 -0.00388475 -0.031716 0.001 -0.0025 -8.91298e-17 0 -0.00802846 -0.0631906 0 -0.00388475 -0.031716 0 -0.0025 -8.91298e-17 0 -0.0025 -8.91298e-17 0.001 -0.0148996 0.0941843 0.001 -0.00388475 0.031716 0.001 -0.00802846 0.0631906 0.001 -0.0148996 0.0941843 0 -0.00388475 0.031716 0 -0.00802846 0.0631906 0 -0.0148996 0.0941843 0 -0.01007 0.0954783 0 -0.01007 0.0954783 0.001 -0.0148996 0.0941843 0.001 0.0025 -9.03544e-17 0 0.0025 -9.03544e-17 0.001 -0.01007 0.0954783 0.001 0.00109622 0.0321518 0.001 -0.00310442 0.0640588 0.001 -0.01007 0.0954783 0 0.00109622 0.0321518 0 -0.00310442 0.0640588 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="93"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0150666 -0.0954525 0 -0.0102369 -0.0967466 0 -0.0102369 -0.0967466 0.001 -0.0150666 -0.0954525 0.001 -0.0150666 -0.0954525 0 -0.0102369 -0.0967466 0 -0.0025 -9.03299e-17 0 -0.0081029 -0.0640414 0 -0.0039034 -0.032143 0 -0.0150666 0.0954525 0 -0.0039034 0.032143 0 -0.0081029 0.0640414 0 -0.0102369 0.0967466 0 0.0025 -9.15546e-17 0 0.00107758 0.0325788 0 -0.00317886 0.0649097 0 -0.00317886 -0.0649097 0 0.00107758 -0.0325788 0 -0.0102369 -0.0967466 0 -0.0102369 -0.0967466 0.001 0.0025 -9.15546e-17 0.001 -0.00317886 -0.0649097 0.001 0.00107758 -0.0325788 0.001 0.0025 -9.15546e-17 0 -0.00317886 -0.0649097 0 0.00107758 -0.0325788 0 -0.0150666 -0.0954525 0.001 -0.0102369 -0.0967466 0.001 -0.0025 -9.03299e-17 0.001 -0.0081029 -0.0640414 0.001 -0.0039034 -0.032143 0.001 -0.0150666 0.0954525 0.001 -0.0039034 0.032143 0.001 -0.0081029 0.0640414 0.001 -0.0102369 0.0967466 0.001 0.0025 -9.15546e-17 0.001 0.00107758 0.0325788 0.001 -0.00317886 0.0649097 0.001 -0.00317886 -0.0649097 0.001 0.00107758 -0.0325788 0.001 -0.0150666 -0.0954525 0 -0.0150666 -0.0954525 0.001 -0.0025 -9.03299e-17 0.001 -0.0081029 -0.0640414 0.001 -0.0039034 -0.032143 0.001 -0.0025 -9.03299e-17 0 -0.0081029 -0.0640414 0 -0.0039034 -0.032143 0 -0.0025 -9.03299e-17 0 -0.0025 -9.03299e-17 0.001 -0.0150666 0.0954525 0.001 -0.0039034 0.032143 0.001 -0.0081029 0.0640414 0.001 -0.0150666 0.0954525 0 -0.0039034 0.032143 0 -0.0081029 0.0640414 0 -0.0150666 0.0954525 0 -0.0102369 0.0967466 0 -0.0102369 0.0967466 0.001 -0.0150666 0.0954525 0.001 0.0025 -9.15546e-17 0 0.0025 -9.15546e-17 0.001 -0.0102369 0.0967466 0.001 0.00107758 0.0325788 0.001 -0.00317886 0.0649097 0.001 -0.0102369 0.0967466 0 0.00107758 0.0325788 0 -0.00317886 0.0649097 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="67"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0106744 -0.0620907 0 -0.00584477 -0.0633848 0 -0.00584477 -0.0633848 0.001 -0.0106744 -0.0620907 0.001 -0.0106744 -0.0620907 0 -0.00584477 -0.0633848 0 -0.0025 -5.87586e-17 0 -0.00614462 -0.0416582 0 -0.00341289 -0.0209087 0 -0.0106744 0.0620907 0 -0.00341289 0.0209087 0 -0.00614462 0.0416582 0 -0.00584477 0.0633848 0 0.0025 -5.99832e-17 0 0.00156808 0.0213444 0 -0.00122058 0.0425264 0 -0.00122058 -0.0425264 0 0.00156808 -0.0213444 0 -0.00584477 -0.0633848 0 -0.00584477 -0.0633848 0.001 0.0025 -5.99832e-17 0.001 -0.00122058 -0.0425264 0.001 0.00156808 -0.0213444 0.001 0.0025 -5.99832e-17 0 -0.00122058 -0.0425264 0 0.00156808 -0.0213444 0 -0.0106744 -0.0620907 0.001 -0.00584477 -0.0633848 0.001 -0.0025 -5.87586e-17 0.001 -0.00614462 -0.0416582 0.001 -0.00341289 -0.0209087 0.001 -0.0106744 0.0620907 0.001 -0.00341289 0.0209087 0.001 -0.00614462 0.0416582 0.001 -0.00584477 0.0633848 0.001 0.0025 -5.99832e-17 0.001 0.00156808 0.0213444 0.001 -0.00122058 0.0425264 0.001 -0.00122058 -0.0425264 0.001 0.00156808 -0.0213444 0.001 -0.0106744 -0.0620907 0 -0.0106744 -0.0620907 0.001 -0.0025 -5.87586e-17 0.001 -0.00614462 -0.0416582 0.001 -0.00341289 -0.0209087 0.001 -0.0025 -5.87586e-17 0 -0.00614462 -0.0416582 0 -0.00341289 -0.0209087 0 -0.0025 -5.87586e-17 0 -0.0025 -5.87586e-17 0.001 -0.0106744 0.0620907 0.001 -0.00341289 0.0209087 0.001 -0.00614462 0.0416582 0.001 -0.0106744 0.0620907 0 -0.00341289 0.0209087 0 -0.00614462 0.0416582 0 -0.0106744 0.0620907 0 -0.00584477 0.0633848 0 -0.00584477 0.0633848 0.001 -0.0106744 0.0620907 0.001 0.0025 -5.99832e-17 0 0.0025 -5.99832e-17 0.001 -0.00584477 0.0633848 0.001 0.00156808 0.0213444 0.001 -0.00122058 0.0425264 0.001 -0.00584477 0.0633848 0 0.00156808 0.0213444 0 -0.00122058 0.0425264 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="94"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0152369 -0.0967466 0 -0.0104073 -0.0980407 0 -0.0104073 -0.0980407 0.001 -0.0152369 -0.0967466 0.001 -0.0152369 -0.0967466 0 -0.0104073 -0.0980407 0 -0.0025 -9.15546e-17 0 -0.00817886 -0.0649097 0 -0.00392242 -0.0325788 0 -0.0152369 0.0967466 0 -0.00392242 0.0325788 0 -0.00817886 0.0649097 0 -0.0104073 0.0980407 0 0.0025 -9.27792e-17 0 0.00105855 0.0330146 0 -0.00325482 0.0657779 0 -0.00325482 -0.0657779 0 0.00105855 -0.0330146 0 -0.0104073 -0.0980407 0 -0.0104073 -0.0980407 0.001 0.0025 -9.27792e-17 0.001 -0.00325482 -0.0657779 0.001 0.00105855 -0.0330146 0.001 0.0025 -9.27792e-17 0 -0.00325482 -0.0657779 0 0.00105855 -0.0330146 0 -0.0152369 -0.0967466 0.001 -0.0104073 -0.0980407 0.001 -0.0025 -9.15546e-17 0.001 -0.00817886 -0.0649097 0.001 -0.00392242 -0.0325788 0.001 -0.0152369 0.0967466 0.001 -0.00392242 0.0325788 0.001 -0.00817886 0.0649097 0.001 -0.0104073 0.0980407 0.001 0.0025 -9.27792e-17 0.001 0.00105855 0.0330146 0.001 -0.00325482 0.0657779 0.001 -0.00325482 -0.0657779 0.001 0.00105855 -0.0330146 0.001 -0.0152369 -0.0967466 0 -0.0152369 -0.0967466 0.001 -0.0025 -9.15546e-17 0.001 -0.00817886 -0.0649097 0.001 -0.00392242 -0.0325788 0.001 -0.0025 -9.15546e-17 0 -0.00817886 -0.0649097 0 -0.00392242 -0.0325788 0 -0.0025 -9.15546e-17 0 -0.0025 -9.15546e-17 0.001 -0.0152369 0.0967466 0.001 -0.00392242 0.0325788 0.001 -0.00817886 0.0649097 0.001 -0.0152369 0.0967466 0 -0.00392242 0.0325788 0 -0.00817886 0.0649097 0 -0.0152369 0.0967466 0 -0.0104073 0.0980407 0 -0.0104073 0.0980407 0.001 -0.0152369 0.0967466 0.001 0.0025 -9.27792e-17 0 0.0025 -9.27792e-17 0.001 -0.0104073 0.0980407 0.001 0.00105855 0.0330146 0.001 -0.00325482 0.0657779 0.001 -0.0104073 0.0980407 0 0.00105855 0.0330146 0 -0.00325482 0.0657779 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="95"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0154039 -0.0980148 0 -0.0105743 -0.0993089 0 -0.0105743 -0.0993089 0.001 -0.0154039 -0.0980148 0.001 -0.0154039 -0.0980148 0 -0.0105743 -0.0993089 0 -0.0025 -9.27547e-17 0 -0.0082533 -0.0657606 0 -0.00394107 -0.0330059 0 -0.0154039 0.0980148 0 -0.00394107 0.0330059 0 -0.0082533 0.0657606 0 -0.0105743 0.0993089 0 0.0025 -9.39794e-17 0 0.00103991 0.0334417 0 -0.00332927 0.0666288 0 -0.00332927 -0.0666288 0 0.00103991 -0.0334417 0 -0.0105743 -0.0993089 0 -0.0105743 -0.0993089 0.001 0.0025 -9.39794e-17 0.001 -0.00332927 -0.0666288 0.001 0.00103991 -0.0334417 0.001 0.0025 -9.39794e-17 0 -0.00332927 -0.0666288 0 0.00103991 -0.0334417 0 -0.0154039 -0.0980148 0.001 -0.0105743 -0.0993089 0.001 -0.0025 -9.27547e-17 0.001 -0.0082533 -0.0657606 0.001 -0.00394107 -0.0330059 0.001 -0.0154039 0.0980148 0.001 -0.00394107 0.0330059 0.001 -0.0082533 0.0657606 0.001 -0.0105743 0.0993089 0.001 0.0025 -9.39794e-17 0.001 0.00103991 0.0334417 0.001 -0.00332927 0.0666288 0.001 -0.00332927 -0.0666288 0.001 0.00103991 -0.0334417 0.001 -0.0154039 -0.0980148 0 -0.0154039 -0.0980148 0.001 -0.0025 -9.27547e-17 0.001 -0.0082533 -0.0657606 0.001 -0.00394107 -0.0330059 0.001 -0.0025 -9.27547e-17 0 -0.0082533 -0.0657606 0 -0.00394107 -0.0330059 0 -0.0025 -9.27547e-17 0 -0.0025 -9.27547e-17 0.001 -0.0154039 0.0980148 0.001 -0.00394107 0.0330059 0.001 -0.0082533 0.0657606 0.001 -0.0154039 0.0980148 0 -0.00394107 0.0330059 0 -0.0082533 0.0657606 0 -0.0154039 0.0980148 0 -0.0105743 0.0993089 0 -0.0105743 0.0993089 0.001 -0.0154039 0.0980148 0.001 0.0025 -9.39794e-17 0 0.0025 -9.39794e-17 0.001 -0.0105743 0.0993089 0.001 0.00103991 0.0334417 0.001 -0.00332927 0.0666288 0.001 -0.0105743 0.0993089 0 0.00103991 0.0334417 0 -0.00332927 0.0666288 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="96"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0155709 -0.099283 0 -0.0107412 -0.100577 0 -0.0107412 -0.100577 0.001 -0.0155709 -0.099283 0.001 -0.0155709 -0.099283 0 -0.0107412 -0.100577 0 -0.0025 -9.39549e-17 0 -0.00832775 -0.0666114 0 -0.00395971 -0.0334329 0 -0.0155709 0.099283 0 -0.00395971 0.0334329 0 -0.00832775 0.0666114 0 -0.0107412 0.100577 0 0.0025 -9.51795e-17 0 0.00102126 0.0338687 0 -0.00340371 0.0674797 0 -0.00340371 -0.0674797 0 0.00102126 -0.0338687 0 -0.0107412 -0.100577 0 -0.0107412 -0.100577 0.001 0.0025 -9.51795e-17 0.001 -0.00340371 -0.0674797 0.001 0.00102126 -0.0338687 0.001 0.0025 -9.51795e-17 0 -0.00340371 -0.0674797 0 0.00102126 -0.0338687 0 -0.0155709 -0.099283 0.001 -0.0107412 -0.100577 0.001 -0.0025 -9.39549e-17 0.001 -0.00832775 -0.0666114 0.001 -0.00395971 -0.0334329 0.001 -0.0155709 0.099283 0.001 -0.00395971 0.0334329 0.001 -0.00832775 0.0666114 0.001 -0.0107412 0.100577 0.001 0.0025 -9.51795e-17 0.001 0.00102126 0.0338687 0.001 -0.00340371 0.0674797 0.001 -0.00340371 -0.0674797 0.001 0.00102126 -0.0338687 0.001 -0.0155709 -0.099283 0 -0.0155709 -0.099283 0.001 -0.0025 -9.39549e-17 0.001 -0.00832775 -0.0666114 0.001 -0.00395971 -0.0334329 0.001 -0.0025 -9.39549e-17 0 -0.00832775 -0.0666114 0 -0.00395971 -0.0334329 0 -0.0025 -9.39549e-17 0 -0.0025 -9.39549e-17 0.001 -0.0155709 0.099283 0.001 -0.00395971 0.0334329 0.001 -0.00832775 0.0666114 0.001 -0.0155709 0.099283 0 -0.00395971 0.0334329 0 -0.00832775 0.0666114 0 -0.0155709 0.099283 0 -0.0107412 0.100577 0 -0.0107412 0.100577 0.001 -0.0155709 0.099283 0.001 0.0025 -9.51795e-17 0 0.0025 -9.51795e-17 0.001 -0.0107412 0.100577 0.001 0.00102126 0.0338687 0.001 -0.00340371 0.0674797 0.001 -0.0107412 0.100577 0 0.00102126 0.0338687 0 -0.00340371 0.0674797 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="97"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0157412 -0.100577 0 -0.0109116 -0.101871 0 -0.0109116 -0.101871 0.001 -0.0157412 -0.100577 0.001 -0.0157412 -0.100577 0 -0.0109116 -0.101871 0 -0.0025 -9.51795e-17 0 -0.00840371 -0.0674797 0 -0.00397874 -0.0338687 0 -0.0157412 0.100577 0 -0.00397874 0.0338687 0 -0.00840371 0.0674797 0 -0.0109116 0.101871 0 0.0025 -9.64042e-17 0 0.00100223 0.0343045 0 -0.00347967 0.0683479 0 -0.00347967 -0.0683479 0 0.00100223 -0.0343045 0 -0.0109116 -0.101871 0 -0.0109116 -0.101871 0.001 0.0025 -9.64042e-17 0.001 -0.00347967 -0.0683479 0.001 0.00100223 -0.0343045 0.001 0.0025 -9.64042e-17 0 -0.00347967 -0.0683479 0 0.00100223 -0.0343045 0 -0.0157412 -0.100577 0.001 -0.0109116 -0.101871 0.001 -0.0025 -9.51795e-17 0.001 -0.00840371 -0.0674797 0.001 -0.00397874 -0.0338687 0.001 -0.0157412 0.100577 0.001 -0.00397874 0.0338687 0.001 -0.00840371 0.0674797 0.001 -0.0109116 0.101871 0.001 0.0025 -9.64042e-17 0.001 0.00100223 0.0343045 0.001 -0.00347967 0.0683479 0.001 -0.00347967 -0.0683479 0.001 0.00100223 -0.0343045 0.001 -0.0157412 -0.100577 0 -0.0157412 -0.100577 0.001 -0.0025 -9.51795e-17 0.001 -0.00840371 -0.0674797 0.001 -0.00397874 -0.0338687 0.001 -0.0025 -9.51795e-17 0 -0.00840371 -0.0674797 0 -0.00397874 -0.0338687 0 -0.0025 -9.51795e-17 0 -0.0025 -9.51795e-17 0.001 -0.0157412 0.100577 0.001 -0.00397874 0.0338687 0.001 -0.00840371 0.0674797 0.001 -0.0157412 0.100577 0 -0.00397874 0.0338687 0 -0.00840371 0.0674797 0 -0.0157412 0.100577 0 -0.0109116 0.101871 0 -0.0109116 0.101871 0.001 -0.0157412 0.100577 0.001 0.0025 -9.64042e-17 0 0.0025 -9.64042e-17 0.001 -0.0109116 0.101871 0.001 0.00100223 0.0343045 0.001 -0.00347967 0.0683479 0.001 -0.0109116 0.101871 0 0.00100223 0.0343045 0 -0.00347967 0.0683479 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="98"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0159082 -0.101845 0 -0.0110786 -0.103139 0 -0.0110786 -0.103139 0.001 -0.0159082 -0.101845 0.001 -0.0159082 -0.101845 0 -0.0110786 -0.103139 0 -0.0025 -9.63797e-17 0 -0.00847815 -0.0683306 0 -0.00399739 -0.0342958 0 -0.0159082 0.101845 0 -0.00399739 0.0342958 0 -0.00847815 0.0683306 0 -0.0110786 0.103139 0 0.0025 -9.76043e-17 0 0.000983587 0.0347316 0 -0.00355411 0.0691988 0 -0.00355411 -0.0691988 0 0.000983587 -0.0347316 0 -0.0110786 -0.103139 0 -0.0110786 -0.103139 0.001 0.0025 -9.76043e-17 0.001 -0.00355411 -0.0691988 0.001 0.000983587 -0.0347316 0.001 0.0025 -9.76043e-17 0 -0.00355411 -0.0691988 0 0.000983587 -0.0347316 0 -0.0159082 -0.101845 0.001 -0.0110786 -0.103139 0.001 -0.0025 -9.63797e-17 0.001 -0.00847815 -0.0683306 0.001 -0.00399739 -0.0342958 0.001 -0.0159082 0.101845 0.001 -0.00399739 0.0342958 0.001 -0.00847815 0.0683306 0.001 -0.0110786 0.103139 0.001 0.0025 -9.76043e-17 0.001 0.000983587 0.0347316 0.001 -0.00355411 0.0691988 0.001 -0.00355411 -0.0691988 0.001 0.000983587 -0.0347316 0.001 -0.0159082 -0.101845 0 -0.0159082 -0.101845 0.001 -0.0025 -9.63797e-17 0.001 -0.00847815 -0.0683306 0.001 -0.00399739 -0.0342958 0.001 -0.0025 -9.63797e-17 0 -0.00847815 -0.0683306 0 -0.00399739 -0.0342958 0 -0.0025 -9.63797e-17 0 -0.0025 -9.63797e-17 0.001 -0.0159082 0.101845 0.001 -0.00399739 0.0342958 0.001 -0.00847815 0.0683306 0.001 -0.0159082 0.101845 0 -0.00399739 0.0342958 0 -0.00847815 0.0683306 0 -0.0159082 0.101845 0 -0.0110786 0.103139 0 -0.0110786 0.103139 0.001 -0.0159082 0.101845 0.001 0.0025 -9.76043e-17 0 0.0025 -9.76043e-17 0.001 -0.0110786 0.103139 0.001 0.000983587 0.0347316 0.001 -0.00355411 0.0691988 0.001 -0.0110786 0.103139 0 0.000983587 0.0347316 0 -0.00355411 0.0691988 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="99"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0160752 -0.103114 0 -0.0112455 -0.104408 0 -0.0112455 -0.104408 0.001 -0.0160752 -0.103114 0.001 -0.0160752 -0.103114 0 -0.0112455 -0.104408 0 -0.0025 -9.75799e-17 0 -0.00855259 -0.0691814 0 -0.00401603 -0.0347228 0 -0.0160752 0.103114 0 -0.00401603 0.0347228 0 -0.00855259 0.0691814 0 -0.0112455 0.104408 0 0.0025 -9.88045e-17 0 0.000964941 0.0351586 0 -0.00362855 0.0700497 0 -0.00362855 -0.0700497 0 0.000964941 -0.0351586 0 -0.0112455 -0.104408 0 -0.0112455 -0.104408 0.001 0.0025 -9.88045e-17 0.001 -0.00362855 -0.0700497 0.001 0.000964941 -0.0351586 0.001 0.0025 -9.88045e-17 0 -0.00362855 -0.0700497 0 0.000964941 -0.0351586 0 -0.0160752 -0.103114 0.001 -0.0112455 -0.104408 0.001 -0.0025 -9.75799e-17 0.001 -0.00855259 -0.0691814 0.001 -0.00401603 -0.0347228 0.001 -0.0160752 0.103114 0.001 -0.00401603 0.0347228 0.001 -0.00855259 0.0691814 0.001 -0.0112455 0.104408 0.001 0.0025 -9.88045e-17 0.001 0.000964941 0.0351586 0.001 -0.00362855 0.0700497 0.001 -0.00362855 -0.0700497 0.001 0.000964941 -0.0351586 0.001 -0.0160752 -0.103114 0 -0.0160752 -0.103114 0.001 -0.0025 -9.75799e-17 0.001 -0.00855259 -0.0691814 0.001 -0.00401603 -0.0347228 0.001 -0.0025 -9.75799e-17 0 -0.00855259 -0.0691814 0 -0.00401603 -0.0347228 0 -0.0025 -9.75799e-17 0 -0.0025 -9.75799e-17 0.001 -0.0160752 0.103114 0.001 -0.00401603 0.0347228 0.001 -0.00855259 0.0691814 0.001 -0.0160752 0.103114 0 -0.00401603 0.0347228 0 -0.00855259 0.0691814 0 -0.0160752 0.103114 0 -0.0112455 0.104408 0 -0.0112455 0.104408 0.001 -0.0160752 0.103114 0.001 0.0025 -9.88045e-17 0 0.0025 -9.88045e-17 0.001 -0.0112455 0.104408 0.001 0.000964941 0.0351586 0.001 -0.00362855 0.0700497 0.001 -0.0112455 0.104408 0 0.000964941 0.0351586 0 -0.00362855 0.0700497 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="100"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0162455 -0.104408 0 -0.0114159 -0.105702 0 -0.0114159 -0.105702 0.001 -0.0162455 -0.104408 0.001 -0.0162455 -0.104408 0 -0.0114159 -0.105702 0 -0.0025 -9.88045e-17 0 -0.00862855 -0.0700497 0 -0.00403506 -0.0351586 0 -0.0162455 0.104408 0 -0.00403506 0.0351586 0 -0.00862855 0.0700497 0 -0.0114159 0.105702 0 0.0025 -1.00029e-16 0 0.000945915 0.0355944 0 -0.00370451 0.0709179 0 -0.00370451 -0.0709179 0 0.000945915 -0.0355944 0 -0.0114159 -0.105702 0 -0.0114159 -0.105702 0.001 0.0025 -1.00029e-16 0.001 -0.00370451 -0.0709179 0.001 0.000945915 -0.0355944 0.001 0.0025 -1.00029e-16 0 -0.00370451 -0.0709179 0 0.000945915 -0.0355944 0 -0.0162455 -0.104408 0.001 -0.0114159 -0.105702 0.001 -0.0025 -9.88045e-17 0.001 -0.00862855 -0.0700497 0.001 -0.00403506 -0.0351586 0.001 -0.0162455 0.104408 0.001 -0.00403506 0.0351586 0.001 -0.00862855 0.0700497 0.001 -0.0114159 0.105702 0.001 0.0025 -1.00029e-16 0.001 0.000945915 0.0355944 0.001 -0.00370451 0.0709179 0.001 -0.00370451 -0.0709179 0.001 0.000945915 -0.0355944 0.001 -0.0162455 -0.104408 0 -0.0162455 -0.104408 0.001 -0.0025 -9.88045e-17 0.001 -0.00862855 -0.0700497 0.001 -0.00403506 -0.0351586 0.001 -0.0025 -9.88045e-17 0 -0.00862855 -0.0700497 0 -0.00403506 -0.0351586 0 -0.0025 -9.88045e-17 0 -0.0025 -9.88045e-17 0.001 -0.0162455 0.104408 0.001 -0.00403506 0.0351586 0.001 -0.00862855 0.0700497 0.001 -0.0162455 0.104408 0 -0.00403506 0.0351586 0 -0.00862855 0.0700497 0 -0.0162455 0.104408 0 -0.0114159 0.105702 0 -0.0114159 0.105702 0.001 -0.0162455 0.104408 0.001 0.0025 -1.00029e-16 0 0.0025 -1.00029e-16 0.001 -0.0114159 0.105702 0.001 0.000945915 0.0355944 0.001 -0.00370451 0.0709179 0.001 -0.0114159 0.105702 0 0.000945915 0.0355944 0 -0.00370451 0.0709179 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="101"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0164125 -0.105676 0 -0.0115829 -0.10697 0 -0.0115829 -0.10697 0.001 -0.0164125 -0.105676 0.001 -0.0164125 -0.105676 0 -0.0115829 -0.10697 0 -0.0025 -1.00005e-16 0 -0.00870299 -0.0709006 0 -0.0040537 -0.0355857 0 -0.0164125 0.105676 0 -0.0040537 0.0355857 0 -0.00870299 0.0709006 0 -0.0115829 0.10697 0 0.0025 -1.01229e-16 0 0.000927269 0.0360215 0 -0.00377896 0.0717688 0 -0.00377896 -0.0717688 0 0.000927269 -0.0360215 0 -0.0115829 -0.10697 0 -0.0115829 -0.10697 0.001 0.0025 -1.01229e-16 0.001 -0.00377896 -0.0717688 0.001 0.000927269 -0.0360215 0.001 0.0025 -1.01229e-16 0 -0.00377896 -0.0717688 0 0.000927269 -0.0360215 0 -0.0164125 -0.105676 0.001 -0.0115829 -0.10697 0.001 -0.0025 -1.00005e-16 0.001 -0.00870299 -0.0709006 0.001 -0.0040537 -0.0355857 0.001 -0.0164125 0.105676 0.001 -0.0040537 0.0355857 0.001 -0.00870299 0.0709006 0.001 -0.0115829 0.10697 0.001 0.0025 -1.01229e-16 0.001 0.000927269 0.0360215 0.001 -0.00377896 0.0717688 0.001 -0.00377896 -0.0717688 0.001 0.000927269 -0.0360215 0.001 -0.0164125 -0.105676 0 -0.0164125 -0.105676 0.001 -0.0025 -1.00005e-16 0.001 -0.00870299 -0.0709006 0.001 -0.0040537 -0.0355857 0.001 -0.0025 -1.00005e-16 0 -0.00870299 -0.0709006 0 -0.0040537 -0.0355857 0 -0.0025 -1.00005e-16 0 -0.0025 -1.00005e-16 0.001 -0.0164125 0.105676 0.001 -0.0040537 0.0355857 0.001 -0.00870299 0.0709006 0.001 -0.0164125 0.105676 0 -0.0040537 0.0355857 0 -0.00870299 0.0709006 0 -0.0164125 0.105676 0 -0.0115829 0.10697 0 -0.0115829 0.10697 0.001 -0.0164125 0.105676 0.001 0.0025 -1.01229e-16 0 0.0025 -1.01229e-16 0.001 -0.0115829 0.10697 0.001 0.000927269 0.0360215 0.001 -0.00377896 0.0717688 0.001 -0.0115829 0.10697 0 0.000927269 0.0360215 0 -0.00377896 0.0717688 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="102"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0165794 -0.106944 0 -0.0117498 -0.108238 0 -0.0117498 -0.108238 0.001 -0.0165794 -0.106944 0.001 -0.0165794 -0.106944 0 -0.0117498 -0.108238 0 -0.0025 -1.01205e-16 0 -0.00877744 -0.0717514 0 -0.00407235 -0.0360128 0 -0.0165794 0.106944 0 -0.00407235 0.0360128 0 -0.00877744 0.0717514 0 -0.0117498 0.108238 0 0.0025 -1.02429e-16 0 0.000908623 0.0364485 0 -0.0038534 0.0726197 0 -0.0038534 -0.0726197 0 0.000908623 -0.0364485 0 -0.0117498 -0.108238 0 -0.0117498 -0.108238 0.001 0.0025 -1.02429e-16 0.001 -0.0038534 -0.0726197 0.001 0.000908623 -0.0364485 0.001 0.0025 -1.02429e-16 0 -0.0038534 -0.0726197 0 0.000908623 -0.0364485 0 -0.0165794 -0.106944 0.001 -0.0117498 -0.108238 0.001 -0.0025 -1.01205e-16 0.001 -0.00877744 -0.0717514 0.001 -0.00407235 -0.0360128 0.001 -0.0165794 0.106944 0.001 -0.00407235 0.0360128 0.001 -0.00877744 0.0717514 0.001 -0.0117498 0.108238 0.001 0.0025 -1.02429e-16 0.001 0.000908623 0.0364485 0.001 -0.0038534 0.0726197 0.001 -0.0038534 -0.0726197 0.001 0.000908623 -0.0364485 0.001 -0.0165794 -0.106944 0 -0.0165794 -0.106944 0.001 -0.0025 -1.01205e-16 0.001 -0.00877744 -0.0717514 0.001 -0.00407235 -0.0360128 0.001 -0.0025 -1.01205e-16 0 -0.00877744 -0.0717514 0 -0.00407235 -0.0360128 0 -0.0025 -1.01205e-16 0 -0.0025 -1.01205e-16 0.001 -0.0165794 0.106944 0.001 -0.00407235 0.0360128 0.001 -0.00877744 0.0717514 0.001 -0.0165794 0.106944 0 -0.00407235 0.0360128 0 -0.00877744 0.0717514 0 -0.0165794 0.106944 0 -0.0117498 0.108238 0 -0.0117498 0.108238 0.001 -0.0165794 0.106944 0.001 0.0025 -1.02429e-16 0 0.0025 -1.02429e-16 0.001 -0.0117498 0.108238 0.001 0.000908623 0.0364485 0.001 -0.0038534 0.0726197 0.001 -0.0117498 0.108238 0 0.000908623 0.0364485 0 -0.0038534 0.0726197 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="103"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0167464 -0.108212 0 -0.0119168 -0.109506 0 -0.0119168 -0.109506 0.001 -0.0167464 -0.108212 0.001 -0.0167464 -0.108212 0 -0.0119168 -0.109506 0 -0.0025 -1.02405e-16 0 -0.00885188 -0.0726023 0 -0.004091 -0.0364398 0 -0.0167464 0.108212 0 -0.004091 0.0364398 0 -0.00885188 0.0726023 0 -0.0119168 0.109506 0 0.0025 -1.0363e-16 0 0.000889977 0.0368756 0 -0.00392784 0.0734705 0 -0.00392784 -0.0734705 0 0.000889977 -0.0368756 0 -0.0119168 -0.109506 0 -0.0119168 -0.109506 0.001 0.0025 -1.0363e-16 0.001 -0.00392784 -0.0734705 0.001 0.000889977 -0.0368756 0.001 0.0025 -1.0363e-16 0 -0.00392784 -0.0734705 0 0.000889977 -0.0368756 0 -0.0167464 -0.108212 0.001 -0.0119168 -0.109506 0.001 -0.0025 -1.02405e-16 0.001 -0.00885188 -0.0726023 0.001 -0.004091 -0.0364398 0.001 -0.0167464 0.108212 0.001 -0.004091 0.0364398 0.001 -0.00885188 0.0726023 0.001 -0.0119168 0.109506 0.001 0.0025 -1.0363e-16 0.001 0.000889977 0.0368756 0.001 -0.00392784 0.0734705 0.001 -0.00392784 -0.0734705 0.001 0.000889977 -0.0368756 0.001 -0.0167464 -0.108212 0 -0.0167464 -0.108212 0.001 -0.0025 -1.02405e-16 0.001 -0.00885188 -0.0726023 0.001 -0.004091 -0.0364398 0.001 -0.0025 -1.02405e-16 0 -0.00885188 -0.0726023 0 -0.004091 -0.0364398 0 -0.0025 -1.02405e-16 0 -0.0025 -1.02405e-16 0.001 -0.0167464 0.108212 0.001 -0.004091 0.0364398 0.001 -0.00885188 0.0726023 0.001 -0.0167464 0.108212 0 -0.004091 0.0364398 0 -0.00885188 0.0726023 0 -0.0167464 0.108212 0 -0.0119168 0.109506 0 -0.0119168 0.109506 0.001 -0.0167464 0.108212 0.001 0.0025 -1.0363e-16 0 0.0025 -1.0363e-16 0.001 -0.0119168 0.109506 0.001 0.000889977 0.0368756 0.001 -0.00392784 0.0734705 0.001 -0.0119168 0.109506 0 0.000889977 0.0368756 0 -0.00392784 0.0734705 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="68"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0108448 -0.0633848 0 -0.00601514 -0.0646789 0 -0.00601514 -0.0646789 0.001 -0.0108448 -0.0633848 0.001 -0.0108448 -0.0633848 0 -0.00601514 -0.0646789 0 -0.0025 -5.99832e-17 0 -0.00622058 -0.0425264 0 -0.00343192 -0.0213444 0 -0.0108448 0.0633848 0 -0.00343192 0.0213444 0 -0.00622058 0.0425264 0 -0.00601514 0.0646789 0 0.0025 -6.12078e-17 0 0.00154906 0.0217802 0 -0.00129654 0.0433947 0 -0.00129654 -0.0433947 0 0.00154906 -0.0217802 0 -0.00601514 -0.0646789 0 -0.00601514 -0.0646789 0.001 0.0025 -6.12078e-17 0.001 -0.00129654 -0.0433947 0.001 0.00154906 -0.0217802 0.001 0.0025 -6.12078e-17 0 -0.00129654 -0.0433947 0 0.00154906 -0.0217802 0 -0.0108448 -0.0633848 0.001 -0.00601514 -0.0646789 0.001 -0.0025 -5.99832e-17 0.001 -0.00622058 -0.0425264 0.001 -0.00343192 -0.0213444 0.001 -0.0108448 0.0633848 0.001 -0.00343192 0.0213444 0.001 -0.00622058 0.0425264 0.001 -0.00601514 0.0646789 0.001 0.0025 -6.12078e-17 0.001 0.00154906 0.0217802 0.001 -0.00129654 0.0433947 0.001 -0.00129654 -0.0433947 0.001 0.00154906 -0.0217802 0.001 -0.0108448 -0.0633848 0 -0.0108448 -0.0633848 0.001 -0.0025 -5.99832e-17 0.001 -0.00622058 -0.0425264 0.001 -0.00343192 -0.0213444 0.001 -0.0025 -5.99832e-17 0 -0.00622058 -0.0425264 0 -0.00343192 -0.0213444 0 -0.0025 -5.99832e-17 0 -0.0025 -5.99832e-17 0.001 -0.0108448 0.0633848 0.001 -0.00343192 0.0213444 0.001 -0.00622058 0.0425264 0.001 -0.0108448 0.0633848 0 -0.00343192 0.0213444 0 -0.00622058 0.0425264 0 -0.0108448 0.0633848 0 -0.00601514 0.0646789 0 -0.00601514 0.0646789 0.001 -0.0108448 0.0633848 0.001 0.0025 -6.12078e-17 0 0.0025 -6.12078e-17 0.001 -0.00601514 0.0646789 0.001 0.00154906 0.0217802 0.001 -0.00129654 0.0433947 0.001 -0.00601514 0.0646789 0 0.00154906 0.0217802 0 -0.00129654 0.0433947 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="104"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0169168 -0.109506 0 -0.0120872 -0.1108 0 -0.0120872 -0.1108 0.001 -0.0169168 -0.109506 0.001 -0.0169168 -0.109506 0 -0.0120872 -0.1108 0 -0.0025 -1.0363e-16 0 -0.00892784 -0.0734705 0 -0.00411002 -0.0368756 0 -0.0169168 0.109506 0 -0.00411002 0.0368756 0 -0.00892784 0.0734705 0 -0.0120872 0.1108 0 0.0025 -1.04854e-16 0 0.00087095 0.0373114 0 -0.0040038 0.0743388 0 -0.0040038 -0.0743388 0 0.00087095 -0.0373114 0 -0.0120872 -0.1108 0 -0.0120872 -0.1108 0.001 0.0025 -1.04854e-16 0.001 -0.0040038 -0.0743388 0.001 0.00087095 -0.0373114 0.001 0.0025 -1.04854e-16 0 -0.0040038 -0.0743388 0 0.00087095 -0.0373114 0 -0.0169168 -0.109506 0.001 -0.0120872 -0.1108 0.001 -0.0025 -1.0363e-16 0.001 -0.00892784 -0.0734705 0.001 -0.00411002 -0.0368756 0.001 -0.0169168 0.109506 0.001 -0.00411002 0.0368756 0.001 -0.00892784 0.0734705 0.001 -0.0120872 0.1108 0.001 0.0025 -1.04854e-16 0.001 0.00087095 0.0373114 0.001 -0.0040038 0.0743388 0.001 -0.0040038 -0.0743388 0.001 0.00087095 -0.0373114 0.001 -0.0169168 -0.109506 0 -0.0169168 -0.109506 0.001 -0.0025 -1.0363e-16 0.001 -0.00892784 -0.0734705 0.001 -0.00411002 -0.0368756 0.001 -0.0025 -1.0363e-16 0 -0.00892784 -0.0734705 0 -0.00411002 -0.0368756 0 -0.0025 -1.0363e-16 0 -0.0025 -1.0363e-16 0.001 -0.0169168 0.109506 0.001 -0.00411002 0.0368756 0.001 -0.00892784 0.0734705 0.001 -0.0169168 0.109506 0 -0.00411002 0.0368756 0 -0.00892784 0.0734705 0 -0.0169168 0.109506 0 -0.0120872 0.1108 0 -0.0120872 0.1108 0.001 -0.0169168 0.109506 0.001 0.0025 -1.04854e-16 0 0.0025 -1.04854e-16 0.001 -0.0120872 0.1108 0.001 0.00087095 0.0373114 0.001 -0.0040038 0.0743388 0.001 -0.0120872 0.1108 0 0.00087095 0.0373114 0 -0.0040038 0.0743388 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="105"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0170837 -0.110775 0 -0.0122541 -0.112069 0 -0.0122541 -0.112069 0.001 -0.0170837 -0.110775 0.001 -0.0170837 -0.110775 0 -0.0122541 -0.112069 0 -0.0025 -1.0483e-16 0 -0.00900228 -0.0743214 0 -0.00412867 -0.0373027 0 -0.0170837 0.110775 0 -0.00412867 0.0373027 0 -0.00900228 0.0743214 0 -0.0122541 0.112069 0 0.0025 -1.06054e-16 0 0.000852304 0.0377384 0 -0.00407824 0.0751897 0 -0.00407824 -0.0751897 0 0.000852304 -0.0377384 0 -0.0122541 -0.112069 0 -0.0122541 -0.112069 0.001 0.0025 -1.06054e-16 0.001 -0.00407824 -0.0751897 0.001 0.000852304 -0.0377384 0.001 0.0025 -1.06054e-16 0 -0.00407824 -0.0751897 0 0.000852304 -0.0377384 0 -0.0170837 -0.110775 0.001 -0.0122541 -0.112069 0.001 -0.0025 -1.0483e-16 0.001 -0.00900228 -0.0743214 0.001 -0.00412867 -0.0373027 0.001 -0.0170837 0.110775 0.001 -0.00412867 0.0373027 0.001 -0.00900228 0.0743214 0.001 -0.0122541 0.112069 0.001 0.0025 -1.06054e-16 0.001 0.000852304 0.0377384 0.001 -0.00407824 0.0751897 0.001 -0.00407824 -0.0751897 0.001 0.000852304 -0.0377384 0.001 -0.0170837 -0.110775 0 -0.0170837 -0.110775 0.001 -0.0025 -1.0483e-16 0.001 -0.00900228 -0.0743214 0.001 -0.00412867 -0.0373027 0.001 -0.0025 -1.0483e-16 0 -0.00900228 -0.0743214 0 -0.00412867 -0.0373027 0 -0.0025 -1.0483e-16 0 -0.0025 -1.0483e-16 0.001 -0.0170837 0.110775 0.001 -0.00412867 0.0373027 0.001 -0.00900228 0.0743214 0.001 -0.0170837 0.110775 0 -0.00412867 0.0373027 0 -0.00900228 0.0743214 0 -0.0170837 0.110775 0 -0.0122541 0.112069 0 -0.0122541 0.112069 0.001 -0.0170837 0.110775 0.001 0.0025 -1.06054e-16 0 0.0025 -1.06054e-16 0.001 -0.0122541 0.112069 0.001 0.000852304 0.0377384 0.001 -0.00407824 0.0751897 0.001 -0.0122541 0.112069 0 0.000852304 0.0377384 0 -0.00407824 0.0751897 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="106"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0172507 -0.112043 0 -0.0124211 -0.113337 0 -0.0124211 -0.113337 0.001 -0.0172507 -0.112043 0.001 -0.0172507 -0.112043 0 -0.0124211 -0.113337 0 -0.0025 -1.0603e-16 0 -0.00907672 -0.0751723 0 -0.00414732 -0.0377297 0 -0.0172507 0.112043 0 -0.00414732 0.0377297 0 -0.00907672 0.0751723 0 -0.0124211 0.113337 0 0.0025 -1.07255e-16 0 0.000833658 0.0381655 0 -0.00415268 0.0760405 0 -0.00415268 -0.0760405 0 0.000833658 -0.0381655 0 -0.0124211 -0.113337 0 -0.0124211 -0.113337 0.001 0.0025 -1.07255e-16 0.001 -0.00415268 -0.0760405 0.001 0.000833658 -0.0381655 0.001 0.0025 -1.07255e-16 0 -0.00415268 -0.0760405 0 0.000833658 -0.0381655 0 -0.0172507 -0.112043 0.001 -0.0124211 -0.113337 0.001 -0.0025 -1.0603e-16 0.001 -0.00907672 -0.0751723 0.001 -0.00414732 -0.0377297 0.001 -0.0172507 0.112043 0.001 -0.00414732 0.0377297 0.001 -0.00907672 0.0751723 0.001 -0.0124211 0.113337 0.001 0.0025 -1.07255e-16 0.001 0.000833658 0.0381655 0.001 -0.00415268 0.0760405 0.001 -0.00415268 -0.0760405 0.001 0.000833658 -0.0381655 0.001 -0.0172507 -0.112043 0 -0.0172507 -0.112043 0.001 -0.0025 -1.0603e-16 0.001 -0.00907672 -0.0751723 0.001 -0.00414732 -0.0377297 0.001 -0.0025 -1.0603e-16 0 -0.00907672 -0.0751723 0 -0.00414732 -0.0377297 0 -0.0025 -1.0603e-16 0 -0.0025 -1.0603e-16 0.001 -0.0172507 0.112043 0.001 -0.00414732 0.0377297 0.001 -0.00907672 0.0751723 0.001 -0.0172507 0.112043 0 -0.00414732 0.0377297 0 -0.00907672 0.0751723 0 -0.0172507 0.112043 0 -0.0124211 0.113337 0 -0.0124211 0.113337 0.001 -0.0172507 0.112043 0.001 0.0025 -1.07255e-16 0 0.0025 -1.07255e-16 0.001 -0.0124211 0.113337 0.001 0.000833658 0.0381655 0.001 -0.00415268 0.0760405 0.001 -0.0124211 0.113337 0 0.000833658 0.0381655 0 -0.00415268 0.0760405 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="107"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0174177 -0.113311 0 -0.012588 -0.114605 0 -0.012588 -0.114605 0.001 -0.0174177 -0.113311 0.001 -0.0174177 -0.113311 0 -0.012588 -0.114605 0 -0.0025 -1.0723e-16 0 -0.00915117 -0.0760232 0 -0.00416596 -0.0381568 0 -0.0174177 0.113311 0 -0.00416596 0.0381568 0 -0.00915117 0.0760232 0 -0.012588 0.114605 0 0.0025 -1.08455e-16 0 0.000815012 0.0385926 0 -0.00422713 0.0768914 0 -0.00422713 -0.0768914 0 0.000815012 -0.0385926 0 -0.012588 -0.114605 0 -0.012588 -0.114605 0.001 0.0025 -1.08455e-16 0.001 -0.00422713 -0.0768914 0.001 0.000815012 -0.0385926 0.001 0.0025 -1.08455e-16 0 -0.00422713 -0.0768914 0 0.000815012 -0.0385926 0 -0.0174177 -0.113311 0.001 -0.012588 -0.114605 0.001 -0.0025 -1.0723e-16 0.001 -0.00915117 -0.0760232 0.001 -0.00416596 -0.0381568 0.001 -0.0174177 0.113311 0.001 -0.00416596 0.0381568 0.001 -0.00915117 0.0760232 0.001 -0.012588 0.114605 0.001 0.0025 -1.08455e-16 0.001 0.000815012 0.0385926 0.001 -0.00422713 0.0768914 0.001 -0.00422713 -0.0768914 0.001 0.000815012 -0.0385926 0.001 -0.0174177 -0.113311 0 -0.0174177 -0.113311 0.001 -0.0025 -1.0723e-16 0.001 -0.00915117 -0.0760232 0.001 -0.00416596 -0.0381568 0.001 -0.0025 -1.0723e-16 0 -0.00915117 -0.0760232 0 -0.00416596 -0.0381568 0 -0.0025 -1.0723e-16 0 -0.0025 -1.0723e-16 0.001 -0.0174177 0.113311 0.001 -0.00416596 0.0381568 0.001 -0.00915117 0.0760232 0.001 -0.0174177 0.113311 0 -0.00416596 0.0381568 0 -0.00915117 0.0760232 0 -0.0174177 0.113311 0 -0.012588 0.114605 0 -0.012588 0.114605 0.001 -0.0174177 0.113311 0.001 0.0025 -1.08455e-16 0 0.0025 -1.08455e-16 0.001 -0.012588 0.114605 0.001 0.000815012 0.0385926 0.001 -0.00422713 0.0768914 0.001 -0.012588 0.114605 0 0.000815012 0.0385926 0 -0.00422713 0.0768914 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="108"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0175846 -0.114579 0 -0.012755 -0.115873 0 -0.012755 -0.115873 0.001 -0.0175846 -0.114579 0.001 -0.0175846 -0.114579 0 -0.012755 -0.115873 0 -0.0025 -1.0843e-16 0 -0.00922561 -0.076874 0 -0.00418461 -0.0385838 0 -0.0175846 0.114579 0 -0.00418461 0.0385838 0 -0.00922561 0.076874 0 -0.012755 0.115873 0 0.0025 -1.09655e-16 0 0.000796366 0.0390196 0 -0.00430157 0.0777423 0 -0.00430157 -0.0777423 0 0.000796366 -0.0390196 0 -0.012755 -0.115873 0 -0.012755 -0.115873 0.001 0.0025 -1.09655e-16 0.001 -0.00430157 -0.0777423 0.001 0.000796366 -0.0390196 0.001 0.0025 -1.09655e-16 0 -0.00430157 -0.0777423 0 0.000796366 -0.0390196 0 -0.0175846 -0.114579 0.001 -0.012755 -0.115873 0.001 -0.0025 -1.0843e-16 0.001 -0.00922561 -0.076874 0.001 -0.00418461 -0.0385838 0.001 -0.0175846 0.114579 0.001 -0.00418461 0.0385838 0.001 -0.00922561 0.076874 0.001 -0.012755 0.115873 0.001 0.0025 -1.09655e-16 0.001 0.000796366 0.0390196 0.001 -0.00430157 0.0777423 0.001 -0.00430157 -0.0777423 0.001 0.000796366 -0.0390196 0.001 -0.0175846 -0.114579 0 -0.0175846 -0.114579 0.001 -0.0025 -1.0843e-16 0.001 -0.00922561 -0.076874 0.001 -0.00418461 -0.0385838 0.001 -0.0025 -1.0843e-16 0 -0.00922561 -0.076874 0 -0.00418461 -0.0385838 0 -0.0025 -1.0843e-16 0 -0.0025 -1.0843e-16 0.001 -0.0175846 0.114579 0.001 -0.00418461 0.0385838 0.001 -0.00922561 0.076874 0.001 -0.0175846 0.114579 0 -0.00418461 0.0385838 0 -0.00922561 0.076874 0 -0.0175846 0.114579 0 -0.012755 0.115873 0 -0.012755 0.115873 0.001 -0.0175846 0.114579 0.001 0.0025 -1.09655e-16 0 0.0025 -1.09655e-16 0.001 -0.012755 0.115873 0.001 0.000796366 0.0390196 0.001 -0.00430157 0.0777423 0.001 -0.012755 0.115873 0 0.000796366 0.0390196 0 -0.00430157 0.0777423 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="109"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0177516 -0.115847 0 -0.012922 -0.117141 0 -0.012922 -0.117141 0.001 -0.0177516 -0.115847 0.001 -0.0177516 -0.115847 0 -0.012922 -0.117141 0 -0.0025 -1.0963e-16 0 -0.00930005 -0.0777249 0 -0.00420325 -0.0390109 0 -0.0177516 0.115847 0 -0.00420325 0.0390109 0 -0.00930005 0.0777249 0 -0.012922 0.117141 0 0.0025 -1.10855e-16 0 0.00077772 0.0394467 0 -0.00437601 0.0785932 0 -0.00437601 -0.0785932 0 0.00077772 -0.0394467 0 -0.012922 -0.117141 0 -0.012922 -0.117141 0.001 0.0025 -1.10855e-16 0.001 -0.00437601 -0.0785932 0.001 0.00077772 -0.0394467 0.001 0.0025 -1.10855e-16 0 -0.00437601 -0.0785932 0 0.00077772 -0.0394467 0 -0.0177516 -0.115847 0.001 -0.012922 -0.117141 0.001 -0.0025 -1.0963e-16 0.001 -0.00930005 -0.0777249 0.001 -0.00420325 -0.0390109 0.001 -0.0177516 0.115847 0.001 -0.00420325 0.0390109 0.001 -0.00930005 0.0777249 0.001 -0.012922 0.117141 0.001 0.0025 -1.10855e-16 0.001 0.00077772 0.0394467 0.001 -0.00437601 0.0785932 0.001 -0.00437601 -0.0785932 0.001 0.00077772 -0.0394467 0.001 -0.0177516 -0.115847 0 -0.0177516 -0.115847 0.001 -0.0025 -1.0963e-16 0.001 -0.00930005 -0.0777249 0.001 -0.00420325 -0.0390109 0.001 -0.0025 -1.0963e-16 0 -0.00930005 -0.0777249 0 -0.00420325 -0.0390109 0 -0.0025 -1.0963e-16 0 -0.0025 -1.0963e-16 0.001 -0.0177516 0.115847 0.001 -0.00420325 0.0390109 0.001 -0.00930005 0.0777249 0.001 -0.0177516 0.115847 0 -0.00420325 0.0390109 0 -0.00930005 0.0777249 0 -0.0177516 0.115847 0 -0.012922 0.117141 0 -0.012922 0.117141 0.001 -0.0177516 0.115847 0.001 0.0025 -1.10855e-16 0 0.0025 -1.10855e-16 0.001 -0.012922 0.117141 0.001 0.00077772 0.0394467 0.001 -0.00437601 0.0785932 0.001 -0.012922 0.117141 0 0.00077772 0.0394467 0 -0.00437601 0.0785932 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="110"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0179186 -0.117116 0 -0.0130889 -0.11841 0 -0.0130889 -0.11841 0.001 -0.0179186 -0.117116 0.001 -0.0179186 -0.117116 0 -0.0130889 -0.11841 0 -0.0025 -1.10831e-16 0 -0.00937449 -0.0785758 0 -0.0042219 -0.039438 0 -0.0179186 0.117116 0 -0.0042219 0.039438 0 -0.00937449 0.0785758 0 -0.0130889 0.11841 0 0.0025 -1.12055e-16 0 0.000759074 0.0398738 0 -0.00445045 0.079444 0 -0.00445045 -0.079444 0 0.000759074 -0.0398738 0 -0.0130889 -0.11841 0 -0.0130889 -0.11841 0.001 0.0025 -1.12055e-16 0.001 -0.00445045 -0.079444 0.001 0.000759074 -0.0398738 0.001 0.0025 -1.12055e-16 0 -0.00445045 -0.079444 0 0.000759074 -0.0398738 0 -0.0179186 -0.117116 0.001 -0.0130889 -0.11841 0.001 -0.0025 -1.10831e-16 0.001 -0.00937449 -0.0785758 0.001 -0.0042219 -0.039438 0.001 -0.0179186 0.117116 0.001 -0.0042219 0.039438 0.001 -0.00937449 0.0785758 0.001 -0.0130889 0.11841 0.001 0.0025 -1.12055e-16 0.001 0.000759074 0.0398738 0.001 -0.00445045 0.079444 0.001 -0.00445045 -0.079444 0.001 0.000759074 -0.0398738 0.001 -0.0179186 -0.117116 0 -0.0179186 -0.117116 0.001 -0.0025 -1.10831e-16 0.001 -0.00937449 -0.0785758 0.001 -0.0042219 -0.039438 0.001 -0.0025 -1.10831e-16 0 -0.00937449 -0.0785758 0 -0.0042219 -0.039438 0 -0.0025 -1.10831e-16 0 -0.0025 -1.10831e-16 0.001 -0.0179186 0.117116 0.001 -0.0042219 0.039438 0.001 -0.00937449 0.0785758 0.001 -0.0179186 0.117116 0 -0.0042219 0.039438 0 -0.00937449 0.0785758 0 -0.0179186 0.117116 0 -0.0130889 0.11841 0 -0.0130889 0.11841 0.001 -0.0179186 0.117116 0.001 0.0025 -1.12055e-16 0 0.0025 -1.12055e-16 0.001 -0.0130889 0.11841 0.001 0.000759074 0.0398738 0.001 -0.00445045 0.079444 0.001 -0.0130889 0.11841 0 0.000759074 0.0398738 0 -0.00445045 0.079444 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="111"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0180889 -0.11841 0 -0.0132593 -0.119704 0 -0.0132593 -0.119704 0.001 -0.0180889 -0.11841 0.001 -0.0180889 -0.11841 0 -0.0132593 -0.119704 0 -0.0025 -1.12055e-16 0 -0.00945045 -0.079444 0 -0.00424093 -0.0398738 0 -0.0180889 0.11841 0 -0.00424093 0.0398738 0 -0.00945045 0.079444 0 -0.0132593 0.119704 0 0.0025 -1.1328e-16 0 0.000740048 0.0403095 0 -0.00452641 0.0803123 0 -0.00452641 -0.0803123 0 0.000740048 -0.0403095 0 -0.0132593 -0.119704 0 -0.0132593 -0.119704 0.001 0.0025 -1.1328e-16 0.001 -0.00452641 -0.0803123 0.001 0.000740048 -0.0403095 0.001 0.0025 -1.1328e-16 0 -0.00452641 -0.0803123 0 0.000740048 -0.0403095 0 -0.0180889 -0.11841 0.001 -0.0132593 -0.119704 0.001 -0.0025 -1.12055e-16 0.001 -0.00945045 -0.079444 0.001 -0.00424093 -0.0398738 0.001 -0.0180889 0.11841 0.001 -0.00424093 0.0398738 0.001 -0.00945045 0.079444 0.001 -0.0132593 0.119704 0.001 0.0025 -1.1328e-16 0.001 0.000740048 0.0403095 0.001 -0.00452641 0.0803123 0.001 -0.00452641 -0.0803123 0.001 0.000740048 -0.0403095 0.001 -0.0180889 -0.11841 0 -0.0180889 -0.11841 0.001 -0.0025 -1.12055e-16 0.001 -0.00945045 -0.079444 0.001 -0.00424093 -0.0398738 0.001 -0.0025 -1.12055e-16 0 -0.00945045 -0.079444 0 -0.00424093 -0.0398738 0 -0.0025 -1.12055e-16 0 -0.0025 -1.12055e-16 0.001 -0.0180889 0.11841 0.001 -0.00424093 0.0398738 0.001 -0.00945045 0.079444 0.001 -0.0180889 0.11841 0 -0.00424093 0.0398738 0 -0.00945045 0.079444 0 -0.0180889 0.11841 0 -0.0132593 0.119704 0 -0.0132593 0.119704 0.001 -0.0180889 0.11841 0.001 0.0025 -1.1328e-16 0 0.0025 -1.1328e-16 0.001 -0.0132593 0.119704 0.001 0.000740048 0.0403095 0.001 -0.00452641 0.0803123 0.001 -0.0132593 0.119704 0 0.000740048 0.0403095 0 -0.00452641 0.0803123 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="112"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0182559 -0.119678 0 -0.0134263 -0.120972 0 -0.0134263 -0.120972 0.001 -0.0182559 -0.119678 0.001 -0.0182559 -0.119678 0 -0.0134263 -0.120972 0 -0.0025 -1.13255e-16 0 -0.0095249 -0.0802949 0 -0.00425957 -0.0403008 0 -0.0182559 0.119678 0 -0.00425957 0.0403008 0 -0.0095249 0.0802949 0 -0.0134263 0.120972 0 0.0025 -1.1448e-16 0 0.000721402 0.0407366 0 -0.00460086 0.0811632 0 -0.00460086 -0.0811632 0 0.000721402 -0.0407366 0 -0.0134263 -0.120972 0 -0.0134263 -0.120972 0.001 0.0025 -1.1448e-16 0.001 -0.00460086 -0.0811632 0.001 0.000721402 -0.0407366 0.001 0.0025 -1.1448e-16 0 -0.00460086 -0.0811632 0 0.000721402 -0.0407366 0 -0.0182559 -0.119678 0.001 -0.0134263 -0.120972 0.001 -0.0025 -1.13255e-16 0.001 -0.0095249 -0.0802949 0.001 -0.00425957 -0.0403008 0.001 -0.0182559 0.119678 0.001 -0.00425957 0.0403008 0.001 -0.0095249 0.0802949 0.001 -0.0134263 0.120972 0.001 0.0025 -1.1448e-16 0.001 0.000721402 0.0407366 0.001 -0.00460086 0.0811632 0.001 -0.00460086 -0.0811632 0.001 0.000721402 -0.0407366 0.001 -0.0182559 -0.119678 0 -0.0182559 -0.119678 0.001 -0.0025 -1.13255e-16 0.001 -0.0095249 -0.0802949 0.001 -0.00425957 -0.0403008 0.001 -0.0025 -1.13255e-16 0 -0.0095249 -0.0802949 0 -0.00425957 -0.0403008 0 -0.0025 -1.13255e-16 0 -0.0025 -1.13255e-16 0.001 -0.0182559 0.119678 0.001 -0.00425957 0.0403008 0.001 -0.0095249 0.0802949 0.001 -0.0182559 0.119678 0 -0.00425957 0.0403008 0 -0.0095249 0.0802949 0 -0.0182559 0.119678 0 -0.0134263 0.120972 0 -0.0134263 0.120972 0.001 -0.0182559 0.119678 0.001 0.0025 -1.1448e-16 0 0.0025 -1.1448e-16 0.001 -0.0134263 0.120972 0.001 0.000721402 0.0407366 0.001 -0.00460086 0.0811632 0.001 -0.0134263 0.120972 0 0.000721402 0.0407366 0 -0.00460086 0.0811632 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="113"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0184229 -0.120946 0 -0.0135932 -0.12224 0 -0.0135932 -0.12224 0.001 -0.0184229 -0.120946 0.001 -0.0184229 -0.120946 0 -0.0135932 -0.12224 0 -0.0025 -1.14455e-16 0 -0.00959934 -0.0811458 0 -0.00427822 -0.0407279 0 -0.0184229 0.120946 0 -0.00427822 0.0407279 0 -0.00959934 0.0811458 0 -0.0135932 0.12224 0 0.0025 -1.1568e-16 0 0.000702756 0.0411637 0 -0.0046753 0.082014 0 -0.0046753 -0.082014 0 0.000702756 -0.0411637 0 -0.0135932 -0.12224 0 -0.0135932 -0.12224 0.001 0.0025 -1.1568e-16 0.001 -0.0046753 -0.082014 0.001 0.000702756 -0.0411637 0.001 0.0025 -1.1568e-16 0 -0.0046753 -0.082014 0 0.000702756 -0.0411637 0 -0.0184229 -0.120946 0.001 -0.0135932 -0.12224 0.001 -0.0025 -1.14455e-16 0.001 -0.00959934 -0.0811458 0.001 -0.00427822 -0.0407279 0.001 -0.0184229 0.120946 0.001 -0.00427822 0.0407279 0.001 -0.00959934 0.0811458 0.001 -0.0135932 0.12224 0.001 0.0025 -1.1568e-16 0.001 0.000702756 0.0411637 0.001 -0.0046753 0.082014 0.001 -0.0046753 -0.082014 0.001 0.000702756 -0.0411637 0.001 -0.0184229 -0.120946 0 -0.0184229 -0.120946 0.001 -0.0025 -1.14455e-16 0.001 -0.00959934 -0.0811458 0.001 -0.00427822 -0.0407279 0.001 -0.0025 -1.14455e-16 0 -0.00959934 -0.0811458 0 -0.00427822 -0.0407279 0 -0.0025 -1.14455e-16 0 -0.0025 -1.14455e-16 0.001 -0.0184229 0.120946 0.001 -0.00427822 0.0407279 0.001 -0.00959934 0.0811458 0.001 -0.0184229 0.120946 0 -0.00427822 0.0407279 0 -0.00959934 0.0811458 0 -0.0184229 0.120946 0 -0.0135932 0.12224 0 -0.0135932 0.12224 0.001 -0.0184229 0.120946 0.001 0.0025 -1.1568e-16 0 0.0025 -1.1568e-16 0.001 -0.0135932 0.12224 0.001 0.000702756 0.0411637 0.001 -0.0046753 0.082014 0.001 -0.0135932 0.12224 0 0.000702756 0.0411637 0 -0.0046753 0.082014 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="69"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0110151 -0.0646789 0 -0.00618551 -0.065973 0 -0.00618551 -0.065973 0.001 -0.0110151 -0.0646789 0.001 -0.0110151 -0.0646789 0 -0.00618551 -0.065973 0 -0.0025 -6.12078e-17 0 -0.00629654 -0.0433947 0 -0.00345094 -0.0217802 0 -0.0110151 0.0646789 0 -0.00345094 0.0217802 0 -0.00629654 0.0433947 0 -0.00618551 0.065973 0 0.0025 -6.24325e-17 0 0.00153003 0.022216 0 -0.0013725 0.0442629 0 -0.0013725 -0.0442629 0 0.00153003 -0.022216 0 -0.00618551 -0.065973 0 -0.00618551 -0.065973 0.001 0.0025 -6.24325e-17 0.001 -0.0013725 -0.0442629 0.001 0.00153003 -0.022216 0.001 0.0025 -6.24325e-17 0 -0.0013725 -0.0442629 0 0.00153003 -0.022216 0 -0.0110151 -0.0646789 0.001 -0.00618551 -0.065973 0.001 -0.0025 -6.12078e-17 0.001 -0.00629654 -0.0433947 0.001 -0.00345094 -0.0217802 0.001 -0.0110151 0.0646789 0.001 -0.00345094 0.0217802 0.001 -0.00629654 0.0433947 0.001 -0.00618551 0.065973 0.001 0.0025 -6.24325e-17 0.001 0.00153003 0.022216 0.001 -0.0013725 0.0442629 0.001 -0.0013725 -0.0442629 0.001 0.00153003 -0.022216 0.001 -0.0110151 -0.0646789 0 -0.0110151 -0.0646789 0.001 -0.0025 -6.12078e-17 0.001 -0.00629654 -0.0433947 0.001 -0.00345094 -0.0217802 0.001 -0.0025 -6.12078e-17 0 -0.00629654 -0.0433947 0 -0.00345094 -0.0217802 0 -0.0025 -6.12078e-17 0 -0.0025 -6.12078e-17 0.001 -0.0110151 0.0646789 0.001 -0.00345094 0.0217802 0.001 -0.00629654 0.0433947 0.001 -0.0110151 0.0646789 0 -0.00345094 0.0217802 0 -0.00629654 0.0433947 0 -0.0110151 0.0646789 0 -0.00618551 0.065973 0 -0.00618551 0.065973 0.001 -0.0110151 0.0646789 0.001 0.0025 -6.24325e-17 0 0.0025 -6.24325e-17 0.001 -0.00618551 0.065973 0.001 0.00153003 0.022216 0.001 -0.0013725 0.0442629 0.001 -0.00618551 0.065973 0 0.00153003 0.022216 0 -0.0013725 0.0442629 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="114"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0185898 -0.122214 0 -0.0137602 -0.123508 0 -0.0137602 -0.123508 0.001 -0.0185898 -0.122214 0.001 -0.0185898 -0.122214 0 -0.0137602 -0.123508 0 -0.0025 -1.15656e-16 0 -0.00967378 -0.0819967 0 -0.00429686 -0.0411549 0 -0.0185898 0.122214 0 -0.00429686 0.0411549 0 -0.00967378 0.0819967 0 -0.0137602 0.123508 0 0.0025 -1.1688e-16 0 0.00068411 0.0415907 0 -0.00474974 0.0828649 0 -0.00474974 -0.0828649 0 0.00068411 -0.0415907 0 -0.0137602 -0.123508 0 -0.0137602 -0.123508 0.001 0.0025 -1.1688e-16 0.001 -0.00474974 -0.0828649 0.001 0.00068411 -0.0415907 0.001 0.0025 -1.1688e-16 0 -0.00474974 -0.0828649 0 0.00068411 -0.0415907 0 -0.0185898 -0.122214 0.001 -0.0137602 -0.123508 0.001 -0.0025 -1.15656e-16 0.001 -0.00967378 -0.0819967 0.001 -0.00429686 -0.0411549 0.001 -0.0185898 0.122214 0.001 -0.00429686 0.0411549 0.001 -0.00967378 0.0819967 0.001 -0.0137602 0.123508 0.001 0.0025 -1.1688e-16 0.001 0.00068411 0.0415907 0.001 -0.00474974 0.0828649 0.001 -0.00474974 -0.0828649 0.001 0.00068411 -0.0415907 0.001 -0.0185898 -0.122214 0 -0.0185898 -0.122214 0.001 -0.0025 -1.15656e-16 0.001 -0.00967378 -0.0819967 0.001 -0.00429686 -0.0411549 0.001 -0.0025 -1.15656e-16 0 -0.00967378 -0.0819967 0 -0.00429686 -0.0411549 0 -0.0025 -1.15656e-16 0 -0.0025 -1.15656e-16 0.001 -0.0185898 0.122214 0.001 -0.00429686 0.0411549 0.001 -0.00967378 0.0819967 0.001 -0.0185898 0.122214 0 -0.00429686 0.0411549 0 -0.00967378 0.0819967 0 -0.0185898 0.122214 0 -0.0137602 0.123508 0 -0.0137602 0.123508 0.001 -0.0185898 0.122214 0.001 0.0025 -1.1688e-16 0 0.0025 -1.1688e-16 0.001 -0.0137602 0.123508 0.001 0.00068411 0.0415907 0.001 -0.00474974 0.0828649 0.001 -0.0137602 0.123508 0 0.00068411 0.0415907 0 -0.00474974 0.0828649 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="115"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0187568 -0.123483 0 -0.0139272 -0.124777 0 -0.0139272 -0.124777 0.001 -0.0187568 -0.123483 0.001 -0.0187568 -0.123483 0 -0.0139272 -0.124777 0 -0.0025 -1.16856e-16 0 -0.00974822 -0.0828475 0 -0.00431551 -0.041582 0 -0.0187568 0.123483 0 -0.00431551 0.041582 0 -0.00974822 0.0828475 0 -0.0139272 0.124777 0 0.0025 -1.1808e-16 0 0.000665464 0.0420178 0 -0.00482418 0.0837158 0 -0.00482418 -0.0837158 0 0.000665464 -0.0420178 0 -0.0139272 -0.124777 0 -0.0139272 -0.124777 0.001 0.0025 -1.1808e-16 0.001 -0.00482418 -0.0837158 0.001 0.000665464 -0.0420178 0.001 0.0025 -1.1808e-16 0 -0.00482418 -0.0837158 0 0.000665464 -0.0420178 0 -0.0187568 -0.123483 0.001 -0.0139272 -0.124777 0.001 -0.0025 -1.16856e-16 0.001 -0.00974822 -0.0828475 0.001 -0.00431551 -0.041582 0.001 -0.0187568 0.123483 0.001 -0.00431551 0.041582 0.001 -0.00974822 0.0828475 0.001 -0.0139272 0.124777 0.001 0.0025 -1.1808e-16 0.001 0.000665464 0.0420178 0.001 -0.00482418 0.0837158 0.001 -0.00482418 -0.0837158 0.001 0.000665464 -0.0420178 0.001 -0.0187568 -0.123483 0 -0.0187568 -0.123483 0.001 -0.0025 -1.16856e-16 0.001 -0.00974822 -0.0828475 0.001 -0.00431551 -0.041582 0.001 -0.0025 -1.16856e-16 0 -0.00974822 -0.0828475 0 -0.00431551 -0.041582 0 -0.0025 -1.16856e-16 0 -0.0025 -1.16856e-16 0.001 -0.0187568 0.123483 0.001 -0.00431551 0.041582 0.001 -0.00974822 0.0828475 0.001 -0.0187568 0.123483 0 -0.00431551 0.041582 0 -0.00974822 0.0828475 0 -0.0187568 0.123483 0 -0.0139272 0.124777 0 -0.0139272 0.124777 0.001 -0.0187568 0.123483 0.001 0.0025 -1.1808e-16 0 0.0025 -1.1808e-16 0.001 -0.0139272 0.124777 0.001 0.000665464 0.0420178 0.001 -0.00482418 0.0837158 0.001 -0.0139272 0.124777 0 0.000665464 0.0420178 0 -0.00482418 0.0837158 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="116"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0189238 -0.124751 0 -0.0140941 -0.126045 0 -0.0140941 -0.126045 0.001 -0.0189238 -0.124751 0.001 -0.0189238 -0.124751 0 -0.0140941 -0.126045 0 -0.0025 -1.18056e-16 0 -0.00982266 -0.0836984 0 -0.00433416 -0.0420091 0 -0.0189238 0.124751 0 -0.00433416 0.0420091 0 -0.00982266 0.0836984 0 -0.0140941 0.126045 0 0.0025 -1.19281e-16 0 0.000646818 0.0424448 0 -0.00489862 0.0845667 0 -0.00489862 -0.0845667 0 0.000646818 -0.0424448 0 -0.0140941 -0.126045 0 -0.0140941 -0.126045 0.001 0.0025 -1.19281e-16 0.001 -0.00489862 -0.0845667 0.001 0.000646818 -0.0424448 0.001 0.0025 -1.19281e-16 0 -0.00489862 -0.0845667 0 0.000646818 -0.0424448 0 -0.0189238 -0.124751 0.001 -0.0140941 -0.126045 0.001 -0.0025 -1.18056e-16 0.001 -0.00982266 -0.0836984 0.001 -0.00433416 -0.0420091 0.001 -0.0189238 0.124751 0.001 -0.00433416 0.0420091 0.001 -0.00982266 0.0836984 0.001 -0.0140941 0.126045 0.001 0.0025 -1.19281e-16 0.001 0.000646818 0.0424448 0.001 -0.00489862 0.0845667 0.001 -0.00489862 -0.0845667 0.001 0.000646818 -0.0424448 0.001 -0.0189238 -0.124751 0 -0.0189238 -0.124751 0.001 -0.0025 -1.18056e-16 0.001 -0.00982266 -0.0836984 0.001 -0.00433416 -0.0420091 0.001 -0.0025 -1.18056e-16 0 -0.00982266 -0.0836984 0 -0.00433416 -0.0420091 0 -0.0025 -1.18056e-16 0 -0.0025 -1.18056e-16 0.001 -0.0189238 0.124751 0.001 -0.00433416 0.0420091 0.001 -0.00982266 0.0836984 0.001 -0.0189238 0.124751 0 -0.00433416 0.0420091 0 -0.00982266 0.0836984 0 -0.0189238 0.124751 0 -0.0140941 0.126045 0 -0.0140941 0.126045 0.001 -0.0189238 0.124751 0.001 0.0025 -1.19281e-16 0 0.0025 -1.19281e-16 0.001 -0.0140941 0.126045 0.001 0.000646818 0.0424448 0.001 -0.00489862 0.0845667 0.001 -0.0140941 0.126045 0 0.000646818 0.0424448 0 -0.00489862 0.0845667 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="117"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0190907 -0.126019 0 -0.0142611 -0.127313 0 -0.0142611 -0.127313 0.001 -0.0190907 -0.126019 0.001 -0.0190907 -0.126019 0 -0.0142611 -0.127313 0 -0.0025 -1.19256e-16 0 -0.00989711 -0.0845493 0 -0.0043528 -0.0424361 0 -0.0190907 0.126019 0 -0.0043528 0.0424361 0 -0.00989711 0.0845493 0 -0.0142611 0.127313 0 0.0025 -1.20481e-16 0 0.000628172 0.0428719 0 -0.00497307 0.0854175 0 -0.00497307 -0.0854175 0 0.000628172 -0.0428719 0 -0.0142611 -0.127313 0 -0.0142611 -0.127313 0.001 0.0025 -1.20481e-16 0.001 -0.00497307 -0.0854175 0.001 0.000628172 -0.0428719 0.001 0.0025 -1.20481e-16 0 -0.00497307 -0.0854175 0 0.000628172 -0.0428719 0 -0.0190907 -0.126019 0.001 -0.0142611 -0.127313 0.001 -0.0025 -1.19256e-16 0.001 -0.00989711 -0.0845493 0.001 -0.0043528 -0.0424361 0.001 -0.0190907 0.126019 0.001 -0.0043528 0.0424361 0.001 -0.00989711 0.0845493 0.001 -0.0142611 0.127313 0.001 0.0025 -1.20481e-16 0.001 0.000628172 0.0428719 0.001 -0.00497307 0.0854175 0.001 -0.00497307 -0.0854175 0.001 0.000628172 -0.0428719 0.001 -0.0190907 -0.126019 0 -0.0190907 -0.126019 0.001 -0.0025 -1.19256e-16 0.001 -0.00989711 -0.0845493 0.001 -0.0043528 -0.0424361 0.001 -0.0025 -1.19256e-16 0 -0.00989711 -0.0845493 0 -0.0043528 -0.0424361 0 -0.0025 -1.19256e-16 0 -0.0025 -1.19256e-16 0.001 -0.0190907 0.126019 0.001 -0.0043528 0.0424361 0.001 -0.00989711 0.0845493 0.001 -0.0190907 0.126019 0 -0.0043528 0.0424361 0 -0.00989711 0.0845493 0 -0.0190907 0.126019 0 -0.0142611 0.127313 0 -0.0142611 0.127313 0.001 -0.0190907 0.126019 0.001 0.0025 -1.20481e-16 0 0.0025 -1.20481e-16 0.001 -0.0142611 0.127313 0.001 0.000628172 0.0428719 0.001 -0.00497307 0.0854175 0.001 -0.0142611 0.127313 0 0.000628172 0.0428719 0 -0.00497307 0.0854175 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="118"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0192543 -0.127261 0 -0.0144246 -0.128555 0 -0.0144246 -0.128555 0.001 -0.0192543 -0.127261 0.001 -0.0192543 -0.127261 0 -0.0144246 -0.128555 0 -0.0025 -1.20432e-16 0 -0.00997003 -0.0853828 0 -0.00437107 -0.0428545 0 -0.0192543 0.127261 0 -0.00437107 0.0428545 0 -0.00997003 0.0853828 0 -0.0144246 0.128555 0 0.0025 -1.21656e-16 0 0.000609907 0.0432903 0 -0.00504599 0.086251 0 -0.00504599 -0.086251 0 0.000609907 -0.0432903 0 -0.0144246 -0.128555 0 -0.0144246 -0.128555 0.001 0.0025 -1.21656e-16 0.001 -0.00504599 -0.086251 0.001 0.000609907 -0.0432903 0.001 0.0025 -1.21656e-16 0 -0.00504599 -0.086251 0 0.000609907 -0.0432903 0 -0.0192543 -0.127261 0.001 -0.0144246 -0.128555 0.001 -0.0025 -1.20432e-16 0.001 -0.00997003 -0.0853828 0.001 -0.00437107 -0.0428545 0.001 -0.0192543 0.127261 0.001 -0.00437107 0.0428545 0.001 -0.00997003 0.0853828 0.001 -0.0144246 0.128555 0.001 0.0025 -1.21656e-16 0.001 0.000609907 0.0432903 0.001 -0.00504599 0.086251 0.001 -0.00504599 -0.086251 0.001 0.000609907 -0.0432903 0.001 -0.0192543 -0.127261 0 -0.0192543 -0.127261 0.001 -0.0025 -1.20432e-16 0.001 -0.00997003 -0.0853828 0.001 -0.00437107 -0.0428545 0.001 -0.0025 -1.20432e-16 0 -0.00997003 -0.0853828 0 -0.00437107 -0.0428545 0 -0.0025 -1.20432e-16 0 -0.0025 -1.20432e-16 0.001 -0.0192543 0.127261 0.001 -0.00437107 0.0428545 0.001 -0.00997003 0.0853828 0.001 -0.0192543 0.127261 0 -0.00437107 0.0428545 0 -0.00997003 0.0853828 0 -0.0192543 0.127261 0 -0.0144246 0.128555 0 -0.0144246 0.128555 0.001 -0.0192543 0.127261 0.001 0.0025 -1.21656e-16 0 0.0025 -1.21656e-16 0.001 -0.0144246 0.128555 0.001 0.000609907 0.0432903 0.001 -0.00504599 0.086251 0.001 -0.0144246 0.128555 0 0.000609907 0.0432903 0 -0.00504599 0.086251 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="119"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0194212 -0.12853 0 -0.0145916 -0.129824 0 -0.0145916 -0.129824 0.001 -0.0194212 -0.12853 0.001 -0.0194212 -0.12853 0 -0.0145916 -0.129824 0 -0.0025 -1.21632e-16 0 -0.0100445 -0.0862337 0 -0.00438971 -0.0432815 0 -0.0194212 0.12853 0 -0.00438971 0.0432815 0 -0.0100445 0.0862337 0 -0.0145916 0.129824 0 0.0025 -1.22857e-16 0 0.000591261 0.0437173 0 -0.00512043 0.0871019 0 -0.00512043 -0.0871019 0 0.000591261 -0.0437173 0 -0.0145916 -0.129824 0 -0.0145916 -0.129824 0.001 0.0025 -1.22857e-16 0.001 -0.00512043 -0.0871019 0.001 0.000591261 -0.0437173 0.001 0.0025 -1.22857e-16 0 -0.00512043 -0.0871019 0 0.000591261 -0.0437173 0 -0.0194212 -0.12853 0.001 -0.0145916 -0.129824 0.001 -0.0025 -1.21632e-16 0.001 -0.0100445 -0.0862337 0.001 -0.00438971 -0.0432815 0.001 -0.0194212 0.12853 0.001 -0.00438971 0.0432815 0.001 -0.0100445 0.0862337 0.001 -0.0145916 0.129824 0.001 0.0025 -1.22857e-16 0.001 0.000591261 0.0437173 0.001 -0.00512043 0.0871019 0.001 -0.00512043 -0.0871019 0.001 0.000591261 -0.0437173 0.001 -0.0194212 -0.12853 0 -0.0194212 -0.12853 0.001 -0.0025 -1.21632e-16 0.001 -0.0100445 -0.0862337 0.001 -0.00438971 -0.0432815 0.001 -0.0025 -1.21632e-16 0 -0.0100445 -0.0862337 0 -0.00438971 -0.0432815 0 -0.0025 -1.21632e-16 0 -0.0025 -1.21632e-16 0.001 -0.0194212 0.12853 0.001 -0.00438971 0.0432815 0.001 -0.0100445 0.0862337 0.001 -0.0194212 0.12853 0 -0.00438971 0.0432815 0 -0.0100445 0.0862337 0 -0.0194212 0.12853 0 -0.0145916 0.129824 0 -0.0145916 0.129824 0.001 -0.0194212 0.12853 0.001 0.0025 -1.22857e-16 0 0.0025 -1.22857e-16 0.001 -0.0145916 0.129824 0.001 0.000591261 0.0437173 0.001 -0.00512043 0.0871019 0.001 -0.0145916 0.129824 0 0.000591261 0.0437173 0 -0.00512043 0.0871019 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="120"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0195882 -0.129798 0 -0.0147586 -0.131092 0 -0.0147586 -0.131092 0.001 -0.0195882 -0.129798 0.001 -0.0195882 -0.129798 0 -0.0147586 -0.131092 0 -0.0025 -1.22832e-16 0 -0.0101189 -0.0870846 0 -0.00440836 -0.0437086 0 -0.0195882 0.129798 0 -0.00440836 0.0437086 0 -0.0101189 0.0870846 0 -0.0147586 0.131092 0 0.0025 -1.24057e-16 0 0.000572615 0.0441444 0 -0.00519487 0.0879528 0 -0.00519487 -0.0879528 0 0.000572615 -0.0441444 0 -0.0147586 -0.131092 0 -0.0147586 -0.131092 0.001 0.0025 -1.24057e-16 0.001 -0.00519487 -0.0879528 0.001 0.000572615 -0.0441444 0.001 0.0025 -1.24057e-16 0 -0.00519487 -0.0879528 0 0.000572615 -0.0441444 0 -0.0195882 -0.129798 0.001 -0.0147586 -0.131092 0.001 -0.0025 -1.22832e-16 0.001 -0.0101189 -0.0870846 0.001 -0.00440836 -0.0437086 0.001 -0.0195882 0.129798 0.001 -0.00440836 0.0437086 0.001 -0.0101189 0.0870846 0.001 -0.0147586 0.131092 0.001 0.0025 -1.24057e-16 0.001 0.000572615 0.0441444 0.001 -0.00519487 0.0879528 0.001 -0.00519487 -0.0879528 0.001 0.000572615 -0.0441444 0.001 -0.0195882 -0.129798 0 -0.0195882 -0.129798 0.001 -0.0025 -1.22832e-16 0.001 -0.0101189 -0.0870846 0.001 -0.00440836 -0.0437086 0.001 -0.0025 -1.22832e-16 0 -0.0101189 -0.0870846 0 -0.00440836 -0.0437086 0 -0.0025 -1.22832e-16 0 -0.0025 -1.22832e-16 0.001 -0.0195882 0.129798 0.001 -0.00440836 0.0437086 0.001 -0.0101189 0.0870846 0.001 -0.0195882 0.129798 0 -0.00440836 0.0437086 0 -0.0101189 0.0870846 0 -0.0195882 0.129798 0 -0.0147586 0.131092 0 -0.0147586 0.131092 0.001 -0.0195882 0.129798 0.001 0.0025 -1.24057e-16 0 0.0025 -1.24057e-16 0.001 -0.0147586 0.131092 0.001 0.000572615 0.0441444 0.001 -0.00519487 0.0879528 0.001 -0.0147586 0.131092 0 0.000572615 0.0441444 0 -0.00519487 0.0879528 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="121"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0197552 -0.131066 0 -0.0149255 -0.13236 0 -0.0149255 -0.13236 0.001 -0.0197552 -0.131066 0.001 -0.0197552 -0.131066 0 -0.0149255 -0.13236 0 -0.0025 -1.24032e-16 0 -0.0101934 -0.0879354 0 -0.004427 -0.0441357 0 -0.0197552 0.131066 0 -0.004427 0.0441357 0 -0.0101934 0.0879354 0 -0.0149255 0.13236 0 0.0025 -1.25257e-16 0 0.000553969 0.0445714 0 -0.00526932 0.0888037 0 -0.00526932 -0.0888037 0 0.000553969 -0.0445714 0 -0.0149255 -0.13236 0 -0.0149255 -0.13236 0.001 0.0025 -1.25257e-16 0.001 -0.00526932 -0.0888037 0.001 0.000553969 -0.0445714 0.001 0.0025 -1.25257e-16 0 -0.00526932 -0.0888037 0 0.000553969 -0.0445714 0 -0.0197552 -0.131066 0.001 -0.0149255 -0.13236 0.001 -0.0025 -1.24032e-16 0.001 -0.0101934 -0.0879354 0.001 -0.004427 -0.0441357 0.001 -0.0197552 0.131066 0.001 -0.004427 0.0441357 0.001 -0.0101934 0.0879354 0.001 -0.0149255 0.13236 0.001 0.0025 -1.25257e-16 0.001 0.000553969 0.0445714 0.001 -0.00526932 0.0888037 0.001 -0.00526932 -0.0888037 0.001 0.000553969 -0.0445714 0.001 -0.0197552 -0.131066 0 -0.0197552 -0.131066 0.001 -0.0025 -1.24032e-16 0.001 -0.0101934 -0.0879354 0.001 -0.004427 -0.0441357 0.001 -0.0025 -1.24032e-16 0 -0.0101934 -0.0879354 0 -0.004427 -0.0441357 0 -0.0025 -1.24032e-16 0 -0.0025 -1.24032e-16 0.001 -0.0197552 0.131066 0.001 -0.004427 0.0441357 0.001 -0.0101934 0.0879354 0.001 -0.0197552 0.131066 0 -0.004427 0.0441357 0 -0.0101934 0.0879354 0 -0.0197552 0.131066 0 -0.0149255 0.13236 0 -0.0149255 0.13236 0.001 -0.0197552 0.131066 0.001 0.0025 -1.25257e-16 0 0.0025 -1.25257e-16 0.001 -0.0149255 0.13236 0.001 0.000553969 0.0445714 0.001 -0.00526932 0.0888037 0.001 -0.0149255 0.13236 0 0.000553969 0.0445714 0 -0.00526932 0.0888037 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="122"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0199221 -0.132334 0 -0.0150925 -0.133628 0 -0.0150925 -0.133628 0.001 -0.0199221 -0.132334 0.001 -0.0199221 -0.132334 0 -0.0150925 -0.133628 0 -0.0025 -1.25232e-16 0 -0.0102678 -0.0887863 0 -0.00444565 -0.0445627 0 -0.0199221 0.132334 0 -0.00444565 0.0445627 0 -0.0102678 0.0887863 0 -0.0150925 0.133628 0 0.0025 -1.26457e-16 0 0.000535323 0.0449985 0 -0.00534376 0.0896546 0 -0.00534376 -0.0896546 0 0.000535323 -0.0449985 0 -0.0150925 -0.133628 0 -0.0150925 -0.133628 0.001 0.0025 -1.26457e-16 0.001 -0.00534376 -0.0896546 0.001 0.000535323 -0.0449985 0.001 0.0025 -1.26457e-16 0 -0.00534376 -0.0896546 0 0.000535323 -0.0449985 0 -0.0199221 -0.132334 0.001 -0.0150925 -0.133628 0.001 -0.0025 -1.25232e-16 0.001 -0.0102678 -0.0887863 0.001 -0.00444565 -0.0445627 0.001 -0.0199221 0.132334 0.001 -0.00444565 0.0445627 0.001 -0.0102678 0.0887863 0.001 -0.0150925 0.133628 0.001 0.0025 -1.26457e-16 0.001 0.000535323 0.0449985 0.001 -0.00534376 0.0896546 0.001 -0.00534376 -0.0896546 0.001 0.000535323 -0.0449985 0.001 -0.0199221 -0.132334 0 -0.0199221 -0.132334 0.001 -0.0025 -1.25232e-16 0.001 -0.0102678 -0.0887863 0.001 -0.00444565 -0.0445627 0.001 -0.0025 -1.25232e-16 0 -0.0102678 -0.0887863 0 -0.00444565 -0.0445627 0 -0.0025 -1.25232e-16 0 -0.0025 -1.25232e-16 0.001 -0.0199221 0.132334 0.001 -0.00444565 0.0445627 0.001 -0.0102678 0.0887863 0.001 -0.0199221 0.132334 0 -0.00444565 0.0445627 0 -0.0102678 0.0887863 0 -0.0199221 0.132334 0 -0.0150925 0.133628 0 -0.0150925 0.133628 0.001 -0.0199221 0.132334 0.001 0.0025 -1.26457e-16 0 0.0025 -1.26457e-16 0.001 -0.0150925 0.133628 0.001 0.000535323 0.0449985 0.001 -0.00534376 0.0896546 0.001 -0.0150925 0.133628 0 0.000535323 0.0449985 0 -0.00534376 0.0896546 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="123"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0200891 -0.133602 0 -0.0152595 -0.134896 0 -0.0152595 -0.134896 0.001 -0.0200891 -0.133602 0.001 -0.0200891 -0.133602 0 -0.0152595 -0.134896 0 -0.0025 -1.26433e-16 0 -0.0103422 -0.0896372 0 -0.0044643 -0.0449898 0 -0.0200891 0.133602 0 -0.0044643 0.0449898 0 -0.0103422 0.0896372 0 -0.0152595 0.134896 0 0.0025 -1.27657e-16 0 0.000516677 0.0454256 0 -0.0054182 0.0905054 0 -0.0054182 -0.0905054 0 0.000516677 -0.0454256 0 -0.0152595 -0.134896 0 -0.0152595 -0.134896 0.001 0.0025 -1.27657e-16 0.001 -0.0054182 -0.0905054 0.001 0.000516677 -0.0454256 0.001 0.0025 -1.27657e-16 0 -0.0054182 -0.0905054 0 0.000516677 -0.0454256 0 -0.0200891 -0.133602 0.001 -0.0152595 -0.134896 0.001 -0.0025 -1.26433e-16 0.001 -0.0103422 -0.0896372 0.001 -0.0044643 -0.0449898 0.001 -0.0200891 0.133602 0.001 -0.0044643 0.0449898 0.001 -0.0103422 0.0896372 0.001 -0.0152595 0.134896 0.001 0.0025 -1.27657e-16 0.001 0.000516677 0.0454256 0.001 -0.0054182 0.0905054 0.001 -0.0054182 -0.0905054 0.001 0.000516677 -0.0454256 0.001 -0.0200891 -0.133602 0 -0.0200891 -0.133602 0.001 -0.0025 -1.26433e-16 0.001 -0.0103422 -0.0896372 0.001 -0.0044643 -0.0449898 0.001 -0.0025 -1.26433e-16 0 -0.0103422 -0.0896372 0 -0.0044643 -0.0449898 0 -0.0025 -1.26433e-16 0 -0.0025 -1.26433e-16 0.001 -0.0200891 0.133602 0.001 -0.0044643 0.0449898 0.001 -0.0103422 0.0896372 0.001 -0.0200891 0.133602 0 -0.0044643 0.0449898 0 -0.0103422 0.0896372 0 -0.0200891 0.133602 0 -0.0152595 0.134896 0 -0.0152595 0.134896 0.001 -0.0200891 0.133602 0.001 0.0025 -1.27657e-16 0 0.0025 -1.27657e-16 0.001 -0.0152595 0.134896 0.001 0.000516677 0.0454256 0.001 -0.0054182 0.0905054 0.001 -0.0152595 0.134896 0 0.000516677 0.0454256 0 -0.0054182 0.0905054 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="70"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0111821 -0.0659471 0 -0.00635247 -0.0672412 0 -0.00635247 -0.0672412 0.001 -0.0111821 -0.0659471 0.001 -0.0111821 -0.0659471 0 -0.00635247 -0.0672412 0 -0.0025 -6.2408e-17 0 -0.00637098 -0.0442456 0 -0.00346959 -0.0222073 0 -0.0111821 0.0659471 0 -0.00346959 0.0222073 0 -0.00637098 0.0442456 0 -0.00635247 0.0672412 0 0.0025 -6.36326e-17 0 0.00151138 0.0226431 0 -0.00144695 0.0451138 0 -0.00144695 -0.0451138 0 0.00151138 -0.0226431 0 -0.00635247 -0.0672412 0 -0.00635247 -0.0672412 0.001 0.0025 -6.36326e-17 0.001 -0.00144695 -0.0451138 0.001 0.00151138 -0.0226431 0.001 0.0025 -6.36326e-17 0 -0.00144695 -0.0451138 0 0.00151138 -0.0226431 0 -0.0111821 -0.0659471 0.001 -0.00635247 -0.0672412 0.001 -0.0025 -6.2408e-17 0.001 -0.00637098 -0.0442456 0.001 -0.00346959 -0.0222073 0.001 -0.0111821 0.0659471 0.001 -0.00346959 0.0222073 0.001 -0.00637098 0.0442456 0.001 -0.00635247 0.0672412 0.001 0.0025 -6.36326e-17 0.001 0.00151138 0.0226431 0.001 -0.00144695 0.0451138 0.001 -0.00144695 -0.0451138 0.001 0.00151138 -0.0226431 0.001 -0.0111821 -0.0659471 0 -0.0111821 -0.0659471 0.001 -0.0025 -6.2408e-17 0.001 -0.00637098 -0.0442456 0.001 -0.00346959 -0.0222073 0.001 -0.0025 -6.2408e-17 0 -0.00637098 -0.0442456 0 -0.00346959 -0.0222073 0 -0.0025 -6.2408e-17 0 -0.0025 -6.2408e-17 0.001 -0.0111821 0.0659471 0.001 -0.00346959 0.0222073 0.001 -0.00637098 0.0442456 0.001 -0.0111821 0.0659471 0 -0.00346959 0.0222073 0 -0.00637098 0.0442456 0 -0.0111821 0.0659471 0 -0.00635247 0.0672412 0 -0.00635247 0.0672412 0.001 -0.0111821 0.0659471 0.001 0.0025 -6.36326e-17 0 0.0025 -6.36326e-17 0.001 -0.00635247 0.0672412 0.001 0.00151138 0.0226431 0.001 -0.00144695 0.0451138 0.001 -0.00635247 0.0672412 0 0.00151138 0.0226431 0 -0.00144695 0.0451138 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="71"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0113525 -0.0672412 0 -0.00652284 -0.0685353 0 -0.00652284 -0.0685353 0.001 -0.0113525 -0.0672412 0.001 -0.0113525 -0.0672412 0 -0.00652284 -0.0685353 0 -0.0025 -6.36326e-17 0 -0.00644695 -0.0451138 0 -0.00348862 -0.0226431 0 -0.0113525 0.0672412 0 -0.00348862 0.0226431 0 -0.00644695 0.0451138 0 -0.00652284 0.0685353 0 0.0025 -6.48573e-17 0 0.00149236 0.0230788 0 -0.00152291 0.045982 0 -0.00152291 -0.045982 0 0.00149236 -0.0230788 0 -0.00652284 -0.0685353 0 -0.00652284 -0.0685353 0.001 0.0025 -6.48573e-17 0.001 -0.00152291 -0.045982 0.001 0.00149236 -0.0230788 0.001 0.0025 -6.48573e-17 0 -0.00152291 -0.045982 0 0.00149236 -0.0230788 0 -0.0113525 -0.0672412 0.001 -0.00652284 -0.0685353 0.001 -0.0025 -6.36326e-17 0.001 -0.00644695 -0.0451138 0.001 -0.00348862 -0.0226431 0.001 -0.0113525 0.0672412 0.001 -0.00348862 0.0226431 0.001 -0.00644695 0.0451138 0.001 -0.00652284 0.0685353 0.001 0.0025 -6.48573e-17 0.001 0.00149236 0.0230788 0.001 -0.00152291 0.045982 0.001 -0.00152291 -0.045982 0.001 0.00149236 -0.0230788 0.001 -0.0113525 -0.0672412 0 -0.0113525 -0.0672412 0.001 -0.0025 -6.36326e-17 0.001 -0.00644695 -0.0451138 0.001 -0.00348862 -0.0226431 0.001 -0.0025 -6.36326e-17 0 -0.00644695 -0.0451138 0 -0.00348862 -0.0226431 0 -0.0025 -6.36326e-17 0 -0.0025 -6.36326e-17 0.001 -0.0113525 0.0672412 0.001 -0.00348862 0.0226431 0.001 -0.00644695 0.0451138 0.001 -0.0113525 0.0672412 0 -0.00348862 0.0226431 0 -0.00644695 0.0451138 0 -0.0113525 0.0672412 0 -0.00652284 0.0685353 0 -0.00652284 0.0685353 0.001 -0.0113525 0.0672412 0.001 0.0025 -6.48573e-17 0 0.0025 -6.48573e-17 0.001 -0.00652284 0.0685353 0.001 0.00149236 0.0230788 0.001 -0.00152291 0.045982 0.001 -0.00652284 0.0685353 0 0.00149236 0.0230788 0 -0.00152291 0.045982 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="72"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0115228 -0.0685353 0 -0.00669321 -0.0698294 0 -0.00669321 -0.0698294 0.001 -0.0115228 -0.0685353 0.001 -0.0115228 -0.0685353 0 -0.00669321 -0.0698294 0 -0.0025 -6.48573e-17 0 -0.00652291 -0.045982 0 -0.00350764 -0.0230788 0 -0.0115228 0.0685353 0 -0.00350764 0.0230788 0 -0.00652291 0.045982 0 -0.00669321 0.0698294 0 0.0025 -6.60819e-17 0 0.00147333 0.0235146 0 -0.00159887 0.0468503 0 -0.00159887 -0.0468503 0 0.00147333 -0.0235146 0 -0.00669321 -0.0698294 0 -0.00669321 -0.0698294 0.001 0.0025 -6.60819e-17 0.001 -0.00159887 -0.0468503 0.001 0.00147333 -0.0235146 0.001 0.0025 -6.60819e-17 0 -0.00159887 -0.0468503 0 0.00147333 -0.0235146 0 -0.0115228 -0.0685353 0.001 -0.00669321 -0.0698294 0.001 -0.0025 -6.48573e-17 0.001 -0.00652291 -0.045982 0.001 -0.00350764 -0.0230788 0.001 -0.0115228 0.0685353 0.001 -0.00350764 0.0230788 0.001 -0.00652291 0.045982 0.001 -0.00669321 0.0698294 0.001 0.0025 -6.60819e-17 0.001 0.00147333 0.0235146 0.001 -0.00159887 0.0468503 0.001 -0.00159887 -0.0468503 0.001 0.00147333 -0.0235146 0.001 -0.0115228 -0.0685353 0 -0.0115228 -0.0685353 0.001 -0.0025 -6.48573e-17 0.001 -0.00652291 -0.045982 0.001 -0.00350764 -0.0230788 0.001 -0.0025 -6.48573e-17 0 -0.00652291 -0.045982 0 -0.00350764 -0.0230788 0 -0.0025 -6.48573e-17 0 -0.0025 -6.48573e-17 0.001 -0.0115228 0.0685353 0.001 -0.00350764 0.0230788 0.001 -0.00652291 0.045982 0.001 -0.0115228 0.0685353 0 -0.00350764 0.0230788 0 -0.00652291 0.045982 0 -0.0115228 0.0685353 0 -0.00669321 0.0698294 0 -0.00669321 0.0698294 0.001 -0.0115228 0.0685353 0.001 0.0025 -6.60819e-17 0 0.0025 -6.60819e-17 0.001 -0.00669321 0.0698294 0.001 0.00147333 0.0235146 0.001 -0.00159887 0.0468503 0.001 -0.00669321 0.0698294 0 0.00147333 0.0235146 0 -0.00159887 0.0468503 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="73"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0116898 -0.0698035 0 -0.00686018 -0.0710976 0 -0.00686018 -0.0710976 0.001 -0.0116898 -0.0698035 0.001 -0.0116898 -0.0698035 0 -0.00686018 -0.0710976 0 -0.0025 -6.60574e-17 0 -0.00659735 -0.0468329 0 -0.00352629 -0.0235059 0 -0.0116898 0.0698035 0 -0.00352629 0.0235059 0 -0.00659735 0.0468329 0 -0.00686018 0.0710976 0 0.0025 -6.72821e-17 0 0.00145468 0.0239417 0 -0.00167331 0.0477012 0 -0.00167331 -0.0477012 0 0.00145468 -0.0239417 0 -0.00686018 -0.0710976 0 -0.00686018 -0.0710976 0.001 0.0025 -6.72821e-17 0.001 -0.00167331 -0.0477012 0.001 0.00145468 -0.0239417 0.001 0.0025 -6.72821e-17 0 -0.00167331 -0.0477012 0 0.00145468 -0.0239417 0 -0.0116898 -0.0698035 0.001 -0.00686018 -0.0710976 0.001 -0.0025 -6.60574e-17 0.001 -0.00659735 -0.0468329 0.001 -0.00352629 -0.0235059 0.001 -0.0116898 0.0698035 0.001 -0.00352629 0.0235059 0.001 -0.00659735 0.0468329 0.001 -0.00686018 0.0710976 0.001 0.0025 -6.72821e-17 0.001 0.00145468 0.0239417 0.001 -0.00167331 0.0477012 0.001 -0.00167331 -0.0477012 0.001 0.00145468 -0.0239417 0.001 -0.0116898 -0.0698035 0 -0.0116898 -0.0698035 0.001 -0.0025 -6.60574e-17 0.001 -0.00659735 -0.0468329 0.001 -0.00352629 -0.0235059 0.001 -0.0025 -6.60574e-17 0 -0.00659735 -0.0468329 0 -0.00352629 -0.0235059 0 -0.0025 -6.60574e-17 0 -0.0025 -6.60574e-17 0.001 -0.0116898 0.0698035 0.001 -0.00352629 0.0235059 0.001 -0.00659735 0.0468329 0.001 -0.0116898 0.0698035 0 -0.00352629 0.0235059 0 -0.00659735 0.0468329 0 -0.0116898 0.0698035 0 -0.00686018 0.0710976 0 -0.00686018 0.0710976 0.001 -0.0116898 0.0698035 0.001 0.0025 -6.72821e-17 0 0.0025 -6.72821e-17 0.001 -0.00686018 0.0710976 0.001 0.00145468 0.0239417 0.001 -0.00167331 0.0477012 0.001 -0.00686018 0.0710976 0 0.00145468 0.0239417 0 -0.00167331 0.0477012 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="18"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0126711 -0.0772575 0 -0.00784151 -0.0785516 0 -0.00784151 -0.0785516 0.001 -0.0126711 -0.0772575 0.001 -0.0126711 -0.0772575 0 -0.00784151 -0.0785516 0 -0.0025 -7.31114e-17 0 -0.00703489 -0.051834 0 -0.00363588 -0.026016 0 -0.0126711 0.0772575 0 -0.00363588 0.026016 0 -0.00703489 0.051834 0 -0.00784151 0.0785516 0 0.0025 -7.43361e-17 0 0.00134509 0.0264518 0 -0.00211085 0.0527022 0 -0.00211085 -0.0527022 0 0.00134509 -0.0264518 0 -0.00784151 -0.0785516 0 -0.00784151 -0.0785516 0.001 0.0025 -7.43361e-17 0.001 -0.00211085 -0.0527022 0.001 0.00134509 -0.0264518 0.001 0.0025 -7.43361e-17 0 -0.00211085 -0.0527022 0 0.00134509 -0.0264518 0 -0.0126711 -0.0772575 0.001 -0.00784151 -0.0785516 0.001 -0.0025 -7.31114e-17 0.001 -0.00703489 -0.051834 0.001 -0.00363588 -0.026016 0.001 -0.0126711 0.0772575 0.001 -0.00363588 0.026016 0.001 -0.00703489 0.051834 0.001 -0.00784151 0.0785516 0.001 0.0025 -7.43361e-17 0.001 0.00134509 0.0264518 0.001 -0.00211085 0.0527022 0.001 -0.00211085 -0.0527022 0.001 0.00134509 -0.0264518 0.001 -0.0126711 -0.0772575 0 -0.0126711 -0.0772575 0.001 -0.0025 -7.31114e-17 0.001 -0.00703489 -0.051834 0.001 -0.00363588 -0.026016 0.001 -0.0025 -7.31114e-17 0 -0.00703489 -0.051834 0 -0.00363588 -0.026016 0 -0.0025 -7.31114e-17 0 -0.0025 -7.31114e-17 0.001 -0.0126711 0.0772575 0.001 -0.00363588 0.026016 0.001 -0.00703489 0.051834 0.001 -0.0126711 0.0772575 0 -0.00363588 0.026016 0 -0.00703489 0.051834 0 -0.0126711 0.0772575 0 -0.00784151 0.0785516 0 -0.00784151 0.0785516 0.001 -0.0126711 0.0772575 0.001 0.0025 -7.43361e-17 0 0.0025 -7.43361e-17 0.001 -0.00784151 0.0785516 0.001 0.00134509 0.0264518 0.001 -0.00211085 0.0527022 0.001 -0.00784151 0.0785516 0 0.00134509 0.0264518 0 -0.00211085 0.0527022 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="19"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0128722 -0.0787845 0 -0.00804255 -0.0800786 0 -0.00804255 -0.0800786 0.001 -0.0128722 -0.0787845 0.001 -0.0128722 -0.0787845 0 -0.00804255 -0.0800786 0 -0.0025 -7.45565e-17 0 -0.00712452 -0.0528585 0 -0.00365833 -0.0265302 0 -0.0128722 0.0787845 0 -0.00365833 0.0265302 0 -0.00712452 0.0528585 0 -0.00804255 0.0800786 0 0.0025 -7.57811e-17 0 0.00132264 0.026966 0 -0.00220048 0.0537267 0 -0.00220048 -0.0537267 0 0.00132264 -0.026966 0 -0.00804255 -0.0800786 0 -0.00804255 -0.0800786 0.001 0.0025 -7.57811e-17 0.001 -0.00220048 -0.0537267 0.001 0.00132264 -0.026966 0.001 0.0025 -7.57811e-17 0 -0.00220048 -0.0537267 0 0.00132264 -0.026966 0 -0.0128722 -0.0787845 0.001 -0.00804255 -0.0800786 0.001 -0.0025 -7.45565e-17 0.001 -0.00712452 -0.0528585 0.001 -0.00365833 -0.0265302 0.001 -0.0128722 0.0787845 0.001 -0.00365833 0.0265302 0.001 -0.00712452 0.0528585 0.001 -0.00804255 0.0800786 0.001 0.0025 -7.57811e-17 0.001 0.00132264 0.026966 0.001 -0.00220048 0.0537267 0.001 -0.00220048 -0.0537267 0.001 0.00132264 -0.026966 0.001 -0.0128722 -0.0787845 0 -0.0128722 -0.0787845 0.001 -0.0025 -7.45565e-17 0.001 -0.00712452 -0.0528585 0.001 -0.00365833 -0.0265302 0.001 -0.0025 -7.45565e-17 0 -0.00712452 -0.0528585 0 -0.00365833 -0.0265302 0 -0.0025 -7.45565e-17 0 -0.0025 -7.45565e-17 0.001 -0.0128722 0.0787845 0.001 -0.00365833 0.0265302 0.001 -0.00712452 0.0528585 0.001 -0.0128722 0.0787845 0 -0.00365833 0.0265302 0 -0.00712452 0.0528585 0 -0.0128722 0.0787845 0 -0.00804255 0.0800786 0 -0.00804255 0.0800786 0.001 -0.0128722 0.0787845 0.001 0.0025 -7.57811e-17 0 0.0025 -7.57811e-17 0.001 -0.00804255 0.0800786 0.001 0.00132264 0.026966 0.001 -0.00220048 0.0537267 0.001 -0.00804255 0.0800786 0 0.00132264 0.026966 0 -0.00220048 0.0537267 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="28"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0143544 -0.0900431 0 -0.00952478 -0.0913372 0 -0.00952478 -0.0913372 0.001 -0.0143544 -0.0900431 0.001 -0.0143544 -0.0900431 0 -0.00952478 -0.0913372 0 -0.0025 -8.52109e-17 0 -0.00778538 -0.0604122 0 -0.00382386 -0.0303215 0 -0.0143544 0.0900431 0 -0.00382386 0.0303215 0 -0.00778538 0.0604122 0 -0.00952478 0.0913372 0 0.0025 -8.64356e-17 0 0.00115711 0.0307573 0 -0.00286134 0.0612804 0 -0.00286134 -0.0612804 0 0.00115711 -0.0307573 0 -0.00952478 -0.0913372 0 -0.00952478 -0.0913372 0.001 0.0025 -8.64356e-17 0.001 -0.00286134 -0.0612804 0.001 0.00115711 -0.0307573 0.001 0.0025 -8.64356e-17 0 -0.00286134 -0.0612804 0 0.00115711 -0.0307573 0 -0.0143544 -0.0900431 0.001 -0.00952478 -0.0913372 0.001 -0.0025 -8.52109e-17 0.001 -0.00778538 -0.0604122 0.001 -0.00382386 -0.0303215 0.001 -0.0143544 0.0900431 0.001 -0.00382386 0.0303215 0.001 -0.00778538 0.0604122 0.001 -0.00952478 0.0913372 0.001 0.0025 -8.64356e-17 0.001 0.00115711 0.0307573 0.001 -0.00286134 0.0612804 0.001 -0.00286134 -0.0612804 0.001 0.00115711 -0.0307573 0.001 -0.0143544 -0.0900431 0 -0.0143544 -0.0900431 0.001 -0.0025 -8.52109e-17 0.001 -0.00778538 -0.0604122 0.001 -0.00382386 -0.0303215 0.001 -0.0025 -8.52109e-17 0 -0.00778538 -0.0604122 0 -0.00382386 -0.0303215 0 -0.0025 -8.52109e-17 0 -0.0025 -8.52109e-17 0.001 -0.0143544 0.0900431 0.001 -0.00382386 0.0303215 0.001 -0.00778538 0.0604122 0.001 -0.0143544 0.0900431 0 -0.00382386 0.0303215 0 -0.00778538 0.0604122 0 -0.0143544 0.0900431 0 -0.00952478 0.0913372 0 -0.00952478 0.0913372 0.001 -0.0143544 0.0900431 0.001 0.0025 -8.64356e-17 0 0.0025 -8.64356e-17 0.001 -0.00952478 0.0913372 0.001 0.00115711 0.0307573 0.001 -0.00286134 0.0612804 0.001 -0.00952478 0.0913372 0 0.00115711 0.0307573 0 -0.00286134 0.0612804 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="29"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0145589 -0.0915961 0 -0.00972922 -0.0928902 0 -0.00972922 -0.0928902 0.001 -0.0145589 -0.0915961 0.001 -0.0145589 -0.0915961 0 -0.00972922 -0.0928902 0 -0.0025 -8.66805e-17 0 -0.00787654 -0.0614541 0 -0.0038467 -0.0308444 0 -0.0145589 0.0915961 0 -0.0038467 0.0308444 0 -0.00787654 0.0614541 0 -0.00972922 0.0928902 0 0.0025 -8.79051e-17 0 0.00113428 0.0312802 0 -0.0029525 0.0623223 0 -0.0029525 -0.0623223 0 0.00113428 -0.0312802 0 -0.00972922 -0.0928902 0 -0.00972922 -0.0928902 0.001 0.0025 -8.79051e-17 0.001 -0.0029525 -0.0623223 0.001 0.00113428 -0.0312802 0.001 0.0025 -8.79051e-17 0 -0.0029525 -0.0623223 0 0.00113428 -0.0312802 0 -0.0145589 -0.0915961 0.001 -0.00972922 -0.0928902 0.001 -0.0025 -8.66805e-17 0.001 -0.00787654 -0.0614541 0.001 -0.0038467 -0.0308444 0.001 -0.0145589 0.0915961 0.001 -0.0038467 0.0308444 0.001 -0.00787654 0.0614541 0.001 -0.00972922 0.0928902 0.001 0.0025 -8.79051e-17 0.001 0.00113428 0.0312802 0.001 -0.0029525 0.0623223 0.001 -0.0029525 -0.0623223 0.001 0.00113428 -0.0312802 0.001 -0.0145589 -0.0915961 0 -0.0145589 -0.0915961 0.001 -0.0025 -8.66805e-17 0.001 -0.00787654 -0.0614541 0.001 -0.0038467 -0.0308444 0.001 -0.0025 -8.66805e-17 0 -0.00787654 -0.0614541 0 -0.0038467 -0.0308444 0 -0.0025 -8.66805e-17 0 -0.0025 -8.66805e-17 0.001 -0.0145589 0.0915961 0.001 -0.0038467 0.0308444 0.001 -0.00787654 0.0614541 0.001 -0.0145589 0.0915961 0 -0.0038467 0.0308444 0 -0.00787654 0.0614541 0 -0.0145589 0.0915961 0 -0.00972922 0.0928902 0 -0.00972922 0.0928902 0.001 -0.0145589 0.0915961 0.001 0.0025 -8.79051e-17 0 0.0025 -8.79051e-17 0.001 -0.00972922 0.0928902 0.001 0.00113428 0.0312802 0.001 -0.0029525 0.0623223 0.001 -0.00972922 0.0928902 0 0.00113428 0.0312802 0 -0.0029525 0.0623223 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="30"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0146883 -0.0925796 0 -0.0098587 -0.0938737 0 -0.0098587 -0.0938737 0.001 -0.0146883 -0.0925796 0.001 -0.0146883 -0.0925796 0 -0.0098587 -0.0938737 0 -0.0025 -8.76112e-17 0 -0.00793427 -0.062114 0 -0.00386116 -0.0311756 0 -0.0146883 0.0925796 0 -0.00386116 0.0311756 0 -0.00793427 0.062114 0 -0.0098587 0.0938737 0 0.0025 -8.88359e-17 0 0.00111982 0.0316114 0 -0.00301023 0.0629822 0 -0.00301023 -0.0629822 0 0.00111982 -0.0316114 0 -0.0098587 -0.0938737 0 -0.0098587 -0.0938737 0.001 0.0025 -8.88359e-17 0.001 -0.00301023 -0.0629822 0.001 0.00111982 -0.0316114 0.001 0.0025 -8.88359e-17 0 -0.00301023 -0.0629822 0 0.00111982 -0.0316114 0 -0.0146883 -0.0925796 0.001 -0.0098587 -0.0938737 0.001 -0.0025 -8.76112e-17 0.001 -0.00793427 -0.062114 0.001 -0.00386116 -0.0311756 0.001 -0.0146883 0.0925796 0.001 -0.00386116 0.0311756 0.001 -0.00793427 0.062114 0.001 -0.0098587 0.0938737 0.001 0.0025 -8.88359e-17 0.001 0.00111982 0.0316114 0.001 -0.00301023 0.0629822 0.001 -0.00301023 -0.0629822 0.001 0.00111982 -0.0316114 0.001 -0.0146883 -0.0925796 0 -0.0146883 -0.0925796 0.001 -0.0025 -8.76112e-17 0.001 -0.00793427 -0.062114 0.001 -0.00386116 -0.0311756 0.001 -0.0025 -8.76112e-17 0 -0.00793427 -0.062114 0 -0.00386116 -0.0311756 0 -0.0025 -8.76112e-17 0 -0.0025 -8.76112e-17 0.001 -0.0146883 0.0925796 0.001 -0.00386116 0.0311756 0.001 -0.00793427 0.062114 0.001 -0.0146883 0.0925796 0 -0.00386116 0.0311756 0 -0.00793427 0.062114 0 -0.0146883 0.0925796 0 -0.0098587 0.0938737 0 -0.0098587 0.0938737 0.001 -0.0146883 0.0925796 0.001 0.0025 -8.88359e-17 0 0.0025 -8.88359e-17 0.001 -0.0098587 0.0938737 0.001 0.00111982 0.0316114 0.001 -0.00301023 0.0629822 0.001 -0.0098587 0.0938737 0 0.00111982 0.0316114 0 -0.00301023 0.0629822 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="31"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0148962 -0.0941584 0 -0.0100666 -0.0954525 0 -0.0100666 -0.0954525 0.001 -0.0148962 -0.0941584 0.001 -0.0148962 -0.0941584 0 -0.0100666 -0.0954525 0 -0.0025 -8.91053e-17 0 -0.00802694 -0.0631732 0 -0.00388437 -0.0317073 0 -0.0148962 0.0941584 0 -0.00388437 0.0317073 0 -0.00802694 0.0631732 0 -0.0100666 0.0954525 0 0.0025 -9.03299e-17 0 0.0010966 0.032143 0 -0.0031029 0.0640414 0 -0.0031029 -0.0640414 0 0.0010966 -0.032143 0 -0.0100666 -0.0954525 0 -0.0100666 -0.0954525 0.001 0.0025 -9.03299e-17 0.001 -0.0031029 -0.0640414 0.001 0.0010966 -0.032143 0.001 0.0025 -9.03299e-17 0 -0.0031029 -0.0640414 0 0.0010966 -0.032143 0 -0.0148962 -0.0941584 0.001 -0.0100666 -0.0954525 0.001 -0.0025 -8.91053e-17 0.001 -0.00802694 -0.0631732 0.001 -0.00388437 -0.0317073 0.001 -0.0148962 0.0941584 0.001 -0.00388437 0.0317073 0.001 -0.00802694 0.0631732 0.001 -0.0100666 0.0954525 0.001 0.0025 -9.03299e-17 0.001 0.0010966 0.032143 0.001 -0.0031029 0.0640414 0.001 -0.0031029 -0.0640414 0.001 0.0010966 -0.032143 0.001 -0.0148962 -0.0941584 0 -0.0148962 -0.0941584 0.001 -0.0025 -8.91053e-17 0.001 -0.00802694 -0.0631732 0.001 -0.00388437 -0.0317073 0.001 -0.0025 -8.91053e-17 0 -0.00802694 -0.0631732 0 -0.00388437 -0.0317073 0 -0.0025 -8.91053e-17 0 -0.0025 -8.91053e-17 0.001 -0.0148962 0.0941584 0.001 -0.00388437 0.0317073 0.001 -0.00802694 0.0631732 0.001 -0.0148962 0.0941584 0 -0.00388437 0.0317073 0 -0.00802694 0.0631732 0 -0.0148962 0.0941584 0 -0.0100666 0.0954525 0 -0.0100666 0.0954525 0.001 -0.0148962 0.0941584 0.001 0.0025 -9.03299e-17 0 0.0025 -9.03299e-17 0.001 -0.0100666 0.0954525 0.001 0.0010966 0.032143 0.001 -0.0031029 0.0640414 0.001 -0.0100666 0.0954525 0 0.0010966 0.032143 0 -0.0031029 0.0640414 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="32"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0150257 -0.0951419 0 -0.010196 -0.096436 0 -0.010196 -0.096436 0.001 -0.0150257 -0.0951419 0.001 -0.0150257 -0.0951419 0 -0.010196 -0.096436 0 -0.0025 -9.0036e-17 0 -0.00808467 -0.0638331 0 -0.00389883 -0.0320385 0 -0.0150257 0.0951419 0 -0.00389883 0.0320385 0 -0.00808467 0.0638331 0 -0.010196 0.096436 0 0.0025 -9.12607e-17 0 0.00108214 0.0324742 0 -0.00316063 0.0647013 0 -0.00316063 -0.0647013 0 0.00108214 -0.0324742 0 -0.010196 -0.096436 0 -0.010196 -0.096436 0.001 0.0025 -9.12607e-17 0.001 -0.00316063 -0.0647013 0.001 0.00108214 -0.0324742 0.001 0.0025 -9.12607e-17 0 -0.00316063 -0.0647013 0 0.00108214 -0.0324742 0 -0.0150257 -0.0951419 0.001 -0.010196 -0.096436 0.001 -0.0025 -9.0036e-17 0.001 -0.00808467 -0.0638331 0.001 -0.00389883 -0.0320385 0.001 -0.0150257 0.0951419 0.001 -0.00389883 0.0320385 0.001 -0.00808467 0.0638331 0.001 -0.010196 0.096436 0.001 0.0025 -9.12607e-17 0.001 0.00108214 0.0324742 0.001 -0.00316063 0.0647013 0.001 -0.00316063 -0.0647013 0.001 0.00108214 -0.0324742 0.001 -0.0150257 -0.0951419 0 -0.0150257 -0.0951419 0.001 -0.0025 -9.0036e-17 0.001 -0.00808467 -0.0638331 0.001 -0.00389883 -0.0320385 0.001 -0.0025 -9.0036e-17 0 -0.00808467 -0.0638331 0 -0.00389883 -0.0320385 0 -0.0025 -9.0036e-17 0 -0.0025 -9.0036e-17 0.001 -0.0150257 0.0951419 0.001 -0.00389883 0.0320385 0.001 -0.00808467 0.0638331 0.001 -0.0150257 0.0951419 0 -0.00389883 0.0320385 0 -0.00808467 0.0638331 0 -0.0150257 0.0951419 0 -0.010196 0.096436 0 -0.010196 0.096436 0.001 -0.0150257 0.0951419 0.001 0.0025 -9.12607e-17 0 0.0025 -9.12607e-17 0.001 -0.010196 0.096436 0.001 0.00108214 0.0324742 0.001 -0.00316063 0.0647013 0.001 -0.010196 0.096436 0 0.00108214 0.0324742 0 -0.00316063 0.0647013 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="33"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0152335 -0.0967207 0 -0.0104039 -0.0980148 0 -0.0104039 -0.0980148 0.001 -0.0152335 -0.0967207 0.001 -0.0152335 -0.0967207 0 -0.0104039 -0.0980148 0 -0.0025 -9.15301e-17 0 -0.00817734 -0.0648923 0 -0.00392204 -0.0325701 0 -0.0152335 0.0967207 0 -0.00392204 0.0325701 0 -0.00817734 0.0648923 0 -0.0104039 0.0980148 0 0.0025 -9.27547e-17 0 0.00105893 0.0330059 0 -0.0032533 0.0657606 0 -0.0032533 -0.0657606 0 0.00105893 -0.0330059 0 -0.0104039 -0.0980148 0 -0.0104039 -0.0980148 0.001 0.0025 -9.27547e-17 0.001 -0.0032533 -0.0657606 0.001 0.00105893 -0.0330059 0.001 0.0025 -9.27547e-17 0 -0.0032533 -0.0657606 0 0.00105893 -0.0330059 0 -0.0152335 -0.0967207 0.001 -0.0104039 -0.0980148 0.001 -0.0025 -9.15301e-17 0.001 -0.00817734 -0.0648923 0.001 -0.00392204 -0.0325701 0.001 -0.0152335 0.0967207 0.001 -0.00392204 0.0325701 0.001 -0.00817734 0.0648923 0.001 -0.0104039 0.0980148 0.001 0.0025 -9.27547e-17 0.001 0.00105893 0.0330059 0.001 -0.0032533 0.0657606 0.001 -0.0032533 -0.0657606 0.001 0.00105893 -0.0330059 0.001 -0.0152335 -0.0967207 0 -0.0152335 -0.0967207 0.001 -0.0025 -9.15301e-17 0.001 -0.00817734 -0.0648923 0.001 -0.00392204 -0.0325701 0.001 -0.0025 -9.15301e-17 0 -0.00817734 -0.0648923 0 -0.00392204 -0.0325701 0 -0.0025 -9.15301e-17 0 -0.0025 -9.15301e-17 0.001 -0.0152335 0.0967207 0.001 -0.00392204 0.0325701 0.001 -0.00817734 0.0648923 0.001 -0.0152335 0.0967207 0 -0.00392204 0.0325701 0 -0.00817734 0.0648923 0 -0.0152335 0.0967207 0 -0.0104039 0.0980148 0 -0.0104039 0.0980148 0.001 -0.0152335 0.0967207 0.001 0.0025 -9.27547e-17 0 0.0025 -9.27547e-17 0.001 -0.0104039 0.0980148 0.001 0.00105893 0.0330059 0.001 -0.0032533 0.0657606 0.001 -0.0104039 0.0980148 0 0.00105893 0.0330059 0 -0.0032533 0.0657606 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="34"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0153596 -0.0976783 0 -0.01053 -0.0989724 0 -0.01053 -0.0989724 0.001 -0.0153596 -0.0976783 0.001 -0.0153596 -0.0976783 0 -0.01053 -0.0989724 0 -0.0025 -9.24363e-17 0 -0.00823355 -0.0655348 0 -0.00393612 -0.0328926 0 -0.0153596 0.0976783 0 -0.00393612 0.0328926 0 -0.00823355 0.0655348 0 -0.01053 0.0989724 0 0.0025 -9.3661e-17 0 0.00104485 0.0333284 0 -0.00330952 0.0664031 0 -0.00330952 -0.0664031 0 0.00104485 -0.0333284 0 -0.01053 -0.0989724 0 -0.01053 -0.0989724 0.001 0.0025 -9.3661e-17 0.001 -0.00330952 -0.0664031 0.001 0.00104485 -0.0333284 0.001 0.0025 -9.3661e-17 0 -0.00330952 -0.0664031 0 0.00104485 -0.0333284 0 -0.0153596 -0.0976783 0.001 -0.01053 -0.0989724 0.001 -0.0025 -9.24363e-17 0.001 -0.00823355 -0.0655348 0.001 -0.00393612 -0.0328926 0.001 -0.0153596 0.0976783 0.001 -0.00393612 0.0328926 0.001 -0.00823355 0.0655348 0.001 -0.01053 0.0989724 0.001 0.0025 -9.3661e-17 0.001 0.00104485 0.0333284 0.001 -0.00330952 0.0664031 0.001 -0.00330952 -0.0664031 0.001 0.00104485 -0.0333284 0.001 -0.0153596 -0.0976783 0 -0.0153596 -0.0976783 0.001 -0.0025 -9.24363e-17 0.001 -0.00823355 -0.0655348 0.001 -0.00393612 -0.0328926 0.001 -0.0025 -9.24363e-17 0 -0.00823355 -0.0655348 0 -0.00393612 -0.0328926 0 -0.0025 -9.24363e-17 0 -0.0025 -9.24363e-17 0.001 -0.0153596 0.0976783 0.001 -0.00393612 0.0328926 0.001 -0.00823355 0.0655348 0.001 -0.0153596 0.0976783 0 -0.00393612 0.0328926 0 -0.00823355 0.0655348 0 -0.0153596 0.0976783 0 -0.01053 0.0989724 0 -0.01053 0.0989724 0.001 -0.0153596 0.0976783 0.001 0.0025 -9.3661e-17 0 0.0025 -9.3661e-17 0.001 -0.01053 0.0989724 0.001 0.00104485 0.0333284 0.001 -0.00330952 0.0664031 0.001 -0.01053 0.0989724 0 0.00104485 0.0333284 0 -0.00330952 0.0664031 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="35"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0155709 -0.099283 0 -0.0107412 -0.100577 0 -0.0107412 -0.100577 0.001 -0.0155709 -0.099283 0.001 -0.0155709 -0.099283 0 -0.0107412 -0.100577 0 -0.0025 -9.39549e-17 0 -0.00832775 -0.0666114 0 -0.00395971 -0.0334329 0 -0.0155709 0.099283 0 -0.00395971 0.0334329 0 -0.00832775 0.0666114 0 -0.0107412 0.100577 0 0.0025 -9.51795e-17 0 0.00102126 0.0338687 0 -0.00340371 0.0674797 0 -0.00340371 -0.0674797 0 0.00102126 -0.0338687 0 -0.0107412 -0.100577 0 -0.0107412 -0.100577 0.001 0.0025 -9.51795e-17 0.001 -0.00340371 -0.0674797 0.001 0.00102126 -0.0338687 0.001 0.0025 -9.51795e-17 0 -0.00340371 -0.0674797 0 0.00102126 -0.0338687 0 -0.0155709 -0.099283 0.001 -0.0107412 -0.100577 0.001 -0.0025 -9.39549e-17 0.001 -0.00832775 -0.0666114 0.001 -0.00395971 -0.0334329 0.001 -0.0155709 0.099283 0.001 -0.00395971 0.0334329 0.001 -0.00832775 0.0666114 0.001 -0.0107412 0.100577 0.001 0.0025 -9.51795e-17 0.001 0.00102126 0.0338687 0.001 -0.00340371 0.0674797 0.001 -0.00340371 -0.0674797 0.001 0.00102126 -0.0338687 0.001 -0.0155709 -0.099283 0 -0.0155709 -0.099283 0.001 -0.0025 -9.39549e-17 0.001 -0.00832775 -0.0666114 0.001 -0.00395971 -0.0334329 0.001 -0.0025 -9.39549e-17 0 -0.00832775 -0.0666114 0 -0.00395971 -0.0334329 0 -0.0025 -9.39549e-17 0 -0.0025 -9.39549e-17 0.001 -0.0155709 0.099283 0.001 -0.00395971 0.0334329 0.001 -0.00832775 0.0666114 0.001 -0.0155709 0.099283 0 -0.00395971 0.0334329 0 -0.00832775 0.0666114 0 -0.0155709 0.099283 0 -0.0107412 0.100577 0 -0.0107412 0.100577 0.001 -0.0155709 0.099283 0.001 0.0025 -9.51795e-17 0 0.0025 -9.51795e-17 0.001 -0.0107412 0.100577 0.001 0.00102126 0.0338687 0.001 -0.00340371 0.0674797 0.001 -0.0107412 0.100577 0 0.00102126 0.0338687 0 -0.00340371 0.0674797 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="36"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0156935 -0.100215 0 -0.0108639 -0.101509 0 -0.0108639 -0.101509 0.001 -0.0156935 -0.100215 0.001 -0.0156935 -0.100215 0 -0.0108639 -0.101509 0 -0.0025 -9.48366e-17 0 -0.00838244 -0.0672366 0 -0.00397341 -0.0337467 0 -0.0156935 0.100215 0 -0.00397341 0.0337467 0 -0.00838244 0.0672366 0 -0.0108639 0.101509 0 0.0025 -9.60613e-17 0 0.00100756 0.0341825 0 -0.0034584 0.0681048 0 -0.0034584 -0.0681048 0 0.00100756 -0.0341825 0 -0.0108639 -0.101509 0 -0.0108639 -0.101509 0.001 0.0025 -9.60613e-17 0.001 -0.0034584 -0.0681048 0.001 0.00100756 -0.0341825 0.001 0.0025 -9.60613e-17 0 -0.0034584 -0.0681048 0 0.00100756 -0.0341825 0 -0.0156935 -0.100215 0.001 -0.0108639 -0.101509 0.001 -0.0025 -9.48366e-17 0.001 -0.00838244 -0.0672366 0.001 -0.00397341 -0.0337467 0.001 -0.0156935 0.100215 0.001 -0.00397341 0.0337467 0.001 -0.00838244 0.0672366 0.001 -0.0108639 0.101509 0.001 0.0025 -9.60613e-17 0.001 0.00100756 0.0341825 0.001 -0.0034584 0.0681048 0.001 -0.0034584 -0.0681048 0.001 0.00100756 -0.0341825 0.001 -0.0156935 -0.100215 0 -0.0156935 -0.100215 0.001 -0.0025 -9.48366e-17 0.001 -0.00838244 -0.0672366 0.001 -0.00397341 -0.0337467 0.001 -0.0025 -9.48366e-17 0 -0.00838244 -0.0672366 0 -0.00397341 -0.0337467 0 -0.0025 -9.48366e-17 0 -0.0025 -9.48366e-17 0.001 -0.0156935 0.100215 0.001 -0.00397341 0.0337467 0.001 -0.00838244 0.0672366 0.001 -0.0156935 0.100215 0 -0.00397341 0.0337467 0 -0.00838244 0.0672366 0 -0.0156935 0.100215 0 -0.0108639 0.101509 0 -0.0108639 0.101509 0.001 -0.0156935 0.100215 0.001 0.0025 -9.60613e-17 0 0.0025 -9.60613e-17 0.001 -0.0108639 0.101509 0.001 0.00100756 0.0341825 0.001 -0.0034584 0.0681048 0.001 -0.0108639 0.101509 0 0.00100756 0.0341825 0 -0.0034584 0.0681048 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="37"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0159048 -0.101819 0 -0.0110752 -0.103114 0 -0.0110752 -0.103114 0.001 -0.0159048 -0.101819 0.001 -0.0159048 -0.101819 0 -0.0110752 -0.103114 0 -0.0025 -9.63552e-17 0 -0.00847663 -0.0683132 0 -0.00399701 -0.0342871 0 -0.0159048 0.101819 0 -0.00399701 0.0342871 0 -0.00847663 0.0683132 0 -0.0110752 0.103114 0 0.0025 -9.75799e-17 0 0.000983968 0.0347228 0 -0.00355259 0.0691814 0 -0.00355259 -0.0691814 0 0.000983968 -0.0347228 0 -0.0110752 -0.103114 0 -0.0110752 -0.103114 0.001 0.0025 -9.75799e-17 0.001 -0.00355259 -0.0691814 0.001 0.000983968 -0.0347228 0.001 0.0025 -9.75799e-17 0 -0.00355259 -0.0691814 0 0.000983968 -0.0347228 0 -0.0159048 -0.101819 0.001 -0.0110752 -0.103114 0.001 -0.0025 -9.63552e-17 0.001 -0.00847663 -0.0683132 0.001 -0.00399701 -0.0342871 0.001 -0.0159048 0.101819 0.001 -0.00399701 0.0342871 0.001 -0.00847663 0.0683132 0.001 -0.0110752 0.103114 0.001 0.0025 -9.75799e-17 0.001 0.000983968 0.0347228 0.001 -0.00355259 0.0691814 0.001 -0.00355259 -0.0691814 0.001 0.000983968 -0.0347228 0.001 -0.0159048 -0.101819 0 -0.0159048 -0.101819 0.001 -0.0025 -9.63552e-17 0.001 -0.00847663 -0.0683132 0.001 -0.00399701 -0.0342871 0.001 -0.0025 -9.63552e-17 0 -0.00847663 -0.0683132 0 -0.00399701 -0.0342871 0 -0.0025 -9.63552e-17 0 -0.0025 -9.63552e-17 0.001 -0.0159048 0.101819 0.001 -0.00399701 0.0342871 0.001 -0.00847663 0.0683132 0.001 -0.0159048 0.101819 0 -0.00399701 0.0342871 0 -0.00847663 0.0683132 0 -0.0159048 0.101819 0 -0.0110752 0.103114 0 -0.0110752 0.103114 0.001 -0.0159048 0.101819 0.001 0.0025 -9.75799e-17 0 0.0025 -9.75799e-17 0.001 -0.0110752 0.103114 0.001 0.000983968 0.0347228 0.001 -0.00355259 0.0691814 0.001 -0.0110752 0.103114 0 0.000983968 0.0347228 0 -0.00355259 0.0691814 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="20"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0130085 -0.0798198 0 -0.00817885 -0.0811139 0 -0.00817885 -0.0811139 0.001 -0.0130085 -0.0798198 0.001 -0.0130085 -0.0798198 0 -0.00817885 -0.0811139 0 -0.0025 -7.55362e-17 0 -0.00718529 -0.0535531 0 -0.00367356 -0.0268788 0 -0.0130085 0.0798198 0 -0.00367356 0.0268788 0 -0.00718529 0.0535531 0 -0.00817885 0.0811139 0 0.0025 -7.67609e-17 0 0.00130742 0.0273146 0 -0.00226125 0.0544213 0 -0.00226125 -0.0544213 0 0.00130742 -0.0273146 0 -0.00817885 -0.0811139 0 -0.00817885 -0.0811139 0.001 0.0025 -7.67609e-17 0.001 -0.00226125 -0.0544213 0.001 0.00130742 -0.0273146 0.001 0.0025 -7.67609e-17 0 -0.00226125 -0.0544213 0 0.00130742 -0.0273146 0 -0.0130085 -0.0798198 0.001 -0.00817885 -0.0811139 0.001 -0.0025 -7.55362e-17 0.001 -0.00718529 -0.0535531 0.001 -0.00367356 -0.0268788 0.001 -0.0130085 0.0798198 0.001 -0.00367356 0.0268788 0.001 -0.00718529 0.0535531 0.001 -0.00817885 0.0811139 0.001 0.0025 -7.67609e-17 0.001 0.00130742 0.0273146 0.001 -0.00226125 0.0544213 0.001 -0.00226125 -0.0544213 0.001 0.00130742 -0.0273146 0.001 -0.0130085 -0.0798198 0 -0.0130085 -0.0798198 0.001 -0.0025 -7.55362e-17 0.001 -0.00718529 -0.0535531 0.001 -0.00367356 -0.0268788 0.001 -0.0025 -7.55362e-17 0 -0.00718529 -0.0535531 0 -0.00367356 -0.0268788 0 -0.0025 -7.55362e-17 0 -0.0025 -7.55362e-17 0.001 -0.0130085 0.0798198 0.001 -0.00367356 0.0268788 0.001 -0.00718529 0.0535531 0.001 -0.0130085 0.0798198 0 -0.00367356 0.0268788 0 -0.00718529 0.0535531 0 -0.0130085 0.0798198 0 -0.00817885 0.0811139 0 -0.00817885 0.0811139 0.001 -0.0130085 0.0798198 0.001 0.0025 -7.67609e-17 0 0.0025 -7.67609e-17 0.001 -0.00817885 0.0811139 0.001 0.00130742 0.0273146 0.001 -0.00226125 0.0544213 0.001 -0.00817885 0.0811139 0 0.00130742 0.0273146 0 -0.00226125 0.0544213 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="38"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0160309 -0.102777 0 -0.0112012 -0.104071 0 -0.0112012 -0.104071 0.001 -0.0160309 -0.102777 0.001 -0.0160309 -0.102777 0 -0.0112012 -0.104071 0 -0.0025 -9.72614e-17 0 -0.00853284 -0.0689557 0 -0.00401109 -0.0346095 0 -0.0160309 0.102777 0 -0.00401109 0.0346095 0 -0.00853284 0.0689557 0 -0.0112012 0.104071 0 0.0025 -9.84861e-17 0 0.000969888 0.0350453 0 -0.0036088 0.0698239 0 -0.0036088 -0.0698239 0 0.000969888 -0.0350453 0 -0.0112012 -0.104071 0 -0.0112012 -0.104071 0.001 0.0025 -9.84861e-17 0.001 -0.0036088 -0.0698239 0.001 0.000969888 -0.0350453 0.001 0.0025 -9.84861e-17 0 -0.0036088 -0.0698239 0 0.000969888 -0.0350453 0 -0.0160309 -0.102777 0.001 -0.0112012 -0.104071 0.001 -0.0025 -9.72614e-17 0.001 -0.00853284 -0.0689557 0.001 -0.00401109 -0.0346095 0.001 -0.0160309 0.102777 0.001 -0.00401109 0.0346095 0.001 -0.00853284 0.0689557 0.001 -0.0112012 0.104071 0.001 0.0025 -9.84861e-17 0.001 0.000969888 0.0350453 0.001 -0.0036088 0.0698239 0.001 -0.0036088 -0.0698239 0.001 0.000969888 -0.0350453 0.001 -0.0160309 -0.102777 0 -0.0160309 -0.102777 0.001 -0.0025 -9.72614e-17 0.001 -0.00853284 -0.0689557 0.001 -0.00401109 -0.0346095 0.001 -0.0025 -9.72614e-17 0 -0.00853284 -0.0689557 0 -0.00401109 -0.0346095 0 -0.0025 -9.72614e-17 0 -0.0025 -9.72614e-17 0.001 -0.0160309 0.102777 0.001 -0.00401109 0.0346095 0.001 -0.00853284 0.0689557 0.001 -0.0160309 0.102777 0 -0.00401109 0.0346095 0 -0.00853284 0.0689557 0 -0.0160309 0.102777 0 -0.0112012 0.104071 0 -0.0112012 0.104071 0.001 -0.0160309 0.102777 0.001 0.0025 -9.84861e-17 0 0.0025 -9.84861e-17 0.001 -0.0112012 0.104071 0.001 0.000969888 0.0350453 0.001 -0.0036088 0.0698239 0.001 -0.0112012 0.104071 0 0.000969888 0.0350453 0 -0.0036088 0.0698239 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="39"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0162421 -0.104382 0 -0.0114125 -0.105676 0 -0.0114125 -0.105676 0.001 -0.0162421 -0.104382 0.001 -0.0162421 -0.104382 0 -0.0114125 -0.105676 0 -0.0025 -9.878e-17 0 -0.00862703 -0.0700323 0 -0.00403468 -0.0351499 0 -0.0162421 0.104382 0 -0.00403468 0.0351499 0 -0.00862703 0.0700323 0 -0.0114125 0.105676 0 0.0025 -1.00005e-16 0 0.000946295 0.0355857 0 -0.00370299 0.0709006 0 -0.00370299 -0.0709006 0 0.000946295 -0.0355857 0 -0.0114125 -0.105676 0 -0.0114125 -0.105676 0.001 0.0025 -1.00005e-16 0.001 -0.00370299 -0.0709006 0.001 0.000946295 -0.0355857 0.001 0.0025 -1.00005e-16 0 -0.00370299 -0.0709006 0 0.000946295 -0.0355857 0 -0.0162421 -0.104382 0.001 -0.0114125 -0.105676 0.001 -0.0025 -9.878e-17 0.001 -0.00862703 -0.0700323 0.001 -0.00403468 -0.0351499 0.001 -0.0162421 0.104382 0.001 -0.00403468 0.0351499 0.001 -0.00862703 0.0700323 0.001 -0.0114125 0.105676 0.001 0.0025 -1.00005e-16 0.001 0.000946295 0.0355857 0.001 -0.00370299 0.0709006 0.001 -0.00370299 -0.0709006 0.001 0.000946295 -0.0355857 0.001 -0.0162421 -0.104382 0 -0.0162421 -0.104382 0.001 -0.0025 -9.878e-17 0.001 -0.00862703 -0.0700323 0.001 -0.00403468 -0.0351499 0.001 -0.0025 -9.878e-17 0 -0.00862703 -0.0700323 0 -0.00403468 -0.0351499 0 -0.0025 -9.878e-17 0 -0.0025 -9.878e-17 0.001 -0.0162421 0.104382 0.001 -0.00403468 0.0351499 0.001 -0.00862703 0.0700323 0.001 -0.0162421 0.104382 0 -0.00403468 0.0351499 0 -0.00862703 0.0700323 0 -0.0162421 0.104382 0 -0.0114125 0.105676 0 -0.0114125 0.105676 0.001 -0.0162421 0.104382 0.001 0.0025 -1.00005e-16 0 0.0025 -1.00005e-16 0.001 -0.0114125 0.105676 0.001 0.000946295 0.0355857 0.001 -0.00370299 0.0709006 0.001 -0.0114125 0.105676 0 0.000946295 0.0355857 0 -0.00370299 0.0709006 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="40"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0163648 -0.105313 0 -0.0115352 -0.106608 0 -0.0115352 -0.106608 0.001 -0.0163648 -0.105313 0.001 -0.0163648 -0.105313 0 -0.0115352 -0.106608 0 -0.0025 -9.96618e-17 0 -0.00868173 -0.0706574 0 -0.00404838 -0.0354637 0 -0.0163648 0.105313 0 -0.00404838 0.0354637 0 -0.00868173 0.0706574 0 -0.0115352 0.106608 0 0.0025 -1.00886e-16 0 0.000932596 0.0358995 0 -0.00375769 0.0715257 0 -0.00375769 -0.0715257 0 0.000932596 -0.0358995 0 -0.0115352 -0.106608 0 -0.0115352 -0.106608 0.001 0.0025 -1.00886e-16 0.001 -0.00375769 -0.0715257 0.001 0.000932596 -0.0358995 0.001 0.0025 -1.00886e-16 0 -0.00375769 -0.0715257 0 0.000932596 -0.0358995 0 -0.0163648 -0.105313 0.001 -0.0115352 -0.106608 0.001 -0.0025 -9.96618e-17 0.001 -0.00868173 -0.0706574 0.001 -0.00404838 -0.0354637 0.001 -0.0163648 0.105313 0.001 -0.00404838 0.0354637 0.001 -0.00868173 0.0706574 0.001 -0.0115352 0.106608 0.001 0.0025 -1.00886e-16 0.001 0.000932596 0.0358995 0.001 -0.00375769 0.0715257 0.001 -0.00375769 -0.0715257 0.001 0.000932596 -0.0358995 0.001 -0.0163648 -0.105313 0 -0.0163648 -0.105313 0.001 -0.0025 -9.96618e-17 0.001 -0.00868173 -0.0706574 0.001 -0.00404838 -0.0354637 0.001 -0.0025 -9.96618e-17 0 -0.00868173 -0.0706574 0 -0.00404838 -0.0354637 0 -0.0025 -9.96618e-17 0 -0.0025 -9.96618e-17 0.001 -0.0163648 0.105313 0.001 -0.00404838 0.0354637 0.001 -0.00868173 0.0706574 0.001 -0.0163648 0.105313 0 -0.00404838 0.0354637 0 -0.00868173 0.0706574 0 -0.0163648 0.105313 0 -0.0115352 0.106608 0 -0.0115352 0.106608 0.001 -0.0163648 0.105313 0.001 0.0025 -1.00886e-16 0 0.0025 -1.00886e-16 0.001 -0.0115352 0.106608 0.001 0.000932596 0.0358995 0.001 -0.00375769 0.0715257 0.001 -0.0115352 0.106608 0 0.000932596 0.0358995 0 -0.00375769 0.0715257 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="41"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.016576 -0.106918 0 -0.0117464 -0.108212 0 -0.0117464 -0.108212 0.001 -0.016576 -0.106918 0.001 -0.016576 -0.106918 0 -0.0117464 -0.108212 0 -0.0025 -1.0118e-16 0 -0.00877592 -0.0717341 0 -0.00407197 -0.036004 0 -0.016576 0.106918 0 -0.00407197 0.036004 0 -0.00877592 0.0717341 0 -0.0117464 0.108212 0 0.0025 -1.02405e-16 0 0.000909003 0.0364398 0 -0.00385188 0.0726023 0 -0.00385188 -0.0726023 0 0.000909003 -0.0364398 0 -0.0117464 -0.108212 0 -0.0117464 -0.108212 0.001 0.0025 -1.02405e-16 0.001 -0.00385188 -0.0726023 0.001 0.000909003 -0.0364398 0.001 0.0025 -1.02405e-16 0 -0.00385188 -0.0726023 0 0.000909003 -0.0364398 0 -0.016576 -0.106918 0.001 -0.0117464 -0.108212 0.001 -0.0025 -1.0118e-16 0.001 -0.00877592 -0.0717341 0.001 -0.00407197 -0.036004 0.001 -0.016576 0.106918 0.001 -0.00407197 0.036004 0.001 -0.00877592 0.0717341 0.001 -0.0117464 0.108212 0.001 0.0025 -1.02405e-16 0.001 0.000909003 0.0364398 0.001 -0.00385188 0.0726023 0.001 -0.00385188 -0.0726023 0.001 0.000909003 -0.0364398 0.001 -0.016576 -0.106918 0 -0.016576 -0.106918 0.001 -0.0025 -1.0118e-16 0.001 -0.00877592 -0.0717341 0.001 -0.00407197 -0.036004 0.001 -0.0025 -1.0118e-16 0 -0.00877592 -0.0717341 0 -0.00407197 -0.036004 0 -0.0025 -1.0118e-16 0 -0.0025 -1.0118e-16 0.001 -0.016576 0.106918 0.001 -0.00407197 0.036004 0.001 -0.00877592 0.0717341 0.001 -0.016576 0.106918 0 -0.00407197 0.036004 0 -0.00877592 0.0717341 0 -0.016576 0.106918 0 -0.0117464 0.108212 0 -0.0117464 0.108212 0.001 -0.016576 0.106918 0.001 0.0025 -1.02405e-16 0 0.0025 -1.02405e-16 0.001 -0.0117464 0.108212 0.001 0.000909003 0.0364398 0.001 -0.00385188 0.0726023 0.001 -0.0117464 0.108212 0 0.000909003 0.0364398 0 -0.00385188 0.0726023 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="42"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0166987 -0.10785 0 -0.0118691 -0.109144 0 -0.0118691 -0.109144 0.001 -0.0166987 -0.10785 0.001 -0.0166987 -0.10785 0 -0.0118691 -0.109144 0 -0.0025 -1.02062e-16 0 -0.00883061 -0.0723592 0 -0.00408567 -0.0363178 0 -0.0166987 0.10785 0 -0.00408567 0.0363178 0 -0.00883061 0.0723592 0 -0.0118691 0.109144 0 0.0025 -1.03287e-16 0 0.000895304 0.0367536 0 -0.00390657 0.0732274 0 -0.00390657 -0.0732274 0 0.000895304 -0.0367536 0 -0.0118691 -0.109144 0 -0.0118691 -0.109144 0.001 0.0025 -1.03287e-16 0.001 -0.00390657 -0.0732274 0.001 0.000895304 -0.0367536 0.001 0.0025 -1.03287e-16 0 -0.00390657 -0.0732274 0 0.000895304 -0.0367536 0 -0.0166987 -0.10785 0.001 -0.0118691 -0.109144 0.001 -0.0025 -1.02062e-16 0.001 -0.00883061 -0.0723592 0.001 -0.00408567 -0.0363178 0.001 -0.0166987 0.10785 0.001 -0.00408567 0.0363178 0.001 -0.00883061 0.0723592 0.001 -0.0118691 0.109144 0.001 0.0025 -1.03287e-16 0.001 0.000895304 0.0367536 0.001 -0.00390657 0.0732274 0.001 -0.00390657 -0.0732274 0.001 0.000895304 -0.0367536 0.001 -0.0166987 -0.10785 0 -0.0166987 -0.10785 0.001 -0.0025 -1.02062e-16 0.001 -0.00883061 -0.0723592 0.001 -0.00408567 -0.0363178 0.001 -0.0025 -1.02062e-16 0 -0.00883061 -0.0723592 0 -0.00408567 -0.0363178 0 -0.0025 -1.02062e-16 0 -0.0025 -1.02062e-16 0.001 -0.0166987 0.10785 0.001 -0.00408567 0.0363178 0.001 -0.00883061 0.0723592 0.001 -0.0166987 0.10785 0 -0.00408567 0.0363178 0 -0.00883061 0.0723592 0 -0.0166987 0.10785 0 -0.0118691 0.109144 0 -0.0118691 0.109144 0.001 -0.0166987 0.10785 0.001 0.0025 -1.03287e-16 0 0.0025 -1.03287e-16 0.001 -0.0118691 0.109144 0.001 0.000895304 0.0367536 0.001 -0.00390657 0.0732274 0.001 -0.0118691 0.109144 0 0.000895304 0.0367536 0 -0.00390657 0.0732274 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="43"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0169134 -0.10948 0 -0.0120837 -0.110775 0 -0.0120837 -0.110775 0.001 -0.0169134 -0.10948 0.001 -0.0169134 -0.10948 0 -0.0120837 -0.110775 0 -0.0025 -1.03605e-16 0 -0.00892632 -0.0734532 0 -0.00410964 -0.0368669 0 -0.0169134 0.10948 0 -0.00410964 0.0368669 0 -0.00892632 0.0734532 0 -0.0120837 0.110775 0 0.0025 -1.0483e-16 0 0.000871331 0.0373027 0 -0.00400228 0.0743214 0 -0.00400228 -0.0743214 0 0.000871331 -0.0373027 0 -0.0120837 -0.110775 0 -0.0120837 -0.110775 0.001 0.0025 -1.0483e-16 0.001 -0.00400228 -0.0743214 0.001 0.000871331 -0.0373027 0.001 0.0025 -1.0483e-16 0 -0.00400228 -0.0743214 0 0.000871331 -0.0373027 0 -0.0169134 -0.10948 0.001 -0.0120837 -0.110775 0.001 -0.0025 -1.03605e-16 0.001 -0.00892632 -0.0734532 0.001 -0.00410964 -0.0368669 0.001 -0.0169134 0.10948 0.001 -0.00410964 0.0368669 0.001 -0.00892632 0.0734532 0.001 -0.0120837 0.110775 0.001 0.0025 -1.0483e-16 0.001 0.000871331 0.0373027 0.001 -0.00400228 0.0743214 0.001 -0.00400228 -0.0743214 0.001 0.000871331 -0.0373027 0.001 -0.0169134 -0.10948 0 -0.0169134 -0.10948 0.001 -0.0025 -1.03605e-16 0.001 -0.00892632 -0.0734532 0.001 -0.00410964 -0.0368669 0.001 -0.0025 -1.03605e-16 0 -0.00892632 -0.0734532 0 -0.00410964 -0.0368669 0 -0.0025 -1.03605e-16 0 -0.0025 -1.03605e-16 0.001 -0.0169134 0.10948 0.001 -0.00410964 0.0368669 0.001 -0.00892632 0.0734532 0.001 -0.0169134 0.10948 0 -0.00410964 0.0368669 0 -0.00892632 0.0734532 0 -0.0169134 0.10948 0 -0.0120837 0.110775 0 -0.0120837 0.110775 0.001 -0.0169134 0.10948 0.001 0.0025 -1.0483e-16 0 0.0025 -1.0483e-16 0.001 -0.0120837 0.110775 0.001 0.000871331 0.0373027 0.001 -0.00400228 0.0743214 0.001 -0.0120837 0.110775 0 0.000871331 0.0373027 0 -0.00400228 0.0743214 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="44"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0170326 -0.110386 0 -0.012203 -0.11168 0 -0.012203 -0.11168 0.001 -0.0170326 -0.110386 0.001 -0.0170326 -0.110386 0 -0.012203 -0.11168 0 -0.0025 -1.04462e-16 0 -0.00897949 -0.0740609 0 -0.00412296 -0.0371719 0 -0.0170326 0.110386 0 -0.00412296 0.0371719 0 -0.00897949 0.0740609 0 -0.012203 0.11168 0 0.0025 -1.05687e-16 0 0.000858012 0.0376077 0 -0.00405545 0.0749292 0 -0.00405545 -0.0749292 0 0.000858012 -0.0376077 0 -0.012203 -0.11168 0 -0.012203 -0.11168 0.001 0.0025 -1.05687e-16 0.001 -0.00405545 -0.0749292 0.001 0.000858012 -0.0376077 0.001 0.0025 -1.05687e-16 0 -0.00405545 -0.0749292 0 0.000858012 -0.0376077 0 -0.0170326 -0.110386 0.001 -0.012203 -0.11168 0.001 -0.0025 -1.04462e-16 0.001 -0.00897949 -0.0740609 0.001 -0.00412296 -0.0371719 0.001 -0.0170326 0.110386 0.001 -0.00412296 0.0371719 0.001 -0.00897949 0.0740609 0.001 -0.012203 0.11168 0.001 0.0025 -1.05687e-16 0.001 0.000858012 0.0376077 0.001 -0.00405545 0.0749292 0.001 -0.00405545 -0.0749292 0.001 0.000858012 -0.0376077 0.001 -0.0170326 -0.110386 0 -0.0170326 -0.110386 0.001 -0.0025 -1.04462e-16 0.001 -0.00897949 -0.0740609 0.001 -0.00412296 -0.0371719 0.001 -0.0025 -1.04462e-16 0 -0.00897949 -0.0740609 0 -0.00412296 -0.0371719 0 -0.0025 -1.04462e-16 0 -0.0025 -1.04462e-16 0.001 -0.0170326 0.110386 0.001 -0.00412296 0.0371719 0.001 -0.00897949 0.0740609 0.001 -0.0170326 0.110386 0 -0.00412296 0.0371719 0 -0.00897949 0.0740609 0 -0.0170326 0.110386 0 -0.012203 0.11168 0 -0.012203 0.11168 0.001 -0.0170326 0.110386 0.001 0.0025 -1.05687e-16 0 0.0025 -1.05687e-16 0.001 -0.012203 0.11168 0.001 0.000858012 0.0376077 0.001 -0.00405545 0.0749292 0.001 -0.012203 0.11168 0 0.000858012 0.0376077 0 -0.00405545 0.0749292 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="45"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0172473 -0.112017 0 -0.0124177 -0.113311 0 -0.0124177 -0.113311 0.001 -0.0172473 -0.112017 0.001 -0.0172473 -0.112017 0 -0.0124177 -0.113311 0 -0.0025 -1.06005e-16 0 -0.0090752 -0.0751549 0 -0.00414693 -0.037721 0 -0.0172473 0.112017 0 -0.00414693 0.037721 0 -0.0090752 0.0751549 0 -0.0124177 0.113311 0 0.0025 -1.0723e-16 0 0.000834039 0.0381568 0 -0.00415117 0.0760232 0 -0.00415117 -0.0760232 0 0.000834039 -0.0381568 0 -0.0124177 -0.113311 0 -0.0124177 -0.113311 0.001 0.0025 -1.0723e-16 0.001 -0.00415117 -0.0760232 0.001 0.000834039 -0.0381568 0.001 0.0025 -1.0723e-16 0 -0.00415117 -0.0760232 0 0.000834039 -0.0381568 0 -0.0172473 -0.112017 0.001 -0.0124177 -0.113311 0.001 -0.0025 -1.06005e-16 0.001 -0.0090752 -0.0751549 0.001 -0.00414693 -0.037721 0.001 -0.0172473 0.112017 0.001 -0.00414693 0.037721 0.001 -0.0090752 0.0751549 0.001 -0.0124177 0.113311 0.001 0.0025 -1.0723e-16 0.001 0.000834039 0.0381568 0.001 -0.00415117 0.0760232 0.001 -0.00415117 -0.0760232 0.001 0.000834039 -0.0381568 0.001 -0.0172473 -0.112017 0 -0.0172473 -0.112017 0.001 -0.0025 -1.06005e-16 0.001 -0.0090752 -0.0751549 0.001 -0.00414693 -0.037721 0.001 -0.0025 -1.06005e-16 0 -0.0090752 -0.0751549 0 -0.00414693 -0.037721 0 -0.0025 -1.06005e-16 0 -0.0025 -1.06005e-16 0.001 -0.0172473 0.112017 0.001 -0.00414693 0.037721 0.001 -0.0090752 0.0751549 0.001 -0.0172473 0.112017 0 -0.00414693 0.037721 0 -0.0090752 0.0751549 0 -0.0172473 0.112017 0 -0.0124177 0.113311 0 -0.0124177 0.113311 0.001 -0.0172473 0.112017 0.001 0.0025 -1.0723e-16 0 0.0025 -1.0723e-16 0.001 -0.0124177 0.113311 0.001 0.000834039 0.0381568 0.001 -0.00415117 0.0760232 0.001 -0.0124177 0.113311 0 0.000834039 0.0381568 0 -0.00415117 0.0760232 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="46"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0173666 -0.112923 0 -0.0125369 -0.114217 0 -0.0125369 -0.114217 0.001 -0.0173666 -0.112923 0.001 -0.0173666 -0.112923 0 -0.0125369 -0.114217 0 -0.0025 -1.06863e-16 0 -0.00912838 -0.0757627 0 -0.00416025 -0.0380261 0 -0.0173666 0.112923 0 -0.00416025 0.0380261 0 -0.00912838 0.0757627 0 -0.0125369 0.114217 0 0.0025 -1.08087e-16 0 0.00082072 0.0384618 0 -0.00420434 0.0766309 0 -0.00420434 -0.0766309 0 0.00082072 -0.0384618 0 -0.0125369 -0.114217 0 -0.0125369 -0.114217 0.001 0.0025 -1.08087e-16 0.001 -0.00420434 -0.0766309 0.001 0.00082072 -0.0384618 0.001 0.0025 -1.08087e-16 0 -0.00420434 -0.0766309 0 0.00082072 -0.0384618 0 -0.0173666 -0.112923 0.001 -0.0125369 -0.114217 0.001 -0.0025 -1.06863e-16 0.001 -0.00912838 -0.0757627 0.001 -0.00416025 -0.0380261 0.001 -0.0173666 0.112923 0.001 -0.00416025 0.0380261 0.001 -0.00912838 0.0757627 0.001 -0.0125369 0.114217 0.001 0.0025 -1.08087e-16 0.001 0.00082072 0.0384618 0.001 -0.00420434 0.0766309 0.001 -0.00420434 -0.0766309 0.001 0.00082072 -0.0384618 0.001 -0.0173666 -0.112923 0 -0.0173666 -0.112923 0.001 -0.0025 -1.06863e-16 0.001 -0.00912838 -0.0757627 0.001 -0.00416025 -0.0380261 0.001 -0.0025 -1.06863e-16 0 -0.00912838 -0.0757627 0 -0.00416025 -0.0380261 0 -0.0025 -1.06863e-16 0 -0.0025 -1.06863e-16 0.001 -0.0173666 0.112923 0.001 -0.00416025 0.0380261 0.001 -0.00912838 0.0757627 0.001 -0.0173666 0.112923 0 -0.00416025 0.0380261 0 -0.00912838 0.0757627 0 -0.0173666 0.112923 0 -0.0125369 0.114217 0 -0.0125369 0.114217 0.001 -0.0173666 0.112923 0.001 0.0025 -1.08087e-16 0 0.0025 -1.08087e-16 0.001 -0.0125369 0.114217 0.001 0.00082072 0.0384618 0.001 -0.00420434 0.0766309 0.001 -0.0125369 0.114217 0 0.00082072 0.0384618 0 -0.00420434 0.0766309 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="47"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0175812 -0.114553 0 -0.0127516 -0.115847 0 -0.0127516 -0.115847 0.001 -0.0175812 -0.114553 0.001 -0.0175812 -0.114553 0 -0.0127516 -0.115847 0 -0.0025 -1.08406e-16 0 -0.00922409 -0.0768567 0 -0.00418423 -0.0385751 0 -0.0175812 0.114553 0 -0.00418423 0.0385751 0 -0.00922409 0.0768567 0 -0.0127516 0.115847 0 0.0025 -1.0963e-16 0 0.000796747 0.0390109 0 -0.00430005 0.0777249 0 -0.00430005 -0.0777249 0 0.000796747 -0.0390109 0 -0.0127516 -0.115847 0 -0.0127516 -0.115847 0.001 0.0025 -1.0963e-16 0.001 -0.00430005 -0.0777249 0.001 0.000796747 -0.0390109 0.001 0.0025 -1.0963e-16 0 -0.00430005 -0.0777249 0 0.000796747 -0.0390109 0 -0.0175812 -0.114553 0.001 -0.0127516 -0.115847 0.001 -0.0025 -1.08406e-16 0.001 -0.00922409 -0.0768567 0.001 -0.00418423 -0.0385751 0.001 -0.0175812 0.114553 0.001 -0.00418423 0.0385751 0.001 -0.00922409 0.0768567 0.001 -0.0127516 0.115847 0.001 0.0025 -1.0963e-16 0.001 0.000796747 0.0390109 0.001 -0.00430005 0.0777249 0.001 -0.00430005 -0.0777249 0.001 0.000796747 -0.0390109 0.001 -0.0175812 -0.114553 0 -0.0175812 -0.114553 0.001 -0.0025 -1.08406e-16 0.001 -0.00922409 -0.0768567 0.001 -0.00418423 -0.0385751 0.001 -0.0025 -1.08406e-16 0 -0.00922409 -0.0768567 0 -0.00418423 -0.0385751 0 -0.0025 -1.08406e-16 0 -0.0025 -1.08406e-16 0.001 -0.0175812 0.114553 0.001 -0.00418423 0.0385751 0.001 -0.00922409 0.0768567 0.001 -0.0175812 0.114553 0 -0.00418423 0.0385751 0 -0.00922409 0.0768567 0 -0.0175812 0.114553 0 -0.0127516 0.115847 0 -0.0127516 0.115847 0.001 -0.0175812 0.114553 0.001 0.0025 -1.0963e-16 0 0.0025 -1.0963e-16 0.001 -0.0127516 0.115847 0.001 0.000796747 0.0390109 0.001 -0.00430005 0.0777249 0.001 -0.0127516 0.115847 0 0.000796747 0.0390109 0 -0.00430005 0.0777249 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="21"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0132095 -0.0813468 0 -0.00837988 -0.0826409 0 -0.00837988 -0.0826409 0.001 -0.0132095 -0.0813468 0.001 -0.0132095 -0.0813468 0 -0.00837988 -0.0826409 0 -0.0025 -7.69813e-17 0 -0.00727492 -0.0545776 0 -0.00369601 -0.027393 0 -0.0132095 0.0813468 0 -0.00369601 0.027393 0 -0.00727492 0.0545776 0 -0.00837988 0.0826409 0 0.0025 -7.82059e-17 0 0.00128497 0.0278288 0 -0.00235088 0.0554459 0 -0.00235088 -0.0554459 0 0.00128497 -0.0278288 0 -0.00837988 -0.0826409 0 -0.00837988 -0.0826409 0.001 0.0025 -7.82059e-17 0.001 -0.00235088 -0.0554459 0.001 0.00128497 -0.0278288 0.001 0.0025 -7.82059e-17 0 -0.00235088 -0.0554459 0 0.00128497 -0.0278288 0 -0.0132095 -0.0813468 0.001 -0.00837988 -0.0826409 0.001 -0.0025 -7.69813e-17 0.001 -0.00727492 -0.0545776 0.001 -0.00369601 -0.027393 0.001 -0.0132095 0.0813468 0.001 -0.00369601 0.027393 0.001 -0.00727492 0.0545776 0.001 -0.00837988 0.0826409 0.001 0.0025 -7.82059e-17 0.001 0.00128497 0.0278288 0.001 -0.00235088 0.0554459 0.001 -0.00235088 -0.0554459 0.001 0.00128497 -0.0278288 0.001 -0.0132095 -0.0813468 0 -0.0132095 -0.0813468 0.001 -0.0025 -7.69813e-17 0.001 -0.00727492 -0.0545776 0.001 -0.00369601 -0.027393 0.001 -0.0025 -7.69813e-17 0 -0.00727492 -0.0545776 0 -0.00369601 -0.027393 0 -0.0025 -7.69813e-17 0 -0.0025 -7.69813e-17 0.001 -0.0132095 0.0813468 0.001 -0.00369601 0.027393 0.001 -0.00727492 0.0545776 0.001 -0.0132095 0.0813468 0 -0.00369601 0.027393 0 -0.00727492 0.0545776 0 -0.0132095 0.0813468 0 -0.00837988 0.0826409 0 -0.00837988 0.0826409 0.001 -0.0132095 0.0813468 0.001 0.0025 -7.82059e-17 0 0.0025 -7.82059e-17 0.001 -0.00837988 0.0826409 0.001 0.00128497 0.0278288 0.001 -0.00235088 0.0554459 0.001 -0.00837988 0.0826409 0 0.00128497 0.0278288 0 -0.00235088 0.0554459 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="48"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0177005 -0.115459 0 -0.0128709 -0.116753 0 -0.0128709 -0.116753 0.001 -0.0177005 -0.115459 0.001 -0.0177005 -0.115459 0 -0.0128709 -0.116753 0 -0.0025 -1.09263e-16 0 -0.00927726 -0.0774645 0 -0.00419755 -0.0388802 0 -0.0177005 0.115459 0 -0.00419755 0.0388802 0 -0.00927726 0.0774645 0 -0.0128709 0.116753 0 0.0025 -1.10488e-16 0 0.000783428 0.039316 0 -0.00435322 0.0783327 0 -0.00435322 -0.0783327 0 0.000783428 -0.039316 0 -0.0128709 -0.116753 0 -0.0128709 -0.116753 0.001 0.0025 -1.10488e-16 0.001 -0.00435322 -0.0783327 0.001 0.000783428 -0.039316 0.001 0.0025 -1.10488e-16 0 -0.00435322 -0.0783327 0 0.000783428 -0.039316 0 -0.0177005 -0.115459 0.001 -0.0128709 -0.116753 0.001 -0.0025 -1.09263e-16 0.001 -0.00927726 -0.0774645 0.001 -0.00419755 -0.0388802 0.001 -0.0177005 0.115459 0.001 -0.00419755 0.0388802 0.001 -0.00927726 0.0774645 0.001 -0.0128709 0.116753 0.001 0.0025 -1.10488e-16 0.001 0.000783428 0.039316 0.001 -0.00435322 0.0783327 0.001 -0.00435322 -0.0783327 0.001 0.000783428 -0.039316 0.001 -0.0177005 -0.115459 0 -0.0177005 -0.115459 0.001 -0.0025 -1.09263e-16 0.001 -0.00927726 -0.0774645 0.001 -0.00419755 -0.0388802 0.001 -0.0025 -1.09263e-16 0 -0.00927726 -0.0774645 0 -0.00419755 -0.0388802 0 -0.0025 -1.09263e-16 0 -0.0025 -1.09263e-16 0.001 -0.0177005 0.115459 0.001 -0.00419755 0.0388802 0.001 -0.00927726 0.0774645 0.001 -0.0177005 0.115459 0 -0.00419755 0.0388802 0 -0.00927726 0.0774645 0 -0.0177005 0.115459 0 -0.0128709 0.116753 0 -0.0128709 0.116753 0.001 -0.0177005 0.115459 0.001 0.0025 -1.10488e-16 0 0.0025 -1.10488e-16 0.001 -0.0128709 0.116753 0.001 0.000783428 0.039316 0.001 -0.00435322 0.0783327 0.001 -0.0128709 0.116753 0 0.000783428 0.039316 0 -0.00435322 0.0783327 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="49"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0179186 -0.117116 0 -0.0130889 -0.11841 0 -0.0130889 -0.11841 0.001 -0.0179186 -0.117116 0.001 -0.0179186 -0.117116 0 -0.0130889 -0.11841 0 -0.0025 -1.10831e-16 0 -0.00937449 -0.0785758 0 -0.0042219 -0.039438 0 -0.0179186 0.117116 0 -0.0042219 0.039438 0 -0.00937449 0.0785758 0 -0.0130889 0.11841 0 0.0025 -1.12055e-16 0 0.000759074 0.0398738 0 -0.00445045 0.079444 0 -0.00445045 -0.079444 0 0.000759074 -0.0398738 0 -0.0130889 -0.11841 0 -0.0130889 -0.11841 0.001 0.0025 -1.12055e-16 0.001 -0.00445045 -0.079444 0.001 0.000759074 -0.0398738 0.001 0.0025 -1.12055e-16 0 -0.00445045 -0.079444 0 0.000759074 -0.0398738 0 -0.0179186 -0.117116 0.001 -0.0130889 -0.11841 0.001 -0.0025 -1.10831e-16 0.001 -0.00937449 -0.0785758 0.001 -0.0042219 -0.039438 0.001 -0.0179186 0.117116 0.001 -0.0042219 0.039438 0.001 -0.00937449 0.0785758 0.001 -0.0130889 0.11841 0.001 0.0025 -1.12055e-16 0.001 0.000759074 0.0398738 0.001 -0.00445045 0.079444 0.001 -0.00445045 -0.079444 0.001 0.000759074 -0.0398738 0.001 -0.0179186 -0.117116 0 -0.0179186 -0.117116 0.001 -0.0025 -1.10831e-16 0.001 -0.00937449 -0.0785758 0.001 -0.0042219 -0.039438 0.001 -0.0025 -1.10831e-16 0 -0.00937449 -0.0785758 0 -0.0042219 -0.039438 0 -0.0025 -1.10831e-16 0 -0.0025 -1.10831e-16 0.001 -0.0179186 0.117116 0.001 -0.0042219 0.039438 0.001 -0.00937449 0.0785758 0.001 -0.0179186 0.117116 0 -0.0042219 0.039438 0 -0.00937449 0.0785758 0 -0.0179186 0.117116 0 -0.0130889 0.11841 0 -0.0130889 0.11841 0.001 -0.0179186 0.117116 0.001 0.0025 -1.12055e-16 0 0.0025 -1.12055e-16 0.001 -0.0130889 0.11841 0.001 0.000759074 0.0398738 0.001 -0.00445045 0.079444 0.001 -0.0130889 0.11841 0 0.000759074 0.0398738 0 -0.00445045 0.079444 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="50"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0180344 -0.117996 0 -0.0132048 -0.11929 0 -0.0132048 -0.11929 0.001 -0.0180344 -0.117996 0.001 -0.0180344 -0.117996 0 -0.0132048 -0.11929 0 -0.0025 -1.11663e-16 0 -0.00942615 -0.0791662 0 -0.00423484 -0.0397343 0 -0.0180344 0.117996 0 -0.00423484 0.0397343 0 -0.00942615 0.0791662 0 -0.0132048 0.11929 0 0.0025 -1.12888e-16 0 0.000746136 0.0401701 0 -0.00450211 0.0800344 0 -0.00450211 -0.0800344 0 0.000746136 -0.0401701 0 -0.0132048 -0.11929 0 -0.0132048 -0.11929 0.001 0.0025 -1.12888e-16 0.001 -0.00450211 -0.0800344 0.001 0.000746136 -0.0401701 0.001 0.0025 -1.12888e-16 0 -0.00450211 -0.0800344 0 0.000746136 -0.0401701 0 -0.0180344 -0.117996 0.001 -0.0132048 -0.11929 0.001 -0.0025 -1.11663e-16 0.001 -0.00942615 -0.0791662 0.001 -0.00423484 -0.0397343 0.001 -0.0180344 0.117996 0.001 -0.00423484 0.0397343 0.001 -0.00942615 0.0791662 0.001 -0.0132048 0.11929 0.001 0.0025 -1.12888e-16 0.001 0.000746136 0.0401701 0.001 -0.00450211 0.0800344 0.001 -0.00450211 -0.0800344 0.001 0.000746136 -0.0401701 0.001 -0.0180344 -0.117996 0 -0.0180344 -0.117996 0.001 -0.0025 -1.11663e-16 0.001 -0.00942615 -0.0791662 0.001 -0.00423484 -0.0397343 0.001 -0.0025 -1.11663e-16 0 -0.00942615 -0.0791662 0 -0.00423484 -0.0397343 0 -0.0025 -1.11663e-16 0 -0.0025 -1.11663e-16 0.001 -0.0180344 0.117996 0.001 -0.00423484 0.0397343 0.001 -0.00942615 0.0791662 0.001 -0.0180344 0.117996 0 -0.00423484 0.0397343 0 -0.00942615 0.0791662 0 -0.0180344 0.117996 0 -0.0132048 0.11929 0 -0.0132048 0.11929 0.001 -0.0180344 0.117996 0.001 0.0025 -1.12888e-16 0 0.0025 -1.12888e-16 0.001 -0.0132048 0.11929 0.001 0.000746136 0.0401701 0.001 -0.00450211 0.0800344 0.001 -0.0132048 0.11929 0 0.000746136 0.0401701 0 -0.00450211 0.0800344 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="51"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0182525 -0.119652 0 -0.0134229 -0.120946 0 -0.0134229 -0.120946 0.001 -0.0182525 -0.119652 0.001 -0.0182525 -0.119652 0 -0.0134229 -0.120946 0 -0.0025 -1.13231e-16 0 -0.00952338 -0.0802776 0 -0.00425919 -0.0402921 0 -0.0182525 0.119652 0 -0.00425919 0.0402921 0 -0.00952338 0.0802776 0 -0.0134229 0.120946 0 0.0025 -1.14455e-16 0 0.000721782 0.0407279 0 -0.00459934 0.0811458 0 -0.00459934 -0.0811458 0 0.000721782 -0.0407279 0 -0.0134229 -0.120946 0 -0.0134229 -0.120946 0.001 0.0025 -1.14455e-16 0.001 -0.00459934 -0.0811458 0.001 0.000721782 -0.0407279 0.001 0.0025 -1.14455e-16 0 -0.00459934 -0.0811458 0 0.000721782 -0.0407279 0 -0.0182525 -0.119652 0.001 -0.0134229 -0.120946 0.001 -0.0025 -1.13231e-16 0.001 -0.00952338 -0.0802776 0.001 -0.00425919 -0.0402921 0.001 -0.0182525 0.119652 0.001 -0.00425919 0.0402921 0.001 -0.00952338 0.0802776 0.001 -0.0134229 0.120946 0.001 0.0025 -1.14455e-16 0.001 0.000721782 0.0407279 0.001 -0.00459934 0.0811458 0.001 -0.00459934 -0.0811458 0.001 0.000721782 -0.0407279 0.001 -0.0182525 -0.119652 0 -0.0182525 -0.119652 0.001 -0.0025 -1.13231e-16 0.001 -0.00952338 -0.0802776 0.001 -0.00425919 -0.0402921 0.001 -0.0025 -1.13231e-16 0 -0.00952338 -0.0802776 0 -0.00425919 -0.0402921 0 -0.0025 -1.13231e-16 0 -0.0025 -1.13231e-16 0.001 -0.0182525 0.119652 0.001 -0.00425919 0.0402921 0.001 -0.00952338 0.0802776 0.001 -0.0182525 0.119652 0 -0.00425919 0.0402921 0 -0.00952338 0.0802776 0 -0.0182525 0.119652 0 -0.0134229 0.120946 0 -0.0134229 0.120946 0.001 -0.0182525 0.119652 0.001 0.0025 -1.14455e-16 0 0.0025 -1.14455e-16 0.001 -0.0134229 0.120946 0.001 0.000721782 0.0407279 0.001 -0.00459934 0.0811458 0.001 -0.0134229 0.120946 0 0.000721782 0.0407279 0 -0.00459934 0.0811458 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="52"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0183649 -0.120506 0 -0.0135353 -0.1218 0 -0.0135353 -0.1218 0.001 -0.0183649 -0.120506 0.001 -0.0183649 -0.120506 0 -0.0135353 -0.1218 0 -0.0025 -1.14039e-16 0 -0.00957351 -0.0808506 0 -0.00427175 -0.0405797 0 -0.0183649 0.120506 0 -0.00427175 0.0405797 0 -0.00957351 0.0808506 0 -0.0135353 0.1218 0 0.0025 -1.15264e-16 0 0.000709225 0.0410155 0 -0.00464947 0.0817188 0 -0.00464947 -0.0817188 0 0.000709225 -0.0410155 0 -0.0135353 -0.1218 0 -0.0135353 -0.1218 0.001 0.0025 -1.15264e-16 0.001 -0.00464947 -0.0817188 0.001 0.000709225 -0.0410155 0.001 0.0025 -1.15264e-16 0 -0.00464947 -0.0817188 0 0.000709225 -0.0410155 0 -0.0183649 -0.120506 0.001 -0.0135353 -0.1218 0.001 -0.0025 -1.14039e-16 0.001 -0.00957351 -0.0808506 0.001 -0.00427175 -0.0405797 0.001 -0.0183649 0.120506 0.001 -0.00427175 0.0405797 0.001 -0.00957351 0.0808506 0.001 -0.0135353 0.1218 0.001 0.0025 -1.15264e-16 0.001 0.000709225 0.0410155 0.001 -0.00464947 0.0817188 0.001 -0.00464947 -0.0817188 0.001 0.000709225 -0.0410155 0.001 -0.0183649 -0.120506 0 -0.0183649 -0.120506 0.001 -0.0025 -1.14039e-16 0.001 -0.00957351 -0.0808506 0.001 -0.00427175 -0.0405797 0.001 -0.0025 -1.14039e-16 0 -0.00957351 -0.0808506 0 -0.00427175 -0.0405797 0 -0.0025 -1.14039e-16 0 -0.0025 -1.14039e-16 0.001 -0.0183649 0.120506 0.001 -0.00427175 0.0405797 0.001 -0.00957351 0.0808506 0.001 -0.0183649 0.120506 0 -0.00427175 0.0405797 0 -0.00957351 0.0808506 0 -0.0183649 0.120506 0 -0.0135353 0.1218 0 -0.0135353 0.1218 0.001 -0.0183649 0.120506 0.001 0.0025 -1.15264e-16 0 0.0025 -1.15264e-16 0.001 -0.0135353 0.1218 0.001 0.000709225 0.0410155 0.001 -0.00464947 0.0817188 0.001 -0.0135353 0.1218 0 0.000709225 0.0410155 0 -0.00464947 0.0817188 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="53"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0185864 -0.122188 0 -0.0137568 -0.123483 0 -0.0137568 -0.123483 0.001 -0.0185864 -0.122188 0.001 -0.0185864 -0.122188 0 -0.0137568 -0.123483 0 -0.0025 -1.15631e-16 0 -0.00967226 -0.0819793 0 -0.00429648 -0.0411462 0 -0.0185864 0.122188 0 -0.00429648 0.0411462 0 -0.00967226 0.0819793 0 -0.0137568 0.123483 0 0.0025 -1.16856e-16 0 0.00068449 0.041582 0 -0.00474822 0.0828475 0 -0.00474822 -0.0828475 0 0.00068449 -0.041582 0 -0.0137568 -0.123483 0 -0.0137568 -0.123483 0.001 0.0025 -1.16856e-16 0.001 -0.00474822 -0.0828475 0.001 0.00068449 -0.041582 0.001 0.0025 -1.16856e-16 0 -0.00474822 -0.0828475 0 0.00068449 -0.041582 0 -0.0185864 -0.122188 0.001 -0.0137568 -0.123483 0.001 -0.0025 -1.15631e-16 0.001 -0.00967226 -0.0819793 0.001 -0.00429648 -0.0411462 0.001 -0.0185864 0.122188 0.001 -0.00429648 0.0411462 0.001 -0.00967226 0.0819793 0.001 -0.0137568 0.123483 0.001 0.0025 -1.16856e-16 0.001 0.00068449 0.041582 0.001 -0.00474822 0.0828475 0.001 -0.00474822 -0.0828475 0.001 0.00068449 -0.041582 0.001 -0.0185864 -0.122188 0 -0.0185864 -0.122188 0.001 -0.0025 -1.15631e-16 0.001 -0.00967226 -0.0819793 0.001 -0.00429648 -0.0411462 0.001 -0.0025 -1.15631e-16 0 -0.00967226 -0.0819793 0 -0.00429648 -0.0411462 0 -0.0025 -1.15631e-16 0 -0.0025 -1.15631e-16 0.001 -0.0185864 0.122188 0.001 -0.00429648 0.0411462 0.001 -0.00967226 0.0819793 0.001 -0.0185864 0.122188 0 -0.00429648 0.0411462 0 -0.00967226 0.0819793 0 -0.0185864 0.122188 0 -0.0137568 0.123483 0 -0.0137568 0.123483 0.001 -0.0185864 0.122188 0.001 0.0025 -1.16856e-16 0 0.0025 -1.16856e-16 0.001 -0.0137568 0.123483 0.001 0.00068449 0.041582 0.001 -0.00474822 0.0828475 0.001 -0.0137568 0.123483 0 0.00068449 0.041582 0 -0.00474822 0.0828475 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="54"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0186989 -0.123043 0 -0.0138692 -0.124337 0 -0.0138692 -0.124337 0.001 -0.0186989 -0.123043 0.001 -0.0186989 -0.123043 0 -0.0138692 -0.124337 0 -0.0025 -1.16439e-16 0 -0.00972239 -0.0825523 0 -0.00430904 -0.0414338 0 -0.0186989 0.123043 0 -0.00430904 0.0414338 0 -0.00972239 0.0825523 0 -0.0138692 0.124337 0 0.0025 -1.17664e-16 0 0.000671933 0.0418696 0 -0.00479836 0.0834206 0 -0.00479836 -0.0834206 0 0.000671933 -0.0418696 0 -0.0138692 -0.124337 0 -0.0138692 -0.124337 0.001 0.0025 -1.17664e-16 0.001 -0.00479836 -0.0834206 0.001 0.000671933 -0.0418696 0.001 0.0025 -1.17664e-16 0 -0.00479836 -0.0834206 0 0.000671933 -0.0418696 0 -0.0186989 -0.123043 0.001 -0.0138692 -0.124337 0.001 -0.0025 -1.16439e-16 0.001 -0.00972239 -0.0825523 0.001 -0.00430904 -0.0414338 0.001 -0.0186989 0.123043 0.001 -0.00430904 0.0414338 0.001 -0.00972239 0.0825523 0.001 -0.0138692 0.124337 0.001 0.0025 -1.17664e-16 0.001 0.000671933 0.0418696 0.001 -0.00479836 0.0834206 0.001 -0.00479836 -0.0834206 0.001 0.000671933 -0.0418696 0.001 -0.0186989 -0.123043 0 -0.0186989 -0.123043 0.001 -0.0025 -1.16439e-16 0.001 -0.00972239 -0.0825523 0.001 -0.00430904 -0.0414338 0.001 -0.0025 -1.16439e-16 0 -0.00972239 -0.0825523 0 -0.00430904 -0.0414338 0 -0.0025 -1.16439e-16 0 -0.0025 -1.16439e-16 0.001 -0.0186989 0.123043 0.001 -0.00430904 0.0414338 0.001 -0.00972239 0.0825523 0.001 -0.0186989 0.123043 0 -0.00430904 0.0414338 0 -0.00972239 0.0825523 0 -0.0186989 0.123043 0 -0.0138692 0.124337 0 -0.0138692 0.124337 0.001 -0.0186989 0.123043 0.001 0.0025 -1.17664e-16 0 0.0025 -1.17664e-16 0.001 -0.0138692 0.124337 0.001 0.000671933 0.0418696 0.001 -0.00479836 0.0834206 0.001 -0.0138692 0.124337 0 0.000671933 0.0418696 0 -0.00479836 0.0834206 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="55"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0189203 -0.124725 0 -0.0140907 -0.126019 0 -0.0140907 -0.126019 0.001 -0.0189203 -0.124725 0.001 -0.0189203 -0.124725 0 -0.0140907 -0.126019 0 -0.0025 -1.18031e-16 0 -0.00982114 -0.0836811 0 -0.00433377 -0.0420004 0 -0.0189203 0.124725 0 -0.00433377 0.0420004 0 -0.00982114 0.0836811 0 -0.0140907 0.126019 0 0.0025 -1.19256e-16 0 0.000647199 0.0424361 0 -0.00489711 0.0845493 0 -0.00489711 -0.0845493 0 0.000647199 -0.0424361 0 -0.0140907 -0.126019 0 -0.0140907 -0.126019 0.001 0.0025 -1.19256e-16 0.001 -0.00489711 -0.0845493 0.001 0.000647199 -0.0424361 0.001 0.0025 -1.19256e-16 0 -0.00489711 -0.0845493 0 0.000647199 -0.0424361 0 -0.0189203 -0.124725 0.001 -0.0140907 -0.126019 0.001 -0.0025 -1.18031e-16 0.001 -0.00982114 -0.0836811 0.001 -0.00433377 -0.0420004 0.001 -0.0189203 0.124725 0.001 -0.00433377 0.0420004 0.001 -0.00982114 0.0836811 0.001 -0.0140907 0.126019 0.001 0.0025 -1.19256e-16 0.001 0.000647199 0.0424361 0.001 -0.00489711 0.0845493 0.001 -0.00489711 -0.0845493 0.001 0.000647199 -0.0424361 0.001 -0.0189203 -0.124725 0 -0.0189203 -0.124725 0.001 -0.0025 -1.18031e-16 0.001 -0.00982114 -0.0836811 0.001 -0.00433377 -0.0420004 0.001 -0.0025 -1.18031e-16 0 -0.00982114 -0.0836811 0 -0.00433377 -0.0420004 0 -0.0025 -1.18031e-16 0 -0.0025 -1.18031e-16 0.001 -0.0189203 0.124725 0.001 -0.00433377 0.0420004 0.001 -0.00982114 0.0836811 0.001 -0.0189203 0.124725 0 -0.00433377 0.0420004 0 -0.00982114 0.0836811 0 -0.0189203 0.124725 0 -0.0140907 0.126019 0 -0.0140907 0.126019 0.001 -0.0189203 0.124725 0.001 0.0025 -1.19256e-16 0 0.0025 -1.19256e-16 0.001 -0.0140907 0.126019 0.001 0.000647199 0.0424361 0.001 -0.00489711 0.0845493 0.001 -0.0140907 0.126019 0 0.000647199 0.0424361 0 -0.00489711 0.0845493 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="56"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0190328 -0.125579 0 -0.0142032 -0.126873 0 -0.0142032 -0.126873 0.001 -0.0190328 -0.125579 0.001 -0.0190328 -0.125579 0 -0.0142032 -0.126873 0 -0.0025 -1.1884e-16 0 -0.00987128 -0.0842541 0 -0.00434633 -0.042288 0 -0.0190328 0.125579 0 -0.00434633 0.042288 0 -0.00987128 0.0842541 0 -0.0142032 0.126873 0 0.0025 -1.20064e-16 0 0.000634641 0.0427237 0 -0.00494724 0.0851223 0 -0.00494724 -0.0851223 0 0.000634641 -0.0427237 0 -0.0142032 -0.126873 0 -0.0142032 -0.126873 0.001 0.0025 -1.20064e-16 0.001 -0.00494724 -0.0851223 0.001 0.000634641 -0.0427237 0.001 0.0025 -1.20064e-16 0 -0.00494724 -0.0851223 0 0.000634641 -0.0427237 0 -0.0190328 -0.125579 0.001 -0.0142032 -0.126873 0.001 -0.0025 -1.1884e-16 0.001 -0.00987128 -0.0842541 0.001 -0.00434633 -0.042288 0.001 -0.0190328 0.125579 0.001 -0.00434633 0.042288 0.001 -0.00987128 0.0842541 0.001 -0.0142032 0.126873 0.001 0.0025 -1.20064e-16 0.001 0.000634641 0.0427237 0.001 -0.00494724 0.0851223 0.001 -0.00494724 -0.0851223 0.001 0.000634641 -0.0427237 0.001 -0.0190328 -0.125579 0 -0.0190328 -0.125579 0.001 -0.0025 -1.1884e-16 0.001 -0.00987128 -0.0842541 0.001 -0.00434633 -0.042288 0.001 -0.0025 -1.1884e-16 0 -0.00987128 -0.0842541 0 -0.00434633 -0.042288 0 -0.0025 -1.1884e-16 0 -0.0025 -1.1884e-16 0.001 -0.0190328 0.125579 0.001 -0.00434633 0.042288 0.001 -0.00987128 0.0842541 0.001 -0.0190328 0.125579 0 -0.00434633 0.042288 0 -0.00987128 0.0842541 0 -0.0190328 0.125579 0 -0.0142032 0.126873 0 -0.0142032 0.126873 0.001 -0.0190328 0.125579 0.001 0.0025 -1.20064e-16 0 0.0025 -1.20064e-16 0.001 -0.0142032 0.126873 0.001 0.000634641 0.0427237 0.001 -0.00494724 0.0851223 0.001 -0.0142032 0.126873 0 0.000634641 0.0427237 0 -0.00494724 0.0851223 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="57"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0192543 -0.127261 0 -0.0144246 -0.128555 0 -0.0144246 -0.128555 0.001 -0.0192543 -0.127261 0.001 -0.0192543 -0.127261 0 -0.0144246 -0.128555 0 -0.0025 -1.20432e-16 0 -0.00997003 -0.0853828 0 -0.00437107 -0.0428545 0 -0.0192543 0.127261 0 -0.00437107 0.0428545 0 -0.00997003 0.0853828 0 -0.0144246 0.128555 0 0.0025 -1.21656e-16 0 0.000609907 0.0432903 0 -0.00504599 0.086251 0 -0.00504599 -0.086251 0 0.000609907 -0.0432903 0 -0.0144246 -0.128555 0 -0.0144246 -0.128555 0.001 0.0025 -1.21656e-16 0.001 -0.00504599 -0.086251 0.001 0.000609907 -0.0432903 0.001 0.0025 -1.21656e-16 0 -0.00504599 -0.086251 0 0.000609907 -0.0432903 0 -0.0192543 -0.127261 0.001 -0.0144246 -0.128555 0.001 -0.0025 -1.20432e-16 0.001 -0.00997003 -0.0853828 0.001 -0.00437107 -0.0428545 0.001 -0.0192543 0.127261 0.001 -0.00437107 0.0428545 0.001 -0.00997003 0.0853828 0.001 -0.0144246 0.128555 0.001 0.0025 -1.21656e-16 0.001 0.000609907 0.0432903 0.001 -0.00504599 0.086251 0.001 -0.00504599 -0.086251 0.001 0.000609907 -0.0432903 0.001 -0.0192543 -0.127261 0 -0.0192543 -0.127261 0.001 -0.0025 -1.20432e-16 0.001 -0.00997003 -0.0853828 0.001 -0.00437107 -0.0428545 0.001 -0.0025 -1.20432e-16 0 -0.00997003 -0.0853828 0 -0.00437107 -0.0428545 0 -0.0025 -1.20432e-16 0 -0.0025 -1.20432e-16 0.001 -0.0192543 0.127261 0.001 -0.00437107 0.0428545 0.001 -0.00997003 0.0853828 0.001 -0.0192543 0.127261 0 -0.00437107 0.0428545 0 -0.00997003 0.0853828 0 -0.0192543 0.127261 0 -0.0144246 0.128555 0 -0.0144246 0.128555 0.001 -0.0192543 0.127261 0.001 0.0025 -1.21656e-16 0 0.0025 -1.21656e-16 0.001 -0.0144246 0.128555 0.001 0.000609907 0.0432903 0.001 -0.00504599 0.086251 0.001 -0.0144246 0.128555 0 0.000609907 0.0432903 0 -0.00504599 0.086251 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="22"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0133458 -0.0823821 0 -0.00851618 -0.0836762 0 -0.00851618 -0.0836762 0.001 -0.0133458 -0.0823821 0.001 -0.0133458 -0.0823821 0 -0.00851618 -0.0836762 0 -0.0025 -7.7961e-17 0 -0.00733569 -0.0552722 0 -0.00371123 -0.0277417 0 -0.0133458 0.0823821 0 -0.00371123 0.0277417 0 -0.00733569 0.0552722 0 -0.00851618 0.0836762 0 0.0025 -7.91857e-17 0 0.00126975 0.0281775 0 -0.00241165 0.0561405 0 -0.00241165 -0.0561405 0 0.00126975 -0.0281775 0 -0.00851618 -0.0836762 0 -0.00851618 -0.0836762 0.001 0.0025 -7.91857e-17 0.001 -0.00241165 -0.0561405 0.001 0.00126975 -0.0281775 0.001 0.0025 -7.91857e-17 0 -0.00241165 -0.0561405 0 0.00126975 -0.0281775 0 -0.0133458 -0.0823821 0.001 -0.00851618 -0.0836762 0.001 -0.0025 -7.7961e-17 0.001 -0.00733569 -0.0552722 0.001 -0.00371123 -0.0277417 0.001 -0.0133458 0.0823821 0.001 -0.00371123 0.0277417 0.001 -0.00733569 0.0552722 0.001 -0.00851618 0.0836762 0.001 0.0025 -7.91857e-17 0.001 0.00126975 0.0281775 0.001 -0.00241165 0.0561405 0.001 -0.00241165 -0.0561405 0.001 0.00126975 -0.0281775 0.001 -0.0133458 -0.0823821 0 -0.0133458 -0.0823821 0.001 -0.0025 -7.7961e-17 0.001 -0.00733569 -0.0552722 0.001 -0.00371123 -0.0277417 0.001 -0.0025 -7.7961e-17 0 -0.00733569 -0.0552722 0 -0.00371123 -0.0277417 0 -0.0025 -7.7961e-17 0 -0.0025 -7.7961e-17 0.001 -0.0133458 0.0823821 0.001 -0.00371123 0.0277417 0.001 -0.00733569 0.0552722 0.001 -0.0133458 0.0823821 0 -0.00371123 0.0277417 0 -0.00733569 0.0552722 0 -0.0133458 0.0823821 0 -0.00851618 0.0836762 0 -0.00851618 0.0836762 0.001 -0.0133458 0.0823821 0.001 0.0025 -7.91857e-17 0 0.0025 -7.91857e-17 0.001 -0.00851618 0.0836762 0.001 0.00126975 0.0281775 0.001 -0.00241165 0.0561405 0.001 -0.00851618 0.0836762 0 0.00126975 0.0281775 0 -0.00241165 0.0561405 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="58"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0193633 -0.12809 0 -0.0145337 -0.129384 0 -0.0145337 -0.129384 0.001 -0.0193633 -0.12809 0.001 -0.0193633 -0.12809 0 -0.0145337 -0.129384 0 -0.0025 -1.21216e-16 0 -0.0100186 -0.0859385 0 -0.00438324 -0.0431334 0 -0.0193633 0.12809 0 -0.00438324 0.0431334 0 -0.0100186 0.0859385 0 -0.0145337 0.129384 0 0.0025 -1.2244e-16 0 0.00059773 0.0435692 0 -0.0050946 0.0868067 0 -0.0050946 -0.0868067 0 0.00059773 -0.0435692 0 -0.0145337 -0.129384 0 -0.0145337 -0.129384 0.001 0.0025 -1.2244e-16 0.001 -0.0050946 -0.0868067 0.001 0.00059773 -0.0435692 0.001 0.0025 -1.2244e-16 0 -0.0050946 -0.0868067 0 0.00059773 -0.0435692 0 -0.0193633 -0.12809 0.001 -0.0145337 -0.129384 0.001 -0.0025 -1.21216e-16 0.001 -0.0100186 -0.0859385 0.001 -0.00438324 -0.0431334 0.001 -0.0193633 0.12809 0.001 -0.00438324 0.0431334 0.001 -0.0100186 0.0859385 0.001 -0.0145337 0.129384 0.001 0.0025 -1.2244e-16 0.001 0.00059773 0.0435692 0.001 -0.0050946 0.0868067 0.001 -0.0050946 -0.0868067 0.001 0.00059773 -0.0435692 0.001 -0.0193633 -0.12809 0 -0.0193633 -0.12809 0.001 -0.0025 -1.21216e-16 0.001 -0.0100186 -0.0859385 0.001 -0.00438324 -0.0431334 0.001 -0.0025 -1.21216e-16 0 -0.0100186 -0.0859385 0 -0.00438324 -0.0431334 0 -0.0025 -1.21216e-16 0 -0.0025 -1.21216e-16 0.001 -0.0193633 0.12809 0.001 -0.00438324 0.0431334 0.001 -0.0100186 0.0859385 0.001 -0.0193633 0.12809 0 -0.00438324 0.0431334 0 -0.0100186 0.0859385 0 -0.0193633 0.12809 0 -0.0145337 0.129384 0 -0.0145337 0.129384 0.001 -0.0193633 0.12809 0.001 0.0025 -1.2244e-16 0 0.0025 -1.2244e-16 0.001 -0.0145337 0.129384 0.001 0.00059773 0.0435692 0.001 -0.0050946 0.0868067 0.001 -0.0145337 0.129384 0 0.00059773 0.0435692 0 -0.0050946 0.0868067 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="59"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0195848 -0.129772 0 -0.0147552 -0.131066 0 -0.0147552 -0.131066 0.001 -0.0195848 -0.129772 0.001 -0.0195848 -0.129772 0 -0.0147552 -0.131066 0 -0.0025 -1.22808e-16 0 -0.0101174 -0.0870672 0 -0.00440798 -0.0436999 0 -0.0195848 0.129772 0 -0.00440798 0.0436999 0 -0.0101174 0.0870672 0 -0.0147552 0.131066 0 0.0025 -1.24032e-16 0 0.000572995 0.0441357 0 -0.00519335 0.0879354 0 -0.00519335 -0.0879354 0 0.000572995 -0.0441357 0 -0.0147552 -0.131066 0 -0.0147552 -0.131066 0.001 0.0025 -1.24032e-16 0.001 -0.00519335 -0.0879354 0.001 0.000572995 -0.0441357 0.001 0.0025 -1.24032e-16 0 -0.00519335 -0.0879354 0 0.000572995 -0.0441357 0 -0.0195848 -0.129772 0.001 -0.0147552 -0.131066 0.001 -0.0025 -1.22808e-16 0.001 -0.0101174 -0.0870672 0.001 -0.00440798 -0.0436999 0.001 -0.0195848 0.129772 0.001 -0.00440798 0.0436999 0.001 -0.0101174 0.0870672 0.001 -0.0147552 0.131066 0.001 0.0025 -1.24032e-16 0.001 0.000572995 0.0441357 0.001 -0.00519335 0.0879354 0.001 -0.00519335 -0.0879354 0.001 0.000572995 -0.0441357 0.001 -0.0195848 -0.129772 0 -0.0195848 -0.129772 0.001 -0.0025 -1.22808e-16 0.001 -0.0101174 -0.0870672 0.001 -0.00440798 -0.0436999 0.001 -0.0025 -1.22808e-16 0 -0.0101174 -0.0870672 0 -0.00440798 -0.0436999 0 -0.0025 -1.22808e-16 0 -0.0025 -1.22808e-16 0.001 -0.0195848 0.129772 0.001 -0.00440798 0.0436999 0.001 -0.0101174 0.0870672 0.001 -0.0195848 0.129772 0 -0.00440798 0.0436999 0 -0.0101174 0.0870672 0 -0.0195848 0.129772 0 -0.0147552 0.131066 0 -0.0147552 0.131066 0.001 -0.0195848 0.129772 0.001 0.0025 -1.24032e-16 0 0.0025 -1.24032e-16 0.001 -0.0147552 0.131066 0.001 0.000572995 0.0441357 0.001 -0.00519335 0.0879354 0.001 -0.0147552 0.131066 0 0.000572995 0.0441357 0 -0.00519335 0.0879354 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="60"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0196972 -0.130626 0 -0.0148676 -0.13192 0 -0.0148676 -0.13192 0.001 -0.0196972 -0.130626 0.001 -0.0196972 -0.130626 0 -0.0148676 -0.13192 0 -0.0025 -1.23616e-16 0 -0.0101675 -0.0876402 0 -0.00442054 -0.0439875 0 -0.0196972 0.130626 0 -0.00442054 0.0439875 0 -0.0101675 0.0876402 0 -0.0148676 0.13192 0 0.0025 -1.2484e-16 0 0.000560438 0.0444233 0 -0.00524349 0.0885085 0 -0.00524349 -0.0885085 0 0.000560438 -0.0444233 0 -0.0148676 -0.13192 0 -0.0148676 -0.13192 0.001 0.0025 -1.2484e-16 0.001 -0.00524349 -0.0885085 0.001 0.000560438 -0.0444233 0.001 0.0025 -1.2484e-16 0 -0.00524349 -0.0885085 0 0.000560438 -0.0444233 0 -0.0196972 -0.130626 0.001 -0.0148676 -0.13192 0.001 -0.0025 -1.23616e-16 0.001 -0.0101675 -0.0876402 0.001 -0.00442054 -0.0439875 0.001 -0.0196972 0.130626 0.001 -0.00442054 0.0439875 0.001 -0.0101675 0.0876402 0.001 -0.0148676 0.13192 0.001 0.0025 -1.2484e-16 0.001 0.000560438 0.0444233 0.001 -0.00524349 0.0885085 0.001 -0.00524349 -0.0885085 0.001 0.000560438 -0.0444233 0.001 -0.0196972 -0.130626 0 -0.0196972 -0.130626 0.001 -0.0025 -1.23616e-16 0.001 -0.0101675 -0.0876402 0.001 -0.00442054 -0.0439875 0.001 -0.0025 -1.23616e-16 0 -0.0101675 -0.0876402 0 -0.00442054 -0.0439875 0 -0.0025 -1.23616e-16 0 -0.0025 -1.23616e-16 0.001 -0.0196972 0.130626 0.001 -0.00442054 0.0439875 0.001 -0.0101675 0.0876402 0.001 -0.0196972 0.130626 0 -0.00442054 0.0439875 0 -0.0101675 0.0876402 0 -0.0196972 0.130626 0 -0.0148676 0.13192 0 -0.0148676 0.13192 0.001 -0.0196972 0.130626 0.001 0.0025 -1.2484e-16 0 0.0025 -1.2484e-16 0.001 -0.0148676 0.13192 0.001 0.000560438 0.0444233 0.001 -0.00524349 0.0885085 0.001 -0.0148676 0.13192 0 0.000560438 0.0444233 0 -0.00524349 0.0885085 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="61"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0199187 -0.132308 0 -0.0150891 -0.133602 0 -0.0150891 -0.133602 0.001 -0.0199187 -0.132308 0.001 -0.0199187 -0.132308 0 -0.0150891 -0.133602 0 -0.0025 -1.25208e-16 0 -0.0102663 -0.0887689 0 -0.00444527 -0.044554 0 -0.0199187 0.132308 0 -0.00444527 0.044554 0 -0.0102663 0.0887689 0 -0.0150891 0.133602 0 0.0025 -1.26433e-16 0 0.000535703 0.0449898 0 -0.00534224 0.0896372 0 -0.00534224 -0.0896372 0 0.000535703 -0.0449898 0 -0.0150891 -0.133602 0 -0.0150891 -0.133602 0.001 0.0025 -1.26433e-16 0.001 -0.00534224 -0.0896372 0.001 0.000535703 -0.0449898 0.001 0.0025 -1.26433e-16 0 -0.00534224 -0.0896372 0 0.000535703 -0.0449898 0 -0.0199187 -0.132308 0.001 -0.0150891 -0.133602 0.001 -0.0025 -1.25208e-16 0.001 -0.0102663 -0.0887689 0.001 -0.00444527 -0.044554 0.001 -0.0199187 0.132308 0.001 -0.00444527 0.044554 0.001 -0.0102663 0.0887689 0.001 -0.0150891 0.133602 0.001 0.0025 -1.26433e-16 0.001 0.000535703 0.0449898 0.001 -0.00534224 0.0896372 0.001 -0.00534224 -0.0896372 0.001 0.000535703 -0.0449898 0.001 -0.0199187 -0.132308 0 -0.0199187 -0.132308 0.001 -0.0025 -1.25208e-16 0.001 -0.0102663 -0.0887689 0.001 -0.00444527 -0.044554 0.001 -0.0025 -1.25208e-16 0 -0.0102663 -0.0887689 0 -0.00444527 -0.044554 0 -0.0025 -1.25208e-16 0 -0.0025 -1.25208e-16 0.001 -0.0199187 0.132308 0.001 -0.00444527 0.044554 0.001 -0.0102663 0.0887689 0.001 -0.0199187 0.132308 0 -0.00444527 0.044554 0 -0.0102663 0.0887689 0 -0.0199187 0.132308 0 -0.0150891 0.133602 0 -0.0150891 0.133602 0.001 -0.0199187 0.132308 0.001 0.0025 -1.26433e-16 0 0.0025 -1.26433e-16 0.001 -0.0150891 0.133602 0.001 0.000535703 0.0449898 0.001 -0.00534224 0.0896372 0.001 -0.0150891 0.133602 0 0.000535703 0.0449898 0 -0.00534224 0.0896372 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="62"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0200278 -0.133137 0 -0.0151981 -0.134431 0 -0.0151981 -0.134431 0.001 -0.0200278 -0.133137 0.001 -0.0200278 -0.133137 0 -0.0151981 -0.134431 0 -0.0025 -1.25992e-16 0 -0.0103149 -0.0893246 0 -0.00445745 -0.0448329 0 -0.0200278 0.133137 0 -0.00445745 0.0448329 0 -0.0103149 0.0893246 0 -0.0151981 0.134431 0 0.0025 -1.27216e-16 0 0.000523526 0.0452687 0 -0.00539085 0.0901929 0 -0.00539085 -0.0901929 0 0.000523526 -0.0452687 0 -0.0151981 -0.134431 0 -0.0151981 -0.134431 0.001 0.0025 -1.27216e-16 0.001 -0.00539085 -0.0901929 0.001 0.000523526 -0.0452687 0.001 0.0025 -1.27216e-16 0 -0.00539085 -0.0901929 0 0.000523526 -0.0452687 0 -0.0200278 -0.133137 0.001 -0.0151981 -0.134431 0.001 -0.0025 -1.25992e-16 0.001 -0.0103149 -0.0893246 0.001 -0.00445745 -0.0448329 0.001 -0.0200278 0.133137 0.001 -0.00445745 0.0448329 0.001 -0.0103149 0.0893246 0.001 -0.0151981 0.134431 0.001 0.0025 -1.27216e-16 0.001 0.000523526 0.0452687 0.001 -0.00539085 0.0901929 0.001 -0.00539085 -0.0901929 0.001 0.000523526 -0.0452687 0.001 -0.0200278 -0.133137 0 -0.0200278 -0.133137 0.001 -0.0025 -1.25992e-16 0.001 -0.0103149 -0.0893246 0.001 -0.00445745 -0.0448329 0.001 -0.0025 -1.25992e-16 0 -0.0103149 -0.0893246 0 -0.00445745 -0.0448329 0 -0.0025 -1.25992e-16 0 -0.0025 -1.25992e-16 0.001 -0.0200278 0.133137 0.001 -0.00445745 0.0448329 0.001 -0.0103149 0.0893246 0.001 -0.0200278 0.133137 0 -0.00445745 0.0448329 0 -0.0103149 0.0893246 0 -0.0200278 0.133137 0 -0.0151981 0.134431 0 -0.0151981 0.134431 0.001 -0.0200278 0.133137 0.001 0.0025 -1.27216e-16 0 0.0025 -1.27216e-16 0.001 -0.0151981 0.134431 0.001 0.000523526 0.0452687 0.001 -0.00539085 0.0901929 0.001 -0.0151981 0.134431 0 0.000523526 0.0452687 0 -0.00539085 0.0901929 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="23"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0135503 -0.083935 0 -0.00872063 -0.0852291 0 -0.00872063 -0.0852291 0.001 -0.0135503 -0.083935 0.001 -0.0135503 -0.083935 0 -0.00872063 -0.0852291 0 -0.0025 -7.94306e-17 0 -0.00742685 -0.0563141 0 -0.00373406 -0.0282646 0 -0.0135503 0.083935 0 -0.00373406 0.0282646 0 -0.00742685 0.0563141 0 -0.00872063 0.0852291 0 0.0025 -8.06552e-17 0 0.00124691 0.0287004 0 -0.00250281 0.0571823 0 -0.00250281 -0.0571823 0 0.00124691 -0.0287004 0 -0.00872063 -0.0852291 0 -0.00872063 -0.0852291 0.001 0.0025 -8.06552e-17 0.001 -0.00250281 -0.0571823 0.001 0.00124691 -0.0287004 0.001 0.0025 -8.06552e-17 0 -0.00250281 -0.0571823 0 0.00124691 -0.0287004 0 -0.0135503 -0.083935 0.001 -0.00872063 -0.0852291 0.001 -0.0025 -7.94306e-17 0.001 -0.00742685 -0.0563141 0.001 -0.00373406 -0.0282646 0.001 -0.0135503 0.083935 0.001 -0.00373406 0.0282646 0.001 -0.00742685 0.0563141 0.001 -0.00872063 0.0852291 0.001 0.0025 -8.06552e-17 0.001 0.00124691 0.0287004 0.001 -0.00250281 0.0571823 0.001 -0.00250281 -0.0571823 0.001 0.00124691 -0.0287004 0.001 -0.0135503 -0.083935 0 -0.0135503 -0.083935 0.001 -0.0025 -7.94306e-17 0.001 -0.00742685 -0.0563141 0.001 -0.00373406 -0.0282646 0.001 -0.0025 -7.94306e-17 0 -0.00742685 -0.0563141 0 -0.00373406 -0.0282646 0 -0.0025 -7.94306e-17 0 -0.0025 -7.94306e-17 0.001 -0.0135503 0.083935 0.001 -0.00373406 0.0282646 0.001 -0.00742685 0.0563141 0.001 -0.0135503 0.083935 0 -0.00373406 0.0282646 0 -0.00742685 0.0563141 0 -0.0135503 0.083935 0 -0.00872063 0.0852291 0 -0.00872063 0.0852291 0.001 -0.0135503 0.083935 0.001 0.0025 -8.06552e-17 0 0.0025 -8.06552e-17 0.001 -0.00872063 0.0852291 0.001 0.00124691 0.0287004 0.001 -0.00250281 0.0571823 0.001 -0.00872063 0.0852291 0 0.00124691 0.0287004 0 -0.00250281 0.0571823 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="24"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0136797 -0.0849185 0 -0.00885011 -0.0862126 0 -0.00885011 -0.0862126 0.001 -0.0136797 -0.0849185 0.001 -0.0136797 -0.0849185 0 -0.00885011 -0.0862126 0 -0.0025 -8.03613e-17 0 -0.00748458 -0.056974 0 -0.00374852 -0.0285958 0 -0.0136797 0.0849185 0 -0.00374852 0.0285958 0 -0.00748458 0.056974 0 -0.00885011 0.0862126 0 0.0025 -8.1586e-17 0 0.00123245 0.0290316 0 -0.00256054 0.0578422 0 -0.00256054 -0.0578422 0 0.00123245 -0.0290316 0 -0.00885011 -0.0862126 0 -0.00885011 -0.0862126 0.001 0.0025 -8.1586e-17 0.001 -0.00256054 -0.0578422 0.001 0.00123245 -0.0290316 0.001 0.0025 -8.1586e-17 0 -0.00256054 -0.0578422 0 0.00123245 -0.0290316 0 -0.0136797 -0.0849185 0.001 -0.00885011 -0.0862126 0.001 -0.0025 -8.03613e-17 0.001 -0.00748458 -0.056974 0.001 -0.00374852 -0.0285958 0.001 -0.0136797 0.0849185 0.001 -0.00374852 0.0285958 0.001 -0.00748458 0.056974 0.001 -0.00885011 0.0862126 0.001 0.0025 -8.1586e-17 0.001 0.00123245 0.0290316 0.001 -0.00256054 0.0578422 0.001 -0.00256054 -0.0578422 0.001 0.00123245 -0.0290316 0.001 -0.0136797 -0.0849185 0 -0.0136797 -0.0849185 0.001 -0.0025 -8.03613e-17 0.001 -0.00748458 -0.056974 0.001 -0.00374852 -0.0285958 0.001 -0.0025 -8.03613e-17 0 -0.00748458 -0.056974 0 -0.00374852 -0.0285958 0 -0.0025 -8.03613e-17 0 -0.0025 -8.03613e-17 0.001 -0.0136797 0.0849185 0.001 -0.00374852 0.0285958 0.001 -0.00748458 0.056974 0.001 -0.0136797 0.0849185 0 -0.00374852 0.0285958 0 -0.00748458 0.056974 0 -0.0136797 0.0849185 0 -0.00885011 0.0862126 0 -0.00885011 0.0862126 0.001 -0.0136797 0.0849185 0.001 0.0025 -8.1586e-17 0 0.0025 -8.1586e-17 0.001 -0.00885011 0.0862126 0.001 0.00123245 0.0290316 0.001 -0.00256054 0.0578422 0.001 -0.00885011 0.0862126 0 0.00123245 0.0290316 0 -0.00256054 0.0578422 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="25"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0138876 -0.0864973 0 -0.00905796 -0.0877914 0 -0.00905796 -0.0877914 0.001 -0.0138876 -0.0864973 0.001 -0.0138876 -0.0864973 0 -0.00905796 -0.0877914 0 -0.0025 -8.18554e-17 0 -0.00757725 -0.0580332 0 -0.00377173 -0.0291274 0 -0.0138876 0.0864973 0 -0.00377173 0.0291274 0 -0.00757725 0.0580332 0 -0.00905796 0.0877914 0 0.0025 -8.308e-17 0 0.00120924 0.0295632 0 -0.00265321 0.0589015 0 -0.00265321 -0.0589015 0 0.00120924 -0.0295632 0 -0.00905796 -0.0877914 0 -0.00905796 -0.0877914 0.001 0.0025 -8.308e-17 0.001 -0.00265321 -0.0589015 0.001 0.00120924 -0.0295632 0.001 0.0025 -8.308e-17 0 -0.00265321 -0.0589015 0 0.00120924 -0.0295632 0 -0.0138876 -0.0864973 0.001 -0.00905796 -0.0877914 0.001 -0.0025 -8.18554e-17 0.001 -0.00757725 -0.0580332 0.001 -0.00377173 -0.0291274 0.001 -0.0138876 0.0864973 0.001 -0.00377173 0.0291274 0.001 -0.00757725 0.0580332 0.001 -0.00905796 0.0877914 0.001 0.0025 -8.308e-17 0.001 0.00120924 0.0295632 0.001 -0.00265321 0.0589015 0.001 -0.00265321 -0.0589015 0.001 0.00120924 -0.0295632 0.001 -0.0138876 -0.0864973 0 -0.0138876 -0.0864973 0.001 -0.0025 -8.18554e-17 0.001 -0.00757725 -0.0580332 0.001 -0.00377173 -0.0291274 0.001 -0.0025 -8.18554e-17 0 -0.00757725 -0.0580332 0 -0.00377173 -0.0291274 0 -0.0025 -8.18554e-17 0 -0.0025 -8.18554e-17 0.001 -0.0138876 0.0864973 0.001 -0.00377173 0.0291274 0.001 -0.00757725 0.0580332 0.001 -0.0138876 0.0864973 0 -0.00377173 0.0291274 0 -0.00757725 0.0580332 0 -0.0138876 0.0864973 0 -0.00905796 0.0877914 0 -0.00905796 0.0877914 0.001 -0.0138876 0.0864973 0.001 0.0025 -8.308e-17 0 0.0025 -8.308e-17 0.001 -0.00905796 0.0877914 0.001 0.00120924 0.0295632 0.001 -0.00265321 0.0589015 0.001 -0.00905796 0.0877914 0 0.00120924 0.0295632 0 -0.00265321 0.0589015 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="26"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0140171 -0.0874808 0 -0.00918744 -0.0887749 0 -0.00918744 -0.0887749 0.001 -0.0140171 -0.0874808 0.001 -0.0140171 -0.0874808 0 -0.00918744 -0.0887749 0 -0.0025 -8.27861e-17 0 -0.00763498 -0.0586931 0 -0.00378619 -0.0294586 0 -0.0140171 0.0874808 0 -0.00378619 0.0294586 0 -0.00763498 0.0586931 0 -0.00918744 0.0887749 0 0.0025 -8.40108e-17 0 0.00119478 0.0298944 0 -0.00271094 0.0595613 0 -0.00271094 -0.0595613 0 0.00119478 -0.0298944 0 -0.00918744 -0.0887749 0 -0.00918744 -0.0887749 0.001 0.0025 -8.40108e-17 0.001 -0.00271094 -0.0595613 0.001 0.00119478 -0.0298944 0.001 0.0025 -8.40108e-17 0 -0.00271094 -0.0595613 0 0.00119478 -0.0298944 0 -0.0140171 -0.0874808 0.001 -0.00918744 -0.0887749 0.001 -0.0025 -8.27861e-17 0.001 -0.00763498 -0.0586931 0.001 -0.00378619 -0.0294586 0.001 -0.0140171 0.0874808 0.001 -0.00378619 0.0294586 0.001 -0.00763498 0.0586931 0.001 -0.00918744 0.0887749 0.001 0.0025 -8.40108e-17 0.001 0.00119478 0.0298944 0.001 -0.00271094 0.0595613 0.001 -0.00271094 -0.0595613 0.001 0.00119478 -0.0298944 0.001 -0.0140171 -0.0874808 0 -0.0140171 -0.0874808 0.001 -0.0025 -8.27861e-17 0.001 -0.00763498 -0.0586931 0.001 -0.00378619 -0.0294586 0.001 -0.0025 -8.27861e-17 0 -0.00763498 -0.0586931 0 -0.00378619 -0.0294586 0 -0.0025 -8.27861e-17 0 -0.0025 -8.27861e-17 0.001 -0.0140171 0.0874808 0.001 -0.00378619 0.0294586 0.001 -0.00763498 0.0586931 0.001 -0.0140171 0.0874808 0 -0.00378619 0.0294586 0 -0.00763498 0.0586931 0 -0.0140171 0.0874808 0 -0.00918744 0.0887749 0 -0.00918744 0.0887749 0.001 -0.0140171 0.0874808 0.001 0.0025 -8.40108e-17 0 0.0025 -8.40108e-17 0.001 -0.00918744 0.0887749 0.001 0.00119478 0.0298944 0.001 -0.00271094 0.0595613 0.001 -0.00918744 0.0887749 0 0.00119478 0.0298944 0 -0.00271094 0.0595613 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="27"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0142249 -0.0890596 0 -0.00939529 -0.0903537 0 -0.00939529 -0.0903537 0.001 -0.0142249 -0.0890596 0.001 -0.0142249 -0.0890596 0 -0.00939529 -0.0903537 0 -0.0025 -8.42802e-17 0 -0.00772765 -0.0597523 0 -0.0038094 -0.0299903 0 -0.0142249 0.0890596 0 -0.0038094 0.0299903 0 -0.00772765 0.0597523 0 -0.00939529 0.0903537 0 0.0025 -8.55048e-17 0 0.00117157 0.0304261 0 -0.00280361 0.0606206 0 -0.00280361 -0.0606206 0 0.00117157 -0.0304261 0 -0.00939529 -0.0903537 0 -0.00939529 -0.0903537 0.001 0.0025 -8.55048e-17 0.001 -0.00280361 -0.0606206 0.001 0.00117157 -0.0304261 0.001 0.0025 -8.55048e-17 0 -0.00280361 -0.0606206 0 0.00117157 -0.0304261 0 -0.0142249 -0.0890596 0.001 -0.00939529 -0.0903537 0.001 -0.0025 -8.42802e-17 0.001 -0.00772765 -0.0597523 0.001 -0.0038094 -0.0299903 0.001 -0.0142249 0.0890596 0.001 -0.0038094 0.0299903 0.001 -0.00772765 0.0597523 0.001 -0.00939529 0.0903537 0.001 0.0025 -8.55048e-17 0.001 0.00117157 0.0304261 0.001 -0.00280361 0.0606206 0.001 -0.00280361 -0.0606206 0.001 0.00117157 -0.0304261 0.001 -0.0142249 -0.0890596 0 -0.0142249 -0.0890596 0.001 -0.0025 -8.42802e-17 0.001 -0.00772765 -0.0597523 0.001 -0.0038094 -0.0299903 0.001 -0.0025 -8.42802e-17 0 -0.00772765 -0.0597523 0 -0.0038094 -0.0299903 0 -0.0025 -8.42802e-17 0 -0.0025 -8.42802e-17 0.001 -0.0142249 0.0890596 0.001 -0.0038094 0.0299903 0.001 -0.00772765 0.0597523 0.001 -0.0142249 0.0890596 0 -0.0038094 0.0299903 0 -0.00772765 0.0597523 0 -0.0142249 0.0890596 0 -0.00939529 0.0903537 0 -0.00939529 0.0903537 0.001 -0.0142249 0.0890596 0.001 0.0025 -8.55048e-17 0 0.0025 -8.55048e-17 0.001 -0.00939529 0.0903537 0.001 0.00117157 0.0304261 0.001 -0.00280361 0.0606206 0.001 -0.00939529 0.0903537 0 0.00117157 0.0304261 0 -0.00280361 0.0606206 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="132"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00689528 -0.0390311 0 -0.00202051 -0.0401431 0 -0.00202051 -0.0401431 0.01 -0.00689528 -0.0390311 0.01 -0.00689528 -0.0390311 0 -0.00202051 -0.0401431 0 -0.0025 -4.29851e-17 0 -0.00445802 -0.0261425 0 -0.00299019 -0.0131079 0 -0.00689528 0.0390311 0 -0.00299019 0.0131079 0 -0.00445802 0.0261425 0 -0.00202051 0.0401431 0 0.0025 -4.42097e-17 0 0.00199585 0.0134813 0 0.000486199 0.0268873 0 0.000486199 -0.0268873 0 0.00199585 -0.0134813 0 -0.00202051 -0.0401431 0 -0.00202051 -0.0401431 0.01 0.0025 -4.42097e-17 0.01 0.000486199 -0.0268873 0.01 0.00199585 -0.0134813 0.01 0.0025 -4.42097e-17 0 0.000486199 -0.0268873 0 0.00199585 -0.0134813 0 -0.00689528 -0.0390311 0.01 -0.00202051 -0.0401431 0.01 -0.0025 -4.29851e-17 0.01 -0.00445802 -0.0261425 0.01 -0.00299019 -0.0131079 0.01 -0.00689528 0.0390311 0.01 -0.00299019 0.0131079 0.01 -0.00445802 0.0261425 0.01 -0.00202051 0.0401431 0.01 0.0025 -4.42097e-17 0.01 0.00199585 0.0134813 0.01 0.000486199 0.0268873 0.01 0.000486199 -0.0268873 0.01 0.00199585 -0.0134813 0.01 -0.00689528 -0.0390311 0 -0.00689528 -0.0390311 0.01 -0.0025 -4.29851e-17 0.01 -0.00445802 -0.0261425 0.01 -0.00299019 -0.0131079 0.01 -0.0025 -4.29851e-17 0 -0.00445802 -0.0261425 0 -0.00299019 -0.0131079 0 -0.0025 -4.29851e-17 0 -0.0025 -4.29851e-17 0.01 -0.00689528 0.0390311 0.01 -0.00299019 0.0131079 0.01 -0.00445802 0.0261425 0.01 -0.00689528 0.0390311 0 -0.00299019 0.0131079 0 -0.00445802 0.0261425 0 -0.00689528 0.0390311 0 -0.00202051 0.0401431 0 -0.00202051 0.0401431 0.01 -0.00689528 0.0390311 0.01 0.0025 -4.42097e-17 0 0.0025 -4.42097e-17 0.01 -0.00202051 0.0401431 0.01 0.00199585 0.0134813 0.01 0.000486199 0.0268873 0.01 -0.00202051 0.0401431 0 0.00199585 0.0134813 0 0.000486199 0.0268873 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="133"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00697292 -0.0397205 0 -0.00209814 -0.0408325 0 -0.00209814 -0.0408325 0.01 -0.00697292 -0.0397205 0.01 -0.00697292 -0.0397205 0 -0.00209814 -0.0408325 0 -0.0025 -4.37444e-17 0 -0.0044926 -0.0266043 0 -0.00299885 -0.0133394 0 -0.00697292 0.0397205 0 -0.00299885 0.0133394 0 -0.0044926 0.0266043 0 -0.00209814 0.0408325 0 0.0025 -4.4969e-17 0 0.00198719 0.0137128 0 0.000451613 0.0273491 0 0.000451613 -0.0273491 0 0.00198719 -0.0137128 0 -0.00209814 -0.0408325 0 -0.00209814 -0.0408325 0.01 0.0025 -4.4969e-17 0.01 0.000451613 -0.0273491 0.01 0.00198719 -0.0137128 0.01 0.0025 -4.4969e-17 0 0.000451613 -0.0273491 0 0.00198719 -0.0137128 0 -0.00697292 -0.0397205 0.01 -0.00209814 -0.0408325 0.01 -0.0025 -4.37444e-17 0.01 -0.0044926 -0.0266043 0.01 -0.00299885 -0.0133394 0.01 -0.00697292 0.0397205 0.01 -0.00299885 0.0133394 0.01 -0.0044926 0.0266043 0.01 -0.00209814 0.0408325 0.01 0.0025 -4.4969e-17 0.01 0.00198719 0.0137128 0.01 0.000451613 0.0273491 0.01 0.000451613 -0.0273491 0.01 0.00198719 -0.0137128 0.01 -0.00697292 -0.0397205 0 -0.00697292 -0.0397205 0.01 -0.0025 -4.37444e-17 0.01 -0.0044926 -0.0266043 0.01 -0.00299885 -0.0133394 0.01 -0.0025 -4.37444e-17 0 -0.0044926 -0.0266043 0 -0.00299885 -0.0133394 0 -0.0025 -4.37444e-17 0 -0.0025 -4.37444e-17 0.01 -0.00697292 0.0397205 0.01 -0.00299885 0.0133394 0.01 -0.0044926 0.0266043 0.01 -0.00697292 0.0397205 0 -0.00299885 0.0133394 0 -0.0044926 0.0266043 0 -0.00697292 0.0397205 0 -0.00209814 0.0408325 0 -0.00209814 0.0408325 0.01 -0.00697292 0.0397205 0.01 0.0025 -4.4969e-17 0 0.0025 -4.4969e-17 0.01 -0.00209814 0.0408325 0.01 0.00198719 0.0137128 0.01 0.000451613 0.0273491 0.01 -0.00209814 0.0408325 0 0.00198719 0.0137128 0 0.000451613 0.0273491 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="142"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00811745 -0.0498842 0 -0.00324267 -0.0509962 0 -0.00324267 -0.0509962 0.01 -0.00811745 -0.0498842 0.01 -0.00811745 -0.0498842 0 -0.00324267 -0.0509962 0 -0.0025 -5.49377e-17 0 -0.00500247 -0.0334117 0 -0.00312649 -0.0167527 0 -0.00811745 0.0498842 0 -0.00312649 0.0167527 0 -0.00500247 0.0334117 0 -0.00324267 0.0509962 0 0.0025 -5.61623e-17 0 0.00185954 0.0171261 0 -5.8252e-05 0.0341565 0 -5.8252e-05 -0.0341565 0 0.00185954 -0.0171261 0 -0.00324267 -0.0509962 0 -0.00324267 -0.0509962 0.01 0.0025 -5.61623e-17 0.01 -5.8252e-05 -0.0341565 0.01 0.00185954 -0.0171261 0.01 0.0025 -5.61623e-17 0 -5.8252e-05 -0.0341565 0 0.00185954 -0.0171261 0 -0.00811745 -0.0498842 0.01 -0.00324267 -0.0509962 0.01 -0.0025 -5.49377e-17 0.01 -0.00500247 -0.0334117 0.01 -0.00312649 -0.0167527 0.01 -0.00811745 0.0498842 0.01 -0.00312649 0.0167527 0.01 -0.00500247 0.0334117 0.01 -0.00324267 0.0509962 0.01 0.0025 -5.61623e-17 0.01 0.00185954 0.0171261 0.01 -5.8252e-05 0.0341565 0.01 -5.8252e-05 -0.0341565 0.01 0.00185954 -0.0171261 0.01 -0.00811745 -0.0498842 0 -0.00811745 -0.0498842 0.01 -0.0025 -5.49377e-17 0.01 -0.00500247 -0.0334117 0.01 -0.00312649 -0.0167527 0.01 -0.0025 -5.49377e-17 0 -0.00500247 -0.0334117 0 -0.00312649 -0.0167527 0 -0.0025 -5.49377e-17 0 -0.0025 -5.49377e-17 0.01 -0.00811745 0.0498842 0.01 -0.00312649 0.0167527 0.01 -0.00500247 0.0334117 0.01 -0.00811745 0.0498842 0 -0.00312649 0.0167527 0 -0.00500247 0.0334117 0 -0.00811745 0.0498842 0 -0.00324267 0.0509962 0 -0.00324267 0.0509962 0.01 -0.00811745 0.0498842 0.01 0.0025 -5.61623e-17 0 0.0025 -5.61623e-17 0.01 -0.00324267 0.0509962 0.01 0.00185954 0.0171261 0.01 -5.8252e-05 0.0341565 0.01 -0.00324267 0.0509962 0 0.00185954 0.0171261 0 -5.8252e-05 0.0341565 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="143"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00819759 -0.0505959 0 -0.00332281 -0.0517079 0 -0.00332281 -0.0517079 0.01 -0.00819759 -0.0505959 0.01 -0.00819759 -0.0505959 0 -0.00332281 -0.0517079 0 -0.0025 -5.57214e-17 0 -0.00503817 -0.0338884 0 -0.00313543 -0.0169917 0 -0.00819759 0.0505959 0 -0.00313543 0.0169917 0 -0.00503817 0.0338884 0 -0.00332281 0.0517079 0 0.0025 -5.69461e-17 0 0.0018506 0.0173651 0 -9.39537e-05 0.0346332 0 -9.39537e-05 -0.0346332 0 0.0018506 -0.0173651 0 -0.00332281 -0.0517079 0 -0.00332281 -0.0517079 0.01 0.0025 -5.69461e-17 0.01 -9.39537e-05 -0.0346332 0.01 0.0018506 -0.0173651 0.01 0.0025 -5.69461e-17 0 -9.39537e-05 -0.0346332 0 0.0018506 -0.0173651 0 -0.00819759 -0.0505959 0.01 -0.00332281 -0.0517079 0.01 -0.0025 -5.57214e-17 0.01 -0.00503817 -0.0338884 0.01 -0.00313543 -0.0169917 0.01 -0.00819759 0.0505959 0.01 -0.00313543 0.0169917 0.01 -0.00503817 0.0338884 0.01 -0.00332281 0.0517079 0.01 0.0025 -5.69461e-17 0.01 0.0018506 0.0173651 0.01 -9.39537e-05 0.0346332 0.01 -9.39537e-05 -0.0346332 0.01 0.0018506 -0.0173651 0.01 -0.00819759 -0.0505959 0 -0.00819759 -0.0505959 0.01 -0.0025 -5.57214e-17 0.01 -0.00503817 -0.0338884 0.01 -0.00313543 -0.0169917 0.01 -0.0025 -5.57214e-17 0 -0.00503817 -0.0338884 0 -0.00313543 -0.0169917 0 -0.0025 -5.57214e-17 0 -0.0025 -5.57214e-17 0.01 -0.00819759 0.0505959 0.01 -0.00313543 0.0169917 0.01 -0.00503817 0.0338884 0.01 -0.00819759 0.0505959 0 -0.00313543 0.0169917 0 -0.00503817 0.0338884 0 -0.00819759 0.0505959 0 -0.00332281 0.0517079 0 -0.00332281 0.0517079 0.01 -0.00819759 0.0505959 0.01 0.0025 -5.69461e-17 0 0.0025 -5.69461e-17 0.01 -0.00332281 0.0517079 0.01 0.0018506 0.0173651 0.01 -9.39537e-05 0.0346332 0.01 -0.00332281 0.0517079 0 0.0018506 0.0173651 0 -9.39537e-05 0.0346332 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="144"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00836038 -0.0520415 0 -0.0034856 -0.0531535 0 -0.0034856 -0.0531535 0.01 -0.00836038 -0.0520415 0.01 -0.00836038 -0.0520415 0 -0.0034856 -0.0531535 0 -0.0025 -5.73135e-17 0 -0.00511069 -0.0348567 0 -0.00315358 -0.0174771 0 -0.00836038 0.0520415 0 -0.00315358 0.0174771 0 -0.00511069 0.0348567 0 -0.0034856 0.0531535 0 0.0025 -5.85381e-17 0 0.00183245 0.0178506 0 -0.000166473 0.0356015 0 -0.000166473 -0.0356015 0 0.00183245 -0.0178506 0 -0.0034856 -0.0531535 0 -0.0034856 -0.0531535 0.01 0.0025 -5.85381e-17 0.01 -0.000166473 -0.0356015 0.01 0.00183245 -0.0178506 0.01 0.0025 -5.85381e-17 0 -0.000166473 -0.0356015 0 0.00183245 -0.0178506 0 -0.00836038 -0.0520415 0.01 -0.0034856 -0.0531535 0.01 -0.0025 -5.73135e-17 0.01 -0.00511069 -0.0348567 0.01 -0.00315358 -0.0174771 0.01 -0.00836038 0.0520415 0.01 -0.00315358 0.0174771 0.01 -0.00511069 0.0348567 0.01 -0.0034856 0.0531535 0.01 0.0025 -5.85381e-17 0.01 0.00183245 0.0178506 0.01 -0.000166473 0.0356015 0.01 -0.000166473 -0.0356015 0.01 0.00183245 -0.0178506 0.01 -0.00836038 -0.0520415 0 -0.00836038 -0.0520415 0.01 -0.0025 -5.73135e-17 0.01 -0.00511069 -0.0348567 0.01 -0.00315358 -0.0174771 0.01 -0.0025 -5.73135e-17 0 -0.00511069 -0.0348567 0 -0.00315358 -0.0174771 0 -0.0025 -5.73135e-17 0 -0.0025 -5.73135e-17 0.01 -0.00836038 0.0520415 0.01 -0.00315358 0.0174771 0.01 -0.00511069 0.0348567 0.01 -0.00836038 0.0520415 0 -0.00315358 0.0174771 0 -0.00511069 0.0348567 0 -0.00836038 0.0520415 0 -0.0034856 0.0531535 0 -0.0034856 0.0531535 0.01 -0.00836038 0.0520415 0.01 0.0025 -5.85381e-17 0 0.0025 -5.85381e-17 0.01 -0.0034856 0.0531535 0.01 0.00183245 0.0178506 0.01 -0.000166473 0.0356015 0.01 -0.0034856 0.0531535 0 0.00183245 0.0178506 0 -0.000166473 0.0356015 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="145"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00844303 -0.0527754 0 -0.00356825 -0.0538874 0 -0.00356825 -0.0538874 0.01 -0.00844303 -0.0527754 0.01 -0.00844303 -0.0527754 0 -0.00356825 -0.0538874 0 -0.0025 -5.81217e-17 0 -0.00514751 -0.0353482 0 -0.0031628 -0.0177236 0 -0.00844303 0.0527754 0 -0.0031628 0.0177236 0 -0.00514751 0.0353482 0 -0.00356825 0.0538874 0 0.0025 -5.93464e-17 0 0.00182323 0.0180971 0 -0.00020329 0.036093 0 -0.00020329 -0.036093 0 0.00182323 -0.0180971 0 -0.00356825 -0.0538874 0 -0.00356825 -0.0538874 0.01 0.0025 -5.93464e-17 0.01 -0.00020329 -0.036093 0.01 0.00182323 -0.0180971 0.01 0.0025 -5.93464e-17 0 -0.00020329 -0.036093 0 0.00182323 -0.0180971 0 -0.00844303 -0.0527754 0.01 -0.00356825 -0.0538874 0.01 -0.0025 -5.81217e-17 0.01 -0.00514751 -0.0353482 0.01 -0.0031628 -0.0177236 0.01 -0.00844303 0.0527754 0.01 -0.0031628 0.0177236 0.01 -0.00514751 0.0353482 0.01 -0.00356825 0.0538874 0.01 0.0025 -5.93464e-17 0.01 0.00182323 0.0180971 0.01 -0.00020329 0.036093 0.01 -0.00020329 -0.036093 0.01 0.00182323 -0.0180971 0.01 -0.00844303 -0.0527754 0 -0.00844303 -0.0527754 0.01 -0.0025 -5.81217e-17 0.01 -0.00514751 -0.0353482 0.01 -0.0031628 -0.0177236 0.01 -0.0025 -5.81217e-17 0 -0.00514751 -0.0353482 0 -0.0031628 -0.0177236 0 -0.0025 -5.81217e-17 0 -0.0025 -5.81217e-17 0.01 -0.00844303 0.0527754 0.01 -0.0031628 0.0177236 0.01 -0.00514751 0.0353482 0.01 -0.00844303 0.0527754 0 -0.0031628 0.0177236 0 -0.00514751 0.0353482 0 -0.00844303 0.0527754 0 -0.00356825 0.0538874 0 -0.00356825 0.0538874 0.01 -0.00844303 0.0527754 0.01 0.0025 -5.93464e-17 0 0.0025 -5.93464e-17 0.01 -0.00356825 0.0538874 0.01 0.00182323 0.0180971 0.01 -0.00020329 0.036093 0.01 -0.00356825 0.0538874 0 0.00182323 0.0180971 0 -0.00020329 0.036093 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="146"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00860581 -0.054221 0 -0.00373104 -0.055333 0 -0.00373104 -0.055333 0.01 -0.00860581 -0.054221 0.01 -0.00860581 -0.054221 0 -0.00373104 -0.055333 0 -0.0025 -5.97138e-17 0 -0.00522003 -0.0363165 0 -0.00318096 -0.0182091 0 -0.00860581 0.054221 0 -0.00318096 0.0182091 0 -0.00522003 0.0363165 0 -0.00373104 0.055333 0 0.0025 -6.09384e-17 0 0.00180508 0.0185825 0 -0.000275809 0.0370613 0 -0.000275809 -0.0370613 0 0.00180508 -0.0185825 0 -0.00373104 -0.055333 0 -0.00373104 -0.055333 0.01 0.0025 -6.09384e-17 0.01 -0.000275809 -0.0370613 0.01 0.00180508 -0.0185825 0.01 0.0025 -6.09384e-17 0 -0.000275809 -0.0370613 0 0.00180508 -0.0185825 0 -0.00860581 -0.054221 0.01 -0.00373104 -0.055333 0.01 -0.0025 -5.97138e-17 0.01 -0.00522003 -0.0363165 0.01 -0.00318096 -0.0182091 0.01 -0.00860581 0.054221 0.01 -0.00318096 0.0182091 0.01 -0.00522003 0.0363165 0.01 -0.00373104 0.055333 0.01 0.0025 -6.09384e-17 0.01 0.00180508 0.0185825 0.01 -0.000275809 0.0370613 0.01 -0.000275809 -0.0370613 0.01 0.00180508 -0.0185825 0.01 -0.00860581 -0.054221 0 -0.00860581 -0.054221 0.01 -0.0025 -5.97138e-17 0.01 -0.00522003 -0.0363165 0.01 -0.00318096 -0.0182091 0.01 -0.0025 -5.97138e-17 0 -0.00522003 -0.0363165 0 -0.00318096 -0.0182091 0 -0.0025 -5.97138e-17 0 -0.0025 -5.97138e-17 0.01 -0.00860581 0.054221 0.01 -0.00318096 0.0182091 0.01 -0.00522003 0.0363165 0.01 -0.00860581 0.054221 0 -0.00318096 0.0182091 0 -0.00522003 0.0363165 0 -0.00860581 0.054221 0 -0.00373104 0.055333 0 -0.00373104 0.055333 0.01 -0.00860581 0.054221 0.01 0.0025 -6.09384e-17 0 0.0025 -6.09384e-17 0.01 -0.00373104 0.055333 0.01 0.00180508 0.0185825 0.01 -0.000275809 0.0370613 0.01 -0.00373104 0.055333 0 0.00180508 0.0185825 0 -0.000275809 0.0370613 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="147"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00868596 -0.0549326 0 -0.00381118 -0.0560446 0 -0.00381118 -0.0560446 0.01 -0.00868596 -0.0549326 0.01 -0.00868596 -0.0549326 0 -0.00381118 -0.0560446 0 -0.0025 -6.04976e-17 0 -0.00525573 -0.0367931 0 -0.0031899 -0.0184481 0 -0.00868596 0.0549326 0 -0.0031899 0.0184481 0 -0.00525573 0.0367931 0 -0.00381118 0.0560446 0 0.0025 -6.17222e-17 0 0.00179614 0.0188215 0 -0.000311511 0.0375379 0 -0.000311511 -0.0375379 0 0.00179614 -0.0188215 0 -0.00381118 -0.0560446 0 -0.00381118 -0.0560446 0.01 0.0025 -6.17222e-17 0.01 -0.000311511 -0.0375379 0.01 0.00179614 -0.0188215 0.01 0.0025 -6.17222e-17 0 -0.000311511 -0.0375379 0 0.00179614 -0.0188215 0 -0.00868596 -0.0549326 0.01 -0.00381118 -0.0560446 0.01 -0.0025 -6.04976e-17 0.01 -0.00525573 -0.0367931 0.01 -0.0031899 -0.0184481 0.01 -0.00868596 0.0549326 0.01 -0.0031899 0.0184481 0.01 -0.00525573 0.0367931 0.01 -0.00381118 0.0560446 0.01 0.0025 -6.17222e-17 0.01 0.00179614 0.0188215 0.01 -0.000311511 0.0375379 0.01 -0.000311511 -0.0375379 0.01 0.00179614 -0.0188215 0.01 -0.00868596 -0.0549326 0 -0.00868596 -0.0549326 0.01 -0.0025 -6.04976e-17 0.01 -0.00525573 -0.0367931 0.01 -0.0031899 -0.0184481 0.01 -0.0025 -6.04976e-17 0 -0.00525573 -0.0367931 0 -0.0031899 -0.0184481 0 -0.0025 -6.04976e-17 0 -0.0025 -6.04976e-17 0.01 -0.00868596 0.0549326 0.01 -0.0031899 0.0184481 0.01 -0.00525573 0.0367931 0.01 -0.00868596 0.0549326 0 -0.0031899 0.0184481 0 -0.00525573 0.0367931 0 -0.00868596 0.0549326 0 -0.00381118 0.0560446 0 -0.00381118 0.0560446 0.01 -0.00868596 0.0549326 0.01 0.0025 -6.17222e-17 0 0.0025 -6.17222e-17 0.01 -0.00381118 0.0560446 0.01 0.00179614 0.0188215 0.01 -0.000311511 0.0375379 0.01 -0.00381118 0.0560446 0 0.00179614 0.0188215 0 -0.000311511 0.0375379 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="148"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00885125 -0.0564005 0 -0.00397647 -0.0575125 0 -0.00397647 -0.0575125 0.01 -0.00885125 -0.0564005 0.01 -0.00885125 -0.0564005 0 -0.00397647 -0.0575125 0 -0.0025 -6.21141e-17 0 -0.00532936 -0.0377763 0 -0.00320833 -0.018941 0 -0.00885125 0.0564005 0 -0.00320833 0.018941 0 -0.00532936 0.0377763 0 -0.00397647 0.0575125 0 0.0025 -6.33387e-17 0 0.0017777 0.0193145 0 -0.000385146 0.0385211 0 -0.000385146 -0.0385211 0 0.0017777 -0.0193145 0 -0.00397647 -0.0575125 0 -0.00397647 -0.0575125 0.01 0.0025 -6.33387e-17 0.01 -0.000385146 -0.0385211 0.01 0.0017777 -0.0193145 0.01 0.0025 -6.33387e-17 0 -0.000385146 -0.0385211 0 0.0017777 -0.0193145 0 -0.00885125 -0.0564005 0.01 -0.00397647 -0.0575125 0.01 -0.0025 -6.21141e-17 0.01 -0.00532936 -0.0377763 0.01 -0.00320833 -0.018941 0.01 -0.00885125 0.0564005 0.01 -0.00320833 0.018941 0.01 -0.00532936 0.0377763 0.01 -0.00397647 0.0575125 0.01 0.0025 -6.33387e-17 0.01 0.0017777 0.0193145 0.01 -0.000385146 0.0385211 0.01 -0.000385146 -0.0385211 0.01 0.0017777 -0.0193145 0.01 -0.00885125 -0.0564005 0 -0.00885125 -0.0564005 0.01 -0.0025 -6.21141e-17 0.01 -0.00532936 -0.0377763 0.01 -0.00320833 -0.018941 0.01 -0.0025 -6.21141e-17 0 -0.00532936 -0.0377763 0 -0.00320833 -0.018941 0 -0.0025 -6.21141e-17 0 -0.0025 -6.21141e-17 0.01 -0.00885125 0.0564005 0.01 -0.00320833 0.018941 0.01 -0.00532936 0.0377763 0.01 -0.00885125 0.0564005 0 -0.00320833 0.018941 0 -0.00532936 0.0377763 0 -0.00885125 0.0564005 0 -0.00397647 0.0575125 0 -0.00397647 0.0575125 0.01 -0.00885125 0.0564005 0.01 0.0025 -6.33387e-17 0 0.0025 -6.33387e-17 0.01 -0.00397647 0.0575125 0.01 0.0017777 0.0193145 0.01 -0.000385146 0.0385211 0.01 -0.00397647 0.0575125 0 0.0017777 0.0193145 0 -0.000385146 0.0385211 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="149"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00893139 -0.0571122 0 -0.00405661 -0.0582242 0 -0.00405661 -0.0582242 0.01 -0.00893139 -0.0571122 0.01 -0.00893139 -0.0571122 0 -0.00405661 -0.0582242 0 -0.0025 -6.28979e-17 0 -0.00536506 -0.0382529 0 -0.00321727 -0.01918 0 -0.00893139 0.0571122 0 -0.00321727 0.01918 0 -0.00536506 0.0382529 0 -0.00405661 0.0582242 0 0.0025 -6.41225e-17 0 0.00176877 0.0195535 0 -0.000420848 0.0389977 0 -0.000420848 -0.0389977 0 0.00176877 -0.0195535 0 -0.00405661 -0.0582242 0 -0.00405661 -0.0582242 0.01 0.0025 -6.41225e-17 0.01 -0.000420848 -0.0389977 0.01 0.00176877 -0.0195535 0.01 0.0025 -6.41225e-17 0 -0.000420848 -0.0389977 0 0.00176877 -0.0195535 0 -0.00893139 -0.0571122 0.01 -0.00405661 -0.0582242 0.01 -0.0025 -6.28979e-17 0.01 -0.00536506 -0.0382529 0.01 -0.00321727 -0.01918 0.01 -0.00893139 0.0571122 0.01 -0.00321727 0.01918 0.01 -0.00536506 0.0382529 0.01 -0.00405661 0.0582242 0.01 0.0025 -6.41225e-17 0.01 0.00176877 0.0195535 0.01 -0.000420848 0.0389977 0.01 -0.000420848 -0.0389977 0.01 0.00176877 -0.0195535 0.01 -0.00893139 -0.0571122 0 -0.00893139 -0.0571122 0.01 -0.0025 -6.28979e-17 0.01 -0.00536506 -0.0382529 0.01 -0.00321727 -0.01918 0.01 -0.0025 -6.28979e-17 0 -0.00536506 -0.0382529 0 -0.00321727 -0.01918 0 -0.0025 -6.28979e-17 0 -0.0025 -6.28979e-17 0.01 -0.00893139 0.0571122 0.01 -0.00321727 0.01918 0.01 -0.00536506 0.0382529 0.01 -0.00893139 0.0571122 0 -0.00321727 0.01918 0 -0.00536506 0.0382529 0 -0.00893139 0.0571122 0 -0.00405661 0.0582242 0 -0.00405661 0.0582242 0.01 -0.00893139 0.0571122 0.01 0.0025 -6.41225e-17 0 0.0025 -6.41225e-17 0.01 -0.00405661 0.0582242 0.01 0.00176877 0.0195535 0.01 -0.000420848 0.0389977 0.01 -0.00405661 0.0582242 0 0.00176877 0.0195535 0 -0.000420848 0.0389977 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="150"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00909418 -0.0585578 0 -0.0042194 -0.0596698 0 -0.0042194 -0.0596698 0.01 -0.00909418 -0.0585578 0.01 -0.00909418 -0.0585578 0 -0.0042194 -0.0596698 0 -0.0025 -6.44899e-17 0 -0.00543758 -0.0392212 0 -0.00323542 -0.0196655 0 -0.00909418 0.0585578 0 -0.00323542 0.0196655 0 -0.00543758 0.0392212 0 -0.0042194 0.0596698 0 0.0025 -6.57145e-17 0 0.00175061 0.020039 0 -0.000493367 0.039966 0 -0.000493367 -0.039966 0 0.00175061 -0.020039 0 -0.0042194 -0.0596698 0 -0.0042194 -0.0596698 0.01 0.0025 -6.57145e-17 0.01 -0.000493367 -0.039966 0.01 0.00175061 -0.020039 0.01 0.0025 -6.57145e-17 0 -0.000493367 -0.039966 0 0.00175061 -0.020039 0 -0.00909418 -0.0585578 0.01 -0.0042194 -0.0596698 0.01 -0.0025 -6.44899e-17 0.01 -0.00543758 -0.0392212 0.01 -0.00323542 -0.0196655 0.01 -0.00909418 0.0585578 0.01 -0.00323542 0.0196655 0.01 -0.00543758 0.0392212 0.01 -0.0042194 0.0596698 0.01 0.0025 -6.57145e-17 0.01 0.00175061 0.020039 0.01 -0.000493367 0.039966 0.01 -0.000493367 -0.039966 0.01 0.00175061 -0.020039 0.01 -0.00909418 -0.0585578 0 -0.00909418 -0.0585578 0.01 -0.0025 -6.44899e-17 0.01 -0.00543758 -0.0392212 0.01 -0.00323542 -0.0196655 0.01 -0.0025 -6.44899e-17 0 -0.00543758 -0.0392212 0 -0.00323542 -0.0196655 0 -0.0025 -6.44899e-17 0 -0.0025 -6.44899e-17 0.01 -0.00909418 0.0585578 0.01 -0.00323542 0.0196655 0.01 -0.00543758 0.0392212 0.01 -0.00909418 0.0585578 0 -0.00323542 0.0196655 0 -0.00543758 0.0392212 0 -0.00909418 0.0585578 0 -0.0042194 0.0596698 0 -0.0042194 0.0596698 0.01 -0.00909418 0.0585578 0.01 0.0025 -6.57145e-17 0 0.0025 -6.57145e-17 0.01 -0.0042194 0.0596698 0.01 0.00175061 0.020039 0.01 -0.000493367 0.039966 0.01 -0.0042194 0.0596698 0 0.00175061 0.020039 0 -0.000493367 0.039966 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="151"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00917432 -0.0592694 0 -0.00429954 -0.0603814 0 -0.00429954 -0.0603814 0.01 -0.00917432 -0.0592694 0.01 -0.00917432 -0.0592694 0 -0.00429954 -0.0603814 0 -0.0025 -6.52737e-17 0 -0.00547328 -0.0396979 0 -0.00324436 -0.0199045 0 -0.00917432 0.0592694 0 -0.00324436 0.0199045 0 -0.00547328 0.0396979 0 -0.00429954 0.0603814 0 0.0025 -6.64983e-17 0 0.00174167 0.020278 0 -0.000529069 0.0404427 0 -0.000529069 -0.0404427 0 0.00174167 -0.020278 0 -0.00429954 -0.0603814 0 -0.00429954 -0.0603814 0.01 0.0025 -6.64983e-17 0.01 -0.000529069 -0.0404427 0.01 0.00174167 -0.020278 0.01 0.0025 -6.64983e-17 0 -0.000529069 -0.0404427 0 0.00174167 -0.020278 0 -0.00917432 -0.0592694 0.01 -0.00429954 -0.0603814 0.01 -0.0025 -6.52737e-17 0.01 -0.00547328 -0.0396979 0.01 -0.00324436 -0.0199045 0.01 -0.00917432 0.0592694 0.01 -0.00324436 0.0199045 0.01 -0.00547328 0.0396979 0.01 -0.00429954 0.0603814 0.01 0.0025 -6.64983e-17 0.01 0.00174167 0.020278 0.01 -0.000529069 0.0404427 0.01 -0.000529069 -0.0404427 0.01 0.00174167 -0.020278 0.01 -0.00917432 -0.0592694 0 -0.00917432 -0.0592694 0.01 -0.0025 -6.52737e-17 0.01 -0.00547328 -0.0396979 0.01 -0.00324436 -0.0199045 0.01 -0.0025 -6.52737e-17 0 -0.00547328 -0.0396979 0 -0.00324436 -0.0199045 0 -0.0025 -6.52737e-17 0 -0.0025 -6.52737e-17 0.01 -0.00917432 0.0592694 0.01 -0.00324436 0.0199045 0.01 -0.00547328 0.0396979 0.01 -0.00917432 0.0592694 0 -0.00324436 0.0199045 0 -0.00547328 0.0396979 0 -0.00917432 0.0592694 0 -0.00429954 0.0603814 0 -0.00429954 0.0603814 0.01 -0.00917432 0.0592694 0.01 0.0025 -6.64983e-17 0 0.0025 -6.64983e-17 0.01 -0.00429954 0.0603814 0.01 0.00174167 0.020278 0.01 -0.000529069 0.0404427 0.01 -0.00429954 0.0603814 0 0.00174167 0.020278 0 -0.000529069 0.0404427 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="134"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00713821 -0.0411884 0 -0.00226344 -0.0423004 0 -0.00226344 -0.0423004 0.01 -0.00713821 -0.0411884 0.01 -0.00713821 -0.0411884 0 -0.00226344 -0.0423004 0 -0.0025 -4.53609e-17 0 -0.00456624 -0.0275874 0 -0.00301728 -0.0138323 0 -0.00713821 0.0411884 0 -0.00301728 0.0138323 0 -0.00456624 0.0275874 0 -0.00226344 0.0423004 0 0.0025 -4.65856e-17 0 0.00196875 0.0142058 0 0.000377979 0.0283322 0 0.000377979 -0.0283322 0 0.00196875 -0.0142058 0 -0.00226344 -0.0423004 0 -0.00226344 -0.0423004 0.01 0.0025 -4.65856e-17 0.01 0.000377979 -0.0283322 0.01 0.00196875 -0.0142058 0.01 0.0025 -4.65856e-17 0 0.000377979 -0.0283322 0 0.00196875 -0.0142058 0 -0.00713821 -0.0411884 0.01 -0.00226344 -0.0423004 0.01 -0.0025 -4.53609e-17 0.01 -0.00456624 -0.0275874 0.01 -0.00301728 -0.0138323 0.01 -0.00713821 0.0411884 0.01 -0.00301728 0.0138323 0.01 -0.00456624 0.0275874 0.01 -0.00226344 0.0423004 0.01 0.0025 -4.65856e-17 0.01 0.00196875 0.0142058 0.01 0.000377979 0.0283322 0.01 0.000377979 -0.0283322 0.01 0.00196875 -0.0142058 0.01 -0.00713821 -0.0411884 0 -0.00713821 -0.0411884 0.01 -0.0025 -4.53609e-17 0.01 -0.00456624 -0.0275874 0.01 -0.00301728 -0.0138323 0.01 -0.0025 -4.53609e-17 0 -0.00456624 -0.0275874 0 -0.00301728 -0.0138323 0 -0.0025 -4.53609e-17 0 -0.0025 -4.53609e-17 0.01 -0.00713821 0.0411884 0.01 -0.00301728 0.0138323 0.01 -0.00456624 0.0275874 0.01 -0.00713821 0.0411884 0 -0.00301728 0.0138323 0 -0.00456624 0.0275874 0 -0.00713821 0.0411884 0 -0.00226344 0.0423004 0 -0.00226344 0.0423004 0.01 -0.00713821 0.0411884 0.01 0.0025 -4.65856e-17 0 0.0025 -4.65856e-17 0.01 -0.00226344 0.0423004 0.01 0.00196875 0.0142058 0.01 0.000377979 0.0283322 0.01 -0.00226344 0.0423004 0 0.00196875 0.0142058 0 0.000377979 0.0283322 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="135"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00721836 -0.0419 0 -0.00234358 -0.043012 0 -0.00234358 -0.043012 0.01 -0.00721836 -0.0419 0.01 -0.00721836 -0.0419 0 -0.00234358 -0.043012 0 -0.0025 -4.61447e-17 0 -0.00460194 -0.0280641 0 -0.00302622 -0.0140713 0 -0.00721836 0.0419 0 -0.00302622 0.0140713 0 -0.00460194 0.0280641 0 -0.00234358 0.043012 0 0.0025 -4.73693e-17 0 0.00195981 0.0144448 0 0.000342277 0.0288089 0 0.000342277 -0.0288089 0 0.00195981 -0.0144448 0 -0.00234358 -0.043012 0 -0.00234358 -0.043012 0.01 0.0025 -4.73693e-17 0.01 0.000342277 -0.0288089 0.01 0.00195981 -0.0144448 0.01 0.0025 -4.73693e-17 0 0.000342277 -0.0288089 0 0.00195981 -0.0144448 0 -0.00721836 -0.0419 0.01 -0.00234358 -0.043012 0.01 -0.0025 -4.61447e-17 0.01 -0.00460194 -0.0280641 0.01 -0.00302622 -0.0140713 0.01 -0.00721836 0.0419 0.01 -0.00302622 0.0140713 0.01 -0.00460194 0.0280641 0.01 -0.00234358 0.043012 0.01 0.0025 -4.73693e-17 0.01 0.00195981 0.0144448 0.01 0.000342277 0.0288089 0.01 0.000342277 -0.0288089 0.01 0.00195981 -0.0144448 0.01 -0.00721836 -0.0419 0 -0.00721836 -0.0419 0.01 -0.0025 -4.61447e-17 0.01 -0.00460194 -0.0280641 0.01 -0.00302622 -0.0140713 0.01 -0.0025 -4.61447e-17 0 -0.00460194 -0.0280641 0 -0.00302622 -0.0140713 0 -0.0025 -4.61447e-17 0 -0.0025 -4.61447e-17 0.01 -0.00721836 0.0419 0.01 -0.00302622 0.0140713 0.01 -0.00460194 0.0280641 0.01 -0.00721836 0.0419 0 -0.00302622 0.0140713 0 -0.00460194 0.0280641 0 -0.00721836 0.0419 0 -0.00234358 0.043012 0 -0.00234358 0.043012 0.01 -0.00721836 0.0419 0.01 0.0025 -4.73693e-17 0 0.0025 -4.73693e-17 0.01 -0.00234358 0.043012 0.01 0.00195981 0.0144448 0.01 0.000342277 0.0288089 0.01 -0.00234358 0.043012 0 0.00195981 0.0144448 0 0.000342277 0.0288089 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="136"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00738365 -0.0433679 0 -0.00250887 -0.0444799 0 -0.00250887 -0.0444799 0.01 -0.00738365 -0.0433679 0.01 -0.00738365 -0.0433679 0 -0.00250887 -0.0444799 0 -0.0025 -4.77612e-17 0 -0.00467557 -0.0290472 0 -0.00304465 -0.0145643 0 -0.00738365 0.0433679 0 -0.00304465 0.0145643 0 -0.00467557 0.0290472 0 -0.00250887 0.0444799 0 0.0025 -4.89859e-17 0 0.00194138 0.0149377 0 0.000268642 0.029792 0 0.000268642 -0.029792 0 0.00194138 -0.0149377 0 -0.00250887 -0.0444799 0 -0.00250887 -0.0444799 0.01 0.0025 -4.89859e-17 0.01 0.000268642 -0.029792 0.01 0.00194138 -0.0149377 0.01 0.0025 -4.89859e-17 0 0.000268642 -0.029792 0 0.00194138 -0.0149377 0 -0.00738365 -0.0433679 0.01 -0.00250887 -0.0444799 0.01 -0.0025 -4.77612e-17 0.01 -0.00467557 -0.0290472 0.01 -0.00304465 -0.0145643 0.01 -0.00738365 0.0433679 0.01 -0.00304465 0.0145643 0.01 -0.00467557 0.0290472 0.01 -0.00250887 0.0444799 0.01 0.0025 -4.89859e-17 0.01 0.00194138 0.0149377 0.01 0.000268642 0.029792 0.01 0.000268642 -0.029792 0.01 0.00194138 -0.0149377 0.01 -0.00738365 -0.0433679 0 -0.00738365 -0.0433679 0.01 -0.0025 -4.77612e-17 0.01 -0.00467557 -0.0290472 0.01 -0.00304465 -0.0145643 0.01 -0.0025 -4.77612e-17 0 -0.00467557 -0.0290472 0 -0.00304465 -0.0145643 0 -0.0025 -4.77612e-17 0 -0.0025 -4.77612e-17 0.01 -0.00738365 0.0433679 0.01 -0.00304465 0.0145643 0.01 -0.00467557 0.0290472 0.01 -0.00738365 0.0433679 0 -0.00304465 0.0145643 0 -0.00467557 0.0290472 0 -0.00738365 0.0433679 0 -0.00250887 0.0444799 0 -0.00250887 0.0444799 0.01 -0.00738365 0.0433679 0.01 0.0025 -4.89859e-17 0 0.0025 -4.89859e-17 0.01 -0.00250887 0.0444799 0.01 0.00194138 0.0149377 0.01 0.000268642 0.029792 0.01 -0.00250887 0.0444799 0 0.00194138 0.0149377 0 0.000268642 0.029792 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="137"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00746379 -0.0440796 0 -0.00258901 -0.0451916 0 -0.00258901 -0.0451916 0.01 -0.00746379 -0.0440796 0.01 -0.00746379 -0.0440796 0 -0.00258901 -0.0451916 0 -0.0025 -4.8545e-17 0 -0.00471128 -0.0295239 0 -0.00305359 -0.0148033 0 -0.00746379 0.0440796 0 -0.00305359 0.0148033 0 -0.00471128 0.0295239 0 -0.00258901 0.0451916 0 0.0025 -4.97696e-17 0 0.00193244 0.0151767 0 0.00023294 0.0302687 0 0.00023294 -0.0302687 0 0.00193244 -0.0151767 0 -0.00258901 -0.0451916 0 -0.00258901 -0.0451916 0.01 0.0025 -4.97696e-17 0.01 0.00023294 -0.0302687 0.01 0.00193244 -0.0151767 0.01 0.0025 -4.97696e-17 0 0.00023294 -0.0302687 0 0.00193244 -0.0151767 0 -0.00746379 -0.0440796 0.01 -0.00258901 -0.0451916 0.01 -0.0025 -4.8545e-17 0.01 -0.00471128 -0.0295239 0.01 -0.00305359 -0.0148033 0.01 -0.00746379 0.0440796 0.01 -0.00305359 0.0148033 0.01 -0.00471128 0.0295239 0.01 -0.00258901 0.0451916 0.01 0.0025 -4.97696e-17 0.01 0.00193244 0.0151767 0.01 0.00023294 0.0302687 0.01 0.00023294 -0.0302687 0.01 0.00193244 -0.0151767 0.01 -0.00746379 -0.0440796 0 -0.00746379 -0.0440796 0.01 -0.0025 -4.8545e-17 0.01 -0.00471128 -0.0295239 0.01 -0.00305359 -0.0148033 0.01 -0.0025 -4.8545e-17 0 -0.00471128 -0.0295239 0 -0.00305359 -0.0148033 0 -0.0025 -4.8545e-17 0 -0.0025 -4.8545e-17 0.01 -0.00746379 0.0440796 0.01 -0.00305359 0.0148033 0.01 -0.00471128 0.0295239 0.01 -0.00746379 0.0440796 0 -0.00305359 0.0148033 0 -0.00471128 0.0295239 0 -0.00746379 0.0440796 0 -0.00258901 0.0451916 0 -0.00258901 0.0451916 0.01 -0.00746379 0.0440796 0.01 0.0025 -4.97696e-17 0 0.0025 -4.97696e-17 0.01 -0.00258901 0.0451916 0.01 0.00193244 0.0151767 0.01 0.00023294 0.0302687 0.01 -0.00258901 0.0451916 0 0.00193244 0.0151767 0 0.00023294 0.0302687 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="138"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00762658 -0.0455252 0 -0.0027518 -0.0466372 0 -0.0027518 -0.0466372 0.01 -0.00762658 -0.0455252 0.01 -0.00762658 -0.0455252 0 -0.0027518 -0.0466372 0 -0.0025 -5.0137e-17 0 -0.00478379 -0.0304921 0 -0.00307175 -0.0152888 0 -0.00762658 0.0455252 0 -0.00307175 0.0152888 0 -0.00478379 0.0304921 0 -0.0027518 0.0466372 0 0.0025 -5.13617e-17 0 0.00191429 0.0156622 0 0.000160421 0.0312369 0 0.000160421 -0.0312369 0 0.00191429 -0.0156622 0 -0.0027518 -0.0466372 0 -0.0027518 -0.0466372 0.01 0.0025 -5.13617e-17 0.01 0.000160421 -0.0312369 0.01 0.00191429 -0.0156622 0.01 0.0025 -5.13617e-17 0 0.000160421 -0.0312369 0 0.00191429 -0.0156622 0 -0.00762658 -0.0455252 0.01 -0.0027518 -0.0466372 0.01 -0.0025 -5.0137e-17 0.01 -0.00478379 -0.0304921 0.01 -0.00307175 -0.0152888 0.01 -0.00762658 0.0455252 0.01 -0.00307175 0.0152888 0.01 -0.00478379 0.0304921 0.01 -0.0027518 0.0466372 0.01 0.0025 -5.13617e-17 0.01 0.00191429 0.0156622 0.01 0.000160421 0.0312369 0.01 0.000160421 -0.0312369 0.01 0.00191429 -0.0156622 0.01 -0.00762658 -0.0455252 0 -0.00762658 -0.0455252 0.01 -0.0025 -5.0137e-17 0.01 -0.00478379 -0.0304921 0.01 -0.00307175 -0.0152888 0.01 -0.0025 -5.0137e-17 0 -0.00478379 -0.0304921 0 -0.00307175 -0.0152888 0 -0.0025 -5.0137e-17 0 -0.0025 -5.0137e-17 0.01 -0.00762658 0.0455252 0.01 -0.00307175 0.0152888 0.01 -0.00478379 0.0304921 0.01 -0.00762658 0.0455252 0 -0.00307175 0.0152888 0 -0.00478379 0.0304921 0 -0.00762658 0.0455252 0 -0.0027518 0.0466372 0 -0.0027518 0.0466372 0.01 -0.00762658 0.0455252 0.01 0.0025 -5.13617e-17 0 0.0025 -5.13617e-17 0.01 -0.0027518 0.0466372 0.01 0.00191429 0.0156622 0.01 0.000160421 0.0312369 0.01 -0.0027518 0.0466372 0 0.00191429 0.0156622 0 0.000160421 0.0312369 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="139"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00770923 -0.0462591 0 -0.00283445 -0.0473711 0 -0.00283445 -0.0473711 0.01 -0.00770923 -0.0462591 0.01 -0.00770923 -0.0462591 0 -0.00283445 -0.0473711 0 -0.0025 -5.09453e-17 0 -0.00482061 -0.0309837 0 -0.00308096 -0.0155352 0 -0.00770923 0.0462591 0 -0.00308096 0.0155352 0 -0.00482061 0.0309837 0 -0.00283445 0.0473711 0 0.0025 -5.217e-17 0 0.00190507 0.0159087 0 0.000123604 0.0317285 0 0.000123604 -0.0317285 0 0.00190507 -0.0159087 0 -0.00283445 -0.0473711 0 -0.00283445 -0.0473711 0.01 0.0025 -5.217e-17 0.01 0.000123604 -0.0317285 0.01 0.00190507 -0.0159087 0.01 0.0025 -5.217e-17 0 0.000123604 -0.0317285 0 0.00190507 -0.0159087 0 -0.00770923 -0.0462591 0.01 -0.00283445 -0.0473711 0.01 -0.0025 -5.09453e-17 0.01 -0.00482061 -0.0309837 0.01 -0.00308096 -0.0155352 0.01 -0.00770923 0.0462591 0.01 -0.00308096 0.0155352 0.01 -0.00482061 0.0309837 0.01 -0.00283445 0.0473711 0.01 0.0025 -5.217e-17 0.01 0.00190507 0.0159087 0.01 0.000123604 0.0317285 0.01 0.000123604 -0.0317285 0.01 0.00190507 -0.0159087 0.01 -0.00770923 -0.0462591 0 -0.00770923 -0.0462591 0.01 -0.0025 -5.09453e-17 0.01 -0.00482061 -0.0309837 0.01 -0.00308096 -0.0155352 0.01 -0.0025 -5.09453e-17 0 -0.00482061 -0.0309837 0 -0.00308096 -0.0155352 0 -0.0025 -5.09453e-17 0 -0.0025 -5.09453e-17 0.01 -0.00770923 0.0462591 0.01 -0.00308096 0.0155352 0.01 -0.00482061 0.0309837 0.01 -0.00770923 0.0462591 0 -0.00308096 0.0155352 0 -0.00482061 0.0309837 0 -0.00770923 0.0462591 0 -0.00283445 0.0473711 0 -0.00283445 0.0473711 0.01 -0.00770923 0.0462591 0.01 0.0025 -5.217e-17 0 0.0025 -5.217e-17 0.01 -0.00283445 0.0473711 0.01 0.00190507 0.0159087 0.01 0.000123604 0.0317285 0.01 -0.00283445 0.0473711 0 0.00190507 0.0159087 0 0.000123604 0.0317285 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="140"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00787201 -0.0477047 0 -0.00299724 -0.0488167 0 -0.00299724 -0.0488167 0.01 -0.00787201 -0.0477047 0.01 -0.00787201 -0.0477047 0 -0.00299724 -0.0488167 0 -0.0025 -5.25373e-17 0 -0.00489313 -0.0319519 0 -0.00309912 -0.0160207 0 -0.00787201 0.0477047 0 -0.00309912 0.0160207 0 -0.00489313 0.0319519 0 -0.00299724 0.0488167 0 0.0025 -5.3762e-17 0 0.00188691 0.0163942 0 5.10846e-05 0.0326967 0 5.10846e-05 -0.0326967 0 0.00188691 -0.0163942 0 -0.00299724 -0.0488167 0 -0.00299724 -0.0488167 0.01 0.0025 -5.3762e-17 0.01 5.10846e-05 -0.0326967 0.01 0.00188691 -0.0163942 0.01 0.0025 -5.3762e-17 0 5.10846e-05 -0.0326967 0 0.00188691 -0.0163942 0 -0.00787201 -0.0477047 0.01 -0.00299724 -0.0488167 0.01 -0.0025 -5.25373e-17 0.01 -0.00489313 -0.0319519 0.01 -0.00309912 -0.0160207 0.01 -0.00787201 0.0477047 0.01 -0.00309912 0.0160207 0.01 -0.00489313 0.0319519 0.01 -0.00299724 0.0488167 0.01 0.0025 -5.3762e-17 0.01 0.00188691 0.0163942 0.01 5.10846e-05 0.0326967 0.01 5.10846e-05 -0.0326967 0.01 0.00188691 -0.0163942 0.01 -0.00787201 -0.0477047 0 -0.00787201 -0.0477047 0.01 -0.0025 -5.25373e-17 0.01 -0.00489313 -0.0319519 0.01 -0.00309912 -0.0160207 0.01 -0.0025 -5.25373e-17 0 -0.00489313 -0.0319519 0 -0.00309912 -0.0160207 0 -0.0025 -5.25373e-17 0 -0.0025 -5.25373e-17 0.01 -0.00787201 0.0477047 0.01 -0.00309912 0.0160207 0.01 -0.00489313 0.0319519 0.01 -0.00787201 0.0477047 0 -0.00309912 0.0160207 0 -0.00489313 0.0319519 0 -0.00787201 0.0477047 0 -0.00299724 0.0488167 0 -0.00299724 0.0488167 0.01 -0.00787201 0.0477047 0.01 0.0025 -5.3762e-17 0 0.0025 -5.3762e-17 0.01 -0.00299724 0.0488167 0.01 0.00188691 0.0163942 0.01 5.10846e-05 0.0326967 0.01 -0.00299724 0.0488167 0 0.00188691 0.0163942 0 5.10846e-05 0.0326967 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="141"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00795216 -0.0484163 0 -0.00307738 -0.0495283 0 -0.00307738 -0.0495283 0.01 -0.00795216 -0.0484163 0.01 -0.00795216 -0.0484163 0 -0.00307738 -0.0495283 0 -0.0025 -5.33211e-17 0 -0.00492883 -0.0324286 0 -0.00310806 -0.0162597 0 -0.00795216 0.0484163 0 -0.00310806 0.0162597 0 -0.00492883 0.0324286 0 -0.00307738 0.0495283 0 0.0025 -5.45458e-17 0 0.00187798 0.0166332 0 1.53828e-05 0.0331734 0 1.53828e-05 -0.0331734 0 0.00187798 -0.0166332 0 -0.00307738 -0.0495283 0 -0.00307738 -0.0495283 0.01 0.0025 -5.45458e-17 0.01 1.53828e-05 -0.0331734 0.01 0.00187798 -0.0166332 0.01 0.0025 -5.45458e-17 0 1.53828e-05 -0.0331734 0 0.00187798 -0.0166332 0 -0.00795216 -0.0484163 0.01 -0.00307738 -0.0495283 0.01 -0.0025 -5.33211e-17 0.01 -0.00492883 -0.0324286 0.01 -0.00310806 -0.0162597 0.01 -0.00795216 0.0484163 0.01 -0.00310806 0.0162597 0.01 -0.00492883 0.0324286 0.01 -0.00307738 0.0495283 0.01 0.0025 -5.45458e-17 0.01 0.00187798 0.0166332 0.01 1.53828e-05 0.0331734 0.01 1.53828e-05 -0.0331734 0.01 0.00187798 -0.0166332 0.01 -0.00795216 -0.0484163 0 -0.00795216 -0.0484163 0.01 -0.0025 -5.33211e-17 0.01 -0.00492883 -0.0324286 0.01 -0.00310806 -0.0162597 0.01 -0.0025 -5.33211e-17 0 -0.00492883 -0.0324286 0 -0.00310806 -0.0162597 0 -0.0025 -5.33211e-17 0 -0.0025 -5.33211e-17 0.01 -0.00795216 0.0484163 0.01 -0.00310806 0.0162597 0.01 -0.00492883 0.0324286 0.01 -0.00795216 0.0484163 0 -0.00310806 0.0162597 0 -0.00492883 0.0324286 0 -0.00795216 0.0484163 0 -0.00307738 0.0495283 0 -0.00307738 0.0495283 0.01 -0.00795216 0.0484163 0.01 0.0025 -5.45458e-17 0 0.0025 -5.45458e-17 0.01 -0.00307738 0.0495283 0.01 0.00187798 0.0166332 0.01 1.53828e-05 0.0331734 0.01 -0.00307738 0.0495283 0 0.00187798 0.0166332 0 1.53828e-05 0.0331734 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="152"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0103489 -0.0697 0 -0.00547412 -0.070812 0 -0.00547412 -0.070812 0.01 -0.0103489 -0.0697 0.01 -0.0103489 -0.0697 0 -0.00547412 -0.070812 0 -0.0025 -7.67609e-17 0 -0.00599654 -0.0466841 0 -0.00337536 -0.0234074 0 -0.0103489 0.0697 0 -0.00337536 0.0234074 0 -0.00599654 0.0466841 0 -0.00547412 0.070812 0 0.0025 -7.79855e-17 0 0.00161068 0.0237809 0 -0.00105232 0.0474289 0 -0.00105232 -0.0474289 0 0.00161068 -0.0237809 0 -0.00547412 -0.070812 0 -0.00547412 -0.070812 0.01 0.0025 -7.79855e-17 0.01 -0.00105232 -0.0474289 0.01 0.00161068 -0.0237809 0.01 0.0025 -7.79855e-17 0 -0.00105232 -0.0474289 0 0.00161068 -0.0237809 0 -0.0103489 -0.0697 0.01 -0.00547412 -0.070812 0.01 -0.0025 -7.67609e-17 0.01 -0.00599654 -0.0466841 0.01 -0.00337536 -0.0234074 0.01 -0.0103489 0.0697 0.01 -0.00337536 0.0234074 0.01 -0.00599654 0.0466841 0.01 -0.00547412 0.070812 0.01 0.0025 -7.79855e-17 0.01 0.00161068 0.0237809 0.01 -0.00105232 0.0474289 0.01 -0.00105232 -0.0474289 0.01 0.00161068 -0.0237809 0.01 -0.0103489 -0.0697 0 -0.0103489 -0.0697 0.01 -0.0025 -7.67609e-17 0.01 -0.00599654 -0.0466841 0.01 -0.00337536 -0.0234074 0.01 -0.0025 -7.67609e-17 0 -0.00599654 -0.0466841 0 -0.00337536 -0.0234074 0 -0.0025 -7.67609e-17 0 -0.0025 -7.67609e-17 0.01 -0.0103489 0.0697 0.01 -0.00337536 0.0234074 0.01 -0.00599654 0.0466841 0.01 -0.0103489 0.0697 0 -0.00337536 0.0234074 0 -0.00599654 0.0466841 0 -0.0103489 0.0697 0 -0.00547412 0.070812 0 -0.00547412 0.070812 0.01 -0.0103489 0.0697 0.01 0.0025 -7.79855e-17 0 0.0025 -7.79855e-17 0.01 -0.00547412 0.070812 0.01 0.00161068 0.0237809 0.01 -0.00105232 0.0474289 0.01 -0.00547412 0.070812 0 0.00161068 0.0237809 0 -0.00105232 0.0474289 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="153"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0104065 -0.0702115 0 -0.00553172 -0.0713235 0 -0.00553172 -0.0713235 0.01 -0.0104065 -0.0702115 0.01 -0.0104065 -0.0702115 0 -0.00553172 -0.0713235 0 -0.0025 -7.73242e-17 0 -0.0060222 -0.0470267 0 -0.00338178 -0.0235792 0 -0.0104065 0.0702115 0 -0.00338178 0.0235792 0 -0.0060222 0.0470267 0 -0.00553172 0.0713235 0 0.0025 -7.85488e-17 0 0.00160425 0.0239527 0 -0.00107798 0.0477715 0 -0.00107798 -0.0477715 0 0.00160425 -0.0239527 0 -0.00553172 -0.0713235 0 -0.00553172 -0.0713235 0.01 0.0025 -7.85488e-17 0.01 -0.00107798 -0.0477715 0.01 0.00160425 -0.0239527 0.01 0.0025 -7.85488e-17 0 -0.00107798 -0.0477715 0 0.00160425 -0.0239527 0 -0.0104065 -0.0702115 0.01 -0.00553172 -0.0713235 0.01 -0.0025 -7.73242e-17 0.01 -0.0060222 -0.0470267 0.01 -0.00338178 -0.0235792 0.01 -0.0104065 0.0702115 0.01 -0.00338178 0.0235792 0.01 -0.0060222 0.0470267 0.01 -0.00553172 0.0713235 0.01 0.0025 -7.85488e-17 0.01 0.00160425 0.0239527 0.01 -0.00107798 0.0477715 0.01 -0.00107798 -0.0477715 0.01 0.00160425 -0.0239527 0.01 -0.0104065 -0.0702115 0 -0.0104065 -0.0702115 0.01 -0.0025 -7.73242e-17 0.01 -0.0060222 -0.0470267 0.01 -0.00338178 -0.0235792 0.01 -0.0025 -7.73242e-17 0 -0.0060222 -0.0470267 0 -0.00338178 -0.0235792 0 -0.0025 -7.73242e-17 0 -0.0025 -7.73242e-17 0.01 -0.0104065 0.0702115 0.01 -0.00338178 0.0235792 0.01 -0.0060222 0.0470267 0.01 -0.0104065 0.0702115 0 -0.00338178 0.0235792 0 -0.0060222 0.0470267 0 -0.0104065 0.0702115 0 -0.00553172 0.0713235 0 -0.00553172 0.0713235 0.01 -0.0104065 0.0702115 0.01 0.0025 -7.85488e-17 0 0.0025 -7.85488e-17 0.01 -0.00553172 0.0713235 0.01 0.00160425 0.0239527 0.01 -0.00107798 0.0477715 0.01 -0.00553172 0.0713235 0 0.00160425 0.0239527 0 -0.00107798 0.0477715 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="162"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.011536 -0.0802417 0 -0.00666122 -0.0813537 0 -0.00666122 -0.0813537 0.01 -0.011536 -0.0802417 0.01 -0.011536 -0.0802417 0 -0.00666122 -0.0813537 0 -0.0025 -8.83705e-17 0 -0.00652537 -0.0537448 0 -0.00350775 -0.0269477 0 -0.011536 0.0802417 0 -0.00350775 0.0269477 0 -0.00652537 0.0537448 0 -0.00666122 0.0813537 0 0.0025 -8.95952e-17 0 0.00147828 0.0273211 0 -0.00158115 0.0544896 0 -0.00158115 -0.0544896 0 0.00147828 -0.0273211 0 -0.00666122 -0.0813537 0 -0.00666122 -0.0813537 0.01 0.0025 -8.95952e-17 0.01 -0.00158115 -0.0544896 0.01 0.00147828 -0.0273211 0.01 0.0025 -8.95952e-17 0 -0.00158115 -0.0544896 0 0.00147828 -0.0273211 0 -0.011536 -0.0802417 0.01 -0.00666122 -0.0813537 0.01 -0.0025 -8.83705e-17 0.01 -0.00652537 -0.0537448 0.01 -0.00350775 -0.0269477 0.01 -0.011536 0.0802417 0.01 -0.00350775 0.0269477 0.01 -0.00652537 0.0537448 0.01 -0.00666122 0.0813537 0.01 0.0025 -8.95952e-17 0.01 0.00147828 0.0273211 0.01 -0.00158115 0.0544896 0.01 -0.00158115 -0.0544896 0.01 0.00147828 -0.0273211 0.01 -0.011536 -0.0802417 0 -0.011536 -0.0802417 0.01 -0.0025 -8.83705e-17 0.01 -0.00652537 -0.0537448 0.01 -0.00350775 -0.0269477 0.01 -0.0025 -8.83705e-17 0 -0.00652537 -0.0537448 0 -0.00350775 -0.0269477 0 -0.0025 -8.83705e-17 0 -0.0025 -8.83705e-17 0.01 -0.011536 0.0802417 0.01 -0.00350775 0.0269477 0.01 -0.00652537 0.0537448 0.01 -0.011536 0.0802417 0 -0.00350775 0.0269477 0 -0.00652537 0.0537448 0 -0.011536 0.0802417 0 -0.00666122 0.0813537 0 -0.00666122 0.0813537 0.01 -0.011536 0.0802417 0.01 0.0025 -8.95952e-17 0 0.0025 -8.95952e-17 0.01 -0.00666122 0.0813537 0.01 0.00147828 0.0273211 0.01 -0.00158115 0.0544896 0.01 -0.00666122 0.0813537 0 0.00147828 0.0273211 0 -0.00158115 0.0544896 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="163"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0115936 -0.0807532 0 -0.00671883 -0.0818652 0 -0.00671883 -0.0818652 0.01 -0.0115936 -0.0807532 0.01 -0.0115936 -0.0807532 0 -0.00671883 -0.0818652 0 -0.0025 -8.89339e-17 0 -0.00655103 -0.0540874 0 -0.00351417 -0.0271195 0 -0.0115936 0.0807532 0 -0.00351417 0.0271195 0 -0.00655103 0.0540874 0 -0.00671883 0.0818652 0 0.0025 -9.01585e-17 0 0.00147186 0.0274929 0 -0.00160681 0.0548322 0 -0.00160681 -0.0548322 0 0.00147186 -0.0274929 0 -0.00671883 -0.0818652 0 -0.00671883 -0.0818652 0.01 0.0025 -9.01585e-17 0.01 -0.00160681 -0.0548322 0.01 0.00147186 -0.0274929 0.01 0.0025 -9.01585e-17 0 -0.00160681 -0.0548322 0 0.00147186 -0.0274929 0 -0.0115936 -0.0807532 0.01 -0.00671883 -0.0818652 0.01 -0.0025 -8.89339e-17 0.01 -0.00655103 -0.0540874 0.01 -0.00351417 -0.0271195 0.01 -0.0115936 0.0807532 0.01 -0.00351417 0.0271195 0.01 -0.00655103 0.0540874 0.01 -0.00671883 0.0818652 0.01 0.0025 -9.01585e-17 0.01 0.00147186 0.0274929 0.01 -0.00160681 0.0548322 0.01 -0.00160681 -0.0548322 0.01 0.00147186 -0.0274929 0.01 -0.0115936 -0.0807532 0 -0.0115936 -0.0807532 0.01 -0.0025 -8.89339e-17 0.01 -0.00655103 -0.0540874 0.01 -0.00351417 -0.0271195 0.01 -0.0025 -8.89339e-17 0 -0.00655103 -0.0540874 0 -0.00351417 -0.0271195 0 -0.0025 -8.89339e-17 0 -0.0025 -8.89339e-17 0.01 -0.0115936 0.0807532 0.01 -0.00351417 0.0271195 0.01 -0.00655103 0.0540874 0.01 -0.0115936 0.0807532 0 -0.00351417 0.0271195 0 -0.00655103 0.0540874 0 -0.0115936 0.0807532 0 -0.00671883 0.0818652 0 -0.00671883 0.0818652 0.01 -0.0115936 0.0807532 0.01 0.0025 -9.01585e-17 0 0.0025 -9.01585e-17 0.01 -0.00671883 0.0818652 0.01 0.00147186 0.0274929 0.01 -0.00160681 0.0548322 0.01 -0.00671883 0.0818652 0 0.00147186 0.0274929 0 -0.00160681 0.0548322 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="164"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0117739 -0.0823545 0 -0.00689915 -0.0834665 0 -0.00689915 -0.0834665 0.01 -0.0117739 -0.0823545 0.01 -0.0117739 -0.0823545 0 -0.00689915 -0.0834665 0 -0.0025 -9.06973e-17 0 -0.00663136 -0.0551599 0 -0.00353428 -0.0276572 0 -0.0117739 0.0823545 0 -0.00353428 0.0276572 0 -0.00663136 0.0551599 0 -0.00689915 0.0834665 0 0.0025 -9.1922e-17 0 0.00145175 0.0280307 0 -0.00168714 0.0559047 0 -0.00168714 -0.0559047 0 0.00145175 -0.0280307 0 -0.00689915 -0.0834665 0 -0.00689915 -0.0834665 0.01 0.0025 -9.1922e-17 0.01 -0.00168714 -0.0559047 0.01 0.00145175 -0.0280307 0.01 0.0025 -9.1922e-17 0 -0.00168714 -0.0559047 0 0.00145175 -0.0280307 0 -0.0117739 -0.0823545 0.01 -0.00689915 -0.0834665 0.01 -0.0025 -9.06973e-17 0.01 -0.00663136 -0.0551599 0.01 -0.00353428 -0.0276572 0.01 -0.0117739 0.0823545 0.01 -0.00353428 0.0276572 0.01 -0.00663136 0.0551599 0.01 -0.00689915 0.0834665 0.01 0.0025 -9.1922e-17 0.01 0.00145175 0.0280307 0.01 -0.00168714 0.0559047 0.01 -0.00168714 -0.0559047 0.01 0.00145175 -0.0280307 0.01 -0.0117739 -0.0823545 0 -0.0117739 -0.0823545 0.01 -0.0025 -9.06973e-17 0.01 -0.00663136 -0.0551599 0.01 -0.00353428 -0.0276572 0.01 -0.0025 -9.06973e-17 0 -0.00663136 -0.0551599 0 -0.00353428 -0.0276572 0 -0.0025 -9.06973e-17 0 -0.0025 -9.06973e-17 0.01 -0.0117739 0.0823545 0.01 -0.00353428 0.0276572 0.01 -0.00663136 0.0551599 0.01 -0.0117739 0.0823545 0 -0.00353428 0.0276572 0 -0.00663136 0.0551599 0 -0.0117739 0.0823545 0 -0.00689915 0.0834665 0 -0.00689915 0.0834665 0.01 -0.0117739 0.0823545 0.01 0.0025 -9.1922e-17 0 0.0025 -9.1922e-17 0.01 -0.00689915 0.0834665 0.01 0.00145175 0.0280307 0.01 -0.00168714 0.0559047 0.01 -0.00689915 0.0834665 0 0.00145175 0.0280307 0 -0.00168714 0.0559047 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="165"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0118315 -0.082866 0 -0.00695675 -0.083978 0 -0.00695675 -0.083978 0.01 -0.0118315 -0.082866 0.01 -0.0118315 -0.082866 0 -0.00695675 -0.083978 0 -0.0025 -9.12607e-17 0 -0.00665702 -0.0555025 0 -0.00354071 -0.027829 0 -0.0118315 0.082866 0 -0.00354071 0.027829 0 -0.00665702 0.0555025 0 -0.00695675 0.083978 0 0.0025 -9.24853e-17 0 0.00144533 0.0282024 0 -0.0017128 0.0562473 0 -0.0017128 -0.0562473 0 0.00144533 -0.0282024 0 -0.00695675 -0.083978 0 -0.00695675 -0.083978 0.01 0.0025 -9.24853e-17 0.01 -0.0017128 -0.0562473 0.01 0.00144533 -0.0282024 0.01 0.0025 -9.24853e-17 0 -0.0017128 -0.0562473 0 0.00144533 -0.0282024 0 -0.0118315 -0.082866 0.01 -0.00695675 -0.083978 0.01 -0.0025 -9.12607e-17 0.01 -0.00665702 -0.0555025 0.01 -0.00354071 -0.027829 0.01 -0.0118315 0.082866 0.01 -0.00354071 0.027829 0.01 -0.00665702 0.0555025 0.01 -0.00695675 0.083978 0.01 0.0025 -9.24853e-17 0.01 0.00144533 0.0282024 0.01 -0.0017128 0.0562473 0.01 -0.0017128 -0.0562473 0.01 0.00144533 -0.0282024 0.01 -0.0118315 -0.082866 0 -0.0118315 -0.082866 0.01 -0.0025 -9.12607e-17 0.01 -0.00665702 -0.0555025 0.01 -0.00354071 -0.027829 0.01 -0.0025 -9.12607e-17 0 -0.00665702 -0.0555025 0 -0.00354071 -0.027829 0 -0.0025 -9.12607e-17 0 -0.0025 -9.12607e-17 0.01 -0.0118315 0.082866 0.01 -0.00354071 0.027829 0.01 -0.00665702 0.0555025 0.01 -0.0118315 0.082866 0 -0.00354071 0.027829 0 -0.00665702 0.0555025 0 -0.0118315 0.082866 0 -0.00695675 0.083978 0 -0.00695675 0.083978 0.01 -0.0118315 0.082866 0.01 0.0025 -9.24853e-17 0 0.0025 -9.24853e-17 0.01 -0.00695675 0.083978 0.01 0.00144533 0.0282024 0.01 -0.0017128 0.0562473 0.01 -0.00695675 0.083978 0 0.00144533 0.0282024 0 -0.0017128 0.0562473 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="166"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0120118 -0.0844673 0 -0.00713707 -0.0855793 0 -0.00713707 -0.0855793 0.01 -0.0120118 -0.0844673 0.01 -0.0120118 -0.0844673 0 -0.00713707 -0.0855793 0 -0.0025 -9.30242e-17 0 -0.00673735 -0.056575 0 -0.00356082 -0.0283668 0 -0.0120118 0.0844673 0 -0.00356082 0.0283668 0 -0.00673735 0.056575 0 -0.00713707 0.0855793 0 0.0025 -9.42488e-17 0 0.00142522 0.0287402 0 -0.00179313 0.0573198 0 -0.00179313 -0.0573198 0 0.00142522 -0.0287402 0 -0.00713707 -0.0855793 0 -0.00713707 -0.0855793 0.01 0.0025 -9.42488e-17 0.01 -0.00179313 -0.0573198 0.01 0.00142522 -0.0287402 0.01 0.0025 -9.42488e-17 0 -0.00179313 -0.0573198 0 0.00142522 -0.0287402 0 -0.0120118 -0.0844673 0.01 -0.00713707 -0.0855793 0.01 -0.0025 -9.30242e-17 0.01 -0.00673735 -0.056575 0.01 -0.00356082 -0.0283668 0.01 -0.0120118 0.0844673 0.01 -0.00356082 0.0283668 0.01 -0.00673735 0.056575 0.01 -0.00713707 0.0855793 0.01 0.0025 -9.42488e-17 0.01 0.00142522 0.0287402 0.01 -0.00179313 0.0573198 0.01 -0.00179313 -0.0573198 0.01 0.00142522 -0.0287402 0.01 -0.0120118 -0.0844673 0 -0.0120118 -0.0844673 0.01 -0.0025 -9.30242e-17 0.01 -0.00673735 -0.056575 0.01 -0.00356082 -0.0283668 0.01 -0.0025 -9.30242e-17 0 -0.00673735 -0.056575 0 -0.00356082 -0.0283668 0 -0.0025 -9.30242e-17 0 -0.0025 -9.30242e-17 0.01 -0.0120118 0.0844673 0.01 -0.00356082 0.0283668 0.01 -0.00673735 0.056575 0.01 -0.0120118 0.0844673 0 -0.00356082 0.0283668 0 -0.00673735 0.056575 0 -0.0120118 0.0844673 0 -0.00713707 0.0855793 0 -0.00713707 0.0855793 0.01 -0.0120118 0.0844673 0.01 0.0025 -9.42488e-17 0 0.0025 -9.42488e-17 0.01 -0.00713707 0.0855793 0.01 0.00142522 0.0287402 0.01 -0.00179313 0.0573198 0.01 -0.00713707 0.0855793 0 0.00142522 0.0287402 0 -0.00179313 0.0573198 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="167"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0120669 -0.0849566 0 -0.00719217 -0.0860686 0 -0.00719217 -0.0860686 0.01 -0.0120669 -0.0849566 0.01 -0.0120669 -0.0849566 0 -0.00719217 -0.0860686 0 -0.0025 -9.3563e-17 0 -0.00676189 -0.0569028 0 -0.00356696 -0.0285311 0 -0.0120669 0.0849566 0 -0.00356696 0.0285311 0 -0.00676189 0.0569028 0 -0.00719217 0.0860686 0 0.0025 -9.47877e-17 0 0.00141907 0.0289045 0 -0.00181768 0.0576476 0 -0.00181768 -0.0576476 0 0.00141907 -0.0289045 0 -0.00719217 -0.0860686 0 -0.00719217 -0.0860686 0.01 0.0025 -9.47877e-17 0.01 -0.00181768 -0.0576476 0.01 0.00141907 -0.0289045 0.01 0.0025 -9.47877e-17 0 -0.00181768 -0.0576476 0 0.00141907 -0.0289045 0 -0.0120669 -0.0849566 0.01 -0.00719217 -0.0860686 0.01 -0.0025 -9.3563e-17 0.01 -0.00676189 -0.0569028 0.01 -0.00356696 -0.0285311 0.01 -0.0120669 0.0849566 0.01 -0.00356696 0.0285311 0.01 -0.00676189 0.0569028 0.01 -0.00719217 0.0860686 0.01 0.0025 -9.47877e-17 0.01 0.00141907 0.0289045 0.01 -0.00181768 0.0576476 0.01 -0.00181768 -0.0576476 0.01 0.00141907 -0.0289045 0.01 -0.0120669 -0.0849566 0 -0.0120669 -0.0849566 0.01 -0.0025 -9.3563e-17 0.01 -0.00676189 -0.0569028 0.01 -0.00356696 -0.0285311 0.01 -0.0025 -9.3563e-17 0 -0.00676189 -0.0569028 0 -0.00356696 -0.0285311 0 -0.0025 -9.3563e-17 0 -0.0025 -9.3563e-17 0.01 -0.0120669 0.0849566 0.01 -0.00356696 0.0285311 0.01 -0.00676189 0.0569028 0.01 -0.0120669 0.0849566 0 -0.00356696 0.0285311 0 -0.00676189 0.0569028 0 -0.0120669 0.0849566 0 -0.00719217 0.0860686 0 -0.00719217 0.0860686 0.01 -0.0120669 0.0849566 0.01 0.0025 -9.47877e-17 0 0.0025 -9.47877e-17 0.01 -0.00719217 0.0860686 0.01 0.00141907 0.0289045 0.01 -0.00181768 0.0576476 0.01 -0.00719217 0.0860686 0 0.00141907 0.0289045 0 -0.00181768 0.0576476 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="168"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0122473 -0.0865578 0 -0.00737248 -0.0876698 0 -0.00737248 -0.0876698 0.01 -0.0122473 -0.0865578 0.01 -0.0122473 -0.0865578 0 -0.00737248 -0.0876698 0 -0.0025 -9.53265e-17 0 -0.00684222 -0.0579753 0 -0.00358707 -0.0290688 0 -0.0122473 0.0865578 0 -0.00358707 0.0290688 0 -0.00684222 0.0579753 0 -0.00737248 0.0876698 0 0.0025 -9.65512e-17 0 0.00139896 0.0294423 0 -0.00189801 0.0587201 0 -0.00189801 -0.0587201 0 0.00139896 -0.0294423 0 -0.00737248 -0.0876698 0 -0.00737248 -0.0876698 0.01 0.0025 -9.65512e-17 0.01 -0.00189801 -0.0587201 0.01 0.00139896 -0.0294423 0.01 0.0025 -9.65512e-17 0 -0.00189801 -0.0587201 0 0.00139896 -0.0294423 0 -0.0122473 -0.0865578 0.01 -0.00737248 -0.0876698 0.01 -0.0025 -9.53265e-17 0.01 -0.00684222 -0.0579753 0.01 -0.00358707 -0.0290688 0.01 -0.0122473 0.0865578 0.01 -0.00358707 0.0290688 0.01 -0.00684222 0.0579753 0.01 -0.00737248 0.0876698 0.01 0.0025 -9.65512e-17 0.01 0.00139896 0.0294423 0.01 -0.00189801 0.0587201 0.01 -0.00189801 -0.0587201 0.01 0.00139896 -0.0294423 0.01 -0.0122473 -0.0865578 0 -0.0122473 -0.0865578 0.01 -0.0025 -9.53265e-17 0.01 -0.00684222 -0.0579753 0.01 -0.00358707 -0.0290688 0.01 -0.0025 -9.53265e-17 0 -0.00684222 -0.0579753 0 -0.00358707 -0.0290688 0 -0.0025 -9.53265e-17 0 -0.0025 -9.53265e-17 0.01 -0.0122473 0.0865578 0.01 -0.00358707 0.0290688 0.01 -0.00684222 0.0579753 0.01 -0.0122473 0.0865578 0 -0.00358707 0.0290688 0 -0.00684222 0.0579753 0 -0.0122473 0.0865578 0 -0.00737248 0.0876698 0 -0.00737248 0.0876698 0.01 -0.0122473 0.0865578 0.01 0.0025 -9.65512e-17 0 0.0025 -9.65512e-17 0.01 -0.00737248 0.0876698 0.01 0.00139896 0.0294423 0.01 -0.00189801 0.0587201 0.01 -0.00737248 0.0876698 0 0.00139896 0.0294423 0 -0.00189801 0.0587201 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="169"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0123049 -0.0870694 0 -0.00743009 -0.0881814 0 -0.00743009 -0.0881814 0.01 -0.0123049 -0.0870694 0.01 -0.0123049 -0.0870694 0 -0.00743009 -0.0881814 0 -0.0025 -9.58898e-17 0 -0.00686788 -0.0583179 0 -0.0035935 -0.0292406 0 -0.0123049 0.0870694 0 -0.0035935 0.0292406 0 -0.00686788 0.0583179 0 -0.00743009 0.0881814 0 0.0025 -9.71145e-17 0 0.00139254 0.0296141 0 -0.00192367 0.0590627 0 -0.00192367 -0.0590627 0 0.00139254 -0.0296141 0 -0.00743009 -0.0881814 0 -0.00743009 -0.0881814 0.01 0.0025 -9.71145e-17 0.01 -0.00192367 -0.0590627 0.01 0.00139254 -0.0296141 0.01 0.0025 -9.71145e-17 0 -0.00192367 -0.0590627 0 0.00139254 -0.0296141 0 -0.0123049 -0.0870694 0.01 -0.00743009 -0.0881814 0.01 -0.0025 -9.58898e-17 0.01 -0.00686788 -0.0583179 0.01 -0.0035935 -0.0292406 0.01 -0.0123049 0.0870694 0.01 -0.0035935 0.0292406 0.01 -0.00686788 0.0583179 0.01 -0.00743009 0.0881814 0.01 0.0025 -9.71145e-17 0.01 0.00139254 0.0296141 0.01 -0.00192367 0.0590627 0.01 -0.00192367 -0.0590627 0.01 0.00139254 -0.0296141 0.01 -0.0123049 -0.0870694 0 -0.0123049 -0.0870694 0.01 -0.0025 -9.58898e-17 0.01 -0.00686788 -0.0583179 0.01 -0.0035935 -0.0292406 0.01 -0.0025 -9.58898e-17 0 -0.00686788 -0.0583179 0 -0.0035935 -0.0292406 0 -0.0025 -9.58898e-17 0 -0.0025 -9.58898e-17 0.01 -0.0123049 0.0870694 0.01 -0.0035935 0.0292406 0.01 -0.00686788 0.0583179 0.01 -0.0123049 0.0870694 0 -0.0035935 0.0292406 0 -0.00686788 0.0583179 0 -0.0123049 0.0870694 0 -0.00743009 0.0881814 0 -0.00743009 0.0881814 0.01 -0.0123049 0.0870694 0.01 0.0025 -9.71145e-17 0 0.0025 -9.71145e-17 0.01 -0.00743009 0.0881814 0.01 0.00139254 0.0296141 0.01 -0.00192367 0.0590627 0.01 -0.00743009 0.0881814 0 0.00139254 0.0296141 0 -0.00192367 0.0590627 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="170"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0124852 -0.0886706 0 -0.00761041 -0.0897826 0 -0.00761041 -0.0897826 0.01 -0.0124852 -0.0886706 0.01 -0.0124852 -0.0886706 0 -0.00761041 -0.0897826 0 -0.0025 -9.76533e-17 0 -0.00694821 -0.0593904 0 -0.00361361 -0.0297784 0 -0.0124852 0.0886706 0 -0.00361361 0.0297784 0 -0.00694821 0.0593904 0 -0.00761041 0.0897826 0 0.0025 -9.8878e-17 0 0.00137243 0.0301518 0 -0.002004 0.0601352 0 -0.002004 -0.0601352 0 0.00137243 -0.0301518 0 -0.00761041 -0.0897826 0 -0.00761041 -0.0897826 0.01 0.0025 -9.8878e-17 0.01 -0.002004 -0.0601352 0.01 0.00137243 -0.0301518 0.01 0.0025 -9.8878e-17 0 -0.002004 -0.0601352 0 0.00137243 -0.0301518 0 -0.0124852 -0.0886706 0.01 -0.00761041 -0.0897826 0.01 -0.0025 -9.76533e-17 0.01 -0.00694821 -0.0593904 0.01 -0.00361361 -0.0297784 0.01 -0.0124852 0.0886706 0.01 -0.00361361 0.0297784 0.01 -0.00694821 0.0593904 0.01 -0.00761041 0.0897826 0.01 0.0025 -9.8878e-17 0.01 0.00137243 0.0301518 0.01 -0.002004 0.0601352 0.01 -0.002004 -0.0601352 0.01 0.00137243 -0.0301518 0.01 -0.0124852 -0.0886706 0 -0.0124852 -0.0886706 0.01 -0.0025 -9.76533e-17 0.01 -0.00694821 -0.0593904 0.01 -0.00361361 -0.0297784 0.01 -0.0025 -9.76533e-17 0 -0.00694821 -0.0593904 0 -0.00361361 -0.0297784 0 -0.0025 -9.76533e-17 0 -0.0025 -9.76533e-17 0.01 -0.0124852 0.0886706 0.01 -0.00361361 0.0297784 0.01 -0.00694821 0.0593904 0.01 -0.0124852 0.0886706 0 -0.00361361 0.0297784 0 -0.00694821 0.0593904 0 -0.0124852 0.0886706 0 -0.00761041 0.0897826 0 -0.00761041 0.0897826 0.01 -0.0124852 0.0886706 0.01 0.0025 -9.8878e-17 0 0.0025 -9.8878e-17 0.01 -0.00761041 0.0897826 0.01 0.00137243 0.0301518 0.01 -0.002004 0.0601352 0.01 -0.00761041 0.0897826 0 0.00137243 0.0301518 0 -0.002004 0.0601352 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="171"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0125428 -0.0891822 0 -0.00766801 -0.0902942 0 -0.00766801 -0.0902942 0.01 -0.0125428 -0.0891822 0.01 -0.0125428 -0.0891822 0 -0.00766801 -0.0902942 0 -0.0025 -9.82167e-17 0 -0.00697387 -0.059733 0 -0.00362003 -0.0299502 0 -0.0125428 0.0891822 0 -0.00362003 0.0299502 0 -0.00697387 0.059733 0 -0.00766801 0.0902942 0 0.0025 -9.94413e-17 0 0.001366 0.0303236 0 -0.00202966 0.0604778 0 -0.00202966 -0.0604778 0 0.001366 -0.0303236 0 -0.00766801 -0.0902942 0 -0.00766801 -0.0902942 0.01 0.0025 -9.94413e-17 0.01 -0.00202966 -0.0604778 0.01 0.001366 -0.0303236 0.01 0.0025 -9.94413e-17 0 -0.00202966 -0.0604778 0 0.001366 -0.0303236 0 -0.0125428 -0.0891822 0.01 -0.00766801 -0.0902942 0.01 -0.0025 -9.82167e-17 0.01 -0.00697387 -0.059733 0.01 -0.00362003 -0.0299502 0.01 -0.0125428 0.0891822 0.01 -0.00362003 0.0299502 0.01 -0.00697387 0.059733 0.01 -0.00766801 0.0902942 0.01 0.0025 -9.94413e-17 0.01 0.001366 0.0303236 0.01 -0.00202966 0.0604778 0.01 -0.00202966 -0.0604778 0.01 0.001366 -0.0303236 0.01 -0.0125428 -0.0891822 0 -0.0125428 -0.0891822 0.01 -0.0025 -9.82167e-17 0.01 -0.00697387 -0.059733 0.01 -0.00362003 -0.0299502 0.01 -0.0025 -9.82167e-17 0 -0.00697387 -0.059733 0 -0.00362003 -0.0299502 0 -0.0025 -9.82167e-17 0 -0.0025 -9.82167e-17 0.01 -0.0125428 0.0891822 0.01 -0.00362003 0.0299502 0.01 -0.00697387 0.059733 0.01 -0.0125428 0.0891822 0 -0.00362003 0.0299502 0 -0.00697387 0.059733 0 -0.0125428 0.0891822 0 -0.00766801 0.0902942 0 -0.00766801 0.0902942 0.01 -0.0125428 0.0891822 0.01 0.0025 -9.94413e-17 0 0.0025 -9.94413e-17 0.01 -0.00766801 0.0902942 0.01 0.001366 0.0303236 0.01 -0.00202966 0.0604778 0.01 -0.00766801 0.0902942 0 0.001366 0.0303236 0 -0.00202966 0.0604778 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="154"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0105868 -0.0718128 0 -0.00571204 -0.0729248 0 -0.00571204 -0.0729248 0.01 -0.0105868 -0.0718128 0.01 -0.0105868 -0.0718128 0 -0.00571204 -0.0729248 0 -0.0025 -7.90877e-17 0 -0.00610253 -0.0480992 0 -0.00340189 -0.024117 0 -0.0105868 0.0718128 0 -0.00340189 0.024117 0 -0.00610253 0.0480992 0 -0.00571204 0.0729248 0 0.0025 -8.03123e-17 0 0.00158414 0.0244904 0 -0.00115831 0.048844 0 -0.00115831 -0.048844 0 0.00158414 -0.0244904 0 -0.00571204 -0.0729248 0 -0.00571204 -0.0729248 0.01 0.0025 -8.03123e-17 0.01 -0.00115831 -0.048844 0.01 0.00158414 -0.0244904 0.01 0.0025 -8.03123e-17 0 -0.00115831 -0.048844 0 0.00158414 -0.0244904 0 -0.0105868 -0.0718128 0.01 -0.00571204 -0.0729248 0.01 -0.0025 -7.90877e-17 0.01 -0.00610253 -0.0480992 0.01 -0.00340189 -0.024117 0.01 -0.0105868 0.0718128 0.01 -0.00340189 0.024117 0.01 -0.00610253 0.0480992 0.01 -0.00571204 0.0729248 0.01 0.0025 -8.03123e-17 0.01 0.00158414 0.0244904 0.01 -0.00115831 0.048844 0.01 -0.00115831 -0.048844 0.01 0.00158414 -0.0244904 0.01 -0.0105868 -0.0718128 0 -0.0105868 -0.0718128 0.01 -0.0025 -7.90877e-17 0.01 -0.00610253 -0.0480992 0.01 -0.00340189 -0.024117 0.01 -0.0025 -7.90877e-17 0 -0.00610253 -0.0480992 0 -0.00340189 -0.024117 0 -0.0025 -7.90877e-17 0 -0.0025 -7.90877e-17 0.01 -0.0105868 0.0718128 0.01 -0.00340189 0.024117 0.01 -0.00610253 0.0480992 0.01 -0.0105868 0.0718128 0 -0.00340189 0.024117 0 -0.00610253 0.0480992 0 -0.0105868 0.0718128 0 -0.00571204 0.0729248 0 -0.00571204 0.0729248 0.01 -0.0105868 0.0718128 0.01 0.0025 -8.03123e-17 0 0.0025 -8.03123e-17 0.01 -0.00571204 0.0729248 0.01 0.00158414 0.0244904 0.01 -0.00115831 0.048844 0.01 -0.00571204 0.0729248 0 0.00158414 0.0244904 0 -0.00115831 0.048844 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="155"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0106444 -0.0723243 0 -0.00576965 -0.0734363 0 -0.00576965 -0.0734363 0.01 -0.0106444 -0.0723243 0.01 -0.0106444 -0.0723243 0 -0.00576965 -0.0734363 0 -0.0025 -7.9651e-17 0 -0.00612819 -0.0484418 0 -0.00340832 -0.0242888 0 -0.0106444 0.0723243 0 -0.00340832 0.0242888 0 -0.00612819 0.0484418 0 -0.00576965 0.0734363 0 0.0025 -8.08757e-17 0 0.00157772 0.0246622 0 -0.00118397 0.0491866 0 -0.00118397 -0.0491866 0 0.00157772 -0.0246622 0 -0.00576965 -0.0734363 0 -0.00576965 -0.0734363 0.01 0.0025 -8.08757e-17 0.01 -0.00118397 -0.0491866 0.01 0.00157772 -0.0246622 0.01 0.0025 -8.08757e-17 0 -0.00118397 -0.0491866 0 0.00157772 -0.0246622 0 -0.0106444 -0.0723243 0.01 -0.00576965 -0.0734363 0.01 -0.0025 -7.9651e-17 0.01 -0.00612819 -0.0484418 0.01 -0.00340832 -0.0242888 0.01 -0.0106444 0.0723243 0.01 -0.00340832 0.0242888 0.01 -0.00612819 0.0484418 0.01 -0.00576965 0.0734363 0.01 0.0025 -8.08757e-17 0.01 0.00157772 0.0246622 0.01 -0.00118397 0.0491866 0.01 -0.00118397 -0.0491866 0.01 0.00157772 -0.0246622 0.01 -0.0106444 -0.0723243 0 -0.0106444 -0.0723243 0.01 -0.0025 -7.9651e-17 0.01 -0.00612819 -0.0484418 0.01 -0.00340832 -0.0242888 0.01 -0.0025 -7.9651e-17 0 -0.00612819 -0.0484418 0 -0.00340832 -0.0242888 0 -0.0025 -7.9651e-17 0 -0.0025 -7.9651e-17 0.01 -0.0106444 0.0723243 0.01 -0.00340832 0.0242888 0.01 -0.00612819 0.0484418 0.01 -0.0106444 0.0723243 0 -0.00340832 0.0242888 0 -0.00612819 0.0484418 0 -0.0106444 0.0723243 0 -0.00576965 0.0734363 0 -0.00576965 0.0734363 0.01 -0.0106444 0.0723243 0.01 0.0025 -8.08757e-17 0 0.0025 -8.08757e-17 0.01 -0.00576965 0.0734363 0.01 0.00157772 0.0246622 0.01 -0.00118397 0.0491866 0.01 -0.00576965 0.0734363 0 0.00157772 0.0246622 0 -0.00118397 0.0491866 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="156"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0108247 -0.0739256 0 -0.00594997 -0.0750376 0 -0.00594997 -0.0750376 0.01 -0.0108247 -0.0739256 0.01 -0.0108247 -0.0739256 0 -0.00594997 -0.0750376 0 -0.0025 -8.14145e-17 0 -0.00620852 -0.0495143 0 -0.00342843 -0.0248265 0 -0.0108247 0.0739256 0 -0.00342843 0.0248265 0 -0.00620852 0.0495143 0 -0.00594997 0.0750376 0 0.0025 -8.26392e-17 0 0.00155761 0.0252 0 -0.0012643 0.0502591 0 -0.0012643 -0.0502591 0 0.00155761 -0.0252 0 -0.00594997 -0.0750376 0 -0.00594997 -0.0750376 0.01 0.0025 -8.26392e-17 0.01 -0.0012643 -0.0502591 0.01 0.00155761 -0.0252 0.01 0.0025 -8.26392e-17 0 -0.0012643 -0.0502591 0 0.00155761 -0.0252 0 -0.0108247 -0.0739256 0.01 -0.00594997 -0.0750376 0.01 -0.0025 -8.14145e-17 0.01 -0.00620852 -0.0495143 0.01 -0.00342843 -0.0248265 0.01 -0.0108247 0.0739256 0.01 -0.00342843 0.0248265 0.01 -0.00620852 0.0495143 0.01 -0.00594997 0.0750376 0.01 0.0025 -8.26392e-17 0.01 0.00155761 0.0252 0.01 -0.0012643 0.0502591 0.01 -0.0012643 -0.0502591 0.01 0.00155761 -0.0252 0.01 -0.0108247 -0.0739256 0 -0.0108247 -0.0739256 0.01 -0.0025 -8.14145e-17 0.01 -0.00620852 -0.0495143 0.01 -0.00342843 -0.0248265 0.01 -0.0025 -8.14145e-17 0 -0.00620852 -0.0495143 0 -0.00342843 -0.0248265 0 -0.0025 -8.14145e-17 0 -0.0025 -8.14145e-17 0.01 -0.0108247 0.0739256 0.01 -0.00342843 0.0248265 0.01 -0.00620852 0.0495143 0.01 -0.0108247 0.0739256 0 -0.00342843 0.0248265 0 -0.00620852 0.0495143 0 -0.0108247 0.0739256 0 -0.00594997 0.0750376 0 -0.00594997 0.0750376 0.01 -0.0108247 0.0739256 0.01 0.0025 -8.26392e-17 0 0.0025 -8.26392e-17 0.01 -0.00594997 0.0750376 0.01 0.00155761 0.0252 0.01 -0.0012643 0.0502591 0.01 -0.00594997 0.0750376 0 0.00155761 0.0252 0 -0.0012643 0.0502591 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="157"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0108798 -0.0744148 0 -0.00600506 -0.0755268 0 -0.00600506 -0.0755268 0.01 -0.0108798 -0.0744148 0.01 -0.0108798 -0.0744148 0 -0.00600506 -0.0755268 0 -0.0025 -8.19534e-17 0 -0.00623306 -0.049842 0 -0.00343457 -0.0249908 0 -0.0108798 0.0744148 0 -0.00343457 0.0249908 0 -0.00623306 0.049842 0 -0.00600506 0.0755268 0 0.0025 -8.3178e-17 0 0.00155146 0.0253643 0 -0.00128885 0.0505868 0 -0.00128885 -0.0505868 0 0.00155146 -0.0253643 0 -0.00600506 -0.0755268 0 -0.00600506 -0.0755268 0.01 0.0025 -8.3178e-17 0.01 -0.00128885 -0.0505868 0.01 0.00155146 -0.0253643 0.01 0.0025 -8.3178e-17 0 -0.00128885 -0.0505868 0 0.00155146 -0.0253643 0 -0.0108798 -0.0744148 0.01 -0.00600506 -0.0755268 0.01 -0.0025 -8.19534e-17 0.01 -0.00623306 -0.049842 0.01 -0.00343457 -0.0249908 0.01 -0.0108798 0.0744148 0.01 -0.00343457 0.0249908 0.01 -0.00623306 0.049842 0.01 -0.00600506 0.0755268 0.01 0.0025 -8.3178e-17 0.01 0.00155146 0.0253643 0.01 -0.00128885 0.0505868 0.01 -0.00128885 -0.0505868 0.01 0.00155146 -0.0253643 0.01 -0.0108798 -0.0744148 0 -0.0108798 -0.0744148 0.01 -0.0025 -8.19534e-17 0.01 -0.00623306 -0.049842 0.01 -0.00343457 -0.0249908 0.01 -0.0025 -8.19534e-17 0 -0.00623306 -0.049842 0 -0.00343457 -0.0249908 0 -0.0025 -8.19534e-17 0 -0.0025 -8.19534e-17 0.01 -0.0108798 0.0744148 0.01 -0.00343457 0.0249908 0.01 -0.00623306 0.049842 0.01 -0.0108798 0.0744148 0 -0.00343457 0.0249908 0 -0.00623306 0.049842 0 -0.0108798 0.0744148 0 -0.00600506 0.0755268 0 -0.00600506 0.0755268 0.01 -0.0108798 0.0744148 0.01 0.0025 -8.3178e-17 0 0.0025 -8.3178e-17 0.01 -0.00600506 0.0755268 0.01 0.00155146 0.0253643 0.01 -0.00128885 0.0505868 0.01 -0.00600506 0.0755268 0 0.00155146 0.0253643 0 -0.00128885 0.0505868 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="158"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0110602 -0.0760161 0 -0.00618538 -0.0771281 0 -0.00618538 -0.0771281 0.01 -0.0110602 -0.0760161 0.01 -0.0110602 -0.0760161 0 -0.00618538 -0.0771281 0 -0.0025 -8.37169e-17 0 -0.00631339 -0.0509146 0 -0.00345468 -0.0255286 0 -0.0110602 0.0760161 0 -0.00345468 0.0255286 0 -0.00631339 0.0509146 0 -0.00618538 0.0771281 0 0.0025 -8.49415e-17 0 0.00153135 0.025902 0 -0.00136917 0.0516594 0 -0.00136917 -0.0516594 0 0.00153135 -0.025902 0 -0.00618538 -0.0771281 0 -0.00618538 -0.0771281 0.01 0.0025 -8.49415e-17 0.01 -0.00136917 -0.0516594 0.01 0.00153135 -0.025902 0.01 0.0025 -8.49415e-17 0 -0.00136917 -0.0516594 0 0.00153135 -0.025902 0 -0.0110602 -0.0760161 0.01 -0.00618538 -0.0771281 0.01 -0.0025 -8.37169e-17 0.01 -0.00631339 -0.0509146 0.01 -0.00345468 -0.0255286 0.01 -0.0110602 0.0760161 0.01 -0.00345468 0.0255286 0.01 -0.00631339 0.0509146 0.01 -0.00618538 0.0771281 0.01 0.0025 -8.49415e-17 0.01 0.00153135 0.025902 0.01 -0.00136917 0.0516594 0.01 -0.00136917 -0.0516594 0.01 0.00153135 -0.025902 0.01 -0.0110602 -0.0760161 0 -0.0110602 -0.0760161 0.01 -0.0025 -8.37169e-17 0.01 -0.00631339 -0.0509146 0.01 -0.00345468 -0.0255286 0.01 -0.0025 -8.37169e-17 0 -0.00631339 -0.0509146 0 -0.00345468 -0.0255286 0 -0.0025 -8.37169e-17 0 -0.0025 -8.37169e-17 0.01 -0.0110602 0.0760161 0.01 -0.00345468 0.0255286 0.01 -0.00631339 0.0509146 0.01 -0.0110602 0.0760161 0 -0.00345468 0.0255286 0 -0.00631339 0.0509146 0 -0.0110602 0.0760161 0 -0.00618538 0.0771281 0 -0.00618538 0.0771281 0.01 -0.0110602 0.0760161 0.01 0.0025 -8.49415e-17 0 0.0025 -8.49415e-17 0.01 -0.00618538 0.0771281 0.01 0.00153135 0.025902 0.01 -0.00136917 0.0516594 0.01 -0.00618538 0.0771281 0 0.00153135 0.025902 0 -0.00136917 0.0516594 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="159"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0111178 -0.0765276 0 -0.00624298 -0.0776396 0 -0.00624298 -0.0776396 0.01 -0.0111178 -0.0765276 0.01 -0.0111178 -0.0765276 0 -0.00624298 -0.0776396 0 -0.0025 -8.42802e-17 0 -0.00633905 -0.0512572 0 -0.00346111 -0.0257004 0 -0.0111178 0.0765276 0 -0.00346111 0.0257004 0 -0.00633905 0.0512572 0 -0.00624298 0.0776396 0 0.0025 -8.55048e-17 0 0.00152493 0.0260738 0 -0.00139484 0.052002 0 -0.00139484 -0.052002 0 0.00152493 -0.0260738 0 -0.00624298 -0.0776396 0 -0.00624298 -0.0776396 0.01 0.0025 -8.55048e-17 0.01 -0.00139484 -0.052002 0.01 0.00152493 -0.0260738 0.01 0.0025 -8.55048e-17 0 -0.00139484 -0.052002 0 0.00152493 -0.0260738 0 -0.0111178 -0.0765276 0.01 -0.00624298 -0.0776396 0.01 -0.0025 -8.42802e-17 0.01 -0.00633905 -0.0512572 0.01 -0.00346111 -0.0257004 0.01 -0.0111178 0.0765276 0.01 -0.00346111 0.0257004 0.01 -0.00633905 0.0512572 0.01 -0.00624298 0.0776396 0.01 0.0025 -8.55048e-17 0.01 0.00152493 0.0260738 0.01 -0.00139484 0.052002 0.01 -0.00139484 -0.052002 0.01 0.00152493 -0.0260738 0.01 -0.0111178 -0.0765276 0 -0.0111178 -0.0765276 0.01 -0.0025 -8.42802e-17 0.01 -0.00633905 -0.0512572 0.01 -0.00346111 -0.0257004 0.01 -0.0025 -8.42802e-17 0 -0.00633905 -0.0512572 0 -0.00346111 -0.0257004 0 -0.0025 -8.42802e-17 0 -0.0025 -8.42802e-17 0.01 -0.0111178 0.0765276 0.01 -0.00346111 0.0257004 0.01 -0.00633905 0.0512572 0.01 -0.0111178 0.0765276 0 -0.00346111 0.0257004 0 -0.00633905 0.0512572 0 -0.0111178 0.0765276 0 -0.00624298 0.0776396 0 -0.00624298 0.0776396 0.01 -0.0111178 0.0765276 0.01 0.0025 -8.55048e-17 0 0.0025 -8.55048e-17 0.01 -0.00624298 0.0776396 0.01 0.00152493 0.0260738 0.01 -0.00139484 0.052002 0.01 -0.00624298 0.0776396 0 0.00152493 0.0260738 0 -0.00139484 0.052002 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="160"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0112981 -0.0781289 0 -0.0064233 -0.0792409 0 -0.0064233 -0.0792409 0.01 -0.0112981 -0.0781289 0.01 -0.0112981 -0.0781289 0 -0.0064233 -0.0792409 0 -0.0025 -8.60437e-17 0 -0.00641938 -0.0523297 0 -0.00348122 -0.0262381 0 -0.0112981 0.0781289 0 -0.00348122 0.0262381 0 -0.00641938 0.0523297 0 -0.0064233 0.0792409 0 0.0025 -8.72683e-17 0 0.00150482 0.0266116 0 -0.00147516 0.0530745 0 -0.00147516 -0.0530745 0 0.00150482 -0.0266116 0 -0.0064233 -0.0792409 0 -0.0064233 -0.0792409 0.01 0.0025 -8.72683e-17 0.01 -0.00147516 -0.0530745 0.01 0.00150482 -0.0266116 0.01 0.0025 -8.72683e-17 0 -0.00147516 -0.0530745 0 0.00150482 -0.0266116 0 -0.0112981 -0.0781289 0.01 -0.0064233 -0.0792409 0.01 -0.0025 -8.60437e-17 0.01 -0.00641938 -0.0523297 0.01 -0.00348122 -0.0262381 0.01 -0.0112981 0.0781289 0.01 -0.00348122 0.0262381 0.01 -0.00641938 0.0523297 0.01 -0.0064233 0.0792409 0.01 0.0025 -8.72683e-17 0.01 0.00150482 0.0266116 0.01 -0.00147516 0.0530745 0.01 -0.00147516 -0.0530745 0.01 0.00150482 -0.0266116 0.01 -0.0112981 -0.0781289 0 -0.0112981 -0.0781289 0.01 -0.0025 -8.60437e-17 0.01 -0.00641938 -0.0523297 0.01 -0.00348122 -0.0262381 0.01 -0.0025 -8.60437e-17 0 -0.00641938 -0.0523297 0 -0.00348122 -0.0262381 0 -0.0025 -8.60437e-17 0 -0.0025 -8.60437e-17 0.01 -0.0112981 0.0781289 0.01 -0.00348122 0.0262381 0.01 -0.00641938 0.0523297 0.01 -0.0112981 0.0781289 0 -0.00348122 0.0262381 0 -0.00641938 0.0523297 0 -0.0112981 0.0781289 0 -0.0064233 0.0792409 0 -0.0064233 0.0792409 0.01 -0.0112981 0.0781289 0.01 0.0025 -8.72683e-17 0 0.0025 -8.72683e-17 0.01 -0.0064233 0.0792409 0.01 0.00150482 0.0266116 0.01 -0.00147516 0.0530745 0.01 -0.0064233 0.0792409 0 0.00150482 0.0266116 0 -0.00147516 0.0530745 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="161"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0113557 -0.0786404 0 -0.00648091 -0.0797524 0 -0.00648091 -0.0797524 0.01 -0.0113557 -0.0786404 0.01 -0.0113557 -0.0786404 0 -0.00648091 -0.0797524 0 -0.0025 -8.6607e-17 0 -0.00644504 -0.0526723 0 -0.00348764 -0.0264099 0 -0.0113557 0.0786404 0 -0.00348764 0.0264099 0 -0.00644504 0.0526723 0 -0.00648091 0.0797524 0 0.0025 -8.78317e-17 0 0.00149839 0.0267834 0 -0.00150082 0.0534171 0 -0.00150082 -0.0534171 0 0.00149839 -0.0267834 0 -0.00648091 -0.0797524 0 -0.00648091 -0.0797524 0.01 0.0025 -8.78317e-17 0.01 -0.00150082 -0.0534171 0.01 0.00149839 -0.0267834 0.01 0.0025 -8.78317e-17 0 -0.00150082 -0.0534171 0 0.00149839 -0.0267834 0 -0.0113557 -0.0786404 0.01 -0.00648091 -0.0797524 0.01 -0.0025 -8.6607e-17 0.01 -0.00644504 -0.0526723 0.01 -0.00348764 -0.0264099 0.01 -0.0113557 0.0786404 0.01 -0.00348764 0.0264099 0.01 -0.00644504 0.0526723 0.01 -0.00648091 0.0797524 0.01 0.0025 -8.78317e-17 0.01 0.00149839 0.0267834 0.01 -0.00150082 0.0534171 0.01 -0.00150082 -0.0534171 0.01 0.00149839 -0.0267834 0.01 -0.0113557 -0.0786404 0 -0.0113557 -0.0786404 0.01 -0.0025 -8.6607e-17 0.01 -0.00644504 -0.0526723 0.01 -0.00348764 -0.0264099 0.01 -0.0025 -8.6607e-17 0 -0.00644504 -0.0526723 0 -0.00348764 -0.0264099 0 -0.0025 -8.6607e-17 0 -0.0025 -8.6607e-17 0.01 -0.0113557 0.0786404 0.01 -0.00348764 0.0264099 0.01 -0.00644504 0.0526723 0.01 -0.0113557 0.0786404 0 -0.00348764 0.0264099 0 -0.00644504 0.0526723 0 -0.0113557 0.0786404 0 -0.00648091 0.0797524 0 -0.00648091 0.0797524 0.01 -0.0113557 0.0786404 0.01 0.0025 -8.78317e-17 0 0.0025 -8.78317e-17 0.01 -0.00648091 0.0797524 0.01 0.00149839 0.0267834 0.01 -0.00150082 0.0534171 0.01 -0.00648091 0.0797524 0 0.00149839 0.0267834 0 -0.00150082 0.0534171 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="172"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0138476 -0.100769 0 -0.00897282 -0.101881 0 -0.00897282 -0.101881 0.01 -0.0138476 -0.100769 0.01 -0.0138476 -0.100769 0 -0.00897282 -0.101881 0 -0.0025 -1.10977e-16 0 -0.00755514 -0.0674938 0 -0.00376555 -0.0338414 0 -0.0138476 0.100769 0 -0.00376555 0.0338414 0 -0.00755514 0.0674938 0 -0.00897282 0.101881 0 0.0025 -1.12202e-16 0 0.00122048 0.0342149 0 -0.00261093 0.0682386 0 -0.00261093 -0.0682386 0 0.00122048 -0.0342149 0 -0.00897282 -0.101881 0 -0.00897282 -0.101881 0.01 0.0025 -1.12202e-16 0.01 -0.00261093 -0.0682386 0.01 0.00122048 -0.0342149 0.01 0.0025 -1.12202e-16 0 -0.00261093 -0.0682386 0 0.00122048 -0.0342149 0 -0.0138476 -0.100769 0.01 -0.00897282 -0.101881 0.01 -0.0025 -1.10977e-16 0.01 -0.00755514 -0.0674938 0.01 -0.00376555 -0.0338414 0.01 -0.0138476 0.100769 0.01 -0.00376555 0.0338414 0.01 -0.00755514 0.0674938 0.01 -0.00897282 0.101881 0.01 0.0025 -1.12202e-16 0.01 0.00122048 0.0342149 0.01 -0.00261093 0.0682386 0.01 -0.00261093 -0.0682386 0.01 0.00122048 -0.0342149 0.01 -0.0138476 -0.100769 0 -0.0138476 -0.100769 0.01 -0.0025 -1.10977e-16 0.01 -0.00755514 -0.0674938 0.01 -0.00376555 -0.0338414 0.01 -0.0025 -1.10977e-16 0 -0.00755514 -0.0674938 0 -0.00376555 -0.0338414 0 -0.0025 -1.10977e-16 0 -0.0025 -1.10977e-16 0.01 -0.0138476 0.100769 0.01 -0.00376555 0.0338414 0.01 -0.00755514 0.0674938 0.01 -0.0138476 0.100769 0 -0.00376555 0.0338414 0 -0.00755514 0.0674938 0 -0.0138476 0.100769 0 -0.00897282 0.101881 0 -0.00897282 0.101881 0.01 -0.0138476 0.100769 0.01 0.0025 -1.12202e-16 0 0.0025 -1.12202e-16 0.01 -0.00897282 0.101881 0.01 0.00122048 0.0342149 0.01 -0.00261093 0.0682386 0.01 -0.00897282 0.101881 0 0.00122048 0.0342149 0 -0.00261093 0.0682386 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="173"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0138852 -0.101103 0 -0.00901039 -0.102215 0 -0.00901039 -0.102215 0.01 -0.0138852 -0.101103 0.01 -0.0138852 -0.101103 0 -0.00901039 -0.102215 0 -0.0025 -1.11345e-16 0 -0.00757188 -0.0677173 0 -0.00376974 -0.0339535 0 -0.0138852 0.101103 0 -0.00376974 0.0339535 0 -0.00757188 0.0677173 0 -0.00901039 0.102215 0 0.0025 -1.1257e-16 0 0.00121629 0.0343269 0 -0.00262766 0.0684621 0 -0.00262766 -0.0684621 0 0.00121629 -0.0343269 0 -0.00901039 -0.102215 0 -0.00901039 -0.102215 0.01 0.0025 -1.1257e-16 0.01 -0.00262766 -0.0684621 0.01 0.00121629 -0.0343269 0.01 0.0025 -1.1257e-16 0 -0.00262766 -0.0684621 0 0.00121629 -0.0343269 0 -0.0138852 -0.101103 0.01 -0.00901039 -0.102215 0.01 -0.0025 -1.11345e-16 0.01 -0.00757188 -0.0677173 0.01 -0.00376974 -0.0339535 0.01 -0.0138852 0.101103 0.01 -0.00376974 0.0339535 0.01 -0.00757188 0.0677173 0.01 -0.00901039 0.102215 0.01 0.0025 -1.1257e-16 0.01 0.00121629 0.0343269 0.01 -0.00262766 0.0684621 0.01 -0.00262766 -0.0684621 0.01 0.00121629 -0.0343269 0.01 -0.0138852 -0.101103 0 -0.0138852 -0.101103 0.01 -0.0025 -1.11345e-16 0.01 -0.00757188 -0.0677173 0.01 -0.00376974 -0.0339535 0.01 -0.0025 -1.11345e-16 0 -0.00757188 -0.0677173 0 -0.00376974 -0.0339535 0 -0.0025 -1.11345e-16 0 -0.0025 -1.11345e-16 0.01 -0.0138852 0.101103 0.01 -0.00376974 0.0339535 0.01 -0.00757188 0.0677173 0.01 -0.0138852 0.101103 0 -0.00376974 0.0339535 0 -0.00757188 0.0677173 0 -0.0138852 0.101103 0 -0.00901039 0.102215 0 -0.00901039 0.102215 0.01 -0.0138852 0.101103 0.01 0.0025 -1.1257e-16 0 0.0025 -1.1257e-16 0.01 -0.00901039 0.102215 0.01 0.00121629 0.0343269 0.01 -0.00262766 0.0684621 0.01 -0.00901039 0.102215 0 0.00121629 0.0343269 0 -0.00262766 0.0684621 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="182"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0149946 -0.110955 0 -0.0101199 -0.112067 0 -0.0101199 -0.112067 0.01 -0.0149946 -0.110955 0.01 -0.0149946 -0.110955 0 -0.0101199 -0.112067 0 -0.0025 -1.22195e-16 0 -0.00806612 -0.0743162 0 -0.00389348 -0.0372622 0 -0.0149946 0.110955 0 -0.00389348 0.0372622 0 -0.00806612 0.0743162 0 -0.0101199 0.112067 0 0.0025 -1.2342e-16 0 0.00109256 0.0376356 0 -0.00312191 0.075061 0 -0.00312191 -0.075061 0 0.00109256 -0.0376356 0 -0.0101199 -0.112067 0 -0.0101199 -0.112067 0.01 0.0025 -1.2342e-16 0.01 -0.00312191 -0.075061 0.01 0.00109256 -0.0376356 0.01 0.0025 -1.2342e-16 0 -0.00312191 -0.075061 0 0.00109256 -0.0376356 0 -0.0149946 -0.110955 0.01 -0.0101199 -0.112067 0.01 -0.0025 -1.22195e-16 0.01 -0.00806612 -0.0743162 0.01 -0.00389348 -0.0372622 0.01 -0.0149946 0.110955 0.01 -0.00389348 0.0372622 0.01 -0.00806612 0.0743162 0.01 -0.0101199 0.112067 0.01 0.0025 -1.2342e-16 0.01 0.00109256 0.0376356 0.01 -0.00312191 0.075061 0.01 -0.00312191 -0.075061 0.01 0.00109256 -0.0376356 0.01 -0.0149946 -0.110955 0 -0.0149946 -0.110955 0.01 -0.0025 -1.22195e-16 0.01 -0.00806612 -0.0743162 0.01 -0.00389348 -0.0372622 0.01 -0.0025 -1.22195e-16 0 -0.00806612 -0.0743162 0 -0.00389348 -0.0372622 0 -0.0025 -1.22195e-16 0 -0.0025 -1.22195e-16 0.01 -0.0149946 0.110955 0.01 -0.00389348 0.0372622 0.01 -0.00806612 0.0743162 0.01 -0.0149946 0.110955 0 -0.00389348 0.0372622 0 -0.00806612 0.0743162 0 -0.0149946 0.110955 0 -0.0101199 0.112067 0 -0.0101199 0.112067 0.01 -0.0149946 0.110955 0.01 0.0025 -1.2342e-16 0 0.0025 -1.2342e-16 0.01 -0.0101199 0.112067 0.01 0.00109256 0.0376356 0.01 -0.00312191 0.075061 0.01 -0.0101199 0.112067 0 0.00109256 0.0376356 0 -0.00312191 0.075061 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="183"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0150322 -0.111289 0 -0.0101574 -0.112401 0 -0.0101574 -0.112401 0.01 -0.0150322 -0.111289 0.01 -0.0150322 -0.111289 0 -0.0101574 -0.112401 0 -0.0025 -1.22563e-16 0 -0.00808286 -0.0745396 0 -0.00389767 -0.0373742 0 -0.0150322 0.111289 0 -0.00389767 0.0373742 0 -0.00808286 0.0745396 0 -0.0101574 0.112401 0 0.0025 -1.23787e-16 0 0.00108837 0.0377476 0 -0.00313864 0.0752844 0 -0.00313864 -0.0752844 0 0.00108837 -0.0377476 0 -0.0101574 -0.112401 0 -0.0101574 -0.112401 0.01 0.0025 -1.23787e-16 0.01 -0.00313864 -0.0752844 0.01 0.00108837 -0.0377476 0.01 0.0025 -1.23787e-16 0 -0.00313864 -0.0752844 0 0.00108837 -0.0377476 0 -0.0150322 -0.111289 0.01 -0.0101574 -0.112401 0.01 -0.0025 -1.22563e-16 0.01 -0.00808286 -0.0745396 0.01 -0.00389767 -0.0373742 0.01 -0.0150322 0.111289 0.01 -0.00389767 0.0373742 0.01 -0.00808286 0.0745396 0.01 -0.0101574 0.112401 0.01 0.0025 -1.23787e-16 0.01 0.00108837 0.0377476 0.01 -0.00313864 0.0752844 0.01 -0.00313864 -0.0752844 0.01 0.00108837 -0.0377476 0.01 -0.0150322 -0.111289 0 -0.0150322 -0.111289 0.01 -0.0025 -1.22563e-16 0.01 -0.00808286 -0.0745396 0.01 -0.00389767 -0.0373742 0.01 -0.0025 -1.22563e-16 0 -0.00808286 -0.0745396 0 -0.00389767 -0.0373742 0 -0.0025 -1.22563e-16 0 -0.0025 -1.22563e-16 0.01 -0.0150322 0.111289 0.01 -0.00389767 0.0373742 0.01 -0.00808286 0.0745396 0.01 -0.0150322 0.111289 0 -0.00389767 0.0373742 0 -0.00808286 0.0745396 0 -0.0150322 0.111289 0 -0.0101574 0.112401 0 -0.0101574 0.112401 0.01 -0.0150322 0.111289 0.01 0.0025 -1.23787e-16 0 0.0025 -1.23787e-16 0.01 -0.0101574 0.112401 0.01 0.00108837 0.0377476 0.01 -0.00313864 0.0752844 0.01 -0.0101574 0.112401 0 0.00108837 0.0377476 0 -0.00313864 0.0752844 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="184"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.015225 -0.113001 0 -0.0103503 -0.114113 0 -0.0103503 -0.114113 0.01 -0.015225 -0.113001 0.01 -0.015225 -0.113001 0 -0.0103503 -0.114113 0 -0.0025 -1.24449e-16 0 -0.00816877 -0.0756866 0 -0.00391917 -0.0379493 0 -0.015225 0.113001 0 -0.00391917 0.0379493 0 -0.00816877 0.0756866 0 -0.0103503 0.114113 0 0.0025 -1.25673e-16 0 0.00106686 0.0383227 0 -0.00322455 0.0764314 0 -0.00322455 -0.0764314 0 0.00106686 -0.0383227 0 -0.0103503 -0.114113 0 -0.0103503 -0.114113 0.01 0.0025 -1.25673e-16 0.01 -0.00322455 -0.0764314 0.01 0.00106686 -0.0383227 0.01 0.0025 -1.25673e-16 0 -0.00322455 -0.0764314 0 0.00106686 -0.0383227 0 -0.015225 -0.113001 0.01 -0.0103503 -0.114113 0.01 -0.0025 -1.24449e-16 0.01 -0.00816877 -0.0756866 0.01 -0.00391917 -0.0379493 0.01 -0.015225 0.113001 0.01 -0.00391917 0.0379493 0.01 -0.00816877 0.0756866 0.01 -0.0103503 0.114113 0.01 0.0025 -1.25673e-16 0.01 0.00106686 0.0383227 0.01 -0.00322455 0.0764314 0.01 -0.00322455 -0.0764314 0.01 0.00106686 -0.0383227 0.01 -0.015225 -0.113001 0 -0.015225 -0.113001 0.01 -0.0025 -1.24449e-16 0.01 -0.00816877 -0.0756866 0.01 -0.00391917 -0.0379493 0.01 -0.0025 -1.24449e-16 0 -0.00816877 -0.0756866 0 -0.00391917 -0.0379493 0 -0.0025 -1.24449e-16 0 -0.0025 -1.24449e-16 0.01 -0.015225 0.113001 0.01 -0.00391917 0.0379493 0.01 -0.00816877 0.0756866 0.01 -0.015225 0.113001 0 -0.00391917 0.0379493 0 -0.00816877 0.0756866 0 -0.015225 0.113001 0 -0.0103503 0.114113 0 -0.0103503 0.114113 0.01 -0.015225 0.113001 0.01 0.0025 -1.25673e-16 0 0.0025 -1.25673e-16 0.01 -0.0103503 0.114113 0.01 0.00106686 0.0383227 0.01 -0.00322455 0.0764314 0.01 -0.0103503 0.114113 0 0.00106686 0.0383227 0 -0.00322455 0.0764314 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="185"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0152626 -0.113335 0 -0.0103878 -0.114447 0 -0.0103878 -0.114447 0.01 -0.0152626 -0.113335 0.01 -0.0152626 -0.113335 0 -0.0103878 -0.114447 0 -0.0025 -1.24816e-16 0 -0.0081855 -0.0759101 0 -0.00392336 -0.0380613 0 -0.0152626 0.113335 0 -0.00392336 0.0380613 0 -0.0081855 0.0759101 0 -0.0103878 0.114447 0 0.0025 -1.26041e-16 0 0.00106267 0.0384348 0 -0.00324128 0.0766549 0 -0.00324128 -0.0766549 0 0.00106267 -0.0384348 0 -0.0103878 -0.114447 0 -0.0103878 -0.114447 0.01 0.0025 -1.26041e-16 0.01 -0.00324128 -0.0766549 0.01 0.00106267 -0.0384348 0.01 0.0025 -1.26041e-16 0 -0.00324128 -0.0766549 0 0.00106267 -0.0384348 0 -0.0152626 -0.113335 0.01 -0.0103878 -0.114447 0.01 -0.0025 -1.24816e-16 0.01 -0.0081855 -0.0759101 0.01 -0.00392336 -0.0380613 0.01 -0.0152626 0.113335 0.01 -0.00392336 0.0380613 0.01 -0.0081855 0.0759101 0.01 -0.0103878 0.114447 0.01 0.0025 -1.26041e-16 0.01 0.00106267 0.0384348 0.01 -0.00324128 0.0766549 0.01 -0.00324128 -0.0766549 0.01 0.00106267 -0.0384348 0.01 -0.0152626 -0.113335 0 -0.0152626 -0.113335 0.01 -0.0025 -1.24816e-16 0.01 -0.0081855 -0.0759101 0.01 -0.00392336 -0.0380613 0.01 -0.0025 -1.24816e-16 0 -0.0081855 -0.0759101 0 -0.00392336 -0.0380613 0 -0.0025 -1.24816e-16 0 -0.0025 -1.24816e-16 0.01 -0.0152626 0.113335 0.01 -0.00392336 0.0380613 0.01 -0.0081855 0.0759101 0.01 -0.0152626 0.113335 0 -0.00392336 0.0380613 0 -0.0081855 0.0759101 0 -0.0152626 0.113335 0 -0.0103878 0.114447 0 -0.0103878 0.114447 0.01 -0.0152626 0.113335 0.01 0.0025 -1.26041e-16 0 0.0025 -1.26041e-16 0.01 -0.0103878 0.114447 0.01 0.00106267 0.0384348 0.01 -0.00324128 0.0766549 0.01 -0.0103878 0.114447 0 0.00106267 0.0384348 0 -0.00324128 0.0766549 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="186"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0154554 -0.115047 0 -0.0105807 -0.116159 0 -0.0105807 -0.116159 0.01 -0.0154554 -0.115047 0.01 -0.0154554 -0.115047 0 -0.0105807 -0.116159 0 -0.0025 -1.26702e-16 0 -0.00827141 -0.0770571 0 -0.00394487 -0.0386364 0 -0.0154554 0.115047 0 -0.00394487 0.0386364 0 -0.00827141 0.0770571 0 -0.0105807 0.116159 0 0.0025 -1.27927e-16 0 0.00104116 0.0390099 0 -0.00332719 0.0778019 0 -0.00332719 -0.0778019 0 0.00104116 -0.0390099 0 -0.0105807 -0.116159 0 -0.0105807 -0.116159 0.01 0.0025 -1.27927e-16 0.01 -0.00332719 -0.0778019 0.01 0.00104116 -0.0390099 0.01 0.0025 -1.27927e-16 0 -0.00332719 -0.0778019 0 0.00104116 -0.0390099 0 -0.0154554 -0.115047 0.01 -0.0105807 -0.116159 0.01 -0.0025 -1.26702e-16 0.01 -0.00827141 -0.0770571 0.01 -0.00394487 -0.0386364 0.01 -0.0154554 0.115047 0.01 -0.00394487 0.0386364 0.01 -0.00827141 0.0770571 0.01 -0.0105807 0.116159 0.01 0.0025 -1.27927e-16 0.01 0.00104116 0.0390099 0.01 -0.00332719 0.0778019 0.01 -0.00332719 -0.0778019 0.01 0.00104116 -0.0390099 0.01 -0.0154554 -0.115047 0 -0.0154554 -0.115047 0.01 -0.0025 -1.26702e-16 0.01 -0.00827141 -0.0770571 0.01 -0.00394487 -0.0386364 0.01 -0.0025 -1.26702e-16 0 -0.00827141 -0.0770571 0 -0.00394487 -0.0386364 0 -0.0025 -1.26702e-16 0 -0.0025 -1.26702e-16 0.01 -0.0154554 0.115047 0.01 -0.00394487 0.0386364 0.01 -0.00827141 0.0770571 0.01 -0.0154554 0.115047 0 -0.00394487 0.0386364 0 -0.00827141 0.0770571 0 -0.0154554 0.115047 0 -0.0105807 0.116159 0 -0.0105807 0.116159 0.01 -0.0154554 0.115047 0.01 0.0025 -1.27927e-16 0 0.0025 -1.27927e-16 0.01 -0.0105807 0.116159 0.01 0.00104116 0.0390099 0.01 -0.00332719 0.0778019 0.01 -0.0105807 0.116159 0 0.00104116 0.0390099 0 -0.00332719 0.0778019 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="187"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.015493 -0.115381 0 -0.0106182 -0.116493 0 -0.0106182 -0.116493 0.01 -0.015493 -0.115381 0.01 -0.015493 -0.115381 0 -0.0106182 -0.116493 0 -0.0025 -1.27069e-16 0 -0.00828814 -0.0772805 0 -0.00394906 -0.0387485 0 -0.015493 0.115381 0 -0.00394906 0.0387485 0 -0.00828814 0.0772805 0 -0.0106182 0.116493 0 0.0025 -1.28294e-16 0 0.00103698 0.0391219 0 -0.00334393 0.0780253 0 -0.00334393 -0.0780253 0 0.00103698 -0.0391219 0 -0.0106182 -0.116493 0 -0.0106182 -0.116493 0.01 0.0025 -1.28294e-16 0.01 -0.00334393 -0.0780253 0.01 0.00103698 -0.0391219 0.01 0.0025 -1.28294e-16 0 -0.00334393 -0.0780253 0 0.00103698 -0.0391219 0 -0.015493 -0.115381 0.01 -0.0106182 -0.116493 0.01 -0.0025 -1.27069e-16 0.01 -0.00828814 -0.0772805 0.01 -0.00394906 -0.0387485 0.01 -0.015493 0.115381 0.01 -0.00394906 0.0387485 0.01 -0.00828814 0.0772805 0.01 -0.0106182 0.116493 0.01 0.0025 -1.28294e-16 0.01 0.00103698 0.0391219 0.01 -0.00334393 0.0780253 0.01 -0.00334393 -0.0780253 0.01 0.00103698 -0.0391219 0.01 -0.015493 -0.115381 0 -0.015493 -0.115381 0.01 -0.0025 -1.27069e-16 0.01 -0.00828814 -0.0772805 0.01 -0.00394906 -0.0387485 0.01 -0.0025 -1.27069e-16 0 -0.00828814 -0.0772805 0 -0.00394906 -0.0387485 0 -0.0025 -1.27069e-16 0 -0.0025 -1.27069e-16 0.01 -0.015493 0.115381 0.01 -0.00394906 0.0387485 0.01 -0.00828814 0.0772805 0.01 -0.015493 0.115381 0 -0.00394906 0.0387485 0 -0.00828814 0.0772805 0 -0.015493 0.115381 0 -0.0106182 0.116493 0 -0.0106182 0.116493 0.01 -0.015493 0.115381 0.01 0.0025 -1.28294e-16 0 0.0025 -1.28294e-16 0.01 -0.0106182 0.116493 0.01 0.00103698 0.0391219 0.01 -0.00334393 0.0780253 0.01 -0.0106182 0.116493 0 0.00103698 0.0391219 0 -0.00334393 0.0780253 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="188"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0156833 -0.117071 0 -0.0108086 -0.118183 0 -0.0108086 -0.118183 0.01 -0.0156833 -0.117071 0.01 -0.0156833 -0.117071 0 -0.0108086 -0.118183 0 -0.0025 -1.28931e-16 0 -0.00837293 -0.0784126 0 -0.00397029 -0.0393161 0 -0.0156833 0.117071 0 -0.00397029 0.0393161 0 -0.00837293 0.0784126 0 -0.0108086 0.118183 0 0.0025 -1.30155e-16 0 0.00101575 0.0396896 0 -0.00342872 0.0791574 0 -0.00342872 -0.0791574 0 0.00101575 -0.0396896 0 -0.0108086 -0.118183 0 -0.0108086 -0.118183 0.01 0.0025 -1.30155e-16 0.01 -0.00342872 -0.0791574 0.01 0.00101575 -0.0396896 0.01 0.0025 -1.30155e-16 0 -0.00342872 -0.0791574 0 0.00101575 -0.0396896 0 -0.0156833 -0.117071 0.01 -0.0108086 -0.118183 0.01 -0.0025 -1.28931e-16 0.01 -0.00837293 -0.0784126 0.01 -0.00397029 -0.0393161 0.01 -0.0156833 0.117071 0.01 -0.00397029 0.0393161 0.01 -0.00837293 0.0784126 0.01 -0.0108086 0.118183 0.01 0.0025 -1.30155e-16 0.01 0.00101575 0.0396896 0.01 -0.00342872 0.0791574 0.01 -0.00342872 -0.0791574 0.01 0.00101575 -0.0396896 0.01 -0.0156833 -0.117071 0 -0.0156833 -0.117071 0.01 -0.0025 -1.28931e-16 0.01 -0.00837293 -0.0784126 0.01 -0.00397029 -0.0393161 0.01 -0.0025 -1.28931e-16 0 -0.00837293 -0.0784126 0 -0.00397029 -0.0393161 0 -0.0025 -1.28931e-16 0 -0.0025 -1.28931e-16 0.01 -0.0156833 0.117071 0.01 -0.00397029 0.0393161 0.01 -0.00837293 0.0784126 0.01 -0.0156833 0.117071 0 -0.00397029 0.0393161 0 -0.00837293 0.0784126 0 -0.0156833 0.117071 0 -0.0108086 0.118183 0 -0.0108086 0.118183 0.01 -0.0156833 0.117071 0.01 0.0025 -1.30155e-16 0 0.0025 -1.30155e-16 0.01 -0.0108086 0.118183 0.01 0.00101575 0.0396896 0.01 -0.00342872 0.0791574 0.01 -0.0108086 0.118183 0 0.00101575 0.0396896 0 -0.00342872 0.0791574 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="189"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0157234 -0.117427 0 -0.0108486 -0.118539 0 -0.0108486 -0.118539 0.01 -0.0157234 -0.117427 0.01 -0.0157234 -0.117427 0 -0.0108486 -0.118539 0 -0.0025 -1.29323e-16 0 -0.00839079 -0.0786509 0 -0.00397476 -0.0394356 0 -0.0157234 0.117427 0 -0.00397476 0.0394356 0 -0.00839079 0.0786509 0 -0.0108486 0.118539 0 0.0025 -1.30547e-16 0 0.00101128 0.0398091 0 -0.00344657 0.0793957 0 -0.00344657 -0.0793957 0 0.00101128 -0.0398091 0 -0.0108486 -0.118539 0 -0.0108486 -0.118539 0.01 0.0025 -1.30547e-16 0.01 -0.00344657 -0.0793957 0.01 0.00101128 -0.0398091 0.01 0.0025 -1.30547e-16 0 -0.00344657 -0.0793957 0 0.00101128 -0.0398091 0 -0.0157234 -0.117427 0.01 -0.0108486 -0.118539 0.01 -0.0025 -1.29323e-16 0.01 -0.00839079 -0.0786509 0.01 -0.00397476 -0.0394356 0.01 -0.0157234 0.117427 0.01 -0.00397476 0.0394356 0.01 -0.00839079 0.0786509 0.01 -0.0108486 0.118539 0.01 0.0025 -1.30547e-16 0.01 0.00101128 0.0398091 0.01 -0.00344657 0.0793957 0.01 -0.00344657 -0.0793957 0.01 0.00101128 -0.0398091 0.01 -0.0157234 -0.117427 0 -0.0157234 -0.117427 0.01 -0.0025 -1.29323e-16 0.01 -0.00839079 -0.0786509 0.01 -0.00397476 -0.0394356 0.01 -0.0025 -1.29323e-16 0 -0.00839079 -0.0786509 0 -0.00397476 -0.0394356 0 -0.0025 -1.29323e-16 0 -0.0025 -1.29323e-16 0.01 -0.0157234 0.117427 0.01 -0.00397476 0.0394356 0.01 -0.00839079 0.0786509 0.01 -0.0157234 0.117427 0 -0.00397476 0.0394356 0 -0.00839079 0.0786509 0 -0.0157234 0.117427 0 -0.0108486 0.118539 0 -0.0108486 0.118539 0.01 -0.0157234 0.117427 0.01 0.0025 -1.30547e-16 0 0.0025 -1.30547e-16 0.01 -0.0108486 0.118539 0.01 0.00101128 0.0398091 0.01 -0.00344657 0.0793957 0.01 -0.0108486 0.118539 0 0.00101128 0.0398091 0 -0.00344657 0.0793957 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="190"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0159138 -0.119117 0 -0.011039 -0.120229 0 -0.011039 -0.120229 0.01 -0.0159138 -0.119117 0.01 -0.0159138 -0.119117 0 -0.011039 -0.120229 0 -0.0025 -1.31184e-16 0 -0.00847558 -0.079783 0 -0.00399598 -0.0400032 0 -0.0159138 0.119117 0 -0.00399598 0.0400032 0 -0.00847558 0.079783 0 -0.011039 0.120229 0 0.0025 -1.32409e-16 0 0.000990051 0.0403767 0 -0.00353136 0.0805278 0 -0.00353136 -0.0805278 0 0.000990051 -0.0403767 0 -0.011039 -0.120229 0 -0.011039 -0.120229 0.01 0.0025 -1.32409e-16 0.01 -0.00353136 -0.0805278 0.01 0.000990051 -0.0403767 0.01 0.0025 -1.32409e-16 0 -0.00353136 -0.0805278 0 0.000990051 -0.0403767 0 -0.0159138 -0.119117 0.01 -0.011039 -0.120229 0.01 -0.0025 -1.31184e-16 0.01 -0.00847558 -0.079783 0.01 -0.00399598 -0.0400032 0.01 -0.0159138 0.119117 0.01 -0.00399598 0.0400032 0.01 -0.00847558 0.079783 0.01 -0.011039 0.120229 0.01 0.0025 -1.32409e-16 0.01 0.000990051 0.0403767 0.01 -0.00353136 0.0805278 0.01 -0.00353136 -0.0805278 0.01 0.000990051 -0.0403767 0.01 -0.0159138 -0.119117 0 -0.0159138 -0.119117 0.01 -0.0025 -1.31184e-16 0.01 -0.00847558 -0.079783 0.01 -0.00399598 -0.0400032 0.01 -0.0025 -1.31184e-16 0 -0.00847558 -0.079783 0 -0.00399598 -0.0400032 0 -0.0025 -1.31184e-16 0 -0.0025 -1.31184e-16 0.01 -0.0159138 0.119117 0.01 -0.00399598 0.0400032 0.01 -0.00847558 0.079783 0.01 -0.0159138 0.119117 0 -0.00399598 0.0400032 0 -0.00847558 0.079783 0 -0.0159138 0.119117 0 -0.011039 0.120229 0 -0.011039 0.120229 0.01 -0.0159138 0.119117 0.01 0.0025 -1.32409e-16 0 0.0025 -1.32409e-16 0.01 -0.011039 0.120229 0.01 0.000990051 0.0403767 0.01 -0.00353136 0.0805278 0.01 -0.011039 0.120229 0 0.000990051 0.0403767 0 -0.00353136 0.0805278 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="191"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0159513 -0.119451 0 -0.0110765 -0.120563 0 -0.0110765 -0.120563 0.01 -0.0159513 -0.119451 0.01 -0.0159513 -0.119451 0 -0.0110765 -0.120563 0 -0.0025 -1.31552e-16 0 -0.00849231 -0.0800065 0 -0.00400017 -0.0401153 0 -0.0159513 0.119451 0 -0.00400017 0.0401153 0 -0.00849231 0.0800065 0 -0.0110765 0.120563 0 0.0025 -1.32776e-16 0 0.000985861 0.0404887 0 -0.0035481 0.0807513 0 -0.0035481 -0.0807513 0 0.000985861 -0.0404887 0 -0.0110765 -0.120563 0 -0.0110765 -0.120563 0.01 0.0025 -1.32776e-16 0.01 -0.0035481 -0.0807513 0.01 0.000985861 -0.0404887 0.01 0.0025 -1.32776e-16 0 -0.0035481 -0.0807513 0 0.000985861 -0.0404887 0 -0.0159513 -0.119451 0.01 -0.0110765 -0.120563 0.01 -0.0025 -1.31552e-16 0.01 -0.00849231 -0.0800065 0.01 -0.00400017 -0.0401153 0.01 -0.0159513 0.119451 0.01 -0.00400017 0.0401153 0.01 -0.00849231 0.0800065 0.01 -0.0110765 0.120563 0.01 0.0025 -1.32776e-16 0.01 0.000985861 0.0404887 0.01 -0.0035481 0.0807513 0.01 -0.0035481 -0.0807513 0.01 0.000985861 -0.0404887 0.01 -0.0159513 -0.119451 0 -0.0159513 -0.119451 0.01 -0.0025 -1.31552e-16 0.01 -0.00849231 -0.0800065 0.01 -0.00400017 -0.0401153 0.01 -0.0025 -1.31552e-16 0 -0.00849231 -0.0800065 0 -0.00400017 -0.0401153 0 -0.0025 -1.31552e-16 0 -0.0025 -1.31552e-16 0.01 -0.0159513 0.119451 0.01 -0.00400017 0.0401153 0.01 -0.00849231 0.0800065 0.01 -0.0159513 0.119451 0 -0.00400017 0.0401153 0 -0.00849231 0.0800065 0 -0.0159513 0.119451 0 -0.0110765 0.120563 0 -0.0110765 0.120563 0.01 -0.0159513 0.119451 0.01 0.0025 -1.32776e-16 0 0.0025 -1.32776e-16 0.01 -0.0110765 0.120563 0.01 0.000985861 0.0404887 0.01 -0.0035481 0.0807513 0.01 -0.0110765 0.120563 0 0.000985861 0.0404887 0 -0.0035481 0.0807513 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="174"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0140755 -0.102793 0 -0.00920072 -0.103905 0 -0.00920072 -0.103905 0.01 -0.0140755 -0.102793 0.01 -0.0140755 -0.102793 0 -0.00920072 -0.103905 0 -0.0025 -1.13206e-16 0 -0.00765667 -0.0688494 0 -0.00379097 -0.0345211 0 -0.0140755 0.102793 0 -0.00379097 0.0345211 0 -0.00765667 0.0688494 0 -0.00920072 0.103905 0 0.0025 -1.14431e-16 0 0.00119506 0.0348945 0 -0.00271245 0.0695942 0 -0.00271245 -0.0695942 0 0.00119506 -0.0348945 0 -0.00920072 -0.103905 0 -0.00920072 -0.103905 0.01 0.0025 -1.14431e-16 0.01 -0.00271245 -0.0695942 0.01 0.00119506 -0.0348945 0.01 0.0025 -1.14431e-16 0 -0.00271245 -0.0695942 0 0.00119506 -0.0348945 0 -0.0140755 -0.102793 0.01 -0.00920072 -0.103905 0.01 -0.0025 -1.13206e-16 0.01 -0.00765667 -0.0688494 0.01 -0.00379097 -0.0345211 0.01 -0.0140755 0.102793 0.01 -0.00379097 0.0345211 0.01 -0.00765667 0.0688494 0.01 -0.00920072 0.103905 0.01 0.0025 -1.14431e-16 0.01 0.00119506 0.0348945 0.01 -0.00271245 0.0695942 0.01 -0.00271245 -0.0695942 0.01 0.00119506 -0.0348945 0.01 -0.0140755 -0.102793 0 -0.0140755 -0.102793 0.01 -0.0025 -1.13206e-16 0.01 -0.00765667 -0.0688494 0.01 -0.00379097 -0.0345211 0.01 -0.0025 -1.13206e-16 0 -0.00765667 -0.0688494 0 -0.00379097 -0.0345211 0 -0.0025 -1.13206e-16 0 -0.0025 -1.13206e-16 0.01 -0.0140755 0.102793 0.01 -0.00379097 0.0345211 0.01 -0.00765667 0.0688494 0.01 -0.0140755 0.102793 0 -0.00379097 0.0345211 0 -0.00765667 0.0688494 0 -0.0140755 0.102793 0 -0.00920072 0.103905 0 -0.00920072 0.103905 0.01 -0.0140755 0.102793 0.01 0.0025 -1.14431e-16 0 0.0025 -1.14431e-16 0.01 -0.00920072 0.103905 0.01 0.00119506 0.0348945 0.01 -0.00271245 0.0695942 0.01 -0.00920072 0.103905 0 0.00119506 0.0348945 0 -0.00271245 0.0695942 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="175"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0141156 -0.103149 0 -0.00924079 -0.104261 0 -0.00924079 -0.104261 0.01 -0.0141156 -0.103149 0.01 -0.0141156 -0.103149 0 -0.00924079 -0.104261 0 -0.0025 -1.13598e-16 0 -0.00767452 -0.0690877 0 -0.00379544 -0.0346406 0 -0.0141156 0.103149 0 -0.00379544 0.0346406 0 -0.00767452 0.0690877 0 -0.00924079 0.104261 0 0.0025 -1.14823e-16 0 0.0011906 0.035014 0 -0.0027303 0.0698325 0 -0.0027303 -0.0698325 0 0.0011906 -0.035014 0 -0.00924079 -0.104261 0 -0.00924079 -0.104261 0.01 0.0025 -1.14823e-16 0.01 -0.0027303 -0.0698325 0.01 0.0011906 -0.035014 0.01 0.0025 -1.14823e-16 0 -0.0027303 -0.0698325 0 0.0011906 -0.035014 0 -0.0141156 -0.103149 0.01 -0.00924079 -0.104261 0.01 -0.0025 -1.13598e-16 0.01 -0.00767452 -0.0690877 0.01 -0.00379544 -0.0346406 0.01 -0.0141156 0.103149 0.01 -0.00379544 0.0346406 0.01 -0.00767452 0.0690877 0.01 -0.00924079 0.104261 0.01 0.0025 -1.14823e-16 0.01 0.0011906 0.035014 0.01 -0.0027303 0.0698325 0.01 -0.0027303 -0.0698325 0.01 0.0011906 -0.035014 0.01 -0.0141156 -0.103149 0 -0.0141156 -0.103149 0.01 -0.0025 -1.13598e-16 0.01 -0.00767452 -0.0690877 0.01 -0.00379544 -0.0346406 0.01 -0.0025 -1.13598e-16 0 -0.00767452 -0.0690877 0 -0.00379544 -0.0346406 0 -0.0025 -1.13598e-16 0 -0.0025 -1.13598e-16 0.01 -0.0141156 0.103149 0.01 -0.00379544 0.0346406 0.01 -0.00767452 0.0690877 0.01 -0.0141156 0.103149 0 -0.00379544 0.0346406 0 -0.00767452 0.0690877 0 -0.0141156 0.103149 0 -0.00924079 0.104261 0 -0.00924079 0.104261 0.01 -0.0141156 0.103149 0.01 0.0025 -1.14823e-16 0 0.0025 -1.14823e-16 0.01 -0.00924079 0.104261 0.01 0.0011906 0.035014 0.01 -0.0027303 0.0698325 0.01 -0.00924079 0.104261 0 0.0011906 0.035014 0 -0.0027303 0.0698325 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="176"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0143059 -0.104839 0 -0.00943113 -0.105951 0 -0.00943113 -0.105951 0.01 -0.0143059 -0.104839 0.01 -0.0143059 -0.104839 0 -0.00943113 -0.105951 0 -0.0025 -1.1546e-16 0 -0.00775931 -0.0702198 0 -0.00381667 -0.0352082 0 -0.0143059 0.104839 0 -0.00381667 0.0352082 0 -0.00775931 0.0702198 0 -0.00943113 0.105951 0 0.0025 -1.16684e-16 0 0.00116937 0.0355817 0 -0.00281509 0.0709646 0 -0.00281509 -0.0709646 0 0.00116937 -0.0355817 0 -0.00943113 -0.105951 0 -0.00943113 -0.105951 0.01 0.0025 -1.16684e-16 0.01 -0.00281509 -0.0709646 0.01 0.00116937 -0.0355817 0.01 0.0025 -1.16684e-16 0 -0.00281509 -0.0709646 0 0.00116937 -0.0355817 0 -0.0143059 -0.104839 0.01 -0.00943113 -0.105951 0.01 -0.0025 -1.1546e-16 0.01 -0.00775931 -0.0702198 0.01 -0.00381667 -0.0352082 0.01 -0.0143059 0.104839 0.01 -0.00381667 0.0352082 0.01 -0.00775931 0.0702198 0.01 -0.00943113 0.105951 0.01 0.0025 -1.16684e-16 0.01 0.00116937 0.0355817 0.01 -0.00281509 0.0709646 0.01 -0.00281509 -0.0709646 0.01 0.00116937 -0.0355817 0.01 -0.0143059 -0.104839 0 -0.0143059 -0.104839 0.01 -0.0025 -1.1546e-16 0.01 -0.00775931 -0.0702198 0.01 -0.00381667 -0.0352082 0.01 -0.0025 -1.1546e-16 0 -0.00775931 -0.0702198 0 -0.00381667 -0.0352082 0 -0.0025 -1.1546e-16 0 -0.0025 -1.1546e-16 0.01 -0.0143059 0.104839 0.01 -0.00381667 0.0352082 0.01 -0.00775931 0.0702198 0.01 -0.0143059 0.104839 0 -0.00381667 0.0352082 0 -0.00775931 0.0702198 0 -0.0143059 0.104839 0 -0.00943113 0.105951 0 -0.00943113 0.105951 0.01 -0.0143059 0.104839 0.01 0.0025 -1.16684e-16 0 0.0025 -1.16684e-16 0.01 -0.00943113 0.105951 0.01 0.00116937 0.0355817 0.01 -0.00281509 0.0709646 0.01 -0.00943113 0.105951 0 0.00116937 0.0355817 0 -0.00281509 0.0709646 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="177"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0143435 -0.105173 0 -0.0094687 -0.106285 0 -0.0094687 -0.106285 0.01 -0.0143435 -0.105173 0.01 -0.0143435 -0.105173 0 -0.0094687 -0.106285 0 -0.0025 -1.15827e-16 0 -0.00777605 -0.0704432 0 -0.00382086 -0.0353203 0 -0.0143435 0.105173 0 -0.00382086 0.0353203 0 -0.00777605 0.0704432 0 -0.0094687 0.106285 0 0.0025 -1.17052e-16 0 0.00116518 0.0356937 0 -0.00283183 0.071188 0 -0.00283183 -0.071188 0 0.00116518 -0.0356937 0 -0.0094687 -0.106285 0 -0.0094687 -0.106285 0.01 0.0025 -1.17052e-16 0.01 -0.00283183 -0.071188 0.01 0.00116518 -0.0356937 0.01 0.0025 -1.17052e-16 0 -0.00283183 -0.071188 0 0.00116518 -0.0356937 0 -0.0143435 -0.105173 0.01 -0.0094687 -0.106285 0.01 -0.0025 -1.15827e-16 0.01 -0.00777605 -0.0704432 0.01 -0.00382086 -0.0353203 0.01 -0.0143435 0.105173 0.01 -0.00382086 0.0353203 0.01 -0.00777605 0.0704432 0.01 -0.0094687 0.106285 0.01 0.0025 -1.17052e-16 0.01 0.00116518 0.0356937 0.01 -0.00283183 0.071188 0.01 -0.00283183 -0.071188 0.01 0.00116518 -0.0356937 0.01 -0.0143435 -0.105173 0 -0.0143435 -0.105173 0.01 -0.0025 -1.15827e-16 0.01 -0.00777605 -0.0704432 0.01 -0.00382086 -0.0353203 0.01 -0.0025 -1.15827e-16 0 -0.00777605 -0.0704432 0 -0.00382086 -0.0353203 0 -0.0025 -1.15827e-16 0 -0.0025 -1.15827e-16 0.01 -0.0143435 0.105173 0.01 -0.00382086 0.0353203 0.01 -0.00777605 0.0704432 0.01 -0.0143435 0.105173 0 -0.00382086 0.0353203 0 -0.00777605 0.0704432 0 -0.0143435 0.105173 0 -0.0094687 0.106285 0 -0.0094687 0.106285 0.01 -0.0143435 0.105173 0.01 0.0025 -1.17052e-16 0 0.0025 -1.17052e-16 0.01 -0.0094687 0.106285 0.01 0.00116518 0.0356937 0.01 -0.00283183 0.071188 0.01 -0.0094687 0.106285 0 0.00116518 0.0356937 0 -0.00283183 0.071188 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="178"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0145363 -0.106885 0 -0.00966154 -0.107997 0 -0.00966154 -0.107997 0.01 -0.0145363 -0.106885 0.01 -0.0145363 -0.106885 0 -0.00966154 -0.107997 0 -0.0025 -1.17713e-16 0 -0.00786195 -0.0715902 0 -0.00384236 -0.0358954 0 -0.0145363 0.106885 0 -0.00384236 0.0358954 0 -0.00786195 0.0715902 0 -0.00966154 0.107997 0 0.0025 -1.18938e-16 0 0.00114367 0.0362688 0 -0.00291774 0.072335 0 -0.00291774 -0.072335 0 0.00114367 -0.0362688 0 -0.00966154 -0.107997 0 -0.00966154 -0.107997 0.01 0.0025 -1.18938e-16 0.01 -0.00291774 -0.072335 0.01 0.00114367 -0.0362688 0.01 0.0025 -1.18938e-16 0 -0.00291774 -0.072335 0 0.00114367 -0.0362688 0 -0.0145363 -0.106885 0.01 -0.00966154 -0.107997 0.01 -0.0025 -1.17713e-16 0.01 -0.00786195 -0.0715902 0.01 -0.00384236 -0.0358954 0.01 -0.0145363 0.106885 0.01 -0.00384236 0.0358954 0.01 -0.00786195 0.0715902 0.01 -0.00966154 0.107997 0.01 0.0025 -1.18938e-16 0.01 0.00114367 0.0362688 0.01 -0.00291774 0.072335 0.01 -0.00291774 -0.072335 0.01 0.00114367 -0.0362688 0.01 -0.0145363 -0.106885 0 -0.0145363 -0.106885 0.01 -0.0025 -1.17713e-16 0.01 -0.00786195 -0.0715902 0.01 -0.00384236 -0.0358954 0.01 -0.0025 -1.17713e-16 0 -0.00786195 -0.0715902 0 -0.00384236 -0.0358954 0 -0.0025 -1.17713e-16 0 -0.0025 -1.17713e-16 0.01 -0.0145363 0.106885 0.01 -0.00384236 0.0358954 0.01 -0.00786195 0.0715902 0.01 -0.0145363 0.106885 0 -0.00384236 0.0358954 0 -0.00786195 0.0715902 0 -0.0145363 0.106885 0 -0.00966154 0.107997 0 -0.00966154 0.107997 0.01 -0.0145363 0.106885 0.01 0.0025 -1.18938e-16 0 0.0025 -1.18938e-16 0.01 -0.00966154 0.107997 0.01 0.00114367 0.0362688 0.01 -0.00291774 0.072335 0.01 -0.00966154 0.107997 0 0.00114367 0.0362688 0 -0.00291774 0.072335 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="179"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0145739 -0.107219 0 -0.00969911 -0.108331 0 -0.00969911 -0.108331 0.01 -0.0145739 -0.107219 0.01 -0.0145739 -0.107219 0 -0.00969911 -0.108331 0 -0.0025 -1.1808e-16 0 -0.00787869 -0.0718137 0 -0.00384655 -0.0360074 0 -0.0145739 0.107219 0 -0.00384655 0.0360074 0 -0.00787869 0.0718137 0 -0.00969911 0.108331 0 0.0025 -1.19305e-16 0 0.00113948 0.0363808 0 -0.00293447 0.0725585 0 -0.00293447 -0.0725585 0 0.00113948 -0.0363808 0 -0.00969911 -0.108331 0 -0.00969911 -0.108331 0.01 0.0025 -1.19305e-16 0.01 -0.00293447 -0.0725585 0.01 0.00113948 -0.0363808 0.01 0.0025 -1.19305e-16 0 -0.00293447 -0.0725585 0 0.00113948 -0.0363808 0 -0.0145739 -0.107219 0.01 -0.00969911 -0.108331 0.01 -0.0025 -1.1808e-16 0.01 -0.00787869 -0.0718137 0.01 -0.00384655 -0.0360074 0.01 -0.0145739 0.107219 0.01 -0.00384655 0.0360074 0.01 -0.00787869 0.0718137 0.01 -0.00969911 0.108331 0.01 0.0025 -1.19305e-16 0.01 0.00113948 0.0363808 0.01 -0.00293447 0.0725585 0.01 -0.00293447 -0.0725585 0.01 0.00113948 -0.0363808 0.01 -0.0145739 -0.107219 0 -0.0145739 -0.107219 0.01 -0.0025 -1.1808e-16 0.01 -0.00787869 -0.0718137 0.01 -0.00384655 -0.0360074 0.01 -0.0025 -1.1808e-16 0 -0.00787869 -0.0718137 0 -0.00384655 -0.0360074 0 -0.0025 -1.1808e-16 0 -0.0025 -1.1808e-16 0.01 -0.0145739 0.107219 0.01 -0.00384655 0.0360074 0.01 -0.00787869 0.0718137 0.01 -0.0145739 0.107219 0 -0.00384655 0.0360074 0 -0.00787869 0.0718137 0 -0.0145739 0.107219 0 -0.00969911 0.108331 0 -0.00969911 0.108331 0.01 -0.0145739 0.107219 0.01 0.0025 -1.19305e-16 0 0.0025 -1.19305e-16 0.01 -0.00969911 0.108331 0.01 0.00113948 0.0363808 0.01 -0.00293447 0.0725585 0.01 -0.00969911 0.108331 0 0.00113948 0.0363808 0 -0.00293447 0.0725585 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="180"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0147667 -0.108931 0 -0.00989195 -0.110043 0 -0.00989195 -0.110043 0.01 -0.0147667 -0.108931 0.01 -0.0147667 -0.108931 0 -0.00989195 -0.110043 0 -0.0025 -1.19966e-16 0 -0.0079646 -0.0729606 0 -0.00386806 -0.0365825 0 -0.0147667 0.108931 0 -0.00386806 0.0365825 0 -0.0079646 0.0729606 0 -0.00989195 0.110043 0 0.0025 -1.21191e-16 0 0.00111797 0.0369559 0 -0.00302038 0.0737054 0 -0.00302038 -0.0737054 0 0.00111797 -0.0369559 0 -0.00989195 -0.110043 0 -0.00989195 -0.110043 0.01 0.0025 -1.21191e-16 0.01 -0.00302038 -0.0737054 0.01 0.00111797 -0.0369559 0.01 0.0025 -1.21191e-16 0 -0.00302038 -0.0737054 0 0.00111797 -0.0369559 0 -0.0147667 -0.108931 0.01 -0.00989195 -0.110043 0.01 -0.0025 -1.19966e-16 0.01 -0.0079646 -0.0729606 0.01 -0.00386806 -0.0365825 0.01 -0.0147667 0.108931 0.01 -0.00386806 0.0365825 0.01 -0.0079646 0.0729606 0.01 -0.00989195 0.110043 0.01 0.0025 -1.21191e-16 0.01 0.00111797 0.0369559 0.01 -0.00302038 0.0737054 0.01 -0.00302038 -0.0737054 0.01 0.00111797 -0.0369559 0.01 -0.0147667 -0.108931 0 -0.0147667 -0.108931 0.01 -0.0025 -1.19966e-16 0.01 -0.0079646 -0.0729606 0.01 -0.00386806 -0.0365825 0.01 -0.0025 -1.19966e-16 0 -0.0079646 -0.0729606 0 -0.00386806 -0.0365825 0 -0.0025 -1.19966e-16 0 -0.0025 -1.19966e-16 0.01 -0.0147667 0.108931 0.01 -0.00386806 0.0365825 0.01 -0.0079646 0.0729606 0.01 -0.0147667 0.108931 0 -0.00386806 0.0365825 0 -0.0079646 0.0729606 0 -0.0147667 0.108931 0 -0.00989195 0.110043 0 -0.00989195 0.110043 0.01 -0.0147667 0.108931 0.01 0.0025 -1.21191e-16 0 0.0025 -1.21191e-16 0.01 -0.00989195 0.110043 0.01 0.00111797 0.0369559 0.01 -0.00302038 0.0737054 0.01 -0.00989195 0.110043 0 0.00111797 0.0369559 0 -0.00302038 0.0737054 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="181"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0148043 -0.109265 0 -0.00992951 -0.110377 0 -0.00992951 -0.110377 0.01 -0.0148043 -0.109265 0.01 -0.0148043 -0.109265 0 -0.00992951 -0.110377 0 -0.0025 -1.20334e-16 0 -0.00798133 -0.0731841 0 -0.00387225 -0.0366945 0 -0.0148043 0.109265 0 -0.00387225 0.0366945 0 -0.00798133 0.0731841 0 -0.00992951 0.110377 0 0.0025 -1.21558e-16 0 0.00111379 0.037068 0 -0.00303711 0.0739289 0 -0.00303711 -0.0739289 0 0.00111379 -0.037068 0 -0.00992951 -0.110377 0 -0.00992951 -0.110377 0.01 0.0025 -1.21558e-16 0.01 -0.00303711 -0.0739289 0.01 0.00111379 -0.037068 0.01 0.0025 -1.21558e-16 0 -0.00303711 -0.0739289 0 0.00111379 -0.037068 0 -0.0148043 -0.109265 0.01 -0.00992951 -0.110377 0.01 -0.0025 -1.20334e-16 0.01 -0.00798133 -0.0731841 0.01 -0.00387225 -0.0366945 0.01 -0.0148043 0.109265 0.01 -0.00387225 0.0366945 0.01 -0.00798133 0.0731841 0.01 -0.00992951 0.110377 0.01 0.0025 -1.21558e-16 0.01 0.00111379 0.037068 0.01 -0.00303711 0.0739289 0.01 -0.00303711 -0.0739289 0.01 0.00111379 -0.037068 0.01 -0.0148043 -0.109265 0 -0.0148043 -0.109265 0.01 -0.0025 -1.20334e-16 0.01 -0.00798133 -0.0731841 0.01 -0.00387225 -0.0366945 0.01 -0.0025 -1.20334e-16 0 -0.00798133 -0.0731841 0 -0.00387225 -0.0366945 0 -0.0025 -1.20334e-16 0 -0.0025 -1.20334e-16 0.01 -0.0148043 0.109265 0.01 -0.00387225 0.0366945 0.01 -0.00798133 0.0731841 0.01 -0.0148043 0.109265 0 -0.00387225 0.0366945 0 -0.00798133 0.0731841 0 -0.0148043 0.109265 0 -0.00992951 0.110377 0 -0.00992951 0.110377 0.01 -0.0148043 0.109265 0.01 0.0025 -1.21558e-16 0 0.0025 -1.21558e-16 0.01 -0.00992951 0.110377 0.01 0.00111379 0.037068 0.01 -0.00303711 0.0739289 0.01 -0.00992951 0.110377 0 0.00111379 0.037068 0 -0.00303711 0.0739289 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="192"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.017742 -0.135352 0 -0.0128672 -0.136464 0 -0.0128672 -0.136464 0.01 -0.017742 -0.135352 0.01 -0.017742 -0.135352 0 -0.0128672 -0.136464 0 -0.0025 -1.49064e-16 0 -0.00929002 -0.0906571 0 -0.00419988 -0.0454555 0 -0.017742 0.135352 0 -0.00419988 0.0454555 0 -0.00929002 0.0906571 0 -0.0128672 0.136464 0 0.0025 -1.50289e-16 0 0.000786155 0.045829 0 -0.00434581 0.0914019 0 -0.00434581 -0.0914019 0 0.000786155 -0.045829 0 -0.0128672 -0.136464 0 -0.0128672 -0.136464 0.01 0.0025 -1.50289e-16 0.01 -0.00434581 -0.0914019 0.01 0.000786155 -0.045829 0.01 0.0025 -1.50289e-16 0 -0.00434581 -0.0914019 0 0.000786155 -0.045829 0 -0.017742 -0.135352 0.01 -0.0128672 -0.136464 0.01 -0.0025 -1.49064e-16 0.01 -0.00929002 -0.0906571 0.01 -0.00419988 -0.0454555 0.01 -0.017742 0.135352 0.01 -0.00419988 0.0454555 0.01 -0.00929002 0.0906571 0.01 -0.0128672 0.136464 0.01 0.0025 -1.50289e-16 0.01 0.000786155 0.045829 0.01 -0.00434581 0.0914019 0.01 -0.00434581 -0.0914019 0.01 0.000786155 -0.045829 0.01 -0.017742 -0.135352 0 -0.017742 -0.135352 0.01 -0.0025 -1.49064e-16 0.01 -0.00929002 -0.0906571 0.01 -0.00419988 -0.0454555 0.01 -0.0025 -1.49064e-16 0 -0.00929002 -0.0906571 0 -0.00419988 -0.0454555 0 -0.0025 -1.49064e-16 0 -0.0025 -1.49064e-16 0.01 -0.017742 0.135352 0.01 -0.00419988 0.0454555 0.01 -0.00929002 0.0906571 0.01 -0.017742 0.135352 0 -0.00419988 0.0454555 0 -0.00929002 0.0906571 0 -0.017742 0.135352 0 -0.0128672 0.136464 0 -0.0128672 0.136464 0.01 -0.017742 0.135352 0.01 0.0025 -1.50289e-16 0 0.0025 -1.50289e-16 0.01 -0.0128672 0.136464 0.01 0.000786155 0.045829 0.01 -0.00434581 0.0914019 0.01 -0.0128672 0.136464 0 0.000786155 0.045829 0 -0.00434581 0.0914019 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="193"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.017762 -0.13553 0 -0.0128873 -0.136642 0 -0.0128873 -0.136642 0.01 -0.017762 -0.13553 0.01 -0.017762 -0.13553 0 -0.0128873 -0.136642 0 -0.0025 -1.4926e-16 0 -0.00929895 -0.0907763 0 -0.00420211 -0.0455153 0 -0.017762 0.13553 0 -0.00420211 0.0455153 0 -0.00929895 0.0907763 0 -0.0128873 0.136642 0 0.0025 -1.50485e-16 0 0.00078392 0.0458887 0 -0.00435473 0.0915211 0 -0.00435473 -0.0915211 0 0.00078392 -0.0458887 0 -0.0128873 -0.136642 0 -0.0128873 -0.136642 0.01 0.0025 -1.50485e-16 0.01 -0.00435473 -0.0915211 0.01 0.00078392 -0.0458887 0.01 0.0025 -1.50485e-16 0 -0.00435473 -0.0915211 0 0.00078392 -0.0458887 0 -0.017762 -0.13553 0.01 -0.0128873 -0.136642 0.01 -0.0025 -1.4926e-16 0.01 -0.00929895 -0.0907763 0.01 -0.00420211 -0.0455153 0.01 -0.017762 0.13553 0.01 -0.00420211 0.0455153 0.01 -0.00929895 0.0907763 0.01 -0.0128873 0.136642 0.01 0.0025 -1.50485e-16 0.01 0.00078392 0.0458887 0.01 -0.00435473 0.0915211 0.01 -0.00435473 -0.0915211 0.01 0.00078392 -0.0458887 0.01 -0.017762 -0.13553 0 -0.017762 -0.13553 0.01 -0.0025 -1.4926e-16 0.01 -0.00929895 -0.0907763 0.01 -0.00420211 -0.0455153 0.01 -0.0025 -1.4926e-16 0 -0.00929895 -0.0907763 0 -0.00420211 -0.0455153 0 -0.0025 -1.4926e-16 0 -0.0025 -1.4926e-16 0.01 -0.017762 0.13553 0.01 -0.00420211 0.0455153 0.01 -0.00929895 0.0907763 0.01 -0.017762 0.13553 0 -0.00420211 0.0455153 0 -0.00929895 0.0907763 0 -0.017762 0.13553 0 -0.0128873 0.136642 0 -0.0128873 0.136642 0.01 -0.017762 0.13553 0.01 0.0025 -1.50485e-16 0 0.0025 -1.50485e-16 0.01 -0.0128873 0.136642 0.01 0.00078392 0.0458887 0.01 -0.00435473 0.0915211 0.01 -0.0128873 0.136642 0 0.00078392 0.0458887 0 -0.00435473 0.0915211 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="202"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0188465 -0.14516 0 -0.0139717 -0.146272 0 -0.0139717 -0.146272 0.01 -0.0188465 -0.14516 0.01 -0.0188465 -0.14516 0 -0.0139717 -0.146272 0 -0.0025 -1.59865e-16 0 -0.00978204 -0.0972262 0 -0.00432306 -0.0487493 0 -0.0188465 0.14516 0 -0.00432306 0.0487493 0 -0.00978204 0.0972262 0 -0.0139717 0.146272 0 0.0025 -1.6109e-16 0 0.000662979 0.0491227 0 -0.00483782 0.097971 0 -0.00483782 -0.097971 0 0.000662979 -0.0491227 0 -0.0139717 -0.146272 0 -0.0139717 -0.146272 0.01 0.0025 -1.6109e-16 0.01 -0.00483782 -0.097971 0.01 0.000662979 -0.0491227 0.01 0.0025 -1.6109e-16 0 -0.00483782 -0.097971 0 0.000662979 -0.0491227 0 -0.0188465 -0.14516 0.01 -0.0139717 -0.146272 0.01 -0.0025 -1.59865e-16 0.01 -0.00978204 -0.0972262 0.01 -0.00432306 -0.0487493 0.01 -0.0188465 0.14516 0.01 -0.00432306 0.0487493 0.01 -0.00978204 0.0972262 0.01 -0.0139717 0.146272 0.01 0.0025 -1.6109e-16 0.01 0.000662979 0.0491227 0.01 -0.00483782 0.097971 0.01 -0.00483782 -0.097971 0.01 0.000662979 -0.0491227 0.01 -0.0188465 -0.14516 0 -0.0188465 -0.14516 0.01 -0.0025 -1.59865e-16 0.01 -0.00978204 -0.0972262 0.01 -0.00432306 -0.0487493 0.01 -0.0025 -1.59865e-16 0 -0.00978204 -0.0972262 0 -0.00432306 -0.0487493 0 -0.0025 -1.59865e-16 0 -0.0025 -1.59865e-16 0.01 -0.0188465 0.14516 0.01 -0.00432306 0.0487493 0.01 -0.00978204 0.0972262 0.01 -0.0188465 0.14516 0 -0.00432306 0.0487493 0 -0.00978204 0.0972262 0 -0.0188465 0.14516 0 -0.0139717 0.146272 0 -0.0139717 0.146272 0.01 -0.0188465 0.14516 0.01 0.0025 -1.6109e-16 0 0.0025 -1.6109e-16 0.01 -0.0139717 0.146272 0.01 0.000662979 0.0491227 0.01 -0.00483782 0.097971 0.01 -0.0139717 0.146272 0 0.000662979 0.0491227 0 -0.00483782 0.097971 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="203"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0188665 -0.145338 0 -0.0139917 -0.14645 0 -0.0139917 -0.14645 0.01 -0.0188665 -0.145338 0.01 -0.0188665 -0.145338 0 -0.0139917 -0.14645 0 -0.0025 -1.60061e-16 0 -0.00979096 -0.0973454 0 -0.00432529 -0.048809 0 -0.0188665 0.145338 0 -0.00432529 0.048809 0 -0.00979096 0.0973454 0 -0.0139917 0.14645 0 0.0025 -1.61286e-16 0 0.000660745 0.0491825 0 -0.00484675 0.0980902 0 -0.00484675 -0.0980902 0 0.000660745 -0.0491825 0 -0.0139917 -0.14645 0 -0.0139917 -0.14645 0.01 0.0025 -1.61286e-16 0.01 -0.00484675 -0.0980902 0.01 0.000660745 -0.0491825 0.01 0.0025 -1.61286e-16 0 -0.00484675 -0.0980902 0 0.000660745 -0.0491825 0 -0.0188665 -0.145338 0.01 -0.0139917 -0.14645 0.01 -0.0025 -1.60061e-16 0.01 -0.00979096 -0.0973454 0.01 -0.00432529 -0.048809 0.01 -0.0188665 0.145338 0.01 -0.00432529 0.048809 0.01 -0.00979096 0.0973454 0.01 -0.0139917 0.14645 0.01 0.0025 -1.61286e-16 0.01 0.000660745 0.0491825 0.01 -0.00484675 0.0980902 0.01 -0.00484675 -0.0980902 0.01 0.000660745 -0.0491825 0.01 -0.0188665 -0.145338 0 -0.0188665 -0.145338 0.01 -0.0025 -1.60061e-16 0.01 -0.00979096 -0.0973454 0.01 -0.00432529 -0.048809 0.01 -0.0025 -1.60061e-16 0 -0.00979096 -0.0973454 0 -0.00432529 -0.048809 0 -0.0025 -1.60061e-16 0 -0.0025 -1.60061e-16 0.01 -0.0188665 0.145338 0.01 -0.00432529 0.048809 0.01 -0.00979096 0.0973454 0.01 -0.0188665 0.145338 0 -0.00432529 0.048809 0 -0.00979096 0.0973454 0 -0.0188665 0.145338 0 -0.0139917 0.14645 0 -0.0139917 0.14645 0.01 -0.0188665 0.145338 0.01 0.0025 -1.61286e-16 0 0.0025 -1.61286e-16 0.01 -0.0139917 0.14645 0.01 0.000660745 0.0491825 0.01 -0.00484675 0.0980902 0.01 -0.0139917 0.14645 0 0.000660745 0.0491825 0 -0.00484675 0.0980902 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="204"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0190668 -0.147117 0 -0.0141921 -0.148229 0 -0.0141921 -0.148229 0.01 -0.0190668 -0.147117 0.01 -0.0190668 -0.147117 0 -0.0141921 -0.148229 0 -0.0025 -1.62021e-16 0 -0.00988022 -0.0985371 0 -0.00434763 -0.0494065 0 -0.0190668 0.147117 0 -0.00434763 0.0494065 0 -0.00988022 0.0985371 0 -0.0141921 0.148229 0 0.0025 -1.63245e-16 0 0.0006384 0.04978 0 -0.004936 0.0992819 0 -0.004936 -0.0992819 0 0.0006384 -0.04978 0 -0.0141921 -0.148229 0 -0.0141921 -0.148229 0.01 0.0025 -1.63245e-16 0.01 -0.004936 -0.0992819 0.01 0.0006384 -0.04978 0.01 0.0025 -1.63245e-16 0 -0.004936 -0.0992819 0 0.0006384 -0.04978 0 -0.0190668 -0.147117 0.01 -0.0141921 -0.148229 0.01 -0.0025 -1.62021e-16 0.01 -0.00988022 -0.0985371 0.01 -0.00434763 -0.0494065 0.01 -0.0190668 0.147117 0.01 -0.00434763 0.0494065 0.01 -0.00988022 0.0985371 0.01 -0.0141921 0.148229 0.01 0.0025 -1.63245e-16 0.01 0.0006384 0.04978 0.01 -0.004936 0.0992819 0.01 -0.004936 -0.0992819 0.01 0.0006384 -0.04978 0.01 -0.0190668 -0.147117 0 -0.0190668 -0.147117 0.01 -0.0025 -1.62021e-16 0.01 -0.00988022 -0.0985371 0.01 -0.00434763 -0.0494065 0.01 -0.0025 -1.62021e-16 0 -0.00988022 -0.0985371 0 -0.00434763 -0.0494065 0 -0.0025 -1.62021e-16 0 -0.0025 -1.62021e-16 0.01 -0.0190668 0.147117 0.01 -0.00434763 0.0494065 0.01 -0.00988022 0.0985371 0.01 -0.0190668 0.147117 0 -0.00434763 0.0494065 0 -0.00988022 0.0985371 0 -0.0190668 0.147117 0 -0.0141921 0.148229 0 -0.0141921 0.148229 0.01 -0.0190668 0.147117 0.01 0.0025 -1.63245e-16 0 0.0025 -1.63245e-16 0.01 -0.0141921 0.148229 0.01 0.0006384 0.04978 0.01 -0.004936 0.0992819 0.01 -0.0141921 0.148229 0 0.0006384 0.04978 0 -0.004936 0.0992819 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 43 46 47 44 43 47 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="205"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0190869 -0.147295 0 -0.0142121 -0.148407 0 -0.0142121 -0.148407 0.01 -0.0190869 -0.147295 0.01 -0.0190869 -0.147295 0 -0.0142121 -0.148407 0 -0.0025 -1.62217e-16 0 -0.00988914 -0.0986563 0 -0.00434987 -0.0494663 0 -0.0190869 0.147295 0 -0.00434987 0.0494663 0 -0.00988914 0.0986563 0 -0.0142121 0.148407 0 0.0025 -1.63441e-16 0 0.000636166 0.0498397 0 -0.00494493 0.0994011 0 -0.00494493 -0.0994011 0 0.000636166 -0.0498397 0 -0.0142121 -0.148407 0 -0.0142121 -0.148407 0.01 0.0025 -1.63441e-16 0.01 -0.00494493 -0.0994011 0.01 0.000636166 -0.0498397 0.01 0.0025 -1.63441e-16 0 -0.00494493 -0.0994011 0 0.000636166 -0.0498397 0 -0.0190869 -0.147295 0.01 -0.0142121 -0.148407 0.01 -0.0025 -1.62217e-16 0.01 -0.00988914 -0.0986563 0.01 -0.00434987 -0.0494663 0.01 -0.0190869 0.147295 0.01 -0.00434987 0.0494663 0.01 -0.00988914 0.0986563 0.01 -0.0142121 0.148407 0.01 0.0025 -1.63441e-16 0.01 0.000636166 0.0498397 0.01 -0.00494493 0.0994011 0.01 -0.00494493 -0.0994011 0.01 0.000636166 -0.0498397 0.01 -0.0190869 -0.147295 0 -0.0190869 -0.147295 0.01 -0.0025 -1.62217e-16 0.01 -0.00988914 -0.0986563 0.01 -0.00434987 -0.0494663 0.01 -0.0025 -1.62217e-16 0 -0.00988914 -0.0986563 0 -0.00434987 -0.0494663 0 -0.0025 -1.62217e-16 0 -0.0025 -1.62217e-16 0.01 -0.0190869 0.147295 0.01 -0.00434987 0.0494663 0.01 -0.00988914 0.0986563 0.01 -0.0190869 0.147295 0 -0.00434987 0.0494663 0 -0.00988914 0.0986563 0 -0.0190869 0.147295 0 -0.0142121 0.148407 0 -0.0142121 0.148407 0.01 -0.0190869 0.147295 0.01 0.0025 -1.63441e-16 0 0.0025 -1.63441e-16 0.01 -0.0142121 0.148407 0.01 0.000636166 0.0498397 0.01 -0.00494493 0.0994011 0.01 -0.0142121 0.148407 0 0.000636166 0.0498397 0 -0.00494493 0.0994011 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="206"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0192897 -0.149097 0 -0.014415 -0.150209 0 -0.014415 -0.150209 0.01 -0.0192897 -0.149097 0.01 -0.0192897 -0.149097 0 -0.014415 -0.150209 0 -0.0025 -1.64201e-16 0 -0.00997951 -0.0998628 0 -0.00437249 -0.0500713 0 -0.0192897 0.149097 0 -0.00437249 0.0500713 0 -0.00997951 0.0998628 0 -0.014415 0.150209 0 0.0025 -1.65425e-16 0 0.000613541 0.0504447 0 -0.0050353 0.100608 0 -0.0050353 -0.100608 0 0.000613541 -0.0504447 0 -0.014415 -0.150209 0 -0.014415 -0.150209 0.01 0.0025 -1.65425e-16 0.01 -0.0050353 -0.100608 0.01 0.000613541 -0.0504447 0.01 0.0025 -1.65425e-16 0 -0.0050353 -0.100608 0 0.000613541 -0.0504447 0 -0.0192897 -0.149097 0.01 -0.014415 -0.150209 0.01 -0.0025 -1.64201e-16 0.01 -0.00997951 -0.0998628 0.01 -0.00437249 -0.0500713 0.01 -0.0192897 0.149097 0.01 -0.00437249 0.0500713 0.01 -0.00997951 0.0998628 0.01 -0.014415 0.150209 0.01 0.0025 -1.65425e-16 0.01 0.000613541 0.0504447 0.01 -0.0050353 0.100608 0.01 -0.0050353 -0.100608 0.01 0.000613541 -0.0504447 0.01 -0.0192897 -0.149097 0 -0.0192897 -0.149097 0.01 -0.0025 -1.64201e-16 0.01 -0.00997951 -0.0998628 0.01 -0.00437249 -0.0500713 0.01 -0.0025 -1.64201e-16 0 -0.00997951 -0.0998628 0 -0.00437249 -0.0500713 0 -0.0025 -1.64201e-16 0 -0.0025 -1.64201e-16 0.01 -0.0192897 0.149097 0.01 -0.00437249 0.0500713 0.01 -0.00997951 0.0998628 0.01 -0.0192897 0.149097 0 -0.00437249 0.0500713 0 -0.00997951 0.0998628 0 -0.0192897 0.149097 0 -0.014415 0.150209 0 -0.014415 0.150209 0.01 -0.0192897 0.149097 0.01 0.0025 -1.65425e-16 0 0.0025 -1.65425e-16 0.01 -0.014415 0.150209 0.01 0.000613541 0.0504447 0.01 -0.0050353 0.100608 0.01 -0.014415 0.150209 0 0.000613541 0.0504447 0 -0.0050353 0.100608 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 21 24 25 22 21 25 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="207"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0193098 -0.149274 0 -0.014435 -0.150386 0 -0.014435 -0.150386 0.01 -0.0193098 -0.149274 0.01 -0.0193098 -0.149274 0 -0.014435 -0.150386 0 -0.0025 -1.64397e-16 0 -0.00998844 -0.099982 0 -0.00437473 -0.050131 0 -0.0193098 0.149274 0 -0.00437473 0.050131 0 -0.00998844 0.099982 0 -0.014435 0.150386 0 0.0025 -1.65621e-16 0 0.000611307 0.0505045 0 -0.00504422 0.100727 0 -0.00504422 -0.100727 0 0.000611307 -0.0505045 0 -0.014435 -0.150386 0 -0.014435 -0.150386 0.01 0.0025 -1.65621e-16 0.01 -0.00504422 -0.100727 0.01 0.000611307 -0.0505045 0.01 0.0025 -1.65621e-16 0 -0.00504422 -0.100727 0 0.000611307 -0.0505045 0 -0.0193098 -0.149274 0.01 -0.014435 -0.150386 0.01 -0.0025 -1.64397e-16 0.01 -0.00998844 -0.099982 0.01 -0.00437473 -0.050131 0.01 -0.0193098 0.149274 0.01 -0.00437473 0.050131 0.01 -0.00998844 0.099982 0.01 -0.014435 0.150386 0.01 0.0025 -1.65621e-16 0.01 0.000611307 0.0505045 0.01 -0.00504422 0.100727 0.01 -0.00504422 -0.100727 0.01 0.000611307 -0.0505045 0.01 -0.0193098 -0.149274 0 -0.0193098 -0.149274 0.01 -0.0025 -1.64397e-16 0.01 -0.00998844 -0.099982 0.01 -0.00437473 -0.050131 0.01 -0.0025 -1.64397e-16 0 -0.00998844 -0.099982 0 -0.00437473 -0.050131 0 -0.0025 -1.64397e-16 0 -0.0025 -1.64397e-16 0.01 -0.0193098 0.149274 0.01 -0.00437473 0.050131 0.01 -0.00998844 0.099982 0.01 -0.0193098 0.149274 0 -0.00437473 0.050131 0 -0.00998844 0.099982 0 -0.0193098 0.149274 0 -0.014435 0.150386 0 -0.014435 0.150386 0.01 -0.0193098 0.149274 0.01 0.0025 -1.65621e-16 0 0.0025 -1.65621e-16 0.01 -0.014435 0.150386 0.01 0.000611307 0.0505045 0.01 -0.00504422 0.100727 0.01 -0.014435 0.150386 0 0.000611307 0.0505045 0 -0.00504422 0.100727 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 21 24 25 22 21 25 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="208"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0195101 -0.151054 0 -0.0146353 -0.152166 0 -0.0146353 -0.152166 0.01 -0.0195101 -0.151054 0.01 -0.0195101 -0.151054 0 -0.0146353 -0.152166 0 -0.0025 -1.66356e-16 0 -0.0100777 -0.101174 0 -0.00439707 -0.0507285 0 -0.0195101 0.151054 0 -0.00439707 0.0507285 0 -0.0100777 0.101174 0 -0.0146353 0.152166 0 0.0025 -1.67581e-16 0 0.000588962 0.051102 0 -0.00513348 0.101918 0 -0.00513348 -0.101918 0 0.000588962 -0.051102 0 -0.0146353 -0.152166 0 -0.0146353 -0.152166 0.01 0.0025 -1.67581e-16 0.01 -0.00513348 -0.101918 0.01 0.000588962 -0.051102 0.01 0.0025 -1.67581e-16 0 -0.00513348 -0.101918 0 0.000588962 -0.051102 0 -0.0195101 -0.151054 0.01 -0.0146353 -0.152166 0.01 -0.0025 -1.66356e-16 0.01 -0.0100777 -0.101174 0.01 -0.00439707 -0.0507285 0.01 -0.0195101 0.151054 0.01 -0.00439707 0.0507285 0.01 -0.0100777 0.101174 0.01 -0.0146353 0.152166 0.01 0.0025 -1.67581e-16 0.01 0.000588962 0.051102 0.01 -0.00513348 0.101918 0.01 -0.00513348 -0.101918 0.01 0.000588962 -0.051102 0.01 -0.0195101 -0.151054 0 -0.0195101 -0.151054 0.01 -0.0025 -1.66356e-16 0.01 -0.0100777 -0.101174 0.01 -0.00439707 -0.0507285 0.01 -0.0025 -1.66356e-16 0 -0.0100777 -0.101174 0 -0.00439707 -0.0507285 0 -0.0025 -1.66356e-16 0 -0.0025 -1.66356e-16 0.01 -0.0195101 0.151054 0.01 -0.00439707 0.0507285 0.01 -0.0100777 0.101174 0.01 -0.0195101 0.151054 0 -0.00439707 0.0507285 0 -0.0100777 0.101174 0 -0.0195101 0.151054 0 -0.0146353 0.152166 0 -0.0146353 0.152166 0.01 -0.0195101 0.151054 0.01 0.0025 -1.67581e-16 0 0.0025 -1.67581e-16 0.01 -0.0146353 0.152166 0.01 0.000588962 0.051102 0.01 -0.00513348 0.101918 0.01 -0.0146353 0.152166 0 0.000588962 0.051102 0 -0.00513348 0.101918 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 21 24 25 22 21 25 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="209"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0195302 -0.151232 0 -0.0146554 -0.152344 0 -0.0146554 -0.152344 0.01 -0.0195302 -0.151232 0.01 -0.0195302 -0.151232 0 -0.0146554 -0.152344 0 -0.0025 -1.66552e-16 0 -0.0100866 -0.101293 0 -0.00439931 -0.0507883 0 -0.0195302 0.151232 0 -0.00439931 0.0507883 0 -0.0100866 0.101293 0 -0.0146554 0.152344 0 0.0025 -1.67777e-16 0 0.000586728 0.0511617 0 -0.0051424 0.102038 0 -0.0051424 -0.102038 0 0.000586728 -0.0511617 0 -0.0146554 -0.152344 0 -0.0146554 -0.152344 0.01 0.0025 -1.67777e-16 0.01 -0.0051424 -0.102038 0.01 0.000586728 -0.0511617 0.01 0.0025 -1.67777e-16 0 -0.0051424 -0.102038 0 0.000586728 -0.0511617 0 -0.0195302 -0.151232 0.01 -0.0146554 -0.152344 0.01 -0.0025 -1.66552e-16 0.01 -0.0100866 -0.101293 0.01 -0.00439931 -0.0507883 0.01 -0.0195302 0.151232 0.01 -0.00439931 0.0507883 0.01 -0.0100866 0.101293 0.01 -0.0146554 0.152344 0.01 0.0025 -1.67777e-16 0.01 0.000586728 0.0511617 0.01 -0.0051424 0.102038 0.01 -0.0051424 -0.102038 0.01 0.000586728 -0.0511617 0.01 -0.0195302 -0.151232 0 -0.0195302 -0.151232 0.01 -0.0025 -1.66552e-16 0.01 -0.0100866 -0.101293 0.01 -0.00439931 -0.0507883 0.01 -0.0025 -1.66552e-16 0 -0.0100866 -0.101293 0 -0.00439931 -0.0507883 0 -0.0025 -1.66552e-16 0 -0.0025 -1.66552e-16 0.01 -0.0195302 0.151232 0.01 -0.00439931 0.0507883 0.01 -0.0100866 0.101293 0.01 -0.0195302 0.151232 0 -0.00439931 0.0507883 0 -0.0100866 0.101293 0 -0.0195302 0.151232 0 -0.0146554 0.152344 0 -0.0146554 0.152344 0.01 -0.0195302 0.151232 0.01 0.0025 -1.67777e-16 0 0.0025 -1.67777e-16 0.01 -0.0146554 0.152344 0.01 0.000586728 0.0511617 0.01 -0.0051424 0.102038 0.01 -0.0146554 0.152344 0 0.000586728 0.0511617 0 -0.0051424 0.102038 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="210"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0197305 -0.153011 0 -0.0148557 -0.154123 0 -0.0148557 -0.154123 0.01 -0.0197305 -0.153011 0.01 -0.0197305 -0.153011 0 -0.0148557 -0.154123 0 -0.0025 -1.68511e-16 0 -0.0101759 -0.102485 0 -0.00442165 -0.0513858 0 -0.0197305 0.153011 0 -0.00442165 0.0513858 0 -0.0101759 0.102485 0 -0.0148557 0.154123 0 0.0025 -1.69736e-16 0 0.000564383 0.0517592 0 -0.00523166 0.103229 0 -0.00523166 -0.103229 0 0.000564383 -0.0517592 0 -0.0148557 -0.154123 0 -0.0148557 -0.154123 0.01 0.0025 -1.69736e-16 0.01 -0.00523166 -0.103229 0.01 0.000564383 -0.0517592 0.01 0.0025 -1.69736e-16 0 -0.00523166 -0.103229 0 0.000564383 -0.0517592 0 -0.0197305 -0.153011 0.01 -0.0148557 -0.154123 0.01 -0.0025 -1.68511e-16 0.01 -0.0101759 -0.102485 0.01 -0.00442165 -0.0513858 0.01 -0.0197305 0.153011 0.01 -0.00442165 0.0513858 0.01 -0.0101759 0.102485 0.01 -0.0148557 0.154123 0.01 0.0025 -1.69736e-16 0.01 0.000564383 0.0517592 0.01 -0.00523166 0.103229 0.01 -0.00523166 -0.103229 0.01 0.000564383 -0.0517592 0.01 -0.0197305 -0.153011 0 -0.0197305 -0.153011 0.01 -0.0025 -1.68511e-16 0.01 -0.0101759 -0.102485 0.01 -0.00442165 -0.0513858 0.01 -0.0025 -1.68511e-16 0 -0.0101759 -0.102485 0 -0.00442165 -0.0513858 0 -0.0025 -1.68511e-16 0 -0.0025 -1.68511e-16 0.01 -0.0197305 0.153011 0.01 -0.00442165 0.0513858 0.01 -0.0101759 0.102485 0.01 -0.0197305 0.153011 0 -0.00442165 0.0513858 0 -0.0101759 0.102485 0 -0.0197305 0.153011 0 -0.0148557 0.154123 0 -0.0148557 0.154123 0.01 -0.0197305 0.153011 0.01 0.0025 -1.69736e-16 0 0.0025 -1.69736e-16 0.01 -0.0148557 0.154123 0.01 0.000564383 0.0517592 0.01 -0.00523166 0.103229 0.01 -0.0148557 0.154123 0 0.000564383 0.0517592 0 -0.00523166 0.103229 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="211"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0197506 -0.153189 0 -0.0148758 -0.154301 0 -0.0148758 -0.154301 0.01 -0.0197506 -0.153189 0.01 -0.0197506 -0.153189 0 -0.0148758 -0.154301 0 -0.0025 -1.68707e-16 0 -0.0101848 -0.102604 0 -0.00442389 -0.0514455 0 -0.0197506 0.153189 0 -0.00442389 0.0514455 0 -0.0101848 0.102604 0 -0.0148758 0.154301 0 0.0025 -1.69932e-16 0 0.000562148 0.051819 0 -0.00524058 0.103349 0 -0.00524058 -0.103349 0 0.000562148 -0.051819 0 -0.0148758 -0.154301 0 -0.0148758 -0.154301 0.01 0.0025 -1.69932e-16 0.01 -0.00524058 -0.103349 0.01 0.000562148 -0.051819 0.01 0.0025 -1.69932e-16 0 -0.00524058 -0.103349 0 0.000562148 -0.051819 0 -0.0197506 -0.153189 0.01 -0.0148758 -0.154301 0.01 -0.0025 -1.68707e-16 0.01 -0.0101848 -0.102604 0.01 -0.00442389 -0.0514455 0.01 -0.0197506 0.153189 0.01 -0.00442389 0.0514455 0.01 -0.0101848 0.102604 0.01 -0.0148758 0.154301 0.01 0.0025 -1.69932e-16 0.01 0.000562148 0.051819 0.01 -0.00524058 0.103349 0.01 -0.00524058 -0.103349 0.01 0.000562148 -0.051819 0.01 -0.0197506 -0.153189 0 -0.0197506 -0.153189 0.01 -0.0025 -1.68707e-16 0.01 -0.0101848 -0.102604 0.01 -0.00442389 -0.0514455 0.01 -0.0025 -1.68707e-16 0 -0.0101848 -0.102604 0 -0.00442389 -0.0514455 0 -0.0025 -1.68707e-16 0 -0.0025 -1.68707e-16 0.01 -0.0197506 0.153189 0.01 -0.00442389 0.0514455 0.01 -0.0101848 0.102604 0.01 -0.0197506 0.153189 0 -0.00442389 0.0514455 0 -0.0101848 0.102604 0 -0.0197506 0.153189 0 -0.0148758 0.154301 0 -0.0148758 0.154301 0.01 -0.0197506 0.153189 0.01 0.0025 -1.69932e-16 0 0.0025 -1.69932e-16 0.01 -0.0148758 0.154301 0.01 0.000562148 0.051819 0.01 -0.00524058 0.103349 0.01 -0.0148758 0.154301 0 0.000562148 0.051819 0 -0.00524058 0.103349 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="194"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0179624 -0.137309 0 -0.0130876 -0.138421 0 -0.0130876 -0.138421 0.01 -0.0179624 -0.137309 0.01 -0.0179624 -0.137309 0 -0.0130876 -0.138421 0 -0.0025 -1.51219e-16 0 -0.0093882 -0.091968 0 -0.00422446 -0.0461128 0 -0.0179624 0.137309 0 -0.00422446 0.0461128 0 -0.0093882 0.091968 0 -0.0130876 0.138421 0 0.0025 -1.52444e-16 0 0.000761576 0.0464862 0 -0.00444399 0.0927128 0 -0.00444399 -0.0927128 0 0.000761576 -0.0464862 0 -0.0130876 -0.138421 0 -0.0130876 -0.138421 0.01 0.0025 -1.52444e-16 0.01 -0.00444399 -0.0927128 0.01 0.000761576 -0.0464862 0.01 0.0025 -1.52444e-16 0 -0.00444399 -0.0927128 0 0.000761576 -0.0464862 0 -0.0179624 -0.137309 0.01 -0.0130876 -0.138421 0.01 -0.0025 -1.51219e-16 0.01 -0.0093882 -0.091968 0.01 -0.00422446 -0.0461128 0.01 -0.0179624 0.137309 0.01 -0.00422446 0.0461128 0.01 -0.0093882 0.091968 0.01 -0.0130876 0.138421 0.01 0.0025 -1.52444e-16 0.01 0.000761576 0.0464862 0.01 -0.00444399 0.0927128 0.01 -0.00444399 -0.0927128 0.01 0.000761576 -0.0464862 0.01 -0.0179624 -0.137309 0 -0.0179624 -0.137309 0.01 -0.0025 -1.51219e-16 0.01 -0.0093882 -0.091968 0.01 -0.00422446 -0.0461128 0.01 -0.0025 -1.51219e-16 0 -0.0093882 -0.091968 0 -0.00422446 -0.0461128 0 -0.0025 -1.51219e-16 0 -0.0025 -1.51219e-16 0.01 -0.0179624 0.137309 0.01 -0.00422446 0.0461128 0.01 -0.0093882 0.091968 0.01 -0.0179624 0.137309 0 -0.00422446 0.0461128 0 -0.0093882 0.091968 0 -0.0179624 0.137309 0 -0.0130876 0.138421 0 -0.0130876 0.138421 0.01 -0.0179624 0.137309 0.01 0.0025 -1.52444e-16 0 0.0025 -1.52444e-16 0.01 -0.0130876 0.138421 0.01 0.000761576 0.0464862 0.01 -0.00444399 0.0927128 0.01 -0.0130876 0.138421 0 0.000761576 0.0464862 0 -0.00444399 0.0927128 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="195"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0179824 -0.137487 0 -0.0131076 -0.138599 0 -0.0131076 -0.138599 0.01 -0.0179824 -0.137487 0.01 -0.0179824 -0.137487 0 -0.0131076 -0.138599 0 -0.0025 -1.51415e-16 0 -0.00939713 -0.0920871 0 -0.00422669 -0.0461725 0 -0.0179824 0.137487 0 -0.00422669 0.0461725 0 -0.00939713 0.0920871 0 -0.0131076 0.138599 0 0.0025 -1.5264e-16 0 0.000759341 0.046546 0 -0.00445291 0.0928319 0 -0.00445291 -0.0928319 0 0.000759341 -0.046546 0 -0.0131076 -0.138599 0 -0.0131076 -0.138599 0.01 0.0025 -1.5264e-16 0.01 -0.00445291 -0.0928319 0.01 0.000759341 -0.046546 0.01 0.0025 -1.5264e-16 0 -0.00445291 -0.0928319 0 0.000759341 -0.046546 0 -0.0179824 -0.137487 0.01 -0.0131076 -0.138599 0.01 -0.0025 -1.51415e-16 0.01 -0.00939713 -0.0920871 0.01 -0.00422669 -0.0461725 0.01 -0.0179824 0.137487 0.01 -0.00422669 0.0461725 0.01 -0.00939713 0.0920871 0.01 -0.0131076 0.138599 0.01 0.0025 -1.5264e-16 0.01 0.000759341 0.046546 0.01 -0.00445291 0.0928319 0.01 -0.00445291 -0.0928319 0.01 0.000759341 -0.046546 0.01 -0.0179824 -0.137487 0 -0.0179824 -0.137487 0.01 -0.0025 -1.51415e-16 0.01 -0.00939713 -0.0920871 0.01 -0.00422669 -0.0461725 0.01 -0.0025 -1.51415e-16 0 -0.00939713 -0.0920871 0 -0.00422669 -0.0461725 0 -0.0025 -1.51415e-16 0 -0.0025 -1.51415e-16 0.01 -0.0179824 0.137487 0.01 -0.00422669 0.0461725 0.01 -0.00939713 0.0920871 0.01 -0.0179824 0.137487 0 -0.00422669 0.0461725 0 -0.00939713 0.0920871 0 -0.0179824 0.137487 0 -0.0131076 0.138599 0 -0.0131076 0.138599 0.01 -0.0179824 0.137487 0.01 0.0025 -1.5264e-16 0 0.0025 -1.5264e-16 0.01 -0.0131076 0.138599 0.01 0.000759341 0.046546 0.01 -0.00445291 0.0928319 0.01 -0.0131076 0.138599 0 0.000759341 0.046546 0 -0.00445291 0.0928319 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="196"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0181828 -0.139266 0 -0.013308 -0.140378 0 -0.013308 -0.140378 0.01 -0.0181828 -0.139266 0.01 -0.0181828 -0.139266 0 -0.013308 -0.140378 0 -0.0025 -1.53375e-16 0 -0.00948638 -0.0932788 0 -0.00424904 -0.04677 0 -0.0181828 0.139266 0 -0.00424904 0.04677 0 -0.00948638 0.0932788 0 -0.013308 0.140378 0 0.0025 -1.54599e-16 0 0.000736996 0.0471435 0 -0.00454217 0.0940236 0 -0.00454217 -0.0940236 0 0.000736996 -0.0471435 0 -0.013308 -0.140378 0 -0.013308 -0.140378 0.01 0.0025 -1.54599e-16 0.01 -0.00454217 -0.0940236 0.01 0.000736996 -0.0471435 0.01 0.0025 -1.54599e-16 0 -0.00454217 -0.0940236 0 0.000736996 -0.0471435 0 -0.0181828 -0.139266 0.01 -0.013308 -0.140378 0.01 -0.0025 -1.53375e-16 0.01 -0.00948638 -0.0932788 0.01 -0.00424904 -0.04677 0.01 -0.0181828 0.139266 0.01 -0.00424904 0.04677 0.01 -0.00948638 0.0932788 0.01 -0.013308 0.140378 0.01 0.0025 -1.54599e-16 0.01 0.000736996 0.0471435 0.01 -0.00454217 0.0940236 0.01 -0.00454217 -0.0940236 0.01 0.000736996 -0.0471435 0.01 -0.0181828 -0.139266 0 -0.0181828 -0.139266 0.01 -0.0025 -1.53375e-16 0.01 -0.00948638 -0.0932788 0.01 -0.00424904 -0.04677 0.01 -0.0025 -1.53375e-16 0 -0.00948638 -0.0932788 0 -0.00424904 -0.04677 0 -0.0025 -1.53375e-16 0 -0.0025 -1.53375e-16 0.01 -0.0181828 0.139266 0.01 -0.00424904 0.04677 0.01 -0.00948638 0.0932788 0.01 -0.0181828 0.139266 0 -0.00424904 0.04677 0 -0.00948638 0.0932788 0 -0.0181828 0.139266 0 -0.013308 0.140378 0 -0.013308 0.140378 0.01 -0.0181828 0.139266 0.01 0.0025 -1.54599e-16 0 0.0025 -1.54599e-16 0.01 -0.013308 0.140378 0.01 0.000736996 0.0471435 0.01 -0.00454217 0.0940236 0.01 -0.013308 0.140378 0 0.000736996 0.0471435 0 -0.00454217 0.0940236 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="197"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0182028 -0.139444 0 -0.013328 -0.140556 0 -0.013328 -0.140556 0.01 -0.0182028 -0.139444 0.01 -0.0182028 -0.139444 0 -0.013328 -0.140556 0 -0.0025 -1.53571e-16 0 -0.00949531 -0.093398 0 -0.00425127 -0.0468298 0 -0.0182028 0.139444 0 -0.00425127 0.0468298 0 -0.00949531 0.093398 0 -0.013328 0.140556 0 0.0025 -1.54795e-16 0 0.000734762 0.0472032 0 -0.00455109 0.0941428 0 -0.00455109 -0.0941428 0 0.000734762 -0.0472032 0 -0.013328 -0.140556 0 -0.013328 -0.140556 0.01 0.0025 -1.54795e-16 0.01 -0.00455109 -0.0941428 0.01 0.000734762 -0.0472032 0.01 0.0025 -1.54795e-16 0 -0.00455109 -0.0941428 0 0.000734762 -0.0472032 0 -0.0182028 -0.139444 0.01 -0.013328 -0.140556 0.01 -0.0025 -1.53571e-16 0.01 -0.00949531 -0.093398 0.01 -0.00425127 -0.0468298 0.01 -0.0182028 0.139444 0.01 -0.00425127 0.0468298 0.01 -0.00949531 0.093398 0.01 -0.013328 0.140556 0.01 0.0025 -1.54795e-16 0.01 0.000734762 0.0472032 0.01 -0.00455109 0.0941428 0.01 -0.00455109 -0.0941428 0.01 0.000734762 -0.0472032 0.01 -0.0182028 -0.139444 0 -0.0182028 -0.139444 0.01 -0.0025 -1.53571e-16 0.01 -0.00949531 -0.093398 0.01 -0.00425127 -0.0468298 0.01 -0.0025 -1.53571e-16 0 -0.00949531 -0.093398 0 -0.00425127 -0.0468298 0 -0.0025 -1.53571e-16 0 -0.0025 -1.53571e-16 0.01 -0.0182028 0.139444 0.01 -0.00425127 0.0468298 0.01 -0.00949531 0.093398 0.01 -0.0182028 0.139444 0 -0.00425127 0.0468298 0 -0.00949531 0.093398 0 -0.0182028 0.139444 0 -0.013328 0.140556 0 -0.013328 0.140556 0.01 -0.0182028 0.139444 0.01 0.0025 -1.54795e-16 0 0.0025 -1.54795e-16 0.01 -0.013328 0.140556 0.01 0.000734762 0.0472032 0.01 -0.00455109 0.0941428 0.01 -0.013328 0.140556 0 0.000734762 0.0472032 0 -0.00455109 0.0941428 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 21 24 25 22 21 25 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="198"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0184057 -0.141246 0 -0.0135309 -0.142358 0 -0.0135309 -0.142358 0.01 -0.0184057 -0.141246 0.01 -0.0184057 -0.141246 0 -0.0135309 -0.142358 0 -0.0025 -1.55555e-16 0 -0.00958568 -0.0946045 0 -0.0042739 -0.0474348 0 -0.0184057 0.141246 0 -0.0042739 0.0474348 0 -0.00958568 0.0946045 0 -0.0135309 0.142358 0 0.0025 -1.56779e-16 0 0.000712138 0.0478082 0 -0.00464146 0.0953493 0 -0.00464146 -0.0953493 0 0.000712138 -0.0478082 0 -0.0135309 -0.142358 0 -0.0135309 -0.142358 0.01 0.0025 -1.56779e-16 0.01 -0.00464146 -0.0953493 0.01 0.000712138 -0.0478082 0.01 0.0025 -1.56779e-16 0 -0.00464146 -0.0953493 0 0.000712138 -0.0478082 0 -0.0184057 -0.141246 0.01 -0.0135309 -0.142358 0.01 -0.0025 -1.55555e-16 0.01 -0.00958568 -0.0946045 0.01 -0.0042739 -0.0474348 0.01 -0.0184057 0.141246 0.01 -0.0042739 0.0474348 0.01 -0.00958568 0.0946045 0.01 -0.0135309 0.142358 0.01 0.0025 -1.56779e-16 0.01 0.000712138 0.0478082 0.01 -0.00464146 0.0953493 0.01 -0.00464146 -0.0953493 0.01 0.000712138 -0.0478082 0.01 -0.0184057 -0.141246 0 -0.0184057 -0.141246 0.01 -0.0025 -1.55555e-16 0.01 -0.00958568 -0.0946045 0.01 -0.0042739 -0.0474348 0.01 -0.0025 -1.55555e-16 0 -0.00958568 -0.0946045 0 -0.0042739 -0.0474348 0 -0.0025 -1.55555e-16 0 -0.0025 -1.55555e-16 0.01 -0.0184057 0.141246 0.01 -0.0042739 0.0474348 0.01 -0.00958568 0.0946045 0.01 -0.0184057 0.141246 0 -0.0042739 0.0474348 0 -0.00958568 0.0946045 0 -0.0184057 0.141246 0 -0.0135309 0.142358 0 -0.0135309 0.142358 0.01 -0.0184057 0.141246 0.01 0.0025 -1.56779e-16 0 0.0025 -1.56779e-16 0.01 -0.0135309 0.142358 0.01 0.000712138 0.0478082 0.01 -0.00464146 0.0953493 0.01 -0.0135309 0.142358 0 0.000712138 0.0478082 0 -0.00464146 0.0953493 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="199"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0184257 -0.141424 0 -0.0135509 -0.142536 0 -0.0135509 -0.142536 0.01 -0.0184257 -0.141424 0.01 -0.0184257 -0.141424 0 -0.0135509 -0.142536 0 -0.0025 -1.55751e-16 0 -0.0095946 -0.0947237 0 -0.00427613 -0.0474945 0 -0.0184257 0.141424 0 -0.00427613 0.0474945 0 -0.0095946 0.0947237 0 -0.0135509 0.142536 0 0.0025 -1.56975e-16 0 0.000709903 0.047868 0 -0.00465039 0.0954685 0 -0.00465039 -0.0954685 0 0.000709903 -0.047868 0 -0.0135509 -0.142536 0 -0.0135509 -0.142536 0.01 0.0025 -1.56975e-16 0.01 -0.00465039 -0.0954685 0.01 0.000709903 -0.047868 0.01 0.0025 -1.56975e-16 0 -0.00465039 -0.0954685 0 0.000709903 -0.047868 0 -0.0184257 -0.141424 0.01 -0.0135509 -0.142536 0.01 -0.0025 -1.55751e-16 0.01 -0.0095946 -0.0947237 0.01 -0.00427613 -0.0474945 0.01 -0.0184257 0.141424 0.01 -0.00427613 0.0474945 0.01 -0.0095946 0.0947237 0.01 -0.0135509 0.142536 0.01 0.0025 -1.56975e-16 0.01 0.000709903 0.047868 0.01 -0.00465039 0.0954685 0.01 -0.00465039 -0.0954685 0.01 0.000709903 -0.047868 0.01 -0.0184257 -0.141424 0 -0.0184257 -0.141424 0.01 -0.0025 -1.55751e-16 0.01 -0.0095946 -0.0947237 0.01 -0.00427613 -0.0474945 0.01 -0.0025 -1.55751e-16 0 -0.0095946 -0.0947237 0 -0.00427613 -0.0474945 0 -0.0025 -1.55751e-16 0 -0.0025 -1.55751e-16 0.01 -0.0184257 0.141424 0.01 -0.00427613 0.0474945 0.01 -0.0095946 0.0947237 0.01 -0.0184257 0.141424 0 -0.00427613 0.0474945 0 -0.0095946 0.0947237 0 -0.0184257 0.141424 0 -0.0135509 0.142536 0 -0.0135509 0.142536 0.01 -0.0184257 0.141424 0.01 0.0025 -1.56975e-16 0 0.0025 -1.56975e-16 0.01 -0.0135509 0.142536 0.01 0.000709903 0.047868 0.01 -0.00465039 0.0954685 0.01 -0.0135509 0.142536 0 0.000709903 0.047868 0 -0.00465039 0.0954685 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="200"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0186261 -0.143203 0 -0.0137513 -0.144315 0 -0.0137513 -0.144315 0.01 -0.0186261 -0.143203 0.01 -0.0186261 -0.143203 0 -0.0137513 -0.144315 0 -0.0025 -1.5771e-16 0 -0.00968386 -0.0959154 0 -0.00429848 -0.048092 0 -0.0186261 0.143203 0 -0.00429848 0.048092 0 -0.00968386 0.0959154 0 -0.0137513 0.144315 0 0.0025 -1.58935e-16 0 0.000687559 0.0484655 0 -0.00473964 0.0966602 0 -0.00473964 -0.0966602 0 0.000687559 -0.0484655 0 -0.0137513 -0.144315 0 -0.0137513 -0.144315 0.01 0.0025 -1.58935e-16 0.01 -0.00473964 -0.0966602 0.01 0.000687559 -0.0484655 0.01 0.0025 -1.58935e-16 0 -0.00473964 -0.0966602 0 0.000687559 -0.0484655 0 -0.0186261 -0.143203 0.01 -0.0137513 -0.144315 0.01 -0.0025 -1.5771e-16 0.01 -0.00968386 -0.0959154 0.01 -0.00429848 -0.048092 0.01 -0.0186261 0.143203 0.01 -0.00429848 0.048092 0.01 -0.00968386 0.0959154 0.01 -0.0137513 0.144315 0.01 0.0025 -1.58935e-16 0.01 0.000687559 0.0484655 0.01 -0.00473964 0.0966602 0.01 -0.00473964 -0.0966602 0.01 0.000687559 -0.0484655 0.01 -0.0186261 -0.143203 0 -0.0186261 -0.143203 0.01 -0.0025 -1.5771e-16 0.01 -0.00968386 -0.0959154 0.01 -0.00429848 -0.048092 0.01 -0.0025 -1.5771e-16 0 -0.00968386 -0.0959154 0 -0.00429848 -0.048092 0 -0.0025 -1.5771e-16 0 -0.0025 -1.5771e-16 0.01 -0.0186261 0.143203 0.01 -0.00429848 0.048092 0.01 -0.00968386 0.0959154 0.01 -0.0186261 0.143203 0 -0.00429848 0.048092 0 -0.00968386 0.0959154 0 -0.0186261 0.143203 0 -0.0137513 0.144315 0 -0.0137513 0.144315 0.01 -0.0186261 0.143203 0.01 0.0025 -1.58935e-16 0 0.0025 -1.58935e-16 0.01 -0.0137513 0.144315 0.01 0.000687559 0.0484655 0.01 -0.00473964 0.0966602 0.01 -0.0137513 0.144315 0 0.000687559 0.0484655 0 -0.00473964 0.0966602 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="201"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0186461 -0.143381 0 -0.0137713 -0.144493 0 -0.0137713 -0.144493 0.01 -0.0186461 -0.143381 0.01 -0.0186461 -0.143381 0 -0.0137713 -0.144493 0 -0.0025 -1.57906e-16 0 -0.00969278 -0.0960346 0 -0.00430071 -0.0481518 0 -0.0186461 0.143381 0 -0.00430071 0.0481518 0 -0.00969278 0.0960346 0 -0.0137713 0.144493 0 0.0025 -1.59131e-16 0 0.000685324 0.0485252 0 -0.00474857 0.0967794 0 -0.00474857 -0.0967794 0 0.000685324 -0.0485252 0 -0.0137713 -0.144493 0 -0.0137713 -0.144493 0.01 0.0025 -1.59131e-16 0.01 -0.00474857 -0.0967794 0.01 0.000685324 -0.0485252 0.01 0.0025 -1.59131e-16 0 -0.00474857 -0.0967794 0 0.000685324 -0.0485252 0 -0.0186461 -0.143381 0.01 -0.0137713 -0.144493 0.01 -0.0025 -1.57906e-16 0.01 -0.00969278 -0.0960346 0.01 -0.00430071 -0.0481518 0.01 -0.0186461 0.143381 0.01 -0.00430071 0.0481518 0.01 -0.00969278 0.0960346 0.01 -0.0137713 0.144493 0.01 0.0025 -1.59131e-16 0.01 0.000685324 0.0485252 0.01 -0.00474857 0.0967794 0.01 -0.00474857 -0.0967794 0.01 0.000685324 -0.0485252 0.01 -0.0186461 -0.143381 0 -0.0186461 -0.143381 0.01 -0.0025 -1.57906e-16 0.01 -0.00969278 -0.0960346 0.01 -0.00430071 -0.0481518 0.01 -0.0025 -1.57906e-16 0 -0.00969278 -0.0960346 0 -0.00430071 -0.0481518 0 -0.0025 -1.57906e-16 0 -0.0025 -1.57906e-16 0.01 -0.0186461 0.143381 0.01 -0.00430071 0.0481518 0.01 -0.00969278 0.0960346 0.01 -0.0186461 0.143381 0 -0.00430071 0.0481518 0 -0.00969278 0.0960346 0 -0.0186461 0.143381 0 -0.0137713 0.144493 0 -0.0137713 0.144493 0.01 -0.0186461 0.143381 0.01 0.0025 -1.59131e-16 0 0.0025 -1.59131e-16 0.01 -0.0137713 0.144493 0.01 0.000685324 0.0485252 0.01 -0.00474857 0.0967794 0.01 -0.0137713 0.144493 0 0.000685324 0.0485252 0 -0.00474857 0.0967794 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="213"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0144077 -0.136105 0 -0.00948364 -0.136974 0 -0.00948364 -0.136974 0.01 -0.0144077 -0.136105 0.01 -0.0144077 -0.136105 0 -0.00948364 -0.136974 0 -0.0025 -1.91976e-16 0 -0.00779978 -0.0909936 0 -0.00382607 -0.0455739 0 -0.0144077 0.136105 0 -0.00382607 0.0455739 0 -0.00779978 0.0909936 0 -0.00948364 0.136974 0 0.0025 -1.932e-16 0 0.00116548 0.0458646 0 -0.00283358 0.0915741 0 -0.00283358 -0.0915741 0 0.00116548 -0.0458646 0 -0.00948364 -0.136974 0 -0.00948364 -0.136974 0.01 0.0025 -1.932e-16 0.01 -0.00283358 -0.0915741 0.01 0.00116548 -0.0458646 0.01 0.0025 -1.932e-16 0 -0.00283358 -0.0915741 0 0.00116548 -0.0458646 0 -0.0144077 -0.136105 0.01 -0.00948364 -0.136974 0.01 -0.0025 -1.91976e-16 0.01 -0.00779978 -0.0909936 0.01 -0.00382607 -0.0455739 0.01 -0.0144077 0.136105 0.01 -0.00382607 0.0455739 0.01 -0.00779978 0.0909936 0.01 -0.00948364 0.136974 0.01 0.0025 -1.932e-16 0.01 0.00116548 0.0458646 0.01 -0.00283358 0.0915741 0.01 -0.00283358 -0.0915741 0.01 0.00116548 -0.0458646 0.01 -0.0144077 -0.136105 0 -0.0144077 -0.136105 0.01 -0.0025 -1.91976e-16 0.01 -0.00779978 -0.0909936 0.01 -0.00382607 -0.0455739 0.01 -0.0025 -1.91976e-16 0 -0.00779978 -0.0909936 0 -0.00382607 -0.0455739 0 -0.0025 -1.91976e-16 0 -0.0025 -1.91976e-16 0.01 -0.0144077 0.136105 0.01 -0.00382607 0.0455739 0.01 -0.00779978 0.0909936 0.01 -0.0144077 0.136105 0 -0.00382607 0.0455739 0 -0.00779978 0.0909936 0 -0.0144077 0.136105 0 -0.00948364 0.136974 0 -0.00948364 0.136974 0.01 -0.0144077 0.136105 0.01 0.0025 -1.932e-16 0 0.0025 -1.932e-16 0.01 -0.00948364 0.136974 0.01 0.00116548 0.0458646 0.01 -0.00283358 0.0915741 0.01 -0.00948364 0.136974 0 0.00116548 0.0458646 0 -0.00283358 0.0915741 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="214"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0144092 -0.136123 0 -0.00948516 -0.136991 0 -0.00948516 -0.136991 0.01 -0.0144092 -0.136123 0.01 -0.0144092 -0.136123 0 -0.00948516 -0.136991 0 -0.0025 -1.92e-16 0 -0.00780045 -0.0910052 0 -0.00382623 -0.0455797 0 -0.0144092 0.136123 0 -0.00382623 0.0455797 0 -0.00780045 0.0910052 0 -0.00948516 0.136991 0 0.0025 -1.93225e-16 0 0.00116531 0.0458705 0 -0.00283426 0.0915857 0 -0.00283426 -0.0915857 0 0.00116531 -0.0458705 0 -0.00948516 -0.136991 0 -0.00948516 -0.136991 0.01 0.0025 -1.93225e-16 0.01 -0.00283426 -0.0915857 0.01 0.00116531 -0.0458705 0.01 0.0025 -1.93225e-16 0 -0.00283426 -0.0915857 0 0.00116531 -0.0458705 0 -0.0144092 -0.136123 0.01 -0.00948516 -0.136991 0.01 -0.0025 -1.92e-16 0.01 -0.00780045 -0.0910052 0.01 -0.00382623 -0.0455797 0.01 -0.0144092 0.136123 0.01 -0.00382623 0.0455797 0.01 -0.00780045 0.0910052 0.01 -0.00948516 0.136991 0.01 0.0025 -1.93225e-16 0.01 0.00116531 0.0458705 0.01 -0.00283426 0.0915857 0.01 -0.00283426 -0.0915857 0.01 0.00116531 -0.0458705 0.01 -0.0144092 -0.136123 0 -0.0144092 -0.136123 0.01 -0.0025 -1.92e-16 0.01 -0.00780045 -0.0910052 0.01 -0.00382623 -0.0455797 0.01 -0.0025 -1.92e-16 0 -0.00780045 -0.0910052 0 -0.00382623 -0.0455797 0 -0.0025 -1.92e-16 0 -0.0025 -1.92e-16 0.01 -0.0144092 0.136123 0.01 -0.00382623 0.0455797 0.01 -0.00780045 0.0910052 0.01 -0.0144092 0.136123 0 -0.00382623 0.0455797 0 -0.00780045 0.0910052 0 -0.0144092 0.136123 0 -0.00948516 0.136991 0 -0.00948516 0.136991 0.01 -0.0144092 0.136123 0.01 0.0025 -1.93225e-16 0 0.0025 -1.93225e-16 0.01 -0.00948516 0.136991 0.01 0.00116531 0.0458705 0.01 -0.00283426 0.0915857 0.01 -0.00948516 0.136991 0 0.00116531 0.0458705 0 -0.00283426 0.0915857 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="223"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0150503 -0.143451 0 -0.0101263 -0.144319 0 -0.0101263 -0.144319 0.01 -0.0150503 -0.143451 0.01 -0.0150503 -0.143451 0 -0.0101263 -0.144319 0 -0.0025 -2.02336e-16 0 -0.00808579 -0.0959044 0 -0.00389763 -0.0480334 0 -0.0150503 0.143451 0 -0.00389763 0.0480334 0 -0.00808579 0.0959044 0 -0.0101263 0.144319 0 0.0025 -2.03561e-16 0 0.00109391 0.0483242 0 -0.0031196 0.0964848 0 -0.0031196 -0.0964848 0 0.00109391 -0.0483242 0 -0.0101263 -0.144319 0 -0.0101263 -0.144319 0.01 0.0025 -2.03561e-16 0.01 -0.0031196 -0.0964848 0.01 0.00109391 -0.0483242 0.01 0.0025 -2.03561e-16 0 -0.0031196 -0.0964848 0 0.00109391 -0.0483242 0 -0.0150503 -0.143451 0.01 -0.0101263 -0.144319 0.01 -0.0025 -2.02336e-16 0.01 -0.00808579 -0.0959044 0.01 -0.00389763 -0.0480334 0.01 -0.0150503 0.143451 0.01 -0.00389763 0.0480334 0.01 -0.00808579 0.0959044 0.01 -0.0101263 0.144319 0.01 0.0025 -2.03561e-16 0.01 0.00109391 0.0483242 0.01 -0.0031196 0.0964848 0.01 -0.0031196 -0.0964848 0.01 0.00109391 -0.0483242 0.01 -0.0150503 -0.143451 0 -0.0150503 -0.143451 0.01 -0.0025 -2.02336e-16 0.01 -0.00808579 -0.0959044 0.01 -0.00389763 -0.0480334 0.01 -0.0025 -2.02336e-16 0 -0.00808579 -0.0959044 0 -0.00389763 -0.0480334 0 -0.0025 -2.02336e-16 0 -0.0025 -2.02336e-16 0.01 -0.0150503 0.143451 0.01 -0.00389763 0.0480334 0.01 -0.00808579 0.0959044 0.01 -0.0150503 0.143451 0 -0.00389763 0.0480334 0 -0.00808579 0.0959044 0 -0.0150503 0.143451 0 -0.0101263 0.144319 0 -0.0101263 0.144319 0.01 -0.0150503 0.143451 0.01 0.0025 -2.03561e-16 0 0.0025 -2.03561e-16 0.01 -0.0101263 0.144319 0.01 0.00109391 0.0483242 0.01 -0.0031196 0.0964848 0.01 -0.0101263 0.144319 0 0.00109391 0.0483242 0 -0.0031196 0.0964848 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="224"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0150518 -0.143468 0 -0.0101278 -0.144336 0 -0.0101278 -0.144336 0.01 -0.0150518 -0.143468 0.01 -0.0150518 -0.143468 0 -0.0101278 -0.144336 0 -0.0025 -2.02361e-16 0 -0.00808647 -0.095916 0 -0.0038978 -0.0480393 0 -0.0150518 0.143468 0 -0.0038978 0.0480393 0 -0.00808647 0.095916 0 -0.0101278 0.144336 0 0.0025 -2.03585e-16 0 0.00109374 0.04833 0 -0.00312028 0.0964964 0 -0.00312028 -0.0964964 0 0.00109374 -0.04833 0 -0.0101278 -0.144336 0 -0.0101278 -0.144336 0.01 0.0025 -2.03585e-16 0.01 -0.00312028 -0.0964964 0.01 0.00109374 -0.04833 0.01 0.0025 -2.03585e-16 0 -0.00312028 -0.0964964 0 0.00109374 -0.04833 0 -0.0150518 -0.143468 0.01 -0.0101278 -0.144336 0.01 -0.0025 -2.02361e-16 0.01 -0.00808647 -0.095916 0.01 -0.0038978 -0.0480393 0.01 -0.0150518 0.143468 0.01 -0.0038978 0.0480393 0.01 -0.00808647 0.095916 0.01 -0.0101278 0.144336 0.01 0.0025 -2.03585e-16 0.01 0.00109374 0.04833 0.01 -0.00312028 0.0964964 0.01 -0.00312028 -0.0964964 0.01 0.00109374 -0.04833 0.01 -0.0150518 -0.143468 0 -0.0150518 -0.143468 0.01 -0.0025 -2.02361e-16 0.01 -0.00808647 -0.095916 0.01 -0.0038978 -0.0480393 0.01 -0.0025 -2.02361e-16 0 -0.00808647 -0.095916 0 -0.0038978 -0.0480393 0 -0.0025 -2.02361e-16 0 -0.0025 -2.02361e-16 0.01 -0.0150518 0.143468 0.01 -0.0038978 0.0480393 0.01 -0.00808647 0.095916 0.01 -0.0150518 0.143468 0 -0.0038978 0.0480393 0 -0.00808647 0.095916 0 -0.0150518 0.143468 0 -0.0101278 0.144336 0 -0.0101278 0.144336 0.01 -0.0150518 0.143468 0.01 0.0025 -2.03585e-16 0 0.0025 -2.03585e-16 0.01 -0.0101278 0.144336 0.01 0.00109374 0.04833 0.01 -0.00312028 0.0964964 0.01 -0.0101278 0.144336 0 0.00109374 0.04833 0 -0.00312028 0.0964964 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="225"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0151779 -0.144909 0 -0.0102539 -0.145778 0 -0.0102539 -0.145778 0.01 -0.0151779 -0.144909 0.01 -0.0151779 -0.144909 0 -0.0102539 -0.145778 0 -0.0025 -2.04394e-16 0 -0.00814259 -0.0968795 0 -0.00391184 -0.0485219 0 -0.0151779 0.144909 0 -0.00391184 0.0485219 0 -0.00814259 0.0968795 0 -0.0102539 0.145778 0 0.0025 -2.05618e-16 0 0.0010797 0.0488126 0 -0.0031764 0.09746 0 -0.0031764 -0.09746 0 0.0010797 -0.0488126 0 -0.0102539 -0.145778 0 -0.0102539 -0.145778 0.01 0.0025 -2.05618e-16 0.01 -0.0031764 -0.09746 0.01 0.0010797 -0.0488126 0.01 0.0025 -2.05618e-16 0 -0.0031764 -0.09746 0 0.0010797 -0.0488126 0 -0.0151779 -0.144909 0.01 -0.0102539 -0.145778 0.01 -0.0025 -2.04394e-16 0.01 -0.00814259 -0.0968795 0.01 -0.00391184 -0.0485219 0.01 -0.0151779 0.144909 0.01 -0.00391184 0.0485219 0.01 -0.00814259 0.0968795 0.01 -0.0102539 0.145778 0.01 0.0025 -2.05618e-16 0.01 0.0010797 0.0488126 0.01 -0.0031764 0.09746 0.01 -0.0031764 -0.09746 0.01 0.0010797 -0.0488126 0.01 -0.0151779 -0.144909 0 -0.0151779 -0.144909 0.01 -0.0025 -2.04394e-16 0.01 -0.00814259 -0.0968795 0.01 -0.00391184 -0.0485219 0.01 -0.0025 -2.04394e-16 0 -0.00814259 -0.0968795 0 -0.00391184 -0.0485219 0 -0.0025 -2.04394e-16 0 -0.0025 -2.04394e-16 0.01 -0.0151779 0.144909 0.01 -0.00391184 0.0485219 0.01 -0.00814259 0.0968795 0.01 -0.0151779 0.144909 0 -0.00391184 0.0485219 0 -0.00814259 0.0968795 0 -0.0151779 0.144909 0 -0.0102539 0.145778 0 -0.0102539 0.145778 0.01 -0.0151779 0.144909 0.01 0.0025 -2.05618e-16 0 0.0025 -2.05618e-16 0.01 -0.0102539 0.145778 0.01 0.0010797 0.0488126 0.01 -0.0031764 0.09746 0.01 -0.0102539 0.145778 0 0.0010797 0.0488126 0 -0.0031764 0.09746 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="226"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.015181 -0.144944 0 -0.0102569 -0.145812 0 -0.0102569 -0.145812 0.01 -0.015181 -0.144944 0.01 -0.015181 -0.144944 0 -0.0102569 -0.145812 0 -0.0025 -2.04443e-16 0 -0.00814394 -0.0969028 0 -0.00391218 -0.0485335 0 -0.015181 0.144944 0 -0.00391218 0.0485335 0 -0.00814394 0.0969028 0 -0.0102569 0.145812 0 0.0025 -2.05667e-16 0 0.00107936 0.0488242 0 -0.00317775 0.0974832 0 -0.00317775 -0.0974832 0 0.00107936 -0.0488242 0 -0.0102569 -0.145812 0 -0.0102569 -0.145812 0.01 0.0025 -2.05667e-16 0.01 -0.00317775 -0.0974832 0.01 0.00107936 -0.0488242 0.01 0.0025 -2.05667e-16 0 -0.00317775 -0.0974832 0 0.00107936 -0.0488242 0 -0.015181 -0.144944 0.01 -0.0102569 -0.145812 0.01 -0.0025 -2.04443e-16 0.01 -0.00814394 -0.0969028 0.01 -0.00391218 -0.0485335 0.01 -0.015181 0.144944 0.01 -0.00391218 0.0485335 0.01 -0.00814394 0.0969028 0.01 -0.0102569 0.145812 0.01 0.0025 -2.05667e-16 0.01 0.00107936 0.0488242 0.01 -0.00317775 0.0974832 0.01 -0.00317775 -0.0974832 0.01 0.00107936 -0.0488242 0.01 -0.015181 -0.144944 0 -0.015181 -0.144944 0.01 -0.0025 -2.04443e-16 0.01 -0.00814394 -0.0969028 0.01 -0.00391218 -0.0485335 0.01 -0.0025 -2.04443e-16 0 -0.00814394 -0.0969028 0 -0.00391218 -0.0485335 0 -0.0025 -2.04443e-16 0 -0.0025 -2.04443e-16 0.01 -0.015181 0.144944 0.01 -0.00391218 0.0485335 0.01 -0.00814394 0.0969028 0.01 -0.015181 0.144944 0 -0.00391218 0.0485335 0 -0.00814394 0.0969028 0 -0.015181 0.144944 0 -0.0102569 0.145812 0 -0.0102569 0.145812 0.01 -0.015181 0.144944 0.01 0.0025 -2.05667e-16 0 0.0025 -2.05667e-16 0.01 -0.0102569 0.145812 0.01 0.00107936 0.0488242 0.01 -0.00317775 0.0974832 0.01 -0.0102569 0.145812 0 0.00107936 0.0488242 0 -0.00317775 0.0974832 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="227"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0153071 -0.146385 0 -0.010383 -0.147254 0 -0.010383 -0.147254 0.01 -0.0153071 -0.146385 0.01 -0.0153071 -0.146385 0 -0.010383 -0.147254 0 -0.0025 -2.06475e-16 0 -0.00820006 -0.0978663 0 -0.00392622 -0.0490161 0 -0.0153071 0.146385 0 -0.00392622 0.0490161 0 -0.00820006 0.0978663 0 -0.010383 0.147254 0 0.0025 -2.077e-16 0 0.00106532 0.0493068 0 -0.00323387 0.0984468 0 -0.00323387 -0.0984468 0 0.00106532 -0.0493068 0 -0.010383 -0.147254 0 -0.010383 -0.147254 0.01 0.0025 -2.077e-16 0.01 -0.00323387 -0.0984468 0.01 0.00106532 -0.0493068 0.01 0.0025 -2.077e-16 0 -0.00323387 -0.0984468 0 0.00106532 -0.0493068 0 -0.0153071 -0.146385 0.01 -0.010383 -0.147254 0.01 -0.0025 -2.06475e-16 0.01 -0.00820006 -0.0978663 0.01 -0.00392622 -0.0490161 0.01 -0.0153071 0.146385 0.01 -0.00392622 0.0490161 0.01 -0.00820006 0.0978663 0.01 -0.010383 0.147254 0.01 0.0025 -2.077e-16 0.01 0.00106532 0.0493068 0.01 -0.00323387 0.0984468 0.01 -0.00323387 -0.0984468 0.01 0.00106532 -0.0493068 0.01 -0.0153071 -0.146385 0 -0.0153071 -0.146385 0.01 -0.0025 -2.06475e-16 0.01 -0.00820006 -0.0978663 0.01 -0.00392622 -0.0490161 0.01 -0.0025 -2.06475e-16 0 -0.00820006 -0.0978663 0 -0.00392622 -0.0490161 0 -0.0025 -2.06475e-16 0 -0.0025 -2.06475e-16 0.01 -0.0153071 0.146385 0.01 -0.00392622 0.0490161 0.01 -0.00820006 0.0978663 0.01 -0.0153071 0.146385 0 -0.00392622 0.0490161 0 -0.00820006 0.0978663 0 -0.0153071 0.146385 0 -0.010383 0.147254 0 -0.010383 0.147254 0.01 -0.0153071 0.146385 0.01 0.0025 -2.077e-16 0 0.0025 -2.077e-16 0.01 -0.010383 0.147254 0.01 0.00106532 0.0493068 0.01 -0.00323387 0.0984468 0.01 -0.010383 0.147254 0 0.00106532 0.0493068 0 -0.00323387 0.0984468 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="228"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0153086 -0.146403 0 -0.0103845 -0.147271 0 -0.0103845 -0.147271 0.01 -0.0153086 -0.146403 0.01 -0.0153086 -0.146403 0 -0.0103845 -0.147271 0 -0.0025 -2.065e-16 0 -0.00820074 -0.0978779 0 -0.00392639 -0.0490219 0 -0.0153086 0.146403 0 -0.00392639 0.0490219 0 -0.00820074 0.0978779 0 -0.0103845 0.147271 0 0.0025 -2.07725e-16 0 0.00106515 0.0493126 0 -0.00323455 0.0984584 0 -0.00323455 -0.0984584 0 0.00106515 -0.0493126 0 -0.0103845 -0.147271 0 -0.0103845 -0.147271 0.01 0.0025 -2.07725e-16 0.01 -0.00323455 -0.0984584 0.01 0.00106515 -0.0493126 0.01 0.0025 -2.07725e-16 0 -0.00323455 -0.0984584 0 0.00106515 -0.0493126 0 -0.0153086 -0.146403 0.01 -0.0103845 -0.147271 0.01 -0.0025 -2.065e-16 0.01 -0.00820074 -0.0978779 0.01 -0.00392639 -0.0490219 0.01 -0.0153086 0.146403 0.01 -0.00392639 0.0490219 0.01 -0.00820074 0.0978779 0.01 -0.0103845 0.147271 0.01 0.0025 -2.07725e-16 0.01 0.00106515 0.0493126 0.01 -0.00323455 0.0984584 0.01 -0.00323455 -0.0984584 0.01 0.00106515 -0.0493126 0.01 -0.0153086 -0.146403 0 -0.0153086 -0.146403 0.01 -0.0025 -2.065e-16 0.01 -0.00820074 -0.0978779 0.01 -0.00392639 -0.0490219 0.01 -0.0025 -2.065e-16 0 -0.00820074 -0.0978779 0 -0.00392639 -0.0490219 0 -0.0025 -2.065e-16 0 -0.0025 -2.065e-16 0.01 -0.0153086 0.146403 0.01 -0.00392639 0.0490219 0.01 -0.00820074 0.0978779 0.01 -0.0153086 0.146403 0 -0.00392639 0.0490219 0 -0.00820074 0.0978779 0 -0.0153086 0.146403 0 -0.0103845 0.147271 0 -0.0103845 0.147271 0.01 -0.0153086 0.146403 0.01 0.0025 -2.07725e-16 0 0.0025 -2.07725e-16 0.01 -0.0103845 0.147271 0.01 0.00106515 0.0493126 0.01 -0.00323455 0.0984584 0.01 -0.0103845 0.147271 0 0.00106515 0.0493126 0 -0.00323455 0.0984584 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="229"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0145991 -0.138293 0 -0.00967507 -0.139162 0 -0.00967507 -0.139162 0.01 -0.0145991 -0.138293 0.01 -0.0145991 -0.138293 0 -0.00967507 -0.139162 0 -0.0025 -1.95062e-16 0 -0.00788497 -0.0924564 0 -0.00384738 -0.0463065 0 -0.0145991 0.138293 0 -0.00384738 0.0463065 0 -0.00788497 0.0924564 0 -0.00967507 0.139162 0 0.0025 -1.96286e-16 0 0.00114416 0.0465973 0 -0.00291878 0.0930369 0 -0.00291878 -0.0930369 0 0.00114416 -0.0465973 0 -0.00967507 -0.139162 0 -0.00967507 -0.139162 0.01 0.0025 -1.96286e-16 0.01 -0.00291878 -0.0930369 0.01 0.00114416 -0.0465973 0.01 0.0025 -1.96286e-16 0 -0.00291878 -0.0930369 0 0.00114416 -0.0465973 0 -0.0145991 -0.138293 0.01 -0.00967507 -0.139162 0.01 -0.0025 -1.95062e-16 0.01 -0.00788497 -0.0924564 0.01 -0.00384738 -0.0463065 0.01 -0.0145991 0.138293 0.01 -0.00384738 0.0463065 0.01 -0.00788497 0.0924564 0.01 -0.00967507 0.139162 0.01 0.0025 -1.96286e-16 0.01 0.00114416 0.0465973 0.01 -0.00291878 0.0930369 0.01 -0.00291878 -0.0930369 0.01 0.00114416 -0.0465973 0.01 -0.0145991 -0.138293 0 -0.0145991 -0.138293 0.01 -0.0025 -1.95062e-16 0.01 -0.00788497 -0.0924564 0.01 -0.00384738 -0.0463065 0.01 -0.0025 -1.95062e-16 0 -0.00788497 -0.0924564 0 -0.00384738 -0.0463065 0 -0.0025 -1.95062e-16 0 -0.0025 -1.95062e-16 0.01 -0.0145991 0.138293 0.01 -0.00384738 0.0463065 0.01 -0.00788497 0.0924564 0.01 -0.0145991 0.138293 0 -0.00384738 0.0463065 0 -0.00788497 0.0924564 0 -0.0145991 0.138293 0 -0.00967507 0.139162 0 -0.00967507 0.139162 0.01 -0.0145991 0.138293 0.01 0.0025 -1.96286e-16 0 0.0025 -1.96286e-16 0.01 -0.00967507 0.139162 0.01 0.00114416 0.0465973 0.01 -0.00291878 0.0930369 0.01 -0.00967507 0.139162 0 0.00114416 0.0465973 0 -0.00291878 0.0930369 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="230"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0154377 -0.147879 0 -0.0105137 -0.148747 0 -0.0105137 -0.148747 0.01 -0.0154377 -0.147879 0.01 -0.0154377 -0.147879 0 -0.0105137 -0.148747 0 -0.0025 -2.08582e-16 0 -0.00825821 -0.0988647 0 -0.00394077 -0.0495161 0 -0.0154377 0.147879 0 -0.00394077 0.0495161 0 -0.00825821 0.0988647 0 -0.0105137 0.148747 0 0.0025 -2.09806e-16 0 0.00105077 0.0498069 0 -0.00329202 0.0994452 0 -0.00329202 -0.0994452 0 0.00105077 -0.0498069 0 -0.0105137 -0.148747 0 -0.0105137 -0.148747 0.01 0.0025 -2.09806e-16 0.01 -0.00329202 -0.0994452 0.01 0.00105077 -0.0498069 0.01 0.0025 -2.09806e-16 0 -0.00329202 -0.0994452 0 0.00105077 -0.0498069 0 -0.0154377 -0.147879 0.01 -0.0105137 -0.148747 0.01 -0.0025 -2.08582e-16 0.01 -0.00825821 -0.0988647 0.01 -0.00394077 -0.0495161 0.01 -0.0154377 0.147879 0.01 -0.00394077 0.0495161 0.01 -0.00825821 0.0988647 0.01 -0.0105137 0.148747 0.01 0.0025 -2.09806e-16 0.01 0.00105077 0.0498069 0.01 -0.00329202 0.0994452 0.01 -0.00329202 -0.0994452 0.01 0.00105077 -0.0498069 0.01 -0.0154377 -0.147879 0 -0.0154377 -0.147879 0.01 -0.0025 -2.08582e-16 0.01 -0.00825821 -0.0988647 0.01 -0.00394077 -0.0495161 0.01 -0.0025 -2.08582e-16 0 -0.00825821 -0.0988647 0 -0.00394077 -0.0495161 0 -0.0025 -2.08582e-16 0 -0.0025 -2.08582e-16 0.01 -0.0154377 0.147879 0.01 -0.00394077 0.0495161 0.01 -0.00825821 0.0988647 0.01 -0.0154377 0.147879 0 -0.00394077 0.0495161 0 -0.00825821 0.0988647 0 -0.0154377 0.147879 0 -0.0105137 0.148747 0 -0.0105137 0.148747 0.01 -0.0154377 0.147879 0.01 0.0025 -2.09806e-16 0 0.0025 -2.09806e-16 0.01 -0.0105137 0.148747 0.01 0.00105077 0.0498069 0.01 -0.00329202 0.0994452 0.01 -0.0105137 0.148747 0 0.00105077 0.0498069 0 -0.00329202 0.0994452 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="231"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0155638 -0.14932 0 -0.0106398 -0.150188 0 -0.0106398 -0.150188 0.01 -0.0155638 -0.14932 0.01 -0.0155638 -0.14932 0 -0.0106398 -0.150188 0 -0.0025 -2.10615e-16 0 -0.00831434 -0.0998283 0 -0.00395481 -0.0499987 0 -0.0155638 0.14932 0 -0.00395481 0.0499987 0 -0.00831434 0.0998283 0 -0.0106398 0.150188 0 0.0025 -2.11839e-16 0 0.00103673 0.0502895 0 -0.00334814 0.100409 0 -0.00334814 -0.100409 0 0.00103673 -0.0502895 0 -0.0106398 -0.150188 0 -0.0106398 -0.150188 0.01 0.0025 -2.11839e-16 0.01 -0.00334814 -0.100409 0.01 0.00103673 -0.0502895 0.01 0.0025 -2.11839e-16 0 -0.00334814 -0.100409 0 0.00103673 -0.0502895 0 -0.0155638 -0.14932 0.01 -0.0106398 -0.150188 0.01 -0.0025 -2.10615e-16 0.01 -0.00831434 -0.0998283 0.01 -0.00395481 -0.0499987 0.01 -0.0155638 0.14932 0.01 -0.00395481 0.0499987 0.01 -0.00831434 0.0998283 0.01 -0.0106398 0.150188 0.01 0.0025 -2.11839e-16 0.01 0.00103673 0.0502895 0.01 -0.00334814 0.100409 0.01 -0.00334814 -0.100409 0.01 0.00103673 -0.0502895 0.01 -0.0155638 -0.14932 0 -0.0155638 -0.14932 0.01 -0.0025 -2.10615e-16 0.01 -0.00831434 -0.0998283 0.01 -0.00395481 -0.0499987 0.01 -0.0025 -2.10615e-16 0 -0.00831434 -0.0998283 0 -0.00395481 -0.0499987 0 -0.0025 -2.10615e-16 0 -0.0025 -2.10615e-16 0.01 -0.0155638 0.14932 0.01 -0.00395481 0.0499987 0.01 -0.00831434 0.0998283 0.01 -0.0155638 0.14932 0 -0.00395481 0.0499987 0 -0.00831434 0.0998283 0 -0.0155638 0.14932 0 -0.0106398 0.150188 0 -0.0106398 0.150188 0.01 -0.0155638 0.14932 0.01 0.0025 -2.11839e-16 0 0.0025 -2.11839e-16 0.01 -0.0106398 0.150188 0.01 0.00103673 0.0502895 0.01 -0.00334814 0.100409 0.01 -0.0106398 0.150188 0 0.00103673 0.0502895 0 -0.00334814 0.100409 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="232"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0155653 -0.149337 0 -0.0106413 -0.150206 0 -0.0106413 -0.150206 0.01 -0.0155653 -0.149337 0.01 -0.0155653 -0.149337 0 -0.0106413 -0.150206 0 -0.0025 -2.10639e-16 0 -0.00831501 -0.0998399 0 -0.00395498 -0.0500046 0 -0.0155653 0.149337 0 -0.00395498 0.0500046 0 -0.00831501 0.0998399 0 -0.0106413 0.150206 0 0.0025 -2.11864e-16 0 0.00103656 0.0502953 0 -0.00334882 0.10042 0 -0.00334882 -0.10042 0 0.00103656 -0.0502953 0 -0.0106413 -0.150206 0 -0.0106413 -0.150206 0.01 0.0025 -2.11864e-16 0.01 -0.00334882 -0.10042 0.01 0.00103656 -0.0502953 0.01 0.0025 -2.11864e-16 0 -0.00334882 -0.10042 0 0.00103656 -0.0502953 0 -0.0155653 -0.149337 0.01 -0.0106413 -0.150206 0.01 -0.0025 -2.10639e-16 0.01 -0.00831501 -0.0998399 0.01 -0.00395498 -0.0500046 0.01 -0.0155653 0.149337 0.01 -0.00395498 0.0500046 0.01 -0.00831501 0.0998399 0.01 -0.0106413 0.150206 0.01 0.0025 -2.11864e-16 0.01 0.00103656 0.0502953 0.01 -0.00334882 0.10042 0.01 -0.00334882 -0.10042 0.01 0.00103656 -0.0502953 0.01 -0.0155653 -0.149337 0 -0.0155653 -0.149337 0.01 -0.0025 -2.10639e-16 0.01 -0.00831501 -0.0998399 0.01 -0.00395498 -0.0500046 0.01 -0.0025 -2.10639e-16 0 -0.00831501 -0.0998399 0 -0.00395498 -0.0500046 0 -0.0025 -2.10639e-16 0 -0.0025 -2.10639e-16 0.01 -0.0155653 0.149337 0.01 -0.00395498 0.0500046 0.01 -0.00831501 0.0998399 0.01 -0.0155653 0.149337 0 -0.00395498 0.0500046 0 -0.00831501 0.0998399 0 -0.0155653 0.149337 0 -0.0106413 0.150206 0 -0.0106413 0.150206 0.01 -0.0155653 0.149337 0.01 0.0025 -2.11864e-16 0 0.0025 -2.11864e-16 0.01 -0.0106413 0.150206 0.01 0.00103656 0.0502953 0.01 -0.00334882 0.10042 0.01 -0.0106413 0.150206 0 0.00103656 0.0502953 0 -0.00334882 0.10042 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="215"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0145353 -0.137564 0 -0.00961126 -0.138432 0 -0.00961126 -0.138432 0.01 -0.0145353 -0.137564 0.01 -0.0145353 -0.137564 0 -0.00961126 -0.138432 0 -0.0025 -1.94033e-16 0 -0.00785657 -0.0919688 0 -0.00384028 -0.0460623 0 -0.0145353 0.137564 0 -0.00384028 0.0460623 0 -0.00785657 0.0919688 0 -0.00961126 0.138432 0 0.0025 -1.95258e-16 0 0.00115126 0.0463531 0 -0.00289038 0.0925493 0 -0.00289038 -0.0925493 0 0.00115126 -0.0463531 0 -0.00961126 -0.138432 0 -0.00961126 -0.138432 0.01 0.0025 -1.95258e-16 0.01 -0.00289038 -0.0925493 0.01 0.00115126 -0.0463531 0.01 0.0025 -1.95258e-16 0 -0.00289038 -0.0925493 0 0.00115126 -0.0463531 0 -0.0145353 -0.137564 0.01 -0.00961126 -0.138432 0.01 -0.0025 -1.94033e-16 0.01 -0.00785657 -0.0919688 0.01 -0.00384028 -0.0460623 0.01 -0.0145353 0.137564 0.01 -0.00384028 0.0460623 0.01 -0.00785657 0.0919688 0.01 -0.00961126 0.138432 0.01 0.0025 -1.95258e-16 0.01 0.00115126 0.0463531 0.01 -0.00289038 0.0925493 0.01 -0.00289038 -0.0925493 0.01 0.00115126 -0.0463531 0.01 -0.0145353 -0.137564 0 -0.0145353 -0.137564 0.01 -0.0025 -1.94033e-16 0.01 -0.00785657 -0.0919688 0.01 -0.00384028 -0.0460623 0.01 -0.0025 -1.94033e-16 0 -0.00785657 -0.0919688 0 -0.00384028 -0.0460623 0 -0.0025 -1.94033e-16 0 -0.0025 -1.94033e-16 0.01 -0.0145353 0.137564 0.01 -0.00384028 0.0460623 0.01 -0.00785657 0.0919688 0.01 -0.0145353 0.137564 0 -0.00384028 0.0460623 0 -0.00785657 0.0919688 0 -0.0145353 0.137564 0 -0.00961126 0.138432 0 -0.00961126 0.138432 0.01 -0.0145353 0.137564 0.01 0.0025 -1.95258e-16 0 0.0025 -1.95258e-16 0.01 -0.00961126 0.138432 0.01 0.00115126 0.0463531 0.01 -0.00289038 0.0925493 0.01 -0.00961126 0.138432 0 0.00115126 0.0463531 0 -0.00289038 0.0925493 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="216"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0145368 -0.137581 0 -0.00961278 -0.13845 0 -0.00961278 -0.13845 0.01 -0.0145368 -0.137581 0.01 -0.0145368 -0.137581 0 -0.00961278 -0.13845 0 -0.0025 -1.94058e-16 0 -0.00785725 -0.0919804 0 -0.00384045 -0.0460681 0 -0.0145368 0.137581 0 -0.00384045 0.0460681 0 -0.00785725 0.0919804 0 -0.00961278 0.13845 0 0.0025 -1.95282e-16 0 0.00115109 0.0463589 0 -0.00289106 0.0925609 0 -0.00289106 -0.0925609 0 0.00115109 -0.0463589 0 -0.00961278 -0.13845 0 -0.00961278 -0.13845 0.01 0.0025 -1.95282e-16 0.01 -0.00289106 -0.0925609 0.01 0.00115109 -0.0463589 0.01 0.0025 -1.95282e-16 0 -0.00289106 -0.0925609 0 0.00115109 -0.0463589 0 -0.0145368 -0.137581 0.01 -0.00961278 -0.13845 0.01 -0.0025 -1.94058e-16 0.01 -0.00785725 -0.0919804 0.01 -0.00384045 -0.0460681 0.01 -0.0145368 0.137581 0.01 -0.00384045 0.0460681 0.01 -0.00785725 0.0919804 0.01 -0.00961278 0.13845 0.01 0.0025 -1.95282e-16 0.01 0.00115109 0.0463589 0.01 -0.00289106 0.0925609 0.01 -0.00289106 -0.0925609 0.01 0.00115109 -0.0463589 0.01 -0.0145368 -0.137581 0 -0.0145368 -0.137581 0.01 -0.0025 -1.94058e-16 0.01 -0.00785725 -0.0919804 0.01 -0.00384045 -0.0460681 0.01 -0.0025 -1.94058e-16 0 -0.00785725 -0.0919804 0 -0.00384045 -0.0460681 0 -0.0025 -1.94058e-16 0 -0.0025 -1.94058e-16 0.01 -0.0145368 0.137581 0.01 -0.00384045 0.0460681 0.01 -0.00785725 0.0919804 0.01 -0.0145368 0.137581 0 -0.00384045 0.0460681 0 -0.00785725 0.0919804 0 -0.0145368 0.137581 0 -0.00961278 0.13845 0 -0.00961278 0.13845 0.01 -0.0145368 0.137581 0.01 0.0025 -1.95282e-16 0 0.0025 -1.95282e-16 0.01 -0.00961278 0.13845 0.01 0.00115109 0.0463589 0.01 -0.00289106 0.0925609 0.01 -0.00961278 0.13845 0 0.00115109 0.0463589 0 -0.00289106 0.0925609 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="217"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0146644 -0.13904 0 -0.00974039 -0.139908 0 -0.00974039 -0.139908 0.01 -0.0146644 -0.13904 0.01 -0.0146644 -0.13904 0 -0.00974039 -0.139908 0 -0.0025 -1.96115e-16 0 -0.00791405 -0.0929556 0 -0.00385466 -0.0465566 0 -0.0146644 0.13904 0 -0.00385466 0.0465566 0 -0.00791405 0.0929556 0 -0.00974039 0.139908 0 0.0025 -1.9734e-16 0 0.00113688 0.0468473 0 -0.00294786 0.0935361 0 -0.00294786 -0.0935361 0 0.00113688 -0.0468473 0 -0.00974039 -0.139908 0 -0.00974039 -0.139908 0.01 0.0025 -1.9734e-16 0.01 -0.00294786 -0.0935361 0.01 0.00113688 -0.0468473 0.01 0.0025 -1.9734e-16 0 -0.00294786 -0.0935361 0 0.00113688 -0.0468473 0 -0.0146644 -0.13904 0.01 -0.00974039 -0.139908 0.01 -0.0025 -1.96115e-16 0.01 -0.00791405 -0.0929556 0.01 -0.00385466 -0.0465566 0.01 -0.0146644 0.13904 0.01 -0.00385466 0.0465566 0.01 -0.00791405 0.0929556 0.01 -0.00974039 0.139908 0.01 0.0025 -1.9734e-16 0.01 0.00113688 0.0468473 0.01 -0.00294786 0.0935361 0.01 -0.00294786 -0.0935361 0.01 0.00113688 -0.0468473 0.01 -0.0146644 -0.13904 0 -0.0146644 -0.13904 0.01 -0.0025 -1.96115e-16 0.01 -0.00791405 -0.0929556 0.01 -0.00385466 -0.0465566 0.01 -0.0025 -1.96115e-16 0 -0.00791405 -0.0929556 0 -0.00385466 -0.0465566 0 -0.0025 -1.96115e-16 0 -0.0025 -1.96115e-16 0.01 -0.0146644 0.13904 0.01 -0.00385466 0.0465566 0.01 -0.00791405 0.0929556 0.01 -0.0146644 0.13904 0 -0.00385466 0.0465566 0 -0.00791405 0.0929556 0 -0.0146644 0.13904 0 -0.00974039 0.139908 0 -0.00974039 0.139908 0.01 -0.0146644 0.13904 0.01 0.0025 -1.9734e-16 0 0.0025 -1.9734e-16 0.01 -0.00974039 0.139908 0.01 0.00113688 0.0468473 0.01 -0.00294786 0.0935361 0.01 -0.00974039 0.139908 0 0.00113688 0.0468473 0 -0.00294786 0.0935361 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="218"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.014666 -0.139057 0 -0.00974191 -0.139926 0 -0.00974191 -0.139926 0.01 -0.014666 -0.139057 0.01 -0.014666 -0.139057 0 -0.00974191 -0.139926 0 -0.0025 -1.96139e-16 0 -0.00791472 -0.0929672 0 -0.00385483 -0.0465624 0 -0.014666 0.139057 0 -0.00385483 0.0465624 0 -0.00791472 0.0929672 0 -0.00974191 0.139926 0 0.0025 -1.97364e-16 0 0.00113671 0.0468531 0 -0.00294853 0.0935477 0 -0.00294853 -0.0935477 0 0.00113671 -0.0468531 0 -0.00974191 -0.139926 0 -0.00974191 -0.139926 0.01 0.0025 -1.97364e-16 0.01 -0.00294853 -0.0935477 0.01 0.00113671 -0.0468531 0.01 0.0025 -1.97364e-16 0 -0.00294853 -0.0935477 0 0.00113671 -0.0468531 0 -0.014666 -0.139057 0.01 -0.00974191 -0.139926 0.01 -0.0025 -1.96139e-16 0.01 -0.00791472 -0.0929672 0.01 -0.00385483 -0.0465624 0.01 -0.014666 0.139057 0.01 -0.00385483 0.0465624 0.01 -0.00791472 0.0929672 0.01 -0.00974191 0.139926 0.01 0.0025 -1.97364e-16 0.01 0.00113671 0.0468531 0.01 -0.00294853 0.0935477 0.01 -0.00294853 -0.0935477 0.01 0.00113671 -0.0468531 0.01 -0.014666 -0.139057 0 -0.014666 -0.139057 0.01 -0.0025 -1.96139e-16 0.01 -0.00791472 -0.0929672 0.01 -0.00385483 -0.0465624 0.01 -0.0025 -1.96139e-16 0 -0.00791472 -0.0929672 0 -0.00385483 -0.0465624 0 -0.0025 -1.96139e-16 0 -0.0025 -1.96139e-16 0.01 -0.014666 0.139057 0.01 -0.00385483 0.0465624 0.01 -0.00791472 0.0929672 0.01 -0.014666 0.139057 0 -0.00385483 0.0465624 0 -0.00791472 0.0929672 0 -0.014666 0.139057 0 -0.00974191 0.139926 0 -0.00974191 0.139926 0.01 -0.014666 0.139057 0.01 0.0025 -1.97364e-16 0 0.0025 -1.97364e-16 0.01 -0.00974191 0.139926 0.01 0.00113671 0.0468531 0.01 -0.00294853 0.0935477 0.01 -0.00974191 0.139926 0 0.00113671 0.0468531 0 -0.00294853 0.0935477 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="219"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.014792 -0.140499 0 -0.00986801 -0.141367 0 -0.00986801 -0.141367 0.01 -0.014792 -0.140499 0.01 -0.014792 -0.140499 0 -0.00986801 -0.141367 0 -0.0025 -1.98172e-16 0 -0.00797084 -0.0939308 0 -0.00386887 -0.047045 0 -0.014792 0.140499 0 -0.00386887 0.047045 0 -0.00797084 0.0939308 0 -0.00986801 0.141367 0 0.0025 -1.99397e-16 0 0.00112267 0.0473357 0 -0.00300465 0.0945112 0 -0.00300465 -0.0945112 0 0.00112267 -0.0473357 0 -0.00986801 -0.141367 0 -0.00986801 -0.141367 0.01 0.0025 -1.99397e-16 0.01 -0.00300465 -0.0945112 0.01 0.00112267 -0.0473357 0.01 0.0025 -1.99397e-16 0 -0.00300465 -0.0945112 0 0.00112267 -0.0473357 0 -0.014792 -0.140499 0.01 -0.00986801 -0.141367 0.01 -0.0025 -1.98172e-16 0.01 -0.00797084 -0.0939308 0.01 -0.00386887 -0.047045 0.01 -0.014792 0.140499 0.01 -0.00386887 0.047045 0.01 -0.00797084 0.0939308 0.01 -0.00986801 0.141367 0.01 0.0025 -1.99397e-16 0.01 0.00112267 0.0473357 0.01 -0.00300465 0.0945112 0.01 -0.00300465 -0.0945112 0.01 0.00112267 -0.0473357 0.01 -0.014792 -0.140499 0 -0.014792 -0.140499 0.01 -0.0025 -1.98172e-16 0.01 -0.00797084 -0.0939308 0.01 -0.00386887 -0.047045 0.01 -0.0025 -1.98172e-16 0 -0.00797084 -0.0939308 0 -0.00386887 -0.047045 0 -0.0025 -1.98172e-16 0 -0.0025 -1.98172e-16 0.01 -0.014792 0.140499 0.01 -0.00386887 0.047045 0.01 -0.00797084 0.0939308 0.01 -0.014792 0.140499 0 -0.00386887 0.047045 0 -0.00797084 0.0939308 0 -0.014792 0.140499 0 -0.00986801 0.141367 0 -0.00986801 0.141367 0.01 -0.014792 0.140499 0.01 0.0025 -1.99397e-16 0 0.0025 -1.99397e-16 0.01 -0.00986801 0.141367 0.01 0.00112267 0.0473357 0.01 -0.00300465 0.0945112 0.01 -0.00986801 0.141367 0 0.00112267 0.0473357 0 -0.00300465 0.0945112 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="220"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0147951 -0.140533 0 -0.00987105 -0.141402 0 -0.00987105 -0.141402 0.01 -0.0147951 -0.140533 0.01 -0.0147951 -0.140533 0 -0.00987105 -0.141402 0 -0.0025 -1.98221e-16 0 -0.0079722 -0.093954 0 -0.00386921 -0.0470566 0 -0.0147951 0.140533 0 -0.00386921 0.0470566 0 -0.0079722 0.093954 0 -0.00987105 0.141402 0 0.0025 -1.99446e-16 0 0.00112233 0.0473473 0 -0.00300601 0.0945345 0 -0.00300601 -0.0945345 0 0.00112233 -0.0473473 0 -0.00987105 -0.141402 0 -0.00987105 -0.141402 0.01 0.0025 -1.99446e-16 0.01 -0.00300601 -0.0945345 0.01 0.00112233 -0.0473473 0.01 0.0025 -1.99446e-16 0 -0.00300601 -0.0945345 0 0.00112233 -0.0473473 0 -0.0147951 -0.140533 0.01 -0.00987105 -0.141402 0.01 -0.0025 -1.98221e-16 0.01 -0.0079722 -0.093954 0.01 -0.00386921 -0.0470566 0.01 -0.0147951 0.140533 0.01 -0.00386921 0.0470566 0.01 -0.0079722 0.093954 0.01 -0.00987105 0.141402 0.01 0.0025 -1.99446e-16 0.01 0.00112233 0.0473473 0.01 -0.00300601 0.0945345 0.01 -0.00300601 -0.0945345 0.01 0.00112233 -0.0473473 0.01 -0.0147951 -0.140533 0 -0.0147951 -0.140533 0.01 -0.0025 -1.98221e-16 0.01 -0.0079722 -0.093954 0.01 -0.00386921 -0.0470566 0.01 -0.0025 -1.98221e-16 0 -0.0079722 -0.093954 0 -0.00386921 -0.0470566 0 -0.0025 -1.98221e-16 0 -0.0025 -1.98221e-16 0.01 -0.0147951 0.140533 0.01 -0.00386921 0.0470566 0.01 -0.0079722 0.093954 0.01 -0.0147951 0.140533 0 -0.00386921 0.0470566 0 -0.0079722 0.093954 0 -0.0147951 0.140533 0 -0.00987105 0.141402 0 -0.00987105 0.141402 0.01 -0.0147951 0.140533 0.01 0.0025 -1.99446e-16 0 0.0025 -1.99446e-16 0.01 -0.00987105 0.141402 0.01 0.00112233 0.0473473 0.01 -0.00300601 0.0945345 0.01 -0.00987105 0.141402 0 0.00112233 0.0473473 0 -0.00300601 0.0945345 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="221"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0149212 -0.141975 0 -0.00999714 -0.142843 0 -0.00999714 -0.142843 0.01 -0.0149212 -0.141975 0.01 -0.0149212 -0.141975 0 -0.00999714 -0.142843 0 -0.0025 -2.00254e-16 0 -0.00802832 -0.0949176 0 -0.00388325 -0.0475392 0 -0.0149212 0.141975 0 -0.00388325 0.0475392 0 -0.00802832 0.0949176 0 -0.00999714 0.142843 0 0.0025 -2.01479e-16 0 0.00110829 0.0478299 0 -0.00306213 0.095498 0 -0.00306213 -0.095498 0 0.00110829 -0.0478299 0 -0.00999714 -0.142843 0 -0.00999714 -0.142843 0.01 0.0025 -2.01479e-16 0.01 -0.00306213 -0.095498 0.01 0.00110829 -0.0478299 0.01 0.0025 -2.01479e-16 0 -0.00306213 -0.095498 0 0.00110829 -0.0478299 0 -0.0149212 -0.141975 0.01 -0.00999714 -0.142843 0.01 -0.0025 -2.00254e-16 0.01 -0.00802832 -0.0949176 0.01 -0.00388325 -0.0475392 0.01 -0.0149212 0.141975 0.01 -0.00388325 0.0475392 0.01 -0.00802832 0.0949176 0.01 -0.00999714 0.142843 0.01 0.0025 -2.01479e-16 0.01 0.00110829 0.0478299 0.01 -0.00306213 0.095498 0.01 -0.00306213 -0.095498 0.01 0.00110829 -0.0478299 0.01 -0.0149212 -0.141975 0 -0.0149212 -0.141975 0.01 -0.0025 -2.00254e-16 0.01 -0.00802832 -0.0949176 0.01 -0.00388325 -0.0475392 0.01 -0.0025 -2.00254e-16 0 -0.00802832 -0.0949176 0 -0.00388325 -0.0475392 0 -0.0025 -2.00254e-16 0 -0.0025 -2.00254e-16 0.01 -0.0149212 0.141975 0.01 -0.00388325 0.0475392 0.01 -0.00802832 0.0949176 0.01 -0.0149212 0.141975 0 -0.00388325 0.0475392 0 -0.00802832 0.0949176 0 -0.0149212 0.141975 0 -0.00999714 0.142843 0 -0.00999714 0.142843 0.01 -0.0149212 0.141975 0.01 0.0025 -2.01479e-16 0 0.0025 -2.01479e-16 0.01 -0.00999714 0.142843 0.01 0.00110829 0.0478299 0.01 -0.00306213 0.095498 0.01 -0.00999714 0.142843 0 0.00110829 0.0478299 0 -0.00306213 0.095498 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="222"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0149227 -0.141992 0 -0.00999866 -0.14286 0 -0.00999866 -0.14286 0.01 -0.0149227 -0.141992 0.01 -0.0149227 -0.141992 0 -0.00999866 -0.14286 0 -0.0025 -2.00279e-16 0 -0.00802899 -0.0949292 0 -0.00388342 -0.047545 0 -0.0149227 0.141992 0 -0.00388342 0.047545 0 -0.00802899 0.0949292 0 -0.00999866 0.14286 0 0.0025 -2.01503e-16 0 0.00110812 0.0478358 0 -0.0030628 0.0955096 0 -0.0030628 -0.0955096 0 0.00110812 -0.0478358 0 -0.00999866 -0.14286 0 -0.00999866 -0.14286 0.01 0.0025 -2.01503e-16 0.01 -0.0030628 -0.0955096 0.01 0.00110812 -0.0478358 0.01 0.0025 -2.01503e-16 0 -0.0030628 -0.0955096 0 0.00110812 -0.0478358 0 -0.0149227 -0.141992 0.01 -0.00999866 -0.14286 0.01 -0.0025 -2.00279e-16 0.01 -0.00802899 -0.0949292 0.01 -0.00388342 -0.047545 0.01 -0.0149227 0.141992 0.01 -0.00388342 0.047545 0.01 -0.00802899 0.0949292 0.01 -0.00999866 0.14286 0.01 0.0025 -2.01503e-16 0.01 0.00110812 0.0478358 0.01 -0.0030628 0.0955096 0.01 -0.0030628 -0.0955096 0.01 0.00110812 -0.0478358 0.01 -0.0149227 -0.141992 0 -0.0149227 -0.141992 0.01 -0.0025 -2.00279e-16 0.01 -0.00802899 -0.0949292 0.01 -0.00388342 -0.047545 0.01 -0.0025 -2.00279e-16 0 -0.00802899 -0.0949292 0 -0.00388342 -0.047545 0 -0.0025 -2.00279e-16 0 -0.0025 -2.00279e-16 0.01 -0.0149227 0.141992 0.01 -0.00388342 0.047545 0.01 -0.00802899 0.0949292 0.01 -0.0149227 0.141992 0 -0.00388342 0.047545 0 -0.00802899 0.0949292 0 -0.0149227 0.141992 0 -0.00999866 0.14286 0 -0.00999866 0.14286 0.01 -0.0149227 0.141992 0.01 0.0025 -2.01503e-16 0 0.0025 -2.01503e-16 0.01 -0.00999866 0.14286 0.01 0.00110812 0.0478358 0.01 -0.0030628 0.0955096 0.01 -0.00999866 0.14286 0 0.00110812 0.0478358 0 -0.0030628 0.0955096 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="233"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0173155 -0.169342 0 -0.0123914 -0.17021 0 -0.0123914 -0.17021 0.01 -0.0173155 -0.169342 0.01 -0.0173155 -0.169342 0 -0.0123914 -0.17021 0 -0.0025 -2.38855e-16 0 -0.00909395 -0.113214 0 -0.00414988 -0.0567028 0 -0.0173155 0.169342 0 -0.00414988 0.0567028 0 -0.00909395 0.113214 0 -0.0123914 0.17021 0 0.0025 -2.4008e-16 0 0.000841657 0.0569936 0 -0.00412776 0.113794 0 -0.00412776 -0.113794 0 0.000841657 -0.0569936 0 -0.0123914 -0.17021 0 -0.0123914 -0.17021 0.01 0.0025 -2.4008e-16 0.01 -0.00412776 -0.113794 0.01 0.000841657 -0.0569936 0.01 0.0025 -2.4008e-16 0 -0.00412776 -0.113794 0 0.000841657 -0.0569936 0 -0.0173155 -0.169342 0.01 -0.0123914 -0.17021 0.01 -0.0025 -2.38855e-16 0.01 -0.00909395 -0.113214 0.01 -0.00414988 -0.0567028 0.01 -0.0173155 0.169342 0.01 -0.00414988 0.0567028 0.01 -0.00909395 0.113214 0.01 -0.0123914 0.17021 0.01 0.0025 -2.4008e-16 0.01 0.000841657 0.0569936 0.01 -0.00412776 0.113794 0.01 -0.00412776 -0.113794 0.01 0.000841657 -0.0569936 0.01 -0.0173155 -0.169342 0 -0.0173155 -0.169342 0.01 -0.0025 -2.38855e-16 0.01 -0.00909395 -0.113214 0.01 -0.00414988 -0.0567028 0.01 -0.0025 -2.38855e-16 0 -0.00909395 -0.113214 0 -0.00414988 -0.0567028 0 -0.0025 -2.38855e-16 0 -0.0025 -2.38855e-16 0.01 -0.0173155 0.169342 0.01 -0.00414988 0.0567028 0.01 -0.00909395 0.113214 0.01 -0.0173155 0.169342 0 -0.00414988 0.0567028 0 -0.00909395 0.113214 0 -0.0173155 0.169342 0 -0.0123914 0.17021 0 -0.0123914 0.17021 0.01 -0.0173155 0.169342 0.01 0.0025 -2.4008e-16 0 0.0025 -2.4008e-16 0.01 -0.0123914 0.17021 0.01 0.000841657 0.0569936 0.01 -0.00412776 0.113794 0.01 -0.0123914 0.17021 0 0.000841657 0.0569936 0 -0.00412776 0.113794 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="234"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0173094 -0.169272 0 -0.0123854 -0.17014 0 -0.0123854 -0.17014 0.01 -0.0173094 -0.169272 0.01 -0.0173094 -0.169272 0 -0.0123854 -0.17014 0 -0.0025 -2.38757e-16 0 -0.00909125 -0.113167 0 -0.00414921 -0.0566796 0 -0.0173094 0.169272 0 -0.00414921 0.0566796 0 -0.00909125 0.113167 0 -0.0123854 0.17014 0 0.0025 -2.39982e-16 0 0.000842333 0.0569703 0 -0.00412506 0.113748 0 -0.00412506 -0.113748 0 0.000842333 -0.0569703 0 -0.0123854 -0.17014 0 -0.0123854 -0.17014 0.01 0.0025 -2.39982e-16 0.01 -0.00412506 -0.113748 0.01 0.000842333 -0.0569703 0.01 0.0025 -2.39982e-16 0 -0.00412506 -0.113748 0 0.000842333 -0.0569703 0 -0.0173094 -0.169272 0.01 -0.0123854 -0.17014 0.01 -0.0025 -2.38757e-16 0.01 -0.00909125 -0.113167 0.01 -0.00414921 -0.0566796 0.01 -0.0173094 0.169272 0.01 -0.00414921 0.0566796 0.01 -0.00909125 0.113167 0.01 -0.0123854 0.17014 0.01 0.0025 -2.39982e-16 0.01 0.000842333 0.0569703 0.01 -0.00412506 0.113748 0.01 -0.00412506 -0.113748 0.01 0.000842333 -0.0569703 0.01 -0.0173094 -0.169272 0 -0.0173094 -0.169272 0.01 -0.0025 -2.38757e-16 0.01 -0.00909125 -0.113167 0.01 -0.00414921 -0.0566796 0.01 -0.0025 -2.38757e-16 0 -0.00909125 -0.113167 0 -0.00414921 -0.0566796 0 -0.0025 -2.38757e-16 0 -0.0025 -2.38757e-16 0.01 -0.0173094 0.169272 0.01 -0.00414921 0.0566796 0.01 -0.00909125 0.113167 0.01 -0.0173094 0.169272 0 -0.00414921 0.0566796 0 -0.00909125 0.113167 0 -0.0173094 0.169272 0 -0.0123854 0.17014 0 -0.0123854 0.17014 0.01 -0.0173094 0.169272 0.01 0.0025 -2.39982e-16 0 0.0025 -2.39982e-16 0.01 -0.0123854 0.17014 0.01 0.000842333 0.0569703 0.01 -0.00412506 0.113748 0.01 -0.0123854 0.17014 0 0.000842333 0.0569703 0 -0.00412506 0.113748 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="243"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0179323 -0.176392 0 -0.0130082 -0.17726 0 -0.0130082 -0.17726 0.01 -0.0179323 -0.176392 0.01 -0.0179323 -0.176392 0 -0.0130082 -0.17726 0 -0.0025 -2.48799e-16 0 -0.00936848 -0.117927 0 -0.00421857 -0.0590635 0 -0.0179323 0.176392 0 -0.00421857 0.0590635 0 -0.00936848 0.117927 0 -0.0130082 0.17726 0 0.0025 -2.50024e-16 0 0.000772968 0.0593542 0 -0.00440228 0.118508 0 -0.00440228 -0.118508 0 0.000772968 -0.0593542 0 -0.0130082 -0.17726 0 -0.0130082 -0.17726 0.01 0.0025 -2.50024e-16 0.01 -0.00440228 -0.118508 0.01 0.000772968 -0.0593542 0.01 0.0025 -2.50024e-16 0 -0.00440228 -0.118508 0 0.000772968 -0.0593542 0 -0.0179323 -0.176392 0.01 -0.0130082 -0.17726 0.01 -0.0025 -2.48799e-16 0.01 -0.00936848 -0.117927 0.01 -0.00421857 -0.0590635 0.01 -0.0179323 0.176392 0.01 -0.00421857 0.0590635 0.01 -0.00936848 0.117927 0.01 -0.0130082 0.17726 0.01 0.0025 -2.50024e-16 0.01 0.000772968 0.0593542 0.01 -0.00440228 0.118508 0.01 -0.00440228 -0.118508 0.01 0.000772968 -0.0593542 0.01 -0.0179323 -0.176392 0 -0.0179323 -0.176392 0.01 -0.0025 -2.48799e-16 0.01 -0.00936848 -0.117927 0.01 -0.00421857 -0.0590635 0.01 -0.0025 -2.48799e-16 0 -0.00936848 -0.117927 0 -0.00421857 -0.0590635 0 -0.0025 -2.48799e-16 0 -0.0025 -2.48799e-16 0.01 -0.0179323 0.176392 0.01 -0.00421857 0.0590635 0.01 -0.00936848 0.117927 0.01 -0.0179323 0.176392 0 -0.00421857 0.0590635 0 -0.00936848 0.117927 0 -0.0179323 0.176392 0 -0.0130082 0.17726 0 -0.0130082 0.17726 0.01 -0.0179323 0.176392 0.01 0.0025 -2.50024e-16 0 0.0025 -2.50024e-16 0.01 -0.0130082 0.17726 0.01 0.000772968 0.0593542 0.01 -0.00440228 0.118508 0.01 -0.0130082 0.17726 0 0.000772968 0.0593542 0 -0.00440228 0.118508 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="244"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0179247 -0.176305 0 -0.0130006 -0.177173 0 -0.0130006 -0.177173 0.01 -0.0179247 -0.176305 0.01 -0.0179247 -0.176305 0 -0.0130006 -0.177173 0 -0.0025 -2.48677e-16 0 -0.0093651 -0.117869 0 -0.00421773 -0.0590344 0 -0.0179247 0.176305 0 -0.00421773 0.0590344 0 -0.0093651 0.117869 0 -0.0130006 0.177173 0 0.0025 -2.49901e-16 0 0.000773814 0.0593252 0 -0.0043989 0.11845 0 -0.0043989 -0.11845 0 0.000773814 -0.0593252 0 -0.0130006 -0.177173 0 -0.0130006 -0.177173 0.01 0.0025 -2.49901e-16 0.01 -0.0043989 -0.11845 0.01 0.000773814 -0.0593252 0.01 0.0025 -2.49901e-16 0 -0.0043989 -0.11845 0 0.000773814 -0.0593252 0 -0.0179247 -0.176305 0.01 -0.0130006 -0.177173 0.01 -0.0025 -2.48677e-16 0.01 -0.0093651 -0.117869 0.01 -0.00421773 -0.0590344 0.01 -0.0179247 0.176305 0.01 -0.00421773 0.0590344 0.01 -0.0093651 0.117869 0.01 -0.0130006 0.177173 0.01 0.0025 -2.49901e-16 0.01 0.000773814 0.0593252 0.01 -0.0043989 0.11845 0.01 -0.0043989 -0.11845 0.01 0.000773814 -0.0593252 0.01 -0.0179247 -0.176305 0 -0.0179247 -0.176305 0.01 -0.0025 -2.48677e-16 0.01 -0.0093651 -0.117869 0.01 -0.00421773 -0.0590344 0.01 -0.0025 -2.48677e-16 0 -0.0093651 -0.117869 0 -0.00421773 -0.0590344 0 -0.0025 -2.48677e-16 0 -0.0025 -2.48677e-16 0.01 -0.0179247 0.176305 0.01 -0.00421773 0.0590344 0.01 -0.0093651 0.117869 0.01 -0.0179247 0.176305 0 -0.00421773 0.0590344 0 -0.0093651 0.117869 0 -0.0179247 0.176305 0 -0.0130006 0.177173 0 -0.0130006 0.177173 0.01 -0.0179247 0.176305 0.01 0.0025 -2.49901e-16 0 0.0025 -2.49901e-16 0.01 -0.0130006 0.177173 0.01 0.000773814 0.0593252 0.01 -0.0043989 0.11845 0.01 -0.0130006 0.177173 0 0.000773814 0.0593252 0 -0.0043989 0.11845 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="245"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0180553 -0.177798 0 -0.0131313 -0.178667 0 -0.0131313 -0.178667 0.01 -0.0180553 -0.177798 0.01 -0.0180553 -0.177798 0 -0.0131313 -0.178667 0 -0.0025 -2.50783e-16 0 -0.00942325 -0.118868 0 -0.00423228 -0.0595345 0 -0.0180553 0.177798 0 -0.00423228 0.0595345 0 -0.00942325 0.118868 0 -0.0131313 0.178667 0 0.0025 -2.52008e-16 0 0.000759264 0.0598252 0 -0.00445705 0.119448 0 -0.00445705 -0.119448 0 0.000759264 -0.0598252 0 -0.0131313 -0.178667 0 -0.0131313 -0.178667 0.01 0.0025 -2.52008e-16 0.01 -0.00445705 -0.119448 0.01 0.000759264 -0.0598252 0.01 0.0025 -2.52008e-16 0 -0.00445705 -0.119448 0 0.000759264 -0.0598252 0 -0.0180553 -0.177798 0.01 -0.0131313 -0.178667 0.01 -0.0025 -2.50783e-16 0.01 -0.00942325 -0.118868 0.01 -0.00423228 -0.0595345 0.01 -0.0180553 0.177798 0.01 -0.00423228 0.0595345 0.01 -0.00942325 0.118868 0.01 -0.0131313 0.178667 0.01 0.0025 -2.52008e-16 0.01 0.000759264 0.0598252 0.01 -0.00445705 0.119448 0.01 -0.00445705 -0.119448 0.01 0.000759264 -0.0598252 0.01 -0.0180553 -0.177798 0 -0.0180553 -0.177798 0.01 -0.0025 -2.50783e-16 0.01 -0.00942325 -0.118868 0.01 -0.00423228 -0.0595345 0.01 -0.0025 -2.50783e-16 0 -0.00942325 -0.118868 0 -0.00423228 -0.0595345 0 -0.0025 -2.50783e-16 0 -0.0025 -2.50783e-16 0.01 -0.0180553 0.177798 0.01 -0.00423228 0.0595345 0.01 -0.00942325 0.118868 0.01 -0.0180553 0.177798 0 -0.00423228 0.0595345 0 -0.00942325 0.118868 0 -0.0180553 0.177798 0 -0.0131313 0.178667 0 -0.0131313 0.178667 0.01 -0.0180553 0.177798 0.01 0.0025 -2.52008e-16 0 0.0025 -2.52008e-16 0.01 -0.0131313 0.178667 0.01 0.000759264 0.0598252 0.01 -0.00445705 0.119448 0.01 -0.0131313 0.178667 0 0.000759264 0.0598252 0 -0.00445705 0.119448 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="246"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0180477 -0.177712 0 -0.0131237 -0.17858 0 -0.0131237 -0.17858 0.01 -0.0180477 -0.177712 0.01 -0.0180477 -0.177712 0 -0.0131237 -0.17858 0 -0.0025 -2.50661e-16 0 -0.00941986 -0.118809 0 -0.00423143 -0.0595054 0 -0.0180477 0.177712 0 -0.00423143 0.0595054 0 -0.00941986 0.118809 0 -0.0131237 0.17858 0 0.0025 -2.51885e-16 0 0.00076011 0.0597961 0 -0.00445367 0.11939 0 -0.00445367 -0.11939 0 0.00076011 -0.0597961 0 -0.0131237 -0.17858 0 -0.0131237 -0.17858 0.01 0.0025 -2.51885e-16 0.01 -0.00445367 -0.11939 0.01 0.00076011 -0.0597961 0.01 0.0025 -2.51885e-16 0 -0.00445367 -0.11939 0 0.00076011 -0.0597961 0 -0.0180477 -0.177712 0.01 -0.0131237 -0.17858 0.01 -0.0025 -2.50661e-16 0.01 -0.00941986 -0.118809 0.01 -0.00423143 -0.0595054 0.01 -0.0180477 0.177712 0.01 -0.00423143 0.0595054 0.01 -0.00941986 0.118809 0.01 -0.0131237 0.17858 0.01 0.0025 -2.51885e-16 0.01 0.00076011 0.0597961 0.01 -0.00445367 0.11939 0.01 -0.00445367 -0.11939 0.01 0.00076011 -0.0597961 0.01 -0.0180477 -0.177712 0 -0.0180477 -0.177712 0.01 -0.0025 -2.50661e-16 0.01 -0.00941986 -0.118809 0.01 -0.00423143 -0.0595054 0.01 -0.0025 -2.50661e-16 0 -0.00941986 -0.118809 0 -0.00423143 -0.0595054 0 -0.0025 -2.50661e-16 0 -0.0025 -2.50661e-16 0.01 -0.0180477 0.177712 0.01 -0.00423143 0.0595054 0.01 -0.00941986 0.118809 0.01 -0.0180477 0.177712 0 -0.00423143 0.0595054 0 -0.00941986 0.118809 0 -0.0180477 0.177712 0 -0.0131237 0.17858 0 -0.0131237 0.17858 0.01 -0.0180477 0.177712 0.01 0.0025 -2.51885e-16 0 0.0025 -2.51885e-16 0.01 -0.0131237 0.17858 0.01 0.00076011 0.0597961 0.01 -0.00445367 0.11939 0.01 -0.0131237 0.17858 0 0.00076011 0.0597961 0 -0.00445367 0.11939 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="247"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0181784 -0.179205 0 -0.0132544 -0.180073 0 -0.0132544 -0.180073 0.01 -0.0181784 -0.179205 0.01 -0.0181784 -0.179205 0 -0.0132544 -0.180073 0 -0.0025 -2.52767e-16 0 -0.00947801 -0.119808 0 -0.00424598 -0.0600055 0 -0.0181784 0.179205 0 -0.00424598 0.0600055 0 -0.00947801 0.119808 0 -0.0132544 0.180073 0 0.0025 -2.53992e-16 0 0.00074556 0.0602962 0 -0.00451182 0.120388 0 -0.00451182 -0.120388 0 0.00074556 -0.0602962 0 -0.0132544 -0.180073 0 -0.0132544 -0.180073 0.01 0.0025 -2.53992e-16 0.01 -0.00451182 -0.120388 0.01 0.00074556 -0.0602962 0.01 0.0025 -2.53992e-16 0 -0.00451182 -0.120388 0 0.00074556 -0.0602962 0 -0.0181784 -0.179205 0.01 -0.0132544 -0.180073 0.01 -0.0025 -2.52767e-16 0.01 -0.00947801 -0.119808 0.01 -0.00424598 -0.0600055 0.01 -0.0181784 0.179205 0.01 -0.00424598 0.0600055 0.01 -0.00947801 0.119808 0.01 -0.0132544 0.180073 0.01 0.0025 -2.53992e-16 0.01 0.00074556 0.0602962 0.01 -0.00451182 0.120388 0.01 -0.00451182 -0.120388 0.01 0.00074556 -0.0602962 0.01 -0.0181784 -0.179205 0 -0.0181784 -0.179205 0.01 -0.0025 -2.52767e-16 0.01 -0.00947801 -0.119808 0.01 -0.00424598 -0.0600055 0.01 -0.0025 -2.52767e-16 0 -0.00947801 -0.119808 0 -0.00424598 -0.0600055 0 -0.0025 -2.52767e-16 0 -0.0025 -2.52767e-16 0.01 -0.0181784 0.179205 0.01 -0.00424598 0.0600055 0.01 -0.00947801 0.119808 0.01 -0.0181784 0.179205 0 -0.00424598 0.0600055 0 -0.00947801 0.119808 0 -0.0181784 0.179205 0 -0.0132544 0.180073 0 -0.0132544 0.180073 0.01 -0.0181784 0.179205 0.01 0.0025 -2.53992e-16 0 0.0025 -2.53992e-16 0.01 -0.0132544 0.180073 0.01 0.00074556 0.0602962 0.01 -0.00451182 0.120388 0.01 -0.0132544 0.180073 0 0.00074556 0.0602962 0 -0.00451182 0.120388 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="248"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0181708 -0.179118 0 -0.0132468 -0.179986 0 -0.0132468 -0.179986 0.01 -0.0181708 -0.179118 0.01 -0.0181708 -0.179118 0 -0.0132468 -0.179986 0 -0.0025 -2.52645e-16 0 -0.00947463 -0.11975 0 -0.00424513 -0.0599764 0 -0.0181708 0.179118 0 -0.00424513 0.0599764 0 -0.00947463 0.11975 0 -0.0132468 0.179986 0 0.0025 -2.53869e-16 0 0.000746406 0.0602671 0 -0.00450844 0.12033 0 -0.00450844 -0.12033 0 0.000746406 -0.0602671 0 -0.0132468 -0.179986 0 -0.0132468 -0.179986 0.01 0.0025 -2.53869e-16 0.01 -0.00450844 -0.12033 0.01 0.000746406 -0.0602671 0.01 0.0025 -2.53869e-16 0 -0.00450844 -0.12033 0 0.000746406 -0.0602671 0 -0.0181708 -0.179118 0.01 -0.0132468 -0.179986 0.01 -0.0025 -2.52645e-16 0.01 -0.00947463 -0.11975 0.01 -0.00424513 -0.0599764 0.01 -0.0181708 0.179118 0.01 -0.00424513 0.0599764 0.01 -0.00947463 0.11975 0.01 -0.0132468 0.179986 0.01 0.0025 -2.53869e-16 0.01 0.000746406 0.0602671 0.01 -0.00450844 0.12033 0.01 -0.00450844 -0.12033 0.01 0.000746406 -0.0602671 0.01 -0.0181708 -0.179118 0 -0.0181708 -0.179118 0.01 -0.0025 -2.52645e-16 0.01 -0.00947463 -0.11975 0.01 -0.00424513 -0.0599764 0.01 -0.0025 -2.52645e-16 0 -0.00947463 -0.11975 0 -0.00424513 -0.0599764 0 -0.0025 -2.52645e-16 0 -0.0025 -2.52645e-16 0.01 -0.0181708 0.179118 0.01 -0.00424513 0.0599764 0.01 -0.00947463 0.11975 0.01 -0.0181708 0.179118 0 -0.00424513 0.0599764 0 -0.00947463 0.11975 0 -0.0181708 0.179118 0 -0.0132468 0.179986 0 -0.0132468 0.179986 0.01 -0.0181708 0.179118 0.01 0.0025 -2.53869e-16 0 0.0025 -2.53869e-16 0.01 -0.0132468 0.179986 0.01 0.000746406 0.0602671 0.01 -0.00450844 0.12033 0.01 -0.0132468 0.179986 0 0.000746406 0.0602671 0 -0.00450844 0.12033 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="249"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0183015 -0.180611 0 -0.0133774 -0.18148 0 -0.0133774 -0.18148 0.01 -0.0183015 -0.180611 0.01 -0.0183015 -0.180611 0 -0.0133774 -0.18148 0 -0.0025 -2.54751e-16 0 -0.00953278 -0.120748 0 -0.00425968 -0.0604764 0 -0.0183015 0.180611 0 -0.00425968 0.0604764 0 -0.00953278 0.120748 0 -0.0133774 0.18148 0 0.0025 -2.55976e-16 0 0.000731856 0.0607672 0 -0.00456659 0.121329 0 -0.00456659 -0.121329 0 0.000731856 -0.0607672 0 -0.0133774 -0.18148 0 -0.0133774 -0.18148 0.01 0.0025 -2.55976e-16 0.01 -0.00456659 -0.121329 0.01 0.000731856 -0.0607672 0.01 0.0025 -2.55976e-16 0 -0.00456659 -0.121329 0 0.000731856 -0.0607672 0 -0.0183015 -0.180611 0.01 -0.0133774 -0.18148 0.01 -0.0025 -2.54751e-16 0.01 -0.00953278 -0.120748 0.01 -0.00425968 -0.0604764 0.01 -0.0183015 0.180611 0.01 -0.00425968 0.0604764 0.01 -0.00953278 0.120748 0.01 -0.0133774 0.18148 0.01 0.0025 -2.55976e-16 0.01 0.000731856 0.0607672 0.01 -0.00456659 0.121329 0.01 -0.00456659 -0.121329 0.01 0.000731856 -0.0607672 0.01 -0.0183015 -0.180611 0 -0.0183015 -0.180611 0.01 -0.0025 -2.54751e-16 0.01 -0.00953278 -0.120748 0.01 -0.00425968 -0.0604764 0.01 -0.0025 -2.54751e-16 0 -0.00953278 -0.120748 0 -0.00425968 -0.0604764 0 -0.0025 -2.54751e-16 0 -0.0025 -2.54751e-16 0.01 -0.0183015 0.180611 0.01 -0.00425968 0.0604764 0.01 -0.00953278 0.120748 0.01 -0.0183015 0.180611 0 -0.00425968 0.0604764 0 -0.00953278 0.120748 0 -0.0183015 0.180611 0 -0.0133774 0.18148 0 -0.0133774 0.18148 0.01 -0.0183015 0.180611 0.01 0.0025 -2.55976e-16 0 0.0025 -2.55976e-16 0.01 -0.0133774 0.18148 0.01 0.000731856 0.0607672 0.01 -0.00456659 0.121329 0.01 -0.0133774 0.18148 0 0.000731856 0.0607672 0 -0.00456659 0.121329 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="250"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0182954 -0.180542 0 -0.0133713 -0.18141 0 -0.0133713 -0.18141 0.01 -0.0182954 -0.180542 0.01 -0.0182954 -0.180542 0 -0.0133713 -0.18141 0 -0.0025 -2.54653e-16 0 -0.00953008 -0.120702 0 -0.00425901 -0.0604532 0 -0.0182954 0.180542 0 -0.00425901 0.0604532 0 -0.00953008 0.120702 0 -0.0133713 0.18141 0 0.0025 -2.55878e-16 0 0.000732533 0.0607439 0 -0.00456389 0.121282 0 -0.00456389 -0.121282 0 0.000732533 -0.0607439 0 -0.0133713 -0.18141 0 -0.0133713 -0.18141 0.01 0.0025 -2.55878e-16 0.01 -0.00456389 -0.121282 0.01 0.000732533 -0.0607439 0.01 0.0025 -2.55878e-16 0 -0.00456389 -0.121282 0 0.000732533 -0.0607439 0 -0.0182954 -0.180542 0.01 -0.0133713 -0.18141 0.01 -0.0025 -2.54653e-16 0.01 -0.00953008 -0.120702 0.01 -0.00425901 -0.0604532 0.01 -0.0182954 0.180542 0.01 -0.00425901 0.0604532 0.01 -0.00953008 0.120702 0.01 -0.0133713 0.18141 0.01 0.0025 -2.55878e-16 0.01 0.000732533 0.0607439 0.01 -0.00456389 0.121282 0.01 -0.00456389 -0.121282 0.01 0.000732533 -0.0607439 0.01 -0.0182954 -0.180542 0 -0.0182954 -0.180542 0.01 -0.0025 -2.54653e-16 0.01 -0.00953008 -0.120702 0.01 -0.00425901 -0.0604532 0.01 -0.0025 -2.54653e-16 0 -0.00953008 -0.120702 0 -0.00425901 -0.0604532 0 -0.0025 -2.54653e-16 0 -0.0025 -2.54653e-16 0.01 -0.0182954 0.180542 0.01 -0.00425901 0.0604532 0.01 -0.00953008 0.120702 0.01 -0.0182954 0.180542 0 -0.00425901 0.0604532 0 -0.00953008 0.120702 0 -0.0182954 0.180542 0 -0.0133713 0.18141 0 -0.0133713 0.18141 0.01 -0.0182954 0.180542 0.01 0.0025 -2.55878e-16 0 0.0025 -2.55878e-16 0.01 -0.0133713 0.18141 0.01 0.000732533 0.0607439 0.01 -0.00456389 0.121282 0.01 -0.0133713 0.18141 0 0.000732533 0.0607439 0 -0.00456389 0.121282 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="251"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0184245 -0.182018 0 -0.0135005 -0.182886 0 -0.0135005 -0.182886 0.01 -0.0184245 -0.182018 0.01 -0.0184245 -0.182018 0 -0.0135005 -0.182886 0 -0.0025 -2.56735e-16 0 -0.00958755 -0.121689 0 -0.00427339 -0.0609474 0 -0.0184245 0.182018 0 -0.00427339 0.0609474 0 -0.00958755 0.121689 0 -0.0135005 0.182886 0 0.0025 -2.5796e-16 0 0.000718152 0.0612381 0 -0.00462136 0.122269 0 -0.00462136 -0.122269 0 0.000718152 -0.0612381 0 -0.0135005 -0.182886 0 -0.0135005 -0.182886 0.01 0.0025 -2.5796e-16 0.01 -0.00462136 -0.122269 0.01 0.000718152 -0.0612381 0.01 0.0025 -2.5796e-16 0 -0.00462136 -0.122269 0 0.000718152 -0.0612381 0 -0.0184245 -0.182018 0.01 -0.0135005 -0.182886 0.01 -0.0025 -2.56735e-16 0.01 -0.00958755 -0.121689 0.01 -0.00427339 -0.0609474 0.01 -0.0184245 0.182018 0.01 -0.00427339 0.0609474 0.01 -0.00958755 0.121689 0.01 -0.0135005 0.182886 0.01 0.0025 -2.5796e-16 0.01 0.000718152 0.0612381 0.01 -0.00462136 0.122269 0.01 -0.00462136 -0.122269 0.01 0.000718152 -0.0612381 0.01 -0.0184245 -0.182018 0 -0.0184245 -0.182018 0.01 -0.0025 -2.56735e-16 0.01 -0.00958755 -0.121689 0.01 -0.00427339 -0.0609474 0.01 -0.0025 -2.56735e-16 0 -0.00958755 -0.121689 0 -0.00427339 -0.0609474 0 -0.0025 -2.56735e-16 0 -0.0025 -2.56735e-16 0.01 -0.0184245 0.182018 0.01 -0.00427339 0.0609474 0.01 -0.00958755 0.121689 0.01 -0.0184245 0.182018 0 -0.00427339 0.0609474 0 -0.00958755 0.121689 0 -0.0184245 0.182018 0 -0.0135005 0.182886 0 -0.0135005 0.182886 0.01 -0.0184245 0.182018 0.01 0.0025 -2.5796e-16 0 0.0025 -2.5796e-16 0.01 -0.0135005 0.182886 0.01 0.000718152 0.0612381 0.01 -0.00462136 0.122269 0.01 -0.0135005 0.182886 0 0.000718152 0.0612381 0 -0.00462136 0.122269 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="252"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0184184 -0.181949 0 -0.0134944 -0.182817 0 -0.0134944 -0.182817 0.01 -0.0184184 -0.181949 0.01 -0.0184184 -0.181949 0 -0.0134944 -0.182817 0 -0.0025 -2.56637e-16 0 -0.00958485 -0.121642 0 -0.00427271 -0.0609242 0 -0.0184184 0.181949 0 -0.00427271 0.0609242 0 -0.00958485 0.121642 0 -0.0134944 0.182817 0 0.0025 -2.57862e-16 0 0.000718829 0.0612149 0 -0.00461866 0.122223 0 -0.00461866 -0.122223 0 0.000718829 -0.0612149 0 -0.0134944 -0.182817 0 -0.0134944 -0.182817 0.01 0.0025 -2.57862e-16 0.01 -0.00461866 -0.122223 0.01 0.000718829 -0.0612149 0.01 0.0025 -2.57862e-16 0 -0.00461866 -0.122223 0 0.000718829 -0.0612149 0 -0.0184184 -0.181949 0.01 -0.0134944 -0.182817 0.01 -0.0025 -2.56637e-16 0.01 -0.00958485 -0.121642 0.01 -0.00427271 -0.0609242 0.01 -0.0184184 0.181949 0.01 -0.00427271 0.0609242 0.01 -0.00958485 0.121642 0.01 -0.0134944 0.182817 0.01 0.0025 -2.57862e-16 0.01 0.000718829 0.0612149 0.01 -0.00461866 0.122223 0.01 -0.00461866 -0.122223 0.01 0.000718829 -0.0612149 0.01 -0.0184184 -0.181949 0 -0.0184184 -0.181949 0.01 -0.0025 -2.56637e-16 0.01 -0.00958485 -0.121642 0.01 -0.00427271 -0.0609242 0.01 -0.0025 -2.56637e-16 0 -0.00958485 -0.121642 0 -0.00427271 -0.0609242 0 -0.0025 -2.56637e-16 0 -0.0025 -2.56637e-16 0.01 -0.0184184 0.181949 0.01 -0.00427271 0.0609242 0.01 -0.00958485 0.121642 0.01 -0.0184184 0.181949 0 -0.00427271 0.0609242 0 -0.00958485 0.121642 0 -0.0184184 0.181949 0 -0.0134944 0.182817 0 -0.0134944 0.182817 0.01 -0.0184184 0.181949 0.01 0.0025 -2.57862e-16 0 0.0025 -2.57862e-16 0.01 -0.0134944 0.182817 0.01 0.000718829 0.0612149 0.01 -0.00461866 0.122223 0.01 -0.0134944 0.182817 0 0.000718829 0.0612149 0 -0.00461866 0.122223 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="235"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0174385 -0.170748 0 -0.0125145 -0.171616 0 -0.0125145 -0.171616 0.01 -0.0174385 -0.170748 0.01 -0.0174385 -0.170748 0 -0.0125145 -0.171616 0 -0.0025 -2.40839e-16 0 -0.00914872 -0.114154 0 -0.00416359 -0.0571738 0 -0.0174385 0.170748 0 -0.00416359 0.0571738 0 -0.00914872 0.114154 0 -0.0125145 0.171616 0 0.0025 -2.42064e-16 0 0.000827953 0.0574645 0 -0.00418253 0.114735 0 -0.00418253 -0.114735 0 0.000827953 -0.0574645 0 -0.0125145 -0.171616 0 -0.0125145 -0.171616 0.01 0.0025 -2.42064e-16 0.01 -0.00418253 -0.114735 0.01 0.000827953 -0.0574645 0.01 0.0025 -2.42064e-16 0 -0.00418253 -0.114735 0 0.000827953 -0.0574645 0 -0.0174385 -0.170748 0.01 -0.0125145 -0.171616 0.01 -0.0025 -2.40839e-16 0.01 -0.00914872 -0.114154 0.01 -0.00416359 -0.0571738 0.01 -0.0174385 0.170748 0.01 -0.00416359 0.0571738 0.01 -0.00914872 0.114154 0.01 -0.0125145 0.171616 0.01 0.0025 -2.42064e-16 0.01 0.000827953 0.0574645 0.01 -0.00418253 0.114735 0.01 -0.00418253 -0.114735 0.01 0.000827953 -0.0574645 0.01 -0.0174385 -0.170748 0 -0.0174385 -0.170748 0.01 -0.0025 -2.40839e-16 0.01 -0.00914872 -0.114154 0.01 -0.00416359 -0.0571738 0.01 -0.0025 -2.40839e-16 0 -0.00914872 -0.114154 0 -0.00416359 -0.0571738 0 -0.0025 -2.40839e-16 0 -0.0025 -2.40839e-16 0.01 -0.0174385 0.170748 0.01 -0.00416359 0.0571738 0.01 -0.00914872 0.114154 0.01 -0.0174385 0.170748 0 -0.00416359 0.0571738 0 -0.00914872 0.114154 0 -0.0174385 0.170748 0 -0.0125145 0.171616 0 -0.0125145 0.171616 0.01 -0.0174385 0.170748 0.01 0.0025 -2.42064e-16 0 0.0025 -2.42064e-16 0.01 -0.0125145 0.171616 0.01 0.000827953 0.0574645 0.01 -0.00418253 0.114735 0.01 -0.0125145 0.171616 0 0.000827953 0.0574645 0 -0.00418253 0.114735 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="236"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0174325 -0.170679 0 -0.0125084 -0.171547 0 -0.0125084 -0.171547 0.01 -0.0174325 -0.170679 0.01 -0.0174325 -0.170679 0 -0.0125084 -0.171547 0 -0.0025 -2.40741e-16 0 -0.00914602 -0.114108 0 -0.00416291 -0.0571506 0 -0.0174325 0.170679 0 -0.00416291 0.0571506 0 -0.00914602 0.114108 0 -0.0125084 0.171547 0 0.0025 -2.41966e-16 0 0.00082863 0.0574413 0 -0.00417983 0.114688 0 -0.00417983 -0.114688 0 0.00082863 -0.0574413 0 -0.0125084 -0.171547 0 -0.0125084 -0.171547 0.01 0.0025 -2.41966e-16 0.01 -0.00417983 -0.114688 0.01 0.00082863 -0.0574413 0.01 0.0025 -2.41966e-16 0 -0.00417983 -0.114688 0 0.00082863 -0.0574413 0 -0.0174325 -0.170679 0.01 -0.0125084 -0.171547 0.01 -0.0025 -2.40741e-16 0.01 -0.00914602 -0.114108 0.01 -0.00416291 -0.0571506 0.01 -0.0174325 0.170679 0.01 -0.00416291 0.0571506 0.01 -0.00914602 0.114108 0.01 -0.0125084 0.171547 0.01 0.0025 -2.41966e-16 0.01 0.00082863 0.0574413 0.01 -0.00417983 0.114688 0.01 -0.00417983 -0.114688 0.01 0.00082863 -0.0574413 0.01 -0.0174325 -0.170679 0 -0.0174325 -0.170679 0.01 -0.0025 -2.40741e-16 0.01 -0.00914602 -0.114108 0.01 -0.00416291 -0.0571506 0.01 -0.0025 -2.40741e-16 0 -0.00914602 -0.114108 0 -0.00416291 -0.0571506 0 -0.0025 -2.40741e-16 0 -0.0025 -2.40741e-16 0.01 -0.0174325 0.170679 0.01 -0.00416291 0.0571506 0.01 -0.00914602 0.114108 0.01 -0.0174325 0.170679 0 -0.00416291 0.0571506 0 -0.00914602 0.114108 0 -0.0174325 0.170679 0 -0.0125084 0.171547 0 -0.0125084 0.171547 0.01 -0.0174325 0.170679 0.01 0.0025 -2.41966e-16 0 0.0025 -2.41966e-16 0.01 -0.0125084 0.171547 0.01 0.00082863 0.0574413 0.01 -0.00417983 0.114688 0.01 -0.0125084 0.171547 0 0.00082863 0.0574413 0 -0.00417983 0.114688 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="237"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0175616 -0.172155 0 -0.0126376 -0.173023 0 -0.0126376 -0.173023 0.01 -0.0175616 -0.172155 0.01 -0.0175616 -0.172155 0 -0.0126376 -0.173023 0 -0.0025 -2.42823e-16 0 -0.00920349 -0.115095 0 -0.00417729 -0.0576448 0 -0.0175616 0.172155 0 -0.00417729 0.0576448 0 -0.00920349 0.115095 0 -0.0126376 0.173023 0 0.0025 -2.44048e-16 0 0.000814249 0.0579355 0 -0.0042373 0.115675 0 -0.0042373 -0.115675 0 0.000814249 -0.0579355 0 -0.0126376 -0.173023 0 -0.0126376 -0.173023 0.01 0.0025 -2.44048e-16 0.01 -0.0042373 -0.115675 0.01 0.000814249 -0.0579355 0.01 0.0025 -2.44048e-16 0 -0.0042373 -0.115675 0 0.000814249 -0.0579355 0 -0.0175616 -0.172155 0.01 -0.0126376 -0.173023 0.01 -0.0025 -2.42823e-16 0.01 -0.00920349 -0.115095 0.01 -0.00417729 -0.0576448 0.01 -0.0175616 0.172155 0.01 -0.00417729 0.0576448 0.01 -0.00920349 0.115095 0.01 -0.0126376 0.173023 0.01 0.0025 -2.44048e-16 0.01 0.000814249 0.0579355 0.01 -0.0042373 0.115675 0.01 -0.0042373 -0.115675 0.01 0.000814249 -0.0579355 0.01 -0.0175616 -0.172155 0 -0.0175616 -0.172155 0.01 -0.0025 -2.42823e-16 0.01 -0.00920349 -0.115095 0.01 -0.00417729 -0.0576448 0.01 -0.0025 -2.42823e-16 0 -0.00920349 -0.115095 0 -0.00417729 -0.0576448 0 -0.0025 -2.42823e-16 0 -0.0025 -2.42823e-16 0.01 -0.0175616 0.172155 0.01 -0.00417729 0.0576448 0.01 -0.00920349 0.115095 0.01 -0.0175616 0.172155 0 -0.00417729 0.0576448 0 -0.00920349 0.115095 0 -0.0175616 0.172155 0 -0.0126376 0.173023 0 -0.0126376 0.173023 0.01 -0.0175616 0.172155 0.01 0.0025 -2.44048e-16 0 0.0025 -2.44048e-16 0.01 -0.0126376 0.173023 0.01 0.000814249 0.0579355 0.01 -0.0042373 0.115675 0.01 -0.0126376 0.173023 0 0.000814249 0.0579355 0 -0.0042373 0.115675 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="238"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0175555 -0.172085 0 -0.0126315 -0.172954 0 -0.0126315 -0.172954 0.01 -0.0175555 -0.172085 0.01 -0.0175555 -0.172085 0 -0.0126315 -0.172954 0 -0.0025 -2.42725e-16 0 -0.00920079 -0.115048 0 -0.00417662 -0.0576215 0 -0.0175555 0.172085 0 -0.00417662 0.0576215 0 -0.00920079 0.115048 0 -0.0126315 0.172954 0 0.0025 -2.4395e-16 0 0.000814926 0.0579122 0 -0.0042346 0.115629 0 -0.0042346 -0.115629 0 0.000814926 -0.0579122 0 -0.0126315 -0.172954 0 -0.0126315 -0.172954 0.01 0.0025 -2.4395e-16 0.01 -0.0042346 -0.115629 0.01 0.000814926 -0.0579122 0.01 0.0025 -2.4395e-16 0 -0.0042346 -0.115629 0 0.000814926 -0.0579122 0 -0.0175555 -0.172085 0.01 -0.0126315 -0.172954 0.01 -0.0025 -2.42725e-16 0.01 -0.00920079 -0.115048 0.01 -0.00417662 -0.0576215 0.01 -0.0175555 0.172085 0.01 -0.00417662 0.0576215 0.01 -0.00920079 0.115048 0.01 -0.0126315 0.172954 0.01 0.0025 -2.4395e-16 0.01 0.000814926 0.0579122 0.01 -0.0042346 0.115629 0.01 -0.0042346 -0.115629 0.01 0.000814926 -0.0579122 0.01 -0.0175555 -0.172085 0 -0.0175555 -0.172085 0.01 -0.0025 -2.42725e-16 0.01 -0.00920079 -0.115048 0.01 -0.00417662 -0.0576215 0.01 -0.0025 -2.42725e-16 0 -0.00920079 -0.115048 0 -0.00417662 -0.0576215 0 -0.0025 -2.42725e-16 0 -0.0025 -2.42725e-16 0.01 -0.0175555 0.172085 0.01 -0.00417662 0.0576215 0.01 -0.00920079 0.115048 0.01 -0.0175555 0.172085 0 -0.00417662 0.0576215 0 -0.00920079 0.115048 0 -0.0175555 0.172085 0 -0.0126315 0.172954 0 -0.0126315 0.172954 0.01 -0.0175555 0.172085 0.01 0.0025 -2.4395e-16 0 0.0025 -2.4395e-16 0.01 -0.0126315 0.172954 0.01 0.000814926 0.0579122 0.01 -0.0042346 0.115629 0.01 -0.0126315 0.172954 0 0.000814926 0.0579122 0 -0.0042346 0.115629 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="239"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0176862 -0.173579 0 -0.0127621 -0.174447 0 -0.0127621 -0.174447 0.01 -0.0176862 -0.173579 0.01 -0.0176862 -0.173579 0 -0.0127621 -0.174447 0 -0.0025 -2.44831e-16 0 -0.00925894 -0.116046 0 -0.00419116 -0.0581216 0 -0.0176862 0.173579 0 -0.00419116 0.0581216 0 -0.00925894 0.116046 0 -0.0127621 0.174447 0 0.0025 -2.46056e-16 0 0.000800376 0.0584123 0 -0.00429275 0.116627 0 -0.00429275 -0.116627 0 0.000800376 -0.0584123 0 -0.0127621 -0.174447 0 -0.0127621 -0.174447 0.01 0.0025 -2.46056e-16 0.01 -0.00429275 -0.116627 0.01 0.000800376 -0.0584123 0.01 0.0025 -2.46056e-16 0 -0.00429275 -0.116627 0 0.000800376 -0.0584123 0 -0.0176862 -0.173579 0.01 -0.0127621 -0.174447 0.01 -0.0025 -2.44831e-16 0.01 -0.00925894 -0.116046 0.01 -0.00419116 -0.0581216 0.01 -0.0176862 0.173579 0.01 -0.00419116 0.0581216 0.01 -0.00925894 0.116046 0.01 -0.0127621 0.174447 0.01 0.0025 -2.46056e-16 0.01 0.000800376 0.0584123 0.01 -0.00429275 0.116627 0.01 -0.00429275 -0.116627 0.01 0.000800376 -0.0584123 0.01 -0.0176862 -0.173579 0 -0.0176862 -0.173579 0.01 -0.0025 -2.44831e-16 0.01 -0.00925894 -0.116046 0.01 -0.00419116 -0.0581216 0.01 -0.0025 -2.44831e-16 0 -0.00925894 -0.116046 0 -0.00419116 -0.0581216 0 -0.0025 -2.44831e-16 0 -0.0025 -2.44831e-16 0.01 -0.0176862 0.173579 0.01 -0.00419116 0.0581216 0.01 -0.00925894 0.116046 0.01 -0.0176862 0.173579 0 -0.00419116 0.0581216 0 -0.00925894 0.116046 0 -0.0176862 0.173579 0 -0.0127621 0.174447 0 -0.0127621 0.174447 0.01 -0.0176862 0.173579 0.01 0.0025 -2.46056e-16 0 0.0025 -2.46056e-16 0.01 -0.0127621 0.174447 0.01 0.000800376 0.0584123 0.01 -0.00429275 0.116627 0.01 -0.0127621 0.174447 0 0.000800376 0.0584123 0 -0.00429275 0.116627 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="240"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0176786 -0.173492 0 -0.0127545 -0.17436 0 -0.0127545 -0.17436 0.01 -0.0176786 -0.173492 0.01 -0.0176786 -0.173492 0 -0.0127545 -0.17436 0 -0.0025 -2.44709e-16 0 -0.00925556 -0.115988 0 -0.00419032 -0.0580925 0 -0.0176786 0.173492 0 -0.00419032 0.0580925 0 -0.00925556 0.115988 0 -0.0127545 0.17436 0 0.0025 -2.45934e-16 0 0.000801222 0.0583832 0 -0.00428936 0.116569 0 -0.00428936 -0.116569 0 0.000801222 -0.0583832 0 -0.0127545 -0.17436 0 -0.0127545 -0.17436 0.01 0.0025 -2.45934e-16 0.01 -0.00428936 -0.116569 0.01 0.000801222 -0.0583832 0.01 0.0025 -2.45934e-16 0 -0.00428936 -0.116569 0 0.000801222 -0.0583832 0 -0.0176786 -0.173492 0.01 -0.0127545 -0.17436 0.01 -0.0025 -2.44709e-16 0.01 -0.00925556 -0.115988 0.01 -0.00419032 -0.0580925 0.01 -0.0176786 0.173492 0.01 -0.00419032 0.0580925 0.01 -0.00925556 0.115988 0.01 -0.0127545 0.17436 0.01 0.0025 -2.45934e-16 0.01 0.000801222 0.0583832 0.01 -0.00428936 0.116569 0.01 -0.00428936 -0.116569 0.01 0.000801222 -0.0583832 0.01 -0.0176786 -0.173492 0 -0.0176786 -0.173492 0.01 -0.0025 -2.44709e-16 0.01 -0.00925556 -0.115988 0.01 -0.00419032 -0.0580925 0.01 -0.0025 -2.44709e-16 0 -0.00925556 -0.115988 0 -0.00419032 -0.0580925 0 -0.0025 -2.44709e-16 0 -0.0025 -2.44709e-16 0.01 -0.0176786 0.173492 0.01 -0.00419032 0.0580925 0.01 -0.00925556 0.115988 0.01 -0.0176786 0.173492 0 -0.00419032 0.0580925 0 -0.00925556 0.115988 0 -0.0176786 0.173492 0 -0.0127545 0.17436 0 -0.0127545 0.17436 0.01 -0.0176786 0.173492 0.01 0.0025 -2.45934e-16 0 0.0025 -2.45934e-16 0.01 -0.0127545 0.17436 0.01 0.000801222 0.0583832 0.01 -0.00428936 0.116569 0.01 -0.0127545 0.17436 0 0.000801222 0.0583832 0 -0.00428936 0.116569 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="241"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0178092 -0.174985 0 -0.0128852 -0.175854 0 -0.0128852 -0.175854 0.01 -0.0178092 -0.174985 0.01 -0.0178092 -0.174985 0 -0.0128852 -0.175854 0 -0.0025 -2.46815e-16 0 -0.00931371 -0.116987 0 -0.00420487 -0.0585925 0 -0.0178092 0.174985 0 -0.00420487 0.0585925 0 -0.00931371 0.116987 0 -0.0128852 0.175854 0 0.0025 -2.4804e-16 0 0.000786672 0.0588833 0 -0.00434752 0.117567 0 -0.00434752 -0.117567 0 0.000786672 -0.0588833 0 -0.0128852 -0.175854 0 -0.0128852 -0.175854 0.01 0.0025 -2.4804e-16 0.01 -0.00434752 -0.117567 0.01 0.000786672 -0.0588833 0.01 0.0025 -2.4804e-16 0 -0.00434752 -0.117567 0 0.000786672 -0.0588833 0 -0.0178092 -0.174985 0.01 -0.0128852 -0.175854 0.01 -0.0025 -2.46815e-16 0.01 -0.00931371 -0.116987 0.01 -0.00420487 -0.0585925 0.01 -0.0178092 0.174985 0.01 -0.00420487 0.0585925 0.01 -0.00931371 0.116987 0.01 -0.0128852 0.175854 0.01 0.0025 -2.4804e-16 0.01 0.000786672 0.0588833 0.01 -0.00434752 0.117567 0.01 -0.00434752 -0.117567 0.01 0.000786672 -0.0588833 0.01 -0.0178092 -0.174985 0 -0.0178092 -0.174985 0.01 -0.0025 -2.46815e-16 0.01 -0.00931371 -0.116987 0.01 -0.00420487 -0.0585925 0.01 -0.0025 -2.46815e-16 0 -0.00931371 -0.116987 0 -0.00420487 -0.0585925 0 -0.0025 -2.46815e-16 0 -0.0025 -2.46815e-16 0.01 -0.0178092 0.174985 0.01 -0.00420487 0.0585925 0.01 -0.00931371 0.116987 0.01 -0.0178092 0.174985 0 -0.00420487 0.0585925 0 -0.00931371 0.116987 0 -0.0178092 0.174985 0 -0.0128852 0.175854 0 -0.0128852 0.175854 0.01 -0.0178092 0.174985 0.01 0.0025 -2.4804e-16 0 0.0025 -2.4804e-16 0.01 -0.0128852 0.175854 0.01 0.000786672 0.0588833 0.01 -0.00434752 0.117567 0.01 -0.0128852 0.175854 0 0.000786672 0.0588833 0 -0.00434752 0.117567 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="68" NumberOfPolys="52" name="242"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0178016 -0.174898 0 -0.0128776 -0.175767 0 -0.0128776 -0.175767 0.01 -0.0178016 -0.174898 0.01 -0.0178016 -0.174898 0 -0.0128776 -0.175767 0 -0.0025 -2.46693e-16 0 -0.00931033 -0.116929 0 -0.00420402 -0.0585635 0 -0.0178016 0.174898 0 -0.00420402 0.0585635 0 -0.00931033 0.116929 0 -0.0128776 0.175767 0 0.0025 -2.47917e-16 0 0.000787518 0.0588542 0 -0.00434413 0.117509 0 -0.00434413 -0.117509 0 0.000787518 -0.0588542 0 -0.0128776 -0.175767 0 -0.0128776 -0.175767 0.01 0.0025 -2.47917e-16 0.01 -0.00434413 -0.117509 0.01 0.000787518 -0.0588542 0.01 0.0025 -2.47917e-16 0 -0.00434413 -0.117509 0 0.000787518 -0.0588542 0 -0.0178016 -0.174898 0.01 -0.0128776 -0.175767 0.01 -0.0025 -2.46693e-16 0.01 -0.00931033 -0.116929 0.01 -0.00420402 -0.0585635 0.01 -0.0178016 0.174898 0.01 -0.00420402 0.0585635 0.01 -0.00931033 0.116929 0.01 -0.0128776 0.175767 0.01 0.0025 -2.47917e-16 0.01 0.000787518 0.0588542 0.01 -0.00434413 0.117509 0.01 -0.00434413 -0.117509 0.01 0.000787518 -0.0588542 0.01 -0.0178016 -0.174898 0 -0.0178016 -0.174898 0.01 -0.0025 -2.46693e-16 0.01 -0.00931033 -0.116929 0.01 -0.00420402 -0.0585635 0.01 -0.0025 -2.46693e-16 0 -0.00931033 -0.116929 0 -0.00420402 -0.0585635 0 -0.0025 -2.46693e-16 0 -0.0025 -2.46693e-16 0.01 -0.0178016 0.174898 0.01 -0.00420402 0.0585635 0.01 -0.00931033 0.116929 0.01 -0.0178016 0.174898 0 -0.00420402 0.0585635 0 -0.00931033 0.116929 0 -0.0178016 0.174898 0 -0.0128776 0.175767 0 -0.0128776 0.175767 0.01 -0.0178016 0.174898 0.01 0.0025 -2.47917e-16 0 0.0025 -2.47917e-16 0.01 -0.0128776 0.175767 0.01 0.000787518 0.0588542 0.01 -0.00434413 0.117509 0.01 -0.0128776 0.175767 0 0.000787518 0.0588542 0 -0.00434413 0.117509 0 </DataArray> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray> + <DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray> + </Polys> + </Piece> + <Piece NumberOfPoints="0" NumberOfPolys="0" name="1"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32"/> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32"/> + <DataArray Name="offsets" format="ascii" type="Int32"/> + </Polys> + </Piece> + <Piece NumberOfPoints="0" NumberOfPolys="0" name="0"> + <Points> + <DataArray NumberOfComponents="3" format="ascii" type="Float32"/> + </Points> + <Polys> + <DataArray Name="connectivity" format="ascii" type="Int32"/> + <DataArray Name="offsets" format="ascii" type="Int32"/> + </Polys> + </Piece> + </PolyData> +</VTKFile> diff --git a/Test/AutoTestData/nom_gr.nxs b/Test/AutoTestData/nom_gr.nxs new file mode 100644 index 0000000000000000000000000000000000000000..fddaadeccf5d26dfb9fb2b5b30173e6d99c1e9b6 Binary files /dev/null and b/Test/AutoTestData/nom_gr.nxs differ