Working version
This commit is contained in:
		
							parent
							
								
									7f57002a7f
								
							
						
					
					
						commit
						be2bb32a4a
					
				|  | @ -0,0 +1,42 @@ | ||||||
|  | # $Id: CMakeLists.txt Baranyai Dávid | 2018.06.05 18:52:01 $ | ||||||
|  | 
 | ||||||
|  | #---------------------------------------------------------------------------- | ||||||
|  | # Setup the project | ||||||
|  | cmake_minimum_required(VERSION 2.6 FATAL_ERROR) | ||||||
|  | project(TrackReconstruction) | ||||||
|  | 
 | ||||||
|  | list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}) | ||||||
|  | 
 | ||||||
|  | #---------------------------------------------------------------------------- | ||||||
|  | # Find ROOT (required package) | ||||||
|  | # | ||||||
|  | find_package(ROOT REQUIRED) | ||||||
|  | 
 | ||||||
|  | #---------------------------------------------------------------------------- | ||||||
|  | # Setup ROOT include directories and compile definitions | ||||||
|  | # | ||||||
|  | include(${ROOT_USE_FILE}) | ||||||
|  | 
 | ||||||
|  | # Setup include directory for this project | ||||||
|  | # | ||||||
|  | include_directories(${PROJECT_SOURCE_DIR}/include ${ROOT_INCLUDE_DIRS}) | ||||||
|  | 
 | ||||||
|  | set(ROOT_LIBRARIES -L${ROOT_LIBRARY_DIR} -lCore -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lMatrix -lPhysics -lMathCore -lThread -pthread -lm -ldl -rdynamic) | ||||||
|  | 
 | ||||||
|  | #---------------------------------------------------------------------------- | ||||||
|  | # Locate sources and headers for this project | ||||||
|  | # NB: headers are included so they will show up in IDEs | ||||||
|  | # | ||||||
|  | file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cpp) | ||||||
|  | file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hpp) | ||||||
|  | 
 | ||||||
|  | #---------------------------------------------------------------------------- | ||||||
|  | # Add the executable | ||||||
|  | # | ||||||
|  | add_executable(TrackReconstruction TrackReconstruction.cpp ${sources} ${headers}) | ||||||
|  | target_link_libraries(TrackReconstruction ${ROOT_LIBRARIES} ) | ||||||
|  | 
 | ||||||
|  | #---------------------------------------------------------------------------- | ||||||
|  | # Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX | ||||||
|  | # | ||||||
|  | install(TARGETS TrackReconstruction DESTINATION bin) | ||||||
|  | @ -0,0 +1,85 @@ | ||||||
|  | //
 | ||||||
|  | //  TrackReconstruction.cpp
 | ||||||
|  | //  DB_Track
 | ||||||
|  | //
 | ||||||
|  | //  Created by Baranyai David on 2018. 06. 07..
 | ||||||
|  | //
 | ||||||
|  | 
 | ||||||
|  | #include <stdio.h> | ||||||
|  | #include "TApplication.h" | ||||||
|  | #include "TrackFinder.hpp" | ||||||
|  | #include "TH3D.h" | ||||||
|  | #include "TCanvas.h" | ||||||
|  | #include "TSystem.h" | ||||||
|  | #include <iostream> | ||||||
|  | 
 | ||||||
|  | int main(int argc, char* argv[]) | ||||||
|  | { | ||||||
|  |     TApplication App("tapp", &argc, argv); | ||||||
|  |     TCanvas *canvas = new TCanvas(); | ||||||
|  |     TH3D *threedhisto = new TH3D("threedhisto", "threedhisto", 100, 0, 32, 100, 0, 32, 100, 0, 2); | ||||||
|  |     std::vector<Hit> track; | ||||||
|  |     std::vector<Hit> x; | ||||||
|  |     std::vector<Hit> y; | ||||||
|  |     TrackFinder finder; | ||||||
|  |     //int iterator = 0;
 | ||||||
|  |      | ||||||
|  |     canvas -> cd(0); | ||||||
|  |      | ||||||
|  |     std::cout << "Press Enter for new track" << std:: endl; | ||||||
|  |     std::cout << "or press Ctrl + C to exit" << std::endl; | ||||||
|  |      | ||||||
|  |     while(true) | ||||||
|  |     { | ||||||
|  |         if(std::cin.get() == '\n') | ||||||
|  |         { | ||||||
|  |             x.clear(); | ||||||
|  |             y.clear(); | ||||||
|  |             track.clear(); | ||||||
|  |              | ||||||
|  |             if(finder.FindTrack()) | ||||||
|  |             { | ||||||
|  |                 finder.GetTrack(track); | ||||||
|  |                  | ||||||
|  |                 for(int i = 0; i < track.size(); i++) | ||||||
|  |                 { | ||||||
|  |                     if (track[i].direction == "x") | ||||||
|  |                     { | ||||||
|  |                         x.push_back(track[i]); | ||||||
|  |                     } | ||||||
|  |                     else | ||||||
|  |                     { | ||||||
|  |                         y.push_back(track[i]); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                  | ||||||
|  |                 std::cout << "X size = " << x.size() << std::endl; | ||||||
|  |                 std::cout << "Y size = " << y.size() << std::endl; | ||||||
|  |                  | ||||||
|  |                 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++) | ||||||
|  |                         { | ||||||
|  |                             if(x[x1].which_chamber == y[y1].which_chamber) | ||||||
|  |                             { | ||||||
|  |                                 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"); | ||||||
|  |                     canvas -> Update(); | ||||||
|  |                     gSystem -> ProcessEvents(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     App.Run(); | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | @ -0,0 +1,53 @@ | ||||||
|  | //
 | ||||||
|  | //  TrackFinder.hpp
 | ||||||
|  | //  TrackReconstruction
 | ||||||
|  | //
 | ||||||
|  | //  Created by Baranyai David on 2018. 06. 07..
 | ||||||
|  | //
 | ||||||
|  | 
 | ||||||
|  | #ifndef TrackFinder_hpp | ||||||
|  | #define TrackFinder_hpp | ||||||
|  | 
 | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <fstream> | ||||||
|  | #include <vector> | ||||||
|  | #include <string> | ||||||
|  | #include <sstream> | ||||||
|  | 
 | ||||||
|  | struct Hit | ||||||
|  | { | ||||||
|  |     unsigned int ch_id; | ||||||
|  |     unsigned int fine_ts; | ||||||
|  |     unsigned int coarse_ts; | ||||||
|  |     unsigned long ts; | ||||||
|  |     unsigned int width; | ||||||
|  |     unsigned int which_chamber; | ||||||
|  |     std::string direction; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | class TrackFinder | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |     TrackFinder(); | ||||||
|  |     ~TrackFinder(); | ||||||
|  |     bool FindTrack(); | ||||||
|  |     void GetTrack(std::vector<Hit>&); | ||||||
|  |      | ||||||
|  | private: | ||||||
|  |     void SortFile(); | ||||||
|  |      | ||||||
|  |     std::ifstream file; | ||||||
|  |     std::string line; | ||||||
|  |      | ||||||
|  |     int interval = 2000; | ||||||
|  |     unsigned int iterator = 0; | ||||||
|  |      | ||||||
|  |     bool istrackavailable = false; | ||||||
|  |      | ||||||
|  |     Hit h; | ||||||
|  |      | ||||||
|  |     std::vector<Hit> hits; | ||||||
|  |     std::vector<Hit> track; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #endif /* TrackFinder_hpp */ | ||||||
|  | @ -0,0 +1,117 @@ | ||||||
|  | //
 | ||||||
|  | //  TrackFinder.cpp
 | ||||||
|  | //  TrackReconstruction
 | ||||||
|  | //
 | ||||||
|  | //  Created by Baranyai David on 2018. 06. 07..
 | ||||||
|  | //
 | ||||||
|  | 
 | ||||||
|  | #include "TrackFinder.hpp" | ||||||
|  | #include <iostream> | ||||||
|  | 
 | ||||||
|  | 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) | ||||||
|  |     { | ||||||
|  |         h.which_chamber = 0; | ||||||
|  |         if(h.ch_id < 32) | ||||||
|  |         { | ||||||
|  |             h.direction = "x"; | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |             h.direction = "y"; | ||||||
|  |             h.ch_id = h.ch_id - 32; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     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; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return is; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | TrackFinder::TrackFinder() | ||||||
|  | { | ||||||
|  |     try | ||||||
|  |     { | ||||||
|  |         file.open("data.txt"); | ||||||
|  |         if(!file.is_open()) | ||||||
|  |         { | ||||||
|  |             throw "File opening error"; | ||||||
|  |         } | ||||||
|  |         SortFile(); | ||||||
|  |     } | ||||||
|  |     catch(char param) | ||||||
|  |     { | ||||||
|  |         std::cout << param << std::endl; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void TrackFinder::SortFile() | ||||||
|  | { | ||||||
|  |     std::cout << "Sorting data..." << std::endl; | ||||||
|  |     while (file >> h) | ||||||
|  |     { | ||||||
|  |         hits.push_back(h); | ||||||
|  |     } | ||||||
|  |     std::sort(hits.begin(), hits.end(), [](const Hit& h1, const Hit& h2) {return h1.ts < h2.ts;}); | ||||||
|  |     std::cout << "Sorting finished!" << std::endl; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | TrackFinder::~TrackFinder() | ||||||
|  | { | ||||||
|  |     file.close(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool TrackFinder::FindTrack() | ||||||
|  | { | ||||||
|  |     std::cout << "Finding track..." << std::endl; | ||||||
|  |     track.erase(track.begin(), track.end()); | ||||||
|  |      | ||||||
|  |     while(iterator < hits.size() - 1) | ||||||
|  |     { | ||||||
|  |         if(hits[iterator+1].ts - hits[iterator].ts < interval) | ||||||
|  |         { | ||||||
|  |             track.push_back(hits[iterator]); | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |             track.push_back(hits[iterator]); | ||||||
|  |             iterator++; | ||||||
|  |             if(track.size() > 4) | ||||||
|  |             { | ||||||
|  |                 istrackavailable = true; | ||||||
|  |                 std::cout << "Track found!" << std::endl; | ||||||
|  |                 return true; | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 track.erase(track.begin(), track.end()); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         iterator++; | ||||||
|  |     } | ||||||
|  |     std::cout << "End reached, no more tracks found!" << std::endl; | ||||||
|  |     return false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void TrackFinder::GetTrack(std::vector<Hit> &h) | ||||||
|  | { | ||||||
|  |     if(istrackavailable) | ||||||
|  |     { | ||||||
|  |         h = track; | ||||||
|  |         std::cout << "Getting track..." << std::endl; | ||||||
|  |         istrackavailable = false; | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue