void *append_WORD_no_NULL(void *p1, void *p2){ WORD *tw, *w1 = (WORD *)p1, *w2 = (WORD *)p2; tw = get_WORD(); tw->use = 1; tw->T1 = w1->T1; tw->T2 = w2->T2; tw->T_dur = tw->T2 - tw->T1; tw->weight = w1->weight + w2->weight; tw->conf = (w1->conf + w2->conf) / 2.0; tw->frag_corr = (w1->frag_corr && w2->frag_corr); if (w1->opt_del && w2->opt_del){ tw->intern_value = TEXT_strdup((TEXT*)rsprintf("%s%s", (! w1->opt_del) ? w1->value : w1->intern_value, (! w2->opt_del) ? w2->value : w2->intern_value)); tw->value = TEXT_strdup((TEXT*)rsprintf(WORD_OPT_DEL_PRE_STR "%s" WORD_OPT_DEL_POST_STR, tw->intern_value)); tw->opt_del = TRUE; } else { if (TEXT_strcmp(w1->value, (TEXT *)"@") == 0) tw->value = TEXT_strdup((! w2->opt_del) ? w2->value : w2->intern_value); else if (TEXT_strcmp(w2->value,(TEXT *)"@") == 0) tw->value = TEXT_strdup((! w1->opt_del) ? w1->value : w1->intern_value); else tw->value = TEXT_add((! w1->opt_del) ? w1->value : w1->intern_value, (! w2->opt_del) ? w2->value : w2->intern_value); } return(tw); }
WORD *new_WORD(TEXT *t, int id, double t1, double t2, double conf, TEXT *tag1, TEXT *tag2, int fcorr, int odel, double weight){ WORD *tw = get_WORD(); int len; tw->use = 1; if (t != (TEXT *)0){ len = TEXT_strlen(t); if (len > 1 && *(t + len - 1) == '*') tw->value = TEXT_strndup(t,len-1); else tw->value = TEXT_strdup(t); } tw->tag1 = (tag1 == (TEXT *)0) ? tag1 : TEXT_strdup(tag1); tw->tag2 = (tag2 == (TEXT *)0) ? tag2 : TEXT_strdup(tag2); tw->value_id = id; tw->T1 = t1; tw->T2 = t2; tw->T_dur = t2 - t1; tw->weight = weight; tw->conf = conf; tw->frag_corr = fcorr; tw->opt_del = odel; return(tw); }
static void print_gnu_range_graph(RANK *rank, char *percent_desc, char *testname, char *base, int for_blks, int feedback) { int b,t; FILE *fp_dat, *fp_mean, *fp_plt, *fp_median; double sum; TEXT *mean_name = (TEXT *)0, *dat_name = (TEXT *)0; TEXT *plt_name = (TEXT *)0, *basename = (TEXT *)0; TEXT *median_name = (TEXT *)0; double *pctt, *rnkk; int *ind; alloc_singarr(pctt,MAX( rank->n_blk , rank->n_trt ),double); alloc_singarr(rnkk,MAX( rank->n_blk , rank->n_trt ),double); alloc_singarr(ind,MAX( rank->n_blk , rank->n_trt ),int); basename = TEXT_strdup((TEXT *)rsprintf("%s%s",(strcmp(base,"-")==0) ? "STATS" : base, (for_blks) ? ".spk" : ".sys")); dat_name = TEXT_strdup((TEXT *)rsprintf("%s%s",basename,".dat")); /* make the datafiles for the treatements */ if ((fp_dat = fopen(dat_name,"w")) == (FILE *)0){ fprintf(stderr,"Error: unable to open GNUPLOT data file %s\n", dat_name); exit(1); } else if (feedback >= 1) printf(" Output written to '%s.*'\n",basename); mean_name = TEXT_strdup((TEXT *)rsprintf("%s%s",basename,".mean")); if ((fp_mean = fopen(mean_name,"w")) == (FILE *)0){ fprintf(stderr,"Error: unable to open GNUPLOT data file %s\n", mean_name); exit(1); } median_name = TEXT_strdup((TEXT *)rsprintf("%s%s",basename,".median")); if ((fp_median = fopen(median_name,"w")) == (FILE *)0){ fprintf(stderr,"Error: unable to open GNUPLOT data file %s\n", median_name); exit(1); } plt_name = TEXT_strdup((TEXT *)rsprintf("%s%s",basename,".plt")); if ((fp_plt = fopen(plt_name,"w")) == (FILE *)0){ fprintf(stderr,"Error: unable to open GNUPLOT file %s\n", plt_name); exit(1); } fprintf(fp_plt,"set yrange [%d:0]\n", 1 + ((for_blks) ?rank->n_blk :rank->n_trt )); fprintf(fp_plt,"set xrange [0:100]\n"); fprintf(fp_plt,"set title \"%s\"\n",testname); fprintf(fp_plt,"set key\n"); fprintf(fp_plt,"set ylabel \"%s\"\n",(for_blks) ? "Speaker ID" :"Systems"); fprintf(fp_plt,"set xlabel \"%s\"\n",percent_desc); fprintf(fp_plt,"set ytics ("); if (for_blks){ for (b=0;b< rank->n_blk ;b++){ double medianval=0.0; sum = 0.0; for (t=0;t< rank->n_trt ;t++){ fprintf(fp_dat,"%d %f\n", b+1,rank->pcts [ rank->trt_srt_ind [ b ] ][ t ] ); pctt[t] = rank->pcts [ rank->trt_srt_ind [ b ] ][ t ] ; sum += rank->pcts [ rank->trt_srt_ind [ b ] ][ t ] ; } rank_double_arr(pctt, rank->n_trt ,ind,rnkk,INCREASING); if ( rank->n_trt % 2 == 0) { /* handle the even arr len */ medianval = (pctt[ind[ rank->n_trt / 2]] + pctt[ind[( rank->n_trt / 2) - 1]]) / 2.0; } else { /* handle the odd arr len */ medianval = pctt[ind[ rank->n_trt / 2]]; } fprintf(fp_mean,"%d %f\n",b+1,sum / (double)( rank->n_trt )); fprintf(fp_median,"%d %f\n",b+1,medianval); fprintf(fp_plt,"\"%s\" %d",rank->blk_name[rank->trt_srt_ind[b]], b+1); if (b !=rank->n_blk -1) fprintf(fp_plt,","); } fprintf(fp_plt,")\n"); } else { for (t=0;t< rank->n_trt ;t++){ double medianval=0.0; sum = 0.0; for (b=0;b< rank->n_blk ;b++){ fprintf(fp_dat,"%d %f\n", t+1,rank->pcts [ b ][ rank->blk_srt_ind [ t ] ] ); pctt[b] = rank->pcts [ b ][ rank->blk_srt_ind [ t ] ] ; sum += rank->pcts [ b ][ rank->blk_srt_ind [ t ] ] ; } rank_double_arr(pctt, rank->n_blk ,ind,rnkk,INCREASING); if ( rank->n_blk % 2 == 0) { /* handle the even arr len */ medianval = (pctt[ind[ rank->n_blk / 2]] + pctt[ind[( rank->n_blk / 2) - 1]]) / 2.0; } else { /* handle the odd arr len */ medianval = pctt[ind[ rank->n_blk / 2]]; } fprintf(fp_mean,"%d %f\n",t+1,sum / (double)(rank->n_blk )); fprintf(fp_median,"%d %f\n",t+1,medianval); fprintf(fp_plt,"\"%s\" %d",rank->trt_name[rank->blk_srt_ind[t]], t+1); if (t !=rank->n_trt -1) fprintf(fp_plt,","); } fprintf(fp_plt,")\n"); } fprintf(fp_plt,"plot \"%s\" using 2:1 title \"Mean %s\" with lines,", mean_name, percent_desc); fprintf(fp_plt,"\"%s\" using 2:1 title \"Median %s\" with lines,", median_name, percent_desc); fprintf(fp_plt,"\"%s\" using 2:1 title \"Individual %s\"\n",dat_name, percent_desc); fclose(fp_dat); fclose(fp_mean); fclose(fp_median); fclose(fp_plt); free_singarr(mean_name , TEXT); free_singarr(dat_name , TEXT); free_singarr(plt_name , TEXT); free_singarr(basename , TEXT); free_singarr(median_name, TEXT); free_singarr(pctt,double); free_singarr(rnkk,double); free_singarr(ind,int); }
void run_multi_sys(SCORES *scor[],int nscor,char *out_dir,int stats,int stats_verbose,int stats_unified, int stats_graphs, char *stats_out_name, char *stats_formula, char *stats_test_name, int reports, int feedback, int linewidth) { RANK rank; int nwin=0, **winner[15]; double **confidence[15]; char *win_desc[15], *win_id[15], *stat_form_str=formula_str(stats_formula); char outroot[200], *sign_str=(char *)0, *wilc_str=(char *)0; char outname[200]; if (feedback >= 1) printf("Beginning Multi-System comparisons and reports\n"); if (strcmp(stats_out_name,"-") == 0) strcpy(outroot,stats_out_name); else sprintf(outroot,"%s%s%s", ((out_dir != (char *)0) ? out_dir : ""), ((out_dir != (char *)0) ? "/" : ""), stats_out_name); /* printf("Out Root = %s\n",outroot); */ if (strcmp("-",outroot) == 0) strcpy(outname,outroot); else sprintf(outname,"%s.%s",outroot,"stats"); if (stats > 0 || stats_graphs > 0) init_RANK_struct_from_SCORES(&rank, scor, nscor, stats_formula); /* dump_full_RANK_struct(&rank, "Systems", "Speakers", "", "",stats_formula, "test name", "Speaker ranks for the system", "System ranks for the speaker"); */ if ((stats & STAT_MAPSSWE) > 0){ win_desc[nwin] = "Matched Pair Sentence Segment (Word Error)"; win_id[nwin] = "MP"; if (feedback >= 1) printf(" Performing the %s Test\n",win_desc[nwin]); do_mtch_pairs(scor, nscor, "2", stats_test_name, !stats_unified, stats_verbose, &winner[nwin], outname, feedback, &confidence[nwin]); nwin++; } if ((stats & STAT_MAPSSWE_SEG) > 0){ do_mtch_pairs_seg_analysis(scor, nscor, stats_test_name, 1, 1); } if ((stats & STAT_SIGN) > 0){ win_desc[nwin] = (char *)TEXT_strdup((TEXT*)rsprintf("%s (%s)", "Signed Paired Comparison", stat_form_str)); sign_str = win_desc[nwin]; win_id[nwin] = "SI"; if (feedback >= 1) printf(" Performing the %s Test\n",win_desc[nwin]); perform_signtest(&rank, stats_verbose, !stats_unified, stat_form_str, *stats_formula, &winner[nwin], outname, feedback, &confidence[nwin]); nwin++; } if ((stats & STAT_WILC) > 0){ win_desc[nwin] = (char*)TEXT_strdup((TEXT *)rsprintf("%s (%s)", "Wilcoxon Signed Rank", stat_form_str)); wilc_str = win_desc[nwin]; win_id[nwin] = "WI"; if (feedback >= 1) printf(" Performing the %s Test\n",win_desc[nwin]); perform_wilcoxon(&rank, stats_verbose, !stats_unified, stat_form_str, *stats_formula, &winner[nwin], outname, feedback, &confidence[nwin]); nwin++; } if ((stats & STAT_MCN) > 0){ win_desc[nwin] = "McNemar (Sentence Error)"; win_id[nwin] = "MN"; if (feedback >= 1) printf(" Performing the %s Test\n",win_desc[nwin]); McNemar_sent(scor, nscor, &winner[nwin], stats_test_name, !stats_unified, stats_verbose,outname, feedback, &confidence[nwin]); nwin++; } if ((stats & STAT_ANOVAR) > 0){ win_desc[nwin] = "Analysis of Variance by Ranks"; win_id[nwin] = "AN"; if (feedback >= 1) printf(" Performing the %s Test\n",win_desc[nwin]); compute_anovar(&rank, stats_verbose, !stats_unified, &winner[nwin],outname,feedback,&confidence[nwin]); nwin++; } if (stats_unified){ if (feedback >= 1) printf(" Printing Unified Statistical Test Reports\n"); #define new #ifdef new print_composite_significance2(&rank, 80, nwin, winner, confidence, win_desc, win_id, 1 /*matrix*/, 1 /*int report*/, stats_test_name,outname, feedback, (out_dir != (char *)0) ? out_dir : ""); #endif #ifdef old print_composite_significance(&rank, 80, nwin, winner, win_desc, win_id, 1 /*matrix*/, 1 /*int report*/, stats_test_name,outname,feedback, (out_dir != (char *)0) ? out_dir : ""); #endif } if ((stats_graphs & GRAPH_RANGE) > 0){ if (strcmp("-",outroot) == 0) strcpy(outname,outroot); else sprintf(outname,"%s.%s",outroot,"range"); if (feedback >= 1) printf(" Printing Range Graphs\n"); print_rank_ranges(&rank, stat_form_str,stats_test_name, outname, feedback); } if ((stats_graphs & GRAPH_GRANGE) > 0){ if (strcmp("-",outroot) == 0) strcpy(outname,outroot); else sprintf(outname,"%s.%s",outroot,"grange"); if (feedback >= 1) printf(" Printing GNUPLOT Range Graphs\n"); print_gnu_rank_ranges(&rank, stat_form_str,stats_test_name, outname, feedback); } if ((stats_graphs & GRAPH_GRANGE2) > 0){ if (strcmp("-",outroot) == 0) strcpy(outname,outroot); else sprintf(outname,"%s.%s",outroot,"grange2"); if (feedback >= 1) printf(" Printing GNUPLOT Range Graphs V2\n"); print_gnu_rank_ranges2(&rank, stat_form_str,stats_test_name, outname, feedback); } if ((stats_graphs & GRAPH_DET) > 0){ if (strcmp("-",outroot) != 0){ if (make_SCORES_DET_curve(scor, nscor,outroot,feedback,stats_test_name) != 0) exit(1); } else { fprintf(scfp,"Warning: DET plot can not go to STDOUT\n"); } } strcpy(outname,outroot); if ((reports & REPORT_SUM) > 0) print_N_system_summary(scor, nscor, outname, stats_test_name, 0, feedback); if ((reports & REPORT_RSUM) > 0) print_N_system_summary(scor, nscor, outname, stats_test_name, 1, feedback); if ((reports & REPORT_ESUM) > 0) print_N_system_executive_summary(scor, nscor, outname, stats_test_name, 0, feedback); if ((reports & REPORT_RESUM) > 0) print_N_system_executive_summary(scor, nscor, outname, stats_test_name, 1, feedback); if ((reports & REPORT_PRN) > 0) print_N_SCORE(scor, nscor, outname, linewidth, feedback, 0); if ((reports & REPORT_LUR) > 0) print_N_lur(scor, nscor, outname, stats_test_name, feedback); if (stats > 0 || stats_graphs > 0){ int i; for (i=0; i<nwin; i++) free_2dimarr(winner[i],rank.n_trt,int); free_RANK(&rank); }
void set_WORD_tag1(WORD *w, TEXT *t){ if (w->tag1 != (TEXT *)0) TEXT_free(w->tag1); w->tag1 = TEXT_strdup(t); }