|
> CBIN Home >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
|