|
67
|
1 import json
|
|
|
2 import logging
|
|
|
3 import codecs
|
|
|
4
|
|
|
5
|
|
|
6 # Internal dependencies
|
|
|
7 from datatypes.binary.Bam import Bam
|
|
|
8 from datatypes.binary.BigWig import BigWig
|
|
|
9 from datatypes.binary.BigBed import BigBed
|
|
|
10 from datatypes.interval.Bed import Bed
|
|
|
11 from datatypes.interval.BedSimpleRepeats import BedSimpleRepeats
|
|
|
12 from datatypes.interval.BedSpliceJunctions import BedSpliceJunctions
|
|
|
13 from datatypes.interval.CytoBand import CytoBand
|
|
|
14 from datatypes.interval.BedBlatAlignments import BedBlatAlignments
|
|
|
15 from datatypes.interval.BedBlastAlignments import BedBlastAlignments
|
|
|
16 from datatypes.interval.Gff3 import Gff3
|
|
|
17 from datatypes.interval.Gtf import Gtf
|
|
|
18 from datatypes.interval.Psl import Psl
|
|
|
19 from datatypes.sequence.Fasta import Fasta
|
|
|
20 from util import santitizer
|
|
|
21
|
|
|
22 class Reader(object):
|
|
|
23
|
|
|
24 DATATYPE_CLASS = [Bam, BigWig, BigBed, Bed, BedSimpleRepeats, BedSpliceJunctions, CytoBand, BedBlatAlignments, BedBlastAlignments, Gff3, Gtf, Psl, Fasta]
|
|
|
25
|
|
|
26 def __init__(self, input_json_file):
|
|
|
27 self.inputFile = input_json_file
|
|
|
28 self.args = self.loadJson()
|
|
|
29
|
|
|
30
|
|
|
31 def loadJson(self):
|
|
|
32 try:
|
|
|
33 data_file = codecs.open(self.inputFile, 'r', 'utf-8')
|
|
|
34 return json.load(data_file)
|
|
|
35 except IOError:
|
|
|
36 print "Cannot find JSON file\n"
|
|
|
37 exit(1)
|
|
|
38
|
|
|
39 def getToolDir(self):
|
|
|
40 try:
|
|
|
41 return self.args["tool_directory"]
|
|
|
42 except KeyError:
|
|
|
43 print ("tool_directory is not defined in the input file!")
|
|
|
44 exit(1)
|
|
|
45
|
|
|
46 def getExtFilesPath(self):
|
|
|
47 try:
|
|
|
48 return self.args["extra_files_path"]
|
|
|
49 except KeyError:
|
|
|
50 print ("extra_files_path is not defined in the input file!")
|
|
|
51 exit(1)
|
|
|
52
|
|
|
53 def getUserEmail(self):
|
|
|
54 try:
|
|
|
55 return self.args["user_email"]
|
|
|
56 except KeyError:
|
|
|
57 print ("user_email is not defined in the input file!")
|
|
|
58 exit(1)
|
|
|
59
|
|
|
60 def getDebugMode(self):
|
|
|
61 try:
|
|
|
62 return self.args["debug_mode"]
|
|
|
63 except KeyError:
|
|
|
64 print ("debug_mode is not defined in the input file!")
|
|
|
65 exit(1)
|
|
|
66
|
|
|
67
|
|
|
68 def getRefGenome(self):
|
|
|
69 array_inputs_reference_genome = self.args["fasta"]
|
|
|
70 # TODO: Replace these with the object Fasta
|
|
|
71 input_fasta_file = array_inputs_reference_genome["false_path"]
|
|
|
72 input_fasta_file_name = santitizer.sanitize_name_input(array_inputs_reference_genome["name"])
|
|
|
73 genome_name = santitizer.sanitize_name_input(self.args["genome_name"])
|
|
|
74 reference_genome = Fasta(input_fasta_file,
|
|
|
75 input_fasta_file_name, genome_name)
|
|
|
76 return reference_genome
|
|
|
77
|
|
|
78
|
|
|
79 def getTracksData(self):
|
|
|
80 self.logger = logging.getLogger(__name__)
|
|
|
81 all_datatype_dictionary = dict()
|
|
|
82 for datatype in self.DATATYPE_CLASS:
|
|
|
83 class_name = datatype.__name__
|
|
|
84 array_inputs = self.args.get(str(class_name))
|
|
|
85 if array_inputs:
|
|
|
86 self.logger.debug("Create %s objects\n", class_name)
|
|
|
87 self.logger.debug("array_inputs: %s", array_inputs)
|
|
|
88 all_datatype_dictionary.update(self.create_ordered_datatype_objects(datatype, array_inputs))
|
|
|
89
|
|
|
90 return all_datatype_dictionary
|
|
|
91
|
|
|
92 def create_ordered_datatype_objects(self, ExtensionClass, array_inputs):
|
|
|
93 """
|
|
|
94 Function which executes the creation all the necessary files / folders for a special Datatype, for TrackHub
|
|
|
95 and update the dictionary of datatype
|
|
|
96
|
|
|
97 :param ExtensionClass:
|
|
|
98 :param array_inputs:
|
|
|
99 :type ExtensionClass: Datatype
|
|
|
100 :type array_inputs: list[string]
|
|
|
101 """
|
|
|
102
|
|
|
103 datatype_dictionary = {}
|
|
|
104
|
|
|
105 # TODO: Optimize this double loop
|
|
|
106 for input_data in array_inputs:
|
|
|
107 input_false_path = input_data["false_path"]
|
|
|
108 santitizer.sanitize_name_input(input_data["name"])
|
|
|
109 extensionObject = ExtensionClass(input_false_path, input_data)
|
|
|
110 extensionObject.generateCustomTrack()
|
|
|
111 datatype_dictionary.update({input_data["order_index"]: extensionObject})
|
|
|
112 return datatype_dictionary
|
|
|
113
|
|
|
114
|
|
|
115
|
|
|
116
|
|
|
117
|