New reader script. Should work with more than 2 chambers.
This commit is contained in:
parent
94bb25ef34
commit
08f0b08759
|
@ -22,7 +22,6 @@ int main(int argc, char* argv[])
|
||||||
std::vector<Hit> x;
|
std::vector<Hit> x;
|
||||||
std::vector<Hit> y;
|
std::vector<Hit> y;
|
||||||
TrackFinder finder;
|
TrackFinder finder;
|
||||||
//int iterator = 0;
|
|
||||||
|
|
||||||
canvas -> cd(0);
|
canvas -> cd(0);
|
||||||
|
|
||||||
|
@ -33,14 +32,18 @@ int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
if(std::cin.get() == '\n')
|
if(std::cin.get() == '\n')
|
||||||
{
|
{
|
||||||
|
|
||||||
x.clear();
|
x.clear();
|
||||||
y.clear();
|
y.clear();
|
||||||
track.clear();
|
track.clear();
|
||||||
|
|
||||||
if(finder.FindTrack())
|
if(finder.FindTrack())
|
||||||
{
|
{
|
||||||
finder.GetTrack(track);
|
finder.GetTrack(track);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Handling is easier if we separate the results to X and Y
|
||||||
|
*/
|
||||||
for(int i = 0; i < track.size(); i++)
|
for(int i = 0; i < track.size(); i++)
|
||||||
{
|
{
|
||||||
if (track[i].direction == "x")
|
if (track[i].direction == "x")
|
||||||
|
@ -51,6 +54,7 @@ int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
y.push_back(track[i]);
|
y.push_back(track[i]);
|
||||||
}
|
}
|
||||||
|
std::cout << track[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << "X size = " << x.size() << std::endl;
|
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)
|
if(x.size() > 0 && y.size() > 0)
|
||||||
{
|
{
|
||||||
threedhisto -> Reset();
|
threedhisto -> Reset();
|
||||||
//iterator = 1;
|
|
||||||
for(int x1 = 0; x1 < x.size(); x1++)
|
for(int x1 = 0; x1 < x.size(); x1++)
|
||||||
{
|
{
|
||||||
for(int y1 = 0; y1 < y.size(); y1++)
|
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);
|
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");
|
threedhisto -> Draw("lego2");
|
||||||
|
|
|
@ -50,4 +50,6 @@ private:
|
||||||
std::vector<Hit> track;
|
std::vector<Hit> track;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::ostream& operator << (std::ostream&, const Hit&);
|
||||||
|
|
||||||
#endif /* TrackFinder_hpp */
|
#endif /* TrackFinder_hpp */
|
||||||
|
|
|
@ -8,36 +8,37 @@
|
||||||
#include "TrackFinder.hpp"
|
#include "TrackFinder.hpp"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
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)
|
std::istream& operator >> (std::istream& is, Hit& h)
|
||||||
{
|
{
|
||||||
is >> h.ch_id >> h.fine_ts >> h.coarse_ts >> h.ts >> h.width;
|
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 = 0;
|
h.which_chamber = h.ch_id / 64; //Determine which chamber's data is it
|
||||||
if(h.ch_id < 32)
|
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.direction = "x";
|
h.direction = "x";
|
||||||
|
h.ch_id = ch_id_helper;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
h.direction = "y";
|
h.direction = "y";
|
||||||
h.ch_id = h.ch_id - 32;
|
h.ch_id = ch_id_helper - 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;
|
return is;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,6 +53,7 @@ TrackFinder::TrackFinder()
|
||||||
}
|
}
|
||||||
SortFile();
|
SortFile();
|
||||||
}
|
}
|
||||||
|
//Check if any errors happen when opening the file
|
||||||
catch(char param)
|
catch(char param)
|
||||||
{
|
{
|
||||||
std::cout << param << std::endl;
|
std::cout << param << std::endl;
|
||||||
|
@ -60,6 +62,10 @@ TrackFinder::TrackFinder()
|
||||||
|
|
||||||
void TrackFinder::SortFile()
|
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;
|
std::cout << "Sorting data..." << std::endl;
|
||||||
while (file >> h)
|
while (file >> h)
|
||||||
{
|
{
|
||||||
|
@ -79,6 +85,13 @@ bool TrackFinder::FindTrack()
|
||||||
std::cout << "Finding track..." << std::endl;
|
std::cout << "Finding track..." << std::endl;
|
||||||
track.erase(track.begin(), track.end());
|
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)
|
while(iterator < hits.size() - 1)
|
||||||
{
|
{
|
||||||
if(hits[iterator+1].ts - hits[iterator].ts < interval)
|
if(hits[iterator+1].ts - hits[iterator].ts < interval)
|
||||||
|
@ -108,6 +121,9 @@ bool TrackFinder::FindTrack()
|
||||||
|
|
||||||
void TrackFinder::GetTrack(std::vector<Hit> &h)
|
void TrackFinder::GetTrack(std::vector<Hit> &h)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
Copy the track's data into the new vector if available
|
||||||
|
*/
|
||||||
if(istrackavailable)
|
if(istrackavailable)
|
||||||
{
|
{
|
||||||
h = track;
|
h = track;
|
||||||
|
|
Loading…
Reference in New Issue