docs: def prepare_dax(self,grid_site=None,tmp_exec_dir='.',peg_frame_cache=None):
      """
      Sets up a pegasus script for the given dag
      """
      dag=self
      log_path=self.__log_file_path
  
      # this function creates the following three files needed by pegasus
      peg_fh = open("pegasus_submit_dax", "w")
      pegprop_fh = open("pegasus.properties", "w")
      sitefile = open( 'sites.xml', 'w' )
  
      # write the default properties
      print >> pegprop_fh, PEGASUS_PROPERTIES % (os.getcwd())
  
      # set up site and dir options for pegasus-submit-dax
      dirs_entry='--relative-dir .'
      if grid_site:
        exec_site=grid_site
        exec_ssite_list = exec_site.split(',')
        for site in exec_ssite_list:
          # if virgo sites are being used, then we don't have a shared fs
          if site == 'nikhef':
            dirs_entry += ' --staging-site nikhef=nikhef-srm'
          else:
            dirs_entry += ' --staging-site %s=%s' % (site,site)
          if site == 'nikhef' or site == 'bologna':
            print >> pegprop_fh, \
  """
  ###############################################################################
  # Data Staging Configuration
  
  # Pegasus will be setup to execute jobs on an execution site without relying
  # on a shared filesystem between the head node and the worker nodes. If this
  # is set, specify staging site ( using --staging-site option to pegasus-plan)
  # to indicate the site to use as a central storage location for a workflow.
  pegasus.data.configuration=nonsharedfs
  
  
  """
      else:
        exec_site='local'
  
      # write the pegasus_submit_dax and make it executable
      print >> peg_fh,PEGASUS_SCRIPT % ( tmp_exec_dir, os.getcwd(),
            dag.get_dax_file().replace('.dax','') + '-0.dag',
            dag.get_dax_file(), dirs_entry, exec_site )
      peg_fh.close()
      os.chmod("pegasus_submit_dax",0755)
  
      # if a frame cache has been specified, write it to the properties
      # however note that this is overridden by the --cache option to pegasus
      if peg_frame_cache:
        print >> pegprop_fh, "pegasus.catalog.replica.file=%s" % (os.path.join(os.getcwd(),os.path.basename(peg_frame_cache)))
      pegprop_fh.close()
  
      # write a shell script that can return the basedir and uber-concrete-dag
      basedir_fh = open("pegasus_basedir", "w")
      print >> basedir_fh, PEGASUS_BASEDIR_SCRIPT % ( tmp_exec_dir, dag.get_dax_file().replace('.dax','') + '-0.dag' )
      basedir_fh.close()
      os.chmod("pegasus_basedir",0755)
  
      # write the site catalog file which is needed by pegasus
      pwd = os.getcwd()
      try:
        hostname = socket.gethostbyaddr(socket.gethostname())[0]
      except:
        hostname = 'localhost'
  
      print >> sitefile, """\
  <?xml version="1.0" encoding="UTF-8"?>
  <sitecatalog xmlns="http://pegasus.isi.edu/schema/sitecatalog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://pegasus.isi.edu/schema/sitecatalog http://pegasus.isi.edu/schema/sc-4.0.xsd" version="4.0">
    <site handle="local" arch="x86_64" os="LINUX">
      <grid type="gt2" contact="%s/jobmanager-fork" scheduler="Fork" jobtype="auxillary" total-nodes="50"/>
      <grid type="gt2" contact="%s/jobmanager-condor" scheduler="Condor" jobtype="compute" total-nodes="50"/>
      <directory  path="%s" type="shared-scratch" free-size="null" total-size="null">
          <file-server  operation="all" url="file://%s">
          </file-server>
      </directory>
      <directory  path="%s" type="shared-storage" free-size="null" total-size="null">
          <file-server  operation="all" url="file://%s">
          </file-server>
      </directory>
      <replica-catalog  type="LRC" url="rlsn://smarty.isi.edu">
      </replica-catalog>
  """ % (hostname,hostname,pwd,pwd,pwd,pwd)
  
      try:
        print >> sitefile, """    <profile namespace="env" key="GLOBUS_LOCATION">%s</profile>""" % os.environ['GLOBUS_LOCATION']
      except:
        pass
      try:
        print >> sitefile, """    <profile namespace="env" key="LD_LIBRARY_PATH">%s</profile>""" % os.environ['LD_LIBRARY_PATH']
      except:
        pass
      try:
        print >> sitefile, """    <profile namespace="env" key="PYTHONPATH">%s</profile>""" % os.environ['PYTHONPATH']
      except:
        pass
      try:
        print >> sitefile, """    <profile namespace="env" key="PEGASUS_HOME">%s</profile>""" % os.environ['PEGASUS_HOME']
      except:
        pass
      try:
        print >> sitefile, """    <profile namespace="env" key="LIGO_DATAFIND_SERVER">%s</profile>""" % os.environ['LIGO_DATAFIND_SERVER']
      except:
        pass
      try:
        print >> sitefile, """    <profile namespace="env" key="S6_SEGMENT_SERVER">%s</profile>""" % os.environ['S6_SEGMENT_SERVER']
      except:
        pass
  
      print >> sitefile, """\
      <profile namespace="env" key="JAVA_HEAPMAX">4096</profile>
      <profile namespace="pegasus" key="style">condor</profile>
      <profile namespace="condor" key="getenv">True</profile>
      <profile namespace="condor" key="should_transfer_files">YES</profile>
      <profile namespace="condor" key="when_to_transfer_output">ON_EXIT_OR_EVICT</profile>
    </site>
  """
  
      print >> sitefile, """\
    <!-- Bologna cluster -->
    <site handle="bologna" arch="x86_64" os="LINUX">
      <grid type="cream" contact="https://ce01-lcg.cr.cnaf.infn.it:8443/ce-cream/services/CREAM2" scheduler="LSF" jobtype="compute" />
      <grid type="cream" contact="https://ce01-lcg.cr.cnaf.infn.it:8443/ce-cream/services/CREAM2" scheduler="LSF" jobtype="auxillary" />
      <directory type="shared-scratch" path="/storage/gpfs_virgo4/virgo4/%s/">
          <file-server operation="all" url="srm://storm-fe-archive.cr.cnaf.infn.it:8444/srm/managerv2?SFN=/virgo4/%s/"/>
      </directory>
      <profile namespace="pegasus" key="style">cream</profile>
      <profile namespace="globus" key="queue">virgo</profile>
    </site>
  """ % (os.path.basename(tmp_exec_dir),os.path.basename(tmp_exec_dir))
  
      print >> sitefile, """\
    <!-- Nikhef Big Grid -->
    <site handle="nikhef" arch="x86_64" os="LINUX">
      <grid type="cream" contact="https://klomp.nikhef.nl:8443/ce-cream/services/CREAM2" scheduler="PBS" jobtype="compute" />
      <grid type="cream" contact="https://klomp.nikhef.nl:8443/ce-cream/services/CREAM2" scheduler="PBS" jobtype="auxillary" />
      <profile namespace="pegasus" key="style">cream</profile>
      <profile namespace="globus" key="queue">medium</profile>
    </site>
    <!-- Nikhef Stage in Site -->
    <site handle="nikhef-srm" arch="x86_64" os="LINUX">
      <directory type="shared-scratch" path="/%s/">
        <file-server operation="all" url="srm://tbn18.nikhef.nl:8446/srm/managerv2?SFN=/dpm/nikhef.nl/home/virgo/%s/" />
      </directory>
    </site>
  """ % (os.path.basename(tmp_exec_dir),os.path.basename(tmp_exec_dir))
  
      try:
        stampede_home = subprocess.check_output(
          ['gsissh','-o','BatchMode=yes','-p','2222','stampede.tacc.xsede.org','pwd'])
        stampede_home = stampede_home.split('/')
        stampede_magic_number = stampede_home[2]
        stampede_username = stampede_home[3]
        shared_scratch = "/work/%s/%s/ihope-workflow/%s" % (
          stampede_magic_number,stampede_username,os.path.basename(tmp_exec_dir))
  
        print >> sitefile, """\
    <!-- XSEDE Stampede Cluster at TACC Development Queue -->
    <site handle="stampede-dev" arch="x86_64" os="LINUX">
       <grid type="gt5" contact="login5.stampede.tacc.utexas.edu/jobmanager-fork" scheduler="Fork" jobtype="auxillary"/>
       <grid type="gt5" contact="login5.stampede.tacc.utexas.edu/jobmanager-slurm" scheduler="unknown" jobtype="compute"/>
       <directory type="shared-scratch" path="%s">
         <file-server operation="all" url="gsiftp://gridftp.stampede.tacc.xsede.org%s"/>
       </directory>
       <profile namespace="env" key="PEGASUS_HOME">/usr</profile>
       <profile namespace="globus" key="queue">development</profile>
       <profile namespace="globus" key="maxwalltime">180</profile>
       <profile namespace="globus" key="host_count">1</profile>
       <profile namespace="globus" key="count">16</profile>
       <profile namespace="globus" key="jobtype">single</profile>
       <profile namespace="globus" key="project">TG-PHY140012</profile>
     </site>
  """ % (shared_scratch,shared_scratch)
  
        print >> sitefile, """\
    <!-- XSEDE Stampede Cluster at TACC Development Queue -->
    <site handle="stampede" arch="x86_64" os="LINUX">
       <grid type="gt5" contact="login5.stampede.tacc.utexas.edu/jobmanager-fork" scheduler="Fork" jobtype="auxillary"/>
       <grid type="gt5" contact="login5.stampede.tacc.utexas.edu/jobmanager-slurm" scheduler="unknown" jobtype="compute"/>
       <directory type="shared-scratch" path="%s">
         <file-server operation="all" url="gsiftp://gridftp.stampede.tacc.xsede.org%s"/>
       </directory>
       <profile namespace="env" key="PEGASUS_HOME">/usr</profile>
       <profile namespace="globus" key="queue">development</profile>
       <profile namespace="globus" key="maxwalltime">540</profile>
       <profile namespace="globus" key="host_count">32</profile>
       <profile namespace="globus" key="count">512</profile>
       <profile namespace="globus" key="jobtype">single</profile>
       <profile namespace="globus" key="project">TG-PHY140012</profile>
     </site>
  """ % (shared_scratch,shared_scratch)
  
      except:
        print >> sitefile, """\
    <!-- XSEDE Stampede Cluster disabled as gsissh to TACC failed-->
  """
  
      print >> sitefile, """\
  </sitecatalog>"""
      sitefile.close()
  
      # Write a help message telling the user how to run the workflow
      print
      print "Created a workflow file which can be submitted by executing"
      print """
  
        ./pegasus_submit_dax
  
      in the analysis directory on a condor submit machine.
  
      From the analysis directory on the condor submit machine, you can run the
      command
  
        pegasus-status --long -t -i `./pegasus_basedir`
  
      to check the status of your workflow. Once the workflow has finished you
      can run the command
  
        pegasus-analyzer -t -i `./pegasus_basedir`
  
      to debug any failed jobs.
      """