def viewTRIALS(solu):
  lines = ""
  for solNR in xrange(len(solu)):
    known = solu[solNR].KNOWN
    for mr in known:
      euler = mr.getEuler()
      modlid = mr.getModlid()
      lines += "ENSE %s - EULER %8.3f,%8.3f,%8.3f\n" % (modlid,euler[0],euler[1],euler[2])
  lines += "\n"
  return lines


def viewSOLU(solu):
  lines = ""
  solutions = solu[0]
  likelihood = solu[1]
  for solNR in xrange(len(solutions)):
    lines += "Solution #%d:  Likelihood Gain %6.2f\n" % (solNR+1,likelihood[solNR])
    known = solutions[solNR].KNOWN
    for mr in known:
      euler = mr.getEuler()
      modlid = mr.getModlid()
      # GB There is no rot_only solution anymore
      tra = mr.getFracT()
      lines += "ENSE %s - EULER %8.3f,%8.3f,%8.3f - FRAC %8.3f,%8.3f,%8.3f\n" % (modlid,euler[0],euler[1],euler[2],tra[0],tra[1],tra[2])
    lines += "\n"
  lines += "\n"
  return lines

def viewRLIS(solu):
  lines = ""
  rotlist = solu[3]
  count = 1
  for solNR in xrange(len(rotlist)):
    background = rotlist[solNR].KNOWN
    if len(background)>0:
      lines += "Background:\n"
    for mr in background:
      euler = mr.getEuler()
      modlid = mr.getModlid()
      lines += ">>    "
      if mr.getIsRotOnly():
        lines += "ENSE %s - EULER %8.3f,%8.3f,%8.3f\n" % (modlid,euler[0],euler[1],euler[2])
      else:
        tra = mr.getFracT()
        lines += "ENSE %s - EULER %8.3f,%8.3f,%8.3f - FRAC %8.3f,%8.3f,%8.3f\n" % (modlid,euler[0],euler[1],euler[2],tra[0],tra[1],tra[2])
    lines += "Trial angles:\n"
    neo = rotlist[solNR].RLIST
    for mr in neo:
      euler = mr.EULER
      modlid = mr.MODLID
      score = mr.SCORE
      lines += "%3d:  ENSE %s - EULER %8.3f,%8.3f,%8.3f - LLG %6.2f\n" % (count,modlid,euler[0],euler[1],euler[2],score)
      count += 1
    lines += "\n"
  lines += "\n"
  return lines

def viewANY(solu):
  if len(solu)>3:
    lines = viewRLIS(solu)
  else:
    lines = viewSOLU(solu)
  return lines

def viewSD(solDict):
  lines = ""
  keyList = solDict.keys()
  keyList.sort()
  for job in keyList:
    lines += "Job ID: %s\n" % (job)
    lines += "=======================================\n"
    lines += viewANY(solDict[job])
    lines += "\n\n"
  return lines

def logviewer(solution_key,info):
  #Most basic viewer: Only displays logfiles
  from wxGUI import TaskDisplay
  dictLOGS = info.pds.getObject('dictLOGS')
  if not dictLOGS.has_key(solution_key):
    raise "Task not finished running yet!"
  DisplayLIST = ['Summary Log','Verbose Log']
  MethodLIST = [TaskDisplay.DisplayText,TaskDisplay.DisplayText]
  ParameterLIST = [('Summary Logfile', dictLOGS[solution_key][0],'save'),('Verbose Logfile',
  dictLOGS[solution_key][1],'save')]
  TaskDisplay.DisplayChoice('Logfile from job '+solution_key,DisplayLIST,MethodLIST,ParameterLIST)


def viewer(solution_key,info):
  from wxGUI import TaskDisplay
  dictLOGS = info.pds.getObject('dictLOGS')
  dictSOLUTIONS = info.pds.getObject('dictSOLUTIONS')
  try:
    extensionLIST = info.pds.getObject(solution_key+'_pdb_names')
  except:
    extensionLIST = []
  if not dictLOGS.has_key(solution_key):
    #raise "Task not finished running yet!"
    print "\nTask not finished running yet!\n"
    return
  lines = viewANY(dictSOLUTIONS[solution_key])
  DisplayLIST = ['Summary Log','Verbose Log','Solution Viewer']
  MethodLIST = [TaskDisplay.DisplayText,TaskDisplay.DisplayText,TaskDisplay.DisplayText]
  ParameterLIST = [('Summary Logfile', dictLOGS[solution_key][0],'save'),('Verbose Logfile',
  dictLOGS[solution_key][1],'save'),('Solutions from job '+solution_key, lines, 'save')]
  FuncLIST = [{},{},{}]
  for i in xrange(len(extensionLIST)):
    DisplayLIST.append('PDB file '+ solution_key+extensionLIST[i])
    MethodLIST.append(TaskDisplay.DisplayPyMOL)
    #ParameterLIST.append((info,solution_key+extensionLIST[i],'show_pdb'))
    ParameterLIST.append((solution_key+extensionLIST[i],"key",info,))
    FuncLIST.append({'func' : 'show_object'})
  TaskDisplay.DisplayChoice('Logfile from job '+solution_key,DisplayLIST,MethodLIST,ParameterLIST,FuncLIST)

def multiviewer(solutions,info):
  from wxGUI import TaskDisplay
  dictLOGS = info.pds.getObject('dictLOGS')
  dictSOLUTIONS = info.pds.getObject('dictSOLUTIONS')
  extensionLIST = []#info.pds.getObject(solution_key+'_pdb_names')
  lines = ""
  for solution_key in solutions:
    if not dictLOGS.has_key(solution_key):
      print "\nTask not finished running yet!\n"
      return
    lines += viewANY(dictSOLUTIONS[solution_key])
  DisplayLIST = ['Summary Log','Verbose Log','Solution Viewer']
  MethodLIST = [TaskDisplay.DisplayText,TaskDisplay.DisplayText,TaskDisplay.DisplayText]
  ParameterLIST = [('Summary Logfile', dictLOGS[solution_key][0],'save'),('Verbose Logfile',
  dictLOGS[solution_key][1],'save'),('Solutions from job '+solution_key, lines, 'save')]
  for i in xrange(len(extensionLIST)):
    DisplayLIST.append('PDB file '+ solution_key+extensionLIST[i])
    MethodLIST.append(TaskDisplay.DisplayPyMOL)
    ParameterLIST.append((info,solution_key+extensionLIST[i],'show_pdb'))
  TaskDisplay.DisplayChoice('Logfile from job '+solution_key,DisplayLIST,MethodLIST,ParameterLIST)



