예제 #1
0
def HDec(units):

    Stuff = []
    p90H = float(TopCmds.GETPAR("P 3"))
    ampH = float(TopCmds.GETPAR("PLdB 2"))
    MaxB1H = 1000000. / 4. / p90H

    CPD = TopCmds.GETPAR2("CPDPRG 2")
    if CPD == "mlev" or CPD == "None":
        TopCmds.XCMD("cpdprg2")
        CPD = (TopCmds.GETPAR2("CPDPRG 2"))

    Stuff = CPDtools.CPDparse(CPD, "1H")
    #TopCmds.MSG(str(Stuff))
    amp0 = CPDtools.Find_old_pl(Stuff[0])
    decpw0 = CPDtools.Find_old_pw(Stuff[1], "1H")

    B1_0 = MaxB1H * (math.pow(10, (ampH - amp0) / 20.)) / 1000.
    if B1_0 > 1.: B1out = '% .1f' % B1_0
    if B1_0 <= 1.: B1out = '75.0'

    index = TopCmds.INPUT_DIALOG("Mr Setup Input", "Decoupling Window", \
    ["Desired 1H Decoupling Amplitude","File"],\
    [B1out,CPD],["kHz",""],["1","1",],\
    ["Accept","Close"], ['a','c'], 10)

    TopCmds.PUTPAR("CPDPRG 2", index[1])

    #print(index[0], MaxB1H)
    adjust = 20 * (math.log10(1000. * float(index[0]) / MaxB1H))
    Hamp = ampH - adjust
    decpwH = (MaxB1H / 1000. / float(index[0])) * (170. / 180.) * 2 * p90H

    if units == "W":
        Hamp = dBtoW(Hamp)

    value = TopCmds.SELECT("Adjusting the H decoupling parameters:",\
    "This will set\n 1H power ("+ Stuff[0] +") to:  "+ str('%.2f' %Hamp)+" "+ units+"\n \
  Pulse width ("                  + Stuff[1] +") to:  " +str('%3.2f' %decpwH) + units,["Update", "Keep Previous"])

    if value != 1:

        if Stuff[0] == 'pl12':
            TopCmds.PUTPAR("PL" + units + " 12", str('%3.2f' % Hamp))
        elif Stuff[0] == 'pl13':
            TopCmds.PUTPAR("PL" + units + " 13", str('%3.2f' % Hamp))
        elif Stuff[0] == 'pl14':
            TopCmds.PUTPAR("PL" + units + " 14", str('%3.2f' % Hamp))

        if Stuff[1] == 'pcpd':
            TopCmds.PUTPAR("PCPD 2", str('%3.2f' % decpwH))
        elif Stuff[1] == 'p31':
            TopCmds.PUTPAR("P 31", str('%3.2f' % decpwH))
            TopCmds.PUTPAR("P 30", str('%3.2f' % decpwH))
        elif Stuff[1] == 'p62':
            TopCmds.PUTPAR("P 61", str('%3.2f' % decpwH))
            TopCmds.PUTPAR("P 62", str('%3.2f' % decpwH))
예제 #2
0
def HC(Unit):
    CNCT = TopCmds.GETPAR("P 15")
    #plC=TopCmds.GETPAR("PL"+Unit+" 40")
    #plH=TopCmds.GETPAR("PL"+Unit+" 41")
    plC = TopCmds.GETPAR("SP" + Unit + " 40")
    plH = TopCmds.GETPAR("SP" + Unit + " 41")
    SPC = TopCmds.GETPAR2("SPNAM 40")
    SPH = TopCmds.GETPAR2("SPNAM 41")
    #TopCmds.MSG("CNCT: "+CNCT+"\n plH: "+plH+"\n plC: "+plC+"\n SPH: "+SPH+"\n SPC: "+SPC)
    return CNCT, plH, plC, SPH, SPC
예제 #3
0
def S6purge():
  p90C=float(TopCmds.GETPAR("P 1"))
  ampC=float(TopCmds.GETPAR("PLdB 1"))
  MAS =float(TopCmds.GETPAR("CNST 31"))
  
  MaxB1 = 1000000./4./p90C
  p90sC=float(TopCmds.GETPAR("P 6"))
  
  SPname=(TopCmds.GETPAR2("SPNAM 6"))
  if p90sC == 0: p90sC = 1500000./MAS
  SP=SPname

  #Check for existence and default
  if SP == "gauss" or SP == "None" :
    #TopCmds.MSG("Please set spnam6")
    TopCmds.XCMD("spnam6")
    SP=(TopCmds.GETPAR2("SPNAM 6"))
    
  offs = float(TopCmds.GETPAR("SPOFFS 6"))
  ppm=CFrq.offs2ppm(offs)

  if ppm > 140.0 : ppm=55.0
  if ppm < -10.0 : ppm=55.0

  index = TopCmds.INPUT_DIALOG("CA 90 purge", "S6 soft 90", \
  ["Duration","Offset","Pulse Name (3pi/2 Sinc)"],\
  [str('%3.2f' %p90sC),str('%3.2f' %ppm),SP],\
  ["us","ppm",""],\
  ["1","1","1"],\
  ["Accept","Close"], ['a','c'], 10)
  
  p90sC=float(index[0])
  ppm=float(index[1])
  SP=index[2]
  offs=CFrq.ppm2offs(ppm)
  
  AvgAmp=IntShape.Integrate(SP)/100.
  adjust=20*math.log10(p90C/p90sC/AvgAmp)
  Power=ampC-adjust
  
  PowerW=pwr.dBtoW(Power)
  
  confirm = TopCmds.SELECT("Adjusting the S6 purge pulse:",\
  "This will set\n \
  13C amp (pl26) to :" + str('%3.2f' %PowerW)+ " W\n \
  Pulse offset to   :" + str('%8.0f' %offs) + " Hz\n \
  Equivalent to     :" + str('%3.1f' %ppm ) + " ppm\n \
  p6 to             :" + str('%6.1f' %p90sC)+ " us\n "\
  ,["Update", "Keep Previous"])
  
  if confirm != 1:
    TopCmds.PUTPAR("PLdB 26",str('%3.2f' %Power))
    TopCmds.PUTPAR("SPNAM 6",SP)
    TopCmds.PUTPAR("SPOFFS 6",str('%8.2f' %offs))
    TopCmds.PUTPAR("P 6",str('%3.2f' %p90sC))
예제 #4
0
def HN(Unit):
    CNCT = TopCmds.GETPAR("P 25")
    #plN=TopCmds.GETPAR("PL"+Unit+" 42")
    #plH=TopCmds.GETPAR("PL"+Unit+" 43")
    plH = TopCmds.GETPAR("SP" + Unit + " 42")
    plN = TopCmds.GETPAR("SP" + Unit + " 43")
    #TopCmds.MSG(TopCmds.GETPAR2("SPNAM 42"))
    SPN = TopCmds.GETPAR2("SPNAM 42")
    #TopCmds.MSG(TopCmds.GETPAR2("SPNAM 43"))
    SPH = TopCmds.GETPAR2("SPNAM 43")
    #TopCmds.MSG("CNCT: "+CNCT+"\n plH: "+plH+"\n plN: "+plN+"\n SPH: "+SPH+"\n SPN: "+SPN)
    return CNCT, plH, plN, SPH, SPN
예제 #5
0
def HDec(Unit):
    CPD = "None"
    CPD = TopCmds.GETPAR2("CPDPRG 2")

    if CPD == "" or CPD == "None":
        PWname = "PCPD 2"
        PLname = "PL" + Unit + " 12"
        PW = "5.0"
        if Unit == "dB": PL = "1000."
        if Unit == "W": PL = "0.0"

    else:
        PLname, PWname = CPDtools.CPDparse(CPD, "1H")

        PLname = Format(PLname, Unit)
        PWname = Format(PWname, "")

        if PWname == "PCPD":
            PWname = "PCPD 2"

        PW = TopCmds.GETPAR(PWname)
        PL = TopCmds.GETPAR(PLname)
    #TopCmds.MSG(PWname+"  "+PLname+"  "+str(PW)+"  "+str(PL))

    return CPD, PWname, PW, PLname, PL
예제 #6
0
def NCO(Unit):
    CNCT = TopCmds.GETPAR("P 17")
    plH = TopCmds.GETPAR("PL" + Unit + " 34")
    plN = TopCmds.GETPAR("PL" + Unit + " 6")
    plC = TopCmds.GETPAR("SP" + Unit + " 51")
    SP = TopCmds.GETPAR2("SPNAM 51")
    return CNCT, plH, plC, plN, SP
예제 #7
0
def NCA(Unit):
    CNCT = TopCmds.GETPAR("P 16")
    plH = TopCmds.GETPAR("PL" + Unit + " 33")
    plC = TopCmds.GETPAR("SP" + Unit + " 50")
    plN = TopCmds.GETPAR("PL" + Unit + " 5")
    SP = TopCmds.GETPAR2("SPNAM 50")
    #TopCmds.MSG("CNCT: "+CNCT+"\n plH: "+plH+"\n plN: "+plN+"\n plC: "+plC+"\n SP: "+SP)
    return CNCT, plH, plC, plN, SP
예제 #8
0
def CH(Unit):
    CNCT = TopCmds.GETPAR("P 48")
    plH = TopCmds.GETPAR("SP" + Unit + " 48")
    plC = TopCmds.GETPAR("PL" + Unit + " 49")

    SP = "None"
    SP = TopCmds.GETPAR2("SPNAM 48")
    if SP == "" or SP == "None":
        SP = "None"
    return CNCT, plH, plC, SP
예제 #9
0
def hhC(Unit):
    CNCT = TopCmds.GETPAR("P 44")
    plH = TopCmds.GETPAR("PL" + Unit + " 44")
    plC = TopCmds.GETPAR("PL" + Unit + " 45")

    SP = "None"
    SP = TopCmds.GETPAR2("SPNAM 44")
    if SP == "" or SP == "None":
        SP = "None"
    return CNCT, plH, plC, SP
예제 #10
0
def NH(Unit):
    CNCT = TopCmds.GETPAR("P 46")
    plH = TopCmds.GETPAR("SP" + Unit + " 46")
    plN = TopCmds.GETPAR("PL" + Unit + " 47")

    SP = "None"
    SP = TopCmds.GETPAR2("SPNAM 46")
    if SP == "" or SP == "None":
        SP = "None"
    return CNCT, plH, plN, SP
예제 #11
0
def GetPar(parName, unit):

    Thing = ""
    Thing = 1.

    if parName in pulDict:
        TopSpinName = pulDict[parName]
    else:
        TopSpinName = parName

    j = TopSpinName.find(" ")

    if TopSpinName.find("NAM") >= 0 or TopSpinName.find("PRG") >= 0:
        Thing = TopCmds.GETPAR2(TopSpinName)
    elif (TopSpinName.find("SP") >=0 and TopSpinName.find("NAM") <= 0) \
    or TopSpinName.find("PL") >= 0 :
        #TopCmds.MSG("TopSpinName= "+TopSpinName+"\nUnit= "+unit)
        Thing = float(TopCmds.GETPAR(TopSpinName[:j] + unit + TopSpinName[j:]))
    elif TopSpinName.find("Unused") >= 0:
        Thing = "Unused"
    else:
        Thing = float(TopCmds.GETPAR(TopSpinName))

    return Thing
예제 #12
0
def NCO(units):
    p90C = float(TopCmds.GETPAR("P 1"))
    ampC = float(TopCmds.GETPAR("PLdB 1"))
    p90N = float(TopCmds.GETPAR("P 21"))
    ampN = float(TopCmds.GETPAR("PLdB 3"))
    MAS = float(TopCmds.GETPAR("CNST 31"))
    SP = TopCmds.GETPAR2("SPNAM 51")
    CNCT = float(TopCmds.GETPAR("P 17"))

    if CNCT <= 1.: CNCT = 3500.
    if SP == "gauss" or SP == "None" or SP == "":
        #TopCmds.MSG("Please set spnam2")
        TopCmds.XCMD("spnam51")
        SP = (TopCmds.GETPAR2("SPNAM 51"))
        SP.join()

    MaxB1N = 1000000. / 4. / p90N
    MaxB1C = 1000000. / 4. / p90C
    #find the channel with the lowest B1
    NCond = (5. / 2.) * MAS
    CCond = (7. / 2.) * MAS

    while NCond > MaxB1N:
        NCond = NCond - MAS
        CCond = NCond + MAS

    while CCond > MaxB1C:
        NCond = NCond - MAS
        CCond = NCond + MAS

    if NCond < MAS:
        NCond = 0.25 * MAS
        CCond = 0.75 * MAS

    index = TopCmds.INPUT_DIALOG("NCO CP Input", "N-CO  SPECIFIC 7/2*C; 5/2*N", \
    ["Carbon B1 field","Nitrogen B1 field","Contact Time(P15)","Ramp Name"],\
    [str(CCond),str(NCond),str(CNCT),SP],\
    ["kHz","kHz","us",""],\
    ["1","1","1","1"],\
    ["Accept","Close"], ['a','c'], 10)

    adjust = 20 * (math.log10(float(index[0]) / MaxB1C))
    Camp = ampC - adjust
    adjust = 20 * (math.log10(float(index[1]) / MaxB1N))
    Namp = ampN - adjust
    #Insert ramp calibration here
    AvgAmp = IntShape.Integrate(SP) / 100.
    adjust = 20 * (math.log10(1. / AvgAmp))
    Camp = Camp - adjust
    CNCT = float(index[2])

    if units == "W":
        Namp = dBtoW(Namp)
        Camp = dBtoW(Camp)

    value = TopCmds.SELECT("Adjusting the NC CP parameters:",\
    "This will set\n 13C power to:  " + str('%3.2f' %Camp)+" "+ units+"\n \
  15N power to:  "                     +str('%3.2f' %Namp) + units,["Update", "Keep Previous"])

    if value != 1:
        TopCmds.PUTPAR("PL" + units + " 6", str('%3.2f' % Namp))
        TopCmds.PUTPAR("PL" + units + " 51", str('%3.2f' % Camp))
        TopCmds.PUTPAR("SP" + units + " 51", str('%3.2f' % Camp))
        TopCmds.PUTPAR("P 17", str('%3.2f' % CNCT))
        TopCmds.PUTPAR("SPNAM 51", SP)
예제 #13
0
def HN(units):
    p90H = float(TopCmds.GETPAR("P 3"))
    ampH = float(TopCmds.GETPAR("PLdB 2"))
    p90N = float(TopCmds.GETPAR("P 21"))
    ampN = float(TopCmds.GETPAR("PLdB 3"))
    MAS = float(TopCmds.GETPAR("CNST 31"))
    CNCT = float(TopCmds.GETPAR("P 25"))
    SPH = TopCmds.GETPAR2("SPNAM 42")
    SPX = TopCmds.GETPAR2("SPNAM 43")

    if CNCT <= 1.: CNCT = 1000.

    if SPH == "gauss" or SPH == "None" or SPH == "":
        #TopCmds.MSG("Please set spnam1")
        TopCmds.PUTPAR("SPNAM 42", "ramp.100")
        TopCmds.XCMD("spnam42")
        SPH = (TopCmds.GETPAR2("SPNAM 42"))
        SPH.join()

    if SPX == "gauss" or SPX == "None" or SPX == "":
        #TopCmds.MSG("Please set spnam11")
        TopCmds.PUTPAR("SPNAM 43", "square.100")
        TopCmds.XCMD("spnam43")
        SPX = (TopCmds.GETPAR2("SPNAM 43"))
        SPX.join()

    MaxB1H = 1000000. / 4. / p90H
    MaxB1N = 1000000. / 4. / p90N

    #find the channel with the lowest B1
    if MaxB1N < MaxB1H:
        Ratio = int(math.floor(MaxB1N / MAS))
        NCond = (Ratio - 0.5) * MAS
        HCond = (Ratio + 0.5) * MAS

        if HCond > MaxB1H:
            Ratio = Ratio - 1
            NCond = (Ratio - 0.5) * MAS
            HCond = (Ratio + 0.5) * MAS

        # If spinning very fast or using weak B1s
        if Ratio <= 1:
            NCond = .25 * MAS
            HCond = .75 * MAS

    if MaxB1N >= MaxB1H:
        Ratio = int(math.floor(MaxB1H / MAS))
        HCond = (Ratio - 0.5) * MAS
        NCond = (Ratio + 0.5) * MAS

        if NCond > MaxB1N:
            Ratio = Ratio - 1
            HCond = (Ratio - 0.5) * MAS
            NCond = (Ratio + 0.5) * MAS

        # If spinning very fast or using weak B1s
        if Ratio <= 1:
            NCond = .25 * MAS
            HCond = .75 * MAS

    adjust = 20 * (math.log10(NCond / MaxB1N))
    Namp = ampN - adjust
    adjust = 20 * (math.log10(HCond / MaxB1H))
    Hamp = ampH - adjust

    index = TopCmds.INPUT_DIALOG("HN CP Input", "Proton Nitrogen Cross Polarization", \
    ["Proton B1 Field","H Ramp","Nitrogen B1 Field","N Ramp","Contact Time(P25)"],\
    [str(HCond),SPH,str(NCond),SPX,str(CNCT)],\
    ["kHz","","kHz","","us"],\
    ["1","1","1","1","1"],\
    ["Accept","Close"], ['a','c'], 10)

    adjust = 20 * (math.log10(float(index[0]) / MaxB1H))
    Hamp1 = ampH - adjust
    AvgAmp = IntShape.Integrate(index[1]) / 100.
    adjust = 20 * (math.log10(1. / AvgAmp))
    Hamp = Hamp1 - adjust

    adjust = 20 * (math.log10(float(index[2]) / MaxB1N))
    Namp = ampN - adjust
    #Ramp integration adjustment
    AvgAmp = IntShape.Integrate(index[3]) / 100.
    adjust = 20 * (math.log10(1. / AvgAmp))
    Namp = Namp - adjust

    CNCT = float(index[4])

    #TopCmds.MSG("Adjusting the HC CP parameters:\n Your Proton Amplitude is set to " + str('%3.2f' %Hamp)+ "dB\n Your Nitrogen Ammplitude is set to " +str('%3.2f' %Namp))

    if units == "W":
        Hamp = dBtoW(Hamp)
        Namp = dBtoW(Namp)

    value = TopCmds.SELECT("Adjusting the HN CP parameters:",\
    "This will set\n 1H power to:  " + str('%3.2f' %Hamp)+" "+ units+"\n \
  15N power to:  "                     +str('%3.2f' %Namp) + units,["Update", "Keep Previous"])

    if value != 1:
        TopCmds.PUTPAR("SP" + units + " 42", str('%3.2f' % Hamp))
        TopCmds.PUTPAR("SP" + units + " 43", str('%3.2f' % Namp))
        TopCmds.PUTPAR("PL" + units + " 42", str('%3.2f' % Hamp))
        TopCmds.PUTPAR("PL" + units + " 43", str('%3.2f' % Namp))
        TopCmds.PUTPAR("P 25", str('%.2f' % CNCT))
        TopCmds.PUTPAR("SPNAM 42", index[1])
        TopCmds.PUTPAR("SPNAM 43", index[3])
예제 #14
0
def HC(units):
    p90H = float(TopCmds.GETPAR("P 3"))
    ampH = float(TopCmds.GETPAR("PLdB 2"))
    p90C = float(TopCmds.GETPAR("P 1"))
    ampC = float(TopCmds.GETPAR("PLdB 1"))
    MAS = float(TopCmds.GETPAR("CNST 31"))
    CNCT = float(TopCmds.GETPAR("P 15"))
    SPH = TopCmds.GETPAR2("SPNAM 40")
    SPX = TopCmds.GETPAR2("SPNAM 41")

    if CNCT <= 1.: CNCT = 1000.

    if SPH == "gauss" or SPH == "None" or SPH == "":
        #TopCmds.MSG("Please set spnam40")
        TopCmds.PUTPAR("SPNAM 40", "ramp.100")
        TopCmds.XCMD("spnam40")
        SPH = (TopCmds.GETPAR2("SPNAM 40"))
        SPH.join()

    if SPX == "gauss" or SPX == "None" or SPX == "":
        #TopCmds.MSG("Please set spnam10")
        TopCmds.PUTPAR("SPNAM 41", "square.100")
        TopCmds.XCMD("spnam41")
        SPX = (TopCmds.GETPAR2("SPNAM 41"))
        SPX.join()

    MaxB1H = 1000000. / 4. / p90H
    MaxB1C = 1000000. / 4. / p90C

    #find the channel with the lowest B1
    if MaxB1C < MaxB1H:
        Ratio = int(math.floor(MaxB1C / MAS))
        #TopCmds.MSG(str(Ratio))
        CCond = (Ratio - 0.5) * MAS
        HCond = (Ratio + 0.5) * MAS

        if HCond > MaxB1H:
            Ratio = Ratio - 1
            CCond = (Ratio - 0.5) * MAS
            HCond = (Ratio + 0.5) * MAS

        # If spinning very fast or using weak B1s
        if Ratio <= 1:
            CCond = .25 * MAS
            HCond = .75 * MAS

    if MaxB1C >= MaxB1H:
        Ratio = int(math.floor(MaxB1H / MAS))
        HCond = (Ratio - 0.5) * MAS
        CCond = (Ratio + 0.5) * MAS

        if CCond > MaxB1C:
            Ratio = Ratio - 1
            HCond = (Ratio - 0.5) * MAS
            CCond = (Ratio + 0.5) * MAS

        # If spinning very fast or using weak B1s
        if Ratio <= 1:
            CCond = .75 * MAS
            HCond = .25 * MAS

    adjust = 20 * (math.log10(CCond / MaxB1C))
    Camp = ampC - adjust
    adjust = 20 * (math.log10(HCond / MaxB1H))
    Hamp = ampH - adjust

    index = TopCmds.INPUT_DIALOG("HC CP Input", "Proton Carbon Cross Polarization", \
    ["Proton B1 Field","H Ramp","Carbon B1 Field","C Ramp","Contact Time(P15)"],\
    [str(HCond),SPH,str(CCond),SPX,str(CNCT)],\
    ["kHz","","kHz","","us"],\
    ["1","1","1","1","1"],\
    ["Accept","Close"], ['a','c'], 10)

    adjust = 20 * (math.log10(float(index[0]) / MaxB1H))
    Hamp1 = ampH - adjust
    AvgAmp = IntShape.Integrate(index[1]) / 100.
    adjust = 20 * (math.log10(1. / AvgAmp))
    Hamp = Hamp1 - adjust

    adjust = 20 * (math.log10(float(index[2]) / MaxB1C))
    Camp1 = ampC - adjust
    #Ramp integration adjustment
    AvgAmp = IntShape.Integrate(index[3]) / 100.
    adjust = 20 * (math.log10(1. / AvgAmp))
    Camp = Camp1 - adjust

    CNCT = float(index[4])

    if units == "W":
        Hamp = dBtoW(Hamp)
        Camp = dBtoW(Camp)

    value = TopCmds.SELECT("Adjusting the HC CP parameters:",\
    "This will set\n 1H power to:  " + str('%3.2f' %Hamp)+" "+ units+"\n \
  13C power to:  "                     +str('%3.2f' %Camp) + units,["Update", "Keep Previous"])

    if value != 1:
        TopCmds.PUTPAR("SP" + units + " 40", str('%3.2f' % Hamp))
        TopCmds.PUTPAR("SP" + units + " 41", str('%3.2f' % Camp))
        TopCmds.PUTPAR("PL" + units + " 40", str('%3.2f' % Hamp))
        TopCmds.PUTPAR("PL" + units + " 41", str('%3.2f' % Camp))
        TopCmds.PUTPAR("P 15", str('%3.2f' % CNCT))
        TopCmds.PUTPAR("SPNAM 40", index[1])
        TopCmds.PUTPAR("SPNAM 41", index[3])
예제 #15
0
aCnca ="PL 6";  aCnco ="PL 6"
aNnca ="PL 7";  aNnco ="PL 7"
aHmissi="PL 9"
aHhc  ="PL 10";  aHhn  ="PL 11"
aChc  ="PL 20";  aNhn  ="PL 19"
aHdec ="PL 12";  aHdec2="PL 13";  aHdec3="PL 14"
aCc5  ="PL 15"
aCc7  ="PL 17"
aCc7  ="PL 17"
aNhn  ="PL 19";  aChc  ="PL 20"

aCAe  ="PL 26";  aCOe  ="PL 27"
aCAr  ="PL 28";  aCOr  ="PL 29"

#Decoupling
prgHDec=TopCmds.GETPAR2("CPDPRG 2")
if prgHDec != "None" and prgHDec != "" :
  aHdec, pHdec = CPDtools.CPDparse(prgHDec,"1H")

prgNDec=TopCmds.GETPAR2("CPDPRG 3")
if prgNDec != "None" and prgNDec != "" :
  aNdec, pNdec = CPDtools.CPDparse(prgHDec,"15N")

#Loops
lRFDR ="L 3"
lREDOR="L 4"
lC5   ="L 5"
lC7   ="L 7"
lTOBSY="L 9"

#Delays
예제 #16
0
def NCO(MAS0,MAS,units):

  p90X=float(TopCmds.GETPAR("P 1"))
  ampX=float(TopCmds.GETPAR("PL"+units+" 1"))
  ampXdB=float(TopCmds.GETPAR("PLdB 1"))
  
  ampXCP0=float(TopCmds.GETPAR("SP"+units+" 51"))
  ampXCP0dB=float(TopCmds.GETPAR("SPdB 51"))
  #ampXCP0=float(TopCmds.GETPAR("PL"+units+" 50"))
  #ampXCP0dB=float(TopCmds.GETPAR("PLdB 50"))
  SPX=TopCmds.GETPAR2("SPNAM 51")
  
  p90Y=float(TopCmds.GETPAR("P 21"))
  ampY=float(TopCmds.GETPAR("PL"+units+" 3"))
  ampYdB=float(TopCmds.GETPAR("PLdB 3"))
  
  ampYCP0=float(TopCmds.GETPAR("PL"+units+" 6"))
  ampYCP0dB=float(TopCmds.GETPAR("PLdB 6"))

  SPY="None"
  avgY0=1.  
  
  # Get the integration before possibly changing the shape.
  if SPX != "None" and SPX != None:
    avgX0=IntShape.Integrate(SPX)/100.
  if SPX == "None" or SPX == None:
    avgX0=1.

  CNCT=float(TopCmds.GETPAR("P 17"))


  #Interact with user about MAS and power levels, likely not needed
  params = TopCmds.INPUT_DIALOG("NCO CP MAS adjustment", "Nitrogen Carbonyl Cross Polarization", \
  ["Old MAS rate","New MAS rate","Old 13C power","Old 15N power","Contact Time(P16)","C-Ramp"],\
  [str(MAS0),str(MAS),str(ampXCP0),str(ampYCP0),str(CNCT),SPX],\
  ["kHz","kHz",units,units,"us",""],\
  ["1","1","1","1","1","1"],\
  ["Accept","Close"], ['a','c'], 10)
  
  if params == None: TopCmds.EXIT()
  params.append(SPY)

  # Everything is written with dB, so we might have to convert
  if units == "W":
    params[2]=str(Setup.WtodB(float(params[2])))
    params[3]=str(Setup.WtodB(float(params[3])))

  if SPX != "None" and SPX != None:
    avgX0=IntShape.Integrate(SPX)/100.
  if SPX == "None" or SPX == None:
    avgX0=1.

  pulses=p90X,ampXdB,p90Y,ampYdB,avgX0,avgY0
  
  SelectorText="Adjust the NCA CP parameters:","Calculate New Power Level for:",\
  ["Carbon","Nitrogen","Both"]
  
  ampXCPdB, ampYCPdB = FindMatch(params,pulses,SelectorText)

  if units == "W":
    ampXCP=Setup.dBtoW(ampXCPdB)
    ampYCP=Setup.dBtoW(ampYCPdB)
  
  value = TopCmds.SELECT("Adjusting the NCO CP parameters:",\
  "This will set\n 13C power to:  " + str('%3.2f' %ampXCP)+ " "+units+"\n \
  15N power to:  " +str('%3.2f' %ampYCP) + " "+units,["Update", "Keep Previous"])
    
  if value != 1:
    TopCmds.PUTPAR("PLdB 51",str('%3.2f' %ampXCPdB))
    TopCmds.PUTPAR("SPdB 51",str('%3.2f' %ampXCPdB))
    TopCmds.PUTPAR("PLdB 6",str('%3.2f' %ampYCPdB))
    TopCmds.PUTPAR("P 17" ,str('%3.2f' %CNCT))
    TopCmds.PUTPAR("SPNAM 51",SPX)
예제 #17
0
def HN(MAS0,MAS,units):

  p90H=float(TopCmds.GETPAR("P 3"))
  ampH=float(TopCmds.GETPAR("PL"+units+" 2"))
  ampHdB=float(TopCmds.GETPAR("PLdB 2"))
  
  ampHCP0=float(TopCmds.GETPAR("SP"+units+" 42"))
  ampHCP0dB=float(TopCmds.GETPAR("SPdB 42"))
  #ampHCP0=float(TopCmds.GETPAR("PL"+units+" 42"))
  #ampHCP0dB=float(TopCmds.GETPAR("PLdB 42"))
  SPH=TopCmds.GETPAR2("SPNAM 42")
  
  p90X=float(TopCmds.GETPAR("P 21"))
  ampX=float(TopCmds.GETPAR("PL"+units+" 3"))
  ampXdB=float(TopCmds.GETPAR("PLdB 3"))
  
  ampXCP0=float(TopCmds.GETPAR("SP"+units+" 43"))
  ampXCP0dB=float(TopCmds.GETPAR("SPdB 43"))
  #ampXCP0=float(TopCmds.GETPAR("PL"+units+" 43"))
  #ampXCP0dB=float(TopCmds.GETPAR("PLdB 43"))
  SPX=TopCmds.GETPAR2("SPNAM 43")
  CNCT=float(TopCmds.GETPAR("P 25"))
  
  #Interact with user about MAS and power levels, likely not needed
  params = TopCmds.INPUT_DIALOG("HN CP MAS adjustment", "Proton Nitrogen Cross Polarization", \
  ["Old MAS rate","New MAS rate","Old 15N power","Old 1H power","Contact Time(P15)","H-Ramp","N-Ramp"],\
  [str(MAS0),str(MAS),str(ampXCP0),str(ampHCP0),str(CNCT),SPH,SPX],\
  ["kHz","kHz",units,units,"us","",""],\
  ["1","1","1","1","1","1","1"],\
  ["Accept","Close"], ['a','c'], 10)
  
  if params == None: TopCmds.EXIT()

  # Everything is written with dB, so we might have to convert
  if units == "W":
    params[2]=str(Setup.WtodB(float(params[2])))
    params[3]=str(Setup.WtodB(float(params[3])))

  if SPH != "None" and SPH != None:
    avgH0=1.
    avgH0=IntShape.Integrate(SPH)/100.
  if SPX != "None" and SPX != None:
    avgX0=1.
    avgX0=IntShape.Integrate(SPX)/100.
  
  pulses=p90H,ampHdB,p90X,ampXdB,avgH0,avgX0
  
  SelectorText="Adjust the HN CP parameters:","Calculate New Match for:",\
  ["Proton","Nitrogen","Maximum for Both"]
  
  ampHCPdB, ampXCPdB = FindMatch(params,pulses,SelectorText)

  if units == "W":
    ampXCP=Setup.dBtoW(ampXCPdB)
    ampHCP=Setup.dBtoW(ampHCPdB)
  
  value = TopCmds.SELECT("Adjusting the HN CP parameters:",\
  "This will set\n 1H power to:  " + str('%3.2f' %ampHCP)+ " "+units+"\n \
  15N power to:  " +str('%3.2f' %ampXCP) + " "+units,["Update", "Keep Previous"])
    
  if value != 1:
    TopCmds.PUTPAR("PLdB 42",str('%3.2f' %ampHCPdB))
    TopCmds.PUTPAR("SPdB 42",str('%3.2f' %ampHCPdB))
    TopCmds.PUTPAR("PLdB 43",str('%3.2f' %ampXCPdB))
    TopCmds.PUTPAR("SPdB 43",str('%3.2f' %ampXCPdB))
    TopCmds.PUTPAR("P 25" ,str('%3.2f' %CNCT))
    TopCmds.PUTPAR("SPNAM 42",SPH)
    TopCmds.PUTPAR("SPNAM 43",SPX)
예제 #18
0
def HC(MAS0,MAS,units):
  p90H=float(TopCmds.GETPAR("P 3"))
  ampH=float(TopCmds.GETPAR("PL"+units+" 2"))
  ampHdB=float(TopCmds.GETPAR("PLdB 2"))
  
  ampHCP0=float(TopCmds.GETPAR("SP"+units+" 40"))
  ampHCP0dB=float(TopCmds.GETPAR("SPdB 40"))
  #ampHCP0=float(TopCmds.GETPAR("PL"+units+" 10"))
  #ampHCP0dB=float(TopCmds.GETPAR("PLdB 10"))
  SPH=TopCmds.GETPAR2("SPNAM 40")
  
  p90X=float(TopCmds.GETPAR("P 1"))
  ampX=float(TopCmds.GETPAR("PL"+units+" 1"))
  ampXdB=float(TopCmds.GETPAR("PLdB 1"))
  
  ampXCP0=float(TopCmds.GETPAR("SP"+units+" 41"))
  ampXCP0dB=float(TopCmds.GETPAR("SPdB 41"))
  #ampXCP0=float(TopCmds.GETPAR("PL"+units+" 20"))
  #ampXCP0dB=float(TopCmds.GETPAR("PLdB 20"))
  SPX=TopCmds.GETPAR2("SPNAM 41")
  
  CNCT=float(TopCmds.GETPAR("P 15"))

  params = TopCmds.INPUT_DIALOG("HC CP MAS adjustment", "Proton Carbon Cross Polarization", \
  ["Old MAS rate","New MAS rate","Old 13C power","Old 1H power","Contact Time(P15)","H-Ramp","C-Ramp"],\
  [str(MAS0),str(MAS),str(ampXCP0),str(ampHCP0),str(CNCT),SPH,SPX],\
  ["Hz","Hz",units,units,"us","",""],\
  ["1","1","1","1","1","1","1"],\
  ["Accept","Close"], ['a','c'], 10)

  if units == "W":
    params[2]=str(Setup.WtodB(float(params[2])))
    params[3]=str(Setup.WtodB(float(params[3])))

  if SPH != "None" and SPH != None:
    avgH0=IntShape.Integrate(SPH)/100.
  if SPX != "None" and SPX != None:
    avgX0=IntShape.Integrate(SPX)/100.
  
  pulses=p90H,ampHdB,p90X,ampXdB,avgH0,avgX0
  
  SelectorText="Adjust the HC CP parameters:","Calculate New Match for:",\
  ["Proton","Carbon","Maximum for Both"]
  
  ampHCPdB, ampXCPdB = FindMatch(params,pulses,SelectorText)

  if units == "W":
    ampXCP=Setup.dBtoW(ampXCPdB)
    ampHCP=Setup.dBtoW(ampHCPdB)
  
  value = TopCmds.SELECT("Adjusting the HC CP parameters:",\
  "This will set\n 1H power to:  " + str('%3.2f' %ampHCP)+ " "+units+"\n \
  13C power to:  " +str('%3.2f' %ampXCP) + " "+units,["Update", "Keep Previous"])
    
  if value != 1:
    TopCmds.PUTPAR("PLdB 40",str('%3.2f' %ampHCPdB))
    TopCmds.PUTPAR("SPdB 40",str('%3.2f' %ampHCPdB))
    TopCmds.PUTPAR("PLdB 41",str('%3.2f' %ampXCPdB))
    TopCmds.PUTPAR("SPdB 41",str('%3.2f' %ampXCPdB))
    TopCmds.PUTPAR("P 15" ,params[4])
    TopCmds.PUTPAR("SPNAM 40",params[5])
    TopCmds.PUTPAR("SPNAM 41",params[6])
예제 #19
0
def CalNCO():
  p90C=float(TopCmds.GETPAR("P 1"))
  ampC=float(TopCmds.GETPAR("PLdB 1"))
  p90N=float(TopCmds.GETPAR("P 21"))
  ampN=float(TopCmds.GETPAR("PLdB 21"))
  MAS =float(TopCmds.GETPAR("CNST 31"))
  SP=TopCmds.GETPAR("SPNAM 3")
  CNCT=float(TopCmds.GETPAR("P 16"))

  if CNCT <= 1.: CNCT = 3500.
  if SP == "gauss" or SP == "None" :
    #TopCmds.MSG("Please set spnam3")
    TopCmds.XCMD("spnam3")
    SP=(TopCmds.GETPAR2("SPNAM 3"))

  MaxB1N = 1000000./4./p90N
  MaxB1C = 1000000./4./p90C
  Coffs=Cfrq.ppm2offs(170.0)

  NCond=(5./2.)*MAS
  CCond=(7./2.)*MAS

  while NCond > MaxB1N :
    NCond=NCond - MAS
    CCond=NCond + MAS

  while CCond > MaxB1C :
    NCond=NCond - MAS
    CCond=NCond + MAS

  if NCond < MAS :
    NCond= 0.25*MAS
    CCond= 0.75*MAS
 
  index = TopCmds.INPUT_DIALOG("NCO off-resonance CP Input",\
   "N-CO SPECIFIC-CP w1C=7/2*wr; w1N=5/2*wr", \
  ["Carbon B1 field","Carbon offset (170ppm)","Nitrogen B1 field","Contact Time(P16)","Ramp Name"],\
  [str(CCond),str(Coffs),str(NCond),str(CNCT),SP],\
  ["Hz","Hz","Hz","us",""],\
  ["1","1","1","1","1"],\
  ["Accept","Close"], ['a','c'], 10)
  
  NCond=(float(index[2]))*MAS
  CCond=math.sqrt( (float(index[0]))**2 - (float(index[1]))**2))
  
  adjust=20*(math.log10(CCond/MaxB1C))
  Camp = ampC-adjust
  adjust=20*(math.log10(NCond/MaxB1N))
  Namp = ampN-adjust
  #Insert ramp calibration here
  AvgAmp=IntShape.Integrate(SP)/100.
  adjust=20*(math.log10(1./AvgAmp))
  Camp = Camp-adjust
  CNCT = float(index[3])
  
  CampW=pwr.dBtoW(Camp)
  NampW=pwr.dBtoW(Namp)
  
  value = TopCmds.SELECT("Adjusting the NC CP parameters:",\
  "This will set\n 13C power to:  " + str('%3.2f' %CampW)+ " W\n \
  15N power to:  " +str('%3.2f' %NampW) + " W",["Update", "Keep Previous"]) 
  if value != 1:
    TopCmds.PUTPAR("PLdB 17",str('%3.2f' %Namp))
    TopCmds.PUTPAR("PLdB 16",str('%3.2f' %Camp))
    TopCmds.PUTPAR("P 16",str('%3.2f' %CNCT))
    TopCmds.PUTPAR("SPNAM 3",SP)
      
      
예제 #20
0
def DDec(units):

    Stuff = []
    p90 = float(TopCmds.GETPAR("P 32"))
    amp = float(TopCmds.GETPAR("PLdB 31"))
    MaxB1 = 1000000. / 4. / p90

    CPD = TopCmds.GETPAR2("CPDPRG 5")
    if CPD == "mlev" or CPD == "None":
        TopCmds.XCMD("cpdprg5")
        CPD = (TopCmds.GETPAR2("CPDPRG 5"))

    Stuff = CPDtools.CPDparse(CPD, "2D")
    TopCmds.MSG(str(Stuff))
    amp0 = CPDtools.Find_old_pl(Stuff[0])
    decpw0 = CPDtools.Find_old_pw(Stuff[1], "2D")

    B1_0 = MaxB1 * (math.pow(10, (amp - amp0) / 20.)) / 1000.
    if B1_0 > 1.: B1out = '% .1f' % B1_0
    if B1_0 <= 1.: B1out = '5.0'

    index = TopCmds.INPUT_DIALOG("Mr Setup Input", "Decoupling Window", \
    ["Desired 2H Decoupling Amplitude","File"],\
    [B1out,CPD],["kHz",""],["1","1",],\
    ["Accept","Close"], ['a','c'], 10)

    TopCmds.PUTPAR("CPDPRG 5", index[1])
    adjust = 20 * (math.log10(1000. * float(index[0]) / MaxB1))
    ampli = amp - adjust
    decpw = (MaxB1 / 1000. / float(index[0])) * 2 * p90

    if units == "W":
        ampli = dBtoW(ampli)

    value = TopCmds.SELECT("Adjusting the D decoupling parameters:",\
    "This will set\n 2H power ("+ Stuff[0] +") to:  "+ str('%3.2f' %ampli)+" "+ units+"\n \
  Pulse width ("                  + Stuff[1] +"= 180deg) to:  " +str('%3.2f' %decpw) + " us",["Update", "Keep Previous"])

    if value != 1:

        if Stuff[0] == '':
            TopCmds.PUTPAR("PL" + units + " 25", str('%3.2f' % ampli))
        elif Stuff[0] == 'pl25':
            TopCmds.PUTPAR("PL" + units + " 25", str('%3.2f' % ampli))
        elif Stuff[0] == 'pl12':
            TopCmds.MSG(
                "You are using pl12 for 2H decouling.  It is usually reserved for 1H \n Please verify"
            )
            #TopCmds.PUTPAR("PLdB 12",str('%3.2f' %ampli))
        elif Stuff[0] == 'pl13':
            TopCmds.MSG(
                "You are using pl13 for 2H decouling.  It is usually reserved for 1H \n Please verify"
            )
            #TopCmds.PUTPAR("PLdB 13",str('%3.2f' %ampli))
        elif Stuff[0] == 'pl14':
            TopCmds.MSG(
                "You are using pl14 for 2H decouling.  It is usually reserved for 1H \n Please verify"
            )
            #TopCmds.PUTPAR("PLdB 14",str('%3.2f' %ampli))

        if Stuff[1] == 'pcpd':
            TopCmds.PUTPAR("PCPD 5", str('%3.2f' % decpw))
        elif Stuff[1] == 'p31':
            TopCmds.PUTPAR("P 31", str('%3.2f' % decpw))
            TopCmds.PUTPAR("P 30", str('%3.2f' % decpw))
        elif Stuff[1] == 'p62':
            TopCmds.PUTPAR("P 61", str('%3.2f' % decpw))
            TopCmds.PUTPAR("P 62", str('%3.2f' % decpw))
예제 #21
0
def HC(units):
    #44,45
    p90H = float(TopCmds.GETPAR("P 3"))
    ampH = float(TopCmds.GETPAR("PLdB 2"))
    p90C = float(TopCmds.GETPAR("P 1"))
    ampC = float(TopCmds.GETPAR("PLdB 1"))
    MAS = float(TopCmds.GETPAR("CNST 31"))

    SPH = TopCmds.GETPAR2("SPNAM 44")
    SPH0 = TopCmds.GETPAR2("SPNAM 40")

    CNCT = float(TopCmds.GETPAR("P 44"))
    CNCT0 = float(TopCmds.GETPAR("P 15"))

    MaxB1H = 1000000. / 4. / p90H
    MaxB1C = 1000000. / 4. / p90C

    if CNCT <= 1.00: CNCT = CNCT0

    if SPH == "gauss" or SPH == "None" or SPH == "":
        SPH = SPH0
        TopCmds.PUTPAR("SPNAM 44", SPH)
        TopCmds.XCMD("spnam44")
        SPH = (TopCmds.GETPAR2("SPNAM 44"))
        SPH.join()

    Hav = IntShape.Integrate(SPH)
    Hav0 = IntShape.Integrate(SPH0)
    Hint = 0.01 * ((Hav)**2) / Hav0
    #TopCmds.MSG("Hint "+str(Hint))

    Hamp0 = float(TopCmds.GETPAR("SPdB 40"))
    Camp0 = float(TopCmds.GETPAR("SPdB 41"))

    B1H = MaxB1H * Hint * math.pow(10, (ampH - Hamp0) / 20.)
    B1C = MaxB1C * math.pow(10, (ampC - Camp0) / 20.)

    index = TopCmds.INPUT_DIALOG("H-C CP", "Contact and Ramp", \
    ["Proton B1 Field","H Ramp","Carbon B1 Field","Contact Time(P44)"],\
    [str('%3.0f' %B1H),SPH,str('%3.0f' %B1C),str(CNCT)],\
    ["kHz","","kHz","us"],\
    ["1","1","1","1"],\
    ["Accept","Close"], ['a','c'], 10)

    SP = index[1]
    CNCT = float(index[3])

    adjust = 20 * (math.log10(float(index[0]) / MaxB1H))
    Hamp1 = ampH - adjust
    AvgAmp = IntShape.Integrate(index[1]) / 100.
    adjust = 20 * (math.log10(1. / AvgAmp))
    Hamp = Hamp1 - adjust

    adjust = 20 * (math.log10(float(index[2]) / MaxB1C))
    Camp = ampC - adjust

    if units == "W":
        Hamp = Setup.dBtoW(Hamp)
        Camp = Setup.dBtoW(Camp)

    value = TopCmds.SELECT("Adjusting the CH CP parameters:",\
    "This will set\n 1H power to:  " + str('%3.2f' %Hamp)+" "+units+"\n \
  13C power to:  "                     +str('%3.2f' %Camp) + units,["Update", "Keep Previous"])

    if value != 1:
        TopCmds.PUTPAR("SP" + units + " 44", str('%3.2f' % Hamp))
        TopCmds.PUTPAR("SP" + units + " 45", str('%3.2f' % Camp))
        TopCmds.PUTPAR("PL" + units + " 44", str('%3.2f' % Hamp))
        TopCmds.PUTPAR("PL" + units + " 45", str('%3.2f' % Camp))
        TopCmds.PUTPAR("P 44", str('%3.2f' % CNCT))
        TopCmds.PUTPAR("SPNAM 44", SP)