Skip to content
Snippets Groups Projects
Commit bfbfeec3 authored by Skander Hatira's avatar Skander Hatira
Browse files

specify --nightly in jbrowse create to overcome fetching error, switch to...

specify --nightly in jbrowse create to overcome fetching error, switch to one-func to do it all for adding jbrowse tracks and limit it to one track at a time I/O bottleneck avoidance
parent 8e29fe30
No related branches found
No related tags found
No related merge requests found
// ./hooks.js
const path = require("path");
const { execSync } = require("child_process");
const { execSync, fork } = require("child_process");
const fs = require("fs");
const homedir = require("os").homedir();
const resources = path.join(__dirname, "resources");
const jbpath = path.join(homedir, ".biseps", "jbrowse2");
const jbrowse = path.join(
__dirname,
"node_modules",
"@jbrowse",
"cli",
"bin",
"run"
);
require("dotenv").config({ path: path.join(__dirname, "src/backend/.env") });
module.exports = {
generateAssets: async (forgeConfig, options) => {
fs.access(path.join(resources, "jbrowse2"), function (error) {
fs.access(jbpath, function (error) {
if (error) {
execSync(
`npx @jbrowse/cli create ${path.join(homedir, "jbrowse2")} -f`,
(error, stdout, stderr) => {
if (error) {
console.log(`error: ${error.message}`);
return;
}
if (stderr) {
console.log(`stderr: ${stderr}`);
return;
}
console.log(`stdout: ${stdout}`);
}
);
try {
fork(jbrowse, ["create", "--nightly", jbpath]);
} catch (err) {
console.log(err);
}
} else {
console.log("Jbrowse present, moving on...");
}
});
// fs.access(jbpath, function (error) {
// if (error) {
// execSync(
// `npx @jbrowse/cli create ${jbpath} -f`,
// (error, stdout, stderr) => {
// if (error) {
// console.log(`error: ${error.message}`);
// return;
// }
// if (stderr) {
// console.log(`stderr: ${stderr}`);
// return;
// }
// console.log(`stdout: ${stdout}`);
// }
// );
// } else {
// console.log("Jbrowse present, moving on...");
// }
// });
},
postStart: async (forgeConfig, options) => {},
postPackage: async (forgeConfig, options) => {},
};
......@@ -11,6 +11,8 @@ const createJbrowse = (jbPath, reset) => {
if (err) {
return console.error(err);
}
fs.rmdirSync(path.join(jbPath, "test_data"), { recursive: true });
fs.rmdirSync(path.join(jbPath, "config.json"), { recursive: true });
console.log("done!");
});
......
const spawnChild = (body) => {
const { fork } = require("child_process");
const { fork, exec } = require("child_process");
const path = require("path");
const jbrowse = path.join(
__dirname,
......@@ -10,7 +10,36 @@ const spawnChild = (body) => {
"bin",
"run"
);
async function addTrack(track) {
const keys = ["track", "cgbw", "chgbw", "chhbw", "bedbw"];
keys.forEach((key) => {
console.log(key);
child = fork(
jbrowse,
[
"add-track",
path.basename(track[key]),
"--load",
"copy",
"--assemblyNames",
track.associatedGenome,
"--out",
body.jbPath,
"--category",
`Alignment_${track.name}`,
"--name",
`${path.basename(track[key])}`,
"--subDir",
track.associatedGenome,
"--trackId",
`${track.id}_${track[key]}`,
],
{ ...options, cwd: path.dirname(track[key]) }
);
child.on("close", () => console.log("success alignment"));
});
}
const options = {
slient: false,
detached: false,
......@@ -38,171 +67,35 @@ const spawnChild = (body) => {
body.tracks != [] &&
body.tracks.forEach((track) => {
// import bam
try {
fork(
jbrowse,
[
"add-track",
path.basename(track.track),
"--load",
"copy",
"--assemblyNames",
track.associatedGenome,
"--out",
body.jbPath,
"--category",
"Alignments",
"--name",
`${track.name}_bam`,
"--subDir",
track.associatedGenome,
],
{ ...options, cwd: path.dirname(track.track) }
);
} catch (err) {
console.log(err);
}
});
body.tracks != [] &&
body.tracks.forEach((track) => {
// import bigwig_cg
try {
fork(
jbrowse,
[
"add-track",
path.basename(track.cgbw),
"--load",
"copy",
"--assemblyNames",
track.associatedGenome,
"--out",
body.jbPath,
"--category",
"Methylation Count In CG Context",
"--name",
`${track.name}_cg`,
"--subDir",
track.associatedGenome,
],
{ ...options, cwd: path.dirname(track.cgbw) }
);
} catch (err) {
console.log(err);
}
});
body.tracks != [] &&
body.tracks.forEach((track) => {
try {
// import bigwig_chg
fork(
jbrowse,
[
"add-track",
path.basename(track.chgbw),
"--load",
"copy",
"--assemblyNames",
track.associatedGenome,
"--out",
body.jbPath,
"--category",
"Methylation Count In CHG Context",
"--name",
`${track.name}_chg`,
"--subDir",
track.associatedGenome,
],
{ ...options, cwd: path.dirname(track.chgbw) }
);
} catch (err) {
console.log(err);
}
});
body.tracks != [] &&
body.tracks.forEach((track) => {
// import bigwig_chh
try {
fork(
jbrowse,
[
"add-track",
path.basename(track.chhbw),
"--load",
"copy",
"--assemblyNames",
track.associatedGenome,
"--out",
body.jbPath,
"--category",
"Methylation Count In CHH Context",
"--name",
`${track.name}_chh`,
"--subDir",
track.associatedGenome,
],
{ ...options, cwd: path.dirname(track.chhbw) }
);
} catch (err) {
console.log(err);
}
});
body.tracks != [] &&
body.tracks.forEach((track) => {
try {
// import bigwig_bedgraph
fork(
jbrowse,
[
"add-track",
path.basename(track.bedbw),
"--load",
"copy",
"--assemblyNames",
track.associatedGenome,
"--out",
body.jbPath,
"--category",
"Global Methylation Profile",
"--name",
`${track.name}_bedgraph`,
"--subDir",
track.associatedGenome,
],
{ ...options, cwd: path.dirname(track.bedbw) }
);
} catch (err) {
console.log(err);
}
addTrack(track);
});
body.comparisons != [] &&
body.comparisons.forEach((comparison) => {
// import import_bedgz and index
try {
fork(
jbrowse,
[
"add-track",
path.basename(comparison.bed),
"--load",
"copy",
"--assemblyNames",
comparison.associatedGenome,
"--out",
body.jbPath,
"--category",
"Differentially Methylated Regions",
"--name",
`${comparison.id}`,
"--subDir",
comparison.associatedGenome,
],
{ ...options, cwd: path.dirname(comparison.bed) }
);
} catch (err) {
console.log(err);
}
child = fork(
jbrowse,
[
"add-track",
path.basename(comparison.bed),
"--load",
"copy",
"--assemblyNames",
comparison.associatedGenome,
"--out",
body.jbPath,
"--category",
"Differentially Methylated Regions",
"--name",
`${comparison.id}`,
"--subDir",
comparison.associatedGenome,
],
{ ...options, cwd: path.dirname(comparison.bed) }
);
child.on("close", () => console.log("success comparisons"));
});
};
module.exports = spawnChild;
......@@ -52,6 +52,9 @@ export default function VisualizationFill() {
const [checkedComp, setCheckedComp] = useState([]);
const [checkedTrack, setCheckedTrack] = useState([]);
const [refresh, setRefresh] = useState(0);
const [onSelected, setOnSelect] = useState(null);
const [onSelectedComp, setOnSelectComp] = useState(null);
const { loading, setLoading } = useDownloads();
const [openAlert, setOpenAlert] = useState(false);
const [errors, setErrors] = useState("");
......@@ -88,8 +91,10 @@ export default function VisualizationFill() {
id,
name,
});
setOnSelect(id);
} else {
newChecked.splice(currentIndex, 1);
setOnSelect(null);
}
setCheckedTrack(newChecked);
......@@ -106,7 +111,7 @@ export default function VisualizationFill() {
const handleToggleComp = (bed, bedtbi, associatedGenome, id) => () => {
const currentIndex = checkedComp.findIndex((x) => x.id === id);
const newChecked = [...checkedComp];
console.log(id);
if (currentIndex === -1) {
newChecked.push({
bed,
......@@ -114,10 +119,11 @@ export default function VisualizationFill() {
associatedGenome,
id,
});
setOnSelectComp(id);
} else {
newChecked.splice(currentIndex, 1);
setOnSelectComp(null);
}
setCheckedComp(newChecked);
};
......@@ -572,7 +578,12 @@ export default function VisualizationFill() {
key={`${sample._id}-${idx}`}
button
disabled={
sampleExist && !dedupExist && genomEist ? false : true
!(onSelected && onSelected !== sample._id) &&
sampleExist &&
!dedupExist &&
genomEist
? false
: true
}
onClick={handleToggleTrack(
row.remote ? samplePathLocal : samplePath,
......@@ -702,6 +713,10 @@ export default function VisualizationFill() {
key={`${comparison._id}-${idx}-${context}`}
button
disabled={
!(
onSelectedComp &&
onSelectedComp !== `${comparison.id}-${context}`
) &&
fileExist(row.remote ? bedPathLocal : bed) &&
!debExist &&
genomExist
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment