def run(self):
        if (self.RUN_READER):
            read = Reader()
            read.execute(self.BASE_PATH, self.READER_TYPES, self.BASE_SUBJECTS)

        if (self.RUN_EXTRACTOR):
            extract = Extractor()
            extract.execute(self.BASE_PATH, self.BASE_WINDOW,
                            self.WINDOW_OVERLAP, self.BASE_SUBJECTS)

        if (self.RUN_SELECTOR):
            selection_results = {}
            select = Selector()
            for st in self.SELECTOR_SELECTION_TYPE:
                for sig in self.SELECTOR_SIGNALS:
                    selection_results[sig] = []
                    selection_results[sig] = select.execute(
                        self.BASE_PATH, sig, self.BASE_SUBJECTS,
                        self.BASE_WINDOW, self.WINDOW_OVERLAP, st,
                        self.SELECTOR_ALL_SIGNS)
                    if (self.SELECTOR_ALL_SIGNS):
                        break
                print('Results = ', st)
                print('RATIO, STD')
                print(selection_results)

        if (self.RUN_CLASSIFIER):
            # self.one_classifier_and_decision('lda', 8)
            # self.one_classifier_and_decision('', 9)
            self.individual('ecg', 'pca', 1)
            # self.individual('ecg', 'lda', 2)
            # self.individual('ecg', '', 3)
            self.individual('eda', 'pca', 1)
            # self.individual('eda', 'lda', 2)
            # self.individual('eda', '', 3)
            # self.individual('emg', 'pca', 1)
            # self.individual('emg', 'lda', 2)
            # self.individual('emg', '', 3)
            self.individual('resp', 'pca', 1)
            # self.individual('resp', 'lda', 2)
            # self.individual('resp', '', 3)
            self.todos('pca', 4)
            # self.todos('lda', 5)
            # self.todos('', 6)

            self.one_classifier_and_decision('pca', 7)
        i = 0
        for i in range(len(variances[0])):
            new_variances.insert(i, [])
            for v in variances:
                new_variances[i].extend([v[i]])

        variance = []
        i = 0
        for i in range(len(new_variances)):
            variance.insert(i, [])
            variance[i].extend(
                [np.mean(new_variances[i]),
                 np.std(new_variances[i])])

        return variance


from selector import Selector

if __name__ == '__main__':
    subjects = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17]
    base_path = '/Volumes/My Passport/TCC/WESAD2/'
    signal = 'ecg'
    selection_type = 'lda'
    window = 20
    window_overlap = True
    with_all_signals = False
    select = Selector()
    variance = select.execute(base_path, signal, subjects, window,
                              window_overlap, selection_type, with_all_signals)
    print(variance)