def plot_errors_classweights_C(classweights, fourclutest, fourclutrain, Clist):
    
    false_discovery_rate, true_positive_rate = supe.pre_plotROC(fourclutest)  
    false_discovery_train_rate, true_positive_train_rate = supe.pre_plotROC(fourclutrain)  
    
    weightzero = np.zeros(len(classweights))
    weightone = np.zeros(len(classweights))
    #Extract the weights
    for i in np.arange(len(classweights)):
        weightzero[i] = classweights[i][0]
        weightone[i] = classweights[i][1]
        
    
    fig = plt.figure()
    #axes1 = fig1.add_axes([0.1,0.1,0.8,0.8]) 
    axes1 = fig.add_subplot(221)
    axes1.set_xlabel('log(C*weight 0)')
    axes1.set_ylabel('log(C*weight 1)')
    axes1.set_title('Test set FDR')
    axes1.hold(True)
    axes2 = fig.add_subplot(222)
    axes2.set_xlabel('log(C*weight 0)')
    axes2.set_ylabel('log(C*weight 1)')
    axes2.set_title('Test set 1-TPR')
    axes2.hold(True)
    axes3 = fig.add_subplot(223)
    axes3.set_xlabel('log(C*weight 0)')
    axes3.set_ylabel('log(C*weight 1)')
    axes3.set_title('Training set FDR')
    axes3.hold(True)
    axes4 = fig.add_subplot(224)
    axes4.set_xlabel('log(C*weight 0)')
    axes4.set_ylabel('log(C*weight 1)')
    axes4.set_title('Training set 1-TPR')
    axes4.hold(True)
    
    numCvalues = len(Clist)
    #Number of values of C, 
    # fourclu should have shape (numCvalues, len(classweights), numspikes)
    cm = plt.cm.get_cmap('RdYlBu')
    sizeadjust = 100
    for c, cval in enumerate(Clist):
        sc1 = axes1.scatter(np.log(cval*weightzero[:]),np.log(cval*weightone[:]),marker = 's',s=sizeadjust, c=false_discovery_rate[c,:] , cmap=cm)
        sc1.set_clim(vmin=0,vmax=1)
        fig.colorbar(sc1, ax=axes1, shrink=0.9)
        sc2 = axes2.scatter(np.log(cval*weightzero[:]),np.log(cval*weightone[:]),marker = 's',s=sizeadjust, c=(1-true_positive_rate[c,:]) , cmap=cm)
        #plt.colorbar(sc2)
        sc2.set_clim(vmin=0,vmax=1)
        fig.colorbar(sc2, ax=axes2, shrink=0.9)
        sc3 = axes3.scatter(np.log(cval*weightzero[:]),np.log(cval*weightone[:]),marker = 's',s=sizeadjust, c=false_discovery_train_rate[c,:] , cmap=cm)
        #plt.colorbar(sc3)
        sc3.set_clim(vmin=0,vmax=1)
        fig.colorbar(sc3, ax=axes3, shrink=0.9)
        sc4 = axes4.scatter(np.log(cval*weightzero[:]),np.log(cval*weightone[:]), marker = 's',s=sizeadjust,c=(1-true_positive_train_rate[c,:]) , cmap=cm)
        sc4.set_clim(vmin=0,vmax=1)
        fig.colorbar(sc4, ax=axes4, shrink=0.9)
        #plt.colorbar(sc4)
    plt.show()
def plot_errors_classweights_C(classweights, fourclu, Clist):
    
    false_discovery_rate, true_positive_rate = supe.pre_plotROC(fourclu)  
    #false_discovery_train_rate, true_positive_train_rate = supe.pre_plotROC(fourclutest)  
    
    weightzero = np.zeros(len(classweights))
    weightone = np.zeros(len(classweights))
    #Extract the weights
    for i in np.arange(len(classweights)):
        weightzero[i] = classweights[i][0]
        weightone[i] = classweights[i][1]
        
    
    fig1 = plt.figure()
    axes1 = fig1.add_axes([0.1,0.1,0.8,0.8]) 
    
    axes1.set_xlabel('log(C*weight 0)')
    axes1.set_ylabel('log(C*weight 1)')
    axes1.hold(True)
    
    numCvalues = len(Clist)
    #Number of values of C, 
    # fourclu should have shape (numCvalues, len(classweights), numspikes)
    cm = plt.cm.get_cmap('RdYlBu')
    for c, cval in enumerate(Clist):
        sc = axes1.scatter(np.log(cval*weightzero[:]),np.log(cval*weightone[:]), c=false_discovery_rate[c,:] , cmap=cm)
        plt.colorbar(sc)
    plt.show()
    return axes1
def make_one_list(fourclulist):
    false_discovery_rate = []
    true_positive_rate = []
    for s, tclu in enumerate(fourclulist):
        fdr, tpr = supe.pre_plotROC(tclu)  
        for c in np.arange(fdr.shape[0]):
            false_discovery_rate.append(fdr)
            true_positive_rate.append(tpr)        
    return false_discovery_rate, true_positive_rate        
def plotROCcomplete(graphpath,fourclu,KKconflistsquared):
    false_discovery_rate, true_positive_rate = supe.pre_plotROC(fourclu)          
    
    fig1 = plt.figure(1)
    axes1 = fig1.add_axes([0.1,0.1,0.8,0.8]) 
    #Area on page not axes
    #dreadful notation, but we are stuck with it!
    axes1.hold(True)
    colours = ['r', 'g', 'b']
    axes1.set_xlim([0,1])
    axes1.set_ylim([0,1])
    #plt.xlim([0,1]) 
    #plt.ylim([0,1])
    axes1.set_xlabel('False discovery rate')
    axes1.set_ylabel('True positive rate')
    fig1.suptitle(' %s  '%(graphpath), fontsize=14, fontweight='bold')
    #embed()
    for i in np.arange(fourclu.shape[0]):
        axes1.scatter(false_discovery_rate[i,:],true_positive_rate[i,:],marker = 'x', color = 'c')   
        ratepoints = zip(false_discovery_rate[i,:],true_positive_rate[i,:])
        hull = ConvexHull(ratepoints)
        #simplexlist = [simplex for simplex in hull.simplices]
        #print simplexlist
        for simplex in hull.simplices:
            for data in itertools.combinations(simplex.coords,2):
                data = np.array(data)
                print data
                print 'next!'
                axes1.plot(data[:,0],data[:,1],color = 'c')
            #print vertex_index
            #xes = ratepoints[vertex_index,0]
            #print xes
            #yes = ratepoints[vertex_index,1]
            #axes1.plot(ratepoints[vertex_index,0],ratepoints[vertex_index,1],'k-')
    #plt.show()
    #plt.savefig('%s_%g.pdf'%(graphpath,i))    
    errorlist = []
    for k in np.arange(len(KKconflistsquared)):
        errors = Error_rates_KK(KKconflistsquared[k])  
        false_discovery_rateKK = errors[4]
        true_positive_rateKK = errors[5]
        axes1.scatter(false_discovery_rateKK,true_positive_rateKK, color = colours[np.mod(k,len(colours))])
        #embed()
        errorlist.append(errors)
    
    fig1.savefig('%s'%(graphpath))      
    #plt.figure(2)
    plt.show()
    #fig2 = plt.figure(2)
    #axes2 = fig2.add_axes([0.1,0.1,0.8,0.8]) 
    
    #return ratepoints
    #return xes, yes, 
    return errorlist, hull, ratepoints, false_discovery_rate, true_positive_rate   
def plotROCcomplete_simple(graphpath,fourclu,KKconflistsquared):
    false_discovery_rate, true_positive_rate = supe.pre_plotROC(fourclu)          
    
    fig1 = plt.figure(1)
    axes1 = fig1.add_axes([0.1,0.1,0.8,0.8]) 
    #Area on page not axes
    #dreadful notation, but we are stuck with it!
    axes1.hold(True)
    colours = ['r', 'g', 'b']
    axes1.set_xlim([0,1])
    axes1.set_ylim([0,1])
    #plt.xlim([0,1]) 
    #plt.ylim([0,1])
    axes1.set_xlabel('False discovery rate')
    axes1.set_ylabel('True positive rate')
    fig1.suptitle(' %s  '%(graphpath), fontsize=14, fontweight='bold')
    for i in np.arange(fourclu.shape[0]):
        axes1.scatter(false_discovery_rate[i,:],true_positive_rate[i,:],marker = 'x', color = 'c')   
        
        #Simple plot - No convex hull 
    
    for k in np.arange(len(KKconflistsquared)):
        errors = Error_rates_KK(KKconflistsquared[k])  
        false_discovery_rateKK = errors[4]
        true_positive_rateKK = errors[5]
        axes1.scatter(false_discovery_rateKK,true_positive_rateKK, color = colours[np.mod(k,len(colours))])
    
    plt.show()
    fig1.savefig('%s'%(graphpath))      
    #plt.figure(2)
    
    #fig2 = plt.figure(2)
    #axes2 = fig2.add_axes([0.1,0.1,0.8,0.8]) 
    
    #return ratepoints
    #return xes, yes, 
    return  false_discovery_rate, true_positive_rate