top of page

Search Results

69 items found for ""

  • Python @classmethod: Life Sciences Applications and Examples.

    Class methods are defined using the @classmethod decorator and enable calling a method directly on a class without requiring an instance of the class. When you want to call a method directly on a class without requiring an instance of the class, you can convert the method into a class method using the @classmethod decorator." Here, we have converted the method cls_method into a class method using the @classmethod decorator. Therefore, we were able to call the method cls_method directly on the class ClassmethodEx1. When a class method is called directly on a class, it receives the class as the first argument; consequently, when the code executes, the class is passed as an argument to the cls parameter of the class method cls_method. That is why cls.cls_var returned the value of the class variable cls_var, and cls.name returned the name of the class ClassmethodEx1. Now, let's see what happens if we call the class method on an instance instead of the class. This also worked: it returned the class variable cls_var and printed the name of the class, ClassmethodEx1. This means that even when you call the class method on an instance of the class, it still works because it passes the class as the first argument. Now, let's create an instance method within this class. It outputs as follows Error: ClassmethodEx1.inst_method() missing 1 required positional argument: 'self' - inst_method was called without an instance of the class. Here, the problem was that we called the instance method directly on the class ClassmethodEx1 without passing an instance of the class as an argument. Therefore, this will raise an error. There are two ways to solve this issue: 1. Create an instance of the class and call the instance method on that instance. 2. Call the instance method directly on the class and explicitly pass the instance as an argument. This outputs as follows: called from ClassmethodEx1 This is an instance method Now we can call the instance method by calling the method on the class ClassmethodEx1 and pass the name of the instance. This outputs as follows: called from ClassmethodEx1 This is an instance method A class variable can be accessed within both instance methods and class methods. When the class variable is accessed within an instance method, it is accessed through the instance. When you want to access the class variable within a class method, it is accessed through the class. Let's look at an example. This outputs as follows: called from instance of ClassmethodEx1 The class variable is class_variable called from class method of ClassmethodEx1 The class variable is class_variable An instance variable can be accessed within a class method, but this requires the class method to have an instance parameter in addition to the cls parameter. When the class method is called on an instance, the instance must be passed as an argument. Let's consider the example below. This outputs as follows: called from instance of ClassmethodEx1 The instance variable is: instance variable called from class method of ClassmethodEx1 Even though this code works, it is not commonly recommended to access instance data from a class method. Generally, it is well-accepted to access instance data from a specific instance. Now, let's look at an example. Let's consider a DNA sequence and calculate the percentage of each nucleotide. In this example, the DNA sequence will be assigned to a class variable, while the nucleotide for which the percentage of occurrence needs to be calculated will be assigned to an instance variable. This outputs as follows: The percentage fraction of A: 22.95% An important application of class methods is managing class-level data across various instances. Class-level data is managed within a class method. Let's look at an example. and Let's write a program that calculates the area and perimeter of a circle. In this program, we will assign the class variable 'pi' a value of 3.14 and explain how this value can be changed across multiple instances. This outputs as follows: 78.5 78.53750000000001 Class state refers to data shared across all instances of a class. This data is stored in class variables, which are defined outside of class instances. Class variables can be accessed and modified within both class methods and instance methods, although class methods are the conventional way to access and modify class state. Let's look at an example. This outputs as follows: 2 2 In this example code, we modify the class state within an instance method. Additionally, we include a class method that returns the class-level data. Now, let's examine an example of modifying class-level data using a class method. This outputs as follows: 2 2 Let's consider a real-world example. Below, we'll modify class-level data within a class method. In this example, we'll pass short nucleotide sequences as arguments to the constructor method. The complementary sequence will be generated and appended to a class-level dictionary. Additionally, we'll define a class method to retrieve this dictionary. This outputs as follows: {'ATGCCGTAATCGGTACT': 'TACGGCATTAGCCATGA', 'AATCGGTACTATGCCGT': 'TTAGCCATGATACGGCA'} {'ATGCCGTAATCGGTACT': 'TACGGCATTAGCCATGA', 'AATCGGTACTATGCCGT': 'TTAGCCATGATACGGCA'} Let's see how we can modify the class data within the instance method. This outputs as follows: {'AATGCCGTAATCGGTACT': 'TTACGGCATTAGCCATGA'} {'AATGCCGTAATCGGTACT': 'TTACGGCATTAGCCATGA'} Now, let's explore some applications of class methods. Apart from accessing and modifying class-level data, class methods can be used to create alternative constructors. Typically, a class constructor requires distinct arguments. Class methods, however, enable you to create constructors from arguments in various formats. and For instance, consider a program that wishes someone a happy birthday, referencing their age. The primary constructor takes the person's name and current age. This outputs as follows: Hi John happy birthday! You have turned 30 You can make the code more flexible by letting the user enter the year of birth. This outputs as follows: Hi john happy birthday! You have turned 30 Hi john happy birthday! You have turned 30 Here, we can see that the class method returns the instance of the class and it automatically calls the class' constructor method with name and age, even though we called the classmethod with name and the year of birth(yob). let's look at a real-life example. Let's write a code that takes a DNA sequence and calculates the number of each nucleotide. We can either give a DNA sequence as a string or provide it as a file object. This outputs as follows: The sequence: ATGCCGTAATCGGTACT contains the following nucleotides A: 4, T: 5, G: 4, C: 4 The sequence: CGGCGCGGGACAAGGTGACAGCGGCATGTGCAAAGCTGCGCCATAAGAAAAAGAAAGTGGCTTCTGGGAAAGCCACTATCTCTGAACTGAGGAGGAAGCTGGGACTAGCCGAGTCCCAGCAAGCTTCAATAAATGAGCAGGCGGCTT contains the following nucleotides A: 44, T: 23, G: 47, C: 33 You can override a class method implemented by a parent class while still accessing the original method from the subclass. Let's examine an example where a subclass overrides a class method but accesses the parent's method using super() This outputs as follows: The sequence is a Nucleotide sequence sequence: ATGCCGTAATCGGTACT The sequence is a Protein sequence sequence: ARNDEQGHILKMFPSTWYV Let's consider an example that encompasses two key use cases: Utilizing a class method as an alternative constructor. Creating a subclass that overrides the class method to implement additional functionalities, while accessing the attributes and methods of the parent class Another instance of application of @classmethod. The @classmethod can be used to generate an alternative constructor. In this example, we will use classmethod to generate subclass-specific constructors. The classmethod of the parent class returns instances of the subclass. Subclass can override the methods implemented by the baseclass while still maintain access to the functionalities of the baseclass. In the given example, a parent class would take a *.gff file as input, create necessary attributes, and generate appropriate instances of the subclass. Subclass will be able to access the attributes and methods of the baseclass, and it can also have its own implementation to enhance the functionalities. Here, I have provided a simplified typical *.gff file output by the gene prediction pipeline AUGUSTUS for demonstration purpose. Let's explore another use case of a class method that serves as a blueprint for generating content-aware subclass instances. Within the subclass, we override methods implemented by the base class while maintaining access to them. In the following example, we utilize the base class's class method to create instances of either GlobularProtein or MembraneProtein. Make sure that your pdb file and the corresponding fasta file have the same basename. Behavior of the super() function Now, finally, let's look at the behavior of super() built-in function and how it helps in the class inheritance scenarios. Also, how the behavior is influenced by regular methods and classmethods. The super() function is a built-in Python function that provides access to methods implemented by a parent class. It returns a proxy object that facilitates method calls to the parent class (or the next immediate class in the Method Resolution Order, MRO). Behavioral Variations The behavior of super() varies depending on: Whether the method called is a class method, instance method, or static method The calling context of the method Let's look at each scenario. super().method() within an Instance Method When super().method() is called within an instance method, and the method is also an instance method: super() detects the method implemented by the parent class and binds it to the instance of the subclass This is the default behavior of super() The "self" parameter of the method receives the instance of the subclass. This outputs as follows: Calling Inherited Parent Method Accessed Inherited Parent Mathod Called Inherited Parent Method Within the Child Class Now, let's see what the self refers to that was bound to the method. This outputs as follows: Calling Inherited Parent Method Accessed Inherited Parent Mathod The self refers to the instance of Child Called Inherited Parent Method Within the Child Class 2. super().method() implemented within an instance method the inherited method that is being accessed is a classmethod. Let's look at an example Now let's see what the cls refers to here. The output is as follows: Calling Inherited Parent Method Accessed Inherited Parent Mathod The self refers to Child Called Inherited Parent Method Within the Child Class. 3. super().method() was implemented within a classmethod where the inherted method that is being accessed is also a classmethod. Let's look at an example. The output is as follows: Calling Inherited Parent Method Accessed Inherited Parent Mathod Called Inherited Parent Method Within the Child Class Now, let's see if it was the class itself that was passed to the cls parameter of the inherited method The output is as follows: Calling Inherited Parent Method Accessed Inherited Parent Mathod The cls refers to Child Called Inherited Parent Method Within the Child Class 4. Now, let's see the scenario where the super().method() is implemented within a classmethod and the inherited method being accessed is an instance method. The output is as follows. It throws back a TypeError Traceback (most recent call last): File "c:\Users\USER\OneDrive\Desktop\tempCodeRunnerFile.py", line 15, in Calling Inherited Parent Method child.method() File "c:\Users\USER\OneDrive\Desktop\tempCodeRunnerFile.py", line 11, in method super().method() TypeError: Parent.method() missing 1 required positional argument: 'self' Understanding super() Behavior. When super().method() is called without arguments within a child/subclass method, it assumes two arguments: type : The enclosing class where super() is called. object_or_type : The first argument passed to the method. Explicit and Implicit Forms of super() Explicit: super(type, object_or_type) Implicit: super() (only usable within a class definition) Return Value and Method Resolution super() returns a proxy object that delegates method calls to the parent or sibling class of type. The proxy object: Searches classes in a predictable order (Method Resolution Order, MRO) determined by obj_or_Type.__mro__. Calls the method with obj_or_Type if found in the next immediate class (parent or sibling). MRO Example For Child class, MRO is: Child -> Parent -> Object Error Explanation When calling method (implemented as a regular method within Parent) using super().method() within the classmethod of Child, an error occurs because: super() expects an instance as the second argument, but receives the class instead. method is bound to the class, not an instance. The error was: Traceback (most recent call last): File "c:\Users\USER\OneDrive\Desktop\tempCodeRunnerFile.py", line 15, in Calling Inherited Parent Method child.method() File "c:\Users\USER\OneDrive\Desktop\tempCodeRunnerFile.py", line 11, in method super().method() TypeError: Parent.method() missing 1 required positional argument: 'self' Here, the Parent.method() is a regular method and expects an instance of the Type. The parent method can be called using Parent.method(self). Since super().method() was called within a classmethod, the issubclass(obj_or_type, type) is True, and the method is called with the class itself.

  • How to leverage GNU parallel to utilize multiple cores while running AUGUSTUS

    For de novo gene prediction in your genome assembly project, AUGUSTUS is a reliable tool. To get started, one can use the following command line. Here, the --species parameter specifies the organism to use as a gene model. In this case, I used maize . The --progress option displays the process. Unfortunately, when you run the command, it uses only one CPU core: AUGUSTUS does not have a built-in parameter to set the number of CPU cores. However, we can leverage GNU Parallel to utilize multiple cores. Check if the parallel is Installed and is in the PATH You can verify GNU Parallel's installation by running the following command in your terminal: parallel --version. It should output as follows. Or you can type dpkg -l | grep parallel   and it should bring If GNU Parallel is not found or installed, you can install it on Ubuntu using the following command: sudo apt-get install parallel Split the main fasta file into multiple files To divide a large FASTA file into smaller, manageable files, use the following Python script. This code splits the file in a "fasta-aware" manner, ensuring each resulting file remains valid. In the code, you can replace the value of "n" with the number of fasta files you need. Check the number of CPU cores The following command can be used to check the number of CPU cores. cat /proc/cpuinfo My server is equipped with two Intel Xeon E5-2609 processors, each featuring 4 cores. This configuration provides a total of 8 cores. To verify cores and threads per core, use lscpu Automate AUGUSTUS on multiple FASTA files in parallel, across “N” CPU cores First of all, we need to configure OpenMPI for AUGUSTUS. To control thread allocation for AUGUSTUS, set the OMP_NUM_THREADS environment variable. This variable determines the number of threads allocated to OpenMPI-enabled applications. To restrict AUGUSTUS to single-threaded operation, set: Run parallel instances of AUGUSTUS. With OMP_NUM_THREADS set, you can now run multiple instances of AUGUSTUS in parallel using GNU Parallel: parallel --jobs N augustus [options] input_files. Replace: 1. N with the desired number of parallel instances (equal to the number of cores, if hyperthreading is not supported), 2. [options] with AUGUSTUS command-line options 3. input_files with your input FASTA files. To maximize efficiency, you may set the optimum number of parallel instances; for example, set N to the number of cores, considering: 1. Single-threaded operation (OMP_NUM_THREADS=1) 2. No hyperthreading support. In my case, with 8 cores and single-threading: parallel --jobs 8 augustus [options] input_files. Now to automate, set an input directory variable (INPUT_DIR) and an output directory variable (OUTPUT_DIR), and assign them the path to the folder that contains all split input files and the path where the output files are to be created. Now 8 parallel instances of AUGUSTUS  can be run using the following command: Here, the {}  grabs each input file (each one from the group of split files) mentioned in "$INPUT_DIR"/subset_{1..8}.fasta . Each parallel job is individually redirected. Combine the output files: The  '>' "$OUTPUT_DIR"/{/}.gff3  will create individual output corresponding to each AUGUSTUS  task, and all the split output files need to be combined. This can be done by: The complete program You can find the complete program here.

  • ICAR-Training Program on Production of Arka Fermented Cocopeat and Soilless Cultivation of Vegetables

    Specialized Training Program on Arka Fermented Cocopeat and Soilless Cultivation of Vegetables ICAR-Indian Institute of Horticultural Research, a premier institution under the Indian Council of Agricultural Research, is organizing a specialized with Arka Fermented Cocopeat The training is a unique opportunity for entrepreneurs, startups, and enterprises looking to harness innovative horticultural technologies. This hands-on program will guide participants through the production of Arka Fermented Cocopeat, a sustainable substrate ideal for soilless cultivation, which has proven to be highly effective in horticulture. The training will be conducted by esteemed experts, including Dr . G . Selvakumar and Dr . D . Kalaivanan , both Principal and Senior Scientists from the Division of Natural Resources. Participants will gain valuable insights into practical applications, with the offline sessions covering both theory and practical demonstrations. Additionally, an online option is available for those who wish to attend remotely, focusing on theory sessions. Training Program Details Key Details : Venue : Video Conference Hall, Admin Building, ICAR-IIHR Date : September 20, 2024 Application Deadline : September 19, 2024 Offline Training Fee : ₹2000 (9:00 AM to 5:30 PM) Online Training Fee : ₹1000 (9:00 AM to 1:30 PM) Organized by BESST-HORT , the Technology Business Incubator of ICAR - IIHR , this program is a critical step for those aiming to develop viable skills in horticultural innovation and entrepreneurship. The training is supported by NIDHI-TBI and the Department of Science and Technology, Government of India. Register now to secure your spot in this transformative training session! Visit BESST-HORT for more information and registration details. Apply at: https://www.iihr.res.in/international-conference-plant-protection-horticulture-icpph-2024-advances-and-challenges

  • Umami Bioworks Seeks Experienced Grant Writing Specialist

    Key Responsibilities Collaborate with Leading Scientists and Researchers to Secure Essential Funding The primary responsibility of the Grant Writing Specialist is to craft compelling grant proposals aimed at securing funding from diverse sources. This involves close collaboration with Umami Bioworks' world-class team of scientists and researchers, ensuring that proposals accurately reflect the company's innovative bioengineering projects and their potential global impact. Qualifications and Expertise Required The Ideal Candidate for the Grant Writing Specialist Role Successful candidates will possess exceptional communication and writing skills, with a proven track record in securing significant grants. Familiarity with the funding landscape and experience in navigating the specific requirements of various grant agencies is critical for success in this role. Candidates must be able to articulate complex bioengineering concepts in a clear and persuasive manner. Why Choose Umami Bioworks? Be Part of a Mission-Driven Company Pioneering the Future of Bioengineering Umami Bioworks offers more than just a job; it provides a platform to work on groundbreaking projects with real-world implications. As a **Grant Writing Specialist**, professionals will have the chance to contribute to a team that is actively shaping the future of bioengineering, with innovations that could impact global health, sustainability, and food production. How to Apply? Visit: https://careers.umamibioworks.com/jobs/4795976-grant-writing-specialist

  • Bioinformatics Analyst Position - Albert Einstein College of Medicine

    Bioinformatics Analyst Position Institution: Albert Einstein College of Medicine Department: Pediatrics Job ID: 2024-16252 Location: Einstein/Resnick - Bronx Position Type: Regular Full-Time Salary Range: $58,500 - $65,000 per year Position Overview The Albert Einstein College of Medicine is seeking a motivated and experienced Bioinformatics Analyst to join Dr. Robert Burk's research group. This role is integral to supporting ongoing research projects focused on two primary areas: the human microbiome (gut, oral, and cervicovaginal) and human papillomavirus related to cervix neoplasia. Key Responsibilities Perform demultiplexing and analysis of NGS data using barcoding primers for multiplex NGS runs Process and analyze high-throughput sequencing data reads, including amplicon sequencing, bisulfite sequencing, metagenomics, and viral integration Manage and organize bioinformatics sequencing data for the research group Handle large Fastq, BAM, and/or Fasta files for analyses Utilize existing software tools and modify R scripts for figure generation and epidemiological analyses Construct phylogenetic trees to support ongoing research projects Collaborate closely with the Principal Investigator and other lab members Qualifications Bachelor's degree with at least one year of experience in epidemiology, computational biology, or bioinformatics Proficiency in R or Python Experience in microbiome bioinformatic processing (preferred) Strong communication skills, both verbal and written Ability to present at weekly lab meetings using PowerPoint or other presentation programs Excellent interpersonal skills and ability to work collaboratively Strong problem-solving skills and ability to manage time effectively Innovative approach to applying technology to improve efficiency and solve research-related problems The ideal candidate will have a background in epidemiology, computer science, bioinformatics, or related disciplines, with practical demonstrated experience in processing next-generation sequencing (NGS) data. The successful applicant will demonstrate a willingness and eagerness to adapt to new approaches, recognizing the dynamic and constantly evolving nature of the bioinformatics field. This position offers an exciting opportunity to contribute to cutting-edge research in human microbiome and papillomavirus studies at a prestigious institution. The selected candidate will work in a collaborative environment, directly reporting to Dr. Robert D. Burk, the Principal Investigator, and interacting with other lab members generating NGS data.

bottom of page