#include #include #include #include #include #include #include #include #include "lzoconf.h" #include "lzo1x.h" #include "lzo1y.h" #include #include #include #include #include #include "parse_chan_descr.h" #include #include #include "ttf2_daq_slicer.h" #include "ttf2_daq_reader.h" #include "ttf2_daq_data.h" #include "ttf2_daq_reader_2010.h" #include "daq_server_util_def.h" #include "ttf2_daq_user.h" int debug = 0; int nbunch = 10000; int outmode = 0; int quietmode = 1; int main (int argc, char **argv) { char * xml = NULL; bool list = false; bool all = false; bool files = false; bool tmode = false; bool check = false; int m; int cycles = 1; char t_start[32]; int t_start_option, t_stop_option; char t_stop[32]; char exp[TTF2_EXP_NAME_LENGTH]; char ddir[1024]; char cdir[1024]; char **channelName=NULL; char channelNames=0; uint *eventID=NULL; uint eventIDs=0; sprintf(exp, "linac"); sprintf(ddir, "/daq_data/ilc/LINAC"); sprintf(cdir, "/daq/ttf2/admtemp"); t_start_option = t_stop_option = 0; // ttf2_eventheader *event_header; // ttf2_serv_block_head *srvb_header; // ttf2_serv_block_subhead *chan_header; ttf2_time_id ev_id_old; memset((void*)&ev_id_old, 0, sizeof(ev_id_old)); m = 0; ttf2_daq_reader reader; ttf2_daq_reader_2010 reader_2010; ttf2_daq_getdata data; for(int i=1; iname = (char*)malloc(length); snprintf(entry->name, length, channelName[ii]); request.chan_list.push_back(entry); } int err; if((err = validate_daq_request(&request, false))) { printf("Something wrong with request (dates ?) err: %d \n", err); clean_request(&request); exit(-3); } if(debug == -1 || debug == 2) print_daq_request(&request); // configuring reader int ready, ready_2010=0; struct timeval start, end; double diff; int idx = 0; int evs = 0, ev_full = 0; gettimeofday(&start, NULL); vector res; reader.set_data_dir(request.ddir); reader.set_catalog_dir(request.cdir); reader_2010.set_data_dir(request.ddir); reader_2010.set_catalog_dir(request.cdir); if(request.file_list.size()) { // we have the file list ttf2_time_id start_stop; memset((void*)&start_stop, 0, sizeof(start_stop)); start_stop.time.timeup = request.t_start_sec; if((ready = reader.set_start_point(&start_stop)) != TTF2_DAQ_READER_OK && (ready_2010 = reader_2010.set_start_point(&start_stop)) != TTF2_DAQ_READER_OK) { printf("Failed to set start point\n"); goto error; } start_stop.time.timeup = request.t_stop_sec; if((ready = reader.set_stop_point(&start_stop)) != TTF2_DAQ_READER_OK && (ready_2010 = reader_2010.set_stop_point(&start_stop)) != TTF2_DAQ_READER_OK) { printf("Failed to set stop point\n"); goto error; } if((ready = reader.init(&request.file_list, &request.chan_list)) != TTF2_DAQ_READER_OK && (ready_2010 = reader_2010.init(&request.file_list, &request.chan_list)) != TTF2_DAQ_READER_OK) { printf("Failed to init reader with lists \n"); goto error; } printf("ready: %d ready_2010: %d\n", ready, ready_2010); } else { // we have to find the file list memset((void*)&daq_request, 0, sizeof(daq_request)); daq_request.start_time.time.timeup = request.t_start_sec; daq_request.stop_time.time.timeup = request.t_stop_sec; sprintf(daq_request.exp_name, "%s", request.exp); if(strlen(request.ddir)) { sprintf(daq_request.ddir, "%s", request.ddir); } if(strlen(request.cdir)) sprintf(daq_request.cdir, "%s", request.cdir); daq_request.time_diff.timeup = 0; daq_request.time_diff.timelow = TTF2_DAQ_READ_CHAN_MAX_TIME_DIFF; daq_request.period.event_number = TTF2_DAQ_READ_CHAN_EVENT_ID_STEP_DEF; daq_request.period.time.timeup = 0; daq_request.period.time.timelow = (u_int)TTF2_DAQ_READ_CHAN_EVENT_PERIOD; daq_request.synch_mode = TTF2_DAQ_SLICER_SYNCH_MODE_DEF; daq_request.run_first = request.run_first; daq_request.run_last = request.run_last; if((ready = reader.init(&daq_request, &request.chan_list)) != TTF2_DAQ_READER_OK) { daq_request.time_diff.timelow = TTF2_DAQ_READ_CHAN_MAX_TIME_DIFF_2010; daq_request.period.time.timelow = (u_int)TTF2_DAQ_READ_CHAN_EVENT_PERIOD_2010; if((ready_2010 = reader_2010.init(&daq_request, &request.chan_list)) != TTF2_DAQ_READER_OK) { printf("Failed to init reader with request error: %d\n", ready); goto error; } } } if(list) { // we have to provide only channel list vector vc; vc.clear(); if(ready == TTF2_DAQ_READER_OK) { if(!reader.get_file_name(0) || ((ready = reader.fill_chan_descr(reader.get_file_name(0), &vc)) != TTF2_DAQ_READER_OK) || !vc.size()) { if(!reader.get_file_name(0)) printf("No files found (check the request)\n"); else if(ready != TTF2_DAQ_READER_OK) printf("Failed to extract descriptions from %s\n", reader.get_file_name(0)); else printf("No description list available (error: %s) from %s\n", reader.get_last_error(), reader.get_file_name(0)); } else { char dt_name[256]; // we can produce the channel list for(u_int i=0; idaq_name, block_name_from_mask(dt_name, sizeof(dt_name), ent->dtype, NULL), ent->count); } } vc.clear(); // the memory for entries will be cleaned up later in reader.clean_up() } clean_request(&request); reader.clean_up(); if(ready == TTF2_DAQ_READER_OK) return 0; return (-4); } else { if(!reader_2010.get_file_name(0) || ((ready = reader_2010.fill_chan_descr(reader.get_file_name(0), &vc)) != TTF2_DAQ_READER_OK) || !vc.size()) { if(!reader_2010.get_file_name(0)) printf("No files found (check the request)\n"); else if(ready != TTF2_DAQ_READER_OK) printf("Failed to extract descriptions from %s\n", reader_2010.get_file_name(0)); else printf("No description list available (error: %s) from %s\n", reader_2010.get_last_error(), reader_2010.get_file_name(0)); } else { char dt_name[256]; // we can produce the channel list for(u_int i=0; idaq_name, block_name_from_mask(dt_name, sizeof(dt_name), ent->dtype, NULL), ent->count); } } vc.clear(); // the memory for entries will be cleaned up later in reader.clean_up() } clean_request(&request); reader_2010.clean_up(); if(ready == TTF2_DAQ_READER_OK) return 0; return (-4); } } else if(check) { // we have to check the files if(ready == TTF2_DAQ_READER_OK) { int nfiles = reader.get_number_of_files(); if(nfiles) { for(int i=0; itime.timeup, stp->time.timeup); } int eventIndex = 0; while((ready = reader.get_data(NULL, &res)) == TTF2_DAQ_READER_OK) { if(debug == -1 || debug == 4) printf("RES.SIZE() : %d\n", res.size()); if(res.size()) { evs++; if(res.size() == reader.get_number_of_channels()) ev_full++; if(debug == -1 || debug == 6) { if(!(evs%100)) { printf("%d\r", evs); fflush(0); } } if(!all || (res.size() == reader.get_number_of_channels())) { u_int evid, tup, tlow; int status; u_int len; data.Clean(); data.SetRes(&res); if(data.GetEventInfo(&evid, NULL, &len, &tup, &tlow, &status, NULL)) { printf("ttf2_user_loop(): failed to get event info\n"); return -1; } if (eventIDs == 0) { ttf2_user_loop(&data); } else if (eventIndex < eventIDs) { while (evid > eventID[eventIndex]) { eventIndex++; } if (evid == eventID[eventIndex]) { ttf2_user_loop(&data); eventIndex++; } } } } } gettimeofday(&end, NULL); ttf2_user_end(&reader); if(ready != TTF2_DAQ_READER_OUT_OF_WINDOW) printf("Reader has finished with status: %d\n", ready); diff = ((double)end.tv_sec * 1000000. + (double)end.tv_usec) - ((double)start.tv_sec * 1000000. + (double)start.tv_usec); if(debug == -1 || debug == 6) { if(evs) printf("Took %f sec for %d events (%d) Rate: %f ms/ev\n", diff/1000000., evs,ev_full, diff/1000./evs); else printf("Took %f sec \n", diff/1000000.); } reader.clean_up(); } else { if(tmode || (request.scan_mode & TTF2_DAQ_SCAN_BY_TIME)) reader_2010.set_synch_mode(TTF2_DAQ_SLICER_SYNCH_MODE_TIME); printf("READER_2010 SYNCH MODE: %d\n", reader_2010.get_synch_mode()); clean_request(&request); if((ready_2010 = reader_2010.start()) != TTF2_DAQ_READER_OK) { printf("Failed to start reader_2010 status: %d\n", ready_2010); reader_2010.clean_up(); return (-5); } if(debug == -1 || debug == 5) reader_2010.print_channels(); if(debug == -1 || debug == 3 || files) { reader_2010.print_files(); if(files) { reader_2010.clean_up(); return 0; } } ttf2_user_init_2010(argc, argv, &reader_2010); { ttf2_time_id *st = reader_2010.get_start_point(); ttf2_time_id *stp = reader_2010.get_stop_point(); if (!quietmode) printf("Start: %d stop:%d\n", st->time.timeup, stp->time.timeup); } while((ready_2010 = reader_2010.get_data(NULL, &res)) == TTF2_DAQ_READER_OK) { if(debug == -1 || debug == 4) printf("RES.SIZE() : %d\n", res.size()); if(res.size()) { evs++; if(res.size() == reader_2010.get_number_of_channels()) ev_full++; if(debug == -1 || debug == 6) { if(!(evs%100)) { printf("%d\r", evs); fflush(0); } } if(!all || (res.size() == reader_2010.get_number_of_channels())) { data.Clean(); data.SetRes(&res); ttf2_user_loop(&data); } } } gettimeofday(&end, NULL); ttf2_user_end_2010(&reader_2010); if(ready_2010 != TTF2_DAQ_READER_OUT_OF_WINDOW) printf("Reader has finished with status: %d\n", ready_2010); diff = ((double)end.tv_sec * 1000000. + (double)end.tv_usec) - ((double)start.tv_sec * 1000000. + (double)start.tv_usec); if(debug == -1 || debug == 6) { if(evs) printf("Took %f sec for %d events (%d) Rate: %f ms/ev\n", diff/1000000., evs,ev_full, diff/1000./evs); else printf("Took %f sec \n", diff/1000000.); } reader_2010.clean_up(); } } return 0; error: clean_request(&request); reader.clean_up(); reader_2010.clean_up(); return (-5); }