def pergola_rules(path, map_file_path, sel_tracks=None, list=None, range=None, track_actions=None, data_types_actions=None, data_types_list=None, write_format=None, relative_coord=False, intervals_gen=False, multiply_f=None, no_header=False, fields2read=None, window_size=None, no_track_line=False, separator=None, bed_lab_sw=False, color_dict=None, window_mean=False, value_mean=False, min_t=None, max_t=None, interval_step=None): print >> stderr, "@@@Pergola_rules.py: Input file: %s" % path print >> stderr, "@@@Pergola_rules.py: Configuration file: %s" % map_file_path # Tracks selected by user print >> stderr, "@@@Pergola_rules.py: Selected tracks are: ", sel_tracks # Configuration file map_file_dict = mapping.MappingInfo(map_file_path) # Reading color dictionary to set data_types if color_dict: print >> stderr, "@@@Pergola_rules.py: Color for data_types in file............ %s" % color_dict d_colors_data_types = parsers.read_colors (color_dict) else: d_colors_data_types = None # Handling list or range of tracks to join if set if list and range: raise ValueError("@@@Pergola_rules.py: Argument -l/--list and -r/--range are not compatible. " \ "As both arguments set tracks to be joined.") elif (list): tracks2merge = list elif (range): tracks2merge = range else: tracks2merge = "" if tracks2merge: print >> stderr, "@@@Pergola_rules.py: Tracks to join are............ ", tracks2merge # Handling argument track actions if tracks2merge and track_actions: raise ValueError ("Options --list -l or --range -r are incompatible with " \ "--track_actions -a, please change your options") track_act = track_actions print >> stderr, "@@@Pergola_rules.py: Track actions are.............................. ", track_act data_types_list = data_types_list print >> stderr, "@@@Pergola_rules.py: data_types list is: ", data_types_list # Handling argument data_types actions data_types_act = data_types_actions print >> stderr, "@@@Pergola_rules.py: data_types actions are......................... ", data_types_act # Handling argument format if write_format: print >> stderr, "@@@Pergola_rules.py format to write files....................... ", write_format else: write_format = 'bed' print >>stderr, "@@@Pergola_rules.py format to write files has been set" \ " to default value:", write_format # Handling relative coordinates print >> stderr, "@@@Pergola_rules.py: Relative coordinates set to................. %s" % relative_coord # Handling intervals_gen print >> stderr, "@@@Pergola_rules.py: Intervals parameter set to.................. %s" % intervals_gen # Handling interval_step if interval_step: if intervals_gen: print >> stderr, "@@@Pergola_rules.py: Interval step set to........................ %s" % interval_step else: raise ValueError("Interval step needs intervals paramater to be set -n/--intervals_gen") # Handling multiply_intervals if multiply_f: print >>stderr, "@@@Pergola_rules.py: Multiply intervals parameter set to...... %s" % multiply_f else: multiply_f = 1 print >> stderr, "@@@Pergola_rules.py: Selected tracks are......................... ", sel_tracks # Setting whether input file has header or not header_sw = True if no_header: header_sw = False print >> stderr, "@@@Pergola_rules.py: Data file has header set to............. ", header_sw # Handling fields to read if fields2read: print >>stderr, "@@@Pergola_rules.py: Fields to read from the file are......... %s" % fields2read else: fields2read = None # When binning data setting the window of time used in seconds # if not size provided set to False if window_size: print >>stderr, "@@@Pergola_rules.py: Window size set to....................... %d" % window_size else: # window_size = 300 window_size = False print >>stderr, "@@@Pergola_rules.py: Window size set by default to............ %d" % window_size if window_mean: print >>stderr, "@@@Pergola_rules.py: Window mean set to....................... %d" % window_mean else: window_mean = False if value_mean: print >> stderr, "@@@Pergola_rules.py: Value mean set to....................... %d" % value_mean else: value_mean = False if no_track_line: track_line=False else: track_line=True print >>stderr, "@@@Pergola_rules.py: track_line set to............................ %s" % track_line # Handling input file field delimiter if not separator: separator = "\t" print >> stderr, "@@@Pergola_rules.py input file field separator set by default to...... \"\\t\"." else: print >>stderr, "@@@Pergola_rules.py input file field separator set to..... \"%s\"" % separator if bed_lab_sw: bed_lab = True print >>stderr, "@@@Pergola_rules.py: bed_label set to......................... %s" % bed_lab else: bed_lab = False intData = intervals.IntData(path, map_dict=map_file_dict.correspondence, fields_names=fields2read, header=header_sw, delimiter=separator) start = intData.min end = intData.max if relative_coord: start = 0 end = intData.max - intData.min print >> stderr, "@@@Pergola_rules.py: min time in file......................... %d" % start print >> stderr, "@@@Pergola_rules.py: max time in file......................... %d" % end if min_t or min_t == 0: min_time = min_t print >> stderr, "@@@Pergola_rules.py: min_time set by user to.............. %d" % min_t else: min_time = start if max_t: max_time = max_t print >> stderr, "@@@Pergola_rules.py: max_time set by user to............... %d" % max_t else: if interval_step: max_time = end + interval_step else: max_time = end + 1 if multiply_f: min_time = min_time * multiply_f max_time = max_time * multiply_f if track_act: tracks2merge = parsers.read_track_actions(tracks=intData.tracks, track_action=track_act) data_read = intData.read(relative_coord=relative_coord, intervals=intervals_gen, multiply_t=multiply_f, min_time=min_time, max_time=max_time, int_step=interval_step) mapping.write_chr(data_read)#mantain mapping.write_chr_sizes(data_read) # writes cytoband and light, dark and light_dark bed files mapping.write_cytoband(end=end, track_line=track_line, lab_bed=False) # mapping.write_period_seq(start=0, end=intData.max, delta=43200, name_file="phases_dark", track_line=False) data_read.save_track(name_file="all_intervals") bed_str = data_read.convert(mode=write_format, tracks=sel_tracks, tracks_merge=tracks2merge, data_types=data_types_list, data_types_actions=data_types_act, window=window_size, mean_win=window_mean, mean_value=value_mean, color_restrictions=d_colors_data_types) #min_t_trim=min_t, max_t_trim=max_t) for key in bed_str: bedSingle = bed_str[key] bedSingle.save_track(track_line=track_line, bed_label=bed_lab)
norm=True, data_type=annotated_behavior) scores_chase_int = intervals.IntData( tmp_track.name, map_dict=mappings_jaaba.correspondence).read() data_type_col = {annotated_behavior: 'blue'} if tag_group == "pBDPGAL4": # data_type_col = {annotated_behavior: 'orange'} data_type_col = {annotated_behavior: 'red'} dict_bed_annotated_int = scores_chase_int.convert( mode="bed", color_restrictions=data_type_col) chr_file_n = "chrom" mapping.write_chr_sizes(scores_chase_int, file_n=chr_file_n) mapping.write_chr(scores_chase_int) chr_file = chr_file_n + ".sizes" for tr, bed_tr in dict_bed_annotated_int.iteritems(): id_worm, var = tr pybed_tr = bed_tr.create_pybedtools() pybed_tr.saveas('tr_' + id_worm + '_dt_' + tag_group + '.bed') df_by_tr = pybed_tr.genome_coverage( g=chr_file).to_dataframe() # .saveas('tr_' + id_worm + '.bed') print "%f\t%s" % (df_by_tr.score[(df_by_tr.chrom == 'chr1') & (df_by_tr.start == 1)].values[0], annotated_behavior + '_' + tag_group) # pybedtools.BedTool.to_dataframe()
else: print >> stderr, "Behavioral data type not available in script, please try again with \"drinking\" or \"feeding\"" mapping_data = mapping.MappingInfo(args.mapping_file) behavior_mice = dict() end_time = -10000 data_read_all_batches = None for f in args.file_mice_behavior: int_data = intervals.IntData(f, map_dict=mapping_data.correspondence) data_read = int_data.read(relative_coord=True) chr_file_n = "chrom" mapping.write_chr_sizes(data_read, file_n=chr_file_n) chr_file = chr_file_n + ".sizes" if end_time < int_data.max - int_data.min: end_time = int_data.max - int_data.min if not data_read_all_batches: data_read_all_batches = data_read else: data_read_all_batches = tracks.merge_tracks(data_read_all_batches, data_read) stdout.write(str(end_time)) list_ctrl = [1, 3, 5, 7, 9, 11, 13, 15, 17] list_hf = [2, 4, 8, 10, 12, 14, 16, 18]
################### # Generate to BedTool objects containing light and dark phases # Write phases file mapping.write_cytoband(end=int_data.max - int_data.min, delta=43200, start_phase="dark") light_ph_f = out_dir + "phases_light.bed" dark_ph_f = out_dir + "phases_dark.bed" light_bed = pybedtools.BedTool(light_ph_f) dark_bed = pybedtools.BedTool(dark_ph_f) # Generate a chr.size file in order to calculate complement of merged meals chr_file_n = "chrom" mapping.write_chr_sizes(data_read, path_w=out_dir, file_n=chr_file_n) chr_file = out_dir + chr_file_n + ".sizes" # Dictionary to set colors of each type of food data_type_col = {'food_sc': 'orange', 'food_fat': 'blue'} data_type_col_m = {'food_sc': 'orange', 'food_fat_food_sc': 'blue'} bed_str = data_read.convert(mode="bed", data_types=["food_sc", "food_fat"], data_types_actions="all", color_restrictions=data_type_col) bed_str_out = data_read.convert(mode="bed", data_types=["food_sc", "food_fat"], data_types_actions="all", color_restrictions=data_type_col) mapping_bed = mapping.MappingInfo(out_dir + "/pybed2perg.txt")