// Split MWCellArray into two MWCellArrays
  private MWCellArray vect_FaultsSplit(MWCellArray vect_Faults, int index) {
    //        vect_Faults
    try {
      int[] cellsSizeArray = {1};
      MWCellArray vect_Faults1 = new MWCellArray(cellsSizeArray);
      double[] vectorArray = ((double[][]) ((Object[]) vect_Faults.toArray()[0])[0])[0];
      int arraySize = vectorArray.length / 2;
      double[] vectorArrayNew = new double[arraySize];

      switch (index) {
        case 0:
          for (int i = 0; i < arraySize; i++) {
            vectorArrayNew[i] = vectorArray[i];
          }
          break;
        case 1:
          int arrayIndex = 0;
          for (int i = arraySize; i < vectorArray.length; i++) {
            vectorArrayNew[arrayIndex] = vectorArray[i];
            arrayIndex++;
          }
          break;
      }
      vect_Faults1.set(1, vectorArrayNew);
      return vect_Faults1;
    } catch (Exception e) {
      // LOG.error(e.getMessage());
      System.out.println(e.getMessage());
      return null;
    }
  }
  @Override
  public boolean accept(MREJPEQSpatialDataType spatialTypeTuple) {
    try {

      switch (spatialTypeTuple.getMatlabType()) {
        case 1:
          // zone
          addZone(spatialTypeTuple.getByteArray());
          break;
        case 2:
          // fault
          addFault(spatialTypeTuple.getByteArray());
          break;
        case 3:
          // damages
          addDamages(spatialTypeTuple.getByteArray());
          break;
        case 4:
          // gmapparams
          addGmapparameters(spatialTypeTuple.getByteArray());
          break;
        case 5:
          // spectral
          addSpectral(spatialTypeTuple.getByteArray());
          break;
        case 6:
          // secperil
          addSecPeril(spatialTypeTuple.getByteArray());
          break;
        case 7:
          // portfolio
          addPortfolio(spatialTypeTuple.getByteArray());
          break;
        case 8:
          // soil
          addSoil(spatialTypeTuple.getByteArray());
          break;
        case 9:
          // controlparams
          addControlParam(spatialTypeTuple.getByteArray());
          break;
        case 10:
          // riskitemids
          addRiskItemId(spatialTypeTuple.getByteArray());
          break;
      }
      return false;

    } catch (Exception e) {
      e.printStackTrace();
    }

    return false;
  }
  // This function processes distribution setup wrapper matlab function
  public void getMatlabData(MWStructArray zones, MWStructArray faults) {
    try {

      LOG.error("Processing Distribution_Setup");

      Distribution_SetupWrapper distributionsetup = new Distribution_SetupWrapper();
      Object[] distributionsetupobj = null;
      distributionsetupobj = distributionsetup.Distribution_Setup(7, zones, faults);

      MWCellArray vect_gridPoints = null;
      MWCellArray maxNumOfEventPerPartition = null;
      MWNumericArray numlabs_gridPoints = null;
      MWNumericArray labindex_gridPoints = null;
      MWCellArray vect_Faults = null;
      MWNumericArray numlabs_Faults = null;
      MWNumericArray labindex_Faults = null;

      vect_gridPoints = (MWCellArray) distributionsetupobj[0]; // Vector Grid points
      maxNumOfEventPerPartition = (MWCellArray) distributionsetupobj[1]; //
      numlabs_gridPoints = (MWNumericArray) distributionsetupobj[2]; //
      labindex_gridPoints = (MWNumericArray) distributionsetupobj[3]; //
      vect_Faults = (MWCellArray) distributionsetupobj[4]; //
      numlabs_Faults = (MWNumericArray) distributionsetupobj[5]; //
      labindex_Faults = (MWNumericArray) distributionsetupobj[6]; //

      // Serialize all matlab object
      maxNumOfEventList = getByteArraylist(maxNumOfEventPerPartition.serialize());
      vect_gridPointsList1 = getByteArraylist(vect_gridPointsSplit(vect_gridPoints, 0).serialize());
      vect_FaultsList1 = getByteArraylist(vect_FaultsSplit(vect_Faults, 0).serialize());
      vect_gridPointsList2 = getByteArraylist(vect_gridPointsSplit(vect_gridPoints, 1).serialize());
      vect_FaultsList2 = getByteArraylist(vect_FaultsSplit(vect_Faults, 1).serialize());

      // For testing only
      vect_gridPointsListAll = getByteArraylist(vect_gridPoints.serialize());
      vect_FaultsListAll = getByteArraylist(vect_Faults.serialize());

    } catch (Exception e) {
      LOG.error(e.getMessage());
      System.out.println(e.getMessage());
    }
  }