def METHOD_NAME(self, sourcePFN, targetPFN, options=None, checksums=None):
    """
    _createStageOutCommand_
    Build an srmcp command
    srmcp options used (so hard to find documentation for it...):
      -2                enables srm protocol version 2
      -report           path to the report file
      -retry_num        number of retries before before client gives up
      -request_lifetime request lifetime in seconds
    """
    result = "#!/bin/sh\n"
    result += "REPORT_FILE=`pwd`/srm.report.$$\n"
    result += "srmcp -2 -report=$REPORT_FILE -retry_num=0 -request_lifetime=2400"
    if options != None:
        result += " %s " % options
    result += " %s " % sourcePFN
    result += " %s" % targetPFN
    result += " 2>&1 | tee srm.output.$$ \n"
    if _CheckExitCodeOption:
        result += """
        EXIT_STATUS=`cat $REPORT_FILE | cut -f3 -d" "`
        echo "srmcp exit status: $EXIT_STATUS"
        if [[ "X$EXIT_STATUS" == "X" ]] && [[ `grep -c SRM_INVALID_PATH srm.output.$$` != 0 ]]; then
            echo "ERROR: srmcp failed with SRM_INVALID_PATH"
            exit 1   # dir does not exist
        elif [[ $EXIT_STATUS != 0 ]]; then
           echo "ERROR: srmcp exited with $EXIT_STATUS"
           echo "Cleaning up failed file:"
           %s
           exit $EXIT_STATUS
        fi
        """ % self.createRemoveFileCommand(targetPFN)
    if self.stageIn:
        remotePFN, localPFN = sourcePFN, targetPFN.replace("file://", "", 1)
    else:
        remotePFN, localPFN = targetPFN, sourcePFN.replace("file://", "", 1)
    remotePath = None
    SFN = '?SFN='
    sfn_idx = remotePFN.find(SFN)
    if sfn_idx >= 0:
        remotePath = remotePFN[sfn_idx + 5:]
    r = re.compile('srm://([A-Za-z\-\.0-9]*)(:[0-9]*)?(/.*)')
    m = r.match(remotePFN)
    if not m:
        raise StageOutError("Unable to determine path from PFN for " \
                            "target %s." % remotePFN)
    if remotePath == None:
        remotePath = m.groups()[2]
    remoteHost = m.groups()[0]
    result += "FILE_SIZE=`stat -c %s"
    result += " %s `\n" % localPFN
    result += "echo \"Local File Size is: $FILE_SIZE\"\n"
    metadataCheck = \
        """
        SRM_OUTPUT=`srmls -recursion_depth=0 -retry_num=1 %s 2>/dev/null`
        SRM_SIZE=`echo $SRM_OUTPUT | grep '%s' | grep -v '%s' | awk '{print $1;}'`
        echo "SRM Size is $SRM_SIZE"
        if [[ $SRM_SIZE == $FILE_SIZE ]]; then
           exit 0
        else
           echo $SRM_OUTPUT
           echo "ERROR: Size Mismatch between local and SE. Cleaning up failed file..."
           %s
           exit 60311
        fi
        """ % (remotePFN, remotePath, remoteHost, self.createRemoveFileCommand(targetPFN))
    result += metadataCheck
    return result