code: def Tukeythreegene(first, second, third):
      # Performing the Tukey HSD post-hoc test for three genes
      # qwb = xlrd.open_workbook('F:/Lab/bioinformatics/qcrittable.xls')
      # #opening the workbook containing the q crit table
      # qwb.sheet_names()
      # qcrittable = qwb.sheet_by_name(u'Sheet1')
  
      # means of the three arrays
      firstmean = np.mean(first)
      secondmean = np.mean(second)
      thirdmean = np.mean(third)
  
      # standard deviations of the threearrays
      firststd = np.std(first)
      secondstd = np.std(second)
      thirdstd = np.std(third)
  
      # standard deviation squared of the three arrays
      firsts2 = math.pow(firststd, 2)
      seconds2 = math.pow(secondstd, 2)
      thirds2 = math.pow(thirdstd, 2)
  
      # numerator for mean square error
      mserrornum = firsts2 * 2 + seconds2 * 2 + thirds2 * 2
      # denominator for mean square error
      mserrorden = (len(first) + len(second) + len(third)) - 3
      mserror = mserrornum / mserrorden  # mean square error
  
      standarderror = math.sqrt(mserror / len(first))
      # standard error, which is square root of mserror and
      # the number of samples in a group
  
      # various degrees of freedom
      dftotal = len(first) + len(second) + len(third) - 1
      dfgroups = 2
      dferror = dftotal - dfgroups  # noqa: F841
  
      qcrit = 0.5  # fix arbitrary#qcrittable.cell(dftotal, 3).value
      qcrit = get_tukeyQcrit(3, dftotal, alpha=0.05)
      # getting the q critical value, for degrees of freedom total and 3 groups
  
      qtest3to1 = (math.fabs(thirdmean - firstmean)) / standarderror
      # calculating q test statistic values
      qtest3to2 = (math.fabs(thirdmean - secondmean)) / standarderror
      qtest2to1 = (math.fabs(secondmean - firstmean)) / standarderror
  
      conclusion = []
  
      # print(qcrit
      print(qtest3to1)
      print(qtest3to2)
      print(qtest2to1)
  
      # testing all q test statistic values to q critical values
      if qtest3to1 > qcrit:
          conclusion.append("3to1null")
      else:
          conclusion.append("3to1alt")
      if qtest3to2 > qcrit:
          conclusion.append("3to2null")
      else:
          conclusion.append("3to2alt")
      if qtest2to1 > qcrit:
          conclusion.append("2to1null")
      else:
          conclusion.append("2to1alt")
  
      return conclusion
  
imports: from collections import namedtuple
  from statsmodels.compat.python import lzip, lrange
  import copy
  import math
  import numpy
  from numpy.testing import assert_almost_equal, assert_equal
  from scipy import stats, interpolate
  from statsmodels.iolib.table import SimpleTable
  from statsmodels.stats.multitest import multipletests, _ecdf, fdrcorrection, fdrcorrection_twostage
  from statsmodels.graphics import utils
  from statsmodels.tools.sm_exceptions import ValueWarning
label_desc: Use image node_id 4 for calling a global function with example usage: Tukeythreegene(first, second, third) and returns: conclusion