예제 #1
0
def load_sep_cycles(file_name, database_name, datatype):
    """Get data from a specified file, separates out data into
    cycles and saves those cycles as .xlsx files in specified
    filepath (must be an existing folder)"""
    #df_single = pd.read_excel(file_name,1)
    (cycle_ind_col, data_point_col, volt_col, curr_col, dis_cap_col,
     char_cap_col, charge_or_discharge) = col_variables(datatype)

    while '/' in file_name:
        file_name = file_name.split('/', maxsplit=1)[1]
    name = file_name.split('.')[0] + 'Raw'

    #name = file_name.split('.')[0] + 'Raw'
    df_single = dbfs.get_file_from_database(name, database_name)
    gb = df_single.groupby(by=[cycle_ind_col])
    cycle_dict = dict(iter(gb))
    battname = file_name.split('.')[0]
    for i in range(1, len(cycle_dict) + 1):
        cycle_dict[i]['Battery_Label'] = battname
    for i in range(1, len(cycle_dict) + 1):
        dbfs.update_database_newtable(cycle_dict[i],
                                      battname + '-' + 'Cycle' + str(i),
                                      database_name)
    print('All data separated into cycles and saved in database.')
    return cycle_dict
예제 #2
0
def process_data(file_name, database_name, path, datatype, username):
    # Takes raw file
    # sep_cycles
    # cleans cycles
    # gets descriptors - peak calcs
    # put back together - save
    thresh1 = '0.0'
    thresh2 = '0.0'
    if datatype == 'Arbin':
        datatype = 'CALCE'
    if not os.path.exists(database_name):
        print('That database does not exist-creating it now.')
        dbfs.init_master_table(database_name)

    con = sql.connect(database_name)
    c = con.cursor()
    names_list = []
    for row in c.execute(
            """SELECT name FROM sqlite_master WHERE type='table'"""):
        names_list.append(row[0])
    con.close()
    file_name3 = file_name
    while '/' in file_name3:
        file_name3 = file_name3.split('/', maxsplit=1)[1]
    name3 = file_name3.split('.')[0]
    if name3 + 'Raw' in names_list:
        print('That file name has already been uploaded into the database.')
    else:
        #datatype = input('What datatype do you have (either CALCE or MACCOR)')
        print('Processing that data')
        parse_update_master(file_name, database_name, datatype, path, username)
        # this takes the info from the filename and updates the master table in the database.
        # this also adds the raw data fram into the database
        cycle_dict = ccf.load_sep_cycles(file_name, database_name, datatype)
        clean_cycle_dict = ccf.get_clean_cycles(cycle_dict, file_name,
                                                database_name, datatype,
                                                thresh1, thresh2)
        clean_set_df = ccf.get_clean_sets(clean_cycle_dict, file_name,
                                          database_name)

        cleanset_name = name3 + 'CleanSet'
        df_clean = dbfs.get_file_from_database(cleanset_name, database_name)
        v_toappend_c = []
        v_toappend_d = []
        new_peak_thresh = 0.3
        # just as a starter value
        feedback = app.generate_model(v_toappend_c, v_toappend_d, df_clean,
                                      file_name, new_peak_thresh,
                                      database_name)

        # desc_df = descriptors.get_descriptors(clean_cycle_dict, datatype, windowlength = 3, polyorder = 1)
        # dbfs.update_database_newtable(desc_df, name3 + '-descriptors', database_name)
        print('Database updated with descriptors.')

    return
def param_dicts_to_df(mod_params_name, database):
    mod_params_df = dbfs.get_file_from_database(mod_params_name, database)
    #charge_df = mod_paramsgraphit[mod_paramsgraphit['C/D'] == 'discharge']
    #charge_df = charge_df.reset_index(drop = True)
    #charge_df = mod_params_df
    charge_descript = pd.DataFrame()
    discharge_descript = pd.DataFrame()
    for i in range(len(mod_params_df)):

        param_dict_charge = ast.literal_eval(
            mod_params_df.loc[i, ('Model_Parameters_charge')])
        param_dict_discharge = ast.literal_eval(
            mod_params_df.loc[i, ('Model_Parameters_discharge')])
        charge_peak_heights = ast.literal_eval(
            mod_params_df.loc[i, ('charge_peak_heights')])
        discharge_peak_heights = ast.literal_eval(
            mod_params_df.loc[i, ('discharge_peak_heights')])
        charge_keys = []
        new_dict_charge = {}
        if param_dict_charge is not None:
            for key, value in param_dict_charge.items():
                if '_amplitude' in key and not 'base_' in key:
                    #print(int(key.split('_')[0].split('a')[1]))
                    charge_keys.append(key.split('_')[0])
            #print(charge_keys)

            new_dict_charge.update({
                'c_gauss_sigma':
                param_dict_charge[
                    'base_sigma'],  # changed from c0- c4  to base_ .. 10-10-18
                'c_gauss_center':
                param_dict_charge['base_center'],
                'c_gauss_amplitude':
                param_dict_charge['base_amplitude'],
                'c_gauss_fwhm':
                param_dict_charge['base_fwhm'],
                'c_gauss_height':
                param_dict_charge['base_height'],
                #'c_poly_coef5': param_dict_charge['c4'],
            })
            new_dict_charge.update(
                {'c_cycle_number': float(mod_params_df.loc[i, ('Cycle')])})
            #new_dict.update({'charge/discharge': mod_params_df.loc[i, ('C/D')],
            #'cycle_number': float(mod_params_df.loc[i, ('Cycle')])})
        peaknum = 0
        for item in charge_keys:
            peaknum = peaknum + 1
            center = param_dict_charge[item + '_center']
            amp = param_dict_charge[item + '_amplitude']
            fract = param_dict_charge[item + '_fraction']
            sigma = param_dict_charge[item + '_sigma']
            height = param_dict_charge[item + '_height']
            fwhm = param_dict_charge[item + '_fwhm']
            raw_peakheight = charge_peak_heights[peaknum - 1]
            #print('center' + str(center))
            PeakArea, PeakAreaError = scipy.integrate.quad(my_pseudovoigt,
                                                           0.0,
                                                           100,
                                                           args=(center, amp,
                                                                 fract, sigma))
            #print('peak location is : ' + str(center) + ' Peak area is: ' + str(PeakArea))
            new_dict_charge.update({
                'c_area_peak_' + str(peaknum):
                PeakArea,
                'c_center_peak_' + str(peaknum):
                center,
                'c_amp_peak_' + str(peaknum):
                amp,
                'c_fract_peak_' + str(peaknum):
                fract,
                'c_sigma_peak_' + str(peaknum):
                sigma,
                'c_height_peak_' + str(peaknum):
                height,
                'c_fwhm_peak_' + str(peaknum):
                fwhm,
                'c_rawheight_peak_' + str(peaknum):
                raw_peakheight
            })
        #print(new_dict)
        new_dict_df = pd.DataFrame(columns=new_dict_charge.keys())
        for key1, val1 in new_dict_charge.items():
            new_dict_df.at[0, key1] = new_dict_charge[key1]
        charge_descript = pd.concat([charge_descript, new_dict_df])
        charge_descript = charge_descript.reset_index(drop=True)
        charge_descript2 = descriptors.dfsortpeakvals(charge_descript, 'c')
        ################################ now the discharge

        discharge_keys = []
        if param_dict_discharge is not None:
            for key, value in param_dict_discharge.items():
                if '_amplitude' in key and not 'base_' in key:
                    #print(int(key.split('_')[0].split('a')[1]))
                    discharge_keys.append(key.split('_')[0])
            #print(charge_keys)
            new_dict_discharge = {}
            new_dict_discharge.update({
                'd_gauss_sigma':
                param_dict_discharge['base_sigma'],  # changed 10-10-18
                'd_gauss_center':
                param_dict_discharge['base_center'],
                'd_gauss_amplitude':
                param_dict_discharge['base_amplitude'],
                'd_gauss_fwhm':
                param_dict_discharge['base_fwhm'],
                'd_gauss_height':
                param_dict_discharge['base_height'],
                #'d_poly_coef5': param_dict_discharge['c4'],
            })
            new_dict_discharge.update(
                {'d_cycle_number': float(mod_params_df.loc[i, ('Cycle')])})
            #new_dict.update({'charge/discharge': mod_params_df.loc[i, ('C/D')],
            #'cycle_number': float(mod_params_df.loc[i, ('Cycle')])})
            peaknum = 0
            for item in discharge_keys:
                peaknum = peaknum + 1
                center = param_dict_discharge[item + '_center']
                amp = param_dict_discharge[item + '_amplitude']
                fract = param_dict_discharge[item + '_fraction']
                sigma = param_dict_discharge[item + '_sigma']
                height = param_dict_discharge[item + '_height']
                fwhm = param_dict_discharge[item + '_fwhm']
                raw_peakheight = discharge_peak_heights[peaknum - 1]
                #print('center' + str(center))
                PeakArea, PeakAreaError = scipy.integrate.quad(
                    my_pseudovoigt, 0.0, 100, args=(center, amp, fract, sigma))
                #print('peak location is : ' + str(center) + ' Peak area is: ' + str(PeakArea))
                new_dict_discharge.update({
                    'd_area_peak_' + str(peaknum):
                    PeakArea,
                    'd_center_peak_' + str(peaknum):
                    center,
                    'd_amp_peak_' + str(peaknum):
                    amp,
                    'd_fract_peak_' + str(peaknum):
                    fract,
                    'd_sigma_peak_' + str(peaknum):
                    sigma,
                    'd_height_peak_' + str(peaknum):
                    height,
                    'd_fwhm_peak_' + str(peaknum):
                    fwhm,
                    'd_rawheight_peak_' + str(peaknum):
                    raw_peakheight
                })
        else:
            new_dict_discharge = None
            #print(new_dict)
        if new_dict_discharge is not None:
            new_dict_df_d = pd.DataFrame(columns=new_dict_discharge.keys())
            for key1, val1 in new_dict_discharge.items():
                new_dict_df_d.at[0, key1] = new_dict_discharge[key1]
            discharge_descript = pd.concat([discharge_descript, new_dict_df_d])
            discharge_descript = discharge_descript.reset_index(drop=True)
            discharge_descript2 = descriptors.dfsortpeakvals(
                discharge_descript, 'd')
        else:
            discharge_descript2 = None
            # append the two dfs (charge and discharge) before putting them in database
        full_df_descript = pd.concat([charge_descript2, discharge_descript2],
                                     axis=1)
        dbfs.update_database_newtable(full_df_descript,
                                      mod_params_name + '-descriptors',
                                      database)
    return