pthread_attr_t attr;
int rc;
+bool hasSeed;
+seedType seed;
+
CIParams *ciParamsArray;
void* sample_theta_from_c(void* arg) {
int cnt = 0;
while (fscanf(fi, "%d", &cvec[0]) == 1) {
for (int j = 1; j <= M; j++) assert(fscanf(fi, "%d", &cvec[j]) == 1);
+ assert(cvec[0] > 0);
++cnt;
for (int j = 0; j <= M; j++) {
- gammas[j] = new gamma_dist(cvec[j]);
- rgs[j] = new gamma_generator(*(params->engine), *gammas[j]);
+ gammas[j] = NULL; rgs[j] = NULL;
+ if (cvec[j] > 0) {
+ gammas[j] = new gamma_dist(cvec[j]);
+ rgs[j] = new gamma_generator(*(params->engine), *gammas[j]);
+ }
}
-
+
for (int i = 0; i < nSpC; i++) {
double sum = 0.0;
for (int j = 0; j <= M; j++) {
- theta[j] = ((j == 0 || (eel[j] >= EPSILON && mw[j] >= EPSILON)) ? (*rgs[j])() / mw[j] : 0.0);
+ theta[j] = ((j == 0 || (cvec[j] > 0 && eel[j] >= EPSILON && mw[j] >= EPSILON)) ? (*rgs[j])() / mw[j] : 0.0);
sum += theta[j];
}
assert(sum >= EPSILON);
}
for (int j = 0; j <= M; j++) {
- delete gammas[j];
- delete rgs[j];
+ if (gammas[j] != NULL) delete gammas[j];
+ if (rgs[j] != NULL) delete rgs[j];
}
if (verbose && cnt % 100 == 0) { printf("Thread %d, %d count vectors are processed!\n", params->no, cnt); }
threads = new pthread_t[num_threads];
char inpF[STRLEN];
+ hasSeed ? engineFactory::init(seed) : engineFactory::init();
for (int i = 0; i < num_threads; i++) {
paramsArray[i].no = i;
sprintf(inpF, "%s%d", cvsF, i);
paramsArray[i].engine = engineFactory::new_engine();
paramsArray[i].mw = model.getMW();
}
+ engineFactory::finish();
/* set thread attribute to be joinable */
pthread_attr_init(&attr);
int main(int argc, char* argv[]) {
if (argc < 8) {
- printf("Usage: rsem-calculate-credibility-intervals reference_name imdName statName confidence nCV nSpC nMB [-p #Threads] [-q]\n");
+ printf("Usage: rsem-calculate-credibility-intervals reference_name imdName statName confidence nCV nSpC nMB [-p #Threads] [--seed seed] [-q]\n");
exit(-1);
}
nThreads = 1;
quiet = false;
+ hasSeed = false;
for (int i = 8; i < argc; i++) {
if (!strcmp(argv[i], "-p")) nThreads = atoi(argv[i + 1]);
+ if (!strcmp(argv[i], "--seed")) {
+ hasSeed = true;
+ int len = strlen(argv[i + 1]);
+ seed = 0;
+ for (int k = 0; k < len; k++) seed = seed * 10 + (argv[i + 1][k] - '0');
+ }
if (!strcmp(argv[i], "-q")) quiet = true;
}
verbose = !quiet;