diff --git a/modules/analysis/refseq/calculateCompositionCodonA.js b/modules/analysis/refseq/calculateCompositionCodonA.js
new file mode 100644
index 00000000..d8aaf295
--- /dev/null
+++ b/modules/analysis/refseq/calculateCompositionCodonA.js
@@ -0,0 +1,190 @@
+function calculateCompositionCodonA() {
+
+ // Script to calculate amino acid composition in reference sequences
+
+ var codingFeatures = {};
+ var resultMap = glue.command(["list", "feature","-w", "featureMetatags.name = 'CODES_AMINO_ACIDS'"]);
+ var featureList = resultMap["listResult"];
+ var codingFeatureList = featureList["row"];
+ _.each(codingFeatureList,function(featureObj){
+
+ //glue.log("INFO", "RESULT WAS ", featureObj);
+
+ var valueArray = featureObj["value"];
+ var codingFeatureName = valueArray[0];
+ //glue.log("INFO", "NAME WAS ", featureName)
+ codingFeatures[codingFeatureName] = featureObj;
+
+
+ });
+ //glue.log("INFO", "RESULT WAS ", codingFeatures);
+
+ // get list of reference sequences from GLUE
+ var referencesResult = glue.command(["list","reference"]);
+ //glue.log("INFO", "RESULT WAS ", referencesResult);
+
+ var listResult = referencesResult["listResult"];
+ var referencesList = listResult["row"];
+ //glue.log("INFO", "RESULT WAS ", referencesList);
+
+
+ // iterate through reference list and get AA composition of each coding feature
+ codonCompositionResults = {}
+ _.each(referencesList, function(refObj) {
+
+ //glue.log("INFO", "RESULT WAS ", refObj);
+
+ var refseqResults = {};
+ var referenceProperties = refObj["value"];
+ var referenceName = referenceProperties[0];
+
+ //glue.log("INFO", "Reference name result was:", referenceName);
+
+ // list all features annotated in this reference
+ // GLUE COMMAND: reference [referenceName] list feature-location
+ glue.inMode("/reference/"+referenceName, function() {
+
+ var featuresResult = glue.tableToObjects(glue.command(["list", "feature-location"]));
+ //glue.log("INFO", "RESULT WAS ", featuresResult);
+
+ // iterate through features
+ _.each(featuresResult, function(featureObj) {
+
+ //glue.log("INFO", "RESULT WAS ", featureObj);
+
+ var featureResults = {};
+
+ // get amino acid sequence
+ var featureName = featureObj["feature.name"];
+ //glue.log("INFO", "Feature name result was:", featureName);
+
+ // get amino acid sequence of the features
+ if (codingFeatures[featureName]) {
+
+ glue.inMode("/feature-location/"+featureName, function() {
+
+ var codonSequenceResult = glue.tableToObjects(glue.command(["amino-acid"]));
+
+ //glue.log("INFO", "Table result was:", codonSequenceResult);
+
+ // iterate through and get codon composition of feature
+ var length = 0;
+ _.each(codonSequenceResult, function(codonObj) {
+
+ var codon = codonObj["codonNts"];
+
+ length += 1;
+
+ //glue.log("INFO", "Amino acid residue result was:", codon);
+
+ if (featureResults[codon]) {
+
+ featureResults[codon] += 1;
+
+ }
+ else {
+
+ featureResults[codon] = 1;
+ }
+
+ });
+
+ featureResults["length"] = length;
+
+ });
+
+ // store feature result
+ refseqResults[featureName] = featureResults;
+
+ }
+
+ });
+
+ // store reference result
+ codonCompositionResults[referenceName] = refseqResults;
+
+ });
+
+ });
+
+ //glue.log("INFO", "FINAL RESULT WAS ", codonCompositionResults);
+
+ // Transform the data
+ var outputArray = [];
+ var headerRowCodons = [ 'ATT', 'ATC', 'ATA', 'ATG', 'ACT', 'ACC', 'ACA', 'ACG',
+ 'AGT', 'AGC', 'AGA', 'AGG', 'AAT', 'AAC', 'AAA', 'AAG' ];
+
+ // Iterate through reference sequences
+ _.each(_.keys(codonCompositionResults), function(referenceName) {
+
+ glue.log("INFO", "Got reference name '"+referenceName);
+
+ // Iterate through reference sequence features
+ var featuresObj = codonCompositionResults[referenceName];
+
+ _.each(_.keys(featuresObj), function(featureName) {
+
+ // Write values for each amino (count + ratio)
+ var codonObj = featuresObj[featureName];
+ var length = codonObj["length"];
+ //glue.log("INFO", "Got reference name '"+referenceName+" and feature "+featureName+" length = "+length);
+
+
+ var codonCountResults = {};
+ var codonFreqResults = {};
+ _.each(headerRowCodons, function(codon) {
+
+ var codonFreq;
+ var codonCount = codonObj[codon];
+ if (codonCount) {
+ var codonFreq = (codonCount / length) * 100;
+ var codonFormatedFreq = codonFreq.toFixed(2);
+ //glue.log("INFO", " Amino acid '"+codon+" frequency = ("+codonCount+" / "+length+") "+codonFormatedFreq);
+ }
+ else {
+ codonCount = '0';
+ codonFormatedFreq = '0';
+ }
+
+ codonCountResults[codon] = codonCount;
+ codonFreqResults[codon] = codonFormatedFreq;
+
+ });
+
+ // add results to array to be returned to GLUE
+ outputArray.push({
+
+
+ referenceName: referenceName,
+ featureName: featureName,
+ seqLength: length,
+ "ATT%": codonFreqResults["ATT"],
+ "ATC%": codonFreqResults["ATC"],
+ "ATA%": codonFreqResults["ATA"],
+ "ATG%": codonFreqResults["ATG"],
+ "AGA%": codonFreqResults["AGA"],
+ "AGG%": codonFreqResults["AGG"],
+ "AGT%": codonFreqResults["AGT"],
+ "AGC%": codonFreqResults["AGC"],
+ "ACT%": codonFreqResults["ACT"],
+ "ACC%": codonFreqResults["ACC"],
+ "AAG%": codonFreqResults["AAG"],
+ "ACA%": codonFreqResults["ACA"],
+ "ACG%": codonFreqResults["ACG"],
+ "AAT%": codonFreqResults["AAT"],
+ "AAC%": codonFreqResults["AAC"],
+ "AAA%": codonFreqResults["AAA"],
+ "AAG%": codonFreqResults["AAG"]
+
+ });
+
+
+ });
+
+
+ });
+
+ return outputArray;
+}
+
+
diff --git a/modules/analysis/refseq/calculateCompositionCodonA.xml b/modules/analysis/refseq/calculateCompositionCodonA.xml
new file mode 100644
index 00000000..f87faacd
--- /dev/null
+++ b/modules/analysis/refseq/calculateCompositionCodonA.xml
@@ -0,0 +1,13 @@
+
+
+ calculateCompositionCodonA.js
+
+
+ calculateCompositionCodonA
+
+
+
+
+
+
+
diff --git a/modules/analysis/refseq/calculateCompositionCodonC.js b/modules/analysis/refseq/calculateCompositionCodonC.js
new file mode 100644
index 00000000..fcedf54a
--- /dev/null
+++ b/modules/analysis/refseq/calculateCompositionCodonC.js
@@ -0,0 +1,193 @@
+function calculateCompositionCodonC() {
+
+ // Script to calculate amino acid composition in reference sequences
+
+ var codingFeatures = {};
+ var resultMap = glue.command(["list", "feature","-w", "featureMetatags.name = 'CODES_AMINO_ACIDS'"]);
+ var featureList = resultMap["listResult"];
+ var codingFeatureList = featureList["row"];
+ _.each(codingFeatureList,function(featureObj){
+
+ //glue.log("INFO", "RESULT WAS ", featureObj);
+
+ var valueArray = featureObj["value"];
+ var codingFeatureName = valueArray[0];
+ //glue.log("INFO", "NAME WAS ", featureName)
+ codingFeatures[codingFeatureName] = featureObj;
+
+
+ });
+ //glue.log("INFO", "RESULT WAS ", codingFeatures);
+
+ // get list of reference sequences from GLUE
+ var referencesResult = glue.command(["list","reference"]);
+ //glue.log("INFO", "RESULT WAS ", referencesResult);
+
+ var listResult = referencesResult["listResult"];
+ var referencesList = listResult["row"];
+ //glue.log("INFO", "RESULT WAS ", referencesList);
+
+
+ // iterate through reference list and get AA composition of each coding feature
+ codonCompositionResults = {}
+ _.each(referencesList, function(refObj) {
+
+ //glue.log("INFO", "RESULT WAS ", refObj);
+
+ var refseqResults = {};
+ var referenceProperties = refObj["value"];
+ var referenceName = referenceProperties[0];
+
+ //glue.log("INFO", "Reference name result was:", referenceName);
+
+ // list all features annotated in this reference
+ // GLUE COMMAND: reference [referenceName] list feature-location
+ glue.inMode("/reference/"+referenceName, function() {
+
+ var featuresResult = glue.tableToObjects(glue.command(["list", "feature-location"]));
+ //glue.log("INFO", "RESULT WAS ", featuresResult);
+
+ // iterate through features
+ _.each(featuresResult, function(featureObj) {
+
+ //glue.log("INFO", "RESULT WAS ", featureObj);
+
+ var featureResults = {};
+
+ // get amino acid sequence
+ var featureName = featureObj["feature.name"];
+ //glue.log("INFO", "Feature name result was:", featureName);
+
+ // get amino acid sequence of the features
+ if (codingFeatures[featureName]) {
+
+ glue.inMode("/feature-location/"+featureName, function() {
+
+ var codonSequenceResult = glue.tableToObjects(glue.command(["amino-acid"]));
+
+ //glue.log("INFO", "Table result was:", codonSequenceResult);
+
+ // iterate through and get codon composition of feature
+ var length = 0;
+ _.each(codonSequenceResult, function(codonObj) {
+
+ var codon = codonObj["codonNts"];
+
+ length += 1;
+
+ //glue.log("INFO", "Amino acid residue result was:", codon);
+
+ if (featureResults[codon]) {
+
+ featureResults[codon] += 1;
+
+ }
+ else {
+
+ featureResults[codon] = 1;
+ }
+
+ });
+
+ featureResults["length"] = length;
+
+ });
+
+ // store feature result
+ refseqResults[featureName] = featureResults;
+
+ }
+
+ });
+
+ // store reference result
+ codonCompositionResults[referenceName] = refseqResults;
+
+ });
+
+ });
+
+ //glue.log("INFO", "FINAL RESULT WAS ", codonCompositionResults);
+
+ // Transform the data
+ var outputArray = [];
+ var headerRowCodons = ['CTT', 'CTC', 'CTA', 'CTG', 'CCT', 'CCC', 'CCA', 'CCG',
+ 'CAG', 'CAT', 'CAC', 'CAA', 'CGT', 'CGC', 'CGA', 'CGG' ];
+
+ // Iterate through reference sequences
+ _.each(_.keys(codonCompositionResults), function(referenceName) {
+
+ glue.log("INFO", "Got reference name '"+referenceName);
+
+ // Iterate through reference sequence features
+ var featuresObj = codonCompositionResults[referenceName];
+
+ _.each(_.keys(featuresObj), function(featureName) {
+
+ // Write values for each amino (count + ratio)
+ var codonObj = featuresObj[featureName];
+ var length = codonObj["length"];
+ //glue.log("INFO", "Got reference name '"+referenceName+" and feature "+featureName+" length = "+length);
+
+
+ var codonCountResults = {};
+ var codonFreqResults = {};
+ _.each(headerRowCodons, function(codon) {
+
+ var codonFreq;
+ var codonCount = codonObj[codon];
+ if (codonCount) {
+ var codonFreq = (codonCount / length) * 100;
+ var codonFormatedFreq = codonFreq.toFixed(2);
+ //glue.log("INFO", " Amino acid '"+codon+" frequency = ("+codonCount+" / "+length+") "+codonFormatedFreq);
+ }
+ else {
+ codonCount = '0';
+ codonFormatedFreq = '0';
+ }
+
+ codonCountResults[codon] = codonCount;
+ codonFreqResults[codon] = codonFormatedFreq;
+
+ });
+
+ // add results to array to be returned to GLUE
+ outputArray.push({
+
+
+ referenceName: referenceName,
+ featureName: featureName,
+ seqLength: length,
+
+ "CTT%": codonFreqResults["CTT"],
+ "CTC%": codonFreqResults["CTC"],
+ "CTA%": codonFreqResults["CTA"],
+ "CTG%": codonFreqResults["CTG"],
+
+ "CCT%": codonFreqResults["CCT"],
+ "CCC%": codonFreqResults["CCC"],
+ "CCA%": codonFreqResults["CCA"],
+ "CCG%": codonFreqResults["CCG"],
+
+ "CAA%": codonFreqResults["CAA"],
+ "CAG%": codonFreqResults["CAG"],
+ "CAT%": codonFreqResults["CAT"],
+ "CAC%": codonFreqResults["CAC"],
+
+ "CGT%": codonFreqResults["CGT"],
+ "CGC%": codonFreqResults["CGC"],
+ "CGA%": codonFreqResults["CGA"],
+ "CGG%": codonFreqResults["CGG"],
+
+ });
+
+
+ });
+
+
+ });
+
+ return outputArray;
+}
+
+
diff --git a/modules/analysis/refseq/calculateCompositionCodonC.xml b/modules/analysis/refseq/calculateCompositionCodonC.xml
new file mode 100644
index 00000000..3299fa08
--- /dev/null
+++ b/modules/analysis/refseq/calculateCompositionCodonC.xml
@@ -0,0 +1,13 @@
+
+
+ calculateCompositionCodonC.js
+
+
+ calculateCompositionCodonC
+
+
+
+
+
+
+
diff --git a/modules/analysis/refseq/calculateCompositionCodonG.js b/modules/analysis/refseq/calculateCompositionCodonG.js
new file mode 100644
index 00000000..7eb464b2
--- /dev/null
+++ b/modules/analysis/refseq/calculateCompositionCodonG.js
@@ -0,0 +1,190 @@
+function calculateCompositionCodonG() {
+
+ // Script to calculate amino acid composition in reference sequences
+
+ var codingFeatures = {};
+ var resultMap = glue.command(["list", "feature","-w", "featureMetatags.name = 'CODES_AMINO_ACIDS'"]);
+ var featureList = resultMap["listResult"];
+ var codingFeatureList = featureList["row"];
+ _.each(codingFeatureList,function(featureObj){
+
+ //glue.log("INFO", "RESULT WAS ", featureObj);
+
+ var valueArray = featureObj["value"];
+ var codingFeatureName = valueArray[0];
+ //glue.log("INFO", "NAME WAS ", featureName)
+ codingFeatures[codingFeatureName] = featureObj;
+
+
+ });
+ //glue.log("INFO", "RESULT WAS ", codingFeatures);
+
+ // get list of reference sequences from GLUE
+ var referencesResult = glue.command(["list","reference"]);
+ //glue.log("INFO", "RESULT WAS ", referencesResult);
+
+ var listResult = referencesResult["listResult"];
+ var referencesList = listResult["row"];
+ //glue.log("INFO", "RESULT WAS ", referencesList);
+
+
+ // iterate through reference list and get AA composition of each coding feature
+ codonCompositionResults = {}
+ _.each(referencesList, function(refObj) {
+
+ //glue.log("INFO", "RESULT WAS ", refObj);
+
+ var refseqResults = {};
+ var referenceProperties = refObj["value"];
+ var referenceName = referenceProperties[0];
+
+ //glue.log("INFO", "Reference name result was:", referenceName);
+
+ // list all features annotated in this reference
+ // GLUE COMMAND: reference [referenceName] list feature-location
+ glue.inMode("/reference/"+referenceName, function() {
+
+ var featuresResult = glue.tableToObjects(glue.command(["list", "feature-location"]));
+ //glue.log("INFO", "RESULT WAS ", featuresResult);
+
+ // iterate through features
+ _.each(featuresResult, function(featureObj) {
+
+ //glue.log("INFO", "RESULT WAS ", featureObj);
+
+ var featureResults = {};
+
+ // get amino acid sequence
+ var featureName = featureObj["feature.name"];
+ //glue.log("INFO", "Feature name result was:", featureName);
+
+ // get amino acid sequence of the features
+ if (codingFeatures[featureName]) {
+
+ glue.inMode("/feature-location/"+featureName, function() {
+
+ var codonSequenceResult = glue.tableToObjects(glue.command(["amino-acid"]));
+
+ //glue.log("INFO", "Table result was:", codonSequenceResult);
+
+ // iterate through and get codon composition of feature
+ var length = 0;
+ _.each(codonSequenceResult, function(codonObj) {
+
+ var codon = codonObj["codonNts"];
+
+ length += 1;
+
+ //glue.log("INFO", "Amino acid residue result was:", codon);
+
+ if (featureResults[codon]) {
+
+ featureResults[codon] += 1;
+
+ }
+ else {
+
+ featureResults[codon] = 1;
+ }
+
+ });
+
+ featureResults["length"] = length;
+
+ });
+
+ // store feature result
+ refseqResults[featureName] = featureResults;
+
+ }
+
+ });
+
+ // store reference result
+ codonCompositionResults[referenceName] = refseqResults;
+
+ });
+
+ });
+
+ //glue.log("INFO", "FINAL RESULT WAS ", codonCompositionResults);
+
+ // Transform the data
+ var outputArray = [];
+ var headerRowCodons = ['GTT', 'GTC', 'GTA', 'GTG', 'GCT', 'GCC', 'GCA', 'GCG',
+ 'GGT', 'GGC', 'GGA', 'GGG', 'GAA', 'GAG', 'GAT', 'GAC' ];
+
+ // Iterate through reference sequences
+ _.each(_.keys(codonCompositionResults), function(referenceName) {
+
+ glue.log("INFO", "Got reference name '"+referenceName);
+
+ // Iterate through reference sequence features
+ var featuresObj = codonCompositionResults[referenceName];
+
+ _.each(_.keys(featuresObj), function(featureName) {
+
+ // Write values for each amino (count + ratio)
+ var codonObj = featuresObj[featureName];
+ var length = codonObj["length"];
+ //glue.log("INFO", "Got reference name '"+referenceName+" and feature "+featureName+" length = "+length);
+
+
+ var codonCountResults = {};
+ var codonFreqResults = {};
+ _.each(headerRowCodons, function(codon) {
+
+ var codonFreq;
+ var codonCount = codonObj[codon];
+ if (codonCount) {
+ var codonFreq = (codonCount / length) * 100;
+ var codonFormatedFreq = codonFreq.toFixed(2);
+ //glue.log("INFO", " Amino acid '"+codon+" frequency = ("+codonCount+" / "+length+") "+codonFormatedFreq);
+ }
+ else {
+ codonCount = '0';
+ codonFormatedFreq = '0';
+ }
+
+ codonCountResults[codon] = codonCount;
+ codonFreqResults[codon] = codonFormatedFreq;
+
+ });
+
+ // add results to array to be returned to GLUE
+ outputArray.push({
+
+
+ referenceName: referenceName,
+ featureName: featureName,
+ seqLength: length,
+
+ "GTT%": codonFreqResults["GTT"],
+ "GTC%": codonFreqResults["GTC"],
+ "GTA%": codonFreqResults["GTA"],
+ "GTG%": codonFreqResults["GTG"],
+ "GCT%": codonFreqResults["GCT"],
+ "GCC%": codonFreqResults["GCC"],
+ "GCA%": codonFreqResults["GCA"],
+ "GCG%": codonFreqResults["GCG"],
+ "GGT%": codonFreqResults["GGT"],
+ "GGC%": codonFreqResults["GGC"],
+ "GGA%": codonFreqResults["GGA"],
+ "GGG%": codonFreqResults["GGG"],
+ "GAA%": codonFreqResults["GAA"],
+ "GAG%": codonFreqResults["GAG"],
+ "GAT%": codonFreqResults["GAT"],
+ "GAC%": codonFreqResults["GAC"]
+
+ });
+
+
+ });
+
+
+ });
+
+ return outputArray;
+}
+
+
diff --git a/modules/analysis/refseq/calculateCompositionCodonG.xml b/modules/analysis/refseq/calculateCompositionCodonG.xml
new file mode 100644
index 00000000..6439c647
--- /dev/null
+++ b/modules/analysis/refseq/calculateCompositionCodonG.xml
@@ -0,0 +1,13 @@
+
+
+ calculateCompositionCodonG.js
+
+
+ calculateCompositionCodonG
+
+
+
+
+
+
+
diff --git a/modules/analysis/refseq/calculateCompositionCodonT.js b/modules/analysis/refseq/calculateCompositionCodonT.js
new file mode 100644
index 00000000..08d10c9a
--- /dev/null
+++ b/modules/analysis/refseq/calculateCompositionCodonT.js
@@ -0,0 +1,190 @@
+function calculateCompositionCodonT() {
+
+ // Script to calculate amino acid composition in reference sequences
+
+ var codingFeatures = {};
+ var resultMap = glue.command(["list", "feature","-w", "featureMetatags.name = 'CODES_AMINO_ACIDS'"]);
+ var featureList = resultMap["listResult"];
+ var codingFeatureList = featureList["row"];
+ _.each(codingFeatureList,function(featureObj){
+
+ //glue.log("INFO", "RESULT WAS ", featureObj);
+
+ var valueArray = featureObj["value"];
+ var codingFeatureName = valueArray[0];
+ //glue.log("INFO", "NAME WAS ", featureName)
+ codingFeatures[codingFeatureName] = featureObj;
+
+
+ });
+ //glue.log("INFO", "RESULT WAS ", codingFeatures);
+
+ // get list of reference sequences from GLUE
+ var referencesResult = glue.command(["list","reference"]);
+ //glue.log("INFO", "RESULT WAS ", referencesResult);
+
+ var listResult = referencesResult["listResult"];
+ var referencesList = listResult["row"];
+ //glue.log("INFO", "RESULT WAS ", referencesList);
+
+
+ // iterate through reference list and get AA composition of each coding feature
+ codonCompositionResults = {}
+ _.each(referencesList, function(refObj) {
+
+ //glue.log("INFO", "RESULT WAS ", refObj);
+
+ var refseqResults = {};
+ var referenceProperties = refObj["value"];
+ var referenceName = referenceProperties[0];
+
+ //glue.log("INFO", "Reference name result was:", referenceName);
+
+ // list all features annotated in this reference
+ // GLUE COMMAND: reference [referenceName] list feature-location
+ glue.inMode("/reference/"+referenceName, function() {
+
+ var featuresResult = glue.tableToObjects(glue.command(["list", "feature-location"]));
+ //glue.log("INFO", "RESULT WAS ", featuresResult);
+
+ // iterate through features
+ _.each(featuresResult, function(featureObj) {
+
+ //glue.log("INFO", "RESULT WAS ", featureObj);
+
+ var featureResults = {};
+
+ // get amino acid sequence
+ var featureName = featureObj["feature.name"];
+ //glue.log("INFO", "Feature name result was:", featureName);
+
+ // get amino acid sequence of the features
+ if (codingFeatures[featureName]) {
+
+ glue.inMode("/feature-location/"+featureName, function() {
+
+ var codonSequenceResult = glue.tableToObjects(glue.command(["amino-acid"]));
+
+ //glue.log("INFO", "Table result was:", codonSequenceResult);
+
+ // iterate through and get codon composition of feature
+ var length = 0;
+ _.each(codonSequenceResult, function(codonObj) {
+
+ var codon = codonObj["codonNts"];
+
+ length += 1;
+
+ //glue.log("INFO", "Amino acid residue result was:", codon);
+
+ if (featureResults[codon]) {
+
+ featureResults[codon] += 1;
+
+ }
+ else {
+
+ featureResults[codon] = 1;
+ }
+
+ });
+
+ featureResults["length"] = length;
+
+ });
+
+ // store feature result
+ refseqResults[featureName] = featureResults;
+
+ }
+
+ });
+
+ // store reference result
+ codonCompositionResults[referenceName] = refseqResults;
+
+ });
+
+ });
+
+ //glue.log("INFO", "FINAL RESULT WAS ", codonCompositionResults);
+
+ // Transform the data
+ var outputArray = [];
+ var headerRowCodons = [ 'TTA', 'TTG', 'GTT', 'TTT', 'TTC', 'TGT', 'TGC', 'GCT', 'TCT',
+ 'TCC', 'TCA', 'TCG', 'TAT', 'TAC', 'TGG', 'TGA', 'TAA', 'TAG' ];
+
+ // Iterate through reference sequences
+ _.each(_.keys(codonCompositionResults), function(referenceName) {
+
+ glue.log("INFO", "Got reference name '"+referenceName);
+
+ // Iterate through reference sequence features
+ var featuresObj = codonCompositionResults[referenceName];
+
+ _.each(_.keys(featuresObj), function(featureName) {
+
+ // Write values for each amino (count + ratio)
+ var codonObj = featuresObj[featureName];
+ var length = codonObj["length"];
+ //glue.log("INFO", "Got reference name '"+referenceName+" and feature "+featureName+" length = "+length);
+
+
+ var codonCountResults = {};
+ var codonFreqResults = {};
+ _.each(headerRowCodons, function(codon) {
+
+ var codonFreq;
+ var codonCount = codonObj[codon];
+ if (codonCount) {
+ var codonFreq = (codonCount / length) * 100;
+ var codonFormatedFreq = codonFreq.toFixed(2);
+ //glue.log("INFO", " Amino acid '"+codon+" frequency = ("+codonCount+" / "+length+") "+codonFormatedFreq);
+ }
+ else {
+ codonCount = '0';
+ codonFormatedFreq = '0';
+ }
+
+ codonCountResults[codon] = codonCount;
+ codonFreqResults[codon] = codonFormatedFreq;
+
+ });
+
+ // add results to array to be returned to GLUE
+ outputArray.push({
+
+
+ referenceName: referenceName,
+ featureName: featureName,
+ seqLength: length,
+
+ "TCT%": codonFreqResults["TCT"],
+ "TCC%": codonFreqResults["TCC"],
+ "TCA%": codonFreqResults["TCA"],
+ "TCG%": codonFreqResults["TCG"],
+ "TAT%": codonFreqResults["TAT"],
+ "TAC%": codonFreqResults["TAC"],
+ "TGG%": codonFreqResults["TGG"],
+ "TTT%": codonFreqResults["TTT"],
+ "TTC%": codonFreqResults["TTC"],
+ "TTA%": codonFreqResults["TTA"],
+ "TTG%": codonFreqResults["TTG"],
+ "TGA%": codonFreqResults["TGA"],
+ "TAA%": codonFreqResults["TAA"],
+ "TAG%": codonFreqResults["TAG"],
+ "TGT%": codonFreqResults["TGT"],
+ "TGC%": codonFreqResults["TGC"],
+
+ });
+
+
+ });
+
+
+ });
+
+ return outputArray;
+}
+
+
diff --git a/modules/analysis/refseq/calculateCompositionCodonT.xml b/modules/analysis/refseq/calculateCompositionCodonT.xml
new file mode 100644
index 00000000..58e6e4df
--- /dev/null
+++ b/modules/analysis/refseq/calculateCompositionCodonT.xml
@@ -0,0 +1,13 @@
+
+
+ calculateCompositionCodonT.js
+
+
+ calculateCompositionCodonT
+
+
+
+
+
+
+