def run(directory, bidirectionalfilepath, homedir):
    TFdirectorylist = Functions.chip_peak_directories(directory)
    fimodirectorylist = Functions.fimo_directories(directory)
    counts = dict()
    for item in TFdirectorylist:
        if os.path.exists(item + "/outfiles"):
            os.chdir(item + "/outfiles")
            TF = item.split('/')[5]
            counts[TF] = []
            os.system("bedtools intersect -a " + bidirectionalfilepath + " -b ConsolidatedPeaks.merge.bed -c > Bidir_Chip_Counts.bed")
    for item in fimodirectorylist:
        os.chdir(item)
        TF = item.split('/')[5]
        fimo = item.split('/')[9]
        os.system("bedtools intersect -a " + bidirectionalfilepath + " -b fimo.cut.rmdup.ord.merge.bed -c > Bidir_Motif_Counts.bed")
        os.system("bedtools intersect -a " + directory + "/" + TF + "/peak_files/outfiles/ConsolidatedPeaks.merge.bed -b fimo.cut.rmdup.ord.merge.bed -c > Chip_Motif_Counts.bed")
        

        BidirChipFile = open(directory + "/" + TF + "/peak_files/outfiles/Bidir_Chip_Counts.bed") 
        BidirMotifFile = open("Bidir_Motif_Counts.bed")
        ChipMotifFile = open("Chip_Motif_Counts.bed")
        BidirTot = Functions.line_count("Bidir_Motif_Counts.bed")
        ChipTot = Functions.line_count("Chip_Motif_Counts.bed")
        MotifTot = Functions.line_count("fimo.cut.rmdup.ord.merge.bed")
        BidirChipCount = 0
        ChipBidirCount = 0
        BidirMotifCount = 0
        MotifBidirCount = 0
        ChipMotifCount = 0
        MotifChipCount = 0
        AllCount = 0
        for line1 in BidirChipFile:
            line2 = BidirMotifFile.readline()
            x = int(line1.strip().split()[3])
            y = int(line2.strip().split()[3])
            if x != 0 and y != 0:
                AllCount += 1.0
                ChipBidirCount += x-1
                MotifBidirCount += y-1
            elif x != 0:
                BidirChipCount += 1
                ChipBidirCount += x
            elif y != 0:
                BidirMotifCount += 1
                MotifBidirCount += y
        for line3 in ChipMotifFile:
            z = int(line3.strip().split()[3])
            if z != 0:
                ChipMotifCount += 1
                MotifChipCount += z
        ChipMotifCount =  ChipMotifCount - AllCount
        MotifChipCount = MotifChipCount - AllCount
        BidirCount = BidirTot - AllCount - BidirChipCount - BidirMotifCount
        ChipCount = ChipTot - AllCount  - ChipMotifCount - ChipBidirCount
        MotifCount = MotifTot - AllCount  - MotifBidirCount - MotifChipCount
        counts[TF].append([fimo, BidirCount, ChipCount, MotifCount, BidirChipCount, BidirMotifCount, ChipMotifCount, AllCount])
                
    os.chdir(homedir)
    os.chdir('..')
    os.chdir("./files")
    outfile = open("BidirChIpMotifOverlaps.txt",'w')
    outfile.write("TF\nMotif#\nBidir\tChip\tMotif\tBC\tBM\tCM\tBCM\n")
    for key in counts:
        outfile.write(key)
        outfile.write("\n")
        for item in counts[key]:
            outfile.write(item[0])
            outfile.write("\n")
            for i in range(1,len(item)):  
                outfile.write(str(item[i]))
                outfile.write("\t")
            outfile.write("\n")
    file1 = open(filename1)
    motiflist = []
    for line1 in file1:
        if 'MOTIF' in line1:
            motif = line1.strip().split()[1]
            motiflist.append(motif)
    
    return motiflist

if __name__ == "__main__":
    
    #Right now this calls fimo on each motif by providing the HOCOMOCO database along with a single motif name per
    #job submitted. It now only submits jobs for motifs who have fimo.txt files less than 1
    shellscripttemplatedir = '/Users/joru1876/HOCOMOCODatabaseFIMO'
    packagedir = '/Users/joru1876/BidirectionalTFAnalyzer'
    
    
    motiflist = run(packagedir + '/files/HOCOMOCOv9_AD_MEME.txt', True)
    motiflist1 = []
    for item in motiflist:
        if not os.path.exists(shellscripttemplatedir + "/FIMO_OUT/" + item +"_fimo_out"+ "/fimo.txt") or Functions.line_count(shellscripttemplatedir + "/FIMO_OUT/" + item +"_fimo_out"+ "/fimo.txt") < 2:
            motiflist1.append(item)
    
    print motiflist1
    print len(motiflist1)
            
    os.chdir(shellscripttemplatedir)
    for motif in motiflist1:
        os.system("qsub -v arg1='/Users/joru1876/HOCOMOCODatabaseFIMO/FIMO_OUT/" + motif + "_fimo_out',arg2='" + motif + "' runHOCOMOCOv9FIMOTemplate.sh")
        
    
        TF = item.split('/')[5]
        counts[TF] = []
        os.system("bedtools intersect -a " + bidirectionalfilepath + " -b Consolidatedpeaks.ord.merge.bed -c > Bidir_Chip_Counts.bed")
    for item in fimodirectorylist:
        os.chdir(item)
        TF = item.split('/')[5]
        print TF
        fimo = item.split('/')[8]
        os.system("bedtools intersect -a " + bidirectionalfilepath + " -b fimo.rmdup.ord.cut.merge.bed -c > Bidir_Motif_Counts.bed")
        os.system("bedtools intersect -a " + directory + "/" + TF + "/peak_files/Consolidatedpeaks.ord.merge.bed -b fimo.rmdup.ord.cut.merge.bed -c > Chip_Motif_Counts.bed")
        

        BidirChipFile = open(directory + "/" + TF + "/peak_files/Bidir_Chip_Counts.bed") 
        BidirMotifFile = open("Bidir_Motif_Counts.bed")
        ChipMotifFile = open("Chip_Motif_Counts.bed")
        BidirTot = Functions.line_count("Bidir_Motif_Counts.bed")
        ChipTot = Functions.line_count("Chip_Motif_Counts.bed")
        MotifTot = Functions.line_count("fimo.rmdup.ord.cut.merge.bed")
        BidirChipCount = 0
        ChipBidirCount = 0
        BidirMotifCount = 0
        MotifBidirCount = 0
        ChipMotifCount = 0
        MotifChipCount = 0
        AllCount = 0
        for line1 in BidirChipFile:
            line2 = BidirMotifFile.readline()
            x = int(line1.strip().split()[3])
            y = int(line2.strip().split()[3])
            if x != 0 and y != 0:
                AllCount += 1.0