Ignore:
Timestamp:
Mar 6, 2019 6:18:51 PM (5 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
ticket-1094-headless
Children:
f0b9bce
Parents:
ffbf35ee (diff), f205d3a (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' into ticket-1094-headless

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sasgui/perspectives/fitting/fitpage.py

    r1dc134e6 rcb44d66  
    1313import time 
    1414import traceback 
     15import logging 
    1516 
    1617from sasmodels.weights import MODELS as POLYDISPERSITY_MODELS 
    1718 
    1819from sas.sascalc.fit.qsmearing import smear_selection 
     20from sas.sascalc.dataloader.data_info import Data1D, Data2D 
    1921 
    2022from sas.sasgui.guiframe.events import StatusEvent, NewPlotEvent, \ 
     
    2830    PageInfoEvent 
    2931from .basepage import ModelTextCtrl 
     32 
     33logger = logging.getLogger(__name__) 
    3034 
    3135(Chi2UpdateEvent, EVT_CHI2_UPDATE) = wx.lib.newevent.NewEvent() 
     
    183187        :return: True or False 
    184188        """ 
    185         if self.data.__class__.__name__ == "Data2D" or \ 
    186                         self.enable2D: 
     189        if isinstance(self.data, Data2D) or self.enable2D: 
    187190            return True 
    188191        return False 
     
    198201 
    199202        # Check if data is 2D 
    200         if self.data.__class__.__name__ == "Data2D" or \ 
    201                         self.enable2D: 
     203        if isinstance(self.data, Data2D) or self.enable2D: 
    202204            is_2d_data = True 
    203205 
     
    212214        smear_message_new_psmear = \ 
    213215              "Please enter a fixed percentage to be applied to all Q values..." 
    214         smear_message_2d_x_title = "<dQp>[1/A]:" 
    215         smear_message_2d_y_title = "<dQs>[1/A]:" 
    216         smear_message_pinhole_percent_title = "dQ[%]:" 
     216        smear_message_2d_x_title = "<dQ/Q>_r[%]:" 
     217        smear_message_2d_y_title = "<dQ/Q>_phi[%]:" 
     218        smear_message_pinhole_percent_min_title = "[dQ/Q]min(%):" 
     219        smear_message_pinhole_percent_max_title = "[dQ/Q]max(%):" 
     220        smear_message_pinhole_percent_title = "dQ/Q(%):" 
    217221        smear_message_slit_height_title = "Slit height[1/A]:" 
    218222        smear_message_slit_width_title = "Slit width[1/A]:" 
     
    417421                            smear_message_2d_x_title, style=wx.ALIGN_LEFT) 
    418422        self.smear_description_2d_x.SetToolTipString( 
    419                                         "  dQp(parallel) in q_r direction.") 
     423                                        "  dQ_r q_r in polar coordinates.") 
    420424        self.smear_description_2d_y = wx.StaticText(self, wx.ID_ANY, 
    421425                            smear_message_2d_y_title, style=wx.ALIGN_LEFT) 
    422426        self.smear_description_2d_y.SetToolTipString( 
    423                                     " dQs(perpendicular) in q_phi direction.") 
     427                                    " dQ_phi q_phi in polar coordinates.") 
     428        self.smear_description_pin_percent_min = wx.StaticText(self, wx.ID_ANY, 
     429                                            smear_message_pinhole_percent_min_title, 
     430                                            style=wx.ALIGN_LEFT) 
     431        self.smear_description_pin_percent_max = wx.StaticText(self, wx.ID_ANY, 
     432                                            smear_message_pinhole_percent_max_title, 
     433                                            style=wx.ALIGN_LEFT) 
    424434        self.smear_description_pin_percent = wx.StaticText(self, wx.ID_ANY, 
    425435                                            smear_message_pinhole_percent_title, 
     
    448458        self.sizer_new_smear.Add((15, -1)) 
    449459        self.sizer_new_smear.Add(self.smear_description_2d_x, 0, wx.CENTER, 10) 
     460        self.sizer_new_smear.Add(self.smear_description_pin_percent_min, 
     461                                 0, wx.CENTER, 10) 
     462        self.sizer_new_smear.Add(self.smear_description_pin_percent, 
     463                                 0, wx.CENTER, 10) 
    450464        self.sizer_new_smear.Add(self.smear_description_slit_height, 
    451465                                 0, wx.CENTER, 10) 
    452466 
     467        self.sizer_new_smear.Add(self.smear_pinhole_percent, 0, wx.CENTER, 10) 
    453468        self.sizer_new_smear.Add(self.smear_slit_height, 0, wx.CENTER, 10) 
    454469        self.sizer_new_smear.Add(self.smear_data_left, 0, wx.CENTER, 10) 
     
    456471        self.sizer_new_smear.Add(self.smear_description_2d_y, 
    457472                                 0, wx.CENTER, 10) 
    458         self.sizer_new_smear.Add(self.smear_description_pin_percent, 
     473        self.sizer_new_smear.Add(self.smear_description_pin_percent_max, 
    459474                                 0, wx.CENTER, 10) 
    460475        self.sizer_new_smear.Add(self.smear_description_slit_width, 
    461476                                 0, wx.CENTER, 10) 
    462477 
    463         self.sizer_new_smear.Add(self.smear_pinhole_percent, 0, wx.CENTER, 10) 
    464478        self.sizer_new_smear.Add(self.smear_slit_width, 0, wx.CENTER, 10) 
    465479        self.sizer_new_smear.Add(self.smear_data_right, 0, wx.CENTER, 10) 
     
    502516 
    503517        # check if it is 2D data 
    504         if self.data.__class__.__name__ == "Data2D" or self.enable2D: 
     518        if isinstance(self.data, Data2D) or self.enable2D: 
    505519            is_2d_data = True 
    506520 
     
    805819                        self.sizer4_4.Add(cb, (iy, ix), (1, 1), 
    806820                                wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 5) 
    807                         if self.data.__class__.__name__ == "Data2D" or \ 
    808                                     self.enable2D: 
     821                        if isinstance(self.data, Data2D) or self.enable2D: 
    809822                            cb.Show(True) 
    810823                        elif cb.IsShown(): 
     
    818831                        ctl1.SetToolTipString(poly_tip) 
    819832                        ctl1.SetValue(str(format_number(value, True))) 
    820                         if self.data.__class__.__name__ == "Data2D" or \ 
    821                                     self.enable2D: 
     833                        if isinstance(self.data, Data2D) or self.enable2D: 
    822834                            if first_orient: 
    823835                                values.SetLabel('PD[ratio], Sig[deg]') 
     
    853865 
    854866                        ctl2.Hide() 
    855                         if self.data.__class__.__name__ == "Data2D" or \ 
    856                                 self.enable2D: 
     867                        if isinstance(self.data, Data2D) or self.enable2D: 
    857868                            if self.is_mac: 
    858869                                text2.Show(True) 
     
    879890                        ctl4.Hide() 
    880891 
    881                         if self.data.__class__.__name__ == "Data2D" or \ 
    882                                 self.enable2D: 
     892                        if isinstance(self.data, Data2D) or self.enable2D: 
    883893                            ctl3.Show(True) 
    884894                            ctl4.Show(True) 
     
    892902 
    893903                        Tctl.SetValue(str(format_number(value))) 
    894                         if self.data.__class__.__name__ == "Data2D" or \ 
    895                                 self.enable2D: 
     904                        if isinstance(self.data, Data2D) or self.enable2D: 
    896905                            Tctl.Show(True) 
    897906                        else: 
     
    912921 
    913922                        Tct2.SetValue(str(format_number(value))) 
    914                         if self.data.__class__.__name__ == "Data2D" or \ 
    915                                 self.enable2D: 
     923                        if isinstance(self.data, Data2D) or self.enable2D: 
    916924                            Tct2.Show(True) 
    917925                        else: 
     
    940948                                            text2, ctl2, ctl3, ctl4, disp_box]) 
    941949 
    942                 if self.data.__class__.__name__ == "Data2D" or \ 
    943                                 self.enable2D: 
     950                if isinstance(self.data, Data2D) or self.enable2D: 
    944951                    disp_box.Show(True) 
    945952                else: 
     
    13261333                        flag1 = self.update_pinhole_smear() 
    13271334                        flag = flag or flag1 
    1328                 elif self.data.__class__.__name__ != "Data2D" and \ 
    1329                         not self.enable2D: 
     1335                elif not isinstance(self.data, Data2D) and not self.enable2D: 
    13301336                    enable_smearer = not self.disable_smearer.GetValue() 
    13311337                    self._manager.set_smearer(smearer=temp_smearer, 
     
    14001406        if event is not None: 
    14011407            event.Skip() 
    1402         if self.data.__class__.__name__ == "Data2D": 
     1408        if isinstance(self.data, Data2D): 
    14031409            return 
    14041410        is_click = event.LeftDown() 
     
    14181424        if event is not None: 
    14191425            event.Skip() 
    1420         if self.data.__class__.__name__ == "Data2D": 
     1426        if isinstance(self.data, Data2D): 
    14211427            return 
    14221428        act_ctrl = event.GetEventObject() 
     
    14341440        """ 
    14351441        event.Skip() 
    1436         if self.data.__class__.__name__ == "Data2D": 
     1442        if isinstance(self.data, Data2D): 
    14371443            return 
    14381444        ctrl = event.GetEventObject() 
     
    14951501            # Check if # of points for theory model are valid(>0). 
    14961502            # check for 2d 
    1497             if self.data.__class__.__name__ == "Data2D" or \ 
    1498                     self.enable2D: 
     1503            if isinstance(self.data, Data2D) or self.enable2D: 
    14991504                # set mask 
    15001505                radius = np.sqrt(self.data.qx_data * self.data.qx_data + 
     
    15481553                if item[0].IsShown(): 
    15491554                    # Skip the angle parameters if 1D data 
    1550                     if self.data.__class__.__name__ != "Data2D" and \ 
    1551                             not self.enable2D: 
     1555                    if not isinstance(self.data, Data2D) and not self.enable2D: 
    15521556                        if item in self.orientation_params: 
    15531557                            continue 
     
    15671571                if item[0].IsShown(): 
    15681572                    # Skip the angle parameters if 1D data 
    1569                     if self.data.__class__.__name__ != "Data2D" and \ 
    1570                             not self.enable2D: 
     1573                    if not isinstance(self.data, Data2D) and not self.enable2D: 
    15711574                        if item in self.orientation_params: 
    15721575                            continue 
     
    16001603 
    16011604        :return: self.smear_type, self.dq_l and self.dq_r, 
    1602             respectively the type of the smear, dq_min and 
    1603             dq_max for pinhole smear data 
    1604             while dxl and dxw for slit smear 
    1605         """ 
    1606         # default 
     1605            respectively the type of the smear, The average <dq/q> radial(p) 
     1606            and <dq/q> theta (s)s for 2D pinhole resolution in % (slit is not 
     1607            currently supported in 2D), (dq/q)_min and (dq/q)_max for 1D pinhole 
     1608            smeared data, again in %, and dxl and/or dxw for slit smeared data 
     1609            given in 1/A and assumed constant. 
     1610        """ 
     1611        # set up defaults 
    16071612        self.smear_type = None 
    16081613        self.dq_l = None 
    16091614        self.dq_r = None 
    16101615        data = self.data 
     1616        #sanity check - this should only be called if data exits 
    16111617        if self.data is None: 
    16121618            return 
    1613         elif self.data.__class__.__name__ == "Data2D" or \ 
    1614             self.enable2D: 
    1615             if data.dqx_data is None or data.dqy_data is None: 
    1616                 return 
    1617             elif self.current_smearer is not None \ 
    1618                 and data.dqx_data.any() != 0 \ 
    1619                 and data.dqx_data.any() != 0: 
     1619        #First check if data is 2D 
     1620        #If so check that data set has smearing info and that none are zero. 
     1621        #Otherwise no smearing can be applied using smear from data (a Gaussian 
     1622        #width of zero will cause a divide by zero error) 
     1623        if isinstance(self.data, Data2D): 
     1624            if data.dqx_data is not None and data.dqy_data is not None \ 
     1625              and data.dqx_data.all()and data.dqy_data.all(): 
    16201626                self.smear_type = "Pinhole2d" 
    1621                 self.dq_l = format_number(np.average(data.dqx_data)) 
    1622                 self.dq_r = format_number(np.average(data.dqy_data)) 
    1623                 return 
     1627                #report as average dQ/Q % as for 1D pinhole 
     1628                self.dq_l = format_number(np.average(data.dqx_data 
     1629                                                     / abs(data.qx_data)) * 100) 
     1630                self.dq_r = format_number(np.average(data.dqy_data 
     1631                                                     / abs(data.qy_data)) * 100) 
     1632            #if not then log that data did not contain resolutin info                                         / abs(data.qy_data)) * 100) 
    16241633            else: 
    1625                 return 
    1626         # check if it is pinhole smear and get min max if it is. 
    1627         if data.dx is not None and np.any(data.dx): 
    1628             self.smear_type = "Pinhole" 
    1629             self.dq_l = data.dx[0] 
    1630             self.dq_r = data.dx[-1] 
    1631  
    1632         # check if it is slit smear and get min max if it is. 
    1633         elif data.dxl is not None or data.dxw is not None: 
    1634             self.smear_type = "Slit" 
    1635             if data.dxl is not None and np.all(data.dxl, 0): 
    1636                 self.dq_l = data.dxl[0] 
    1637             if data.dxw is not None and np.all(data.dxw, 0): 
    1638                 self.dq_r = data.dxw[0] 
     1634                self.msg = "2D Data did not contain recognizable " \ 
     1635                           "resolution info." 
     1636                logger.info(self.msg) 
     1637        #If not check that data is 1D 
     1638        #If so check for pinhole vs slit by veryfing whehter dx or dxl or dxw 
     1639        #have data (currently sasview only supports either dx or dxl/dxw but 
     1640        #not both simultaneously) and, as for 2D, are non zero . 
     1641        #Otherwise no smearing can be applied using smear from data (a Gaussian 
     1642        #width of zero will cause a divide by zero error) 
     1643        elif isinstance(self.data, Data1D): 
     1644            #is it valid 1D pinhole resolution data? 
     1645            if data.dx is not None and np.all(data.dx): 
     1646                self.smear_type = "Pinhole" 
     1647                #report in % for display makes more sense than absolute value 
     1648                #for pinhole smearing .. but keep old names of dq_l 
     1649                self.dq_l = format_number(data.dx[0] / data.x[0] * 100,1) 
     1650                self.dq_r = format_number(data.dx[-1] / data.x[-1] * 100,1) 
     1651            #If not, is it valid 1D slit resolution data? 
     1652            elif (data.dxl is not None or data.dxw is not None) \ 
     1653                and (np.all(data.dxl, 0) or np.all(data.dxw, 0)): 
     1654                self.smear_type = "Slit" 
     1655                #for slit units of 1/A make most sense 
     1656                if data.dxl is not None and np.all(data.dxl, 0): 
     1657                    self.dq_l = format_number(data.dxl[0],1) 
     1658                if data.dxw is not None and np.all(data.dxw, 0): 
     1659                    self.dq_r = format_number(data.dxw[0],1) 
     1660            #otherwise log that the data did not conatain resolution info 
     1661            else: 
     1662                self.msg = "1D Data did not contain recognizable " \ 
     1663                           "resolution info." 
     1664                logger.info(self.msg) 
     1665        #If drops to here it is neither data1D or data2D so log that 
     1666        else: 
     1667            self.msg = "Data was not recognized as either 1D or 2D data." 
     1668            logger.info(self.msg) 
    16391669        # return self.smear_type,self.dq_l,self.dq_r 
    16401670 
     
    16431673        Show only the sizers depending on smear selection 
    16441674        """ 
    1645         # smear disabled 
     1675        # smear disabled = No Smearing used 
    16461676        if self.disable_smearer.GetValue(): 
    16471677            self.smear_description_none.Show(True) 
    1648         # 2Dsmear 
     1678        # 2Dsmearing - for use with 2D data only 
    16491679        elif self._is_2D(): 
    16501680            self.smear_description_accuracy_type.Show(True) 
    16511681            self.smear_accuracy.Show(True) 
    1652             self.smear_description_accuracy_type.Show(True) 
    16531682            self.smear_description_2d.Show(True) 
    1654             self.smear_description_2d_x.Show(True) 
    1655             self.smear_description_2d_y.Show(True) 
     1683            #2D custom pinhole smearing 
    16561684            if self.pinhole_smearer.GetValue(): 
     1685                self.smear_description_pin_percent.Show(True) 
    16571686                self.smear_pinhole_percent.Show(True) 
    1658         # smear from data 
     1687            #get 2D smearing from data 
     1688            elif self.enable_smearer.GetValue(): 
     1689                self.smear_description_2d_x.Show(True) 
     1690                self.smear_description_2d_y.Show(True) 
     1691                self.smear_data_left.Show(True) 
     1692                self.smear_data_right.Show(True) 
     1693            #Currently 2D custom slit smearing is not currently supported 
     1694            else: 
     1695                logger.error("2D custom smearing cannot use slit smearing") 
     1696 
     1697        # 1D smearing from data 
    16591698        elif self.enable_smearer.GetValue(): 
    1660  
    16611699            self.smear_description_dqdata.Show(True) 
    16621700            if self.smear_type is not None: 
    16631701                self.smear_description_smear_type.Show(True) 
     1702                #1D data has slit smearing 
    16641703                if self.smear_type == 'Slit': 
    16651704                    self.smear_description_slit_height.Show(True) 
    16661705                    self.smear_description_slit_width.Show(True) 
     1706                #1D data has pinhole smearing 
    16671707                elif self.smear_type == 'Pinhole': 
    1668                     self.smear_description_pin_percent.Show(True) 
     1708                    self.smear_description_pin_percent_min.Show(True) 
     1709                    self.smear_description_pin_percent_max.Show(True) 
    16691710                self.smear_description_smear_type.Show(True) 
    16701711                self.smear_description_type.Show(True) 
    16711712                self.smear_data_left.Show(True) 
    16721713                self.smear_data_right.Show(True) 
    1673         # custom pinhole smear 
     1714        # 1D custom pinhole smearing 
    16741715        elif self.pinhole_smearer.GetValue(): 
    1675             if self.smear_type == 'Pinhole': 
    1676                 self.smear_message_new_p.Show(True) 
    1677                 self.smear_description_pin_percent.Show(True) 
    1678  
     1716            self.smear_message_new_p.Show(True) 
     1717            self.smear_description_pin_percent.Show(True) 
    16791718            self.smear_pinhole_percent.Show(True) 
    1680         # custom slit smear 
     1719        # 1D custom slit smear 
    16811720        elif self.slit_smearer.GetValue(): 
    16821721            self.smear_message_new_s.Show(True) 
     
    16851724            self.smear_description_slit_width.Show(True) 
    16861725            self.smear_slit_width.Show(True) 
     1726        else: 
     1727            logger.error("smearing type is not defined") 
    16871728 
    16881729    def _hide_all_smear_info(self): 
     
    17021743        self.smear_data_left.Hide() 
    17031744        self.smear_data_right.Hide() 
     1745        self.smear_description_pin_percent_min.Hide() 
     1746        self.smear_description_pin_percent_max.Hide() 
    17041747        self.smear_description_pin_percent.Hide() 
    17051748        self.smear_pinhole_percent.Hide() 
     
    19191962            di_flag = False 
    19201963            dq_flag = False 
    1921             if self.data.__class__.__name__ == "Data2D" or \ 
    1922                         self.enable2D: 
     1964            if isinstance(self.data, Data2D) or self.enable2D: 
    19231965                self.slit_smearer.Disable() 
    19241966                self.pinhole_smearer.Enable(True) 
     
    20052047        # update model plot with new data information 
    20062048        if flag: 
    2007             if self.data.__class__.__name__ == "Data2D": 
     2049            if isinstance(self.data, Data2D): 
    20082050                self.enable2D = True 
    20092051                self.model_view.SetLabel("2D Mode") 
     
    20722114        npts2fit = 0 
    20732115        qmin, qmax = self.get_range() 
    2074         if self.data.__class__.__name__ == "Data2D" or \ 
    2075                         self.enable2D: 
     2116        if isinstance(self.data, Data2D) or self.enable2D: 
    20762117            radius = np.sqrt(self.data.qx_data * self.data.qx_data + 
    20772118                                self.data.qy_data * self.data.qy_data) 
     
    24632504            of the values entered for slit smear 
    24642505        """ 
    2465         if self.data.__class__.__name__ == "Data2D" or self.enable2D: 
     2506        if isinstance(self.data, Data2D) or self.enable2D: 
    24662507            return 
    24672508        # make sure once more if it is smearer 
     
    26592700        for item in self.parameters: 
    26602701            # Skip t ifhe angle parameters if 1D data 
    2661             if self.data.__class__.__name__ != "Data2D" and\ 
    2662                         not self.enable2D: 
     2702            if not isinstance(self.data, Data2D) and not self.enable2D: 
    26632703                if item in self.orientation_params: 
    26642704                    continue 
     
    26762716        for item in self.fittable_param: 
    26772717            # Skip t ifhe angle parameters if 1D data 
    2678             if self.data.__class__.__name__ != "Data2D" and\ 
    2679                         not self.enable2D: 
     2718            if not isinstance(self.data, Data2D) and not self.enable2D: 
    26802719                if item in self.orientation_params: 
    26812720                    continue 
     
    26892728 
    26902729        # Calculate num. of angle parameters 
    2691         if self.data.__class__.__name__ == "Data2D" or \ 
    2692                        self.enable2D: 
     2730        if isinstance(self.data, Data2D) or self.enable2D: 
    26932731            len_orient_para = 0 
    26942732        else: 
     
    29833021                if not self._has_magnetic: 
    29843022                    mag_on_button.Show(False) 
    2985                 elif not self.data.__class__.__name__ == "Data2D": 
     3023                elif not isinstance(self.data, Data2D): 
    29863024                    mag_on_button.Show(False) 
    29873025                else: 
     
    29993037                        mag_angle_help_button.Show(False) 
    30003038 
    3001                 if not self.data.__class__.__name__ == "Data2D" and \ 
    3002                         not self.enable2D: 
     3039                if not isinstance(self.data, Data2D) and not self.enable2D: 
    30033040                    orient_angle.Hide() 
    30043041                else: 
     
    30243061                    cb.SetToolTipString("Check mark to fit") 
    30253062                    wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 
    3026                     if self.data.__class__.__name__ == "Data2D" or \ 
    3027                             self.enable2D: 
     3063                    if isinstance(self.data, Data2D) or self.enable2D: 
    30283064                        cb.Show(True) 
    30293065                    else: 
     
    30403076                                "Hit 'Enter' after typing to update the plot.") 
    30413077                    ctl1.SetValue(format_number(value, True)) 
    3042                     if self.data.__class__.__name__ == "Data2D" or \ 
    3043                             self.enable2D: 
     3078                    if isinstance(self.data, Data2D) or self.enable2D: 
    30443079                        ctl1.Show(True) 
    30453080                    else: 
     
    30813116                    ctl4.Hide() 
    30823117 
    3083                     if self.data.__class__.__name__ == "Data2D" or \ 
    3084                             self.enable2D: 
     3118                    if isinstance(self.data, Data2D) or self.enable2D: 
    30853119                        if self.is_mac: 
    30863120                            text2.Show(True) 
     
    30983132                        units = wx.StaticText(self, -1, "", 
    30993133                                              style=wx.ALIGN_LEFT) 
    3100                     if self.data.__class__.__name__ == "Data2D" or \ 
    3101                             self.enable2D: 
     3134                    if isinstance(self.data, Data2D) or self.enable2D: 
    31023135                        units.Show(True) 
    31033136                    else: 
     
    31783211        """ 
    31793212        # more disables for 2D 
    3180         if self.data.__class__.__name__ == "Data2D" or \ 
    3181                     self.enable2D: 
     3213        if isinstance(self.data, Data2D) or self.enable2D: 
    31823214            self.slit_smearer.Disable() 
    3183             self.pinhole_smearer.Enable(True) 
    31843215            self.default_mask = copy.deepcopy(self.data.mask) 
    3185         else: 
    3186             self.slit_smearer.Enable(True) 
    3187             self.pinhole_smearer.Enable(True) 
     3216            if self.model is not None: 
     3217                self.pinhole_smearer.Enable(True) 
     3218 
     3219        elif isinstance(self.data, Data1D): 
     3220            if self.model is not None: 
     3221                self.slit_smearer.Enable(True) 
     3222                self.pinhole_smearer.Enable(True) 
     3223        else: 
     3224            msg="data is not recognized as either 1D or 2D" 
     3225            logger.info(msg) 
    31883226 
    31893227 
Note: See TracChangeset for help on using the changeset viewer.