def summarize(interface):
    
    vehicle = interface.configs.base
    
    results = interface.results
    mission_profile = results.missions.base
    
    
    # merge all segment conditions
    def stack_condition(a,b):
        if isinstance(a,np.ndarray):
            return np.vstack([a,b])
        else:
            return None
    
    conditions = None
    for segment in mission_profile.segments:
        if conditions is None:
            conditions = segment.conditions
            continue
        conditions = conditions.do_recursive(stack_condition,segment.conditions)
      
    # pack
    summary = SUAVE.Core.Results()
    
    summary.weight_empty = vehicle.mass_properties.operating_empty
    
    summary.fuel_burn = max(conditions.weights.total_mass[:,0]) - min(conditions.weights.total_mass[:,0])
    
    #results.output.max_usable_fuel = vehicle.mass_properties.max_usable_fuel
    
    summary.noise = results.noise    
    
    summary.mission_time_min = max(conditions.frames.inertial.time[:,0] / Units.min)
    summary.max_altitude_km = max(conditions.freestream.altitude[:,0] / Units.km)
    
    summary.range_nmi = mission_profile.segments[-1].conditions.frames.inertial.position_vector[-1,0] / Units.nmi
    
    summary.field_length = results.field_length
    
    summary.stability = Data()
    summary.stability.cm_alpha = max(conditions.stability.static.cm_alpha[:,0])
    summary.stability.cn_beta  = max(conditions.stability.static.cn_beta[:,0])
    
    #summary.conditions = conditions
    
    #TODO: revisit how this is calculated
    summary.second_segment_climb_rate = mission_profile.segments[1].climb_rate
    
    
    printme = Data()
    printme.fuel_burn = summary.fuel_burn
    printme.weight_empty = summary.weight_empty
    print "RESULTS"
    print printme
    
    return summary
def summarize(interface):
    
    # Unpack
    vehicle               = interface.configs.base    
    results               = interface.results
    mission_profile       = results.missions.base    
    short_field_results   = results.short_field
    takeoff_field_results = results.takeoff_field_length
    range_results         = results.max_range
    # Weights
    max_zero_fuel     = vehicle.mass_properties.max_zero_fuel
    operating_empty   = vehicle.mass_properties.operating_empty
    payload           = vehicle.mass_properties.payload    
          
    # pack
    summary = SUAVE.Core.Results()
    
    # TOFL for MTOW @ SL, ISA
    summary.takeoff_field_length  = float(takeoff_field_results.takeoff_field_length[-1]) 
    # Range from a short field
    summary.range_short_field_nmi = float(short_field_results.range / Units.nmi)
    # Maximum range
    summary.range_max_nmi         = float(range_results.range / Units.nmi)   
    # MZFW margin calculation
    summary.max_zero_fuel_margin  = max_zero_fuel - (operating_empty + payload)
    # fuel margin calculation
    from SUAVE.Methods.Geometry.Two_Dimensional.Planform import wing_fuel_volume
    wing_fuel_volume(vehicle.wings['main_wing'])
    fuel_density = vehicle.propulsors['turbo_fan'].combustor.fuel_data.density
    fuel_available = 0.97 * vehicle.wings['main_wing'].fuel_volume * fuel_density    
    summary.available_fuel_margin = fuel_available - range_results.fuel
    
    # Fuel burn
    summary.fuel_burn  = results.mission_fuel.fuel
##    if summary.fuel_burn < 0:  # work around for negative fuel results.
##        summary.fuel_burn = summary.fuel_burn ** 2.

    # Print outs   
    printme = Data()
    printme.fuel_burn    = summary.fuel_burn
    printme.weight_empty = operating_empty
    printme.tofl_MTOW    = summary.takeoff_field_length
    printme.SF_range     = summary.range_short_field_nmi
    printme.range_max    = summary.range_max_nmi    
    printme.max_zero_fuel_margin      = summary.max_zero_fuel_margin
    printme.available_fuel_margin     = summary.available_fuel_margin
    
    print "RESULTS"
    print printme  
    
    inputs = interface.inputs
    import datetime
    fid = open('Results.dat','a')

    fid.write('{:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ; {:18.10f} ;'.format( \
        inputs.aspect_ratio,inputs.reference_area,inputs.sweep,inputs.design_thrust,inputs.wing_thickness,inputs.MTOW,inputs.MZFW_ratio,
        summary.fuel_burn , operating_empty , summary.takeoff_field_length , summary.range_short_field_nmi , summary.range_max_nmi , summary.max_zero_fuel_margin , summary.available_fuel_margin
    ))
    fid.write(datetime.datetime.now().strftime("%I:%M:%S"))
    fid.write('\n')

##    print interface.configs.takeoff.maximum_lift_coefficient
    
    return summary