HACKISH: Display chipseq peak window track
authorBrandon King <kingb@caltech.edu>
Fri, 10 Aug 2007 21:12:28 +0000 (21:12 +0000)
committerBrandon King <kingb@caltech.edu>
Fri, 10 Aug 2007 21:12:28 +0000 (21:12 +0000)
 * Displays chipseq peak windows when annotation is
   of type 'chipseq_peak_window'.
 * FIXME: A more proper implementation will be needed
   in the future.

alg/glseqbrowser.cpp
alg/glsequence.cpp
alg/glsequence.hpp

index df9462618b119f56c704a234a059d184ef2c8a4a..d3cd24ec376ca49f06d927d793bcc22f6775a00d 100644 (file)
@@ -360,8 +360,12 @@ void GlSeqBrowser::push_sequence(GlSequence gs)
 void GlSeqBrowser::push_sequence(GlSequenceRef gs)
 {
   ColorRef default_color(GlSequence::default_gene_color());
+  ColorRef default_chipseq_color(GlSequence::default_chipseq_color());
   GlSequenceRef new_gs(new GlSequence(gs));
   new_gs->update_annotation_draw_function("gene", draw_narrow_track, default_color);
+  new_gs->update_annotation_draw_function("chipseq_peak_window",
+                                          draw_chipseq_window,
+                                          default_chipseq_color);
   // mark where the sequence is
   new_gs->add_annotations_for_defined_sequence(draw_summarized_track);
   
index 708a53ad32a76bc36ba54d1d29d0460c9af9b0b3..69a327e835f8246817fb911c084eb3f510a0b954 100644 (file)
@@ -278,6 +278,15 @@ ColorRef GlSequence::default_track_color()
   return default_color;
 }
 
+ColorRef GlSequence::default_chipseq_color()
+{
+  static ColorRef default_color;
+  if (not default_color) {
+    default_color.reset(new Color(1.0, 0.5, 0.0));
+  }
+  return default_color;
+}
+
 int GlSequence::get_viewport_width_in_pixels()
 {
   GLint viewport[4];
@@ -523,6 +532,22 @@ void draw_narrow_track(SeqSpanRef s, float left, float right)
                        hsmall, y, z+10);
 }
 
+void draw_chipseq_window(SeqSpanRef s, float left, float right)
+{
+  SeqSpanRef parent(s->parent());
+  DrawableRef parent_draw(parent->drawable());
+  float x( (parent_draw) ? parent_draw->x() : 0);
+  float y( (parent_draw) ? parent_draw->y() : 0);
+  float z( (parent_draw) ? parent_draw->z() : 10 );
+  float height( (parent_draw) ? parent_draw->height() : default_height ); 
+  Color c( (s->drawable()) ? s->drawable()->color() : *GlSequence::default_track_color() );
+  glColor3fv(c.get());
+  
+  float hsmall = height * 2.0;
+  GlSequence::draw_box(left, right, x+s->start(), x+s->stop(), 
+                       hsmall, y, z+9.0);
+}
+
 void draw_summarized_track(SeqSpanRef s, float left, float right)
 {
   // if we can see the sequence text (AGCTN), don't draw the black boxes
index 8243640ae19544b9b8e2dd1d241e466d84a33050..e486ca79e8096c61c0d2d45ef69e05091b0c5ba8 100644 (file)
@@ -68,6 +68,8 @@ public:
   static ColorRef default_gene_color();
   //! return default track color
   static ColorRef default_track_color();
+  //! return default chipseq color
+  static ColorRef default_chipseq_color();
   
   //! return our annotation color mapper
   AnnotationColorsRef colorMapper() { return color_mapper; }
@@ -148,4 +150,6 @@ protected:
 void draw_summarized_track(SeqSpanRef ref, float left, float right);
 //! draw a 1/4 width centered track 
 void draw_narrow_track(SeqSpanRef ref, float left, float right);
+//! draw a chipseq peak window track 
+void draw_chipseq_window(SeqSpanRef ref, float left, float right);
 #endif