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)
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))
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))
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
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
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
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)
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"
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))
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))