From 1b0335dc749e8acc8b94d09187cb63a4db969986 Mon Sep 17 00:00:00 2001 From: mjakobs <25904555+mjakobs@users.noreply.github.com> Date: Fri, 5 Jan 2024 11:19:15 +0000 Subject: [PATCH 1/5] updated sample data --- data/demo_cn.rda | Bin 191 -> 172 bytes data/demo_mult.rda | Bin 249 -> 867 bytes data/demo_muts.rda | Bin 258 -> 907 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/demo_cn.rda b/data/demo_cn.rda index 657642bad61fb622644bb45f5a20de92ad528b01..6064839ade2ace6c2eb3bfd327d9e87e979929c7 100644 GIT binary patch literal 172 zcmV;d08{@TiwFP!000001B>8dU|?WoU}0utU}gm}8CXL@+;lB~V!|K}5c2^sqx}a4 z7y$DfUSy&09raooP~=6>)Wf+fOdvi33j-&}{Jg~6)M6k*0BjjVkU2S{2+HIrE=epZ zDabE|^4U`JQV=}$Jm17D!+1voH!}~!MYV&oD8F0}W)CkAGl5+C9|+JLlbn-S408-j akSiszBvCJ|2&f;(`v(BrX=@uV0RR9&T|fo^ literal 191 zcmV;w06_mAiwFP!000000}FDAFy@NjVqjokW?*3ilB_@`18ZoAo2~@|0}B(7!^ptG zzzL+;Q&MyD|)v~}u(6;!uj z%z_WF5!x9$;I~%N{xH-`ZGxBU$+1go;dAJaa-AG!Wq~KENJoG6Hl43w{F>A7EuFVP z8;bd~x%Xfb=5umq6K=svnBS?dhIC%S=3_nQmJ6hdC)RV>!Pb<+0j%#DaRwH#ZK!90 zPcckqZ=yaobv|5`2T!xF50VpgX1FsO*1}1e-7qQ>mZrlGaPr(_n7s`?fbQA^xFHUf z$HFc+B_sysM8SsDq=y?Dw*pp2z}|3jY8acRhs~knG!Hf@1X_Y&|7>!4I9s5Dt+@U? zot)u3cB2-W9btt7e8_&*kTYCyUCvlw3pcR`)Ue7LHnKf}^l}@3i+;m6_E0~p#&zxW z#n&-MOSR0rvrEVGi8P9yALy<@bo9;y+d|6#onDMyYm$u8L^tq30nhp%(VC zHmSyx#0Q*TwD|6&*@yW)F;n{`< tH3`N{qm*Ql7aDQ6y(w*%G+e+qd9yalFN1@FLr;(ce*rBG^$VdB003AHtP21D literal 249 zcmVlt%FbO0P zTaV&VJcGU1#PHkx7=pqs=MV)5)maBeF_d7-UhI zS#~`?oco7;!rSUEgQ&*Qzy_o9PYF>qd;8$l8f0H)F2ECb1~1_CO+jE2gfHL=_yWFw zFW^h~6262l;Y;}P<$vCZ;v4(-->}ducA$MPrgwvwm^4@0C{Mk>MOqI+#S5`odOF$# z8|5F8V(UfWQROFAI7%lT(losluU+kRoL`$yI<8K%T1V`2^~mB0e*j$8_W}R_en@i( diff --git a/data/demo_muts.rda b/data/demo_muts.rda index 5230a5db6d1a6b876c4d824b4e9f611feaa8ca19..c970b18c62d6da9e13a81e9e775be707db1a59a7 100644 GIT binary patch literal 907 zcmV;619bc!iwFP!000001MS#*NK;W92k<+$SuVBt>}6$^`I@65%1Uf2%ZQ4i751PU zKCoCNb3G`D^%8qYNiU>C$|9s>l}JeskrF8_krFErlU|6KnUz^-cfap%|M*Y!Z=4Hf zpL5QB_ndR#{`P|`sX;p-?Ck3jalk z>xiK}(%>8zI(7z=ovB*#(@_dCbd}N_hR;nc0$2=>+#l0UkS zk-viMWM4e&w`4dqN((2!W~i`+lWy+8Fn>6y)U%azKBH>oVAw|IG^%$)cb^`3k-mgiQ*Of&tnbrPO8U-Wk6=IFhAX6BF!uA?$d(qtKJ4$m;4I8zn{b|h zi6>wNTaNPus*b=VIq(eIx}O}Tv%_s!umTR(?0_a4EXaWG;fN^~n3WEz;7Dx>T%81q z*1`@rDkc%`HNl#tWKbZRv34a905=WFH`pquTOG-B9GSZYsO#6x@xx)?Hw$^WcYLWVCNCoX)OA z-be2_1TP`)qaU%I*`z)IzXST2d*OO^zg@y5>WEWOM?@VVMIC{njzCdI$UoN+t=y_5 zmE<9-nEMwUqX-tkB3J~AU=jSk1rMl)roZSUh+q*cf<>?h7Qz2pu%vSS&!ON6^=9*? z)JzFQQq7af&8$ze%J<8ozTZb1!s005BU%i{n5 literal 258 zcmb2|=3oE=X6~X+gJ)e2k`fXU(h?F`CarN$W6sX#n7xjbnVDO7!r>DK4jtfJVi_D% z{P}UQw|7_LsTRjo4G|0-t_!#%c-w`V8yoqbl(m~j@hRvtzhu$4%dk}3;U#mxFUFQ@ zX$_aS0;E>OOQRz8Rq-fjO+ClX;08ubT?>A`HswGblkM$1d~Mc&JXd^9&6+-Ab`;N7 z0qu|pmX?b-)Z$|%MT9U3`=9l0H0%z#oN(sI9HB33;-|!~V>g~D-Z9gm@IMfkzqqFU kTt)2gns&~jr7F`@UM&@6{K{PU-$8;Q)7v1aoP~h_0AS5yUjP6A From 12383da585a9952732c5c7b81b01d86d9fbcae2e Mon Sep 17 00:00:00 2001 From: mjakobs <25904555+mjakobs@users.noreply.github.com> Date: Fri, 5 Jan 2024 11:21:52 +0000 Subject: [PATCH 2/5] re-saved because something wasn't loading correctly --- data/demo_cn.rda | Bin 172 -> 192 bytes data/demo_mult.rda | Bin 867 -> 892 bytes data/demo_muts.rda | Bin 907 -> 946 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/demo_cn.rda b/data/demo_cn.rda index 6064839ade2ace6c2eb3bfd327d9e87e979929c7..50746f1d1ed742de59bc0ca54820de7c846243ab 100644 GIT binary patch literal 192 zcmV;x06+g9iwFP!000000}FDAFy@NjVqjokW?*4vWMF0mG8tGyL)>&N7#LWXfE-2! z76wir&7P8)n;)N?2UIEyQUk<%AZhy#3@`xZJG{t3;XCTJG@!_fps9y*QLJOlOUz9z z1~LS|mO%uWlQW8-OpfA`#G;ad{9-7dEj2F%!DG+!P0TWkcSLYA^FUlwJ2;E-%k^OP u@B%Rt$ff^*0NpXkIf=zE$G`-+QW8rN_0o!f`hmQEAPfMe*)If70RRA;)=y6W delta 161 zcmV;S0AByV0jvQFABzY80000000WDW5EXxbV!|K}5c2^sqx}a47y$DfUSy&09raoo zP~=6>)Wf+fOdvi33j-&}{Jg~6)M6k*0BjjVkU2S{2+HIrE=epZDabE|^4U`JQV=}$ zJm17D!+1voH!}~!MYV&oD8F0}W)CkAGl5+C9|+JLlbn-S408-jkSiszBvCJ|2&fGo P$omHX+-YkYF984mUY9!k diff --git a/data/demo_mult.rda b/data/demo_mult.rda index 7f76a642e576cd01a3c1fa021356e509da5f57f9..aa10bb7c03b1df0c03ce017ab2f7a2f0d9c8c2ee 100644 GIT binary patch literal 892 zcmV-?1B3h@iwFP!000001MS#(NEA^V2k@u6nr>$6kzH11n%6qmLD@m=#&!@D9Ts*_ zZtmK_uF9$vC9$2@B^F&sg_K1|$yO32Rw5NrRw5NvA|`eqW@c7qrH#Mu&p-0N{)zsW z2eY3yvor6#f%l!AeT$9p<23OaA%se(RW3s1CRc^q(zsdCu|lX_F%#DGy(8V53y1EC! z+(D#DV#{cJ2K6!z*hu3vxNV2-KJD;4joZ*?(tG#_dYJ0qmuk{;AJh!1gjdSRzB5bV z3+QFLLH2WT!ebXn?+Er5-LIklqLc6q-M2wI742#F-i4KD&u0j0E`fz;->1EZ^qs*T zM1Q`|FOhyh=+AE>Ta*tw(ZBzkQ}75|gYgU)eH5m$#TZ|J`XF481y8c|yUBq%2i%ki zOW`2R78sWf&!oclaPU|w%v=xe!y#HTT#*3tSHWgDG&UaYjDr;m$-n?MVIC})1KW(` zuxV_T9#%~yhX=ArvCuglcEpe)jBK_JR%8AJ`S`*K>`EChvr6*xe3+ zqWm9GRQ$*4h2npq$6u=LrN1J|9}8b@$tIg6O|EDKEtAnfRpNSkPt}ra=Bi(EiX?xL zCatxY>>HBTNw$pi-mN8CO=&%?^&HfgP3a~n$u4))d)3XJvRUdGKtFkNb;uuGU0vO8 Sklk--oxcGvQ&twk6952Xxwzf{ literal 867 zcmV-p1DyOHiwFP!000001MS#-Oif`N2k@uvEp;Wg7a<|h`|S*CgqC|Pw1zQhq0!Zg zm-V(=VKlo!3u$S2S)(|)v~}u(6;!uj z%z_WF5!x9$;I~%N{xH-`ZGxBU$+1go;dAJaa-AG!Wq~KENJoG6Hl43w{F>A7EuFVP z8;bd~x%Xfb=5umq6K=svnBS?dhIC%S=3_nQmJ6hdC)RV>!Pb<+0j%#DaRwH#ZK!90 zPcckqZ=yaobv|5`2T!xF50VpgX1FsO*1}1e-7qQ>mZrlGaPr(_n7s`?fbQA^xFHUf z$HFc+B_sysM8SsDq=y?Dw*pp2z}|3jY8acRhs~knG!Hf@1X_Y&|7>!4I9s5Dt+@U? zot)u3cB2-W9btt7e8_&*kTYCyUCvlw3pcR`)Ue7LHnKf}^l}@3i+;m6_E0~p#&zxW z#n&-MOSR0rvrEVGi8P9yALy<@bo9;y+d|6#onDMyYm$u8L^tq30nhp%(VC zHmSyx#0Q*TwD|6&*@yW)F;n{`< tH3`N{qm*Ql7aDQ6y(w*%G+e+qd9yalFN1@FLr;(ce*rBG^$VdB003AHtP21D diff --git a/data/demo_muts.rda b/data/demo_muts.rda index c970b18c62d6da9e13a81e9e775be707db1a59a7..9928a7ff97cb152e9c576347550ff6cc0c7b0384 100644 GIT binary patch literal 946 zcmV;j15NxNiwFP!000001MS*>OcQ4q2k^JFMW_e`1eJjT6Zusd{E-RHV5?P(*%r2S z1Ra?)w8Sk%NU75}Vybh7O(kgDG{g}y(HOFkZX;wfObOWxaiD}uf*T>sxXlp85K)m$ z@cMk8{xSX$|0Qpe>*u}e_wL?H?&*_U?hQ-9YF&X&2%#1lwMwY9%1~(EvTn)95<(N8 ztf+)W1SMX5$_zAp#y3hET z9X&!CqwqgqTz3fWWDk1;KC+Malzl|@5mNRMDEkPMeS~~=AJHpI2S4~yZJNcvEW literal 907 zcmV;619bc!iwFP!000001MS#*NK;W92k<+$SuVBt>}6$^`I@65%1Uf2%ZQ4i751PU zKCoCNb3G`D^%8qYNiU>C$|9s>l}JeskrF8_krFErlU|6KnUz^-cfap%|M*Y!Z=4Hf zpL5QB_ndR#{`P|`sX;p-?Ck3jalk z>xiK}(%>8zI(7z=ovB*#(@_dCbd}N_hR;nc0$2=>+#l0UkS zk-viMWM4e&w`4dqN((2!W~i`+lWy+8Fn>6y)U%azKBH>oVAw|IG^%$)cb^`3k-mgiQ*Of&tnbrPO8U-Wk6=IFhAX6BF!uA?$d(qtKJ4$m;4I8zn{b|h zi6>wNTaNPus*b=VIq(eIx}O}Tv%_s!umTR(?0_a4EXaWG;fN^~n3WEz;7Dx>T%81q z*1`@rDkc%`HNl#tWKbZRv34a905=WFH`pquTOG-B9GSZYsO#6x@xx)?Hw$^WcYLWVCNCoX)OA z-be2_1TP`)qaU%I*`z)IzXST2d*OO^zg@y5>WEWOM?@VVMIC{njzCdI$UoN+t=y_5 zmE<9-nEMwUqX-tkB3J~AU=jSk1rMl)roZSUh+q*cf<>?h7Qz2pu%vSS&!ON6^=9*? z)JzFQQq7af&8$ze%J<8ozTZb1!s005BU%i{n5 From cb2a58b90eff81b94c293ee3a081e3367b357931 Mon Sep 17 00:00:00 2001 From: mjakobs <25904555+mjakobs@users.noreply.github.com> Date: Fri, 5 Jan 2024 11:22:07 +0000 Subject: [PATCH 3/5] updated example in README and fixed typos --- README.md | 143 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 81 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index c276463..404682e 100644 --- a/README.md +++ b/README.md @@ -57,66 +57,85 @@ data(demo_cn, demo_mult, demo_muts) Copy number data should be derived from [`Battenberg`](https://github.com/Wedge-lab/battenberg) and must contain the following columns at the very least: `"chr"`, `"startpos"`, `"endpos"`, `"nMaj1_A"`, `"nMin1_A"`. `"nMaj2_A"` and `"nMin2_A"` should be included if applicable. Other columns may be present but the 5 columns listed above are a core requirement. ```r demo_cn -## chr startpos endpos nMaj1_A nMin1_A -## 1 1 50000 1e+06 2 1 + +## chr startpos endpos nMaj1_A nMin1_A +## 1 1 50000 1e+06 5 2 ``` ### Multiplicity data Multiplicity data should be derived from [`dpclust3p`](https://github.com/Wedge-lab/dpclust3p). The multiplicity data frame must have the following columns at a minimum: `"chr"`, `"end"`, and `"no.chrs.bearing.mut"`. Other columns may be present. ```r -deom_mult - -## chr end no.chrs.bearing.mut -## 1 1 57682 2 -## 2 1 57683 2 -## 3 1 57684 2 -## 4 1 57685 2 -## 5 1 57686 2 -## 6 1 57687 1 -## 7 1 57688 1 -## 8 1 57689 1 -## 9 1 57690 1 -## 10 1 57691 1 -## 11 1 57692 1 -## 12 1 57693 1 -## 13 1 57694 1 -## 14 1 57695 1 -## 15 1 57696 1 -## 16 1 57697 1 -## 17 1 57698 1 -## 18 1 57699 1 -## 19 1 57700 1 -## 20 1 57701 1 +head(demo_mult,20) + +## chr end no.chrs.bearing.mut +## 1 1 57682 1 +## 2 1 62417 1 +## 3 1 67153 1 +## 4 1 71888 1 +## 5 1 76623 1 +## 6 1 81358 1 +## 7 1 86094 1 +## 8 1 90829 1 +## 9 1 95564 1 +## 10 1 100299 1 +## 11 1 105035 1 +## 12 1 109770 1 +## 13 1 114505 1 +## 14 1 119240 1 +## 15 1 123976 1 +## 16 1 128711 1 +## 17 1 133446 1 +## 18 1 138182 1 +## 19 1 142917 1 +## 20 1 147652 1 +``` +```r +str(demo_mult) + +## 'data.frame': 200 obs. of 3 variables: +## $ chr : num 1 1 1 1 1 1 1 1 1 1 ... +## $ end : num 57682 62417 67153 71888 76623 ... +## $ no.chrs.bearing.mut: num 1 1 1 1 1 1 1 1 1 1 ... ``` ### Mutation data The mutation data frame should contain either all mutations present in the sample or region, or only mutations attributed to mutational signatures SBS1 and SBS5. The presence of the following columns is required:`"chr"`, `"start"`, `"end"`, `"ref"`, `"alt"`. Other columns may be present. ```r -demo_muts - -## chr start end ref alt -## 1 1 57682 57682 C T -## 2 1 57683 57683 C T -## 3 1 57684 57684 C T -## 4 1 57685 57685 C T -## 5 1 57686 57686 C T -## 6 1 57687 57687 C T -## 7 1 57688 57688 C T -## 8 1 57689 57689 C T -## 9 1 57690 57690 C T -## 10 1 57691 57691 C T -## 11 1 57692 57692 C T -## 12 1 57693 57693 C T -## 13 1 57694 57694 C T -## 14 1 57695 57695 C T -## 15 1 57696 57696 C T -## 16 1 57697 57697 A G -## 17 1 57698 57698 A G -## 18 1 57699 57699 A G -## 19 1 57700 57700 A G -## 20 1 57701 57701 A G +head(demo_muts, 20) + +## chr start end ref alt +## 1 1 57682 57682 C T +## 2 1 62417 62417 C T +## 3 1 67153 67153 C T +## 4 1 71888 71888 C T +## 5 1 76623 76623 A G +## 6 1 81358 81358 C T +## 7 1 86094 86094 C T +## 8 1 90829 90829 C T +## 9 1 95564 95564 C T +## 10 1 100299 100299 A G +## 11 1 105035 105035 C T +## 12 1 109770 109770 C T +## 13 1 114505 114505 C T +## 14 1 119240 119240 C T +## 15 1 123976 123976 A G +## 16 1 128711 128711 C T +## 17 1 133446 133446 C T +## 18 1 138182 138182 C T +## 19 1 142917 142917 C T +## 20 1 147652 147652 A G +``` +```r +str(demo_muts) + +## 'data.frame': 200 obs. of 5 variables: +## $ chr : num 1 1 1 1 1 1 1 1 1 1 ... +## $ start: num 57682 62417 67153 71888 76623 ... +## $ end : num 57682 62417 67153 71888 76623 ... +## $ ref : chr "C" "C" "C" "C" ... +## $ alt : chr "T" "T" "T" "T" ... ``` ### A Note on Mutation Types @@ -135,7 +154,7 @@ amp_stop <- 1500000 A `TRUE` or `FALSE` logical value encoding whether a sample has been identified as whole genome duplicated or not. ### Reference genome -Either `"hg19"` or `"hg38"` depending on which is appropriate. This is required so that `AmplificationTimeR` can filter mutations for C>T variants occurring specifically at CpG sites, to ensre that only clock-like mutations are used. +Either `"hg19"` or `"hg38"` depending on which is appropriate. This is required so that `AmplificationTimeR` can filter mutations for C>T variants occurring specifically at CpG sites, to ensure that only clock-like mutations are used. ### Example @@ -165,19 +184,19 @@ segment_time <- time_amplification( ```r segment_time -## Data frame with 1 row and 47 columns -## sample region highest_copy_number event_order num_mutations_used clonality_status flags t_1 -## 1 test_sample 1:50000-1e+06 2+1 W 4 clonal NA 0 -## t_1_mean_bootstrap t_1_lower_ci t_1_upper_ci t_2 t_2_mean_bootstrap t_2_lower_ci t_2_upper_ci t_3 -## 1 0 0 0 NA NA NA NA NA -## t_3_mean_bootstrap t_3_lower_ci t_3_upper_ci t_4 t_4_mean_bootstrap t_4_lower_ci t_4_upper_ci t_5 -## 1 NA NA NA NA NA NA NA NA -## t_5_mean_bootstrap t_5_lower_ci t_5_upper_ci t_6 t_6_mean_bootstrap t_6_lower_ci t_6_upper_ci t_7 -## 1 NA NA NA NA NA NA NA NA -## t_7_mean_bootstrap t_7_lower_ci t_7_upper_ci t_8 t_8_mean_bootstrap t_8_lower_ci t_8_upper_ci t_9 -## 1 NA NA NA NA NA NA NA NA -## t_9_mean_bootstrap t_9_lower_ci t_9_upper_ci t_10 t_10_mean_bootstrap t_10_lower_ci t_10_upper_ci -## 1 NA NA NA NA NA NA NA +## Data frame with 1 row and 4 columns +## sample region highest_copy_number event_order num_mutations_used clonality_status flags t_1 +## 1 test_sample 1:50000-1e+06 5+2 WGGG 34 clonal NA 0.893617 +## t_1_mean_bootstrap t_1_lower_ci t_1_upper_ci t_2 t_2_mean_bootstrap t_2_lower_ci t_2_upper_ci t_3 +## 1 0.8827177 0.8723866 0.8930488 0.893617 0.8827177 0.8723866 0.8930488 0.893617 +## t_3_mean_bootstrap t_3_lower_ci t_3_upper_ci t_4 t_4_mean_bootstrap t_4_lower_ci t_4_upper_ci t_5 +## 1 0.8827177 0.8723866 0.8930488 0.893617 0.9165478 0.8942302 0.9388653 NA +## t_5_mean_bootstrap t_5_lower_ci t_5_upper_ci t_6 t_6_mean_bootstrap t_6_lower_ci t_6_upper_ci t_7 t_7_mean_bootstrap +## 1 NA NA NA NA NA NA NA NA NA +## t_7_lower_ci t_7_upper_ci t_8 t_8_mean_bootstrap t_8_lower_ci t_8_upper_ci t_9 t_9_mean_bootstrap t_9_lower_ci +## 1 NA NA NA NA NA NA NA NA NA +## t_9_upper_ci t_10 t_10_mean_bootstrap t_10_lower_ci t_10_upper_ci +## 1 NA NA NA NA NA ``` ### Output flags We have provided a number of flags to assist users in identifying `AmplificationTimeR` results that may warrant further investigation. From 1dd3be3341ea7858d9ee2ae4c6267e0a021d7ed0 Mon Sep 17 00:00:00 2001 From: mjakobs <25904555+mjakobs@users.noreply.github.com> Date: Fri, 5 Jan 2024 16:01:45 +0000 Subject: [PATCH 4/5] fixed 7+2 GWGGG t4 typo --- R/time_amplification.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/time_amplification.R b/R/time_amplification.R index 274a7d4..213369b 100644 --- a/R/time_amplification.R +++ b/R/time_amplification.R @@ -715,7 +715,7 @@ time_amplification_maths <- function(mult_data, max_amp, is_WGD, ordering_event) t_1 <- (9*n7)/(n1 + 2*n2 + 3*n3 + 4*n4 + 5*n5 + 7*n7) t_2 <- (9*(n5 + n7))/(n1 + 2*n2 + 3*n3 + 4*n4 + 5*n5 + 7*n7) t_3 <- (9*(n4 + n5 + n7))/(n1 + 2*n2 + 3*n3 + 4*n4 + 5*n5 + 7*n7) - t_4 <- (9*(n3 + n3 + n5 + n7))/(n1 + 2*n2 + 3*n3 + 4*n4 + 5*n5 + 7*n7) + t_4 <- (9*(n3 + n4 + n5 + n7))/(n1 + 2*n2 + 3*n3 + 4*n4 + 5*n5 + 7*n7) t_5 <- (9*(n2 + n3 + n4 - n5))/(n1 + 2*n2 + 3*n3 + 4*n4 + 5*n5 + 7*n7) amplification_results$t_1 <- t_1 From 87b9fa3dcc444e8d44225c559fa5415634ce8de1 Mon Sep 17 00:00:00 2001 From: mjakobs <25904555+mjakobs@users.noreply.github.com> Date: Fri, 5 Jan 2024 16:03:13 +0000 Subject: [PATCH 5/5] update version --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 98cea2c..28e44bc 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: AmplificationTimeR Type: Package Title: Timing of Individual Amplicitation Events in Cancer -Version: 1.1.0 +Version: 1.1.1 RoxygenNote: 7.2.2 Encoding: UTF-8 License: GPL (>= 3)