def __init__(self, db_path, groups=None, gene_threshold=None,
                 species_threshold=None, project_prefix="MyGroups",
                 ns=None):
        """
        :param groups: A list containing the file names of the multiple
        group files
        :return: Populates the self.multiple_groups attribute
        """

        self.db_path = db_path

        # If a MultiGroups is initialized with duplicate Group objects, their
        # names will be stored in a list. If all Group objects are unique, the
        # list will remain empty
        self.duplicate_groups = []

        self.groups = {}

        self.groups_stats = {}

        # Attribute that will store the paths of badly formated group files
        self.bad_groups = []

        # Initializing thresholds. These may be set from the start, or using
        # some method that uses them as arguments
        self.gene_threshold = gene_threshold
        self.species_threshold = species_threshold

        # Initializing mapping of group filters to their names. Should be
        # something like {"groupA": (1, 10)}
        self.filters = {}

        self.taxa_list = {}
        self.excluded_taxa = {}

        # This attribute will contain a dictionary with the maximum extra copies
        # for each group object
        self.max_extra_copy = {}
        # This attribute will contain a list with the number of species for
        # each group object, excluding replicates. If a MultiGroupLight object
        # contains Group objects with different taxa numbers, this attribute
        # can be used to issue a warning
        self.species_number = []

        self.prefix = project_prefix

        if ns:
            ns.files = len(groups)

        if groups:
            for group_file in groups:
                # If group_file is already a Group object, just add it
                if not isinstance(group_file, GroupLight):
                    try:
                        if ns:
                            if ns.stop:
                                raise KillByUser("")
                            ns.counter += 1
                        group_object = GroupLight(group_file,
                                                  self.gene_threshold,
                                                  self.species_threshold,
                                                  ns=ns)
                    except Exception as e:
                        print(e.message)
                        self.bad_groups.append(group_file)
                        continue
                else:
                    group_object = group_file

                # Check for duplicate group files
                if group_object.name in self.groups:
                    self.duplicate_groups.append(group_file.name)
                else:
                    self.add_group(group_object)