Repository 'tables_arithmetic_operations'
hg clone https://toolshed.g2.bx.psu.edu/repos/devteam/tables_arithmetic_operations

Changeset 0:82fa5062d611 (2014-04-01)
Next changeset 1:2e9f3b6ebfbc (2017-06-22)
Commit message:
Imported from capsule None
added:
tables_arithmetic_operations.pl
tables_arithmetic_operations.xml
test-data/numericalTable1.tabular
test-data/table_addition_result.tabular
test-data/table_division_result.tabular
test-data/table_multiplication_result.tabular
test-data/table_subtraction_result.tabular
b
diff -r 000000000000 -r 82fa5062d611 tables_arithmetic_operations.pl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tables_arithmetic_operations.pl Tue Apr 01 10:48:45 2014 -0400
[
@@ -0,0 +1,117 @@
+# A program to implement arithmetic operations on tabular files data. The program takes three inputs:
+# The first input is a TABULAR format file containing numbers only.
+# The second input is a TABULAR format file containing numbers only.
+# The two files must have the same number of columns and the same number of rows
+# The third input is an arithmetic operation: +, -, *, or / for addition, subtraction, multiplication, or division, respectively 
+# The output file is a TABULAR format file containing the result of implementing the arithmetic operation on both input files.
+# The output file has the same number of columns and the same number of rows as each of the two input files.
+# Note: in case of division, none of the values in the second input file could be 0.
+
+use strict;
+use warnings;
+
+#variables to handle information of the first input tabular file
+my $lineData1 = "";
+my @lineDataArray1 = ();
+my $lineArraySize = 0;
+my $lineCounter1 = 0;
+
+#variables to handle information of the second input tabular file
+my $lineData2= "";
+my @lineDataArray2 = ();
+my $lineCounter2 = 0;
+
+my $result = 0;
+
+# check to make sure having the correct number of arguments
+my $usage = "usage: tables_arithmetic_operations.pl [TABULAR.in] [TABULAR.in] [ArithmeticOperation] [TABULAR.out] \n";
+die $usage unless @ARGV == 4;
+
+#variables to store the names of input and output files
+my $inputTabularFile1 = $ARGV[0];
+my $inputTabularFile2 = $ARGV[1];
+my $arithmeticOperation = $ARGV[2];
+my $outputTabularFile = $ARGV[3];
+
+#open the input and output files
+open (INPUT1, "<", $inputTabularFile1) || die("Could not open file $inputTabularFile1 \n"); 
+open (INPUT2, "<", $inputTabularFile2) || die("Could not open file $inputTabularFile2 \n"); 
+open (OUTPUT, ">", $outputTabularFile) || die("Could not open file $outputTabularFile \n");
+
+#store the first input file in the array @motifsFrequencyData1
+my @tabularData1 = <INPUT1>;
+
+#store the second input file in the array @motifsFrequencyData2
+my @tabularData2 = <INPUT2>;
+
+#reset the $lineCounter1 to 0
+$lineCounter1 = 0;
+
+#iterated through the lines of the first input file 
+INDEL1:
+foreach $lineData1 (@tabularData1){
+ chomp ($lineData1);
+ $lineCounter1++;
+
+ #reset the $lineCounter2 to 0
+ $lineCounter2 = 0;
+
+ #iterated through the lines of the second input file 
+ foreach $lineData2 (@tabularData2){
+ chomp ($lineData2);
+ $lineCounter2++;
+
+ #check if the two motifs are the same in the two input files
+ if ($lineCounter1 == $lineCounter2){
+
+ @lineDataArray1 = split(/\t/, $lineData1);
+ @lineDataArray2 = split(/\t/, $lineData2);
+
+ $lineArraySize = @lineDataArray1;
+
+ for (my $index = 0; $index < $lineArraySize; $index++){
+
+ if ($arithmeticOperation eq "Addition"){
+ #compute the additin of both values
+ $result = $lineDataArray1[$index] + $lineDataArray2[$index];
+ }
+
+ if ($arithmeticOperation eq "Subtraction"){
+ #compute the subtraction of both values
+ $result = $lineDataArray1[$index] - $lineDataArray2[$index];
+ }
+
+ if ($arithmeticOperation eq "Multiplication"){
+ #compute the multiplication of both values
+ $result = $lineDataArray1[$index] * $lineDataArray2[$index];
+ }
+
+ if ($arithmeticOperation eq "Division"){
+
+ #check if the denominator is 0
+ if ($lineDataArray2[$index] != 0){
+ #compute the division of both values
+ $result = $lineDataArray1[$index] / $lineDataArray2[$index];
+ }
+ else{
+ die("A denominator could not be zero \n"); 
+ }
+ }
+
+ #store the result in the output file
+ if ($index < $lineArraySize - 1){
+ print OUTPUT $result . "\t";
+ }
+ else{
+ print OUTPUT $result . "\n";
+ }
+ }
+ next INDEL1;
+ }
+ }
+}  
+
+#close the input and output files
+close(OUTPUT);
+close(INPUT2);
+close(INPUT1);
\ No newline at end of file
b
diff -r 000000000000 -r 82fa5062d611 tables_arithmetic_operations.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tables_arithmetic_operations.xml Tue Apr 01 10:48:45 2014 -0400
b
@@ -0,0 +1,105 @@
+<tool id="tables_arithmetic_operations" name="Arithmetic Operations " version="1.0.0">
+  <description>on tables</description>
+  
+  <command interpreter="perl">
+   tables_arithmetic_operations.pl $inputFile1 $inputFile2 $inputArithmeticOperation3 $outputFile1
+  </command>
+
+  <inputs>
+   <param format="tabular" name="inputFile1" type="data" label="Select the first input tabular file"/>
+   <param format="tabular" name="inputFile2" type="data" label="Select the second input tabular file"/>
+  
+    <param name="inputArithmeticOperation3" type="select" label="Choose the arithmetic operation:">
+     <option value="Addition">Addition</option>
+       <option value="Subtraction">Subtraction</option>
+       <option value="Multiplication">Multiplication</option>
+       <option value="Division">Division</option>
+    </param>
+  </inputs>
+  
+  <outputs>
+    <data format="tabular" name="outputFile1"/>
+  </outputs>
+  
+  <tests>
+   <test>
+   <param name="inputFile1" value="numericalTable1.tabular" />
+   <param name="inputFile2" value="numericalTable1.tabular" />
+     <param name="inputArithmeticOperation3" value="Addition" />
+     <output name="outputFile1" file="table_addition_result.tabular" />
+   </test>
+  
+   <test>
+   <param name="inputFile1" value="numericalTable1.tabular" />
+   <param name="inputFile2" value="numericalTable1.tabular" />
+     <param name="inputArithmeticOperation3" value="Subtraction" />
+     <output name="outputFile1" file="table_subtraction_result.tabular" />
+   </test>
+  
+   <test>
+   <param name="inputFile1" value="numericalTable1.tabular" />
+   <param name="inputFile2" value="numericalTable1.tabular" />
+     <param name="inputArithmeticOperation3" value="Multiplication" />
+     <output name="outputFile1" file="table_multiplication_result.tabular" />
+   </test>
+  
+   <test>
+   <param name="inputFile1" value="numericalTable1.tabular" />
+   <param name="inputFile2" value="numericalTable1.tabular" />
+     <param name="inputArithmeticOperation3" value="Division" />
+     <output name="outputFile1" file="table_division_result.tabular" />
+   </test>
+  
+  </tests>
+  
+  
+  <help> 
+
+.. class:: infomark
+
+**What it does**
+
+This program implements arithmetic operations on tabular files data. The program takes three inputs:
+
+- The first input is a TABULAR format file containing numbers only.
+- The second input is a TABULAR format file containing numbers only.
+- The third input is an arithmetic operation: +, -, x, or / for addition, subtraction, multiplication, or division, respectively. 
+- The output file is a TABULAR format file containing the result of implementing the arithmetic operation on both input files.
+
+
+Notes: 
+
+- The two files must have the same number of columns and the same number of rows.
+- The output file has the same number of columns and the same number of rows as each of the two input files.
+- In case of division, none of the values in the second input file could be 0, otherwise the program will stop and report an error.
+
+**Example**
+
+Let us have the first input file as follows::
+
+ 5 4 0
+ 10 11 12
+ 1 3 1
+ 1 2 1
+ 2 0 4
+
+And the second input file as follows::
+
+ 5 4 4
+ 2 5 8
+ 1 2 1
+ 3 2 5
+ 2 4 4
+
+Running the program and choosing "Addition" as an arithmetic operation will give the following output::
+
+ 10 8 4
+ 12 16 20
+ 2 5 2
+ 4 4 6
+ 4 4 8
+
+
+  </help>  
+  
+</tool>
b
diff -r 000000000000 -r 82fa5062d611 test-data/numericalTable1.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/numericalTable1.tabular Tue Apr 01 10:48:45 2014 -0400
b
@@ -0,0 +1,8 @@
+5 4 4 5 4 5 6 6
+10 11 12 14 15 14 19 23
+1 1 1 1 1 1 1 1
+1 2 1 2 2 1 4 3
+2 4 4 5 4 4 5 5
+3 1 2 1 1 2 3 3
+6 7 5 1 1 2 2 2
+4 4 4 5 8 7 6 6
b
diff -r 000000000000 -r 82fa5062d611 test-data/table_addition_result.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/table_addition_result.tabular Tue Apr 01 10:48:45 2014 -0400
b
@@ -0,0 +1,8 @@
+10 8 8 10 8 10 12 12
+20 22 24 28 30 28 38 46
+2 2 2 2 2 2 2 2
+2 4 2 4 4 2 8 6
+4 8 8 10 8 8 10 10
+6 2 4 2 2 4 6 6
+12 14 10 2 2 4 4 4
+8 8 8 10 16 14 12 12
b
diff -r 000000000000 -r 82fa5062d611 test-data/table_division_result.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/table_division_result.tabular Tue Apr 01 10:48:45 2014 -0400
b
@@ -0,0 +1,8 @@
+1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1
b
diff -r 000000000000 -r 82fa5062d611 test-data/table_multiplication_result.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/table_multiplication_result.tabular Tue Apr 01 10:48:45 2014 -0400
b
@@ -0,0 +1,8 @@
+25 16 16 25 16 25 36 36
+100 121 144 196 225 196 361 529
+1 1 1 1 1 1 1 1
+1 4 1 4 4 1 16 9
+4 16 16 25 16 16 25 25
+9 1 4 1 1 4 9 9
+36 49 25 1 1 4 4 4
+16 16 16 25 64 49 36 36
b
diff -r 000000000000 -r 82fa5062d611 test-data/table_subtraction_result.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/table_subtraction_result.tabular Tue Apr 01 10:48:45 2014 -0400
b
@@ -0,0 +1,8 @@
+0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0