25 #define LOG std::cout << "TCS::DisambiguationDRIncl3: "
57 p_NumberLeading1 = parameter(
"InputWidth1").value();
58 p_NumberLeading2 = parameter(
"InputWidth2").value();
59 p_NumberLeading3 = parameter(
"InputWidth3").value();
61 if(parameter(
"MaxTob1").
value() > 0) p_NumberLeading1 = parameter(
"MaxTob1").value();
62 if(parameter(
"MaxTob2").
value() > 0) p_NumberLeading2 = parameter(
"MaxTob2").value();
63 if(parameter(
"MaxTob3").
value() > 0) p_NumberLeading3 = parameter(
"MaxTob3").value();
67 for(
unsigned int i=0;
i<numberOutputBits(); ++
i) {
68 p_MinET1[
i] = parameter(
"MinET1",
i).value();
69 p_MinET2[
i] = parameter(
"MinET2",
i).value();
70 p_MinET3[
i] = parameter(
"MinET3",
i).value();
72 p_DRCutMin[
i] = parameter(
"DisambDRSqrMin",
i).value();
73 p_DRCutMax[
i] = parameter(
"DisambDRSqrMax",
i).value();
75 p_DisambDR[
i] = parameter(
"DisambDRSqr",
i).value();
99 const std::vector<TCS::TOBArray *> & output,
104 if( input.size() == 3) {
108 tob1 != input[0]->end() &&
distance(input[0]->
begin(), tob1) < p_NumberLeading1;
114 tob2 != input[1]->end() &&
distance(input[1]->
begin(), tob2) < p_NumberLeading2;
119 unsigned int deltaR2Cut = calcDeltaR2BW( *tob1, *tob2 );
122 tob3 != input[2]->end() ;
124 unsigned int deltaR13 = calcDeltaR2BW( *tob1, *tob3 );
125 unsigned int deltaR23 = calcDeltaR2BW( *tob2, *tob3 );
126 for(
unsigned int i=0;
i<numberOutputBits(); ++
i) {
128 if(
parType_t((*tob1)->Et()) <= p_MinET1[
i])
continue;
129 if(
parType_t((*tob2)->Et()) <= p_MinET2[
i])
continue;
130 if(
parType_t((*tob3)->Et()) <= p_MinET3[
i])
continue;
132 if (deltaR2Cut > p_DRCutMax[
i])
continue;
133 if (deltaR2Cut <= p_DRCutMin[
i])
continue;
135 accept = deltaR13 > p_DisambDR[
i] && deltaR23 > p_DisambDR[
i] ;
140 TRG_MSG_DEBUG(
"Decision " <<
i <<
": " << (
accept?
"pass":
"fail") <<
" deltaR13 = " << deltaR13 <<
" deltaR23 = " << deltaR23);
145 for (
unsigned int i=0;
i < numberOutputBits(); ++
i) {
149 output[
i]->setAmbiguityFlag(hasAmbiguousInputs);
152 TCS_EXCEPTION(
"DisambiguationDRIncl3 alg must have 3 inputs, but got " << input.size());
159 const std::vector<TCS::TOBArray *> & output,
164 if( input.size() == 3) {
168 tob1 != input[0]->end() &&
distance(input[0]->
begin(), tob1) < p_NumberLeading1;
174 tob2 != input[1]->end() &&
distance(input[1]->
begin(), tob2) < p_NumberLeading2;
179 unsigned int deltaR2Cut = calcDeltaR2( *tob1, *tob2 );
182 tob3 != input[2]->end() ;
184 unsigned int deltaR13 = calcDeltaR2( *tob1, *tob3 );
185 unsigned int deltaR23 = calcDeltaR2( *tob2, *tob3 );
186 for(
unsigned int i=0;
i<numberOutputBits(); ++
i) {
188 if(
parType_t((*tob1)->Et()) <= p_MinET1[
i])
continue;
189 if(
parType_t((*tob2)->Et()) <= p_MinET2[
i])
continue;
190 if(
parType_t((*tob3)->Et()) <= p_MinET3[
i])
continue;
192 if (deltaR2Cut > p_DRCutMax[
i])
continue;
193 if (deltaR2Cut <= p_DRCutMin[
i])
continue;
195 accept = deltaR13 > p_DisambDR[
i] && deltaR23 > p_DisambDR[
i] ;
200 TRG_MSG_DEBUG(
"Decision " <<
i <<
": " << (
accept?
"pass":
"fail") <<
" deltaR13 = " << deltaR13 <<
" deltaR23 = " << deltaR23);
206 TCS_EXCEPTION(
"DisambiguationDRIncl3 alg must have 3 inputs, but got " << input.size());