Full text
27,477 characters
Ā· extracted from
preprint-html
Ā· click to expand
Haplotype and Repeat Separation in Long Reads | bioRxiv /* */ /* */ <!-- <!-- /*! * yepnope1.5.4 * (c) WTFPL, GPLv2 */ (function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0];var j=d.createElement(s);var dl=l!='dataLayer'?'&l='+l:'';j.src='//www.googletagmanager.com/gtm.js?id='+i+dl;j.type='text/javascript';j.async=true;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','GTM-M677548'); Skip to main content Home About Submit ALERTS / RSS Search for this keyword Advanced Search New Results Haplotype and Repeat Separation in Long Reads German Tischler doi: https://doi.org/10.1101/145474 German Tischler Find this author on Google Scholar Find this author on PubMed Search for this author on this site Abstract Full Text Info/History Metrics Preview PDF Abstract Resolving the correct structure and succession of highly similar sequence stretches is one of the main open problems in genome assembly. For non haploid genomes this includes determining the sequences of the different haplotypes. For all but the smallest genomes it also involves separating different repeat instances. In this paper we discuss methods for resolving such problems in third generation long reads by classifying alignments between long reads according to whether they represent true or false read overlaps. The main problem in this context is the high error rate found in such reads, which greatly exceeds the amount of difference between the similar regions we want to separate. Our methods can separate read classes stemming from regions with as little as 1% difference. 1 Scientific Background Third generation sequencing reads like those produced by Pacific BioSciences (Pac-BIO) and Oxford Nanopore Technologies (ONT) sequencers are very long in comparison with the ones produced by second generation sequencers. The average read length for PacBIO is often 10k base pairs (bp) and for ONT 7-9kbp have been reported. For PacBIO more than half of the sequenced bases can be in reads of length 20kbp and above. This is much longer than the reads produced by second generation sequencers, which often yield reads as short as 150bp, so third generation sequencers allow a much better repeat resolution for assembly because more repeats are spanned by single reads. This increased read length however comes at the price of a much higher average base error rate (about 13% for PacBIO and even higher for ONT). This poses major algorithmic challenges in the areas of sequence alignment, comparison and signal detection. Read versus read comparison (see e.g. [ 1 ]) operates at a correlation of 70% and less. This makes it very hard to detect small differences between regions reads were sampled from. Reads stemming from sufficiently similar regions in an underlying genome, like instances of a repeat or different haplotypes, will often align within the parameters used, as the difference between the two sources is small in comparison with the read error rate. Being able to segregate read alignments into classes according to whether or not an alignment between a read pair designates a real overlap in the underlying genome to the degree possible is however important for multiple applications like genome assembly and variant detection. In genome assembly for instance the quality of any consensus sequence produced rises and falls with the ability to select the correct reads as input (cf. [ 2 ]). Linking up different haplotypes during the assembly of a non haploid organism results in patchwork like output, in particular an assembly process yielding output contigs which are in this way not contained in the genome to be reconstructed. Haplotype assembly designates the problem of separating reads into haplotype classes by first mapping them to a given reference sequence and then splitting the reads into groups using the information obtained. Several papers have presented methods for haplotype assembly (or read phasing) in the diploid setting (cf. [ 3 , 4 , 5 , 6 , 7 , 8 ]). Canu (see [ 9 ]) performs repeat separation using a sequence of error correction, residual error estimation and classification of the error corrected reads. The authors report being able to separate repeat instances with 3% difference and above. 2 Materials and Methods In this paper we discuss methods for repeat and haplotype separation in long reads. We consider the setting of de novo assembly, in particular we do not presume or require the existence of a reference sequence or known variation sites. Instead of read to reference alignments we use read to read consensus alignments, i.e. we align reads to error corrected reads. In addition we do not limit our attention to a scenario requiring there to be at most two versions of a sequence, like it is the case for the haplotype assembly of diploid genomes. We consider two basic principles for splitting a set of reads. The first one is based on the trivial observation that reads in the same class should agree on most positions, particularly including those for which a very rough analysis shows a potential for disagreement in the read set. As the reads we consider are not error free we cannot expect the reads inside one class to agree on all positions. This approach has itās merits when the number of versions a sequence appears in is low but as we will see below, it becomes unsuitable as the number of versions grows. The second principle is based on observing sets of reads (more or less) consistently disagreeing on certain positions. This scales to higher version numbers but is computationally much more expensive. 2.1 Preliminaries Let G = { S 1 , S 2 ,ā¦, S k } denote a genome containing sequences S i for i = 1,ā¦, k , i.e. strings over the alphabet Ī£ = { A,C,G,T }. Further let R = { R 1 , R 2 ,⦠R r } be a set of reads sampled from G (randomly of the forward and reverse complement strand) such that the strings in R have length L on average and the error rate (errors per length on G ) between the reads and the intervals on G they were drawn from is p e on average. For PacBIO the length distribution in R would follow a log normal distribution with average length 10kb and p e would be in the order of 0.13. We denote a local alignment between sequences U i and U j by a tuple ( i,j,ib,ie,jb,je,c ) where ib and ie mark the start and end of the alignment on U i , jb and je the start and end on U j and c is a Boolean value marking whether U j or the reverse complement of U j was used ( c = true for reverse complement). In practice long reads often contain stretches of very low quality, so even for two reads sharing a true overlap we find a sequence of local alignments instead of a single suffix/prefix or containment type alignment. Our methods can easily be generalised to this case, however for the sake of simplicity of exposition we assume that alignments between reads are contiguous below. Let A denote the set of all (local) alignments between pairs of reads in R s.t. the correlation between the two reads inside the alignment is at least 1 ā 2p e and the alignment covers at least l bases on both reads involved for some length l . In practice we commonly use l = 1 k for third generation long reads. For a given read R k we call the subset of A s.t. the first component of the tuples is k the alignment pile for R k . If G represents a non haploid genome or contains sufficiently long repeating regions then not all the alignments in A may refer to true read overlaps on G . We can use an alignment pile of a read or a subset thereof (for instance by choosing the top k best aligning other reads for some k ) to compute a preliminary consensus or error corrected version of the read, e.g. using the algorithm proposed in [ 2 ]. We denote a preliminary consensus obtained for a read R i in this way by . The alignment pile for R i can be transformed into an alignment pile for by aligning the reads in the pile for R i to while taking the positions of the original alignments on R i into account and transforming those to positions on using an alignment of R i and . In addition to the original alignments in the pile of R i we also insert an alignment between and R i into the pile of . An alignment pile for some can be transformed into a matrix where the columns represent positions on or before the bases of (before for base insertions into ) and the rows are the reads in the alignment pile for . An alignment ( k,j,kb,ke,jb,je,c ) between and a read j is active from base kb to ke on k . The cells of a matrix row corresponding to read R j are set as follows. Columns the respective alignment is inactive on remain empty. In the active region of the alignment a cell is filled with the base from R j if the alignment features a match, mismatch or insertion operation for the respective position and a dash (ā) otherwise. As a convention we always have the alignment between and R k as the first row of the matrix. Table 1 shows an example. The excerpt shows positions 100 to 102 on the read. Some bases have been inserted before position 102, which is marked by the position identifier (102, ā1). The alignment corresponding to the second row ends at position 101, the one for the last row starts at position 101. View this table: View inline View popup Download powerpoint Table 1. Excerpt from a matrix given by an alignment pile 2.2 Agreement Based Splitting Let d denote the average sequencing depth of the read set R . We assume the arrival rate of reads on the genome follows a Poisson distribution with mean d , i.e. we have a probability of to see a depth of i at a given position. The probability to see dā correctly sequenced bases for any position is thus We want to detect variation sites inside a given read R i . One very simple way to do this is to scan the matrix constructed for for columns in which more than one symbol appears with a frequency above a given threshold. Assuming the alignments used to construct the matrix are suitable we would see such a variation with probability if we chose a threshold of dā . For d = 20 and p e = 0.15 we obtain dā = 8 if we ask the probability to be at least 99%, i.e. we are 99% sure not to miss a relevant site if we look for columns containing at least two symbols with 8 or more instances. There is however the chance of calling variation sites because of unsuitable alignments in the pile for or a sufficiently high number of wrongly sequenced bases (this is a problem especially in the presence of a high number of sequence versions as this increases the total number of reads involved in the pile). Consider a given position q in the genome G and two reads R i and R j covering this position. Then we have a probability of (1 ā p e ) 2 for having the base at position q sequenced correctly in both R i and R j . Let A ij = ( i,j,ib,ie,jb,je,c ) denote an alignment between read R i and R j and assume we called n variants on R i inside the index interval [ ib,ie ]. If R i and R j overlap as designated by A ij in the underlying genome, then we have a probability of to see R i and R j agree on at least j of the n disagreement points in the matrix for the alignment pile of . If there are two underlying versions, e.g. a repeat with two copies or haplotypes in a diploid genome, then we would expect to see reads coming from different versions disagree on most of the variant locations. In this case we have a strong signal for separating the two versions. It becomes weaker in the presence of more versions when some of the versions agree with others in a large fraction of the variant locations. In this case we cannot reliably tell the difference between two reads stemming from different versions with a relatively low number of sequencing errors and two reads stemming from the same version but agreeing on a lower number of variant locations due to a higher number of sequencing errors. For experiments we choose the number m of disagreement points two reads need to agree on so we consider them as from the same class as the smallest number s.t. P s (m) > 0.995. 2.3 Disagreement Based Splitting One of the main problems with agreement based splitting is suboptimal performance when reads from different classes agree on a large number of the detected variant locations. Splitting based on the differences between genomic regions does not suffer from this effect. Every attempt via directly comparing two long reads is however bound to fail as the high sequencing error rate drowns any slight difference between the two underlying real sequences. At a single base error rate of p e = 15% the probability to see a correct pair of corresponding bases in two reads is (1 ā p e ) 2 = 72.25%, i.e. 27.75% of the pairs are wrong and most of these wrong pairs lead to a false disagreement between reads which should agree. When we compare bases for discovering disagreements between reads, we need to make reasonably sure that the bases compared are correct representations of their class for a given position. Consider some position on k reads stemming from the same class. Then we have a probability of 1 ā p e k to see the correct base in at least one of these k reads. For k = 2 and p e = 0.15 we have a probability of 97.75%, still a probability of more than 2% for all the bases to be wrong, for k = 3 we reach 99.6625%. In consequence, if three reads from the same class agree on a base, then this is most likely a correctly reported base. We use this observation by instead of comparing single read bases to single read bases comparing three tuples of bases to three tuples of bases. Given a read R j we first build the matrix corresponding to the alignment pile of . We then scan the matrix column for column. In each column c we extract all 6 tuples ( r 1 , r 2 , r 3 , r 4 , r 5 , r 6 ) s.t. r i for 1, 2,ā¦, 6 are row identifiers marking non empty cells in column c, the cells for row r 1 , r 2 and r 3 all contain the same symbol a , the cells for row r 4 , r 5 and r 6 all contain the same symbol b , a ā b , 1 = r 1 < r 2 < r 3 and r 4 < r 5 < r 6 . Remember row 1 in the matrix refers to the alignment between and R j . There are distinct such tuples in the worst case if q is the maximum number of active alignments in any column of the matrix. For each distinct tuple T we count the number Y (T ) of times it appears summed up over all columns. The support Z(T ) of a tuple T is the intersection of the active intervals of the alignments it is based on. If we want to split read sets down to a difference rate of Ī“ , then we expect Ī = Ī“ | Z ( T )| differences to exist inside Z ( T ). Assuming suitable alignments comprising ās matrix, the probability to see each single of these differences is p 6 = (1 ā p e ) 6 which is about 37.7% for p e = 15%. The probability to see at least m of these differences is . We choose the smallest i s.t. Ī·(i ) is at least 99.5% as a threshold. For each i we count the number H ( i ) of tuples satisfying their threshold in which i appears as r 4 , r 5 or r 6 . Given P d (Poisson distribution) as defined above we can determine a depth threshold d t which is reached for most bases on the genome. Using the average sequence depth we can also estimate the likelihood of having a certain number v of sequence variants in the pile observed. Reads i with a count H (i) close to or exceeding (we have fixed r 1 to 1 and one of r 4 , r 5 or r 6 to r ) are most likely not in the same class at R j . Reads i in the same class as R j should have a H ( i ) equal or close to zero. 3 Results We have implemented both splitting methods. They are freely available as the programs split_agr and split_dis in the daccord package (see https://github.com/gtl/daccord ). The daccord program (see [ 2 ]) in this package was also used to compute preliminary consensus sequences for the splitting. Read versus read alignments were computed using DALIGNER (cf. [ 1 ]). We performed two types of performance tests, both of which are based on simulated reads to ensure we can properly check whether and to what degree splittings computed are accurate. In the first test we took a 190kb piece of the E. coli genome, duplicated it k times for k = 1, 2,⦠8 and spiked in 1% difference between the duplicated versions and the original. The differences are single bp insertions, deletions and substitutions with equal probability. We generated reads of average length 15kbp with an error rate of 15% to evenly cover the sequences at depth d = 20. For the splitting we only considered read overlaps of 5kbp and more to reduce noise in the underlying statistics. Table 2 shows the performance of agreement and disagreement based splitting in this scenario. We provide precision (which fraction of the alignments kept is true), recall (which fraction of the true alignments is kept) and F 1 (harmonic mean of precision and recall) score measures to quantify the performance of the read classification methods. All scores given are rounded to 3 significant decimals. While agreement based splitting has good precision for one and two modified copies, the performance quickly drops up to the point where essentially most wrong alignments are kept. The disagreement based splitting works close to perfectly in this setting. For computing the threshold h t we have provided the correct value for the number of variants v to the program, as it does not yet support estimating it from the input data. The Ī“ parameter was set to 1%. View this table: View inline View popup Download powerpoint Table 2. Performance of splitting on 190kbp stretch of E. coli with 1 ā 8 copies added at 1% difference to original As the first test is highly synthetic, we have chosen a somewhat more realistic scenario for the second one. We have extracted regions containing the genes FCGR1(A |B|CP), FCGR2(A|B|C) and FCGR3(A|B) plus 100kbp to the left and right of these regions from chromosome 1 of the human reference genome (GRCh38). These regions are highly repetitive with repeating stretches of length up to 46kbp with a difference of merely 1% and one repeat of length 26kbp with 0.4% difference between the copies. We generated reads and alignments using the same parameters as for the other test. Table 3 shows the performance of the splitting approaches we measured. While the region considered is repetitive in itās entirety, we do not have many cases of stretches appearing more than twice in total, i.e. most repeats have only two instances. As this is the setting in which agreement based splitting mostly works, we see a decent performance for this method as reflected in the table. For the disagreement based splitting we provide two lines, one for the default value of h t = 441 which is computed as described above, the other one for h t = 7, the setting which maximises the F 1 score in this scenario. As above we used Ī“ = 1%. The recall value is good for both choices of h t . We lose hardly any true alignments. The precision value for the default h t of 441 is worse than the one of the agreement based method. A closer look reveals that the average difference between the true sequences we fail to separate (which lead to the false positive alignments we keep) is 0.467% which is way below our setting for Ī“ , so the failure in separation is not surprising. Just reducing the parameter Ī“ below 1% however does not markedly improve the splitting, as this also greatly increases noise (disagreement tuples observed although they are not real). The solution to this may be to require longer (> 5kbp) overlaps between reads. As for PacBIO 50% of the sequenced bases is found in reads longer than 20kbp, this may be feasible. When we reduce h t , then we are able to rule out more false positives, as there are some tuples for which most of the disagreements are observed and not just the small fraction we assume as a lower bound in our statistical considerations. This however also reduces the recall. View this table: View inline View popup Download powerpoint Table 3. Performance of splitting on FCGR regions of human chromosome 1 4 Conclusion We have shown that repeat and haplotype separation in long reads with current read length and error rates is possible down to a difference of 1% and possibly less. This improves on the current state of the art of 3% set by Canu. The methods proposed also work if there are more than two underlying sequence versions. We hope these new insights can help to significantly improve the assembly of repetitive regions in genomes. Acknowledgments We thank Gene Myers for interesting algorithmical discussions related to this paper. Footnotes āµ (1) Myers Lab, Max Planck Institute of Molecular Cell Biology and Genetics, PfotenhauerstraĆe 108, Dresden, Germany, tischler{at}mpi-cbg.de References [1]. āµ G. Myers . ā Efficient Local Alignment Discovery amongst Noisy Long Reads ā. Proceedings WABI , 2014 , LNCS , vol. 8701 , pp. 52 ā 67 . OpenUrl [2]. āµ G. Tischler and E. W. Myers . ā Non Hybrid Long Read Consensus Using Local De Bruijn Graph Assembly ā. bioRxiv , 2017 , https://doi.org/10.1101/106252 . [3]. āµ M. Martin et al. ā WhatsHap: fast and accurate read-based phasing ā. bioRxiv , 2016 , https://doi.org/10.1101/085050 . [4]. āµ V. Bansal , A. L. Halpern , N. Axelrod and Vineet Bafna . ā An MCMC algorithm for haplotype assembly from whole-genome sequencing data ā. Genome Research , vol. 18 , pp. 1336 ā 1346 , 2008 . OpenUrl Abstract / FREE Full Text [5]. āµ V. Bansal and V. Bafna . ā HapCUT: an efficient and accurate algorithm for the haplotype assembly problem ā. Bioinformatics , vol. 24 , pp. i153 ā i159 , 2008 . OpenUrl CrossRef PubMed Web of Science [6]. āµ S. Mazrouee and W. Wang . ā FastHap: fast and accurate single individual haplotype reconstruction using fuzzy conflict graphs ā. Bioinformatics , vol. 30 , pp. i371 ā i378 , 2014 . OpenUrl CrossRef PubMed [7]. āµ F. Deng , W. Cui and L. Wang . ā A highly accurate heuristic algorithm for the haplotype assembly problem ā. BMC Genomics , vol. 14S2 , 2013 . [8]. āµ Chen-Shan Chin et al. ā Phased diploid genome assembly with single-molecule real-time sequencing ā. Nature Methods , vol. 13 , pp. 1050 ā 1054 , 2016 . OpenUrl [9]. āµ S. Koren et al. ā Canu: scalable and accurate long-read assembly via adaptive k-mer weighting and repeat separation ā. Genome Research , vol. 27 , pp. 722 ā 736 , 2017 . OpenUrl Abstract / FREE Full Text Back to top Previous Next Posted June 02, 2017. Download PDF Email Thank you for your interest in spreading the word about bioRxiv. NOTE: Your email address is requested solely to identify you as the sender of this article. Your Email * Your Name * Send To * Enter multiple addresses on separate lines or separate them with commas. You are going to email the following Haplotype and Repeat Separation in Long Reads Message Subject (Your Name) has forwarded a page to you from bioRxiv Message Body (Your Name) thought you would like to see this page from the bioRxiv website. Your Personal Message CAPTCHA This question is for testing whether or not you are a human visitor and to prevent automated spam submissions. Share Haplotype and Repeat Separation in Long Reads German Tischler bioRxiv 145474; doi: https://doi.org/10.1101/145474 Share This Article: Copy Citation Tools Haplotype and Repeat Separation in Long Reads German Tischler bioRxiv 145474; doi: https://doi.org/10.1101/145474 Citation Manager Formats BibTeX Bookends EasyBib EndNote (tagged) EndNote 8 (xml) Medlars Mendeley Papers RefWorks Tagged Ref Manager RIS Zotero Tweet Widget Facebook Like Google Plus One Subject Area Bioinformatics Subject Areas All Articles Animal Behavior and Cognition (7820) Biochemistry (18262) Bioengineering (14430) Bioinformatics (43195) Biophysics (22023) Cancer Biology (19140) Cell Biology (26220) Clinical Trials (138) Developmental Biology (13669) Ecology (20452) Epidemiology (2067) Evolutionary Biology (24905) Genetics (15880) Genomics (23046) Immunology (18246) Microbiology (41426) Molecular Biology (17585) Neuroscience (91078) Paleontology (680) Pathology (2914) Pharmacology and Toxicology (4961) Physiology (7899) Plant Biology (15550) Scientific Communication and Education (2072) Synthetic Biology (4440) Systems Biology (10026) Zoology (2323) window.__CF$cv$params={r:'a1f6ff407d1ee748',t:'MTc4NDc3MTAzNg==',u:'019f8ca4ca967a828092de69a74ae16d',ut:'x3Jd0w_rq52nS1posTdxkwWG9evM2kgQgsCxbvvqvm0-1784771037-1.2.1.1-W0fM7KXxKVNoohRaV6K_3r8wPIaztZiebZ1Ln4jFQ5x.XhyHcwuv2Chkb4ASkSRaGIUADMhJ1JRlvf.x5hXxVoF3.Szh_GBz1zCVCPcjnfQ',i:60};(function(){if(!document.body)return;var s=document.createElement('script');s.src='/cdn-cgi/challenge-platform/scripts/precursor/main.js';document.head.appendChild(s);})();
Text is read by the "Ask this paper" AI Q&A widget below.
Extraction quality varies by source ā PMC NXML preserves structure
cleanly, OA-HTML may include some navigation residue, and OA-PDF can
have broken hyphenation. The publisher copy
(via DOI)
is the canonical version.