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