def __init__(self, working_directories=None):
        super(Configuration, self).__init__()

        self.img_model = ImgModel()
        self.mask_model = MaskModel()
        self.calibration_model = CalibrationModel(self.img_model)
        self.batch_model = BatchModel(self.calibration_model, self.mask_model)
        self.pattern_model = PatternModel()

        if working_directories is None:
            self.working_directories = {'calibration': '', 'mask': '', 'image': os.path.expanduser("~"), 'pattern': '',
                                        'overlay': '', 'phase': '', 'batch': os.path.expanduser("~")}
        else:
            self.working_directories = working_directories

        self.use_mask = False

        self.transparent_mask = False

        self._integration_rad_points = None
        self._integration_unit = '2th_deg'
        self._oned_azimuth_range = None

        self._cake_azimuth_points = 360
        self._cake_azimuth_range = None

        self._auto_integrate_pattern = True
        self._auto_integrate_cake = False

        self.auto_save_integrated_pattern = False
        self.integrated_patterns_file_formats = ['.xy']

        self.cake_changed = Signal()
        self._connect_signals()