int client(int nframes, std::string &name) { Reader reader; reader.nframes=nframes; bool forever=false; if (nframes==-1) forever=true; else reader.latencies.reserve(nframes); std::string portName; portName="/profiling/client/"; portName+=name; portName+="/port:i"; reader.useCallback(); reader.open(portName.c_str()); portName="/profiling/client/"; portName+=name; portName+="/port:o"; reader.outPort.open(portName.c_str()); while( (reader.count<nframes) || forever) { //give the CPU some time Time::delay(0.5); } reader.close(); std::vector<Report>::iterator it=reader.latencies.begin(); FILE *of=fopen("timing.txt", "w"); while(it!=reader.latencies.end()) { fprintf(of, "%u %lf\n", (*it).payload, (*it).dt); it++; } fclose(of); double averageLatency=reader.delay/reader.count; double stdLatency=(1.0/(reader.count-1))*(reader.delaySq-reader.count*averageLatency*averageLatency); stdLatency=sqrt(stdLatency); fprintf(stderr, "Received: %d average latency %.3lf +/- %.5lf [ms]\n", reader.count, averageLatency, stdLatency); return 0; }
void generate_header (Header& header, const std::string& tck_file_path, const vector<default_type>& voxel_size) { Properties properties; Reader<> file (tck_file_path, properties); Streamline<> tck; size_t track_counter = 0; Eigen::Vector3f min_values ( Inf, Inf, Inf); Eigen::Vector3f max_values (-Inf, -Inf, -Inf); { ProgressBar progress ("creating new template image", 0); while (file (tck) && track_counter++ < MAX_TRACKS_READ_FOR_HEADER) { for (const auto& i : tck) { min_values[0] = std::min (min_values[0], i[0]); max_values[0] = std::max (max_values[0], i[0]); min_values[1] = std::min (min_values[1], i[1]); max_values[1] = std::max (max_values[1], i[1]); min_values[2] = std::min (min_values[2], i[2]); max_values[2] = std::max (max_values[2], i[2]); } ++progress; } } min_values -= Eigen::Vector3f (3.0*voxel_size[0], 3.0*voxel_size[1], 3.0*voxel_size[2]); max_values += Eigen::Vector3f (3.0*voxel_size[0], 3.0*voxel_size[1], 3.0*voxel_size[2]); header.name() = "tckmap image header"; header.ndim() = 3; for (size_t i = 0; i != 3; ++i) { header.size(i) = std::ceil((max_values[i] - min_values[i]) / voxel_size[i]); header.spacing(i) = voxel_size[i]; header.stride(i) = i+1; } header.transform().matrix().setIdentity(); header.transform().translation() = min_values.cast<double>(); file.close(); }