Montana State University
Academics | Administration | Admissions | A-Z Index | Directories

Montana State Universityspacer Mountains and Minds
MSU AcademicsspacerMSU AdministrationspacerMSU AdmissionsspacerMSU A-Z IndexspacerMSU Directoriesspacer
 
> CBIN Home >NCMS

NCMS

Welcome to the NC/MS charge state assignment macro download site.

Any questions should be directed to Lars Liepold, larsoliepold@gmail.com. Please put "NC/MS macro" in the subject line of the email.

Users of this macro will have to purchase the scientific graphing, data analysis, image processing and programming software called Igor Pro (version 5.03 or higher.)
This software can be found at: http://www.wavemetrics.com/

Once Igor Pro has been installed onto your computer copy the Macro code below (text) and then paste it into a text file (.txt). Then rename the text file as "NCMS_v2008_08_30a.ipf". Make sure the file extension is ".ipf" and not ".txt"

Now start the Igor Pro program and press [Open File] > [Procedure] and open the "NCMS_v2008_08_30a.ipf" file that you made.

Then press [Macro] > [compile]

(It may be helpful to minimize all windows that are open in the Igor Pro program.)

Then press [Macro] > [LoadSpectrum]. There is a "wheel" that turns on the bottom, left side of the Igor Pro window that indicates when a macro is performing a task, wait until the task is complete to proceed to the next step.

Follow the suggestions that pop up.

 

Start of the macro code (do not copy this line)
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Macro LoadSpectrum()

killwaves/Z wave0
killwaves/Z wave1

DoWindow/K IonSummary
DoWindow/K RawData
DoWindow/K Summary0
DoWindow/K WidthVsIonNumber
DoWindow/K ChargestateIteration
DoWindow/K MassVsChargestate
DoWindow/K MassVsCorrectedIonPeakWidth

LoadWave/G/D/A=wave

make/O/N=(numpnts(wave0)) RawMZ

make/O/N=(numpnts(wave0)) RawInt

 

RawMZ = wave0

RawInt = wave1

 

Display/N=RawData RawInt vs RawMZ

 

SetAxis/W=RawData/A

ModifyGraph highTrip(bottom)=1e+07;DelayUpdate

Label bottom "m/z"

ModifyGraph width=300,height=200

RemoveFromGraph/W=RawData/Z CS0

RemoveFromGraph/W=RawData/Z CS1

RemoveFromGraph/W=RawData/Z CS2

RemoveFromGraph/W=RawData/Z CS3

RemoveFromGraph/W=RawData/Z CS4

RemoveFromGraph/W=RawData/Z CS5

RemoveFromGraph/W=RawData/Z CS6

RemoveFromGraph/W=RawData/Z CS7

RemoveFromGraph/W=RawData/Z CS8

RemoveFromGraph/W=RawData/Z CS9

RemoveFromGraph/W=RawData/Z CS10

RemoveFromGraph/W=RawData/Z CS11

RemoveFromGraph/W=RawData/Z CS12

RemoveFromGraph/W=RawData/Z CS13

RemoveFromGraph/W=RawData/Z CS14

RemoveFromGraph/W=RawData/Z CS15

RemoveFromGraph/W=RawData/Z CS16

RemoveFromGraph/W=RawData/Z CS17

RemoveFromGraph/W=RawData/Z CS18

RemoveFromGraph/W=RawData/Z CS19

RemoveFromGraph/W=RawData/Z CS20

RemoveFromGraph/W=RawData/Z fit_RawInt

make/O/N=(200) res

make/O/N=(2) Mr

Doalert 1,"Do you want to see suggestion boxes during this analysis session?"

res(199) = V_flag

if (res(199) ==1)

Doalert 0,"To zoom into the area of interest:\rLeft click and make a box around the area of interest, then right click inside the box and select [Expand].\rTo zoom out press Ctrl+A"

endif

EndMacro

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Macro InitialMassGuess(yval,zval,aval,bval,cval)

Variable yval=res(21), zval=res(9), aval=res(10), bval = res(111), cval = res(112) // declare numeric params

Prompt yval, "guess mass"

Prompt zval, "number of ions left of biggest ion" // set prompt for xval param

Prompt aval, "number of ions right of biggest ion"

Prompt bval, "low m/z limit in the range of interest"

Prompt cval, "high m/z limit in the range of interest"

res(21) = yval

res(9) = zval

res(10) = aval

res(111) = bval

res(112) = cval

DoWindow/K IonSummary

DoWindow/K Summary0

DoWindow/K WidthVsIonNumber

DoWindow/K ChargestateIteration

DoWindow/K MassVsChargestate

DoWindow/K MassVsCorrectedIonPeakWidth

Tag/W=RawData/K/N=text0

RemoveFromGraph/W=RawData/Z PeakInt

RemoveFromGraph/W=RawData/Z SmoothRawInt

 

RemoveFromGraph/W=RawData/Z CS0

RemoveFromGraph/W=RawData/Z CS1

RemoveFromGraph/W=RawData/Z CS2

RemoveFromGraph/W=RawData/Z CS3

RemoveFromGraph/W=RawData/Z CS4

RemoveFromGraph/W=RawData/Z CS5

RemoveFromGraph/W=RawData/Z CS6

RemoveFromGraph/W=RawData/Z CS7

RemoveFromGraph/W=RawData/Z CS8

RemoveFromGraph/W=RawData/Z CS9

RemoveFromGraph/W=RawData/Z CS10

RemoveFromGraph/W=RawData/Z CS11

RemoveFromGraph/W=RawData/Z CS12

RemoveFromGraph/W=RawData/Z CS13

RemoveFromGraph/W=RawData/Z CS14

RemoveFromGraph/W=RawData/Z CS15

RemoveFromGraph/W=RawData/Z CS16

RemoveFromGraph/W=RawData/Z CS17

RemoveFromGraph/W=RawData/Z CS18

RemoveFromGraph/W=RawData/Z CS19

RemoveFromGraph/W=RawData/Z CS20

RemoveFromGraph/W=RawData/Z fit_RawInt

variable LowRange, HighRange

findlevel RawMZ res(111)

LowRange = V_LevelX

findlevel RawMZ res(112)

HighRange = V_LevelX

res(113) = LowRange

res(114) = HighRange

SetAxis/W=RawData left 0,1

SetAxis/W=RawData bottom res(111),res(112)

wavestats/R=(LowRange,HighRange) RawInt

Variable BiggestIon, IntensityOfBiggestIon

BiggestIon = RawMZ(V_maxloc)

IntensityOfBiggestIon = V_max

res(89) = BiggestIon

 

Variable GuessChargestate

GuessChargestate = round( (yval/BiggestIon) )

res(89) = GuessChargestate

res(0)=1 //resMS

res(2)= (1+res(9)+res(10)) //number_of_Charges

res(1)= (GuessChargestate-res(10))//first_charge

res(3)=6 //ChargestateIntensityDistribution

res(4)= GuessChargestate//round((Mr(0)/1000)^(2/3))//MaxCharge

RawInt = RawInt / IntensityOfBiggestIon

Mr(0) = ((GuessChargestate*BiggestIon)-GuessChargestate)

make/O/N=(res(2)) Charges

make/O/N=(res(2)) PeakWidth

Redimension/N=(res(2)) Charges

Redimension/N=(res(2)) PeakWidth

 

Variable i

do

Charges(i)= i + res(1)

i += 1 // increment our loop variable

while(i < (numpnts(Charges)) )

 

make/O/N=(res(2)) CSI

Redimension/N=(numpnts(Charges)) CSI

CSI = 1

 

wavestats RawMZ

make/O/N = (round(V_max)) m_z_range

m_z_range = x

 

make/O/N=(numpnts(m_z_range)) m

make/O/N=(numpnts(m_z_range)) n

Redimension/N=(numpnts(m_z_range)) m

Redimension/N=(numpnts(m_z_range)) n

m = 0

n = 0

RemoveFromGraph/W=RawData/Z n

AppendToGraph/W=RawData/L n vs m_z_range

ModifyGraph/W=RawData rgb(n)=(0,0,52224)

Variable j

do

m= exp (-( (( m_z_range - ( (((res(5)*res(10))+Mr(0)+Charges(j)-((j)*res(5)))/Charges(j)) ) ) / res(0)) )^2)*CSI(j)

n=m+n

 

j += 1

while(j <(numpnts(Charges)))

if (res(199) ==1)

Doalert 0,"Does the calculated m/z values (blue) match the raw spectrum well?\r-Yes, select [Macro] > [FindWidthAndCenter]\r-No: If the calculated m/z values are too wide, try a larger guess mass. If the calculated m/z values are too narrow try a smaller guess."

endif

 

EndMacro

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Macro FindCenterAndWidth(zval,yval)

Variable zval = res(106), yval = res(198)

Prompt zval, "Enter smoothing value, bigger numbers result in more smoothing."

Prompt yval, "Enter peak offset"

res(198) = (yval)

res(106) = zval

 

variable width, y, j, x,left,right,s,PeakCenter,LeftSide, RightSide

DoWindow/K IonSummary

DoWindow/K Summary0

DoWindow/K WidthVsIonNumber

DoWindow/K ChargestateIteration

DoWindow/K MassVsChargestate

DoWindow/K MassVsCorrectedIonPeakWidth

Tag/W=RawData/K/N=text0

 

wavestats/R=(res(113),res(114)) RawInt

RawInt = RawInt + V_min

wavestats/R=(res(113),res(114)) RawInt

RawInt = RawInt / V_max

 

Duplicate/O RawInt,SmoothRawInt;DelayUpdate

Smooth/B res(106), SmoothRawInt

wavestats/R=(res(113),res(114)) SmoothRawInt

SmoothRawInt = SmoothRawInt - V_min - res(55)

RawInt = RawInt - V_min - res(55)

wavestats/R=(res(113),res(114)) SmoothRawInt

SmoothRawInt = SmoothRawInt / V_max *1.01

RawInt = RawInt / V_max *1.01

 

RemoveFromGraph/W=RawData/Z SmoothRawInt

AppendToGraph/W=RawData/L SmoothRawInt vs RawMZ

ModifyGraph/W=RawData rgb(SmoothRawInt)=(0,39168,0)

ModifyGraph/W=RawData lsize(SmoothRawInt)=1.5

 

make/O/N=(numpnts(Charges)) PeakMaxGuess

redimension/N =(numpnts(Charges)) PeakMaxGuess

PeakMaxGuess = 1

make/O/N=(numpnts(Charges)) PeakMax

redimension/N =(numpnts(Charges)) PeakMax

PeakMax = 1

make/O/N=(numpnts(Charges)) PeakWidth

redimension/N =(numpnts(Charges)) PeakWidth

PeakWidth = 1

make/O/N=(numpnts(Charges)) mass

redimension/N =(numpnts(Charges)) mass

mass = 1

make/O/N=(numpnts(Charges)) PeakInt

redimension/N =(numpnts(Charges)) PeakInt

PeakInt = 1

 

make/O/N=(numpnts(Charges)) IonNumber

redimension/N =(numpnts(Charges)) IonNumber

variable iii

iii=0

do

IonNumber(iii) = iii

iii = iii+1

while(iii < numpnts(Charges))

IonNumber = IonNumber +1

RemoveFromGraph/W=RawData/Z PeakInt

AppendToGraph/W=RawData/L PeakInt vs PeakMax

ModifyGraph/W=RawData marker(PeakInt)=42,msize(PeakInt)=10,mrkThick(PeakInt)=1

ModifyGraph/W=RawData mode(PeakInt)=3,rgb(PeakInt)=(0,0,0)

 

do

PeakMaxGuess(j) = (((res(5)*res(10))+Mr(0)+Charges(j)-((j)*res(5)))/Charges(j))

j = j+1

while(j <= numpnts(Charges))

 

 

 

RemoveFromGraph/W=RawData/Z CS0

RemoveFromGraph/W=RawData/Z CS1

RemoveFromGraph/W=RawData/Z CS2

RemoveFromGraph/W=RawData/Z CS3

RemoveFromGraph/W=RawData/Z CS4

RemoveFromGraph/W=RawData/Z CS5

RemoveFromGraph/W=RawData/Z CS6

RemoveFromGraph/W=RawData/Z CS7

RemoveFromGraph/W=RawData/Z CS8

RemoveFromGraph/W=RawData/Z CS9

RemoveFromGraph/W=RawData/Z CS10

RemoveFromGraph/W=RawData/Z CS11

RemoveFromGraph/W=RawData/Z CS12

RemoveFromGraph/W=RawData/Z CS13

RemoveFromGraph/W=RawData/Z CS14

RemoveFromGraph/W=RawData/Z CS15

RemoveFromGraph/W=RawData/Z CS16

RemoveFromGraph/W=RawData/Z CS17

RemoveFromGraph/W=RawData/Z CS18

RemoveFromGraph/W=RawData/Z CS19

RemoveFromGraph/W=RawData/Z CS20

variable RangeOfPeakCenterGuess, RRR, LLL,ION

wavestats PeakMaxGuess

ION = V_npnts

findlevel RawMZ PeakMaxGuess(ION-1)

RRR = V_LevelX

findlevel RawMZ PeakMaxGuess(ION-2)

LLL = V_LevelX

RangeOfPeakCenterGuess = (LLL-RRR)/3

y=0

do

findlevel RawMZ PeakMaxGuess(y)

wavestats/R = ( ( V_LevelX - RangeOfPeakCenterGuess ) , ( V_LevelX + RangeOfPeakCenterGuess ) ) SmoothRawInt //This finds the peak top and center

PeakMax(y) = RawMZ(V_maxloc)

res(107) = V_max

y = y+1

while(y <= numpnts(Charges))

 

s=0

do

findlevel RawMZ PeakMax(s)

wavestats/R = ( ( V_LevelX - RangeOfPeakCenterGuess ) , ( V_LevelX + RangeOfPeakCenterGuess ) ) SmoothRawInt //This finds the peak top and center

PeakCenter = V_LevelX

res(108) = PeakCenter

PeakInt(s) = SmoothRawInt(PeakCenter)

res(109) = PeakInt(s)

findlevel/Q/R = ( ( PeakCenter - 1 ) , ( PeakCenter - RangeOfPeakCenterGuess*3 ) ) SmoothRawInt (PeakInt(s)/2)

LeftSide = V_LevelX

findlevel/Q/R = ( ( PeakCenter + 1 ) , ( PeakCenter + RangeOfPeakCenterGuess*3 ) ) SmoothRawInt (PeakInt(s)/2)

RightSide = V_LevelX

 

Peakwidth(s) = RawMZ(RightSide) - RawMZ(LeftSide)

 

if (s == 0)

killwaves/Z CS0

Make/N=2/D/O CS0

killwaves/Z CS0r

Make/N=2/D/O CS0r

CS0 = PeakInt(s)/2

CS0r(0) = RawMZ(RightSide)

CS0r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS0 vs CS0r

ModifyGraph/W=RawData lsize(CS0)=2,rgb(CS0)=(0,0,0)

endif

 

if (s == 1)

killwaves/Z CS1

Make/N=2/D/O CS1

killwaves/Z CS1r

Make/N=2/D/O CS1r

CS1 = PeakInt(s)/2

CS1r(0) = RawMZ(RightSide)

CS1r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS1 vs CS1r

ModifyGraph/W=RawData lsize(CS1)=2,rgb(CS1)=(0,0,0)

endif

if (s == 2)

killwaves/Z CS2

Make/N=2/D/O CS2

killwaves/Z CS2r

Make/N=2/D/O CS2r

CS2 = PeakInt(s)/2

CS2r(0) = RawMZ(RightSide)

CS2r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS2 vs CS2r

ModifyGraph/W=RawData lsize(CS2)=2,rgb(CS2)=(0,0,0)

endif

if (s == 3)

killwaves/Z CS3

Make/N=2/D/O CS3

killwaves/Z CS3r

Make/N=2/D/O CS3r

CS3 = PeakInt(s)/2

CS3r(0) = RawMZ(RightSide)

CS3r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS3 vs CS3r

ModifyGraph/W=RawData lsize(CS3)=2,rgb(CS3)=(0,0,0)

endif

if (s == 4)

killwaves/Z CS4

Make/N=2/D/O CS4

killwaves/Z CS4r

Make/N=2/D/O CS4r

CS4 = PeakInt(s)/2

CS4r(0) = RawMZ(RightSide)

CS4r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS4 vs CS4r

ModifyGraph/W=RawData lsize(CS4)=2,rgb(CS4)=(0,0,0)

endif

if (s == 5)

killwaves/Z CS5

Make/N=2/D/O CS5

killwaves/Z CS5r

Make/N=2/D/O CS5r

CS5 = PeakInt(s)/2

CS5r(0) = RawMZ(RightSide)

CS5r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS5 vs CS5r

ModifyGraph/W=RawData lsize(CS5)=2,rgb(CS5)=(0,0,0)

endif

if (s == 6)

killwaves/Z CS6

Make/N=2/D/O CS6

killwaves/Z CS6r

Make/N=2/D/O CS6r

CS6 = PeakInt(s)/2

CS6r(0) = RawMZ(RightSide)

CS6r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS6 vs CS6r

ModifyGraph/W=RawData lsize(CS6)=2,rgb(CS6)=(0,0,0)

endif

if (s == 7)

killwaves/Z CS7

Make/N=2/D/O CS7

killwaves/Z CS7r

Make/N=2/D/O CS7r

CS7 = PeakInt(s)/2

CS7r(0) = RawMZ(RightSide)

CS7r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS7 vs CS7r

ModifyGraph/W=RawData lsize(CS7)=2,rgb(CS7)=(0,0,0)

endif

if (s == 8)

killwaves/Z CS8

Make/N=2/D/O CS8

killwaves/Z CS8r

Make/N=2/D/O CS8r

CS8 = PeakInt(s)/2

CS8r(0) = RawMZ(RightSide)

CS8r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS8 vs CS8r

ModifyGraph/W=RawData lsize(CS8)=2,rgb(CS8)=(0,0,0)

endif

if (s == 9)

killwaves/Z CS9

Make/N=2/D/O CS9

killwaves/Z CS9r

Make/N=2/D/O CS9r

CS9 = PeakInt(s)/2

CS9r(0) = RawMZ(RightSide)

CS9r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS9 vs CS9r

ModifyGraph/W=RawData lsize(CS9)=2,rgb(CS9)=(0,0,0)

endif

if (s == 10)

killwaves/Z CS10

Make/N=2/D/O CS10

killwaves/Z CS10r

Make/N=2/D/O CS10r

CS10 = PeakInt(s)/2

CS10r(0) = RawMZ(RightSide)

CS10r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS10 vs CS10r

ModifyGraph/W=RawData lsize(CS10)=2,rgb(CS10)=(0,0,0)

endif

if (s == 11)

killwaves/Z CS11

Make/N=2/D/O CS11

killwaves/Z CS11r

Make/N=2/D/O CS11r

CS11 = PeakInt(s)/2

CS11r(0) = RawMZ(RightSide)

CS11r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS11 vs CS11r

ModifyGraph/W=RawData lsize(CS11)=2,rgb(CS11)=(0,0,0)

endif

if (s == 12)

killwaves/Z CS12

Make/N=2/D/O CS12

killwaves/Z CS12r

Make/N=2/D/O CS12r

CS12 = PeakInt(s)/2

CS12r(0) = RawMZ(RightSide)

CS12r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS12 vs CS12r

ModifyGraph/W=RawData lsize(CS12)=2,rgb(CS12)=(0,0,0)

endif

if (s == 13)

killwaves/Z CS13

Make/N=2/D/O CS13

killwaves/Z CS13r

Make/N=2/D/O CS13r

CS13 = PeakInt(s)/2

CS13r(0) = RawMZ(RightSide)

CS13r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS13 vs CS13r

ModifyGraph/W=RawData lsize(CS13)=2,rgb(CS13)=(0,0,0)

endif

if (s == 14)

killwaves/Z CS14

Make/N=2/D/O CS14

killwaves/Z CS14r

Make/N=2/D/O CS14r

CS14 = PeakInt(s)/2

CS14r(0) = RawMZ(RightSide)

CS14r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS14 vs CS14r

ModifyGraph/W=RawData lsize(CS14)=2,rgb(CS14)=(0,0,0)

endif

if (s == 15)

killwaves/Z CS15

Make/N=2/D/O CS15

killwaves/Z CS15r

Make/N=2/D/O CS15r

CS15 = PeakInt(s)/2

CS15r(0) = RawMZ(RightSide)

CS15r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS15 vs CS15r

ModifyGraph/W=RawData lsize(CS15)=2,rgb(CS15)=(0,0,0)

endif

if (s == 16)

killwaves/Z CS16

Make/N=2/D/O CS16

killwaves/Z CS16r

Make/N=2/D/O CS16r

CS16 = PeakInt(s)/2

CS16r(0) = RawMZ(RightSide)

CS16r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS16 vs CS16r

ModifyGraph/W=RawData lsize(CS16)=2,rgb(CS16)=(0,0,0)

endif

if (s == 17)

killwaves/Z CS17

Make/N=2/D/O CS17

killwaves/Z CS17r

Make/N=2/D/O CS17r

CS17 = PeakInt(s)/2

CS17r(0) = RawMZ(RightSide)

CS17r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS17 vs CS17r

ModifyGraph/W=RawData lsize(CS17)=2,rgb(CS17)=(0,0,0)

endif

if (s == 18)

killwaves/Z CS18

Make/N=2/D/O CS18

killwaves/Z CS18r

Make/N=2/D/O CS18r

CS18 = PeakInt(s)/2

CS18r(0) = RawMZ(RightSide)

CS18r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS18 vs CS18r

ModifyGraph/W=RawData lsize(CS18)=2,rgb(CS18)=(0,0,0)

endif

if (s == 19)

killwaves/Z CS19

Make/N=2/D/O CS19

killwaves/Z CS19r

Make/N=2/D/O CS19r

CS19 = PeakInt(s)/2

CS19r(0) = RawMZ(RightSide)

CS19r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS19 vs CS19r

ModifyGraph/W=RawData lsize(CS19)=2,rgb(CS19)=(0,0,0)

endif

if (s == 20)

killwaves/Z CS20

Make/N=2/D/O CS20

killwaves/Z CS20r

Make/N=2/D/O CS20r

CS20 = PeakInt(s)/2

CS20r(0) = RawMZ(RightSide)

CS20r(1) = RawMZ(LeftSide)

AppendToGraph/W=RawData CS20 vs CS20r

ModifyGraph/W=RawData lsize(CS20)=2,rgb(CS20)=(0,0,0)

endif

s = s+1

while(s <= numpnts(Charges))

wavestats/R=(res(113),res(114)) RawInt

RawInt = RawInt + V_min

wavestats/R=(res(113),res(114)) RawInt

RawInt = RawInt / V_max

SetAxis/W=RawData left 0,1.1

Duplicate/O Charges CorrectPeakWidth

CorrectPeakWidth = (PeakWidth ) / PeakMax

Display/N=WidthVsIonNumber CorrectPeakWidth vs IonNumber

ModifyGraph/W=WidthVsIonNumber width=300,height=206.5

ModifyGraph/W=WidthVsIonNumber mode=3,marker=19,msize=3,rgb=(0,0,0)

ModifyGraph/W=WidthVsIonNumber highTrip(left)=1e+07

Label/W=WidthVsIonNumber left "\\f03CPW\\BZ "

Label/W=WidthVsIonNumber bottom "\f01Low\f03 Z\f01 <<< \f03Ion Number \f01>>> High\f03 Z"

TileWindows/O=1/A=(3,3)

if (res(199) ==1)

Doalert 0,"Make sure that the peaks are smoothed enough to produce true peak tops, if not redo this step."

Doalert 0,"Does (CPWz) decrease as the (Ion Number) increases?.\rYes, the spectrum is non-ideal.\rNo, the spectrum is idea."

Doalert 0,"Once adequate smoothing has been performed select [Macro] > [DetermineChargestate]."

endif

End macro

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Macro DetermineChargestate()

variable f,g,CorrectMaxChargestate,q,MaxPercentMassIncrease,MinPercentMassIncrease,MaxPeakWidth,MinPeakWidth

variable TrueComplexMassGuess

Duplicate/O Charges TestChargestate

Duplicate/O Charges TestMass

Duplicate/O Charges PercentMassIncrease

Duplicate/O Charges CorrectPeakWidth

Duplicate/O TestMass CorrectMass

CorrectPeakWidth = 0

TestChargestate = 0

CorrectMass = 0

 

Duplicate/O TestChargestate GuessChargestate1

redimension/N=21 GuessChargestate1

GuessChargestate1 = 0

 

Duplicate/O GuessChargestate1 Error1

Error1 = 0

 

Duplicate/O GuessChargestate1 Slope

Slope = 0

 

Duplicate/O GuessChargestate1 RSquared

RSquared = 0

Duplicate/O TestChargestate Zero

redimension/N=21 Zero

Zero = 0

Duplicate/O TestChargestate Correct

redimension/N=2 Correct

Correct = 0

 

Duplicate/O TestChargestate CorrectY

redimension/N=2 CorrectY

CorrectY = 0

 

Duplicate/O TestChargestate CorrectRaw

redimension/N=2 CorrectRaw

CorrectRaw = 0

 

Duplicate/O TestChargestate CorrectYRaw

redimension/N=2 CorrectYRaw

CorrectYRaw = 0

 

DoWindow/K IonSummary

DoWindow/K Summary0

DoWindow/K ChargestateIteration

DoWindow/K MassVsChargestate

DoWindow/K MassVsCorrectedIonPeakWidth

Tag/W=RawData/K/N=text0

 

Display/N=ChargestateIteration Error1 vs GuessChargestate1

ModifyGraph/W=ChargestateIteration mode=3,marker=19,msize=3

AppendToGraph/R/W=ChargestateIteration Slope vs GuessChargestate1

ModifyGraph/W=ChargestateIteration mode=3,marker=19,msize=3,rgb(Slope)=(0,0,52224)

Label/W=ChargestateIteration bottom "\f03Z"

Label/W=ChargestateIteration left "\\f01\\K(65280,0,0)Stadard Deviation of \\f03M\\BZ\\M \\f01& \\f03M\\BESI\\M \\f01(Conventional ESI Method)"

Label/W=ChargestateIteration right "\\f01\\K(0,0,52224)Slope of \\f03%MI\\BZ \\M\\f00\\f01vs. \\f03CPW\\BZ \\M\\f01(First Positive Slope Method)"

ModifyGraph/W=ChargestateIteration width=270,height=206.5

ModifyGraph/W=ChargestateIteration nticks(bottom)=21,sep(bottom)=1,highTrip(bottom)=1,lowTrip(bottom)=1

AppendToGraph/R/W=ChargestateIteration Zero vs GuessChargestate1

ModifyGraph/W=ChargestateIteration rgb(Zero)=(0,0,0)

AppendToGraph/R/W=ChargestateIteration CorrectY vs Correct

 

f = 0

TestChargestate = Charges - 11

GuessChargestate1(f) = res(89) - 11

CorrectPeakWidth = (PeakWidth ) / PeakMax

 

wavestats CorrectPeakWidth

MaxPeakWidth = V_max

MinPeakWidth = V_min

 

Do

TestMass = 0

TestChargestate = TestChargestate + 1

GuessChargestate1(f) = GuessChargestate1(f-1) + 1

TestMass = ( TestChargestate*PeakMax ) - TestChargestate

wavestats TestMass

Error1(f) = V_sdev

CurveFit line TestMass /X=CorrectPeakWidth /D

TrueComplexMassGuess = W_coef(0)

res(91) = TrueComplexMassGuess

PercentMassIncrease = ( ( TestMass - TrueComplexMassGuess ) / TestMass ) * 100

wavestats PercentMassIncrease

MaxPercentMassIncrease = V_max

MinPercentMassIncrease = V_min

CurveFit line PercentMassIncrease /X=CorrectPeakWidth /D

Slope(f) = W_coef(1)

RSquared(f) = (V_Pr)^2

f=f+1

while (f<21)

res(90) = 0

g=0

q=0

Do

if (Slope(g)>0)

CorrectMaxChargestate = GuessChargestate1(g)

res(90) = CorrectMaxChargestate

q=1

endif

g=g+1

while (q==0)

wavestats Slope

Correct(0) = CorrectMaxChargestate

CorrectY(0) = Slope(V_minloc)

Correct(1) = CorrectMaxChargestate

CorrectY(1) = Slope(V_maxloc)

Tag/W=ChargestateIteration/C/N=text0 CorrectY, 0,"charge state predicted from 1st Positive slope method"

Tag/W=ChargestateIteration/C/N=text0/X=14/Y=26

 

wavestats/R =(res(113),res(114)) RawInt

CorrectRaw(0) = RawMZ(V_maxloc)

CorrectYRaw(0) = RawInt(V_maxloc)

RemoveFromGraph/W=RawData/Z CorrectYRaw

AppendToGraph/W=RawData CorrectYRaw vs CorrectRaw

String fitText1

sprintf fitText1, "\\f01\Z081st Posivitive Slope charge state = %g", CorrectMaxChargestate

Tag/W=RawData/C/N=text0 CorrectYRaw, 0,fitText1

Tag/W=RawData/C/N=text0/X=20/Y=8

ModifyGraph/W=RawData mode(CorrectYRaw)=2,rgb(CorrectYRaw)=(65535,65535,65535)

Charges = x - res(10)

Charges = Charges + CorrectMaxChargestate

 

wavestats Error1

res(97) = GuessChargestate1(V_minloc)

CorrectMass = ( PeakMax * Charges ) - Charges

TestMass = CorrectMass

CurveFit line TestMass /X=CorrectPeakWidth /D

res(98) = W_coef(0)//y intercept of M Vs PW

res(197) = (V_Pr)^2

 

Display/N=MassVsCorrectedIonPeakWidth TestMass vs CorrectPeakWidth

ModifyGraph/W=MassVsCorrectedIonPeakWidth width=250,height=206.5

ModifyGraph/W=MassVsCorrectedIonPeakWidth mode=3,marker=19,msize=3,rgb=(0,0,0)

ModifyGraph/W=MassVsCorrectedIonPeakWidth highTrip(left)=1e+07

Label/W=MassVsCorrectedIonPeakWidth left "\\f03M\\BZ"

Label/W=MassVsCorrectedIonPeakWidth bottom "\\f03CPW\\BZ "

if (res(197)<0.5)

TileWindows/O=1/A=(2,3)

Doalert 1,"The 1st positive slope may result from niose.\r Is there a linear correlation between Mz and CPWz?"

if (V_flag == 2)

Charges = Charges + 1

CorrectMaxChargestate = CorrectMaxChargestate + 1

CorrectMass = ( PeakMax * Charges ) - Charges

TestMass = CorrectMass

CurveFit line TestMass /X=CorrectPeakWidth /D

RemoveFromGraph/W=MassVsCorrectedIonPeakWidth/Z fit_TestMass

res(98) = W_coef(0)//y intercept of M Vs PW

res(197) = (V_Pr)^2

Tag/W=ChargestateIteration/K/N=text0

wavestats Slope

Correct(0) = CorrectMaxChargestate

CorrectY(0) = Slope(V_minloc)

Correct(1) = CorrectMaxChargestate

CorrectY(1) = Slope(V_maxloc)

Tag/W=ChargestateIteration/C/N=text0 CorrectY, 0,"charge state predicted from 1st Positive slope method"

Tag/W=ChargestateIteration/C/N=text0/X=14/Y=26

Tag/W=RawData/K/N=text0

String fitText2

sprintf fitText2, "\\f01\Z081st Posivitive Slope charge state = %g", CorrectMaxChargestate

Tag/W=RawData/C/N=text0 CorrectYRaw, 0,fitText2

Tag/W=RawData/C/N=text0/X=20/Y=8

if (res(197)<0.5)

Doalert 0,"The 1st positive slope may not be reliable"

endif

 

if (res(197)>0.5)

Doalert 0,"The 1st positive slope resulted from noise and not a linear correlation between (Mz vs. CPWz).\rTherefore the second positive slope is the true charge state."

endif

endif

endif

 

wavestats TestMass

res(99) = round(V_max - V_min)//Delta of Complex masses

PercentMassIncrease = ( ( TestMass - W_coef(0) ) / TestMass ) * 100

CurveFit line PercentMassIncrease /X=CorrectPeakWidth /D

res(92) = W_coef(0)

res(93) = W_coef(1)

res(94) = (V_Pr)^2

res(95) = ((MaxPercentMassIncrease-MinPercentMassIncrease)/numpnts(Charges))

res(96) = ((MaxPeakWidth-MinPeakWidth)/numpnts(Charges))

 

Display/N=MassVsChargestate TestMass vs Charges

ModifyGraph/W=MassVsChargestate width=250,height=206.5

ModifyGraph/W=MassVsChargestate mode=3,marker=19,msize=3,rgb=(0,0,0)

ModifyGraph/W=MassVsChargestate highTrip(left)=1e+07

Label/W=MassVsChargestate left "\\f03M\\BZ"

Label/W=MassVsChargestate bottom "\\f03Z "

 

Make/N=15/T/O SummaryText

Make/N=15/D/O Summary

Edit/K=0/N=Summary 'SummaryText';DelayUpdate

AppendToTable/W=Summary0 'Summary';DelayUpdate

ModifyTable/W=Summary0 width(SummaryText)=320

SummaryText(0) = "Predicted Max Charge State for 1st Positive Slope Method"

Summary(0) = CorrectMaxChargestate

SummaryText(1) = "Predicted Max Charge State for Conventional ESI Method"

wavestats Error1

variable ChargestateESI

ChargestateESI = GuessChargestate1(V_minloc)

Summary(1) = GuessChargestate1(V_minloc)

SummaryText(2) = "calculated average mass (1st Positive Slope)"

wavestats TestMass

Summary(2) = V_avg

SummaryText(3) = "Standard Deviation of calculated average mass (1st Positive Slope)"

Summary(3) = V_sdev

 

SummaryText(7) = ""

SummaryText(8) = ""

SummaryText(9) = ""

SummaryText(10) = ""

SummaryText(11) = ""

SummaryText(12) = ""

SummaryText(13) = ""

SummaryText(14) = ""

Summary(7) = 0

Summary(8) = 0

Summary(9) = 0

Summary(10) = 0

Summary(11) = 0

Summary(12) = 0

Summary(13) = 0

Summary(14) = 0

Duplicate/O TestMass TestMassESI

Duplicate/O Charges ChargesESI

ChargesESI = Charges + (ChargestateESI-CorrectMaxChargestate)

TestMassESI = ( PeakMax * ChargesESI ) - ChargesESI

SummaryText(4) = "calculated average mass (Conventional ESI)"

wavestats TestMassESI

Summary(4) = V_avg

SummaryText(5) = "Standard Deviation of calculated average mass (Conventional ESI)"

Summary(5) = V_sdev

SummaryText(6) = "Rsquared of a linear fit to (Mz vs. CPWz)"

Summary(6) = res(197)

 

TileWindows/O=1/A=(2,3)

 

 

 

end macro

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Macro SigmiodFit()

 

SummaryText(7) = ""

SummaryText(8) = ""

SummaryText(9) = ""

SummaryText(10) = ""

SummaryText(11) = ""

SummaryText(12) = ""

SummaryText(13) = ""

SummaryText(14) = ""

Summary(7) = 0

Summary(8) = 0

Summary(9) = 0

Summary(10) = 0

Summary(11) = 0

Summary(12) = 0

Summary(13) = 0

Summary(14) = 0

 

wavestats Charges

SetAxis/W=MassVsChargestate bottom (Charges(0) -3),(Charges(V_npnts-1)+3)

CurveFit/X=1 Sigmoid TestMass /X=Charges /D

AppendToGraph/W=MassVsChargestate fit_TestMass

 

RemoveFromGraph/W=MassVsCorrectedIonPeakWidth/Z fit_TestMass

SetAxis/A/W=MassVsCorrectedIonPeakWidth

 

SummaryText(7) = "Mass Complex (sigmoid fit)"

Summary(7) = W_coef(0)+W_coef(1)

SummaryText(8) = "standard deviation of Mass Complex (sigmoid fit)"

Summary(8) = W_sigma(0)+W_sigma(1)

 

SummaryText(9) = "Mass Complex Max Adducts (sigmoid fit)"

Summary(9) = W_coef(0)

SummaryText(10) = "standard deviation of Mass Complex Max Adducts (sigmoid fit)"

Summary(10) = W_sigma(0)

 

SummaryText(11) = "Cs (sigmoid fit)"

Summary(11) =W_coef(2)

SummaryText(12) = "standard deviation of Cs (sigmoid fit)"

Summary(12) = W_sigma(2)

 

SummaryText(13) = "Rate (sigmoid fit)"

Summary(13) =W_coef(3)^-1

SummaryText(14) = "standard deviation of Rate (sigmoid fit)"

Summary(14) = W_sigma(3)^-1

 

end macro

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Macro ReportIonData()

 

DoWindow/K IonSummary

 

Edit/K=0/N=IonSummary 'IonNumber';DelayUpdate

AppendToTable PeakMax

AppendToTable PeakInt

AppendToTable Charges

AppendToTable CorrectMass

AppendToTable PeakWidth

AppendToTable CorrectPeakWidth

AppendToTable PercentMassIncrease

 

end macro

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Macro ViewSuggestions()

Doalert 1,"Do you want to see suggestion boxes during this analysis session?"

res(199) = V_flag

end macro

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

View Text-only Version Text-only Updated: 8/1/08
spacer
spacer
© Montana State University 2006 Didn't Find it? Please use our contact list or our site index.