Does Cosmic Background radiation transmit heat? Copy. I'm interested in using biopython's SeqIO to parse this file into a dataframe which lists for each record ID, the values of its gene, db_xref, and coded_by from its CDS field, the organism and db_xref values from its source field, and db_xref value from its Region field. Without specification, the default GenBank parsing function will be used. If your GenBank files contains multiple sequence records (separated with //), you can provide the --separate flag. Latest version published 2 years ago. Reading and writing genbank/embl files with Python February 25 2019 Background The GenBank and Embl formats go back to the early days of sequence and genome databases when annotations were first being created. You can easily determine this by looking at the raw file - each record will start with a LOCUS line, followed by various other header lines, usually a list of features, the sequence data, and ends with a // line (slash slash). How the program works Program reads in user defined SOURCE file that was generated by GenBank database. The default is 1 (use fuzziness). Ask Thomas if you want some areas to be expanded upon. How to choose voltage value of capacitors, Can I use a vintage derailleur adapter claw on a modern derailleur, Ackermann Function without Recursion or Stack. Iterator Iterate through a file of GenBank entries. I installed pcregrep (grep utility that uses Perl-style regexps) in Ubuntu with sudo apt install pcregrep. I've used SARS-CoV-2 (Genbank: PA544053), because there was no Genbank entry given in the OPs question. crap. You tagged perl, @MatteoFerla take that back! So your "scaffold_31" text will only show up I think in the DEFINITION line in the end if I remember right. Open Source Biology & Genetics Interest Group. I have also tried this script on another equally large genbank file and was met with identical issues. If this information is not provided, then this value is inferred by the simple heuristic of: By default, the instantiation call ParsedAnnotationRecord.to_annotation_collection incorporated the sequence information on the objects. Such files contain one or more records with a feature for each coding sequence (or other genetic element). Request the user to enter the file name. the protein_id (see below). Read an NCBI GenBank format file (like our test data) and convert it to one of many Site design / logo 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA. It takes one file as its argument and return the content of the file in the form of key-value pair. To learn more, see our tips on writing great answers. Originally, FASTA is a . Is Koestler's The Sleepwalkers still well regarded? Just parse out the sequence ID (line starts with ID), description (DE) and sequence (SQ). rev2023.3.1.43269. Open source scripts, reports, and preprints for in vitro biology, genetics, bioinformatics, crispr, and other biotech applications. Parsing Sequence File Formats. Direct use of this class is discouraged, and may be deprecated in tag. Using Bio.GenBank directly to parse GenBank files is only useful if you want How to increase the number of CPUs in my computer? In this case, there is actually only one record: That example above uses a for loop and would cope with a GenBank file containing a multiple records. To learn more, see our tips on writing great answers. How can I install packages using pip according to the requirements.txt file from a local directory? import yaml with open ('items.yml') as f: dict = yaml.full_load (f) print (dict) Research Extract file name from path, no matter what the os/path format. One of the reasons in favor of XML as a standard data representation format is to reduce the number of parsers needed, but the chances of everyone moving to XML is zero. EMBL's records are actually easier to parse out! GenBank flatfile (GBF) format is one of the most popular sequence file formats because of its detailed sequence features and ease of readability. Parsing a genbank file format with biopython's SeqIO, The open-source game engine youve been waiting for: Godot (Ep. SeqRecord import SeqRecord from Bio. Virtually all of this information comes from the excellent but tome-like Biopython Tutorial. ETET.parselabel.getroot (). To subscribe to this RSS feed, copy and paste this URL into your RSS reader. instead. Replacing do_something_with(line) with print(line) will properly print each line of the file on the screen. It contains a set of modules for different biological tasks, which include: sequence annotations, parsing bioinformatics file formats (FASTA, GenBank, Clustalw etc. GenBank HOW TO READ GENBANK FILES USING PYTHON: A BIOINFORMATICS TUTORIAL Authors: Vincent Appiah University of Ghana Abstract This tutorial shows you how to read a genbank file. (I know nothing about gene sequencing, I'm just going by the variable names in the script). It basically searches for text strings in the Genbank structure that is appropriate for these particular genes. Other files are considered binary and can be handled in a way that is similar to the C programming language. Site design / logo 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA. # get all sequence records for the specified genbank file, # print the number of sequence records that were extracted, # print annotations for each sequence record, # print the CDS sequence feature summary information for each feature in each. Connect and share knowledge within a single location that is structured and easy to search. Except for the Regions field, which may appear several times in the FEATURES section of a record, the CDS and source fields appear only once in the FEATURES section of a record. Libraries that create parsers are known as parser combinators. Can anyone offer some suggestions as to why the entire genbank file is not parsed, how I could modify my code to remove this issue, or point me to another possible solution? I commented all over the script with my (basic) understanding of the code.. The GenBank and Embl formats go back to the early days of sequence and genome databases when annotations were first being created. Well, 'product' and 'function' provide the current knowledge of what the gene (is thought to) make and what it (is thought to) do. It is often useful to have an understanding of what isoform of a gene is the most important. representation to the raw file contents than the SeqRecord alternative from AnnotationCollections have the ability to be subsetted. Seq import Seq from Bio. Has 90% of ice around Antarctica disappeared in less than a decade? Seems like the easiest way to deal with this file format is to convert it to a JSON format (for example, using Bio), and then read it with various JSON parsers (like the rjson package in R, which parses a JSON file to a list of records). Returns a seqrecord object. The main goal of my script is to convert a genbank file to a gtf file. Here we have edited the product field. Is there a more recent similar source? Out of curiosity, what happens if you iterate through each line by changing: It would also be interesting to set some variable to zero before looping through the lines in the file and doing variable += 1 each time to see if the line number is what you expect. Here is how we use all that code together to make new embl files. This function relies on the locus_tag field present on every child of a gene feature. That is, each sequence in the toy genbank is on a seperate line. You're checking the type of the record, f to see if it is CDS, but then using a completely different record, record.features[featureCount]. What's wrong with my argument? See also this example of dealing with Fasta Nucelotide files.. As before, I'm going to use a small bacterial genome, Nanoarchaeum equitans Kin4-M (RefSeq NC_005213, GI:38349555, GenBank AE017199) which can be downloaded from the NCBI here: Does With(NoLock) help with query performance? If None, then the raw entry will be returned. microbiology, Asking for help, clarification, or responding to other answers. I am using python 2.7 and biopython 1.73. Making statements based on opinion; back them up with references or personal experience. BioPython uses the notation of a +1 and -1 strand for the forward and reverse/complement strands (use .strand), while this location (use .location) is held as 7397 to 8423 (zero based counting) to make it easy to use sequence splicing. There are many different file formats and most require a new parser, because the parser for a GenBank file can not handle BLAST or GO data. Parsing GenBank files Parsing GenBank files Without specification, the default GenBank parsing function will be used. The key used should be unique so locus_tag is best. You can request as many of these at once as you like! Features contain all the annotation information that you care about. Parsing gtf file for transcript ID and transcript name. The packages can be pip-installed pip install git+git://github.com/j-i-l/GenBankParser.git@v0.1.1-alpha v0.1.1-alpha is the last version at the moment of writing these instructions. I tried "linecache.getline ()", readlines () etc, however it loads the whole file and results with an error: (result, consumed) = self._buffer_decode (data, self.errors, final) Python packages; taxoniq-accession-lengths; taxoniq-accession-lengths v2021.3.23. Depending on the type of GenBank file(s) you are interested in, they will either contain a single record, or multiple records. genomics. MOAC DTC, Senate House, University of Warwick, Coventry CV4 7AL Tel: 024 765 75808 Email: moac@warwick.ac.uk. Typical information will be 'product' (for genes), 'gene' (name) , and 'note' for misc. Thus programming languages with bio libraries like Python have functionality for using them. RV coach and starter batteries connect negative to chassis; how does energy from either batteries' + terminal know which battery to flow back to? One way is to scan through all the features, and build up a mapping (stored as a python dictionary) from (say) the locus tag to the feature index. Taxoniq accession index for NCBI BLAST databases For more information about how to use this package see README. Connect and share knowledge within a single location that is structured and easy to search. Bioinformatics Stack Exchange is a question and answer site for researchers, developers, students, teachers, and end users interested in bioinformatics. Use at least one function. Making statements based on opinion; back them up with references or personal experience. Each record has several sections among them a FEATURES section with several fixed fields, such as source, CDS, and Region, with values that refer to information specific to that record. For this example I will be using the E.coli K12 genome, which clocks in at around 13 mbytes. Them's fighting words! For prokaryotes there's not really a difference since introns are virtually absent. I would like to extract part of the data from the input file shown below according to the following rules and print it in the terminal. It provides lot of parsers to read all major genetic databases like GenBank, SwissPort, FASTA, etc., as well as wrappers/interfaces to run other popular bioinformatics software/tools like NCBI BLASTN, Entrez, etc., inside the python environment. These are the spliced (introns removed) mRNAs that are translated into function proteins. rev2023.3.1.43269. To subscribe to this RSS feed, copy and paste this URL into your RSS reader. First, let us understand what the problem is. There are two blocks of gene data shown below. Below is a simple example of parsing GenBank file format: Example: To get the input file used click here. I am completely new to parsing through gene bank files so have little knowledge in this domain. LocationParserError Exception indicating a problem with the spark based The best answers are voted up and rise to the top, Not the answer you're looking for? Parsing a GenBank file with multiple gene entries. Copy PIP instructions, Convert GenBank format files to a swath of other formats, View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery, License: MIT License (The MIT License (MIT)), Tags The easiest way to inspect the structure of some random object I have found is Ipython, which is an awesome python interpreter that also has some nice terminal features (like cd ls mvetc). Is Koestler's The Sleepwalkers still well regarded? There is related example on my page about converting GenBank to FASTA. Partner is not responding when their writing is needed in European project application. aatree . Retrieve results using eSummary 3. These model objects are marshmallow_dataclass objects, and so can be dumped to and loaded directly from JSON. One example file is also provided as an example file. It has sibling projects like BioPerl, BioJava and BioRuby. To use the Bio.GenBank parser, there are two helper functions: read Parse a handle containing a single GenBank record With a little extra work you can use the location information associated with each feature to see what to do. To make this description more concrete, here's some ipython output. Copy Ensure you're using the healthiest python packages Snyk scans all the packages in your projects for vulnerabilities and provides automated fix advice . From there I stored each row in an array, similar to the storage method we used in . Making statements based on opinion; back them up with references or personal experience. start and end are not required to be set, and are inferred to be 0 and len(sequence) respectively if not used. RecordParser Parse GenBank data into a Record object. My problem pertains to extracting CDS information (gene, position (e.g., CDS 2598105..2598404), codon_start, protein_id, db_xref) from all CDS entries. For this demonstration I'm going to use a small bacterial genome, Nanoarchaeum equitans Kin4-M (RefSeq NC_005213, GI:38349555, GenBank AE017199) which can be downloaded from the NCBI here: NC_005213.gbk (only 1.15 MB). add you to the project. Python has the functionality of low-level compiled languages like C as well as higher level features, such as built in support for complex data types. What tool to use for the online analogue of "writing lecture notes on a blackboard"? You signed in with another tab or window. I'm trying to parse a protein genbank file format, Here's an example file (example.protein.gpff). It's this simple. Retrieve the current price of a ERC20 token from uniswap v2 router using web3js, Story Identification: Nanomachines Building Cities. If you're not sure which to choose, learn more about installing packages. Here are the output formats you can request. Publications # this example dataset has 4 genes and 0 features, # convert mRNA coordinates to genomic coordinates, # NoncodingTranscriptError is raised when trying to convert CDS coordinates on a non-coding transcript, ---------------------------------------------------------------------------, /Users/ian.fiddes/repos/biocantor/inscripta/biocantor/gene/transcript.py, """Converts a relative position along the CDS to sequence coordinate. Arguments read from a file must by default be one per line (but see also convert_arg_line_to_args()) and are treated as if they were in the same place as the original file referencing argument on the command line.So in the example above, the expression ['-f', 'foo', '@args.txt'] is considered equivalent to the expression ['-f', 'foo', '-f', 'bar'].. If my example is representative (might not be) I think its about the object attributes. For small edits its much easier to do it manually in a text editor or interactively in Artemis, for example. After loading an AnnotationCollectionModel, this object can be directly converted in to an AnnotationCollection with sequence information. instead. Welcome to EsgYsg v2.1 by Xxxxxx.xxx, proudly hosted by Ljhebr Ojjkq! First, we will open the file in read mode using the open() function. I recommend putting this into a virtual environment: (Not really recommended as things might break). Parsing a GenBank file and finding a feature . /product="terpene"). By clicking Accept all cookies, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy. The best answers are voted up and rise to the top, Not the answer you're looking for? This section explains about how to parse two of the most popular sequence file formats, FASTA and GenBank. When you have a simple pickle file, those with the extension ending in .pkl, you can pass the path to the file into the pd.read_pickle () function. OpenCV 3.0OpenCv . You need to create the parser first then use the parser to parse the opened input file. Thanks for contributing an answer to Stack Overflow! Python packages; GenbankParser; GenbankParser v0.2. Create . Not the answer you're looking for? I am not sure how to extract the scaffold information. Do EMC test houses typically accept copper foil in EUT? Read an NCBI GenBank format file (like our test data) and convert it to one of many different formats. We'll use Biopython to parse each genome, which gives all the features as a list. GenBank Data Parser is a Python script designed to translate the region of DNA sequence specified in CDS part of each gene into protein sequence. location parser. format you need, but if not either post an issue using our template, Let's see what feature types the E. coli genome contains. Biopython 1.53 makes this much easier: Having got our nucleotide sequence, Biopython will happily translate this for you (so you can check it agrees with the stated translation in the GenBank file). scanner or consumer). genome, make genbank from results The following Python code shows a method to carry out the steps above on an input fasta file. They are a (kind of) human readable format but rather impractical for programmatic manipulation. The fromfile_prefix_chars= argument defaults . What are some tools or methods I can purchase to trace a water leak? Record Identifier Instantly share code, notes, and snippets. 2023 Python Software Foundation Latest version published 2 years ago. Should I include the MIT licence of a library which I use from a CDN? The software was elaborated in such a manner as to enable searching TRS motifs in FASTA files downloaded, for instance, from GenBankthe file called sequence.fasta. Then use the BLAST button at the bottom of the page to align your sequences. We can write to a file if we open the file with any of the following modes: w- (Write) writes to an existing file but erases existing content. Python3 from Bio import SeqIO from Bio.SeqIO import parse seq_record = next(parse (open('is_orchid.gbk'), 'genbank')) The following internal classes are not intended for direct use and may I will explain each in turn. Parse eSummary XML results and print tab delimited output returning them. An input dataset can provide this information based on the parser implementation used. Its best feature (for my forgetful mind) is easy access to help files associated with functions, and the objects associated with a class. I re-worked the script and it works swimmingly. Some features may not work without JavaScript. I would strongly suggest simply using biopython, bioruby or biojulia etc. It accepts a genebank filename and the batch size; next_batch yields as many number of records as batch_size specifies. Iterator interface to move over a file of GenBank entries one at a time (OBSOLETE). What capacitance values do you recommend for decoupling capacitors in battery-powered circuits? Easiest way to remove 3/16" drive rivets from a lower screen door hinge? Need to revisit this: I tried my script on a different file: @cer: Yup, see my Edit. They hold the same data but store the data in a different format. GenBank.utils has a standard cleaner class, which This is a sample program that shows how to read data from a file. The script produces no errors, but only writes information from the first 1/2 of the genbank file before terminating. Thank you @Gerrat for your comments. Revision 7bd850f3. Using this, we could build parsers that can be used on vast text data or any unstructured data. To learn more, see our tips on writing great answers. Note this method is useful if you want to bulk edit features automatically. What capacitance values do you recommend for decoupling capacitors in battery-powered circuits? How did I know this? As you can see, features contain lots of cryptic information. Refseq Genbank To Fasta Format Failing With Contig Fields. Could not Properly parse out a location from a GenBank file. returns a dataframe with a row for each cds/entry""", 'ERROR: genbank file return empty data, check that the file contains protein sequences ', 'in the translation qualifier of each protein feature. What has meta-philosophy to say about the (presumably) philosophical work of non professional philosophers? records as Bio.GenBank specific Record objects. Connect and share knowledge within a single location that is structured and easy to search. There are a variety of formats available for CSV files in the library which makes data processing user-friendly. Objectives: 1. It also will try to complete a partially typed function or variable name if you press TAB midway through. At the top of your file, you will need to import the json module. Below is the first entry in my file. import json. We'll show this by looking for the features list entry for the CDS feature with locus_tag of NEQ010: This doesn't just work for the locus tag, using the db_xref (database cross-reference) we can index the features allowing us to search them using GI numbers or GeneID: It would also make sense to index by protein_id. Parse GenBank files into Record objects (OBSOLETE). The attached script looks through a genbank file and outputs all the CDS containing the name of the gene of interest. GB2sequin A file converter preparing custom Genbank files for database submission. /category = "terpene") and the third column will have the product value in the protocluster feature (ie. Read a handle containing a single GenBank entry as a Record object. When you switch back to using featureCount, you're now looking at records where the "type" is not "CDS". The parser behaves as a dict -like object, so it can be passed directly to configuration_from_dict: import configparser def configuration_from_ini(data): parser = configparser.ConfigParser () parser.read_string (data) return configuration_from_dict (parser) YAML I recommend putting this into a virtual environment: ( not really recommended as things might break ) or to! A lower screen door hinge parser implementation used the last version at the moment of these. For help, clarification, or responding to other answers Thomas if you want to bulk Edit automatically... More about installing packages let us understand what the problem is entry as a list file was... Actually easier to do it manually in a way that is, each sequence in the of... For help, clarification, or responding to other answers file for transcript ID transcript., bioinformatics, crispr, and end users interested in bioinformatics 's an example file is also provided an! I commented all over the script ) GenBank from results the following code. Other genetic element ) CSV files in the end if I remember right over script. Moac DTC, Senate House, University of Warwick, Coventry CV4 7AL Tel 024! Are virtually absent are some tools or methods I can purchase to trace water. A library which makes data processing user-friendly way that is similar to the C programming language have also tried script! A GenBank file for: Godot ( Ep uniswap v2 router using web3js Story! The CDS containing the name of the file on the locus_tag field present on every child a. Of cryptic information the script produces no errors, but only writes information from the but. And share knowledge within a single location that is similar to the storage method we used in I know about. I installed pcregrep ( grep utility that uses Perl-style regexps ) in Ubuntu with sudo apt install pcregrep note method. ( line starts with ID ), you 're looking for midway through what has meta-philosophy to say about object! Completely new to parsing through gene bank files so have little knowledge in domain! Not the answer you 're not sure how to parse out the sequence ID ( line starts with ID,! Marshmallow_Dataclass objects, and preprints for in vitro Biology, Genetics, bioinformatics, crispr and., Story Identification: Nanomachines Building Cities on another equally large GenBank file format, here some. Form of key-value pair handle containing a single location that is similar to the raw file contents the... But tome-like biopython Tutorial ) I think its about the object attributes concrete, here an. Read mode using the open ( ) function we use all that code together to new! And outputs all the CDS containing the name of the file in read using. Is, each sequence in the form of key-value pair press tab midway through Exchange Inc user. Will only show up I think its about the ( presumably ) philosophical work of non philosophers! A CDN featureCount, you 're not sure which to choose, learn more, my. Be expanded upon parser first then use the BLAST button at the top, not the answer you 're looking. Above on an input FASTA file a local directory, I 'm going... Of Interest loaded directly from JSON input file libraries like Python have functionality for using them using pip according the... Variable name if you press tab midway through entry as a list Stack Exchange Inc ; parse genbank file python contributions licensed CC! Perl-Style regexps ) in Ubuntu with sudo apt install pcregrep human readable format but rather impractical for programmatic manipulation SARS-CoV-2... Is to convert a GenBank file before terminating to the C programming language results and print tab output... Section explains about how to read data from a file are virtually.... Developers, students, teachers, and so can be directly converted in to an AnnotationCollection with sequence information features... Or interactively in Artemis, for example want to bulk Edit features automatically identical.. And loaded directly from JSON you press tab midway through toy GenBank is on a line!, let us understand what the problem is want to bulk Edit features automatically its. Create parsers are known as parser combinators in tag revisit this: tried... Contributions licensed under CC BY-SA this, we could build parsers that can be dumped to and loaded from. To trace a water leak object attributes ) with print ( line will. The opened input file used click here, learn more about installing packages EMC test typically. / logo 2023 Stack Exchange Inc ; user contributions licensed under CC BY-SA ( introns )... Should be unique so locus_tag is best file format: example: to get the input.! Read a handle containing a single location that is, each sequence in end! Requirements.Txt file from a lower screen door hinge I will be returned BioJava BioRuby. Your file, you can provide this information comes from the excellent but tome-like biopython Tutorial could build parsers can! Different formats what are parse genbank file python tools or methods I can purchase to trace a water leak line the! The form of key-value pair is representative ( might not be ) I think its the., and may be deprecated in tag professional philosophers GenBank is on a different:...: Yup, see our tips on writing great answers data in a that! A seperate line with Contig Fields use the BLAST button at the top of your file, you provide! % of ice around Antarctica disappeared in less than a decade the can! Typical information will be using the open ( ) function to bulk Edit features automatically in to an AnnotationCollection sequence... Has sibling projects like BioPerl, BioJava and BioRuby: PA544053 ), and may be deprecated in.! To parse a protein GenBank file format, here 's an example file ( like parse genbank file python data... Loading an AnnotationCollectionModel, this object can be pip-installed pip install git+git: @! Cc BY-SA line in the protocluster feature ( ie the content of the GenBank embl... A sample program that shows how to read data from a GenBank file to a gtf file for transcript and. In Ubuntu with sudo apt install pcregrep deprecated in tag retrieve the current price of a gene feature will print... A handle containing a single location that is appropriate for these particular genes difference introns. Of what isoform of a library which I use from a CDN loaded directly from JSON GenBank... '' ) and the third column will have the ability to be expanded upon MIT licence of a ERC20 from... The scaffold information in bioinformatics have little knowledge in this domain database submission could not properly parse!. 'Gene ' ( name ), because there was no GenBank entry given in the GenBank file,! Method we used in we use all that code together to make new embl files of parsing GenBank files GenBank. Transcript ID and transcript name defined SOURCE file that was generated by database. Question and answer site for researchers, developers, students, teachers, and snippets all over the ). Parser to parse GenBank files is only useful if you press tab midway through all code! According to the C programming language the default GenBank parsing function will be used vast... As batch_size specifies than a decade '' ) and sequence ( SQ ):! Like Python have functionality for using them recommended as things might break ) more. And may be deprecated in tag isoform of a ERC20 token from uniswap v2 router using web3js Story. The answer you 're now looking at records where the `` type '' not... Going by the variable names in the script produces no errors, but only writes information from excellent... Every child of a gene is the most popular sequence file formats, and... Has a standard cleaner class, which this parse genbank file python a question and answer site researchers. Capacitors in battery-powered circuits Foundation Latest version published 2 years ago that uses Perl-style regexps ) Ubuntu. Parsing a GenBank file and convert it to one of many different formats GenBank from results following! Get the input file used click here OPs question once as you like ( removed! ' for misc in a different format first 1/2 of the file on the parser first then use the button... ( basic ) understanding of what isoform of a gene feature House, University of Warwick, Coventry 7AL. Tab delimited output returning them different formats print ( line ) with print ( line with! Pcregrep ( grep utility that uses Perl-style regexps ) in Ubuntu with sudo apt install pcregrep handled in a that... The default GenBank parsing function will be using the open ( ) function is a sample program that how... I would strongly suggest simply using biopython, BioRuby or biojulia etc git+git..., students, teachers, and may be deprecated in tag 75808 Email: moac @ warwick.ac.uk using! Files is only useful if you press tab midway through gtf file GenBank is on a blackboard?. To get the input file be deprecated in tag from results the following Python code shows method! That back file ( like our test data ) and the third column will have the to! Choose, learn more, see our tips on writing great answers parse the opened input file used here! Of this class is discouraged, and may be deprecated in tag edits its much easier to parse out location! Writing great answers different formats days of sequence and genome databases when annotations were first being created is... For CSV files in the library which I use from a GenBank file with! What the problem is parsing GenBank file format with biopython 's SeqIO the... File before terminating see, features contain all the features as a Record object my script to... In Artemis, for example some ipython output its about the ( presumably ) philosophical work of non professional?. Features as a list script looks through a GenBank file format: example: to get the input file click!
Best Wisconsin Aau Basketball Teams, Pampas Grass Field Los Angeles, How Can Hydroponic Systems Adapt To Limited Surface Area, Articles P