static mcxstatus cttyArgHandle ( int optid , const char* val ) { switch(optid) { case MY_OPT_IMX : mcxIOnewName(xfmx_g, val) ; break ; case MY_OPT_ABC : xfabc_g = mcxIOnew(val, "r") ; break ; case MY_OPT_TAB : xftab_g = mcxIOnew(val, "r") ; break ; case MY_OPT_OUT : out_g = val ; break ; case MY_OPT_INCLUDE_ENDS : include_ends_g = TRUE ; break ; case MY_OPT_LIST_NODES : break ; case MY_OPT_littleG : i_group = atoi(val) ; break ; case MY_OPT_G : n_group_G = atoi(val) ; break ; case MY_OPT_T : n_thread_l = (unsigned) atoi(val) ; break ; case MY_OPT_MOD : mod_up = TRUE ; break ; default : mcxExit(1) ; ; } return STATUS_OK ; }
static mcxstatus qInit ( void ) { mode_get = 0 ; n_limit = 0 ; xfout_g = mcxIOnew("-", "w") ; xftab_g = NULL ; vary_z = 0 ; divide_g = 3 ; vary_a = 0 ; vary_s = 0 ; vary_n = 1 ; xfmx_g = mcxIOnew("-", "r") ; xfcl_g = NULL ; n_thread_g = 1 ; mode_vary = 0 ; transpose= FALSE ; knnexact_g = TRUE ; doclcf_g = FALSE ; weefreemen = FALSE ; output_table = FALSE ; user_imx = FALSE ; weight_scale = 0.0 ; transform = NULL ; transform_spec = NULL ; return STATUS_OK ; }
static mcxstatus qInit ( void ) { mode_get = 0 ; n_limit = 0 ; xfout_g = mcxIOnew("-", "w") ; xftab_g = NULL ; tab_g = NULL ; vary_z = 0 ; divide_g = 3 ; vary_a = 0 ; vary_s = 0 ; vary_n = 1 ; xfmx_g = mcxIOnew("-", "r") ; xfabc_g = NULL ; xfcl_g = NULL ; n_thread_l = 1 ; mode_vary = 0 ; transpose= FALSE ; rebase_g = TRUE #define COMPUTE_CLCF 1 #define COMPUTE_EFF 2 ; compute_flags = 0 ; weefreemen = FALSE #define OUTPUT_TABLE 1 #define OUTPUT_KEY 2 ; output_flags = OUTPUT_KEY ; user_imx = FALSE ; weight_scale = 0.0 ; transform = NULL ; transform_spec = NULL ; return STATUS_OK ; }
static mcxstatus erdosArgHandle ( int optid , const char* val ) { switch(optid) { case MY_OPT_IMX : xfmx_g = mcxIOnew(val, "r") ; break ; case MY_OPT_PATH : path_g = val ; break ; case MY_OPT_STEP : step_g = val ; break ; case MY_OPT_OUT : out_g = val ; break ; case MY_OPT_ABC : xfabc_g = mcxIOnew(val, "r") ; break ; case MY_OPT_ISUNDIRECTED : input_status = 'u' ; break ; case MY_OPT_ISDIRECTED : input_status = 'd' ; break ; case MY_OPT_TAB : xftab_g = mcxIOnew(val, "r") ; break ; case MY_OPT_QUERY : mcxIOnewName(xq_g, val) ; break ; default : mcxExit(1) ; ; } return STATUS_OK ; }
int main ( int argc , const char* argv[] ) { mclx* mx_score, *mx_start, *mx_end ; mcxIO* xfs, *xfl, *xfr ; dim i, j ; if (argc != 4) mcxDie(1, me, "need score start end matrices") ; xfs = mcxIOnew(argv[1], "r") ; xfl = mcxIOnew(argv[2], "r") ; xfr = mcxIOnew(argv[3], "r") ; mx_score = mclxRead(xfs, EXIT_ON_FAIL) ; mx_start = mclxRead(xfl, EXIT_ON_FAIL) ; mx_end = mclxRead(xfr, EXIT_ON_FAIL) ; fprintf ( stdout , "%10s%10s%10s%10s%10s%10s%10s%10s%10s%10s%10s%10s\n" , "vid1" , "vid2" , "diff1" , "diff2" , "meet" , "score" , "mean" , "csn" , "euclid" , "frac" , "re1" , "re2" ) ; for (i=0;i< N_COLS(mx_score);i++) { for (j=0;j<N_COLS(mx_score);j++) { double s ; s = get_score ( mx_score->cols+i , mx_score->cols+j , mx_start->cols+i , mx_start->cols+j , mx_end->cols+i , mx_end->cols+j ) ; } } return 0 ; }
static mcxstatus alterInit ( void ) { xfmx_g = mcxIOnew("-", "r") ; xfabc_g = NULL ; xftab_g = NULL ; xfout_g = mcxIOnew("-", "w") ; transform = NULL ; transform_spec = NULL ; tab_g = NULL ; canonical_g = 0 ; return STATUS_OK ; }
static mcxstatus allInit ( void ) { xfmx_g = mcxIOnew("-", "r") ; xftab_g = NULL ; tab_g = NULL ; hsh_g = NULL ; xq_g = mcxIOnew("-", "r") ; xfabc_g = NULL ; debug_g = 0 ; out_g = "-" ; path_g = NULL ; step_g = NULL ; input_status = 'x' ; return STATUS_OK ; }
void mcxDiagnosticsAttractor ( const char* ffn_attr , const mclMatrix* clus2elem , const mcxDumpParam dumpParam ) { int n_nodes = clus2elem->n_range ; int n_written = dumpParam->n_written ; mclMatrix* mtx_Ascore = mclxAllocZero(n_written, n_nodes) ; mcxIO* xfOut = mcxIOnew(ffn_atr, "w") ; dim d = 0 ; if (mcxIOopen(xfOut, RETURN_ON_FAIL) == STATUS_FAIL) { mclxFree(&mtx_Ascore) ; mcxIOfree(&xfOut) ; return ; } ; for(d=0; d<n_written; d++) { mclMatrix* iterand = *(dumpParam->iterands+d) ; mclVector* vec_Ascore = NULL ; if (iterands->n_cols != n_nodes || iterand->n_range != n_nodes) { fprintf(stderr, "mcxDiagnosticsAttractor: dimension error\n") ; mcxExit(1) ; } vec_Ascore = mcxAttractivityScale(iterand) ; mclvRenew((mtx_Ascore->cols+d), vec_Ascore->ivps, vec_Ascore->n_ivps) ; mclvFree(&vec_Ascore) ; } mclxbWrite(mtx_Ascore, xfOut, RETURN_ON_FAIL) ; mclxFree(mtx_Ascore) ; }
static mcxstatus convertMain ( int argc_unused cpl__unused , const char* argv[] ) { mclMatrix* mx ; mclxCat st ; xfin = mcxIOnew(argv[0], "r") ; xfout = mcxIOnew(argv[1], "w") ; mclxCatInit(&st) ; if (main_mode == 'l') { if (mclxCatRead(xfin, &st, catmax, NULL, NULL, 0)) mcxDie(1, me, "failure is, if not an option, the result after all") ; mclxCatWrite(xfout, &st, MCLXIO_VALUE_GETENV, EXIT_ON_FAIL) ; } else if (main_mode == 'f') { int format ; mx = mclxRead(xfin, EXIT_ON_FAIL) ; format = mclxIOformat(xfin) ; if (!test_read) { mcxIOopen(xfout, EXIT_ON_FAIL) ; if (format == 'a') mclxbWrite(mx, xfout, EXIT_ON_FAIL) ; else mclxaWrite(mx, xfout, MCLXIO_VALUE_GETENV, EXIT_ON_FAIL) ; } } else { mcxbits bits = main_mode == 'c' ? MCLX_REQUIRE_DOMTREE | MCLX_CATREAD_CLUSTERSTACK : main_mode == 's' ? MCLX_REQUIRE_DOMSTACK | MCLX_CATREAD_CLUSTERTREE : 0 ; mcxIOopen(xfout, EXIT_ON_FAIL) ; if (mclxCatRead(xfin, &st, catmax, NULL, NULL, bits)) mcxDie(1, me, "failure is, if not an option, the result after all") ; mclxCatWrite(xfout, &st, MCLXIO_VALUE_NONE, EXIT_ON_FAIL) ; } return 0 ; }
static mcxstatus mateInit ( void ) { xfout = mcxIOnew("-", "w") ; legend = TRUE ; one2many = FALSE ; return STATUS_OK ; }
int main ( int argc , const char* argv[] ) { int a = 0 ; mcxTing* argtxt = mcxTingEmpty(NULL, 10) ; if (0) mclxIOsetQMode("MCLXIOVERBOSITY", MCL_APP_VB_NO) ; opInitialize() /* symtable etc */ ; globInitialize() /* hdltable etc */ ; if (argc == 1) { mcxTing* ops = mcxTingEmpty(NULL, 20) ; mcxIO *xfin = mcxIOnew("-", "r") ; mcxIOopen(xfin, EXIT_ON_FAIL) ; fprintf ( stdout , "At your service: " "'[/<op>] help', '[/<str>] grep', 'ops', 'info', and 'quit'.\n" ) ; while (1) { int ok ; mcxTing* line = mcxTingEmpty(NULL, 30) ; fprintf(stdout, "> ") ; fflush(stdout) ; if (STATUS_OK != mcxIOreadLine(xfin, line, MCX_READLINE_BSC)) { fprintf(stdout, "curtains!\n") ; mcxTingFree(&line) ; break ; } mcxTingAppend(ops, line->str) ; mcxTingFree(&line) ; ok = zsDoSequence(ops->str) ; if (ok && (v_g & V_STACK)) zsList(0) ; mcxTingEmpty(ops, 20) ; } } else { for (a=1;a<argc;a++) { mcxTingWrite(argtxt, argv[a]) ; if (!zgUser(argtxt->str)) mcxExit(1) ; } } mcxTingFree(&argtxt) ; return 0 ; }
static mcxstatus collectArgHandle ( int optid , const char* val ) { switch(optid) { case MY_OPT_TAB : xftab_g = mcxIOnew(val, "r") ; break ; case MY_OPT_OUT : out_g = val ; break ; case MY_OPT_PASTE : collect_g = 'p' ; break ; case MY_OPT_NO_HEADER : header_g = FALSE ; break ; case MY_OPT_TRANSFORM : transform_spec = mcxTingNew(val) ; break ; case MY_OPT_MATRIX_MAX : collect_g = 'm' ; fltop_g = fltMax ; break ; case MY_OPT_MATRIX_ADD : collect_g = 'm' ; break ; case MY_OPT_2COLUMN : collect_g = 'c' ; break ; case MY_OPT_SUMMARY : summary_g = 1 ; break ; default : mcxExit(1) ; } ; return STATUS_OK ; }
static mcxstatus adjustInit ( void ) { xfout = mcxIOnew("-", "w") ; xfcl = NULL ; xfmx = NULL ; lintl = 0 ; lintk = 0 ; fc = FALSE ; return STATUS_OK ; }
static mcxstatus alterArgHandle ( int optid , const char* val ) { switch(optid) { case MY_OPT_IMX : mcxIOnewName(xfmx_g, val) ; break ; case MY_OPT_ABC : xfabc_g = mcxIOnew(val, "r") ; break ; case MY_OPT_O : mcxIOnewName(xfout_g, val) ; break ; case MY_OPT_CANONICAL : canonical_g = atoi(val) ; break ; case MY_OPT_TAB : xftab_g = mcxIOnew(val, "r") ; break ; case MY_OPT_TRANSFORM : transform_spec = mcxTingNew(val) ; break ; default : mcxExit(1) ; ; } return STATUS_OK ; }
static mcxstatus adjustArgHandle ( int optid , const char* val ) { switch(optid) { case MY_OPT_OUTPUT : mcxIOnewName(xfout, val) ; break ; case MY_OPT_IMX : xfmx = mcxIOnew(val, "r") ; break ; case MY_OPT_ICL : xfcl = mcxIOnew(val, "r") ; break ; case MY_OPT_LINT_L : lintl = atoi(val) ; break ; case MY_OPT_FORCE_CONNECTED : fc = TRUE ; break ; case MY_OPT_LINT_K : lintk = atoi(val) ; break ; default : return STATUS_FAIL ; } return STATUS_OK ; }
int main ( int argc , const char* argv[] ) { mcxIO* xf1, *xf2 ; mclx* mx1, *mx2 ; mcxbits modes = 0 ; mcxLogLevel = MCX_LOG_AGGR | MCX_LOG_MODULE | MCX_LOG_IO | MCX_LOG_GAUGE | MCX_LOG_WARN ; mclx_app_init(stdout) ; if (argc < 4) mcxUsage(stdout, me, usagelines) , mcxExit(0) ; modes = atoi(argv[1]) ; xf1 = mcxIOnew(argv[2], "r") ; xf2 = mcxIOnew(argv[3], "r") ; mx1 = mclxRead(xf1, EXIT_ON_FAIL) ; mx2 = mclxRead(xf2, EXIT_ON_FAIL) ; pairwise_setops(mx1, mx2, modes) ; if (modes & MMM_DUMPMX) { mcxIO* xo = mcxIOnew("out.mmm", "w") ; mclxWrite(mx1, xo, MCLXIO_VALUE_GETENV, RETURN_ON_FAIL) ; } mclxFree(&mx1) ; mclxFree(&mx2) ; mcxIOfree(&xf1) ; mcxIOfree(&xf2) ; return 0 ; }
static mclx* get_coarse ( const mclx* mxbase , mclx* clprev , mcxbool add_transpose ) { mclx* blockc = mclxBlocksC(mxbase, clprev) ; mclx* clprevtp = mclxTranspose(clprev) ; mclx *p1 = NULL /* p_roduct */ ; mclx* mx_coarse= NULL ; mclxMakeStochastic(clprev) /****************** <EXPERIMENTAL CRAP> ************************************/ ; if (hdp_g) mclxUnary(clprev, fltxPower, &hdp_g) /* parameter: use mxbase rather than blockc */ ; if (getenv("MCLCM_BLOCK_STOCHASTIC")) /* this works very badly! */ mclxMakeStochastic(blockc) ; else if (getenv("MCLCM_BASE_UNSCALE") && start_col_sums_g) { dim i ; for (i=0;i<N_COLS(blockc);i++) { double f = start_col_sums_g->ivps[i].val ; mclvUnary(blockc->cols+i, fltxMul, &f) ; } ; } /****************** </EXPERIMENTAL> *****************************************/ p1 = mclxCompose(blockc, clprev, 0) ;if (0) {mcxIO* t = mcxIOnew("-", "w") ;mclxWrite(blockc, t, MCLXIO_VALUE_GETENV, EXIT_ON_FAIL) ; } ; mclxFree(&blockc) ; mx_coarse = mclxCompose(clprevtp, p1, 0) ; if (add_transpose) mclxAddTranspose(mx_coarse, 0.0) ; mclxAdjustLoops(mx_coarse, mclxLoopCBremove, NULL) ; mclxFree(&p1) ; mclxFree(&clprevtp) ; mclxMakeCharacteristic(clprev) ; return mx_coarse ; }
static mcxstatus allInit ( void ) { xfmx_g = mcxIOnew("-", "r") ; xfabc_g = NULL ; xftab_g = NULL ; tab_g = NULL ; progress_g = 0 ; rough = FALSE ; list_nodes = TRUE ; mod_up = FALSE ; n_group_G = 1 ; i_group = 0 ; n_thread_l = 0 ; include_ends_g = FALSE ; out_g = "-" ; debug_g = 0 ; return STATUS_OK ; }
void write_clustering ( mclx* cl , const mclx* clprev , mcxIO* xfcone , mcxIO* xfstack , const char* plexprefix , int multiplex_idx , const mclAlgParam* mlp ) { /* this branch is also taken for dispatch mode */ if (plexprefix) { mcxTing* clname = mcxTingPrint(NULL, "%s.%03d", plexprefix, multiplex_idx) ; mcxIO* xfout = mcxIOnew(clname->str, "w") ; if (dispatch_g && mlp && !mcxIOopen(xfout, RETURN_ON_FAIL)) fprintf(xfout->fp, "# %s\n", mlp->cline->str) ; mclxaWrite(cl, xfout, MCLXIO_VALUE_NONE, RETURN_ON_FAIL) ; mcxTingFree(&clname) ; mcxIOfree(&xfout) ; } if (subcluster_g || dispatch_g) return ; if (xfstack) mclxaWrite(cl, xfstack, MCLXIO_VALUE_NONE, RETURN_ON_FAIL) ; if (xfcone && !clprev) mclxaWrite(cl, xfcone, MCLXIO_VALUE_NONE, RETURN_ON_FAIL) ; else if (xfcone) { mclx* clprevt = mclxTranspose(clprev) ; mclx* contracted = mclxCompose(clprevt, cl, 0) ; mclxMakeCharacteristic(contracted) ; mclxaWrite(contracted, xfcone, MCLXIO_VALUE_NONE, RETURN_ON_FAIL) ; mclxFree(&clprevt) ; mclxFree(&contracted) ; } }
int main ( int argc , const char* argv[] ) { mcxIO* xfdagreduce = NULL, *xfattr = NULL, *xfdiff = NULL ; double child_diff_lq = 0.2 ; double parent_diff_gq = 0.4 ; mcxIO* xfimx = mcxIOnew("-", "r"), *xfdag = NULL, *xftab = NULL ; mclTab* tab = NULL ; int q = -1 ; mclx* mx ; unsigned char test_mode = 0 ; mcxstatus parseStatus = STATUS_OK ; mcxOption* opts, *opt ; mcxOptAnchorSortById(options, sizeof(options)/sizeof(mcxOptAnchor) -1) ; if (!(opts = mcxOptParse(options, (char**) argv, argc, 1, 0, &parseStatus))) exit(0) ; mcxLogLevel = MCX_LOG_AGGR | MCX_LOG_MODULE | MCX_LOG_IO | MCX_LOG_GAUGE | MCX_LOG_WARN ; mclxIOsetQMode("MCLXIOVERBOSITY", MCL_APP_VB_YES) ; mclx_app_init(stderr) ; for (opt=opts;opt->anch;opt++) { mcxOptAnchor* anch = opt->anch ; switch(anch->id) { case MY_OPT_HELP : mcxOptApropos(stdout, me, syntax, 0, 0, options) ; return 0 ; case MY_OPT_VERSION : app_report_version(me) ; return 0 ; case MY_OPT_TEST_CYCLE : test_mode = 'c' ; break ; case MY_OPT_TEST_CROSS : test_mode = 'x' ; break ; case MY_OPT_DAG_ATTR : xfattr = mcxIOnew(opt->val, "w") ; mcxIOopen(xfattr, EXIT_ON_FAIL) ; break ; case MY_OPT_DAG_DIFF : xfdiff = mcxIOnew(opt->val, "w") ; break ; case MY_OPT_DAG_REDUCE : xfdagreduce = mcxIOnew(opt->val, "w") ; break ; case MY_OPT_CHILD_DIFF_LQ : child_diff_lq = atof(opt->val) ; break ; case MY_OPT_PARENT_DIFF_GQ : parent_diff_gq = atof(opt->val) ; break ; case MY_OPT_QUERY : q = atoi(opt->val) ; break ; case MY_OPT_TAB : xftab = mcxIOnew(opt->val, "r") ; break ; case MY_OPT_IMX : mcxIOnewName(xfimx, opt->val) ; break ; } } ; if (xfimx) mx = mclxRead(xfimx, EXIT_ON_FAIL) ; else mcxDie(1, me, "need -imx") ; if (xftab) tab = mclTabRead(xftab, mx->dom_cols, EXIT_ON_FAIL) ; if (test_mode == 'c') test_for_cycles(mx) ; else if (test_mode == 'x') test_cross_ratio(mx) ; else if (xfattr) get_attr(mx, tab, xfattr) ; else if (xfdagreduce) { mclxComposeHelper* ch = mclxComposePrepare(mx, mx) ; dim i ; for (i=0;i<N_COLS(mx);i++) { mclv* in = mx->cols+i ; mclv* out = mclxVectorCompose(mx, in, NULL, ch) ; mcldMinus(in, out, in) ; mclvFree(&out) ; } mclxWrite(mx, xfdagreduce, MCLXIO_VALUE_GETENV, EXIT_ON_FAIL) ; mclxComposeRelease(&ch) ; } else if (xfdiff) dag_diff_select(mx, tab, xfdiff, child_diff_lq, parent_diff_gq) ; mclxFree(&mx) ; mcxIOfree(&xfimx) ; mcxIOfree(&xfdag) ; mcxIOfree(&xfattr) ; mcxIOfree(&xfdagreduce) ; return 0 ; }
int main ( int argc , const char* argv[] ) { mcxIO *xfin = mcxIOnew("-", "r") ; mcxIO *xfout = mcxIOnew("-", "w") ; mclMatrix *mx = NULL ; mclx* cmapx = NULL, *rmapx = NULL ; const char* me = "mcxmap" ; long cshift = 0 ; long rshift = 0 ; long cmul = 1 ; long rmul = 1 ; mcxIO* xf_cannc = NULL ; mcxIO* xf_cannr = NULL ; mcxstatus status = STATUS_OK ; mcxbool invert = FALSE ; mcxbool invertr = FALSE ; mcxbool invertc = FALSE ; mcxIO* xf_map_c = NULL, *xf_map_r = NULL, *xf_map = NULL, *xf_tab = NULL ; mcxOption* opts, *opt ; mcxstatus parseStatus = STATUS_OK ; mcxLogLevel = MCX_LOG_AGGR | MCX_LOG_MODULE | MCX_LOG_IO | MCX_LOG_GAUGE | MCX_LOG_WARN ; mclxIOsetQMode("MCLXIOVERBOSITY", MCL_APP_VB_NO) ; mclx_app_init(stderr) ; mcxOptAnchorSortById(options, sizeof(options)/sizeof(mcxOptAnchor) -1) ; opts = mcxOptParse(options, (char**) argv, argc, 1, 0, &parseStatus) ; if (!opts) exit(0) ; for (opt=opts;opt->anch;opt++) { mcxOptAnchor* anch = opt->anch ; switch(anch->id) { case MY_OPT_HELP : case MY_OPT_APROPOS : mcxOptApropos(stdout, me, syntax, 0, 0, options) ; return 0 ; case MY_OPT_VERSION : app_report_version(me) ; return 0 ; case MY_OPT_IMX : mcxIOnewName(xfin, opt->val) ; break ; case MY_OPT_OUT : mcxIOnewName(xfout, opt->val) ; break ; case MY_OPT_MUL : cmul = atol(opt->val) ; rmul = cmul ; break ; case MY_OPT_CMUL : cmul = atol(opt->val) ; break ; case MY_OPT_RMUL : rmul = atol(opt->val) ; break ; case MY_OPT_SHIFT : cshift = atol(opt->val) ; rshift = atol(opt->val) ; break ; case MY_OPT_CSHIFT : cshift = atol(opt->val) ; break ; case MY_OPT_RSHIFT : rshift = atol(opt->val) ; break ; case MY_OPT_MAP : xf_map = mcxIOnew(opt->val, "r") ; invert = FALSE ; break ; case MY_OPT_CMAP : invertc = FALSE ; xf_map_c = mcxIOnew(opt->val, "r") ; break ; case MY_OPT_RMAP : invertr = FALSE ; xf_map_r = mcxIOnew(opt->val, "r") ; break ; case MY_OPT_MAPI : invert = TRUE ; xf_map = mcxIOnew(opt->val, "r") ; break ; case MY_OPT_CMAPI : invertc = TRUE ; xf_map_c = mcxIOnew(opt->val, "r") ; break ; case MY_OPT_RMAPI : invertr = TRUE ; xf_map_r = mcxIOnew(opt->val, "r") ; break ; case MY_OPT_MAKE_MAP : xf_cannc = mcxIOnew(opt->val, "w") ; xf_cannr = xf_cannc ; break ; case MY_OPT_MAKE_MAPC : xf_cannc = mcxIOnew(opt->val, "w") ; break ; case MY_OPT_MAKE_MAPR : xf_cannr = mcxIOnew(opt->val, "w") ; break ; case MY_OPT_TAB : xf_tab = mcxIOnew(opt->val, "r") ; break ; } } /* little special case. restructure when it grows */ if (xf_tab) { mclTab* tab1, *tab2 ; if (xf_map) { mcxIOopen(xf_map, EXIT_ON_FAIL) ; cmapx = mclxRead(xf_map, EXIT_ON_FAIL) ; } else mcxDie(1, me, "-tab option requires -map option") ; tab1 = mclTabRead(xf_tab, NULL, EXIT_ON_FAIL) ; if ((tab2 = mclTabMap(tab1, cmapx))) mclTabWrite(tab2, xfout, NULL, EXIT_ON_FAIL) ; else mcxDie(1, me, "map file error (subsumption/bijection)") ; return 0 ; } mx = mclxRead(xfin, EXIT_ON_FAIL) ; if (xf_map) { mcxIOopen(xf_map, EXIT_ON_FAIL) ; cmapx = mclxRead(xf_map, EXIT_ON_FAIL) ; rmapx = cmapx ; } else { if (xf_map_c) { mcxIOopen(xf_map_c, EXIT_ON_FAIL) ; cmapx = mclxRead(xf_map_c, EXIT_ON_FAIL) ; } else if (cshift || cmul > 1) cmapx = mclxMakeMap ( mclvCopy(NULL, mx->dom_cols) , mclvMap(NULL, cmul, cshift, mx->dom_cols) ) ; else if (xf_cannc) /* fixme slightly flaky interface */ { cmapx = mclxMakeMap ( mclvCopy(NULL, mx->dom_cols) , mclvCanonical(NULL, mx->dom_cols->n_ivps, 1.0) ) ; mclxWrite(cmapx, xf_cannc, MCLXIO_VALUE_GETENV, RETURN_ON_FAIL) ; } if (xf_map_r) { mcxIOopen(xf_map_r, EXIT_ON_FAIL) ; rmapx = mclxRead(xf_map_r, EXIT_ON_FAIL) ; } else if (rshift || rmul > 1) rmapx = mclxMakeMap ( mclvCopy(NULL, mx->dom_rows) , mclvMap(NULL, rmul, rshift, mx->dom_rows) ) ; else if (xf_cannr) { rmapx = mclxMakeMap ( mclvCopy(NULL, mx->dom_rows) , mclvCanonical(NULL, mx->dom_rows->n_ivps, 1.0) ) ; if (xf_cannr != xf_cannc) mclxWrite(rmapx, xf_cannr, MCLXIO_VALUE_GETENV, RETURN_ON_FAIL) ; else if (!mclxIsGraph(mx)) mcxErr(me, "row map not written but matrix is not a graph") ; } } if (invert && cmapx && cmapx == rmapx) { mclx* cmapxi = mclxTranspose(cmapx) ; mclxFree(&cmapx) ; cmapx = rmapx = cmapxi ; } else { if ((invert || invertr) && rmapx) { mclx* rmapxi = mclxTranspose(rmapx) ; mclxFree(&rmapx) ; rmapx = rmapxi ; } if ((invert || invertc) && cmapx) { mclx* cmapxi = mclxTranspose(cmapx) ; mclxFree(&cmapx) ; cmapx = cmapxi ; } } ; status = STATUS_FAIL ; do { if (cmapx && mclxMapCols(mx, cmapx)) break ; if (rmapx && mclxMapRows(mx, rmapx)) break ; status = STATUS_OK ; } while (0) ; if (status) { mcxErr(me, "error, nothing written") ; return 1 ; } mclxWrite(mx, xfout, MCLXIO_VALUE_GETENV, EXIT_ON_FAIL) ; return 0 ; }
int main ( int argc , const char* argv[] ) { mcxIO* xf_tab = NULL ; mcxIO* xf_tabr = NULL ; mcxIO* xf_tabc = NULL ; mcxIO* xf_restrict_tab = NULL ; mcxIO* xf_restrict_tabr = NULL ; mcxIO* xf_restrict_tabc = NULL ; mcxIO* xf_mx = mcxIOnew("-", "r") ; mcxIO* xfout = NULL ; const char* fndump = "-" ; mclTab* tabr = NULL ; mclTab* tabc = NULL ; mclTab* restrict_tabr = NULL ; mclTab* restrict_tabc = NULL ; mcxbool transpose = FALSE ; mcxbool lazy_tab = FALSE ; mcxbool write_tabc = FALSE ; mcxbool write_tabr = FALSE ; mcxbool cat = FALSE ; mcxbool tree = FALSE ; mcxbool skel = FALSE ; mcxbool newick = FALSE ; mcxbits newick_bits = 0 ; mcxbits cat_bits = 0 ; dim catmax = 1 ; dim n_max = 0 ; dim table_nlines = 0 ; dim table_nfields = 0 ; int split_idx = 1 ; int split_inc = 1 ; const char* split_stem = NULL ; const char* sort_mode = NULL ; mcxTing* line = mcxTingEmpty(NULL, 10) ; mcxbits modes = MCLX_DUMP_VALUES ; mcxbits mode_dump = MCLX_DUMP_PAIRS ; mcxbits mode_part = 0 ; mcxbits mode_loop = MCLX_DUMP_LOOP_ASIS ; mcxbits mode_matrix = 0 ; int digits = MCLXIO_VALUE_GETENV ; mcxOption* opts, *opt ; mcxstatus parseStatus = STATUS_OK ; mcxLogLevel = MCX_LOG_AGGR | MCX_LOG_MODULE | MCX_LOG_IO | MCX_LOG_GAUGE | MCX_LOG_WARN ; mclxIOsetQMode("MCLXIOVERBOSITY", MCL_APP_VB_YES) ; mclx_app_init(stderr) ; mcxOptAnchorSortById(options, sizeof(options)/sizeof(mcxOptAnchor) -1) ; opts = mcxOptParse(options, (char**) argv, argc, 1, 0, &parseStatus) ; if (!opts) exit(0) ; for (opt=opts;opt->anch;opt++) { mcxOptAnchor* anch = opt->anch ; switch(anch->id) { case MY_OPT_HELP : case MY_OPT_APROPOS : mcxOptApropos(stdout, me, syntax, 0, 0, options) ; return 0 ; case MY_OPT_VERSION : app_report_version(me) ; return 0 ; case MY_OPT_TAB : xf_tab = mcxIOnew(opt->val, "r") ; break ; case MY_OPT_TABC : xf_tabc = mcxIOnew(opt->val, "r") ; break ; case MY_OPT_TABR : xf_tabr = mcxIOnew(opt->val, "r") ; break ; case MY_OPT_OUTPUT : fndump = opt->val ; break ; case MY_OPT_SEP_LEAD : sep_lead_g = opt->val ; break ; case MY_OPT_SEP_FIELD : sep_row_g = opt->val ; break ; case MY_OPT_SEP_CAT : sep_cat_g = opt->val ; break ; case MY_OPT_SEP_VAL : sep_val_g = opt->val ; break ; case MY_OPT_PREFIXC : prefixc_g = opt->val ; break ; case MY_OPT_RESTRICT_TAB : xf_restrict_tab = mcxIOnew(opt->val, "r") ; break ; case MY_OPT_RESTRICT_TABC : xf_restrict_tabc = mcxIOnew(opt->val, "r") ; break ; case MY_OPT_RESTRICT_TABR : xf_restrict_tabr = mcxIOnew(opt->val, "r") ; break ; case MY_OPT_LAZY_TAB : lazy_tab = TRUE ; break ; case MY_OPT_NO_VALUES : BIT_OFF(modes, MCLX_DUMP_VALUES) ; break ; case MY_OPT_DUMP_RLINES : mode_dump = MCLX_DUMP_LINES ; BIT_ON(modes, MCLX_DUMP_NOLEAD) ; break ; case MY_OPT_DUMP_VLINES : mode_dump = MCLX_DUMP_LINES ; BIT_ON(modes, MCLX_DUMP_LEAD_VALUE) ; break ; case MY_OPT_DUMP_LINES : mode_dump = MCLX_DUMP_LINES ; break ; case MY_OPT_OMIT_EMPTY : BIT_ON(modes, MCLX_DUMP_OMIT_EMPTY) ; break ; case MY_OPT_SORT : sort_mode = opt->val ; break ; case MY_OPT_NO_LOOPS : mode_loop = MCLX_DUMP_LOOP_NONE ; break ; case MY_OPT_CAT_LIMIT : n_max = atoi(opt->val) ; break ; case MY_OPT_SPLIT_STEM : split_stem = opt->val ; sep_cat_g = NULL ; break ; case MY_OPT_FORCE_LOOPS : mode_loop = MCLX_DUMP_LOOP_FORCE ; break ; case MY_OPT_SKEL : skel = TRUE ; break ; case MY_OPT_WRITE_TABC : write_tabc = TRUE ; break ; case MY_OPT_DIGITS : digits = strtol(opt->val, NULL, 10) ; break ; case MY_OPT_WRITE_TABR : write_tabr = TRUE ; break ; case MY_OPT_DUMP_RDOM : transpose = TRUE ; skel = TRUE ; mode_dump = MCLX_DUMP_LINES ; break ; case MY_OPT_DUMP_CDOM : skel = TRUE ; mode_dump = MCLX_DUMP_LINES ; break ; case MY_OPT_IMX : mcxIOnewName(xf_mx, opt->val) ; break ; case MY_OPT_ICL : mcxIOnewName(xf_mx, opt->val) ; mode_dump = MCLX_DUMP_LINES ; BIT_ON(modes, MCLX_DUMP_NOLEAD) ; BIT_OFF(modes, MCLX_DUMP_VALUES) ; break ; case MY_OPT_TREECAT : mcxIOnewName(xf_mx, opt->val) ; tree = TRUE ; cat_bits |= MCLX_PRODUCE_DOMSTACK ; break ; case MY_OPT_CAT : mcxIOnewName(xf_mx, opt->val) ; cat = TRUE ; break ; case MY_OPT_DUMP_MATRIX : mode_matrix |= MCLX_DUMP_MATRIX ; break ; case MY_OPT_TRANSPOSE : transpose = TRUE ; break ; case MY_OPT_DUMP_UPPER : mode_part = MCLX_DUMP_PART_UPPER ; break ; case MY_OPT_DUMP_UPPERI : mode_part = MCLX_DUMP_PART_UPPERI ; break ; case MY_OPT_DUMP_LOWER : mode_part = MCLX_DUMP_PART_LOWER ; break ; case MY_OPT_DUMP_LOWERI : mode_part = MCLX_DUMP_PART_LOWERI ; break ; case MY_OPT_DUMP_NOLEAD : BIT_ON(modes, MCLX_DUMP_NOLEAD) ; break ; case MY_OPT_NEWICK_MODE : if (strchr(opt->val, 'N')) newick_bits |= (MCLX_NEWICK_NONL | MCLX_NEWICK_NOINDENT) ; if (strchr(opt->val, 'I')) newick_bits |= MCLX_NEWICK_NOINDENT ; if (strchr(opt->val, 'B')) newick_bits |= MCLX_NEWICK_NONUM ; if (strchr(opt->val, 'S')) newick_bits |= MCLX_NEWICK_NOPTHS ; newick = TRUE ; break ; case MY_OPT_DUMP_NEWICK : newick = TRUE ; break ; case MY_OPT_DUMP_TABLE : mode_dump = MCLX_DUMP_TABLE ; break ; case MY_OPT_TABLE_NFIELDS : table_nfields = atoi(opt->val) ; break ; case MY_OPT_TABLE_NLINES : table_nlines = atoi(opt->val) ; break ; case MY_OPT_DUMP_PAIRS : mode_dump = MCLX_DUMP_PAIRS ; break ; } } ; if (skel) cat_bits |= MCLX_READ_SKELETON ; modes |= mode_loop | mode_dump | mode_part | mode_matrix ; xfout = mcxIOnew(fndump, "w") ; mcxIOopen(xfout, EXIT_ON_FAIL) ; mcxIOopen(xf_mx, EXIT_ON_FAIL) ; if (cat || tree) catmax = n_max ? n_max : 0 ; if ((write_tabc || write_tabr) && !xf_tab) mcxDie(1, me, "need a single tab file (-tab option) with --write-tabc or --write-tabr") ; if (xf_tab && mcxIOopen(xf_tab, RETURN_ON_FAIL)) mcxDie(1, me, "no tab") ; else { if (xf_tabr && mcxIOopen(xf_tabr, RETURN_ON_FAIL)) mcxDie(1, me, "no tabr") ; if (xf_tabc && mcxIOopen(xf_tabc, RETURN_ON_FAIL)) mcxDie(1, me, "no tabc") ; } { if (xf_restrict_tab && mcxIOopen(xf_restrict_tab, RETURN_ON_FAIL)) mcxDie(1, me, "no restriction tab") ; else { if (xf_restrict_tabr && mcxIOopen(xf_restrict_tabr, RETURN_ON_FAIL)) mcxDie(1, me, "no restriction tabr") ; if (xf_restrict_tabc && mcxIOopen(xf_restrict_tabc, RETURN_ON_FAIL)) mcxDie(1, me, "no restriction tabc") ; } /* fixme: below is pretty boilerplate, happens in other places as well */ if (xf_restrict_tab) { if (!(restrict_tabr = mclTabRead (xf_restrict_tab, NULL, RETURN_ON_FAIL))) mcxDie(1, me, "error reading restriction tab") ; restrict_tabc = restrict_tabr ; mcxIOclose(xf_restrict_tab) ; } else { if (xf_restrict_tabr) { if (!(restrict_tabr = mclTabRead(xf_restrict_tabr, NULL, RETURN_ON_FAIL))) mcxDie(1, me, "error reading restriction tabr") ; mcxIOclose(xf_restrict_tabr) ; } if (xf_restrict_tabc) { if (!(restrict_tabc = mclTabRead(xf_restrict_tabc, NULL, RETURN_ON_FAIL))) mcxDie(1, me, "error reading restriction tabc") ; mcxIOclose(xf_restrict_tabc) ; } } } /* fixme: restructure code to include bit below */ if (write_tabc || write_tabr) { mclv* dom_cols = mclvInit(NULL) ; mclv* dom_rows = mclvInit(NULL) ; mclv* dom = write_tabc ? dom_cols : dom_rows ; if (!(tabc = mclTabRead(xf_tab, NULL, RETURN_ON_FAIL))) mcxDie(1, me, "error reading tab file") ; if (mclxReadDomains(xf_mx, dom_cols, dom_rows)) mcxDie(1, me, "error reading matrix file") ; mcxIOclose(xf_mx) /* fixme check status */ ; mclTabWrite(tabc, xfout, dom, RETURN_ON_FAIL) ; mcxIOclose(xfout) ; return 0 ; } if (newick) { mcxTing* thetree ; mclxCat cat ; if (xf_tab && !(tabr = mclTabRead(xf_tab, NULL, RETURN_ON_FAIL))) mcxDie(1, me, "error reading tab file") ; mclxCatInit(&cat) ; if ( mclxCatRead ( xf_mx , &cat , 0 , NULL , tabr ? tabr->domain : NULL , MCLX_CATREAD_CLUSTERTREE | MCLX_ENSURE_ROOT ) ) mcxDie(1, me, "failure reading file") ; thetree = mclxCatNewick(&cat, tabr, newick_bits) ; fwrite(thetree->str, 1, thetree->len, xfout->fp) ; fputc('\n', xfout->fp) ; mcxIOclose(xfout) ; return 0 ; } while (1) { mclxIOdumper dumper ; mclxCat cat ; dim i ; if (xf_tab && !lazy_tab) cat_bits |= MCLX_REQUIRE_GRAPH ; mclxCatInit(&cat) ; if (mclxCatRead(xf_mx, &cat, catmax, NULL, NULL, cat_bits)) break ; for (i=0;i<cat.n_level;i++) { mclx* mx = cat.level[i].mx ; if (restrict_tabr || restrict_tabc) { mclx* sub ; sub = mclxSub ( mx , restrict_tabc ? restrict_tabc->domain : mx->dom_cols , restrict_tabr ? restrict_tabr->domain : mx->dom_rows ) ; mx = sub ; } /* noteme fixme dangersign mx now may violate some 'cat' invariant */ if (sort_mode) { if (!strcmp(sort_mode, "size-ascending")) mclxColumnsRealign(mx, mclvSizeCmp) ; else if (!strcmp(sort_mode, "size-descending")) mclxColumnsRealign(mx, mclvSizeRevCmp) ; else mcxErr(me, "unknown sort mode <%s>", sort_mode) ; if (catmax != 1) mcxErr(me, "-sort option and cat mode may fail or corrupt") ; } if (xf_tab && !tabr) { if (!( tabr = mclTabRead (xf_tab, lazy_tab ? NULL : mx->dom_rows, RETURN_ON_FAIL) ) ) mcxDie(1, me, "consider using --lazy-tab option") ; tabc = tabr ; mcxIOclose(xf_tab) ; } else { if (!tabr && xf_tabr) { if (!(tabr = mclTabRead (xf_tabr, lazy_tab ? NULL : mx->dom_rows, RETURN_ON_FAIL) ) ) mcxDie(1, me, "consider using --lazy-tab option") ; mcxIOclose(xf_tabr) ; } if (!tabc && xf_tabc) { if (!( tabc = mclTabRead (xf_tabc, lazy_tab ? NULL : mx->dom_cols, RETURN_ON_FAIL) ) ) mcxDie(1, me, "consider using --lazy-tab option") ; mcxIOclose(xf_tabc) ; } } ; if (transpose) { mclx* tp = mclxTranspose(mx) ; mclxFree(&mx) ; mx = tp ; if (tabc || tabr) { mclTab* tabt = tabc ; tabc = tabr ; tabr = tabt ; } } if (mode_dump == MCLX_DUMP_TABLE) BIT_ON(modes, MCLX_DUMP_TABLE_HEADER) ; mclxIOdumpSet(&dumper, modes, sep_lead_g, sep_row_g, sep_val_g) ; dumper.table_nlines = table_nlines ; dumper.table_nfields = table_nfields ; dumper.prefixc = prefixc_g ; if (split_stem) { mcxTing* ting = mcxTingPrint(NULL, "%s.%03d", split_stem, split_idx) ; mcxIOclose(xfout) ; mcxIOrenew(xfout, ting->str, "w") ; split_idx += split_inc ; } if ( mclxIOdump ( mx , xfout , &dumper , tabc , tabr , digits , RETURN_ON_FAIL ) ) mcxDie(1, me, "something suboptimal") ; mclxFree(&mx) ; if (sep_cat_g && i+1 < cat.n_level) fprintf(xfout->fp, "%s\n", sep_cat_g) ; } break ; } mcxIOfree(&xf_mx) ; mcxIOfree(&xfout) ; mcxIOfree(&xf_tab) ; mcxIOfree(&xf_tabr) ; mcxIOfree(&xf_tabc) ; mcxTingFree(&line) ; return 0 ; }
static mcxstatus mateMain ( int argc_unused cpl__unused , const char* argv[] ) { mcxIO* xfx, *xfy ; mclx* mx, *my, *meet, *teem, *myt ; dim x, y ; mcxIOopen(xfout, EXIT_ON_FAIL) ; xfx = mcxIOnew(argv[0], "r") ; mx = mclxRead(xfx, EXIT_ON_FAIL) ; mcxIOclose(xfx) ; xfy = mcxIOnew(argv[1], "r") ; my = mclxRead(xfy, EXIT_ON_FAIL) ; myt = mclxTranspose(my) ; if (!MCLD_EQUAL(mx->dom_rows, my->dom_rows)) mcxDie(1, me, "domains are not equal") ; meet= mclxCompose(myt, mx, 0, 0) /* fixme thread interface */ ; teem= mclxTranspose(meet) ; if (legend) fprintf ( xfout->fp , "%-10s %6s %6s %6s %6s %6s %6s %6s\n" , "overlap" , "x-idx" , "y-idx" , "meet" , "xdiff" , "ydiff" , "x-size" , "y-size" ) ; for (x=0;x<N_COLS(meet);x++) { mclv* xvec = meet->cols+x ; long X = xvec->vid ; long xsize = mx->cols[x].n_ivps ; if (one2many && xvec->n_ivps < 2) continue ; for (y=0;y<N_COLS(teem);y++) { mclv* yvec = teem->cols+y ; long Y = yvec->vid ; long ysize = my->cols[y].n_ivps ; double twinfac ; long meetsize ; mclp* ivp = mclvGetIvp(yvec, X, NULL) ; if (!ivp) continue /* * meet size, left diff, right diff, right size. */ ; meetsize = ivp->val ; if (!xsize && !ysize) /* paranoia */ continue ; twinfac = 2 * meetsize / ( (double) (xsize + ysize) ) ; if (xfout) fprintf ( xfout->fp , "%-10.3f %6ld %6ld %6ld %6ld %6ld %6ld %6ld\n" , twinfac , X , Y , meetsize , xsize - meetsize , ysize - meetsize , xsize , ysize ) ; } } return STATUS_OK ; }
mcxTingFree(&sa) ; mcxTingFree(&sb) ; mcxTingFree(&line) ; mclgSSPxyFree(&sspo) ; return mx ; } static mcxstatus erdosMain ( int argc_unused cpl__unused , const char* argv_unused[] cpl__unused ) { mclx* mx, *mxtp = NULL ; mcxIO* xfout = mcxIOnew(out_g, "w") ; mcxIO* xfpath = path_g ? mcxIOnew(path_g, "w") : NULL ; mcxIO* xfstep = step_g ? mcxIOnew(step_g, "w") : NULL ; mcxIOopen(xfout, EXIT_ON_FAIL) ; debug_g = mcx_debug_g ; mcxLogLevel = MCX_LOG_AGGR | MCX_LOG_MODULE | MCX_LOG_IO | MCX_LOG_GAUGE | MCX_LOG_WARN ; mclx_app_init(stderr) ; if (xfabc_g) { if (xftab_g) tab_g = mclTabRead(xftab_g, NULL, EXIT_ON_FAIL) , streamer_g.tab_sym_in = tab_g ; mx
static mcxstatus qArgHandle ( int optid , const char* val ) { switch(optid) { case MY_OPT_IMX : mcxIOnewName(xfmx_g, val) ; user_imx = TRUE ; break ; case MY_OPT_TAB : xftab_g = mcxIOnew(val, "r") ; break ; case MY_OPT_ICL : xfcl_g = mcxIOnew(val, "r") ; break ; case MY_OPT_TRANSFORM : transform_spec = mcxTingNew(val) ; break ; case MY_OPT_DIMENSION : mode_get = 'd' ; break ; case MY_OPT_TESTCYCLE : mode_get = 'c' ; break ; case MY_OPT_TESTCYCLE_N : n_limit = atoi(val) ; mode_get = 'c' ; break ; case MY_OPT_CLCF : doclcf_g = TRUE ; break ; case MY_OPT_KNNREDUCE : knnexact_g = FALSE ; break ; case MY_OPT_THREAD : n_thread_g = atoi(val) ; break ; case MY_OPT_NODE : mode_get = 'n' ; break ; case MY_OPT_FOUT : mcxIOnewName(xfout_g, val) ; break ; case MY_OPT_WEIGHT_SCALE : weight_scale = atof(val) ; break ; case MY_OPT_OUTPUT_TABLE : output_table = TRUE ; break ; case MY_OPT_MYTH : weefreemen = TRUE ; break ; case MY_OPT_EDGEWEIGHTS : mode_get = 'e' ; break ; case MY_OPT_EDGEWEIGHTS_HIST : mode_get = 'H' ; if (4 != sscanf(val, "%d,%d,%d,%d", &vary_a, &vary_z, &vary_s, &vary_n)) mcxDie(1, me, "failed to parse argument as integers start,end,step,norm") ; break ; case MY_OPT_EDGEWEIGHTS_SORTED : mode_get = 'E' ; break ; case MY_OPT_DIVIDE : divide_g = atoi(val) ; break ; case MY_OPT_VARY_CORRELATION : vary_a = 4 ; vary_z = 20 ; vary_s = 1 ; vary_n = 20 ; weight_scale = 100 ; mode_vary = 'c' ; break ; case MY_OPT_VARY_KNN : if (4 != sscanf(val, "%d,%d,%d,%d", &vary_a, &vary_z, &vary_s, &vary_n)) mcxDie(1, me, "failed to parse argument as integers start,end,step,norm") ; mode_vary = 'k' ; break ; case MY_OPT_VARY_THRESHOLD : if (4 != sscanf(val, "%u,%u,%u,%u", &vary_a, &vary_z, &vary_s, &vary_n)) mcxDie(1, me, "failed to parse argument as integers start,end,step,norm") ; mode_vary = 't' ; break ; default : mcxExit(1) ; ; } if (mode_vary && 1000 * vary_s < vary_z - vary_a) mcxDie(1, me, "argument leads to more than one thousand steps") ; if (!vary_n) mcxDie(1, me, "need nonzero scaling factor (last component)") ; return STATUS_OK ; }
int main ( int argc , const char* argv[] ) { mcxIO* xfmx = mcxIOnew("-", "r"), *xfout = mcxIOnew("-", "w") ; mclx* mx = NULL ; mclv* mx_diag = NULL ; mcxstatus parseStatus = STATUS_OK ; mcxOption* opts, *opt ; dim N_edge = 0 ; dim* offsets ; dim template_n_nodes = 0 ; mcxbool plus = FALSE ; double e_min = 1.0 ; double e_max = 0.0 ; double skew = 0.0 ; double radius = 0.0 ; double n_sdev = 0.5 ; double n_range = 2.0 ; double g_radius = 0.0 ; double g_mean = 0.0 ; double g_sdev = 0.0 ; double g_min = 1.0 ; double g_max = 0.0 ; mcxbool do_gaussian = FALSE ; dim i = 0 ; dim N_remove = 0 ; dim N_add = 0 ; dim N_shuffle = 0 ; unsigned long random_ignore = 0 ; srandom(mcxSeed(2308947)) ; mcxOptAnchorSortById(options, sizeof(options)/sizeof(mcxOptAnchor) -1) ; if (!(opts = mcxOptParse(options, (char**) argv, argc, 1, 0, &parseStatus))) exit(0) ; mcxLogLevel = MCX_LOG_AGGR | MCX_LOG_MODULE | MCX_LOG_IO | MCX_LOG_GAUGE | MCX_LOG_WARN ; mclxIOsetQMode("MCLXIOVERBOSITY", MCL_APP_VB_YES) ; mclx_app_init(stderr) ; for (opt=opts;opt->anch;opt++) { mcxOptAnchor* anch = opt->anch ; switch(anch->id) { case MY_OPT_HELP : case MY_OPT_APROPOS : mcxOptApropos(stdout, me, syntax, 20, MCX_OPT_DISPLAY_SKIP, options) ; return 0 ; case MY_OPT_VERSION : app_report_version(me) ; return 0 ; case MY_OPT_SKEW : skew = atof(opt->val) ; break ; case MY_OPT_GEN : template_n_nodes = atoi(opt->val) ; break ; case MY_OPT_IMX : mcxIOrenew(xfmx, opt->val, NULL) ; break ; case MY_OPT_PLUS : case MY_OPT_WB : plus = TRUE ; break ; case MY_OPT_OUT : mcxIOrenew(xfout, opt->val, NULL) ; break ; case MY_OPT_E_MAX : if (!strcmp(opt->val, "copy")) e_max = -DBL_MAX ; else e_max = atof(opt->val) ; break ; case MY_OPT_E_MIN : e_min = atof(opt->val) ; break ; case MY_OPT_G_MIN : g_min = atof(opt->val) ; break ; case MY_OPT_G_MAX : g_max = atof(opt->val) ; break ; case MY_OPT_G_SDEV : g_sdev = atof(opt->val) ; break ; case MY_OPT_G_MEAN : g_mean = atof(opt->val) ; do_gaussian = TRUE ; break ; case MY_OPT_G_RADIUS : g_radius = atof(opt->val) ; break ; case MY_OPT_N_RANGE : n_range = atof(opt->val) ; break ; case MY_OPT_N_SDEV : n_sdev = atof(opt->val) ; break ; case MY_OPT_N_RADIUS : radius = atof(opt->val) ; break ; case MY_OPT_SHUFFLE : N_shuffle = atoi(opt->val) ; break ; case MY_OPT_ADD : N_add = atoi(opt->val) ; break ; case MY_OPT_REMOVE : N_remove = atoi(opt->val) ; break ; } } /* hitting y% in vi tells me the size of this block */ { if (template_n_nodes) mx = mclxAllocZero ( mclvCanonical(NULL, template_n_nodes, 1.0) , mclvCanonical(NULL, template_n_nodes, 1.0) ) ; else mx = mclxReadx ( xfmx , EXIT_ON_FAIL , MCLX_REQUIRE_GRAPH ) ; mx_diag = mclxDiagValues(mx, MCL_VECTOR_COMPLETE) ; if (N_shuffle) mclxAdjustLoops(mx, mclxLoopCBremove, NULL) ; else mclxSelectUpper(mx) /* ^ apparently we always work on single arc representation (docme andsoon) */ ; offsets = mcxAlloc(sizeof offsets[0] * N_COLS(mx), EXIT_ON_FAIL) ; N_edge = 0 ; for (i=0;i<N_COLS(mx);i++) { offsets[i] = N_edge ; N_edge += mx->cols[i].n_ivps ; } if (N_edge < N_remove) { mcxErr ( me , "removal count %ld exceeds edge count %ld" , (long) N_remove , (long) N_edge ) ; N_remove = N_edge ; } random_ignore = RAND_MAX - (N_edge ? RAND_MAX % N_edge : 0) ; if (RAND_MAX / 2 < N_edge) mcxDie(1, me, "graph too large!") ; if (N_shuffle) { do_the_shuffle(mx, N_shuffle, offsets, N_edge, random_ignore) ; mx_readd_diagonal(mx, mx_diag) ; mclxWrite(mx, xfout, MCLXIO_VALUE_GETENV, RETURN_ON_FAIL) ; exit(0) ; } ; if (N_remove) { dim n_remove = do_remove(mx, N_remove, offsets, N_edge, random_ignore) /* Need to recompute N_edge and random_ignore. * NOTE we work with *upper* matrix; this counts graph edges. */ ; N_edge = mclxNrofEntries(mx) - n_remove ; random_ignore = RAND_MAX - (RAND_MAX % N_COLS(mx)) ; } if (g_mean) { if (!g_radius) { if (g_sdev) g_radius = 2 * g_sdev ; mcxWarn(me, "set radius to %.5f\n", g_radius) ; } } ; if (N_add) N_edge += do_add ( mx , N_add , N_edge , do_gaussian ? &g_mean : NULL, g_radius , g_sdev , g_min , g_max , skew , e_min , e_max ) ; if (radius) { for (i=0;i<N_COLS(mx);i++) { mclp* ivp = mx->cols[i].ivps, *ivpmax = ivp + mx->cols[i].n_ivps ;if(DEBUG)fprintf(stderr, "here %d\n", (int) i) ; while (ivp < ivpmax) { double val = ivp->val ; double r = mcxNormalCut(n_range * n_sdev, n_sdev) ; double newval = val + radius * (r / (n_range * n_sdev)) ; if (e_min < e_max && newval >= e_min && newval <= e_max) ; ivp->val = newval ; ivp++ ; } } } mclxUnary(mx, fltxCopy, NULL) /* remove zeroes */ ; mclxAddTranspose(mx, 0.0) ; mx_readd_diagonal(mx, mx_diag) ; if (plus) mclxbWrite(mx, xfout, RETURN_ON_FAIL) ; else mclxWrite(mx, xfout, MCLXIO_VALUE_GETENV, RETURN_ON_FAIL) ; } return 0 ; }
static mcxstatus qArgHandle ( int optid , const char* val ) { switch(optid) { case MY_OPT_IMX : mcxIOnewName(xfmx_g, val) ; user_imx = TRUE ; break ; case MY_OPT_ABC : xfabc_g = mcxIOnew(val, "r") ; break ; case MY_OPT_TAB : xftab_g = mcxIOnew(val, "r") ; break ; case MY_OPT_ICL : xfcl_g = mcxIOnew(val, "r") ; break ; case MY_OPT_TRANSFORM : transform_spec = mcxTingNew(val) ; break ; case MY_OPT_DIMENSION : mode_get = 'd' ; break ; case MY_OPT_TESTMETRIC : mode_get = 'm' ; break ; case MY_OPT_TESTCYCLE : mode_get = 'c' ; break ; case MY_OPT_TESTCYCLE_N : n_limit = atoi(val) ; mode_get = 'c' ; break ; case MY_OPT_INFO : compute_flags |= COMPUTE_EFF ; break ; case MY_OPT_CLCF : compute_flags |= COMPUTE_CLCF ; break ; case MY_OPT_REDUCE : rebase_g = FALSE ; break ; case MY_OPT_THREAD : n_thread_l = atoi(val) ; break ; case MY_OPT_NODE : mode_get = 'n' ; break ; case MY_OPT_FOUT : mcxIOnewName(xfout_g, val) ; break ; case MY_OPT_WEIGHT_SCALE : weight_scale = atof(val) ; break ; case MY_OPT_OUTPUT_NOLEGEND : output_flags ^= OUTPUT_KEY ; break ; case MY_OPT_OUTPUT_TABLE : output_flags |= OUTPUT_TABLE ; break ; case MY_OPT_SCALEFREE : weefreemen = TRUE ; break ; case MY_OPT_EDGEWEIGHTS : mode_get = 'e' ; break ; case MY_OPT_EDGEWEIGHTS_HIST : mode_get = 'H' ; if (4 != sscanf(val, "%d,%d,%d,%d", &vary_a, &vary_z, &vary_s, &vary_n)) mcxDie(1, me, "failed to parse argument as integers start,end,step,norm") ; break ; case MY_OPT_EDGEWEIGHTS_SORTED : mode_get = 'E' ; break ; case MY_OPT_DIVIDE : divide_g = atoi(val) ; break ; case MY_OPT_VARY_CORRELATION : vary_a = 4 ; vary_z = 20 ; vary_s = 1 ; vary_n = 20 ; weight_scale = 100 ; mode_vary = 'c' ; break ; case MY_OPT_VARY_CEIL : case MY_OPT_VARY_KNN : case MY_OPT_VARY_N : case MY_OPT_VARY_THRESHOLD : if (4 != sscanf(val, "%d,%d,%d,%d", &vary_a, &vary_z, &vary_s, &vary_n)) mcxDie(1, me, "failed to parse argument as integers start,end,step,norm") ; mode_vary = optid == MY_OPT_VARY_THRESHOLD ? 't' : optid == MY_OPT_VARY_KNN ? 'k' : optid == MY_OPT_VARY_CEIL ? 'n' : optid == MY_OPT_VARY_N ? 'l' : 'X' ; break ; default : mcxExit(1) ; ; } if (mode_vary && 1000 * vary_s < vary_z - vary_a) mcxDie(1, me, "argument leads to more than one thousand steps") ; if (!vary_n) mcxDie(1, me, "need nonzero scaling factor (last component)") ; return STATUS_OK ; }
int main ( int argc , const char* argv[] ) { mcxIO *xf_cl = NULL, *xf_mx = NULL ; mclx *cl = NULL, *elcl = NULL ; int a = 1 ; dim i ; mcxLogLevel = MCX_LOG_AGGR | MCX_LOG_MODULE | MCX_LOG_IO | MCX_LOG_GAUGE | MCX_LOG_WARN ; mclxIOsetQMode("MCLXIOVERBOSITY", MCL_APP_VB_YES) ; mclx_app_init(stderr) ; while(a < argc) { if (!strcmp(argv[a], "-icl")) { if (a++ + 1 < argc) xf_cl = mcxIOnew(argv[a], "r") ; else goto arg_missing ; } else if (!strcmp(argv[a], "-h")) { help : mcxUsage(stdout, me, usagelines) ; mcxExit(STATUS_FAIL) ; } else if (!strcmp(argv[a], "--version")) { app_report_version(me) ; exit(0) ; } else if (!strcmp(argv[a], "-imx")) { if (a++ + 1 < argc) xf_mx = mcxIOnew(argv[a], "r") ; else goto arg_missing ; } else if (!strcmp(argv[a], "-h")) { goto help ; } else if (0) { arg_missing: ; mcxErr ( me , "flag <%s> needs argument; see help (-h)" , argv[argc-1] ) ; mcxExit(1) ; } else { mcxErr ( me , "unrecognized flag <%s>; see help (-h)" , argv[a] ) ; mcxExit(1) ; } a++ ; } if (!xf_cl) mcxErr(me, "need cluster file") , mcxExit(1) ; cl = mclxRead(xf_cl, EXIT_ON_FAIL) ; elcl = mclxTranspose(cl) ; for (i=0; i<N_COLS(elcl); i++) { mclv* vec = elcl->cols+i ; if (vec->n_ivps > 1) fprintf(stdout, "%ld\n", (long) vec->vid) ; } return 0 ; }
static mcxstatus meetMain ( int argc , const char* argv[] ) { mcxIO **xfmcs = NULL ; mclMatrix *lft = NULL ; mclMatrix *rgt = NULL ; mclMatrix *dst = NULL ; int a = 0 ; int n_mx = 0 ; int j ; dim o, m, e ; mclxIOsetQMode("MCLXIOVERBOSITY", MCL_APP_VB_YES) ; mclx_app_init(stderr) ; xfmcs = (mcxIO**) mcxAlloc ( (argc)*sizeof(mcxIO*) , EXIT_ON_FAIL ) ; mcxIOopen(xfout, EXIT_ON_FAIL) ; for(j=a;j<argc;j++) { xfmcs[n_mx] = mcxIOnew(argv[j], "r") ; n_mx++ ; } if (!n_mx) mcxDie(1, me, "at least one clustering matrix required") /* Fixme: do a decent initialization with lft = clmTop() *before* * this loop (removing the need for ugly tmp assignment), but that requires * we know the correct domain to pass to it. For that, we need to peak into * the first matrix. */ ; for (j=0;j<n_mx;j++) { mclMatrix* tmp = mclxRead (xfmcs[j], EXIT_ON_FAIL) ; if (clmEnstrict(tmp, &o, &m, &e, ENSTRICT_SPLIT_OVERLAP)) report_partition("clmmeet", tmp, xfmcs[j]->fn, o, m, e) , mcxExit(1) ; if (!lft) { lft = tmp ; continue ; } else rgt = tmp ; if (!MCLD_EQUAL(lft->dom_rows, rgt->dom_rows)) mcxDie ( 1 , me , "domains not equal (files %s/%s)" , xfmcs[j-1]->fn->str , xfmcs[j]->fn->str ) ; mcxIOclose(xfmcs[j]) ; dst = clmMeet(lft, rgt) ; lft = dst ; mclxFree(&rgt) ; } mclxColumnsRealign(lft, mclvSizeRevCmp) ; mclxWrite(lft, xfout, MCLXIO_VALUE_NONE, EXIT_ON_FAIL) ; mclxFree(&lft) ; mcxIOfree(&xfout) ; free(xfmcs) ; return STATUS_OK ; }
static mcxstatus meetInit ( void ) { xfout = mcxIOnew("-", "w") ; return STATUS_OK ; }