def __init__(self, parent, phil=None):
        BasePanel.__init__(self, parent=parent)

        self.regenerate_params(phil)

        # Title box
        self.project_title = ct.InputCtrl(self,
                                          label='Project Title: ',
                                          label_size=(140, -1))
        # Output file box
        self.out_box = ct.InputCtrl(self,
                                    label='Project folder: ',
                                    label_size=(140, -1),
                                    label_style='bold',
                                    value=os.path.abspath(os.curdir),
                                    buttons=True)
        # Input file box
        self.inp_box = FileListCtrl(self)

        # Options
        opt_box = wx.FlexGridSizer(2, 3, 10, 10)
        self.opt_chk_useref = wx.CheckBox(self,
                                          label='Use reference in refinement')
        self.opt_chk_useref.Disable()
        self.opt_spc_nres = ct.SpinCtrl(self,
                                        label='No. of Residues: ',
                                        label_size=(160, -1),
                                        ctrl_size=(100, -1),
                                        ctrl_value=500,
                                        ctrl_min=10,
                                        ctrl_max=100000)
        procs = multiprocessing.cpu_count()
        self.opt_spc_nproc = ct.SpinCtrl(self,
                                         label='No. of Processors: ',
                                         label_size=(160, -1),
                                         ctrl_max=procs,
                                         ctrl_min=1,
                                         ctrl_value=str(int(procs / 2)))
        self.opt_btn = wx.Button(self, label='Advanced Options...')
        opt_box.AddMany([(self.opt_chk_useref), (0, 0), (self.opt_spc_nres),
                         (self.opt_btn), (0, 0), (self.opt_spc_nproc)])
        opt_box.AddGrowableCol(1)

        # Add to sizers
        self.main_sizer.Add(self.project_title, flag=f.expand, border=10)
        self.main_sizer.Add(self.out_box, flag=f.expand, border=10)
        self.main_sizer.Add(self.inp_box,
                            1,
                            flag=wx.EXPAND | wx.ALL,
                            border=10)
        self.main_sizer.Add(wx.StaticLine(self), flag=wx.EXPAND)
        self.main_sizer.Add(opt_box, flag=wx.ALL | wx.EXPAND, border=10)

        # Button bindings
        self.out_box.btn_browse.Bind(wx.EVT_BUTTON, self.onOutputBrowse)
        self.opt_btn.Bind(wx.EVT_BUTTON, self.onAdvancedOptions)
    def __init__(self, parent):
        BasePanel.__init__(self, parent=parent)

        self.parent = parent
        self.img_filename = None
        self.input_phil = None
        self.sparams = None
        self.coord_filename = None
        self.mtz_filename = None
        self.stol_filename = None
        self.ref_img_filename = None
        self.dblclick = False

        self.project_folder = ct.InputCtrl(self,
                                           label='Project Folder: ',
                                           label_size=(150, -1),
                                           label_style='bold',
                                           value=os.path.abspath(os.curdir),
                                           buttons=True)

        self.project_title = ct.InputCtrl(self,
                                          label='Description',
                                          label_size=(150, -1),
                                          label_style='normal')

        self.splitter = wx.SplitterWindow(self,
                                          style=wx.SP_LIVE_UPDATE
                                          | wx.SP_3DSASH | wx.SP_NOBORDER)
        self.file_panel = wx.Panel(self.splitter, size=(-1, 200))
        self.file_sizer = wx.BoxSizer(wx.VERTICAL)
        self.file_panel.SetSizer(self.file_sizer)
        self.preview_panel = wx.Panel(self.splitter, size=(-1, 500))
        self.preview_sizer = wx.BoxSizer(wx.VERTICAL)
        self.preview_panel.SetSizer(self.preview_sizer)
        self.splitter.SplitHorizontally(self.file_panel, self.preview_panel,
                                        200)

        self.input = FileListCtrl(self.file_panel)
        self.file_sizer.Add(self.input, 1, flag=wx.ALL | wx.EXPAND, border=10)

        # Image preview box w/ options
        prev_box = wx.GridBagSizer(5, 15)

        # self.opt_knb_start = ct.KnobCtrl(self.preview_panel,
        #                                  label='start',
        #                                  label_size=(40, -1),
        #                                  spin_ctr_size=(50, -1),
        #                                  knob_size=(120, 120),
        #                                  values_start=0,
        #                                  values_end=360,
        #                                  values_step=1,
        #                                  value=0)
        #
        # self.opt_knb_end = ct.KnobCtrl(self.preview_panel,
        #                                label='end',
        #                                label_size=(40, -1),
        #                                spin_ctr_size=(50, -1),
        #                                knob_size=(120, 120),
        #                                values_start=0,
        #                                values_end=360,
        #                                values_step=1,
        #                                value=360)

        self.opt_spc_start = ct.SpinCtrl(self.preview_panel,
                                         label='start:',
                                         label_size=(50, -1),
                                         ctrl_size=(60, -1),
                                         ctrl_value='0',
                                         ctrl_max=360,
                                         ctrl_min=0,
                                         ctrl_step=0.1,
                                         ctrl_digits=1)

        self.opt_spc_end = ct.SpinCtrl(self.preview_panel,
                                       label='finish:',
                                       label_size=(50, -1),
                                       ctrl_size=(60, -1),
                                       ctrl_value='360',
                                       ctrl_max=360,
                                       ctrl_min=0,
                                       ctrl_step=0.1,
                                       ctrl_digits=1)

        self.opt_spc_osc = ct.SpinCtrl(self.preview_panel,
                                       label='step:',
                                       label_size=(50, -1),
                                       ctrl_size=(60, -1),
                                       ctrl_value='1.0',
                                       ctrl_max=360,
                                       ctrl_min=0,
                                       ctrl_step=0.1,
                                       ctrl_digits=2)

        self.opt_btn_prev = wx.Button(self.preview_panel,
                                      label='PREVIEW IMAGE')

        self.opt_chk_bkg = wx.CheckBox(self.preview_panel,
                                       label='Add Background')
        self.opt_chk_bkg.SetValue(True)
        self.opt_chk_noise = wx.CheckBox(self.preview_panel, label='Add Noise')
        self.opt_chk_noise.SetValue(True)
        self.opt_chk_rand = wx.CheckBox(self.preview_panel,
                                        label='Randomize Orientation')
        self.opt_chk_rand.SetValue(True)

        self.opt_spc_scale = ct.SpinCtrl(self.preview_panel,
                                         label='Crystal size (um): ',
                                         label_size=(120, -1),
                                         ctrl_size=(100, -1),
                                         ctrl_min=1,
                                         ctrl_max=1000,
                                         ctrl_step=1,
                                         ctrl_value=30)

        self.img_figure = Figure(figsize=(3, 3))
        self.img_axes = self.img_figure.add_subplot(111)

        self.img_axes.set_frame_on(False)
        self.img_axes.axis('off')
        self.img_axes.set_aspect('equal')

        self.img_figure.patch.set_visible(False)
        self.img_canvas = FigureCanvas(self.preview_panel, -1, self.img_figure)

        prev_box.Add(self.opt_spc_start, pos=(0, 0))
        prev_box.Add(self.opt_spc_end, pos=(0, 1))
        prev_box.Add(self.opt_spc_osc, pos=(1, 0))
        prev_box.Add(self.opt_chk_bkg, flag=wx.EXPAND, pos=(4, 0), span=(1, 2))
        prev_box.Add(self.opt_chk_noise,
                     flag=wx.EXPAND,
                     pos=(5, 0),
                     span=(1, 2))
        prev_box.Add(self.opt_chk_rand,
                     flag=wx.EXPAND,
                     pos=(6, 0),
                     span=(1, 2))
        prev_box.Add(self.opt_spc_scale,
                     flag=wx.EXPAND,
                     pos=(7, 0),
                     span=(1, 2))
        prev_box.Add(self.opt_btn_prev,
                     flag=wx.EXPAND,
                     pos=(8, 0),
                     span=(1, 2))
        prev_box.Add(self.img_canvas, pos=(0, 2), span=(9, 1), flag=wx.EXPAND)
        prev_box.AddGrowableCol(2)
        prev_box.AddGrowableRow(8)

        self.preview_sizer.Add(prev_box, 1, flag=wx.EXPAND | wx.ALL, border=10)

        self.main_sizer.Add(self.project_title,
                            flag=wx.EXPAND | wx.ALL,
                            border=10)
        self.main_sizer.Add(self.project_folder,
                            flag=wx.EXPAND | wx.ALL,
                            border=10)
        self.main_sizer.Add(self.splitter, 1, flag=wx.EXPAND)

        # Button bindings
        self.Bind(wx.EVT_BUTTON, self.onRunPreview, self.opt_btn_prev)

        # Thread bindings
        self.Bind(thr.EVT_NBDONE, self.onFinishedSimThread)

        # Image bindings
        xid = self.img_canvas.mpl_connect('button_press_event',
                                          self.on_button_press)
        xid = self.img_canvas.mpl_connect('button_release_event',
                                          self.on_button_release)