top of page

Search Results

52 items found for ""

  • 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()

  • Andrew Huberman's "Limbic Friction", explains the high-stress/ tolerance of David Goggins.

    This article/ excerpt that I have written here is inspired by the YouTube video, posted on the channel Chris Williamson. In the video, Dr. Andrew Huberman narrates his experience of being with the high-tolerance performer, the American runner, and Guinness record holder David Goggins. You can read the excerpt below. David Goggins, America's toughest runner, once held the Guinness record for the highest number of pull-ups at 4030 in 17 hours. According to Andrew Huberman, what one sees on social media is actually what one gets from David Goggins in real-life interactions with him. Everything you read and hear about David Goggins is exactly how he shows up in real life. Andrew Huberman mentioned that he has a virtual version of sharks set up in his lab. Even though it's not exactly the same as a real experience, people who are afraid of sharks can have a scary experience, allowing Dr. Huberman to study fear. David Goggins showed interest in experiencing the virtual reality of sharks, despite being afraid of them due to his past as a Navy SEAL for the US. He found the experience very scary but constantly wanted to experience it more, despite the fear. According to Andrew Huberman, David was constantly pushing the friction lever. David Goggins was observed to have the power to push himself forward when circumstances are unfavorable, and both spiritual and mechanical energy are low. Andrew Huberman has coined a term for this, which he calls limbic friction. This is the friction that one has to overcome to get up and take action when lying on the bed totally exhausted; to lean into action in a calm and controlled way when the situation is stressful. For example, facing a public audience and delivering a talk in a calm and composed way when you know you are stressed out. According to Andrew Huberman, limbic friction is the ability to tolerate high adrenaline. Adrenaline is an epinephrine that prepares us for a fight-or-flight response. Physiologically, adrenaline is produced from the adrenal gland above the kidneys. This adrenaline is in the blood and can't cross the so-called blood-brain barrier, which is a high restriction fence. Small molecules of adrenaline are produced within the brain from a cluster of neurons called the Locus ceruleus. In stressful situations, adrenaline is produced in the body and the brain. This hijacks the body and certain organ systems - for example, you breathe faster, your heartbeats go faster, your vision narrows, etc. Looking at stress inoculation protocols like the ice bath challenge, cold shower, and cyclic hyperventilation process, lots of adrenaline is produced in the body. What if it is you who evoked the adrenaline in your body and brain; let's say by challenging yourself with an ice-cold bath, cold shower, or purposefully being in a stressful situation, and then you try to solve a math problem or try to relax? Stressful situations can arise when you are in a relationship, in situations while delivering a public lecture, while performing a crucial part of your high-risk project, or in a near-accident situation, etc. Let's say while driving, you almost hit another vehicle, and this is a high-adrenaline situation. Chances are higher for you to freak out or engage in road rage. But if you are someone who is aware of this adrenaline rush or someone who is conditioned to behave calm and composed in a high-adrenaline situation, you will behave calm and composed in a real-life situation, as just mentioned above, and will have better consequences too. Adrenaline is a generic hormone, and there is no specific adrenaline for the "car crash," "the heights," or the "relationship situations," etc. If you are someone who has trained and conditioned the body and the brain to think and act thoughtfully and calmly in a high-adrenaline situation, by evoking high adrenaline during stress-inoculation protocols like cold showers, and hyper cyclic-ventilation, then it raises the stress threshold. A person like David Goggins is trained to tolerate high-stress situations. So by being in situations that stimulate or trigger adrenaline, for example, in a hot or cold environment, or in a low-oxygen environment, one slowly raises the tolerance threshold or stress threshold. A hot environment can cause a burn, and a low-oxygen environment can cause suffocation. So, people trained in Navy SEALs are often presented with cold showers and ice baths as part of training.

  • DBT Skill Vigyan Program in Life Science and Biotechnology.

    What is this program about? This is called the DBT Skill Vigyan program, sanctioned by the Department of Biotechnology, Govt. of India. Where is this program going to be conducted? The program is going to be conducted in Kerala, with the participation of 15 state academic and research institutions. Which is the kerala's undertaking body of this skill development program? The DBT Skill Vigyan Program will be run and managed by the Kerala Biotechnology Commission (KBC) and Kerala State Council for Science Technology and Environment (KCSTE). What are the training programs offered? The training programs included are Student Training program and Technician Training program. Duration of the Training Program? Student Training program Technician Training Program Duration: 3 Months Targeted Participants Student Training Program Technician Training Program Any Stipend Provided to the Participants? Yes, the programs are stipendiary. Also, this is a Hands-on program. What is the major area of focus of the Program? Diverse biotechnology fields. What are the Collaborative Partners? The program is developed in collaboration with four prominent sector skill councils under the Government of India. Life Science Sector Skill Development Council (LSSSDC) Agriculture Skill Council of India (ASCI) Food Industry Capacity and Skill Initiative (FICSI) Healthcare Sector Skill Council (HSSC) Eligibility Criteria The program is open to Plus 2 students, graduates, and Post-graduates in Biotechnology and allied subjects. Is the Application Online? Yes, the application is online. Is there a registration fee involved? Yes, there is a registration fee of Rs. 750/- for applicants from the General category, and Rs. 375/- for applicants from the SC and SC category. Is there are application deadline? Yes, 31 December, 2023. How is the selection process? There will be a thorough review of your application. Also, there will be a mandatory examination for the selection. Any Accommodation Arrangements made for successful candidates? Yes, accommodation arrangements will be made, and it will be at the discretion of the partner institutions. Contact for Further Details For more details, please contact the State Nodal Officer, DBT Skill Vigyan programme: Name: DR. SARIKA A R Email: kbc.kscste@kerala.gov.in Phone: 0471-2548406, 0471-2548254 Student Training Program Details Technician Training Program

  • Windows Subsystem for Linux (WSL)

    What is Windows Subsystem for Linux (WSL Windows Subsystem for Linux (WSL) is a powerful tool that helps us install a desired Linux distribution (Ubuntu, OpenSUSE, Arch Linux, etc.), without the need for an overboard installation of a virtual machine, or dual boot machine Pre-requisites for the Installation of WSL You should be using Windows 10 version 2004 or higher (or Build 19041 or higher) or Windows 11 if you want to run the WSL command. One way to check is by opening the “RUN” window, and typing “winver”, as shown below. The window that appears shows the version of Windows that you have. You can also check the Windows version using the command prompt. Let’s look at the command a bit. Here, the “findstr” finds the strings that start with “OS Name” and “OS Version” Install WSL Next, you need to open the “Turn Windows Features On or Off” On the window that you see above, you need to turn on “Windows Subsystem for Linux” and “Virtual Machine Platform” After you turn on both the features mentioned above, the system will apply the changes and you will have to restart your machine. A restart can be avoided using the following commands to turn on “Windows Subsystem for Linux” and “Virtual Machine Platform” For Windows Subsystem for Linux, For Virtual Machine Platform, Once the supportive Windows version is in place, now with a single command we can install WSL. Open the command prompt or Powershell with administrative privileges, and enter the following command. wsl —install But wait! This will by default install Ubuntu. Specifically, you can install a Linux distribution of your choice. Before that, we can check the available Linux distribution online. So, by entering the following command, we will be able to see the all Linux distributions that we can install in WSL. We can install a specific Linux distribution using the following command. wsl —install —d After the successful installation is over, the CMD looks as follows. Sometimes you may encounter an error as follows. Here the error message says the WSL2 requires an update to its kernal component. To update to WSL 2, you need to be running Windows 10 or Windows 11. And following are the individual requirements for x64-based PC and Arm64-based PC. For x64 systems: Version 1903 or later, with Build 18362.1049 or later. For ARM64 systems: Version 2004 or later, with Build 19041 or later To check if it is an x64 or ARM64 system, use the following command. You can check the version/ build using the method mentioned in the initial segment of this article. Download the Linux Kernal Update Package Now, you can download the Linux kernel update package. If you want to download the update package from the Microsoft Store, use one of the following commands. You can use either wsl.exe --install or wsl.exe --update Or, depending on whether you are using the x64-based or ARM64-based PC, you can manually download and install the update package. For x64-based PC, https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi For ARM64-based PC, https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_arm64.msi Set WSL2 as default Now, WSL2 can be set as our default version using the following command. Finally, we have the terminal window Use the Ubuntu terminal as a new tab of the Windows terminal You can also have the Linux terminal as a new tab of the Windows Terminal. For this, when you open the Windows terminal, you may notice the downward arrow. Click it and choose the terminal window of your choice. Here, it is the Ubuntu terminal.

  • Python "__hash__()" dunder method; a magic method worth learning.

    This blog is about the __hash__() method in Python, which is a dunder method that returns the hashvalue of an object.

  • Bioinformatics Course

    1. INTRODUCTION TO PYTHON FOR BIOLOGY Link: Introduction to Python for Biology - Transmitting Science Date: February 12th-March 11th, 2024 Tutors: Nic Bennett The University of Texas at Austin United States of America 2. INTRODUCTION TO GENOME-WIDE ASSOCIATION STUDIES (GWAS) Link: Assembly and Annotation of genomes - physalia-courses Date: 18-22 March 2024 Tutors: Dr. Giulio Formenti(The Rockefeller University, USA), Dr. Guido Gallo (University of Milan, Italy) 3. INTRODUCTION TO GENOME-WIDE ASSOCIATION STUDIES (GWAS) Link: Introduction to genome-wide association studies (GWAS) - physalia-courses Date: 27 November - 1 December 2023 Tutors: Dr. Filippo Biscarini, Dr. Oscar Gonzalez-Recio, Dr. Christian Werner 4. COMPUTATIONAL TUMOUR EVOLUTION FROM BULK DNA SEQUENCING Link: Computational tumour evolution from bulk DNA sequencing - physalia-courses Date: 26 February - 1 March 2024 Tutors: Prof. Giulio Caravagna (University of Trieste), Elena Buscaroli 5. GENOME ASSEMBLY USING OXFORD NANOPORE SEQUENCING Link: GENOME ASSEMBLY USING OXFORD NANOPORE SEQUENCING - physalia-courses Date: 4– 8 March 2024 Tutors: Dr. Amanda Warr (Roslin Institute, UK), Dr. Natalie Ring (Roslin Institute, UK) 6. Introduction to Bayesian Data Analysis Link: Bayesian data analysis: Theory & practice - physalia-courses Date: 12-16 February 2024 Tutors: Prof. Michael Franke(University of Tübingen, Germany) 7. RNA-SEQ ANALYSES IN NON-MODEL ORGANISMS Link: RNA-seq Analyses in non-model organisms - physalia-courses Date: 11th-15th December 2023 Tutors: Dr. Nicolas Delhomme, Dr. Bastian Schiffthaler 8. INTRODUCTION TO R SHINY Link: Introduction to R Shiny - physalia-courses Date: 29-30 January 2024 Tutors: Dr Mohamed EL Fodil Ihaddaden

  • Luminescence Dating

    A Talk by Experts on Luminescence Dating Today I felt delighted to have attended a talk on the topic: Luminescence dating for dating terracotta. Speakers of the Talk The talk was delivered by Dr. Morthkai, Scientist-D, Birbal Sahni Institute of Palaeoscience, Lucknow, India. I hereby gist the valuable information delivered by Dr. P Morthkai, the speaker. Dr. P Morthkai is a scientist at the distinguished Birbal Sahni Institute of Palaeoscience. The talk provided insights into the scientific underpinning Luminescence Dating - a geochronological method, like carbon dating that can be used for studying the age of paleontological and archaeological materials. How does Carbon-14 dating differ from Luminescence Dating Two important graphs we need to understand that distinguish the Luminescence dating from the carbon-14 dating. Carbon Dating In carbon dating, as you see, we measure or quantify the carbon-14, the radioactive isotope of carbon as time passes. It takes 5730 years for a given amount of carbon to become half of its initial quantity. Carbon dating is based on the carbon-14 that is absorbed into living beings while they are alive. To speak of the formation of carbon-14 and its entry into the living body, first of all, the carbon-14 is produced in the lower stratosphere and upper troposphere by the activity of the cosmic rays. Cosmic rays generate neutrons, and those when travel through the atmosphere strike with the nitrogen-14 and turn them into carbon-14. These carbon-14, when they combine with oxygen, form carbon dioxide. Plants use these carbon dioxide for photosynthesis and, as consumers, when animals including humans ingest plant foods they take in carbon-14. These carbon-14 are exchanged with the atmosphere and therefore maintaining a constant ratio of C-14 to C-12. When an organism dies, there is no more addition of C-14 into the system and the existing C-14 starts to decay to N-14. Studies show that the ratio of C-14 to C-12 is 1.25 parts of C-14 to 10^12 parts of C-12, and this ratio remains almost constant along the lifespan of animals. If the body mass of an animal is known, it is possible to estimate the initial number of carbon atoms and Carbon-14 atoms. Since the half-life of Carbon-14 is 5730, after 10 half-lives, almost 99% of the original Carbon-14 would have been decayed, and therefore fossils that are at most 50,000 years old can be dated accurately. Luminescence Dating Whereas C-14 dating involves the calculation of age of an archaeological object by measuring the number of C-14 atoms after decay, luminescence dating involves determining the age of archaeological and paleontological objects by measuring optically stimulated luminescence (OSL). The OSL is due to the accumulation of the trapped electrons between the valence and the conduction bands. The brightness or the intensity of the OSL is based on the number of electrons that are trapped between valence and the conduction band. When the material is optically stimulated, the electrons are ejected from the hole-traps (between the valence and the conduction band) and fall to the valence band, thus emitting light. The intensity of luminescence depends on the number of electrons that were thrown out from the valence band upon bombardment by high eV (electron volt) radiation energy (alpha, beta particles, gamma rays, etc.) . In the image, there is a reference to a point in time at which the signal is reset to 0. At this point, all the trapped electrons have been evacuated from the hole-traps and they are now in the valence band. This happens when the material is subjected to intense heat - for example in the case of preparation of terracotta materials - or exposure to sunlight. Here, we need to understand that sediments and archaeological artifacts contain dosimeters - quarts and feldspars - and they can trap electrons when irradiated. These electron traps are nothing but holes or impurities that can accept electrons. If there are radiation energy in the surrounding environment of a dosimeter, the electrons get expelled from the electron-dense valence band to the electron-free conduction band overcoming a binding energy. If the binding energy needed for electrons in the valence band of Silicon atom (of SiO2) is 6 eV, the radiation energy of alpha, beta particles, and gamma rays is in the order of millions. This would result in the mass ejection of electrons from the valence band of the Silicon and other atoms to the respective conductions bands. The electrons stay only temporarily in the conduction band and fall back only to get tapped in the holes between the valence and the conduction band. When the dosimeters are exposed to sunlight or any thermal source, the electrons that are trapped come back to the valence band, emitting light. Calculation of Age of a paleontological/ archaeological object If we know the total electrons that were trapped and the rate at which the electrons trapped, we can calculate the time it took for the electrons to become trapped; and that is the time we refer to as the age of the material concerned. Time = Dose (or quantity of the trapped electrons in Gy)/ Dose Rate (Gy/Ka) We will get the time in kilo year or 1000 years. Here, the rate at which electrons trapped is calculated indirectly by the calculating the rate at which radiation energy is emitted/ dose rate (expressed per 1000 years) Singhvi's beaker model Singhvi’s beaker model can be used to understand the applicability of Luminescence dating in calculating the age of paleontological and archaeological objects. Here, how do we calculate the time taken to fill the water? Obviously by dividing the volume by drop rate. Here, the value is affected by the size of the beaker, and variability in the drop rate. So, assumptions are made that beakers are of comparable size and drop rate is uniform. In the same sense, when we measure time/ age of an archaeological object, the dosimeter is like a beaker, the electrons that are trapped in the hole-trap is the water that is collected in a beaker, and the dose rate is like drop rate. Here, we make the assumption that the dosimeter is irradiated at a constant rate.

  • Twitter Round
  • b-facebook

© 2035 by Z-Photography. Powered and secured by Wix

PHONE:
+91 9645304093

EMAIL:
thelifesciencehub2023@gmail.com
Subscribe to our website and receive updates!

Thanks for submitting!

Lifescience, C/o Vijithkumar, Dept. of Biotechnology,

Manonmaniam Sundaranar University, Tirunelveli, Tamil Nadu, India, PIN: 627012.

bottom of page