Skip to content

Commit 229e7df

Browse files
committed
add "setColor" and "setAltColor" batch commands. Fixes igvteam#993
1 parent 25fa2e0 commit 229e7df

File tree

3 files changed

+48
-8
lines changed

3 files changed

+48
-8
lines changed

src/main/java/org/broad/igv/batch/CommandExecutor.java

+37-7
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.broad.igv.track.RegionScoreType;
5050
import org.broad.igv.track.Track;
5151
import org.broad.igv.ui.IGV;
52+
import org.broad.igv.ui.color.ColorUtilities;
5253
import org.broad.igv.ui.panel.FrameManager;
5354
import org.broad.igv.ui.util.MessageUtils;
5455
import org.broad.igv.ui.util.SnapshotUtilities;
@@ -166,6 +167,10 @@ public String execute(String command) {
166167
result = this.setDataRange(param1, param2);
167168
} else if (cmd.equalsIgnoreCase("setLogScale")) {
168169
result = this.setLogScale(param1, param2);
170+
} else if (cmd.equalsIgnoreCase("setColor")) {
171+
result = this.setColor(param1, param2, false);
172+
} else if (cmd.equalsIgnoreCase("setAltColor")) {
173+
result = this.setColor(param1, param2, true);
169174
} else if (cmd.equalsIgnoreCase("maxpanelheight") && param1 != null) {
170175
return setMaxPanelHeight(param1);
171176
} else if (cmd.equalsIgnoreCase("tofront")) {
@@ -299,7 +304,7 @@ private String setDataRange(String dataRangeString, String trackName) {
299304
(dataRangeString.trim().equalsIgnoreCase("auto") ||
300305
dataRangeString.trim().equalsIgnoreCase("autoscale"));
301306

302-
if(!autoscale) {
307+
if (!autoscale) {
303308
try {
304309
if (tokens.length == 2) {
305310
range = new DataRange(Float.parseFloat(tokens[0]), Float.parseFloat(tokens[1]));
@@ -318,7 +323,7 @@ private String setDataRange(String dataRangeString, String trackName) {
318323

319324
for (Track track : tracks) {
320325
if (trackName == null || trackName.equalsIgnoreCase(track.getName())) {
321-
if(!autoscale) track.setDataRange(range);
326+
if (!autoscale) track.setDataRange(range);
322327
track.setAutoScale(autoscale);
323328
}
324329
}
@@ -352,6 +357,32 @@ private String setLogScale(String logScaleString, String trackName) {
352357
return "OK";
353358
}
354359

360+
private String setColor(String colorString, String trackName, boolean alt) {
361+
362+
try {
363+
Color color = ColorUtilities.stringToColorNoDefault(colorString);
364+
if (color == null) {
365+
return "Error: unrecognized color value " + colorString;
366+
}
367+
List<Track> tracks = igv.getAllTracks();
368+
List<Track> affectedTracks = new ArrayList<>();
369+
for (Track track : tracks) {
370+
if (trackName == null || trackName.equalsIgnoreCase(track.getName())) {
371+
if (alt) track.setAltColor(color);
372+
} else {
373+
track.setColor(color);
374+
}
375+
affectedTracks.add(track);
376+
}
377+
igv.repaint(affectedTracks);
378+
return "OK";
379+
} catch (Exception e) {
380+
return "Error setting track color: " + e.getMessage();
381+
}
382+
383+
384+
}
385+
355386
private String setViewAsPairs(String vAPString, String trackName) {
356387
List<Track> tracks = igv.getAllTracks();
357388
boolean vAP = "false".equalsIgnoreCase(vAPString) ? false : true;
@@ -687,7 +718,7 @@ String loadFiles(final String fileString,
687718

688719
if (names != null) {
689720
rl.setName(names.get(fi));
690-
} else if(isDataURL) {
721+
} else if (isDataURL) {
691722
rl.setName("Data");
692723
}
693724
if (indexFiles != null) {
@@ -1016,20 +1047,19 @@ private String createSnapshot(String filename, String region) {
10161047

10171048
private String saveSession(String filename) {
10181049
Session currentSession = igv.getSession();
1019-
if(!filename.endsWith(".xml")) {
1050+
if (!filename.endsWith(".xml")) {
10201051
filename = filename + ".xml";
10211052
}
10221053
File targetFile = new File(filename);
1023-
if(targetFile.getParentFile().exists()) {
1054+
if (targetFile.getParentFile().exists()) {
10241055
currentSession.setPath(targetFile.getAbsolutePath());
10251056
try {
10261057
(new SessionWriter()).saveSession(currentSession, targetFile);
10271058
return "OK";
10281059
} catch (Exception e) {
10291060
return "Error writingin sesssion: " + e.getMessage();
10301061
}
1031-
}
1032-
else {
1062+
} else {
10331063
return "Error: directory not found: " + targetFile.getParentFile().getAbsolutePath();
10341064
}
10351065
}

src/main/java/org/broad/igv/ui/color/ColorUtilities.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ public static Color stringToColor(String string, Color defaultColor) {
197197
}
198198
}
199199

200-
private static Color stringToColorNoDefault(String string) throws NumberFormatException {
200+
public static Color stringToColorNoDefault(String string) throws NumberFormatException {
201201
// Excel will quote color strings, strip all quotes
202202
string = string.replace("\"", "").replace("'", "");
203203

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
snapshotDirectory test/data/batch/snapshots/multiple_bams
2+
new
3+
genome hg19
4+
preference SAM.SHOW_ALIGNMENT_TRACK false
5+
load gs://genomics-public-data/platinum-genomes/bam/NA12877_S1.bam
6+
load gs://genomics-public-data/platinum-genomes/bam/NA12878_S1.bam
7+
goto myc
8+
setColor 255,0,0 "NA12877_S1.bam Coverage"
9+
setColor 255,255,0 "NA12878_S1.bam Coverage"
10+
snapshot

0 commit comments

Comments
 (0)