def plot_between_session_box_plot(metric, where, compare, filename, table='reliability2010_within_subjects'):
    conn = sqlite3.connect(dbfile)
    c = conn.cursor()
    metric_vals = []
    for compare_c in compare[1]:
        where_keys = " and ".join([t[0] + "=?" for t in where+[compare]])
        c.execute("SELECT %s FROM %s where %s ORDER BY subject_id"%(metric,table,where_keys), tuple([t[1] for t in where] + [compare_c]))
        metric_vals.append(np.array(c.fetchall()))
    
    c.execute("SELECT DISTINCT subject_id FROM reliability2010_within_subjects ")
    subject_ids = c.fetchall()
    conn.commit()
    c.close()
    
    metric_vals = np.array(metric_vals)
    metric_vals.shape = (metric_vals.shape[0], metric_vals.shape[1])
    
    fig = plt.figure(figsize=(8.27,11.69))
    figtitle = ", ".join([t[0] + "=" + str(t[1]) for t in where])
    t = fig.text(0.5, 0.95, figtitle,
               horizontalalignment='center',
               fontproperties=mpl.font_manager.FontProperties(size=16))
    ax1 = fig.add_subplot(212)
    ax1.boxplot(metric_vals.T)
    ax1.set_xticklabels(compare[1])
    ax1.set_ylabel(metric + " overlap")
    ax1.set_ylim(bottom=-0.1, top=1.1)
    
    subject_ids =[subject_id[0].split('-')[0] for subject_id in subject_ids]
    
    
    ax2 = fig.add_subplot(211)
    colormap = plt.cm.spectral
    ax2.set_color_cycle([colormap(i) for i in np.linspace(0, 0.9, len(subject_ids))])
    ax2.plot(range(1,len(compare[1])+1), metric_vals, marker = 'o')
    ax2.set_ylabel(metric + " overlap")
    ax2.set_xlim(ax1.get_xlim())
    ax2.set_ylim(ax1.get_ylim())
    ax2.get_xaxis().set_visible(False)
    ax2.legend(subject_ids, title="Subjects", 
               #bbox_to_anchor=(0., 1.02, 1., .102), loc=9,
               ncol=4, 
               mode="expand", 
               borderaxespad=0.)
    if not os.path.exists(os.path.dirname(filename)):
        os.makedirs(os.path.dirname(filename))
    
    ax1.text(0.5, 0.90, "onesided_p = %.2f, twosided_p = %.2f"%paired_one_sample(metric_vals[1,:], metric_vals[0,:]),
               horizontalalignment='center',
               fontproperties=mpl.font_manager.FontProperties(size=16),
               transform=ax1.transAxes)
    
    plt.savefig(filename)
def plot_between_session_box_plot(metric, where, compare, exclude, filename, table='reliability2010_within_subjects', test = True):
    conn = sqlite3.connect(dbfile)
    c = conn.cursor()
    metric_vals = []
    where_keys = " and ".join([t[0] + "=?" for t in where])
    c.execute("SELECT DISTINCT subject_id FROM %s where %s and %s in (%s) and dice = 0 and distance is NULL ORDER BY subject_id"%(table,where_keys, compare[0], ','.join(["'%s'"%s for s in compare[1]])), tuple([t[1] for t in where]))
    exclude = ('subject_id', exclude[1] + [i[0] for i in c.fetchall()])
    
    
    for compare_c in compare[1]:
        where_keys = " and ".join([t[0] + "=?" for t in where+[compare]])
        exclude_clause = "%s not in (%s)"%(exclude[0], ",".join(["'%s'"%s for s in exclude[1]]))
        c.execute("SELECT %s FROM %s where %s ORDER BY subject_id"%(metric,table,where_keys+ " and " +exclude_clause), tuple([t[1] for t in where] + [compare_c]))
        metric_vals.append(np.array(c.fetchall(), dtype=np.float))
    
    c.execute("SELECT DISTINCT subject_id FROM reliability2010_within_subjects WHERE %s"%exclude_clause)
    subject_ids = c.fetchall()
    if len(subject_ids) < 2:
        return
    conn.commit()
    c.close()
    
    metric_vals = np.array(metric_vals, dtype=np.float)
    metric_vals.shape = (metric_vals.shape[0], metric_vals.shape[1])
    
    fig = plt.figure(figsize=(8.27,11.69))
    figtitle = ", ".join([t[0] + "=" + str(t[1]) for t in where])
    t = fig.text(0.5, 0.95, figtitle,
               horizontalalignment='center',
               fontproperties=mpl.font_manager.FontProperties(size=16))
    ax1 = fig.add_subplot(212)
    ax1.boxplot(metric_vals.T)
    ax1.set_xticklabels(compare[1])
    ax1.set_ylabel(metric + " overlap")
    #ax1.set_ylim(bottom=-0.1, top=1.1)
    
    subject_ids =[subject_id[0].split('-')[0] for subject_id in subject_ids]
    
    
    ax2 = fig.add_subplot(211)
    colormap = plt.cm.spectral
    ax2.set_color_cycle([colormap(i) for i in np.linspace(0, 0.9, len(subject_ids))])
    ax2.plot(range(1,len(compare[1])+1), metric_vals, marker = 'o')
    ax2.set_ylabel(metric + " overlap")
    ax2.set_xlim(ax1.get_xlim())
    ax2.set_ylim(ax1.get_ylim())
    ax2.get_xaxis().set_visible(False)
    ax2.legend(subject_ids, title="Subjects", 
               #bbox_to_anchor=(0., 1.02, 1., .102), loc=9,
               ncol=4, 
               mode="expand", 
               borderaxespad=0.)
    if not os.path.exists(os.path.dirname(filename)):
        os.makedirs(os.path.dirname(filename))
    if test:
        ax1.text(0.5, 0.90, "onesided_p = %.2f, twosided_p = %.2f"%paired_one_sample(metric_vals[1,:], 
                                                                                     metric_vals[0,:], 
                                                                                     func=hdmedian),
                   horizontalalignment='center',
                   fontproperties=mpl.font_manager.FontProperties(size=16),
                   transform=ax1.transAxes)
        print figtitle
        conn = sqlite3.connect(dbfile)
        c = conn.cursor()
        insert_vals = dict(where)
        insert_vals['metric'] = metric
        
        
        parameters = {'hdmedian': hdmedian, 
                      #'IQR': hdIQR,
                      'tmean': lambda v:trimr(v, (0.2,0.2)).mean(),
                      #'winsorized_variance': lambda v:winsorize(v, (0.2,0.2)).var()
                      }
        
        for parameter,func in parameters.iteritems():
            
            if parameter in ['IQR', 'winsorized_variance']:
                _, insert_vals['twosided_p'], insert_vals['ci_l'], insert_vals['ci_h'] = two_sample(metric_vals[1,:], metric_vals[0,:], func = func, ci = True)
            else:
                _, insert_vals['twosided_p'], insert_vals['ci_l'], insert_vals['ci_h'] = paired_one_sample(metric_vals[1,:], metric_vals[0,:], func = func, ci = True)
            insert_vals['parameter'] = parameter
            insert_vals['value_1'] = float(func(metric_vals[0,:]))
            insert_vals['value_2'] = float(func(metric_vals[1,:]))
            insert_vals['name_1'] = compare[1][0]
            insert_vals['name_2'] = compare[1][1]
            
            print "%s = %f and %f (twosided_p = %.2f)"%(insert_vals['parameter'], insert_vals['value_1'], insert_vals['value_2'], insert_vals['twosided_p'])
            print "INSERT OR REPLACE INTO comparisons ("+",".join(insert_vals.keys()) + ") VALUES (" + ",".join(["?"]*len(insert_vals.values())) + ")"
            print insert_vals.values()
            c.execute("INSERT OR REPLACE INTO comparisons ("+",".join(insert_vals.keys()) + ") VALUES (" + ",".join(["?"]*len(insert_vals.values())) + ")", 
                      insert_vals.values())
        conn.commit()
        c.close()
    
    
    
    plt.savefig(filename)