def METHOD_NAME(file_name, translate, filters = None):
  """ Method to extract keys from root file and return dict """
  ROOT.gROOT.Reset()
  run_number = None
  result = {}
  f = ROOT.TFile(file_name, 'READ')
  root = f.GetDirectory("DQMData")
  if root == None: return (run_number, result)
  run = None
  for key in root.GetListOfKeys():
    if re.match("^Run [0-9]+$", key.ReadObj().GetName()) and key.IsFolder():
      run_number = int(re.sub("^Run ", "", key.ReadObj().GetName()))
      run = key.ReadObj()
      break
  if run == None: return (run_number, result)
  for sub in run.GetListOfKeys():
    sub_name = sub.ReadObj().GetName()
    if sub_name not in SUBSYSTEMS: continue
    sub_key = sub_name
    if translate:
      sub_key = SUBSYSTEMS[sub_name]
    if filters != None:
      if not re.match(filters[0], sub_key):
        continue
    if sub_key not in result:
      result[sub_key] = {}
    evInfo = sub.ReadObj().GetDirectory("Run summary/EventInfo")
    if evInfo == None: continue
    for folder_name in FOLDERS.keys():
      folder = evInfo.GetDirectory(folder_name)
      if folder == None: continue
      folder_id = folder_name
      if translate:
        folder_id = FOLDERS[folder_name][0]
      if filters != None:
        if not re.match(filters[1], folder_id):
          continue
      if folder_id not in result[sub_key]:
        result[sub_key][folder_id] = {}
      value_filter = None
      if filters != None:
        value_filter = filters[2]
      writeValues(folder, result[sub_key][folder_id], None, value_filter)
      writeValues(evInfo, result[sub_key][folder_id], {FOLDERS[folder_name][1]: 'Summary'}, value_filter)
  f.Close()
  return (run_number, result)