2f27aa530e1c46d8b8696ea46d00e34764c5d027
kent
  Tue Jun 16 14:44:34 2015 -0700
Fixing crash on fetching ctgPos2 features.

diff --git src/hg/das/das.c src/hg/das/das.c
index 2865029..68f3102 100644
--- src/hg/das/das.c
+++ src/hg/das/das.c
@@ -832,46 +832,57 @@
 printf(" <END>%d</END>\n", end);
 printf(" <SCORE>%s</SCORE>\n", score);
 printf(" <ORIENTATION>%c</ORIENTATION>\n", dasStrand(strand[0]));
 printf(" <PHASE>-</PHASE>\n");
 printf(" <GROUP id=\"%s.%s.%d\">\n", name, chrom, start);
 printf("  <LINK href=\"http://genome.ucsc.edu/cgi-bin/hgTracks?position=%s:%d-%d&amp;db=%s\">Link to UCSC Browser</LINK>\n", 
     chrom, start, end, database);
 printf(" </GROUP>\n");
 printf("</FEATURE>\n");
 }
 
 static void dasOutBedSegment(struct sqlResult *sr, int rowOffset, char *table, struct tableDef *td, struct trackTable *tt)
 /* output BEDs and BED like tables resulting from query */
 {
 char **row;
+
+/* Get offset of standard bed fields.  For compatibility revert to standard positions if not 
+ * found */
+int chromIx = sqlFieldColumn(sr, "chrom");
+if (chromIx < 0) chromIx = rowOffset + 0;
+int chromStartIx = sqlFieldColumn(sr, "chromStart");
+if (chromStartIx < 0) chromStartIx = rowOffset + 1;
+int chromEndIx = sqlFieldColumn(sr, "chromEnd");
+if (chromEndIx < 0) chromEndIx = rowOffset + 2;
+
+
 int scoreIx = sqlFieldColumn(sr, "score");
 int strandIx = sqlFieldColumn(sr, "strand");
 int nameIx = sqlFieldColumn(sr, "name");
     
 if (scoreIx == -1)
     scoreIx = sqlFieldColumn(sr, "gcPpt");
 if (scoreIx == -1)
     scoreIx = sqlFieldColumn(sr, "dataValue");  // bedGraph
 while ((row = sqlNextRow(sr)) != NULL)
     {
     char *strand = (strandIx >= 0 ? row[strandIx] : "0");
     char *score = (scoreIx >= 0 ? row[scoreIx] : "-");
     char *name = (nameIx >= 0 ? row[nameIx] : td->name);
-    dasOutBed(row[0+rowOffset], 
-              sqlUnsigned(row[1+rowOffset]), 
-              sqlUnsigned(row[2+rowOffset]), 
+    dasOutBed(row[chromIx], 
+              sqlUnsigned(row[chromStartIx]), 
+              sqlUnsigned(row[chromEndIx]), 
               name, strand, score, td, tt);
     }
 }
 
 static void writeSegmentFeaturesTable(struct segment *segment,
                                       struct tableDef *td,
                                       struct hash *trackHash,
                                       struct sqlConnection *conn)
 /* write segments features for a table */
 {
 int rowOffset;
 boolean hasBin;
 char table[HDB_MAX_TABLE_STRING];
 
 verbose(2, "track %s\n", td->name);