73 std::string hname_accept =
"hTeAsymmetry_accept_bit"+std::to_string((
int)i);
74 std::string hname_reject =
"hTeAsymmetry_reject_bit"+std::to_string((
int)i);
85 const std::vector<TCS::TOBArray *> & output,
88 if(input.size() == 1) {
90 if (input[0]->size()!=1) {
91 TCS_EXCEPTION(
"TeAsymmetry alg needs input list with a single jTE TOB, got " << input[0]->size());
95 jte != input[0]->end();
104 long long jteSideA = (*jte)->sumEtSideA();
105 long long jteSideC = (*jte)->sumEtSideC();
109 bool condition_1 = std::abs(jteSideA - jteSideC) >
p_deltaAbsMin[i];
114 static constexpr unsigned c2fractionalBits = 8;
115 int offsetSumEt =
static_cast<int>((*jte)->sumEt()) +
static_cast<int>(
p_asymOffset[i]);
116 bool condition_2 = std::abs(jteSideA - jteSideC) > ((
static_cast<long long>(
p_asymFactor[i]) * offsetSumEt ) >> c2fractionalBits);
122 accept = condition_1 && condition_2 && condition_3;
127 const bool fillReject =
fillHistos() and not fillAccept;
128 const bool alreadyFilled = decision.
bit(i);
130 TRG_MSG_DEBUG(
"Decision " << i <<
": " << (accept?
"pass":
"fail") <<
" jTE_A = " << (*jte)->sumEtSideA() <<
" , jTE_C = " << (*jte)->sumEtSideC());
136 if(fillAccept and not alreadyFilled) {
138 }
else if(fillReject) {
145 TCS_EXCEPTION(
"TeAsymmetry alg must have 1 input, but got " << input.size());
151 const std::vector<TCS::TOBArray *> & output,
#define REGISTER_ALG_TCS(CLASS)
#define TCS_EXCEPTION(MSG)
const Parameter & parameter(const std::string ¶meterName) const
const std::string & name() const
void bookHist(std::vector< std::string > ®Name, const std::string &name, const std::string &title, const int binx, const int xmin, const int xmax)
void defineParameter(const std::string &name, TCS::parType_t value)
void fillHist2D(const std::string &histName, double x, double y)
data_t::const_iterator const_iterator
void setNumberOutputBits(unsigned int numberOutputBits)
DecisionAlg(const std::string &name)
bool fillHistosBasedOnHardware() const
! getter
bool fillHistos() const
whether the monitoring histograms should be filled
std::vector< std::string > m_histAccept
std::vector< std::string > m_histReject
unsigned int numberOutputBits() const
bool getDecisionHardwareBit(const unsigned int &bitNumber) const
! get one hardware decision bit from this algo
bool bit(unsigned int index) const
void setBit(unsigned int index, bool value)
parType_t p_asymFactor[4]
virtual StatusCode initialize()
virtual StatusCode processBitCorrect(const std::vector< TCS::TOBArray const * > &input, const std::vector< TCS::TOBArray * > &output, Decision &decison)
virtual StatusCode process(const std::vector< TCS::TOBArray const * > &input, const std::vector< TCS::TOBArray * > &output, Decision &decison)
parType_t p_maxTeProduct[4]
parType_t p_deltaAbsMin[4]
parType_t p_asymOffset[4]
TeAsymmetry(const std::string &name)