29    defineParameter(
"InputWidth1", 9);
 
   30    defineParameter(
"InputWidth2", 9);
 
   31    defineParameter(
"MaxTob1", 0);
 
   32    defineParameter(
"MaxTob2", 0);
 
   33    defineParameter(
"NumResultBits", 6);
 
   34    defineParameter(
"MinMSqr",   0, 0);
 
   35    defineParameter(
"MaxMSqr", 999, 0);
 
   36    defineParameter(
"MinMSqr",   0, 1);
 
   37    defineParameter(
"MaxMSqr", 999, 1);
 
   38    defineParameter(
"MinMSqr",   0, 2);
 
   39    defineParameter(
"MaxMSqr", 999, 2);
 
   40    defineParameter(
"MinMSqr",   0, 3);
 
   41    defineParameter(
"MaxMSqr", 999, 3);
 
   42    defineParameter(
"MinMSqr",   0, 4);
 
   43    defineParameter(
"MaxMSqr", 999, 4);
 
   44    defineParameter(
"MinMSqr",   0, 5);
 
   45    defineParameter(
"MaxMSqr", 999, 5);
 
   46    defineParameter(
"MinET1",0,0);
 
   47    defineParameter(
"MinET2",0,0);
 
   48    defineParameter(
"MinET1",0,1);
 
   49    defineParameter(
"MinET2",0,1);
 
   50    defineParameter(
"MinET1",0,2);
 
   51    defineParameter(
"MinET2",0,2);
 
   52    defineParameter(
"MinET1",0,3);
 
   53    defineParameter(
"MinET2",0,3);
 
   54    defineParameter(
"MinET1",0,4);
 
   55    defineParameter(
"MinET2",0,4);
 
   56    defineParameter(
"MinET1",0,5);
 
   57    defineParameter(
"MinET2",0,5);
 
   58    defineParameter(
"ApplyEtaCut", 0);
 
   59    defineParameter(
"MinEta1",  0);
 
   60    defineParameter(
"MaxEta1", 31);
 
   61    defineParameter(
"MinEta2",  0);
 
   62    defineParameter(
"MaxEta2", 31);
 
   63    defineParameter(
"DeltaRMin",  0, 0);
 
   64    defineParameter(
"DeltaRMax",  0, 0);
 
   65    defineParameter(
"DeltaRMin",  0, 1);
 
   66    defineParameter(
"DeltaRMax",  0, 1);
 
   67    defineParameter(
"DeltaRMin",  0, 2);
 
   68    defineParameter(
"DeltaRMax",  0, 2);
 
   69    defineParameter(
"DeltaRMin",  0, 3);
 
   70    defineParameter(
"DeltaRMax",  0, 3);
 
   71    defineParameter(
"DeltaRMin",  0, 4);
 
   72    defineParameter(
"DeltaRMax",  0, 4);
 
   73    defineParameter(
"DeltaRMin",  0, 5);
 
   74    defineParameter(
"DeltaRMax",  0, 5);
 
   76    setNumberOutputBits(6);
 
   85    p_NumberLeading1 = parameter(
"InputWidth1").value();
 
   86    p_NumberLeading2 = parameter(
"InputWidth2").value();
 
   87    if(parameter(
"MaxTob1").
value() > 0) p_NumberLeading1 = parameter(
"MaxTob1").value();
 
   88    if(parameter(
"MaxTob2").
value() > 0) p_NumberLeading2 = parameter(
"MaxTob2").value();
 
   92    for(
unsigned int i=0; 
i<numberOutputBits(); ++
i) {
 
   94      p_InvMassMin[
i] = parameter(
"MinMSqr", 
i).value();
 
   95      p_InvMassMax[
i] = parameter(
"MaxMSqr", 
i).value();
 
   96      p_MinET1[
i] = parameter(
"MinET1",
i).value();
 
   97      p_MinET2[
i] = parameter(
"MinET2",
i).value();
 
   98      p_DeltaRMin[
i] = parameter(
"DeltaRMin", 
i).value();
 
   99      p_DeltaRMax[
i] = parameter(
"DeltaRMax", 
i).value();
 
  110    p_ApplyEtaCut = parameter(
"ApplyEtaCut").value();
 
  111    p_MinEta1     = parameter(
"MinEta1"    ).value();
 
  112    p_MaxEta1     = parameter(
"MaxEta1"    ).value();
 
  113    p_MinEta2     = parameter(
"MinEta2"    ).value();
 
  114    p_MaxEta2     = parameter(
"MaxEta2"    ).value();
 
  124    for(
unsigned int i=0; 
i<numberOutputBits(); ++
i) {
 
  125        std::string hname_accept = 
"hInvariantMassInclusiveDeltaRSqrIncl2_accept_bit"+
std::to_string((
int)
i);
 
  126        std::string hname_reject = 
"hInvariantMassInclusiveDeltaRSqrIncl2_reject_bit"+
std::to_string((
int)
i);
 
  128        bookHist(m_histAcceptM, hname_accept, 
"INVM vs DR", 100, sqrt(p_InvMassMin[
i]), sqrt(p_InvMassMax[
i]), 100, sqrt(p_DeltaRMin[
i]), sqrt(p_DeltaRMax[
i]));
 
  129        bookHist(m_histRejectM, hname_reject, 
"INVM vs DR", 100, sqrt(p_InvMassMin[
i]), sqrt(p_InvMassMax[
i]), 100, sqrt(p_DeltaRMin[
i]), sqrt(p_DeltaRMax[
i]));
 
  140                              const std::vector<TCS::TOBArray *> & output,
 
  144    if( input.size() == 2) {
 
  146            tob1 != input[0]->end() && 
distance(input[0]->
begin(), tob1) < p_NumberLeading1;
 
  152                  tob2 != input[1]->end() && 
distance(input[1]->
begin(), tob2) < p_NumberLeading2;
 
  155                 unsigned int invmass2 = calcInvMassBW( *tob1, *tob2 );
 
  157         unsigned int deltaR2 = calcDeltaR2BW( *tob1, *tob2 );
 
  158         TRG_MSG_DEBUG(
"Jet1 = " << **tob1 << 
", Jet2 = " << **tob2 << 
", invmass2 = " << invmass2 << 
", deltaR2 = " << 
deltaR2);
 
  159                 const int eta1 = (*tob1)->eta();
 
  160                 const int eta2 = (*tob2)->eta();
 
  161                 const unsigned int aeta1 = std::abs(
eta1);
 
  162                 const unsigned int aeta2 = std::abs(
eta2);
 
  163         for(
unsigned int i=0; 
i<numberOutputBits(); ++
i) {
 
  165                    if( 
parType_t((*tob1)->Et()) <= p_MinET1[
i]) 
continue; 
 
  166                    if( 
parType_t((*tob2)->Et()) <= p_MinET2[
i]) 
continue; 
 
  168                       ((aeta1 < p_MinEta1 || aeta1 > p_MaxEta1 ) ||
 
  169                        (aeta2 < p_MinEta2 || aeta2 > p_MaxEta2 ) ))  
continue;
 
  170                    accept = invmass2 >= p_InvMassMin[
i] && invmass2 <= p_InvMassMax[i] && deltaR2 >= p_DeltaRMin[
i] && 
deltaR2 <= p_DeltaRMax[
i];
 
  171                    const bool fillAccept = fillHistos() and (fillHistosBasedOnHardware() ? getDecisionHardwareBit(
i) : 
accept);
 
  172                    const bool fillReject = fillHistos() and not fillAccept;
 
  173                    const bool alreadyFilled = decision.
bit(
i);
 
  178                    if(fillAccept and not alreadyFilled) {
 
  179              fillHist2D(m_histAcceptM[
i],sqrt((
float)invmass2),sqrt((
float)
deltaR2));
 
  180                    } 
else if(fillReject) {
 
  181              fillHist2D(m_histRejectM[
i],sqrt((
float)invmass2),sqrt((
float)
deltaR2));
 
  187          for (
unsigned int i=0; 
i < numberOutputBits(); ++
i) {
 
  190             output[
i]->setAmbiguityFlag(hasAmbiguousInputs);
 
  194       TCS_EXCEPTION(
"InvariantMassInclusiveDeltaRSqrIncl2 alg must have  2 inputs, but got " << input.size());
 
  203                              const std::vector<TCS::TOBArray *> & output,
 
  208    if( input.size() == 2) {
 
  210            tob1 != input[0]->end() && 
distance(input[0]->
begin(), tob1) < p_NumberLeading1;
 
  214                  tob2 != input[1]->end() && 
distance(input[1]->
begin(), tob2) < p_NumberLeading2;
 
  217           unsigned int invmass2 = calcInvMass( *tob1, *tob2 );
 
  219           unsigned int deltaR2 = calcDeltaR2( *tob1, *tob2 );
 
  220           TRG_MSG_DEBUG(
"Jet1 = " << **tob1 << 
", Jet2 = " << **tob2 << 
", invmass2 = " << invmass2 << 
", deltaR2 = " << 
deltaR2);
 
  221           const int eta1 = (*tob1)->eta();
 
  222           const int eta2 = (*tob2)->eta();
 
  223           const unsigned int aeta1 = std::abs(
eta1);
 
  224           const unsigned int aeta2 = std::abs(
eta2);
 
  225           for(
unsigned int i=0; 
i<numberOutputBits(); ++
i) {
 
  226                    if( 
parType_t((*tob1)->Et()) <= p_MinET1[
i]) 
continue; 
 
  227                    if( 
parType_t((*tob2)->Et()) <= p_MinET2[
i]) 
continue; 
 
  229                       ((aeta1 < p_MinEta1 || aeta1 > p_MaxEta1 ) ||
 
  230                        (aeta2 < p_MinEta2 || aeta2 > p_MaxEta2 ) )) 
continue;
 
  231                    bool accept = invmass2 >= p_InvMassMin[
i] && invmass2 <= p_InvMassMax[i] && deltaR2 >= p_DeltaRMin[
i] && 
deltaR2 <= p_DeltaRMax[
i];
 
  232                    const bool fillAccept = fillHistos() and (fillHistosBasedOnHardware() ? getDecisionHardwareBit(
i) : 
accept);
 
  233                    const bool fillReject = fillHistos() and not fillAccept;
 
  234                    const bool alreadyFilled = decision.
bit(
i);
 
  239                    if(fillAccept and not alreadyFilled) {
 
  240              fillHist2D(m_histAcceptM[
i],sqrt((
float)invmass2),sqrt((
float)
deltaR2));
 
  241                    } 
else if(fillReject) {
 
  242              fillHist2D(m_histRejectM[
i],sqrt((
float)invmass2),sqrt((
float)
deltaR2));
 
  249       TCS_EXCEPTION(
"InvariantMassInclusiveDeltaRSqrIncl2 alg must have  2 inputs, but got " << input.size());