<?xml version='1.0'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:atom="http://www.w3.org/2005/Atom" >
<channel>
	<title><![CDATA[BOL: Related items]]></title>
	<link>https://bioinformaticsonline.com/related/40583?offset=90</link>
	<atom:link href="https://bioinformaticsonline.com/related/40583?offset=90" rel="self" type="application/rss+xml" />
	<description><![CDATA[]]></description>
	
	<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/bookmarks/view/39875/lrsday-long-read-sequencing-data-analysis-for-yeasts</guid>
	<pubDate>Mon, 26 Aug 2019 18:07:33 -0500</pubDate>
	<link>https://bioinformaticsonline.com/bookmarks/view/39875/lrsday-long-read-sequencing-data-analysis-for-yeasts</link>
	<title><![CDATA[LRSDAY: Long-read Sequencing Data Analysis for Yeasts]]></title>
	<description><![CDATA[<p><span>Long-read sequencing technologies have become increasingly popular in genome projects due to their strengths in resolving complex genomic regions. As a leading model organism with small genome size and great biotechnological importance, the budding yeast,&nbsp;</span><em>Saccharomyces cerevisiae</em><span>, has many isolates currently being sequenced with long reads.&nbsp;</span></p><p>Address of the bookmark: <a href="https://github.com/yjx1217/LRSDAY" rel="nofollow">https://github.com/yjx1217/LRSDAY</a></p>]]></description>
	<dc:creator>Poonam Mahapatra</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/news/view/42324/comparative-genomics-data-set-including-240-mammals-released</guid>
	<pubDate>Thu, 19 Nov 2020 06:45:39 -0600</pubDate>
	<link>https://bioinformaticsonline.com/news/view/42324/comparative-genomics-data-set-including-240-mammals-released</link>
	<title><![CDATA[Comparative Genomics Data Set Including 240 Mammals Released !]]></title>
	<description><![CDATA[<p>The genome of 130 mammals was sequenced by a large international consortium and the data was analyzed together with 110 existing genomes to allow scientists to identify the important positions in the DNA. This report, published in Nature today will help advance research on human disease mutations and inform how best to protect endangered species.</p><p>In addition to the knowledge of the human genome, all these genomes, widely sampled across mammals, can be used to research how particular organisms respond to different conditions. Some otters, for example, have a thick, water-resistant shell, and some rodents, but not all, have adapted to hibernation. These animal traits will help us to understand human traits, such as metabolic diseases.</p><p><img src="https://media.springernature.com/lw685/springer-static/image/art%3A10.1038%2Fs41586-020-2876-6/MediaObjects/41586_2020_2876_Fig1_HTML.png?as=webp" alt="image" style="border: 0px; border: 0px;"></p><p>With climate change and more animal ecosystems being threatened by human activity, the protection of endangered species is becoming increasingly important. Scientists have historically researched several people in various populations of a species to understand the genetic variation that occurs in that species. This is important for understanding how particular species can be protected. In this study, animals on the Red List of Endangered Species of the International Union for Conservation of Nature had fewer differences in their genomes, which is consistent with their endangered status.</p><p>Ref @&nbsp;A comparative genomics multitool for scientific discovery and conservation&nbsp;https://www.nature.com/articles/s41586-020-2876-6</p><p>&nbsp;Data at&nbsp;http://zoonomiaproject.org/</p>]]></description>
	<dc:creator>Jit</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/bookmarks/view/44545/amr-database</guid>
	<pubDate>Tue, 04 Jun 2024 13:37:21 -0500</pubDate>
	<link>https://bioinformaticsonline.com/bookmarks/view/44545/amr-database</link>
	<title><![CDATA[AMR Database !]]></title>
	<description><![CDATA[<ul>
<li><a href="http://en.mediterranee-infection.com/article.php?laref=283%26titre=arg-annot">ARG-ANNOT</a>. PMID:&nbsp;<a href="http://www.ncbi.nlm.nih.gov/pubmed/24145532">24145532</a></li>
<li><a href="https://card.mcmaster.ca/">CARD</a>. PMID:&nbsp;<a href="http://www.ncbi.nlm.nih.gov/pubmed/23650175">23650175</a></li>
<li><a href="https://megares.meglab.org/">MEGARes</a>&nbsp;PMID:&nbsp;<a href="http://www.ncbi.nlm.nih.gov/pubmed/27899569">27899569</a></li>
<li><a href="https://www.ncbi.nlm.nih.gov/pathogens/isolates#/refgene/">NCBI</a>&nbsp;BioProject:&nbsp;<a href="https://www.ncbi.nlm.nih.gov/bioproject/?term=PRJNA313047">PRJNA313047</a></li>
<li><a href="https://cge.cbs.dtu.dk/services/PlasmidFinder/">plasmidfinder</a>&nbsp;PMID:&nbsp;<a href="http://www.ncbi.nlm.nih.gov/pubmed/24777092">24777092</a></li>
<li><a href="https://cge.cbs.dtu.dk//services/ResFinder/">resfinder</a>. PMID:&nbsp;<a href="http://www.ncbi.nlm.nih.gov/pubmed/22782487">22782487</a></li>
<li><a href="http://www.mgc.ac.cn/VFs/">VFDB</a>. PMID:&nbsp;<a href="http://www.ncbi.nlm.nih.gov/pubmed/26578559">26578559</a></li>
<li><a href="https://github.com/katholt/srst2">SRST2</a>'s version of ARG-ANNOT. PMID:&nbsp;<a href="http://www.ncbi.nlm.nih.gov/pubmed/25422674">25422674</a>.</li>
<li><a href="https://cge.cbs.dtu.dk/services/VirulenceFinder/">VirulenceFinder</a>&nbsp;PMID:&nbsp;<a href="http://www.ncbi.nlm.nih.gov/pubmed/24574290">24574290</a>.</li>
</ul><p>Address of the bookmark: <a href="https://github.com/sanger-pathogens/ariba/wiki/Task%3A-getref" rel="nofollow">https://github.com/sanger-pathogens/ariba/wiki/Task%3A-getref</a></p>]]></description>
	<dc:creator>LEGE</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/blog/view/44852/what-is-data-science-%E2%80%94-a-bioinformatics-perspective</guid>
	<pubDate>Mon, 16 Jun 2025 01:44:34 -0500</pubDate>
	<link>https://bioinformaticsonline.com/blog/view/44852/what-is-data-science-%E2%80%94-a-bioinformatics-perspective</link>
	<title><![CDATA[What is Data Science? — A Bioinformatics Perspective]]></title>
	<description><![CDATA[<p>In today&rsquo;s era of big biology, we&rsquo;re generating more data than ever before&mdash;genomes, transcriptomes, proteomes, metabolomes, microbiomes&hellip; you name it. But raw biological data doesn&rsquo;t speak for itself. Making sense of it requires more than traditional biology. This is where data science steps in.</p><p><strong>So, What Is Data Science?</strong><br />At its core, data science is the interdisciplinary field that extracts knowledge and insights from data using programming, statistics, and domain expertise. In bioinformatics, data science enables us to turn gigabytes of sequence data into biological meaning.</p><p>Imagine trying to understand gene regulation in cancer by analyzing thousands of RNA-seq samples, or predicting antibiotic resistance from bacterial genomes&mdash;these challenges are not solvable through wet lab experiments alone. They require data-driven thinking.</p><p><strong>Data Science Meets Bioinformatics</strong><br />Bioinformatics is inherently a data science domain. From genomics to systems biology, every field in modern biology relies on data science techniques to:</p><p>Clean and process massive datasets</p><p>Discover patterns in high-dimensional data</p><p>Build predictive models (e.g., for disease classification)</p><p>Visualize complex biological networks and trends</p><p>Integrate diverse data types (e.g., transcriptomic + epigenomic data)</p><p><strong>The Bioinformatics Toolkit</strong><br />Here&rsquo;s what data science typically looks like in bioinformatics:</p><p>Task Data Science Role<br />Sequence alignment Efficient algorithms, indexing, parallel processing<br />Gene expression analysis Statistical modeling (e.g., DESeq2, limma)<br />Variant calling Data filtering, probabilistic models<br />Clustering of cells in single-cell data Unsupervised learning<br />Protein structure prediction Deep learning models (e.g., AlphaFold)<br />Metagenomics Data integration, classification, dimensionality reduction</p><p>Common tools include Python, R, Bioconductor, scikit-learn, Pandas, Seurat, and TensorFlow&mdash;often working together in reproducible workflows.</p><p><strong>It's Not Just About Coding</strong><br />A common misconception is that bioinformatics is just programming or scripting. But being a data scientist in bioinformatics also means:</p><p>Understanding experimental design</p><p>Asking biologically meaningful questions</p><p>Choosing the right statistical or machine learning models</p><p>Communicating findings effectively (e.g., plots, dashboards, papers)</p><p>In other words, data science in bioinformatics is where biology, statistics, and computer science converge.</p><p><strong>Why It Matters</strong><br />The real power of data science in bioinformatics is its ability to scale discovery.</p><p>Instead of studying one gene, we can study thousands.</p><p>Instead of analyzing one species, we can explore entire ecosystems.</p><p>Instead of waiting months for lab results, we can generate hypotheses in days.</p><p>From personalized medicine and cancer diagnostics to agricultural genomics and pandemic surveillance, data science is at the heart of the bioinformatics revolution.</p><p><strong>Final Thoughts</strong><br />If you&rsquo;re a biologist who&rsquo;s curious about code, or a data enthusiast fascinated by life sciences, bioinformatics is your playground&mdash;and data science is your toolkit.</p><p>In bioinformatics, data science isn&rsquo;t just useful. It&rsquo;s essential.</p><p>&nbsp;</p>]]></description>
	<dc:creator>Abhi</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/bookmarks/view/35619/tallymer-method-to-compute-k-mer-frequencies-and-its-application-to-annotate-large-repetitive-plant-genomes</guid>
	<pubDate>Thu, 15 Feb 2018 10:21:02 -0600</pubDate>
	<link>https://bioinformaticsonline.com/bookmarks/view/35619/tallymer-method-to-compute-k-mer-frequencies-and-its-application-to-annotate-large-repetitive-plant-genomes</link>
	<title><![CDATA[Tallymer: method to compute K-mer frequencies and its application to annotate large repetitive plant genomes]]></title>
	<description><![CDATA[<p>Tallymer is based on enhanced suffix arrays. This gives a much larger flexibility concerning the choice of the&nbsp;<span>k</span>-mer size. Tallymer can process large data sizes of several billion bases. We used it in a variety of applications to study the genomes of maize and other plant species. In particular, Tallymer was used to index a set whole genome shotgun sequences from maize (B73) (total size 10<sup>9</sup>&nbsp;bp).&nbsp;<br>Tallymer was effective in a variety of applications to aid genome annotation in maize, despite limitations imposed by the relatively low coverage of sequence available.</p>
<p>A manual can be found&nbsp;<a href="https://www.zbh.uni-hamburg.de/fileadmin/gi/tallymer/tallymer.pdf" target="_blank" title="tallymer.pdf (111 KB)">here</a>.</p><p>Address of the bookmark: <a href="https://www.zbh.uni-hamburg.de/forschung/arbeitsgruppe-genominformatik/software/tallymer.html" rel="nofollow">https://www.zbh.uni-hamburg.de/forschung/arbeitsgruppe-genominformatik/software/tallymer.html</a></p>]]></description>
	<dc:creator>Jit</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/bookmarks/view/40699/kevler-reference-free-variant-discovery-in-large-eukaryotic-genomes</guid>
	<pubDate>Tue, 28 Jan 2020 03:21:53 -0600</pubDate>
	<link>https://bioinformaticsonline.com/bookmarks/view/40699/kevler-reference-free-variant-discovery-in-large-eukaryotic-genomes</link>
	<title><![CDATA[Kevler: Reference-free variant discovery in large eukaryotic genomes]]></title>
	<description><![CDATA[<p><span>Welcome to&nbsp;</span><span>kevlar</span><span>, software for predicting&nbsp;</span><em>de novo</em><span>&nbsp;genetic variants without mapping reads to a reference genome! kevlar's&nbsp;</span><em>k</em><span>-mer abundance based method calls single nucleotide variants (SNVs), multinucleotide variants (MNVs), insertion/deletion variants (indels), and structural variants (SVs) simultaneously with a single simple model.&nbsp;</span></p>
<p><span>More at&nbsp;<a href="https://kevlar.readthedocs.io/en/latest/">https://kevlar.readthedocs.io/en/latest/</a></span></p>
<p><span><a href="https://www.cell.com/iscience/pdf/S2589-0042(19)30259-7.pdf">https://www.cell.com/iscience/pdf/S2589-0042(19)30259-7.pdf</a></span></p><p>Address of the bookmark: <a href="https://github.com/kevlar-dev/kevlar" rel="nofollow">https://github.com/kevlar-dev/kevlar</a></p>]]></description>
	<dc:creator>Jit</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/pages/view/898/ruby-language</guid>
	<pubDate>Mon, 15 Jul 2013 01:34:26 -0500</pubDate>
	<link>https://bioinformaticsonline.com/pages/view/898/ruby-language</link>
	<title><![CDATA[Ruby Language]]></title>
	<description><![CDATA[<p>Ruby was created by Yukihiro Matsumoto, who wished to create a new language that balanced functional programming with imperative programming</p><p>Ruby is a dynamic, reflective, general purpose object-oriented programming language that combines syntax inspired by Perl with Smalltalk-like features. Ruby originated in Japan during the mid-1990s and was initially developed and designed by Yukihiro "Matz" Matsumoto. It was influenced primarily by Perl, Smalltalk, Eiffel, and Lisp.</p><p>Ruby supports multiple programming paradigms, including functional, object oriented, imperative and reflective. It also has a dynamic typesystem and automatic memory management; it is therefore similar in varying respects to Python, Perl, Lisp, Dylan, Pike, and CLU.</p><p>The standard 1.8.7 implementation is written in C, as a single-pass interpreted language. There is currently no specification of the Ruby language, so the original implementation is considered to be the de facto reference. As of 2010, there are a number of complete or upcoming alternative implementations of the Ruby language, including YARV, JRuby, Rubinius, IronRuby, MacRuby and HotRuby, each of which takes a different approach, with IronRuby, JRuby and MacRuby providing just-in-time compilation and MacRuby also providing ahead-of-time compilation. The official 1.9 branch uses YARV, as will 2.0 (development), and will eventually supersede the slower Ruby MRI.</p><p>Ruby Quick Reference<br />http://www.zenspider.com/Languages/Ruby/QuickRef.html</p><p>Ruby Annotation<br />http://www.w3.org/TR/ruby/</p><p>Ruby in Linux Journals<br />http://www.linuxjournal.com/article/5915</p><p>Ruby Documentation: Programming Ruby<br />http://ruby-doc.org/docs/ProgrammingRuby/</p><p>The Top 10 Reasons The Ruby Programming Language Sucks</p><p>http://www.slideshare.net/vishnu/the-top-10-reasons-the-ruby-programming-language-sucks</p><p>Ruby : The Programmers best friends<br />http://www.ruby-lang.org/en/</p><p>For Ruby Beginners<br />http://www.squidoo.com/ruby-programming-beginner</p><p>Ruby Programming<br />http://en.wikibooks.org/wiki/Ruby_Programming</p><p>Ruby CookBook<br />http://en.wikibooks.org/wiki/Cookbook:Table_of_Contents</p><p>Ruby Programming Challenge for Newbies -<br />http://rubylearning.com/blog/ruby-programming-challenge-faq/</p><p>Common "issues" faced by Ruby Newbies by Chris Strom -<br />http://japhr.blogspot.com/2009/10/newbie-feedback.html</p><p>Books<br />http://www.sapphiresteel.com/The-Book-Of-Ruby</p><p>Free Online Ruby Programming along with many Ruby newbies here -<br />http://rubylearning.org/class/</p>]]></description>
	<dc:creator>Jitendra Narayan</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/poll/view/15000/which-mathstatistics-programming-languageapplication-do-you-most-frequently-use-in-bioinformatics</guid>
	<pubDate>Thu, 04 Sep 2014 17:46:41 -0500</pubDate>
	<link>https://bioinformaticsonline.com/poll/view/15000/which-mathstatistics-programming-languageapplication-do-you-most-frequently-use-in-bioinformatics</link>
	<title><![CDATA[Which math/statistics programming language/application do you most frequently use in bioinformatics?]]></title>
	<description><![CDATA[<p>I'm doing a bit more statistical analysis on some bioinformatics things lately, and I'm curious if there are any programming languages that are particularly good for this NGS computation. What suggestions do you guys have? Are there any languages that have exceptionally good libraries?</p>]]></description>
	<dc:creator>John Parker</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/bookmarks/view/30696/many-core-engine-mce-for-perl-example</guid>
	<pubDate>Tue, 31 Jan 2017 05:37:50 -0600</pubDate>
	<link>https://bioinformaticsonline.com/bookmarks/view/30696/many-core-engine-mce-for-perl-example</link>
	<title><![CDATA[Many-Core Engine (MCE) for Perl example]]></title>
	<description><![CDATA[<p><span>MCE spawns a pool of workers and therefore does not fork a new process per each element of data. Instead, MCE follows a bank queuing model. Imagine the line being the data and bank-tellers the parallel workers. MCE enhances that model by adding the ability to chunk the next n elements from the input stream to the next available worker.</span></p>
<p>CORE MODULES</p>
<p>Three modules make up the core engine for MCE.</p>
<dl><dt id="MCE::Core"><a href="https://metacpan.org/pod/MCE#MCE::Core"><span></span></a><a></a><a href="https://metacpan.org/pod/distribution/MCE/lib/MCE/Core.pod">MCE::Core</a></dt><dd>
<p>Provides the Core API for Many-Core Engine. The various MCE options are described here.</p>
</dd><dt id="MCE::Signal"><a href="https://metacpan.org/pod/MCE#MCE::Signal"><span></span></a><a></a><a href="https://metacpan.org/pod/MCE::Signal">MCE::Signal</a></dt><dd>
<p>Temporary directory creation, cleanup, and signal handling.</p>
</dd><dt id="MCE::Util"><a href="https://metacpan.org/pod/MCE#MCE::Util"><span></span></a><a></a><a href="https://metacpan.org/pod/MCE::Util">MCE::Util</a></dt><dd>
<p>Utility functions for Many-Core Engine.</p>
</dd></dl>
<p><a href="https://metacpan.org/pod/MCE#MCE-EXTRAS"><span></span></a><a></a>MCE EXTRAS</p>
<p>There are 4 add-on modules for use with MCE.</p>
<dl><dt id="MCE::Candy"><a href="https://metacpan.org/pod/MCE#MCE::Candy"><span></span></a><a></a><a href="https://metacpan.org/pod/MCE::Candy">MCE::Candy</a></dt><dd>
<p>Provides a collection of sugar methods and output iterators for preserving output order.</p>
</dd><dt id="MCE::Mutex"><a href="https://metacpan.org/pod/MCE#MCE::Mutex"><span></span></a><a></a><a href="https://metacpan.org/pod/MCE::Mutex">MCE::Mutex</a></dt><dd>
<p>Provides a simple semaphore implementation supporting threads and processes.</p>
</dd><dt id="MCE::Queue"><a href="https://metacpan.org/pod/MCE#MCE::Queue"><span></span></a><a></a><a href="https://metacpan.org/pod/MCE::Queue">MCE::Queue</a></dt><dd>
<p>Provides a hybrid queuing implementation for MCE supporting normal queues and priority queues from a single module. MCE::Queue exchanges data via the core engine to enable queuing to work for both children (spawned from fork) and threads.</p>
</dd><dt id="MCE::Relay"><a href="https://metacpan.org/pod/MCE#MCE::Relay"><span></span></a><a></a><a href="https://metacpan.org/pod/MCE::Relay">MCE::Relay</a></dt><dd>
<p>Enables workers to receive and pass on information orderly with zero involvement by the manager process while running.</p>
</dd></dl>
<p><a href="https://metacpan.org/pod/MCE#MCE-MODELS"><span></span></a><a></a>MCE MODELS</p>
<p>The models take Many-Core Engine to a new level for ease of use. Two options (chunk_size and max_workers) are configured automatically as well as spawning and shutdown.</p>
<dl><dt id="MCE::Loop"><a href="https://metacpan.org/pod/MCE#MCE::Loop"><span></span></a><a></a><a href="https://metacpan.org/pod/MCE::Loop">MCE::Loop</a></dt><dd>
<p>Provides a parallel loop utilizing MCE for building creative loops.</p>
</dd><dt id="MCE::Flow"><a href="https://metacpan.org/pod/MCE#MCE::Flow"><span></span></a><a></a><a href="https://metacpan.org/pod/MCE::Flow">MCE::Flow</a></dt><dd>
<p>A parallel flow model for building creative applications. This makes use of user_tasks in MCE. The author has full control when utilizing this model. MCE::Flow is similar to MCE::Loop, but allows for multiple code blocks to run in parallel with a slight change to syntax.</p>
</dd><dt id="MCE::Grep"><a href="https://metacpan.org/pod/MCE#MCE::Grep"><span></span></a><a></a><a href="https://metacpan.org/pod/MCE::Grep">MCE::Grep</a></dt><dd>
<p>Provides a parallel grep implementation similar to the native grep function.</p>
</dd><dt id="MCE::Map"><a href="https://metacpan.org/pod/MCE#MCE::Map"><span></span></a><a></a><a href="https://metacpan.org/pod/MCE::Map">MCE::Map</a></dt><dd>
<p>Provides a parallel map model similar to the native map function.</p>
</dd><dt id="MCE::Step"><a href="https://metacpan.org/pod/MCE#MCE::Step"><span></span></a><a></a><a href="https://metacpan.org/pod/MCE::Step">MCE::Step</a></dt><dd>
<p>Provides a parallel step implementation utilizing MCE::Queue between user tasks. MCE::Step is a spin off from MCE::Flow with a touch of MCE::Stream. This model, introduced in 1.506, allows one to pass data from one sub-task into the next transparently.</p>
</dd><dt id="MCE::Stream"><a href="https://metacpan.org/pod/MCE#MCE::Stream"><span></span></a><a></a><a href="https://metacpan.org/pod/MCE::Stream">MCE::Stream</a></dt><dd>
<p>Provides an efficient parallel implementation for chaining multiple maps and greps together through user_tasks and MCE::Queue. Like with MCE::Flow, MCE::Stream can run multiple code blocks in parallel with a slight change to syntax from MCE::Map and MCE::Grep.</p>
</dd></dl>
<p><a href="https://metacpan.org/pod/MCE#MISCELLANEOUS"><span></span></a>MISCELLANEOUS</p>
<p>Miscellaneous additions included with the distribution.</p>
<dl><dt id="MCE::Examples"><a href="https://metacpan.org/pod/MCE#MCE::Examples"><span></span></a><a></a><a href="https://metacpan.org/pod/distribution/MCE/lib/MCE/Examples.pod">MCE::Examples</a></dt><dd>
<p>Describes various demonstrations for MCE including a Monte Carlo simulation.</p>
</dd><dt id="MCE::Subs"><a href="https://metacpan.org/pod/MCE#MCE::Subs"><span></span></a><a></a><a href="https://metacpan.org/pod/MCE::Subs">MCE::Subs</a></dt><dd>
<p>Exports functions mapped directly to MCE methods; e.g. mce_wid. The module allows 3 options; :manager, :worker, and :getter.</p>
</dd></dl>
<p><a href="https://metacpan.org/pod/MCE#REQUIREMENTS"><span></span></a>REQUIREMENTS</p>
<p>Perl 5.8.0 or later. PDL::IO::Storable is required in scripts running PDL.</p>
<p><a href="https://metacpan.org/pod/MCE#SOURCE-AND-FURTHER-READING"><span></span></a><a></a>SOURCE AND FURTHER READING</p>
<p>The source, cookbook, and examples are hosted at GitHub.</p>
<ul>
<li>
<p><a href="https://github.com/marioroy/mce-perl">https://github.com/marioroy/mce-perl</a></p>
</li>
<li>
<p><a href="https://github.com/marioroy/mce-cookbook">https://github.com/marioroy/mce-cookbook</a></p>
</li>
<li>
<p><a href="https://github.com/marioroy/mce-examples">https://github.com/marioroy/mce-examples</a></p>
</li>
</ul>
<p><a href="https://metacpan.org/pod/MCE#SEE-ALSO"><span></span></a><a></a>SEE ALSO</p>
<p><code>MCE::Shared</code>&nbsp;provides data sharing capabilities for&nbsp;<code>MCE</code>. It includes&nbsp;<code>MCE::Hobo</code>&nbsp;for running code asynchronously.</p>
<ul>
<li>
<p><a href="https://metacpan.org/pod/MCE::Shared">MCE::Shared</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/MCE::Hobo">MCE::Hobo</a></p>
</li>
</ul><p>Address of the bookmark: <a href="https://github.com/marioroy/mce-examples" rel="nofollow">https://github.com/marioroy/mce-examples</a></p>]]></description>
	<dc:creator>Jit</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/pages/view/37590/parallel-processing-with-perl</guid>
	<pubDate>Sat, 25 Aug 2018 11:32:40 -0500</pubDate>
	<link>https://bioinformaticsonline.com/pages/view/37590/parallel-processing-with-perl</link>
	<title><![CDATA[Parallel Processing with Perl !]]></title>
	<description><![CDATA[<p>Here is a small tutorial on how to make best use of multiple processors for bioinformatics analysis. One best way is using perl threads and forks. Knowing how these threads and forks work is very important before implementing them. Getting to know how these work would be really useful before reading this tutorial.</p><p>Many times in bioinformatics we need to deal with huge datasets which&nbsp; are more than 100GB size. The traditional way to analysis a file is using the while loop</p><p>while (FILE){</p><p>Do something;</p><p>}</p><p>This is very slow(since we are using only one processor) and if we have 500 million lines in the dataset it takes more than a day to iterate through the whole dataset. So how do we make best use of all our processors and get the work done quickly?</p><p>Here is a very simple and efficient technique with perl which i have been using. I am&nbsp; more inclined towards using perl fork than perl threads.</p><p>One of the oldest way to fork is</p><blockquote><p>my $fork = fork();<br />if($fork){&nbsp;&nbsp;&nbsp;<br />push (@childs,$fork);&nbsp;<br />}<br />elseif($fork==0){<br /><strong>your code here;</strong><br />exit(0);<br />}<br />else{die &ldquo;Couldnt fork : $!&rdquo;;}</p><p>## wait for the child process to finish<br />foreach(@childs){<br />my $tmp=waitid($_,0);<br />}</p></blockquote><p>what a fork does is it creates a child process and takes the variables and code with it to analyze it separately (detached from the parent process) and thus a separate process is created( which usually runs on a separate processor). Thats it!! One big disadvantage of forking is its very difficult to share variables among the different processes. I will show you how to do it easily but still it has its own drawbacks.</p><blockquote><p>Okie, now if you really do not want to use fork in your code, that&rsquo;s okie too..There are many useful modules which do it for you very efficiently. One really useful module is Parallel::ForkManager. You can use Parallel::ForkManager to manage the number of forks you want to generate (number of processors you want to use).</p><p><strong>Simple usage:</strong><br />use Parallel::ForkManager;<br />my $max_processors=8;<br />my $fork= new Parallel::ForkManager($max_processors);<br />foreach (@dna) {<br />$fork-&gt;start and next; # do the fork<br /><strong>you code here;</strong><br />$fork-&gt;finish; # do the exit in the child process<br />}<br />$pm-&gt;wait_all_children;</p></blockquote><p>so you will be generating 8 forks which do the same thing for your each element of array. when one child finishes, Parallel::ForkManager generates a new one and thus you will be using all your processors to analyze the data. Now, if you have generated 8 child processes and want to write the data to one file. You need to lock the file to do this, because you will have problems with the buffering. You can lock the file using flock command.</p><blockquote><p>open (my $QUAL, &ldquo;myfile.txt&rdquo;);<br />flock $QUAL, LOCK_EX or die &ldquo;cant lock file $!&rdquo;;<br />print $QUAL &ldquo;$output&rdquo;;<br />flock $QUAL, LOCK_UN or die &ldquo;$!&rdquo;;<br />close $QUAL;</p></blockquote><p>I would not suggest using flock when dealing with multiple processes because it will decrease the processing efficiency( each child process must wait for the lock to be released by the other child process). Instead, I would suggest each fork writing to a separate file and after the processing just concatenating them.</p><p><strong>Putting it all together, If you have 100GB data you can do this</strong></p><blockquote><p><strong>step 1</strong>&nbsp;: split the dataset equally according to number of processors you have. this may take a few hours(about 2-3 hrs for 100GB file)<br />You can use unix &ldquo;split&rdquo; command for this<br />for example:<br />my $number_split=int($number_of_entries_in_your_dataset/$max_processors);<br />my $split_Files=`split -l $number_split &ldquo;your_file.fasta&rdquo; &ldquo;file_name&rdquo;`;</p><p><strong>step2</strong>: open you directory comtaining you split files and start Parallel::ForkManager.<br /><strong>For example:</strong><br />opendir(DIRECTORY, $split_files_directory) or die $!; ### open the directory<br />my $fork= new Parallel::ForkManager($max_processors);<br />while (my $file = readdir(DIRECTORY)) { ### read the directory<br />if($file=~/^\./){next;}<br />print $file,&rdquo;\n&rdquo;;<br />########## Start fork ##########<br />my $pid= $super_fork-&gt;start and next;<br /><strong>Whatever you want to do with the split file ;</strong><br /><strong>analyze my piece of $file;</strong><br />######### end fork ###############<br />$super_fork-&gt;finish;<br />}<br />$super_fork-&gt;wait_all_children;</p></blockquote><p>So basically each processor will be active with its piece of data (split file) and thus you have created 8 processes at one time which run without interfering with the other process. I again will not suggest writing output from each child process to one file(for reasons above). Write output from each fork to a separate file and finally concatenate them. Thats it, you have just increased your program speed by 8 times!! Isnt it easy?</p><p><strong>Note:</strong><br />You may worry about concatenation of the output each child generates, since it does take some time(remember 100GB). I think now you can use a mysql database LOAD DATA LOCAL INFILE command to load all the files into a single table(Should take about 3hrs for 100Gb dataset) and then export the whole table into one file. This should be faster than just concatenating them using &ldquo;cat&rdquo; command.(correct me if I am wrong)</p><p>Or much simpler way is to use pipes</p><p>cat output_dir/* | my_pipe or my_pipe &lt;(file1) final_file;</p><p>Thats it guys!! Enjoy programming and please do comment. I am not a computer scientist so forgive me for any mistakes and if any please report them. Thank you.</p>]]></description>
	<dc:creator>Rahul Nayak</dc:creator>
</item>

</channel>
</rss>