ChIPpeakAnno: TSS at - strand
1
0
Entering edit mode
Julie Zhu ★ 4.3k
@julie-zhu-3596
Last seen 13 months ago
United States
Dear Guangchuang, Thank you very much for the feedback! Any feedbacks and responses sent to bioconductor@r-project.org are archived and web searchable. I would appreciate if you could send email to Bioconductor list for feedbacks forward. If you type ?annotatePeakInBatch, you will notice that FeatureLocForDistance is set to TSS by default, meaning that using start of feature when feature is on plus strand and using end of feature when feature is on minus strand. I think this is consistent with your expectation. The discrepancy described by you is due to the different annotation source used. You used transcript coordinates instead of gene coordinates stored in TSS.human.NCBI36. Another difference is that you used end(peak) to calculate distance while annotatePeakInBatch uses start(peak) by default. As a user, you can set PeakLocForDistance as start, end or middle of the peak. However, the result will be different. Please type ?annotatePeakInBatch to get the details to customize your parameter setting to fit your needs. Also annotation from different databases of different versions will be slightly different as you already pointed out. You can use getAnnotation function in ChIPpeakAnno to obtain the most recent Ensemble annotation. Alternatively, you could download annotation from UCSC genome browser and convert it to RangedData as annotation source. You also can download transcript coordinates to feed into annotatePeakInBatch to get the nearest transcript instead of gene. To test whether there exists this bug in the annotatePeakInBatch , let us use your example with a simple annotation consisting only two genes with the exact coordinates provided by you instead of using the built-in annotation. Looks like you are interested in peak end to TSS, so I will set PeakLocForDistance = "end" here. You can see that the results obtained, by customizing the parameters in annoatePeakInBatch, is consistent with what you get. require(ChIPpeakAnno) packageVersion("ChIPpeakAnno") peak <- RangedData(space="chr1", IRanges(24736757, 24737528)) TSS <- RangedData(space="chr1", IRanges(start=c(24742284 ,24683489,24683489,24683489,24695211), end = c( 24799466, 24700300,24740262, 24741587,24718169), names=c("NIPAL3", "STPG1-1","STPG1-2","STPG1-3","STPG1-4")), strand=c("+","-", "-", "-","-")) TSS RangedData with 5 rows and 1 value column across 1 space space ranges | strand <factor> <iranges> | <character> NIPAL3 chr1 [24742284, 24799466] | + STPG1-1 chr1 [24683489, 24700300] | - STPG1-2 chr1 [24683489, 24740262] | - STPG1-3 chr1 [24683489, 24741587] | - STPG1-4 chr1 [24695211, 24718169] | - ap <- annotatePeakInBatch(peak, Annotation=TSS, PeakLocForDistance="end") ap RangedData with 1 row and 9 value columns across 1 space space ranges | peak strand feature start_position end_position insideFeature distancetoFeature shortestDistance <factor> <iranges> | <character> <character> <character> <numeric> <numeric> <character> <numeric> <numeric> 1 STPG1-2 chr1 [24736757, 24737528] | 1 - STPG1-2 24683489 24740262 inside 2734 2734 fromOverlappingOrNearest <character> 1 STPG1-2 NearestStart Hope this clears things for you. Please do not hesitate to send feedbacks to Bioconductor list if you have additional questions or suggestions. Many thanks for the detailed examples! Best regards, Julie On 1/14/14 4:01 AM, "Yu, Guangchuang" <gcyu@connect.hku.hk> wrote: Dear Dr. Zhu, I found a bug of your package, please refer to http://ygc.name/2014/01/14/r-package-chippeakanno-sucks/ for details. Hope that it will solve in next release. Best Regards, Guangchuang I used R package ChIPpeakAnno for annotating peaks, and found that it handle the DNA strand in the wrong way. Maybe the developers were from the computer science but not biology background. ? > require(ChIPpeakAnno) > packageVersion("ChIPpeakAnno") [1] '2.10.0' > peak <- RangedData(space="chr1", IRanges(24736757, 24737528)) > data(TSS.human.GRCh37) > ap <- annotatePeakInBatch(peak, Annotation=TSS.human.GRCh37) > ap RangedData with 1 row and 9 value columns across 1 space space ranges | peak strand <factor> <iranges> | <character> <character> 1 ENSG00000001461 1 [24736757, 24737528] | 1 + feature start_position end_position insideFeature <character> <numeric> <numeric> <character> 1 ENSG00000001461 ENSG00000001461 24742284 24799466 upstream distancetoFeature shortestDistance fromOverlappingOrNearest <numeric> <numeric> <character> 1 ENSG00000001461 -5527 4756 NearestStart In this example, I defined a peak ranging from chr1:24736757 to chr1:24737528 and annotated the peak using ChIPpeakAnno package. It returns that the nearest gene is ENSG00000001461, whose gene symbol is NIPAL3. ? 5 > require(org.Hs.eg.db) > gene.ChIPpeakAnno <- select(org.Hs.eg.db, key=ap$feature, keytype="ENSEMBL", columns=c("ENSEMBL", "ENTREZID", "SYMBOL")) > gene.ChIPpeakAnno ENSEMBL ENTREZID SYMBOL 1 ENSG00000001461 57185 NIPAL3 When looking at the peak in Genome Browser, I found the nearest gene is STPG1. Screenshot 2014-01-13 22.00.46 The gene symbol, STPG1, was converted to ENTREZID for future processing. ?View Code RSPLUS 1 2 3 4 > gene.nearest <- select(org.Hs.eg.db, key="STPG1", keytype="SYMBOL", columns=c("ENSEMBL", "ENTREZID", "SYMBOL")) > gene.nearest SYMBOL ENSEMBL ENTREZID 1 STPG1 ENSG00000001460 90529 We can query the coordination of these two genes, and compare their distances to the peak. ?View Code RSPLUS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 > require(TxDb.Hsapiens.UCSC.hg19.knownGene) > knownGene <- transcriptsBy(TxDb.Hsapiens.UCSC.hg19.knownGene, by="gene") > > gene.ChIPpeakAnno.info <- knownGene[[gene.ChIPpeakAnno$ENTREZID]] > gene.ChIPpeakAnno.info GRanges with 4 ranges and 2 metadata columns: seqnames ranges strand | tx_id tx_name <rle> <iranges> <rle> | <integer> <character> [1] chr1 [24742245, 24781314] + | 618 uc010oek.2 [2] chr1 [24742245, 24799473] + | 619 uc001bjh.3 [3] chr1 [24742245, 24799473] + | 620 uc009vrc.3 [4] chr1 [24782628, 24792864] + | 621 uc001bji.3 --- seqlengths: chr1 chr2 ... chrUn_gl000249 249250621 243199373 ... 38502 After getting the information of the gene annotated by ChIPpeakAnno, I also found that the ranges of the gene is slightly different from the one returned by annotatePeakInBatch function. This may due to the variation of different versions and it's not a big deal. As the gene, NIPAL3, is encoded in + strand, the nearest distance is: ?View Code RSPLUS 1 2 > min(abs(start(peak) - startgene.ChIPpeakAnno.info))) [1] 5488 While the gene, STPG1, is encoded in - strand, the end of the gene coordination is actually the start position of the gene and the start of the gene coordination is the end position. So the distance should be calculated by the end coordination. [[alternative HTML version deleted]]
Annotation convert ChIPpeakAnno Annotation convert ChIPpeakAnno • 2.3k views
ADD COMMENT
0
Entering edit mode
Julie Zhu ★ 4.3k
@julie-zhu-3596
Last seen 13 months ago
United States
Guangchuang, Thanks for the clarification! annotatePeakInBatch uses gene "start" when gene is in + strand and use gene "end" when gene is in - strand to calculate distance from peak to TSS. Peaks from ChIP-seq/ChIP-chip are not necessary always at the upstream of genes, so it is rather arbitrary to pick peak start for genes located in + and peak end for genes located in - strand . annotatePeakInBatch lets users to specify PeakLocForDistance (start, middle, end) regardless the gene strand to calculate distance. If you want to use peak start to calculate distance to genes located in + strand, but use peak end to calculate distance to genes located in - strand, I suggest you create two annotation files, one for + strand and the other for - strand, and specify PeakLocForDistance ="start" for + annotation and PeakLocForDistance="end" for - annotation. Hope this is helpful. Thanks! Best regards, Julie On 1/14/14 12:15 PM, "YGC" <no-reply@ygc.name> wrote: I don't understand why setting PeakLocForDistance parameter. My point is it should use peak "start" when feature in + strand and use peak "end" when feature in - strand. On 1/14/14 11:41 AM, "Lihua Julie Zhu" <julie.zhu@umassmed.edu> wrote: > Dear Guangchuang, > > Thank you very much for the feedback! Any feedbacks and responses sent to > bioconductor@r-project.org are archived and web searchable. I would > appreciate if you could send email to Bioconductor list for feedbacks forward. > > If you type ?annotatePeakInBatch, you will notice that FeatureLocForDistance > is set to TSS by default, meaning that using start of feature when feature is > on plus strand and using end of feature when feature is on minus strand. I > think this is consistent with your expectation. > > The discrepancy described by you is due to the different annotation source > used. You used transcript coordinates instead of gene coordinates stored in > TSS.human.NCBI36. Another difference is that you used end(peak) to calculate > distance while annotatePeakInBatch uses start(peak) by default. As a user, you > can set PeakLocForDistance as start, end or middle of the peak. However, the > result will be different. Please type ?annotatePeakInBatch to get the details > to customize your parameter setting to fit your needs. Also annotation from > different databases of different versions will be slightly different as you > already pointed out. You can use getAnnotation function in ChIPpeakAnno to > obtain the most recent Ensemble annotation. Alternatively, you could download > annotation from UCSC genome browser and convert it to RangedData as > annotation source. You also can download transcript coordinates to feed into > annotatePeakInBatch to get the nearest transcript instead of gene. > > To test whether there exists this bug in the annotatePeakInBatch , let us use > your example with a simple annotation consisting only two genes with the > exact coordinates provided by you instead of using the built-in annotation. > Looks like you are interested in peak end to TSS, so I will set > PeakLocForDistance = "end" here. > > You can see that the results obtained, by customizing the parameters in > annoatePeakInBatch, is consistent with what you get. > > require(ChIPpeakAnno) > packageVersion("ChIPpeakAnno") > peak <- RangedData(space="chr1", IRanges(24736757, 24737528)) > > TSS <- RangedData(space="chr1", IRanges(start=c(24742284 > ,24683489,24683489,24683489,24695211), end = c( 24799466, 24700300,24740262, > 24741587,24718169), names=c("NIPAL3", > "STPG1-1","STPG1-2","STPG1-3","STPG1-4")), strand=c("+","-", "-", "-","-")) > TSS > RangedData with 5 rows and 1 value column across 1 space > space ranges | strand > <factor> <iranges> | <character> > NIPAL3 chr1 [24742284, 24799466] | + > STPG1-1 chr1 [24683489, 24700300] | - > STPG1-2 chr1 [24683489, 24740262] | - > STPG1-3 chr1 [24683489, 24741587] | - > STPG1-4 chr1 [24695211, 24718169] | - > ap <- annotatePeakInBatch(peak, Annotation=TSS, PeakLocForDistance="end") > ap > RangedData with 1 row and 9 value columns across 1 space > space ranges | peak strand feature > start_position end_position insideFeature distancetoFeature shortestDistance > <factor> <iranges> | <character> <character> <character> > <numeric> <numeric> <character> <numeric> <numeric> > 1 STPG1-2 chr1 [24736757, 24737528] | 1 - STPG1-2 > 24683489 24740262 inside 2734 2734 > fromOverlappingOrNearest > [[alternative HTML version deleted]]
ADD COMMENT
0
Entering edit mode
Dear Julie, Let me explain my point of view, if we know the strand of a peak, then what we would like to know is only the nearest feature located in the same strand. As we both know, peaks are strand-less and we don't have that information. Then we assume the peak could be located in + strand and - strand. When we consider it is in + strand, we identify the nearest feature by min(abs(peakStart-featureStart)). While when we consider it is in - strand, we should calculate the distance by min(abs(peakEnd-featureEnd)) as the "End" coordination is actually the start when it is in the - strand no matter it is a feature or a peak. If a feature didn't have strand information, it make sense to set PeakLocForDistance="middle". But if we have the feature strand information, I don't agree with your approach by setting the parameter PeakLocForDistance to "start" or "end". The function should automatically decide using "start" or "end" considering the feature strand information. Bests, Guangchuang On Wed, Jan 15, 2014 at 2:10 AM, Zhu, Lihua (Julie) <julie.zhu@umassmed.edu>wrote: > Guangchuang, > > Thanks for the clarification! > > annotatePeakInBatch uses gene "start" when gene is in + strand and use > gene "end" when gene is in - strand to calculate distance from peak to TSS. > Peaks from ChIP-seq/ChIP-chip are not necessary always at the upstream of > genes, so it is rather arbitrary to pick peak start for genes located in + > and peak end for genes located in - strand . annotatePeakInBatch lets users > to specify PeakLocForDistance (start, middle, end) regardless the gene > strand to calculate distance. > > If you want to use peak start to calculate distance to genes located in + > strand, but use peak end to calculate distance to genes located in - > strand, I suggest you create two annotation files, one for + strand and the > other for - strand, and specify PeakLocForDistance ="start" for + > annotation and PeakLocForDistance="end" for - annotation. > > Hope this is helpful. Thanks! > > Best regards, > > Julie > > > On 1/14/14 12:15 PM, "YGC" <no-reply@ygc.name> wrote: > > I don't understand why setting PeakLocForDistance parameter. My point is > it should use peak "start" when feature in + strand and use peak "end" when > feature in - strand. > > > > > > On 1/14/14 11:41 AM, "Lihua Julie Zhu" <julie.zhu@umassmed.edu> wrote: > > > Dear Guangchuang, > > > > Thank you very much for the feedback! Any feedbacks and responses sent > to > > bioconductor@r-project.org are archived and web searchable. I would > > appreciate if you could send email to Bioconductor list for feedbacks > forward. > > > > If you type ?annotatePeakInBatch, you will notice that > FeatureLocForDistance > > is set to TSS by default, meaning that using start of feature when > feature is > > on plus strand and using end of feature when feature is on minus strand. > I > > think this is consistent with your expectation. > > > > The discrepancy described by you is due to the different annotation > source > > used. You used transcript coordinates instead of gene coordinates stored > in > > TSS.human.NCBI36. Another difference is that you used end(peak) to > calculate > > distance while annotatePeakInBatch uses start(peak) by default. As a > user, you > > can set PeakLocForDistance as start, end or middle of the peak. However, > the > > result will be different. Please type ?annotatePeakInBatch to get the > details > > to customize your parameter setting to fit your needs. Also annotation > from > > different databases of different versions will be slightly different as > you > > already pointed out. You can use getAnnotation function in ChIPpeakAnno > to > > obtain the most recent Ensemble annotation. Alternatively, you could > download > > annotation from UCSC genome browser and convert it to RangedData as > > annotation source. You also can download transcript coordinates to feed > into > > annotatePeakInBatch to get the nearest transcript instead of gene. > > > > To test whether there exists this bug in the annotatePeakInBatch , let > us use > > your example with a simple annotation consisting only two genes with > the > > exact coordinates provided by you instead of using the built-in > annotation. > > Looks like you are interested in peak end to TSS, so I will set > > PeakLocForDistance = "end" here. > > > > You can see that the results obtained, by customizing the parameters in > > annoatePeakInBatch, is consistent with what you get. > > > > require(ChIPpeakAnno) > > packageVersion("ChIPpeakAnno") > > peak <- RangedData(space="chr1", IRanges(24736757, 24737528)) > > > > TSS <- RangedData(space="chr1", IRanges(start=c(24742284 > > ,24683489,24683489,24683489,24695211), end = c( 24799466, > 24700300,24740262, > > 24741587,24718169), names=c("NIPAL3", > > "STPG1-1","STPG1-2","STPG1-3","STPG1-4")), strand=c("+","-", "-", > "-","-")) > > TSS > > RangedData with 5 rows and 1 value column across 1 space > > space ranges | strand > > <factor> <iranges> | <character> > > NIPAL3 chr1 [24742284, 24799466] | + > > STPG1-1 chr1 [24683489, 24700300] | - > > STPG1-2 chr1 [24683489, 24740262] | - > > STPG1-3 chr1 [24683489, 24741587] | - > > STPG1-4 chr1 [24695211, 24718169] | - > > ap <- annotatePeakInBatch(peak, Annotation=TSS, PeakLocForDistance="end") > > ap > > RangedData with 1 row and 9 value columns across 1 space > > space ranges | peak strand > feature > > start_position end_position insideFeature distancetoFeature > shortestDistance > > <factor> <iranges> | <character> <character> > <character> > > <numeric> <numeric> <character> <numeric> <numeric> > > 1 STPG1-2 chr1 [24736757, 24737528] | 1 - > STPG1-2 > > 24683489 24740262 inside 2734 2734 > > fromOverlappingOrNearest > > > > > > > -- --~--~---------~--~----~------------~-------~--~----~ Guangchuang Yu, PhD Candidate School of Biological Sciences Room 7N-07, Kadoorie Biological Sciences Building The University of Hong Kong Hong Kong SAR, China -~----------~----~----~----~------~----~------~--~--- [[alternative HTML version deleted]]
ADD REPLY
0
Entering edit mode
Hi Guangchuang, This is a great idea to separate the sense and antisense strand. This is what we will update in next release version. Now it is on testing. The new version will based on GRanges, that is why it costs long time to test. If you are interested in helping us to test the new version, I can send you the codes. In the new version, we will consider to add ignore.strand when do annotation. However, the distance between the peaks and features still need to be separated by shortestDistance (as you mentioned from both ends) and the distanceFromFeature as user defined. This will greatly improve the annotation. However, usually the peaks we got from peak detection software, such as MACS, are not strand-specific. And some gene expression regulation models are not only consider the promoter regions. At this point, we did design the distance from peaks and features without considering the strands. And now in the new version, the setting of ignore.strand is automatically detected by user's inputs (with useful information about strands or not). In the old version, as it cleared by Julie, if you want to consider about the strands, you can separate annotationData into two groups, "+" and "-", use start and end of the feature to get the annotation and combine them later. Again, we thank you for your discussion about this question. Yours sincerely, Jianhong Ou LRB 670A Program in Gene Function and Expression 364 Plantation Street Worcester, MA 01605 On 1/15/14 1:43 AM, "Yu, Guangchuang" <gcyu at="" connect.hku.hk=""> wrote: >Dear Julie, > >Let me explain my point of view, if we know the strand of a peak, then >what >we would like to know is only the nearest feature located in the same >strand. > >As we both know, peaks are strand-less and we don't have that information. > >Then we assume the peak could be located in + strand and - strand. When we >consider it is in + strand, we identify the nearest feature by >min(abs(peakStart-featureStart)). While when we consider it is in - >strand, >we should calculate the distance by min(abs(peakEnd-featureEnd)) as the >"End" coordination is actually the start when it is in the - strand no >matter it is a feature or a peak. > >If a feature didn't have strand information, it make sense to set >PeakLocForDistance="middle". > >But if we have the feature strand information, I don't agree with your >approach by setting the parameter PeakLocForDistance to "start" or "end". >The function should automatically decide using "start" or "end" >considering >the feature strand information. > >Bests, >Guangchuang > > >On Wed, Jan 15, 2014 at 2:10 AM, Zhu, Lihua (Julie) ><julie.zhu at="" umassmed.edu="">wrote: > >> Guangchuang, >> >> Thanks for the clarification! >> >> annotatePeakInBatch uses gene "start" when gene is in + strand and use >> gene "end" when gene is in - strand to calculate distance from peak to >>TSS. >> Peaks from ChIP-seq/ChIP-chip are not necessary always at the upstream >>of >> genes, so it is rather arbitrary to pick peak start for genes located >>in + >> and peak end for genes located in - strand . annotatePeakInBatch lets >>users >> to specify PeakLocForDistance (start, middle, end) regardless the gene >> strand to calculate distance. >> >> If you want to use peak start to calculate distance to genes located in >>+ >> strand, but use peak end to calculate distance to genes located in - >> strand, I suggest you create two annotation files, one for + strand and >>the >> other for - strand, and specify PeakLocForDistance ="start" for + >> annotation and PeakLocForDistance="end" for - annotation. >> >> Hope this is helpful. Thanks! >> >> Best regards, >> >> Julie >> >> >> On 1/14/14 12:15 PM, "YGC" <no-reply at="" ygc.name=""> wrote: >> >> I don't understand why setting PeakLocForDistance parameter. My point >>is >> it should use peak "start" when feature in + strand and use peak "end" >>when >> feature in - strand. >> >> >> >> >> >> On 1/14/14 11:41 AM, "Lihua Julie Zhu" <julie.zhu at="" umassmed.edu=""> wrote: >> >> > Dear Guangchuang, >> > >> > Thank you very much for the feedback! Any feedbacks and responses sent >> to >> > bioconductor at r-project.org are archived and web searchable. I would >> > appreciate if you could send email to Bioconductor list for feedbacks >> forward. >> > >> > If you type ?annotatePeakInBatch, you will notice that >> FeatureLocForDistance >> > is set to TSS by default, meaning that using start of feature when >> feature is >> > on plus strand and using end of feature when feature is on minus >>strand. >> I >> > think this is consistent with your expectation. >> > >> > The discrepancy described by you is due to the different annotation >> source >> > used. You used transcript coordinates instead of gene coordinates >>stored >> in >> > TSS.human.NCBI36. Another difference is that you used end(peak) to >> calculate >> > distance while annotatePeakInBatch uses start(peak) by default. As a >> user, you >> > can set PeakLocForDistance as start, end or middle of the peak. >>However, >> the >> > result will be different. Please type ?annotatePeakInBatch to get the >> details >> > to customize your parameter setting to fit your needs. Also annotation >> from >> > different databases of different versions will be slightly different >>as >> you >> > already pointed out. You can use getAnnotation function in >>ChIPpeakAnno >> to >> > obtain the most recent Ensemble annotation. Alternatively, you could >> download >> > annotation from UCSC genome browser and convert it to RangedData as >> > annotation source. You also can download transcript coordinates to >>feed >> into >> > annotatePeakInBatch to get the nearest transcript instead of gene. >> > >> > To test whether there exists this bug in the annotatePeakInBatch , let >> us use >> > your example with a simple annotation consisting only two genes with >> the >> > exact coordinates provided by you instead of using the built-in >> annotation. >> > Looks like you are interested in peak end to TSS, so I will set >> > PeakLocForDistance = "end" here. >> > >> > You can see that the results obtained, by customizing the parameters >>in >> > annoatePeakInBatch, is consistent with what you get. >> > >> > require(ChIPpeakAnno) >> > packageVersion("ChIPpeakAnno") >> > peak <- RangedData(space="chr1", IRanges(24736757, 24737528)) >> > >> > TSS <- RangedData(space="chr1", IRanges(start=c(24742284 >> > ,24683489,24683489,24683489,24695211), end = c( 24799466, >> 24700300,24740262, >> > 24741587,24718169), names=c("NIPAL3", >> > "STPG1-1","STPG1-2","STPG1-3","STPG1-4")), strand=c("+","-", "-", >> "-","-")) >> > TSS >> > RangedData with 5 rows and 1 value column across 1 space >> > space ranges | strand >> > <factor> <iranges> | <character> >> > NIPAL3 chr1 [24742284, 24799466] | + >> > STPG1-1 chr1 [24683489, 24700300] | - >> > STPG1-2 chr1 [24683489, 24740262] | - >> > STPG1-3 chr1 [24683489, 24741587] | - >> > STPG1-4 chr1 [24695211, 24718169] | - >> > ap <- annotatePeakInBatch(peak, Annotation=TSS, >>PeakLocForDistance="end") >> > ap >> > RangedData with 1 row and 9 value columns across 1 space >> > space ranges | peak strand >> feature >> > start_position end_position insideFeature distancetoFeature >> shortestDistance >> > <factor> <iranges> | <character> <character> >> <character> >> > <numeric> <numeric> <character> <numeric> >><numeric> >> > 1 STPG1-2 chr1 [24736757, 24737528] | 1 - >> STPG1-2 >> > 24683489 24740262 inside 2734 2734 >> > fromOverlappingOrNearest >> > >> >> >> >> >> > > >-- >--~--~---------~--~----~------------~-------~--~----~ >Guangchuang Yu, PhD Candidate >School of Biological Sciences >Room 7N-07, Kadoorie Biological Sciences Building >The University of Hong Kong >Hong Kong SAR, China >-~----------~----~----~----~------~----~------~--~--- > > [[alternative HTML version deleted]] > >_______________________________________________ >Bioconductor mailing list >Bioconductor at r-project.org >https://stat.ethz.ch/mailman/listinfo/bioconductor >Search the archives: >http://news.gmane.org/gmane.science.biology.informatics.conductor
ADD REPLY

Login before adding your answer.

Traffic: 867 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6