private double calcLegScore(double departureTime, double arrivalTime, Leg leg) {

    double tmpScore = 0.0D;
    double travelTime = arrivalTime - departureTime;

    double dist = 0.0D;

    if (leg.getMode().equals("freefloating")) {

      Stats s = new Stats();
      s.startTime = departureTime;
      s.endTime = arrivalTime;
      s.distance = leg.getRoute().getDistance();
      freefloatingRentals.add(s);

    } else if (leg.getMode().equals("onewaycarsharing")) {
      Stats s = new Stats();
      s.startTime = departureTime;
      s.endTime = arrivalTime;
      s.distance = leg.getRoute().getDistance();
      owcsRentals.add(s);

    } else if (leg.getMode().equals("twowaycarsharing")) {

      distancetw += leg.getRoute().getDistance();

    } else if (leg.getMode().equals("walk_rb")) {

      Id<Link> startLinkId = leg.getRoute().getStartLinkId();
      Id<Link> endLinkId = leg.getRoute().getEndLinkId();
      if (twMap.containsKey(endLinkId)) {

        twMap.get(endLinkId).endTime = departureTime;
        twcsRentals.add(twMap.remove(endLinkId));
      } else {

        Stats s = new Stats();
        s.startTime = arrivalTime;
        s.endTime = arrivalTime;

        twMap.put(startLinkId, s);
      }
    }

    if (("onewaycarsharing").equals(leg.getMode())) {

      travelTime = arrivalTime - departureTime;
      tmpScore +=
          Double.parseDouble(
              this.config
                  .getModule("OneWayCarsharing")
                  .getParams()
                  .get("constantOneWayCarsharing"));
      tmpScore +=
          travelTime
              * Double.parseDouble(
                  this.config
                      .getModule("OneWayCarsharing")
                      .getParams()
                      .get("travelingOneWayCarsharing"))
              / 3600.0;
    } else if (("freefloating").equals(leg.getMode())) {

      travelTime = arrivalTime - departureTime;
      tmpScore +=
          Double.parseDouble(
              this.config.getModule("FreeFloating").getParams().get("constantFreeFloating"));
      tmpScore +=
          travelTime
              * Double.parseDouble(
                  this.config.getModule("FreeFloating").getParams().get("travelingFreeFloating"))
              / 3600.0;
    } else if (leg.getMode().equals("walk_ff")) {

      tmpScore += getWalkScore(dist, travelTime);
    } else if (leg.getMode().equals("walk_ow_sb")) {

      tmpScore += getWalkScore(dist, travelTime);

    } else if (("twowaycarsharing").equals(leg.getMode())) {

      travelTime = arrivalTime - departureTime;
      tmpScore +=
          Double.parseDouble(
              this.config
                  .getModule("TwoWayCarsharing")
                  .getParams()
                  .get("constantTwoWayCarsharing"));
      tmpScore +=
          travelTime
              * Double.parseDouble(
                  this.config
                      .getModule("TwoWayCarsharing")
                      .getParams()
                      .get("travelingTwoWayCarsharing"))
              / 3600.0;
    } else if (leg.getMode().equals("walk_rb")) {

      tmpScore += getWalkScore(dist, travelTime);
    }

    return tmpScore;
  }