Skip to content

Commit

Permalink
Merge pull request #886 from chgibb/stable-staging
Browse files Browse the repository at this point in the history
Promote 0.11.0-beta.1 to Stable
  • Loading branch information
chgibb committed Aug 6, 2019
2 parents 57cd2dd + 1213c8b commit d525fcc
Show file tree
Hide file tree
Showing 10 changed files with 58 additions and 15 deletions.
1 change: 1 addition & 0 deletions .travis.yml
Expand Up @@ -12,6 +12,7 @@ addons:
- fakeroot
- gtk2.0
- rpm
- libgconf-2-4
before_install:
- npm install -g greenkeeper-lockfile
install:
Expand Down
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "phat",
"version": "0.10.1",
"version": "0.11.0-beta.1",
"description": "Pathogen Host Analysis Tool",
"main": "main.js",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion scripts/tsBundleRelease.bash
Expand Up @@ -33,7 +33,7 @@ fi
mv $1.tmp $1

if [ "$1" != "src/PileupRenderer.js" ]; then
./node_modules/uglify-es/bin/uglifyjs --compress -- $1 > $1.tmp
./node_modules/uglify-es/bin/uglifyjs --compress inline=false,reduce_vars=0,reduce_funcs=0 -- $1 > $1.tmp
if [ $? != 0 ]; then
rm $1.tmp
exit $?
Expand Down
4 changes: 3 additions & 1 deletion src/RenderCoverageTrackProcess.ts
Expand Up @@ -9,6 +9,7 @@ let contiguuid : string;
let circularFigure : cf.CircularFigure;
let colour : string;
let scaleFactor : number;
let log10Scale : boolean;

let flags : CompletionFlags = new CompletionFlags();
process.on
Expand All @@ -22,13 +23,14 @@ process.on
circularFigure = ev.data.circularFigure;
colour = ev.data.colour;
scaleFactor = ev.data.scaleFactor;
log10Scale = ev.data.log10Scale;
process.send(<AtomicOperationForkEvent>{finishedSettingData : true});
return;
}

if(ev.run == true)
{
await cf.cacheCoverageTrackTemplate(circularFigure,contiguuid,align,colour,scaleFactor);
await cf.cacheCoverageTrackTemplate(circularFigure,contiguuid,align,colour,scaleFactor,log10Scale);
let trackRecord : cf.RenderedCoverageTrackRecord = circularFigure.renderedCoverageTracks[circularFigure.renderedCoverageTracks.length - 1];
let map : cf.CoverageTrackMap = await buildCoverageTrackMap(trackRecord,circularFigure);
cf.cacheCoverageTrackPB(trackRecord,map);
Expand Down
1 change: 1 addition & 0 deletions src/req/atomicOperationsIPC.ts
Expand Up @@ -48,6 +48,7 @@ export interface AtomicOperationIPC
figure? : CircularFigure;

scaleFactor? : number;
log10Scale? : boolean;

toDock? : string;
dockTarget? : string;
Expand Down
3 changes: 2 additions & 1 deletion src/req/main/main.ts
Expand Up @@ -356,7 +356,8 @@ ipc.on(
contiguuid : arg.uuid,
alignData : alignData,
colour : arg.colour,
scaleFactor : arg.scaleFactor
scaleFactor : arg.scaleFactor,
log10Scale : arg.log10Scale
}
);
}
Expand Down
11 changes: 9 additions & 2 deletions src/req/operations/RenderCoverageTrack.ts
Expand Up @@ -13,6 +13,7 @@ export class RenderCoverageTrackForContig extends atomic.AtomicOperation
public circularFigure : cf.CircularFigure;
public colour : string;
public scaleFactor : number;
public log10Scale : boolean;
public renderCoverageTrackProcess : cp.ChildProcess;
constructor()
{
Expand All @@ -23,27 +24,33 @@ export class RenderCoverageTrackForContig extends atomic.AtomicOperation
contiguuid : string,
alignData : AlignData,
colour : string,
scaleFactor : number
scaleFactor : number,
log10Scale : boolean
}) : void
{
this.circularFigure = data.circularFigure;
this.contiguuid = data.contiguuid;
this.alignData = data.alignData;
this.colour = data.colour;
this.scaleFactor = data.scaleFactor;
this.log10Scale = data.log10Scale;
}
public run() : void
{
this.logRecord = atomic.openLog(this.name,"Render Coverage Track");
let self = this;

atomic.logString(this.logRecord,JSON.stringify(this,undefined,4));

this.renderCoverageTrackProcess = atomic.makeFork("RenderCoverageTrack.js",<AtomicOperationForkEvent>{
setData : true,
data : {
alignData : self.alignData,
contiguuid : self.contiguuid,
circularFigure : self.circularFigure,
colour : self.colour,
scaleFactor : self.scaleFactor
scaleFactor : self.scaleFactor,
log10Scale : self.log10Scale
}
},function(ev : AtomicOperationForkEvent){
if(ev.finishedSettingData == true)
Expand Down
14 changes: 14 additions & 0 deletions src/req/operations/RunAlignment/samToolsDepth.ts
Expand Up @@ -41,13 +41,19 @@ export function samToolsDepth(alignData: AlignData,logger : atomic.AtomicOperati
{
if(params.retCode == 0)
{
atomic.logString(logger.logRecord,`Finished samtools`);
setTimeout(
function(){
samToolsCoverageFileStream.end();
atomic.logString(logger.logRecord,`Starting distillation`);
let rl : readline.ReadLine = readline.createInterface(<readline.ReadLineOptions>{
input : fs.createReadStream(getCoverage(alignData))
});

atomic.logString(logger.logRecord,`Path is ${getCoverage(alignData)}`);
rl.on("line",function(line){
atomic.logString(logger.logRecord,`Got a line`);

//distill output from samtools depth into individual contig coverage files identified by uuid and without the contig name.
let coverageTokens = line.split(/\s/g);
for(let i = 0; i != alignData.fasta.contigs.length; ++i)
Expand All @@ -57,14 +63,22 @@ export function samToolsDepth(alignData: AlignData,logger : atomic.AtomicOperati
{
if(coverageTokens[k] == contigTokens[0])
{

fs.appendFileSync(getCoverageForContig(alignData,alignData.fasta.contigs[i].uuid),`${coverageTokens[k+1]} ${coverageTokens[k+2]}\n`);
}
}
}
});

rl.on("close",function(){
atomic.logString(logger.logRecord,`Distillation closed`);
resolve();
});

rl.on("error",function(err){
atomic.logString(logger.logRecord,`Distillation threw error ${err}`);
reject(err);
});
},500
);
}
Expand Down
21 changes: 15 additions & 6 deletions src/req/renderer/circularFigure.ts
Expand Up @@ -142,16 +142,19 @@ export class RenderedTrackRecord
*/
export class RenderedCoverageTrackRecord extends RenderedTrackRecord
{
scaleFactor : number;
public scaleFactor : number;
public log10Scaled : boolean;
public constructor(
uuidAlign : string,
uuidContig : string,
uuidFigure : string,
colour : string,
scaleFactor : number)
scaleFactor : number,
log10Scaled : boolean)
{
super(uuidAlign,uuidContig,uuidFigure,colour);
this.scaleFactor = scaleFactor;
this.log10Scaled = log10Scaled;
}
}

Expand Down Expand Up @@ -669,7 +672,8 @@ export async function buildCoverageTrackTemplate(
contiguuid : string,
align : AlignData,
colour : string = "rgb(64,64,64)",
scaleFactor : number = 1
scaleFactor : number = 1,
log10Scale : boolean = false
) : Promise<string>
{
return new Promise<string>((resolve,reject) => {
Expand All @@ -691,6 +695,10 @@ export async function buildCoverageTrackTemplate(
rl.on("line",function(line : string){
let tokens = line.split(/\s/g);
let depth = parseInt(tokens[1]);

if(log10Scale)
depth = Math.log10(depth);

let found = false;
for(let i = 0; i != depths.length; ++i)
{
Expand Down Expand Up @@ -766,7 +774,8 @@ export async function cacheCoverageTrackTemplate(
contiguuid : string,
align : AlignData,
colour : string = "rgb(64,64,64)",
scaleFactor : number = 1
scaleFactor : number = 1,
log10Scale : boolean = false
) : Promise<void>
{
return new Promise<void>(async (resolve,reject) => {
Expand All @@ -776,8 +785,8 @@ export async function cacheCoverageTrackTemplate(
}
catch(err){}

let coverageTracks = await buildCoverageTrackTemplate(figure,contiguuid,align,colour,scaleFactor);
let trackRecord = new RenderedCoverageTrackRecord(align.uuid,contiguuid,figure.uuid,colour,scaleFactor);
let coverageTracks = await buildCoverageTrackTemplate(figure,contiguuid,align,colour,scaleFactor,log10Scale);
let trackRecord = new RenderedCoverageTrackRecord(align.uuid,contiguuid,figure.uuid,colour,scaleFactor,log10Scale);
fs.writeFileSync(getCachedCoverageTrackTemplatePath(trackRecord),coverageTracks);
figure.renderedCoverageTracks.push(trackRecord);
resolve();
Expand Down
Expand Up @@ -56,7 +56,7 @@ export function writeAvailableTracksModal() : void
if(genomeView.genome.renderedCoverageTracks[i].uuidContig == selectedAlign.fasta.contigs[j].uuid)
{
body += `
<b>Scaled by ${genomeView.genome.renderedCoverageTracks[i].scaleFactor}</b><p id="${genomeView.genome.renderedCoverageTracks[i].uuid}Available" class="activeHover" style="color:${genomeView.genome.renderedCoverageTracks[i].colour}">${selectedAlign.fasta.contigs[j].name}</p>
<b>${genomeView.genome.renderedCoverageTracks[i].log10Scaled ? "Log10 scaled, " : ""}Scaled by ${genomeView.genome.renderedCoverageTracks[i].scaleFactor}</b><p id="${genomeView.genome.renderedCoverageTracks[i].uuid}Available" class="activeHover" style="color:${genomeView.genome.renderedCoverageTracks[i].colour}">${selectedAlign.fasta.contigs[j].name}</p>
`;
foundTrack = true;
}
Expand Down Expand Up @@ -103,6 +103,10 @@ export function writeAvailableTracksModal() : void
<input type="text" id="colourPicker" data-format="rgb" value="rgb(0, 0, 0)">
<br />
<br />
<div>
<input type="checkbox" name="log10scalecheckbox" id="log10scale">
<label for="log10scalecheckbox">Log10 Scale Before Applying Depth Scale</label>
</div>
<p>Coverage Depth Scale</p>
<input type="number" step="0.1" min="0" value="1" id="scaleFactor">
<br />
Expand Down Expand Up @@ -210,7 +214,8 @@ export function writeAvailableTracksModal() : void
alignuuid : selectedAlign.uuid,
uuid : genomeView.genome.contigs[i].uuid,
colour : (<string>(<any>$(document.getElementById("colourPicker"))).minicolors("rgbString")),
scaleFactor : parseFloat((<HTMLInputElement>document.getElementById("scaleFactor")).value)
scaleFactor : parseFloat((<HTMLInputElement>document.getElementById("scaleFactor")).value),
log10Scale : (<HTMLInputElement>document.getElementById("log10scale")).checked
}
);
}
Expand All @@ -228,7 +233,10 @@ export function writeAvailableTracksModal() : void
);
}
}
catch(err){}
catch(err)
{
console.log(err);
}
}
for(let i = 0; i != genomeView.genome.renderedCoverageTracks.length; ++i)
{
Expand Down

0 comments on commit d525fcc

Please sign in to comment.