Re: [R] Chromatogram deconvolution and peak matching

2009-02-18 Thread Michael Lawrence
Just to be sure you're aware, there are packages for chromatograpy and mass
spec data in Bioconductor. Like xcms. Don't think any will directly address
your problem, but they might be useful.

Michael

On Tue, Feb 17, 2009 at 5:44 AM, bartjoosen bartjoo...@hotmail.com wrote:


 Hi,

 I'm trying to match peaks between chromatographic runs.
 I'm able to match peaks when they are chromatographed with the same method,
 but not when there are different methods are used and spectra comes in to
 play.

 While searching I found the ALS package which should be usefull for my
 application, but I couldn't figure it out.

 I made some dummy chroms with R, which mimic my actual datasets, to play
 with, but after looking at the manuals of ALS, I'm affraid I can't get the
 job done. Can someone put me on the right way?

 Here is my code to generate the dummy chroms, which also plots the 2 chroms
 and the spectra of the 3 peaks:

 #2D chromatogram generation
 par(mfrow=c(3,1))
 time - seq(0,20,by=0.05)
 f - function(x,rt) dnorm((x-rt),mean=0,sd=rt/35)
 c1 - f(time,6.1)
 c2 - f(time,5.6)
 c3 - f(time,15)
 plot(c1+c2+c3~time,type=l,main=chrom1)

 #spectrum generation
 spectra - function(x,a,b,c,d,e) a + b*(x-e) + c*((x-e)^2) + d*((x-e)^3)
 x - 220:300
 s1 - spectra(x,(-194.2),2.386,(-0.009617),(1.275e-05),0)
 s2 - spectra(x,(-1.054e02),1.3,(-5.239e-03),(6.927e-06),-20)
 s3 - spectra(x,(-194.2),2.386,(-0.009617),(1.275e-05),20)

 chrom1.tot -
 data.frame(time,outer(c1,s1,*)+outer(c2,s2,*)+outer(c2,s2,*))
 names(chrom.tot)[-1] - x

 #generation of chromatogram 2
 c1 - f(time,2.1)
 c2 - f(time,4)
 c3 - f(time,8)
 plot(c1+c2+c3~time,type=l,main=chrom2)

 chrom2.tot -
 data.frame(time,outer(c1,s1,*)+outer(c2,s2,*)+outer(c2,s2,*))
 names(chrom.tot)[-1] - x

 plot(s1~x,type=l,main=spectra)
 lines(s2~x,col=2)
 lines(s3~x,col=3)

 Thanks for your time

 Kind Regards

 Bart
 --
 View this message in context:
 http://www.nabble.com/Chromatogram-deconvolution-and-peak-matching-tp22057592p22057592.html
 Sent from the R help mailing list archive at Nabble.com.

 __
 R-help@r-project.org mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide
 http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.


[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


[R] Chromatogram deconvolution and peak matching

2009-02-17 Thread bartjoosen

Hi,

I'm trying to match peaks between chromatographic runs.
I'm able to match peaks when they are chromatographed with the same method,
but not when there are different methods are used and spectra comes in to
play.

While searching I found the ALS package which should be usefull for my
application, but I couldn't figure it out.

I made some dummy chroms with R, which mimic my actual datasets, to play
with, but after looking at the manuals of ALS, I'm affraid I can't get the
job done. Can someone put me on the right way?

Here is my code to generate the dummy chroms, which also plots the 2 chroms
and the spectra of the 3 peaks:

#2D chromatogram generation
par(mfrow=c(3,1))
time - seq(0,20,by=0.05)
f - function(x,rt) dnorm((x-rt),mean=0,sd=rt/35)
c1 - f(time,6.1)
c2 - f(time,5.6)
c3 - f(time,15)
plot(c1+c2+c3~time,type=l,main=chrom1)

#spectrum generation
spectra - function(x,a,b,c,d,e) a + b*(x-e) + c*((x-e)^2) + d*((x-e)^3)
x - 220:300
s1 - spectra(x,(-194.2),2.386,(-0.009617),(1.275e-05),0)
s2 - spectra(x,(-1.054e02),1.3,(-5.239e-03),(6.927e-06),-20)
s3 - spectra(x,(-194.2),2.386,(-0.009617),(1.275e-05),20)

chrom1.tot -
data.frame(time,outer(c1,s1,*)+outer(c2,s2,*)+outer(c2,s2,*))
names(chrom.tot)[-1] - x

#generation of chromatogram 2
c1 - f(time,2.1)
c2 - f(time,4)
c3 - f(time,8) 
plot(c1+c2+c3~time,type=l,main=chrom2)

chrom2.tot -
data.frame(time,outer(c1,s1,*)+outer(c2,s2,*)+outer(c2,s2,*))
names(chrom.tot)[-1] - x

plot(s1~x,type=l,main=spectra)
lines(s2~x,col=2)
lines(s3~x,col=3)

Thanks for your time

Kind Regards

Bart
-- 
View this message in context: 
http://www.nabble.com/Chromatogram-deconvolution-and-peak-matching-tp22057592p22057592.html
Sent from the R help mailing list archive at Nabble.com.

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Chromatogram deconvolution and peak matching

2009-02-17 Thread Katharine Mullen
Hoi Bart,

I think you're right that ALS should be applicable to this problem.
Unfortunately in writing I see that there is a bug when the spectra are
NOT constrained to nonnegative values (the package has been used to my
knowledge only in fitting multiway mass spectra thus far, where this
constraint is always applied); I'll have a patched version soon.

I'd be interested in hearing about where the manual could be improved,
too.

#2D chromatogram generation

time - seq(0,20,by=0.05)
f - function(x,rt) dnorm((x-rt),mean=0,sd=rt/35)
C1 - matrix(c( f(time,6.1), f(time,5.6), f(time,15)), nrow=401,ncol=3)
C2 - matrix(c( f(time,2.1), f(time,4), f(time,8)), nrow=401,ncol=3)

#spectrum generation
spectra - function(x,a,b,c,d,e) a + b*(x-e) + c*((x-e)^2) + d*((x-e)^3)
x - 220:300
s1 - spectra(x,(-194.2),2.386,(-0.009617),(1.275e-05),0)
s2 - spectra(x,(-1.054e02),1.3,(-5.239e-03),(6.927e-06),-20)
s3 - spectra(x,(-194.2),2.386,(-0.009617),(1.275e-05),20)
spec - matrix(c(s1,s2,s3), nrow=81,ncol=3)

## data matrix 1
chrom1 - C1 %*% t(spec)

## data matrix 2
chrom2 - C2 %*% t(spec)

require(ALS)

## you want to recover 2 (401 x 3) matrices C1 and C2 and a
## (82 x 3) matrix E such that
## chrom1 = C1 E^T, chrom2 = C2 E^T

## some starting guess for elution profiles
## these need to be pretty good
Cstart1 - matrix(c( f(time,4), f(time,6), f(time,12)), nrow=401,ncol=3)
Cstart2 - matrix(c( f(time,3), f(time,5), f(time,10)), nrow=401,ncol=3)

xx - als( CList = list(Cstart1, Cstart2), PsiList = list(chrom1, chrom2),
  S=matrix(1, nrow=81, ncol=3), x=time, x2=x, uniC=TRUE,
  normS=TRUE, nonnegS=TRUE)

par(mfrow=c(3,1))

matplot(time, xx$CList[[1]], col=2, type=l,
main=elution profiles chrom1, lty=1,
ylab=amplitude)

matplot(time, C1, col=1, add=TRUE, type=l, lty=1)

legend(10,2,legend=c(real, estimated), col=1:2, lty=1)

matplot(time, xx$CList[[2]], col=2, type=l,
main=elution profiles chrom2, lty=1,
ylab=amplitude)

matplot(time, C2, col=1, add=TRUE, type=l, lty=1)

legend(10,6,legend=c(real, estimated), col=1:2, lty=1)

matplot(x, xx$S, col=2, type=l, main=spectra, lty=1,
ylab=amplitude)

matplot(x, spec, col=1, add=TRUE, type=l, lty=1)

legend(270,.95,legend=c(real, estimated), col=1:2, lty=1)


On Tue, 17 Feb 2009, bartjoosen wrote:


 Hi,

 I'm trying to match peaks between chromatographic runs.
 I'm able to match peaks when they are chromatographed with the same method,
 but not when there are different methods are used and spectra comes in to
 play.

 While searching I found the ALS package which should be usefull for my
 application, but I couldn't figure it out.

 I made some dummy chroms with R, which mimic my actual datasets, to play
 with, but after looking at the manuals of ALS, I'm affraid I can't get the
 job done. Can someone put me on the right way?

 Here is my code to generate the dummy chroms, which also plots the 2 chroms
 and the spectra of the 3 peaks:

 #2D chromatogram generation
 par(mfrow=c(3,1))
 time - seq(0,20,by=0.05)
 f - function(x,rt) dnorm((x-rt),mean=0,sd=rt/35)
 c1 - f(time,6.1)
 c2 - f(time,5.6)
 c3 - f(time,15)
 plot(c1+c2+c3~time,type=l,main=chrom1)

 #spectrum generation
 spectra - function(x,a,b,c,d,e) a + b*(x-e) + c*((x-e)^2) + d*((x-e)^3)
 x - 220:300
 s1 - spectra(x,(-194.2),2.386,(-0.009617),(1.275e-05),0)
 s2 - spectra(x,(-1.054e02),1.3,(-5.239e-03),(6.927e-06),-20)
 s3 - spectra(x,(-194.2),2.386,(-0.009617),(1.275e-05),20)

 chrom1.tot -
 data.frame(time,outer(c1,s1,*)+outer(c2,s2,*)+outer(c2,s2,*))
 names(chrom.tot)[-1] - x

 #generation of chromatogram 2
 c1 - f(time,2.1)
 c2 - f(time,4)
 c3 - f(time,8)
 plot(c1+c2+c3~time,type=l,main=chrom2)

 chrom2.tot -
 data.frame(time,outer(c1,s1,*)+outer(c2,s2,*)+outer(c2,s2,*))
 names(chrom.tot)[-1] - x

 plot(s1~x,type=l,main=spectra)
 lines(s2~x,col=2)
 lines(s3~x,col=3)

 Thanks for your time

 Kind Regards

 Bart
 --
 View this message in context: 
 http://www.nabble.com/Chromatogram-deconvolution-and-peak-matching-tp22057592p22057592.html
 Sent from the R help mailing list archive at Nabble.com.

 __
 R-help@r-project.org mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.


__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.