<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def Initialize(self, filename=None, data=None, fd=None, reset=True, must_exist=False, parser=ConfigFileParser):
 """Initializes the config manager. This method is used to add more config options to the manager. The config can be given as one of the parameters as described in the Args section. Args: filename: The name of the configuration file to use. data: The configuration given directly as a long string of data. fd: A file descriptor of a configuration file. reset: If true, the previous configuration will be erased. must_exist: If true the data source must exist and be a valid configuration file, or we raise an exception. parser: The parser class to use (i.e. the format of the file). If not specified guess from the filename. Raises: RuntimeError: No configuration was passed in any of the parameters. ConfigFormatError: Raised when the configuration file is invalid or does not exist.. """

    self.FlushCache()
    if reset:
      # Clear previous configuration.
      self.raw_data = collections.OrderedDict()
      self.writeback_data = collections.OrderedDict()
      self.writeback = None
      self.initialized = False

    if fd is not None:
      self.parser = self.LoadSecondaryConfig(parser=parser(fd=fd))

    elif filename is not None:
      self.parser = self.LoadSecondaryConfig(filename)
      if must_exist and not self.parser.parsed:
        raise ConfigFormatError("Unable to parse config file %s" % filename)

    elif data is not None:
      self.parser = self.LoadSecondaryConfig(parser=parser(data=data))

    elif must_exist:
      raise RuntimeError("Registry path not provided.")

    self.initialized = True