From: vsr Date: Mon, 5 Dec 2011 11:03:04 +0000 (+0000) Subject: Merge from V6_4_BR 05/12/2011 X-Git-Tag: V6_5_0a1~243 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=493747e8ea338a2d88204a5f12ba924d72ecbb5b;p=modules%2Fsmesh.git Merge from V6_4_BR 05/12/2011 --- diff --git a/Makefile.am b/Makefile.am index aaf432892..b782b886e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -48,6 +48,8 @@ salomeinclude_DATA = SMESH_version.h EXTRA_DIST += \ build_configure \ clean_configure \ + build_cmake \ + build_cmake.bat \ LICENCE dist-hook: diff --git a/adm_local/unix/make_common_starter.am b/adm_local/unix/make_common_starter.am index 77936ec88..feb12fc58 100644 --- a/adm_local/unix/make_common_starter.am +++ b/adm_local/unix/make_common_starter.am @@ -39,6 +39,12 @@ salomescriptdir = $(bindir) salomepythondir = $(pythondir)/salome salomepyexecdir = $(pyexecdir)/salome +# Root directory of the python packages of SMESH +smeshpypkgdir = $(salomepythondir)/salome/smesh + +# Directory for installing SALOME plugins files +salomepluginsdir = $(prefix)/share/salome/plugins/@MODULE_NAME@ + # Directory for installing idl files salomeidldir = $(prefix)/idl/salome diff --git a/configure.ac b/configure.ac index b1de4d2f4..f7569d1ce 100644 --- a/configure.ac +++ b/configure.ac @@ -24,7 +24,7 @@ # Modified by : Alexander BORODIN (OCN) - autotools usage # Created from configure.in.base # -AC_INIT([Salome2 Project SMESH module], [6.3.1], [webmaster.salome@opencascade.com], [SalomeSMESH]) +AC_INIT([Salome2 Project SMESH module], [6.4.0], [webmaster.salome@opencascade.com], [SalomeSMESH]) AC_CONFIG_AUX_DIR(adm_local/unix/config_files) AC_CANONICAL_HOST AC_CANONICAL_TARGET @@ -302,6 +302,22 @@ if test "${gui_ok}" = "yes"; then CHECK_QT + echo + echo --------------------------------------------- + echo testing sip + echo --------------------------------------------- + echo + + CHECK_SIP + + echo + echo --------------------------------------------- + echo testing pyqt + echo --------------------------------------------- + echo + + CHECK_PYQT + echo echo --------------------------------------------- echo Testing qwt @@ -366,6 +382,14 @@ echo --------------------------------------------- echo CHECK_SPHINX +echo +echo --------------------------------------------- +echo testing libxm +echo --------------------------------------------- +echo +dnl Check the libxml that will be required to use the SALOME launcher +CHECK_LIBXML + echo echo --------------------------------------------- echo Testing Kernel @@ -520,6 +544,25 @@ AC_OUTPUT([ \ src/SMESH_PY/Makefile \ src/Tools/Makefile \ src/Tools/MeshCut/Makefile \ + src/Tools/padder/Makefile \ + src/Tools/padder/meshjob/Makefile \ + src/Tools/padder/meshjob/idl/Makefile \ + src/Tools/padder/meshjob/impl/Makefile \ + src/Tools/padder/spadderpy/Makefile \ + src/Tools/padder/spadderpy/padder.cfg \ + src/Tools/padder/spadderpy/gui/Makefile \ + src/Tools/padder/spadderpy/plugin/Makefile \ + src/Tools/padder/spadderpy/plugin/envPlugins.sh \ + src/Tools/padder/resources/Makefile \ + src/Tools/padder/resources/appligen/Makefile \ + src/Tools/padder/resources/appligen/appligen.sh \ + src/Tools/padder/resources/appligen/config_appli.xml \ + src/Tools/padder/resources/padderexe/Makefile \ + src/Tools/padder/resources/padderexe/envPadder.sh \ + src/Tools/padder/unittests/Makefile \ + src/Tools/padder/unittests/autotest.sh \ + src/Tools/padder/doc/Makefile \ + src/Tools/padder/doc/doxyfile \ resources/Makefile \ resources/SMESHCatalog.xml \ resources/SalomeApp.xml \ diff --git a/doc/Makefile.am b/doc/Makefile.am index e5c494e51..3edbc8c0a 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -25,6 +25,7 @@ # source path # SUBDIRS = salome docutils +#SUBDIRS = salome usr_docs: (cd salome && $(MAKE) $(AM_MAKEFLAGS) usr_docs) diff --git a/doc/docutils/conf.py.in b/doc/docutils/conf.py.in index b2bb21f71..1aea4dc54 100644 --- a/doc/docutils/conf.py.in +++ b/doc/docutils/conf.py.in @@ -184,7 +184,7 @@ latex_documents = [ # The name of an image file (relative to this directory) to place at the top of # the title page. -latex_logo = '../salome/tui/images/head.png' +latex_logo = '@srcdir@/../salome/tui/images/head.png' # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. diff --git a/doc/salome/gui/SMESH/doxyfile.in b/doc/salome/gui/SMESH/doxyfile.in index aec3397c2..b303e8487 100755 --- a/doc/salome/gui/SMESH/doxyfile.in +++ b/doc/salome/gui/SMESH/doxyfile.in @@ -38,10 +38,10 @@ WARNINGS = YES #--------------------------------------------------------------------------- #Input related options #--------------------------------------------------------------------------- -INPUT = @srcdir@/input +INPUT = @srcdir@/input @top_srcdir@/src/Tools/padder/doc/input FILE_PATTERNS = *.doc EXCLUDE = -IMAGE_PATH = @srcdir@/images +IMAGE_PATH = @srcdir@/images @top_srcdir@/src/Tools/padder/doc/images EXAMPLE_PATH = @top_srcdir@/src/SMESH_SWIG #--------------------------------------------------------------------------- diff --git a/doc/salome/gui/SMESH/images/cartesian3D_hyp.png b/doc/salome/gui/SMESH/images/cartesian3D_hyp.png new file mode 100644 index 000000000..b8373ed6d Binary files /dev/null and b/doc/salome/gui/SMESH/images/cartesian3D_hyp.png differ diff --git a/doc/salome/gui/SMESH/images/cartesian3D_sphere.png b/doc/salome/gui/SMESH/images/cartesian3D_sphere.png new file mode 100644 index 000000000..45bffdabe Binary files /dev/null and b/doc/salome/gui/SMESH/images/cartesian3D_sphere.png differ diff --git a/doc/salome/gui/SMESH/input/basic_meshing_algos.doc b/doc/salome/gui/SMESH/input/basic_meshing_algos.doc index 274ab7438..828561875 100644 --- a/doc/salome/gui/SMESH/input/basic_meshing_algos.doc +++ b/doc/salome/gui/SMESH/input/basic_meshing_algos.doc @@ -23,10 +23,8 @@ shape of a mesh. \image html image123.gif "Example of a triangular 2D mesh" @@ -36,10 +34,14 @@ are split into triangular and quadrangle elements.
  • For meshing of 3D entities (volume objects):
  • \image html image125.gif "Example of a tetrahedral 3D mesh" diff --git a/doc/salome/gui/SMESH/input/blsurf_hypo.doc b/doc/salome/gui/SMESH/input/blsurf_hypo.doc index c5cc5c8e2..2f39999da 100644 --- a/doc/salome/gui/SMESH/input/blsurf_hypo.doc +++ b/doc/salome/gui/SMESH/input/blsurf_hypo.doc @@ -96,8 +96,8 @@ not sewed faces.
  • "PreCAD" is an auxiliary CAD pre-processing module which has two main goals: This module requires a specific licence. @@ -105,15 +105,15 @@ not sewed faces. The following PreCAD options are the most significant and important ones:
  • @@ -208,29 +208,34 @@ files. Default is 1. The following PreCAD options are commonly usable. \n diff --git a/doc/salome/gui/SMESH/input/cartesian_algo.doc b/doc/salome/gui/SMESH/input/cartesian_algo.doc new file mode 100644 index 000000000..89b11e947 --- /dev/null +++ b/doc/salome/gui/SMESH/input/cartesian_algo.doc @@ -0,0 +1,75 @@ +/*! + +\page cartesian_algo_page Body Fitting 3D meshing algorithm + +Body Fitting algorithm generates hexahedrons of a Cartesian grid in +the internal part of geometry and polyhedra and other types of +elements at the intersection of Cartesian cells with the geometrical +boundary. + +\image html cartesian3D_sphere.png "A shpere meshed by Body Fitting algorithm" + +The meshing algorithm is as follows. +
      +
    1. Lines of a Cartesian structured grid defined by +\ref cartesian_hyp_anchor "Body Fitting Parameters" hypothesis are +intersected with the geometry boundary, thus nodes lying on the +boundary are found. This step also allows finding out for each node of +the Cartesian grid if it is inside or outside the geometry.
    2. +
    3. For each cell of the grid, check how many of its nodes are outside +of the geometry boundary. Depending on a result of this check +
        +
      • skip a cell, if all its nodes are outside
      • +
      • skip a cell, if it is too small according to Size + Threshold paremeter
      • +
      • add a hexahedron in the mesh, if all nodes are inside
      • +
      • add a polyhedron or another cell type in the mesh, if some +nodes are inside and some outside.
      • +
      +
    4. +
    +To apply this algorithm when you define your mesh, select Body + Fitting in the list of 3D algorithms and click "Add + Hypothesis" button and "Body Fitting Parameters"" menu + item. Dialog of Body Fitting Parameters + hypothesis will appear. + +
    +\anchor cartesian_hyp_anchor +

    Body Fitting Parameters hypothesis

    + +\image html cartesian3D_hyp.png "Body Fitting Parameters hypothesis dialog" + +This dialog allows to define + + +
    +See Also a sample TUI Script of a +\ref tui_cartesian_algo "Usage of Body Fitting algorithm". + +*/ diff --git a/doc/salome/gui/SMESH/input/clipping.doc b/doc/salome/gui/SMESH/input/clipping.doc index df3e39495..2bfa8292b 100644 --- a/doc/salome/gui/SMESH/input/clipping.doc +++ b/doc/salome/gui/SMESH/input/clipping.doc @@ -9,15 +9,20 @@ To start, click on the \em New button. \image html a-clipping2.png -Now you can define the parameters of your cross-section: list of -meshes, sub-meshes and groups the cross-section will be applied to -(Select all button allows to select and deselect all available -objects at once), \b Orientation (X-Y, X-Z or Y-Z); \b Distance between the -opposite extremities of the boundary box of selected objects, if it is set -to 0.5 the boundary box is split in two halves; and \b Rotation (in angle -degrees) around X (Y to Z) and around Y (X to Z). -If the Show preview button is on, you can see the clipping plane -in the 3D Viewer. +Now you can define the parameters of cross-section: + \image html image79.jpg "The plane and the cut object" diff --git a/doc/salome/gui/SMESH/input/colors_size.doc b/doc/salome/gui/SMESH/input/colors_size.doc index 1eb84f0ca..1ac27a494 100644 --- a/doc/salome/gui/SMESH/input/colors_size.doc +++ b/doc/salome/gui/SMESH/input/colors_size.doc @@ -9,11 +9,11 @@ parameters: -*/ \ No newline at end of file +*/ diff --git a/doc/salome/gui/SMESH/input/creating_groups.doc b/doc/salome/gui/SMESH/input/creating_groups.doc index de0953a55..966e091fe 100644 --- a/doc/salome/gui/SMESH/input/creating_groups.doc +++ b/doc/salome/gui/SMESH/input/creating_groups.doc @@ -2,10 +2,10 @@ \page creating_groups_page Creating groups -\n In MESH you can create groups of elements of a certain type whose -contents is defined in different ways. To create a group, in the \b +\n In MESH you can create a group of elements of a certain type. The +contents of the group can be defined in different ways. To create a group, in the \b Mesh menu select Create Group item (also available in the -contextual menu of the mesh).
    +context menu of the mesh).
    To create a group of any type you should define the following: \ref ghs3d_top "Back to top" \anchor ghs3d_enforced_meshes

    Enforced Meshes

    -\note This feature is currently only available on meshes with no geometry attached. Such meshes can be obtained by +\note This feature is currently only available on meshes with no +geometry attached. Such meshes can be obtained by # @ingroup l3_hypos_blsurf def SetTopology(self, way): @@ -6524,52 +6546,48 @@ class Mesh_Cartesian_3D(Mesh_Algorithm): def __init__(self, mesh, geom=0): self.Create(mesh, geom, "Cartesian_3D") + self.hyp = None return ## Defines "Body Fitting parameters" hypothesis - # @param xCoords coordinates of grid nodes along the X asix - # @param yCoords coordinates of grid nodes along the Y asix - # @param zCoords coordinates of grid nodes along the Z asix - # @param sizeThreshold size (> 1.0) defines a minimal size of a polyhedron so that - # a polyhedron of size less than hexSize/sizeThreshold is not created - # @param UseExisting if ==true - searches for the existing hypothesis created with - # the same parameters, else (default) - creates a new one - def SetGrid(self, xCoords, yCoords, zCoords, sizeThreshold, UseExisting=False): - hyp = self.Hypothesis("CartesianParameters3D", [xCoords, yCoords, zCoords, sizeThreshold], - UseExisting=UseExisting, CompareMethod=self._compareHyp) - hyp.SetGrid(xCoords, 0 ) - hyp.SetGrid(yCoords, 1 ) - hyp.SetGrid(zCoords, 2 ) - hyp.SetSizeThreshold( sizeThreshold ) - return hyp - - ## Defines "Body Fitting parameters" hypothesis - # @param xSpaceFuns functions f(t) defining spacing value at given point on X axis. - # Parameter t of \axSpaceFuns is a position [0.,1.] withing bounding box of - # the shape to mesh or withing an interval defined by internal points - # @param ySpaceFuns functions f(t) defining spacing value at given point on Y axis. - # @param zSpaceFuns functions f(t) defining spacing value at given point on Z axis. - # @param xInternalPoints points (0.,1.) dividing a grid into parts along X direction. - # Number of \axInternalPoints must be one less than number of \axSpaceFuns - # @param yInternalPoints points (0.,1.) dividing a grid into parts along Y direction. - # @param zInternalPoints points (0.,1.) dividing a grid into parts along Z direction. - # @param sizeThreshold size (> 1.0) defines a minimal size of a polyhedron so that + # @param xGridDef is definition of the grid along the X asix. + # It can be in either of two following forms: + # - Explicit coordinates of nodes, e.g. [-1.5, 0.0, 3.1] or range( -100,200,10) + # - Functions f(t) defining grid spacing at each point on grid axis. If there are + # several functions, they must be accompanied by relative coordinates of + # points dividing the whole shape into ranges where the functions apply; points + # coodrinates should vary within (0.0, 1.0) range. Parameter \a t of the spacing + # function f(t) varies from 0.0 to 1.0 witin a shape range. + # Examples: + # - "10.5" - defines a grid with a constant spacing + # - [["1", "1+10*t", "11"] [0.1, 0.6]] - defines different spacing in 3 ranges. + # @param yGridDef defines the grid along the Y asix the same way as \a xGridDef does + # @param zGridDef defines the grid along the Z asix the same way as \a xGridDef does + # @param sizeThreshold (> 1.0) defines a minimal size of a polyhedron so that # a polyhedron of size less than hexSize/sizeThreshold is not created # @param UseExisting if ==true - searches for the existing hypothesis created with # the same parameters, else (default) - creates a new one - def SetSpacing(self, - xSpaceFuns, ySpaceFuns, zSpaceFuns, - xInternalPoints, yInternalPoints, zInternalPoints, - sizeThreshold, UseExisting=False): - hyp = self.Hypothesis("CartesianParameters3D", - [xSpaceFuns, ySpaceFuns, zSpaceFuns, \ - xInternalPoints, yInternalPoints, zInternalPoints], - UseExisting=UseExisting, CompareMethod=self._compareHyp) - hyp.SetGridSpacing(xSpaceFuns, xInternalPoints, 0) - hyp.SetGridSpacing(ySpaceFuns, yInternalPoints, 1) - hyp.SetGridSpacing(zSpaceFuns, zInternalPoints, 2) - hyp.SetSizeThreshold( sizeThreshold ) - return hyp + def SetGrid(self, xGridDef, yGridDef, zGridDef, sizeThreshold=4.0, UseExisting=False): + if not self.hyp: + self.hyp = self.Hypothesis("CartesianParameters3D", + [xGridDef, yGridDef, zGridDef, sizeThreshold], + UseExisting=UseExisting, CompareMethod=self._compareHyp) + if not self.mesh.IsUsedHypothesis( self.hyp, self.geom ): + self.mesh.AddHypothesis( self.hyp, self.geom ) + + for axis, gridDef in enumerate( [xGridDef, yGridDef, zGridDef]): + if not gridDef: raise ValueError, "Empty grid definition" + if isinstance( gridDef, str ): + self.hyp.SetGridSpacing( [gridDef], [], axis ) + elif isinstance( gridDef[0], str ): + self.hyp.SetGridSpacing( gridDef, [], axis ) + elif isinstance( gridDef[0], int ) or \ + isinstance( gridDef[0], float ): + self.hyp.SetGrid(gridDef, axis ) + else: + self.hyp.SetGridSpacing( gridDef[0], gridDef[1], axis ) + self.hyp.SetSizeThreshold( sizeThreshold ) + return self.hyp def _compareHyp(self,hyp,args): # not implemented yet diff --git a/src/StdMeshers/StdMeshers_Cartesian_3D.cxx b/src/StdMeshers/StdMeshers_Cartesian_3D.cxx index b685243a6..9fb64deb3 100644 --- a/src/StdMeshers/StdMeshers_Cartesian_3D.cxx +++ b/src/StdMeshers/StdMeshers_Cartesian_3D.cxx @@ -315,7 +315,7 @@ namespace bool IsCorner() const { return _node; } }; // -------------------------------------------------------------------------------- - struct _Link // link connection two _Node's + struct _Link // link connecting two _Node's { _Node* _nodes[2]; vector< _Node> _intNodes; // _Node's at GridLine intersections diff --git a/src/StdMeshers/StdMeshers_Hexa_3D.cxx b/src/StdMeshers/StdMeshers_Hexa_3D.cxx index ceb29fa71..5cd250767 100644 --- a/src/StdMeshers/StdMeshers_Hexa_3D.cxx +++ b/src/StdMeshers/StdMeshers_Hexa_3D.cxx @@ -261,13 +261,26 @@ namespace */ //================================================================================ - bool beginsAtSide( const _FaceGrid& sideGrid1, const _FaceGrid& sideGrid2 ) + bool beginsAtSide( const _FaceGrid& sideGrid1, + const _FaceGrid& sideGrid2, + SMESH_ProxyMesh::Ptr proxymesh ) { - const SMDS_MeshNode* n00 = (sideGrid1._u2nodesMap.begin()->second)[0]; const TNodeColumn& col0 = sideGrid2._u2nodesMap.begin()->second; const TNodeColumn& col1 = sideGrid2._u2nodesMap.rbegin()->second; - return ( n00 == col0.front() || n00 == col0.back() || - n00 == col1.front() || n00 == col1.back() ); + const SMDS_MeshNode* n00 = col0.front(); + const SMDS_MeshNode* n01 = col0.back(); + const SMDS_MeshNode* n10 = col1.front(); + const SMDS_MeshNode* n11 = col1.back(); + const SMDS_MeshNode* n = (sideGrid1._u2nodesMap.begin()->second)[0]; + if ( proxymesh ) + { + n00 = proxymesh->GetProxyNode( n00 ); + n10 = proxymesh->GetProxyNode( n10 ); + n01 = proxymesh->GetProxyNode( n01 ); + n11 = proxymesh->GetProxyNode( n11 ); + n = proxymesh->GetProxyNode( n ); + } + return ( n == n00 || n == n01 || n == n10 || n == n11 ); } } @@ -433,12 +446,12 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh, // Orient loaded grids of cube sides along axis of the unitary cube coord system bool isReverse[6]; - isReverse[B_BOTTOM] = beginsAtSide( aCubeSide[B_BOTTOM], aCubeSide[B_RIGHT ] ); - isReverse[B_TOP ] = beginsAtSide( aCubeSide[B_TOP ], aCubeSide[B_RIGHT ] ); - isReverse[B_FRONT ] = beginsAtSide( aCubeSide[B_FRONT ], aCubeSide[B_RIGHT ] ); - isReverse[B_BACK ] = beginsAtSide( aCubeSide[B_BACK ], aCubeSide[B_RIGHT ] ); - isReverse[B_LEFT ] = beginsAtSide( aCubeSide[B_LEFT ], aCubeSide[B_BACK ] ); - isReverse[B_RIGHT ] = beginsAtSide( aCubeSide[B_RIGHT ], aCubeSide[B_BACK ] ); + isReverse[B_BOTTOM] = beginsAtSide( aCubeSide[B_BOTTOM], aCubeSide[B_RIGHT ], proxymesh ); + isReverse[B_TOP ] = beginsAtSide( aCubeSide[B_TOP ], aCubeSide[B_RIGHT ], proxymesh ); + isReverse[B_FRONT ] = beginsAtSide( aCubeSide[B_FRONT ], aCubeSide[B_RIGHT ], proxymesh ); + isReverse[B_BACK ] = beginsAtSide( aCubeSide[B_BACK ], aCubeSide[B_RIGHT ], proxymesh ); + isReverse[B_LEFT ] = beginsAtSide( aCubeSide[B_LEFT ], aCubeSide[B_BACK ], proxymesh ); + isReverse[B_RIGHT ] = beginsAtSide( aCubeSide[B_RIGHT ], aCubeSide[B_BACK ], proxymesh ); for ( int i = 0; i < 6; ++i ) { aCubeSide[i]._columns.resize( aCubeSide[i]._u2nodesMap.size() ); diff --git a/src/StdMeshers/StdMeshers_ImportSource.cxx b/src/StdMeshers/StdMeshers_ImportSource.cxx index 4af40d8d5..5e963a02d 100644 --- a/src/StdMeshers/StdMeshers_ImportSource.cxx +++ b/src/StdMeshers/StdMeshers_ImportSource.cxx @@ -26,7 +26,7 @@ // #include "StdMeshers_ImportSource.hxx" -#include "SMESHDS_GroupBase.hxx" +#include "SMESHDS_GroupOnGeom.hxx" #include "SMESHDS_Mesh.hxx" #include "SMESH_Algo.hxx" #include "SMESH_Gen.hxx" @@ -258,6 +258,51 @@ std::vector StdMeshers_ImportSource1D::GetSourceMeshes() const return meshes; } +//================================================================================ +/*! + * \brief Return submeshes whose events affect the target mesh + */ +//================================================================================ + +std::vector +StdMeshers_ImportSource1D::GetSourceSubMeshes(const SMESH_Mesh* srcMesh) const +{ + if ( !srcMesh->HasShapeToMesh() ) + return vector(1, srcMesh->GetSubMeshContaining(1)); + + set shapeIDs; + const vector& groups = GetGroups(); + const SMESHDS_Mesh * srcMeshDS = srcMesh->GetMeshDS(); + for ( size_t i = 0; i < groups.size(); ++i ) + { + SMESHDS_GroupBase * grDS = groups[i]->GetGroupDS(); + if ( grDS->GetMesh() != srcMeshDS ) + continue; + if ( SMESHDS_GroupOnGeom* gog = dynamic_cast( grDS )) + { + shapeIDs.insert( srcMeshDS->ShapeToIndex( gog->GetShape() )); + } + else + { + SMDS_ElemIteratorPtr elIt = grDS->GetElements(); + while ( elIt->more() ) + shapeIDs.insert( elIt->next()->getshapeId() ); + } + } + if ( !shapeIDs.empty() && *shapeIDs.begin() < 1 ) + { + shapeIDs.erase( shapeIDs.begin() ); + shapeIDs.insert( 1 ); + } + + vector smVec( shapeIDs.size()); + set::iterator sID = shapeIDs.begin(); + for ( int i = 0; sID != shapeIDs.end(); ++sID, ++i ) + smVec[i] = srcMesh->GetSubMeshContaining( *sID ); + + return smVec; +} + //============================================================================= /*! * Save _toCopyMesh and _toCopyGroups to a stream diff --git a/src/StdMeshers/StdMeshers_ImportSource.hxx b/src/StdMeshers/StdMeshers_ImportSource.hxx index 61b3b1ed5..1f87da44c 100644 --- a/src/StdMeshers/StdMeshers_ImportSource.hxx +++ b/src/StdMeshers/StdMeshers_ImportSource.hxx @@ -37,6 +37,7 @@ class SMESH_Group; class SMESHDS_Mesh; +class SMESH_subMesh; //============================================================================== /*! @@ -69,6 +70,7 @@ class STDMESHERS_EXPORT StdMeshers_ImportSource1D : public SMESH_Hypothesis const SMESHDS_Mesh& tgtMesh); std::vector GetSourceMeshes() const; + std::vector GetSourceSubMeshes(const SMESH_Mesh* srcMesh) const; private: diff --git a/src/StdMeshers/StdMeshers_Import_1D.cxx b/src/StdMeshers/StdMeshers_Import_1D.cxx index 1fcd7d560..9fc541c60 100644 --- a/src/StdMeshers/StdMeshers_Import_1D.cxx +++ b/src/StdMeshers/StdMeshers_Import_1D.cxx @@ -303,14 +303,16 @@ namespace // INTERNAL STUFF // set listener to hear events of the submesh computed by "Import" algo importSub->SetEventListener( get(), new _ListenerData(srcHyp), importSub ); - // set a listener to hear events of the source mesh + // set listeners to hear events of the source mesh SMESH_subMesh* smToNotify = importSub; - SMESH_subMesh* smToListen = srcMesh->GetSubMeshContaining(1); - SMESH_subMeshEventListenerData* data = new _ListenerData(srcHyp, LISTEN_SRC_MESH); - data->mySubMeshes.push_back( smToNotify ); - importSub->SetEventListener( get(), data, smToListen ); - - // remeber the submesh importSub and its sub-submeshes + vector smToListen = srcHyp->GetSourceSubMeshes( srcMesh ); + for ( size_t i = 0; i < smToListen.size(); ++i ) + { + SMESH_subMeshEventListenerData* data = new _ListenerData(srcHyp, LISTEN_SRC_MESH); + data->mySubMeshes.push_back( smToNotify ); + importSub->SetEventListener( get(), data, smToListen[i] ); + } + // remember the submesh importSub and its sub-submeshes _ImportData* iData = _Listener::getImportData( srcMesh, importSub->GetFather()); iData->trackHypParams( importSub, srcHyp ); iData->addComputed( importSub ); @@ -370,11 +372,11 @@ namespace // INTERNAL STUFF // clear the rest submeshes if ( !d->_computedSubM.empty() ) { - set< SMESH_subMesh*, _SubLess> subs; - subs.swap( d->_computedSubM ); // avoid recursion via events - while ( !subs.empty() ) + d->_computedSubM.clear(); + set< SMESH_subMesh*, _SubLess>::iterator sub = d->_subM.begin(); + for ( ; sub != d->_subM.end(); ++sub ) { - SMESH_subMesh* subM = *subs.begin(); subs.erase( subs.begin() ); + SMESH_subMesh* subM = *sub; _ListenerData* hypData = (_ListenerData*) subM->GetEventListenerData( get() ); if ( hypData ) d->removeGroups( sm, hypData->_srcHyp ); diff --git a/src/StdMeshers/StdMeshers_Prism_3D.cxx b/src/StdMeshers/StdMeshers_Prism_3D.cxx index 0d70042c8..151926415 100644 --- a/src/StdMeshers/StdMeshers_Prism_3D.cxx +++ b/src/StdMeshers/StdMeshers_Prism_3D.cxx @@ -1689,16 +1689,17 @@ bool StdMeshers_PrismAsBlock::GetLayersTransformation(vector & trsf) co for ( int iE = 0; iE < nbEdgesInWires.front(); ++iE, ++edgeIt ) { if ( BRep_Tool::Degenerated( *edgeIt )) continue; - const TParam2ColumnMap& u2colMap = + const TParam2ColumnMap* u2colMap = GetParam2ColumnMap( myHelper->GetMeshDS()->ShapeToIndex( *edgeIt ), isReverse ); + if ( !u2colMap ) return false; isReverse = ( edgeIt->Orientation() == TopAbs_REVERSED ); - double f = u2colMap.begin()->first, l = u2colMap.rbegin()->first; + double f = u2colMap->begin()->first, l = u2colMap->rbegin()->first; if ( isReverse ) swap ( f, l ); const int nbCol = 5; for ( int i = 0; i < nbCol; ++i ) { double u = f + i/double(nbCol) * ( l - f ); - const TNodeColumn* col = & getColumn( & u2colMap, u )->second; + const TNodeColumn* col = & getColumn( u2colMap, u )->second; if ( columns.empty() || col != columns.back() ) columns.push_back( col ); } diff --git a/src/StdMeshers/StdMeshers_Prism_3D.hxx b/src/StdMeshers/StdMeshers_Prism_3D.hxx index 953bb9aef..608cfba70 100644 --- a/src/StdMeshers/StdMeshers_Prism_3D.hxx +++ b/src/StdMeshers/StdMeshers_Prism_3D.hxx @@ -148,15 +148,18 @@ public: * \brief Return TParam2ColumnMap for a base edge * \param baseEdgeID - base edge SMESHDS Index * \param isReverse - columns in-block orientation - * \retval const TParam2ColumnMap& - map + * \retval const TParam2ColumnMap* - map */ - const TParam2ColumnMap& GetParam2ColumnMap(const int baseEdgeID, + const TParam2ColumnMap* GetParam2ColumnMap(const int baseEdgeID, bool & isReverse) const { - std::pair< TParam2ColumnMap*, bool > col_frw = - myShapeIndex2ColumnMap.find( baseEdgeID )->second; + std::map< int, std::pair< TParam2ColumnMap*, bool > >::const_iterator i_mo = + myShapeIndex2ColumnMap.find( baseEdgeID ); + if ( i_mo == myShapeIndex2ColumnMap.end() ) return 0; + + const std::pair< TParam2ColumnMap*, bool >& col_frw = i_mo->second; isReverse = !col_frw.second; - return * col_frw.first; + return col_frw.first; } /*! diff --git a/src/StdMeshers/StdMeshers_Regular_1D.cxx b/src/StdMeshers/StdMeshers_Regular_1D.cxx index bedf3692c..f075e0f03 100644 --- a/src/StdMeshers/StdMeshers_Regular_1D.cxx +++ b/src/StdMeshers/StdMeshers_Regular_1D.cxx @@ -691,7 +691,7 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh & theMesh, list::iterator u = theParams.begin(), uEnd = theParams.end(); for ( ; u != uEnd; ++u ) { - GCPnts_AbscissaPoint Discret( theC3d, (*u) * lenFactor, f ); + GCPnts_AbscissaPoint Discret( theC3d, ((*u)-f) * lenFactor, f ); if ( Discret.IsDone() ) *u = Discret.Parameter(); } diff --git a/src/StdMeshers/StdMeshers_ViscousLayers.cxx b/src/StdMeshers/StdMeshers_ViscousLayers.cxx index 912815839..4952afab6 100644 --- a/src/StdMeshers/StdMeshers_ViscousLayers.cxx +++ b/src/StdMeshers/StdMeshers_ViscousLayers.cxx @@ -32,16 +32,18 @@ #include "SMESHDS_Hypothesis.hxx" #include "SMESH_Algo.hxx" #include "SMESH_ComputeError.hxx" +#include "SMESH_ControlsDef.hxx" #include "SMESH_Gen.hxx" #include "SMESH_Group.hxx" #include "SMESH_Mesh.hxx" #include "SMESH_MesherHelper.hxx" +#include "SMESH_ProxyMesh.hxx" #include "SMESH_subMesh.hxx" #include "SMESH_subMeshEventListener.hxx" -#include "SMESH_ProxyMesh.hxx" #include "utilities.h" +#include #include #include #include @@ -56,6 +58,8 @@ #include #include #include +#include +#include #include #include #include @@ -67,7 +71,6 @@ #include #include #include -#include #include #include @@ -224,17 +227,22 @@ namespace VISCOUS - M[0][2]*M[1][1]*M[2][0]); return determinant > 1e-100; } - bool IsForward(const gp_XY& tgtUV, - const TopoDS_Face& face, - SMESH_MesherHelper& helper, - const double refSign) const + bool IsForward(const gp_XY& tgtUV, + const SMDS_MeshNode* smoothedNode, + const TopoDS_Face& face, + SMESH_MesherHelper& helper, + const double refSign) const { - gp_XY prevUV = helper.GetNodeUV( face, _nPrev ); - gp_XY nextUV = helper.GetNodeUV( face, _nNext ); + gp_XY prevUV = helper.GetNodeUV( face, _nPrev, smoothedNode ); + gp_XY nextUV = helper.GetNodeUV( face, _nNext, smoothedNode ); gp_Vec2d v1( tgtUV, prevUV ), v2( tgtUV, nextUV ); double d = v1 ^ v2; return d*refSign > 1e-100; } + bool IsNeighbour(const _Simplex& other) const + { + return _nPrev == other._nNext || _nNext == other._nPrev; + } }; //-------------------------------------------------------------------------------- /*! @@ -411,6 +419,7 @@ namespace VISCOUS Handle(Geom_Surface)& surface, SMESH_MesherHelper& helper, const double refSign, + bool isCentroidal, bool set3D); }; //-------------------------------------------------------------------------------- @@ -444,7 +453,8 @@ namespace VISCOUS _SolidData& data); void getSimplices( const SMDS_MeshNode* node, vector<_Simplex>& simplices, const set& ingnoreShapes, - const _SolidData* dataToCheckOri = 0); + const _SolidData* dataToCheckOri = 0, + const bool toSort = false); bool sortEdges( _SolidData& data, vector< vector<_LayerEdge*> >& edgesByGeom); void limitStepSize( _SolidData& data, @@ -465,6 +475,7 @@ namespace VISCOUS bool prepareEdgeToShrink( _LayerEdge& edge, const TopoDS_Face& F, SMESH_MesherHelper& helper, const SMESHDS_SubMesh* faceSubMesh ); + void fixBadFaces(const TopoDS_Face& F, SMESH_MesherHelper& helper); bool addBoundaryElements(); bool error( const string& text, int solidID=-1 ); @@ -726,6 +737,67 @@ namespace } return dir; } + //================================================================================ + /*! + * \brief Returns true if a FACE is bound by a concave EDGE + */ + //================================================================================ + + bool isConcave( const TopoDS_Face& F, SMESH_MesherHelper& helper ) + { + gp_Vec2d drv1, drv2; + gp_Pnt2d p; + TopExp_Explorer eExp( F.Oriented( TopAbs_FORWARD ), TopAbs_EDGE ); + for ( ; eExp.More(); eExp.Next() ) + { + const TopoDS_Edge& E = TopoDS::Edge( eExp.Current() ); + if ( BRep_Tool::Degenerated( E )) continue; + // check if 2D curve is concave + BRepAdaptor_Curve2d curve( E, F ); + const int nbIntervals = curve.NbIntervals( GeomAbs_C2 ); + TColStd_Array1OfReal intervals(1, nbIntervals + 1 ); + curve.Intervals( intervals, GeomAbs_C2 ); + bool isConvex = true; + for ( int i = 1; i <= nbIntervals && isConvex; ++i ) + { + double u1 = intervals( i ); + double u2 = intervals( i+1 ); + curve.D2( 0.5*( u1+u2 ), p, drv1, drv2 ); + double cross = drv2 ^ drv1; + if ( E.Orientation() == TopAbs_REVERSED ) + cross = -cross; + isConvex = ( cross < 1e-9 ); + } + // check if concavity is strong enough to care about it + //const double maxAngle = 5 * Standard_PI180; + if ( !isConvex ) + { + //cout << "Concave FACE " << helper.GetMeshDS()->ShapeToIndex( F ) << endl; + return true; + // map< double, const SMDS_MeshNode* > u2nodes; + // if ( !SMESH_Algo::GetSortedNodesOnEdge( helper.GetMeshDS(), E, + // /*ignoreMedium=*/true, u2nodes)) + // continue; + // map< double, const SMDS_MeshNode* >::iterator u2n = u2nodes.begin(); + // gp_Pnt2d uvPrev = helper.GetNodeUV( F, u2n->second ); + // double uPrev = u2n->first; + // for ( ++u2n; u2n != u2nodes.end(); ++u2n ) + // { + // gp_Pnt2d uv = helper.GetNodeUV( F, u2n->second ); + // gp_Vec2d segmentDir( uvPrev, uv ); + // curve.D1( uPrev, p, drv1 ); + // try { + // if ( fabs( segmentDir.Angle( drv1 )) > maxAngle ) + // return true; + // } + // catch ( ... ) {} + // uvPrev = uv; + // uPrev = u2n->first; + // } + } + } + return false; + } //-------------------------------------------------------------------------------- // DEBUG. Dump intermediate node positions into a python script #ifdef __myDEBUG @@ -737,31 +809,38 @@ namespace py = new ofstream(fname); *py << "from smesh import *" << endl << "meshSO = GetCurrentStudy().FindObjectID('0:1:2:3')" << endl - << "mesh = Mesh( meshSO.GetObject()._narrow( SMESH.SMESH_Mesh ))"<_pos.back() = newPos; SMDS_MeshNode* tgtNode = const_cast( data._edges[i]->_nodes.back() ); tgtNode->setXYZ( newPos.X(), newPos.Y(), newPos.Z() ); + dumpMove( tgtNode ); } } else { gp_XY uv0 = helper.GetNodeUV( F, data._edges[iFrom]->_2neibors->_nodes[0]); gp_XY uv1 = helper.GetNodeUV( F, data._edges[iTo-1]->_2neibors->_nodes[1]); + if ( data._edges[iFrom]->_2neibors->_nodes[0] == + data._edges[iTo-1]->_2neibors->_nodes[1] ) // closed edge + { + int iPeriodic = helper.GetPeriodicIndex(); + if ( iPeriodic == 1 || iPeriodic == 2 ) + { + uv1.SetCoord( iPeriodic, helper.GetOtherParam( uv1.Coord( iPeriodic ))); + if ( uv0.Coord( iPeriodic ) > uv1.Coord( iPeriodic )) + std::swap( uv0, uv1 ); + } + } + const gp_XY rangeUV = uv1 - uv0; for ( int i = iFrom; i < iTo; ++i ) { double r = len[i-iFrom] / len.back(); - gp_XY newUV = uv0 * ( 1. - r ) + uv1 * r; + gp_XY newUV = uv0 + r * rangeUV; data._edges[i]->_pos.back().SetCoord( newUV.X(), newUV.Y(), 0 ); gp_Pnt newPos = surface->Value( newUV.X(), newUV.Y() ); SMDS_MeshNode* tgtNode = const_cast( data._edges[i]->_nodes.back() ); tgtNode->setXYZ( newPos.X(), newPos.Y(), newPos.Z() ); + dumpMove( tgtNode ); SMDS_FacePosition* pos = static_cast( tgtNode->GetPosition() ); pos->SetUParameter( newUV.X() ); @@ -2388,6 +2524,7 @@ bool _ViscousBuilder::smoothAnalyticEdge( _SolidData& data, gp_Pnt newPos = surface->Value( newUV.X(), newUV.Y() ); SMDS_MeshNode* tgtNode = const_cast( data._edges[i]->_nodes.back() ); tgtNode->setXYZ( newPos.X(), newPos.Y(), newPos.Z() ); + dumpMove( tgtNode ); SMDS_FacePosition* pos = static_cast( tgtNode->GetPosition() ); pos->SetUParameter( newUV.X() ); @@ -3329,7 +3466,6 @@ bool _ViscousBuilder::shrink() _SolidData& data = *f2sd->second; TNode2Edge& n2eMap = data._n2eMap; const TopoDS_Face& F = TopoDS::Face( getMeshDS()->IndexToShape( f2sd->first )); - const bool reverse = ( data._reversedFaceIds.count( f2sd->first )); Handle(Geom_Surface) surface = BRep_Tool::Surface(F); @@ -3357,12 +3493,15 @@ bool _ViscousBuilder::shrink() // Find out face orientation double refSign = 1; const set ignoreShapes; + bool isOkUV; if ( !smoothNodes.empty() ) { - gp_XY uv = helper.GetNodeUV( F, smoothNodes[0] ); vector<_Simplex> simplices; getSimplices( smoothNodes[0], simplices, ignoreShapes ); - if ( simplices[0].IsForward(uv, F, helper,refSign) != (!reverse)) + helper.GetNodeUV( F, simplices[0]._nPrev, 0, &isOkUV ); // fix UV of silpmex nodes + helper.GetNodeUV( F, simplices[0]._nNext, 0, &isOkUV ); + gp_XY uv = helper.GetNodeUV( F, smoothNodes[0], 0, &isOkUV ); + if ( !simplices[0].IsForward(uv, smoothNodes[0], F, helper,refSign) ) refSign = -1; } @@ -3410,8 +3549,10 @@ bool _ViscousBuilder::shrink() } } + // find out if a FACE is concave + const bool isConcaveFace = isConcave( F, helper ); + // Create _SmoothNode's on face F - bool isOkUV; vector< _SmoothNode > nodesToSmooth( smoothNodes.size() ); { dumpFunction(SMESH_Comment("beforeShrinkFace")<first); // debug @@ -3420,7 +3561,7 @@ bool _ViscousBuilder::shrink() const SMDS_MeshNode* n = smoothNodes[i]; nodesToSmooth[ i ]._node = n; // src nodes must be replaced by tgt nodes to have tgt nodes in _simplices - getSimplices( n, nodesToSmooth[ i ]._simplices, ignoreShapes ); + getSimplices( n, nodesToSmooth[ i ]._simplices, ignoreShapes, NULL, isConcaveFace ); // fix up incorrect uv of nodes on the FACE helper.GetNodeUV( F, n, 0, &isOkUV); dumpMove( n ); @@ -3465,8 +3606,6 @@ bool _ViscousBuilder::shrink() shrinked |= lEdges[i]->SetNewLength2d( surface,F,helper ); } dumpFunctionEnd(); - if ( !shrinked ) - break; // Move nodes on EDGE's set< _Shrinker1D* >::iterator shr = eShri1D.begin(); @@ -3487,7 +3626,8 @@ bool _ViscousBuilder::shrink() moved = false; for ( unsigned i = 0; i < nodesToSmooth.size(); ++i ) { - moved |= nodesToSmooth[i].Smooth( badNb,surface,helper,refSign,/*set3D=*/false ); + moved |= nodesToSmooth[i].Smooth( badNb,surface,helper,refSign, + /*isCentroidal=*/isConcaveFace,/*set3D=*/false ); } if ( badNb < oldBadNb ) nbNoImpSteps = 0; @@ -3517,17 +3657,20 @@ bool _ViscousBuilder::shrink() highQuality = ( *nbNodesSet.begin() == 4 ); } } - for ( int st = highQuality ? 8 : 3; st; --st ) + if ( !highQuality && isConcaveFace ) + fixBadFaces( F, helper ); // fix narrow faces by swaping diagonals + for ( int st = highQuality ? 10 : 3; st; --st ) { dumpFunction(SMESH_Comment("shrinkFace")<first<<"_st"<<++smooStep); // debug for ( unsigned i = 0; i < nodesToSmooth.size(); ++i ) - nodesToSmooth[i].Smooth( badNb,surface,helper,refSign,/*set3D=*/st==1 ); + nodesToSmooth[i].Smooth( badNb,surface,helper,refSign, + /*isCentroidal=*/isConcaveFace,/*set3D=*/st==1 ); dumpFunctionEnd(); } // Set an event listener to clear FACE sub-mesh together with SOLID sub-mesh _SrinkShapeListener::ToClearSubMeshWithSolid( sm, data._solid ); - }// loop on FACES to srink mesh on + } // loop on FACES to srink mesh on // Replace source nodes by target nodes in shrinked mesh edges @@ -3713,6 +3856,124 @@ bool _ViscousBuilder::prepareEdgeToShrink( _LayerEdge& edge, // return true; } +//================================================================================ +/*! + * \brief Try to fix triangles with high aspect ratio by swaping diagonals + */ +//================================================================================ + +void _ViscousBuilder::fixBadFaces(const TopoDS_Face& F, SMESH_MesherHelper& helper) +{ + SMESH::Controls::AspectRatio qualifier; + SMESH::Controls::TSequenceOfXYZ points(3), points1(3), points2(3); + const double maxAspectRatio = 4.; + + // find bad triangles + + vector< const SMDS_MeshElement* > badTrias; + vector< double > badAspects; + SMESHDS_SubMesh* sm = helper.GetMeshDS()->MeshElements( F ); + SMDS_ElemIteratorPtr fIt = sm->GetElements(); + while ( fIt->more() ) + { + const SMDS_MeshElement * f = fIt->next(); + if ( f->NbCornerNodes() != 3 ) continue; + for ( int iP = 0; iP < 3; ++iP ) points(iP+1) = SMESH_TNodeXYZ( f->GetNode(iP)); + double aspect = qualifier.GetValue( points ); + if ( aspect > maxAspectRatio ) + { + badTrias.push_back( f ); + badAspects.push_back( aspect ); + } + } + if ( badTrias.empty() ) + return; + + // find couples of faces to swap diagonal + + typedef pair < const SMDS_MeshElement* , const SMDS_MeshElement* > T2Trias; + vector< T2Trias > triaCouples; + + TIDSortedElemSet involvedFaces, emptySet; + for ( size_t iTia = 0; iTia < badTrias.size(); ++iTia ) + { + T2Trias trias [3]; + double aspRatio [3]; + int i1, i2, i3; + + involvedFaces.insert( badTrias[iTia] ); + for ( int iP = 0; iP < 3; ++iP ) + points(iP+1) = SMESH_TNodeXYZ( badTrias[iTia]->GetNode(iP)); + + // find triangles adjacent to badTrias[iTia] with better aspect ratio after diag-swaping + int bestCouple = -1; + for ( int iSide = 0; iSide < 3; ++iSide ) + { + const SMDS_MeshNode* n1 = badTrias[iTia]->GetNode( iSide ); + const SMDS_MeshNode* n2 = badTrias[iTia]->GetNode(( iSide+1 ) % 3 ); + trias [iSide].first = badTrias[iTia]; + trias [iSide].second = SMESH_MeshEditor::FindFaceInSet( n1, n2, emptySet, involvedFaces, + & i1, & i2 ); + if ( ! trias[iSide].second || trias[iSide].second->NbCornerNodes() != 3 ) + continue; + + // aspect ratio of an adjacent tria + for ( int iP = 0; iP < 3; ++iP ) + points2(iP+1) = SMESH_TNodeXYZ( trias[iSide].second->GetNode(iP)); + double aspectInit = qualifier.GetValue( points2 ); + + // arrange nodes as after diag-swaping + if ( helper.WrapIndex( i1+1, 3 ) == i2 ) + i3 = helper.WrapIndex( i1-1, 3 ); + else + i3 = helper.WrapIndex( i1+1, 3 ); + points1 = points; + points1( 1+ iSide ) = points2( 1+ i3 ); + points2( 1+ i2 ) = points1( 1+ ( iSide+2 ) % 3 ); + + // aspect ratio after diag-swaping + aspRatio[ iSide ] = qualifier.GetValue( points1 ) + qualifier.GetValue( points2 ); + if ( aspRatio[ iSide ] > aspectInit + badAspects[ iTia ] ) + continue; + + if ( bestCouple < 0 || aspRatio[ bestCouple ] > aspRatio[ iSide ] ) + bestCouple = iSide; + } + + if ( bestCouple >= 0 ) + { + triaCouples.push_back( trias[bestCouple] ); + involvedFaces.insert ( trias[bestCouple].second ); + } + else + { + involvedFaces.erase( badTrias[iTia] ); + } + } + if ( triaCouples.empty() ) + return; + + // swap diagonals + + SMESH_MeshEditor editor( helper.GetMesh() ); + dumpFunction(SMESH_Comment("beforeSwapDiagonals_F")< uv( _simplices.size() ); + for ( size_t i = 0; i < _simplices.size(); ++i ) + uv[i] = helper.GetNodeUV( face, _simplices[i]._nPrev, _node ); + // compute new UV for the node gp_XY newPos (0,0); - for ( unsigned i = 0; i < _simplices.size(); ++i ) - newPos += helper.GetNodeUV( face, _simplices[i]._nPrev ); - newPos /= _simplices.size(); + if ( isCentroidal && _simplices.size() > 3 ) + { + // average centers of diagonals wieghted with their reciprocal lengths + if ( _simplices.size() == 4 ) + { + double w1 = 1. / ( uv[2]-uv[0] ).SquareModulus(); + double w2 = 1. / ( uv[3]-uv[1] ).SquareModulus(); + newPos = ( w1 * ( uv[2]+uv[0] ) + w2 * ( uv[3]+uv[1] )) / ( w1+w2 ) / 2; + } + else + { + double sumWeight = 0; + int nb = _simplices.size() == 4 ? 2 : _simplices.size(); + for ( int i = 0; i < nb; ++i ) + { + int iFrom = i + 2; + int iTo = i + _simplices.size() - 1; + for ( int j = iFrom; j < iTo; ++j ) + { + int i2 = SMESH_MesherHelper::WrapIndex( j, _simplices.size() ); + double w = 1. / ( uv[i]-uv[i2] ).SquareModulus(); + sumWeight += w; + newPos += w * ( uv[i]+uv[i2] ); + } + } + newPos /= 2 * sumWeight; + } + } + else + { + // Laplacian smooth + isCentroidal = false; + for ( size_t i = 0; i < _simplices.size(); ++i ) + newPos += uv[i]; + newPos /= _simplices.size(); + } // count quality metrics (orientation) of triangles around the node int nbOkBefore = 0; gp_XY tgtUV = helper.GetNodeUV( face, _node ); for ( unsigned i = 0; i < _simplices.size(); ++i ) - nbOkBefore += _simplices[i].IsForward( tgtUV, face, helper, refSign ); + nbOkBefore += _simplices[i].IsForward( tgtUV, _node, face, helper, refSign ); int nbOkAfter = 0; for ( unsigned i = 0; i < _simplices.size(); ++i ) - nbOkAfter += _simplices[i].IsForward( newPos, face, helper, refSign ); + nbOkAfter += _simplices[i].IsForward( newPos, _node, face, helper, refSign ); if ( nbOkAfter < nbOkBefore ) + { + // if ( isCentroidal ) + // return Smooth( badNb, surface, helper, refSign, !isCentroidal, set3D ); + badNb += _simplices.size() - nbOkBefore; return false; + } SMDS_FacePosition* pos = static_cast( _node->GetPosition() ); pos->SetUParameter( newPos.X() ); diff --git a/src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.cxx b/src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.cxx index 1a54a4502..e161c9ae2 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.cxx +++ b/src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.cxx @@ -688,3 +688,7 @@ QString StdMeshersGUI_CartesianParamCreator::storeParams() const return ""; } +QString StdMeshersGUI_CartesianParamCreator::helpPage() const +{ + return "cartesian_algo_page.html#cartesian_hyp_anchor"; +} diff --git a/src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.h b/src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.h index a35608f88..7654f26ac 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.h +++ b/src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.h @@ -125,7 +125,8 @@ public: StdMeshersGUI_CartesianParamCreator( const QString& aHypType ); virtual ~StdMeshersGUI_CartesianParamCreator(); - virtual bool checkParams( QString& ) const; + virtual bool checkParams( QString& ) const; + virtual QString helpPage() const; protected: virtual QFrame* buildFrame(); diff --git a/src/StdMeshersGUI/StdMeshers_msg_en.ts b/src/StdMeshersGUI/StdMeshers_msg_en.ts index 8a5d055b5..8564f2323 100644 --- a/src/StdMeshersGUI/StdMeshers_msg_en.ts +++ b/src/StdMeshersGUI/StdMeshers_msg_en.ts @@ -165,7 +165,8 @@ SMESH_FACES_WO_LAYERS - Faces without layers + Faces without layers +(inlets and oulets) SMESH_MAX_LENGTH_TITLE diff --git a/src/StdMeshersGUI/StdMeshers_msg_fr.ts b/src/StdMeshersGUI/StdMeshers_msg_fr.ts index 1f2374414..9c9352a4e 100755 --- a/src/StdMeshersGUI/StdMeshers_msg_fr.ts +++ b/src/StdMeshersGUI/StdMeshers_msg_fr.ts @@ -139,6 +139,10 @@ SMESH_MAX_LENGTH_HYPOTHESIS Longueur maximale + + SMESH_CARTESIAN_PARAMS_HYPOTHESIS + Paramètres de Body Fitting + SMESH_USE_PREESTIMATED_LENGTH Utiliser la longueur pré-estimée @@ -157,16 +161,21 @@ SMESH_STRETCH_FACTOR - Facteur d'échelle + Facteur d'échelle SMESH_FACES_WO_LAYERS - Faces sans couche limite + Faces sans couche limite +(entrées et sorties) SMESH_MAX_LENGTH_TITLE Construction de l'hypothèse + + SMESH_CARTESIAN_PARAMS_TITLE + Construction de l'hypothèse + SMESH_MAX_ELEMENT_AREA_HYPOTHESIS Aire maximale d'une maille @@ -434,4 +443,42 @@ Editer + + StdMeshersGUI_CartesianParamCreator + + THRESHOLD + Seuil + + + AXIS_X + Axe X + + + AXIS_Y + Axe Y + + + AXIS_Z + Axe Z + + + + StdMeshersGUI::GridAxisTab + + GRID_DEF_MODE + Mode de définition + + + SPACING + Espacement + + + INSERT + Insérer + + + COORD_STEP + Pas + + diff --git a/src/Tools/Makefile.am b/src/Tools/Makefile.am index 92083da94..96b92e3cf 100644 --- a/src/Tools/Makefile.am +++ b/src/Tools/Makefile.am @@ -25,6 +25,4 @@ # include $(top_srcdir)/adm_local/unix/make_common_starter.am -SUBDIRS = MeshCut - -DIST_SUBDIRS = MeshCut +SUBDIRS = MeshCut padder diff --git a/src/Tools/MeshCut/Makefile.am b/src/Tools/MeshCut/Makefile.am index 62a1d8a4e..c1cecffd9 100644 --- a/src/Tools/MeshCut/Makefile.am +++ b/src/Tools/MeshCut/Makefile.am @@ -45,11 +45,15 @@ MeshCut_LDFLAGS = $(MED2_LIBS) $(HDF5_LIBS) UIPY_FILES = MeshCutDialog.py -BUILT_SOURCES = $(UIPY_FILES) -bin_SCRIPTS = $(UIPY_FILES) meshcut_plugin.py -clean-local: - rm -f $(UIPY_FILES) -EXTRA_DIST += MeshCutDialog.ui meshcut_plugin.py + +if SMESH_ENABLE_GUI + dist_salomescript_SCRIPTS = meshcut_plugin.py + nodist_salomescript_SCRIPTS = $(UIPY_FILES) +endif + +CLEANFILES = $(UIPY_FILES) + +EXTRA_DIST += $(UIPY_FILES:%.py=%.ui) %.py : %.ui - pyuic4 $< -o $@ + $(PYUIC) $< -o $@ diff --git a/src/Tools/padder/Makefile.am b/src/Tools/padder/Makefile.am new file mode 100644 index 000000000..6f1623464 --- /dev/null +++ b/src/Tools/padder/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS = meshjob spadderpy unittests resources doc + +EXTRA_DIST = README.txt diff --git a/src/Tools/padder/README.txt b/src/Tools/padder/README.txt new file mode 100644 index 000000000..2ecebb32c --- /dev/null +++ b/src/Tools/padder/README.txt @@ -0,0 +1,38 @@ + + +PADDER overview +--------------- + +PADDER is an algorithm that creates a set of particules called a "discrete mesh". +The particules are characterized by a location in space and a weight that can be considered +as the radius of a sphere whose center is the location of the particule. + +Discrete meshes are typically used to modelize civil components in rapid dynamic +computation problems (seisms, chocs). These components consists in concrete parts +embedding steal bares for reinforcement. These parts are input to the algorithm +as standard finite elements meshes. The cells of theses meshes drive the location +and sizing of particules. + +In the med representation, a discrete mesh is described as MED_BALL elements. +A MED_BALL element is defined by a location and a radius. + +PADDER plugin +------------- + +This directory provides SMESH with a SALOME plugin that can be used to define +and then run a PADDER execution. The inputs are the FE meshes that describe +the concrete parts and steal bares parts. The output is a discrete mesh +containing MED_BALL elements. + +A graphical interface is used to drive the user for data input and computation +supervision (the algorithm may last more than an hour long), and finally the publication +of the resulting mesh (when succeed) in the SALOME study. + +Technically speaking, the PADDER plugin consists in: + +* a SALOME component MESHJOB that do the computation job (wrapper to the padder executable program) +* a graphical interface composed of two dialog windows +* a configuration mechanism (data file and read function), to define + the computation resource (a SALOME resource + the software configuration of the padder executable + program on this resource) +* an integration file (salomeplugin.py) diff --git a/src/Tools/padder/doc/Makefile.am b/src/Tools/padder/doc/Makefile.am new file mode 100755 index 000000000..fa2d6f82e --- /dev/null +++ b/src/Tools/padder/doc/Makefile.am @@ -0,0 +1,39 @@ +# Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# Author : Guillaume Boulant (EDF/R&D) + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +EXTRA_DIST += images input + +# +# The simplest way to extend the documentation of SMESH with the +# documentation for PADDER is to add path to the padder documentation +# in the SMESH gui documentation (see the doxyfile). +# + +# For test purpose, we let the user generate a local dosygen +# documentation including only the local pages +# +test_docs: doxyfile + echo "===========================================" ; \ + echo "Generating PADDER documentation" ; \ + echo "===========================================" ; \ + $(DOXYGEN) doxyfile ; diff --git a/src/Tools/padder/doc/doxyfile.in b/src/Tools/padder/doc/doxyfile.in new file mode 100755 index 000000000..8f2aa2ac2 --- /dev/null +++ b/src/Tools/padder/doc/doxyfile.in @@ -0,0 +1,77 @@ +# Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "SALOME Mesh User's Guide" +OUTPUT_DIRECTORY = . +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +TAB_SIZE = 5 + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES + +#--------------------------------------------------------------------------- +#Input related options +#--------------------------------------------------------------------------- +INPUT = @srcdir@/input +FILE_PATTERNS = *.doc +EXCLUDE = +IMAGE_PATH = @srcdir@/images +EXAMPLE_PATH = @top_srcdir@/src/SMESH_SWIG + +#--------------------------------------------------------------------------- +#HTML related options +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = . +HTML_HEADER = @top_builddir@/doc/salome/gui/SMESH/static/header.html +HTML_FOOTER = @top_srcdir@/doc/salome/gui/SMESH/static/footer.html +HTML_STYLESHEET = @top_srcdir@/doc/salome/gui/SMESH/static/doxygen.css +TOC_EXPAND = YES +DISABLE_INDEX = NO +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 300 + +#--------------------------------------------------------------------------- +#SORT related options +#--------------------------------------------------------------------------- +SORT_GROUP_NAMES = NO + + +#--------------------------------------------------------------------------- +#LaTeX related option +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +EXTRA_PACKAGES = amsmath + +#--------------------------------------------------------------------------- +#RTF related options +#--------------------------------------------------------------------------- +GENERATE_RTF = NO + +SEARCHENGINE = YES diff --git a/src/Tools/padder/doc/images/SMESH_spadder_end.png b/src/Tools/padder/doc/images/SMESH_spadder_end.png new file mode 100644 index 000000000..12e2b7cf2 Binary files /dev/null and b/src/Tools/padder/doc/images/SMESH_spadder_end.png differ diff --git a/src/Tools/padder/doc/images/SMESH_spadder_inputdialog_concrete.png b/src/Tools/padder/doc/images/SMESH_spadder_inputdialog_concrete.png new file mode 100644 index 000000000..ed0a8a72c Binary files /dev/null and b/src/Tools/padder/doc/images/SMESH_spadder_inputdialog_concrete.png differ diff --git a/src/Tools/padder/doc/images/SMESH_spadder_inputdialog_start.png b/src/Tools/padder/doc/images/SMESH_spadder_inputdialog_start.png new file mode 100644 index 000000000..8725d7165 Binary files /dev/null and b/src/Tools/padder/doc/images/SMESH_spadder_inputdialog_start.png differ diff --git a/src/Tools/padder/doc/images/SMESH_spadder_inputdialog_steelbar.png b/src/Tools/padder/doc/images/SMESH_spadder_inputdialog_steelbar.png new file mode 100644 index 000000000..8e692dcff Binary files /dev/null and b/src/Tools/padder/doc/images/SMESH_spadder_inputdialog_steelbar.png differ diff --git a/src/Tools/padder/doc/images/SMESH_spadder_menu.png b/src/Tools/padder/doc/images/SMESH_spadder_menu.png new file mode 100644 index 000000000..e89140690 Binary files /dev/null and b/src/Tools/padder/doc/images/SMESH_spadder_menu.png differ diff --git a/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_compute_finished.png b/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_compute_finished.png new file mode 100644 index 000000000..e29cf5634 Binary files /dev/null and b/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_compute_finished.png differ diff --git a/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_compute_ready.png b/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_compute_ready.png new file mode 100644 index 000000000..f86790b0c Binary files /dev/null and b/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_compute_ready.png differ diff --git a/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_compute_running.png b/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_compute_running.png new file mode 100644 index 000000000..b3c9ef169 Binary files /dev/null and b/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_compute_running.png differ diff --git a/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_published.png b/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_published.png new file mode 100644 index 000000000..19e1ae71f Binary files /dev/null and b/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_published.png differ diff --git a/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_start.png b/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_start.png new file mode 100644 index 000000000..45ba1a097 Binary files /dev/null and b/src/Tools/padder/doc/images/SMESH_spadder_plugindialog_start.png differ diff --git a/src/Tools/padder/doc/images/SMESH_spadder_start.png b/src/Tools/padder/doc/images/SMESH_spadder_start.png new file mode 100644 index 000000000..160da9d26 Binary files /dev/null and b/src/Tools/padder/doc/images/SMESH_spadder_start.png differ diff --git a/src/Tools/padder/doc/input/padder_userguide.doc b/src/Tools/padder/doc/input/padder_userguide.doc new file mode 100644 index 000000000..d92f85ef6 --- /dev/null +++ b/src/Tools/padder/doc/input/padder_userguide.doc @@ -0,0 +1,139 @@ +/*! + +\page padder_userguide_page Use the padder SMESH Plugin + +-# \ref S1_PADDER +-# \ref S2_PADDER +-# \ref S3_PADDER + +\section S1_PADDER The PADDER Algorithm + +PADDER is an algorithm that creates a set of particules called a "discrete mesh". +The particules are characterized by a location in space and a weight that can be considered +as the radius of a sphere whose center is the location of the particule. + +Discrete meshes are typically used to modelize civil components in rapid dynamic +computation problems (seisms, chocs). These components consists in concrete parts +embedding steal bares for reinforcement. These parts are input to the algorithm +as standard finite elements meshes. The cells of theses meshes drive the location +and sizing of particules. + +In the med representation, a discrete mesh is described as MED_BALL elements. +A MED_BALL element is defined by a location and a radius. + +\section S2_PADDER The PADDER SALOME plugin + +The PADDER algoritm is integrated in the module SMESH as a SALOME +plugin. This section illustrates how to use this plugin to create a +discrete mesh. + +In this example, we suppose that two standard meshes (Finite Elements +Meshes) have been created and publish in the study to modelize the +concrete part (here with the name "concrete") and the steal bars part +(here with the name "ferrail"): + +\image html SMESH_spadder_start.png + +The PADDER plugin can be invoked from the SMESH plugins menu, as +illustrated on the figure below: + +\image html SMESH_spadder_menu.png + +When you clic on the "PADDER mesher" item, the graphical interface of +the PADDER plugin appears: + +\image html SMESH_spadder_plugindialog_start.png + +This interface invites you to specify input data by pressing the button +"Input". This command opens the Input dialog box to specify the list +of meshes and the type of the selected meshes (to be choosen between +"concrete" or "steelbar" using the combobox on the right side of the +input line): + +\image html SMESH_spadder_inputdialog_start.png + +In the figure below, the mesh with name "concrete" has been selected +in the study and added in the list of input file as a "concrete +mesh". You have to input the mesh in the dialog using the rounded +arrow icon, then specify a group name (the name of the group of +MED_BALL created for this mesh in the resulting mesh), and finnaly +clic on the "Add" icon: + +\image html SMESH_spadder_inputdialog_concrete.png + +Then, the mesh with name "ferrail" is selected and added to the list +as a "steelbar mesh": + +\image html SMESH_spadder_inputdialog_steelbar.png + +The input dialog box can be validated toreturn to the main plugin +interface. The "Compute" button is now enable, indicating that the +problem is ready to be computed: + +\image html SMESH_spadder_plugindialog_compute_ready.png + +The command "Compute" start the job. The progression can be requested +using the command "Refresh". In the figure below, the job is still +running: + +\image html SMESH_spadder_plugindialog_compute_running.png + +Finally, the job is finished and the result is ready to be published +in the SALOME study: + +\image html SMESH_spadder_plugindialog_compute_finished.png + +Clic on the command "Publish" to explicitly import the resulting med +file in SMESH and published the resulting mesh in the SALOME study: + +\image html SMESH_spadder_plugindialog_published.png + +Note that this mesh contains one group for each of the input mesh. A +group with the name specified in the input dialog has been defined for +the set of MED_BALL created from the corresponding input mesh: + +\image html SMESH_spadder_end.png + +\section S3_PADDER Configuring the plugin + +The configuration of the plugin consists in specifying the location of +the padder executable program for each of the SALOME resource (at +least for the localhost resource). This specification is done in the +file padder.cfg, located in the plugin installation folder +(i.e. /plugins): + +\code +# This section specify the configurations to be used respectively for +# the local execution and the remote execution. The value for 'local' +# and 'remote' keys must be the name of a configuration section in +# this file. The default key must specify a value between "local" or +# "remote" to indicate the user preference. +[resources] +local = localhost +remote = nepal + +[preferences] +defaultres = local + +# The following sections defines the available configurations. +# The name of the section can be choosen arbitrary. But the value of +# the resname key MUST be the name of a SALOME resource defined in the +# catalog of resources (CatalogResources.xml). + +# For each section: +# - resname : the name of the SALOME resource to be used in this configuration +# - binpath : the path to the padder executable program on this resource +# - envpath : the path to the environment file on this resource +[localhost] +resname = localhost +binpath = /home/.programs/salome/workspace/V6_4_BR/SMESH/install/share/salome/resources/smesh/padderexe/padder.exe +envpath = /home/.programs/salome/workspace/V6_4_BR/SMESH/install/share/salome/resources/smesh/padderexe/envPadder.sh + +[nepal] +resname = nepal@nepal +binpath = /usr/local/bin/padder.exe +envpath = /usr/local/share/envPadder.sh +\endcode + +*/ + diff --git a/src/Tools/padder/meshjob/Makefile.am b/src/Tools/padder/meshjob/Makefile.am new file mode 100644 index 000000000..26bf6ee9b --- /dev/null +++ b/src/Tools/padder/meshjob/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = idl impl diff --git a/src/Tools/padder/meshjob/idl/MESHJOB.idl b/src/Tools/padder/meshjob/idl/MESHJOB.idl new file mode 100644 index 000000000..dc423189b --- /dev/null +++ b/src/Tools/padder/meshjob/idl/MESHJOB.idl @@ -0,0 +1,126 @@ +// Copyright (C) 2011 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// Authors : Guillaume Boulant (EDF) - 31/01/2011 + +#ifndef _MESHJOB_IDL_ +#define _MESHJOB_IDL_ + +#include "SALOME_Exception.idl" +#include "SALOME_Component.idl" + +// +// This interface is used for mesh job submission from within the +// SALOME plugin for PADDER. +// +module MESHJOB +{ + + // + // Structure to transmit the parameters requiered for the job to run + // the executable program on the target resource. See configure + // service. + // + struct ConfigParameter { + string resname; // The name of the SALOME resource to be used + string binpath; // The path of the executable program on this resource + string envpath; // The path of the environment file on this resource + }; + + // + // This set of specification defines the data structure used to + // initialize a job on a specific resource, then supervise the job + // and finally retrieve the result data. + // + + // This defines the set of temporary folders used by the jobmanager + // when executing a job (may depends on the job). + struct MeshJobPaths + { + string local_inputdir; + string local_resultdir; + string remote_workdir; + }; + + // This defines the possible types for a job parameter + enum FileType {MED_CONCRETE, MED_STEELBAR}; + + // This defines a single parameter for the job initialization (a med file) + struct MeshJobParameter + { + string file_name; + FileType file_type; + string group_name; + }; + + // This defines a set of parameters for the job initialization + typedef sequence MeshJobParameterList; + + // This defines the result data of a job + struct MeshJobResults + { + string results_dirname; + string outputmesh_filename; + string status; + }; + + // This defines the possible states of a job + enum MeshJobState {CREATED, IN_PROCESS, QUEUED, RUNNING, PAUSED, FINISHED, ERROR}; + + // + // This interface defines the computation services of the component + // + + interface MeshJobManager: Engines::EngineComponent + { + + /*! Add a resource configuration, identified by the string + configId and characterized by the parameters in + configParameter */ + boolean configure(in string configId, in MESHJOB::ConfigParameter configParameter) + raises (SALOME::SALOME_Exception); + + /*! Initialize a smesh computation job and return the job identifier */ + long initialize(in MESHJOB::MeshJobParameterList meshJobParameterList, in string configId) + raises (SALOME::SALOME_Exception); + + /*! Submit the job execution and return true if submission is OK */ + boolean start(in long jobId) + raises (SALOME::SALOME_Exception); + + /*! Request the launch manager for the state of the specified job */ + string getState(in long jobId) + raises (SALOME::SALOME_Exception); + + /*! Request the launch manager for downloading the results */ + MeshJobResults finalize(in long jobid) + raises (SALOME::SALOME_Exception); + + /*! Clean all data associated to this job and remove the job from the launch manager */ + boolean clean(in long jobId) + raises (SALOME::SALOME_Exception); + + /*! Returns the set of temporary folders used by the job instance */ + MeshJobPaths getPaths(in long jobId) + raises (SALOME::SALOME_Exception); + + }; + +}; + +#endif // _MESHJOB_IDL_ diff --git a/src/Tools/padder/meshjob/idl/Makefile.am b/src/Tools/padder/meshjob/idl/Makefile.am new file mode 100644 index 000000000..1f6ae9af2 --- /dev/null +++ b/src/Tools/padder/meshjob/idl/Makefile.am @@ -0,0 +1,86 @@ +# Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# This Makefile is responsible of generating the client and server +# implementation of IDL interfaces for both C++ and python usage. +# The building process of the C++ files is in charge of each source +# package and then is not manage here. +# +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +BUILT_SOURCES = MESHJOBSK.cc +IDL_FILES = MESHJOB.idl + +# For test purpose, we add a little component: +BUILT_SOURCES += SPADDERPluginTestSK.cc +IDL_FILES += SPADDERPluginTest.idl + +salomeidl_DATA = $(IDL_FILES) + +lib_LTLIBRARIES = libSalomeIDLSPADDER.la +libSalomeIDLSPADDER_la_SOURCES = +nodist_libSalomeIDLSPADDER_la_SOURCES = $(BUILT_SOURCES) +nodist_salomeinclude_HEADERS= $(IDL_FILES:%idl=%hh) + +OMNIORB_CXXFLAGS=@OMNIORB_CXXFLAGS@ @OMNIORB_INCLUDES@ +OMNIORB_LIBS=@OMNIORB_LIBS@ + +libSalomeIDLSPADDER_la_CXXFLAGS = \ + $(KERNEL_CXXFLAGS) \ + $(OMNIORB_CXXFLAGS) \ + -I. + +libSalomeIDLSPADDER_la_LIBADD = \ + $(KERNEL_LDFLAGS) -lSalomeIDLKernel \ + $(OMNIORB_LIBS) + + +# These variables defines the building process of CORBA files +IDLCXXFLAGS = \ + -bcxx -I. \ + @OMNIORB_IDLCXXFLAGS@ \ + -I$(KERNEL_ROOT_DIR)/idl/salome + +IDLPYFLAGS = \ + -I. \ + @OMNIORB_IDLPYFLAGS@ \ + -I$(KERNEL_ROOT_DIR)/idl/salome + +########################################################## +SUFFIXES = .idl .hh SK.cc + +%SK.cc %.hh : %.idl + $(OMNIORB_IDL) $(IDLCXXFLAGS) $< + +%_idl.py : %.idl + $(OMNIORB_IDL) $(IDLPYFLAGS) $< + +CLEANFILES = *.hh *SK.cc *.py *.hxx *.cxx + +EXTRA_DIST += $(IDL_FILES) + +install-data-local: $(IDL_FILES) + $(INSTALL) -d $(DESTDIR)$(salomepythondir) + ls $^ | while read file; do \ + $(OMNIORB_IDL) $(IDLPYFLAGS) -C$(DESTDIR)$(salomepythondir) $$file ; \ + done + +uninstall-local: + rm -rf $(DESTDIR)$(salomepythondir)/* + diff --git a/src/Tools/padder/meshjob/idl/SPADDERPluginTest.idl b/src/Tools/padder/meshjob/idl/SPADDERPluginTest.idl new file mode 100644 index 000000000..6f04f0104 --- /dev/null +++ b/src/Tools/padder/meshjob/idl/SPADDERPluginTest.idl @@ -0,0 +1,46 @@ +// Copyright (C) 2011 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// Authors : Guillaume Boulant (EDF) - 31/01/2011 + +#ifndef _SPADDERPLUGINTEST_IDL_ +#define _SPADDERPLUGINTEST_IDL_ + +#include "SALOME_Exception.idl" +#include "SALOME_Component.idl" + +module SPADDERPluginTest { + + // + // ======================================================================== + // Thi module defines an interface provided for testing the usage + // of SPADDERPlugin components and underlying classes from within a + // C++ unit test running in a SALOME container (easy to run from a + // python client).. + // ======================================================================== + // + + interface SPADDERPluginTester: Engines::EngineComponent + { + void demo(in double a,in double b,out double c) raises (SALOME::SALOME_Exception); + boolean testkernel() raises (SALOME::SALOME_Exception); + boolean testsmesh(in long studyId) raises (SALOME::SALOME_Exception); + }; +}; + +#endif // _SPADDERPLUGINTEST_IDL_ diff --git a/src/Tools/padder/meshjob/impl/Makefile.am b/src/Tools/padder/meshjob/impl/Makefile.am new file mode 100644 index 000000000..a1cc70129 --- /dev/null +++ b/src/Tools/padder/meshjob/impl/Makefile.am @@ -0,0 +1,71 @@ + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +AM_CFLAGS=$(SALOME_INCLUDES) -fexceptions + +lib_LTLIBRARIES= libMeshJobManagerEngine.la + +salomeinclude_HEADERS= \ + MeshJobManager_i.hxx + + +# ============================================================= +# Definition of MeshJobManagerEngine construction +# ============================================================= +libMeshJobManagerEngine_la_SOURCES = \ + MeshJobManager_i.cxx + +LIBXML_LIBS=@LIBXML_LIBS@ +KERNEL_CXXFLAGS=@KERNEL_CXXFLAGS@ + +libMeshJobManagerEngine_la_CXXFLAGS = \ + -I$(top_builddir)/src/Tools/padder/meshjob/idl $(KERNEL_CXXFLAGS) \ + @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ @LIBXML_INCLUDES@ + +libMeshJobManagerEngine_la_FFLAGS = -fexceptions +libMeshJobManagerEngine_la_LDFLAGS = \ + $(top_builddir)/src/Tools/padder/meshjob/idl/libSalomeIDLSPADDER.la \ + @KERNEL_LDFLAGS@ -lSalomeContainer -lSalomeKernelHelpers -lSalomeLifeCycleCORBA \ + @LIBXML_LIBS@ + +# ============================================================= +# Definition of the SPADDERPluginTester engine construction +# ============================================================= +lib_LTLIBRARIES += libSPADDERPluginTesterEngine.la + +libSPADDERPluginTesterEngine_la_SOURCES = \ + SPADDERPluginTester_i.hxx \ + SPADDERPluginTester_i.cxx + +nodist_libSPADDERPluginTesterEngine_la_SOURCES = + +libSPADDERPluginTesterEngine_la_CXXFLAGS = \ + -I$(top_builddir)/src/Tools/padder/meshjob/idl $(KERNEL_CXXFLAGS) \ + @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ @LIBXML_INCLUDES@ + +libSPADDERPluginTesterEngine_la_FFLAGS = -fexceptions +libSPADDERPluginTesterEngine_la_LIBADD = \ + $(top_builddir)/src/Tools/padder/meshjob/idl/libSalomeIDLSPADDER.la \ + @KERNEL_LDFLAGS@ -lSalomeContainer -lSalomeKernelHelpers \ + @LIBXML_LIBS@ + + +# For testing SMESH +# +libSPADDERPluginTesterEngine_la_CXXFLAGS += \ + @GEOM_CXXFLAGS@ @MED_CXXFLAGS@ \ + -I$(top_builddir)/idl \ + -I$(top_srcdir)/src/SMESH \ + -I$(top_srcdir)/src/SMESH_I \ + -I$(top_srcdir)/src/SMESHDS \ + -I$(top_srcdir)/src/SMDS \ + -I$(top_srcdir)/src/SMESHUtils \ + $(VTK_INCLUDES) $(CAS_CPPFLAGS) $(BOOST_CPPFLAGS) + +libSPADDERPluginTesterEngine_la_LIBADD += \ + $(top_builddir)/src/SMESH/libSMESHimpl.la \ + $(top_builddir)/src/SMESH_I/libSMESHEngine.la \ + $(top_builddir)/src/SMESHDS/libSMESHDS.la \ + $(top_builddir)/src/SMDS/libSMDS.la \ + $(top_builddir)/src/SMESHUtils/libSMESHUtils.la + diff --git a/src/Tools/padder/meshjob/impl/MeshJobManager_i.cxx b/src/Tools/padder/meshjob/impl/MeshJobManager_i.cxx new file mode 100644 index 000000000..beb25fdec --- /dev/null +++ b/src/Tools/padder/meshjob/impl/MeshJobManager_i.cxx @@ -0,0 +1,621 @@ +// Copyright (C) 2011 EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// Authors : Guillaume Boulant (EDF) - 01/03/2011 +#ifdef WIN32 +#include +#include +#else +#include +#endif + +#include "MeshJobManager_i.hxx" + +#include +#include CORBA_SERVER_HEADER(SALOME_Exception) + + +#include "Basics_Utils.hxx" // For standard logging +#undef LOG +#include "SALOME_KernelServices.hxx" // For CORBA logging +#undef LOG + +#define LOG STDLOG + +// +// ==================================================================== +// General purpose helper functions (to put elsewhere at least) +// ==================================================================== +// + +/*! + * This function must be used to associate a datetime tag to a job + */ + +#ifndef WIN32 +static long timetag() { + timeval tv; + gettimeofday(&tv,0); + long tag = tv.tv_usec + tv.tv_sec*1000000; + return tag; +} +#endif + +/*! + * This function returns true if the string text starts with the string + * token. + */ +static bool myStartsWith(const std::string& text,const std::string& token){ + if(text.length() < token.length()) + return false; + return (text.compare(0, token.length(), token) == 0); +} + +// +// ==================================================================== +// Constructor/Destructor +// ==================================================================== +// +MeshJobManager_i::MeshJobManager_i(CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + PortableServer::ObjectId * contId, + const char *instanceName, + const char *interfaceName) + : Engines_Component_i(orb, poa, contId, instanceName, interfaceName) +{ + LOG("Activating MESHJOB::MeshJobManager object"); + _thisObj = this ; + _id = _poa->activate_object(_thisObj); + + _salomeLauncher = KERNEL::getSalomeLauncher(); + if(CORBA::is_nil(_salomeLauncher)){ + LOG("The SALOME launcher can't be reached ==> STOP"); + throw KERNEL::createSalomeException("SALOME launcher can't be reached"); + } + + _resourcesManager = KERNEL::getResourcesManager(); + if(CORBA::is_nil(_resourcesManager)){ + LOG("The SALOME resource manager can't be reached ==> STOP"); + throw KERNEL::createSalomeException("The SALOME resource manager can't be reached"); + } +} + +MeshJobManager_i::~MeshJobManager_i() { + LOG("MeshJobManager_i::~MeshJobManager_i()"); +} + +// +// ==================================================================== +// Helper functions to deals with the local and remote file systems +// ==================================================================== +// +#include // to get the file streams +#ifdef WNT +#include // to get _splitpath +#include // to get _mkdir +#else +#include // to get basename +#include // to get mkdir +#include // to get mkdir options +#endif + +#include // to get system and getenv + +static std::string OUTPUTFILE("output.med"); +static std::string DATAFILE("data.txt"); +static std::string SCRIPTFILE("padder.sh"); +static std::string SEPARATOR(" "); + +static std::string USER(getenv("USER")); +static std::string LOCAL_INPUTDIR("/tmp/spadder.local.inputdir."+USER); +static std::string LOCAL_RESULTDIR("/tmp/spadder.local.resultdir."+USER); +static std::string REMOTE_WORKDIR("/tmp/spadder.remote.workdir."+USER); + +/*! + * This function creates the padder text input file containing the + * input data (list of filenames and groupnames) and returns the path + * of the created file. This function is the one that knows the format + * of the padder input file. If the input file format changes, then + * this function (and only this one) should be updated. + */ +const char * MeshJobManager_i::_writeDataFile(std::vector listConcreteMesh, + std::vector listSteelBarMesh) { +#ifdef WIN32 + _mkdir(LOCAL_INPUTDIR.c_str()); +#else + mkdir(LOCAL_INPUTDIR.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); +#endif + + // Make it static so that it's allocated once (constant name) + static std::string * dataFilename = new std::string(LOCAL_INPUTDIR+"/"+DATAFILE); + std::ofstream dataFile(dataFilename->c_str()); + + // We first specify the concrete mesh data (filename and groupname) + std::string line; +#ifdef WIN32 + char fname[ _MAX_FNAME ]; + _splitpath( listConcreteMesh[0].file_name, NULL, NULL, fname, NULL ); + char* bname = &fname[0]; +#else + char* bname = basename(listConcreteMesh[0].file_name); +#endif + line = std::string(bname) + " " + std::string(listConcreteMesh[0].group_name); + dataFile << line.c_str() << std::endl; + // Note that we use here the basename because the files are supposed + // to be copied in the REMOTE_WORKDIR for execution. + + // The, we can specify the steelbar mesh data, starting by the + // number of meshes + int nbSteelBarMesh=listSteelBarMesh.size(); + line = std::string("nbSteelbarMesh") + SEPARATOR + ToString(nbSteelBarMesh); + dataFile << line.c_str() << std::endl; + for (int i=0; ic_str(); +} + +/*! + * This function creates a shell script that runs padder whith the + * specified data file, and returns the path of the created script + * file. The config id is used to retrieve the path to the binary file + * and other required files. + */ +const char* MeshJobManager_i::_writeScriptFile(const char * dataFileName, const char * configId) { +#ifdef WIN32 + _mkdir(LOCAL_INPUTDIR.c_str()); +#else + mkdir(LOCAL_INPUTDIR.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); +#endif + + // Make it static so that it's allocated once (constant name) + static std::string * scriptFilename = new std::string(LOCAL_INPUTDIR+"/"+SCRIPTFILE); + + char * binpath = _configMap[configId].binpath; + char * envpath = _configMap[configId].envpath; + +#ifdef WIN32 + char fname[ _MAX_FNAME ]; + _splitpath( dataFileName, NULL, NULL, fname, NULL ); + const char* bname = &fname[0]; +#else + const char* bname = basename(dataFileName); +#endif + + + std::ofstream script(scriptFilename->c_str()); + script << "#!/bin/sh" << std::endl; + script << "here=$(dirname $0)" << std::endl; + script << ". " << envpath << std::endl; + script << binpath << " $here/" << bname << std::endl; + // Note that we use the basename of the datafile because all data + // files are supposed to have been copied in the REMOTE_WORKDIR. + script.close(); + return scriptFilename->c_str(); +} + +// +// ==================================================================== +// Functions to initialize and supervise the mesh computation job +// ==================================================================== +// +bool MeshJobManager_i::configure(const char *configId, + const MESHJOB::ConfigParameter & configParameter) +{ + beginService("MeshJobManager_i::configure"); + + _configMap[configId] = configParameter; + + LOG("Adding configuration for " << configId); + LOG("- binpath = " << _configMap[configId].binpath); + LOG("- envpath = " << _configMap[configId].envpath); + + endService("MeshJobManager_i::configure"); + return true; +} + +long MeshJobManager_i::JOBID_UNDEFINED = -1; + +/*! Initialize a smesh computation job and return the job identifier */ +CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobParameterList & meshJobParameterList, + const char * configId) +{ + beginService("MeshJobManager_i::initialize"); + + // + // We first analyse the CORBA sequence to store data in C++ vectors + // + std::vector listConcreteMesh; + std::vector listSteelBarMesh; + for(CORBA::ULong i=0; iremote_workdir = (REMOTE_WORKDIR + "." + ToString(jobDatetimeTag)).c_str(); + + // + // Then, we have to create the padder input data file. This input + // data is a text file containing the list of file names and group + // names. + // + const char * dataFilename = this->_writeDataFile(listConcreteMesh, listSteelBarMesh); + LOG("dataFilename = " << dataFilename); + const char * scriptFilename = this->_writeScriptFile(dataFilename, configId); + LOG("scriptFilename = " << scriptFilename); + + // + // Then, the following instructions consists in preparing the job + // parameters to request the SALOME launcher for creating a new + // job. + // + Engines::JobParameters_var jobParameters = new Engines::JobParameters; + jobParameters->job_type = CORBA::string_dup("command"); + // CAUTION: the job_file must be a single filename specifying a + // self-consistent script to be executed without any argument on the + // remote host. + jobParameters->job_file = CORBA::string_dup(scriptFilename); + + // + // Specification of the working spaces: + // + // - local_directory: can be used to specify where to find the input + // files on the local resource. It's optionnal if you specify the + // absolute path name of input files. + // + // - result_directory: must be used to specify where to download the + // output files on the local resources + // + // - work_directory: must be used to specify the remote directory + // where to put all the stuff to run the job. Note that the job + // will be executed from within this directory, i.e. a change + // directory toward this working directory is done by the batch + // system before running the specified job script. + // + jobParameters->local_directory = CORBA::string_dup(""); + jobParameters->result_directory = CORBA::string_dup(jobPaths->local_resultdir); + jobParameters->work_directory = CORBA::string_dup(jobPaths->remote_workdir); + + // We specify the input files that are required to execute the + // job_file. If basenames are specified, then the files are supposed + // to be located in local_directory. + int nbFiles = listSteelBarMesh.size()+2; + // The number of input file is: + // (nb. of steelbar meshfile) + // + (1 concrete meshfile) + // + (1 padder input file) + // = nb steelbar meshfile + 2 + jobParameters->in_files.length(nbFiles); + jobParameters->in_files[0] = CORBA::string_dup(listConcreteMesh[0].file_name); + for (int i=0; iin_files[1+i] = CORBA::string_dup(listSteelBarMesh[i].file_name); + } + jobParameters->in_files[1+listSteelBarMesh.size()] = CORBA::string_dup(dataFilename); + // Note that all these input files will be copied in the + // REMOTE_WORKDIR on the remote host + + // Then, we have to specify the existance of an output + // filenames. The path is supposed to be a path on the remote + // resource, i.e. where the job is executed. + jobParameters->out_files.length(1); + std::string outputfile_name = std::string(jobPaths->remote_workdir)+"/"+OUTPUTFILE; + jobParameters->out_files[0] = CORBA::string_dup(outputfile_name.c_str()); + + // CAUTION: the maximum duration has to be set with a format like "hh:mm" + jobParameters->maximum_duration = CORBA::string_dup("01:00"); + jobParameters->queue = CORBA::string_dup(""); + + // Setting resource and additionnal properties (if needed) + // The resource parameters can be initiated from scratch, for + // example by specifying the values in hard coding: + // >>> + //jobParameters->resource_required.name = CORBA::string_dup("localhost"); + //jobParameters->resource_required.hostname = CORBA::string_dup("localhost"); + //jobParameters->resource_required.mem_mb = 1024 * 10; + //jobParameters->resource_required.nb_proc = 1; + // <<< + // But it's better to initiate these parameters from a resource + // definition known by the resource manager. This ensures that the + // resource will be available: + //const char * resourceName = "localhost"; + //const char * resourceName = "boulant@claui2p1"; + //const char * resourceName = "nepal@nepal"; + const char * resourceName = _configMap[configId].resname; + Engines::ResourceDefinition * resourceDefinition = _resourcesManager->GetResourceDefinition(resourceName); + // CAUTION: This resource should have been defined in the + // CatalogResource.xml associated to the SALOME application. + // + // Then, the values can be used to initiate the resource parameters + // of the job: + jobParameters->resource_required.name = CORBA::string_dup(resourceDefinition->name.in()); + // CAUTION: the additionnal two following parameters MUST be + // specified explicitly, because they are not provided by the + // resource definition: + jobParameters->resource_required.mem_mb = resourceDefinition->mem_mb; + jobParameters->resource_required.nb_proc = resourceDefinition->nb_proc_per_node; + // CAUTION: the parameter mem_mb specifies the maximum memory value + // that could be allocated for executing the job. This takes into + // account not only the data that could be loaded by the batch + // process but also the linked dynamic library. + // + // A possible problem, for exemple in the case where you use the ssh + // emulation of a batch system, is to get an error message as below + // when libBatch try to run the ssh command: + // + // ## /usr/bin/ssh: error while loading shared libraries: libcrypto.so.0.9.8: failed + // ## to map segment from shared object: Cannot allocate memory + // + // In this exemple, the mem_mb was set to 1MB, value that is not + // sufficient to load the dynamic libraries linked to the ssh + // executable (libcrypto.so in the error message). + // + // So, even in the case of a simple test shell script, you should + // set this value at least to a standard threshold as 500MB + + int jobId = JOBID_UNDEFINED; + try { + jobId = _salomeLauncher->createJob(jobParameters); + // We register the datetime tag of this job + _jobDateTimeMap[jobId]=jobDatetimeTag; + _jobPathsMap[jobId] = jobPaths; + } + catch (const SALOME::SALOME_Exception & ex) { + LOG("SALOME Exception in createJob !" <launchJob(jobId); + } + catch (const SALOME::SALOME_Exception & ex) { + LOG("SALOME Exception in createJob !" <getJobState(jobId); + } + catch (const SALOME::SALOME_Exception & ex) + { + LOG("SALOME Exception in getJobState !"); + state = ex.details.text; + } + catch (const CORBA::SystemException& ex) + { + LOG("Receive SALOME System Exception: " << ex); + state="SALOME System Exception - see logs"; + } + LOG("jobId="<getPaths(jobId); + std::string local_resultdir(jobPaths->local_resultdir); + result->results_dirname = local_resultdir.c_str(); + try + { + _salomeLauncher->getJobResults(jobId, local_resultdir.c_str()); + + // __BUG__: to prevent from a bug of the MED driver (SALOME + // 5.1.5), we change the basename of the output file to force the + // complete reloading of data by the med driver. + long jobDatetimeTag = _jobDateTimeMap[jobId]; + std::string outputFileName = "output"+ToString(jobDatetimeTag)+".med"; + rename((local_resultdir+"/"+OUTPUTFILE).c_str(), (local_resultdir+"/"+outputFileName).c_str()); + + result->outputmesh_filename = outputFileName.c_str(); + result->status = "OK"; + } + catch (const SALOME::SALOME_Exception & ex) + { + LOG("SALOME Exception in getResults !"); + result->status = "SALOME Exception in getResults !"; + } + catch (const CORBA::SystemException& ex) + { + LOG("Receive CORBA System Exception: " << ex); + result->status = "Receive CORBA System Exception: see log"; + } + endService("MeshJobManager_i::getResults"); + return result; +} + + +/*! Clean all data associated to this job and remove the job from the launch manager */ +bool MeshJobManager_i::clean(CORBA::Long jobId) { + beginService("MeshJobManager_i::clean"); + + // __GBO__ WORK IN PROGRESS: we just clean the temporary local + // directories. The remote working directories are tag with the + // execution datetime and the we prevent the task from conflict + // with files of another task. + MESHJOB::MeshJobPaths * jobPaths = this->getPaths(jobId); + if ( jobPaths == NULL ) return false; + + // WARN: !!!!! + // For safety reason (and prevent from bug that could erase the + // filesystem), we cancel the operation in the case where the + // directories to delete are not in the /tmp folder. + std::string shell_command("rm -rf "); + std::string inputdir(jobPaths->local_inputdir); + std::string resultdir(jobPaths->local_resultdir); + if ( !myStartsWith(inputdir,"/tmp/") ) { + LOG("WRN: The directory "< * MeshJobManager_i::_getResourceNames() { + + // + // These part is just to control the available resources + // + Engines::ResourceParameters params; + KERNEL::getLifeCycleCORBA()->preSet(params); + + Engines::ResourceList * resourceList = _resourcesManager->GetFittingResources(params); + Engines::ResourceDefinition * resourceDefinition = NULL; + LOG("### resource list:"); + std::vector* resourceNames = new std::vector(); + if (resourceList) { + for (int i = 0; i < resourceList->length(); i++) { + const char* aResourceName = (*resourceList)[i]; + resourceNames->push_back(std::string(aResourceName)); + LOG("resource["<GetResourceDefinition(aResourceName); + LOG("protocol["<protocol); + } + } + + // Note: a ResourceDefinition is used to create a batch configuration + // in the Launcher. This operation is done at Launcher startup from + // the configuration file CatalogResources.xml provided by the + // SALOME application. + // In the code instructions, you just have to choose a resource + // configuration by its name and then define the ResourceParameters + // that specify additionnal properties for a specific job submission + // (use the attribute resource_required of the JobParameters). + + return resourceNames; +} + + +// +// ========================================================================== +// Factory services +// ========================================================================== +// +extern "C" +{ + PortableServer::ObjectId * MeshJobManagerEngine_factory( CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + PortableServer::ObjectId * contId, + const char *instanceName, + const char *interfaceName) + { + LOG("PortableServer::ObjectId * MeshJobManagerEngine_factory()"); + MeshJobManager_i * myEngine = new MeshJobManager_i(orb, poa, contId, instanceName, interfaceName); + return myEngine->getId() ; + } +} diff --git a/src/Tools/padder/meshjob/impl/MeshJobManager_i.hxx b/src/Tools/padder/meshjob/impl/MeshJobManager_i.hxx new file mode 100644 index 000000000..a45206639 --- /dev/null +++ b/src/Tools/padder/meshjob/impl/MeshJobManager_i.hxx @@ -0,0 +1,81 @@ +// Copyright (C) 2011 EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// Authors : Guillaume Boulant (EDF) - 01/03/2011 + +#ifndef _MESHJOBMANAGER_HXX_ +#define _MESHJOBMANAGER_HXX_ + +// include the stubs generating from MESHJOB.idl +#include +#include CORBA_SERVER_HEADER(MESHJOB) +#include CORBA_SERVER_HEADER(SALOME_Component) +#include "SALOME_Component_i.hxx" + +#include "SALOME_Launcher.hxx" +#include +#include +#include + +class MeshJobManager_i: public virtual POA_MESHJOB::MeshJobManager, + public Engines_Component_i +{ +public: + MeshJobManager_i(CORBA::ORB_ptr orb, PortableServer::POA_ptr poa, + PortableServer::ObjectId * contId, + const char *instanceName, const char *interfaceName); + ~MeshJobManager_i(); + + bool configure (const char *configId, + const MESHJOB::ConfigParameter & configParameter); + CORBA::Long initialize (const MESHJOB::MeshJobParameterList & meshJobParameterList, + const char *configId); + bool start (CORBA::Long jobId); + char* getState (CORBA::Long jobId); + MESHJOB::MeshJobResults * finalize(CORBA::Long jobId); + MESHJOB::MeshJobPaths * getPaths(CORBA::Long jobId); + bool clean (CORBA::Long jobId); + + static long JOBID_UNDEFINED; + +private: + Engines::SalomeLauncher_var _salomeLauncher; + Engines::ResourcesManager_var _resourcesManager; + + // This maps the config identifier to the config parameters. A + // config is a resource with additionnal data specifying the + // location of the binary program to be executed by the task + std::map _configMap; + + // This maps a job identifier to its associated datetime tag. When + // a job is created during the initialize function, a datetime tag + // is associated to this job and can be used to characterized files + // and directories associated to this job. + std::map _jobDateTimeMap; + std::map _jobPathsMap; + + const char* _writeDataFile (std::vector listConcreteMesh, + std::vector listSteelBarMesh); + const char* _writeScriptFile (const char * dataFileName, const char * configId); + + std::vector * _getResourceNames(); + +}; + +#endif + diff --git a/src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.cxx b/src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.cxx new file mode 100644 index 000000000..3bfa98bb6 --- /dev/null +++ b/src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.cxx @@ -0,0 +1,155 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com + +#include "SPADDERPluginTester_i.hxx" + +#include +#include + +// For standard logging +#include "Basics_Utils.hxx" + +// +// ========================================================================== +// Implementation of the SPADDER component interface +// ========================================================================== +// +using namespace std; + +/*! + * Constructor for component "SPADDER" instance + */ +SPADDERPluginTester_i::SPADDERPluginTester_i(CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + PortableServer::ObjectId * contId, + const char *instanceName, + const char *interfaceName) + : Engines_Component_i(orb, poa, contId, instanceName, interfaceName) +{ + LOG("Activating SPADDERPluginTester_i::SPADDERPluginTester object"); + _thisObj = this ; + _id = _poa->activate_object(_thisObj); +} + +//! Destructor for component "SPADDER" instance +SPADDERPluginTester_i::~SPADDERPluginTester_i() +{ + std::cerr << "SPADDERPluginTester destruction" << std::endl; +} + +/*! + * This test is just to check the component SPADDER. + */ +void SPADDERPluginTester_i::demo(CORBA::Double a,CORBA::Double b,CORBA::Double& c) +{ + beginService("SPADDERPluginTester_i::demo"); + try { + //BODY + + std::cerr << "a: " << a << std::endl; + std::cerr << "b: " << b << std::endl; + c=a+b; + std::cerr << "c: " << c << std::endl; + + } + catch ( const SALOME_Exception & ex) { + SALOME::ExceptionStruct es; + es.text=CORBA::string_dup(ex.what()); + es.type=SALOME::INTERNAL_ERROR; + throw SALOME::SALOME_Exception(es); + } + catch ( const SALOME::SALOME_Exception & ex) { + throw; + } + catch (...) { + std::cerr << "unknown exception" << std::endl; + SALOME::ExceptionStruct es; + es.text=CORBA::string_dup(" unknown exception"); + es.type=SALOME::INTERNAL_ERROR; + throw SALOME::SALOME_Exception(es); + } + endService("SPADDERPluginTester_i::demo"); +} + +#ifdef LOG +#undef LOG +#endif + +#include +#include "SALOME_Launcher.hxx" +bool SPADDERPluginTester_i::testkernel() +{ + beginService("SPADDERPluginTester_i::testplugin"); + + Engines::SalomeLauncher_ptr salomeLauncher = KERNEL::getSalomeLauncher(); + + endService("SPADDERPluginTester_i::testplugin"); + return true; +} + + +#include +#include +#include +#include CORBA_CLIENT_HEADER(SALOMEDS) + +#include + +/*! + * This test checks the constructor of the basic classes of the SMESH + * plugin for PADDER. + */ +bool SPADDERPluginTester_i::testsmesh(CORBA::Long studyId) +{ + beginService("SPADDERPluginTester_i::testsmesh"); + + // Resolve the SMESH engine and the SALOME study + // _WARN_ The SMESH engine should have been loaded first + SMESH_Gen_i* smeshGen_i = SMESH_Gen_i::GetSMESHGen(); + CORBA::Object_var anObject = smeshGen_i->GetNS()->Resolve("/myStudyManager"); + SALOMEDS::StudyManager_var aStudyMgr = SALOMEDS::StudyManager::_narrow(anObject); + SALOMEDS::Study_var myStudy = aStudyMgr->GetStudyByID(studyId); + + // + // _MEM_ CAUTION: SMESH_Gen define a data structure for local usage + // while SMESH_Gen_i is the implementation of the SMESH_Gen IDL + // interface. + // + + endService("SPADDERPluginTester_i::testsmesh"); + return true; +} + +// +// ========================================================================== +// Factory services +// ========================================================================== +// +extern "C" +{ + PortableServer::ObjectId * SPADDERPluginTesterEngine_factory( CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + PortableServer::ObjectId * contId, + const char *instanceName, + const char *interfaceName) + { + MESSAGE("PortableServer::ObjectId * SPADDERPluginTesterEngine_factory()"); + SPADDERPluginTester_i * myEngine = new SPADDERPluginTester_i(orb, poa, contId, instanceName, interfaceName); + return myEngine->getId() ; + } +} diff --git a/src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.hxx b/src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.hxx new file mode 100644 index 000000000..85a02a94f --- /dev/null +++ b/src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.hxx @@ -0,0 +1,47 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// Authors : Guillaume Boulant (EDF) - 01/02/2011 + +#ifndef _SPADDER_PLUGINTESTER_HXX_ +#define _SPADDER_PLUGINTESTER_HXX_ + +// include the stubs generating from SPADDERPluginTest.idl +#include +#include CORBA_SERVER_HEADER(SPADDERPluginTest) +#include +#include "SALOME_Component_i.hxx" + +class SPADDERPluginTester_i: + public virtual POA_SPADDERPluginTest::SPADDERPluginTester, + public Engines_Component_i +{ +public: + SPADDERPluginTester_i(CORBA::ORB_ptr orb, PortableServer::POA_ptr poa, + PortableServer::ObjectId * contId, + const char *instanceName, const char *interfaceName); + virtual ~SPADDERPluginTester_i(); + + void demo(CORBA::Double a,CORBA::Double b,CORBA::Double& c); + bool testkernel(); + bool testsmesh(CORBA::Long studyId); + +}; + +#endif + diff --git a/src/Tools/padder/meshjob/impl/testhelper.hxx b/src/Tools/padder/meshjob/impl/testhelper.hxx new file mode 100644 index 000000000..76e233258 --- /dev/null +++ b/src/Tools/padder/meshjob/impl/testhelper.hxx @@ -0,0 +1,46 @@ +#ifndef __TESTHELPER_HXX__ +#define __TESTHELPER_HXX__ + +// >>> +// WARN: this file is DEPRECATED and/or should be used for test +// purpose only. The PADDER configuration is now read in a +// configuration file (padder.cfg). +// <<< + +#include // Standard C include (for getenv) +#include +#include + +/*! + * This function returns the module SMESH installation root directory + * as a string. + */ +static std::string SMESH_ROOT_DIR() { + static std::string * smesh_root_dir; + if ( smesh_root_dir == NULL ) { + char * SMESH_ROOT_DIR = getenv("SMESH_ROOT_DIR"); + if ( SMESH_ROOT_DIR == NULL ) { + smesh_root_dir = new std::string(""); + } + else { + smesh_root_dir = new std::string(SMESH_ROOT_DIR); + } + } + return *smesh_root_dir; +} + +/*! Relative path of the directory containing data and exe for tests */ +static std::string PADDEREXE_RPATH("/share/salome/resources/smesh/padderexe"); +/*! Absolute path of the directory containing data and exe for tests */ +static std::string PADDEREXE_APATH(SMESH_ROOT_DIR()+PADDEREXE_RPATH); +/*! Absolute path of the exe shell script for tests */ +static std::string PADDEREXE_SCRIPT_FILENAME(PADDEREXE_APATH+"/padder.sh"); + + +static int testssh_using_system() { + const char * cmd = "/usr/bin/ssh claui2p1 -l boulant 'cd /tmp && ./runCommand_padder_Mon_Feb_28_14_28_36_2011.sh'"; + int result = system(cmd); + return result; +} + +#endif // __TESTHELPER_HXX__ diff --git a/src/Tools/padder/resources/Makefile.am b/src/Tools/padder/resources/Makefile.am new file mode 100644 index 000000000..b17082ea8 --- /dev/null +++ b/src/Tools/padder/resources/Makefile.am @@ -0,0 +1,7 @@ + +SUBDIRS = appligen padderexe + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +mysalomeresdir=$(salomeresdir) +dist_mysalomeres_DATA = SPADDERCatalog.xml diff --git a/src/Tools/padder/resources/SPADDERCatalog.xml b/src/Tools/padder/resources/SPADDERCatalog.xml new file mode 100644 index 000000000..4e4cafe42 --- /dev/null +++ b/src/Tools/padder/resources/SPADDERCatalog.xml @@ -0,0 +1,16 @@ + + + + + + + + + + MeshJobManager + + + SPADDERPluginTester + + + diff --git a/src/Tools/padder/resources/appligen/CatalogResources.xml b/src/Tools/padder/resources/appligen/CatalogResources.xml new file mode 100644 index 000000000..4900b5fd3 --- /dev/null +++ b/src/Tools/padder/resources/appligen/CatalogResources.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + diff --git a/src/Tools/padder/resources/appligen/Makefile.am b/src/Tools/padder/resources/appligen/Makefile.am new file mode 100644 index 000000000..91f408ce9 --- /dev/null +++ b/src/Tools/padder/resources/appligen/Makefile.am @@ -0,0 +1,39 @@ +# Copyright (C) 2011 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +appligendir = $(salomeresdir)/appligen + +dist_appligen_DATA= \ + appli-splashscreen.jpg \ + SalomeApp.xml \ + CatalogResources.xml + +nodist_appligen_DATA= \ + envappli.sh \ + config_appli.xml + +nodist_appligen_SCRIPTS= \ + appligen.sh + +envappli.sh: + $(srcdir)/genenv.sh envappli.sh + +EXTRA_DIST += README.txt genenv.sh +CLEANFILES = envappli.sh diff --git a/src/Tools/padder/resources/appligen/README.txt b/src/Tools/padder/resources/appligen/README.txt new file mode 100644 index 000000000..6fb376cba --- /dev/null +++ b/src/Tools/padder/resources/appligen/README.txt @@ -0,0 +1,24 @@ +This package defines a build procedure that creates a +set of files ready to use to generate a SALOME application +embedding this module. + +The files are created in the directory: + + /share/salome/resources//appligen + +Where is the installation directory of the module. + +To generate a SALOME application, just change directory to go +where you want to install the SALOME application and type the +following command in a standard shell (the SALOME environment +is not required, all paths are "hard" coded in the script): + + $ /share/salome/resources//appligen/appligen.sh + +This script generates an application in a directory ./appli. +Then type the following command to run a SALOME application +embedding your module: + + $ ./appli/runAppli -k + + diff --git a/src/Tools/padder/resources/appligen/SalomeApp.xml b/src/Tools/padder/resources/appligen/SalomeApp.xml new file mode 100644 index 000000000..87ca36264 --- /dev/null +++ b/src/Tools/padder/resources/appligen/SalomeApp.xml @@ -0,0 +1,40 @@ + +
    + + + + + + + + + + + + + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + +
    +
    diff --git a/src/Tools/padder/resources/appligen/appli-splashscreen.jpg b/src/Tools/padder/resources/appligen/appli-splashscreen.jpg new file mode 100644 index 000000000..45377b17d Binary files /dev/null and b/src/Tools/padder/resources/appligen/appli-splashscreen.jpg differ diff --git a/src/Tools/padder/resources/appligen/appligen.sh.in b/src/Tools/padder/resources/appligen/appligen.sh.in new file mode 100755 index 000000000..8ce6821b0 --- /dev/null +++ b/src/Tools/padder/resources/appligen/appligen.sh.in @@ -0,0 +1,31 @@ +#!/bin/sh +# +# This script installs or updates a SALOME application for testing the +# PADDER plugin for SMESH. The application is installed in the +# directory ./appli. The configuration file is supposed to be adapted +# to your own environment (see config_appli.xml). +# +# To run this script, you should have first configure your +# shell with the SALOME environment, i.e. source the files +# prerequis.sh and envSalome.sh (or equivalent) that fit +# your configuration. You can alternatively customize the env.sh file +# to fit your SALOME environment and let the script do the job (see +# source below). +# +# (gboulant - 3/2/2011) +# + +here=$(dirname $0) + +# +# Run the appli_gen.py +# +APPLIDIR="./appli" +@KERNEL_ROOT_DIR@/bin/salome/appli_gen.py --prefix=$APPLIDIR --config=$here/config_appli.xml + +# +# Copy customized configuration files in the application +# +cp $here/SalomeApp.xml $APPLIDIR/. +cp $here/CatalogResources.xml $APPLIDIR/. +cp @prefix@/plugins/envPlugins.sh $APPLIDIR/env.d/. diff --git a/src/Tools/padder/resources/appligen/config_appli.xml.in b/src/Tools/padder/resources/appligen/config_appli.xml.in new file mode 100644 index 000000000..2f77f06a3 --- /dev/null +++ b/src/Tools/padder/resources/appligen/config_appli.xml.in @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/Tools/padder/resources/appligen/genenv.sh b/src/Tools/padder/resources/appligen/genenv.sh new file mode 100755 index 000000000..0a77ddc16 --- /dev/null +++ b/src/Tools/padder/resources/appligen/genenv.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# This script creates a source file that defines a SALOME shell +# environment. We assume here that the SALOME environment has been +# previously set, so that the env command get all environment +# variables required for building and executing SALOME. We talk +# about third party software programs and libraries. The environment +# variables defining SALOME module are exluded (i.e. *_ROOT_DIR) +# because they are automatically set when generating a SALOME application.. +# +# The argument is the filepath to be created. +# + +if [ $# == 1 ]; then + ENVAPPLI_SH=$1 +else + ENVAPPLI_SH=envappli.sh +fi + +function header { + echo "#" + echo "# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + echo "# THIS FILE IS GENERATED from the shell environment used to build the SALOME module." + echo "# IT SHOULD NOT BE EDITED, it is generated for the need of the SALOME application " + echo "# that embeds the module (for test purposes). " + echo "# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + echo "#" +} +header > $ENVAPPLI_SH +env | grep -v -e PWD -e SalomeAppConfig -e _ROOT_DIR | while read f; do + key=$(echo $f | cut -d"=" -f1) + value=$(echo $f | cut -d"=" -f2-) + + # if the key is a path (LD_LIBRARY_PATH, PATH and PYTHONPATH) then + # we must extends the variable. + if [ $key == "LD_LIBRARY_PATH" -o $key == "PATH" -o $key == "PYTHONPATH" ]; then + echo export $key=\"$value:\$$key\" + else + echo export $key=\"$value\" + fi +done >> $ENVAPPLI_SH diff --git a/src/Tools/padder/resources/padderexe/Makefile.am b/src/Tools/padder/resources/padderexe/Makefile.am new file mode 100644 index 000000000..f3e8d9c4d --- /dev/null +++ b/src/Tools/padder/resources/padderexe/Makefile.am @@ -0,0 +1,44 @@ +# Copyright (C) 2011 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# Author(s): Guillaume Boulant (23/03/2011) +# + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +mysalomeresdir=$(salomeresdir)/padderexe + +version=med3 +notinstall_version=med2 + +# We install the padder.exe program and the files required for testing +# the execution from within the installation directory +dist_mysalomeres_SCRIPTS = \ + $(version)/padder.exe \ + padder.sh + +nodist_mysalomeres_SCRIPTS = \ + envPadder.sh + +dist_mysalomeres_DATA = \ + $(version)/data.txt \ + $(version)/concrete.med \ + $(version)/ferraill.med + +NOT_USED_FILES = buildparticules.py particules.png +EXTRA_DIST += $(notinstall_version) $(NOT_USED_FILES) diff --git a/src/Tools/padder/resources/padderexe/buildparticules.py b/src/Tools/padder/resources/padderexe/buildparticules.py new file mode 100755 index 000000000..b3826b227 --- /dev/null +++ b/src/Tools/padder/resources/padderexe/buildparticules.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +import geompy +import salome +salome.salome_init() +theStudy = salome.myStudy +geompy.init_geom(theStudy) + +filename="/home/gboulant/development/projets/salome/SPADDER/spadder/resources/padderexe/REF_spheres.dat.xyz" +file=open(filename,'rb') + +import csv +datalines = csv.reader(file, delimiter=' ') +i=0 +for row in datalines: + x=float(row[0]) + y=float(row[1]) + z=float(row[2]) + rayon=float(row[3])/2. + + centre = geompy.MakeVertex(x, y, z) + particule = geompy.MakeSpherePntR(centre, rayon) + geompy.addToStudy( particule, 'p'+str(i) ) + i+=1 diff --git a/src/Tools/padder/resources/padderexe/envPadder.sh.in b/src/Tools/padder/resources/padderexe/envPadder.sh.in new file mode 100644 index 000000000..31c84a598 --- /dev/null +++ b/src/Tools/padder/resources/padderexe/envPadder.sh.in @@ -0,0 +1,8 @@ +#!/bin/sh +# This script defines the shell extension required for executing the +# padder executable program on the localhost (for test purposes) + +MED_ROOT="@MED2HOME@" +HDF_ROOT="@HDF5HOME@" +CGAL_ROOT="/usr" +export LD_LIBRARY_PATH="$MED_ROOT/lib:$HDF_ROOT/lib:$CGAL_ROOT/lib:$LD_LIBRARY_PATH" diff --git a/src/Tools/padder/resources/padderexe/med2/REF_FinalEDMesh.med b/src/Tools/padder/resources/padderexe/med2/REF_FinalEDMesh.med new file mode 100644 index 000000000..0072943fd Binary files /dev/null and b/src/Tools/padder/resources/padderexe/med2/REF_FinalEDMesh.med differ diff --git a/src/Tools/padder/resources/padderexe/med2/REF_spheres.dat.xyz b/src/Tools/padder/resources/padderexe/med2/REF_spheres.dat.xyz new file mode 100644 index 000000000..d511c3821 --- /dev/null +++ b/src/Tools/padder/resources/padderexe/med2/REF_spheres.dat.xyz @@ -0,0 +1,4097 @@ +0.00782971 0.00837862 0.188345 0.00802045 1 0 +0.0154087 0.00912149 0.0068625 0.00705037 1 0 +0.00853443 0.191571 0.191485 0.00877202 1 0 +0.00831246 0.192152 0.00532739 0.00567024 1 0 +0.392373 0.0103119 0.19108 0.00782777 1 0 +0.382012 0.00642122 0.00627707 0.00662885 1 0 +0.393074 0.19203 0.194472 0.00590232 1 0 +0.387096 0.187644 0.0151337 0.0125061 1 0 +0.0107355 0.00843302 0.0669608 0.00880526 1 0 +0.0130229 0.0100937 0.135407 0.0113355 1 0 +0.0066941 0.0661207 0.191646 0.00802792 1 0 +0.0103253 0.133553 0.192494 0.00822172 1 0 +0.0101874 0.193228 0.0665758 0.00716313 1 0 +0.0128864 0.189676 0.134999 0.0115899 1 0 +0.00969349 0.0657247 0.00859538 0.00955034 1 0 +0.00859049 0.132642 0.00899122 0.00969975 1 0 +0.385203 0.00809838 0.0668407 0.00880575 1 0 +0.386131 0.0107039 0.135508 0.0115306 1 0 +0.393588 0.0665381 0.191132 0.00775488 1 0 +0.386598 0.134808 0.191052 0.0102175 1 0 +0.389949 0.190842 0.0653571 0.00998665 1 0 +0.389353 0.192011 0.133631 0.00881068 1 0 +0.392783 0.067271 0.00660849 0.00698802 1 0 +0.388304 0.134196 0.0104575 0.0117876 1 0 +0.078446 0.0111886 0.00562685 0.00698503 1 0 +0.15933 0.010178 0.0071953 0.00782222 1 0 +0.239408 0.0117814 0.00838242 0.00902724 1 0 +0.319266 0.0104094 0.0109799 0.0115214 1 0 +0.0801022 0.00839366 0.191955 0.009342 1 0 +0.158855 0.0101758 0.190771 0.00985613 1 0 +0.240059 0.008372 0.19268 0.00811281 1 0 +0.319477 0.00952385 0.189827 0.0109663 1 0 +0.080239 0.184554 0.0107232 0.0118692 1 0 +0.158896 0.189543 0.0104515 0.0111914 1 0 +0.239206 0.192295 0.0114336 0.00824166 1 0 +0.321165 0.189065 0.0198378 0.011684 1 0 +0.0784293 0.189358 0.189415 0.0114984 1 0 +0.158102 0.183775 0.186583 0.0140474 1 0 +0.240505 0.191585 0.192095 0.00878636 1 0 +0.320737 0.187137 0.173616 0.0136636 1 0 +0.0102439 0.0601788 0.110611 0.011165 1 0 +0.00632993 0.0606389 0.0501703 0.00699327 1 0 +0.00886816 0.118481 0.073089 0.00961398 1 0 +0.0084637 0.130613 0.129338 0.0092135 1 0 +0.390636 0.0614183 0.111012 0.010272 1 0 +0.391413 0.0615332 0.0505572 0.0092585 1 0 +0.392479 0.119396 0.0733079 0.00827305 1 0 +0.389389 0.131268 0.129331 0.0113393 1 0 +0.274388 0.0076649 0.0575634 0.00842627 1 0 +0.134941 0.00959236 0.0653354 0.0105187 1 0 +0.0651853 0.00803465 0.0661969 0.00886309 1 0 +0.110295 0.00934566 0.133492 0.010401 1 0 +0.185332 0.0137269 0.132579 0.0147265 1 0 +0.331786 0.0104332 0.0984378 0.0115849 1 0 +0.207876 0.0106516 0.0633744 0.0116242 1 0 +0.261527 0.00924836 0.126979 0.0103371 1 0 +0.274177 0.19319 0.0574857 0.00758089 1 0 +0.135692 0.189732 0.0648955 0.0112128 1 0 +0.0663 0.187677 0.0661222 0.0131058 1 0 +0.109855 0.18853 0.132715 0.0125194 1 0 +0.185773 0.18914 0.131535 0.0118814 1 0 +0.332133 0.189017 0.0978282 0.0121498 1 0 +0.207852 0.192331 0.0632991 0.00864703 1 0 +0.261572 0.192711 0.126344 0.00840316 1 0 +0.0697814 0.106226 0.00960134 0.0108828 1 0 +0.131623 0.0598217 0.0086532 0.00941678 1 0 +0.266788 0.0652192 0.0102618 0.0112281 1 0 +0.340609 0.0648565 0.00796636 0.00886868 1 0 +0.291252 0.132331 0.011155 0.0121409 1 0 +0.215098 0.131697 0.0133923 0.0143177 1 0 +0.19535 0.0639082 0.0075357 0.00848584 1 0 +0.141228 0.128178 0.0122679 0.0132652 1 0 +0.0684398 0.10719 0.184859 0.0147587 1 0 +0.131467 0.0598993 0.189562 0.0112022 1 0 +0.267697 0.0654378 0.191161 0.00979633 1 0 +0.340927 0.0652784 0.190301 0.0106229 1 0 +0.291838 0.133337 0.1901 0.0109407 1 0 +0.216095 0.132971 0.190766 0.0102258 1 0 +0.194717 0.0641122 0.187867 0.0130967 1 0 +0.141036 0.129092 0.188982 0.0120216 1 0 +0.0669682 0.0665113 0.0941136 0.0147587 1 0 +0.0833322 0.143862 0.12175 0.0147587 1 0 +0.189807 0.104641 0.118969 0.0147587 1 0 +0.344502 0.0601456 0.0998379 0.0141213 1 0 +0.274144 0.081421 0.098988 0.0147587 1 0 +0.329187 0.144678 0.0830052 0.0143816 1 0 +0.243586 0.146288 0.0866495 0.0147193 1 0 +0.132914 0.0731836 0.103217 0.0147587 1 0 +0.0428272 0.119038 0.052029 0.0119519 1 0 +0.261979 0.150932 0.146194 0.0117141 1 0 +0.102115 0.140291 0.0526524 0.0147587 1 0 +0.0340305 0.101951 0.155062 0.0129279 1 0 +0.357144 0.101091 0.153465 0.0134399 1 0 +0.187456 0.162108 0.0494275 0.0113731 1 0 +0.232702 0.0552718 0.0430421 0.0140424 1 0 +0.171625 0.0519527 0.049372 0.0140307 1 0 +0.369195 0.0892426 0.0427442 0.0106064 1 0 +0.282643 0.107185 0.149494 0.0143329 1 0 +0.301665 0.113049 0.0909966 0.0106702 1 0 +0.310165 0.138814 0.141503 0.0130046 1 0 +0.343165 0.122885 0.118235 0.0109302 1 0 +0.315644 0.0912562 0.126227 0.0126514 1 0 +0.324143 0.117021 0.176733 0.0108517 1 0 +0.241903 0.0991953 0.191196 0.00904411 1 0 +0.205529 0.0985492 0.193468 0.00687593 1 0 +0.231275 0.0648555 0.192248 0.00804733 1 0 +0.192501 0.0845542 0.159484 0.0113254 1 0 +0.203006 0.118545 0.159484 0.0112056 1 0 +0.228532 0.0851619 0.159484 0.0128027 1 0 +0.0076378 0.159507 0.0697794 0.00794379 1 0 +0.00797419 0.124577 0.101219 0.00825663 1 0 +0.00724401 0.165552 0.0978756 0.0074128 1 0 +0.0416661 0.137341 0.125342 0.0105815 1 0 +0.0416661 0.131346 0.0975119 0.0124504 1 0 +0.0416661 0.171931 0.0942084 0.0143232 1 0 +0.0327151 0.00826481 0.0665097 0.00864515 1 0 +0.0663095 0.0332556 0.0799531 0.00903774 1 0 +0.0334841 0.0332556 0.0803902 0.0122868 1 0 +0.0573668 0.0559547 0.065866 0.00791185 1 0 +0.0567081 0.0226991 0.0517055 0.00704303 1 0 +0.0238827 0.0226991 0.0521425 0.00900202 1 0 +0.342522 0.0625798 0.149919 0.0125448 1 0 +0.350823 0.0806185 0.126652 0.00858079 1 0 +0.348843 0.0830528 0.176733 0.00764718 1 0 +0.363749 0.071594 0.15777 0.00763325 1 0 +0.357428 0.051121 0.130956 0.008721 1 0 +0.355448 0.0535553 0.181037 0.00667593 1 0 +0.0681372 0.08677 0.147057 0.0141747 1 0 +0.0504993 0.0842312 0.124588 0.00972722 1 0 +0.0516683 0.10449 0.177531 0.00716934 1 0 +0.0399296 0.0726263 0.156605 0.00748802 1 0 +0.0563985 0.0549064 0.12613 0.00891438 1 0 +0.0575674 0.0751651 0.179073 0.00997186 1 0 +0.0329075 0.194096 0.0663952 0.00629114 1 0 +0.054239 0.159519 0.0589108 0.0106545 1 0 +0.0214136 0.159519 0.0593479 0.0115942 1 0 +0.0444173 0.141073 0.0412066 0.00615021 1 0 +0.0558291 0.181554 0.0480883 0.00684724 1 0 +0.0230037 0.181554 0.0485254 0.00865493 1 0 +0.305829 0.166343 0.00930025 0.00968747 1 0 +0.310165 0.138814 0.0415026 0.0115073 1 0 +0.294382 0.156927 0.0589093 0.0106354 1 0 +0.275359 0.151063 0.0174067 0.007417 1 0 +0.289788 0.184588 0.0174067 0.00953043 1 0 +0.00594911 0.0607854 0.0803628 0.0061939 1 0 +0.00479756 0.0897179 0.0617091 0.00502066 1 0 +0.00616272 0.0895967 0.0918222 0.00633686 1 0 +0.0334841 0.0926703 0.0836937 0.0109375 1 0 +0.0334841 0.0638087 0.072279 0.0100164 1 0 +0.0334841 0.0638137 0.10221 0.0086386 1 0 +0.38987 0.00500221 0.0329115 0.0052469 1 0 +0.393944 0.0306307 0.0587043 0.00630491 1 0 +0.381303 0.0482723 0.0447202 0.00584722 1 0 +0.381303 0.0177192 0.0528313 0.0073099 1 0 +0.100494 0.0834848 0.190271 0.00999289 1 0 +0.136589 0.094439 0.188634 0.0116715 1 0 +0.10535 0.11814 0.185976 0.0143114 1 0 +0.137312 0.100876 0.151609 0.013982 1 0 +0.132467 0.0667472 0.151609 0.0122049 1 0 +0.10111 0.0901062 0.151609 0.0133919 1 0 +0.196804 0.00564298 0.0979846 0.00597401 1 0 +0.234676 0.00734643 0.0952439 0.0075486 1 0 +0.223513 0.00751701 0.129666 0.00783969 1 0 +0.267589 0.0407105 0.112875 0.0108776 1 0 +0.241081 0.0407105 0.0814703 0.0138234 1 0 +0.230019 0.0407105 0.115571 0.0123786 1 0 +0.395052 0.090127 0.0918997 0.00512988 1 0 +0.394346 0.124977 0.101082 0.00594888 1 0 +0.394125 0.0960045 0.119809 0.00606523 1 0 +0.372251 0.0954827 0.114386 0.0118067 1 0 +0.372251 0.0894874 0.0865558 0.0106283 1 0 +0.372251 0.0606309 0.105072 0.00706064 1 0 +0.240956 0.194533 0.060616 0.00571904 1 0 +0.225802 0.173144 0.0753011 0.00853777 1 0 +0.258741 0.173144 0.0722814 0.00850498 1 0 +0.251581 0.157732 0.0607315 0.00735967 1 0 +0.233797 0.184588 0.049383 0.00834547 1 0 +0.266736 0.184588 0.0463634 0.00513679 1 0 +0.00936532 0.0328331 0.190733 0.00954134 1 0 +0.03956 0.0329435 0.190241 0.00993531 1 0 +0.0229144 0.0549841 0.179073 0.00828957 1 0 +0.223628 0.194435 0.129147 0.00587496 1 0 +0.25231 0.173144 0.106706 0.00865879 1 0 +0.214741 0.173144 0.109401 0.011377 1 0 +0.230868 0.156087 0.11999 0.00925117 1 0 +0.239592 0.182943 0.140046 0.00761219 1 0 +0.202023 0.182943 0.142742 0.00643796 1 0 +0.360114 0.190042 0.16695 0.0101415 1 0 +0.324593 0.172339 0.141503 0.0102159 1 0 +0.364593 0.172339 0.108169 0.0128744 1 0 +0.344574 0.149581 0.121034 0.010329 1 0 +0.37998 0.177242 0.146199 0.00823187 1 0 +0.0750501 0.153331 0.00691301 0.00725809 1 0 +0.0857105 0.12366 0.0263262 0.00879905 1 0 +0.0740611 0.1517 0.0415182 0.00806666 1 0 +0.0576568 0.135069 0.0151921 0.008488 1 0 +0.0630037 0.181554 0.0151921 0.00733111 1 0 +0.100334 0.00507726 0.0657085 0.00540601 1 0 +0.101348 0.0332556 0.0799218 0.0124732 1 0 +0.0888629 0.0482426 0.0678241 0.00969621 1 0 +0.0882042 0.0149869 0.0536635 0.00741779 1 0 +0.123242 0.0149869 0.0536322 0.00573819 1 0 +0.366088 0.00696468 0.116037 0.00721858 1 0 +0.366109 0.00552948 0.0824399 0.00579393 1 0 +0.338439 0.0300728 0.0991444 0.00767144 1 0 +0.372251 0.0300728 0.116586 0.0110535 1 0 +0.372251 0.0300728 0.0832523 0.0110382 1 0 +0.203006 0.118545 0.0594845 0.0120352 1 0 +0.211255 0.0799562 0.0810055 0.0125263 1 0 +0.224453 0.0938606 0.021521 0.0112369 1 0 +0.202163 0.0536123 0.046207 0.00768668 1 0 +0.180716 0.0782967 0.0841705 0.0111456 1 0 +0.193914 0.0922011 0.024686 0.0130531 1 0 +0.394528 0.0305532 0.122124 0.00575726 1 0 +0.385177 0.0516063 0.13619 0.00782689 1 0 +0.385177 0.0210482 0.147704 0.0073708 1 0 +0.0751502 0.105187 0.107932 0.0104693 1 0 +0.0763192 0.125446 0.160875 0.010952 1 0 +0.108123 0.108523 0.112484 0.0110378 1 0 +0.0999413 0.0698475 0.0986656 0.00836315 1 0 +0.165758 0.116605 0.159484 0.0121527 1 0 +0.160914 0.0824757 0.159484 0.013619 1 0 +0.161361 0.0889121 0.111093 0.00836142 1 0 +0.294009 0.0323892 0.189614 0.01061 1 0 +0.304296 0.0653391 0.191657 0.00865693 1 0 +0.330471 0.0324018 0.19251 0.00785154 1 0 +0.302412 0.0509357 0.177837 0.0115737 1 0 +0.26577 0.0512702 0.177837 0.00661967 1 0 +0.187851 0.15232 0.125561 0.0120432 1 0 +0.216697 0.125464 0.102809 0.00941345 1 0 +0.215521 0.154198 0.0680385 0.00864791 1 0 +0.188632 0.133375 0.0841982 0.0112806 1 0 +0.186676 0.181054 0.0907904 0.0113755 1 0 +0.257158 0.00634884 0.0286278 0.00661142 1 0 +0.24115 0.00797505 0.0605706 0.00822542 1 0 +0.223999 0.00751144 0.0314485 0.00773857 1 0 +0.22036 0.0276359 0.0534973 0.00800536 1 0 +0.253299 0.0276359 0.0504777 0.00881505 1 0 +0.0994942 0.063411 0.0470568 0.014322 1 0 +0.132467 0.0667472 0.0516087 0.0130026 1 0 +0.121836 0.0515788 0.072376 0.00981294 1 0 +0.121389 0.0451423 0.0207672 0.00695694 1 0 +0.199897 0.192878 0.195143 0.00502548 1 0 +0.213141 0.191335 0.165953 0.0089279 1 0 +0.17265 0.189447 0.165926 0.0108864 1 0 +0.2707 0.0735521 0.049494 0.0125585 1 0 +0.28673 0.0582431 0.0706498 0.00967816 1 0 +0.283286 0.0503742 0.0211558 0.00766029 1 0 +0.266009 0.0451685 0.0426768 0.00870186 1 0 +0.253423 0.0683464 0.071015 0.0092965 1 0 +0.249979 0.0604775 0.021521 0.0070212 1 0 +0.227566 0.166162 0.00927722 0.00964504 1 0 +0.23789 0.150813 0.0174067 0.0083311 1 0 +0.249788 0.184588 0.0174067 0.00630637 1 0 +0.20183 0.147279 0.0247137 0.00805173 1 0 +0.21747 0.0316523 0.190068 0.010193 1 0 +0.229739 0.0506625 0.177837 0.0108254 1 0 +0.186798 0.0522662 0.181595 0.00590615 1 0 +0.231976 0.0930308 0.108978 0.011216 1 0 +0.245174 0.106935 0.049494 0.00991656 1 0 +0.258865 0.113855 0.0928188 0.00909479 1 0 +0.229895 0.139369 0.0433248 0.0114901 1 0 +0.309323 0.0707833 0.099413 0.00918863 1 0 +0.30326 0.0407105 0.0987195 0.0125128 1 0 +0.269214 0.0591391 0.127331 0.00909719 1 0 +0.304393 0.0485014 0.127756 0.0125593 1 0 +0.298329 0.0184286 0.127063 0.0120348 1 0 +0.342522 0.0625798 0.049919 0.0125044 1 0 +0.353554 0.047792 0.069417 0.00851466 1 0 +0.351574 0.0502263 0.019498 0.00671085 1 0 +0.365901 0.0623405 0.0408701 0.00679192 1 0 +0.356848 0.0746941 0.0712911 0.0085842 1 0 +0.354868 0.0771284 0.0213721 0.00710973 1 0 +0.393665 0.0612623 0.0805882 0.00656835 1 0 +0.372251 0.0606259 0.0751412 0.00928767 1 0 +0.00800775 0.00481281 0.0330032 0.00501284 1 0 +0.00493794 0.0302994 0.058471 0.0051964 1 0 +0.0238827 0.0532522 0.0440314 0.0064865 1 0 +0.388819 0.00982632 0.167372 0.0110774 1 0 +0.359782 0.0103331 0.167339 0.0105166 1 0 +0.360202 0.00555297 0.194979 0.00521289 1 0 +0.307343 0.0732175 0.149494 0.0100654 1 0 +0.297242 0.00716979 0.112559 0.0074196 1 0 +0.262658 0.0184286 0.141219 0.00586963 1 0 +0.252783 0.14861 0.116422 0.00781161 1 0 +0.261506 0.175466 0.136478 0.00659803 1 0 +0.240065 0.158409 0.149762 0.00585704 1 0 +0.280059 0.00504557 0.194484 0.00529663 1 0 +0.291028 0.0109082 0.163718 0.0111851 1 0 +0.250706 0.00816308 0.163779 0.0085333 1 0 +0.251026 0.191692 0.163287 0.00868018 1 0 +0.0742247 0.0530447 0.190726 0.00951869 1 0 +0.105992 0.0295004 0.189733 0.0105254 1 0 +0.121557 0.0494515 0.179666 0.00632887 1 0 +0.0902001 0.0728104 0.179666 0.0112387 1 0 +0.0400163 0.189738 0.166964 0.0104471 1 0 +0.0416661 0.171931 0.127542 0.0126428 1 0 +0.0611786 0.149062 0.142927 0.00777122 1 0 +0.0195125 0.177131 0.148718 0.00844259 1 0 +0.280463 0.194149 0.194111 0.00609663 1 0 +0.30581 0.166488 0.193747 0.00663919 1 0 +0.265709 0.166873 0.191652 0.00860795 1 0 +0.276561 0.141941 0.173097 0.00797356 1 0 +0.118638 0.186606 0.187079 0.0130349 1 0 +0.149567 0.165601 0.18603 0.0143514 1 0 +0.110778 0.164928 0.189958 0.0102913 1 0 +0.112521 0.136216 0.160875 0.0123521 1 0 +0.168005 0.0965757 0.192944 0.00723432 1 0 +0.178652 0.13081 0.193931 0.00640298 1 0 +0.332251 0.0300728 0.149919 0.0103012 1 0 +0.325711 0.00860382 0.149657 0.00892666 1 0 +0.0548977 0.0927747 0.0730713 0.00893812 1 0 +0.0214136 0.118934 0.0626514 0.00597593 1 0 +0.0214136 0.0900721 0.0512367 0.00900762 1 0 +0.321909 0.0476054 0.0710748 0.0096664 1 0 +0.319929 0.0500397 0.0211558 0.00827911 1 0 +0.267936 0.00808185 0.0922081 0.00836643 1 0 +0.27402 0.0407105 0.0784506 0.0113994 1 0 +0.370562 0.0994924 0.193807 0.00632978 1 0 +0.378572 0.117212 0.176733 0.00887554 1 0 +0.378572 0.0838791 0.176733 0.00900273 1 0 +0.0170152 0.0815337 0.132684 0.00868612 1 0 +0.0229144 0.0522088 0.134226 0.00857542 1 0 +0.00714838 0.192871 0.0328516 0.00736289 1 0 +0.0329743 0.189293 0.0327432 0.0108652 1 0 +0.0230037 0.181554 0.0151921 0.00829238 1 0 +0.280033 0.194371 0.00546809 0.00575251 1 0 +0.265391 0.166364 0.00786568 0.00811157 1 0 +0.336844 0.102412 0.0914216 0.0109427 1 0 +0.364593 0.137749 0.10597 0.0106918 1 0 +0.378572 0.115956 0.1412 0.00720476 1 0 +0.160389 0.00646817 0.0988948 0.0067168 1 0 +0.17157 0.00638728 0.0645314 0.00668162 1 0 +0.189822 0.0259764 0.0566623 0.00813572 1 0 +0.17876 0.0259764 0.0907627 0.0123462 1 0 +0.153676 0.0259764 0.057551 0.00815413 1 0 +0.147479 0.00853593 0.0323513 0.00887264 1 0 +0.183736 0.00755407 0.0314761 0.0077984 1 0 +0.378572 0.0811038 0.131886 0.00909792 1 0 +0.00591154 0.132048 0.1648 0.00629393 1 0 +0.0195125 0.142541 0.146519 0.0071908 1 0 +0.0195125 0.143797 0.182052 0.00712555 1 0 +0.0365277 0.128106 0.159583 0.00666505 1 0 +0.0170152 0.116386 0.141999 0.00646397 1 0 +0.0170152 0.117642 0.177531 0.00806451 1 0 +0.370844 0.0324118 0.191016 0.00912187 1 0 +0.134768 0.188691 0.166564 0.0115827 1 0 +0.148015 0.19024 0.132253 0.0100692 1 0 +0.134614 0.171931 0.126952 0.0146729 1 0 +0.097124 0.171931 0.127505 0.00794981 1 0 +0.392841 0.0977101 0.0250466 0.00727379 1 0 +0.394032 0.126426 0.0363921 0.00628753 1 0 +0.384597 0.104036 0.058009 0.00656267 1 0 +0.384597 0.0751744 0.0465943 0.00530318 1 0 +0.384597 0.111288 0.0213721 0.00858782 1 0 +0.390129 0.167151 0.0101153 0.0100334 1 0 +0.360693 0.166517 0.0106686 0.0108482 1 0 +0.361679 0.190338 0.013115 0.00979974 1 0 +0.364593 0.139006 0.0415026 0.0137119 1 0 +0.325829 0.188443 0.149303 0.0118787 1 0 +0.366315 0.193143 0.115659 0.00709951 1 0 +0.330781 0.172339 0.0907281 0.00719079 1 0 +0.393701 0.16717 0.194106 0.00622614 1 0 +0.389212 0.189767 0.166773 0.0104671 1 0 +0.37998 0.143909 0.179532 0.00763044 1 0 +0.119432 0.00577778 0.0058474 0.00598998 1 0 +0.107374 0.00697596 0.0325843 0.00717186 1 0 +0.0953788 0.0149869 0.0207672 0.00746824 1 0 +0.392788 0.0332226 0.193286 0.00688538 1 0 +0.385177 0.0543815 0.181037 0.00675563 1 0 +0.13657 0.124252 0.12036 0.0141879 1 0 +0.227045 0.070749 0.137322 0.0133981 1 0 +0.165758 0.116605 0.0594845 0.010786 1 0 +0.137312 0.100876 0.0516087 0.0146835 1 0 +0.117515 0.106738 0.0779349 0.0111866 1 0 +0.145961 0.122466 0.0858107 0.0144476 1 0 +0.121912 0.13443 0.0263262 0.00836417 1 0 +0.303644 0.0655245 0.00637762 0.0067013 1 0 +0.307343 0.0732175 0.049494 0.0112366 1 0 +0.0898928 0.0528545 0.0188092 0.0112597 1 0 +0.100339 0.0835407 0.00719202 0.00745889 1 0 +0.0681372 0.08677 0.0470568 0.0128114 1 0 +0.0845416 0.103401 0.073383 0.011455 1 0 +0.117068 0.100301 0.0263262 0.0125396 1 0 +0.227947 0.166669 0.192156 0.00820954 1 0 +0.239091 0.141691 0.173097 0.00912766 1 0 +0.217177 0.149168 0.176665 0.00718058 1 0 +0.359991 0.00561588 0.00622086 0.00588961 1 0 +0.330111 0.0325816 0.00548694 0.00583707 1 0 +0.370436 0.0326136 0.00785919 0.00799892 1 0 +0.187721 0.166242 0.0085089 0.00875112 1 0 +0.17892 0.13031 0.0061861 0.00650468 1 0 +0.150608 0.164404 0.0088986 0.00927567 1 0 +0.164583 0.145339 0.0247137 0.0094048 1 0 +0.163348 0.0622665 0.195283 0.0049871 1 0 +0.184104 0.0723527 0.14108 0.0098866 1 0 +0.155211 0.0501878 0.181595 0.00782231 1 0 +0.0323044 0.00983341 0.0328972 0.00998101 1 0 +0.286387 0.145483 0.0848274 0.0107116 1 0 +0.295583 0.147805 0.114599 0.0115574 1 0 +0.268062 0.116176 0.122591 0.0106126 1 0 +0.286606 0.0175326 0.0501124 0.00575424 1 0 +0.393607 0.159806 0.0697236 0.00670458 1 0 +0.392433 0.165936 0.0977602 0.00773155 1 0 +0.364593 0.131754 0.0781394 0.00950111 1 0 +0.364593 0.172339 0.0748359 0.0114168 1 0 +0.370471 0.0987242 0.00887783 0.00900479 1 0 +0.334864 0.104846 0.0415026 0.0144509 1 0 +0.349191 0.11696 0.0628747 0.00991734 1 0 +0.391274 0.191165 0.0995132 0.00895533 1 0 +0.394266 0.165746 0.131262 0.0061074 1 0 +0.212893 0.00607632 0.166473 0.00634648 1 0 +0.225089 0.0184286 0.143914 0.0112197 1 0 +0.0100767 0.166711 0.0104198 0.0102409 1 0 +0.0401862 0.166512 0.0109898 0.0111838 1 0 +0.0402255 0.193994 0.00591644 0.00621158 1 0 +0.0230037 0.148221 0.0151921 0.00783265 1 0 +0.381303 0.0510526 0.019498 0.00780039 1 0 +0.384597 0.0779546 0.0213721 0.00716514 1 0 +0.00795073 0.100327 0.191944 0.00820322 1 0 +0.00729948 0.0984007 0.164901 0.00747012 1 0 +0.0170152 0.0843089 0.177531 0.00831272 1 0 +0.309658 0.0175326 0.0211558 0.00733963 1 0 +0.144786 0.1512 0.0510399 0.0110181 1 0 +0.0398287 0.0100308 0.167135 0.0102105 1 0 +0.0956244 0.00846175 0.166819 0.00882322 1 0 +0.0553841 0.00785993 0.133774 0.00819954 1 0 +0.0783722 0.0216507 0.145704 0.0102551 1 0 +0.0229144 0.0216507 0.14574 0.00846962 1 0 +0.122004 0.0558879 0.131275 0.00867966 1 0 +0.0125628 0.192161 0.168294 0.00802027 1 0 +0.37998 0.142652 0.143999 0.00692701 1 0 +0.234711 0.192608 0.0948239 0.00758701 1 0 +0.267805 0.192014 0.0920019 0.00827455 1 0 +0.141191 0.0409633 0.0454532 0.00814838 1 0 +0.303395 0.00577704 0.0780608 0.00607367 1 0 +0.315845 0.0175326 0.0703813 0.00924845 1 0 +0.00557333 0.165517 0.131393 0.00595387 1 0 +0.134321 0.0365918 0.0844737 0.0102843 1 0 +0.15227 0.0625682 0.0762948 0.00870398 1 0 +0.00610125 0.1259 0.0362767 0.00640747 1 0 +0.0214136 0.126186 0.0260145 0.00861099 1 0 +0.203979 0.135263 0.13615 0.00946628 1 0 +0.0541656 0.130645 0.182052 0.00832584 1 0 +0.0586813 0.122907 0.138406 0.00909749 1 0 +0.0733752 0.190249 0.0328107 0.0100889 1 0 +0.0838829 0.170146 0.0592225 0.00889822 1 0 +0.253452 0.132342 0.00666335 0.00698182 1 0 +0.267364 0.139619 0.0433248 0.0124672 1 0 +0.122838 0.00676448 0.099532 0.00706562 1 0 +0.088942 0.0332556 0.113687 0.0111015 1 0 +0.121915 0.0365918 0.118239 0.010264 1 0 +0.120406 0.00711212 0.193704 0.00641037 1 0 +0.135269 0.00862405 0.166962 0.00889347 1 0 +0.111005 0.0192961 0.146296 0.00582169 1 0 +0.297338 0.00779496 0.0287033 0.00808652 1 0 +0.325794 0.00845973 0.0487937 0.00864908 1 0 +0.187851 0.0523203 0.125561 0.0131926 1 0 +0.182148 0.0200324 0.147672 0.00640389 1 0 +0.10101 0.193895 0.065773 0.00643011 1 0 +0.0885172 0.194105 0.0997932 0.00613151 1 0 +0.123113 0.194109 0.099166 0.00619423 1 0 +0.0744915 0.171931 0.0937713 0.0101514 1 0 +0.10953 0.171931 0.09374 0.0118815 1 0 +0.13666 0.0941074 0.00611892 0.00642099 1 0 +0.156667 0.0902607 0.024686 0.0119912 1 0 +0.303258 0.19412 0.0778613 0.00617833 1 0 +0.297043 0.193387 0.112406 0.00685793 1 0 +0.29511 0.172339 0.104884 0.0122603 1 0 +0.301542 0.172339 0.0704592 0.00991179 1 0 +0.145949 0.0298672 0.194806 0.00545143 1 0 +0.169201 0.0200324 0.181595 0.00717934 1 0 +0.0346919 0.119789 0.0059911 0.0062676 1 0 +0.0560667 0.113033 0.0260145 0.00745023 1 0 +0.39462 0.0641305 0.0251582 0.00571618 1 0 +0.358552 0.127788 0.156265 0.00671995 1 0 +0.22384 0.19136 0.0315576 0.00886931 1 0 +0.197737 0.181054 0.05669 0.00568653 1 0 +0.31648 0.0993063 0.190149 0.010111 1 0 +0.196881 0.194663 0.0976769 0.00566597 1 0 +0.0927236 0.142077 0.0872012 0.00896175 1 0 +0.325551 0.143717 0.179532 0.0103648 1 0 +0.293068 0.0329148 0.00869786 0.00893395 1 0 +0.145887 0.0300695 0.00590849 0.0061642 1 0 +0.163592 0.0622743 0.00591676 0.00618727 1 0 +0.177744 0.0321437 0.00757873 0.00778291 1 0 +0.18341 0.0582102 0.024686 0.00701536 1 0 +0.151823 0.0561318 0.024686 0.00798044 1 0 +0.148058 0.190384 0.0324284 0.00993649 1 0 +0.171705 0.193063 0.0644836 0.0072308 1 0 +0.183703 0.191741 0.0316221 0.00850022 1 0 +0.161592 0.181054 0.0575787 0.00827033 1 0 +0.0334841 0.0332556 0.113723 0.0127761 1 0 +0.177315 0.0318544 0.193179 0.00702079 1 0 +0.00742114 0.00649798 0.100794 0.00672344 1 0 +0.0327225 0.00713169 0.100056 0.00728828 1 0 +0.00670312 0.0301976 0.122088 0.00698302 1 0 +0.360594 0.166754 0.190849 0.00932946 1 0 +0.360458 0.194671 0.1947 0.00561391 1 0 +0.187984 0.166822 0.189677 0.0105794 1 0 +0.0890311 0.0525517 0.126723 0.0104433 1 0 +0.279526 0.0994358 0.191957 0.00838132 1 0 +0.2707 0.0735521 0.149494 0.0128078 1 0 +0.395059 0.132156 0.164748 0.00532758 1 0 +0.0630797 0.13145 0.0868896 0.010546 1 0 +0.297324 0.192975 0.0285702 0.00731488 1 0 +0.256988 0.193627 0.0285966 0.00663241 1 0 +0.159405 0.0365918 0.117685 0.0118586 1 0 +0.148494 0.0192961 0.145743 0.0110561 1 0 +0.155658 0.0566242 0.133204 0.0102794 1 0 +0.347491 0.0177192 0.0687235 0.00944119 1 0 +0.253944 0.133117 0.19163 0.00868888 1 0 +0.160668 0.192288 0.0983666 0.00794803 1 0 +0.162767 0.15232 0.0923495 0.011823 1 0 +0.118921 0.170146 0.0591912 0.00871951 1 0 +0.393862 0.0306371 0.0888131 0.00630879 1 0 +0.0342825 0.0868882 0.194405 0.00582405 1 0 +0.0724711 0.129665 0.0523407 0.00787313 1 0 +0.0114266 0.193846 0.10058 0.00631329 1 0 +0.00798199 0.0330447 0.00607383 0.00636767 1 0 +0.0238827 0.0560324 0.0188092 0.00805161 1 0 +0.225893 0.127786 0.132581 0.011245 1 0 +0.0878774 0.00698675 0.0995188 0.00723216 1 0 +0.359861 0.0100027 0.0325919 0.0101839 1 0 +0.00634885 0.0635272 0.15549 0.00666141 1 0 +0.198913 0.0523203 0.0914608 0.0110048 1 0 +0.316316 0.0979592 0.0127506 0.0129877 1 0 +0.279109 0.0990261 0.00597457 0.00631869 1 0 +0.282643 0.107185 0.049494 0.0141105 1 0 +0.0948512 0.190047 0.166682 0.0103369 1 0 +0.0557363 0.192315 0.133729 0.0080218 1 0 +0.345858 0.133694 0.191225 0.00911709 1 0 +0.291379 0.188532 0.163401 0.0117574 1 0 +0.147955 0.00690015 0.132871 0.00722402 1 0 +0.392977 0.0637462 0.155599 0.00734253 1 0 +0.205744 0.0981554 0.00574847 0.0060839 1 0 +0.213949 0.0598698 0.021521 0.00722832 1 0 +0.119829 0.194369 0.00555227 0.00581835 1 0 +0.110214 0.164362 0.00948955 0.00975918 1 0 +0.241564 0.0986453 0.00619258 0.0064188 1 0 +0.231155 0.0649184 0.00722361 0.00752111 1 0 +0.072516 0.00571679 0.032973 0.00607668 1 0 +0.0398795 0.0325987 0.0100453 0.0102223 1 0 +0.0749134 0.0529824 0.0074804 0.00770916 1 0 +0.034637 0.0863996 0.00611601 0.00636006 1 0 +0.0585358 0.0762134 0.0188092 0.00941862 1 0 +0.0452963 0.0822181 0.0448237 0.00939987 1 0 +0.0328906 0.192731 0.1 0.0074275 1 0 +0.00681689 0.00655054 0.166864 0.00687372 1 0 +0.00498748 0.0997191 0.00470913 0.00492065 1 0 +0.00722114 0.0969544 0.024775 0.00732295 1 0 +0.0214136 0.0928524 0.0260145 0.0106683 1 0 +0.00611892 0.0301864 0.0885671 0.00629176 1 0 +0.00549623 0.0956741 0.119829 0.00569037 1 0 +0.0334841 0.0986656 0.111524 0.0123951 1 0 +0.0742482 0.153988 0.191585 0.0087894 1 0 +0.346052 0.132703 0.0081435 0.00845818 1 0 +0.172624 0.00676555 0.166485 0.00710748 1 0 +0.105188 0.117628 0.00615975 0.0064399 1 0 +0.10855 0.190097 0.0325934 0.0101185 1 0 +0.168432 0.096057 0.00759595 0.00777318 1 0 +0.10551 0.0300778 0.00791612 0.00819381 1 0 +0.253178 0.0328009 0.00693181 0.00723025 1 0 +0.217325 0.0321298 0.00770683 0.00796454 1 0 +0.199642 0.193449 0.00648802 0.00669564 1 0 +0.19968 0.0060719 0.193867 0.00628404 1 0 +0.245174 0.106935 0.149494 0.0121355 1 0 +0.360308 0.190453 0.0326889 0.00972258 1 0 +0.326158 0.191821 0.0485561 0.00837765 1 0 +0.366278 0.195066 0.0822926 0.0051992 1 0 +0.392933 0.100219 0.00558497 0.00577655 1 0 +0.0342897 0.120289 0.194417 0.00586501 1 0 +0.0109856 0.167283 0.18869 0.0111292 1 0 +0.0394183 0.167057 0.191843 0.00833159 1 0 +0.390892 0.190956 0.0327244 0.0093067 1 0 +0.253763 0.0323933 0.190427 0.00989013 1 0 +0.279981 0.00552827 0.00540814 0.00558839 1 0 +0.390994 0.0986796 0.165026 0.00917001 1 0 +0.199351 0.00925291 0.00631537 0.00641028 1 0 +0.339858 0.0978656 0.116162 0.0143915 1 0 +0.291051 0.0839952 0.134791 0.0143838 1 0 +0.0230061 0.123341 0.115559 0.014715 1 0 +0.0519932 0.0216838 0.0700086 0.0118849 1 0 +0.0659504 0.0385772 0.0588947 0.0126856 1 0 +0.0384246 0.0355656 0.0575836 0.0111628 1 0 +0.0413681 0.0154344 0.0520067 0.00993293 1 0 +0.355919 0.0796688 0.144359 0.00987007 1 0 +0.353269 0.0664527 0.133592 0.00738205 1 0 +0.352004 0.0664607 0.170429 0.0103816 1 0 +0.359379 0.058104 0.157686 0.00654738 1 0 +0.0439492 0.0842267 0.143609 0.0103898 1 0 +0.0555715 0.0700535 0.136294 0.00934517 1 0 +0.0493466 0.0863296 0.163824 0.0106386 1 0 +0.0534492 0.0726907 0.152056 0.00677646 1 0 +0.0386384 0.178144 0.0651692 0.0144339 1 0 +0.0476738 0.170827 0.0475964 0.00663684 1 0 +0.0327376 0.19314 0.0513751 0.00696728 1 0 +0.308907 0.158592 0.0460618 0.0088282 1 0 +0.0166338 0.0802439 0.0709789 0.0135577 1 0 +0.0185188 0.0796215 0.097997 0.0135333 1 0 +0.017346 0.0603505 0.0840744 0.0102698 1 0 +0.385086 0.0340574 0.0498343 0.00972602 1 0 +0.388393 0.106695 0.102392 0.0116154 1 0 +0.38536 0.0845969 0.101285 0.00968738 1 0 +0.387865 0.0846269 0.118425 0.00763409 1 0 +0.387009 0.093955 0.0898924 0.00514799 1 0 +0.241671 0.181504 0.0670229 0.0112165 1 0 +0.226608 0.172233 0.0583028 0.00850386 1 0 +0.255964 0.172978 0.0541895 0.00979963 1 0 +0.249612 0.189723 0.0511142 0.00837173 1 0 +0.022717 0.0142507 0.190427 0.00962286 1 0 +0.0407331 0.0149915 0.192019 0.00699943 1 0 +0.235776 0.18609 0.115207 0.0139961 1 0 +0.248867 0.166126 0.126089 0.0122412 1 0 +0.22212 0.171399 0.131059 0.0115699 1 0 +0.229005 0.186785 0.133425 0.0054521 1 0 +0.0851153 0.146493 0.022762 0.0143185 1 0 +0.0669041 0.130177 0.0330515 0.0122099 1 0 +0.063305 0.151289 0.0168905 0.00877187 1 0 +0.0815405 0.0205122 0.0716063 0.012504 1 0 +0.0780966 0.038364 0.0727091 0.00571037 1 0 +0.0957399 0.0321352 0.0575695 0.010599 1 0 +0.105371 0.0143381 0.0549332 0.0098079 1 0 +0.353367 0.0167339 0.0905831 0.0132159 1 0 +0.385155 0.0166265 0.0999075 0.0139561 1 0 +0.210662 0.0770846 0.015566 0.0112815 1 0 +0.389953 0.0388172 0.108549 0.0102772 1 0 +0.374346 0.0517042 0.120709 0.011067 1 0 +0.370621 0.037495 0.137735 0.0114201 1 0 +0.390558 0.0348163 0.13853 0.00953474 1 0 +0.0614848 0.104058 0.127071 0.013075 1 0 +0.0841309 0.110185 0.141854 0.0146546 1 0 +0.313814 0.0452291 0.190212 0.00980316 1 0 +0.292761 0.0517713 0.19146 0.00875362 1 0 +0.21056 0.154445 0.121274 0.0111641 1 0 +0.206882 0.165797 0.0859801 0.014397 1 0 +0.185081 0.158987 0.101408 0.0131654 1 0 +0.240847 0.0199757 0.0656529 0.0122568 1 0 +0.106587 0.047547 0.0623922 0.00885443 1 0 +0.103367 0.0560932 0.0794102 0.0104592 1 0 +0.116016 0.0593138 0.0591628 0.00656649 1 0 +0.117395 0.0483294 0.048068 0.00910673 1 0 +0.191796 0.19261 0.178099 0.00739796 1 0 +0.190262 0.1898 0.155824 0.010507 1 0 +0.202655 0.189878 0.185887 0.00756968 1 0 +0.284667 0.0527579 0.0492684 0.0124918 1 0 +0.267685 0.0562034 0.0643551 0.0104832 1 0 +0.252363 0.0623362 0.0534503 0.00929825 1 0 +0.217215 0.109656 0.118837 0.0131045 1 0 +0.320736 0.0555155 0.0908827 0.0116948 1 0 +0.292623 0.0664634 0.113613 0.013154 1 0 +0.288493 0.0359165 0.11613 0.0108148 1 0 +0.306189 0.0324051 0.116388 0.00722874 1 0 +0.361999 0.0517455 0.0533655 0.0100488 1 0 +0.35477 0.0616834 0.0642386 0.00636022 1 0 +0.353108 0.0627607 0.0302231 0.00985696 1 0 +0.357697 0.0745456 0.0429063 0.00805419 1 0 +0.388473 0.0786088 0.0762144 0.0115309 1 0 +0.371176 0.0763511 0.0756446 0.00648226 1 0 +0.384953 0.0606811 0.0905716 0.0106986 1 0 +0.0133713 0.0395707 0.0482004 0.0112632 1 0 +0.377054 0.00985857 0.185869 0.00990833 1 0 +0.358234 0.00751157 0.184997 0.00687113 1 0 +0.322977 0.0666139 0.132647 0.0138483 1 0 +0.290648 0.0596014 0.144794 0.0119843 1 0 +0.318269 0.0522183 0.156885 0.0147333 1 0 +0.298642 0.0225801 0.107366 0.00809767 1 0 +0.275372 0.0400522 0.134644 0.0122502 1 0 +0.277295 0.0139269 0.111945 0.0142065 1 0 +0.243332 0.158549 0.107592 0.00849985 1 0 +0.242569 0.143772 0.132518 0.0118557 1 0 +0.250115 0.170904 0.148051 0.0102692 1 0 +0.270953 0.0113225 0.178894 0.0113339 1 0 +0.29312 0.0104373 0.185275 0.010733 1 0 +0.231865 0.191675 0.150453 0.0083346 1 0 +0.0363854 0.187793 0.145368 0.0117962 1 0 +0.037714 0.16799 0.147599 0.00817705 1 0 +0.286593 0.17804 0.189411 0.0105941 1 0 +0.293143 0.15599 0.186423 0.0120585 1 0 +0.264356 0.185135 0.187138 0.0121549 1 0 +0.164858 0.117047 0.185871 0.0144117 1 0 +0.177516 0.0986111 0.17122 0.0123366 1 0 +0.184805 0.120304 0.171268 0.0105479 1 0 +0.311233 0.0306946 0.142974 0.0118427 1 0 +0.304212 0.0102483 0.147532 0.0102694 1 0 +0.318374 0.0131916 0.133019 0.00952195 1 0 +0.0386367 0.0873516 0.0632239 0.0108306 1 0 +0.0346314 0.0785248 0.0759995 0.005206 1 0 +0.0129629 0.103031 0.0634684 0.0107145 1 0 +0.337932 0.040181 0.0586026 0.0119534 1 0 +0.32304 0.0510643 0.0458029 0.0104974 1 0 +0.250929 0.00828934 0.0790767 0.00830518 1 0 +0.279563 0.033216 0.0976184 0.0099148 1 0 +0.259255 0.0237673 0.0795199 0.0110999 1 0 +0.387591 0.0867004 0.191347 0.00868954 1 0 +0.380134 0.100613 0.182544 0.00878057 1 0 +0.363045 0.0756534 0.186215 0.0109639 1 0 +0.391256 0.0917194 0.178525 0.00601633 1 0 +0.0314241 0.0759766 0.119374 0.0117015 1 0 +0.029587 0.0691096 0.140595 0.0106787 1 0 +0.0388408 0.0552642 0.118268 0.0103264 1 0 +0.0157146 0.193858 0.0469593 0.00617142 1 0 +0.277481 0.181533 0.00721478 0.00724873 1 0 +0.271742 0.191377 0.0181054 0.00864813 1 0 +0.357203 0.0992801 0.0980791 0.010705 1 0 +0.346708 0.113725 0.102435 0.00767388 1 0 +0.363235 0.116484 0.111255 0.0112617 1 0 +0.36471 0.092865 0.133798 0.00918174 1 0 +0.179094 0.00946046 0.0850337 0.0094677 1 0 +0.199891 0.0155986 0.0842305 0.0120848 1 0 +0.172 0.021775 0.0668766 0.0128311 1 0 +0.161145 0.0142864 0.0849849 0.00957009 1 0 +0.16531 0.0124429 0.0443094 0.0124479 1 0 +0.0225446 0.0474814 0.0663094 0.0105236 1 0 +0.0363874 0.056185 0.0541821 0.00983428 1 0 +0.365501 0.08116 0.123471 0.00644773 1 0 +0.385763 0.0960578 0.128605 0.00781636 1 0 +0.0139599 0.147592 0.164164 0.0119845 1 0 +0.0193222 0.126877 0.155769 0.0110009 1 0 +0.0212865 0.132071 0.173446 0.00752773 1 0 +0.00730761 0.117082 0.165563 0.00740949 1 0 +0.355834 0.0185177 0.191414 0.00859597 1 0 +0.348607 0.0383027 0.189035 0.0111529 1 0 +0.132639 0.191841 0.11779 0.00827679 1 0 +0.131246 0.18865 0.14727 0.0116651 1 0 +0.116957 0.175433 0.141497 0.00846987 1 0 +0.393127 0.106986 0.048055 0.0069068 1 0 +0.386686 0.0899624 0.0516342 0.00902786 1 0 +0.394727 0.112683 0.030698 0.00538644 1 0 +0.387084 0.104472 0.0346597 0.00655158 1 0 +0.345148 0.184789 0.0466062 0.0120454 1 0 +0.356736 0.19091 0.0990343 0.0093597 1 0 +0.127682 0.00939457 0.0200367 0.00940051 1 0 +0.132097 0.0106245 0.0400132 0.0108593 1 0 +0.114843 0.0126578 0.0419875 0.00632081 1 0 +0.116248 0.014684 0.0122303 0.00542048 1 0 +0.170733 0.133505 0.170743 0.00875461 1 0 +0.218872 0.06169 0.160269 0.0125913 1 0 +0.246232 0.0513181 0.190082 0.0100493 1 0 +0.143967 0.127614 0.0582512 0.0136594 1 0 +0.301316 0.0589064 0.0296002 0.0140002 1 0 +0.305269 0.053935 0.0508793 0.00820659 1 0 +0.306264 0.0475953 0.00980291 0.00981875 1 0 +0.0837573 0.0439635 0.0525451 0.00697184 1 0 +0.0834765 0.0514769 0.0414608 0.00642183 1 0 +0.076722 0.0672725 0.0328524 0.0127936 1 0 +0.0658256 0.110332 0.0584587 0.013466 1 0 +0.0942477 0.102218 0.0133943 0.0136546 1 0 +0.225715 0.148708 0.162646 0.00924061 1 0 +0.221432 0.176832 0.188792 0.00785824 1 0 +0.348751 0.0206444 0.0108774 0.0108922 1 0 +0.354084 0.00754641 0.0149245 0.00773943 1 0 +0.16887 0.150891 0.0104275 0.0104412 1 0 +0.184389 0.138255 0.0194275 0.0122844 1 0 +0.170477 0.0770973 0.185021 0.0141745 1 0 +0.179787 0.0643972 0.161671 0.0126068 1 0 +0.178077 0.0813081 0.167517 0.00536716 1 0 +0.171908 0.0530528 0.187151 0.0100066 1 0 +0.0215599 0.00758453 0.0470124 0.00758974 1 0 +0.295725 0.0372936 0.0668884 0.013429 1 0 +0.257832 0.038671 0.0651608 0.00964449 1 0 +0.375459 0.123248 0.09362 0.0112366 1 0 +0.378156 0.157402 0.0583142 0.0146607 1 0 +0.361717 0.112088 0.0437565 0.0134527 1 0 +0.354214 0.0947525 0.0274061 0.0115302 1 0 +0.343699 0.127706 0.046363 0.0105342 1 0 +0.375771 0.093816 0.0209501 0.0109917 1 0 +0.387431 0.179191 0.116619 0.012603 1 0 +0.38242 0.153218 0.1108 0.0133994 1 0 +0.378499 0.187674 0.094636 0.0118575 1 0 +0.231756 0.00691231 0.151275 0.00691899 1 0 +0.241288 0.00968751 0.13274 0.0100394 1 0 +0.224111 0.0114066 0.159899 0.00626691 1 0 +0.0229603 0.185685 0.00743012 0.00747811 1 0 +0.037411 0.185073 0.00917614 0.00771211 1 0 +0.0152978 0.169501 0.00788204 0.0080064 1 0 +0.365584 0.0584976 0.015229 0.0101092 1 0 +0.377674 0.064919 0.0295789 0.00972316 1 0 +0.371345 0.0763962 0.0124227 0.00890194 1 0 +0.00607016 0.113737 0.183234 0.00610793 1 0 +0.0177482 0.106556 0.166576 0.00753866 1 0 +0.0173924 0.101126 0.188401 0.0116203 1 0 +0.320855 0.0376444 0.0116917 0.00734364 1 0 +0.165208 0.137354 0.0720785 0.0134923 1 0 +0.144079 0.135267 0.0312902 0.014367 1 0 +0.165475 0.13543 0.0466744 0.011986 1 0 +0.0745623 0.00883203 0.149173 0.00893237 1 0 +0.0535073 0.0116626 0.173585 0.00612253 1 0 +0.130865 0.0425638 0.145565 0.0127738 1 0 +0.0174239 0.190396 0.172379 0.00967554 1 0 +0.0419233 0.185353 0.185353 0.0108033 1 0 +0.36587 0.143274 0.129383 0.0133985 1 0 +0.38734 0.15923 0.145213 0.0112514 1 0 +0.250941 0.192171 0.0787188 0.00784625 1 0 +0.240426 0.178773 0.0903638 0.0123165 1 0 +0.26236 0.182441 0.0879309 0.0100541 1 0 +0.115378 0.0852737 0.0465421 0.0127064 1 0 +0.135265 0.0258461 0.0546071 0.0104916 1 0 +0.289878 0.0375387 0.0857934 0.00636108 1 0 +0.294878 0.0501245 0.0832888 0.00741146 1 0 +0.296897 0.0125443 0.0631942 0.0116219 1 0 +0.0319177 0.15258 0.137429 0.0111748 1 0 +0.0461303 0.13768 0.146997 0.011531 1 0 +0.0124959 0.159635 0.144886 0.0107932 1 0 +0.121417 0.0316553 0.0691049 0.0103816 1 0 +0.142505 0.0474971 0.0650048 0.0125079 1 0 +0.136531 0.0567854 0.0846523 0.0100307 1 0 +0.00947917 0.146002 0.0490215 0.00949669 1 0 +0.0189339 0.126393 0.0464796 0.0120048 1 0 +0.0138137 0.140396 0.0740045 0.0136698 1 0 +0.211644 0.133981 0.118885 0.00946723 1 0 +0.203399 0.154344 0.1416 0.0103861 1 0 +0.37496 0.0650114 0.17113 0.0110079 1 0 +0.368208 0.0574165 0.187213 0.00801593 1 0 +0.0599565 0.140497 0.16553 0.0117625 1 0 +0.0649543 0.135088 0.147747 0.00748528 1 0 +0.0507607 0.119256 0.166314 0.0113964 1 0 +0.0611788 0.126711 0.156142 0.00496128 1 0 +0.071849 0.165862 0.0484098 0.00783746 1 0 +0.232227 0.15496 0.0381257 0.0051099 1 0 +0.26539 0.153878 0.0308856 0.00655751 1 0 +0.254226 0.148364 0.010579 0.00954279 1 0 +0.0872335 0.0210381 0.0948407 0.0114235 1 0 +0.105355 0.0511996 0.109046 0.0136553 1 0 +0.116522 0.0454841 0.0897557 0.00935573 1 0 +0.1186 0.0229352 0.0978742 0.0144792 1 0 +0.114751 0.0094733 0.178 0.00947644 1 0 +0.124719 0.0129115 0.190021 0.00698671 1 0 +0.307064 0.0130512 0.042066 0.0118309 1 0 +0.31323 0.00918472 0.0581303 0.00580519 1 0 +0.211591 0.0479259 0.138481 0.0141896 1 0 +0.192181 0.0566818 0.146392 0.00852602 1 0 +0.106678 0.190419 0.0861648 0.00958831 1 0 +0.0908359 0.178847 0.108707 0.0130443 1 0 +0.111001 0.188553 0.106954 0.00940378 1 0 +0.0909946 0.179291 0.086244 0.00942362 1 0 +0.134588 0.0840325 0.0312592 0.0118727 1 0 +0.12406 0.109313 0.00937685 0.00950764 1 0 +0.152886 0.0799858 0.0459999 0.0119702 1 0 +0.162111 0.101123 0.0443798 0.0111489 1 0 +0.367244 0.0678647 0.0600582 0.00817559 1 0 +0.379698 0.0622769 0.0475206 0.00852458 1 0 +0.382411 0.0656188 0.0628647 0.00741194 1 0 +0.00530947 0.148284 0.152208 0.00533782 1 0 +0.288341 0.189851 0.092671 0.0101512 1 0 +0.309853 0.189503 0.10137 0.0106376 1 0 +0.302921 0.179146 0.0872126 0.00822421 1 0 +0.296218 0.186488 0.0765203 0.00637589 1 0 +0.12987 0.0269885 0.191541 0.00851021 1 0 +0.155532 0.0360994 0.188404 0.00782845 1 0 +0.0410591 0.123946 0.0199892 0.0120594 1 0 +0.0498383 0.139312 0.0286472 0.00764205 1 0 +0.031696 0.141924 0.030251 0.01066 1 0 +0.0422405 0.140611 0.0091657 0.00922523 1 0 +0.322469 0.0178805 0.146835 0.00563141 1 0 +0.353699 0.0281999 0.149582 0.011231 1 0 +0.393307 0.0473753 0.0129008 0.0067172 1 0 +0.39101 0.0521887 0.0335625 0.00922384 1 0 +0.387535 0.0310431 0.0114009 0.00871386 1 0 +0.352823 0.136375 0.117279 0.00568851 1 0 +0.371019 0.129497 0.146528 0.00919033 1 0 +0.23975 0.193302 0.0389499 0.00670009 1 0 +0.21322 0.183876 0.0473552 0.012344 1 0 +0.290996 0.0840484 0.162816 0.0136415 1 0 +0.325332 0.0739599 0.153491 0.00837755 1 0 +0.216003 0.193165 0.107949 0.00683835 1 0 +0.208824 0.186868 0.0957084 0.0088923 1 0 +0.0847779 0.120989 0.0918488 0.0140475 1 0 +0.345015 0.130383 0.172191 0.0143434 1 0 +0.312653 0.0320914 0.00504478 0.00513512 1 0 +0.160375 0.0435024 0.012158 0.0121629 1 0 +0.167644 0.0655224 0.0186183 0.0113927 1 0 +0.153084 0.0234026 0.0132979 0.00819621 1 0 +0.165403 0.190889 0.0441825 0.00911561 1 0 +0.180966 0.183623 0.0569599 0.011283 1 0 +0.0703895 0.0374811 0.129595 0.0136996 1 0 +0.0388652 0.0422696 0.134182 0.0102187 1 0 +0.392038 0.0743685 0.0348702 0.00826804 1 0 +0.196846 0.143226 0.0628502 0.0136246 1 0 +0.013777 0.012867 0.0881742 0.0129082 1 0 +0.0326336 0.0202219 0.096746 0.00864434 1 0 +0.0196705 0.0323884 0.0967388 0.00913384 1 0 +0.0212244 0.0499256 0.104219 0.00999515 1 0 +0.0168423 0.0335269 0.131134 0.0113103 1 0 +0.36748 0.185207 0.190326 0.00919273 1 0 +0.352104 0.181131 0.189058 0.00676397 1 0 +0.356398 0.190294 0.182063 0.00553682 1 0 +0.189141 0.142776 0.181993 0.0147268 1 0 +0.209487 0.139272 0.155345 0.0109017 1 0 +0.0562426 0.155027 0.00555774 0.005627 1 0 +0.107317 0.0430345 0.132072 0.0108538 1 0 +0.296461 0.0860378 0.187312 0.0126963 1 0 +0.277728 0.103706 0.177365 0.0141811 1 0 +0.299084 0.0636102 0.162844 0.00833912 1 0 +0.385162 0.120121 0.157934 0.0112558 1 0 +0.37038 0.132965 0.168166 0.0108392 1 0 +0.385632 0.140025 0.158284 0.00865763 1 0 +0.0482981 0.19129 0.0831739 0.00916622 1 0 +0.0612524 0.15544 0.0821634 0.0139729 1 0 +0.0367202 0.15469 0.0757918 0.0113843 1 0 +0.161624 0.0198379 0.103776 0.0100296 1 0 +0.15685 0.0402778 0.0923543 0.0138665 1 0 +0.15098 0.0378477 0.137264 0.00949224 1 0 +0.149986 0.0504614 0.149848 0.0083531 1 0 +0.169736 0.0424577 0.135879 0.00987065 1 0 +0.345062 0.0342228 0.0782216 0.00975469 1 0 +0.33098 0.0194967 0.0588677 0.00986929 1 0 +0.327716 0.0304708 0.0735557 0.00859503 1 0 +0.246079 0.154124 0.191715 0.00829122 1 0 +0.257018 0.141833 0.182154 0.0109571 1 0 +0.0909553 0.0358688 0.131503 0.00701734 1 0 +0.0721281 0.060405 0.134812 0.00987482 1 0 +0.129253 0.179824 0.102862 0.0112379 1 0 +0.164382 0.176216 0.10136 0.0137664 1 0 +0.140089 0.149112 0.0760627 0.0145271 1 0 +0.140634 0.172744 0.0614462 0.013265 1 0 +0.180291 0.151694 0.0809075 0.00911506 1 0 +0.386181 0.0416112 0.0904011 0.00841162 1 0 +0.0516717 0.0525541 0.184848 0.0140982 1 0 +0.0722764 0.0624285 0.179007 0.00948518 1 0 +0.0348474 0.0734227 0.181379 0.0129312 1 0 +0.0506055 0.100507 0.0440875 0.00965794 1 0 +0.0706543 0.0913602 0.0671509 0.00795337 1 0 +0.0816734 0.117759 0.0433435 0.00965938 1 0 +0.0483573 0.188757 0.112117 0.0111442 1 0 +0.00970976 0.0470906 0.0128571 0.00973229 1 0 +0.0123456 0.0550317 0.0325287 0.00990198 1 0 +0.00980577 0.0280851 0.0111555 0.00741917 1 0 +0.2282 0.155122 0.0560451 0.00882879 1 0 +0.213943 0.16944 0.0663647 0.00676659 1 0 +0.232681 0.136413 0.112038 0.0120468 1 0 +0.243686 0.114589 0.120711 0.0138871 1 0 +0.0564921 0.0924674 0.105065 0.0122932 1 0 +0.0498239 0.190957 0.0181107 0.00905355 1 0 +0.238506 0.150955 0.00679354 0.00687541 1 0 +0.106056 0.00804251 0.0861211 0.0080478 1 0 +0.0994817 0.0132035 0.11266 0.0115751 1 0 +0.142361 0.143467 0.102546 0.0126466 1 0 +0.346896 0.0103949 0.0502715 0.0104187 1 0 +0.337578 0.00615697 0.0647539 0.00632648 1 0 +0.365415 0.0149719 0.0720151 0.008988 1 0 +0.0131234 0.045257 0.15088 0.0119557 1 0 +0.0127507 0.0623101 0.141517 0.00750223 1 0 +0.304444 0.185815 0.0513571 0.0136452 1 0 +0.281936 0.176296 0.0604795 0.0124403 1 0 +0.179508 0.0471838 0.102471 0.0118902 1 0 +0.178001 0.0538737 0.0770514 0.0144384 1 0 +0.187521 0.0410831 0.0886018 0.00525026 1 0 +0.174998 0.0847604 0.0147851 0.00955679 1 0 +0.290064 0.084341 0.0344495 0.0142315 1 0 +0.290002 0.0844431 0.0611749 0.0124942 1 0 +0.376134 0.0463674 0.191537 0.00625324 1 0 +0.0513784 0.191572 0.152027 0.00853012 1 0 +0.0678098 0.176773 0.12328 0.0142848 1 0 +0.344998 0.153703 0.184615 0.0120791 1 0 +0.362316 0.140492 0.185516 0.00972086 1 0 +0.18804 0.169771 0.146387 0.0119031 1 0 +0.308172 0.180009 0.1575 0.00797814 1 0 +0.308458 0.182891 0.125762 0.0146732 1 0 +0.323046 0.0647415 0.0612375 0.0101253 1 0 +0.314683 0.0935818 0.0994618 0.0142316 1 0 +0.30898 0.0979252 0.0495522 0.0135253 1 0 +0.347456 0.0862242 0.0563558 0.0124924 1 0 +0.139757 0.0240381 0.124471 0.0124244 1 0 +0.119083 0.0265038 0.135206 0.00967716 1 0 +0.131047 0.00950555 0.13885 0.00995462 1 0 +0.390467 0.0463886 0.154038 0.00872832 1 0 +0.379006 0.0613228 0.150385 0.0104481 1 0 +0.382075 0.0448445 0.00657943 0.00658226 1 0 +0.22257 0.14715 0.140927 0.0101008 1 0 +0.283228 0.192355 0.18211 0.00772919 1 0 +0.251721 0.184881 0.157569 0.00671726 1 0 +0.272656 0.0531788 0.149365 0.0076595 1 0 +0.209222 0.0940953 0.0136833 0.00589358 1 0 +0.199062 0.0655167 0.031442 0.0115316 1 0 +0.193577 0.0745342 0.0173387 0.00608358 1 0 +0.132108 0.179284 0.00894548 0.0089664 1 0 +0.139169 0.152455 0.0124863 0.0115774 1 0 +0.226438 0.0840168 0.00791548 0.00792328 1 0 +0.231146 0.0678308 0.0205716 0.0117466 1 0 +0.242263 0.0852114 0.0147031 0.00970349 1 0 +0.151372 0.0795723 0.192909 0.00712179 1 0 +0.0541621 0.009468 0.0191585 0.00949259 1 0 +0.0663788 0.0137363 0.0309331 0.00688294 1 0 +0.0387704 0.0148417 0.0112337 0.00865432 1 0 +0.353335 0.0998197 0.0757791 0.0119344 1 0 +0.362165 0.119893 0.187596 0.010984 1 0 +0.0728923 0.0772205 0.190884 0.00967805 1 0 +0.288715 0.00701357 0.0926238 0.00701559 1 0 +0.0506495 0.0549668 0.0138225 0.0138284 1 0 +0.0708841 0.0519034 0.0203875 0.00783806 1 0 +0.0365921 0.0763735 0.0199077 0.0125531 1 0 +0.365386 0.0868869 0.0713017 0.00630041 1 0 +0.054346 0.0732162 0.0601268 0.0105279 1 0 +0.05443 0.0886831 0.0309235 0.00844493 1 0 +0.057257 0.0690964 0.0416356 0.00863903 1 0 +0.364393 0.0328048 0.0626499 0.0111804 1 0 +0.262206 0.12561 0.144205 0.0136869 1 0 +0.0690483 0.193069 0.111205 0.00699695 1 0 +0.0517508 0.17195 0.111857 0.00600386 1 0 +0.0317408 0.00808948 0.183343 0.00727501 1 0 +0.0448126 0.132295 0.0726416 0.012636 1 0 +0.0105125 0.0861309 0.00983185 0.0100961 1 0 +0.0124964 0.104975 0.0414812 0.0109114 1 0 +0.00883058 0.0853637 0.0392147 0.00906131 1 0 +0.0142786 0.1082 0.011511 0.0115812 1 0 +0.0377934 0.0960012 0.182614 0.00987213 1 0 +0.0166288 0.068417 0.167964 0.0102407 1 0 +0.306593 0.0605586 0.0743283 0.0106548 1 0 +0.0219073 0.0146401 0.00836378 0.00841415 1 0 +0.00810007 0.0434991 0.0724525 0.00811193 1 0 +0.0221052 0.0452536 0.0887114 0.00622461 1 0 +0.0164182 0.0888751 0.117519 0.0081728 1 0 +0.0358909 0.0913123 0.129594 0.00726122 1 0 +0.0149256 0.101493 0.132387 0.0113841 1 0 +0.0064834 0.0180904 0.106134 0.00649126 1 0 +0.327023 0.0779322 0.11252 0.00959491 1 0 +0.0792518 0.136865 0.0706925 0.0129743 1 0 +0.0720758 0.152592 0.0579455 0.00850425 1 0 +0.0861308 0.159992 0.0801141 0.0114014 1 0 +0.103346 0.171842 0.0714987 0.0112036 1 0 +0.3503 0.125144 0.0244213 0.0125217 1 0 +0.154271 0.00658848 0.154326 0.00659142 1 0 +0.145609 0.0129631 0.162101 0.00672077 1 0 +0.105485 0.124246 0.0203198 0.0118756 1 0 +0.385248 0.0794694 0.158897 0.0105453 1 0 +0.372667 0.0773341 0.146586 0.0071862 1 0 +0.343365 0.0431501 0.146365 0.00722527 1 0 +0.063767 0.142112 0.0487261 0.00773984 1 0 +0.0938688 0.184927 0.0594656 0.00894189 1 0 +0.152705 0.0619648 0.0546286 0.00801086 1 0 +0.39375 0.146995 0.0492081 0.00626239 1 0 +0.383045 0.130686 0.0581556 0.0124989 1 0 +0.167215 0.0563811 0.117252 0.00942078 1 0 +0.171844 0.0640991 0.131713 0.0076115 1 0 +0.152281 0.0794524 0.0082892 0.00831509 1 0 +0.175193 0.0796253 0.0358228 0.0120995 1 0 +0.140635 0.090329 0.0145581 0.00697231 1 0 +0.286716 0.16251 0.0756719 0.00862372 1 0 +0.248275 0.0833534 0.144199 0.0122316 1 0 +0.126338 0.0206836 0.00730592 0.00730955 1 0 +0.0404216 0.100268 0.0163574 0.0119049 1 0 +0.0378094 0.0911662 0.0329799 0.00722532 1 0 +0.235829 0.0443444 0.0110074 0.0110097 1 0 +0.248735 0.0314925 0.0141296 0.00612448 1 0 +0.208742 0.178494 0.0101585 0.0101662 1 0 +0.196251 0.189903 0.0181036 0.0101298 1 0 +0.0887479 0.0103276 0.0365731 0.0103767 1 0 +0.0975155 0.00563253 0.0489598 0.0056578 1 0 +0.0158431 0.106378 0.0939756 0.0136557 1 0 +0.0502105 0.113761 0.109082 0.0102676 1 0 +0.0436462 0.104431 0.0946859 0.00809977 1 0 +0.202061 0.187687 0.0791138 0.00904632 1 0 +0.201503 0.0132524 0.0433349 0.0106019 1 0 +0.191637 0.0115332 0.178539 0.0115424 1 0 +0.204607 0.0138582 0.167907 0.00543025 1 0 +0.194779 0.0189619 0.192232 0.00777998 1 0 +0.168729 0.189848 0.0818483 0.010209 1 0 +0.129854 0.190782 0.0210644 0.00923197 1 0 +0.26258 0.110366 0.161066 0.00904576 1 0 +0.262803 0.106419 0.146864 0.00569588 1 0 +0.36782 0.188057 0.0582292 0.0121309 1 0 +0.363468 0.18552 0.0857521 0.00573485 1 0 +0.355917 0.173687 0.0582736 0.00732894 1 0 +0.14095 0.00809392 0.111729 0.00810161 1 0 +0.139403 0.0520251 0.158761 0.00557152 1 0 +0.391256 0.0859491 0.00909444 0.00878231 1 0 +0.388958 0.10046 0.0129862 0.00578511 1 0 +0.229216 0.108846 0.136684 0.00841708 1 0 +0.252786 0.0911588 0.168619 0.0137994 1 0 +0.0620011 0.109176 0.0885769 0.0118184 1 0 +0.341706 0.111231 0.188779 0.0112243 1 0 +0.035336 0.135001 0.185697 0.0113418 1 0 +0.0334853 0.114705 0.182273 0.00932439 1 0 +0.0245974 0.185509 0.191853 0.00818761 1 0 +0.204741 0.0577915 0.0675464 0.0142103 1 0 +0.206424 0.179996 0.192712 0.00729287 1 0 +0.370418 0.00789946 0.0151283 0.00793645 1 0 +0.297334 0.10541 0.0705256 0.0116052 1 0 +0.289761 0.133647 0.0548894 0.0134367 1 0 +0.26159 0.111988 0.191384 0.00862492 1 0 +0.378576 0.0868718 0.00681008 0.00500929 1 0 +0.0298629 0.0738766 0.05118 0.00925954 1 0 +0.197723 0.039046 0.0100464 0.01024 1 0 +0.273033 0.0212788 0.192444 0.00756068 1 0 +0.271806 0.0218552 0.0091431 0.00915288 1 0 +0.282277 0.0111852 0.0121297 0.00665603 1 0 +0.0912619 0.1637 0.00873324 0.00896896 1 0 +0.187463 0.109838 0.010696 0.0107031 1 0 +0.211959 0.150836 0.0463463 0.0100119 1 0 +0.276616 0.00726373 0.0208333 0.00726634 1 0 +0.269059 0.00801338 0.0365432 0.00799643 1 0 +0.350892 0.112417 0.0889808 0.00647615 1 0 +0.382318 0.104857 0.167515 0.00698831 1 0 +0.391578 0.112555 0.1718 0.00579373 1 0 +0.0383565 0.118252 0.13661 0.0118309 1 0 +0.347168 0.106342 0.0103183 0.0103355 1 0 +0.0531425 0.147131 0.189814 0.0101934 1 0 +0.0600396 0.165464 0.190941 0.00934447 1 0 +0.154216 0.190864 0.116273 0.00922074 1 0 +0.179424 0.193204 0.0949906 0.00683883 1 0 +0.212951 0.124659 0.145298 0.00716684 1 0 +0.204603 0.0185068 0.00721977 0.0072496 1 0 +0.188898 0.0204287 0.0133955 0.00869768 1 0 +0.390733 0.0440608 0.0726776 0.00928055 1 0 +0.375987 0.0444276 0.0718798 0.00765274 1 0 +0.369288 0.114453 0.0681617 0.0110147 1 0 +0.0346381 0.104006 0.194264 0.0058219 1 0 +0.276533 0.149359 0.0667189 0.0102655 1 0 +0.215694 0.192892 0.0133808 0.00725409 1 0 +0.240383 0.0400749 0.0586261 0.00904036 1 0 +0.0898222 0.0384868 0.00728664 0.00748467 1 0 +0.0845856 0.0737115 0.0110843 0.0113386 1 0 +0.315825 0.189883 0.0295578 0.0104679 1 0 +0.37166 0.193887 0.0984797 0.00613497 1 0 +0.0122528 0.0828442 0.152275 0.0115181 1 0 +0.0158326 0.0667114 0.152824 0.00501628 1 0 +0.227332 0.0458339 0.193588 0.00644537 1 0 +0.0277894 0.19127 0.0808528 0.00878933 1 0 +0.392151 0.0865789 0.141861 0.00786235 1 0 +0.168763 0.151455 0.190798 0.0092146 1 0 +0.204381 0.00966975 0.0216306 0.00967165 1 0 +0.0243094 0.150481 0.0968196 0.013393 1 0 +0.0336358 0.0203736 0.0661439 0.00692063 1 0 +0.361559 0.0637907 0.145559 0.00702253 1 0 +0.0619236 0.074084 0.16276 0.00694743 1 0 +0.0382627 0.160366 0.0558773 0.00562937 1 0 +0.0275376 0.0718734 0.0836242 0.00512013 1 0 +0.228784 0.0149795 0.112927 0.0135174 1 0 +0.395161 0.0898583 0.106136 0.00496068 1 0 +0.25985 0.18758 0.0639603 0.00819434 1 0 +0.0299818 0.0347722 0.183721 0.0061519 1 0 +0.21549 0.186948 0.122246 0.00749354 1 0 +0.361217 0.177099 0.150076 0.0109281 1 0 +0.067308 0.149657 0.0302269 0.00524767 1 0 +0.0991941 0.0200913 0.0677805 0.00556428 1 0 +0.367458 0.0270138 0.0999109 0.00656395 1 0 +0.382911 0.0385284 0.126089 0.00554315 1 0 +0.15259 0.102064 0.170509 0.0103504 1 0 +0.204226 0.159285 0.105587 0.00643247 1 0 +0.106211 0.0611613 0.0650592 0.00502375 1 0 +0.200173 0.191619 0.170332 0.00501194 1 0 +0.271079 0.0587953 0.0365451 0.00707767 1 0 +0.311446 0.0565969 0.10969 0.0084572 1 0 +0.375804 0.0736045 0.0865151 0.00564715 1 0 +0.374788 0.00974941 0.169654 0.00494595 1 0 +0.307617 0.0594108 0.141521 0.0052979 1 0 +0.282294 0.0255418 0.127101 0.00550773 1 0 +0.270122 0.0111254 0.154309 0.0114169 1 0 +0.278578 0.161938 0.192902 0.00495567 1 0 +0.185316 0.109793 0.154663 0.00911126 1 0 +0.293049 0.024156 0.145083 0.00759668 1 0 +0.0265287 0.096412 0.0693108 0.00547116 1 0 +0.241683 0.0191683 0.0860944 0.0082177 1 0 +0.368118 0.0918938 0.184249 0.00616362 1 0 +0.0420928 0.0663928 0.129828 0.00604567 1 0 +0.272006 0.172145 0.0138445 0.00574495 1 0 +0.358694 0.104248 0.124013 0.00698951 1 0 +0.172924 0.0295833 0.0470859 0.00846439 1 0 +0.0390121 0.0491533 0.0682909 0.00614668 1 0 +0.375885 0.0784083 0.117374 0.00590407 1 0 +0.129273 0.172145 0.145903 0.00501788 1 0 +0.391118 0.093988 0.0385701 0.00534297 1 0 +0.105125 0.00750422 0.0121776 0.0078184 1 0 +0.245577 0.0643043 0.163627 0.0144505 1 0 +0.133484 0.113119 0.0700113 0.00774841 1 0 +0.292684 0.0677731 0.0443244 0.00523317 1 0 +0.0766266 0.0592614 0.0541753 0.00998487 1 0 +0.0920868 0.096747 0.0403876 0.0139767 1 0 +0.355631 0.0369208 0.00910917 0.00678582 1 0 +0.187383 0.152005 0.00844206 0.00556809 1 0 +0.18167 0.0620785 0.179408 0.00537936 1 0 +0.0159403 0.00601645 0.0343362 0.00609946 1 0 +0.273759 0.040202 0.0598429 0.00721707 1 0 +0.383771 0.152815 0.084718 0.0127205 1 0 +0.365547 0.1106 0.0219998 0.00868864 1 0 +0.382057 0.169898 0.0993032 0.0068623 1 0 +0.381343 0.0643481 0.0134882 0.00679037 1 0 +0.0639149 0.00754483 0.168317 0.00764772 1 0 +0.0255336 0.192066 0.158187 0.00553389 1 0 +0.373082 0.165629 0.128448 0.0101101 1 0 +0.252547 0.191844 0.100086 0.00835748 1 0 +0.0965972 0.0845669 0.0638608 0.0128504 1 0 +0.14744 0.0175978 0.0433787 0.00617132 1 0 +0.284139 0.0201847 0.081076 0.0116354 1 0 +0.0265165 0.16914 0.138529 0.00627887 1 0 +0.137475 0.0306754 0.0699326 0.00572817 1 0 +0.0227494 0.144802 0.0482607 0.00688008 1 0 +0.379247 0.0677962 0.188607 0.00720059 1 0 +0.261495 0.142099 0.0245236 0.00738447 1 0 +0.106169 0.0378184 0.09608 0.00499535 1 0 +0.310725 0.0197461 0.0571708 0.00509167 1 0 +0.19151 0.0413327 0.142497 0.00732389 1 0 +0.139872 0.105686 0.0266184 0.0108939 1 0 +0.373959 0.0564584 0.0614421 0.00513291 1 0 +0.146353 0.0271243 0.18695 0.00509141 1 0 +0.0298808 0.136673 0.014959 0.0056102 1 0 +0.340704 0.0146383 0.141235 0.00932259 1 0 +0.366728 0.120761 0.130942 0.00918468 1 0 +0.221367 0.186752 0.102372 0.00531139 1 0 +0.0996498 0.0980634 0.092229 0.0132821 1 0 +0.170107 0.0277319 0.0112926 0.00509826 1 0 +0.168886 0.177023 0.0442298 0.0074665 1 0 +0.0497445 0.0241692 0.132148 0.0109974 1 0 +0.389449 0.0608805 0.0214952 0.00511992 1 0 +0.188863 0.129071 0.0421877 0.012663 1 0 +0.168 0.0388015 0.189779 0.00500258 1 0 +0.0361613 0.0111184 0.0808431 0.0100163 1 0 +0.0330297 0.027338 0.131563 0.00602515 1 0 +0.380836 0.174758 0.191983 0.00805852 1 0 +0.191985 0.140342 0.160274 0.0073124 1 0 +0.0475619 0.155101 0.0135935 0.00636649 1 0 +0.089078 0.0771357 0.130195 0.0143848 1 0 +0.386624 0.131859 0.169841 0.00552843 1 0 +0.163404 0.0272597 0.139457 0.00697779 1 0 +0.317549 0.0334651 0.0588785 0.00950924 1 0 +0.251437 0.157781 0.182183 0.00593932 1 0 +0.0862738 0.0444398 0.144012 0.00885247 1 0 +0.144082 0.165439 0.105567 0.0095987 1 0 +0.162451 0.163006 0.0706732 0.0123462 1 0 +0.377191 0.0348654 0.0993471 0.00595367 1 0 +0.0292483 0.0558257 0.19181 0.00845751 1 0 +0.0731428 0.104323 0.0409557 0.00643389 1 0 +0.0198718 0.17265 0.11226 0.0139851 1 0 +0.236318 0.163423 0.0677451 0.00765444 1 0 +0.229331 0.119425 0.108368 0.00565285 1 0 +0.0618705 0.108585 0.148216 0.00855224 1 0 +0.0472707 0.190341 0.0339418 0.00579053 1 0 +0.252217 0.157224 0.00623357 0.00624238 1 0 +0.0962091 0.0159385 0.081255 0.00563935 1 0 +0.00817874 0.0253714 0.146558 0.0083663 1 0 +0.291538 0.171609 0.0445923 0.00670552 1 0 +0.192874 0.0346911 0.0760032 0.00985719 1 0 +0.186361 0.103634 0.0473216 0.0134073 1 0 +0.0741433 0.188066 0.14553 0.0114578 1 0 +0.337023 0.158487 0.194499 0.00550687 1 0 +0.314179 0.0840405 0.072824 0.014068 1 0 +0.133116 0.0246177 0.141414 0.00578305 1 0 +0.394011 0.0446063 0.149989 0.00599448 1 0 +0.37493 0.0385825 0.0159213 0.0066536 1 0 +0.22654 0.143138 0.126695 0.00520927 1 0 +0.268222 0.192866 0.175692 0.00715241 1 0 +0.283563 0.0645575 0.16196 0.00723602 1 0 +0.212596 0.0829564 0.0372903 0.0113053 1 0 +0.123976 0.161412 0.0117908 0.00607324 1 0 +0.162715 0.0962505 0.18281 0.00660952 1 0 +0.0501585 0.00739969 0.0403256 0.00761423 1 0 +0.338479 0.102953 0.0632961 0.00772136 1 0 +0.210651 0.0578669 0.112459 0.0136824 1 0 +0.0662949 0.0647975 0.151469 0.0083119 1 0 +0.289129 0.0209543 0.0975938 0.00563666 1 0 +0.031921 0.0468844 0.0111795 0.00631896 1 0 +0.374995 0.0812476 0.0630345 0.00757385 1 0 +0.240684 0.182445 0.153056 0.00545292 1 0 +0.052213 0.0903392 0.0549818 0.00533031 1 0 +0.371036 0.0137309 0.0852819 0.00547397 1 0 +0.286823 0.129083 0.131978 0.0140184 1 0 +0.063446 0.182761 0.102616 0.0076676 1 0 +0.020394 0.00826111 0.173178 0.00829914 1 0 +0.0312729 0.139892 0.0824798 0.00574432 1 0 +0.00863994 0.083511 0.0249144 0.00519484 1 0 +0.0488243 0.0851716 0.190139 0.00732035 1 0 +0.021921 0.0320327 0.0063651 0.00619372 1 0 +0.0320102 0.0409486 0.0967865 0.0058844 1 0 +0.319167 0.0835592 0.143631 0.00670174 1 0 +0.0782541 0.146147 0.0872911 0.00606958 1 0 +0.225196 0.0554171 0.125535 0.00602916 1 0 +0.128068 0.159785 0.0950072 0.0103182 1 0 +0.335086 0.144369 0.0208107 0.0122591 1 0 +0.309413 0.0449647 0.0811385 0.00659358 1 0 +0.139213 0.00758794 0.153068 0.00558374 1 0 +0.112588 0.0974011 0.00905504 0.00553724 1 0 +0.354749 0.0447492 0.15183 0.00550329 1 0 +0.0586951 0.146078 0.0365589 0.00602574 1 0 +0.250268 0.0762195 0.0341256 0.0131473 1 0 +0.0961069 0.193018 0.0469953 0.00699127 1 0 +0.144597 0.0535251 0.0484729 0.00521266 1 0 +0.383755 0.143112 0.0443475 0.00609051 1 0 +0.177372 0.0558999 0.142282 0.0068624 1 0 +0.149436 0.0717535 0.0217132 0.00809978 1 0 +0.0869359 0.175095 0.0724519 0.00555306 1 0 +0.279529 0.172596 0.089291 0.00978439 1 0 +0.250355 0.0597187 0.137615 0.0123911 1 0 +0.119589 0.0328563 0.0105656 0.00746041 1 0 +0.133067 0.163118 0.0460139 0.006435 1 0 +0.230063 0.025654 0.00788834 0.00633899 1 0 +0.0355784 0.114217 0.101586 0.00617914 1 0 +0.217434 0.184185 0.0825201 0.00708441 1 0 +0.335162 0.0848649 0.0984859 0.0080474 1 0 +0.113069 0.114581 0.144575 0.0147412 1 0 +0.174078 0.166055 0.0859442 0.00708755 1 0 +0.274922 0.125237 0.164978 0.0106713 1 0 +0.346199 0.184401 0.0697786 0.0111541 1 0 +0.142237 0.0228484 0.102594 0.00962491 1 0 +0.14345 0.0678292 0.0349685 0.00696443 1 0 +0.394852 0.0819298 0.0230254 0.00518911 1 0 +0.232323 0.0944074 0.142046 0.0072955 1 0 +0.044562 0.116355 0.0848029 0.00741468 1 0 +0.353889 0.109415 0.17346 0.00846082 1 0 +0.0355702 0.125228 0.171647 0.00577467 1 0 +0.0219492 0.169303 0.194138 0.00592133 1 0 +0.189144 0.0431386 0.0602557 0.00839812 1 0 +0.210267 0.167803 0.187758 0.00653748 1 0 +0.371833 0.0125051 0.0272674 0.00523647 1 0 +0.235904 0.0268693 0.129898 0.00839309 1 0 +0.00800912 0.0936409 0.106956 0.00614546 1 0 +0.152239 0.0664404 0.148093 0.00787896 1 0 +0.0727944 0.116542 0.0759453 0.00635603 1 0 +0.256759 0.110831 0.177046 0.00796748 1 0 +0.0171044 0.142267 0.0374209 0.00560163 1 0 +0.388409 0.15406 0.161688 0.00604898 1 0 +0.212628 0.0445981 0.0184521 0.00840461 1 0 +0.287804 0.0212483 0.00898011 0.00524894 1 0 +0.103648 0.142195 0.00915061 0.00918398 1 0 +0.0249615 0.0944006 0.00999414 0.00581314 1 0 +0.17413 0.101717 0.0223372 0.0090261 1 0 +0.221216 0.134036 0.0650604 0.0125142 1 0 +0.204726 0.070397 0.144764 0.0101323 1 0 +0.283783 0.00667192 0.0360334 0.00686949 1 0 +0.307041 0.163873 0.140303 0.00930808 1 0 +0.372003 0.107226 0.0994053 0.00614495 1 0 +0.0436736 0.10863 0.12283 0.00579659 1 0 +0.34477 0.108323 0.0249005 0.00519196 1 0 +0.0377104 0.15348 0.184693 0.00731607 1 0 +0.121077 0.183774 0.11724 0.0057677 1 0 +0.185975 0.191251 0.0741351 0.00816562 1 0 +0.229029 0.132523 0.15296 0.00991017 1 0 +0.190654 0.0233533 0.00723081 0.00727075 1 0 +0.36508 0.126326 0.0566512 0.0060488 1 0 +0.118158 0.188182 0.158422 0.00502799 1 0 +0.0271665 0.103701 0.1749 0.00535086 1 0 +0.279837 0.149124 0.0515643 0.00524692 1 0 +0.207288 0.192364 0.0321903 0.00772377 1 0 +0.23098 0.0647793 0.0732639 0.0135387 1 0 +0.214176 0.0155511 0.163247 0.00500672 1 0 +0.0209887 0.072175 0.0348169 0.00943272 1 0 +0.0305213 0.134868 0.138194 0.00660834 1 0 +0.0777922 0.0430145 0.0142222 0.0049973 1 0 +0.250382 0.186598 0.0369264 0.00617653 1 0 +0.369015 0.0664313 0.1323 0.00841746 1 0 +0.163825 0.0656479 0.0972373 0.0128942 1 0 +0.0139643 0.101756 0.151244 0.00749925 1 0 +0.105723 0.0334557 0.118016 0.00623026 1 0 +0.0242189 0.0717604 0.155129 0.00504056 1 0 +0.244405 0.0437342 0.178231 0.00539913 1 0 +0.0868532 0.0275435 0.013115 0.00530271 1 0 +0.238417 0.118837 0.138676 0.00530997 1 0 +0.248809 0.0411882 0.0203365 0.00538804 1 0 +0.271743 0.164873 0.0723046 0.00690452 1 0 +0.259549 0.0164941 0.0393869 0.00505907 1 0 +0.0336293 0.184633 0.106557 0.00512952 1 0 +0.0961337 0.069566 0.0259228 0.00794518 1 0 +0.261421 0.0946635 0.0449094 0.0109537 1 0 +0.16721 0.147574 0.178979 0.0079243 1 0 +0.162571 0.0175805 0.15751 0.00737101 1 0 +0.0681521 0.156908 0.15673 0.00858295 1 0 +0.371311 0.188827 0.17645 0.0056506 1 0 +0.382051 0.0326958 0.0660182 0.00679611 1 0 +0.370883 0.097932 0.0722141 0.00607098 1 0 +0.189375 0.0100781 0.0223039 0.00496697 1 0 +0.293977 0.128725 0.155733 0.0107931 1 0 +0.294931 0.106278 0.116439 0.0147434 1 0 +0.319684 0.118009 0.126407 0.0144058 1 0 +0.333114 0.100453 0.142545 0.0129627 1 0 +0.233056 0.0821008 0.185284 0.0135691 1 0 +0.222491 0.107745 0.186574 0.0136897 1 0 +0.205985 0.0856081 0.180974 0.0140664 1 0 +0.209378 0.0980333 0.160304 0.0102888 1 0 +0.0183493 0.171206 0.088728 0.00963997 1 0 +0.0138642 0.130553 0.0946587 0.0092099 1 0 +0.00880729 0.14103 0.109349 0.00910086 1 0 +0.0455904 0.15159 0.109242 0.0112735 1 0 +0.0248175 0.0292809 0.0651985 0.00564902 1 0 +0.051736 0.0417432 0.0745267 0.00867866 1 0 +0.34206 0.0568584 0.130516 0.00768926 1 0 +0.351697 0.0751907 0.157835 0.00494477 1 0 +0.0670896 0.0864491 0.169068 0.00786377 1 0 +0.0512748 0.0963263 0.151133 0.0056313 1 0 +0.0507137 0.0645705 0.163841 0.00779486 1 0 +0.0223355 0.190893 0.0607357 0.00673162 1 0 +0.0467381 0.191243 0.0507055 0.00669401 1 0 +0.299576 0.14876 0.0144156 0.008239 1 0 +0.323826 0.152206 0.0430153 0.00768271 1 0 +0.00617829 0.0719664 0.0851172 0.00587751 1 0 +0.00679986 0.0963776 0.0785689 0.00696181 1 0 +0.0420936 0.072806 0.0881394 0.0101486 1 0 +0.392841 0.0130103 0.0241736 0.00733186 1 0 +0.392432 0.0186516 0.0607261 0.00636687 1 0 +0.374975 0.0243043 0.043706 0.00560077 1 0 +0.0871383 0.0936887 0.187415 0.0112409 1 0 +0.142323 0.107156 0.187424 0.0100812 1 0 +0.145518 0.0811453 0.142775 0.0091413 1 0 +0.215674 0.0140729 0.108765 0.0140781 1 0 +0.222644 0.016739 0.0890476 0.011201 1 0 +0.249043 0.0290925 0.103992 0.0127402 1 0 +0.393134 0.1016 0.0826434 0.00716053 1 0 +0.366581 0.0771724 0.102847 0.0105666 1 0 +0.22542 0.187068 0.0617098 0.00676333 1 0 +0.245887 0.16773 0.0766569 0.00611283 1 0 +0.0157395 0.037729 0.189653 0.0105725 1 0 +0.0536306 0.0208592 0.191866 0.00717096 1 0 +0.214248 0.187878 0.137434 0.00777375 1 0 +0.231408 0.167212 0.109112 0.00631698 1 0 +0.370209 0.186792 0.131924 0.0115277 1 0 +0.348265 0.188219 0.175274 0.00525853 1 0 +0.357703 0.16075 0.122765 0.00699528 1 0 +0.348719 0.169077 0.156321 0.00518334 1 0 +0.0777636 0.163008 0.0142156 0.00567678 1 0 +0.0703331 0.140071 0.0105286 0.00591555 1 0 +0.107597 0.0123506 0.0706847 0.00622383 1 0 +0.0858999 0.00550219 0.062506 0.00576121 1 0 +0.369151 0.00818008 0.0940423 0.00506689 1 0 +0.380448 0.0115654 0.123048 0.0101947 1 0 +0.361218 0.00529068 0.0991335 0.00545717 1 0 +0.21127 0.107896 0.037595 0.0136718 1 0 +0.19285 0.098723 0.0741582 0.0146363 1 0 +0.208754 0.0675954 0.0481468 0.00789315 1 0 +0.190332 0.0714759 0.0516261 0.0112526 1 0 +0.386695 0.0279839 0.124866 0.0057263 1 0 +0.391511 0.0471853 0.123585 0.00691367 1 0 +0.362912 0.0409177 0.12372 0.00493753 1 0 +0.0819763 0.098613 0.165435 0.0117008 1 0 +0.0732932 0.088342 0.117281 0.00888556 1 0 +0.0762444 0.12042 0.121165 0.00973858 1 0 +0.109151 0.0843392 0.112748 0.0131693 1 0 +0.157145 0.101235 0.154726 0.00609758 1 0 +0.156414 0.0947529 0.141875 0.00831439 1 0 +0.141156 0.0819152 0.157509 0.0062447 1 0 +0.311691 0.0225125 0.189756 0.0105256 1 0 +0.277398 0.0425153 0.191083 0.00918601 1 0 +0.31954 0.0655847 0.185438 0.0122109 1 0 +0.199689 0.169705 0.103668 0.00509297 1 0 +0.202364 0.140992 0.101095 0.011787 1 0 +0.222034 0.150856 0.0986253 0.010356 1 0 +0.195383 0.149282 0.0816558 0.00618624 1 0 +0.234882 0.00824154 0.0210247 0.00850376 1 0 +0.227894 0.00967124 0.0485354 0.00981243 1 0 +0.119952 0.0603646 0.0313592 0.0116434 1 0 +0.0929176 0.0649489 0.0678022 0.00749513 1 0 +0.119362 0.0624182 0.0864577 0.00812881 1 0 +0.103313 0.0438392 0.0487169 0.00568792 1 0 +0.189872 0.191278 0.190833 0.00620737 1 0 +0.218556 0.191504 0.183794 0.0088616 1 0 +0.256878 0.0572496 0.0376613 0.00725023 1 0 +0.272126 0.0751648 0.0726282 0.0106756 1 0 +0.251638 0.0481765 0.0465315 0.00647808 1 0 +0.226605 0.183384 0.0126504 0.0076126 1 0 +0.22612 0.155581 0.0104955 0.00612659 1 0 +0.225868 0.00918519 0.182376 0.00962794 1 0 +0.217444 0.0456945 0.187116 0.00535896 1 0 +0.216067 0.126527 0.0469773 0.00773177 1 0 +0.225386 0.109266 0.0975421 0.00970786 1 0 +0.243769 0.106338 0.0993678 0.00899614 1 0 +0.227952 0.126064 0.0859668 0.0108525 1 0 +0.316443 0.042169 0.113368 0.00724812 1 0 +0.326654 0.0517949 0.108777 0.00751662 1 0 +0.301954 0.0583803 0.0999651 0.00524896 1 0 +0.29274 0.0347683 0.132402 0.0060409 1 0 +0.343566 0.0597269 0.018211 0.005781 1 0 +0.352622 0.0502169 0.0402065 0.00618205 1 0 +0.369643 0.0714826 0.0475044 0.00510766 1 0 +0.394229 0.0737736 0.0944807 0.0059695 1 0 +0.394376 0.0620919 0.0670473 0.00591046 1 0 +0.394948 0.0939468 0.076593 0.00516962 1 0 +0.367544 0.0646222 0.0903772 0.00715182 1 0 +0.00818188 0.0126094 0.0228858 0.00838371 1 0 +0.0147844 0.0120618 0.0580327 0.00618432 1 0 +0.31466 0.0730897 0.166658 0.00859344 1 0 +0.319997 0.0525574 0.119828 0.00540728 1 0 +0.300218 0.0662144 0.131142 0.0059512 1 0 +0.282304 0.0498985 0.104559 0.00836055 1 0 +0.251758 0.18354 0.132704 0.00661005 1 0 +0.256939 0.160326 0.111173 0.00568273 1 0 +0.247454 0.15754 0.141038 0.00505592 1 0 +0.236481 0.165237 0.140116 0.00649243 1 0 +0.249384 0.00719792 0.180125 0.00758229 1 0 +0.285711 0.0124466 0.191211 0.0059783 1 0 +0.21456 0.186543 0.153079 0.00793122 1 0 +0.226593 0.180792 0.150642 0.00562627 1 0 +0.083875 0.0293033 0.189486 0.0110144 1 0 +0.0897915 0.0688272 0.191879 0.00823789 1 0 +0.106315 0.053566 0.188127 0.0119741 1 0 +0.111229 0.0439213 0.176073 0.00592557 1 0 +0.0550361 0.190197 0.174822 0.00669825 1 0 +0.0652126 0.164537 0.14202 0.00824646 1 0 +0.267189 0.18792 0.191085 0.00915243 1 0 +0.301131 0.171959 0.186846 0.00580245 1 0 +0.275044 0.14871 0.191894 0.00855422 1 0 +0.0975724 0.182156 0.191598 0.00897754 1 0 +0.117908 0.145176 0.184706 0.0136715 1 0 +0.10357 0.157952 0.149551 0.01374 1 0 +0.202562 0.121477 0.182416 0.0104515 1 0 +0.186167 0.0940157 0.190579 0.00955469 1 0 +0.185097 0.109625 0.185197 0.00700597 1 0 +0.193167 0.106857 0.167044 0.00584006 1 0 +0.325806 0.0498837 0.176862 0.00674515 1 0 +0.327219 0.0434707 0.135695 0.009877 1 0 +0.306853 0.00505278 0.129738 0.00514724 1 0 +0.284301 0.00970246 0.141233 0.00973076 1 0 +0.279911 0.024517 0.14259 0.00577992 1 0 +0.0139161 0.0761074 0.0511881 0.00684258 1 0 +0.0193503 0.0978804 0.0773104 0.00537681 1 0 +0.0312895 0.104381 0.0594031 0.008106 1 0 +0.338556 0.0576895 0.071032 0.00952752 1 0 +0.345385 0.0400912 0.0418604 0.00637311 1 0 +0.259771 0.012368 0.0639415 0.00821059 1 0 +0.234281 0.00979121 0.078925 0.00571495 1 0 +0.261934 0.0151467 0.0961373 0.00781128 1 0 +0.259949 0.0384556 0.0902831 0.00712307 1 0 +0.391538 0.0733979 0.181127 0.00823926 1 0 +0.386642 0.103587 0.194456 0.0057173 1 0 +0.353589 0.0933042 0.189377 0.00930854 1 0 +0.368799 0.0965009 0.17087 0.00800324 1 0 +0.0172555 0.065784 0.127555 0.00757448 1 0 +0.0482225 0.0691234 0.119297 0.00644119 1 0 +0.0294276 0.0847632 0.137985 0.00519188 1 0 +0.0442468 0.0580953 0.140519 0.00765787 1 0 +0.0114241 0.186249 0.0561499 0.0059827 1 0 +0.262791 0.180463 0.0104332 0.00712933 1 0 +0.294967 0.180725 0.00756748 0.00765309 1 0 +0.285215 0.168706 0.0109914 0.00819881 1 0 +0.381007 0.113507 0.121441 0.00943741 1 0 +0.356667 0.0880347 0.110332 0.00593489 1 0 +0.351332 0.127097 0.103414 0.00650858 1 0 +0.361994 0.107448 0.135957 0.00580829 1 0 +0.155172 0.0084073 0.0683292 0.00890522 1 0 +0.188438 0.012146 0.0976326 0.00587874 1 0 +0.188594 0.00995718 0.0690544 0.00765734 1 0 +0.164749 0.0103023 0.0215641 0.0106028 1 0 +0.148297 0.0125693 0.0549953 0.00651599 1 0 +0.181856 0.00865314 0.0566887 0.00648529 1 0 +0.18013 0.0188051 0.0511475 0.00512225 1 0 +0.0135713 0.0284825 0.0616517 0.00617028 1 0 +0.0168143 0.0550432 0.0534702 0.00544081 1 0 +0.0409675 0.0512215 0.0813284 0.00719788 1 0 +0.0315788 0.0446527 0.0458322 0.00519363 1 0 +0.385172 0.0707297 0.121669 0.00688846 1 0 +0.374496 0.103002 0.129779 0.00547061 1 0 +0.36727 0.0697245 0.118015 0.00634524 1 0 +0.00772959 0.129551 0.178176 0.00705005 1 0 +0.00816046 0.138058 0.150509 0.00565004 1 0 +0.0289621 0.137907 0.164141 0.00587197 1 0 +0.0308662 0.118011 0.16402 0.00573116 1 0 +0.369926 0.0178553 0.192356 0.00551679 1 0 +0.340425 0.0223486 0.192848 0.00726053 1 0 +0.11975 0.194485 0.158475 0.00575396 1 0 +0.123894 0.160886 0.143244 0.00774069 1 0 +0.38433 0.118675 0.0362219 0.00799993 1 0 +0.383284 0.102965 0.0460323 0.00553318 1 0 +0.375325 0.156401 0.0123866 0.00920127 1 0 +0.357718 0.185092 0.00968631 0.00792417 1 0 +0.347141 0.186821 0.121368 0.0135055 1 0 +0.326057 0.18231 0.153424 0.00539424 1 0 +0.350309 0.194901 0.11039 0.0056395 1 0 +0.346212 0.166812 0.115758 0.00776566 1 0 +0.386697 0.192126 0.181588 0.00799521 1 0 +0.391156 0.161996 0.18664 0.00904983 1 0 +0.390692 0.174385 0.154308 0.00550439 1 0 +0.0981993 0.0080985 0.00848544 0.00689311 1 0 +0.130053 0.00832591 0.00885153 0.00577159 1 0 +0.394383 0.0239477 0.190847 0.00572692 1 0 +0.134318 0.12667 0.172249 0.0140221 1 0 +0.120571 0.140802 0.136533 0.0136934 1 0 +0.153977 0.137668 0.159255 0.0119829 1 0 +0.238908 0.0637111 0.182828 0.00588483 1 0 +0.217927 0.0660372 0.181256 0.00886203 1 0 +0.213215 0.0882626 0.14329 0.00970245 1 0 +0.23219 0.049967 0.161982 0.00523379 1 0 +0.150521 0.116093 0.0410209 0.0080791 1 0 +0.171537 0.113958 0.0821499 0.0127537 1 0 +0.14791 0.109908 0.0683858 0.00711928 1 0 +0.119181 0.11991 0.0577099 0.0123017 1 0 +0.280074 0.0657231 0.0256561 0.00865399 1 0 +0.315154 0.0634001 0.0129531 0.00810922 1 0 +0.284546 0.0676017 0.0591255 0.00532716 1 0 +0.287665 0.0444101 0.0328449 0.00617395 1 0 +0.103511 0.0542246 0.0293572 0.00602015 1 0 +0.0695044 0.04998 0.0409961 0.00763791 1 0 +0.0777995 0.108209 0.0272184 0.0085827 1 0 +0.105089 0.0831391 0.0281576 0.00846905 1 0 +0.085815 0.0790746 0.0487101 0.00653949 1 0 +0.0968583 0.116976 0.0358279 0.00730169 1 0 +0.23678 0.180027 0.189891 0.00785738 1 0 +0.227769 0.143544 0.185132 0.00749987 1 0 +0.374033 0.01768 0.00744475 0.0059995 1 0 +0.339686 0.00677261 0.00975196 0.00758317 1 0 +0.345282 0.0433209 0.00911013 0.00944693 1 0 +0.172435 0.170777 0.00790899 0.0071469 1 0 +0.164953 0.130355 0.0128714 0.00969678 1 0 +0.158948 0.0614367 0.187529 0.00543337 1 0 +0.189978 0.0716632 0.177366 0.00746771 1 0 +0.178238 0.0797084 0.15281 0.00515117 1 0 +0.165762 0.0528525 0.170612 0.00763925 1 0 +0.0212608 0.0094604 0.0249075 0.00532478 1 0 +0.0403634 0.0072238 0.0517658 0.00747519 1 0 +0.272598 0.106078 0.104539 0.0105631 1 0 +0.287075 0.128572 0.101641 0.0131448 1 0 +0.267112 0.132629 0.0860788 0.01249 1 0 +0.268691 0.137384 0.115787 0.0116689 1 0 +0.27002 0.0257179 0.0636094 0.00820884 1 0 +0.273264 0.0592573 0.0810021 0.00733734 1 0 +0.28318 0.0354773 0.0531312 0.00527753 1 0 +0.389817 0.174931 0.080054 0.0106338 1 0 +0.384445 0.132558 0.0788915 0.00836827 1 0 +0.378701 0.139814 0.0972384 0.00602715 1 0 +0.368813 0.141861 0.0898128 0.00650638 1 0 +0.375492 0.110279 0.0315041 0.00507147 1 0 +0.357443 0.0867631 0.00909228 0.00870971 1 0 +0.375897 0.17125 0.088069 0.00602091 1 0 +0.393984 0.161636 0.116134 0.00619005 1 0 +0.373611 0.161616 0.0966576 0.00525879 1 0 +0.238039 0.00638372 0.171919 0.00666163 1 0 +0.216858 0.00703131 0.152268 0.00513398 1 0 +0.248589 0.00675868 0.148564 0.00687499 1 0 +0.250447 0.0211514 0.146636 0.00776452 1 0 +0.0113154 0.182689 0.00817339 0.00538843 1 0 +0.0238939 0.157768 0.00645951 0.00671657 1 0 +0.0526952 0.185282 0.00720097 0.00766273 1 0 +0.352161 0.0664096 0.0153645 0.00547242 1 0 +0.366475 0.0528956 0.0311387 0.00678152 1 0 +0.365266 0.0710618 0.0239861 0.00520902 1 0 +0.00559995 0.0871335 0.18492 0.00598431 1 0 +0.0112576 0.123259 0.187933 0.00508419 1 0 +0.00679544 0.114603 0.150888 0.00721419 1 0 +0.331843 0.0232473 0.0106033 0.00564219 1 0 +0.332571 0.0501213 0.0120277 0.00731454 1 0 +0.163805 0.12126 0.0301393 0.0098536 1 0 +0.183228 0.124309 0.0663082 0.00949033 1 0 +0.16112 0.149977 0.0571642 0.00646968 1 0 +0.0363436 0.00966209 0.145313 0.0101949 1 0 +0.0688378 0.00717589 0.182349 0.00732408 1 0 +0.0901335 0.00996526 0.15139 0.00727241 1 0 +0.0971279 0.0886962 0.172203 0.0076308 1 0 +0.123389 0.0696746 0.17629 0.0142557 1 0 +0.124882 0.0519842 0.162996 0.00792356 1 0 +0.0127854 0.18895 0.187874 0.0060405 1 0 +0.0175302 0.185317 0.159172 0.0049817 1 0 +0.0525532 0.194899 0.185444 0.00556042 1 0 +0.293887 0.136954 0.174997 0.0101556 1 0 +0.292423 0.15219 0.135484 0.0100152 1 0 +0.282663 0.14629 0.152378 0.0103683 1 0 +0.38584 0.172299 0.134702 0.0055863 1 0 +0.382557 0.152871 0.130059 0.00586379 1 0 +0.357948 0.153628 0.110573 0.00712653 1 0 +0.370099 0.157471 0.142381 0.00630911 1 0 +0.231197 0.192268 0.0787137 0.0079133 1 0 +0.255548 0.165874 0.0866424 0.00790485 1 0 +0.104601 0.0696791 0.0710747 0.0055276 1 0 +0.121347 0.0793999 0.0725771 0.0138937 1 0 +0.107036 0.102437 0.0568728 0.00899351 1 0 +0.283468 0.0231189 0.0642061 0.005501 1 0 +0.302915 0.0162019 0.0810346 0.00755809 1 0 +0.0142963 0.174362 0.133416 0.00796007 1 0 +0.0146243 0.145628 0.132304 0.00815538 1 0 +0.0505912 0.153131 0.131263 0.00849822 1 0 +0.0272526 0.160361 0.151105 0.00523692 1 0 +0.13311 0.0181588 0.0707926 0.00755563 1 0 +0.127461 0.0404578 0.0564505 0.00617569 1 0 +0.151748 0.0383447 0.0530821 0.00513729 1 0 +0.00679267 0.169096 0.0536077 0.00703579 1 0 +0.00651555 0.128824 0.0595809 0.00620981 1 0 +0.199676 0.173535 0.126518 0.0114282 1 0 +0.355852 0.0615542 0.189935 0.00529508 1 0 +0.363794 0.0772269 0.169744 0.00559938 1 0 +0.0653017 0.125566 0.174107 0.00626643 1 0 +0.0706548 0.124027 0.145934 0.00508993 1 0 +0.0437616 0.136513 0.163371 0.00505446 1 0 +0.0403833 0.118787 0.153449 0.00513884 1 0 +0.0668814 0.177731 0.0527361 0.00573733 1 0 +0.0839827 0.158633 0.0492808 0.00631288 1 0 +0.244283 0.130233 0.0206647 0.0134639 1 0 +0.248042 0.142193 0.0542112 0.00985963 1 0 +0.127496 0.0235248 0.0806035 0.00495716 1 0 +0.112549 0.0236483 0.117163 0.00574903 1 0 +0.102698 0.0328561 0.104551 0.00541704 1 0 +0.121179 0.0419633 0.103427 0.00550955 1 0 +0.0949815 0.00750083 0.183421 0.00782525 1 0 +0.134652 0.00614998 0.184862 0.00637881 1 0 +0.116839 0.0088601 0.154427 0.00920183 1 0 +0.31655 0.00700799 0.0248976 0.00751269 1 0 +0.290853 0.00645499 0.0473027 0.00643783 1 0 +0.198169 0.0451707 0.154014 0.00652276 1 0 +0.202753 0.0641795 0.129688 0.00629429 1 0 +0.231726 0.0501635 0.148392 0.00836477 1 0 +0.0806751 0.186693 0.0947945 0.00588621 1 0 +0.0980923 0.193862 0.114456 0.00659301 1 0 +0.0927057 0.166659 0.0945026 0.00576554 1 0 +0.131037 0.0979195 0.0154893 0.00529982 1 0 +0.119759 0.0958302 0.0614018 0.00604038 1 0 +0.117254 0.105551 0.0450691 0.00692544 1 0 +0.180049 0.0968475 0.0963658 0.0110648 1 0 +0.147055 0.0681246 0.0888777 0.00600637 1 0 +0.165325 0.0730319 0.0647813 0.0116055 1 0 +0.356389 0.0605846 0.0771528 0.00670138 1 0 +0.0090253 0.146891 0.178321 0.00943242 1 0 +0.00766876 0.177799 0.147082 0.00803472 1 0 +0.284654 0.182165 0.0777849 0.00603437 1 0 +0.317912 0.188593 0.0821801 0.010196 1 0 +0.31526 0.170622 0.0967369 0.00954165 1 0 +0.157011 0.0204114 0.191012 0.00814343 1 0 +0.0246857 0.126178 0.0110075 0.00674863 1 0 +0.0583965 0.11981 0.0136165 0.00686965 1 0 +0.0423734 0.131397 0.0355498 0.00524297 1 0 +0.359164 0.0155869 0.1297 0.0124649 1 0 +0.346991 0.00989893 0.149958 0.00993081 1 0 +0.335926 0.0173156 0.11971 0.0128885 1 0 +0.351904 0.0330754 0.118387 0.00959278 1 0 +0.394389 0.0194257 0.0160663 0.00555908 1 0 +0.379919 0.129378 0.133306 0.00674795 1 0 +0.343983 0.13786 0.10791 0.00727759 1 0 +0.353387 0.128435 0.141138 0.00927701 1 0 +0.360604 0.139797 0.147167 0.0054718 1 0 +0.210437 0.166175 0.0492754 0.00567761 1 0 +0.333137 0.0762092 0.17059 0.0105529 1 0 +0.304235 0.104976 0.172225 0.0128493 1 0 +0.335688 0.0988857 0.167769 0.0124404 1 0 +0.202789 0.187561 0.113687 0.00783417 1 0 +0.216769 0.19414 0.0854304 0.0061718 1 0 +0.226591 0.167311 0.0969075 0.00680436 1 0 +0.0790982 0.1003 0.091185 0.00741713 1 0 +0.0916304 0.108721 0.10674 0.00642763 1 0 +0.124019 0.099056 0.0987964 0.0119762 1 0 +0.099967 0.113614 0.0782024 0.00766243 1 0 +0.322068 0.132654 0.161504 0.0110719 1 0 +0.328964 0.137853 0.116072 0.00981602 1 0 +0.347629 0.119456 0.153756 0.00724557 1 0 +0.343041 0.14108 0.150765 0.00968606 1 0 +0.308067 0.0305676 0.014255 0.00749486 1 0 +0.288222 0.0486479 0.00726165 0.00755659 1 0 +0.322953 0.0477624 0.00519321 0.00532254 1 0 +0.163145 0.0244185 0.00512858 0.00531505 1 0 +0.143503 0.0521922 0.0141325 0.00602348 1 0 +0.176407 0.0560466 0.00779385 0.00804853 1 0 +0.171945 0.0484305 0.027348 0.00827547 1 0 +0.170499 0.19428 0.0274052 0.00537 1 0 +0.156708 0.193111 0.0620835 0.0071917 1 0 +0.185673 0.194117 0.0511677 0.00612124 1 0 +0.0331075 0.0116814 0.124277 0.0112441 1 0 +0.0663881 0.017704 0.134001 0.00695376 1 0 +0.0509858 0.0401183 0.121398 0.00752897 1 0 +0.0536159 0.0388033 0.139584 0.00586791 1 0 +0.377357 0.0513898 0.0351915 0.00492737 1 0 +0.379201 0.0777361 0.037615 0.00548177 1 0 +0.205056 0.128243 0.0246036 0.0112558 1 0 +0.194766 0.119397 0.0757122 0.00618427 1 0 +0.181175 0.145115 0.0499636 0.00675236 1 0 +0.148696 0.0473235 0.193751 0.00638771 1 0 +0.1805 0.0491506 0.19158 0.00866147 1 0 +0.0218087 0.0143186 0.108466 0.00836723 1 0 +0.0478675 0.0219623 0.0896958 0.00823181 1 0 +0.0512223 0.0421287 0.0966569 0.0133643 1 0 +0.0207695 0.021881 0.119874 0.00535858 1 0 +0.0215509 0.0467649 0.120322 0.00641871 1 0 +0.0360928 0.0484112 0.104878 0.00496479 1 0 +0.0326386 0.0525415 0.145065 0.00598976 1 0 +0.381427 0.190418 0.194281 0.00586092 1 0 +0.373734 0.16649 0.18837 0.00498055 1 0 +0.205452 0.154565 0.177984 0.00579418 1 0 +0.194448 0.131231 0.149231 0.00721404 1 0 +0.0229852 0.137984 0.00566485 0.00616599 1 0 +0.0607551 0.169837 0.00924403 0.00965325 1 0 +0.0609532 0.142705 0.00515321 0.00524266 1 0 +0.0845293 0.0785676 0.161161 0.00895357 1 0 +0.0760292 0.0631132 0.116189 0.00934452 1 0 +0.109096 0.0662653 0.125401 0.0088934 1 0 +0.0992344 0.0589427 0.143979 0.0105978 1 0 +0.273636 0.0785978 0.180015 0.0113957 1 0 +0.31771 0.0863584 0.178826 0.00966627 1 0 +0.29521 0.110289 0.191138 0.00918946 1 0 +0.381769 0.130907 0.179692 0.00549505 1 0 +0.384951 0.132232 0.147066 0.00501827 1 0 +0.368263 0.120297 0.157834 0.00564419 1 0 +0.372344 0.141301 0.154623 0.00518439 1 0 +0.015366 0.18067 0.0718755 0.00991698 1 0 +0.0571934 0.17713 0.0784465 0.00840477 1 0 +0.0608721 0.163181 0.103517 0.00874349 1 0 +0.0402299 0.146705 0.0580912 0.00834893 1 0 +0.254209 0.193453 0.0136025 0.00692331 1 0 +0.293146 0.193828 0.00583723 0.00565197 1 0 +0.273439 0.190697 0.0328814 0.00943147 1 0 +0.148158 0.0224957 0.0751162 0.0086904 1 0 +0.169855 0.0328631 0.104474 0.00539417 1 0 +0.161211 0.0397703 0.0704683 0.00845554 1 0 +0.14024 0.0469873 0.122983 0.010578 1 0 +0.336735 0.0202872 0.0803728 0.00662079 1 0 +0.331173 0.0418264 0.0836408 0.00698085 1 0 +0.248925 0.170773 0.189235 0.0074251 1 0 +0.262339 0.153703 0.191569 0.00510053 1 0 +0.228363 0.152946 0.194167 0.00555304 1 0 +0.253545 0.153824 0.172184 0.00501869 1 0 +0.085673 0.0219495 0.128863 0.00810289 1 0 +0.0787165 0.0476022 0.114194 0.00652346 1 0 +0.0980547 0.0314382 0.144821 0.00871123 1 0 +0.0709612 0.0486933 0.147475 0.00741279 1 0 +0.146003 0.180965 0.107392 0.00615155 1 0 +0.151935 0.175908 0.116585 0.00590186 1 0 +0.131311 0.156841 0.111757 0.006995 1 0 +0.156763 0.164613 0.0522469 0.00700493 1 0 +0.166162 0.131633 0.0940256 0.00920817 1 0 +0.169708 0.159475 0.0531444 0.00695105 1 0 +0.391928 0.014103 0.0938668 0.00815456 1 0 +0.391359 0.0211293 0.117583 0.00530946 1 0 +0.375048 0.0429505 0.106888 0.00530811 1 0 +0.0461391 0.0699646 0.193821 0.00627914 1 0 +0.0622147 0.0345418 0.191454 0.00898645 1 0 +0.0593306 0.0684257 0.192418 0.00508167 1 0 +0.0397629 0.0590945 0.170099 0.00595525 1 0 +0.0661161 0.112209 0.0346864 0.00584907 1 0 +0.0797103 0.0967227 0.0580186 0.00598094 1 0 +0.0568741 0.114675 0.041708 0.00601682 1 0 +0.0822935 0.121589 0.0590197 0.00649001 1 0 +0.0084868 0.184703 0.0965632 0.0086322 1 0 +0.00581197 0.179899 0.124047 0.00594827 1 0 +0.0193344 0.15123 0.117751 0.00813427 1 0 +0.0373418 0.165335 0.111805 0.00496009 1 0 +0.0069464 0.0203693 0.00957193 0.00729029 1 0 +0.0114912 0.0644476 0.0186047 0.00692857 1 0 +0.23016 0.15093 0.070759 0.00659564 1 0 +0.239476 0.169123 0.048159 0.00817471 1 0 +0.216925 0.162977 0.0570597 0.00494897 1 0 +0.256492 0.108796 0.106756 0.00592031 1 0 +0.239834 0.122034 0.101258 0.0072955 1 0 +0.250444 0.134166 0.118395 0.00695265 1 0 +0.0669046 0.0202201 0.0606514 0.00578 1 0 +0.0667976 0.109972 0.163301 0.00737749 1 0 +0.0647391 0.0862293 0.128114 0.00507807 1 0 +0.0730489 0.126344 0.135373 0.0059837 1 0 +0.0487948 0.104113 0.14207 0.00657197 1 0 +0.028089 0.193995 0.0135611 0.00631276 1 0 +0.0674378 0.193956 0.0187955 0.00627478 1 0 +0.0560479 0.192898 0.040999 0.00736616 1 0 +0.262174 0.14737 0.00768132 0.00782649 1 0 +0.110871 0.0181432 0.0802059 0.00539194 1 0 +0.0877005 0.00667963 0.0836161 0.00686255 1 0 +0.104632 0.00847264 0.10825 0.00872388 1 0 +0.0824788 0.0353326 0.0842433 0.00699519 1 0 +0.14732 0.10401 0.105935 0.0128921 1 0 +0.131004 0.0929942 0.120441 0.0115619 1 0 +0.124891 0.124973 0.0770648 0.00850322 1 0 +0.367253 0.00909377 0.0543428 0.00926423 1 0 +0.341448 0.00752611 0.0337154 0.00700713 1 0 +0.353185 0.00671947 0.0658624 0.00679685 1 0 +0.360068 0.0192233 0.0458931 0.00610856 1 0 +0.00526509 0.0409069 0.136276 0.00535184 1 0 +0.00810634 0.0521513 0.169336 0.00845315 1 0 +0.00898223 0.0516547 0.135279 0.00540738 1 0 +0.0272917 0.0344396 0.154164 0.00617013 1 0 +0.28683 0.192156 0.0542309 0.00529478 1 0 +0.306074 0.167622 0.0566469 0.00537123 1 0 +0.19755 0.0334298 0.0932068 0.00801512 1 0 +0.189077 0.0691788 0.103897 0.0121385 1 0 +0.191992 0.113584 0.0278815 0.0086521 1 0 +0.162067 0.106234 0.0287016 0.00534139 1 0 +0.179901 0.11 0.0638109 0.00541145 1 0 +0.17278 0.0881559 0.0541978 0.00830241 1 0 +0.288755 0.0755487 0.0109192 0.0110888 1 0 +0.308569 0.0795913 0.0189497 0.01037 1 0 +0.296556 0.0983438 0.0125803 0.0125357 1 0 +0.383772 0.0259801 0.193385 0.00537695 1 0 +0.386942 0.0526887 0.193606 0.00647137 1 0 +0.365199 0.047121 0.19492 0.0052279 1 0 +0.0519969 0.181546 0.139662 0.00596041 1 0 +0.073405 0.189449 0.169333 0.0107301 1 0 +0.0877081 0.173817 0.141113 0.00870525 1 0 +0.341047 0.169722 0.193253 0.00654535 1 0 +0.330376 0.150117 0.192594 0.00496002 1 0 +0.114133 0.161206 0.130073 0.00865552 1 0 +0.303032 0.188236 0.140302 0.0117671 1 0 +0.315833 0.195507 0.114557 0.00504126 1 0 +0.284501 0.189967 0.127885 0.0104032 1 0 +0.312477 0.161431 0.113936 0.0101568 1 0 +0.327634 0.0793802 0.0481969 0.0100093 1 0 +0.324448 0.0752109 0.0906867 0.0083484 1 0 +0.31356 0.104172 0.0805245 0.00749451 1 0 +0.327746 0.101416 0.0747659 0.00806205 1 0 +0.121771 0.0134248 0.122837 0.00852373 1 0 +0.159631 0.0150029 0.128638 0.00980085 1 0 +0.392511 0.0522317 0.169404 0.00783913 1 0 +0.395162 0.0501463 0.134408 0.00498903 1 0 +0.272107 0.170806 0.116229 0.013434 1 0 +0.281281 0.155885 0.101404 0.0095132 1 0 +0.266574 0.153585 0.107595 0.00660862 1 0 +0.264709 0.153674 0.119585 0.00552586 1 0 +0.38681 0.0562555 0.00638283 0.00528748 1 0 +0.365455 0.0437473 0.0107899 0.00529517 1 0 +0.210022 0.123308 0.12934 0.00556125 1 0 +0.250494 0.193287 0.180336 0.00706519 1 0 +0.258499 0.192009 0.147804 0.00855534 1 0 +0.281498 0.0581577 0.178437 0.0105608 1 0 +0.303242 0.0692587 0.176297 0.00683264 1 0 +0.279185 0.0677835 0.134067 0.00571929 1 0 +0.283695 0.0478234 0.161373 0.00950883 1 0 +0.201343 0.0885042 0.00865546 0.00499766 1 0 +0.217247 0.0657974 0.0338116 0.00681007 1 0 +0.184647 0.0707221 0.0238142 0.00558769 1 0 +0.109721 0.184804 0.00937792 0.00961705 1 0 +0.329991 0.0107204 0.0287114 0.0058961 1 0 +0.324986 0.00709674 0.065553 0.00544047 1 0 +0.320655 0.0241156 0.0465631 0.00626207 1 0 +0.246404 0.0691349 0.00781767 0.00828671 1 0 +0.222941 0.103933 0.0111598 0.011335 1 0 +0.216109 0.0696221 0.00799544 0.00826141 1 0 +0.157528 0.0899447 0.191168 0.00507421 1 0 +0.155537 0.100229 0.191591 0.00540953 1 0 +0.177525 0.0943671 0.150699 0.00861897 1 0 +0.0348592 0.00813347 0.015002 0.00828149 1 0 +0.0512365 0.0192255 0.0153088 0.00517423 1 0 +0.342655 0.0798171 0.0361204 0.00926937 1 0 +0.3391 0.0812289 0.0784261 0.0116296 1 0 +0.338672 0.111785 0.0750774 0.00700406 1 0 +0.330466 0.129438 0.187166 0.00655636 1 0 +0.361513 0.120336 0.171651 0.00498052 1 0 +0.205291 0.0302313 0.114125 0.0145174 1 0 +0.20977 0.0267413 0.0944394 0.00597039 1 0 +0.205971 0.0681862 0.0953955 0.00680038 1 0 +0.233346 0.0592739 0.0989024 0.0127908 1 0 +0.0729556 0.0741033 0.169157 0.00580497 1 0 +0.0687666 0.0753065 0.130455 0.00601045 1 0 +0.0846709 0.0567052 0.156714 0.00887761 1 0 +0.0667951 0.0521266 0.1623 0.00836534 1 0 +0.29608 0.0149178 0.0917873 0.00524784 1 0 +0.283962 0.0466343 0.0910075 0.00567696 1 0 +0.0622957 0.0349496 0.0106501 0.0110784 1 0 +0.0495625 0.0756888 0.00622606 0.00642553 1 0 +0.386469 0.0770333 0.0583167 0.00552774 1 0 +0.387526 0.0946109 0.0661314 0.00621954 1 0 +0.362512 0.0757967 0.0849561 0.00624904 1 0 +0.241755 0.185676 0.178927 0.00544206 1 0 +0.234978 0.173823 0.150145 0.00528781 1 0 +0.0631754 0.100075 0.0342654 0.00630015 1 0 +0.0490861 0.10025 0.0597905 0.00612054 1 0 +0.0448321 0.0676857 0.0483798 0.00556852 1 0 +0.357979 0.0272896 0.0764568 0.00501178 1 0 +0.278958 0.131248 0.150856 0.00519829 1 0 +0.280979 0.110705 0.130202 0.00534803 1 0 +0.302751 0.12933 0.116301 0.00833201 1 0 +0.27393 0.140098 0.141054 0.00521546 1 0 +0.0373405 0.191358 0.126653 0.00727957 1 0 +0.0677841 0.191625 0.0901428 0.00869273 1 0 +0.0844209 0.191969 0.124443 0.00855905 1 0 +0.0775465 0.162201 0.109099 0.0082593 1 0 +0.0207555 0.0053754 0.188771 0.00547368 1 0 +0.0455209 0.00928189 0.181845 0.00561126 1 0 +0.0245158 0.167059 0.0749526 0.00601204 1 0 +0.0568859 0.143012 0.0981434 0.00673649 1 0 +0.0311157 0.142002 0.0668341 0.00512793 1 0 +0.00911201 0.111889 0.0105822 0.00952419 1 0 +0.0289019 0.0987202 0.0405127 0.00667252 1 0 +0.0153248 0.0709797 0.185047 0.00708259 1 0 +0.0468106 0.0975161 0.194603 0.00576613 1 0 +0.0330428 0.088288 0.168913 0.00655303 1 0 +0.0319882 0.0658179 0.164622 0.00569154 1 0 +0.327932 0.0661663 0.0347492 0.00884639 1 0 +0.325235 0.0611186 0.0757851 0.00502571 1 0 +0.301791 0.0719827 0.0647257 0.00502249 1 0 +0.140444 0.0208043 0.00857616 0.00554489 1 0 +0.13206 0.0531746 0.0191259 0.00650001 1 0 +0.0227459 0.0405526 0.0137735 0.00512675 1 0 +0.0139517 0.0311413 0.0791735 0.00739728 1 0 +0.00812655 0.0462816 0.0920372 0.00831147 1 0 +0.0100434 0.0603263 0.0679059 0.00747143 1 0 +0.0330852 0.0595645 0.0875891 0.00587617 1 0 +0.01453 0.0759006 0.120222 0.00521403 1 0 +0.0151535 0.103402 0.114357 0.0067483 1 0 +0.0287214 0.0951057 0.139099 0.00523436 1 0 +0.0133948 0.0273098 0.111089 0.00733124 1 0 +0.00839056 0.0392552 0.105564 0.00674924 1 0 +0.0335484 0.0517292 0.0957753 0.00505228 1 0 +0.321536 0.0865347 0.161924 0.00723207 1 0 +0.336144 0.0797876 0.125265 0.00618701 1 0 +0.306447 0.0747709 0.124501 0.0063047 1 0 +0.338491 0.0802498 0.140048 0.00809261 1 0 +0.0724714 0.172504 0.0723751 0.00867382 1 0 +0.077077 0.155879 0.0945479 0.00612652 1 0 +0.0603146 0.142855 0.064314 0.00788684 1 0 +0.0873398 0.153674 0.0624092 0.00743584 1 0 +0.0837064 0.168728 0.18948 0.00889523 1 0 +0.0796081 0.136161 0.182522 0.013425 1 0 +0.0984236 0.143756 0.174245 0.00848882 1 0 +0.090862 0.139998 0.157997 0.00982194 1 0 +0.120833 0.0169722 0.0755527 0.00566548 1 0 +0.0890771 0.0475762 0.0844198 0.00691428 1 0 +0.111386 0.0351207 0.0575203 0.0053293 1 0 +0.220659 0.0305815 0.129607 0.00729992 1 0 +0.20806 0.0804905 0.123909 0.0118058 1 0 +0.238003 0.061297 0.120152 0.00905688 1 0 +0.233536 0.0524825 0.134068 0.00625855 1 0 +0.246734 0.133539 0.040288 0.00658618 1 0 +0.261156 0.116553 0.0379597 0.0120144 1 0 +0.253954 0.128533 0.0491202 0.00587193 1 0 +0.0659653 0.0123689 0.0890542 0.0122615 1 0 +0.0753169 0.0123982 0.113778 0.0125732 1 0 +0.0701547 0.0311356 0.0969636 0.00853032 1 0 +0.124168 0.167553 0.0768115 0.00984731 1 0 +0.154698 0.126665 0.106738 0.00861596 1 0 +0.114986 0.142254 0.0860121 0.0133329 1 0 +0.346007 0.153192 0.00795461 0.00800824 1 0 +0.318942 0.148861 0.0113152 0.0115475 1 0 +0.318348 0.0348712 0.0863439 0.00785672 1 0 +0.303844 0.0561051 0.0899067 0.0052354 1 0 +0.313022 0.0358319 0.074224 0.00541661 1 0 +0.152268 0.0076484 0.173852 0.00786869 1 0 +0.13011 0.0144056 0.154271 0.00585279 1 0 +0.165082 0.0119672 0.144377 0.00713006 1 0 +0.0871026 0.125344 0.0093217 0.0096307 1 0 +0.122601 0.0934845 0.0107429 0.00534686 1 0 +0.390935 0.0680353 0.16854 0.00545651 1 0 +0.391784 0.0660705 0.137733 0.0081494 1 0 +0.368876 0.0851037 0.157602 0.00681751 1 0 +0.3435 0.0532953 0.184997 0.0059137 1 0 +0.0678451 0.116635 0.0213229 0.00572971 1 0 +0.0831903 0.134643 0.0428236 0.0073013 1 0 +0.315142 0.019002 0.154585 0.00509271 1 0 +0.318834 0.0287574 0.124498 0.0082297 1 0 +0.331325 0.0384706 0.118156 0.00881685 1 0 +0.257485 0.0774816 0.0149607 0.00737033 1 0 +0.243986 0.105343 0.0208968 0.0114293 1 0 +0.250893 0.0810976 0.056506 0.00976706 1 0 +0.241362 0.071397 0.0497077 0.00543699 1 0 +0.0951764 0.190812 0.0352198 0.005069 1 0 +0.105909 0.1918 0.0552695 0.0055431 1 0 +0.0838705 0.19237 0.0559887 0.00778471 1 0 +0.0909871 0.168167 0.046449 0.00585127 1 0 +0.138129 0.0547823 0.0314965 0.00737256 1 0 +0.133008 0.0625234 0.0701167 0.00598886 1 0 +0.131467 0.0487513 0.0499509 0.0050972 1 0 +0.392729 0.17308 0.0543232 0.00762244 1 0 +0.390069 0.140352 0.0309828 0.00894587 1 0 +0.392483 0.144524 0.0675016 0.00668198 1 0 +0.365541 0.139541 0.0628607 0.00767386 1 0 +0.181917 0.072989 0.122854 0.00848093 1 0 +0.151607 0.0618207 0.010758 0.00684657 1 0 +0.170956 0.0743141 0.00515087 0.00535107 1 0 +0.151276 0.100927 0.0089466 0.00913301 1 0 +0.159422 0.0740842 0.0305408 0.00543141 1 0 +0.115667 0.180416 0.0794904 0.0058022 1 0 +0.0994465 0.155809 0.0923839 0.00718233 1 0 +0.0999845 0.154006 0.0694851 0.00705776 1 0 +0.273075 0.179113 0.0764238 0.0060175 1 0 +0.273414 0.182999 0.100381 0.00660443 1 0 +0.294461 0.167567 0.0871492 0.00611654 1 0 +0.267046 0.169424 0.0821706 0.00493232 1 0 +0.263157 0.0743531 0.166745 0.00603747 1 0 +0.236311 0.0883744 0.127816 0.00866709 1 0 +0.262038 0.0760561 0.129225 0.00937597 1 0 +0.260806 0.0583165 0.152129 0.00554879 1 0 +0.127913 0.0401208 0.0105813 0.0108419 1 0 +0.139949 0.188361 0.0447094 0.00963688 1 0 +0.156756 0.175254 0.0466356 0.00502514 1 0 +0.0182403 0.0775134 0.0207589 0.00585374 1 0 +0.049628 0.0861852 0.0125484 0.00534557 1 0 +0.0386586 0.104817 0.0341019 0.00649825 1 0 +0.0504136 0.0672162 0.0286269 0.00617965 1 0 +0.241949 0.0263184 0.0058993 0.00573091 1 0 +0.252068 0.0556234 0.00921361 0.00637274 1 0 +0.22369 0.0526726 0.0183509 0.0052916 1 0 +0.232494 0.0511763 0.0241064 0.00533218 1 0 +0.19112 0.181137 0.00602503 0.00537962 1 0 +0.202486 0.159753 0.0127104 0.00927223 1 0 +0.0752446 0.00953644 0.0199405 0.00785062 1 0 +0.0762035 0.00765303 0.0478329 0.00785765 1 0 +0.0933209 0.00532339 0.0221773 0.00561959 1 0 +0.103481 0.0147954 0.0398048 0.00544491 1 0 +0.0277912 0.120626 0.096511 0.00511143 1 0 +0.0426447 0.126149 0.114312 0.00516252 1 0 +0.196674 0.18675 0.102437 0.0049966 1 0 +0.211756 0.1794 0.0726919 0.00523377 1 0 +0.223498 0.175543 0.0884482 0.00502362 1 0 +0.200843 0.175993 0.0680288 0.00711302 1 0 +0.342708 0.0784478 0.109096 0.0064675 1 0 +0.301046 0.0851749 0.11395 0.00736852 1 0 +0.326322 0.112953 0.104599 0.00894385 1 0 +0.33831 0.112264 0.129564 0.00533993 1 0 +0.146632 0.119854 0.155857 0.00758345 1 0 +0.113839 0.124127 0.123163 0.00871534 1 0 +0.147431 0.104285 0.128928 0.0101026 1 0 +0.130699 0.107509 0.132492 0.00730589 1 0 +0.110278 0.121507 0.179754 0.0116856 1 0 +0.0956274 0.122005 0.158534 0.00879957 1 0 +0.119865 0.0920174 0.138423 0.00961322 1 0 +0.219451 0.0418365 0.0510078 0.00644042 1 0 +0.173338 0.00866538 0.177793 0.00550045 1 0 +0.211117 0.00543773 0.18246 0.00561183 1 0 +0.187216 0.00837054 0.155071 0.00872445 1 0 +0.1664 0.17484 0.0827415 0.00501124 1 0 +0.177999 0.143392 0.0931468 0.00585077 1 0 +0.109717 0.192946 0.0137512 0.00724742 1 0 +0.14143 0.184762 0.0195865 0.00684492 1 0 +0.122259 0.190175 0.0476535 0.0102463 1 0 +0.0667361 0.169401 0.0599992 0.00531496 1 0 +0.082868 0.146826 0.0508342 0.00564837 1 0 +0.0552552 0.154891 0.0433447 0.00561681 1 0 +0.310689 0.151778 0.181469 0.00665367 1 0 +0.330094 0.152012 0.136954 0.0113277 1 0 +0.345349 0.156333 0.145413 0.00664196 1 0 +0.251394 0.126454 0.166924 0.0114056 1 0 +0.267385 0.108622 0.136848 0.00553662 1 0 +0.263938 0.13864 0.160479 0.00723252 1 0 +0.360484 0.188651 0.0759512 0.00497759 1 0 +0.331221 0.188418 0.0363829 0.00560804 1 0 +0.331933 0.192602 0.0717644 0.00779763 1 0 +0.347752 0.165414 0.0682079 0.00796147 1 0 +0.136251 0.00928 0.0920064 0.00859638 1 0 +0.129956 0.0161276 0.112292 0.00509584 1 0 +0.152579 0.0159942 0.115424 0.00520984 1 0 +0.136703 0.036157 0.110096 0.00662378 1 0 +0.100961 0.00493377 0.154156 0.00544695 1 0 +0.13546 0.0669218 0.0237618 0.0068288 1 0 +0.142736 0.0815677 0.0644031 0.00910591 1 0 +0.155592 0.0620349 0.0396216 0.00727139 1 0 +0.23071 0.0941707 0.0424577 0.0106171 1 0 +0.231904 0.080267 0.0565854 0.00924055 1 0 +0.136849 0.055555 0.169806 0.00630133 1 0 +0.13647 0.0580592 0.135486 0.00654245 1 0 +0.150866 0.0539106 0.165846 0.00803573 1 0 +0.394575 0.07269 0.0171423 0.0055546 1 0 +0.39486 0.110574 0.0118853 0.00550496 1 0 +0.387951 0.0869387 0.0294716 0.00538716 1 0 +0.254035 0.0737726 0.183436 0.00907811 1 0 +0.227242 0.108008 0.16302 0.0103512 1 0 +0.22171 0.101723 0.147955 0.0068841 1 0 +0.246732 0.0983579 0.13288 0.00662683 1 0 +0.0335488 0.109202 0.0863888 0.00581296 1 0 +0.0513091 0.0948092 0.0875527 0.00611939 1 0 +0.05679 0.122306 0.0980262 0.00517686 1 0 +0.052778 0.114593 0.0733525 0.00678807 1 0 +0.377528 0.112721 0.191255 0.00636142 1 0 +0.323421 0.118747 0.192828 0.00747939 1 0 +0.0202821 0.127857 0.185543 0.00532221 1 0 +0.0456882 0.121297 0.189231 0.00619298 1 0 +0.0278125 0.163137 0.185644 0.00614243 1 0 +0.0407269 0.184969 0.19302 0.00713734 1 0 +0.202317 0.0380069 0.0635513 0.0061186 1 0 +0.196048 0.0690914 0.0860807 0.00683945 1 0 +0.214552 0.0556608 0.0504908 0.00558046 1 0 +0.187018 0.0565114 0.0598651 0.00514824 1 0 +0.192447 0.179866 0.191769 0.00552928 1 0 +0.382976 0.00933654 0.00800821 0.00624409 1 0 +0.379462 0.00880123 0.0393308 0.00900867 1 0 +0.228739 0.0357554 0.140074 0.00689897 1 0 +0.253924 0.0245816 0.129793 0.00977247 1 0 +0.254756 0.0552683 0.117164 0.0089968 1 0 +0.244956 0.0366762 0.141704 0.00942559 1 0 +0.284401 0.126071 0.0301732 0.0129644 1 0 +0.280462 0.111896 0.0848258 0.0114435 1 0 +0.294088 0.127276 0.0774395 0.0103921 1 0 +0.280271 0.135028 0.0733615 0.0059669 1 0 +0.00563921 0.0823402 0.11215 0.00596405 1 0 +0.00684844 0.11187 0.11031 0.0057838 1 0 +0.0379734 0.0850477 0.0989356 0.00668566 1 0 +0.148048 0.0673697 0.16165 0.00634128 1 0 +0.16632 0.0802059 0.13652 0.0100819 1 0 +0.153832 0.0715793 0.136283 0.00509827 1 0 +0.164782 0.0570918 0.149821 0.00786055 1 0 +0.0708317 0.0947185 0.0813214 0.00661075 1 0 +0.0669437 0.121838 0.0984773 0.00499761 1 0 +0.0644455 0.124797 0.0716368 0.00615064 1 0 +0.090339 0.120408 0.0696529 0.00689617 1 0 +0.262019 0.0920942 0.188904 0.00850721 1 0 +0.266705 0.121891 0.180648 0.00733623 1 0 +0.243492 0.119364 0.185346 0.00985739 1 0 +0.265228 0.0970171 0.153937 0.00631729 1 0 +0.386732 0.186006 0.0490056 0.0075897 1 0 +0.391645 0.153252 0.0174181 0.00874731 1 0 +0.0164142 0.169571 0.0469836 0.00510672 1 0 +0.0162801 0.146559 0.0269116 0.00578039 1 0 +0.0336765 0.137425 0.0465965 0.00640884 1 0 +0.0352034 0.153494 0.042736 0.00671905 1 0 +0.393189 0.145792 0.170589 0.00703241 1 0 +0.393971 0.175462 0.142844 0.00637997 1 0 +0.393145 0.142807 0.143542 0.006247 1 0 +0.378366 0.151838 0.156955 0.00527381 1 0 +0.381775 0.0767982 0.00497851 0.00506417 1 0 +0.384389 0.110274 0.00625307 0.00656743 1 0 +0.0501918 0.0651677 0.0751153 0.00698474 1 0 +0.0522839 0.0587165 0.0514569 0.00649157 1 0 +0.217106 0.0220904 0.0114196 0.00546845 1 0 +0.20051 0.0538623 0.0172405 0.0068967 1 0 +0.222733 0.0473342 0.0279354 0.00572104 1 0 +0.261327 0.0222179 0.186737 0.00551997 1 0 +0.300809 0.0175195 0.00825984 0.0083 1 0 +0.278985 0.0387736 0.00632486 0.00651096 1 0 +0.0868131 0.14207 0.00723754 0.00730909 1 0 +0.111635 0.139991 0.0197633 0.00503765 1 0 +0.103829 0.139937 0.0308627 0.00710114 1 0 +0.0486418 0.113671 0.00631207 0.00680382 1 0 +0.0276864 0.110959 0.0271024 0.00789287 1 0 +0.189698 0.0844834 0.00680689 0.00718779 1 0 +0.165699 0.11211 0.0107286 0.00868968 1 0 +0.213054 0.136856 0.0377959 0.00641269 1 0 +0.205379 0.128465 0.0764922 0.00779672 1 0 +0.210352 0.14347 0.0803363 0.00847115 1 0 +0.19583 0.147316 0.0427877 0.00687583 1 0 +0.203294 0.0652706 0.173102 0.00790694 1 0 +0.195976 0.0856479 0.140561 0.00794527 1 0 +0.198447 0.0571985 0.161029 0.00740396 1 0 +0.271409 0.00778163 0.00978963 0.0049704 1 0 +0.294126 0.00627609 0.01453 0.00645502 1 0 +0.28841 0.183894 0.158858 0.00510762 1 0 +0.269919 0.183373 0.131083 0.00614539 1 0 +0.29785 0.164485 0.122122 0.00688027 1 0 +0.377503 0.106226 0.0875702 0.00694416 1 0 +0.386703 0.127112 0.110159 0.00913205 1 0 +0.357162 0.124419 0.0912405 0.00725182 1 0 +0.0095061 0.116134 0.0277109 0.0070637 1 0 +0.00773396 0.0931842 0.051083 0.0050224 1 0 +0.00649546 0.115939 0.0538062 0.00667849 1 0 +0.0282208 0.110772 0.0450519 0.00622384 1 0 +0.394226 0.100204 0.186616 0.00590458 1 0 +0.390406 0.111207 0.183462 0.0060037 1 0 +0.371822 0.111796 0.16477 0.00589004 1 0 +0.320528 0.0880744 0.0322957 0.00945677 1 0 +0.298506 0.108633 0.0320131 0.00953935 1 0 +0.27853 0.09926 0.0699264 0.00818781 1 0 +0.31458 0.122673 0.0613605 0.0144611 1 0 +0.0293974 0.107606 0.126394 0.00543034 1 0 +0.0588922 0.124193 0.121338 0.00801985 1 0 +0.0424652 0.102032 0.131962 0.00553475 1 0 +0.364571 0.122046 0.00864333 0.0089966 1 0 +0.327554 0.121654 0.0148372 0.0124066 1 0 +0.333016 0.124314 0.0330948 0.00683507 1 0 +0.105421 0.0127092 0.192345 0.00790702 1 0 +0.137771 0.0134939 0.193549 0.00659779 1 0 +0.122142 0.0399081 0.190873 0.00657837 1 0 +0.0360628 0.14824 0.195135 0.00498531 1 0 +0.0487747 0.130945 0.194461 0.00520711 1 0 +0.0114236 0.190122 0.0171162 0.00624084 1 0 +0.00719424 0.185625 0.043441 0.00751635 1 0 +0.150284 0.191552 0.11361 0.00847748 1 0 +0.113937 0.170589 0.114578 0.00946019 1 0 +0.157242 0.195396 0.0739888 0.004951 1 0 +0.187169 0.191199 0.104521 0.0057037 1 0 +0.191458 0.179219 0.0751372 0.00509441 1 0 +0.179449 0.177476 0.0741934 0.00707689 1 0 +0.220758 0.131729 0.172635 0.0110727 1 0 +0.235641 0.14715 0.150809 0.00628522 1 0 +0.174845 0.0173726 0.00679136 0.00715132 1 0 +0.389 0.0262074 0.0765676 0.00740518 1 0 +0.385725 0.0576259 0.0716836 0.00494275 1 0 +0.369562 0.0489367 0.0886258 0.00875958 1 0 +0.389473 0.125925 0.0240515 0.00707116 1 0 +0.384935 0.114117 0.0640126 0.00517591 1 0 +0.358025 0.129177 0.065102 0.00532288 1 0 +0.380652 0.114116 0.0493804 0.00640348 1 0 +0.0925978 0.185847 0.176284 0.00817487 1 0 +0.103581 0.173693 0.138901 0.00526595 1 0 +0.169338 0.185191 0.144271 0.0124284 1 0 +0.190417 0.142733 0.141853 0.00703344 1 0 +0.0145455 0.0827114 0.192269 0.00671582 1 0 +0.0201515 0.118411 0.19059 0.00538755 1 0 +0.0447295 0.10804 0.190066 0.00589401 1 0 +0.372658 0.186009 0.0342008 0.00586944 1 0 +0.341111 0.193211 0.0297643 0.00725038 1 0 +0.291381 0.145337 0.0695375 0.00537388 1 0 +0.262009 0.149087 0.0586692 0.0063418 1 0 +0.272672 0.157725 0.0471531 0.00678475 1 0 +0.177522 0.191702 0.0151077 0.00871947 1 0 +0.195951 0.192488 0.042442 0.0075691 1 0 +0.223972 0.0441119 0.066088 0.00943428 1 0 +0.216549 0.0621694 0.0881533 0.00736065 1 0 +0.248009 0.0605968 0.0849173 0.00751538 1 0 +0.222064 0.056697 0.058959 0.005155 1 0 +0.204322 0.00865878 0.149084 0.00905007 1 0 +0.0179466 0.0646345 0.0477057 0.00580657 1 0 +0.0279603 0.0870887 0.0391257 0.00507917 1 0 +0.0583118 0.138382 0.13237 0.0075169 1 0 +0.0310013 0.14362 0.151161 0.00524737 1 0 +0.0781885 0.0332649 0.0108671 0.00532103 1 0 +0.0690375 0.0649554 0.0147177 0.00651158 1 0 +0.104554 0.0463637 0.00797568 0.00810448 1 0 +0.291221 0.19255 0.0657017 0.00699412 1 0 +0.314641 0.193615 0.0665849 0.00653856 1 0 +0.322512 0.174957 0.0655721 0.0117791 1 0 +0.246221 0.191961 0.0279806 0.00505252 1 0 +0.26026 0.192866 0.0414315 0.0063595 1 0 +0.226439 0.194878 0.0503368 0.0053088 1 0 +0.381734 0.0627377 0.129848 0.00505232 1 0 +0.359458 0.0626474 0.123117 0.00536539 1 0 +0.368474 0.0544648 0.140028 0.00583783 1 0 +0.371952 0.186986 0.0786659 0.00541608 1 0 +0.373149 0.188049 0.110842 0.00521248 1 0 +0.348782 0.174456 0.0904933 0.0109357 1 0 +0.370339 0.0202183 0.145735 0.00762078 1 0 +0.353047 0.036823 0.134046 0.00654898 1 0 +0.173665 0.0688826 0.112392 0.00546214 1 0 +0.00601937 0.0813715 0.168923 0.00635341 1 0 +0.00602729 0.0869847 0.136085 0.00609493 1 0 +0.0184638 0.0953948 0.160977 0.0049687 1 0 +0.0871605 0.0551548 0.11149 0.00512355 1 0 +0.121243 0.0613418 0.116861 0.00674977 1 0 +0.0104101 0.0605892 0.180056 0.00544866 1 0 +0.0264487 0.0799943 0.162158 0.00601263 1 0 +0.0255322 0.0594446 0.155259 0.00734574 1 0 +0.236368 0.0362734 0.192409 0.00762552 1 0 +0.220529 0.0553839 0.190136 0.00524858 1 0 +0.251545 0.0452632 0.169149 0.00625398 1 0 +0.258667 0.0495091 0.076911 0.0063627 1 0 +0.0844778 0.0171772 0.0142944 0.00539746 1 0 +0.104986 0.0472937 0.020959 0.00496815 1 0 +0.234017 0.123122 0.165273 0.00636487 1 0 +0.215883 0.114482 0.137351 0.00607392 1 0 +0.255968 0.107054 0.134688 0.00618773 1 0 +0.242199 0.129011 0.143615 0.00661564 1 0 +0.254621 0.0204878 0.0150463 0.0063895 1 0 +0.260334 0.046401 0.00768789 0.00812479 1 0 +0.247893 0.0462226 0.0316245 0.00700558 1 0 +0.221421 0.134262 0.0282345 0.00655456 1 0 +0.180824 0.0228593 0.187996 0.00638733 1 0 +0.213041 0.0133159 0.19237 0.00780685 1 0 +0.194998 0.0338827 0.189502 0.0106018 1 0 +0.272619 0.189084 0.0698362 0.00594189 1 0 +0.302616 0.154225 0.0769161 0.00934855 1 0 +0.264127 0.154008 0.0797161 0.00829343 1 0 +0.269698 0.168629 0.0506287 0.0050404 1 0 +0.254899 0.0132178 0.0246547 0.00566253 1 0 +0.262937 0.0114562 0.0492763 0.00654525 1 0 +0.0232101 0.185494 0.094236 0.00642635 1 0 +0.0189702 0.190582 0.104327 0.00564361 1 0 +0.394705 0.0831134 0.171396 0.0056949 1 0 +0.384951 0.0759243 0.143572 0.00518763 1 0 +0.391195 0.109337 0.137347 0.00919292 1 0 +0.377732 0.0936121 0.147022 0.00939294 1 0 +0.0611988 0.0576605 0.0342762 0.00552004 1 0 +0.132409 0.152308 0.0376554 0.00724506 1 0 +0.257384 0.0913827 0.0213397 0.00792487 1 0 +0.273538 0.105342 0.0198757 0.0126039 1 0 +0.249536 0.115752 0.00706078 0.00712634 1 0 +0.273484 0.0906132 0.0559532 0.00589563 1 0 +0.00905115 0.0140949 0.160302 0.00928439 1 0 +0.195107 0.12811 0.194695 0.00562069 1 0 +0.170111 0.136759 0.187004 0.00585134 1 0 +0.17994 0.131085 0.156562 0.00832547 1 0 +0.164357 0.0123431 0.173025 0.00531164 1 0 +0.17351 0.0145689 0.152659 0.00496858 1 0 +0.0701793 0.171675 0.188997 0.00495742 1 0 +0.0748005 0.143099 0.15452 0.00690164 1 0 +0.374541 0.189631 0.155372 0.00811457 1 0 +0.380585 0.0188822 0.0672238 0.00714736 1 0 +0.382836 0.0435632 0.061077 0.00516762 1 0 +0.364107 0.0429161 0.0770429 0.00538829 1 0 +0.37229 0.041059 0.0512871 0.00493193 1 0 +0.355692 0.0860349 0.0875009 0.00631317 1 0 +0.349618 0.116454 0.0780361 0.00525851 1 0 +0.364768 0.0981785 0.0596607 0.00789483 1 0 +0.179002 0.0116066 0.0194827 0.00589101 1 0 +0.216723 0.0137037 0.0181508 0.00529219 1 0 +0.198619 0.00990967 0.0413414 0.0101715 1 0 +0.186634 0.0338454 0.044727 0.00608557 1 0 +0.4 0.03 0.03 0.01 2 0 +0 0.03 0.03 0.01 2 0 +0.4 0.03 0.17 0.01 2 0 +0 0.03 0.17 0.01 2 0 +0.4 0.17 0.03 0.01 2 0 +0 0.17 0.03 0.01 2 0 +0.4 0.17 0.17 0.01 2 0 +0 0.17 0.17 0.01 2 0 +0.02 0.03 0.03 0.01 2 0 +0.04 0.03 0.03 0.01 2 0 +0.06 0.03 0.03 0.01 2 0 +0.08 0.03 0.03 0.01 2 0 +0.1 0.03 0.03 0.01 2 0 +0.12 0.03 0.03 0.01 2 0 +0.14 0.03 0.03 0.01 2 0 +0.16 0.03 0.03 0.01 2 0 +0.18 0.03 0.03 0.01 2 0 +0.2 0.03 0.03 0.01 2 0 +0.22 0.03 0.03 0.01 2 0 +0.24 0.03 0.03 0.01 2 0 +0.26 0.03 0.03 0.01 2 0 +0.28 0.03 0.03 0.01 2 0 +0.3 0.03 0.03 0.01 2 0 +0.32 0.03 0.03 0.01 2 0 +0.34 0.03 0.03 0.01 2 0 +0.36 0.03 0.03 0.01 2 0 +0.38 0.03 0.03 0.01 2 0 +0.02 0.03 0.17 0.01 2 0 +0.04 0.03 0.17 0.01 2 0 +0.06 0.03 0.17 0.01 2 0 +0.08 0.03 0.17 0.01 2 0 +0.1 0.03 0.17 0.01 2 0 +0.12 0.03 0.17 0.01 2 0 +0.14 0.03 0.17 0.01 2 0 +0.16 0.03 0.17 0.01 2 0 +0.18 0.03 0.17 0.01 2 0 +0.2 0.03 0.17 0.01 2 0 +0.22 0.03 0.17 0.01 2 0 +0.24 0.03 0.17 0.01 2 0 +0.26 0.03 0.17 0.01 2 0 +0.28 0.03 0.17 0.01 2 0 +0.3 0.03 0.17 0.01 2 0 +0.32 0.03 0.17 0.01 2 0 +0.34 0.03 0.17 0.01 2 0 +0.36 0.03 0.17 0.01 2 0 +0.38 0.03 0.17 0.01 2 0 +0.02 0.17 0.03 0.01 2 0 +0.04 0.17 0.03 0.01 2 0 +0.06 0.17 0.03 0.01 2 0 +0.08 0.17 0.03 0.01 2 0 +0.1 0.17 0.03 0.01 2 0 +0.12 0.17 0.03 0.01 2 0 +0.14 0.17 0.03 0.01 2 0 +0.16 0.17 0.03 0.01 2 0 +0.18 0.17 0.03 0.01 2 0 +0.2 0.17 0.03 0.01 2 0 +0.22 0.17 0.03 0.01 2 0 +0.24 0.17 0.03 0.01 2 0 +0.26 0.17 0.03 0.01 2 0 +0.28 0.17 0.03 0.01 2 0 +0.3 0.17 0.03 0.01 2 0 +0.32 0.17 0.03 0.01 2 0 +0.34 0.17 0.03 0.01 2 0 +0.36 0.17 0.03 0.01 2 0 +0.38 0.17 0.03 0.01 2 0 +0.02 0.17 0.17 0.01 2 0 +0.04 0.17 0.17 0.01 2 0 +0.06 0.17 0.17 0.01 2 0 +0.08 0.17 0.17 0.01 2 0 +0.1 0.17 0.17 0.01 2 0 +0.12 0.17 0.17 0.01 2 0 +0.14 0.17 0.17 0.01 2 0 +0.16 0.17 0.17 0.01 2 0 +0.18 0.17 0.17 0.01 2 0 +0.2 0.17 0.17 0.01 2 0 +0.22 0.17 0.17 0.01 2 0 +0.24 0.17 0.17 0.01 2 0 +0.26 0.17 0.17 0.01 2 0 +0.28 0.17 0.17 0.01 2 0 +0.3 0.17 0.17 0.01 2 0 +0.32 0.17 0.17 0.01 2 0 +0.34 0.17 0.17 0.01 2 0 +0.36 0.17 0.17 0.01 2 0 +0.38 0.17 0.17 0.01 2 0 +0.347522 0.0798775 0.189345 0.00542525 1 0 +0.0978862 0.0443223 0.157324 0.00881265 1 0 +0.392662 0.0990343 0.149296 0.00665244 1 0 +0.27 0.186275 0.156019 0.00669684 1 0 +0.356951 0.162534 0.138065 0.00842663 1 0 +0.282853 0.0239922 0.154694 0.00641626 1 0 +0.03 0.152792 0.169299 0.005642 1 0 +0.102813 0.149965 0.130103 0.0072981 1 0 +0.246362 0.124006 0.0878291 0.00776572 1 0 +0.134712 0.0782273 0.00486166 0.00518048 1 0 +0.145202 0.0420336 0.160607 0.00612731 1 0 +0.1331 0.191055 0.13096 0.00492461 1 0 +0.178568 0.0439534 0.0151785 0.00628492 1 0 +0.0369389 0.0587979 0.0362255 0.00831987 1 0 +0.324462 0.104118 0.060766 0.00656953 1 0 +0.242014 0.156239 0.0521801 0.00555918 1 0 +0.347445 0.0793337 0.0940084 0.00614759 1 0 +0.176037 0.0328676 0.119084 0.00524276 1 0 +0.203878 0.107329 0.173163 0.00650472 1 0 +0.275532 0.0453966 0.0313616 0.00608947 1 0 +0.26178 0.155021 0.0948649 0.00706965 1 0 +0.39 0.158236 0.172488 0.00563869 1 0 +0.105644 0.0790286 0.176016 0.00580547 1 0 +0.20005 0.0366356 0.0493124 0.0083647 1 0 +0.0185075 0.160973 0.130327 0.00501499 1 0 +0.300174 0.155686 0.0955826 0.00747518 1 0 +0.113642 0.0321054 0.151243 0.00816062 1 0 +0.0507885 0.15975 0.145708 0.00739224 1 0 +0.271194 0.0350138 0.151904 0.00620918 1 0 +0.201468 0.195442 0.130678 0.00505288 1 0 +0.188726 0.172934 0.0671716 0.0054132 1 0 +0.370376 0.156378 0.178879 0.00812185 1 0 +0.212651 0.051505 0.0344394 0.00698105 1 0 +0.0728915 0.0702816 0.0670054 0.00733578 1 0 +0.27 0.0222001 0.0413285 0.00700511 1 0 +0.209838 0.078913 0.158632 0.00692605 1 0 +0.0313396 0.169454 0.0453461 0.00637858 1 0 +0.380556 0.0338425 0.153157 0.00728474 1 0 +0.327886 0.154734 0.118663 0.00729678 1 0 +0.35 0.157495 0.0225033 0.00747683 1 0 +0.0649327 0.050875 0.110639 0.00808269 1 0 +0.152733 0.0857879 0.179473 0.00634748 1 0 +0.288763 0.147693 0.0341985 0.0094579 1 0 +0.11 0.0433635 0.0307431 0.00670737 1 0 +0.361312 0.0139639 0.152203 0.00512422 1 0 +0.220006 0.095739 0.171783 0.00552227 1 0 +0.339671 0.181996 0.18433 0.00656595 1 0 +0.267395 0.194784 0.109548 0.00565878 1 0 +0.308662 0.0124479 0.173343 0.00896394 1 0 +0.253811 0.0926573 0.109213 0.0106235 1 0 +0.392837 0.123744 0.178331 0.00689455 1 0 +0.220257 0.0991966 0.0646123 0.0143061 1 0 +0.149942 0.0119581 0.0950768 0.00568721 1 0 +0.021108 0.192638 0.0225377 0.00513947 1 0 +0.202093 0.121861 0.111158 0.00779051 1 0 +0.364844 0.0434614 0.0223083 0.00624303 1 0 +0.0816671 0.141038 0.0995708 0.00766147 1 0 +0.356446 0.160479 0.0471579 0.00994152 1 0 +0.0450777 0.18198 0.0420726 0.0054801 1 0 +0.359875 0.0893131 0.177108 0.00504329 1 0 +0.0983642 0.130066 0.170333 0.00574947 1 0 +0.0337275 0.0454853 0.184088 0.00520309 1 0 +0.260472 0.183642 0.0225082 0.00557063 1 0 +0.320423 0.153275 0.0290202 0.00675951 1 0 +0.142201 0.152845 0.144419 0.0122891 1 0 +0.236239 0.12794 0.17545 0.00511185 1 0 +0.253457 0.0513097 0.0973065 0.00889881 1 0 +0.292661 0.0883479 0.0835194 0.0103442 1 0 +0.29 0.019008 0.0211345 0.00730379 1 0 +0.206797 0.109716 0.0158543 0.00644442 1 0 +0.00485992 0.157468 0.0570503 0.00495699 1 0 +0.151719 0.0532074 0.109485 0.00820095 1 0 +0.207828 0.170978 0.14269 0.00686123 1 0 +0.207725 0.0420149 0.179824 0.00733632 1 0 +0.270731 0.14459 0.099749 0.0060311 1 0 +0.184316 0.122176 0.187476 0.00577481 1 0 +0.140387 0.0445274 0.0230222 0.00612092 1 0 +0.160369 0.1527 0.0415237 0.00674556 1 0 +0.300792 0.147145 0.15994 0.00929333 1 0 +0.0525256 0.0915602 0.179181 0.00589334 1 0 +0.129693 0.175565 0.0426627 0.00688964 1 0 +0.299318 0.0291523 0.0845295 0.00620838 1 0 +0.00962742 0.0170789 0.119014 0.00614714 1 0 +0.26608 0.0134887 0.0245473 0.0055224 1 0 +0.359626 0.145645 0.018462 0.00831556 1 0 +0.264127 0.048321 0.0226428 0.00742254 1 0 +0.296538 0.081742 0.100029 0.00744197 1 0 +0.345111 0.0473617 0.172251 0.00823776 1 0 +0.0868119 0.108331 0.0569456 0.00585534 1 0 +0.174245 0.131957 0.0322579 0.00524247 1 0 +0.12388 0.118941 0.0234175 0.00751806 1 0 +0.334458 0.0902555 0.188535 0.0100815 1 0 +0.195442 0.0683869 0.120811 0.00520101 1 0 +0.33765 0.0317681 0.0132248 0.00499725 1 0 +0.0139264 0.0661681 0.057607 0.00498931 1 0 +0.366444 0.176412 0.0907763 0.00508473 1 0 +0.251406 0.18165 0.175613 0.00552709 1 0 +0.0480855 0.0204338 0.179939 0.00598943 1 0 +0.342488 0.0409397 0.10765 0.00671023 1 0 +0.172764 0.118587 0.043688 0.00660758 1 0 +0.33 0.0380642 0.179743 0.0061229 1 0 +0.177923 0.116745 0.0232329 0.00649864 1 0 +0.0434834 0.147828 0.0215313 0.0051462 1 0 +0.130758 0.0473001 0.0975034 0.00695327 1 0 +0.272865 0.0192001 0.132966 0.00589323 1 0 +0.265019 0.150946 0.168352 0.00741564 1 0 +0.24418 0.0141703 0.0369479 0.00778553 1 0 +0.336748 0.170515 0.077577 0.0071526 1 0 +0.184562 0.178649 0.112849 0.00958207 1 0 +0.362317 0.110098 0.0861787 0.00522559 1 0 +0.157402 0.116345 0.119616 0.00810692 1 0 +0.208746 0.0329015 0.0825929 0.00742124 1 0 +0.0497274 0.0591842 0.0861661 0.00559058 1 0 +0.01 0.0185565 0.177554 0.00697095 1 0 +0.0728359 0.0892859 0.0249654 0.00991388 1 0 +0.00664008 0.149212 0.0165518 0.00717416 1 0 +0.214491 0.0193724 0.180289 0.00578476 1 0 +0.277068 0.191227 0.0809189 0.00619127 1 0 +0.0424533 0.104161 0.0716172 0.00799191 1 0 +0.31 0.0402308 0.0232237 0.00582996 1 0 +0.27754 0.184929 0.172891 0.00540447 1 0 +0.252694 0.158786 0.0735484 0.00554851 1 0 +0.3085 0.0988447 0.149485 0.0110854 1 0 +0.146358 0.0654075 0.176887 0.00852953 1 0 +0.15028 0.0850435 0.124902 0.0097613 1 0 +0.331544 0.04829 0.19056 0.00819168 1 0 +0.351251 0.101156 0.135048 0.00589803 1 0 +0.186782 0.165407 0.083592 0.00584857 1 0 +0.325097 0.166509 0.185233 0.00643767 1 0 +0.0918322 0.180427 0.0413606 0.00745013 1 0 +0.160433 0.0312632 0.152793 0.00725904 1 0 +0.17575 0.0105614 0.189975 0.00706232 1 0 +0.11 0.0178155 0.165291 0.00645094 1 0 +0.209597 0.178443 0.177733 0.00493965 1 0 +0.0474925 0.152649 0.157478 0.00674388 1 0 +0.0970484 0.187071 0.0748803 0.00561971 1 0 +0.127766 0.16398 0.184554 0.00756034 1 0 +0.138599 0.0762437 0.189021 0.00663846 1 0 +0.091639 0.0976758 0.118241 0.00951811 1 0 +0.37809 0.0472335 0.165234 0.0079822 1 0 +0.09 0.155653 0.166236 0.0078889 1 0 +0.222052 0.0741071 0.101548 0.00603959 1 0 +0.360558 0.156651 0.0895007 0.0104342 1 0 +0.0209121 0.156322 0.178298 0.00574117 1 0 +0.275085 0.0433949 0.176447 0.00565728 1 0 +0.132939 0.151075 0.159076 0.00513916 1 0 +0.338449 0.0869435 0.0180735 0.00838531 1 0 +0.255873 0.0180861 0.178487 0.00519845 1 0 +0.19 0.178801 0.0412054 0.0074073 1 0 +0.24197 0.150359 0.0663884 0.00600992 1 0 +0.366987 0.0483655 0.151525 0.00651083 1 0 +0.258204 0.0950625 0.0787748 0.0143746 1 0 +0.313156 0.0696813 0.0855558 0.00515003 1 0 +0.0224121 0.161022 0.017894 0.00526373 1 0 +0.378217 0.181987 0.0709204 0.0053618 1 0 +0.336389 0.151644 0.165116 0.00933514 1 0 +0.265528 0.039234 0.181998 0.00611775 1 0 +0.0774819 0.181246 0.0528093 0.0054311 1 0 +0.366662 0.0219018 0.158378 0.00565348 1 0 +0.159721 0.0359766 0.0451912 0.00632694 1 0 +0.153264 0.142666 0.0149768 0.00576333 1 0 +0.267688 0.0789297 0.0281816 0.00545798 1 0 +0.359133 0.041135 0.10209 0.00997302 1 0 +0.27 0.156557 0.179664 0.00615902 1 0 +0.157162 0.0928317 0.0624114 0.00930508 1 0 +0.24382 0.0682745 0.191382 0.00498369 1 0 +0.030824 0.119874 0.0824092 0.00589828 1 0 +0.0607368 0.0719771 0.121373 0.006561 1 0 +0.182555 0.0870453 0.131754 0.00758449 1 0 +0.249288 0.171861 0.00902276 0.00894261 1 0 +0.128277 0.140272 0.0478176 0.00904013 1 0 +0.39 0.0408851 0.179636 0.00764493 1 0 +0.344839 0.0246951 0.0561511 0.00517938 1 0 +0.374681 0.124486 0.022 0.00793192 1 0 +0.172293 0.0940976 0.0800211 0.00723459 1 0 +0.189986 0.15199 0.152309 0.0069387 1 0 +0.0808306 0.0847432 0.0775252 0.00801434 1 0 +0.35 0.0244296 0.180218 0.00534406 1 0 +0.29128 0.068629 0.089716 0.00854914 1 0 +0.370536 0.00948985 0.15318 0.00517375 1 0 +0.138975 0.029358 0.0148715 0.0051768 1 0 +0.229972 0.163942 0.156787 0.0076274 1 0 +0.0458068 0.0745883 0.105977 0.00800304 1 0 +0.387971 0.13337 0.0972578 0.005263 1 0 +0.267418 0.123144 0.103298 0.00717081 1 0 +0.289479 0.116327 0.166929 0.00597564 1 0 +0.0076274 0.0163704 0.0386944 0.00763753 1 0 +0.168509 0.182954 0.0239459 0.006639 1 0 +0.15 0.176936 0.0391289 0.00521332 1 0 +0.37 0.158822 0.0381978 0.00639058 1 0 +0.393535 0.192952 0.0828301 0.0070797 1 0 +0.220561 0.152147 0.0267704 0.0081512 1 0 +0.0723325 0.16431 0.182063 0.00538414 1 0 +0.334911 0.0744686 0.0606515 0.00522857 1 0 +0.235834 0.026813 0.0458702 0.00671452 1 0 +0.195435 0.0170165 0.162842 0.00551265 1 0 +0.269892 0.0607274 0.109486 0.00883171 1 0 +0.343501 0.0709899 0.0209709 0.0057976 1 0 +0.222355 0.0915619 0.123518 0.00627954 1 0 +0.14512 0.0672658 0.124313 0.00713699 1 0 +0.0789361 0.0122478 0.165528 0.00833777 1 0 +0.303859 0.120825 0.105216 0.00568384 1 0 +0.0668885 0.187978 0.0470427 0.0057157 1 0 +0.0474666 0.176518 0.156891 0.00643413 1 0 +0.0546208 0.00894538 0.0542628 0.00499468 1 0 +0.163881 0.165255 0.0156245 0.00562792 1 0 +0.264941 0.0352942 0.0524973 0.00526542 1 0 +0.0682807 0.131748 0.126804 0.00521273 1 0 +0.31 0.0414694 0.0383149 0.00734023 1 0 +0.293551 0.0411853 0.146535 0.00674033 1 0 +0.259371 0.101169 0.0300947 0.00535567 1 0 +0.0236936 0.19498 0.117863 0.00556218 1 0 +0.194553 0.0960323 0.00662746 0.00534121 1 0 +0.144031 0.00765253 0.0145084 0.00790903 1 0 +0.387286 0.0283025 0.183463 0.00540204 1 0 +0.190849 0.085665 0.042132 0.0058276 1 0 +0.337163 0.0493615 0.0297166 0.00957028 1 0 +0.0702921 0.0508055 0.0761078 0.00887061 1 0 +0.363204 0.079317 0.031058 0.00585507 1 0 +0.0239026 0.0171388 0.0732999 0.00558563 1 0 +0.31 0.171377 0.0410328 0.00495384 1 0 +0.242897 0.0431399 0.157876 0.00764433 1 0 +0.0232279 0.0625859 0.0569853 0.00499752 1 0 +0.308419 0.154837 0.0283139 0.00536722 1 0 +0.351596 0.0296902 0.0490809 0.00580207 1 0 +0.00724216 0.107479 0.173821 0.0052565 1 0 +0.320234 0.110807 0.157754 0.00760032 1 0 +0.10993 0.17569 0.0450187 0.00888243 1 0 +0.0556015 0.0166924 0.153296 0.0118053 1 0 +0.255539 0.0102831 0.109715 0.00796557 1 0 +0.146502 0.158052 0.0927089 0.00542645 1 0 +0.105747 0.0703886 0.184545 0.00523508 1 0 +0.32732 0.123906 0.044966 0.00633809 1 0 +0.167621 0.160837 0.179697 0.00536462 1 0 +0.156603 0.15324 0.169971 0.00710102 1 0 +0.308484 0.164311 0.181512 0.00539052 1 0 +0.0635922 0.181646 0.183508 0.00623565 1 0 +0.0488876 0.155546 0.17358 0.00734124 1 0 +0.05 0.161337 0.0228354 0.00504587 1 0 +0.333482 0.115593 0.0639115 0.00588445 1 0 +0.311958 0.0137062 0.111868 0.00852586 1 0 +0.07 0.0223539 0.18273 0.00591058 1 0 +0.00719179 0.070529 0.0416848 0.00606667 1 0 +0.101032 0.0195252 0.155612 0.00685467 1 0 +0.0254764 0.0434224 0.0366104 0.00593267 1 0 +0.0697503 0.14859 0.103677 0.00703194 1 0 +0.0853097 0.164886 0.121862 0.00635816 1 0 +0.261932 0.182529 0.103209 0.0052298 1 0 +0.287308 0.151721 0.168501 0.00726717 1 0 +0.0169782 0.15904 0.0805994 0.0050559 1 0 +0.14364 0.0674591 0.13787 0.0055179 1 0 +0.231317 0.120206 0.0514386 0.00936835 1 0 +0.0573314 0.122786 0.19436 0.00603971 1 0 +0.0281059 0.0184631 0.021398 0.00499663 1 0 +0.263591 0.0639061 0.174787 0.00656042 1 0 +0.0581201 0.184798 0.163389 0.00631669 1 0 +0.179217 0.044415 0.158281 0.00766895 1 0 +0.0731051 0.0881463 0.180648 0.00529527 1 0 +0.09 0.0359271 0.0194755 0.0049713 1 0 +0.23 0.157473 0.178684 0.0080108 1 0 +0.341498 0.194203 0.0117522 0.00650448 1 0 +0.391166 0.10602 0.0685237 0.0059928 1 0 +0.358029 0.0186959 0.108716 0.00560939 1 0 +0.329772 0.17071 0.121833 0.00909976 1 0 +0.335608 0.0574737 0.173582 0.0057023 1 0 +0.331246 0.159417 0.103862 0.0085865 1 0 +0.0563992 0.0102386 0.185024 0.00576244 1 0 +0.213145 0.0479381 0.170198 0.00519868 1 0 +0.0938822 0.161259 0.0546349 0.00524396 1 0 +0.264021 0.027745 0.0944503 0.00506959 1 0 +0.140928 0.0777212 0.176066 0.00495326 1 0 +0.161296 0.115551 0.0985767 0.00666958 1 0 +0.280353 0.130673 0.178957 0.00528118 1 0 +0.156516 0.136071 0.178792 0.00753372 1 0 +0.251158 0.0395676 0.121355 0.00764725 1 0 +0.326188 0.034959 0.0461858 0.00591718 1 0 +0.217008 0.055159 0.00923339 0.0062824 1 0 +0.24511 0.0178481 0.0217576 0.00554719 1 0 +0.192659 0.033758 0.130776 0.00667871 1 0 +0.134313 0.00674791 0.123773 0.00571604 1 0 +0.25894 0.00798155 0.142322 0.00527416 1 0 +0.0989189 0.138211 0.188624 0.00693057 1 0 +0.188807 0.154195 0.0314249 0.00814928 1 0 +0.0465999 0.0158036 0.0306726 0.00566998 1 0 +0.21 0.178166 0.16205 0.00516225 1 0 +0.103462 0.0747507 0.162656 0.00566988 1 0 +0.232491 0.186303 0.165265 0.00743411 1 0 +0.0948224 0.0458309 0.0355574 0.00719834 1 0 +0.137066 0.0453262 0.182442 0.00595659 1 0 +0.0606057 0.0509872 0.139644 0.00577137 1 0 +0.118997 0.0803134 0.0169132 0.00963772 1 0 +0.0648667 0.150087 0.129484 0.00620631 1 0 +0.13 0.168638 0.0183636 0.00540324 1 0 +0.328037 0.00816448 0.0789749 0.00836521 1 0 +0.261785 0.0674796 0.0860459 0.00765607 1 0 +0.265839 0.12281 0.0595413 0.0109387 1 0 +0.125226 0.108533 0.114202 0.00615113 1 0 +0.215342 0.155261 0.153166 0.0062645 1 0 +0.189995 0.0465725 0.0353405 0.00970266 1 0 +0.0885535 0.0561785 0.184883 0.00626981 1 0 +0.121939 0.169556 0.15395 0.00617321 1 0 +0.11 0.174743 0.0199283 0.00496436 1 0 +0.331276 0.142067 0.0574075 0.0114335 1 0 +0.0469555 0.0789318 0.0751397 0.00502226 1 0 +0.20313 0.095668 0.132944 0.0065325 1 0 +0.0264725 0.182658 0.163376 0.00525103 1 0 +0.0549236 0.0830398 0.0891248 0.0062925 1 0 +0.309388 0.0495779 0.0630322 0.00534495 1 0 +0.234442 0.182998 0.0358474 0.00529841 1 0 +0.206371 0.159944 0.0584285 0.00581264 1 0 +0.306901 0.125028 0.0251801 0.010106 1 0 +0.101812 0.0251804 0.129384 0.00802216 1 0 +0.369995 0.173609 0.181455 0.00562445 1 0 +0.349316 0.114621 0.138382 0.00538571 1 0 +0.330089 0.129989 0.143439 0.00887266 1 0 +0.115997 0.191979 0.0698904 0.00832214 1 0 +0.177899 0.0857562 0.112367 0.00852281 1 0 +0.072263 0.030518 0.111296 0.00596901 1 0 +0.352759 0.136596 0.0576396 0.00644424 1 0 +0.230748 0.0966892 0.17339 0.00538032 1 0 +0.0458287 0.0433015 0.158147 0.00874561 1 0 +0.0980732 0.171347 0.0552498 0.00569654 1 0 +0.305693 0.155839 0.127417 0.00593698 1 0 +0.335309 0.126327 0.0706772 0.00693509 1 0 +0.314188 0.143696 0.103088 0.0107034 1 0 +0.142819 0.173227 0.0858479 0.0112391 1 0 +0.31 0.0348089 0.180252 0.00510729 1 0 +0.15 0.0436508 0.0331577 0.00721381 1 0 +0.19796 0.0280548 0.148822 0.00873619 1 0 +0.287608 0.0440149 0.181191 0.00508972 1 0 +0.234242 0.0276053 0.0936894 0.00535566 1 0 +0.200447 0.0930969 0.0415927 0.00509391 1 0 +0.33 0.0395939 0.0215398 0.00504401 1 0 +0.108655 0.0741489 0.140021 0.00772278 1 0 +0.23 0.0336803 0.155098 0.00832 1 0 +0.05 0.0465513 0.0365519 0.0095876 1 0 +0.102633 0.158261 0.0806719 0.00520046 1 0 +0.30296 0.116641 0.142802 0.00871556 1 0 +0.146636 0.0086573 0.0811116 0.00646753 1 0 +0.248061 0.150212 0.159558 0.00759468 1 0 +0.0511742 0.126609 0.00468162 0.00493993 1 0 +0.160765 0.14026 0.105735 0.00630499 1 0 +0.203703 0.132457 0.169937 0.00620977 1 0 +0.287417 0.086656 0.114549 0.00635341 1 0 +0.0993595 0.191428 0.098834 0.00507766 1 0 +0.313624 0.145026 0.121706 0.00796975 1 0 +0.122538 0.15124 0.154183 0.00635657 1 0 +0.0604078 0.0152021 0.123458 0.00542286 1 0 +0.0223381 0.125728 0.135981 0.00585759 1 0 +0.315672 0.149159 0.0607302 0.00602484 1 0 +0.3332 0.164513 0.0123964 0.00965288 1 0 +0.37582 0.172889 0.0147571 0.00606757 1 0 +0.052553 0.0588091 0.110053 0.00604681 1 0 +0.140355 0.0965998 0.0802462 0.0122419 1 0 +0.0973348 0.00627142 0.0760289 0.00540746 1 0 +0.279178 0.0296219 0.185108 0.00513539 1 0 +0.00445371 0.0476518 0.120346 0.00494855 1 0 +0.0644919 0.191953 0.00716455 0.00588954 1 0 +0.0869399 0.0810823 0.10593 0.0102924 1 0 +0.340655 0.171237 0.140926 0.00589336 1 0 +0.237862 0.110315 0.0055321 0.00579299 1 0 +0.320733 0.173027 0.0827873 0.00563505 1 0 +0.144934 0.0258788 0.0882664 0.00526551 1 0 +0.101809 0.0163963 0.176675 0.00526074 1 0 +0.107666 0.0199858 0.0178321 0.00611792 1 0 +0.0498234 0.0372418 0.0210861 0.00511295 1 0 +0.110865 0.0949012 0.0684746 0.0052638 1 0 +0.38057 0.176806 0.0552643 0.00512958 1 0 +0.197033 0.114059 0.138863 0.0084076 1 0 +0.249194 0.109915 0.166191 0.00529529 1 0 +0.0862794 0.154898 0.17898 0.00540933 1 0 +0.27033 0.12531 0.0158457 0.00713187 1 0 +0.32917 0.0623616 0.0191554 0.00725251 1 0 +0.0834931 0.060607 0.0794537 0.00790831 1 0 +0.00791223 0.0940613 0.176638 0.00505783 1 0 +0.0787373 0.191473 0.104354 0.00497613 1 0 +0.354648 0.0809409 0.165555 0.00512381 1 0 +0.195343 0.0213989 0.0684254 0.00535459 1 0 +0.202165 0.116979 0.091119 0.011077 1 0 +0.183385 0.12038 0.10588 0.0066955 1 0 +0.100627 0.181147 0.150607 0.00892321 1 0 +0.184063 0.182109 0.0222756 0.00492635 1 0 +0.269945 0.0508076 0.0970386 0.00613515 1 0 +0.223061 0.0442632 0.164099 0.00573653 1 0 +0.379559 0.149125 0.1674 0.00558254 1 0 +0.166691 0.0981379 0.126571 0.0102523 1 0 +0.146453 0.178477 0.0102732 0.00546206 1 0 +0.250081 0.139208 0.105752 0.00666326 1 0 +0.0828624 0.049343 0.0991538 0.00917406 1 0 +0.114047 0.157075 0.0674288 0.00748147 1 0 +0.325864 0.0379841 0.102682 0.00760018 1 0 +0.0865448 0.0333339 0.154956 0.00674158 1 0 +0.179765 0.0194648 0.159028 0.00521305 1 0 +0.158754 0.0550893 0.0664386 0.00526478 1 0 +0.268519 0.0975019 0.126336 0.00843922 1 0 +0.0780719 0.0491939 0.0311838 0.00541201 1 0 +0.333234 0.187204 0.0596276 0.00554904 1 0 +0.209764 0.108087 0.146589 0.0067205 1 0 +0.184083 0.128664 0.130131 0.0123429 1 0 +0.286562 0.0698164 0.19439 0.0059234 1 0 +0.03 0.167223 0.158687 0.00535208 1 0 +0.0905275 0.0637841 0.115981 0.00517076 1 0 +0.0903216 0.0828469 0.0253702 0.00656234 1 0 +0.21 0.181115 0.0256308 0.00557701 1 0 +0.392997 0.123522 0.0881469 0.00713771 1 0 +0.27 0.177572 0.0390839 0.00548721 1 0 +0.341463 0.070823 0.130651 0.00521516 1 0 +0.0368654 0.0432709 0.0217789 0.00592252 1 0 +0.19 0.0188588 0.0323655 0.00515657 1 0 +0.11 0.0373125 0.019389 0.00609366 1 0 +0.102 0.0568128 0.166768 0.00737801 1 0 +0.37 0.16207 0.157379 0.0079496 1 0 +0.372113 0.105287 0.140051 0.00531965 1 0 +0.00599721 0.0650202 0.0947234 0.00597836 1 0 +0.24746 0.0529289 0.0668096 0.00629904 1 0 +0.0104065 0.136024 0.0294409 0.00654423 1 0 +0.231698 0.130363 0.18604 0.00628433 1 0 +0.29 0.0290446 0.044384 0.00754462 1 0 +0.028435 0.130973 0.0597217 0.00492464 1 0 +0.367429 0.109044 0.174486 0.00512261 1 0 +0.262766 0.0628471 0.0261988 0.00537886 1 0 +0.258736 0.100411 0.00488452 0.00494719 1 0 +0.321904 0.12017 0.085994 0.0113597 1 0 +0.262991 0.0494983 0.190873 0.00682598 1 0 +0.03 0.0189616 0.177748 0.00507591 1 0 +0.0587581 0.0997631 0.159554 0.00614663 1 0 +0.0638137 0.00656929 0.0414673 0.00611381 1 0 +0.11821 0.026267 0.0533042 0.00661779 1 0 +0.33 0.0415766 0.169184 0.005005 1 0 +0.345193 0.112954 0.163829 0.00498868 1 0 +0.392254 0.0472032 0.0473154 0.0054577 1 0 +0.0286494 0.11133 0.0760248 0.0049874 1 0 +0.27 0.0365696 0.0170355 0.00686145 1 0 +0.13948 0.0741076 0.165953 0.00537703 1 0 +0.152228 0.180271 0.0220904 0.00511481 1 0 +0.11 0.159652 0.175278 0.0053276 1 0 +0.130342 0.0749803 0.127891 0.00794283 1 0 +0.37 0.0455926 0.178018 0.007069 1 0 +0.174904 0.15232 0.159484 0.0097671 1 0 +0.258567 0.142183 0.0704392 0.00773136 1 0 +0.221933 0.0370084 0.0950801 0.00995903 1 0 +0.273527 0.0201031 0.0938819 0.00499655 1 0 +0.374264 0.12754 0.119256 0.00628468 1 0 +0.118483 0.012984 0.0645129 0.00630568 1 0 +0.241122 0.0152128 0.15513 0.00617623 1 0 +0.0291186 0.0337872 0.0429776 0.00617698 1 0 +0.333775 0.066065 0.0826432 0.00498637 1 0 +0.37 0.181074 0.0233665 0.00632907 1 0 +0.223202 0.18819 0.0923402 0.00498807 1 0 +0.346015 0.0269364 0.134661 0.00559914 1 0 +0.07 0.0416623 0.178629 0.00762019 1 0 +0.280236 0.0510122 0.119443 0.00670719 1 0 +0.261681 0.0470373 0.126408 0.005187 1 0 +0.307872 0.125585 0.172237 0.00807778 1 0 +0.37691 0.0493025 0.0547169 0.00512084 1 0 +0.199809 0.142591 0.11782 0.00520728 1 0 +0.290256 0.175235 0.122551 0.00533184 1 0 +0.359318 0.162337 0.0625626 0.00527138 1 0 +0.266254 0.130207 0.0276945 0.00581197 1 0 +0.216126 0.102205 0.136049 0.00568307 1 0 +0.305954 0.165733 0.085845 0.00559505 1 0 +0.194504 0.103429 0.179534 0.00548175 1 0 +0.0595778 0.17011 0.0454706 0.00547673 1 0 +0.120786 0.149805 0.0197906 0.00838019 1 0 +0.226249 0.0744244 0.115243 0.00828741 1 0 +0.229092 0.0811134 0.0322316 0.0060468 1 0 +0.0234179 0.155289 0.0264939 0.00512035 1 0 +0.0953025 0.0401542 0.182022 0.00642255 1 0 +0.24542 0.121912 0.0445354 0.0058618 1 0 +0.250948 0.153357 0.027401 0.00830815 1 0 +0.14512 0.0114577 0.184325 0.00537055 1 0 +0.229495 0.0740694 0.0408994 0.00512964 1 0 +0.245814 0.0900784 0.0454943 0.00532297 1 0 +0.3414 0.125404 0.0907135 0.00854917 1 0 +0.0809721 0.133603 0.142928 0.00715165 1 0 +0.01 0.0400683 0.175232 0.00512425 1 0 +0.175861 0.00960354 0.101807 0.0076149 1 0 +0.110409 0.0662879 0.0110968 0.00780684 1 0 +0.068644 0.126408 0.0158185 0.00551588 1 0 +0.341462 0.0416071 0.0919578 0.00625069 1 0 +0.237534 0.0419936 0.0999316 0.00501946 1 0 +0.0621255 0.0923219 0.0886774 0.0050362 1 0 +0.219184 0.0495255 0.0811933 0.00731089 1 0 +0.387963 0.0545049 0.0624941 0.00501702 1 0 +0.139508 0.0367064 0.0988393 0.00498963 1 0 +0.11 0.0189772 0.0326292 0.00511339 1 0 +0.266344 0.0950372 0.139461 0.00509116 1 0 +0.307471 0.185989 0.0714464 0.00500287 1 0 +0.181953 0.0950166 0.00545282 0.0055711 1 0 +0.118734 0.0115042 0.0312841 0.00512618 1 0 +0.15 0.160336 0.0231105 0.00551957 1 0 +0.22619 0.0202691 0.0185718 0.00623608 1 0 +0.276323 0.0724613 0.123032 0.00660369 1 0 +0.220569 0.076601 0.172806 0.00492155 1 0 +0.100232 0.131322 0.143208 0.00639902 1 0 +0.394782 0.0236983 0.13031 0.00492271 1 0 +0.382281 0.0185517 0.0169469 0.00592855 1 0 +0.22683 0.0322293 0.0166972 0.00511889 1 0 +0.0489981 0.170903 0.18261 0.0055178 1 0 +0.349467 0.075473 0.0104567 0.00518068 1 0 +0.139219 0.109415 0.0104712 0.00569116 1 0 +0.240757 0.104913 0.175124 0.00559638 1 0 +0.0937754 0.0174482 0.140284 0.00660599 1 0 +0.218027 0.187273 0.070854 0.00499785 1 0 +0.246405 0.0970869 0.0365274 0.00607323 1 0 +0.287901 0.18408 0.0332955 0.00647807 1 0 +0.376126 0.100972 0.0352068 0.00496434 1 0 +0.209984 0.155755 0.164863 0.00661049 1 0 +0.0273352 0.180617 0.179068 0.00577195 1 0 +0.175007 0.0219339 0.0183149 0.00505085 1 0 +0.0228989 0.0946957 0.170487 0.00554807 1 0 +0.0314103 0.0460342 0.165143 0.00751195 1 0 +0.370248 0.0450066 0.0410144 0.00626097 1 0 +0.27816 0.0123399 0.0452198 0.00530145 1 0 +0.39 0.176178 0.18115 0.00620133 1 0 +0.256466 0.186298 0.11359 0.00675823 1 0 +0.357651 0.140973 0.158994 0.00677486 1 0 +0.33 0.176801 0.161228 0.00494019 1 0 +0.28369 0.16306 0.0484567 0.00552614 1 0 +0.209807 0.0179606 0.135153 0.00640212 1 0 +0.374754 0.113029 0.0121099 0.00503982 1 0 +0.0743218 0.0220835 0.0127212 0.00599074 1 0 +0.18094 0.170539 0.128215 0.00762202 1 0 +0.09 0.0187735 0.176421 0.00634823 1 0 +0.05 0.181269 0.0284853 0.00514207 1 0 +0.382123 0.104338 0.155546 0.00499356 1 0 +0.32331 0.0201479 0.0853821 0.0060223 1 0 +0.21477 0.166049 0.0164699 0.00503424 1 0 +0.360868 0.0609557 0.111799 0.00616562 1 0 +0.18085 0.0321406 0.14269 0.00675333 1 0 +0.376028 0.1525 0.195405 0.00500279 1 0 +0.23225 0.024593 0.184328 0.00716327 1 0 +0.101793 0.10075 0.0728653 0.00600643 1 0 +0.12091 0.179599 0.0179687 0.00541848 1 0 +0.0640294 0.159891 0.0402461 0.00494685 1 0 +0.154054 0.185061 0.159621 0.00923332 1 0 +0.132175 0.0181216 0.17936 0.0067317 1 0 +0.23 0.180445 0.0248208 0.00535967 1 0 +0.11 0.15442 0.0350109 0.00917913 1 0 +0.156521 0.0697386 0.118669 0.00582222 1 0 +0.309131 0.137733 0.184422 0.00778363 1 0 +0.366573 0.021133 0.181724 0.00603386 1 0 +0.358072 0.127979 0.121924 0.005249 1 0 +0.12069 0.108055 0.166835 0.00967485 1 0 +0.35182 0.095704 0.174893 0.00547524 1 0 +0.27 0.167186 0.0407491 0.00494861 1 0 +0.13 0.0433101 0.031196 0.00669101 1 0 +0.0081316 0.173136 0.0422839 0.00506157 1 0 +0.122184 0.140332 0.0098268 0.00543885 1 0 +0.0236819 0.0581298 0.119657 0.0051633 1 0 +0.07 0.0351198 0.155468 0.00836856 1 0 +0.10544 0.111304 0.04461 0.00622339 1 0 +0.31127 0.0701473 0.114328 0.0058661 1 0 +0.354215 0.0480357 0.0842499 0.00633501 1 0 +0.0804859 0.0484113 0.171363 0.0068126 1 0 +0.172237 0.115855 0.106807 0.00537165 1 0 +0.0455084 0.160394 0.0412336 0.00577368 1 0 +0.202462 0.0695508 0.160314 0.00511081 1 0 +0.127363 0.189716 0.0842867 0.00989146 1 0 +0.0967372 0.10246 0.175354 0.00649448 1 0 +0.29834 0.054986 0.0621569 0.00507099 1 0 +0.339449 0.0122872 0.0219697 0.00582351 1 0 +0.339266 0.172422 0.0589719 0.00640596 1 0 +0.33 0.0206983 0.181778 0.00636567 1 0 +0.266732 0.100053 0.0608677 0.00607784 1 0 +0.380859 0.0514983 0.1034 0.00560041 1 0 +0.335886 0.0528022 0.0844396 0.00499071 1 0 +0.35 0.0212422 0.0391845 0.00539966 1 0 +0.381987 0.173518 0.0456676 0.00511331 1 0 +0.271273 0.161918 0.0586698 0.00555117 1 0 +0.0925863 0.183631 0.132173 0.00543901 1 0 +0.258335 0.12838 0.125804 0.00532049 1 0 +0.332545 0.139745 0.1934 0.00566671 1 0 +0.269576 0.0853788 0.0088008 0.00833053 1 0 +0.230941 0.017388 0.16918 0.00554991 1 0 +0.339962 0.0828962 0.156992 0.00606685 1 0 +0.289594 0.099299 0.0979231 0.0057516 1 0 +0.140955 0.193737 0.0954806 0.00640935 1 0 +0.118922 0.195137 0.118187 0.00530406 1 0 +0.0591231 0.0998853 0.0219789 0.00663882 1 0 +0.319005 0.15718 0.158883 0.00699831 1 0 +0.127877 0.155594 0.057736 0.00769139 1 0 +0.318294 0.16287 0.129378 0.0064074 1 0 +0.36565 0.0218976 0.0162911 0.00645217 1 0 +0.00566143 0.076938 0.179819 0.00541591 1 0 +0.293948 0.0438732 0.017724 0.00529041 1 0 +0.0624557 0.0779759 0.0326174 0.00502421 1 0 +0.376266 0.00748401 0.0779648 0.00547678 1 0 +0.0682995 0.172801 0.154954 0.00740985 1 0 +0.0594805 0.127945 0.0586856 0.00525666 1 0 +0.347452 0.0663356 0.119742 0.0069306 1 0 +0.184045 0.0231649 0.0428077 0.00507048 1 0 +0.316409 0.118177 0.0351041 0.0052505 1 0 +0.351999 0.141379 0.092419 0.00731385 1 0 +0.09 0.0212043 0.159808 0.00506732 1 0 +0.0585221 0.017857 0.0399701 0.00578099 1 0 +0.155197 0.00481838 0.142725 0.00492107 1 0 +0.30678 0.0953303 0.0300757 0.00624598 1 0 +0.393444 0.136023 0.0439173 0.00510526 1 0 +0.125353 0.0507762 0.110233 0.00638261 1 0 +0.351042 0.145311 0.0675031 0.00682948 1 0 +0.254195 0.0381235 0.0413503 0.00511698 1 0 +0.01 0.180899 0.0322408 0.00495998 1 0 +0.0483639 0.0473283 0.0625009 0.00500291 1 0 +0.194708 0.0966212 0.170253 0.00499734 1 0 +0.187264 0.183601 0.170186 0.00542055 1 0 +0.222129 0.115037 0.148178 0.00643828 1 0 +0.0430709 0.0295178 0.149118 0.0066055 1 0 +0.128507 0.0100832 0.0801202 0.00561299 1 0 +0.233596 0.122146 0.0371903 0.00519093 1 0 +0.0971237 0.130173 0.0772085 0.00719146 1 0 +0.00891847 0.0214366 0.052843 0.00603167 1 0 +0.333253 0.0299159 0.0869719 0.00556045 1 0 +0.139007 0.146844 0.179856 0.00804221 1 0 +0.0889269 0.120896 0.17275 0.0069551 1 0 +0.076424 0.0383375 0.0433011 0.00610034 1 0 +0.115177 0.0947907 0.177942 0.00848365 1 0 +0.0519639 0.0337147 0.182047 0.00495052 1 0 +0.280811 0.147314 0.124882 0.00644796 1 0 +0.175351 0.0993935 0.0629356 0.00616285 1 0 +0.232532 0.140507 0.00982939 0.00553772 1 0 +0.3443 0.0707592 0.0655399 0.00521791 1 0 +0.148259 0.169095 0.147212 0.005276 1 0 +0.0806145 0.0696028 0.148441 0.00697314 1 0 +0.377057 0.0938253 0.0614691 0.00526754 1 0 +0.176727 0.163044 0.0167244 0.00534095 1 0 +0.3747 0.183974 0.167391 0.00517088 1 0 +0.116467 0.129337 0.00737408 0.00584774 1 0 +0.265312 0.0469076 0.162889 0.00895888 1 0 +0.210312 0.136884 0.0516481 0.0050044 1 0 +0.382313 0.188611 0.0781563 0.00508364 1 0 +0.256426 0.156039 0.0443755 0.00729046 1 0 +0.110251 0.153492 0.110863 0.00841988 1 0 +0.153164 0.18907 0.0510826 0.00505197 1 0 +0.135832 0.105832 0.171815 0.00641906 1 0 +0.215764 0.0305541 0.0723022 0.00525438 1 0 +0.310033 0.142274 0.171375 0.00606043 1 0 +0.15 0.164059 0.0410785 0.00606329 1 0 +0.372926 0.0870483 0.194764 0.00526985 1 0 +0.277151 0.166751 0.184336 0.00497332 1 0 +0.233981 0.116093 0.174304 0.00507903 1 0 +0.170618 0.0208526 0.19461 0.00533624 1 0 +0.31 0.176127 0.0200096 0.00540617 1 0 +0.101048 0.0762601 0.0845436 0.00718604 1 0 +0.0542891 0.0249088 0.109028 0.00805957 1 0 +0.124952 0.117632 0.0917484 0.00791336 1 0 +0.347463 0.0241088 0.106902 0.00563985 1 0 +0.0329361 0.150373 0.120633 0.00579599 1 0 +0.0245338 0.0119199 0.158341 0.00647275 1 0 +0.172233 0.146717 0.0576079 0.00512017 1 0 +0.0883143 0.156751 0.100443 0.00659294 1 0 +0.214205 0.160449 0.179897 0.00492494 1 0 +0.135415 0.0877608 0.169698 0.00815181 1 0 +0.170844 0.0282051 0.128725 0.00611538 1 0 +0.153428 0.110489 0.144807 0.00597814 1 0 +0.193851 0.0220132 0.0994787 0.00552583 1 0 +0.323255 0.167198 0.0474381 0.00795909 1 0 +0.179707 0.164925 0.0747548 0.005482 1 0 +0.0511664 0.13624 0.0541774 0.00719237 1 0 +0.338068 0.176277 0.153188 0.00581013 1 0 +0.364839 0.0856002 0.0571979 0.00492247 1 0 +0.245009 0.190734 0.148366 0.00500709 1 0 +0.208114 0.0832033 0.0596652 0.00637513 1 0 +0.295831 0.116129 0.0184326 0.0056183 1 0 +0.34496 0.165245 0.132476 0.00507771 1 0 +0.0531677 0.18774 0.096376 0.00534642 1 0 +0.382862 0.132041 0.0397941 0.00514877 1 0 +0.322868 0.132797 0.0297669 0.00680391 1 0 +0.345811 0.139817 0.0350729 0.00615701 1 0 +0.0995122 0.174468 0.0147702 0.00587915 1 0 +0.24042 0.0930751 0.0560819 0.0061489 1 0 +0.35639 0.0526969 0.14479 0.00524043 1 0 +0.288497 0.168296 0.150794 0.0110711 1 0 +0.337262 0.163029 0.0517847 0.00558953 1 0 +0.261944 0.0256295 0.116649 0.00566127 1 0 +0.251957 0.095516 0.0101884 0.0049549 1 0 +0.0698836 0.0221234 0.0433974 0.00682977 1 0 +0.0137647 0.149326 0.195047 0.00556836 1 0 +0.250432 0.074121 0.109003 0.00821935 1 0 +0.179564 0.047218 0.171751 0.006094 1 0 +0.0331699 0.0224626 0.0413483 0.00523962 1 0 +0.329789 0.137961 0.0388322 0.00571604 1 0 +0.249914 0.140583 0.151655 0.00499878 1 0 +0.319055 0.0264271 0.106152 0.0062552 1 0 +0.0386856 0.0573807 0.156485 0.00602484 1 0 +0.35 0.177304 0.0190771 0.00651221 1 0 +0.255732 0.0438077 0.179543 0.00496818 1 0 +0.23 0.01902 0.0359562 0.00600114 1 0 +0.29 0.0182661 0.035311 0.00630612 1 0 +0.190535 0.0462154 0.167995 0.00554567 1 0 +0.226768 0.173457 0.0439585 0.00508207 1 0 +0.195773 0.086384 0.0930442 0.00811178 1 0 +0.25161 0.0879304 0.126099 0.0067339 1 0 +0.244441 0.0160123 0.172747 0.00493063 1 0 +0.043296 0.151548 0.0918601 0.00625959 1 0 +0.307593 0.0272495 0.0769788 0.0051061 1 0 +0.00725937 0.181249 0.160883 0.00619715 1 0 +0.175231 0.00533157 0.147991 0.00552298 1 0 +0.0631338 0.0584774 0.0477833 0.00496594 1 0 +0.0472304 0.0284223 0.0444217 0.00620969 1 0 +0.0937202 0.0200306 0.00855072 0.00585216 1 0 +0.00876345 0.191816 0.153383 0.00684825 1 0 +0.317627 0.0683682 0.0252238 0.00535805 1 0 +0.0717525 0.130556 0.107098 0.00817232 1 0 +0.146068 0.0287704 0.0437635 0.00509176 1 0 +0.274603 0.0963645 0.03542 0.00537813 1 0 +0.190315 0.0552909 0.0503652 0.00498143 1 0 +0.34227 0.0424943 0.128558 0.00680922 1 0 +0.224546 0.0717756 0.0894152 0.0052022 1 0 +0.16485 0.144163 0.116683 0.00601526 1 0 +0.31 0.0264071 0.159299 0.00508062 1 0 +0.337475 0.0525507 0.117738 0.00655369 1 0 +0.223739 0.0170824 0.0614024 0.00560669 1 0 +0.299231 0.0440644 0.161454 0.00647538 1 0 +0.0335832 0.0789404 0.0370472 0.00503675 1 0 +0.167133 0.07712 0.119504 0.00701539 1 0 +0.222646 0.152381 0.0815839 0.00666112 1 0 +0.256102 0.122997 0.109313 0.00494815 1 0 +0.217144 0.136513 0.0915481 0.0051836 1 0 +0.248134 0.0112451 0.0967474 0.00654313 1 0 +0.13 0.024322 0.0192746 0.00572495 1 0 +0.269567 0.00820065 0.0760283 0.00789579 1 0 +0.221619 0.0680395 0.0552225 0.00679536 1 0 +0.33895 0.13243 0.132953 0.00507055 1 0 +0.119456 0.0226494 0.183848 0.00514542 1 0 +0.31 0.16474 0.156743 0.00495294 1 0 +0.333612 0.104095 0.0213189 0.0057855 1 0 +0.157879 0.174185 0.130036 0.00890416 1 0 +0.300888 0.122424 0.0414241 0.00732578 1 0 +0.365243 0.103443 0.182958 0.00526612 1 0 +0.052821 0.0599626 0.150999 0.00601089 1 0 +0.389875 0.0408276 0.0233581 0.00608927 1 0 +0.00600313 0.18337 0.178389 0.00501887 1 0 +0.34897 0.111007 0.128003 0.00550693 1 0 +0.294398 0.161156 0.0182559 0.00573325 1 0 +0.181712 0.0226184 0.108846 0.00628206 1 0 +0.232003 0.0810735 0.0908776 0.00680589 1 0 +0.192502 0.0130733 0.0573592 0.00506112 1 0 +0.0286125 0.0500802 0.0806136 0.00523027 1 0 +0.0493994 0.121428 0.149163 0.00518747 1 0 +0.08476 0.158288 0.0380256 0.00497445 1 0 +0.0951523 0.159668 0.111227 0.0065057 1 0 +0.112207 0.191503 0.168551 0.00718012 1 0 +0.114836 0.191245 0.149378 0.00508199 1 0 +0.0904455 0.160321 0.133842 0.00686734 1 0 +0.118465 0.0969585 0.152407 0.00528396 1 0 +0.325616 0.136625 0.131179 0.00570646 1 0 +0.170373 0.171284 0.0552724 0.00506681 1 0 +0.279831 0.0253967 0.0541884 0.00539711 1 0 +0.204186 0.100462 0.0951556 0.00604524 1 0 +0.241027 0.140553 0.188586 0.00632563 1 0 +0.01 0.0305452 0.158786 0.00503532 1 0 +0.154831 0.106833 0.0213084 0.00502078 1 0 +0.356808 0.00512252 0.0769753 0.00500051 1 0 +0.148342 0.0586842 0.18959 0.0057163 1 0 +0.171288 0.0323468 0.182402 0.00533673 1 0 +0.277129 0.149936 0.137827 0.00562111 1 0 +0.172076 0.136966 0.111224 0.00555198 1 0 +0.285579 0.118203 0.066372 0.00625782 1 0 +0.0164121 0.194575 0.0894871 0.00544476 1 0 +0.375279 0.142649 0.0228584 0.00808403 1 0 +0.15 0.0391444 0.176967 0.00523655 1 0 +0.154845 0.0844059 0.0919995 0.00855174 1 0 +0.114847 0.0530955 0.17119 0.00507901 1 0 +0.161215 0.0463565 0.158803 0.00658422 1 0 +0.244294 0.0749789 0.127429 0.00693151 1 0 +0.201621 0.169863 0.056274 0.00539321 1 0 +0.115581 0.0706966 0.056733 0.00508092 1 0 +0.106464 0.112311 0.0671209 0.00524916 1 0 +0.291234 0.0553339 0.0958209 0.00526472 1 0 +0.316176 0.00764799 0.0855426 0.0052024 1 0 +0.275018 0.050031 0.0102281 0.0060469 1 0 +0.150034 0.0206415 0.178561 0.0061308 1 0 +0.263767 0.191992 0.0760477 0.00525599 1 0 +0.130293 0.116906 0.0351914 0.00604257 1 0 +0.186688 0.0872507 0.0579731 0.0061373 1 0 +0.230104 0.106871 0.03155 0.00613509 1 0 +0.173996 0.0709171 0.0506331 0.00512285 1 0 +0.0207845 0.0177262 0.0390978 0.0052981 1 0 +0.0211481 0.0258574 0.0156478 0.00498216 1 0 +0.332627 0.115789 0.15882 0.00579958 1 0 +0.263268 0.157899 0.0664981 0.00551224 1 0 +0.337952 0.0433085 0.15956 0.006886 1 0 +0.34815 0.131308 0.0763117 0.00704923 1 0 +0.115767 0.0923186 0.0853965 0.00514234 1 0 +0.39 0.0189152 0.0358037 0.00601733 1 0 +0.136347 0.131356 0.149812 0.00898847 1 0 +0.34661 0.147226 0.136929 0.00586783 1 0 +0.295703 0.0581534 0.0112684 0.00518624 1 0 +0.0870268 0.00678368 0.0133139 0.00534889 1 0 +0.047278 0.0610762 0.0980137 0.0060369 1 0 +0.178609 0.136398 0.0584243 0.0056634 1 0 +0.202349 0.1576 0.189478 0.00649183 1 0 +0.270943 0.132336 0.191526 0.00832911 1 0 +0.110306 0.122519 0.0741579 0.00656935 1 0 +0.114864 0.0526981 0.143973 0.00623323 1 0 +0.293011 0.0684381 0.183414 0.00565701 1 0 +0.274135 0.0932081 0.160943 0.00563774 1 0 +0.303815 0.140585 0.0694233 0.00626015 1 0 +0.302754 0.191723 0.0147281 0.00550898 1 0 +0.127051 0.00535971 0.111888 0.0055462 1 0 +0.16405 0.0356627 0.0568418 0.00542532 1 0 +0.216114 0.15051 0.19106 0.00731595 1 0 +0.0585163 0.0784101 0.193673 0.00501427 1 0 +0.164093 0.159871 0.117253 0.00903389 1 0 +0.171427 0.150318 0.145285 0.00498805 1 0 +0.01 0.178751 0.0212145 0.00593001 1 0 +0.126596 0.135693 0.0659915 0.00700331 1 0 +0.142394 0.0700104 0.010219 0.00549211 1 0 +0.28283 0.0597229 0.012684 0.00496416 1 0 +0.346125 0.065843 0.0811333 0.00549911 1 0 +0.0192994 0.155884 0.0432481 0.00504566 1 0 +0.0620351 0.177468 0.141743 0.00507261 1 0 +0.395852 0.0603702 0.179532 0.00498008 1 0 +0.196962 0.184654 0.0324529 0.0051657 1 0 +0.279714 0.0566011 0.19426 0.005438 1 0 +0.33 0.0204775 0.0218146 0.00605239 1 0 +0.166458 0.103195 0.147391 0.00591854 1 0 +0.0617074 0.043718 0.0241343 0.00501687 1 0 +0.193501 0.0107412 0.111082 0.00846357 1 0 +0.196351 0.0464952 0.106671 0.00548262 1 0 +0.075906 0.0671244 0.160934 0.00537679 1 0 +0.309361 0.00933187 0.0990245 0.0052889 1 0 +0.0627181 0.0634413 0.168156 0.00501112 1 0 +0.046994 0.112873 0.0364355 0.00532616 1 0 +0.183407 0.0707565 0.00836969 0.00530652 1 0 +0.232014 0.188669 0.181532 0.00507663 1 0 +0.0555723 0.144624 0.121058 0.00569052 1 0 +0.0343206 0.0954366 0.0503161 0.0050001 1 0 +0.0290338 0.173999 0.187396 0.00492787 1 0 +0.309574 0.0839854 0.160007 0.00514783 1 0 +0.0969705 0.169712 0.184873 0.00518084 1 0 +0.0658485 0.150003 0.179707 0.0062944 1 0 +0.108433 0.119435 0.163223 0.00507743 1 0 +0.206247 0.0766513 0.105902 0.0066949 1 0 +0.0864436 0.0643843 0.103629 0.00657068 1 0 +0.182244 0.133136 0.104595 0.00617659 1 0 +0.0471952 0.00624242 0.0945309 0.00649479 1 0 +0.0527607 0.0109981 0.11591 0.00611499 1 0 +0.10993 0.119343 0.0931493 0.0072709 1 0 +0.103207 0.0969803 0.129359 0.00654085 1 0 +0.170271 0.0187429 0.167282 0.00512471 1 0 +0.164726 0.0409384 0.179983 0.00554499 1 0 +0.326465 0.0283705 0.135593 0.00524226 1 0 +0.140623 0.0711734 0.0772951 0.00581126 1 0 +0.0850976 0.191205 0.0768463 0.00685597 1 0 +0.09 0.183533 0.0269557 0.00709967 1 0 +0.375296 0.139669 0.0715155 0.00536797 1 0 +0.156343 0.119418 0.0174718 0.00496351 1 0 +0.201745 0.155548 0.03555 0.00549744 1 0 +0.283227 0.187762 0.109832 0.00782879 1 0 +0.0651253 0.0846026 0.00611225 0.00671016 1 0 +0.165103 0.164994 0.0433823 0.00517184 1 0 +0.230469 0.142552 0.0262646 0.00565048 1 0 +0.0644654 0.0126289 0.0524089 0.00567865 1 0 +0.193453 0.160545 0.0700145 0.00542249 1 0 +0.169417 0.181557 0.0684874 0.00516442 1 0 +0.334088 0.127733 0.102483 0.00550088 1 0 +0.0956108 0.121131 0.123297 0.00975789 1 0 +0.123709 0.127416 0.188492 0.00539229 1 0 +0.0979571 0.108096 0.156332 0.00547353 1 0 +0.251707 0.016391 0.19019 0.00624543 1 0 +0.0661633 0.179022 0.041344 0.00492435 1 0 +0.355416 0.193746 0.0841065 0.00589224 1 0 +0.347893 0.18288 0.0297822 0.00510758 1 0 +0.136844 0.0199226 0.083017 0.00534729 1 0 +0.39235 0.147579 0.183273 0.00580378 1 0 +0.01 0.0411491 0.0267012 0.00533574 1 0 +0.0588663 0.13177 0.102265 0.00539944 1 0 +0.0978903 0.11469 0.0541935 0.00643746 1 0 +0.308283 0.122379 0.18741 0.00743573 1 0 +0.381485 0.00477065 0.0532761 0.0053672 1 0 +0.274681 0.123917 0.0450574 0.00494249 1 0 +0.274508 0.141622 0.0266256 0.00580575 1 0 +0.170151 0.0674314 0.143951 0.00518518 1 0 +0.158682 0.0638484 0.15911 0.0051452 1 0 +0.378616 0.181401 0.180389 0.00548654 1 0 +0.0459767 0.150753 0.0466611 0.00506987 1 0 +0.0454381 0.151814 0.0341858 0.00532984 1 0 +0.188361 0.0534292 0.0140177 0.00568027 1 0 +0.217714 0.125165 0.0343887 0.00503698 1 0 +0.110836 0.126499 0.0383373 0.00694862 1 0 +0.096231 0.130024 0.0342919 0.0058512 1 0 +0.201951 0.139456 0.0361176 0.00511319 1 0 +0.191894 0.0976474 0.14744 0.00647568 1 0 +0.35 0.171579 0.181703 0.00547433 1 0 +0.30885 0.0795745 0.0344666 0.00514951 1 0 +0.296265 0.116872 0.0586386 0.00494227 1 0 +0.314284 0.103333 0.0673027 0.00555231 1 0 +0.092611 0.0159843 0.19321 0.0053434 1 0 +0.13 0.0210197 0.163043 0.00513412 1 0 +0.027443 0.148809 0.189908 0.00511117 1 0 +0.121856 0.159182 0.118894 0.00508099 1 0 +0.156883 0.181267 0.0743892 0.0062106 1 0 +0.363206 0.0564425 0.0982633 0.00501058 1 0 +0.00889184 0.161165 0.0418842 0.00670472 1 0 +0.39 0.156352 0.032948 0.00717421 1 0 +0.196193 0.191986 0.0554252 0.00542604 1 0 +0.212932 0.0369344 0.0594619 0.00530686 1 0 +0.246057 0.0820164 0.0902824 0.00684233 1 0 +0.262212 0.194978 0.0528194 0.005386 1 0 +0.349212 0.161169 0.102484 0.00696689 1 0 +0.0212278 0.053785 0.165676 0.00526682 1 0 +0.25 0.0222123 0.160308 0.00595556 1 0 +0.13 0.0338003 0.0415081 0.00571234 1 0 +0.251398 0.0134418 0.052878 0.00555353 1 0 +0.283035 0.0380155 0.017362 0.00527007 1 0 +0.256399 0.00663239 0.0405731 0.00536133 1 0 +0.277872 0.0151422 0.0301644 0.00501034 1 0 +0.29 0.0331873 0.156387 0.00535195 1 0 +0.310051 0.159968 0.0644506 0.00626058 1 0 +0.23 0.0400195 0.0252136 0.00494321 1 0 +0.00597915 0.192857 0.113782 0.00614966 1 0 +0.26478 0.0856209 0.0621084 0.0058759 1 0 +0.170888 0.0249568 0.149919 0.00528423 1 0 +0.0862489 0.178614 0.156334 0.00675943 1 0 +0.0765856 0.148868 0.166939 0.00690831 1 0 +0.0769549 0.152726 0.14279 0.00842565 1 0 +0.374428 0.101105 0.0515387 0.00506034 1 0 +0.208821 0.0315649 0.0177298 0.00519243 1 0 +0.213451 0.0158765 0.0324657 0.00576198 1 0 +0.2004 0.0441061 0.0243762 0.00519107 1 0 +0.21 0.0282458 0.0431743 0.00602494 1 0 +0.258037 0.0375442 0.0171449 0.00503405 1 0 +0.13 0.0397069 0.163478 0.00538679 1 0 +0.341736 0.0212705 0.157989 0.00494933 1 0 +0.33 0.0107095 0.169753 0.00926678 1 0 +0.39 0.0244424 0.159316 0.00565326 1 0 +0.123273 0.184883 0.0328546 0.00550323 1 0 +0.0582003 0.154851 0.0294708 0.00526422 1 0 +0.0687158 0.163556 0.0197289 0.0049326 1 0 +0.343047 0.152234 0.0418529 0.00666205 1 0 +0.260138 0.181753 0.0392608 0.00496383 1 0 +0.323838 0.181046 0.0401489 0.00548408 1 0 +0.39 0.17758 0.03934 0.00564262 1 0 +0.0114031 0.169948 0.157271 0.00536005 1 0 +0.105449 0.182977 0.175277 0.00503166 1 0 +0.181274 0.184416 0.182946 0.0067919 1 0 +0.17 0.174714 0.158959 0.00562471 1 0 +0.243437 0.155565 0.17436 0.0054662 1 0 +0.198594 0.177974 0.183018 0.00533083 1 0 +0.357939 0.155902 0.154586 0.00588195 1 0 +0.0678736 0.0194877 0.193962 0.00587428 1 0 +0.261094 0.031613 0.143196 0.00641111 1 0 +0.0544616 0.0115973 0.103615 0.00631154 1 0 +0.300243 0.18462 0.180876 0.00679718 1 0 +0.381482 0.00919082 0.15216 0.00582408 1 0 +0.3597 0.172902 0.127903 0.00513018 1 0 +0.27607 0.152288 0.115059 0.00497727 1 0 +0.33 0.165643 0.156947 0.00701088 1 0 +0.168644 0.0373118 0.1599 0.00517157 1 0 +0.110805 0.0247741 0.0426208 0.00646617 1 0 +0.277394 0.0310717 0.04549 0.00527087 1 0 +0.370097 0.00686026 0.142097 0.00622595 1 0 +0.10914 0.070801 0.0234014 0.00536059 1 0 +0.062817 0.0164829 0.177108 0.00493717 1 0 +0.340361 0.121672 0.136124 0.00623336 1 0 +0.177069 0.166193 0.116547 0.00541707 1 0 +0.0717111 0.0222557 0.159741 0.00529445 1 0 +0.173048 0.126401 0.105637 0.00526965 1 0 +0.370588 0.141092 0.00823424 0.00735295 1 0 +0.311732 0.112762 0.10386 0.00566651 1 0 +0.224861 0.0108757 0.0111513 0.00580825 1 0 +0.282403 0.0378644 0.150256 0.00501103 1 0 +0.183624 0.0128695 0.0433923 0.00525007 1 0 +0.342352 0.149326 0.0994858 0.00704412 1 0 +0.23 0.164717 0.0399481 0.00506231 1 0 +0.342001 0.179746 0.00588706 0.0062753 1 0 +0.198251 0.0879786 0.0521409 0.00683441 1 0 +0.0955366 0.15961 0.122925 0.00519878 1 0 +0.00593014 0.161319 0.084341 0.00603019 1 0 +0.18029 0.154792 0.145996 0.00496599 1 0 +0.0281417 0.143236 0.173569 0.0049881 1 0 +0.352748 0.152499 0.0343066 0.00563147 1 0 +0.260024 0.10054 0.0972566 0.00498755 1 0 +0.159265 0.0614676 0.177132 0.00496797 1 0 +0.273013 0.066809 0.168266 0.00526 1 0 +0.0961053 0.158912 0.0425576 0.00541757 1 0 +0.38805 0.112274 0.0864649 0.00526447 1 0 +0.264119 0.0605599 0.0966643 0.00523095 1 0 +0.329591 0.159137 0.176464 0.00586786 1 0 +0.0730028 0.0412287 0.106009 0.00531919 1 0 +0.264012 0.178833 0.14807 0.00573042 1 0 +0.263282 0.135521 0.013621 0.00547357 1 0 +0.0967876 0.145384 0.10407 0.00751144 1 0 +0.230225 0.160641 0.0228926 0.00528607 1 0 +0.325794 0.0266551 0.0951936 0.00597996 1 0 +0.149199 0.0800426 0.0786346 0.00659869 1 0 +0.238664 0.165512 0.184353 0.00509723 1 0 +0.21 0.0406293 0.1602 0.00757887 1 0 +0.187799 0.0417546 0.177593 0.00538602 1 0 +0.0331917 0.0228511 0.156774 0.0065044 1 0 +0.216288 0.0735893 0.0648644 0.00554062 1 0 +0.19795 0.00662434 0.163804 0.00522254 1 0 +0.332126 0.00415627 0.0198734 0.0051572 1 0 +0.205507 0.0201568 0.158537 0.00588187 1 0 +0.170897 0.173902 0.120927 0.00523435 1 0 +0.248516 0.014429 0.120122 0.005256 1 0 +0.0361242 0.15799 0.157262 0.00581867 1 0 +0.138548 0.147702 0.123506 0.00907352 1 0 +0.149799 0.0372451 0.151687 0.00499184 1 0 +0.177965 0.159118 0.180328 0.00514079 1 0 +0.392538 0.0189895 0.180817 0.00561277 1 0 +0.382243 0.101195 0.0750976 0.00609491 1 0 +0.0836357 0.0219441 0.00512935 0.00496743 1 0 +0.33 0.161926 0.0377196 0.00499244 1 0 +0.336211 0.177032 0.132754 0.00506622 1 0 +0.0532224 0.134385 0.114407 0.0055477 1 0 +0.276116 0.156167 0.163396 0.0058125 1 0 +0.0348003 0.115308 0.0677341 0.00607577 1 0 +0.0440233 0.146143 0.166868 0.00519442 1 0 +0.120917 0.0561351 0.0994865 0.00526409 1 0 +0.256449 0.107859 0.061902 0.00687425 1 0 +0.171845 0.0215487 0.117558 0.00692348 1 0 +0.255654 0.161876 0.0169731 0.00532026 1 0 +0.144031 0.154944 0.170114 0.00558662 1 0 +0.145005 0.0179794 0.0223569 0.00509841 1 0 +0.128038 0.0977233 0.174511 0.00514635 1 0 +0.201338 0.0257893 0.133051 0.00532102 1 0 +0.166681 0.100641 0.0706421 0.00550443 1 0 +0.12131 0.166423 0.0453309 0.00579703 1 0 +0.0658001 0.154509 0.11645 0.00642682 1 0 +0.0572581 0.165887 0.155183 0.0056194 1 0 +0.187662 0.191443 0.00509992 0.00542144 1 0 +0.0944134 0.0383697 0.0973631 0.0068424 1 0 +0.318418 0.111156 0.144915 0.00537137 1 0 +0.286851 0.123289 0.175289 0.00521646 1 0 +0.161594 0.113297 0.134391 0.00755107 1 0 +0.18948 0.156254 0.0181854 0.00526632 1 0 +0.177931 0.155843 0.0650242 0.00562178 1 0 +0.100584 0.0462843 0.173604 0.00525411 1 0 +0.169914 0.139955 0.1501 0.00653871 1 0 +0.263616 0.116388 0.0769037 0.00648812 1 0 +0.31668 0.128179 0.105431 0.00518582 1 0 +0.100492 0.0735251 0.0144766 0.00492659 1 0 +0.132923 0.17577 0.18249 0.00547233 1 0 +0.34078 0.0083426 0.186336 0.00818907 1 0 +0.29936 0.142034 0.0951274 0.00620868 1 0 +0.269367 0.0277092 0.18182 0.00525473 1 0 +0.325954 0.0773823 0.00821037 0.00871461 1 0 +0.385832 0.013629 0.080827 0.0053703 1 0 +0.271175 0.194405 0.138624 0.00629957 1 0 +0.176297 0.1553 0.0249634 0.00597416 1 0 +0.367395 0.155817 0.0259312 0.00650447 1 0 +0.242305 0.045509 0.129572 0.00581364 1 0 +0.170596 0.167333 0.189563 0.00681678 1 0 +0.143312 0.0364464 0.184318 0.0050612 1 0 +0.0838401 0.0723796 0.0732097 0.00542222 1 0 +0.164174 0.164756 0.146673 0.00878473 1 0 +0.343979 0.0134402 0.16495 0.00576487 1 0 +0.296169 0.0723779 0.0760541 0.00519839 1 0 +0.343016 0.131144 0.0620836 0.00527033 1 0 +0.176588 0.144532 0.0358948 0.0059744 1 0 +0.257508 0.0394345 0.133334 0.00567279 1 0 +0.0289996 0.142579 0.113386 0.00555155 1 0 +0.11092 0.182559 0.0602423 0.00608611 1 0 +0.0607705 0.0760141 0.076644 0.00607164 1 0 +0.16066 0.0425497 0.147777 0.00509363 1 0 +0.0715801 0.0833763 0.104049 0.00535127 1 0 +0.15 0.170787 0.157919 0.00570278 1 0 +0.327064 0.164185 0.0820805 0.00526258 1 0 +0.317055 0.15458 0.171205 0.00574498 1 0 +0.347806 0.153938 0.0778674 0.00703853 1 0 +0.293947 0.171232 0.133718 0.00556929 1 0 +0.156684 0.149419 0.111223 0.00512589 1 0 +0.252732 0.131396 0.0968162 0.00549874 1 0 +0.01425 0.0215658 0.0708055 0.00532287 1 0 +0.0763223 0.156665 0.176082 0.00511058 1 0 +0.124446 0.127437 0.039473 0.00674084 1 0 +0.359546 0.118236 0.0804413 0.00511047 1 0 +0.0887918 0.0346958 0.0417275 0.00539093 1 0 +0.177854 0.108789 0.142292 0.00537027 1 0 +0.0968535 0.0707884 0.111793 0.00515489 1 0 +0.302334 0.145584 0.0277289 0.00572278 1 0 +0.3148 0.0091965 0.159974 0.00610153 1 0 +0.0650404 0.077735 0.111273 0.00583579 1 0 +0.35 0.157852 0.167876 0.00587751 1 0 +0.0687925 0.0473 0.0986019 0.00505409 1 0 +0.351393 0.00584318 0.10956 0.00633544 1 0 +0.250902 0.0661362 0.0970678 0.00614813 1 0 +0.199256 0.151144 0.160893 0.00572317 1 0 +0.081642 0.174244 0.0457985 0.00526858 1 0 +0.21976 0.170596 0.149192 0.00673337 1 0 +0.310973 0.131476 0.0090823 0.00770685 1 0 +0.171225 0.0350769 0.148616 0.00492495 1 0 +0.0422254 0.0146582 0.108313 0.00714824 1 0 +0.25391 0.150461 0.103458 0.00533219 1 0 +0.328306 0.142198 0.15002 0.00511059 1 0 +0.382755 0.00781137 0.0192031 0.00505643 1 0 +0.127577 0.145161 0.167248 0.0062849 1 0 +0.0600214 0.130019 0.0487371 0.0049201 1 0 +0.110918 0.0619143 0.156475 0.00676531 1 0 +0.293273 0.158535 0.00771861 0.00518306 1 0 +0.1195 0.145898 0.0623842 0.0059389 1 0 +0.109317 0.0465481 0.165315 0.00531158 1 0 +0.315361 0.10605 0.0312039 0.007184 1 0 +0.0817801 0.153306 0.155881 0.00553843 1 0 +0.0487354 0.0470424 0.0517937 0.005316 1 0 +0.37 0.0372783 0.160129 0.0058242 1 0 +0.0778138 0.0743938 0.0561003 0.00531565 1 0 +0.346521 0.143338 0.049699 0.00569743 1 0 +0.307383 0.11418 0.156362 0.00575875 1 0 +0.277046 0.158534 0.144477 0.00524865 1 0 +0.13 0.0361391 0.180559 0.00578534 1 0 +0.206529 0.0269038 0.0694898 0.00506644 1 0 +0.358316 0.0430172 0.177113 0.00492916 1 0 +0.00654987 0.0696918 0.0295163 0.00614741 1 0 +0.0899527 0.0570072 0.172679 0.00604206 1 0 +0.202863 0.180004 0.154309 0.00552596 1 0 +0.148523 0.177151 0.140333 0.00532119 1 0 +0.13307 0.0630071 0.121302 0.00599325 1 0 +0.0780002 0.0448977 0.160222 0.00513026 1 0 +0.238688 0.0248954 0.150031 0.0050339 1 0 +0.33353 0.0754906 0.0249002 0.00582627 1 0 +0.256402 0.0357335 0.152655 0.00492271 1 0 +0.234174 0.0957673 0.0900119 0.00807268 1 0 +0.192198 0.127593 0.100147 0.00505887 1 0 +0.00825974 0.126987 0.0225671 0.00501073 1 0 +0.13 0.174395 0.159837 0.00492019 1 0 +0.367878 0.149816 0.162361 0.00544743 1 0 +0.274419 0.0773807 0.019342 0.00563982 1 0 +0.262616 0.0135154 0.193305 0.00545901 1 0 +0.306531 0.148053 0.0546813 0.00499252 1 0 +0.0517323 0.176959 0.0189973 0.00510163 1 0 +0.237788 0.0894483 0.0749374 0.00714378 1 0 +0.0893069 0.189382 0.152218 0.00516745 1 0 +0.0323866 0.126165 0.0357112 0.00522841 1 0 +0.314882 0.0714174 0.0349756 0.00500877 1 0 +0.33603 0.1587 0.0660504 0.00571842 1 0 +0.108816 0.151105 0.169317 0.00516 1 0 +0.364708 0.051628 0.167371 0.00626463 1 0 +0.100349 0.108523 0.130208 0.0053807 1 0 +0.170666 0.0892365 0.068069 0.0057705 1 0 +0.0999165 0.142379 0.0745268 0.00561466 1 0 +0.0597816 0.185221 0.027062 0.0055033 1 0 +0.238633 0.179517 0.0175771 0.005709 1 0 +0.107246 0.085266 0.131911 0.00559302 1 0 +0.0861326 0.0451846 0.187098 0.00520339 1 0 +0.0637139 0.192531 0.157391 0.00495527 1 0 +0.267139 0.069563 0.0327794 0.00499077 1 0 +0.0864614 0.191535 0.0401115 0.0049512 1 0 +0.0237336 0.120119 0.0736767 0.00535296 1 0 +0.211425 0.00508826 0.0340575 0.00523903 1 0 +0.0575627 0.0483748 0.151254 0.00577812 1 0 +0.243244 0.0831797 0.102024 0.00528776 1 0 +0.261577 0.0796649 0.114792 0.00550874 1 0 +0.103909 0.0607845 0.0205837 0.00494194 1 0 +0.227431 0.195448 0.0180965 0.00494513 1 0 +0.29699 0.120724 0.180025 0.00600489 1 0 +0.122431 0.0146929 0.166487 0.00531487 1 0 +0.356335 0.0460945 0.0299408 0.00548702 1 0 +0.25 0.165995 0.040633 0.0051361 1 0 +0.245868 0.116582 0.0693421 0.00872676 1 0 +0.215962 0.117685 0.0750916 0.0073751 1 0 +0.0934349 0.0583919 0.0966913 0.00495829 1 0 +0.359399 0.151389 0.059909 0.00510121 1 0 +0.259602 0.143109 0.0989046 0.00502089 1 0 +0.0356892 0.0457494 0.032632 0.00527195 1 0 +0.180834 0.0330256 0.1308 0.0051692 1 0 +0.0631825 0.193286 0.183238 0.00541475 1 0 +0.343546 0.167816 0.0445428 0.00512738 1 0 +0.239506 0.0748118 0.116467 0.00503154 1 0 +0.365153 0.133028 0.0180349 0.0054654 1 0 +0.214868 0.00513958 0.006055 0.00538041 1 0 +0.0779447 0.00933514 0.133271 0.00725011 1 0 +0.37 0.171148 0.0439746 0.00681272 1 0 +0.106816 0.139283 0.119261 0.00843925 1 0 +0.394734 0.0786798 0.128928 0.00549414 1 0 +0.096486 0.153221 0.187963 0.00829006 1 0 +0.17 0.156997 0.0352682 0.00551604 1 0 +0.0556346 0.033688 0.15095 0.0053515 1 0 +0.226596 0.0350846 0.043546 0.00590146 1 0 +0.0777909 0.165915 0.148506 0.00597243 1 0 +0.340627 0.165863 0.150643 0.00521091 1 0 +0.393511 0.111386 0.0591638 0.00504775 1 0 +0.324017 0.170214 0.108676 0.00527019 1 0 +0.278548 0.116772 0.191291 0.00493263 1 0 +0.208638 0.131575 0.0885691 0.00509302 1 0 +0.24394 0.127435 0.0543049 0.00545812 1 0 +0.233082 0.0215367 0.159692 0.00502445 1 0 +0.0802463 0.0952664 0.128303 0.00587113 1 0 +0.35373 0.142419 0.0794802 0.00578166 1 0 +0.332804 0.119654 0.0538804 0.00495888 1 0 +0.14254 0.0523675 0.0987686 0.00593462 1 0 +0.238221 0.0238557 0.0159596 0.005277 1 0 +0.276343 0.155965 0.0355368 0.00552434 1 0 +0.389898 0.166025 0.0423102 0.00628806 1 0 +0.20734 0.0934415 0.107873 0.00881958 1 0 +0.113326 0.0465527 0.155473 0.00531565 1 0 +0.287784 0.152427 0.0201663 0.0053834 1 0 +0.19 0.174441 0.0195105 0.00515748 1 0 +0.0933412 0.0662663 0.0868433 0.0056423 1 0 +0.0535527 0.170707 0.140558 0.00502638 1 0 +0.056345 0.0447936 0.167543 0.00543527 1 0 +0.319714 0.173203 0.0138602 0.00532904 1 0 +0.318993 0.159075 0.14688 0.00515332 1 0 +0.132172 0.073621 0.0140572 0.00541312 1 0 +0.186738 0.0355362 0.152613 0.00527402 1 0 +0.354687 0.148664 0.144741 0.00546032 1 0 +0.143956 0.0873215 0.111676 0.00507434 1 0 +0.33 0.0263341 0.0406133 0.00503598 1 0 +0.239281 0.184703 0.0268573 0.00494154 1 0 +0.317241 0.121443 0.147915 0.0054086 1 0 +0.0155774 0.155562 0.0334974 0.00539621 1 0 +0.0467048 0.164738 0.157204 0.0051868 1 0 +0.0907433 0.128642 0.136023 0.00580039 1 0 +0.226558 0.0050429 0.0680593 0.00546214 1 0 +0.160818 0.101567 0.0900302 0.00542622 1 0 +0.0578329 0.0527018 0.0826996 0.00535188 1 0 +0.190631 0.0849595 0.120363 0.00498892 1 0 +0.0855674 0.0739422 0.0906115 0.00557382 1 0 +0.079236 0.0838242 0.173243 0.00524543 1 0 +0.317096 0.134697 0.0196558 0.00492943 1 0 +0.22179 0.164076 0.0472665 0.005254 1 0 +0.035521 0.024448 0.141908 0.00500036 1 0 +0.121423 0.153796 0.0454467 0.00630561 1 0 +0.243375 0.157456 0.0401662 0.0056814 1 0 +0.216065 0.156221 0.0151389 0.00496757 1 0 +0.288644 0.161478 0.0391054 0.00517417 1 0 +0.305165 0.129215 0.093237 0.00602047 1 0 +0.326572 0.0931579 0.0556699 0.0057005 1 0 +0.142905 0.188128 0.00832213 0.00500349 1 0 +0.303122 0.183253 0.0234914 0.0050918 1 0 +0.0513195 0.131298 0.0421085 0.00585023 1 0 +0.137058 0.141451 0.159999 0.00536984 1 0 +0.257599 0.0941042 0.134262 0.00512517 1 0 +0.19656 0.0472216 0.181399 0.0050835 1 0 +0.133371 0.0855867 0.135726 0.00558747 1 0 +0.297211 0.148201 0.0460843 0.00513294 1 0 +0.27 0.18092 0.166627 0.00518641 1 0 +0.117472 0.0642168 0.142115 0.00572231 1 0 +0.37979 0.152412 0.0390155 0.0053394 1 0 +0.21 0.0393582 0.0384033 0.00606831 1 0 +0.227068 0.0301736 0.0720983 0.00605722 1 0 +0.341191 0.0251477 0.0454776 0.00610949 1 0 +0.364764 0.147722 0.152537 0.00496601 1 0 +0.331248 0.0630576 0.114729 0.00602514 1 0 +0.187503 0.160421 0.160779 0.00526709 1 0 +0.0607547 0.036431 0.111339 0.00504444 1 0 +0.0249341 0.140233 0.059008 0.00500066 1 0 +0.277753 0.0891442 0.0799665 0.00500209 1 0 +0.241637 0.138237 0.158558 0.00502118 1 0 +0.107164 0.192643 0.156784 0.00567281 1 0 +0.121535 0.112179 0.124726 0.00558203 1 0 +0.12679 0.109329 0.188589 0.00564646 1 0 +0.192212 0.116073 0.195068 0.00500692 1 0 +0.176887 0.14295 0.103954 0.00502218 1 0 +0.200576 0.118743 0.0119407 0.00519626 1 0 +0.179161 0.124561 0.0950849 0.00562769 1 0 +0.101414 0.125129 0.0662452 0.00561635 1 0 +0.252938 0.0644826 0.194418 0.00534798 1 0 +0.241464 0.0230279 0.194617 0.00567851 1 0 +0.14585 0.154364 0.0333299 0.0049201 1 0 +0.13 0.162097 0.15985 0.00629393 1 0 +0.374508 0.0444107 0.028399 0.00521957 1 0 +0.163322 0.111215 0.109167 0.00495191 1 0 +0.325752 0.186974 0.117146 0.00507565 1 0 +0.235053 0.112389 0.0399197 0.0050449 1 0 +0.310614 0.134246 0.0798435 0.00715402 1 0 +0.337052 0.175091 0.108946 0.00633609 1 0 +0.258904 0.122522 0.0117143 0.00533354 1 0 +0.119023 0.128715 0.105223 0.0094116 1 0 +0.0621116 0.0146283 0.00623177 0.00653622 1 0 +0.0110308 0.159897 0.123493 0.00517159 1 0 +0.106056 0.161993 0.0567978 0.00669773 1 0 +0.319037 0.128427 0.186393 0.00494375 1 0 +0.0707372 0.138259 0.1358 0.00492486 1 0 +0.0951466 0.0410084 0.194366 0.00577235 1 0 +0.215184 0.0511051 0.0949013 0.00567067 1 0 +0.152345 0.15892 0.128689 0.00738893 1 0 +0.116686 0.0767524 0.0309955 0.00507058 1 0 +0.208835 0.142381 0.170932 0.00500633 1 0 +0.0834147 0.087441 0.0911852 0.00614729 1 0 +0.113349 0.0109536 0.0221073 0.00516509 1 0 +0.00816041 0.155564 0.108356 0.00548171 1 0 +0.0962057 0.0661762 0.15883 0.0061964 1 0 +0.327568 0.116904 0.148792 0.00548791 1 0 +0.164068 0.082941 0.0800338 0.00662652 1 0 +0.244047 0.0375086 0.0431852 0.00521327 1 0 +0.141397 0.176393 0.154309 0.00518206 1 0 +0.178245 0.168578 0.0633801 0.00529997 1 0 +0.160227 0.051309 0.0342094 0.00494937 1 0 +0.170286 0.124796 0.116129 0.00569779 1 0 +0.203984 0.106266 0.184599 0.0049814 1 0 +0.325401 0.161488 0.0918087 0.00496851 1 0 +0.306247 0.00665273 0.089148 0.00540779 1 0 +0.316238 0.015265 0.0931219 0.0055432 1 0 +0.240079 0.145881 0.0296839 0.00507972 1 0 +0.32467 0.132036 0.0980336 0.00576958 1 0 +0.157623 0.132844 0.122606 0.00866231 1 0 +0.169955 0.15008 0.108074 0.00561139 1 0 +0.194824 0.187497 0.0649106 0.00515682 1 0 +0.239326 0.0150519 0.181313 0.00509233 1 0 +0.318191 0.159187 0.0564939 0.00514918 1 0 +0.0792881 0.016866 0.180201 0.00517011 1 0 +0.260323 0.0685592 0.11658 0.00542457 1 0 +0.239286 0.106852 0.0810619 0.00706377 1 0 +0.334289 0.0982624 0.0122789 0.00499393 1 0 +0.226025 0.118987 0.0279885 0.00713664 1 0 +0.344845 0.189664 0.0855549 0.00553181 1 0 +0.253551 0.0766101 0.0827654 0.00506928 1 0 +0.345822 0.188583 0.154599 0.00880407 1 0 +0.0827703 0.0235384 0.0445821 0.00618839 1 0 +0.333985 0.040954 0.0412785 0.00507434 1 0 +0.278721 0.0594964 0.0952742 0.00546562 1 0 +0.019205 0.0449667 0.0239296 0.00500779 1 0 +0.149741 0.117969 0.0247541 0.00497227 1 0 +0.148458 0.0655767 0.112763 0.00500424 1 0 +0.185581 0.113329 0.0951075 0.00636539 1 0 +0.314931 0.172481 0.184316 0.00538804 1 0 +0.151307 0.191604 0.0841679 0.00742714 1 0 +0.215391 0.0778268 0.0526149 0.00509487 1 0 +0.116938 0.0537562 0.0111887 0.00632439 1 0 +0.123704 0.145119 0.105583 0.0063281 1 0 +0.349979 0.189299 0.0221952 0.00504719 1 0 +0.373207 0.0786809 0.0262685 0.00511944 1 0 +0.119987 0.0826799 0.127211 0.00497848 1 0 +0.119432 0.0344412 0.044668 0.00533614 1 0 +0.125114 0.0259125 0.148706 0.00512049 1 0 +0.0491786 0.102561 0.165362 0.00540046 1 0 +0.187451 0.00754914 0.195216 0.00498253 1 0 +0.0993061 0.0379254 0.016514 0.00499695 1 0 +0.134012 0.118456 0.140878 0.00687643 1 0 +0.274864 0.191863 0.165327 0.00519948 1 0 +0.338764 0.184065 0.0196136 0.00661261 1 0 +0.30909 0.155887 0.1521 0.00508481 1 0 +0.281038 0.179616 0.0434301 0.00495262 1 0 +0.284824 0.0573723 0.0853284 0.00514923 1 0 +0.152 0.0776878 0.110776 0.0062575 1 0 +0.352751 0.0402944 0.0504634 0.00495409 1 0 +0.06202 0.039623 0.0415275 0.00515143 1 0 +0.253638 0.0493509 0.152362 0.00593247 1 0 +0.17658 0.177998 0.016944 0.00513947 1 0 +0.315916 0.152921 0.0712626 0.00516184 1 0 +0.222567 0.157874 0.0384202 0.00498412 1 0 +0.178055 0.0404681 0.180863 0.00497207 1 0 +0.0640356 0.136959 0.117493 0.00598804 1 0 +0.269722 0.170038 0.152649 0.00571176 1 0 +0.252802 0.16212 0.0986709 0.00499185 1 0 +0.209844 0.0545797 0.177965 0.00554082 1 0 +0.13029 0.0507768 0.0401549 0.00497506 1 0 +0.366953 0.146216 0.0774128 0.00517086 1 0 +0.371563 0.0342949 0.0441009 0.00496373 1 0 +0.27 0.178611 0.0224494 0.00494871 1 0 +0.26675 0.138843 0.061017 0.00518781 1 0 +0.114366 0.178677 0.155083 0.0057361 1 0 +0.221864 0.0366978 0.0793678 0.00501016 1 0 +0.207612 0.0444648 0.193214 0.00627639 1 0 +0.271776 0.149236 0.0896579 0.00512745 1 0 +0.121741 0.14519 0.0354793 0.00576319 1 0 +0.262546 0.0115259 0.0141798 0.00560513 1 0 +0.300685 0.155898 0.0352115 0.00504962 1 0 +0.174803 0.111176 0.0338426 0.00552079 1 0 +0.104673 0.128424 0.132813 0.00527037 1 0 +0.315444 0.160233 0.189164 0.00572812 1 0 +0.251209 0.129378 0.074338 0.00601193 1 0 +0.190451 0.192302 0.115137 0.00546215 1 0 +0.249307 0.185526 0.00612246 0.00502701 1 0 +0.203934 0.0225659 0.18315 0.0051549 1 0 +0.302241 0.100337 0.134276 0.00542858 1 0 +0.347415 0.0902788 0.136673 0.00554412 1 0 +0.0795558 0.105547 0.122701 0.00494732 1 0 +0.301311 0.0235448 0.154751 0.00513585 1 0 +0.114762 0.0984224 0.124566 0.00605229 1 0 +0.0258172 0.13008 0.0854701 0.00587416 1 0 +0.192188 0.0787302 0.129962 0.00526632 1 0 +0.24031 0.16392 0.0162384 0.00504816 1 0 +0.173767 0.182968 0.0343716 0.00503739 1 0 +0.187492 0.121202 0.145904 0.00543631 1 0 +0.121307 0.0911066 0.163532 0.00760362 1 0 +0.306121 0.039887 0.0508405 0.00586732 1 0 +0.0313969 0.187535 0.116287 0.00526618 1 0 +0.205244 0.0530181 0.00474848 0.00533448 1 0 +0.318555 0.0988328 0.162645 0.00544252 1 0 +0.384049 0.150213 0.18977 0.00506271 1 0 +0.35882 0.0705367 0.0071012 0.00591425 1 0 +0.374241 0.107337 0.150027 0.0050843 1 0 +0.0585332 0.133693 0.194195 0.00493436 1 0 +0.0855199 0.118215 0.184505 0.0055736 1 0 +0.158235 0.138137 0.19419 0.00609273 1 0 +0.122416 0.07642 0.139554 0.0062318 1 0 +0.00479918 0.192651 0.081544 0.00545332 1 0 +0.27634 0.123768 0.072765 0.00597458 1 0 +0.0486482 0.0469649 0.145052 0.00514093 1 0 +0.19 0.0254881 0.159743 0.00501905 1 0 +0.37864 0.120691 0.00630193 0.00533048 1 0 +0.25 0.162741 0.161173 0.0051858 1 0 +0.0566476 0.069124 0.110854 0.00507997 1 0 +0.0116925 0.0406675 0.11733 0.0050623 1 0 +0.315558 0.141102 0.0689741 0.00550287 1 0 +0.180223 0.0123022 0.113459 0.00511602 1 0 +0.273171 0.138287 0.0113356 0.00504578 1 0 +0.26461 0.0518817 0.0868252 0.00543732 1 0 +0.229094 0.159702 0.0881235 0.00508333 1 0 +0.26882 0.0938501 0.113402 0.00500452 1 0 +0.349178 0.0540905 0.119842 0.00543585 1 0 +0.0760557 0.0196645 0.0539054 0.00560242 1 0 +0.242801 0.116421 0.034328 0.00532604 1 0 +0.313923 0.155856 0.0894238 0.00559722 1 0 +0.195836 0.105589 0.190249 0.00495681 1 0 +0.0559161 0.179048 0.149599 0.00500992 1 0 +0.252497 0.141266 0.0333844 0.00527091 1 0 +0.0868643 0.111262 0.116764 0.0049587 1 0 +0.350233 0.0345982 0.092011 0.00497733 1 0 +0.09 0.0412077 0.171813 0.00512945 1 0 +0.155742 0.155361 0.0307641 0.00526499 1 0 +0.15503 0.153165 0.0171135 0.00496063 1 0 +0.275704 0.0855324 0.120332 0.0067578 1 0 +0.102093 0.142054 0.139593 0.00507751 1 0 +0.239529 0.0907062 0.0290642 0.00558211 1 0 +0.206284 0.164971 0.15529 0.00676775 1 0 +0.033003 0.0442111 0.152608 0.00525452 1 0 +0.0275063 0.0428424 0.176527 0.0049388 1 0 +0.35862 0.149303 0.170872 0.00662706 1 0 +0.07 0.0215284 0.0227742 0.00496596 1 0 +0.115516 0.132417 0.0702031 0.00529467 1 0 +0.366673 0.153534 0.191388 0.00523087 1 0 +0.0213304 0.141411 0.194224 0.00541128 1 0 +0.106137 0.148663 0.0220844 0.00548936 1 0 +0.295259 0.0650414 0.0597985 0.0057072 1 0 +0.116732 0.150019 0.00547719 0.0057373 1 0 +0.298718 0.00847115 0.0998693 0.00542173 1 0 +0.103477 0.0980706 0.184761 0.00544981 1 0 +0.380526 0.154388 0.0254918 0.00504119 1 0 +0.270214 0.0877797 0.0223453 0.00543992 1 0 +0.314709 0.146188 0.157199 0.00492299 1 0 +0.0183423 0.184847 0.028443 0.00502048 1 0 +0.0872812 0.109532 0.177678 0.00554028 1 0 +0.104323 0.10894 0.166694 0.00671663 1 0 +0.310986 0.115453 0.0435155 0.0051215 1 0 +0.261494 0.0451588 0.14497 0.00564139 1 0 +0.214052 0.0206624 0.0755293 0.00529037 1 0 +0.106893 0.081013 0.0946225 0.00539707 1 0 +0.298594 0.155871 0.148747 0.00506892 1 0 +0.2684 0.0265539 0.125613 0.00542403 1 0 +0.271924 0.155568 0.128731 0.00627654 1 0 +0.190981 0.0881231 0.1063 0.00609074 1 0 +0.317668 0.162075 0.0759067 0.00525105 1 0 +0.161501 0.138712 0.135025 0.00560976 1 0 +0.275306 0.11263 0.0685627 0.0056332 1 0 +0.224296 0.141754 0.0863415 0.00509894 1 0 +0.162671 0.187559 0.127827 0.00547326 1 0 +0.215382 0.0994359 0.0865149 0.00813389 1 0 +0.175097 0.141131 0.121027 0.00551912 1 0 +0.142482 0.0456714 0.17182 0.00515071 1 0 +0.0871426 0.193219 0.0885682 0.00521211 1 0 +0.1382 0.120316 0.0420877 0.00498942 1 0 +0.182786 0.0783669 0.0664189 0.0067264 1 0 +0.139911 0.136595 0.136115 0.00610351 1 0 +0.153271 0.127392 0.136792 0.00714609 1 0 +0.134296 0.0259236 0.153496 0.00523579 1 0 +0.177675 0.144073 0.138335 0.00625251 1 0 +0.307612 0.0216726 0.0937214 0.00521856 1 0 +0.23 0.179957 0.176114 0.0053792 1 0 +0.190162 0.128682 0.112774 0.00604757 1 0 +0.0763513 0.183133 0.0817355 0.00601091 1 0 +0.202471 0.162916 0.0429757 0.0049886 1 0 +0.059156 0.0903555 0.0147954 0.00529511 1 0 +0.0774759 0.0907105 0.00848086 0.0064719 1 0 +0.104679 0.12904 0.107042 0.00505079 1 0 +0.156928 0.0667936 0.168618 0.00496171 1 0 +0.109435 0.114802 0.0340654 0.00526307 1 0 +0.202898 0.0988148 0.144118 0.00507812 1 0 +0.247038 0.0932036 0.0948382 0.00527664 1 0 +0.25441 0.0812233 0.0986122 0.00498023 1 0 +0.207974 0.0236615 0.0530072 0.00501154 1 0 +0.216544 0.0188464 0.0440366 0.0054604 1 0 +0.347109 0.15848 0.157316 0.00508872 1 0 +0.275296 0.175117 0.141214 0.00660876 1 0 +0.00496755 0.1067 0.119988 0.00513157 1 0 +0.297911 0.040944 0.040722 0.00499771 1 0 +0.159434 0.0956141 0.0793437 0.00573121 1 0 +0.283499 0.191069 0.14746 0.0062051 1 0 +0.0369525 0.147064 0.159164 0.00530303 1 0 +0.22607 0.161718 0.14422 0.00523933 1 0 +0.108679 0.0368119 0.0413441 0.00582451 1 0 +0.160892 0.158663 0.1593 0.00561418 1 0 +0.117058 0.136609 0.0401125 0.0050545 1 0 +0.307358 0.147503 0.0894396 0.00502678 1 0 +0.245616 0.147308 0.0379248 0.0049501 1 0 +0.392621 0.0111457 0.151269 0.00552043 1 0 +0.236105 0.110368 0.0613037 0.00536382 1 0 +0.245302 0.0805854 0.0785322 0.0050188 1 0 +0.0652638 0.0836976 0.083807 0.00535354 1 0 +0.32297 0.0769884 0.0234433 0.00493859 1 0 +0.0138609 0.156448 0.0232398 0.0050417 1 0 +0.360794 0.0355947 0.0448732 0.00591051 1 0 +0.178974 0.0989185 0.137006 0.00588317 1 0 +0.175662 0.152784 0.0430227 0.00496919 1 0 +0.0770389 0.0916468 0.0998569 0.00500567 1 0 +0.130172 0.156197 0.173118 0.0064809 1 0 +0.357743 0.0473451 0.116656 0.00592238 1 0 +0.195747 0.0966667 0.101135 0.00497218 1 0 +0.00530248 0.149842 0.121771 0.00585836 1 0 +0.306338 0.116316 0.00953368 0.00781098 1 0 +0.244299 0.0236894 0.182913 0.00500193 1 0 +0.215106 0.0280928 0.153081 0.00542675 1 0 +0.361435 0.15433 0.070999 0.00655125 1 0 +0.0932397 0.190976 0.141447 0.00640936 1 0 +0.153466 0.0468423 0.0457411 0.00518046 1 0 +0.191824 0.0385899 0.160921 0.00493513 1 0 +0.115354 0.154888 0.0550774 0.00509607 1 0 +0.0862296 0.163467 0.155967 0.00555456 1 0 +0.328104 0.185124 0.128874 0.00534291 1 0 +0.34386 0.153777 0.0544861 0.00600231 1 0 +0.162034 0.132633 0.144444 0.00561354 1 0 +0.360377 0.177149 0.0473056 0.00500698 1 0 +0.236277 0.19483 0.0243622 0.00525474 1 0 +0.118413 0.11688 0.0402421 0.0054435 1 0 +0.305835 0.155644 0.170986 0.00552785 1 0 +0.129544 0.141282 0.114632 0.00510482 1 0 +0.376786 0.018156 0.156706 0.00527047 1 0 +0.147745 0.185436 0.146696 0.00515421 1 0 +0.272266 0.15953 0.0903589 0.00520212 1 0 +0.22723 0.104227 0.0822697 0.00533343 1 0 +0.385255 0.175893 0.0649707 0.00515363 1 0 +0.23857 0.129915 0.0724236 0.00678225 1 0 +0.0351287 0.115887 0.0370834 0.00515281 1 0 +0.23379 0.0768889 0.102961 0.00529133 1 0 +0.311395 0.182793 0.00742186 0.00531421 1 0 +0.35 0.0342712 0.0193649 0.00502089 1 0 +0.163462 0.0941723 0.0980868 0.00582487 1 0 +0.220885 0.0883698 0.0979634 0.0050954 1 0 +0.381986 0.112109 0.0779516 0.00518927 1 0 +0.349757 0.149435 0.160687 0.00492043 1 0 +0.163168 0.149353 0.150924 0.00505876 1 0 +0.320919 0.180746 0.109715 0.00575719 1 0 +0.335675 0.0176508 0.0384298 0.00556491 1 0 +0.126986 0.115883 0.105086 0.00569101 1 0 +0.325076 0.0168704 0.0376704 0.0050906 1 0 +0.145427 0.117636 0.136501 0.00537628 1 0 +0.236591 0.177699 0.00704534 0.00517186 1 0 +0.149068 0.155496 0.116311 0.00586574 1 0 +0.155506 0.124715 0.148408 0.00498151 1 0 +0.170478 0.112538 0.118343 0.00557105 1 0 +0.25196 0.095997 0.0590623 0.00538771 1 0 +0.363179 0.151149 0.00658791 0.00524601 1 0 +0.333096 0.138546 0.101435 0.0054084 1 0 +0.0678159 0.156327 0.170413 0.0051171 1 0 +0.110907 0.0718823 0.0908004 0.00528436 1 0 +0.0145692 0.194365 0.0779644 0.0050922 1 0 +0.0956187 0.0132816 0.129183 0.00509384 1 0 +0.165112 0.161259 0.132262 0.00607402 1 0 +0.209558 0.0908923 0.0945273 0.00494699 1 0 +0.251909 0.00908388 0.014914 0.00533323 1 0 +0.261593 0.118391 0.0209312 0.00511847 1 0 +0.196188 0.0813525 0.0631632 0.00502461 1 0 +0.0258493 0.18743 0.124911 0.00498865 1 0 +0.360149 0.042735 0.161188 0.00548699 1 0 +0.35 0.0403613 0.161944 0.004963 1 0 +0.309527 0.124847 0.154487 0.00528182 1 0 +0.244683 0.101301 0.0655127 0.0055659 1 0 +0.325279 0.155186 0.066466 0.00559949 1 0 +0.226617 0.195266 0.00806071 0.00512528 1 0 +0.169953 0.0999186 0.108535 0.00504286 1 0 +0.137916 0.186472 0.184189 0.0064584 1 0 +0.0972162 0.134765 0.110854 0.00509749 1 0 +0.303273 0.0299333 0.0454584 0.00580123 1 0 +0.279745 0.0864832 0.0184272 0.0049462 1 0 +0.116074 0.0774425 0.154193 0.00638064 1 0 +0.248656 0.176256 0.0414543 0.00524495 1 0 +0.11719 0.0834206 0.0961585 0.00528837 1 0 +0.229539 0.118874 0.0684492 0.00511033 1 0 +0.173123 0.195374 0.111901 0.00501602 1 0 +0.136327 0.0396209 0.195201 0.0051349 1 0 +0.158862 0.147049 0.127001 0.00625819 1 0 +0.0991766 0.0235319 0.0445431 0.00538577 1 0 +0.201657 0.0487937 0.17149 0.00500199 1 0 +0.312662 0.0232805 0.0848822 0.00508772 1 0 +0.35945 0.135313 0.00927028 0.00523795 1 0 +0.104058 0.068495 0.17199 0.00518088 1 0 +0.037409 0.146655 0.174523 0.00493557 1 0 +0.148805 0.153965 0.160534 0.0051623 1 0 +0.328463 0.160841 0.0579076 0.00514102 1 0 +0.0221549 0.157353 0.194761 0.00500206 1 0 +0.322146 0.13593 0.192839 0.00542503 1 0 +0.286297 0.149768 0.00908993 0.00610423 1 0 +0.280655 0.166453 0.133761 0.00601319 1 0 +0.169994 0.185952 0.11743 0.00584323 1 0 +0.132045 0.045301 0.172359 0.00530653 1 0 +0.0777551 0.161616 0.131273 0.00552788 1 0 +0.199873 0.172401 0.0460262 0.00510947 1 0 +0.272171 0.0594096 0.160745 0.00532387 1 0 +0.165046 0.00600323 0.109875 0.00521884 1 0 +0.142337 0.0812874 0.0878795 0.00498215 1 0 +0.0924792 0.0732765 0.150215 0.00557322 1 0 +0.056255 0.16237 0.117474 0.00507203 1 0 +0.175249 0.16002 0.136546 0.00500027 1 0 +0.155973 0.175395 0.149447 0.00493138 1 0 +0.118544 0.152403 0.165247 0.00546414 1 0 +0.343404 0.159514 0.0899321 0.00495426 1 0 +0.128004 0.141325 0.154959 0.0049926 1 0 +0.244713 0.0307325 0.155689 0.00508441 1 0 +0.181902 0.141143 0.112709 0.00522801 1 0 +0.307729 0.138997 0.0192935 0.00507574 1 0 +0.331633 0.0900834 0.00664554 0.00528612 1 0 +0.216766 0.0824641 0.108869 0.00568365 1 0 +0.211694 0.10536 0.101931 0.00519168 1 0 +0.179299 0.0286834 0.154585 0.00503082 1 0 +0.00631072 0.147677 0.0345265 0.00543485 1 0 +0.332261 0.0910282 0.0655754 0.00591895 1 0 +0.326055 0.0639492 0.104676 0.00532498 1 0 +0.104297 0.0712327 0.152123 0.0049905 1 0 +0.337664 0.118813 0.146655 0.00500696 1 0 +0.16796 0.0880324 0.0899783 0.00520396 1 0 +0.151126 0.144095 0.117993 0.0051249 1 0 +0.167151 0.122918 0.127015 0.00578551 1 0 +0.347149 0.181876 0.140827 0.00657185 1 0 +0.353949 0.191197 0.140731 0.00496706 1 0 +0.28435 0.189917 0.0435792 0.00586862 1 0 +0.222213 0.0143369 0.0721368 0.00557794 1 0 +0.279042 0.0945755 0.11326 0.00519755 1 0 +0.210267 0.0545971 0.188648 0.00515023 1 0 +0.317678 0.147377 0.193662 0.00621996 1 0 +0.250707 0.128303 0.0628843 0.00550307 1 0 +0.0200183 0.12112 0.083305 0.00501581 1 0 +0.177239 0.118432 0.146594 0.00520612 1 0 +0.111327 0.0824235 0.166339 0.00591941 1 0 +0.155479 0.146328 0.186009 0.0050508 1 0 +0.0919961 0.140076 0.142581 0.00563671 1 0 +0.269316 0.144037 0.131719 0.00560771 1 0 +0.150699 0.139069 0.133101 0.00536768 1 0 +0.209042 0.108432 0.0794174 0.00496219 1 0 +0.216699 0.112429 0.0861932 0.00492981 1 0 +0.101038 0.133943 0.0973033 0.00644403 1 0 +0.0966487 0.120678 0.107036 0.00523101 1 0 +0.202327 0.02737 0.0603728 0.0049831 1 0 +0.193253 0.0784818 0.0730075 0.00564155 1 0 +0.0868005 0.12796 0.110006 0.00531148 1 0 +0.238097 0.139762 0.0654122 0.00531521 1 0 +0.154478 0.00735788 0.109484 0.00544259 1 0 +0.103283 0.128144 0.0876139 0.0050692 1 0 +0.270558 0.16535 0.0986312 0.00505513 1 0 +0.157723 0.105315 0.0744188 0.00528203 1 0 +0.169762 0.151644 0.135452 0.00507249 1 0 +0.125053 0.149402 0.11914 0.00521138 1 0 +0.268898 0.165729 0.134488 0.00578782 1 0 +0.170716 0.13527 0.138964 0.00498681 1 0 +0.171308 0.127188 0.14667 0.00536928 1 0 +0.277086 0.157709 0.00506657 0.00534523 1 0 +0.1712 0.00837622 0.119438 0.00530001 1 0 +0.355425 0.144238 0.00571681 0.00517774 1 0 +0.166652 0.083414 0.0995339 0.00524142 1 0 +0.119505 0.139675 0.114664 0.00506236 1 0 +0.204039 0.110165 0.106515 0.00494264 1 0 +0.39225 0.188542 0.150983 0.00565893 1 0 +0.148649 0.136782 0.143078 0.00506248 1 0 +0.22953 0.112953 0.0768692 0.0051831 1 0 +0.0694713 0.0871968 0.0941546 0.00546271 1 0 +0.259241 0.149048 0.128677 0.00604828 1 0 +0.170321 0.17059 0.134922 0.00493746 1 0 +0.275538 0.146728 0.00487594 0.00536114 1 0 +0.169881 0.149538 0.125133 0.00519197 1 0 +0.159116 0.151902 0.139595 0.00532538 1 0 +0.165307 0.125014 0.137586 0.00514797 1 0 +0.187238 0.105113 0.140191 0.00492454 1 0 +0.0980079 0.195089 0.151294 0.00527918 1 0 +0.0896188 0.149924 0.139441 0.00497002 1 0 +0.109522 0.139505 0.105479 0.0049669 1 0 +0.168901 0.107365 0.101898 0.00498716 1 0 +0.0467424 0.143688 0.176425 0.00504098 1 0 +0.258472 0.137915 0.130327 0.00523309 1 0 +0.264116 0.173093 0.0996929 0.00507272 1 0 +0.175687 0.0787602 0.0994242 0.00492242 1 0 +0.190441 0.0686624 0.0757399 0.00493151 1 0 diff --git a/src/Tools/padder/resources/padderexe/med2/concrete.med b/src/Tools/padder/resources/padderexe/med2/concrete.med new file mode 100644 index 000000000..3b39b27a3 Binary files /dev/null and b/src/Tools/padder/resources/padderexe/med2/concrete.med differ diff --git a/src/Tools/padder/resources/padderexe/med2/data.txt b/src/Tools/padder/resources/padderexe/med2/data.txt new file mode 100644 index 000000000..f7a6b44c2 --- /dev/null +++ b/src/Tools/padder/resources/padderexe/med2/data.txt @@ -0,0 +1,5 @@ +concrete.med concrete +nbSteelFiles 2 +ferrtran.med ferrtran +ferraill.med ferraill +output.med diff --git a/src/Tools/padder/resources/padderexe/med2/ferraill.med b/src/Tools/padder/resources/padderexe/med2/ferraill.med new file mode 100644 index 000000000..79cda889c Binary files /dev/null and b/src/Tools/padder/resources/padderexe/med2/ferraill.med differ diff --git a/src/Tools/padder/resources/padderexe/med2/ferrtran.med b/src/Tools/padder/resources/padderexe/med2/ferrtran.med new file mode 100644 index 000000000..0a8667061 Binary files /dev/null and b/src/Tools/padder/resources/padderexe/med2/ferrtran.med differ diff --git a/src/Tools/padder/resources/padderexe/med2/padder.exe b/src/Tools/padder/resources/padderexe/med2/padder.exe new file mode 100755 index 000000000..8591550ed Binary files /dev/null and b/src/Tools/padder/resources/padderexe/med2/padder.exe differ diff --git a/src/Tools/padder/resources/padderexe/med3/concrete.med b/src/Tools/padder/resources/padderexe/med3/concrete.med new file mode 100644 index 000000000..3b39b27a3 Binary files /dev/null and b/src/Tools/padder/resources/padderexe/med3/concrete.med differ diff --git a/src/Tools/padder/resources/padderexe/med3/data.txt b/src/Tools/padder/resources/padderexe/med3/data.txt new file mode 100644 index 000000000..04cabc7e5 --- /dev/null +++ b/src/Tools/padder/resources/padderexe/med3/data.txt @@ -0,0 +1,4 @@ +concrete.med concrete +nbSteelbarMesh= 1 +ferraill.med ferraill +FinalEDMesh.med diff --git a/src/Tools/padder/resources/padderexe/med3/ferraill.med b/src/Tools/padder/resources/padderexe/med3/ferraill.med new file mode 100644 index 000000000..79cda889c Binary files /dev/null and b/src/Tools/padder/resources/padderexe/med3/ferraill.med differ diff --git a/src/Tools/padder/resources/padderexe/med3/padder.exe b/src/Tools/padder/resources/padderexe/med3/padder.exe new file mode 100755 index 000000000..3eca741f1 Binary files /dev/null and b/src/Tools/padder/resources/padderexe/med3/padder.exe differ diff --git a/src/Tools/padder/resources/padderexe/padder.sh b/src/Tools/padder/resources/padderexe/padder.sh new file mode 100755 index 000000000..dae9ea4d7 --- /dev/null +++ b/src/Tools/padder/resources/padderexe/padder.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# This script emulates the launcher script that will be generated by +# the padder SALOME component and give as the "job file" to the SALOME +# launcher to execute the padder job. +# The script is supposed to be executed where the data are located. + +here=$(dirname $0) + +# >>> This part should be written by the component +binpath=$here/padder.exe +envpath=$here/envPadder.sh +# <<< + +. $envpath +$binpath $here/data.txt diff --git a/src/Tools/padder/resources/padderexe/particules.png b/src/Tools/padder/resources/padderexe/particules.png new file mode 100644 index 000000000..a1b97eca4 Binary files /dev/null and b/src/Tools/padder/resources/padderexe/particules.png differ diff --git a/src/Tools/padder/spadderpy/Makefile.am b/src/Tools/padder/spadderpy/Makefile.am new file mode 100644 index 000000000..68ec6d8e0 --- /dev/null +++ b/src/Tools/padder/spadderpy/Makefile.am @@ -0,0 +1,17 @@ +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +SUBDIRS = + +if SMESH_ENABLE_GUI +SUBDIRS += gui plugin +endif + +DIST_SUBDIRS = gui plugin + +spadderpydir=$(smeshpypkgdir)/spadder +spadderpy_PYTHON = \ + __init__.py \ + configreader.py + +salomeplugins_DATA = \ + padder.cfg diff --git a/src/Tools/padder/spadderpy/__init__.py b/src/Tools/padder/spadderpy/__init__.py new file mode 100644 index 000000000..a134daf95 --- /dev/null +++ b/src/Tools/padder/spadderpy/__init__.py @@ -0,0 +1,93 @@ +# Copyright (C) 2011 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# Author(s): Guillaume Boulant (23/03/2011) +# + +# TODO: put all this stuff in the unitests package + +import os +def getRootDir(): + ''' + This returns the root directory where the module SPADDER is + installed. All test files are looked up from this location. + ''' + return os.environ['SMESH_ROOT_DIR'] + +def getTestDataDir(): + ''' + This function gives the absolute path to the directory containing + the data files for test (realistic med files). + ''' + datadir=os.path.join(getRootDir(),"share/salome/resources/smesh/padderexe") + return datadir + +import MESHJOB # to get the enum constant values +from MESHJOB import MeshJobParameter, MeshJobParameterList + +DEFAULT_CONCRETE_FILENAME=os.path.join(getTestDataDir(),'concrete.med') +DEFAULT_STEELBAR_LISTFILENAME=[ + os.path.join(getTestDataDir(),'ferraill.med') + ] + +def getMeshJobParameterList(concrete_filename=DEFAULT_CONCRETE_FILENAME, + steelbar_listfilename=DEFAULT_STEELBAR_LISTFILENAME): + ''' + This helper function creates a complete set of parameters (a + MeshJobParameterList) for a simple test case, i.e. a case with a + concrete filename and a single steelbar filename. + ''' + # Note that a CORBA sequence (MeshJobParameterList) is mapped on a + # simple list in python + meshJobParameterList = [] + # We can add some parameters + param = MeshJobParameter( + file_name = concrete_filename, + file_type = MESHJOB.MED_CONCRETE, + group_name = "concrete") + meshJobParameterList.append(param) + + for steelbar_filename in steelbar_listfilename: + param = MeshJobParameter( + file_name = steelbar_filename, + file_type = MESHJOB.MED_STEELBAR, + group_name = "steelbar") + meshJobParameterList.append(param) + + return meshJobParameterList + + +def getSpadderCatalogFilename(): + filename=os.path.join(getRootDir(),"share/salome/resources/smesh/SPADDERCatalog.xml") + return filename + +def loadSpadderCatalog(): + import salome + salome.salome_init() + obj = salome.naming_service.Resolve('Kernel/ModulCatalog') + import SALOME_ModuleCatalog + catalog = obj._narrow(SALOME_ModuleCatalog.ModuleCatalog) + if not catalog: + raise RuntimeError, "Can't accesss module catalog" + + filename = getSpadderCatalogFilename() + catalog.ImportXmlCatalogFile(filename) + + from salome.kernel import services + print "The list of SALOME components is now:" + print services.getComponentList() diff --git a/src/Tools/padder/spadderpy/configreader.py b/src/Tools/padder/spadderpy/configreader.py new file mode 100644 index 000000000..9fc13cd92 --- /dev/null +++ b/src/Tools/padder/spadderpy/configreader.py @@ -0,0 +1,132 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# Author(s): Guillaume Boulant (23/03/2011) +# + +import sys, os +import ConfigParser +from MESHJOB import ConfigParameter +from salome.kernel.uiexception import AdminException, UiException + +from salome_pluginsmanager import PLUGIN_PATH_PATTERN +CONFIG_RELPATH = os.path.join(PLUGIN_PATH_PATTERN,'smesh') +CONFIG_FILENAME = "padder.cfg" +TYPE_LOCAL = 'local' +TYPE_REMOTE = 'remote' +TYPES=[TYPE_LOCAL, TYPE_REMOTE] + +class ConfigReader: + def __init__(self): + # The first step is to look for the config file. This file + # is supposed to be located in the same directory than the + # padder plugin. Then, we have to scan the directories + # specified in the SALOME plugins path. + self.__configFilename = None + try: + smeshpath=os.environ["SMESH_ROOT_DIR"] + except KeyError, ex: + raise AdminException("You should define the variable SALOME_PLUGINS_PATH") + + pluginspath = os.path.join(smeshpath,CONFIG_RELPATH) + filename = os.path.join(pluginspath,CONFIG_FILENAME) + if os.path.exists(filename): + self.__configFilename = filename + else: + msg = "The configuration file %s can't be found in the SMESH plugins path %s" + raise AdminException(msg%(CONFIG_FILENAME,pluginspath)) + + print "The configuration file is : %s"%self.__configFilename + self.__configparser = ConfigParser.RawConfigParser() + try: + self.__configparser.read(self.__configFilename) + except ConfigParser.ParsingError, ex: + raise AdminException(ex.message) + + def getLocalConfig(self): + return self.__getConfig(TYPE_LOCAL) + + def getRemoteConfig(self): + return self.__getConfig(TYPE_REMOTE) + + def getDefaultConfig(self): + defaultType = self.__getDefaultType() + return self.__getConfig(defaultType) + + def __getConfig(self, type=TYPE_LOCAL): + configName = self.__configparser.get('resources', type) + resname = self.__configparser.get(configName, 'resname') + binpath = self.__configparser.get(configName, 'binpath') + envpath = self.__configparser.get(configName, 'envpath') + config = ConfigParameter(resname, binpath, envpath) + config.resname = resname + return config + + def __getDefaultType(self): + '''This returns the default type read in the config file ([resources], default)''' + defaultType = self.__configparser.get('preferences', 'defaultres') + if defaultType not in TYPES: + return TYPE_LOCAL + return defaultType + +# +# ========================================================================= +# Test runner +# ========================================================================= +# +def TEST_getDefaultConfig(): + try: + configReader = ConfigReader() + defaultConfig = configReader.getDefaultConfig() + print defaultConfig.resname + print defaultConfig.binpath + print defaultConfig.envpath + except Exception, ex: + sys.stderr.write('ERROR: %s\n' % str(ex)) + return False + + return True + +def TEST_getDefaultConfig_withError(): + global CONFIG_FILENAME + CONFIG_FILENAME = "toto.cfg" + try: + configReader = ConfigReader() + defaultConfig = configReader.getDefaultConfig() + except UiException, err: + print 'ERROR: %s' % str(err) + return True + + return False + + +from salome.kernel import unittester +moduleName = "configreader" + +def testsuite(): + unittester.run(moduleName, "TEST_getDefaultConfig") + unittester.run(moduleName, "TEST_getDefaultConfig_withError") + +if __name__ == "__main__": + import os, sys + pluginspath=os.environ["SALOME_PLUGINS_PATH"] + for path in pluginspath.split(":"): + sys.path.insert(0,path) + + testsuite() diff --git a/src/Tools/padder/spadderpy/gui/Makefile.am b/src/Tools/padder/spadderpy/gui/Makefile.am new file mode 100644 index 000000000..441333e84 --- /dev/null +++ b/src/Tools/padder/spadderpy/gui/Makefile.am @@ -0,0 +1,41 @@ +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +# +# Files that compose the spadder graphical interface used by the +# plugin. They are installed in the spadder python package, under the +# sub-package plugins. +# +spadderpydir=$(smeshpypkgdir)/spadder/gui +dist_spadderpy_PYTHON = \ + __init__.py \ + plugindialog.py \ + inputdialog.py \ + inputdata.py + +PYUIC_FILES = \ + plugindialog_ui.py \ + inputframe_ui.py + +nodist_spadderpy_PYTHON = $(PYUIC_FILES) +CLEANFILES = $(PYUIC_FILES) + +dist_spadderpy_DATA= \ + parameters.png \ + input.png \ + select.png \ + compute.png \ + refresh.png \ + publish.png \ + clear.png \ + addinput.png \ + deleteinput.png \ + concrete.png \ + steelbar.png + +%_ui.py:%.ui + $(PYUIC) -x $< -o $@ + +%_rc.py:%.qrc + $(PYRCC) $< -o $@ + +EXTRA_DIST += $(PYUIC_FILES:%_ui.py=%.ui) diff --git a/src/Tools/padder/spadderpy/gui/__init__.py b/src/Tools/padder/spadderpy/gui/__init__.py new file mode 100644 index 000000000..e50952620 --- /dev/null +++ b/src/Tools/padder/spadderpy/gui/__init__.py @@ -0,0 +1,20 @@ +# Copyright (C) 2011 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# Author(s): Guillaume Boulant (23/03/2011) +# diff --git a/src/Tools/padder/spadderpy/gui/addinput.png b/src/Tools/padder/spadderpy/gui/addinput.png new file mode 100644 index 000000000..408b6b49e Binary files /dev/null and b/src/Tools/padder/spadderpy/gui/addinput.png differ diff --git a/src/Tools/padder/spadderpy/gui/clear.png b/src/Tools/padder/spadderpy/gui/clear.png new file mode 100644 index 000000000..642001bdc Binary files /dev/null and b/src/Tools/padder/spadderpy/gui/clear.png differ diff --git a/src/Tools/padder/spadderpy/gui/compute.png b/src/Tools/padder/spadderpy/gui/compute.png new file mode 100644 index 000000000..37c77a5df Binary files /dev/null and b/src/Tools/padder/spadderpy/gui/compute.png differ diff --git a/src/Tools/padder/spadderpy/gui/concrete.png b/src/Tools/padder/spadderpy/gui/concrete.png new file mode 100644 index 000000000..33af04609 Binary files /dev/null and b/src/Tools/padder/spadderpy/gui/concrete.png differ diff --git a/src/Tools/padder/spadderpy/gui/deleteinput.png b/src/Tools/padder/spadderpy/gui/deleteinput.png new file mode 100644 index 000000000..86c3e36f9 Binary files /dev/null and b/src/Tools/padder/spadderpy/gui/deleteinput.png differ diff --git a/src/Tools/padder/spadderpy/gui/input.png b/src/Tools/padder/spadderpy/gui/input.png new file mode 100644 index 000000000..a8a67db7b Binary files /dev/null and b/src/Tools/padder/spadderpy/gui/input.png differ diff --git a/src/Tools/padder/spadderpy/gui/inputdata.py b/src/Tools/padder/spadderpy/gui/inputdata.py new file mode 100644 index 000000000..ab2f933e1 --- /dev/null +++ b/src/Tools/padder/spadderpy/gui/inputdata.py @@ -0,0 +1,79 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# -* Makefile *- +# +# Author : Guillaume Boulant (EDF) +# + +from salome.kernel.enumerate import Enumerate +from salome.kernel.datamodeler import DataModeler, TypeString, TypeInteger + +# __MEM__: Note that this module does not depend on the SPADDER +# component on purpose (we could have use a derived structure of +# SPADDER_ORB.MeshJobParameter). This choice is made to ease the test +# and development of the gui part of the plugin. If this data +# structure becomes too important, we could make another arrangement +# and use directly a SPADDER_ORB.MeshJobParameter. + +class InputData(DataModeler): + MESHTYPES=Enumerate([ + 'CONCRETE', + 'STEELBAR' + ]) + + def __init__(self): + DataModeler.__init__(self) + self.addAttribute( + name = "meshObject", + void = True + ) + self.addAttribute( + name = "meshName", + type = TypeString, + range = None + ) + self.addAttribute( + name = "meshType", + type = TypeInteger, + range = self.MESHTYPES.listvalues() + ) + self.addAttribute( + name = "groupName", + type = TypeString, + range = None + ) + +# +# ============================================================================== +# Basic use cases and unit tests +# ============================================================================== +# +def TEST_getName(): + testdata = InputData() + testdata.meshName = "myMesh" + testdata.meshObject = None + testdata.meshType = InputData.MESHTYPES.CONCRETE + if testdata.meshName != "myMesh" : + return False + return True + +if __name__ == "__main__": + from salome.kernel.unittester import run + run("inputdata","TEST_getName") diff --git a/src/Tools/padder/spadderpy/gui/inputdialog.py b/src/Tools/padder/spadderpy/gui/inputdialog.py new file mode 100644 index 000000000..51659f5c8 --- /dev/null +++ b/src/Tools/padder/spadderpy/gui/inputdialog.py @@ -0,0 +1,378 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# -* Makefile *- +# +# Author : Guillaume Boulant (EDF) +# + +import os + +import salome +from salome.kernel import studyedit +from salome.gui.genericdialog import GenericDialog +from salome.gui import helper as guihelper +from salome.smesh.smeshstudytools import SMeshStudyTools + +from omniORB import CORBA + +from PyQt4.QtCore import QObject, SIGNAL, SLOT +from PyQt4.QtGui import QIcon, QStandardItemModel, QStandardItem, QMessageBox + +from inputframe_ui import Ui_InputFrame +from inputdata import InputData + +DEBUG_MODE=True +GROUPNAME_MAXLENGTH=8 + +class InputDialog(GenericDialog): + + TBL_HEADER_LABEL=["Input Mesh", "Output group name"] + + def __init__(self, parent=None, name="InputDialog", modal=0): + """ + This initializes a dialog windows to define the input data of + the plugin function. The input data consist in a list of + meshes characterizes each by a name, a pointer to the smesh + servant object, a type and a group name (see data model in the + inputdata.py). + """ + GenericDialog.__init__(self, parent, name, modal) + # Set up the user interface from Designer. + self.__ui = Ui_InputFrame() + # BE CAREFULL HERE, the ui form is NOT drawn in the global + # dialog (already containing some generic widgets) but in the + # center panel created in the GenericDialog as a void + # container for the form. The InputFrame form is supposed + # here to create only the widgets to be placed in the center + # panel. Then, the setupUi function of this form draws itself + # in the specified panel, i.e. the panel returned by + # self.getPanel(). + self.__ui.setupUi(self.getPanel()) + + self.setWindowTitle("Specification of input files") + + # The icon are supposed to be located in the plugin folder, + # i.e. in the same folder than this python module file + iconfolder=os.path.dirname(os.path.abspath(__file__)) + icon = QIcon() + icon.addFile(os.path.join(iconfolder,"select.png")) + self.__ui.btnSmeshObject.setIcon(icon) + icon = QIcon() + icon.addFile(os.path.join(iconfolder,"addinput.png")) + self.__ui.btnAddInput.setIcon(icon) + icon = QIcon() + icon.addFile(os.path.join(iconfolder,"deleteinput.png")) + self.__ui.btnDeleteInput.setIcon(icon) + + # We specify here the items in the combo box (even if already + # defined in the designer) so that we can be sure of the item + # indexation. + self.MESHTYPE_ICONS = {} + meshTypeIndex = InputData.MESHTYPES.CONCRETE + self.__ui.cmbMeshType.setItemText(meshTypeIndex, "Béton") + icon = QIcon() + icon.addFile(os.path.join(iconfolder,"concrete.png")) + self.__ui.cmbMeshType.setItemIcon(meshTypeIndex, icon) + self.MESHTYPE_ICONS[meshTypeIndex] = icon + + meshTypeIndex = InputData.MESHTYPES.STEELBAR + self.__ui.cmbMeshType.setItemText(meshTypeIndex, "Acier") + icon = QIcon() + icon.addFile(os.path.join(iconfolder,"steelbar.png")) + self.__ui.cmbMeshType.setItemIcon(meshTypeIndex, icon) + self.MESHTYPE_ICONS[meshTypeIndex] = icon + + # The click on btnSmeshObject (signal clicked() emitted by the + # button btnSmeshObject) is connected to the slot + # onSelectSmeshObject, etc ... + self.connect(self.__ui.btnSmeshObject, SIGNAL('clicked()'), self.onSelectSmeshObject ) + self.connect(self.__ui.btnAddInput, SIGNAL('clicked()'), self.onAddInput ) + self.connect(self.__ui.btnDeleteInput, SIGNAL('clicked()'), self.onDeleteInput ) + + # Set up the model of the Qt table list + self.__inputModel = QStandardItemModel(0,2) + self.__inputModel.setHorizontalHeaderLabels(InputDialog.TBL_HEADER_LABEL) + self.__ui.tblListInput.setModel(self.__inputModel) + self.__ui.tblListInput.verticalHeader().hide() + self.__ui.tblListInput.horizontalHeader().setStretchLastSection(True) + # Note that the type is not display explicitly in the Qt table + # because it is specified using an icon on the text of the + # name item. + + # Note that PADDER does not support group name longer than 8 + # characters. We apply then this limit in the gui field. + self.__ui.txtGroupName.setMaxLength(GROUPNAME_MAXLENGTH) + + self.clear() + + self.smeshStudyTool = SMeshStudyTools() + + def clear(self): + """ + This function clears the data gui area and associated values. + """ + self.__ui.txtSmeshObject.setText("") + self.__ui.txtGroupName.setText("") + self.__inputModel.clear() + self.__inputModel.setHorizontalHeaderLabels(InputDialog.TBL_HEADER_LABEL) + if not DEBUG_MODE: + self.__ui.txtSmeshObject.setEnabled(False) + self.__ui.btnAddInput.setEnabled(False) + self.__selectedMesh = None + self.__dictInputData = {} + self.__nbConcreteMesh = 0 + self.__nbSteelbarMesh = 0 + + def accept(self): + """ + This function is the slot connected to the button OK + """ + # The dialog is raised in a non modal mode to get + # interactivity with the parents windows. Then we have to emit + # a signal to warn the parent observer that the dialog has + # been validated so that it can process the event + GenericDialog.accept(self) + if self.wasOk(): + self.emit(SIGNAL('inputValidated()')) + + def onSelectSmeshObject(self): + ''' + This function is the slot connected on the mesh selection + button. It memorizes the selected mesh and put its name in the + text field of the dialog box. + ''' + mySObject, myEntry = guihelper.getSObjectSelected() + if CORBA.is_nil(mySObject): + self.__ui.txtSmeshObject.setText("You must choose a mesh") + self.__ui.txtGroupName.setText("") + self.__ui.txtSmeshObject.setEnabled(False) + self.__ui.btnAddInput.setEnabled(False) + self.__selectedMesh = None + return + + self.smeshStudyTool.updateStudy(studyedit.getActiveStudyId()) + self.__selectedMesh = self.smeshStudyTool.getMeshObjectFromSObject(mySObject) + if CORBA.is_nil(self.__selectedMesh): + self.__ui.txtSmeshObject.setText("The selected object is not a mesh") + self.__ui.txtGroupName.setText("") + self.__ui.txtSmeshObject.setEnabled(False) + self.__ui.btnAddInput.setEnabled(False) + self.__selectedMesh = None + return + myName = mySObject.GetName() + self.__ui.txtSmeshObject.setText(myName) + self.__ui.txtSmeshObject.setEnabled(True) + self.__ui.btnAddInput.setEnabled(True) + + # We can suggest a default group name from the mesh name + self.__ui.txtGroupName.setText(myName) + + def onAddInput(self): + """ + This function is the slot connected to the Add button. It + creates a new entry in the list of input data, or updates this + entry if it already exists. + """ + meshName = str(self.__ui.txtSmeshObject.text().trimmed()) + meshObject = self.__selectedMesh + meshType = self.__ui.cmbMeshType.currentIndex() + groupName = str(self.__ui.txtGroupName.text().trimmed()) + + self.__addInputInGui(meshName, meshObject, meshType, groupName) + self.__addInputInMap(meshName, meshObject, meshType, groupName) + + def __addInputInGui(self, meshName, meshObject, meshType, groupName): + """ + This function adds an entry with the specified data int the + GUI table (for data visualization purpose). + """ + # The mesh name is used as the key index in the model. We have + # to check first if this item already exists in the list. + tblItems = self.__inputModel.findItems(meshName) + row = self.__inputModel.rowCount() + if not tblItems: + tblItems = [] + tblItems.append(QStandardItem()) # input mesh name + tblItems.append(QStandardItem()) # output group name + else: + row = tblItems[0].index().row() + tblItems.append(self.__inputModel.item(row,1)) + + tblItems[0].setText(meshName) + tblItems[0].setIcon(self.MESHTYPE_ICONS[meshType]) + tblItems[1].setText(groupName) + self.__inputModel.setItem(row,0,tblItems[0]) + self.__inputModel.setItem(row,1,tblItems[1]) + self.__ui.tblListInput.setCurrentIndex(tblItems[0].index()) + + def __addInputInMap(self, meshName, meshObject, meshType, groupName): + """ + This function adds an entry with the specified data in the + internal map (for data management purpose). + """ + # if the entry already exists, we remove it to replace by a + # new one + if self.__dictInputData.has_key(meshName): + self.__delInputFromMap(meshName) + + inputData = InputData() + inputData.meshName = meshName + inputData.meshObject = meshObject + inputData.meshType = meshType + inputData.groupName = groupName + # The key of the map is the mesh name + self.__dictInputData[meshName] = inputData + if inputData.meshType == InputData.MESHTYPES.CONCRETE: + self.__nbConcreteMesh += 1 + else: + self.__nbSteelbarMesh += 1 + + print inputData + print "meshType = ",inputData.meshType + print "nb concrete mesh ",self.__nbConcreteMesh + print "nb steelbar mesh ",self.__nbSteelbarMesh + + + def onDeleteInput(self): + """ + This function is the slot connected to the Delete button. It + remove from the data list the entry selected in the Qt table. + """ + selectedIdx = self.__ui.tblListInput.selectedIndexes() + if selectedIdx: + row = selectedIdx[0].row() + tblItem = self.__inputModel.item(row,0) + meshName = str(tblItem.text()) + self.__inputModel.takeRow(row) + # Don't forget to remove this entry from the mesh object + # internal dictionnary + self.__delInputFromMap(meshName) + + def __delInputFromMap(self, meshName): + """ + This function removes the specified entry from the internal + map (for data management purpose) + """ + inputData = self.__dictInputData.pop(meshName) + if inputData.meshType == InputData.MESHTYPES.CONCRETE: + self.__nbConcreteMesh -= 1 + else: + self.__nbSteelbarMesh -= 1 + + print inputData + print "nb concrete mesh ",self.__nbConcreteMesh + print "nb steelbar mesh ",self.__nbSteelbarMesh + + + def setData(self, listInputData=[]): + """ + This function fills the dialog widgets with values provided by + the specified data list. + """ + self.clear() + for inputData in listInputData: + + meshName = inputData.meshName + meshObject = inputData.meshObject + meshType = inputData.meshType + groupName = inputData.groupName + + self.__addInputInGui(meshName, meshObject, meshType, groupName) + self.__addInputInMap(meshName, meshObject, meshType, groupName) + + if not DEBUG_MODE: + self.onSelectSmeshObject() + + def getData(self): + """ + This function returns a list of InputData that corresponds to + the data in the dialog widgets of the current dialog. + """ + # Note that the values() function returns a copy of the list + # of values. + return self.__dictInputData.values() + + def checkData(self): + """ + This function checks if the data are valid, from the dialog + window point of view. + """ + if self.__nbConcreteMesh < 1: + self.checkDataMessage = "You must define at least one CONCRETE mesh" + return False + if self.__nbConcreteMesh > 1: + self.checkDataMessage = "You define multiple CONCRETE meshes." + self.checkDataMessage += "You should verify first that your version of PADDER support this configuration." + # just warn the user, but don't block + QMessageBox.information(self, "Info", self.checkDataMessage) + return True + if self.__nbSteelbarMesh < 1: + self.checkDataMessage = "You must define at least one STEELBAR mesh" + return False + return True + + +# ============================================================================== +# Basic use case +# ============================================================================== +# +def TEST_InputDialog(): + import sys + from PyQt4.QtCore import QObject, SIGNAL, SLOT + from PyQt4.QtGui import QApplication + app = QApplication(sys.argv) + QObject.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + + dlg=InputDialog() + dlg.displayAndWait() + if dlg.wasOk(): + print "OK has been pressed" + +def TEST_InputDialog_setData(): + import sys + from PyQt4.QtCore import QObject, SIGNAL, SLOT + from PyQt4.QtGui import QApplication + app = QApplication(sys.argv) + QObject.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + + dlg=InputDialog() + + from inputdata import InputData + inputData = InputData() + inputData.meshName = "myMesh" + inputData.meshObject = None + inputData.meshType = InputData.MESHTYPES.CONCRETE + inputData.groupName = "myGroup" + listInputData = [] + listInputData.append(inputData) + + dlg.setData2(listInputData) + + dlg.displayAndWait() + if dlg.wasOk(): + print "OK has been pressed" + outputListInputData = dlg.getData2() + print outputListInputData + + +if __name__ == "__main__": + #TEST_InputDialog() + TEST_InputDialog_setData() + diff --git a/src/Tools/padder/spadderpy/gui/inputframe.ui b/src/Tools/padder/spadderpy/gui/inputframe.ui new file mode 100644 index 000000000..9f98eb991 --- /dev/null +++ b/src/Tools/padder/spadderpy/gui/inputframe.ui @@ -0,0 +1,204 @@ + + InputFrame + + + + 0 + 0 + 509 + 307 + + + + Input parameters + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + Input MESH / Output group name / Type : + + + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + + 0 + 0 + 0 + 0 + + + + + 31 + 16777215 + + + + + + + select.png + + + + + + + + + + + + + + + + Qt::Vertical + + + + + + + + + + + + + + Qt::Vertical + + + + + + + + + + + Béton + + + concrete.png + + + + + Acier + + + steelbar.png + + + + + + + + + + + + + + + 0 + + + 6 + + + + + + + + addinput.png + + + + + + + + + + deleteinput.png + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + diff --git a/src/Tools/padder/spadderpy/gui/parameters.png b/src/Tools/padder/spadderpy/gui/parameters.png new file mode 100644 index 000000000..a8a67db7b Binary files /dev/null and b/src/Tools/padder/spadderpy/gui/parameters.png differ diff --git a/src/Tools/padder/spadderpy/gui/plugindialog.py b/src/Tools/padder/spadderpy/gui/plugindialog.py new file mode 100644 index 000000000..26a2d7ca8 --- /dev/null +++ b/src/Tools/padder/spadderpy/gui/plugindialog.py @@ -0,0 +1,405 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# -* Makefile *- +# +# Author : Guillaume Boulant (EDF) +# + +from PyQt4.QtGui import QDialog, QIcon +from PyQt4.QtCore import QObject, SIGNAL, SLOT, Qt + +from plugindialog_ui import Ui_PluginDialog +from inputdialog import InputDialog +from inputdata import InputData +# __GBO__: uncomment this line and comment the previous one to use the +# demo input dialog instead of the real one. +#from demoinputdialog import InputDialog + +import os +import salome +from salome.kernel import studyedit +from salome.kernel.uiexception import AdminException + +from omniORB import CORBA +import SMESH +import smesh +import MESHJOB + +gui_states = ["CAN_SELECT", "CAN_COMPUTE", "CAN_REFRESH", "CAN_PUBLISH"] + +run_states = ["CREATED", "IN_PROCESS", "QUEUED", "RUNNING", "PAUSED"]; +end_states = ["FINISHED", "ERROR"] +all_states = run_states+end_states; + +# The SALOME launcher resource is specified by its name as defined in +# the file CatalogResources.xml (see root directory of the +# application). We could have a check box in the dialog to specify +# wether we want a local execution or a remote one. +resource_name = "localhost" +from salome.smesh.spadder.configreader import ConfigReader + + +class PluginDialog(QDialog): + + def __init__(self,parent = None,name = None,modal = 0,fl = 0): + QDialog.__init__(self,parent) + # Set up the user interface from Designer. + self.__ui = Ui_PluginDialog() + self.__ui.setupUi(self) + + # The default display strategy is to use a separate dialog box + # to select the input data. + self.viewInputFrame(False) + + # The icon are supposed to be located in the plugin folder, + # i.e. in the same folder than this python module file + iconfolder=os.path.dirname(os.path.abspath(__file__)) + icon = QIcon() + icon.addFile(os.path.join(iconfolder,"input.png")) + self.__ui.btnInput.setIcon(icon) + icon = QIcon() + icon.addFile(os.path.join(iconfolder,"compute.png")) + self.__ui.btnCompute.setIcon(icon) + icon = QIcon() + icon.addFile(os.path.join(iconfolder,"refresh.png")) + self.__ui.btnRefresh.setIcon(icon) + icon = QIcon() + icon.addFile(os.path.join(iconfolder,"publish.png")) + self.__ui.btnPublish.setIcon(icon) + icon = QIcon() + icon.addFile(os.path.join(iconfolder,"clear.png")) + self.__ui.btnClear.setIcon(icon) + + # Then, we can connect the slot to there associated button event + self.connect(self.__ui.btnInput, SIGNAL('clicked()'), self.onInput ) + self.connect(self.__ui.btnCompute, SIGNAL('clicked()'), self.onCompute ) + self.connect(self.__ui.btnRefresh, SIGNAL('clicked()'), self.onRefresh ) + self.connect(self.__ui.btnPublish, SIGNAL('clicked()'), self.onPublish ) + self.connect(self.__ui.btnClear, SIGNAL('clicked()'), self.onClear ) + + self.clear() + + self.setupJobManager() + + + def setupJobManager(self): + ''' + This function configures the jobmanager by transmiting the + parameters required for a local execution and a remote + execution. The choice between "local" and "remote" is done at + the initialize step, by specifing the name of the resource to + be used. + ''' + # We first + + configReader = ConfigReader() + config = configReader.getLocalConfig() + configId = config.resname + self.__getJobManager().configure(configId, config) + # Note that the resname parameter is used as the key identifier of + # the configuration in the job manager. As is, there can be then + # only one configuration for each machine defined in the resources + # catalog (no need to have further, I thing) + config = configReader.getRemoteConfig() + configId = config.resname + self.__getJobManager().configure(configId, config) + + # We specify the default configuration identifier as the + # resource name of the default configuration + self.__configId = configReader.getDefaultConfig().resname + + + def viewInputFrame(self, view=True): + # By default, the top input frame is visible and the input + # button is not visible. + if view is False: + self.__ui.frameInput.setVisible(False) + self.__ui.btnInput.setVisible(True) + # We create the input dialog that will be displayed when + # button input is pressed: + self.__inputDialog = InputDialog(self) + # The window is kept on the top to ease the selection of + # items in the object browser: + self.__inputDialog.setWindowFlags( + self.__inputDialog.windowFlags() | Qt.WindowStaysOnTopHint) + # The signal inputValidated emited from inputDialog is + # connected to the slot function onProcessInput: + self.connect(self.__inputDialog, SIGNAL('inputValidated()'), self.onProcessInput) + + else: + self.__ui.frameInput.setVisible(True) + self.__ui.btnInput.setVisible(False) + # This case is NOT IMPLEMENTED YET (not really). It could + # be used to draw the input frame directly in the frame + # frameInput of this dialog box. + + def getInputFrame(self): + return self.__ui.frameInput + + def __setGuiState(self,states=["CAN_SELECT"]): + if "CAN_SELECT" in states: + self.__ui.btnInput.setEnabled(True) + else: + self.__ui.btnInput.setEnabled(False) + + if "CAN_COMPUTE" in states: + self.__ui.btnCompute.setEnabled(True) + else: + self.__ui.btnCompute.setEnabled(False) + + if "CAN_REFRESH" in states: + self.__ui.btnRefresh.setEnabled(True) + else: + self.__ui.btnRefresh.setEnabled(False) + + if "CAN_PUBLISH" in states: + self.__ui.btnPublish.setEnabled(True) + else: + self.__ui.btnPublish.setEnabled(False) + + def __getJobManager(self): + """ + This function requests a pointer to the MeshJobManager + servant. Note that the component is loaded on first demand, + and then the reference is recycled. + """ + if self.__dict__.has_key("__jobManager") and self.__jobManager is not None: + return self.__jobManager + + # WARN: we first have to update the SALOME components catalog + # with the SPADDER components (because they are not defined in + # the SMESH catalog, and then they are not in the default + # catalog) + from salome.smesh import spadder + spadder.loadSpadderCatalog() + # Then we can load the MeshJobManager component + component=salome.lcc.FindOrLoadComponent("FactoryServer","MeshJobManager") + if component is None: + msg="ERR: the SALOME component MeshJobManager can't be reached" + self.__log(msg) + raise AdminException(msg) + + self.__jobManager = component + return self.__jobManager + + def __log(self, message): + """ + This function prints the specified message in the log area + """ + self.__ui.txtLog.append(message) + + def __exportMesh(self, meshName, meshObject): + ''' + This function exports the specified mesh object to a med + file whose name (basepath) is built from the specified mesh + name. This returns the filename. + ''' + filename=str("/tmp/padder_inputfile_"+meshName+".med") + meshObject.ExportToMEDX( filename, 0, SMESH.MED_V2_2, 1 ) + return filename + + def clear(self): + """ + This function clears the log area and the states of the buttons + """ + self.__listInputData = [] + self.__ui.txtLog.clear() + self.__setGuiState(["CAN_SELECT"]) + self.__isRunning = False + self.__ui.lblStatusBar.setText("Ready") + + def update(self): + ''' + This function can be used to programmatically force the + refresh of the dialog box, the job state in particular. + ''' + if self.__isRunning: + self.onRefresh() + + def onInput(self): + ''' + This function is the slot connected to the Input button + (signal clicked()). It opens the dialog window to input + data. The dialog is opened in a window modal mode so that the + SALOME study objects can be selected. In conterpart, this + class must listen to signals emitted by the child dialog + windows to process the validation event (see the slot + onProcessInput which is connected to this event). + ''' + self.__inputDialog.setData(self.__listInputData) + self.__inputDialog.open() + + def onProcessInput(self): + """ + This function is the slot connected to the signal + inputValidated(), emit by the input dialog window when it's + validated, i.e. OK is pressed and data are valid. + """ + # The processing simply consists in requesting the input data + # from the dialog window. + self.__listInputData = self.__inputDialog.getData() + self.__ui.lblStatusBar.setText("Input data OK") + self.__log("INF: Press \"Compute\" to start the job") + self.__setGuiState(["CAN_SELECT", "CAN_COMPUTE"]) + + def onCompute(self): + ''' + This function is the slot connected to the Compute button. It + initializes a mesh computation job and start it using the + SALOME launcher. + ''' + # We first have to create the list of parameters for the + # initialize function. For that, we have to create the files + # from the mesh objects: + meshJobParameterList=[] + concreteIndex=0 + for inputData in self.__listInputData: + # For each input data, we have to create a + # MeshJobParameter and add it to the list. + filename = self.__exportMesh(inputData.meshName, inputData.meshObject) + if inputData.meshType == InputData.MESHTYPES.CONCRETE: + filetype = MESHJOB.MED_CONCRETE + else: + filetype = MESHJOB.MED_STEELBAR + + parameter = MESHJOB.MeshJobParameter( + file_name = filename, + file_type = filetype, + group_name = inputData.groupName) + meshJobParameterList.append(parameter) + + jobManager = self.__getJobManager() + self.__jobid = jobManager.initialize(meshJobParameterList, self.__configId) + if self.__jobid < 0: + self.__log("ERR: the job can't be initialized") + return + self.__log("INF: the job has been initialized with jobid = "+str(self.__jobid)) + + startOk = jobManager.start(self.__jobid) + if not startOk: + self.__log("ERR: the job with jobid = "+str(self.__jobid)+" can't be started") + return + self.__log("INF: the job "+str(self.__jobid)+" has been started") + self.__ui.lblStatusBar.setText("Submission OK") + self.__setGuiState(["CAN_REFRESH"]) + self.__isRunning = True + + def onRefresh(self): + """ + This function is the slot connected on the Refresh button. It + requests the mesh job manager to get the state of the job and + display it in the log area. + """ + jobManager = self.__getJobManager() + state = jobManager.getState(self.__jobid) + self.__log("INF: job state = "+str(state)) + self.__ui.lblStatusBar.setText("") + if state in run_states: + return + + self.__isRunning = False + if state == "FINISHED": + self.__setGuiState(["CAN_PUBLISH"]) + else: + self.__setGuiState(["CAN_SELECT"]) + + + def onPublish(self): + """ + This function is the slot connected on the Publish button. It + requests the mesh job manager to download the results data + from the computation resource host and load the med file in + the SALOME study. + """ + jobManager = self.__getJobManager() + state = jobManager.getState(self.__jobid) + if state in run_states: + self.__log("WRN: jobid = "+str(self.__jobid)+" is not finished (state="+str(state)+")") + return + + if state not in end_states: + self.__log("ERR: jobid = "+str(self.__jobid)+" ended abnormally with state="+str(state)) + return + + meshJobResults = jobManager.finalize(self.__jobid) + if state == "ERROR": + self.__log("ERR: jobid = "+str(self.__jobid)+" ended with error: "+meshJobResults.status) + return + + logsdirname = os.path.join(meshJobResults.results_dirname, "logs") + self.__log("INF: jobid="+str(self.__jobid)+" ended normally : "+meshJobResults.status) + self.__log("INF: jobid="+str(self.__jobid)+" see log files in : "+logsdirname) + + medfilename = os.path.join(meshJobResults.results_dirname, + meshJobResults.outputmesh_filename) + + smesh.SetCurrentStudy(studyedit.getActiveStudy()) + ([outputMesh], status) = smesh.CreateMeshesFromMED(medfilename) + + # By convention, the name of the output mesh in the study is + # build from a constant string 'padder' and the session jobid + meshname = 'padder_'+str(self.__jobid) + smesh.SetName(outputMesh.GetMesh(), meshname) + if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(0) + + self.__ui.lblStatusBar.setText("Publication OK") + self.__setGuiState(["CAN_SELECT"]) + + def onClear(self): + """ + This function is the slot connected on the Clear button. It + erases data in the dialog box and cancel the current job if + one is running. + """ + self.clear() + + + +__dialog=None +def getDialog(): + """ + This function returns a singleton instance of the plugin dialog. + """ + global __dialog + if __dialog is None: + __dialog = PluginDialog() + return __dialog + +# +# ============================================================================== +# Basic use cases and unit test functions +# ============================================================================== +# +def TEST_PluginDialog(): + import sys + from PyQt4.QtGui import QApplication + from PyQt4.QtCore import QObject, SIGNAL, SLOT + app = QApplication(sys.argv) + QObject.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + + dlg=PluginDialog() + dlg.exec_() + +if __name__ == "__main__": + TEST_PluginDialog() + + + diff --git a/src/Tools/padder/spadderpy/gui/plugindialog.ui b/src/Tools/padder/spadderpy/gui/plugindialog.ui new file mode 100644 index 000000000..c6af08f68 --- /dev/null +++ b/src/Tools/padder/spadderpy/gui/plugindialog.ui @@ -0,0 +1,168 @@ + + + PluginDialog + + + true + + + + 0 + 0 + 649 + 367 + + + + Create a mesh with PADDER + + + + 6 + + + 9 + + + + + 6 + + + 0 + + + + + QFrame::Raised + + + 1 + + + 0 + + + + 6 + + + 9 + + + + + + + + 6 + + + 0 + + + + + + + + 6 + + + 0 + + + + + Input + + + + parameters.pngparameters.png + + + + + + + Compute + + + + compute.pngcompute.png + + + + + + + Refresh + + + + refresh.pngrefresh.png + + + + + + + Publish + + + + publish.pngpublish.png + + + + + + + Qt::Vertical + + + + 75 + 101 + + + + + + + + Clear + + + + clear.pngclear.png + + + + + + + + + + + true + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + + + + + + + + + diff --git a/src/Tools/padder/spadderpy/gui/publish.png b/src/Tools/padder/spadderpy/gui/publish.png new file mode 100644 index 000000000..bfe8802a2 Binary files /dev/null and b/src/Tools/padder/spadderpy/gui/publish.png differ diff --git a/src/Tools/padder/spadderpy/gui/refresh.png b/src/Tools/padder/spadderpy/gui/refresh.png new file mode 100644 index 000000000..2683e9814 Binary files /dev/null and b/src/Tools/padder/spadderpy/gui/refresh.png differ diff --git a/src/Tools/padder/spadderpy/gui/select.png b/src/Tools/padder/spadderpy/gui/select.png new file mode 100644 index 000000000..8eea6a94d Binary files /dev/null and b/src/Tools/padder/spadderpy/gui/select.png differ diff --git a/src/Tools/padder/spadderpy/gui/steelbar.png b/src/Tools/padder/spadderpy/gui/steelbar.png new file mode 100644 index 000000000..ce27fe3a0 Binary files /dev/null and b/src/Tools/padder/spadderpy/gui/steelbar.png differ diff --git a/src/Tools/padder/spadderpy/padder.cfg.in b/src/Tools/padder/spadderpy/padder.cfg.in new file mode 100644 index 000000000..9a8f5e1dd --- /dev/null +++ b/src/Tools/padder/spadderpy/padder.cfg.in @@ -0,0 +1,35 @@ +# This section specify the configurations to be used respectively for +# the local execution and the remote execution. The value for 'local' +# and 'remote' keys must be the name of a configuration section in +# this file. The default key must specify a value between "local" or +# "remote" to indicate the user preference. +[resources] +local = localhost +remote = nepal + +[preferences] +defaultres = local + +# The following sections defines the available configurations. +# The name of the section can be choosen arbitrary. But the value of +# the resname key MUST be the name of a SALOME resource defined in the +# catalog of resources (CatalogResources.xml). + +# For each section: +# - resname : the name of the SALOME resource to be used in this configuration +# - binpath : the path to the padder executable program on this resource +# - envpath : the path to the environment file on this resource +[localhost] +resname = localhost +binpath = @prefix@/share/salome/resources/smesh/padderexe/padder.exe +envpath = @prefix@/share/salome/resources/smesh/padderexe/envPadder.sh + +[venus] +resname = gboulant@venus +binpath = /usr/local/bin/padder.exe +envpath = /usr/local/share/envPadder.sh + +[nepal] +resname = nepal@nepal +binpath = /usr/local/bin/padder.exe +envpath = /usr/local/share/envPadder.sh diff --git a/src/Tools/padder/spadderpy/plugin/Makefile.am b/src/Tools/padder/spadderpy/plugin/Makefile.am new file mode 100644 index 000000000..543204a0f --- /dev/null +++ b/src/Tools/padder/spadderpy/plugin/Makefile.am @@ -0,0 +1,14 @@ +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +# +# Files that strictly concern the SALOME plugins registration and +# configuration. They are installed in a dedicated folder named +# plugins and created in the root installation directory. +# +salomeplugins_PYTHON = \ + smesh_plugins.py + +#salomeplugins_DATA = \ +# envPlugins.sh + + diff --git a/src/Tools/padder/spadderpy/plugin/envPlugins.sh.in b/src/Tools/padder/spadderpy/plugin/envPlugins.sh.in new file mode 100644 index 000000000..a90477d81 --- /dev/null +++ b/src/Tools/padder/spadderpy/plugin/envPlugins.sh.in @@ -0,0 +1,3 @@ +SPADDER_PLUGINS_PATH=@prefix@/plugins +export SALOME_PLUGINS_PATH=$SALOME_PLUGINS_PATH:$SPADDER_PLUGINS_PATH + diff --git a/src/Tools/padder/spadderpy/plugin/smesh_plugins.py b/src/Tools/padder/spadderpy/plugin/smesh_plugins.py new file mode 100755 index 000000000..9f79eaba8 --- /dev/null +++ b/src/Tools/padder/spadderpy/plugin/smesh_plugins.py @@ -0,0 +1,44 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# -* Makefile *- +# +# Author : Guillaume Boulant (EDF) +# +import salome_pluginsmanager + + +def runSpadderPlugin(context): + from salome.smesh.spadder.gui import plugindialog + from salome.kernel.uiexception import UiException + try: + dialog=plugindialog.getDialog() + except UiException, err: + from PyQt4.QtGui import QMessageBox + QMessageBox.critical(None,"An error occurs during PADDER configuration", + err.getUIMessage()) + return + + dialog.update() + dialog.show() + +salome_pluginsmanager.AddFunction('PADDER mesher', + 'Create a mesh with PADDER', + runSpadderPlugin) + diff --git a/src/Tools/padder/unittests/Makefile.am b/src/Tools/padder/unittests/Makefile.am new file mode 100644 index 000000000..af904826d --- /dev/null +++ b/src/Tools/padder/unittests/Makefile.am @@ -0,0 +1,12 @@ +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +spadderpydir=$(smeshpypkgdir)/spadder/unittests + +spadderpy_PYTHON = \ + __init__.py \ + usecase_meshJobManager.py \ + usecase_spadderPluginTester.py + +spadderbindir=$(bindir)/spadder +spadderbin_SCRIPTS = \ + autotest.sh diff --git a/src/Tools/padder/unittests/__init__.py b/src/Tools/padder/unittests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/Tools/padder/unittests/autotest.sh.in b/src/Tools/padder/unittests/autotest.sh.in new file mode 100644 index 000000000..c5a9cf759 --- /dev/null +++ b/src/Tools/padder/unittests/autotest.sh.in @@ -0,0 +1,63 @@ +#!/bin/bash +# Copyright (C) 2010 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# -* Makefile *- +# +# Author : Guillaume Boulant (EDF) +# + + +# This script should be executed in a SALOME shell session, +# for example the shell obtained from the command runSession +# provided by the SALOME application. + +# This list contains the filenames where test suites are to be +# executed. The path are defined relative to the PYTHON installation +# directory of the SALOME module. +listfiles="\ + configreader.py \ + unittests/test_meshJobManager.py \ + gui/inputdata.py" + +INSTALL_DIR=@prefix@ +PYTHON_DIR=$INSTALL_DIR/lib/python@PYTHON_VERSION@/site-packages/salome +PYTHONPATH=$PYTHON_DIR:$PYTHONPATH +export PYTHONPATH + +stderr=2 +while getopts 'ql' OPTION +do + case $OPTION in + q) stderr=1 ;; + l) for f in $listfiles; do echo $f; done; exit 0;; + ?) printf "Usage: %s: [-q] [-l]\n" $(basename $0) >&2; exit 2;; + esac +done +shift $(($OPTIND - 1)) + +here=$(pwd) +package_path="salome/smesh/spadder" +cd $PYTHON_DIR +for file in $listfiles; do + # Uncomment this line (and comment the next one) to display + # the start line of a test and not only the result: + python $package_path/$file 2>&$stderr | grep '^\[TEST' + #python $package_path/$file $filter | grep '^\[TEST' | grep -v 'test in progress' +done +cd $here diff --git a/src/Tools/padder/unittests/usecase_meshJobManager.py b/src/Tools/padder/unittests/usecase_meshJobManager.py new file mode 100644 index 000000000..9b6011bab --- /dev/null +++ b/src/Tools/padder/unittests/usecase_meshJobManager.py @@ -0,0 +1,100 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# Author(s): Guillaume Boulant (23/03/2011) +# + +# This script illustrates the standard use case of the component +# MeshJobManager from within a SALOME script. + + +# +# Preparing the configuration parameters +# +import os +from salome.smesh import spadder +pathpadderexe=os.path.join(spadder.getTestDataDir(),"padder.exe") +pathpadderenv=os.path.join(spadder.getTestDataDir(),"envPadder.sh") +file_concrete=os.path.join(spadder.getTestDataDir(),"concrete.med") +file_steelbar=os.path.join(spadder.getTestDataDir(),"ferraill.med") + +import salome +import MESHJOB + +# +# Setup the configuration in the component. When first have to load +# the catalog of SPADDER components, then load the component +# MeshJobManager, and finally configure this component. +# +from salome.smesh import spadder +spadder.loadSpadderCatalog() + +salome.salome_init() +component = salome.lcc.FindOrLoadComponent("FactoryServer","MeshJobManager") +config = MESHJOB.ConfigParameter(resname="localhost", + binpath=pathpadderexe, + envpath=pathpadderenv) +component.configure("localhost",config) + +# +# Prepare the job parameters and initialize the job +# +meshJobParameterList = [] +param = MESHJOB.MeshJobParameter(file_name=file_concrete, + file_type=MESHJOB.MED_CONCRETE, + group_name="concrete") +meshJobParameterList.append(param) + +param = MESHJOB.MeshJobParameter(file_name=file_steelbar, + file_type=MESHJOB.MED_STEELBAR, + group_name="steelbar") +meshJobParameterList.append(param) +jobid = component.initialize(meshJobParameterList, "localhost") + +# +# Start the execution of the job identified by its job id. +# +component.start(jobid) + + +# +# This part illustrates how you can follow the execution of the job. +# +run_states = ["CREATED", "IN_PROCESS", "QUEUED", "RUNNING", "PAUSED"]; +end_states = ["FINISHED", "ERROR"] +all_states = run_states+end_states; + +ended = False +nbiter = 0 +import time +while not ended: + state = component.getState(jobid) + print "MeshJobManager ["+str(nbiter)+"] : state = "+str(state) + if state not in run_states: + ended=True + time.sleep(0.5) + nbiter+=1 + +if state not in end_states: + print "ERR: jobid = "+str(jobid)+" ended abnormally with state="+str(state) +else: + print "OK: jobid = "+str(jobid)+" ended with state="+str(state) + meshJobResults = component.finalize(jobid) + print meshJobResults + print "You will find the results files in the directory:\n%s"%meshJobResults.results_dirname diff --git a/src/Tools/padder/unittests/usecase_spadderPluginTester.py b/src/Tools/padder/unittests/usecase_spadderPluginTester.py new file mode 100644 index 000000000..f21348d9e --- /dev/null +++ b/src/Tools/padder/unittests/usecase_spadderPluginTester.py @@ -0,0 +1,51 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# Author(s): Guillaume Boulant (23/03/2011) +# + +# This script illustrates the standard use case of the component +# SPADDERPluginTester from within a SALOME script. This component is +# dedicated to test purpose only + +import salome +import SPADDERPluginTest + +# We first have to update the SALOME components list by loading the +# SPADDER catalog (load on demand only) +from salome.smesh import spadder +spadder.loadSpadderCatalog() + +# Basic test +print "Basic tests" +c=salome.lcc.FindOrLoadComponent("FactoryServer","SPADDERPluginTester") +z=c.demo(2.,3.) + +# Test of usage of KERNEL services from the test component +print "Test of usage of KERNEL services from the test component" +c.testkernel() + +# Test of usage of SMESH engine from the test component +# WARN: the SMESH engine must be loaded first +print "Test of usage of SMESH engine from the test component" +import SMESH +salome.lcc.FindOrLoadComponent("FactoryServer","SMESH") +c.testsmesh(salome.myStudyId) + +print "Test completed : OK"