Jump to content

Bioinformatics/Sequence mutation: Difference between revisions

m
Line 1,301:
=={{header|JavaScript}}==
<lang javascript>// Basic set-up
const numBases = 250
const numMutations = 30
const bases = ['A', 'C', 'G', 'T'];
 
// Utility functions
const copy = arr => [...arr];
 
const randTo = max => () => (Math.random() * max) | 0;
 
const selectrandSelect = seqarr => {
const randBasePosat = randTo(basesarr.length);
return [arr[...hist, oppat], arrat];
}
 
const randBasegetVars = (seq, bases) => bases[randBasePos()];{
const [newBase, _] = randSelect(bases);
const [extBase, randPos] = randSelect(seq);
return [newBase, extBase, randPos];
}
 
const leftPadN = n => v => {
const arr = [...('' + v)];
const short = n - arr.length;
return short ? [...(Array(short).fill(' ')), ...arr].join('') : arr.join('');
}
 
const filterCount = arr => s => arr.filter(e => e === s).length;
 
// Pretty Print functions
const prettyPrint = seq => {
let idx = 0;
const pad = leftPadN(4);
const print = (v, s) => console.log(`${pad(v)}:\t${s}`)
const rem = seq.reduce((p,c) => {
const s = p + c;
if (s.length === 50) {
print(idx, s);
idx = idx + 50;
return '';
}
return s;
}, '');
if (rem !== '') {
print(idx, rem);
}
return s;
}, '');
if (rem !== '') {
print(idx, rem);
}
}
 
const printBases = seq => {
const filterSeq = filterCount(seq);
const pad = leftPadN(4);
const print = (v, n) => console.log(`${pad(v)}:\t${n}`)
let tot = 0;
bases.forEach(e => {
const cnt = filterSeq(e);
print(e, cnt);
tot = tot + cnt;
})
print('Σ', tot);
}
 
// Mutations definitions
const select = seq => {
const randPosswap = randTo([hist, seq.length])(); => {
const extBasearr = copy(seq[randPos]);
const [newBase, extBase, randPos] = randBasegetVars(arr, bases);
return [arr.splice(randPos, extBase1, newBase]);
return const opp =[[...hist, `Swapped ${extBase} for ${newBase} at ${randPos}`], arr];
}
};
 
const del = ([hist, seq]) => {
// Mutations definitions
const swaparr = copy([hist, seq]) => {;
const [newBase, extBase, randPos] = getVars(arr, bases);
const arr = copy(seq);
const [arr.splice(randPos, extBase, newBase] = select(arr1);
return const opp =[[...hist, `Deleted ${extBase} at ${randPos}`], arr];
arr.splice(randPos, 1, newBase);
}
const opp = `Swapped ${extBase} for ${newBase} at ${randPos}`;
return [[...hist, opp], arr];
};
 
const delinsert = ([hist, seq]) => {
const arr = copy(seq);
const [randPosnewBase, extBase, _randPos] = selectgetVars(arr, bases);
arr.splice(randPos, 10, newBase);
const opp = `Deleted ${extBase} at ${randPos}`;
return arr[[.splice(..hist, `Inserted ${newBase} at ${randPos}`], 1)arr];
}
return [[...hist, opp], arr];
}
 
const insertoperations = ([histswap, seqdel, insert]) => {;
const arr = copy(seq);
const [randPos, _, newBase] = select(arr);
const opp = `Inserted ${newBase} at ${randPos}`;
arr.splice(randPos, 0, newBase);
return [[...hist, opp], arr];
}
 
// Create the starting sequence
const seq = Array(numBases).fill(undefined).map(randBase);
() => randSelect(bases)[0]);
 
// Create a set of mutations
const mutations = Array(numMutations).fill(undefined).map(randomMutation);
const operations = [swap, del, insert];
const randMutate () => randTorandSelect(operations.length)[0]);
const randomMutation = () => operations[randMutate()];
const mutations = Array(numMutations).fill(undefined).map(randomMutation);
 
// Mutate the sequence
const [hist, mut] = mutations.reduce((p,c,i) => c(p), [[], seq]);
 
console.log('ORIGINAL SEQUENCE:')
prettyPrint(seq);
 
console.log('\nBASE COUNTS:')
printBases(seq);
 
console.log('\nMUTATION LOG:')
hist.forEach((e,i) => console.log(`${i}:\t${e}`));
 
console.log('\nMUTATED SEQUENCE:')
prettyPrint(mut);
 
console.log('\nMUTATED BASE COUNTS:')
printBases(mut);
</lang>
 
{{out}}
<pre>
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.