/** @file track.cu implementation of some track-related functions */ #include #include #include #include #include #include #include "track.h" #include "util.h" #include "vec.h" using namespace std; void write_tracks(FILE *file, const vector &tracks) { for(int itrack = 0; itrack < tracks.size(); itrack++) { Track track = tracks[itrack]; fprintf(file, "%4d %10.3f %10.3f %10.3f %10.3f %10.3f %3d\n", itrack, (double)track.t0, //(double)track.center.x, (double)track.center.y, track.radius, (double)track.vertex.x, (double)track.vertex.y, (double)track.momentum.x, (double)track.momentum.y, track.nhits); } // for(each track) } // write_tracks void write_tracks(const char *path, const vector &tracks) { FILE *file = fopen(path, "w"); if(!file) { fprintf(stderr, "cannot open file %s for writing\n", path); exit(-1); } write_tracks(file, tracks); fclose(file); } // write_tracks void read_tracks(FILE *file, vector &tracks) { int GOOD_NREAD_POS = 7, nread_pos; Track track; int track_id, line = 1; while((nread_pos = fscanf(file, "%d %f %f %f %f %f %d %*[\n]", &track_id, &track.t0, &track.vertex.x, &track.vertex.y, &track.momentum.x, &track.momentum.y, &track.nhits)) > 0) { if(nread_pos < GOOD_NREAD_POS) { fprintf(stderr, "cannot read track at line %d\n"); exit(-1); } tracks.push_back(track); line++; } // while } // read_tracks double diff(const Track &t1, const Track &t2) { return max(fabs(t1.t0 - t2.t0) / 0.01, max(max(fabs(t1.vertex.x - t2.vertex.x), fabs(t1.vertex.y - t2.vertex.y)) / 0.01, max(fabs(t1.momentum.x - t2.momentum.x), fabs(t1.momentum.y - t2.momentum.y))) / 0.01); } // diff double diff_with_hits(const Track &t1, const Track &t2) { return max(diff(t1, t2), fabs(t1.nhits - t2.nhits) / 0.1); //return diff(t1, t2); }