/**
  * Get rupture probability within a region. It first checks whether the end points are within
  * region. If yes, then rupture is considered within the region Else It finds the fraction of
  * rupture FAULT TRACE (not the surface) points within the region and then adjusts the probability
  * accordingly.
  *
  * @param tempRup
  * @param region
  * @return
  */
 private double getApproxRupProbWithinRegion(ProbEqkRupture tempRup, Region region) {
   int numLocsInside = 0;
   int totPoints = 0;
   if (region != null) {
     // get num surface points inside region
     EvenlyGriddedSurfaceAPI rupSurface = tempRup.getRuptureSurface();
     Location loc1 = rupSurface.getLocation(0, 0);
     Location loc2 = rupSurface.getLocation(0, rupSurface.getNumCols() - 1);
     // if both surface points are within region, rupture is considered
     // within region
     if (region.contains(loc1) && region.contains(loc2)) {
       numLocsInside = 1;
       totPoints = numLocsInside;
     } else { // if both points are not within region, calculate rupProb
       Iterator locIt = rupSurface.getColumnIterator(0);
       while (locIt.hasNext()) {
         if (region.contains((Location) locIt.next())) ++numLocsInside;
         ++totPoints;
       }
     }
   } else {
     numLocsInside = 1;
     totPoints = numLocsInside;
   }
   if (isPoissonian)
     return Math.log(1 - tempRup.getProbability() * numLocsInside / (double) totPoints);
   else return tempRup.getProbability() * numLocsInside / (double) totPoints;
 }
 public EqkRuptureDataForNrml(EqkRupture rup) {
   averageRake = rup.getAveRake();
   if (rup.getTectRegType() != null) {
     tectonicRegion = rup.getTectRegType().toString();
   } else {
     tectonicRegion = unknownTectonicRegionType;
   }
   magRupture = rup.getMag();
   EvenlyGriddedSurfaceAPI grid = rup.getRuptureSurface();
   /*
    * the site data
    */
   numberOfColumns = grid.getNumCols();
   numberOfRows = grid.getNumRows();
   int countSites = numberOfColumns * numberOfRows;
   latGrid = new double[countSites];
   lonGrid = new double[countSites];
   depthGrid = new double[countSites];
   for (int row = 0; row < numberOfRows; row++) {
     for (int col = 0; col < numberOfColumns; col++) {
       Location l = grid.get(row, col);
       int index = (row) * numberOfColumns + (col);
       latGrid[index] = l.getLatitude();
       lonGrid[index] = l.getLongitude();
       depthGrid[index] = l.getDepth();
     } // for columns
   } // for rows
 } // constructor()