<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def gp_xfac():
 """example using QM12 enhancement factors - uses `gpcalls` kwarg to reset xtics - numpy.loadtxt needs reshaping for input files w/ only one datapoint - according poster presentations see QM12_ & NSD_ review .. _QM12: http://indico.cern.ch/getFile.py/access?contribId=268&sessionId=10&resId=0&materialId=slides&confId=181055 .. _NSD: http://rnc.lbl.gov/~xdong/RNC/DirectorReview2012/posters/Huck.pdf .. image:: pics/xfac.png :width: 450 px :ivar key: translates filename into legend/key label :ivar shift: slightly shift selected data points """

  # prepare data
  inDir, outDir = getWorkDirs()
  data = OrderedDict()
  # TODO: "really" reproduce plot using spectral data
  for file in os.listdir(inDir):
    info = os.path.splitext(file)[0].split('_')
    key = ' '.join(info[:2] + [':',
      ' - '.join([
        str(float(s)/1e3) for s in info[-1][:7].split('-')
      ]) + ' GeV'
    ])
    file_url = os.path.join(inDir, file)
    data[key] = np.loadtxt(open(file_url, 'rb')).reshape((-1,5))
    data[key][:, 0] *= shift.get(key, 1)
  logging.debug(data) # shown if --log flag given on command line
  # generate plot
  nSets = len(data)
  make_plot(
    data = data.values(),
    properties = [ getOpts(i) for i in xrange(nSets) ],
    titles = data.keys(), # use data keys as legend titles
    name = os.path.join(outDir, 'xfac'),
    key = [ 'top center', 'maxcols 2', 'width -7', 'font ",20"' ],
    ylabel = 'LMR Enhancement Factor',
    xlabel = '{/Symbol \326}s_{NN} (GeV)',
    yr = [0.5, 6.5], size = '8.5in,8in',
    rmargin = 0.99, tmargin = 0.98, bmargin = 0.14,
    xlog = True, gpcalls = [
      'format x "%g"',
      'xtics (20,"" 30, 40,"" 50, 60,"" 70,"" 80,"" 90, 100, 200)',
      'boxwidth 0.015 absolute'
    ],
    labels = { 'STAR Preliminary': [0.5, 0.5, False] },
    lines = { 'x=1': 'lc 0 lw 4 lt 2' }
  )
  return 'done'