Пример #1
0
 def button_release_callback(self, event):
     'whenever a mouse button is released'
     a = P4Rm()
     val = a.xrd_graph_loaded
     if self.canvas.HasCapture():
         self.canvas.ReleaseMouse()
     else:
         if not self.showverts:
             return
         if event.button != 1:
             return
         if self.new_coord['indice'] is not None and val == 1:
             a = P4Rm()
             temp_1 = self.new_coord['y']
             temp_2 = self.new_coord['x']
             P4Rm.DragDrop_DW_y[self.new_coord['indice']] = temp_1
             P4Rm.DragDrop_DW_x[self.new_coord['indice']] = temp_2
             if a.AllDataDict['model'] == 0:
                 temp = self.new_coord['y']
                 P4Rm.DragDrop_DW_y[self.new_coord['indice']] = temp
                 temp = [
                     dw * scale for dw, scale in zip(
                         a.DragDrop_DW_y, a.ParamDict['scale_dw'])
                 ]
                 temp = [float(format(value, '.8f')) for value in temp]
                 temp2 = np.concatenate([temp, [a.ParamDict['dw_out']]])
                 P4Rm.ParamDict['dwp'] = deepcopy(temp2)
                 P4Rm.ParamDictbackup['dwp'] = deepcopy(temp2)
             elif a.AllDataDict['model'] == 1:
                 temp = self.new_coord['y']
                 P4Rm.DragDrop_DW_y[self.new_coord['indice']] = temp
                 temp = [
                     dw * scale for dw, scale in zip(
                         a.DragDrop_DW_y, a.ParamDict['scale_dw'])
                 ]
                 temp = [float(format(value, '.8f')) for value in temp]
                 temp2 = np.concatenate([[a.ParamDict['dw_out'][0]], temp,
                                         [a.ParamDict['dw_out'][1]]])
                 P4Rm.ParamDict['dwp'] = deepcopy(temp2)
                 P4Rm.ParamDictbackup['dwp'] = deepcopy(temp2)
             elif a.AllDataDict['model'] == 2:
                 t_temp = a.ParamDict['depth'] + a.ParamDict['z']
                 t = t_temp[0]
                 dwp_temp = range(7)
                 dwp_temp[0] = a.DragDrop_DW_y[0]
                 dwp_temp[1] = 1 - a.DragDrop_DW_x[0] / t
                 dwp_temp[2] = 2 * (-1 + a.ParamDict['dwp'][1] +
                                    a.DragDrop_DW_x[1] / t)
                 dwp_temp[3] = 2 * (1 - a.ParamDict['dwp'][1] -
                                    1 * a.DragDrop_DW_x[2] / t)
                 dwp_temp[4] = a.ParamDict['dwp'][4]
                 dwp_temp[5] = a.ParamDict['dwp'][5]
                 dwp_temp[6] = a.DragDrop_DW_y[3]
                 P4Rm.ParamDict['dwp'] = deepcopy(dwp_temp)
                 P4Rm.ParamDictbackup['dwp'] = deepcopy(dwp_temp)
                 P4Rm.ParamDict['dwp_pv'] = deepcopy(dwp_temp)
             pub.sendMessage(pubsub_Update_Fit_Live)
         self._ind = None
Пример #2
0
def residual_square(p, data):
    a = P4Rm()
    P4Rm.ParamDict['_fp_min'] = p
    y_cal = f_Refl(a.AllDataDict['geometry'])
    y_cal = y_cal / y_cal.max() + data['background']
    temp = ((log10(a.ParamDict['Iobs']) - log10(y_cal))**2).sum()
    return temp / len(y_cal)
Пример #3
0
 def scale_manual(self, event, val=None):
     a = P4Rm()
     if val is not None:
         P4Rm.ParamDict['DW_multiplication'] = val
     P4Rm.ParamDict['dwp'] = multiply(a.ParamDict['dwp'],
                                      a.ParamDict['DW_multiplication'])
     pub.sendMessage(pubsub_Re_Read_field_paramters_panel, event=event)
Пример #4
0
 def residual_lmfit(self, pars, x, y):
     a = P4Rm()
     self.strain_DW(pars)
     res = f_Refl_fit(a.AllDataDict['geometry'], self.Data4f_Refl)
     y_cal = convolve(abs(res) ** 2, a.ParamDict['resol'], mode='same')
     y_cal = y_cal / y_cal.max() + a.AllDataDict['background']
     return (log10(y) - log10(y_cal))
Пример #5
0
 def strain_DW(self, pars=None):
     a = P4Rm()
     self.Data4f_Refl = []
     if pars is None:
         strain = f_strain(a.ParamDict['z'],
                           a.ParamDict['_fp_min'][:self.len_sp:],
                           a.AllDataDict['damaged_depth'],
                           a.splinenumber[0])
         DW = f_DW(a.ParamDict['z'],
                   a.ParamDict['_fp_min'][self.len_sp:self.len_sp +
                   self.len_dwp:],
                   a.AllDataDict['damaged_depth'], a.splinenumber[1])
     else:
         if a.AllDataDict['model'] == 0:
             spline_DW = 5
             spline_strain = 5
         elif a.AllDataDict['model'] == 1:
             spline_DW = 6
             spline_strain = 6
         elif a.AllDataDict['model'] == 2:
             spline_DW = 4
             spline_strain = 4
         self.pars4numba(pars)
         strain = f_strain(a.ParamDict['z'], self.pars_value,
                           a.AllDataDict['damaged_depth'], spline_strain)
         DW = f_DW(a.ParamDict['z'], self.pars_value,
                   a.AllDataDict['damaged_depth'], spline_DW)
     strain.astype(np.float64)
     DW.astype(np.float64)
     self.Data4f_Refl.append(strain)
     self.Data4f_Refl.append(DW)
     self.Data4f_Refl.append(self.const)
Пример #6
0
    def on_launch_fit(self):
        a = P4Rm()
        b = Calcul4Radmax()
        b.on_update()
        pub.sendMessage(pubsub_Read_field4Save)

        if a.PathDict['namefromini'] != "":
            logger.log(logging.INFO, "Start Fit")
            if (a.checkInitialField == 1 and a.checkGeometryField == 1 and
                        a.checkFittingField == 1):
                P4Rm.allparameters = (a.initial_parameters +
                                      a.fitting_parameters +
                                      a.sample_geometry)
                i = 0
                for k in p4R.IP_p + p4R.F_p + p4R.SG_p:
                    P4Rm.AllDataDict[k] = a.allparameters[i]
                    i += 1
                if a.AllDataDict['nb_cycle_max'] < a.AllDataDict['nb_palier']:
                    P4Rm.AllDataDict['nb_cycle_max'] = a.AllDataDict['nb_palier']
                    pub.sendMessage(pubsub_adjust_nb_cycle)
                self.onLaunchtest()
            else:
                return
        else:
            pub.sendMessage(pubsub_save_project_before_fit, case=2)
Пример #7
0
    def init_array(self):
        a = P4Rm()
        const_all = []
        const_all.append(a.AllDataDict['wavelength'])
        const_all.append(a.AllDataDict['damaged_depth'])
        const_all.append(a.AllDataDict['number_slices'])

        const_all.append(a.ConstDict['phi'])
        const_all.append(a.ParamDict['t_l'])
        const_all.append(a.ParamDict['b_S'])
        const_all.append(a.ParamDict['thB_S'])
        const_all.append(a.ParamDict['G'])
        const_all.append(a.ParamDict['F0'])
        const_all.append(a.ParamDict['FH'])
        const_all.append(a.ParamDict['FmH'])

        const_all.append(a.ParamDict['b_S_s'])
        const_all.append(a.ParamDict['thB_S_s'])
        const_all.append(a.ParamDict['G_s'])
        const_all.append(a.ParamDict['F0_s'])
        const_all.append(a.ParamDict['FH_s'])
        const_all.append(a.ParamDict['FmH_s'])
        const_all.append(a.AllDataDict['film_thick'])
        const_all.append(a.AllDataDict['dw_thick'])

        const_all.append(a.ParamDict['th'])
        const_all.append(len(a.ParamDict['z']))

        self.const = const_all
        self.len_sp = len(a.ParamDict['sp'])
        self.len_dwp = len(a.ParamDict['dwp'])
Пример #8
0
 def on_read_data_from_lmfit(self):
     a = P4Rm()
     from lmfit import fit_report
     result = P4Rm.resultFit
     data = []
     data.append(result.success)
     data.append(result.lmdif_message)
     data.append(result.ier)
     data.append(fit_report(result))
     P4Rm.FitDict['Leastsq_report'] = data
     i = 0
     if a.AllDataDict['model'] == 2:
         for param in result.params.values():
             if i in range(1, 7):
                 P4Rm.ParamDict['sp'][i] = param.value
             if i in range(7, 14):
                 P4Rm.ParamDict['dwp'][i - 7] = param.value
             i += 1
     else:
         len_sp = int(result.params['nb_sp_val'])
         len_dwp = int(result.params['nb_dwp_val'])
         for ii in range(len_dwp):
             name = 'dwp_' + str(ii)
             P4Rm.ParamDict['dwp'][ii] = result.params[name].value
         for jj in range(len_sp):
             name = 'sp_' + str(jj)
             P4Rm.ParamDict['sp'][jj] = result.params[name].value
Пример #9
0
def f_Refl_Thick_Film():
    a = P4Rm()

    wl = a.AllDataDict['wavelength']
    t = a.AllDataDict['damaged_depth']
    N = a.AllDataDict['number_slices']
    t_film = a.AllDataDict['film_thick']

    G = a.ParamDict['G']
    thB_S = a.ParamDict['thB_S']
    resol = a.ParamDict['resol']
    phi = a.ConstDict['phi']
    t_l = a.ParamDict['t_l']
    z = a.ParamDict['z']
    FH = a.ParamDict['FH']
    FmH = a.ParamDict['FmH']
    F0 = a.ParamDict['F0']
    sp = a.ParamDict['sp']
    dwp = a.ParamDict['dwp']
    th = a.ParamDict['th']
    spline_DW = a.splinenumber[1]
    spline_strain = a.splinenumber[0]
    param = a.ParamDict['par']
    delta_t = t_film - t

    strain = f_strain(z, param[:len(sp):], t, spline_strain)
    DW = f_DW(z, param[len(sp):len(sp) + len(dwp):], t, spline_DW)
    thB = thB_S - strain * tan(thB_S)  # angle de Bragg dans chaque lamelle

    eta = 0
    res = 0

    g0 = sin(thB[0] - phi)  # gamma 0
    gH = -sin(thB[0] + phi)  # gamma H
    b = g0 / gH
    T = pi * G * ((FH[0] * FmH[0])**0.5) * delta_t / (wl * (abs(g0 * gH)**0.5))
    eta = (-b * (th - thB[0]) * sin(2 * thB_S) - 0.5 * G * F0[0] *
           (1 - b)) / ((abs(b)**0.5) * G * (FH[0] * FmH[0])**0.5)
    S1 = (res - eta + (eta * eta - 1)**0.5) * exp(-1j * T *
                                                  (eta * eta - 1)**0.5)
    S2 = (res - eta - (eta * eta - 1)**0.5) * exp(1j * T *
                                                  (eta * eta - 1)**0.5)
    res = (eta + ((eta * eta - 1)**0.5) * ((S1 + S2) / (S1 - S2)))

    n = 1
    while (n <= N):
        g0 = sin(thB[n] - phi)  # gamma 0
        gH = -sin(thB[n] + phi)  # gamma H
        b = g0 / gH
        T = pi * G * (
            (FH[n] * FmH[n])**0.5) * t_l * DW[n] / (wl * (abs(g0 * gH)**0.5))
        eta = (-b * (th - thB[n]) * sin(2 * thB_S) - 0.5 * G * F0[n] *
               (1 - b)) / ((abs(b)**0.5) * G * DW[n] * (FH[n] * FmH[n])**0.5)
        S1 = (res - eta + (eta * eta - 1)**0.5) * exp(-1j * T *
                                                      (eta * eta - 1)**0.5)
        S2 = (res - eta - (eta * eta - 1)**0.5) * exp(1j * T *
                                                      (eta * eta - 1)**0.5)
        res = (eta + ((eta * eta - 1)**0.5) * ((S1 + S2) / (S1 - S2)))
        n += 1
    return convolve(abs(res)**2, resol, mode='same')
Пример #10
0
 def save_project(self, case):
     nunberofdatapersection = [
         0,
         len(p4R.s_crystal),
         len(p4R.s_data_file),
         len(p4R.s_experiment),
         len(p4R.s_material),
         len(p4R.s_strain_DW),
         len(p4R.s_GSA_options),
         len(p4R.s_bsplines),
         len(p4R.s_pv),
         len(p4R.s_GSA_expert),
         len(p4R.s_leastsq),
         len(p4R.s_geometry),
         len(p4R.s_substrate)
     ]
     a = P4Rm()
     filename_ = a.PathDict['path2inicomplete']
     parser = SafeConfigParser()
     if case == 0:
         parser.read(filename_)
     new_section_name = p4R.Exp_file_all_section
     for i in range(len(p4R.Exp_file_section)):
         if case == 1:
             parser.add_section(p4R.Exp_file_section[i])
         k = nunberofdatapersection[i]
         r = nunberofdatapersection[i + 1]
         new_section_name = new_section_name[k:]
         for l in range(r):
             parser.set(p4R.Exp_file_section[i], new_section_name[l],
                        str(a.AllDataDict[new_section_name[l]]))
     parser.write(open(filename_, 'w'))
Пример #11
0
    def on_load(self, b=None):
        for ii in self.data_fields:
            self.data_fields[ii].Clear()
        if b == 1:
            for i in range(len(New_project_initial)):
                p_ = New_project_initial[i]
                self.data_fields[i].AppendText(str(p_))
        else:
            a = P4Rm()
            self.state = 4 * [False]
            val = int(float(a.AllDataDict['geometry']))
            self.state[val] = True
            self.rb[val].SetValue(True)
            self.on_apply_rb()
            i = 0
            for k in p4R.SG_p[1:]:
                self.data_fields[i].AppendText(str(a.AllDataDict[k]))
                i += 1
            val = self.symmetry_choice[int(
                float(a.AllDataDict['crystal_symmetry_s']))]
            self.cb_crystalsymmetry.SetStringSelection(val)
            self.on_select_symmetry(None, val)

            if a.PathDict['substrate_name'] in a.crystal_list:
                indexx = a.crystal_list.index(a.PathDict['substrate_name'])
                self.cb_crystalname.SetStringSelection(a.crystal_list[indexx])
                msg_ = "Config file successfully loaded"
                logger.log(logging.INFO, msg_)
            else:
                msg_ = ("You need to add the proper strcuture" + "to continue")
                logger.log(logging.INFO, msg_)
Пример #12
0
    def on_search_in_DB(self):
        a = P4Rm()
        temp = []
        test = []
        test = [
            RadMaxData.exp_name, RadMaxData.crys_name, RadMaxData.geometry,
            RadMaxData.model, RadMaxData.date
        ]

        for i in range(len(a.DBDict['choice_combo'])):
            if not a.DBDict['choice_combo'][i] is None:
                if a.DBDict['choice_combo'][i] == 'equal':
                    the_day = datetime.strptime(a.DBDict['date_1'],
                                                "%Y-%m-%d %H:%M:%S")
                    next_day = the_day + timedelta(days=1)
                    next_day = '{:%Y-%m-%d %H:%M:%S}'.format(next_day)
                    temp.append(test[i] >= a.DBDict['date_1'])
                    temp.append(test[i] <= next_day)
                elif a.DBDict['choice_combo'][i] == '=<':
                    temp.append(test[i] <= a.DBDict['date_1'])
                elif a.DBDict['choice_combo'][i] == '>=':
                    temp.append(test[i] >= a.DBDict['date_1'])
                elif a.DBDict['choice_combo'][i] == 'between':
                    temp.append(test[i] >= a.DBDict['date_1'])
                    temp.append(test[i] <= a.DBDict['date_2'])
                else:
                    temp.append(test[i] == a.DBDict['choice_combo'][i])

        s = a.DBDict['session'].query(RadMaxData).filter(*temp).all()
        if a.DBDict['choice_state']:
            self.on_read_database_and_fill_list(s)
        else:
            [a.DBDict['session'].delete(x) for x in s]
            pub.sendMessage(pubsub_sup_data_DB)
Пример #13
0
 def on_save_data(self, event):
     _msg = "Save data as default ?\n" + \
            "This change will be applied for all fit !!\n\n"
     dlg = GMD.GenericMessageDialog(None,
                                    _msg,
                                    "Attention",
                                    agwStyle=wx.OK | wx.CANCEL
                                    | wx.ICON_QUESTION)
     result = dlg.ShowModal()
     dlg.Destroy()
     if result == wx.ID_OK:
         pub.sendMessage(pubsub_Read_field_Bspline)
         pub.sendMessage(pubsub_Read_field_PseudoV)
         pub.sendMessage(pubsub_Read_field_Fit)
         success = self.IsDataFloat()
         if success:
             a = P4Rm()
             P4Rm.Paramwindowtest['FitParametersPanel'] = True
             if False not in a.Paramwindowtest:
                 for k in p4R.Exp_read_only:
                     P4Rm.DefaultDict[k] = a.AllDataDict[k]
                 b = SaveFile4Diff()
                 b.on_update_config_file_parameters(
                     os.path.join(p4R.current_dir, p4R.filename + '.ini'))
                 P4Rm.Paramwindowtest['FitParametersPanel'] = True
                 pub.sendMessage(pubsub_Save_Param_and_quit, event=event)
         event.Skip()
Пример #14
0
 def on_delete_data(self):
     a = P4Rm()
     _msg = "Do you really want to delete these datas?"
     dlg = GMD.GenericMessageDialog(None,
                                    _msg,
                                    "Confirm Suppression",
                                    agwStyle=wx.OK | wx.CANCEL
                                    | wx.ICON_QUESTION)
     result = dlg.ShowModal()
     dlg.Destroy()
     if result == wx.ID_OK:
         c = DataBaseUse()
         c.on_delete_data()
         self.on_fill_combobox()
         state1 = self.rb1.SetValue(True)
         state2 = self.rb2.SetValue(False)
         self.state = [state1, state2]
         for i in range(len(self.cb_list)):
             self.cb_list[i].SetValue(False)
             self.combo_list[i].Disable()
         empty = a.DBDict['session'].query(RadMaxData).first()
         if empty is None:
             s = a.DBDict['session'].query(RadMaxData).order_by(
                 RadMaxData.id)
             c.on_read_database_and_fill_list(s)
         else:
             self.on_search_in_DB()
Пример #15
0
    def on_init_sp_dwp(self):
        a = P4Rm()
        P4Rm.ParamDict['sp_pv'] = sp_pv_initial
        P4Rm.ParamDict['dwp_pv'] = dwp_pv_initial

        P4Rm.ParamDict['state_sp'] = len(a.ParamDict['sp'])*[True]
        P4Rm.ParamDict['state_dwp'] = len(a.ParamDict['dwp'])*[True]
Пример #16
0
 def IsDataFloat(self):
     a = P4Rm()
     IsFloat = []
     dataFloat = True
     for i in range(len(self.Textcontrol)):
         IsFloat.append(self.Is_number(self.Textcontrol[i].GetValue()))
     if False in IsFloat:
         dataFloat = False
         StringPosition = [i for i, x in enumerate(IsFloat) if x is False]
         for ii in StringPosition:
             self.Textcontrol[ii].SetBackgroundColour('green')
         self.Refresh()
         _msg = "Please, fill correctly the fields before to continue"
         dlg = GMD.GenericMessageDialog(None,
                                        _msg,
                                        "Attention",
                                        agwStyle=wx.OK
                                        | wx.ICON_INFORMATION)
         dlg.ShowModal()
         for ii in StringPosition:
             self.Textcontrol[ii].SetBackgroundColour('white')
         self.Refresh()
     else:
         i = 0
         for k in p4R.s_pv:
             val = self.Textcontrol[i].GetValue()
             P4Rm.AllDataDict[k] = float(val)
             self.Textcontrol[i].Clear()
             self.Textcontrol[i].AppendText(str(a.AllDataDict[k]))
             i += 1
     return dataFloat
Пример #17
0
    def on_update(self):
        a = P4Rm()

        pub.sendMessage(pubsub_Read_field4Save)

        if (a.checkInitialField == 1 and a.checkGeometryField == 1 and
            a.checkFittingField == 1):
            P4Rm.allparameters = (a.initial_parameters +
                                  a.fitting_parameters +
                                  a.sample_geometry)
            i = 0
            for k in p4R.IP_p + p4R.F_p + p4R.SG_p:
                P4Rm.AllDataDict[k] = a.allparameters[i]
                i += 1
            pub.sendMessage(pubsub_test_some_field)

            if (a.ParamDict['Iobs'] == [] or
               a.ParamDict['sp'] == [] or
               a.ParamDict['dwp'] == []):
                return
            else:
                self.on_calcul_parameters()
                if a.AllDataDict['model'] == 2:
                    pub.sendMessage(pubsub_update_sp_dwp_eta)
                P4Rm.success4Fit = 0
        else:
            P4Rm.success4Fit = 1
Пример #18
0
 def convert_Data_File(self, name):
     ll_0 = []
     ll_1 = []
     a = P4Rm()
     with open(name, 'r') as f:
         for line in self.nonblank_lines(f):
             if line[0] is not '[':
                 ll = line.split(' = ')
                 ll_0.append(ll[0])
                 ll_1.append(ll[1])
     i = 0
     P4Rm.AllDataDict['model'] = 0.0
     P4Rm.AllDataDict['function_profile'] = 2.0
     for k in ll_0:
         P4Rm.AllDataDict[k] = ll_1[i]
         i += 1
     P4Rm.AllDataDict['substrate_name'] = a.AllDataDict['crystal_name']
     for k in p4R.s_radmax_3 + p4R.s_radmax_4 + p4R.s_radmax_5:
         P4Rm.AllDataDict[k] = p4R.FitParamDefault[k]
     data_path = os.path.split(name)[0]
     data_file_name = os.path.splitext(os.path.basename(name))[0]
     data_name = os.path.join(data_path, data_file_name + '.ini')
     P4Rm.PathDict['path2inicomplete'] = data_name
     b = SaveFile4Diff()
     b.save_project(1)
     return 0
Пример #19
0
    def on_read_initial_file(self):
        a = P4Rm()
        b = ReadFile()
        if (os.path.exists(a.PathDict['DW_file']) and
           os.path.exists(a.PathDict['Strain_file']) and
           os.path.exists(a.PathDict['XRD_file'])) is True:
            try:
                """READING DW FILE"""
                b.read_dw_file(a.PathDict['DW_file'])
                """READING Strain FILE"""
                b.read_strain_file(a.PathDict['Strain_file'])
                """READING XRD FILE"""
                b.read_xrd_file(a.PathDict['XRD_file'])
                self.on_calc_from_xrd()

                P4Rm.ParamDictbackup['dwp'] = a.ParamDict['dwp']
                P4Rm.ParamDictbackup['sp'] = a.ParamDict['sp']

                P4Rm.ParamDict['sp_abrupt'] = a.ParamDict['sp']
                P4Rm.ParamDict['dwp_abrupt'] = a.ParamDict['dwp']

                P4Rm.ParamDict['sp_smooth'] = a.ParamDict['sp']
                P4Rm.ParamDict['dwp_smooth'] = a.ParamDict['dwp']

            except TypeError:
                logger.log(logging.WARNING, "!Please check your input file!")
            else:
                return True
        else:
            msg_ = "Please, check that the input files really exists"
            dlg = GMD.GenericMessageDialog(None, msg_,
                                           "Attention", agwStyle=wx.OK |
                                           wx.ICON_INFORMATION)
            dlg.ShowModal()
            return False
Пример #20
0
 def save_drx(self, case):
     a = P4Rm()
     name = a.PathDict['project_name'] + '.txt'
     path = os.path.join(a.DefaultDict['Save_as_folder'], name)
     P4Rm.PathDict[case] = path
     data = column_stack(
         (2 * a.ParamDict['th'] * 180 / pi, a.ParamDict['Iobs']))
     savetxt(path, data, fmt='%10.8f')
Пример #21
0
 def on_fill_report(self):
     a = P4Rm()
     data = a.FitDict['Leastsq_report']
     if data is not "":
         for i in range(3):
             self.Textcontrol[i].SetLabel(str(data[i]))
         self._logFileContents.SetValue(data[-1])
         self.Refresh()
Пример #22
0
 def scale_manual(self, event, val=None):
     a = P4Rm()
     if val is not None:
         P4Rm.ParamDict['strain_multiplication'] = val
     temp_1 = a.ParamDict['sp']
     temp_2 = a.ParamDict['strain_multiplication']
     P4Rm.ParamDict['sp'] = multiply(temp_1, temp_2)
     pub.sendMessage(pubsub_Re_Read_field_paramters_panel, event=event)
Пример #23
0
 def on_color(self):
     a = P4Rm()
     self.c_data = a.DefaultDict['c_data']
     self.c_fit = a.DefaultDict['c_fit']
     self.c_live = a.DefaultDict['c_fit_live']
     self.l_data = a.DefaultDict['l_data']
     self.l_fit = a.DefaultDict['l_fit']
     self.l_live = a.DefaultDict['l_fit_live']
     self.c_bkg = a.DefaultDict['c_graph_background']
Пример #24
0
 def on_test_data_before_fit(self):
     a = P4Rm()
     P4Rm.ParamDict['sp'] = np.asarray(a.ParamDict['sp'])
     P4Rm.ParamDict['dwp'] = np.asarray(a.ParamDict['dwp'])
     if a.AllDataDict['model'] == 0. or a.AllDataDict['model'] == 1.:
         """ do not use the last value of strain because
         is out of the scope """
         test_dw = (all(a.ParamDict['dwp'] > a.AllDataDict['dw_min']) and
                    all(a.ParamDict['dwp'][:-1] < a.AllDataDict['dw_max']))
         test_strain = (all(a.ParamDict['sp'][:-1] >
                            a.AllDataDict['strain_min']) and
                        all(a.ParamDict['sp'] <
                            a.AllDataDict['strain_max']))
         if test_dw and test_strain:
             return True
         else:
             return False
     elif a.AllDataDict['model'] == 2.:
         i = 0
         ls_ = [0, 4, 5, 6]
         lse_ = [0, 2, 2, 4]
         ld_ = [x + 6 for x in ls_]
         lde_ = [x + 6 for x in lse_]
         test_dw = [False] * len(a.ParamDict['dwp'])
         test_strain = [False] * len(a.ParamDict['sp'])
         for val_dwp, val_sp in zip(a.ParamDict['dwp'],
                                    a.ParamDict['sp']):
             if i in ls_:
                 v_ = ls_.index(i)
                 ve_ = lse_[v_]
                 if val_sp < a.AllDataDict[p4R.GSAp_[ve_]]:
                     test_strain[i] = True
                 elif val_sp > a.AllDataDict[p4R.GSAp_[ve_ + 1]]:
                     test_strain[i] = True
             else:
                 if val_sp < 0.:
                     test_strain[i] = True
                 elif val_sp > 1.:
                     test_strain[i] = True
             j = i + 6
             if j in ld_:
                 v_ = ld_.index(j)
                 ve_ = lde_[v_]
                 if val_dwp < a.AllDataDict[p4R.GSAp_[ve_]]:
                     test_dw[i] = True
                 elif val_dwp > a.AllDataDict[p4R.GSAp_[ve_ + 1]]:
                     test_dw[i] = True
             else:
                 if val_dwp < 0.:
                     test_dw[i] = True
                 elif val_dwp > 1.:
                     test_dw[i] = True
             i += 1
         if (True in test_dw) or (True in test_strain):
             return False
         else:
             return True
Пример #25
0
 def on_add_new_name_to_combobox(self):
     a = P4Rm()
     if not a.PathDict['project_name'] in a.DBDict['name']:
         c = DataBaseUse()
         c.on_read_part_DB()
         self.name.SetItems(a.DBDict['name'])
         self.name.SetStringSelection(a.DBDict['name'][0])
         self.Layout()
         self.SetAutoLayout(1)
Пример #26
0
 def OnDrawGraph(self, b=None):
     a = P4Rm()
     self.modelpv = a.modelPv
     self.ax.clear()
     if a.AllDataDict['damaged_depth'] == 0:
         self.ax.text(0.5,
                      0.5,
                      "No Damage",
                      size=30,
                      rotation=0.,
                      ha="center",
                      va="center",
                      bbox=dict(
                          boxstyle="round",
                          ec='red',
                          fc=self.c_dw,
                      ))
         x_dwp = [-1]
         y_dwp = [-1]
         xs = [-1]
         ys = [-1]
         self.ax.set_xticklabels([])
         self.ax.set_yticklabels([])
         self.ax.set_xlim([0, 1])
         self.ax.set_ylim([0, 1])
     else:
         if b != 2:
             x_dwp = a.ParamDict['x_dwp']
             y_dwp = a.ParamDict['DW_shifted']
             xs = deepcopy(a.ParamDict['depth'])
             ys = deepcopy(a.ParamDict['DW_i'])
             P4Rm.DragDrop_DW_x = x_dwp
             P4Rm.DragDrop_DW_y = y_dwp
             ymin = min(ys) - min(ys) * 10 / 100
             ymax = max(ys) + max(ys) * 10 / 100
             self.ax.set_ylim([ymin, ymax])
             if a.ParamDict['x_dwp'] != "":
                 self.ax.set_xlim(
                     [a.ParamDict['depth'][-1], a.ParamDict['depth'][0]])
         elif b == 2:
             x_dwp = [-1]
             y_dwp = [-1]
             xs = [-1]
             ys = [-1]
             self.ax.set_xlim([0, 1])
             self.ax.set_ylim([0, 1])
     poly = Polygon(list(zip(x_dwp, y_dwp)),
                    lw=0,
                    ls='solid',
                    color=self.c_dw,
                    fill=False,
                    closed=False,
                    animated=True)
     if self.modelpv is True:
         P4Rm.ParamDict['dwp_pv_backup'] = a.ParamDict['dwp']
     self.draw_c(poly, xs, ys)
Пример #27
0
    def OnChangeBasisFunction(self, strain, dw, spline_strain,
                              spline_DW, slice_):
        a = P4Rm()
        strain_change = 0
        dw_change = 0
        slice_change = 0
        if strain != float(a.ParamDict['strain_basis_backup']):
            P4Rm.ParamDict['strain_basis_backup'] = strain
            P4Rm.ParamDict['state_sp'] = int(strain)*[True]
            strain_change = 1
        if dw != a.ParamDict['dw_basis_backup']:
            P4Rm.ParamDict['dw_basis_backup'] = dw
            dw_change = 1
        if slice_ != float(a.ParamDict['slice_backup']):
            P4Rm.ParamDict['slice_backup'] = slice_
            slice_change = 1
        if a.FitDict['New&Load'] == 1:
            dw_change = 1

        if strain_change == 1 or dw_change == 1 or slice_change == 1:
            temp = self.find_nearest_damaged_depth(a.AllDataDict['damaged_depth'],
                                                   a.AllDataDict['number_slices'],
                                                   strain)
            P4Rm.AllDataDict['damaged_depth'] = temp[0]
            P4Rm.AllDataDict['number_slices'] = temp[1]
            damaged_val = temp[0]
            slice_val = temp[1]
            dw, index, list_ = self.find_nearest_dw(a.AllDataDict['number_slices'],
                                                    dw, strain, strain_change,
                                                    dw_change, slice_change)
            P4Rm.ParamDict['t_l'] = damaged_val/slice_val
            P4Rm.ParamDict['z'] = arange(slice_val+1) * a.ParamDict['t_l']
            P4Rm.ParamDict['dwp'] = old2new_DW(a.ParamDict['z'],
                                               a.ParamDict['dwp'],
                                               damaged_val, dw, spline_DW)
            P4Rm.ParamDict['sp'] = old2new_strain(a.ParamDict['z'],
                                                  a.ParamDict['sp'],
                                                  damaged_val, strain,
                                                  spline_strain)
            P4Rm.ParamDictbackup['dwp'] = deepcopy(a.ParamDict['dwp'])
            P4Rm.ParamDictbackup['sp'] = deepcopy(a.ParamDict['sp'])
            P4Rm.FitDict['New&Load'] = 0
            P4Rm.FitDict['list4DW'] = list_
            tmp = []
            tmp.append(list_)
            tmp.append(index)
            tmp.append(damaged_val)
            tmp.append(dw)
            tmp.append(slice_val)
            P4Rm.ParamDict['state_dwp'] = dw*[True]

            pub.sendMessage(pubsub_change_basic_function, tmp=tmp)
            return slice_val, dw
        else:
            slice_val = int(a.AllDataDict['number_slices'])
            return slice_val, dw
Пример #28
0
 def on_init(self):
     a = P4Rm()
     i = 0
     for k in p4R.s_GSA_expert:
         self.TextcontrolGSA[i].AppendText(str(a.AllDataDict[k]))
         i += 1
     i = 0
     for k in p4R.s_leastsq:
         self.TextcontrolLeastsq[i].AppendText(str(a.AllDataDict[k]))
         i += 1
Пример #29
0
 def OnUnzoom(self, event=None):
     self.canvas.toolbar.home()
     P4Rm.zoomOn = 0
     a = P4Rm()
     P4Rm.ParamDict['th'] = a.ParamDictbackup['th']
     P4Rm.ParamDict['Iobs'] = a.ParamDictbackup['Iobs']
     P4Rm.ParamDict['th4live'] = 2 * a.ParamDict['th'] * 180 / np.pi
     pub.sendMessage(pubsub_Re_Read_field_paramters_panel)
     self.CheckedGrid()
     self.CursorMove()
Пример #30
0
 def re_fill_list(self):
     a = P4Rm()
     self.Freeze()
     if a.db_nb_line is not -1:
         self.list.SortBy(0, ascending=False)
         self.list.SetFilter(Filter.Head(a.db_nb_line))
     else:
         self.list.SetFilter(None)
     self.list.RepopulateList()
     self.Thaw()