Beispiel #1
0
def DREAM():
  
  oldCDREAM=float(TopCmds.GETPAR("PLdB 22"))
  RAMP=TopCmds.GETPAR("SPNAM5")
  #AvgAmpOld=IntShape.Integrate(RAMP)/100.
  
  index = TopCmds.INPUT_DIALOG("DREAM MAS", "DREAM changes for MAS change", \
  ["Old MAS rate","New MAS rate","Old 13C power","Mixing time (p20)","Ramp Name"],\
  [str(MASR),str(MAS),str(ampC5),str(LoopC5),RAMP],\
  ["kHz","kHz","dB",""],\
  ["1","1","1","1"],\
  ["Accept","Close"], ['a','c'], 10)
  
  OldMAS=float(index[0])
  NewMAS=float(index[1])
  olddB=float(index[2])
  newmix=float(index[3])
  RAMP  =index[4]
  #AvgAmpNew=IntShape.Integrate(RAMP)/100.

  adjust=20*(math.log10(NewMAS/OldMAS))
  newdB = olddB-adjust
  adjust=20*(math.log10(AvgAmpNew/AvgAmpOld))  #in case there is a Ramp change 
  newdB = newdB-adjust  
  
  TopCmds.PUTPAR("PLdB 22",str('%3.2f' %newdB))
  TopCmds.PUTPAR("P  20",str('%3.2f' %newmix))
  TopCmds.PUTPAR("SPNAM5",RAMP)
Beispiel #2
0
def GetPar(parName, unit):

    Thing = ""
    Thing = 1.

    # "has_key" is needed for Python 2.1
    #if parName in pulDict:
    #pver=sys.version_info
    #TopCmds.MSG(str(pver))

    if pulDict.has_key(parName):
        TopSpinName = pulDict[parName]
    else:
        TopSpinName = parName

    j = TopSpinName.find(" ")

    if TopSpinName.find("NAM") >= 0 or TopSpinName.find("PRG") >= 0:
        Thing = TopCmds.GETPAR(TopSpinName)

    elif TopSpinName.find("Unused") >= 0:
        Thing = "Unused"

    else:
        Thing = float(TopCmds.GETPAR(TopSpinName))

    return Thing
def CalS7purge():
  p90C=float(TopCmds.GETPAR("P 1"))
  ampC=float(TopCmds.GETPAR("PLdB 1"))
  
  MaxB1 = 1000000./4./p90C
  p90sC=float(TopCmds.GETPAR("P 7"))
  
  SPname=(TopCmds.GETPAR("SPNAM7"))
  if p90sC == 0: p90sC = 1500000./MAS
  SP=SPname
  if SP == "gauss" : SP = "3pi2SINC.wtf"
  offs = float(TopCmds.GETPAR("SPOFFS 7"))

  index = TopCmds.INPUT_DIALOG("ON-resonance 90 purge", "S7 soft 90", \
  ["Duration","Offset","Pulse Name (3pi/2 Sinc)"],\
  [str(p90sC),str(offs),SP],\
  ["us","Hz",""],\
  ["1","1","1"],\
  ["Accept","Close"], ['a','c'], 10)
  
  p90sC=float(index[0])
  offs=float(index[1])
  SP=index[2]
  
  AvgAmp=IntShape.Integrate(SP)/100.
  
  adjust=20*math.log10(p90C/p90sC/AvgAmp)
  Power=ampC-adjust
  
  TopCmds.PUTPAR("PLdB 27",str('%3.2f' %Power))
  TopCmds.PUTPAR("SPNAM7",SP)
  TopCmds.PUTPAR("SPOFFS 7",str('%8.2f' %offs))
  TopCmds.PUTPAR("P 7",str('%3.2f' %p90sC))     
Beispiel #4
0
def GetPar(parName, unit):

    Thing = ""
    Thing = 1.

    if pulDict.has_key(parName):
        # "has_key" is needed for Python 2.0
        #if parName in pulDict:
        TopSpinName = pulDict[parName]
    else:
        TopSpinName = parName

    if TopSpinName.find("NAM") >= 0 or TopSpinName.find("PRG") >= 0:
        TopSpinName = TopSpinName.replace(" ", "")
        Thing = TopCmds.GETPAR(TopSpinName)

    elif TopSpinName.find("Unused") >=0 or TopSpinName.find("Zero") >=0 or\
         TopSpinName.find("Hz") >=0     or TopSpinName.find("ppm")  >=0 or\
         TopSpinName.find("Carrier")>=0 :
        Thing = TopSpinName

    else:

        Thing = float(TopCmds.GETPAR(TopSpinName))

    return Thing
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
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
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
def CalSPC5_3():
    p90C = float(TopCmds.GETPAR("P 1"))
    ampC = float(TopCmds.GETPAR("PLdB 1"))
    MaxB1 = 1000000. / 4. / p90C
    C5B1 = 10.0 * MAS / 3.0
    adjust = 20 * (math.log10(C5B1 / MaxB1))
    condition = ampC - adjust
    TopCmds.PUTPAR("PLdB 15", str('%3.2f' % condition))
    TopCmds.PUTPAR("L 5", str(10))
def CalC72():
    p90C = float(TopCmds.GETPAR("P 1"))
    ampC = float(TopCmds.GETPAR("PLdB 1"))
    MaxB1 = 1000000. / 4. / p90C
    C7B1 = 7.0 * MAS
    adjust = 20 * (math.log10(C7B1 / MaxB1))
    Condition = ampC - adjust
    TopCmds.PUTPAR("PLdB 17", str('%3.2f' % Condition))
    TopCmds.PUTPAR("L 7", str(14))
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))
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
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
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
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
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))
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
def SPC5_3(units):
    p90C = float(TopCmds.GETPAR("P 1"))
    ampC = float(TopCmds.GETPAR("PLdB 1"))
    MaxB1 = 1000000. / 4. / p90C
    C5B1 = 10.0 * MAS / 3.0
    adjust = 20 * (math.log10(C5B1 / MaxB1))
    Condition = ampC - adjust

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

    TopCmds.PUTPAR("PL" + units + " 15", str('%3.2f' % Condition))
    TopCmds.PUTPAR("L 5", str(10))
def C72(units):
    p90C = float(TopCmds.GETPAR("P 1"))
    ampC = float(TopCmds.GETPAR("PLdB 1"))
    MaxB1 = 1000000. / 4. / p90C
    C7B1 = 7.0 * MAS
    adjust = 20 * (math.log10(C7B1 / MaxB1))
    Condition = ampC - adjust

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

    TopCmds.PUTPAR("PL" + units + " 17", str('%3.2f' % Condition))
    TopCmds.PUTPAR("L 7", str(14))
Beispiel #19
0
class O4:
  OFFS=float(TopCmds.GETPAR("O4"))
  BF=float(TopCmds.GETPAR("BF4"))
  ref=float(TopCmds.GETPAR("SR"))
  RF=BF*1000000.
  RO=OFFS-ref

  def ppm2offs(self,ppm):
    frq=(O4.RF*ppm/1000000.)- O4.RO
    return frq

  def offs2ppm(self,frq):
    ppm=(1000000./O4.RF)*(frq+O4.RO)
    return ppm
Beispiel #20
0
def GetPar(parName, unit):

    Thing = ""
    Thing = 1.

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

    if TopSpinName.find("NAM") >= 0 or TopSpinName.find("PRG") >= 0:
        Thing = TopCmds.GETPAR(TopSpinName)

    else:
        Thing = float(TopCmds.GETPAR(TopSpinName))

    return Thing
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:
        Thing = TopCmds.GETPAR(TopSpinName)

    elif TopSpinName.find("PRG") >= 0:
        #This broke in Topspin 3.1, and was fixed with GETPAR2 later
        cpd = TopCmds.GETPAR('CPDPRG')
        cpd = cpd.replace(" ", "")
        #TopCmds.MSG(cpd)
        cpdnum = ""
        for i in TopSpinName:
            if i.isdigit(): cpdnum = cpdnum + i

        j = 0
        k = 0
        l = 0
        m = 0
        n = 0
        for i in cpd:
            j = j + 1
            if i == "<": k = k + 1
            if i == ">": l = l + 1
            if k == int(cpdnum): n = j
            if l == int(cpdnum): m = j
        Thing = cpd[n + 1:m]
    elif (TopSpinName.find("SP") >=0 and TopSpinName.find("NAM") <= 0) \
    or TopSpinName.find("PL") >= 0 :
        Thing = float(TopCmds.GETPAR(TopSpinName[:j] + unit + TopSpinName[j:]))
    elif TopSpinName.find("Unused") >= 0:
        Thing = "Unused"
    else:
        Thing = float(TopCmds.GETPAR(TopSpinName))

    return Thing
Beispiel #22
0
def dialog():
    MAS = TopCmds.GETPAR("CNST 31")
    #MSG(MAS)
    input = TopCmds.INPUT_DIALOG("EXPORTinput", "", \
    ["13C field ","15N field ","MAS ", "steps in Export Element", "C(Ix+Sx)=CFx", "B Iy", "B Sy", "Initial Phase"],\
    ["50","50",str(MAS),"100", "7.0", "0.375", "0.625", "90"],\
    ["kHz","kHz","Hz","","","","",""],\
    ["1","1", "1", "1", "1", "1", "1", "1"],\
    ["Accept","Close"], ['a','c'], 10)
    return input
Beispiel #23
0
def dialog():
    MAS = float(TopCmds.GETPAR("CNST 31"))
    TauR = float(1000000 / MAS)
    input = TopCmds.INPUT_DIALOG("R2T input", "", \
    ["Nominal RF ampl","MAS","R2T duration","RI,RO duration","steps","Ramp","I offset","S offset"],\
    ["85",str('%.0f' % MAS),"1.5",str( '%3.2f' % (TauR)),"1000","20","8.000","6.000"],\
    ["kHz"," Hz","ms","us","","+/- %","kHz","kHz"],\
    ["1","1","1","1","1","1","1","1"],\
    ["Accept","Close"], ['a','c'], 10)

    return input
def dialog(Scale, Delta, Beta):
    MAS = float(TopCmds.GETPAR("CNST 31"))
    TauR = float(1000000 / MAS)

    input = TopCmds.INPUT_DIALOG("DREAM input", "", \
    ["Total Duration","RI,RO duration","Scale","Ramp","Adiabicity"],\
    ["1.0",str( '%3.2f' % TauR),str( '%3.1f' % Scale),str( '%3.1f' % Delta),str( '%3.1f' % Beta)],\
    ["ms","us","%","+/- %",""],\
    ["1","1","1","1","1","1","1"],\
    ["Accept","Close"], ['a','c'], 10)
    return input
def dialog():
    MAS = float(TopCmds.GETPAR("CNST 31"))
    TauR = float(1000000 / MAS)
    Data = TopCmds.INPUT_DIALOG("Tangent Ramp Input", "", \
    ["Scaling","steps","Ramp (Delta)","Adiabicity (Beta)"],\
    ["50","500","20","4"],\
    ["%","","%",""],\
    ["1","1","1","1"],\
    ["Accept","Close"], ['a','c'], 10)

    return Data
def main():
    import TS_Version as Ver
    import TopCmds

    pp = TopCmds.GETPAR("PULPROG")

    found = 0
    name = ""

    ver = get_PPvers(pp)
    name = get_TSver(ver)
    pul = __import__(name)
Beispiel #27
0
  def __init__(self,name,channel):
    #initialize the frequency
    self.name   = name
    self.offsp  = float(TopCmds.GETPAR("O"+str(channel)+"P"))
    self.offs   = float(TopCmds.GETPAR("O"+str(channel)))
    self.bf     = float(TopCmds.GETPAR("BF"+str(channel)))
    #self.bf     = float(TopCmds.GETPAR("1 BF"+str(channel)))
    self.sf     = float(TopCmds.GETPAR("SFO"+str(channel)))
    self.rf     = self.bf*1000000.
    if TopCmds.GETPROCDIM() >= channel:
      self.ref  = float(TopCmds.GETPAR(str(channel)+" SR"))
    else:
      self.ref  = 0.
    self.ro     = self.offs-self.ref
    #self.carr   = 

    if self.name.find("1H")>=0: self.nucl="1H"
    if self.name.find("C")>=0: self.nucl="13C"
    if self.name.find("2H")>=0: self.nucl="2H"
    if self.name.find("D")>=0: self.nucl="2H"
    if self.name.find("N")>=0: self.nucl="15N"
Beispiel #28
0
def C72():
  
  oldC7=float(TopCmds.GETPAR("PLdB 17"))
  LoopC7=float(TopCmds.GETPAR("L 7"))
  
  index = TopCmds.INPUT_DIALOG("POST-C7 MAS", "POST-C7 changes for MAS change", \
  ["Old MAS rate","New MAS rate","Old 13C power","Mixing Loop (L7)"],\
  [str(MASR),str(MAS),str(ampC7),str(LoopC7)],\
  ["kHz","kHz","dB",""],\
  ["1","1","1","1"],\
  ["Accept","Close"], ['a','c'], 10)
  
  OldMAS=float(index[0])
  NewMAS=float(index[1])
  oldC7=float(index[2])
  newL7 =float(index[3])

  adjust=20*(math.log10(NewMAS/OldMAS))
  newC7=oldC7-adjust
  TopCmds.PUTPAR("PLdB 17",str('%3.2f' %Condition))
  TopCmds.PUTPAR("L 7",str(14))
Beispiel #29
0
def SPC5():
  
  oldC5=float(TopCmds.GETPAR("PLdB 15"))
  LoopC5=float(TopCmds.GETPAR("L 5"))
  
  index = TopCmds.INPUT_DIALOG("SPC5 MAS", "SPC5_2,3 changes for MAS change", \
  ["Old MAS rate","New MAS rate","Old 13C power","Mixing Loop (L5)"],\
  [str(MASR),str(MAS),str(ampC5),str(LoopC5)],\
  ["kHz","kHz","dB",""],\
  ["1","1","1","1"],\
  ["Accept","Close"], ['a','c'], 10)
  
  OldMAS=float(index[0])
  NewMAS=float(index[1])
  oldC5=float(index[2])
  newL5 =float(index[3])
 
  adjust=20*(math.log10(NewMAS/OldMAS))
  newC5=oldC5-adjust
  TopCmds.PUTPAR("PLdB 15",str('%3.2f' %newC5))
  TopCmds.PUTPAR("L 5",str(newL5))
def CalS9refocus():
  p90C=float(TopCmds.GETPAR("P 1"))
  ampC=float(TopCmds.GETPAR("PLdB 1"))
  
  MaxB1 = 1000000./4./p90C
  p180sC=float(TopCmds.GETPAR("P 9"))
  
  SPname=(TopCmds.GETPAR("SPNAM9"))
  if p180sC == 0: p90sC = 1500000./MAS
  SP=SPname
  if SP == "gauss" : SP = "RSnob"
  offs = float(TopCmds.GETPAR("SPOFFS 9"))

  index = TopCmds.INPUT_DIALOG("OFF-resonance 180 Refocussing", "S9 soft 180", \
  ["Duration","Offset","Pulse Name (RSnob)"],\
  [str(p180sC),str(offs),SP],\
  ["us","Hz",""],\
  ["1","1","1"],\
  ["Accept","Close"], ['a','c'], 10)
  p180sC=float(index[0])
  offs=float(index[1])
  SP=index[2]
  
  #TopCmds.MSG(str(p90sC)+' p90sC')
  AvgAmp=IntShape.Integrate(SP)/100.
  adjust=20*math.log10(2*p90C/p180sC/AvgAmp)
  #TopCmds.MSG(str(adjust)+'adjust')
  
  Power=ampC-adjust
  
  #TopCmds.MSG(str(Power))
  
  TopCmds.PUTPAR("PLdB 29",str('%3.2f' %Power))
  TopCmds.PUTPAR("SPNAM9",SP)
  TopCmds.PUTPAR("SPOFFS 9",str('%8.2f' %offs))
  TopCmds.PUTPAR("P 9",str('%3.2f' %p180sC))