mirror of
https://github.com/gwm17/SabreCal.git
synced 2024-11-22 18:18:52 -05:00
Fleshed out and tested. Switching to cmake as build system due to easier ROOT integration
This commit is contained in:
parent
a2d6b9ffe4
commit
36790c94a3
10
CMakeLists.txt
Normal file
10
CMakeLists.txt
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
cmake_minimum_required(VERSION 3.14)
|
||||||
|
project(SabreCal)
|
||||||
|
|
||||||
|
find_package(ROOT REQUIRED Spectrum)
|
||||||
|
set(SABRECAL_BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/bin)
|
||||||
|
set(SABRECAL_LIBRARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
|
add_subdirectory(src)
|
32
src/CMakeLists.txt
Normal file
32
src/CMakeLists.txt
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
add_subdirectory(CalDict)
|
||||||
|
|
||||||
|
add_executable(SabreCal)
|
||||||
|
target_include_directories(SabreCal
|
||||||
|
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/CalDict
|
||||||
|
SYSTEM PUBLIC ${ROOT_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
target_sources(SabreCal PUBLIC
|
||||||
|
ChannelMap.h
|
||||||
|
ChannelMap.cpp
|
||||||
|
GainMatcher.h
|
||||||
|
GainMatcher.cpp
|
||||||
|
GainMap.h
|
||||||
|
GainMap.cpp
|
||||||
|
Calibrator.h
|
||||||
|
Calibrator.cpp
|
||||||
|
CalibrationMap.h
|
||||||
|
CalibrationMap.cpp
|
||||||
|
CalibrationStructs.h
|
||||||
|
DataOrganizer.h
|
||||||
|
DataOrganizer.cpp
|
||||||
|
main.cpp
|
||||||
|
)
|
||||||
|
target_link_libraries(SabreCal
|
||||||
|
CalDict
|
||||||
|
${ROOT_LIBRARIES}
|
||||||
|
)
|
||||||
|
set_target_properties(SabreCal PROPERTIES
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY ${SABRECAL_BINARY_DIR}
|
||||||
|
)
|
||||||
|
|
21
src/CalDict/CMakeLists.txt
Normal file
21
src/CalDict/CMakeLists.txt
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
add_library(CalDict SHARED)
|
||||||
|
target_include_directories(CalDict
|
||||||
|
PUBLIC ${CMAKE_CURRENT_SRC_DIR}
|
||||||
|
SYSTEM PUBLIC ${ROOT_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
ROOT_GENERATE_DICTIONARY(cal_dict DataStructs.h
|
||||||
|
LINKDEF LinkDef_CalDict.h
|
||||||
|
MODULE CalDict
|
||||||
|
)
|
||||||
|
target_link_libraries(CalDict
|
||||||
|
${ROOT_LIBRARIES}
|
||||||
|
)
|
||||||
|
target_sources(CalDict PRIVATE DataStructs.cpp DataStructs.h)
|
||||||
|
set_target_properties(CalDict PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${SABRECAL_LIBRARY_DIR}
|
||||||
|
)
|
||||||
|
add_custom_command(TARGET CalDict POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/libCalDict_rdict.pcm
|
||||||
|
${SABRECAL_LIBRARY_DIR}/libCalDict_rdict.pcm
|
||||||
|
)
|
|
@ -32,6 +32,12 @@ namespace SabreCal {
|
||||||
}
|
}
|
||||||
|
|
||||||
TTree* tree = (TTree*) input->Get("Data");
|
TTree* tree = (TTree*) input->Get("Data");
|
||||||
|
if(tree == nullptr)
|
||||||
|
{
|
||||||
|
std::cerr<<"ERR -- Unable to find tree Data at Calibrator::Run()"<<std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
uint16_t energy, board, channel;
|
uint16_t energy, board, channel;
|
||||||
tree->SetBranchAddress("Energy", &energy);
|
tree->SetBranchAddress("Energy", &energy);
|
||||||
tree->SetBranchAddress("Board", &board);
|
tree->SetBranchAddress("Board", &board);
|
||||||
|
@ -47,7 +53,7 @@ namespace SabreCal {
|
||||||
for(int i=0; i<s_totalChannels; i++)
|
for(int i=0; i<s_totalChannels; i++)
|
||||||
{
|
{
|
||||||
std::string name = "channel"+std::to_string(i);
|
std::string name = "channel"+std::to_string(i);
|
||||||
histograms.emplace_back(name.c_str(), name.c_str(), 16384, 0.0, 16384.0);
|
histograms.emplace_back(name.c_str(), name.c_str(), 4096, 0.0, 16384.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(uint64_t i=0; i<nentries; i++)
|
for(uint64_t i=0; i<nentries; i++)
|
||||||
|
@ -65,7 +71,7 @@ namespace SabreCal {
|
||||||
auto& params = m_gainMap.GetParameters(gchan);
|
auto& params = m_gainMap.GetParameters(gchan);
|
||||||
|
|
||||||
if(energy > 100.0) //Reject electronic noise
|
if(energy > 100.0) //Reject electronic noise
|
||||||
histograms[i].Fill(params.slope*(energy*s_gainFactor) + params.offset);
|
histograms[gchan].Fill(params.slope*(energy*s_gainFactor) + params.offset);
|
||||||
}
|
}
|
||||||
std::cout<<std::endl;
|
std::cout<<std::endl;
|
||||||
input->Close();
|
input->Close();
|
||||||
|
|
|
@ -27,7 +27,7 @@ namespace SabreCal {
|
||||||
GainMap m_gainMap;
|
GainMap m_gainMap;
|
||||||
std::vector<Parameters> m_params;
|
std::vector<Parameters> m_params;
|
||||||
|
|
||||||
static constexpr int s_totalChannels = 127; //Total channels in SABRE
|
static constexpr int s_totalChannels = 128; //Total channels in SABRE
|
||||||
static constexpr double s_241Am_alphaKE = 5.468; //MeV
|
static constexpr double s_241Am_alphaKE = 5.468; //MeV
|
||||||
static constexpr double s_gainFactor = 1.5; //For if you're dumb and the electronics gain needs adjusted
|
static constexpr double s_gainFactor = 1.5; //For if you're dumb and the electronics gain needs adjusted
|
||||||
};
|
};
|
||||||
|
|
|
@ -14,6 +14,8 @@ namespace SabreCal {
|
||||||
Init(mapfile);
|
Init(mapfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ChannelMap::~ChannelMap() {}
|
||||||
|
|
||||||
void ChannelMap::Init(const std::string& mapfile)
|
void ChannelMap::Init(const std::string& mapfile)
|
||||||
{
|
{
|
||||||
m_isValid = false;
|
m_isValid = false;
|
||||||
|
|
|
@ -69,11 +69,15 @@ namespace SabreCal {
|
||||||
|
|
||||||
//copy FP crap
|
//copy FP crap
|
||||||
outevent.xavg = inevent->xavg;
|
outevent.xavg = inevent->xavg;
|
||||||
|
outevent.x1 = inevent->x1;
|
||||||
|
outevent.x2 = inevent->x2;
|
||||||
outevent.scintE = inevent->scintLeft;
|
outevent.scintE = inevent->scintLeft;
|
||||||
outevent.cathodeE = inevent->cathode;
|
outevent.cathodeE = inevent->cathode;
|
||||||
outevent.anodeFrontE = inevent->anodeFront;
|
outevent.anodeFrontE = inevent->anodeFront;
|
||||||
outevent.anodeBackE = inevent->anodeBack;
|
outevent.anodeBackE = inevent->anodeBack;
|
||||||
outevent.scintT = inevent->scintLeftTime;
|
outevent.scintT = inevent->scintLeftTime;
|
||||||
|
//Reset outevent SABRE data
|
||||||
|
outevent.sabre.clear();
|
||||||
|
|
||||||
for(int j=0; j<5; j++)
|
for(int j=0; j<5; j++)
|
||||||
{
|
{
|
||||||
|
@ -139,6 +143,7 @@ namespace SabreCal {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
std::sort(outevent.sabre.begin(), outevent.sabre.end(), [](const SabrePair& p1, const SabrePair& p2){ return p1.ringE > p2.ringE; });
|
||||||
outtree->Fill();
|
outtree->Fill();
|
||||||
}
|
}
|
||||||
std::cout<<std::endl;
|
std::cout<<std::endl;
|
||||||
|
@ -155,7 +160,7 @@ namespace SabreCal {
|
||||||
std::cout<<"Total number of SABRE hits: "<<m_stats.totalSabreHits<<std::endl;
|
std::cout<<"Total number of SABRE hits: "<<m_stats.totalSabreHits<<std::endl;
|
||||||
std::cout<<"Total number of good SABRE hits: "<<m_stats.goodSabreHits<<std::endl;
|
std::cout<<"Total number of good SABRE hits: "<<m_stats.goodSabreHits<<std::endl;
|
||||||
std::cout<<"Number of ring/wedge pairs made: "<<m_stats.pairsMade<<std::endl;
|
std::cout<<"Number of ring/wedge pairs made: "<<m_stats.pairsMade<<std::endl;
|
||||||
std::cout<<"Matching efficiency percentage: "<<((double)m_stats.pairsMade)/m_stats.goodSabreHits<<std::endl;
|
std::cout<<"Matching efficiency percentage: "<<((double)m_stats.pairsMade*2.0)/m_stats.goodSabreHits<<std::endl;
|
||||||
std::cout<<"Number of hits below threshold: "<<m_stats.sabreBelowThreshold<<std::endl;
|
std::cout<<"Number of hits below threshold: "<<m_stats.sabreBelowThreshold<<std::endl;
|
||||||
std::cout<<"Number of wedge fragments: "<<m_stats.sabreWedgeFrags<<std::endl;
|
std::cout<<"Number of wedge fragments: "<<m_stats.sabreWedgeFrags<<std::endl;
|
||||||
std::cout<<"Number of ring fragments: "<<m_stats.sabreRingFrags<<std::endl;
|
std::cout<<"Number of ring fragments: "<<m_stats.sabreRingFrags<<std::endl;
|
||||||
|
|
|
@ -108,10 +108,10 @@ namespace SabreCal {
|
||||||
{
|
{
|
||||||
if(m_data[i].x.size() != 0)
|
if(m_data[i].x.size() != 0)
|
||||||
{
|
{
|
||||||
graph_array[i] = new TGraph(m_data[i].x.size(), &(m_data[i].x[0]), &(m_data[i].y[0]));
|
graph_array[i] = new TGraph(m_data[i].x.size(), m_data[i].x.data(), m_data[i].y.data());
|
||||||
graph_array[i]->SetName(m_data[i].name.c_str());
|
graph_array[i]->SetName(m_data[i].name.c_str());
|
||||||
graph_array[i]->SetTitle(m_data[i].title.c_str());
|
graph_array[i]->SetTitle(m_data[i].title.c_str());
|
||||||
auto result = graph_array[i]->Fit("pol1","R|ROB|Q+");
|
auto result = graph_array[i]->Fit("pol1","S|ROB|Q+");
|
||||||
m_params[i].slope = result->Parameter(1);
|
m_params[i].slope = result->Parameter(1);
|
||||||
m_params[i].offset = result->Parameter(0);
|
m_params[i].offset = result->Parameter(0);
|
||||||
}
|
}
|
||||||
|
@ -133,7 +133,7 @@ namespace SabreCal {
|
||||||
graph_array[i] = new TGraph(m_data[i].x.size(), &(m_data[i].x[0]), &(m_data[i].y[0]));
|
graph_array[i] = new TGraph(m_data[i].x.size(), &(m_data[i].x[0]), &(m_data[i].y[0]));
|
||||||
graph_array[i]->SetName(m_data[i].name.c_str());
|
graph_array[i]->SetName(m_data[i].name.c_str());
|
||||||
graph_array[i]->SetTitle(m_data[i].title.c_str());
|
graph_array[i]->SetTitle(m_data[i].title.c_str());
|
||||||
auto result = graph_array[i]->Fit("pol1","R|ROB|Q+");
|
auto result = graph_array[i]->Fit("pol1","S|ROB|Q+");
|
||||||
m_params[i].slope = result->Parameter(1);
|
m_params[i].slope = result->Parameter(1);
|
||||||
m_params[i].offset = result->Parameter(0);
|
m_params[i].offset = result->Parameter(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,13 @@ int main(int argc, const char** argv)
|
||||||
option = argv[1];
|
option = argv[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ifstream input(argv[1]);
|
std::ifstream input(inputfile);
|
||||||
|
if(!input.is_open())
|
||||||
|
{
|
||||||
|
std::cerr<<"ERR -- Unable to open input config file "<<inputfile<<std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
std::string junk;
|
std::string junk;
|
||||||
|
|
||||||
std::string gaindata, caldata, inputdata, outputdata;
|
std::string gaindata, caldata, inputdata, outputdata;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user