示例#1
0
    def write2db(self, db_conn, percentiles): #,scenario_id,target,social):
    #def __write2db(self,scenario_id,target,economic,physical,social):
        '''
        Writes the resulting losses to the risk schema
        Must be called AFTER calculate()
        '''

        fat_labels = self._fatalities_labels
        dist = self.__fat
        fatalities_prob_dist =[v for v in glb.discretepdf(dist, fat_labels)]
        
        exc ='INSERT INTO risk.social_conseq (session_id, scenario_id, geocell_id, target_id, fatalities_prob_dist) VALUES (%s, %s, %s, %s, %s)'
        values = (self.__session_id, self.__scenario_id, self.__geocell_id, self.__target_id, fatalities_prob_dist)
        db_conn.execute(exc, values)
示例#2
0
    def write2db(self, db_conn, percentiles):  #,scenario_id,target,social):
        #def __write2db(self,scenario_id,target,economic,physical,social):
        '''
        Writes the resulting losses to the risk schema
        Must be called AFTER calculate()
        '''

        fat_labels = self._fatalities_labels
        dist = self.__fat
        est_fat_perc = dist.percentile([0.05, 0.95])  #5th and 95th percentiles
        est_fat = [v for v in est_fat_perc]
        fatalities_prob_dist = [v for v in glb.discretepdf(dist, fat_labels)]
        fatalities_prob_dist.append(
            dist.percentile(0.5) if isinstance(dist, mcerp.UncertainFunction
                                               ) else dist)
        #fatalities_prob_dist.append(np.percentile(self.__fat._mcpts,0.5).astype(int))
        exc = 'INSERT INTO risk.social_conseq (session_id, scenario_id, geocell_id, target_id, est_fatalities, fatalities_prob_dist) VALUES (%s, %s, %s, %s, %s, %s)'
        values = (self.__session_id, self.__scenario_id, self.__geocell_id,
                  self.__target_id, est_fat, fatalities_prob_dist)
        db_conn.execute(exc, values)
示例#3
0
文件: core.py 项目: gempa/caravan
def geocell_run(intensity, lat_sta, lon_sta, percentiles, target_id, geocell_id, ground_motion_only, scenario_id, session_id, logdir = None ):
    """
        Performs a ground motion calculation given the above arguments. Writes to database the percentiles
    """
    
    def val(value):
        #value should be either a scalar number or a numpy.ndarray element. Check below is WEAK, because it checks only if 
        #len(value) can be called, but it avoids importing numpy etcetera
        return mcerp.UncertainFunction(value) if hasattr(value, '__len__') else float(value)
    
    try:
        
       
        #intensity = gmpe_func(val(M), val(lat_hyp), val(lon_hyp), val(depth_hyp), lat_sta, lon_sta)
        #intensity = gmpe_func(lat_sta, lon_sta)
        
        #INTENSITY IS EITHER A SCALAR OR A UNCERTAINFUNCTION.MCERP ARRAY (NUMPTY ARRAY)
        intensity = val(intensity)
        
#        _p = intensity.percentile(percentiles) if isinstance(intensity, mcerp.UncertainFunction) else len(percentiles)*[intensity]
        _dist = [v for v in globals.discretepdf(intensity,_intensity_labels)]
        _dist.append(intensity.percentile(0.5) if isinstance(intensity, mcerp.UncertainFunction) else intensity)
        #write to dbase
           
        
        arg1 =  """INSERT INTO processing.ground_motion (target_id, geocell_id, scenario_id, session_id, ground_motion) VALUES (%s, %s, %s, %s, %s);""" 
        arg2 = (target_id, geocell_id, scenario_id, session_id, _dist) 
        
#        arg1 =  """INSERT INTO processing.ground_motion (target_id, geocell_id, scenario_id, session_id, percentiles, ground_motion) VALUES (%s, %s, %s, %s, %s, %s);""" 
#        arg2 = (target_id, geocell_id, scenario_id, session_id, _p, _dist) 
        
        conn = globals.connection()
        conn.execute(arg1, arg2)
        conn.close()
        
        #do risk calculation (risk is Michael source, modified by me)
        if not ground_motion_only:
            risk_calc.calculaterisk(intensity, percentiles, session_id, scenario_id, target_id, geocell_id)

    except Exception as run_exc:
    
        if _DEBUG_:
            import traceback
            traceback.print_exc()
        
        #connect to the database and write the failed number:
        conn = globals.connection()
        conn.execute("UPDATE processing.sessions SET num_targets_failed = num_targets_failed + 1 where gid=%s",(session_id,))
        conn.close()
        
        #         log dir must be passed as argument problems when declaring global var (maybe multiprocess?)
        if _DEBUG_:
            if logdir is not None:
                try:
                    folder = logdir
                    if os.path.exists(folder):
                        name = ''.join(random.choice('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') for _ in range(10)) if geocell_id is None else str(geocell_id)
                        file = os.path.join(folder, name+".log")
                        output = open(file,'w')
                        traceback.print_exc(file=output)
                        output.close()
                except:
                    traceback.print_exc()
示例#4
0
def geocell_run(intensity,
                lat_sta,
                lon_sta,
                percentiles,
                target_id,
                geocell_id,
                ground_motion_only,
                scenario_id,
                session_id,
                logdir=None):
    """
        Performs a ground motion calculation given the above arguments. Writes to database the percentiles
    """
    def val(value):
        #value should be either a scalar number or a numpy.ndarray element. Check below is WEAK, because it checks only if
        #len(value) can be called, but it avoids importing numpy etcetera
        return mcerp.UncertainFunction(value) if hasattr(
            value, '__len__') else float(value)

    try:

        #intensity = gmpe_func(val(M), val(lat_hyp), val(lon_hyp), val(depth_hyp), lat_sta, lon_sta)
        #intensity = gmpe_func(lat_sta, lon_sta)

        #INTENSITY IS EITHER A SCALAR OR A UNCERTAINFUNCTION.MCERP ARRAY (NUMPTY ARRAY)
        intensity = val(intensity)

        #        _p = intensity.percentile(percentiles) if isinstance(intensity, mcerp.UncertainFunction) else len(percentiles)*[intensity]
        _dist = [v for v in globals.discretepdf(intensity, _intensity_labels)]
        _dist.append(
            intensity.percentile(0.5)
            if isinstance(intensity, mcerp.UncertainFunction) else intensity)
        #write to dbase

        arg1 = """INSERT INTO processing.ground_motion (target_id, geocell_id, scenario_id, session_id, ground_motion) VALUES (%s, %s, %s, %s, %s);"""
        arg2 = (target_id, geocell_id, scenario_id, session_id, _dist)

        #        arg1 =  """INSERT INTO processing.ground_motion (target_id, geocell_id, scenario_id, session_id, percentiles, ground_motion) VALUES (%s, %s, %s, %s, %s, %s);"""
        #        arg2 = (target_id, geocell_id, scenario_id, session_id, _p, _dist)

        conn = globals.connection()
        conn.execute(arg1, arg2)
        conn.close()

        #do risk calculation (risk is Michael source, modified by me)
        if not ground_motion_only:
            risk_calc.calculaterisk(intensity, percentiles, session_id,
                                    scenario_id, target_id, geocell_id)

    except Exception as run_exc:

        if _DEBUG_:
            import traceback
            traceback.print_exc()

        #connect to the database and write the failed number:
        conn = globals.connection()
        conn.execute(
            "UPDATE processing.sessions SET num_targets_failed = num_targets_failed + 1 where gid=%s",
            (session_id, ))
        conn.close()

        #         log dir must be passed as argument problems when declaring global var (maybe multiprocess?)
        if _DEBUG_:
            if logdir is not None:
                try:
                    folder = logdir
                    if os.path.exists(folder):
                        name = ''.join(
                            random.choice(
                                'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
                            for _ in range(10)) if geocell_id is None else str(
                                geocell_id)
                        file = os.path.join(folder, name + ".log")
                        output = open(file, 'w')
                        traceback.print_exc(file=output)
                        output.close()
                except:
                    traceback.print_exc()