diff TrackHub.py @ 7:5d5fdcb798da draft

planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit 12fb52d5b285935b2353d93a5aa291838df7893e
author yating-l
date Fri, 20 Apr 2018 13:51:23 -0400
parents 237707a6b74d
children 43a700afd457
line wrap: on
line diff
--- a/TrackHub.py	Thu Feb 15 17:05:05 2018 -0500
+++ b/TrackHub.py	Fri Apr 20 13:51:23 2018 -0400
@@ -17,14 +17,15 @@
 
 class TrackHub:
     def __init__(self, inputFastaFile, outputFile, extra_files_path, tool_directory, trackType):
-        
-        self.rootAssemblyHub = None
 
         self.mySpecieFolderPath = None
 
         # Store intermediate files, will be removed if not in debug mode
         self.myTracksFolderPath = None
 
+        # Store interval files and their tabix index
+        self.myFinalTracksFolderPath = None
+
         # Store binary files: Bam, BigWig
         self.myBinaryFolderPath = None
 
@@ -38,43 +39,41 @@
 
         
         # Set all the missing variables of this class, and create physically the folders/files
-        self.rootAssemblyHub = self.__createAssemblyHub__(extra_files_path=extra_files_path)
+        self.__createAssemblyHub__(extra_files_path=extra_files_path)
         # Init the Datatype 
         Datatype.pre_init(self.reference_genome, self.chromSizesFile,
                           self.extra_files_path, self.tool_directory,
-                          self.mySpecieFolderPath, self.myTracksFolderPath, self.myBinaryFolderPath, self.trackType)  
+                          self.mySpecieFolderPath, self.myTracksFolderPath, self.myBinaryFolderPath, self.trackType)
 
         self._prepareRefseq()
         self.trackList = os.path.join(self.mySpecieFolderPath, "trackList.json")
         self._createTrackList()
-        
-        self.myTrackStyle = TrackStyles(self.tool_directory, self.mySpecieFolderPath, self.trackList)
-        #self.cssFolderPath = os.path.join(self.mySpecieFolderPath, 'css')
-        #self.cssFilePath = os.path.join(self.cssFolderPath, 'custom_track_styles.css')
+        if Datatype.trackType == 'HTMLFeatures':
+            self.myTrackStyle = TrackStyles(self.tool_directory, self.mySpecieFolderPath, self.trackList)
         self.logger = logging.getLogger(__name__)
 
     
 
     def addTrack(self, trackDbObject):
         if trackDbObject['dataType'].lower() == 'bam':
-            #new_track = subprocess.Popen(['echo', trackDbObject['options']], stdout=subprocess.PIPE)
-            #subprocess.call(['add-track-json.pl', json_file], stdin=new_track.stdout)
             subtools.add_track_json(self.trackList, trackDbObject['options'])
-            #subtools.add_track_json(self.trackList, trackDbObject['track_json'])
         elif trackDbObject['dataType'].lower() == 'bigwig':
             subtools.add_track_json(self.trackList, trackDbObject['options'])
         else: 
             if trackDbObject['trackType'] == 'HTMLFeatures':
                 self._customizeHTMLFeature(trackDbObject)
-            subtools.flatfile_to_json(trackDbObject['trackDataURL'], trackDbObject['dataType'], trackDbObject['trackType'], trackDbObject['trackLabel'], self.mySpecieFolderPath, trackDbObject['options'])
+                subtools.flatfile_to_json(trackDbObject['trackDataURL'], trackDbObject['dataType'], trackDbObject['trackType'], trackDbObject['trackLabel'], self.mySpecieFolderPath, trackDbObject['options'])
+            # Use Tabix index tracks by default for CanvasFeatures
+            # TODO: add support for HTMLFeatures
+            else:
+                subtools.generate_tabix_indexed_track(trackDbObject['trackDataURL'], trackDbObject['dataType'], trackDbObject['track'], self.myFinalTracksFolderPath)
+                subtools.add_track_json(self.trackList, trackDbObject['options'])
 
-
-    def terminate(self, debug=False):
+    def terminate(self, debug="false"):
         """ Write html file """
         self._indexName()
-        if not debug:
+        if debug.lower() == "false":
             self._removeRaw()
-        #self._makeArchive()
         self._outHtml()
         print "Success!\n"
 
@@ -103,14 +102,8 @@
 
     def _prepareRefseq(self):
         subtools.prepare_refseqs(self.reference_genome.false_path, self.mySpecieFolderPath)
-        #try:
-            #print os.path.join(self.tool_dir, 'prepare-refseqs.pl') + ", '--fasta', " + self.reference +", '--out', self.json])"
-            #subprocess.call(['prepare-refseqs.pl', '--fasta', self.reference_genome.false_path, '--out', self.mySpecieFolderPath])
-        #except OSError as e:
-            #print "Cannot prepare reference error({0}): {1}".format(e.errno, e.strerror)
 
     def _indexName(self):
-        #subprocess.call(['generate-names.pl', '-v', '--out', self.mySpecieFolderPath])
         subtools.generate_names(self.mySpecieFolderPath)
         print "finished name index \n"
 
@@ -121,25 +114,14 @@
 
         with open(self.outputFile, 'w') as htmlfile:
             htmlMakoRendered = htmlTemplate.render(
-            species_folder = os.path.relpath(self.mySpecieFolderPath, self.extra_files_path),
+            jbrowse_hub_name = self.reference_genome.assembly_id,
             trackList = os.path.relpath(self.trackList, self.extra_files_path)
         )
             htmlfile.write(htmlMakoRendered)
-        #with open(self.outputFile, 'w') as htmlfile:
-        #    htmlstr = 'The new Organism "%s" is created on Apollo: <br>' % self.genome_name
-        #    jbrowse_hub = '<li><a href = "%s" target="_blank">View JBrowse Hub on Apollo</a></li>' % host_name
-        #    htmlstr += jbrowse_hub
-        #    htmlfile.write(htmlstr)   
-          
-
 
     def __createAssemblyHub__(self, extra_files_path):
         # Get all necessaries infos first
         # 2bit file creation from input fasta
-
-        # baseNameFasta = os.path.basename(fasta_file_name)
-        # suffixTwoBit, extensionTwoBit = os.path.splitext(baseNameFasta)
-        # nameTwoBit = suffixTwoBit + '.2bit'
         twoBitFile = tempfile.NamedTemporaryFile(bufsize=0)
         subtools.faToTwoBit(self.reference_genome.false_path, twoBitFile.name)
 
@@ -149,40 +131,32 @@
 
         # Then we get the output to generate the chromSizes
         self.chromSizesFile = tempfile.NamedTemporaryFile(bufsize=0, suffix=".chrom.sizes")
-        subtools.sortChromSizes(twoBitInfoFile.name, self.chromSizesFile.name) 
+        subtools.sortChromSizes(twoBitInfoFile.name, self.chromSizesFile.name)
 
         # We can get the biggest scaffold here, with chromSizesFile
         with open(self.chromSizesFile.name, 'r') as chrom_sizes:
             # TODO: Check if exists
             self.default_pos = chrom_sizes.readline().split()[0]
 
-        # TODO: Manage to put every fill Function in a file dedicated for reading reasons
-        # Create the root directory
-        myHubPath = os.path.join(extra_files_path, "myHub")
-        if not os.path.exists(myHubPath):
-            os.makedirs(myHubPath)
-
-        # Create the specie folder
-        # TODO: Generate the name depending on the specie
-        mySpecieFolderPath = os.path.join(myHubPath, self.genome_name)
+        # Create the specie folder, use generic name "myHub", to support display JBrowse with Galaxy display application
+        mySpecieFolderPath = os.path.join(extra_files_path, "myHub")
         if not os.path.exists(mySpecieFolderPath):
             os.makedirs(mySpecieFolderPath)
         self.mySpecieFolderPath = mySpecieFolderPath
 
-        # We create the 2bit file while we just created the specie folder
-        #self.twoBitName = self.genome_name + ".2bit"
-        #self.two_bit_final_path = os.path.join(self.mySpecieFolderPath, self.twoBitName)
-        #shutil.copyfile(twoBitFile.name, self.two_bit_final_path)
-
-        # Create the folder tracks into the specie folder
+        # Create the folder named 'raw' inside the specie folder to place raw files
         tracksFolderPath = os.path.join(mySpecieFolderPath, "raw")
         if not os.path.exists(tracksFolderPath):
             os.makedirs(tracksFolderPath)
         self.myTracksFolderPath = tracksFolderPath
 
+        # Create the folder tracks into the specie folder
+        finalTracksFolderPath = os.path.join(mySpecieFolderPath, "tracks")
+        if not os.path.exists(finalTracksFolderPath):
+            os.makedirs(finalTracksFolderPath)
+        self.myFinalTracksFolderPath = finalTracksFolderPath
+
         myBinaryFolderPath = os.path.join(mySpecieFolderPath, 'bbi')
         if not os.path.exists(myBinaryFolderPath):
             os.makedirs(myBinaryFolderPath)
         self.myBinaryFolderPath = myBinaryFolderPath
-
-        return myHubPath