diff BEDTools-Version-2.14.3/src/linksBed/linksBed.cpp @ 0:dfcd8b6c1bda

Uploaded
author aaronquinlan
date Thu, 03 Nov 2011 10:25:04 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BEDTools-Version-2.14.3/src/linksBed/linksBed.cpp	Thu Nov 03 10:25:04 2011 -0400
@@ -0,0 +1,122 @@
+/*****************************************************************************
+  linksBed.cpp
+
+  (c) 2009 - Aaron Quinlan
+  Hall Laboratory
+  Department of Biochemistry and Molecular Genetics
+  University of Virginia
+  aaronquinlan@gmail.com
+
+  Licenced under the GNU General Public License 2.0 license.
+******************************************************************************/
+#include "lineFileUtilities.h"
+#include "linksBed.h"
+
+//
+// Constructor
+//
+BedLinks::BedLinks(string &bedFile, string &base, string &org, string &db) {
+    _bedFile = bedFile;
+    _bed = new BedFile(bedFile);
+
+    _base = base;
+    _org = org;
+    _db = db;
+
+    CreateLinks();
+}
+
+//
+// Destructor
+//
+BedLinks::~BedLinks(void) {
+}
+
+
+void BedLinks::WriteURL(BED &bed, string &base) {
+
+    string position = bed.chrom;
+    std::stringstream posStream;
+    posStream << ":" << bed.start << "-" << bed.end;
+    position.append(posStream.str());
+
+    cout << "<tr>" << endl;
+        cout << "\t<td>" << endl;
+            cout << "\t\t<a href=" << base << position << ">";
+            cout << bed.chrom << ":" << bed.start << "-" << bed.end;
+            cout << "</a>" << endl;
+        cout << "\t</td>" << endl;
+
+        if (_bed->bedType == 4) {
+            cout << "\t<td>" << endl;
+            cout << bed.name << endl;
+            cout << "\t</td>" << endl;
+        }
+        else if (_bed->bedType == 5) {
+            cout << "\t<td>" << endl;
+            cout << bed.name << endl;
+            cout << "\t</td>" << endl;
+
+            cout << "\t<td>" << endl;
+            cout << bed.score << endl;
+            cout << "\t</td>" << endl;
+        }
+        else if ((_bed->bedType == 6) || (_bed->bedType == 9) || (_bed->bedType == 12)) {
+            cout << "\t<td>" << endl;
+            cout << bed.name << endl;
+            cout << "\t</td>" << endl;
+
+            cout << "\t<td>" << endl;
+            cout << bed.score << endl;
+            cout << "\t</td>" << endl;
+
+            cout << "\t<td>" << endl;
+            cout << bed.strand << endl;
+            cout << "\t</td>" << endl;
+        }
+        cout << "</tr>" << endl;
+}
+
+
+void BedLinks::CreateLinks() {
+
+
+    // construct the html base.
+    string org = _org;
+    string db = _db;
+    string base = _base;
+    base.append("/cgi-bin/hgTracks?org=");
+    base.append(org);
+    base.append("&db=");
+    base.append(db);
+    base.append("&position=");
+
+    // create the HTML header
+    cout << "<html>" << endl <<"\t<body>" << endl;
+    cout << "<title>" << _bedFile << "</title>" << endl;
+
+    // start the table of entries
+    cout << "<br>Firefox users: Press and hold the \"apple\" or \"alt\" key and click link to open in new tab." << endl;
+    cout << "<p style=\"font-family:courier\">" << endl;
+    cout << "<table border=\"0\" align=\"justify\"" << endl;
+    cout << "<h3>BED Entries from: stdin </h3>" << endl;
+
+    int lineNum = 0;
+    BED bedEntry, nullBed;
+    BedLineStatus bedStatus;
+
+    _bed->Open();
+    while ((bedStatus = _bed->GetNextBed(bedEntry, lineNum)) != BED_INVALID) {
+        if (bedStatus == BED_VALID) {
+            WriteURL(bedEntry, base);
+            bedEntry = nullBed;
+        }
+    }
+    _bed->Close();
+
+    cout << "</table>" << endl;
+    cout << "</p>" << endl;
+    cout << "\t</body>" << endl <<"</html>" << endl;
+}
+
+