Search Results
69 items found for ""
- Genetic & Microbial Monitoring of Animals: A Hands-On Training
The CSIR-Center for Cellular and Molecular Biology (CCMB) is excited to announce a hands-on training program on “Genetic & Microbial Monitoring of Animals” from 26th to 31st August 2024. This program is designed for faculty members, researchers from universities, institutes, industries, and individuals interested in the fields of Life Sciences, Medical Sciences, Pharmaceutical Science, and allied areas. About the Training The training aims to equip participants with the skills to monitor and maintain lab animals used for various experiments. The curriculum includes lectures and hands-on sessions on tissue collection, DNA isolation, genotyping, biochemical analyzers, microbial contamination detection, and prevention methods. Key Details Seats: Limited to 10-15 participants Minimum Qualification: Masters in any branch of Life Science/Allied areas Course Fee: Rs.18,000/- (Including accommodation & GST) Mode of the Course: In-house training at CCMB Mode of Selection: Application form & Statement of Purpose Training Curriculum The curriculum includes lectures and hands-on sessions on: Quality control, both genetic & microbial, to maintain genetically homozygous & germ-free animals Immuno-genetic, biochemical, and PCR-based testing methods Disease screening of lab animals, sample collection & processing techniques for molecular & microbiological monitoring Things to sort out during standardization Hands-On and Demonstrations Participants will have the opportunity to engage in hands-on activities and demonstrations, including genomic DNA isolation from tail samples, genotyping of tail samples by Standard and quantitative PCRs, preparation and observation of agar plates for microbial cultures from different platforms, and more. Salient Features of the Training Expert instructors will provide lectures and hands-on training A certificate of participation will be issued to the participants Exposure to laboratory safety regulations One-to-one interaction with the trainers Evaluation assignments and Trouble-shooting sessions For more information, please contact Dr. Archana Bharadwaj Siva, Nodal Scientist, Skill Development Program CSIR-CCMB, Hyderabad, at sdp@ccmb.res.in.
- Exploring GenAI in the Innovative Teaching and Learning of Biology
The emergence of Generative AI (GenAI) tools, such as ChatGPT, is revolutionizing education by presenting both opportunities and challenges. The IndiaBioscience webinar, “Exploring GenAI in the Innovative Teaching and Learning of Biology,” delves into how these tools can be ingeniously incorporated into biology education, while also addressing potential dependencies and limitations. Highlights of the Webinar: Webinar Schedule: The webinar is set for June 21, 2024, from 3:30 to 5:00 PM IST. It will follow an interactive format with a 50-minute presentation, followed by a 30-minute Q&A session. Presenter: The session will be led by Dr. Ishita Das, a behavioral neuroscientist. She merges her expertise in AI and education to craft engaging learning experiences, such as employing AI in storytelling and game design to augment understanding of biology and the influence of technology. Engaging Format: The webinar is designed to cultivate a highly interactive atmosphere to optimize engagement and learning outcomes.
- Combination of RAMs - A puzzle
Unlock the ultimate server memory configuration puzzle! Piece together 8GB, 16GB, and 32GB modules in 24 slots for max capacity.
- Workshop on Protein Structure Modeling and 3D Visualization
Are you a budding scientist or a seasoned researcher eager to delve deeper into the fascinating world of protein structures? If so, the upcoming online workshop on "Protein Structure Modeling and 3D Visualization" is the perfect opportunity for you. This one-day virtual workshop, organized by the Bioinformatics Facility at the Rajiv Gandhi Centre for Biotechnology (RGCB), promises to be an enlightening experience, guiding you through the nuances of protein modeling and visualization. Event Details - Date: May 31, 2024 - Time: 9:30 AM to 3:30 PM - Trainer: Dr. Sivakumar KC, Senior Manager Workshop Highlights This workshop is designed to offer a comprehensive introduction to the world of protein research and molecular modeling. Here’s what you can expect: 1. Homology Modeling Concepts: - Understand the foundational concepts of homology modeling and how it can be applied to predict the structure of unknown proteins based on known templates. - Time: 9:30 AM 2. Protein 3D Modeling: - Learn to create accurate 3D models of proteins, crucial for understanding their functions and interactions. - Time: 10:30 AM 3. Analyzing Biochemical Properties: - Explore the biochemical properties of protein-ligand interactions and visualization techniques to analyze these complex structures. - Time: 11:30 AM 4. Hands-On Training: - Gain practical experience with hands-on training sessions, enhancing your ability to craft intricate 3D molecular structures. - Time: 1:00 PM 5. Interactive Session: - Engage in an interactive session to clarify your doubts and gain deeper insights from the expert trainer. - Time: 3:15 PM Who Should Attend? This workshop is ideal for students, academics, and professionals in the fields of bioinformatics, biochemistry, and molecular biology. No prior knowledge of structural bioinformatics is required—just bring your enthusiasm and a desire to uncover the secrets of protein structures. Registration and Fees - Registration Deadline: May 29, 2024 - Fees: - ₹ 750 for students and academics - ₹ 2500 for non-academics - $ 100 for foreign participants To register, scan the QR code provided in the brochure or visit the [RGCB website](https://www.rgcb.res.in). Contact Information For further details, you can contact the Coordinator of the Bioinformatics Facility at RGCB: - Address: Cheruvikkal Village Office Road, Akkulam, Thiruvananthapuram, Kerala 695011 - Email: bioinfo@rgcb.res.in - Website: [RGCB](https://www.rgcb.res.in)
- Three Days Hands-on Workshop on Biostatistics: “A Backbone of Bio-Medical Research”
Workshop Details: Dates: 03-05 July 2024 (Offline Mode) Organized by: ICMR-Rajendra Memorial Research Institute of Medical Sciences, Patna Funded by: Dept. of Health Research, Ministry of Health and Family Welfare, Govt. of India About the Organizers: Indian Council of Medical Research (ICMR): Established in 1911, ICMR is one of the oldest and largest medical research bodies in India. Funded by the Indian government under the Department of Health Research, Ministry of Health and Family Welfare. Mission: To promote and conduct biomedical research to address the health challenges of the country. ICMR plays a crucial role in capacity building through training programs, fellowships, and scholarships for scientists, researchers, healthcare professionals, and students in biomedical research and public health. Research findings and recommendations generated by ICMR contribute to evidence-based policy formulation and healthcare planning at national and state levels1 Rajendra Memorial Research Institute of Medical Sciences (RMRIMS), Patna: Named in memory of late Dr. Rajendra Prasad, the first President of the Republic of India. Permanent Institute of ICMR, New Delhi. Main thrust: Visceral Leishmaniasis research. Mission: Provide technical support to combat kala-azar disease through high-quality research on diagnosis, treatment, and control. Expanding research focus to include HIV/AIDS, tuberculosis, and other tropical diseases. Committed to the Kala-Azar Elimination Programme of the Government of India1 Workshop Objectives: Comprehensive understanding of statistical methods in biological and health sciences. Essential skills in study design. Insights into principles of experimental and observational research. Workshop Highlights: Interactive sessions. Hands-on training. Expert-led discussions. Practical applications of biostatistics. How to Participate: Dates: July 3-5, 2024 Venue: ICMR-RMRIMS, Patna (Offline Mode) Registration Link: Online Registration Form
- Learn MicroRNA Technology for Plant Research at KARE FDP
The Department of Biotechnology at Kalasalingam Academy of Research and Education (KARE) is organizing a two-day Faculty Development Program on "Artificial microRNA in Plants" on May 23-24, 2024. This hands-on training program will cover the use of microRNA technology, which is extensively employed in modulating gene expression in higher eukaryotes like plants. Participants will learn how to design artificial microRNAs using bioinformatics tools and clone them into plant expression vectors. The FDP is ideal for faculty members teaching or researching plant molecular biology, as well as researchers and teachers interested in leveraging microRNA technology for their plant studies. Highlights: Organized by the Department of Biotechnology, KARE Venue: Bioinformatics Laboratory (Room 7009, 7th Block) Limited seats (20 participants only) Registration fee: Rs. 1000 per participant Last date to register and pay fees: May 20, 2024 Accommodation is available on a payment basis, subject to availability Resource Person: Dr. K. Palanichelvam (Coordinator) Don't miss this opportunity to upskill and gain hands-on experience in cutting-edge microRNA technology for plant research. Register now using the Google form link provided.
- Hands-on training program at the distinguished ICAR - New Delhi.
The Hands-on training program focuses on: Instrumentation techniques for soil, plant, and water. The program is held on: 15th to 22nd May, 2024. The hands-on training is organized by: Division of Soil-science and Agricultural Chemistry, ICAR - Indian Council of Agricultural Research, New Delhi, and The Academy of Natural Resource Conservation and Management (ANRCM), Lucknow. The program is sponsored by: The hands-on training program is sponsored by The Academy of Natural Resource Conservation and Management (ANRCM), Indian Farmers Fertilizer Co-operative Ltd., New Delhi Why should you join this Hands-on training program? ICAR - Indian Council of Agricultural Research, New Delhi is a distinguished research center that focuses on innovative research and outreach programs in agriculture, and is a seat of great scientific achievements and an excellent center for learning. The division of soil science and agricultural chemistry is one of the oldest disciplines of ICAR with excellent faculty expertise. The current training program organized by the Division of Soil Science and Agricultural Chemistry is a move to utilize the R&D infrastructure and the expertise of the faculty at ICAR to benefit the students in the area of natural resource management. The objectives The main objective of the hands-on training program is to train the students on equipment, related to soil, plant, and water analysis, and also expose the students to the procedures to maintain and upkeep the instruments. Who is this course meant for? This training program is meant for students who are currently affiliated with agricultural universities/ research institutes/ soil testing laboratories etc. The students will be taught the working principles of the instruments, procedures to test samples, and the protocols to maintain and upkeep the instruments daily. Training course fee There is a non-refundable fee of 500/- per candidate. Accommodation provided? Food and accommodation are not provided. How to Apply? The application form needs to be filled and duly signed by the competent authority, and the completed application form should be sent to ssacphipps@gmail.com by May 7. Important Dates Last date for receipt of applications at ICAR-IARI: 7 May 2024 Release of admission letters: 8 May, 2024 Payment of training fee: 9 May, 2024 Duration of the training: 15 to 22 May, 2024
- Counter()
What is a Counter() class? Counter is class under the module called collections. This is also a sub-class under the dict() class. It is imported from the collections class as follows: from collections import Counter Counter is a very versatile and useful class in Python. What does a Counter object do? A Counter() object takes an iterable or mapping object as argument and tallies the occurrences of elements in them. An iterable could be a "string", "list", "tuple", "set"; an instance of mapping object is a dict() object. A string as an iterable: from collections import Counter string = "this_is_a_counter" counter = Counter(string) print(counter) >>>Counter({'_': 3, 't': 2, 'i': 2, 's': 2, 'h': 1, 'a': 1, 'c': 1, 'o': 1, 'u': 1, 'n': 1, 'e': 1, 'r': 1}) A list as an iterable: from collections import Counter list_ = ['a', 'b', 'a', 'x', 'b', 'a', 'x'] counter = Counter(list_) print(counter) >>>Counter({'a': 3, 'b': 2, 'x': 2}) A tuple as an iterable: from collections import Counter tuple_ = ('a', 'b', 'a', 'x', 'b', 'a', 'x') counter = Counter(tuple_) print(counter) >>>Counter({'a': 3, 'b': 2, 'x': 2}) A set as an iterable: from collections import Counter set_ = {'a', 'b', 'a', 'x', 'b', 'a', 'x'} counter = Counter(set_) print(counter) >>>Counter({'a': 1, 'b': 1, 'x': 1}) Here, as you can see, when set() object is an argument to the Counter object, the duplicates are removed and all occurrences are set to 1. Still the object is a valid argument. A mapping object as an argument to the Counter: from collections import Counter dict_ = {'a':4, 'b':5} counter = Counter(dict_) print(counter) >>>Counter({'b': 5, 'a': 4}) From keyword arguments: from collections import Counter counter = Counter(a=6, b=7, c=8) print(counter) >>>Counter({'c': 8, 'b': 7, 'a': 6}) Another way to create a Counter object from iterable objects is: from collections import Counter string = "This_is_a_string_object" counter = Counter() for val in string: counter[val]+=1 print(counter) >>>Counter({'_': 4, 'i': 3, 's': 3, 't': 2, 'T': 1, 'h': 1, 'a': 1, 'r': 1, 'n': 1, 'g': 1, 'o': 1, 'b': 1, 'j': 1, 'e': 1, 'c': 1}) Here, you can see that the default occurrence (or count) of an element in the iterable is zero. How to leverage the functionality of the dict() for tallying elements in an iterable In fact, we can use an instance of a dict() object to tally the occurrences of elements in an iterable; but this requires additional steps that involve initialization of the occurrences elements to 1. Look at an example below: dict_ = dict() string = "counting_using_dict_object" for item in string: if not item in dict_: dict_[item] = 1 else: dict_[item]+=1 print(dict_) >>>{'c': 3, 'o': 2, 'u': 2, 'n': 3, 't': 3, 'i': 3, 'g': 2, '_': 3, 's': 1, 'd': 1, 'b': 1, 'j': 1, 'e': 1} In a Counter() object, the occurrence of an element that is missing in an iterable is by default '0', and therefore it does not raise a KeyError unlike the dict() object. For example, let's look at the value of an item in the counter that doesn't exist: string = "This_is_a_string_object" counter = Counter() for val in string: counter[val]+=1 print(counter['z']) >>> 0 Methods implemented by Counter() object Here, we will discuss the important functions defined under the Counter() class. These are the methods available to an instance of the Counter() object. elements() elements() is an important method of the Counter() object. This produces an iterable containing all the elements that are associated with the Counter() instance. For example: from collections import Counter string = "This_is_a_string_object" counter = Counter() for val in string: counter[val]+=1 print(list(counter.elements())) >>>['T', 'h', 'i', 'i', 'i', 's', 's', 's', '_', '_', '_', '_', 'a', 't', 't', 'r', 'n', 'g', 'o', 'b', 'j', 'e', 'c'] The method Counter().elements() returns an object of the type 'itertools', and the object can be converted to an iterable object of our interest - for example a list() object. 2. most_common([n]) This method takes an optional integer argument and returns a list of tuples (key, count) of the key and count pairs, and organize in the descending order of the count size. The integer value specifies the fist n pairs of key and count. You can also selectively pick a (key, count) by specifying the index. from collections import Counter string = "This_is_a_string_object" counter = Counter() for val in string: counter[val]+=1 print(counter.most_common()) print(counter.most_common(3)) print(counter.most_common()[3]) >>>[('_', 4), ('i', 3), ('s', 3), ('t', 2), ('T', 1), ('h', 1), ('a', 1), ('r', 1), ('n', 1), ('g', 1), ('o', 1), ('b', 1), ('j', 1), ('e', 1), ('c', 1)] [('_', 4), ('i', 3), ('s', 3)] ('t', 2) In the first output, we have a list of all the (key, count) pairs in the descending order of the count. In the second output lists the first three (key, count) pairs. The third output lists the (key, count) at index 3. 3. subtract() Subtract() method is used to subtract a Counter instance from another. from collections import Counter string1 = "This_is_a_string_object" string2 = "what_does_counter_do_here" counter1 = Counter(string1) counter2 = Counter(string2) print(counter1) print(counter2) print() counter1.subtract(counter2) print(counter1) print(counter2) >>>Counter({'_': 4, 'i': 3, 's': 3, 't': 2, 'T': 1, 'h': 1, 'a': 1, 'r': 1, 'n': 1, 'g': 1, 'o': 1, 'b': 1, 'j': 1, 'e': 1, 'c': 1}) Counter({'_': 4, 'e': 4, 'o': 3, 'h': 2, 't': 2, 'd': 2, 'r': 2, 'w': 1, 'a': 1, 's': 1, 'c': 1, 'u': 1, 'n': 1}) Counter({'i': 3, 's': 2, 'T': 1, 'g': 1, 'b': 1, 'j': 1, '_': 0, 'a': 0, 't': 0, 'n': 0, 'c': 0, 'h': -1, 'r': -1, 'w': -1, 'u': -1, 'o': -2, 'd': -2, 'e': -3}) Counter({'_': 4, 'e': 4, 'o': 3, 'h': 2, 't': 2, 'd': 2, 'r': 2, 'w': 1, 'a': 1, 's': 1, 'c': 1, 'u': 1, 'n': 1}) Here, the first Counter instance, counter1 was replaced by the subtracted version. Also, one thing to notice here is, all the negative counts have been retained; the negative counts could mean two things: there are elements uniquely present in the second string; there are elements whose occurrence is higher in the second string than in the first string. 4. total() total() method is used to sum the collective occurrence of all elements in an iterable. from collections import Counter string1 = "This_is_a_string_object" string2 = "what_does_counter_do_here" counter1 = Counter(string1) counter2 = Counter(string2) print(counter1.total()) print(counter2.total()) >>>23 25 5. update([an iterable-or-mapping]) While update() is a method available to the dict() class, it is also implemented by the Counter() class. It takes an iterable or mapping object and updates an existing Counter() object. This method can also takes a Counter() object as argument and update an existing Counter() object. A Counter() instance as argument: from collections import Counter string1 = "This_is_a_string_object" string2 = "what_does_counter_do_here" counter1 = Counter(string1) counter2 = Counter(string2) print(counter1) print(counter2) print() counter1.update(counter2) print(counter1) print(counter2) >>>Counter({'_': 4, 'i': 3, 's': 3, 't': 2, 'T': 1, 'h': 1, 'a': 1, 'r': 1, 'n': 1, 'g': 1, 'o': 1, 'b': 1, 'j': 1, 'e': 1, 'c': 1}) Counter({'_': 4, 'e': 4, 'o': 3, 'h': 2, 't': 2, 'd': 2, 'r': 2, 'w': 1, 'a': 1, 's': 1, 'c': 1, 'u': 1, 'n': 1}) Counter({'_': 8, 'e': 5, 's': 4, 't': 4, 'o': 4, 'h': 3, 'i': 3, 'r': 3, 'a': 2, 'n': 2, 'c': 2, 'd': 2, 'T': 1, 'g': 1, 'b': 1, 'j': 1, 'w': 1, 'u': 1}) Counter({'_': 4, 'e': 4, 'o': 3, 'h': 2, 't': 2, 'd': 2, 'r': 2, 'w': 1, 'a': 1, 's': 1, 'c': 1, 'u': 1, 'n': 1}) A list iterable as argument: from collections import Counter string1 = "This_is_a_string_object" string2 = "what_does_counter_do_here" list_ = ['a', 'b', 'c', 'a', 'c'] counter1 = Counter(string1) print(counter1) print(list_) print() counter1.update(list_) print(counter1) >>>Counter({'_': 4, 'i': 3, 's': 3, 't': 2, 'T': 1, 'h': 1, 'a': 1, 'r': 1, 'n': 1, 'g': 1, 'o': 1, 'b': 1, 'j': 1, 'e': 1, 'c': 1}) ['a', 'b', 'c', 'a', 'c'] Counter({'_': 4, 'i': 3, 's': 3, 'a': 3, 'c': 3, 't': 2, 'b': 2, 'T': 1, 'h': 1, 'r': 1, 'n': 1, 'g': 1, 'o': 1, 'j': 1, 'e': 1}) Counter objects can be compared Two Counter objects can be compared using the following comparison operators. Equality check: '==' and '!=' Less than/ less than or equal to : '<'/ '<=' Greater than/ Greater than or equal to: '>'/ '>=' Until Python 3.10, Counter(a=1, b=0) and Counter(a=1) returned False in an equality check('==') - the two Counter objects aren't equal. In Python 3.10 and later versions, missing element in a Counter was regarded as an element with zero count, and therefore returns True in an equality check. from collections import Counter counter1 = Counter(a=5, b=0) counter2 = Counter(a=5) print(bool(counter1 == counter2)) >>>True A 'less than/ less than or equal to (</<=)' operator is used to check the inclusion of a Counter() object in another. from collections import Counter counter1 = Counter(a=5, b=6) counter2 = Counter(a=2, b=4) print(bool(counter2 <= counter1)) >>>True Converting a Counter() object to other data structures. A Counter() can be converted to other data structures - lis()t, tuple(), set(), dict() Counter() object converted to a list() from collections import Counter counter1 = Counter(a=5, b=6) counter2 = Counter(a=2, b=4) print(list(counter1)) >>>['a', 'b'] Unlike the Counter().elements(), when a Counter() object is converted to a list() object, only the unique elements are listed. Counter() object converted to tuple() object. from collections import Counter counter1 = Counter(a=5, b=6) counter2 = Counter(a=2, b=4) print(tuple(counter1)) >>>('a', 'b') Counter() object converted to a set() object. from collections import Counter counter1 = Counter(a=5, b=6) counter2 = Counter(a=2, b=4) print(set(counter1)) >>>{'b', 'a'} Counter() object converted to dict() object. from collections import Counter counter1 = Counter(a=5, b=6) counter2 = Counter(a=2, b=4) print(dict(counter1)) >>>{'a': 5, 'b': 6} Counter() object converted to a list of tuples of (key, count) pairs. from collections import Counter counter1 = Counter(a=5, b=6) counter2 = Counter(a=2, b=4) print(counter1.items()) >>>dict_items([('a', 5), ('b', 6)]) Counter() object created from a list of tuples of (key, count) pairs To create a Counter() object from a list of tuples of (key, count) pairs, the latter data need to be converted to a dict() object and then to Counter() object. from collections import Counter tup_data = [('a', 5), ('b', 6), ('c', 8)] dict_ = dict(tup_data) counter = Counter(dict_) print(dict_) print(counter) >>>{'a': 5, 'b': 6, 'c': 8} Counter({'c': 8, 'b': 6, 'a': 5}) Finding 'N' least-common elements in a Counter() As was discussed before, the most_common([n]) can be invoked to find out the 'N' most commonly occurring keys and their counts. The same method can be called to find out the least common keys. All we need to do is to use a list slicer to crop out the least-commonly occurring keys as follows. from collections import Counter string = "find_out_the_least_common_keys" counter = Counter(string) array = counter.most_common() n = 3 least_common = array[:-n-1:-1] print(array) print(least_common) >>>[('_', 5), ('o', 3), ('t', 3), ('e', 3), ('n', 2), ('s', 2), ('m', 2), ('f', 1), ('i', 1), ('d', 1), ('u', 1), ('h', 1), ('l', 1), ('a', 1), ('c', 1), ('k', 1), ('y', 1)] [('y', 1), ('k', 1), ('c', 1)] Here, the idea is we list out the (key, count) pairs in the descending order. Then slice them such that we start in the reverse order, traverse through it and slice up to and not including the item at index (-N-1) for N least common elements. Mathematical operations with Counter() objects Mathematical operations can be performed with Counter() objects. Addition of two Counter() objects When adding two Counter() objects, the counts of the corresponding elements are added. from collections import Counter string = "_find_out_the_least_common_keys_" string1 = "know_how_the_counts_can_be_added" counter = Counter(string) counter1 = Counter(string1) print(counter.total()) print(counter1.total()) sum_ = counter + counter1 print(f"\n{counter}") print(f"\n{counter1}\n") print(f"{sum_.total()}") print(sum_) >>>32 32 Counter({'_': 7, 'o': 3, 't': 3, 'e': 3, 'n': 2, 's': 2, 'm': 2, 'f': 1, 'i': 1, 'd': 1, 'u': 1, 'h': 1, 'l': 1, 'a': 1, 'c': 1, 'k': 1, 'y': 1}) Counter({'_': 6, 'n': 3, 'o': 3, 'e': 3, 'd': 3, 'w': 2, 'h': 2, 't': 2, 'c': 2, 'a': 2, 'k': 1, 'u': 1, 's': 1, 'b': 1}) 64 Counter({'_': 13, 'o': 6, 'e': 6, 'n': 5, 't': 5, 'd': 4, 'h': 3, 'a': 3, 's': 3, 'c': 3, 'u': 2, 'm': 2, 'k': 2, 'w': 2, 'f': 1, 'i': 1, 'l': 1, 'y': 1, 'b': 1}) Here, the missing elements have been assigned with zero counts. When there are negative counts In the example below, one of the Counter() instance has a negative count. from collections import Counter counter = Counter(a = 5, b = 4, c = -2) counter1 = Counter(a = 5, b = 4, c = 22) sum_ = counter + counter1 print(counter.total()) print(counter1.total()) sum_ = counter + counter1 print(f"\n{counter}") print(f"\n{counter1}\n") print(f"{sum_.total()}") print(sum_) >>>7 31 Counter({'a': 5, 'b': 4, 'c': -2}) Counter({'c': 22, 'a': 5, 'b': 4}) 38 Counter({'c': 20, 'a': 10, 'b': 8}) Subtraction between two Counter() objects Unlike the subtract() method, an explicit subtraction filters out all the zero and negative counts in the resulting Counter() object after subtraction. from collections import Counter string = "_find_out_the_least_common_keys_" string1 = "know_how_the_counts_can_be_added" counter = Counter(string) counter1 = Counter(string1) print(counter.total()) print(counter1.total()) sum_ = counter - counter1 print(f"\n{counter}") print(f"\n{counter1}\n") print(f"{sum_.total()}") print(sum_) >>>32 32 Counter({'_': 7, 'o': 3, 't': 3, 'e': 3, 'n': 2, 's': 2, 'm': 2, 'f': 1, 'i': 1, 'd': 1, 'u': 1, 'h': 1, 'l': 1, 'a': 1, 'c': 1, 'k': 1, 'y': 1}) Counter({'_': 6, 'n': 3, 'o': 3, 'e': 3, 'd': 3, 'w': 2, 'h': 2, 't': 2, 'c': 2, 'a': 2, 'k': 1, 'u': 1, 's': 1, 'b': 1}) 9 Counter({'m': 2, '_': 1, 'f': 1, 'i': 1, 't': 1, 'l': 1, 's': 1, 'y': 1}) Here, only positive counts are retained in the resulting Counter() object Multiplication(*) and Division(/) operations are not permissible for Counter() objects. from collections import Counter string = "_find_out_the_least_common_keys_" string1 = "know_how_the_counts_can_be_added" counter = Counter(string) counter1 = Counter(string1) print(counter.total()) print(counter1.total()) sum_ = counter / counter1 print(sum_) >>>TypeError: unsupported operand type(s) for /: 'Counter' and 'Counter' Finding the minimum of two Counter() objects We use '&' operator to find the minimum counts of each element present in both the Counter() objects. Here, if any element has zero count or negative count, the corresponding elements are omitted from the operation. This is due to the fact that when the count of an element is zero, it is deemed as a missing element, and therefore is not counted. counter = Counter(d = 6, b = 4, c = 5) counter1 = Counter(d = 5, b = 1, c = 2) minimum_ = counter & counter1 print(minimum_) >>>Counter({'d': 5, 'c': 2, 'b': 1}) When one of the corresponding element has negative count counter = Counter(d = 6, b = 4, c = -5) counter1 = Counter(d = 5, b = 1, c = 2) minimum_ = counter & counter1 print(minimum_) >>>Counter({'d': 5, 'b': 1}) When one of the corresponding element has zero count counter = Counter(d = 6, b = 4, c = 0) counter1 = Counter(d = 5, b = 1, c = 2) minimum_ = counter & counter1 print(minimum_) >>>Counter({'d': 5, 'b': 1}) Finding the largest of the corresponding elements in two Counter() objects "|" is used to find the corresponding elements with the largest counts, in two Counter() objects. Unlike in the example involving the "&" operator, maximum of the corresponding elements is calculated regardless of the count being zero or negative. Corresponding elements are omitted from the operation only when both the elements have zero counts. counter = Counter(d = 6, b = 4, c = 5) counter1 = Counter(d = 5, b = 1, c = 2) max_ = counter | counter1 print(max_) >>>Counter({'d': 6, 'c': 5, 'b': 4}) When one of the corresponding elements has zero count. counter = Counter(d = 6, b = 4, c = 0) counter1 = Counter(d = 5, b = 1, c = 2) max_ = counter | counter1 print(max_) >>>Counter({'d': 6, 'b': 4, 'c': 2}) When the corresponding elements have zero counts. counter = Counter(d = 6, b = 4, c = 0) counter1 = Counter(d = 5, b = 1, c = 0) max_ = counter | counter1 print(max_) >>>Counter({'d': 6, 'b': 4}) Unary plus and Unary minus operation on Counter() object A Unary plus(+Counter()) operation on a Counter() object performs addition of the Counter() object with a zero-counter; a zero-counter is a Counter() object whose all corresponding elements have zero counts. This process eliminates all elements with zero or negative counts. counter = Counter(d = 6, b = -4, c = 0) unary_plus = +counter print(unary_plus) >>>Counter({'d': 6}) A Unary plus(-Counter()) operation on a Counter() object performs a subtraction of a Counter() object from a zero-counter. This eliminates the positive and zero counts from the Counter() object. The original Counter() remains the same. counter = Counter(d = 6, b = -4, c = 0) unary_minus = -counter print(unary_minus) >>>Counter({'b': 4}) Thank You!!!
- Unleashing Potential: Join VIT’s Ph.D. Program in Functional Materials.
A World of Opportunities Vellore Institute of Technology (VIT) is renowned globally for its cutting-edge research facilities, esteemed faculty, and an environment that fosters innovation and creativity. The Centre for Functional Materials at VIT is inviting applications for its esteemed Ph.D. program starting July 2024, offering direct admission to the center. Research Thrusts The Centre specializes in various research areas including but not limited to Functional Magnetic Materials, Spintronics, and Neuromorphic Devices. With state-of-the-art laboratories equipped with modern technology, students have the opportunity to work on Quantum Materials, Oxide Electronics, Interface Engineering, and more. Fellowships for Ph.D. Students Financial constraints should never be a barrier to education. Recognizing this principle, VIT offers fellowships for GATE qualified (above 60 percentile) students amounting to INR 35,000 per month and INR 25,000 - 31,000 per month for others. Cutting-Edge Research Facilities At VIT’s Centre for Functional Materials, students are exposed to cutting-edge research facilities designed and implemented in consultation with industry-oriented research teams ensuring that the knowledge imparted is current and industry relevant. High-Quality Publications The centre prides itself on high-quality publications which are regularly featured in internationally renowned journals showcasing the groundbreaking work conducted by our talented pool of researchers. Rankings & Accolades VIT has been consistently ranked amongst the top institutions nationally and internationally owing to its exceptional academic curriculum, innovative teaching methodology, and extensive global outreach programs. Application Process The last date for application submission is 24th March ensuring prospective candidates ample time to prepare their documents meticulously. For more details please contact director.cfm@vit.ac.in or visit VIT’s website. This unique opportunity allows aspiring scholars access into a world where innovation meets application; where ideas are transformed into solutions; where boundaries are pushed leading towards monumental discoveries that have significant impacts globally. Join us at VIT’s Centre for Functional Materials – Where potential is nurtured and dreams realized!
- Job role as Molecular Biologist
Employer Iosynth Labs Pvt Ltd (A Zenfold group of companies) What should be your experience? You should be an MTech or MSc holder in Biotechnology, or you should be a Ph.D. holder(A Fresher) What are your responsibilities? Isolation and purification of nucleic acids from various sources. Designing of Oligonucleotides, cloning, mutagenesis, competent cells preparation, transformation chemical and electroporation methods. Recombinant enzyme production in E. coli, Yeast and Fungal platforms Enzyme engineering and knowledge in pathway modification. Practical knowledge of various bioanalytical techniques such as Enzyme assay, SDS-PAGE, HPLC etc. Project designing and planning What are the key requirements? Ability to work independently as well as associate with team. Good practical knowledge on various molecular biology techniques. Working knowledge on Fungal platform and pathway modification will be advantageous. Where will the candidate be working? Electronic City, Bangalore. How to Apply You need to submit your application to HR@iosynth.com Link to the official Notification JD_Molecular_Biologist.pdf (iosynth.com)
- askdirectory function of the tkinter library.
Let’s see how we can use the askdirectory function of the tkinter library to call a file-dialog box. Why do we need to call a file-dialog box? Imagine, we want to set a path variable - for example, let’s say for listing all the items in a particular folder or save a file to a particular folder. Normally, what we do is, we manually type down the path - either as a raw-string or as an escape sequence. As a raw string as follows. import os path = r"D:\Movies" items = os.listdir(path) print(items) Or, as escape sequence as follows. import os path = "D:\\Movies" items = os.listdir(path) print(items) In both cases, the program executes the task. What if at every execution we need to set a different path variable?! Here is where askdirectrory function of the tkinter library becomes useful. With askdirectory function invoked, we can simply select the folder- or file-path, and the path variable will be set. Let’s look at the example below. from tkinter import Tk from tkinter.filedialog import askdirectory root = Tk() print(type(root)) path = askdirectory(parent=root, initialdir='D:/', title="select the directory") print(path) root.mainloop() Let’s look at the code breakdown For calling the file-dialog box, first of all, we need to import the Tk class from the tkinter library, and askdirectory function from the tkinter.filedialog. Then we create an instance of the Tk class. Here, the root is an object of the type . Next, we call the askdirectory function, with a set of parameters passed to it. The “parent” parameter specifies the Tk class instance that you want to associate the file-dialog box with. The “initialdir” parameter is set with a string argument that refers to the default path to a directory, which will be displayed when the file-dialog box opens. The “title” parameter represents the title of the file-dialog box. The root.mainloop() ensures the main window is open for any keyboard or mouse event. Otherwise, if the file-dialogbox needs to be closed as soon as the path variable is set, then root.destroy() needs to be used instead of root.mainloop()