diff --git a/TrackReconstruction.cpp b/TrackReconstruction.cpp index ab05ec6..47094f4 100644 --- a/TrackReconstruction.cpp +++ b/TrackReconstruction.cpp @@ -22,7 +22,6 @@ int main(int argc, char* argv[]) std::vector x; std::vector y; TrackFinder finder; - //int iterator = 0; canvas -> cd(0); @@ -33,14 +32,18 @@ int main(int argc, char* argv[]) { if(std::cin.get() == '\n') { + x.clear(); y.clear(); track.clear(); - if(finder.FindTrack()) { finder.GetTrack(track); + + /* + Handling is easier if we separate the results to X and Y + */ for(int i = 0; i < track.size(); i++) { if (track[i].direction == "x") @@ -51,6 +54,7 @@ int main(int argc, char* argv[]) { y.push_back(track[i]); } + std::cout << track[i]; } std::cout << "X size = " << x.size() << std::endl; @@ -59,7 +63,6 @@ int main(int argc, char* argv[]) if(x.size() > 0 && y.size() > 0) { threedhisto -> Reset(); - //iterator = 1; for(int x1 = 0; x1 < x.size(); x1++) { for(int y1 = 0; y1 < y.size(); y1++) @@ -68,8 +71,6 @@ int main(int argc, char* argv[]) { threedhisto -> Fill(x[x1].ch_id, y[y1].ch_id, x[x1].which_chamber); } - //std::cout << "Drawing " << iterator << " of " << x.size()*y.size() << std::endl; - //iterator++; } } threedhisto -> Draw("lego2"); diff --git a/include/TrackFinder.hpp b/include/TrackFinder.hpp index 77cfc4d..05e0741 100644 --- a/include/TrackFinder.hpp +++ b/include/TrackFinder.hpp @@ -50,4 +50,6 @@ private: std::vector track; }; +std::ostream& operator << (std::ostream&, const Hit&); + #endif /* TrackFinder_hpp */ diff --git a/source/TrackFinder.cpp b/source/TrackFinder.cpp index cff32de..0e713cb 100644 --- a/source/TrackFinder.cpp +++ b/source/TrackFinder.cpp @@ -8,36 +8,37 @@ #include "TrackFinder.hpp" #include +std::ostream& operator << (std::ostream& os, const Hit& h) +{ + os << + "Channel ID: " << h.ch_id << std::endl << + "Chamber ID: " << h.which_chamber << std::endl << + "Direction: " << h.direction << std::endl; + return os; +} + std::istream& operator >> (std::istream& is, Hit& h) { is >> h.ch_id >> h.fine_ts >> h.coarse_ts >> h.ts >> h.width; - if(h.ch_id < 64) + + int ch_id_helper = 0; + h.which_chamber = h.ch_id / 64; //Determine which chamber's data is it + ch_id_helper = h.ch_id % 64; //Store the channel id from 0 - 32 in it's own direction + + /* + the numbering of the channels starts from X 0 - 32 and Y 32-64 + */ + if(ch_id_helper < 32) { - h.which_chamber = 0; - if(h.ch_id < 32) - { - h.direction = "x"; - } - else - { - h.direction = "y"; - h.ch_id = h.ch_id - 32; - } + h.direction = "x"; + h.ch_id = ch_id_helper; } else { - h.which_chamber = 1; - if(h.ch_id - 64 < 32) - { - h.direction = "x"; - h.ch_id = h.ch_id - 64; - } - else - { - h.direction = "y"; - h.ch_id = h.ch_id - 64 - 32; - } + h.direction = "y"; + h.ch_id = ch_id_helper - 32; } + return is; } @@ -52,6 +53,7 @@ TrackFinder::TrackFinder() } SortFile(); } + //Check if any errors happen when opening the file catch(char param) { std::cout << param << std::endl; @@ -60,6 +62,10 @@ TrackFinder::TrackFinder() void TrackFinder::SortFile() { + /* + Read the file line by line and store it in the memory. + At the end of the file, sort the data by TS ascending. + */ std::cout << "Sorting data..." << std::endl; while (file >> h) { @@ -79,6 +85,13 @@ bool TrackFinder::FindTrack() std::cout << "Finding track..." << std::endl; track.erase(track.begin(), track.end()); + /* + If a new track found, + then we don't want to start from the beginning + so the iterator helps us storing the last value. + + Set the Interval to the right value for better track reconstruction. + */ while(iterator < hits.size() - 1) { if(hits[iterator+1].ts - hits[iterator].ts < interval) @@ -108,6 +121,9 @@ bool TrackFinder::FindTrack() void TrackFinder::GetTrack(std::vector &h) { + /* + Copy the track's data into the new vector if available + */ if(istrackavailable) { h = track;