CN111199778A - 一种基于Spark SQL的RefGene基因库的注释方法和装置 - Google Patents
一种基于Spark SQL的RefGene基因库的注释方法和装置 Download PDFInfo
- Publication number
- CN111199778A CN111199778A CN201911218063.3A CN201911218063A CN111199778A CN 111199778 A CN111199778 A CN 111199778A CN 201911218063 A CN201911218063 A CN 201911218063A CN 111199778 A CN111199778 A CN 111199778A
- Authority
- CN
- China
- Prior art keywords
- field
- exon
- strand
- refgene
- interval
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G16—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR SPECIFIC APPLICATION FIELDS
- G16B—BIOINFORMATICS, i.e. INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR GENETIC OR PROTEIN-RELATED DATA PROCESSING IN COMPUTATIONAL MOLECULAR BIOLOGY
- G16B50/00—ICT programming tools or database systems specially adapted for bioinformatics
- G16B50/30—Data warehousing; Computing architectures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Bioethics (AREA)
- Biophysics (AREA)
- Databases & Information Systems (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Biotechnology (AREA)
- Evolutionary Biology (AREA)
- General Health & Medical Sciences (AREA)
- Medical Informatics (AREA)
- Spectroscopy & Molecular Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明的实施方式提供了一种基于Spark SQL的RefGene基因库的注释方法。该方法包括:生成以染色体正链和负链为区分的区间森林;使用Spark系统的广播机制,广播已经生成区间森林;使用待注释变异的指定字段,查询区间森林;对返回的查询结果与待注释的表执行内连接操作;输出包含注释结果的表。在执行本流程一遍之后,如果返回的注释结果不为空则执行本流程第二遍,用于注释该变异是否属于外显子。此外,本发明的实施方式提供了一种基于Spark SQL的RefGene基因库的注释装置。
Description
技术领域
本发明涉及基因检测技术领域,特别是指一种基于Spark SQL的RefGene基因库的注释方法和装置。
背景技术
基因测序是指通过测序仪器对血液、体液或细胞的分析,测取组成脱氧核糖核酸(即DNA)的碱基序列。变异注释是通过将基因测序后的脱氧核糖核酸碱基序列中的变异信息与各数据库进行比对,得到对应的功能注释信息。RefGene数据库,是目前人类已知的、经过实验验证的蛋白质编码和非蛋白质编码基因及其转录本的标示符和在基因组上的位置准确定位。在变异注释时,通过查询RefGene数据库,可以确定变异位点所属基因的名字和数据库中的唯一ID、所处的位置区域,如编码区、非编码区等信息。这为下一步的变异注释(如,UTR等)奠定了基础。
然而,随着成本的迅速下降,基因测序逐渐走向临床应用,测序数据呈现爆发式的增长,需要进行变异注释的数据也急剧增多。现有的基于RefGene数据库的变异注释,受限于RefGene数据库中区间查询的算法效率,导致注释效率很低,尤其是外显子的注释。
发明内容
有鉴于此,本发明的目的在于提出一种基于Spark SQL的RefGene数据库的注释方法和装置,能够高效准确的进行基因变异注释,尤其是外显子的注释。
基于上述目的,本发明提供的一种基于Spark SQL的RefGene数据库的注释方法,包括:
生成以染色体正链和负链为区分的区间森林。区间森林由区间树构成。这些区间树是RefGene数据库中的具有相同链方向(正链或者负链)且相同染色体号的变异信息的指定字段构成。指定字段是指RefGene数据库中的start字段(即,基因的起点)和end字段(即,基因的终点),或者RefGene数据库的子集中每个外显子的起点和终点。
使用Spark系统的广播机制,广播已经生成区间森林。
使用待注释变异的指定字段,查询区间森林。
对返回的查询结果与待注释的表执行内连接(inner join)操作。
输出包含注释结果的表。
如上所述是执行注释的基本流程。在执行本流程一遍之后,如果返回的注释结果不为空(即,待注释的变异位于RefGene数据库中的已知基因之上),则执行本流程第二遍,用于注释该变异是否属于外显子。与第一遍相比,在第二遍注释过程中,用于被查询的区间森林,是RefGene注释库的子集,即仅由包含了待注释输入表中外显子信息的RefGene注释库。这样的好处是减少了生成区间生成森林的时间、查询时间、广播通讯的数据量,以及最终内连接的表的大小。
执行完第一遍注释之后,可以知道待注释的变异是否位于RefGene数据库中的已知的基因之上。执行完第二遍注释之后,可以知道待注释的变异是否位于外显子之上:如果是,获取其属于外显子的具体位置和位次;如果否,将返回结果标志为“不在外显子之上”。
在Spark SQL中,所述的生成区间森林包括:
以格式(indexR,rowR)为RefGene数据库或RefGene数据库的子集中的每一行建立索引,其中RefGene数据库用于第一遍查询,RefGene数据库的子集用于第二遍;
以格式(rangeR,indexR)为前一步中的数据库的指定字段生成键/值对,指定字段是指RefGene数据库中的start字段(即,基因的起点)和end字段(即,基因的终点),或者RefGene数据库的子集中每个外显子的起点和终点;
以正负链为区分、染色体号为ID,每行的指定区间为节点,生成正负两个区间森林;
在Spark SQL中,所述的广播区间森林包括:
以广播方式在集群中分发两个区间森林;
在Spark SQL中,所述的查询区间森林包括:
输入的待注释表A,使用表A中指定的字段去查询区间森林;
在Spark SQL中,所述的连接返回的结果和待注释的表包括:
查询表A的返回结果,与表A进行内连接操作;
输出包含有注释信息的表F。
当返回的表F中,外显子字段不为空时,则执行本流程第二遍。与第一遍相比,用于被查询的区间森林,是RefGene注释库的子集,即仅由包含了待注释输入表中外显子信息的RefGene注释库。而且,用于构建区间森林的字段是每个外显子的起点字段和终点字段。
为了将这种注释操作变得更加方便使用,本发明定义了新的查询语法如下:select*from s rgjoin r on goverlap((s.txStart,s.txEnd,s.exonCount,s.exonStarts,s.exonEnds,s.chr,s.strand),(r.start,r.end,r.chr))。通过在SparkSQL词汇表中增加两个关键词rgjoin和goverlap,实现了新的查询接口。在上述新定义的查询语句中,s表示表形式RefGene数据库,r表示表形式的待注释变异。使用二元组作为on的条件,二元组中各个参数表示如下:s.txStart表示表s中变异的起点字段,s.txEnd表示表s中变异的终点字段,s.exonCount表示表s中外显子个数字段,s.exonStarts表示表s中每一个外显子起点的集合,s.exonEnds表示表s中每一个外显子终点的集合,s.chr表示表s中染色体号字段,s.strand表示表s中基因的方向(即正链和负链)字段;r.start表示表r中变异的起点字段,r.end表示表r中变异的终点字段,r.chr表示表r中染色体号字段。
为了实现本语法,本发明在Spark SQL内核中定义了样例类(case class),即caseclass Interval[T<%Long](start:T,end:T,groupId:Option[String]=None,exonNumber:Option[Int]=None,strand:Option[String]=None,name:Option[String]=None)。样例类Interval的各个参数含义如下:参数start表示变异的起点,参数end表示变异的终点,参数groupId表示染色体号,参数exonNumber表示外显子个数,参数strand表示基因的方向(即正链或者负链),参数name表示RefGene数据库中唯一标识基因的ID。
本发明实施例还提供一种基于Spark SQL的RefGene数据库的注释装置,所述注释装置包括:中央处理器,其可以根据存储在存储器中的数据和程序而执行各种适当的动作和处理。通过总线,中央处理器、存储器、输入输出部分、外部存储部分和网络部分之间实现了相互连接。
附图说明
图1流程图
图2基于Spark SQL的具体流程图
图3区间树示意图
图4由区间树构成的区间森林示意图
图5装置示意图
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
参考图1,为本发明实施例的基因注释方法流程图。参考图2,为基于Spark SQL的具体流程图。
所述基因分析注释方法,包括以下步骤:
步骤101、生成以染色体正链和负链为区分的区间森林。如图4所示,区间森林包括正链和负链两种,由图3所示的区间树构成。这些区间树是RefGene数据库中的具有相同链方向(正链或者负链)且相同染色体号的变异信息的指定字段构成。指定字段是指RefGene数据库中的start字段(即,基因的起点)和end字段(即,基因的终点),或者RefGene数据库的子集中每个外显子的起点和终点。
步骤102、使用Spark系统的广播机制,广播已经生成区间森林。
步骤103、使用待注释变异的指定字段,查询区间森林。
步骤104、对返回的查询结果与待注释的表执行内连接(inner join)操作。
步骤105、输出包含注释结果的表。
在Spark SQL实施方式中,所述的生成区间森林包括:
步骤201、以格式(indexR,rowR)为RefGene数据库或RefGene数据库的子集中的每一行建立索引,其中RefGene数据库用于第一遍查询,RefGene数据库的子集用于第二遍;
步骤202、以格式(rangeR,indexR)为步骤201中的数据库的指定字段生成键/值对,指定字段是指RefGene数据库中的start字段(即,基因的起点)和end字段(即,基因的终点),或者RefGene数据库的子集中每个外显子的起点和终点;
步骤203、以正负链为区分、染色体号为ID,每行的指定区间为节点,生成正负两个区间森林;
步骤204、以广播方式在集群中分发两个区间森林;
步骤205、输入的待注释表A,使用表A中指定的字段去查询区间森林;
步骤206、查询表A的返回结果,与表A进行内连接操作。
步骤207、输出包含有注释信息的表F。
如上所述是执行注释的基本流程。在执行本流程一遍之后,如果注释结果表F中外显子信息字段的数据不为空,则执行本流程第二遍。与第一遍相比,此时用于被查询的区间森林,是RefGene注释库的子集,即仅由包含了待注释输入表中外显子信息的RefGene注释库。而且,用于构建区间森林的字段是每个外显子的起始字段。这样的好处是减少了生成区间生成森林的时间、查询时间、广播通讯的数据量,以及最终内连接的表的大小。
为了将这种注释操作变得更加方便使用,本发明定义了新的查询语法如下:select*from s rgjoin r on goverlap((s.txStart,s.txEnd,s.exonCount,s.exonStarts,s.exonEnds,s.chr,s.strand),(r.start,r.end,r.chr))。通过在SparkSQL词汇表中增加两个关键词rgjoin和goverlap,实现了新的查询接口。在上述新定义的查询语句中,s表示表形式RefGene数据库,r表示表形式的待注释变异。使用二元组作为on的条件,二元组中各个参数表示如下:s.txStart表示表s中基因的起点字段,s.txEnd表示表s中基因的终点字段,s.exonCount表示表s中外显子个数字段,s.exonStarts表示表s中每一个外显子起点的集合,s.exonEnds表示表s中每一个外显子终点的集合,s.chr表示表s中染色体号字段,s.strand表示表s中基因的方向(即正链和负链)字段;r.start表示表r中变异的起点字段,r.end表示表r中变异的终点字段,r.chr表示表r中染色体号字段。为了实现本语法,本发明在Spark SQL中定义了样例类(case class),即case class Interval[T<%Long](start:T,end:T,groupId:Option[String]=None,exonNumber:Option[Int]=None,strand:Option[String]=None,name:Option[String]=None)。样例类Interval的各个参数含义如下:参数start表示变异的起点,参数end表示变异的终点,参数groupId表示染色体号,参数exonNumber表示外显子个数,参数strand表示基因的方向(即正链或者负链),参数name表示RefGene数据库中唯一标识基因的ID。
为了进一步说明本发明的具体实施过程,以Spark 1.X版本为例,使用Scala编程语言使用本发明中定义的新查询语法。
(1)import org.apache.spark.{SparkConf,SparkContext}
(2)import org.apache.spark.sql.SQLContext
(3)val sqlContext=new SQLContext(sc)
(4)import sqlContext._
(5)val vcf=sc.textFile("hdfs://master:9000/data/RefGene.vcf").map(line=>line.split("\t"))
(6)val queryFilteredVCF=sc.textFile("hdfs://master:9000/data/query.vcf").filter(line=>!line.contains("#"))
(7)val queryVCF=queryFilteredVCF.map(line=>line.split("\t"))
(8)case class RefGene(chr:String,start:Long,end:Long,esNumber:Int,esStarts:String,esEnds:String,name:String,strand:String)
(9)val rfgRDD=vcf.map(r=>RefGene(r(2).trim,r(4).toLong,r(5).toLong,r(8).toInt,r(9).trim,r(10).trim,r(1).trim,r(3).trim))
(10)case class read(chr:String,start:Long,end:Long)
(11)rfgRDD.registerTempTable("RefGene")
(12)val queryRDD=queryVCF.map(r=>read(r(0).trim,r(1).toLong,r(1).toLong))
(13)queryRDD.registerTempTable("read")
(14)val rjoin=sql("select*from RefGene s RANGEJOIN read r onGENOMEOVERLAP((s.start,s.`end`,s.esNumber,s.esStarts,s.esEnds,s.chr,s.strand),(r.start,r.`end`,r.chr))")
(15)val results=rjoin.collect()
(16)val rdd=sc.parallelize(results)
(17)rdd.saveAsTextFile("hdfs://master:9000/data/FinalOutput")
上述代码的具体功能如下:
行(1)-(4)导入程序执行所需的依赖包;
行(5)读取RefGene数据库;
行(6)读取待注释的变异数据;
行(7)对待注释的变异数据执行分割操作;
行(8)定义样例类RefGene;
行(9)使用RefGene中的指定字段初始化样例类,用以生成弹性数据集RDD,这些字段包括染色体号、基因的起点字段、基因的终点字段、外显子个数字段、外显子起点的集合、外显子终点的集合、RefGene数据库中唯一标识基因的ID、基因的方向(即正链和负链)字段;
行(10)将经过处理的RefGene数据库中的数据注册为Spark SQL中的临时表。
行(11)定义样例类read;
行(12)使用待注释的变异数据的指定字段初始化样例类read,这些字段包括染色体号、变异核苷酸的起点、变异核苷酸的终点;
行(13),将经过处理的待注释数据注册为Spark SQL中的临时表;
行(14)使用本发明中定义的查询语法定义Spark SQL查询语句;
行(15)调用Spark中的collect方法;
行(16)和行(17)完成注释结果的存储。
为了进一步说明本发明的具体实施过程,在执行上面所述的代码,本发明的执行过程对应的输出结果如下:
RefGene的下载地址:http://hgdownload.soe.ucsc.edu/goldenPath/hg19/database/RefGene.txt.gz
一条待注释的SNP(单核苷酸多态性)如下所示:[1,136048,.,C,T,12719,PASS,.,GT:DP:GQ:PL:HR:VAL,1/1:798:1380:12719,1380,0:0:1]。
在执行第一遍查询后,输出的二元组结果是([chr1,134772,140566,3,134772,139789,140074,,139696,139847,140566,,NR_039983,-,LOC729737],[1,136048,.,C,T,12719,PASS,.,GT:DP:GQ:PL:HR:VAL,1/1:798:1380:12719,1380,0:0:1]))。由于返回的结果中,包含外显子字段“3,134772,139789,140074,,139696,139847,140566”,本发明中的方法将会自动执行第二遍注释。最终输出的结果是[LOC729737,NR_039983,-,0,134772,139696,1,136048,…]。其中“0,134772,139696”字段表明待注释的SNP是NR_039983上第0位个外显子,起点和终点分别是134772和139696。
参考图5,其示出了适于用来实现本申请实施例的终端设备/服务器的计算机系统500的结构示意图。图5示出的终端设备/服务器仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图5所示,装置包括中央处理器501,其可以根据存储在存储器502中的数据和程序而执行各种适当的动作和处理。通过总线503,中央处理器501、存储器502、输入输出部分504、外部存储部分505和网络部分506之间实现了相互连接。
上述实施例的装置用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本发明的不同方面的许多其它变化,为了简明它们没有在细节中提供。
本发明的实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本发明的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种基于Spark SQL的RefGene数据库的注释方法,其特征在于包括:
生成以染色体正链和负链为区分的区间森林;
所述区间森林由区间树构成;
所述区间树是RefGene数据库中的具有相同链方向(正链或者负链)且相同染色体号的变异信息的指定字段构成;
所述指定字段是指RefGene数据库中的start字段(即,基因的起点)和end字段(即,基因的终点),或者RefGene数据库的子集中每个外显子的起点和终点;
使用Spark系统的广播机制,广播已经生成区间森林;
使用待注释变异的指定字段,查询区间森林;
对查询结果与待注释的表执行内连接(inner join)操作;
输出包含注释结果的表;
在执行本流程一遍之后,如果返回的注释结果不为空(即,待注释的变异位于RefGene数据库中的已知基因之上),则执行本流程第二遍,用于注释该变异是否属于外显子。
2.根据权利要求1所述的注释方法,在Spark SQL中,区间森林的特征在于包括:
以格式(indexR,rowR)为RefGene数据库或RefGene数据库的子集中的每一行建立索引;
以格式(rangeR,indexR)为前一步中的数据库的指定字段生成键/值对;
所述指定字段是指RefGene数据库中的start字段(即,基因的起点)和end字段(即,基因的终点),或者RefGene数据库的子集中每个外显子的起点和终点。
3.根据权利要求1-2所述的注释方法,在Spark SQL内核中定义样例类,其特征在于包括:
所述样例类格式为case class Interval[T<%Long](start:T,end:T,groupId:Option[String]=None,exonNumber:Option[Int]=None,strand:Option[String]=None,name:Option[String]=None);
所述样例类Interval的各个参数包括:参数start表示变异的起点,参数end表示变异的终点,参数groupId表示染色体号,参数exonNumber表示外显子个数,参数strand表示基因的方向(即正链或者负链),RefGene数据库中唯一标识基因的ID。
4.根据权利要求1-3所述的注释方法,定义新的Spark SQL查询语法,其特征在于包括:
所述新的Spark SQL查询语法格式是select*from s rgjoin r on goverlap((s.txStart,s.txEnd,s.exonCount,s.exonStarts,s.exonEnds,s.chr,s.strand),(r.start,r.end,r.chr));
在Spark SQL词汇表中增加两个关键词rgjoin和goverlap,实现新的查询接口。
5.根据权利要求4所述的注释方法,新定义的查询语句,其特征在于包括:
参数s表示表形式RefGene数据库,参数r表示表形式的待注释变异;
使用二元组作为on的条件,二元组中各个参数包括:s.txStart表示表s中变异的起点字段,s.txEnd表示表s中变异的终点字段,s.exonCount表示表s中外显子个数字段,s.exonStarts表示表s中每一个外显子起点的集合,s.exonEnds表示表s中每一个外显子终点的集合,s.chr表示表s中染色体号字段,s.strand表示表s中基因的方向(即正链和负链)字段;r.start表示表r中变异的起点字段,r.end表示表r中变异的终点字段,r.chr表示表r中染色体号字段。
6.基于Spark SQL的RefGene数据库的注释装置,其特征在于包括:
通过总线,中央处理器、存储器、输入输出部分、外部存储部分和网络部分之间实现了相互连接。中央处理器可以根据存储在存储器中的数据和程序而执行各种适当的动作和处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911218063.3A CN111199778A (zh) | 2019-12-03 | 2019-12-03 | 一种基于Spark SQL的RefGene基因库的注释方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911218063.3A CN111199778A (zh) | 2019-12-03 | 2019-12-03 | 一种基于Spark SQL的RefGene基因库的注释方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111199778A true CN111199778A (zh) | 2020-05-26 |
Family
ID=70747032
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911218063.3A Pending CN111199778A (zh) | 2019-12-03 | 2019-12-03 | 一种基于Spark SQL的RefGene基因库的注释方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111199778A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114550817A (zh) * | 2022-01-25 | 2022-05-27 | 云南大学 | 基于多特征的ctcf介导染色质环预测方法 |
-
2019
- 2019-12-03 CN CN201911218063.3A patent/CN111199778A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114550817A (zh) * | 2022-01-25 | 2022-05-27 | 云南大学 | 基于多特征的ctcf介导染色质环预测方法 |
CN114550817B (zh) * | 2022-01-25 | 2022-12-23 | 云南大学 | 基于多特征的ctcf介导染色质环预测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Gremme et al. | Engineering a software tool for gene structure prediction in higher organisms | |
Shahid et al. | Identification and annotation of small RNA genes using ShortStack | |
US11347704B2 (en) | Biological graph or sequence serialization | |
US20160019339A1 (en) | Bioinformatics tools, systems and methods for sequence assembly | |
CN112364024B (zh) | 一种表数据批量自动比对的控制方法及装置 | |
US20100049445A1 (en) | Method and apparatus for sequencing data samples | |
Kalyanaraman et al. | Space and time efficient parallel algorithms and software for EST clustering | |
CN111199778A (zh) | 一种基于Spark SQL的RefGene基因库的注释方法和装置 | |
De Schrijver et al. | Analysing 454 amplicon resequencing experiments using the modular and database oriented Variant Identification Pipeline | |
JP2018535484A (ja) | 階層的転置索引表を使用したdnaアラインメント | |
Schon et al. | Bookend: precise transcript reconstruction with end-guided assembly | |
Vezzi | Next generation sequencing revolution challenges: Search, assemble, and validate genomes | |
CN112908419A (zh) | 一种基于Spark SQL的mRNA序列的查询方法和装置 | |
Lehle et al. | Accelerating the alignment processing speed of the comprehensive end-to-end whole-genome bisulfite sequencing pipeline, wg-blimp | |
Shi et al. | Rsubread/Subread Users Guide | |
US20220199199A1 (en) | Biological sequence information handling | |
Denti | Algorithms for analyzing genetic variability from Next-Generation Sequencing data | |
Mohamadi | Parallel algorithms and software tools for high-throughput sequencing data | |
Börjesson | SVenX: A highly parallelized pipeline for structural variation detection using linked read whole genome sequencing data | |
Thallinger | Comparison of ddRAD Analysis Pipelines | |
Rengasamy | Engineering High Performance Workflows for End-to-End Acceleration of Genomic Applications | |
Karci et al. | GENOME ANNOTATION IN PLANTS USING ENSEMBL | |
Teixeira et al. | SpliceTAPyR—An Efficient Method for Transcriptome Alignment | |
US9703925B1 (en) | Rapid processing of biological sequence data | |
Haubold et al. | Interrogating and Storing Data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20200526 |