void analyse_param_cds(	int argc, char *argv[], long long* s,
			double *e, char *input, char *output_file) 
{
        int i;
	int g_data = -1;
	int g_e = 0;
	int g_s = 0;

	for (i = 1; i < argc; i++) {
                if (argv[i][0] == '-') {
                        switch (argv[i][1]) {
			// seed
                        case 's':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_cds("cmd","s (seed number)");
                                *s = atoi(argv[i]);
				g_s = 1;
                                break;
			// percentage of masked genotype
			case 'r':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_cds("cmd","r (percentage of masked data)");
                                *e = (double) atof(argv[i]);
				if (*e < 0) 
					*e =  0;
				if (*e > 1) 
					*e =  1;
				g_e = 1;
                                break;
			// help
                        case 'h': 
                                print_help_cds();
                                exit(1);
                                break;
			// licence 
                        case 'l':  
                                print_licence_snmf();
                                exit(1);
                                break;
			// input file
                        case 'x':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_cds("cmd","x (genotype file)");
                                g_data = 0;
                                strcpy(input,argv[i]);
                                break;
			// output file
                        case 'o':
                                i++;
                                if (argc == i || argv[i][0] == '-')
                                        print_error_cds("cmd","o (genotype file with masked genotypes)");
                                strcpy(output_file,argv[i]);
                                break;
                        default:    print_error_cds("basic",NULL);
                        }
                } else {
                        print_error_cds("basic",NULL);
		}
        }

	// no data file
        if (g_data == -1)
		print_error_cds("option","-x genotype_file");

	// no seed
	if (g_s && *s <= 0)
		*s = -1;

	// percentage not in [0,1]
	if (g_e && (*e <= 0 || *e >= 1))
		print_error_cds("missing","");

        // write output file name
	change_ext(input, output_file, "_I.geno");
}
void analyse_param_ce(	int argc, char *argv[], int* m,
			int* K, char *input, char* input_file_Q, 
			char* input_file_F, char *input_file_I) 
{
        int i;
	int g_data = -1;
	char *tmp_file;
	char tmp[512];
	int g_m = 0;

	for (i = 1; i < argc; i++) {
                if (argv[i][0] == '-') {
                        switch (argv[i][1]) {
			// the number of ancestral populations
                        case 'K':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_ce("cmd","K (number of ancestral populations)");
                                *K = atoi(argv[i]);
				strcpy(tmp,argv[i]);
                                break;
			// the ploidy
                        case 'm':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_ce("cmd","m (number of alleles)");
                                *m = atoi(argv[i]);
				g_m = 1;
                                break;
			// help
                        case 'h':  
                                print_help_ce();
                                exit(1);
                                break;
			// licence
                        case 'l': 
                                print_licence_snmf();
                                exit(1);
                                break;
			// genotypic file
                        case 'x':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_ce("cmd","x (genotype file)");
                                g_data = 0;
                                strcpy(input,argv[i]);
                                break;
			// individual admixture file
                        case 'q':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_ce("cmd","q (individual admixture coefficients file)");
                                strcpy(input_file_Q,argv[i]);
                                break;
			// ancestral genotype frequency file
                        case 'g':
                                i++;
                                if (argc == i || argv[i][0] == '-')
                                        print_error_ce("cmd","g (ancestral genotype frequencies file)");
                                strcpy(input_file_F,argv[i]);
                                break;
			// genotypic file with masked data
                        case 'i':
                                i++;
                                if (argc == i || argv[i][0] == '-')
                                        print_error_ce("cmd","i (genotype file with masked genotypes)");
                                strcpy(input_file_I,argv[i]);
                                break;
                        default:    print_error_ce("basic",NULL);
                        }
                } else {
                        print_error_ce("basic",NULL);
		}
        }

	// no genotypic file
        if (g_data == -1)
		print_error_ce("option","-x genotype_file");

	// ploidy and negative
        if (g_m && *m <= 0)
                print_error_ce("missing", NULL);

	// negative K
        if (*K <= 0)
		print_error_ce("missing",NULL);

        // write output file names
        tmp_file = remove_ext(input,'.','/');
	if (!strcmp(input_file_F,"")) {
		strcpy(input_file_F,tmp_file);
		strcat(input_file_F,"_I.");
		strcat(input_file_F,tmp);
		strcat(input_file_F,".G");
	}
	if (!strcmp(input_file_Q,"")) {
		strcpy(input_file_Q,tmp_file);
		strcat(input_file_Q,"_I.");
		strcat(input_file_Q,tmp);
		strcat(input_file_Q,".Q");
	}
	if (!strcmp(input_file_I,"")) {
		strcpy(input_file_I,tmp_file);
		strcat(input_file_I,"_I.geno");
	}
	free(tmp_file);

}
예제 #3
0
void analyse_param_snmf(int argc, char *argv[], sNMF_param param) 
{
      	int i;
	int g_data = -1;
	char *tmp_file;
	char tmp[512];
	int g_c = 0;
	int g_m = 0;

    	for (i = 1; i < argc; i++) {
                if (argv[i][0] == '-') {
                        switch (argv[i][1]) {
                        case 'K':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_nmf("cmd","K (number of clusters)",0);
                                param->K = atoi(argv[i]);
                                strcpy(tmp,argv[i]);
                                break;
                        case 's':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_nmf("cmd","s (seed number)",0);
                                param->seed= atoll(argv[i]);
                                break;
                        case 'm':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_nmf("cmd","m (number of alleles)",0);
                                param->m = atoi(argv[i]);
				g_m = 1;
                                break;
			case 'a':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_nmf("cmd","alpha (regularization parameter)",0);
                                param->alpha = (double) atof(argv[i]);
				if (param->alpha < 0) {
					param->alpha = 0;
				}
                                break;
                        case 'h':   // global
                                print_help_snmf();
                                exit(1);
                                break;
                        case 'l':   // global
                                print_licence_snmf();
                                exit(1);
                                break;
			case 'e':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_nmf("cmd","e (tolerance error in the algorithm)",0);
                                param->tolerance = (double) atof(argv[i]);
				if (param->tolerance < 0) {
					param->tolerance = 0;
				}
                                break;
			case 'c':
                                i++;
                                if (argc == i || argv[i][0] == '-') {
					param->pourcentage = 0.05;
					i--;
				} else  {
                                	param->pourcentage = (double) atof(argv[i]);
				}
				g_c = 1;
                                break;
			case 'i':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_nmf("cmd","i (number of iterations)",0);
                                param->maxiter = atoi(argv[i]);
                                break;
			case 'I':
                                i++;
                                if (argc == i || argv[i][0] == '-') {
					param->I = -1;	
					i--;
				} else
                                	param->I = (int) atoi(argv[i]);
				break;
                        case 'x':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_nmf("cmd","x (genotype file)",0);
                                g_data = 0;
                                strcpy(param->input_file,argv[i]);
                                break;
                        case 'q':
                                i++;
                                if (argc == i || argv[i][0] == '-')
                                        print_error_nmf("cmd","q (individual admixture coefficients file)",0);
                                strcpy(param->output_file_Q,argv[i]);
                                break;
                        case 'Q':
                                i++;
                                if (argc == i || argv[i][0] == '-')
                                        print_error_nmf("cmd","Q (admixture coefficients initialization file)",0);
                                strcpy(param->input_file_Q,argv[i]);
                                break;
                        case 'g':
                                i++;
                                if (argc == i || argv[i][0] == '-')
                                        print_error_nmf("cmd","g (ancestral genotype frequencies file)",0);
                                strcpy(param->output_file_F,argv[i]);
                                break;
			case 'p':
                                i++;
                                if (argc == i || argv[i][0] == '-')
					print_error_nmf("cmd","p (number of processes)",0);
                              	param->num_thrd = atoi(argv[i]);
                                break;
                        default:    print_error_nmf("basic",NULL,0);
                        }
                } else {
                        print_error_nmf("basic",NULL,0);
		}
        }

        if (g_data == -1)
		print_error_nmf("option","-x genotype_file",0);

        if (param->K <= 0)
		print_error_nmf("missing",NULL,0);

        if (param->num_thrd <= 0)
		print_error_nmf("missing",NULL,0);

        if (g_m && param->m <= 0)
		print_error_nmf("missing",NULL,0);

        if (param->maxiter <= 0)
		print_error_nmf("missing",NULL,0);

        if (g_c && (param->pourcentage <= 0 || param->pourcentage >= 1))
                print_error_nmf("missing",NULL,0);

        // write output file name
        tmp_file = remove_ext(param->input_file,'.','/');
	if (!strcmp(param->output_file_Q,"")) {
                strcpy(param->output_file_Q,tmp_file);
                strcat(param->output_file_Q,".");
                strcat(param->output_file_Q,tmp);
                strcat(param->output_file_Q,".Q");
	}
	if (!strcmp(param->output_file_F,"")) {
                strcpy(param->output_file_F,tmp_file);
                strcat(param->output_file_F,".");
                strcat(param->output_file_F,tmp);
                strcat(param->output_file_F,".G");
	}
        free(tmp_file);
}