/* Event Reduction */ int event(){ int i, j, gl_flag; double f; static int m=0; if(!m){ evt_start(); m=1; } message(); #if 0 if(evt_blk()) return(-1); #endif dr_set(PROC_NUM[0], cflag ? childn:-1); /* child process number */ evt_time(); evt_scaler(); dr_set(BLOCK_ANA[0], ablk); if(dr_is_true(dr_get(EVENT_RCNP))){ /* Analyzer RCNP Data */ if(dr_is_true(dr_get(EVENT_BEND))){ /* Block-end Event */ }else{ evt_init_rcnp(); evt_ipr(); gl_flag = 0; /* for GR */ if(dr_is_true(dr_get(ANALYZE_GR))){ evt_init_gr(); evt_gr_adc(); evt_gr_tdc(); if(dr_is_true(dr_get(ANALYZE_GR_VDC))){ evt_chamb_gr(); evt_gr_kinema(); gl_flag++; } } /* for LAS */ if(dr_is_true(dr_get(ANALYZE_LAS))){ evt_init_las(); evt_las_adc(); evt_las_tdc(); if(dr_is_true(dr_get(ANALYZE_LAS_VDC))){ evt_chamb_las(); evt_las_kinema(); gl_flag++; } } if(gl_flag==2){ evt_gl_kinema(); } #if LAS_FPP_MWDC /* for LAS_FPP */ if(dr_is_true(dr_get(ANALYZE_LAS_FPP))){ evt_init_las_fpp(); evt_chamb_las_fpp(); } #endif #if NP_MWDC /* for NP */ if(dr_is_true(dr_get(ANALYZE_NP))){ evt_init_np(); evt_chamb_np(); } #endif /* for GR FPP */ if(dr_is_true(dr_get(ANALYZE_GR_FPP))){ evt_init_gr_fpp(); evt_gr_fpp_adc(); evt_gr_fpp_tdc(); evt_chamb_gr_fpp(); } } } #if F2_MWDC else if(dr_is_true(dr_get(EVENT_F2))){ /* Analyzer SMART F2 Data */ if(dr_is_true(dr_get(ANALYZE_F2))){ evt_init_f2(); evt_f2_adc(); evt_f2_tdc(); if(dr_is_true(dr_get(ANALYZE_F2_MWDC))){ evt_chamb_f2(); evt_f2_kinema(); } #if 0 evt_f2_3377(); #endif } } #endif show_debug(); dst_write_data(); if(rootflag == 1) root_write_data(); dr_set(ANALYZED,1); #if 0 sleep(1); #endif return(0); }
/* GR-3377 data analysis */ int evt_chamb_gr(){ int i; chamber_p chamb; plane_p plane; ray_p ray; ray_t ray2; double d; double shift; chamb = &gr_vdc; ray = &chamb->ray; if(!dr_exists(dr_get(GR_RAYID[0]))){ for(i=0; i<chamb->npl; i++){ plane = &chamb->plane[i]; chamb_clust(plane); chamb_drift(plane); chamb_pos(plane); } chamb_ray(chamb); dr_set(GR_RAYID,ray->rayid); dr_set(GR_CHI2[0],chamb->chi2); dr_set(GR_NCOMB[0],chamb->ncomb); if(ray->rayid==RAYID_NOERR){ // fprintf(stderr, "GRAD_X = %g\n", ray->dir.x); dr_set(GR_GRAD_X[0],ray->dir.x); dr_set(GR_GRAD_Y[0],ray->dir.y); /* rotation of axes as z=central-ray */ ray_rotate_z(ray,dr_get(GR_VDC_TILT[2])); ray_rotate_y(ray,dr_get(GR_VDC_TILT[1])); ray_rotate_x(ray,dr_get(GR_VDC_TILT[0])); /* output of tracking information */ if(gr_n_outputray) chamb_outputray(chamb,&fd_gr_outputray,FNAMGRRAY,&gr_n_outputray); /* output of ray information */ dr_set(GR_RAY_X[0], ray->org.x); dr_set(GR_RAY_Y[0], ray->org.y); dr_set(GR_RAY_TH[0],atan(ray->dir.x)); dr_set(GR_RAY_PH[0],atan(ray->dir.y)); } }else{ ray->org.x = dr_get(GR_RAY_X[0]); ray->org.y = dr_get(GR_RAY_Y[0]); ray->org.z = 0.0; ray->dir.x = tan(dr_get(GR_RAY_TH[0])); ray->dir.y = tan(dr_get(GR_RAY_PH[0])); ray->dir.z = 1.0; ray->rayid = dr_int(dr_get(GR_RAYID[0])); } if(ray->rayid==RAYID_NOERR){ /* projection to virtual planes */ chamb_intersection(chamb); if(dr_is_true(dr_get(ANALYZE_GR_MATRIX))){ /* trace-back by matrix x and y are in mm in the VDC cordinate system (GR_X[0] and GR_Y[0]) th and ph are in rad in the central ray cordinate system (GR_TH[0] and GR_PH[0]) */ ray2.org.x = dr_get(GR_X[0]); ray2.org.y = dr_get(GR_Y[0]); ray2.dir.x = dr_get(GR_TH[0]); ray2.dir.y = dr_get(GR_PH[0]); dr_set(GR_XC[0], trace_back(&ray2, gr_xmat, n_gr_xmat, 1)); dr_set(GR_AI[0], trace_back(&ray2, gr_amat, n_gr_amat, 1)); dr_set(GR_BI[0], trace_back(&ray2, gr_bmat, n_gr_bmat, 1)); dr_set(GR_YC[0], trace_back(&ray2, gr_ymat, n_gr_ymat, 1)); dr_set(GR_PHC[0],trace_back(&ray2, gr_phmat, n_gr_phmat, 1)); } } return(0); }
/* NP-3377 data analysis */ int evt_chamb_np(){ chamber_p chamb; plane_p plane; int ipl; ray_p ray; double d; chamb = &tgc_mwdc; ray = &chamb->ray; for(ipl=0; ipl<chamb->npl; ipl++){ plane = &chamb->plane[ipl]; chamb_clust(plane); chamb_drift(plane); chamb_pos(plane); } if(dr_exists(d=dr_get(LAS_RAYID)) && dr_int(d)==0){ chamb_ray(chamb); dr_set(TGC_RAYID,ray->rayid); dr_set(TGC_CHI2[0],chamb->chi2); if(ray->rayid==RAYID_NOERR){ /* rotation of axes as z=central-ray */ ray_rotate_z(ray,dr_get(TGC_TILT[2])); ray_rotate_y(ray,dr_get(TGC_TILT[1])); ray_rotate_x(ray,dr_get(TGC_TILT[0])); /* output of ray information */ dr_set(TGC_RAY_X[0], ray->org.x); dr_set(TGC_RAY_Y[0], ray->org.y); dr_set(TGC_TH[0],atan(ray->dir.x)); dr_set(TGC_PH[0],atan(ray->dir.y)); /* projection to virtual planes */ chamb_intersection(chamb); } } chamb = &fec_mwdc; ray = &chamb->ray; for(ipl=0; ipl<chamb->npl; ipl++){ plane = &chamb->plane[ipl]; chamb_clust(plane); chamb_drift(plane); chamb_pos(plane); } if(dr_exists(d=dr_get(LAS_RAYID)) && dr_int(d)==0){ chamb_ray(chamb); dr_set(FEC_RAYID,ray->rayid); dr_set(FEC_CHI2[0],chamb->chi2); if(ray->rayid==RAYID_NOERR){ /* rotation of axes as z=central-ray */ ray_rotate_z(ray,dr_get(FEC_TILT[2])); ray_rotate_y(ray,dr_get(FEC_TILT[1])); ray_rotate_x(ray,dr_get(FEC_TILT[0])); /* output of ray information */ dr_set(FEC_RAY_X[0], ray->org.x); dr_set(FEC_RAY_Y[0], ray->org.y); dr_set(FEC_TH[0],atan(ray->dir.x)); dr_set(FEC_PH[0],atan(ray->dir.y)); /* projection to virtual planes */ chamb_intersection(chamb); } } return(0); }
/* LAS-3377 data analysis */ int evt_chamb_las(){ double f1, f2; int i; chamber_p chamb; plane_p plane; ray_p ray; chamb = &las_vdc; ray = &chamb->ray; for(i=0; i<chamb->npl; i++){ plane = &chamb->plane[i]; chamb_clust(plane); chamb_drift(plane); chamb_pos(plane); } /* Temporary for E154 03-MAY-2006 */ i = chamb->npl; chamb->npl = 4; chamb_ray(chamb); chamb->npl = i; dr_set(LAS_RAYID,ray->rayid); dr_set(LAS_CHI2[0],chamb->chi2); dr_set(LAS_NCOMB[0],chamb->ncomb); if(ray->rayid==RAYID_NOERR){ /* trace-back by matrix (with the VDC coordingate space) */ dr_set(LAS_DP[0],trace_back(ray, las_xmat, n_las_xmat, 0)); dr_set(LAS_AI[0],trace_back(ray, las_amat, n_las_amat, 0)/1000.); dr_set(LAS_GRAD_X[0], ray->dir.x/ray->dir.z); dr_set(LAS_GRAD_Y[0], ray->dir.y/ray->dir.z); /* rotation of axes as z=central-ray */ ray_rotate_z(ray,dr_get(LAS_VDC_TILT[2])); ray_rotate_y(ray,dr_get(LAS_VDC_TILT[1])); ray_rotate_x(ray,dr_get(LAS_VDC_TILT[0])); /* output of tracking information */ if(las_n_outputray) chamb_outputray(chamb,&fd_las_outputray,FNAMLASRAY,&las_n_outputray); /* output of ray information */ dr_set(LAS_RAY_X[0], ray->org.x); dr_set(LAS_RAY_Y[0], ray->org.y); dr_set(LAS_RAY_TH[0],atan(ray->dir.x)); dr_set(LAS_RAY_PH[0],atan(ray->dir.y)); /* projection to virtual planes */ chamb_intersection(chamb); } return(0); }
static int read_param_node(ml_node_t *node, int row, const char *line, param_t *p) { int i, j, k, len, all; char *end; char command[MAXLINESIZE]; assert(node->type == ML_PARAM); all = (node->u.p.len == 0); i = 0; switch (node->u.p.type) { case 'I': if (!node->u.p.column && (all || node->u.p.len > 1)) { /* Row vector. */ len = all ? da_n(p->xi) : node->u.p.len; for (j = 0; j < len; j++) { k = all ? j : di_get(node->u.p.index, j); p->xi = di_set(p->xi, k, strtol(&line[i], &end, 10)); i += end - &line[i]; if (p->info) printf("Read value %i for I%i\n", di_get(p->xi,k), k); if (p->usematc) { sprintf(command, "I(%d) = %d", k, di_get(p->xi,k)); MTC_DOMATH(command); } } } else { /* Column vector or scalar. */ if (node->u.p.len == 1) k = di_get(node->u.p.index,0); else k = all ? row : di_get(node->u.p.index, row); p->xi = di_set(p->xi, k, strtol(&line[i], &end, 10)); i += end - &line[i]; if (p->info) printf("Read value %i for I%i\n", di_get(p->xi,k), k); if (p->usematc) { sprintf(command, "I(%d) = %d", k, di_get(p->xi,k)); MTC_DOMATH(command); } } break; case 'R': if (!node->u.p.column && (all || node->u.p.len > 1)) { /* Row vector. */ len = all ? da_n(p->xr) : node->u.p.len; for (j = 0; j < len; j++) { k = all ? j : di_get(node->u.p.index,j); p->xr = dr_set(p->xr, k, strtod(&line[i], &end)); i += end - &line[i]; if (p->info) printf("Read value %e for R%i\n", dr_get(p->xr,k), k); if (p->usematc) { sprintf(command, "R(%d) = %e", k, dr_get(p->xr,k)); MTC_DOMATH(command); } } } else { /* Column vector or scalar. */ if (node->u.p.len == 1) k = di_get(node->u.p.index,0); else k = all ? row : di_get(node->u.p.index, row); p->xr = dr_set(p->xr, k, strtod(&line[i], &end)); i += end - &line[i]; if (p->info) printf("Read value %e for R%i\n", dr_get(p->xr,k), k); if (p->usematc) { sprintf(command, "R(%d) = %e", k, dr_get(p->xr,k)); MTC_DOMATH(command); } } break; case 'O': if (!node->u.p.column && (all || node->u.p.len > 1)) { /* Row vector. */ len = all ? da_n(p->fun) : node->u.p.len; for (j = 0; j < len; j++) { k = all ? j : di_get(node->u.p.index,j); p->fun = dr_set(p->fun, k, strtod(&line[i], &end)); i += end - &line[i]; if (p->info) printf("Read value %e for O%i\n", dr_get(p->fun,k), k); if (p->usematc) { sprintf(command, "O(%d) = %e", k, dr_get(p->fun,k)); MTC_DOMATH(command); } } } else { /* Column vector or scalar. */ if (node->u.p.len == 1) k = di_get(node->u.p.index,0); else k = all ? row : di_get(node->u.p.index, row); p->fun = dr_set(p->fun, k, strtod(&line[i], &end)); i += end - &line[i]; if (p->info) printf("Read value %e for O%i\n", dr_get(p->fun,k), k); if (p->usematc) { sprintf(command, "O(%d) = %e", k, dr_get(p->fun,k)); MTC_DOMATH(command); } } break; case 'T': fprintf(stderr, PKG_NAME "TAG parameters are input only\n"); default: assert(0); } return i; }