Thursday, July 20, 2017

MY SCRIPT (5): FASTA manipulation and analysis ........

 Features: while loop; sort -n; extract header; convert fasta sequence into uniline; find length; replace as null; mv; printf, column -t

----------------------------------------------------------------------------
#Code to manipulate fasta file
 #! /usr/bin
#Execute as:  sh fasta_manipulation.sh |& tee fasta_manipulation_data_file
while read isolate;
do
echo "Starting $isolate"
#mkdir result_files
#This perl code extracts all protein fasta sequences with the pattern "HYPOTHETICAL' from the proteome of $isolate and outputs into a file $isolate_hypothetical
perl /home/pseema/denovo_analysis/fasta_extraction.pl -m 'hypothetical' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.faa > /home/pseema/denovo_analysis/result_files/$isolate.hypothetical

#cat /home/pseema/denovo_analysis/$isolate.hypothetical
#This perl code determines the length of each hypothetical protein sequences and result is directed to a file
perl /home/pseema/denovo_analysis/fasta_length.pl < /home/pseema/denovo_analysis/result_files/$isolate.hypothetical > /home/pseema/denovo_analysis/result_files/length_$isolate.hypothetical
#cat  /home/pseema/denovo_analysis/result_files/length_$isolate.hypothetical
#The lengths are sorted numerically to find the smallest as well as longest protein sequence; result is output to a file
sort -n /home/pseema/denovo_analysis/result_files/length_$isolate.hypothetical > /home/pseema/denovo_analysis/result_files/sorted_length_$isolate.hypothetical

#Extract only headers of the sequences
grep "^>" /home/pseema/denovo_analysis/protein_fasta_files/$isolate.faa > /home/pseema/denovo_analysis/result_files/$isolate.only_header |head
#Show the headers
head only_header
#Extract column 2,3,4,5,6 (it has the protein names)
awk  '{print $2 $3 $4 $5 $6}' /home/pseema/denovo_analysis/result_files/$isolate.only_header > /home/pseema/denovo_analysis/result_files/$isolate.extracted
#Sort the protein names alphabetically
sort  /home/pseema/denovo_analysis/result_files/$isolate.extracted > /home/pseema/denovo_analysis/result_files/$isolate.sorted_protein_names
#sort -u only_hypo_H37Rv.faa  H37Rv.faa > sorted
#head sorted

#This code converts multiline fasta sequence into single line. Very important code
awk '/^>/ {printf("\n%s\n",$0);next; } { printf("%s",$0);}  END {printf("\n");}' < /home/pseema/denovo_analysis/protein_fasta_files/$isolate.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa

# Find the fasta sequences without the term 'hypothetical'.
awk '!/hypothetical/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.not_hypothetical
#less not_hypothetical | wc -l

#Run the perl script to find the length of each fasta sequence
perl  fasta_length.pl < /home/pseema/denovo_analysis/protein_fasta_files/$isolate.not_hypothetical > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.length_of_non_hypothetical
#sort the lengths numerically
sort -n /home/pseema/denovo_analysis/protein_fasta_files/$isolate.length_of_non_hypothetical > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.sorted_hypo

#Find the smallest and longest protein
echo "Minimum protein residues: "
cut -f1 -d"," /home/pseema/denovo_analysis/protein_fasta_files/$isolate.sorted_hypo |  head -1

echo "Maximum protein residues: "
cut -f1 -d"," /home/pseema/denovo_analysis/protein_fasta_files/$isolate.sorted_hypo |  tail -1

#This awk command will find the fasta sequence of the particular length (very useful)
echo "Smallest protein is: "
awk '!/^>/ { next } { getline seq } length(seq) == 32 { print $0 "\n" seq }' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.not_hypothetical #> min_non_hypothetical


#echo "Seq with length 39aa is: "
#awk '!/^>/ { next } { getline seq } length(seq) == 39 { print $0 "\n" seq }' not_hypothetical #> min_non_hypothetical

#echo "Seq with length 48aa is: "
#awk '!/^>/ { next } { getline seq } length(seq) == 48 { print $0 "\n" seq }' not_hypothetical #> min_non_hypothetical

#Couldn't find the fasta seq with given length for big proteins. Converting it to >= symbol solved the problem.
echo "Largest protein is: "
#awk '!/^>/ { next } { getline seq } length(seq) == 4225 { print $0 "\n" seq }' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.not_hypothetical #> min_non_hypothetical
awk '!/^>/ { next } { getline seq } length(seq) >= 3719 { print $0 "\n" seq }' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.not_hypothetical #> min_non_hypothetical

#echo "Seq with length 3774aa is: "
#awk '!/^>/ { next } { getline seq } length(seq) >= 3774 { print $0 "\n" seq }' not_hypothetical #> min_non_hypothetical

#echo "Seq with length 3719aa is: "
#awk '!/^>/ { next } { getline seq } length(seq) >= 3719 { print $0 "\n" seq }' not_hypothetical #> min_non_hypothetical

echo "Distribution of the below genes: "
awk '/hypothetical/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_hypotheticals
wc -l  /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_hypotheticals

awk '/ESAT/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_ESAT
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_ESAT

awk '/ESX-1/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.ESX-1
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.ESX-1

awk '/Transposase/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_Transposase
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_Transposase

awk '/efflux/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_efflux
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_efflux

awk '/FabG/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_FabG
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_FabG

awk '/Antitoxin/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_Antitoxin
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_Antitoxin

awk '/Ribonuclease/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_Ribonuclease
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_Ribonuclease

awk '/PE family protein/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_PEfamily
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_PEfamily

awk '/PPE family protein/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_PPEfamily
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.only_PPEfamily

awk '/Universal stress protein/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.Universalstress
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.Universalstress

awk '/Transposon/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.Transposon
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.Transposon

awk '/Phage|phage/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.phages
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.phages

awk '/Cutinase/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.Cutinase
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.Cutinase

awk '/Cocaine esterase/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.Cocaine_esterase
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.Cocaine_esterase

awk '/hemagglutinin/' /home/pseema/denovo_analysis/protein_fasta_files/$isolate.single.faa > /home/pseema/denovo_analysis/protein_fasta_files/$isolate.hemagglutinin
wc -l /home/pseema/denovo_analysis/protein_fasta_files/$isolate.hemagglutinin

done < /home/pseema/denovo_analysis/input_files/isolate_list
-----------------------------------------------------
#Code to analyze the generated fasta_manipulation_data_file
#! /usr/bin
#Execute as: sh fasta_manipulation_analysis.sh

#The legend has fields ISOLATE (1), No. (2), lineage (3), smallest protein (4), largest protein (5), country (6), hypothetical protein no (7)
#ESAT (8), ESX-1 (9), Transposase (10), efflux (11), FabG (12), Antitoxin (13), Ribonuclease (12), PEfamily (13), PPEfamily (14), Universalstress (15), Transposon (16), Phage (17), Cutinase (18), Cocaine esterase (19), hemagglutinin (20)

#CODE TO ADD A COLUMN TO A FILE: awk '{print $1}' < small_file | big_file - > merged_file
#CODE TO EXTRACT LINE WITH A PARTICULAR PATTERN:grep "pattern" input_file > output_file
#CODE TO SORT COLUMN BASED ON A COLUMN:sort -k 4,4 -k 5,5 IO_info > sorted_IO_info
#CODE TO ADD LEGEND TO DATA FILE: { printf 'ISOLATE\tName\tLineage\n'; cat file; } > new_file

#Find all isolate names with # symbol on both flanking sides
grep "^Starting" fasta_manipulation_data_file > /home/pseema/denovo_analysis/result_files/isolate_names
wc -l /home/pseema/denovo_analysis/result_files/isolate_names

#Globally replace all 'Starting' pattern with null
sed 's/Starting//g' /home/pseema/denovo_analysis/result_files/isolate_names > /home/pseema/denovo_analysis/result_files/stripped_isolate_names
cat /home/pseema/denovo_analysis/result_files/stripped_isolate_names

#Extract a column and paste it to another file side-by-side (row number shouls be same)
awk '{print $1}' < /home/pseema/denovo_analysis/input_files/lineage_info | paste /home/pseema/denovo_analysis/result_files/stripped_isolate_names - > /home/pseema/denovo_analysis/result_files/isolate_lineage
cat /home/pseema/denovo_analysis/result_files/isolate_lineage


perl -ne 'if ($p) { print; $p = 0 } $p++ if /Minimum protein/' fasta_manipulation_data_file > /home/pseema/denovo_analysis/result_files/smallest_protein
cat /home/pseema/denovo_analysis/result_files/smallest_protein
sort -n /home/pseema/denovo_analysis/result_files/smallest_protein > /home/pseema/denovo_analysis/result_files/sorted_smallest_protein

awk '{print $1}' < /home/pseema/denovo_analysis/result_files/smallest_protein | paste /home/pseema/denovo_analysis/result_files/isolate_lineage - > /home/pseema/denovo_analysis/result_files/merged_isolate_small_protein

perl -ne 'if ($p) { print; $p = 0 } $p++ if /Maximum protein/' fasta_manipulation_data_file > /home/pseema/denovo_analysis/result_files/largest_protein
#cat /home/pseema/denovo_analysis/result_files/largest_protein
sort -n /home/pseema/denovo_analysis/result_files/largest_protein > /home/pseema/denovo_analysis/result_files/sorted_largest_protein

awk '{print $1}' < /home/pseema/denovo_analysis/result_files/largest_protein | paste /home/pseema/denovo_analysis/result_files/merged_isolate_small_protein - > /home/pseema/denovo_analysis/result_files/merged_isolate_small_large_protein
#cat /home/pseema/denovo_analysis/result_files/merged_isolate_small_large_protein


awk '{print $1}' < /home/pseema/denovo_analysis/input_files/country_info | paste /home/pseema/denovo_analysis/result_files/merged_isolate_small_large_protein - > /home/pseema/denovo_analysis/result_files/merged_isolate_lineage_country_protein
cat /home/pseema/denovo_analysis/result_files/merged_isolate_lineage_country_protein

echo "##IO data##"
grep "IO" /home/pseema/denovo_analysis/result_files/merged_isolate_lineage_country_protein > /home/pseema/denovo_analysis/result_files/IO_info
sort -k 4,4 -k 5,5 /home/pseema/denovo_analysis/result_files/IO_info > /home/pseema/denovo_analysis/result_files/sorted_IO_info
#cat /home/pseema/denovo_analysis/result_files/sorted_IO_info

echo "##EAS data##"
grep "EAS" /home/pseema/denovo_analysis/result_files/merged_isolate_lineage_country_protein > /home/pseema/denovo_analysis/result_files/EAS_info
sort -k 4,4 -k 5,5 /home/pseema/denovo_analysis/result_files/EAS_info > /home/pseema/denovo_analysis/result_files/sorted_EAS_info
#cat /home/pseema/denovo_analysis/result_files/sorted_EAS_info

echo "##EAI data##"
grep "EAI" /home/pseema/denovo_analysis/result_files/merged_isolate_lineage_country_protein > /home/pseema/denovo_analysis/result_files/EAI_info
sort -k 4,4 -k 5,5 /home/pseema/denovo_analysis/result_files/EAI_info > /home/pseema/denovo_analysis/result_files/sorted_EAI_info
#cat /home/pseema/denovo_analysis/result_files/sorted_EAI_info

echo "##EAM data##"
grep "EAM" /home/pseema/denovo_analysis/result_files/merged_isolate_lineage_country_protein > /home/pseema/denovo_analysis/result_files/EAM_info
sort -k 4,4 -k 5,5 /home/pseema/denovo_analysis/result_files/EAM_info > /home/pseema/denovo_analysis/result_files/sorted_EAM_info
cat /home/pseema/denovo_analysis/result_files/sorted_EAM_info

echo "The smallest protein across all isolates is: "
cat /home/pseema/denovo_analysis/result_files/sorted_smallest_protein

echo "Smallest functional protein is :"
grep "PROKKA" fasta_manipulation_data_file | awk 'NR == 1'  > /home/pseema/denovo_analysis/result_files/smallest_functional_protein
#cat /home/pseema/denovo_analysis/result_files/smallest_functional_protein


echo "The largest protein across all isolates is: "
cat /home/pseema/denovo_analysis/result_files/sorted_largest_protein

echo "Largest functional protein is :"
grep "PROKKA" fasta_manipulation_data_file| awk 'NR == 2' > /home/pseema/denovo_analysis/result_files/largest_functional_protein
cat /home/pseema/denovo_analysis/result_files/largest_functional_protein


grep "only_hypotheticals" fasta_manipulation_data_file > /home/pseema/denovo_analysis/result_files/only_hypothetical_proteins
#cat /home/pseema/denovo_analysis/result_files/only_hypothetical_proteins
wc -l /home/pseema/denovo_analysis/result_files/only_hypothetical_proteins
awk '{print $1}' < /home/pseema/denovo_analysis/result_files/only_hypothetical_proteins | paste /home/pseema/denovo_analysis/result_files/merged_isolate_lineage_country_protein - > /home/pseema/denovo_analysis/result_files/merged_info_hypothetical
#cat /home/pseema/denovo_analysis/result_files/merged_info_hypothetical

grep "only_ESAT" fasta_manipulation_data_file > /home/pseema/denovo_analysis/result_files/only_ESAT_proteins
#cat /home/pseema/denovo_analysis/result_files/only_ESAT_proteins
wc -l /home/pseema/denovo_analysis/result_files/only_ESAT_proteins
awk '{print $1}' < /home/pseema/denovo_analysis/result_files/only_ESAT_proteins | paste /home/pseema/denovo_analysis/result_files/merged_info_hypothetical - > /home/pseema/denovo_analysis/result_files/merged_hypothetical_ESAT
#cat /home/pseema/denovo_analysis/result_files/merged_hypothetical_ESAT

grep "ESX-1" fasta_manipulation_data_file > /home/pseema/denovo_analysis/result_files/only_ESX-1_proteins
#cat /home/pseema/denovo_analysis/result_files/only_ESX-1_proteins
wc -l /home/pseema/denovo_analysis/result_files/only_ESX-1_proteins
awk '{print $1}' < /home/pseema/denovo_analysis/result_files/only_ESX-1_proteins | paste /home/pseema/denovo_analysis/result_files/merged_hypothetical_ESAT - > /home/pseema/denovo_analysis/result_files/merged_hypothetical_ESAT_ESX
#cat /home/pseema/denovo_analysis/result_files/merged_hypothetical_ESAT_ESX


grep "only_Transposase" fasta_manipulation_data_file > /home/pseema/denovo_analysis/result_files/only_Transposase_proteins
#cat /home/pseema/denovo_analysis/result_files/only_Transposase_proteins
wc -l /home/pseema/denovo_analysis/result_files/only_Transposase_proteins
awk '{print $1}' < /home/pseema/denovo_analysis/result_files/only_Transposase_proteins | paste /home/pseema/denovo_analysis/result_files/merged_hypothetical_ESAT_ESX - > /home/pseema/denovo_analysis/result_files/merged_hypothetical_ESAT_ESX_transposase
#cat /home/pseema/denovo_analysis/result_files/merged_hypothetical_ESAT_ESX_transposase

grep "only_efflux" fasta_manipulation_data_file > /home/pseema/denovo_analysis/result_files/only_efflux
#cat /home/pseema/denovo_analysis/result_files/only_efflux
wc -l /home/pseema/denovo_analysis/result_files/only_efflux
awk '{print $1}' < /home/pseema/denovo_analysis/result_files/only_efflux | paste /home/pseema/denovo_analysis/result_files/merged_hypothetical_ESAT_ESX_transposase - > /home/pseema/denovo_analysis/result_files/merged_efflux
#cat /home/pseema/denovo_analysis/result_files/merged_efflux

grep "only_FabG" fasta_manipulation_data_file > /home/pseema/denovo_analysis/result_files/only_FabG
#cat /home/pseema/denovo_analysis/result_files/only_FabG
wc -l /home/pseema/denovo_analysis/result_files/only_FabG
awk '{print $1}' < /home/pseema/denovo_analysis/result_files/only_FabG | paste /home/pseema/denovo_analysis/result_files/merged_efflux  - > /home/pseema/denovo_analysis/result_files/merged_FabG
#cat /home/pseema/denovo_analysis/result_files/merged_FabG

grep "only_Antitoxin" fasta_manipulation_data_file > /home/pseema/denovo_analysis/result_files/only_Antitoxin
#cat /home/pseema/denovo_analysis/result_files/only_Antitoxin
wc -l /home/pseema/denovo_analysis/result_files/only_Antitoxin
awk '{print $1}' < /home/pseema/denovo_analysis/result_files/only_Antitoxin | paste /home/pseema/denovo_analysis/result_files/merged_FabG  - > /home/pseema/denovo_analysis/result_files/merged_Antitoxin
#cat /home/pseema/denovo_analysis/result_files/merged_Antitoxin

grep "only_Ribonuclease" fasta_manipulation_data_file > /home/pseema/denovo_analysis/result_files/only_Ribonuclease
#cat /home/pseema/denovo_analysis/result_files/only_Ribonuclease
wc -l /home/pseema/denovo_analysis/result_files/only_Ribonuclease
awk '{print $1}' < /home/pseema/denovo_analysis/result_files/only_Ribonuclease | paste /home/pseema/denovo_analysis/result_files/merged_Antitoxin  - > /home/pseema/denovo_analysis/result_files/merged_Ribonuclease
#cat /home/pseema/denovo_analysis/result_files/merged_Ribonuclease

grep "only_PEfamily" fasta_manipulation_data_file > /home/pseema/denovo_analysis/result_files/only_PEfamily
#cat /home/pseema/denovo_analysis/result_files/only_PEfamily
wc -l /home/pseema/denovo_analysis/result_files/only_PEfamily
awk '{print $1}' < /home/pseema/denovo_analysis/result_files/only_PEfamily | paste /home/pseema/denovo_analysis/result_files/merged_Ribonuclease  - > /home/pseema/denovo_analysis/result_files/merged_PEfamily
#cat /home/pseema/denovo_analysis/result_files/merged_PEfamily

grep "only_PPEfamily" fasta_manipulation_data_file > /home/pseema/denovo_analysis/result_files/only_PPEfamily
#cat /home/pseema/denovo_analysis/result_files/only_PPEfamily
wc -l /home/pseema/denovo_analysis/result_files/only_PPEfamily
awk '{print $1}' < /home/pseema/denovo_analysis/result_files/only_PPEfamily | paste /home/pseema/denovo_analysis/result_files/merged_PEfamily  - > /home/pseema/denovo_analysis/result_files/merged_PPEfamily
#cat /home/pseema/denovo_analysis/result_files/merged_PPEfamily

grep "Universalstress" fasta_manipulation_data_file > /home/pseema/denovo_analysis/result_files/only_Universalstress
#cat /home/pseema/denovo_analysis/result_files/only_Universalstress
wc -l /home/pseema/denovo_analysis/result_files/only_Universalstress
awk '{print $1}' < /home/pseema/denovo_analysis/result_files/only_Universalstress | paste /home/pseema/denovo_analysis/result_files/merged_PPEfamily  - > /home/pseema/denovo_analysis/result_files/merged_Universalstress
#cat /home/pseema/denovo_analysis/result_files/merged_Universalstress

#Renaming the file name with mv command
mv /home/pseema/denovo_analysis/result_files/merged_Universalstress  /home/pseema/denovo_analysis/result_files/fasta_manipulation_analysis_file

# Code to add legend to the fasta_manipulation_analysis_file
{ printf 'Isolate\tLineage\tSm_funct_prot\tLar_funct_prot\tCountry\tHypothet_prot\tESAT\tESX-1\tTransposase\tEfflux\tFabG\tAntitoxin\tRibonuclease\tPEfamily\tPPEfamily\tUniversal_stress\n'; cat /home/pseema/denovo_analysis/result_files/fasta_manipulation_analysis_file; } > /home/pseema/denovo_analysis/result_files/final_fasta_manipulation_analysis_file
#cat /home/pseema/denovo_analysis/result_files/final_fasta_manipulation_analysis_file

#The next two codes will align data to legends for easy read
column -t /home/pseema/denovo_analysis/result_files/final_fasta_manipulation_analysis_file
column -t /home/pseema/denovo_analysis/result_files/final_fasta_manipulation_analysis_file > /home/pseema/denovo_analysis/result_files/aligned_final_fasta_manipulation_analysis_file && mv /home/pseema/denovo_analysis/result_files/aligned_final_fasta_manipulation_analysis_file  /home/pseema/denovo_analysis/result_files/final_fasta_manipulation_analysis_file

mv /home/pseema/denovo_analysis/result_files/final_fasta_manipulation_analysis_file /home/pseema/denovo_analysis/final_fasta_manipulation_analysis_file
cat /home/pseema/denovo_analysis/final_fasta_manipulation_analysis_file

No comments:

Post a Comment

Laboratory tools and reagents (Micro-pipettes)...

Micro-pipettes are essential tools of R & D labs, and integral part of Good Laboratory Practices (GLPs) Micro-pipetting methods include ...