SPS_SABRE_EventBuilder/src/evb/CutHandler.cpp

105 lines
2.2 KiB
C++
Raw Normal View History

2021-07-13 16:36:41 -04:00
#include "EventBuilder.h"
#include "CutHandler.h"
CutHandler::CutHandler() :
validFlag(false)
{
InitVariableMap();
}
CutHandler::CutHandler(const std::string& filename) :
validFlag(false)
{
SetCuts(filename);
InitVariableMap();
}
CutHandler::~CutHandler()
{
for(unsigned int i=0; i<file_array.size(); i++)
if(file_array[i]->IsOpen())
file_array[i]->Close();
2021-07-13 16:36:41 -04:00
}
void CutHandler::SetCuts(const std::string& filename)
{
2021-07-13 16:36:41 -04:00
std::ifstream cutlist(filename);
if(!cutlist.is_open())
{
2021-07-13 16:36:41 -04:00
validFlag = false;
}
std::string junk, name, fname, varx, vary;
cutlist>>junk>>junk>>junk>>junk;
cut_array.clear();
file_array.clear();
while(cutlist>>name)
{
2021-07-13 16:36:41 -04:00
cutlist>>fname>>varx>>vary;
TFile* file = TFile::Open(fname.c_str(), "READ");
TCutG* cut = (TCutG*) file->Get("CUTG");
if(cut)
{
2021-07-13 16:36:41 -04:00
cut->SetVarX(varx.c_str());
cut->SetVarY(vary.c_str());
cut->SetName(name.c_str());
cut_array.push_back(cut);
file_array.push_back(file);
}
else
{
2021-07-13 16:36:41 -04:00
validFlag = false;
std::cerr<<"CutHandler has encountered a bad cut at file: "<<file<<"."<<std::endl;
std::cerr<<"The file either does not exist or does not contain a TCutG named CUTG"<<std::endl;
std::cerr<<"Cuts will not be used."<<std::endl;
return;
}
}
if(cut_array.size() > 0)
validFlag = true;
else
validFlag = false;
2021-07-13 16:36:41 -04:00
}
/*
ADD MORE VARIABLES HERE!
*/
void CutHandler::InitVariableMap()
{
2021-07-13 16:36:41 -04:00
varmap["x1"] = &m_event.x1;
varmap["x2"] = &m_event.x2;
varmap["xavg"] = &m_event.xavg;
varmap["scintLeft"] = &m_event.scintLeft;
varmap["anodeBack"] = &m_event.anodeBack;
varmap["cathode"] = &m_event.cathode;
}
bool CutHandler::IsInside(const ProcessedEvent* eaddress)
{
2021-07-13 16:36:41 -04:00
m_event = *eaddress;
std::string x, y;
for(unsigned int i=0; i<cut_array.size(); i++)
{
2021-07-13 16:36:41 -04:00
TCutG* cut = cut_array[i];
x = cut->GetVarX();
y = cut->GetVarY();
auto xentry = varmap.find(x);
auto yentry = varmap.find(y);
if(xentry == varmap.end() || yentry == varmap.end())
{
2021-07-13 16:36:41 -04:00
std::cerr<<"Unmapped variable called in CutHandler::IsInside()! Var names: "<<xentry->first<<" , "<<yentry->first<<std::endl;
return false;
}
if(!cut->IsInside(*(xentry->second), *(yentry->second)))
2021-07-13 16:36:41 -04:00
return false;
2021-07-13 16:36:41 -04:00
}
return true;
}