Esempio n. 1
0
def createDefaultRequest(sample_id):
    """
    Doesn't really create a request, just returns a dictionary
    with the default parameters that can be passed to addRequesttoSample().
    But note that these then get overwritten anyway, and I no longer expose them in screen params dialog
    """

    sample = db_lib.getSampleByID(sample_id)
    try:
      propNum = sample["proposalID"]
    except KeyError:
      propNum = 999999
    if (propNum == None):
      propNum = 999999        
    if (propNum != getProposalID()):
      setProposalID(propNum)
    screenPhist = float(db_lib.getBeamlineConfigParam(beamline,"screen_default_phist"))
    screenPhiend = float(db_lib.getBeamlineConfigParam(beamline,"screen_default_phi_end"))
    screenWidth = float(db_lib.getBeamlineConfigParam(beamline,"screen_default_width"))
    screenDist =  float(db_lib.getBeamlineConfigParam(beamline,"screen_default_dist"))
    screenExptime = float(db_lib.getBeamlineConfigParam(beamline,"screen_default_time"))
    screenReso = float(db_lib.getBeamlineConfigParam(beamline,"screen_default_reso"))
    screenWave = float(db_lib.getBeamlineConfigParam(beamline,"screen_default_wave"))
    screenEnergy = float(db_lib.getBeamlineConfigParam(beamline,"screen_default_energy"))
    screenbeamWidth = float(db_lib.getBeamlineConfigParam(beamline,"screen_default_beamWidth"))
    screenbeamHeight = float(db_lib.getBeamlineConfigParam(beamline,"screen_default_beamHeight"))
    screenTransmissionPercent = float(db_lib.getBeamlineConfigParam(beamline,"screen_transmission_percent"))
    sampleName = str(db_lib.getSampleNamebyID(sample_id))
    basePath = os.getcwd()
    runNum = db_lib.getSampleRequestCount(sample_id)
    (puckPosition,samplePositionInContainer,containerID) = db_lib.getCoordsfromSampleID(beamline,sample_id)          
    request = {"sample": sample_id}
    request["beamline"] = beamline
    requestObj = {
               "sample": sample_id,
               "sweep_start": screenPhist,  "sweep_end": screenPhiend,
               "img_width": screenWidth,
               "exposure_time": screenExptime,
               "protocol": "standard",
               "detDist": screenDist,
               "parentReqID": -1,
               "basePath": basePath,
               "file_prefix": sampleName,
               "directory": basePath+"/" + str(getVisitName()) + "/"+sampleName+"/" + str(runNum) + "/" +db_lib.getContainerNameByID(containerID)+"_"+str(samplePositionInContainer+1)+"/",
#               "directory": basePath+"/" + str(getProposalID()) + "/"+sampleName+"/" + str(runNum) + "/" +db_lib.getContainerNameByID(containerID)+"_"+str(samplePositionInContainer+1)+"/",  
               "file_number_start": 1,
               "energy":screenEnergy,
               "wavelength": energy2wave(screenEnergy),
               "resolution": screenReso,
               "slit_height": screenbeamHeight,  "slit_width": screenbeamWidth,
               "attenuation": screenTransmissionPercent,
               "pos_x": -999,  "pos_y": 0,  "pos_z": 0,  "pos_type": 'A', "gridStep": 30}
    request["request_obj"] = requestObj

    return request
Esempio n. 2
0
def mountRobotSample(puckPos, pinPos, sampID, init=0, warmup=0):
    global retryMountCount
    global sampXadjust, sampYadjust, sampZadjust

    absPos = (pinsPerPuck * (puckPos % 3)) + pinPos + 1
    logger.info(f'init: {init} warmup: {warmup}')
    if (getBlConfig('robot_online')):
        if (not daq_lib.waitGovRobotSE()):
            daq_lib.setGovRobot('SE')
        if (getBlConfig(TOP_VIEW_CHECK) == 1):
            try:
                sample = db_lib.getSampleByID(sampID)
                sampName = sample['name']
                reqCount = sample['request_count']
                prefix1 = sampName + "_" + str(puckPos) + "_" + str(
                    pinPos) + "_" + str(reqCount) + "_PA_0"
                prefix90 = sampName + "_" + str(puckPos) + "_" + str(
                    pinPos) + "_" + str(reqCount) + "_PA_90"
                daq_macros.topViewSnap(prefix1,
                                       os.getcwd() + "/pinAlign",
                                       1,
                                       acquire=0)
            except Exception as e:
                e_s = str(e)
                message = "TopView check ERROR, will continue: " + e_s
                daq_lib.gui_message(message)
                logger.error(message)
        logger.info("mounting " + str(puckPos) + " " + str(pinPos) + " " +
                    str(sampID))
        logger.info("absPos = " + str(absPos))
        platePos = int(puckPos / 3)
        rotMotTarget = daq_utils.dewarPlateMap[platePos][0]
        rotCP = beamline_lib.motorPosFromDescriptor("dewarRot")
        logger.info("dewar target,CP")
        logger.info("%s %s" % (rotMotTarget, rotCP))
        if (abs(rotMotTarget - rotCP) > 1):
            logger.info("rot dewar")
            try:
                if (init == 0):
                    RobotControlLib.runCmd("park")
            except Exception as e:
                e_s = str(e)
                message = "ROBOT Park ERROR: " + e_s
                daq_lib.gui_message(message)
                logger.error(message)
                return 0
            beamline_lib.mvaDescriptor("dewarRot", rotMotTarget)
        try:
            if (init):
                logger.debug('main loading part')
                setPvDesc("boostSelect", 0)
                if (getPvDesc("sampleDetected") == 0
                    ):  #reverse logic, 0 = true
                    setPvDesc("boostSelect", 1)
                else:
                    robotStatus = beamline_support.get_any_epics_pv(
                        "SW:RobotState", "VAL")
                    if (robotStatus != "Ready"):
                        if (daq_utils.beamline == "fmx"):
                            daq_macros.homePins()
                            time.sleep(3.0)
                        if (not daq_lib.setGovRobot('SE')):
                            return
                if (getBlConfig(TOP_VIEW_CHECK) == 1):
                    omegaCP = beamline_lib.motorPosFromDescriptor("omega")
                    if (omegaCP > 89.5 and omegaCP < 90.5):
                        beamline_lib.mvrDescriptor("omega", 85.0)
                    logger.info("calling thread")
                    _thread.start_new_thread(wait90TopviewThread,
                                             (prefix1, prefix90))
                    logger.info("called thread")
                setPvDesc("boostSelect", 0)
                if (getPvDesc("gripTemp") > -170):
                    try:
                        logger.debug('mounting')
                        RobotControlLib.mount(absPos)
                    except Exception as e:
                        e_s = str(e)
                        message = "ROBOT mount ERROR: " + e_s
                        daq_lib.gui_message(message)
                        logger.error(message)
                        return 0
                else:
                    time.sleep(0.5)
                    if (getPvDesc("sampleDetected") == 0):
                        logger.info("full mount")
                        RobotControlLib.mount(absPos)
                    else:
                        logger.debug('quick mount')
                        RobotControlLib.initialize()
                        RobotControlLib._mount(absPos)
                setPvDesc("boostSelect", 1)
            else:
                if (getBlConfig(TOP_VIEW_CHECK) == 1):
                    omegaCP = beamline_lib.motorPosFromDescriptor("omega")
                    if (omegaCP > 89.5 and omegaCP < 90.5):
                        beamline_lib.mvrDescriptor("omega", 85.0)
                    logger.info("calling thread")
                    _thread.start_new_thread(wait90TopviewThread,
                                             (prefix1, prefix90))
                    logger.info("called thread")
                if (warmup):
                    RobotControlLib._mount(absPos, warmup=True)
                else:
                    RobotControlLib._mount(absPos)
            logger.info(f'{getBlConfig(TOP_VIEW_CHECK)} {daq_utils.beamline}')
            if (getBlConfig(TOP_VIEW_CHECK) == 1):
                if (sampYadjust == 0):
                    logger.info("Cannot align pin - Mount next sample.")

            daq_lib.setGovRobot('SA')
            return 1
        except Exception as e:
            logger.error(e)
            e_s = str(e)
            if (e_s.find("Fatal") != -1):
                daq_macros.robotOff()
                daq_macros.disableMount()
                daq_lib.gui_message(
                    e_s +
                    ". FATAL ROBOT ERROR - CALL STAFF! robotOff() executed.")
                return 0
            if (e_s.find("tilted") != -1
                    or e_s.find("Load Sample Failed") != -1):
                if (getBlConfig("queueCollect") == 0):
                    daq_lib.gui_message(e_s + ". Try mounting again")
                    return 0
                else:
                    if (retryMountCount == 0):
                        retryMountCount += 1
                        mountStat = mountRobotSample(puckPos, pinPos, sampID,
                                                     init)
                        if (mountStat == 1):
                            retryMountCount = 0
                        return mountStat
                    else:
                        retryMountCount = 0
                        daq_lib.gui_message("ROBOT: Could not recover from " +
                                            e_s)
                        return 2
            daq_lib.gui_message("ROBOT mount ERROR: " + e_s)
            return 0
        return 1
    else:
        return 1
Esempio n. 3
0
def createDefaultRequest(sample_id, createVisit=True):
    """
    Doesn't really create a request, just returns a dictionary
    with the default parameters that can be passed to addRequesttoSample().
    But note that these then get overwritten anyway, and I no longer expose them in screen params dialog
    """

    sample = db_lib.getSampleByID(sample_id)
    try:
        propNum = sample["proposalID"]
    except KeyError:
        propNum = 999999
    if (propNum == None):
        propNum = 999999
    if (propNum != getProposalID()):
        setProposalID(propNum, createVisit)
    screenDist, screenEnergy, screenExptime, screenPhiend, screenPhist, screenReso, screenTransmissionPercent, screenWidth, screenbeamHeight, screenbeamWidth = getScreenDefaultParams(
    )
    sampleName = str(db_lib.getSampleNamebyID(sample_id))
    basePath = os.getcwd()
    runNum = db_lib.getSampleRequestCount(sample_id)
    (puckPosition, samplePositionInContainer,
     containerID) = db_lib.getCoordsfromSampleID(beamline, sample_id)
    request = {"sample": sample_id}
    request["beamline"] = beamline
    requestObj = {
        "sample":
        sample_id,
        "sweep_start":
        screenPhist,
        "sweep_end":
        screenPhiend,
        "img_width":
        screenWidth,
        "exposure_time":
        screenExptime,
        "protocol":
        "standard",
        "detDist":
        screenDist,
        "parentReqID":
        -1,
        "basePath":
        basePath,
        "file_prefix":
        sampleName,
        "directory":
        basePath + "/" + str(getVisitName()) + "/" + sampleName + "/" +
        str(runNum) + "/" + db_lib.getContainerNameByID(containerID) + "_" +
        str(samplePositionInContainer + 1) + "/",
        "file_number_start":
        1,
        "energy":
        screenEnergy,
        "wavelength":
        energy2wave(screenEnergy),
        "resolution":
        screenReso,
        "slit_height":
        screenbeamHeight,
        "slit_width":
        screenbeamWidth,
        "attenuation":
        screenTransmissionPercent,
        "pos_x":
        -999,
        "pos_y":
        0,
        "pos_z":
        0,
        "pos_type":
        'A',
        "gridStep":
        20
    }
    request["request_obj"] = requestObj

    return request
Esempio n. 4
0
                                      owner,
                                      resultObj,
                                      beamline=os.environ["BEAMLINE_ID"])
newResult = db_lib.getResult(resultID)
visitName = getBlConfig("visitName")
try:
    ispybLib.insertResult(newResult, "fastDP", request, visitName, ispybDCID,
                          fastDPResultFile)
except Exception as e:
    logger.error("runfastdph5 insert result ispyb error: %s" % e)
if (runFastEP):
    os.system("fast_ep")  #looks very bad! running on ca1!
if (runDimple):
    logger.info('run dimple selected')
    sampleID = request["sample"]
    sample = db_lib.getSampleByID(sampleID)
    try:
        modelFilename = sample["model"]
        if (modelFilename == 'nan'):
            modelPDBname = "model.pdb"
        else:
            modelPDBname = modelFilename + ".pdb"
    except KeyError:
        modelPDBname = "model.pdb"
    dimpleRunningDir = directory + "/dimpleOutput"
    comm_s = "mkdir -p " + dimpleRunningDir
    os.system(comm_s)
    os.chdir(dimpleRunningDir)
    comm_s = "ssh  -q " + dimpleNode + " \"cd " + dimpleRunningDir + ";" + dimpleComm + " " + runningDir + "/fast_dp.mtz " + baseDirectory + "/" + modelPDBname + " " + dimpleRunningDir + "\""
    logger.info(comm_s)
    logger.info("running dimple")
Esempio n. 5
0
fd = open(fastDPResultFile)
resultObj = xmltodict.parse(fd.read())
print("finished fast_dp")
print(resultObj)
resultID = db_lib.addResultforRequest("fastDP",request_id,owner,resultObj,beamline=os.environ["BEAMLINE_ID"])
newResult = db_lib.getResult(resultID)
visitName = db_lib.getBeamlineConfigParam(os.environ["BEAMLINE_ID"],"visitName")
try:
  ispybLib.insertResult(newResult,"fastDP",request,visitName,ispybDCID,fastDPResultFile)
except:
  print("ispyb error")
if (runFastEP):
  os.system("fast_ep") #looks very bad! running on ca1!
if (runDimple):
  sampleID = request["sample"]
  sample = db_lib.getSampleByID(sampleID)
  try:
    modelFilename = sample["model"]
    if (modelFilename == 'nan'):
      modelPDBname = "model.pdb"
    else:
      modelPDBname = modelFilename + ".pdb"
  except KeyError:
      modelPDBname = "model.pdb"    
  dimpleRunningDir = directory+"/dimpleOutput"
  comm_s = "mkdir -p " + dimpleRunningDir
  os.system(comm_s)
  os.chdir(dimpleRunningDir)
#  comm_s = "ssh  -q " + node + " \"cd " + runningDir +";source /nfs/skinner/wrappers/fastDPWrap;fast_ep"
#  comm_s = "ssh  -q " + dimpleNode + " \"cd " + dimpleRunningDir +";dimple " + runningDir + "/fast_dp.mtz /GPFS/CENTRAL/xf17id2/jjakoncic/model.pdb " + dimpleRunningDir + "\""
  comm_s = "ssh  -q " + dimpleNode + " \"cd " + dimpleRunningDir +";" + dimpleComm + " " + runningDir + "/fast_dp.mtz " + baseDirectory + "/" + modelPDBname + " " + dimpleRunningDir + "\""