ATLAS Offline Software
Loading...
Searching...
No Matches
DeltaRSqrIncl1.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4/*********************************
5 * DeltaRSqrIncl1.cpp
6 * Created by Joerg Stelzer / V Sorin on 9/16/14.
7 *
8 * @brief algorithm calculates the R2-distance between objects in one list and applies dR criteria
9 *
10 * @param NumberLeading
11**********************************/
12
13#include <cmath>
14
19
20REGISTER_ALG_TCS(DeltaRSqrIncl1)
21
22
23// not the best solution but we will move to athena where this comes for free
24#define LOG std::cout << "TCS::DeltaRSqrIncl1: "
25
27{
28 defineParameter("InputWidth", 9);
29 defineParameter("MaxTob", 0);
30 defineParameter("NumResultBits", 3);
31 defineParameter("RequireOneBarrel", 0);
32 defineParameter("MinET1",1);
33 defineParameter("MinET2",1);
34 defineParameter("DeltaRMin", 0, 0);
35 defineParameter("DeltaRMax", 0, 0);
36 defineParameter("DeltaRMin", 0, 1);
37 defineParameter("DeltaRMax", 0, 1);
38 defineParameter("DeltaRMin", 0, 2);
39 defineParameter("DeltaRMax", 0, 2);
41}
42
44
45
48 if(parameter("MaxTob").value() > 0) {
49 p_NumberLeading1 = parameter("MaxTob").value();
50 p_NumberLeading2 = parameter("MaxTob").value();
51 } else {
52 p_NumberLeading1 = parameter("InputWidth").value();
53 p_NumberLeading2 = parameter("InputWidth").value();
54 }
55 p_OneBarrel = parameter("RequireOneBarrel").value();
56
57 for(unsigned int i=0; i<numberOutputBits(); ++i) {
58 p_DeltaRMin[i] = parameter("DeltaRMin", i).value();
59 p_DeltaRMax[i] = parameter("DeltaRMax", i).value();
60 }
61 p_MinET1 = parameter("MinET1").value();
62 p_MinET2 = parameter("MinET2").value();
63
64 TRG_MSG_INFO("NumberLeading1 : " << p_NumberLeading1);
65 TRG_MSG_INFO("NumberLeading2 : " << p_NumberLeading2);
66 TRG_MSG_INFO("RequireOneBarrel : " << p_OneBarrel);
67
68 for(unsigned int i=0; i<numberOutputBits(); ++i) {
69 TRG_MSG_INFO("DeltaRMin : " << p_DeltaRMin[i]);
70 TRG_MSG_INFO("DeltaRMax : " << p_DeltaRMax[i]);
71 }
72 TRG_MSG_INFO("MinET1 : " << p_MinET1);
73 TRG_MSG_INFO("MinET2 : " << p_MinET2);
74
75 TRG_MSG_INFO("number output : " << numberOutputBits());
76
77 // book histograms
78 for(unsigned int i=0; i<numberOutputBits(); ++i) {
79 std::string hname_accept = "hDeltaRSqrIncl1_accept_bit"+std::to_string((int)i);
80 std::string hname_reject = "hDeltaRSqrIncl1_reject_bit"+std::to_string((int)i);
81 // dR
82 bookHist(m_histAccept, hname_accept, "DR", 100, sqrt(p_DeltaRMin[i]), sqrt(p_DeltaRMax[i]));
83 bookHist(m_histReject, hname_reject, "DR", 100, sqrt(p_DeltaRMin[i]), sqrt(p_DeltaRMax[i]));
84 }
85
87}
88
89
90
92TCS::DeltaRSqrIncl1::processBitCorrect( const std::vector<TCS::TOBArray const *> & input,
93 const std::vector<TCS::TOBArray *> & output,
94 Decision & decision )
95{
96 if(input.size() == 1) {
97 for( TOBArray::const_iterator tob1 = input[0]->begin();
98 tob1 != input[0]->end() && distance( input[0]->begin(), tob1) < p_NumberLeading1;
99 ++tob1)
100 {
101 if( parType_t((*tob1)->Et()) <= std::min(p_MinET1,p_MinET2)) continue; // ET cut
102 TCS::TOBArray::const_iterator tob2 = tob1; ++tob2;
103 for( ;
104 tob2 != input[0]->end() && distance( input[0]->begin(), tob2) < p_NumberLeading2;
105 ++tob2) {
106 if( parType_t((*tob2)->Et()) <= std::min(p_MinET1,p_MinET2)) continue; // ET cut
107 if( (parType_t((*tob1)->Et()) <= std::max(p_MinET1,p_MinET2)) && (parType_t((*tob2)->Et()) <= std::max(p_MinET1,p_MinET2))) continue;
108 // OneBarrel
109 if (p_OneBarrel && parType_t(abs((*tob1)->eta())) > 10 && parType_t(abs((*tob2)->eta())) > 10 ) continue;
110 // DeltaR2 cuts
111 unsigned int deltaR2 = calcDeltaR2BW( *tob1, *tob2 );
112 for(unsigned int i=0; i<numberOutputBits(); ++i) {
113 bool accept = false;
114 accept = deltaR2 >= p_DeltaRMin[i] && deltaR2 <= p_DeltaRMax[i];
115 const bool fillAccept = fillHistos() and (fillHistosBasedOnHardware() ? getDecisionHardwareBit(i) : accept);
116 const bool fillReject = fillHistos() and not fillAccept;
117 const bool alreadyFilled = decision.bit(i);
118 if( accept ) {
119 decision.setBit(i, true);
120 output[i]->push_back( TCS::CompositeTOB(*tob1, *tob2) );
121 }
122 if(fillAccept and not alreadyFilled) {
123 fillHist1D(m_histAccept[i],sqrt((float)deltaR2));
124 } else if(fillReject) {
125 fillHist1D(m_histReject[i],sqrt((float)deltaR2));
126 }
127 TRG_MSG_DEBUG("Decision " << i << ": " << (accept?"pass":"fail") << " deltaR2 = " << deltaR2);
128 }
129 }
130 }
131 bool hasAmbiguousInputs = TSU::isAmbiguousTruncation(input[0], p_NumberLeading1, p_MinET1)
133 for (unsigned int i=0; i < numberOutputBits(); ++i) {
134 output[i]->setAmbiguityFlag(hasAmbiguousInputs);
135 }
136 } else {
137 TCS_EXCEPTION("DeltaRSqrIncl1 alg must have either 1 input, but got " << input.size());
138 }
140}
141
143TCS::DeltaRSqrIncl1::process( const std::vector<TCS::TOBArray const *> & input,
144 const std::vector<TCS::TOBArray *> & output,
145 Decision & decision )
146{
147 if(input.size() == 1) {
148 for( TOBArray::const_iterator tob1 = input[0]->begin();
149 tob1 != input[0]->end() && distance( input[0]->begin(), tob1) < p_NumberLeading1;
150 ++tob1)
151 {
152 if( parType_t((*tob1)->Et()) <= std::min(p_MinET1,p_MinET2)) continue; // ET cut
153 TCS::TOBArray::const_iterator tob2 = tob1; ++tob2;
154 for( ;
155 tob2 != input[0]->end() && distance( input[0]->begin(), tob2) < p_NumberLeading2;
156 ++tob2) {
157 if( parType_t((*tob2)->Et()) <= std::min(p_MinET1,p_MinET2)) continue; // ET cut
158 if( (parType_t((*tob1)->Et()) <= std::max(p_MinET1,p_MinET2)) && (parType_t((*tob2)->Et()) <= std::max(p_MinET1,p_MinET2))) continue;
159 // OneBarrel
160 if (p_OneBarrel && parType_t(abs((*tob1)->eta())) > 10 && parType_t(abs((*tob2)->eta())) > 10 ) continue;
161 // DeltaR2 cuts
162 unsigned int deltaR2 = calcDeltaR2( *tob1, *tob2 );
163 for(unsigned int i=0; i<numberOutputBits(); ++i) {
164 bool accept = false;
165 accept = deltaR2 >= p_DeltaRMin[i] && deltaR2 <= p_DeltaRMax[i];
166 const bool fillAccept = fillHistos() and (fillHistosBasedOnHardware() ? getDecisionHardwareBit(i) : accept);
167 const bool fillReject = fillHistos() and not fillAccept;
168 const bool alreadyFilled = decision.bit(i);
169 if( accept ) {
170 decision.setBit(i, true);
171 output[i]->push_back( TCS::CompositeTOB(*tob1, *tob2) );
172 }
173 if(fillAccept and not alreadyFilled) {
174 fillHist1D(m_histAccept[i],sqrt((float)deltaR2));
175 } else if(fillReject) {
176 fillHist1D(m_histReject[i],sqrt((float)deltaR2));
177 }
178 TRG_MSG_DEBUG("Decision " << i << ": " << (accept?"pass":"fail") << " deltaR2 = " << deltaR2);
179 }
180 }
181 }
182 } else {
183 TCS_EXCEPTION("DeltaRSqrIncl1 alg must have either 1 input, but got " << input.size());
184 }
186}
#define REGISTER_ALG_TCS(CLASS)
Definition AlgFactory.h:62
const Parameter & parameter(const std::string &parameterName) const
const std::string & name() const
void bookHist(std::vector< std::string > &regName, const std::string &name, const std::string &title, const int binx, const int xmin, const int xmax)
void fillHist1D(const std::string &histName, double x)
unsigned int calcDeltaR2BW(const TCS::GenericTOB *tob1, const TCS::GenericTOB *tob2)
void defineParameter(const std::string &name, TCS::parType_t value)
unsigned int calcDeltaR2(const TCS::GenericTOB *tob1, const TCS::GenericTOB *tob2)
data_t::const_iterator const_iterator
void setNumberOutputBits(unsigned int numberOutputBits)
Definition DecisionAlg.h:40
DecisionAlg(const std::string &name)
Definition DecisionAlg.h:25
bool fillHistosBasedOnHardware() const
! getter
bool fillHistos() const
whether the monitoring histograms should be filled
std::vector< std::string > m_histAccept
Definition DecisionAlg.h:73
std::vector< std::string > m_histReject
Definition DecisionAlg.h:74
unsigned int numberOutputBits() const
Definition DecisionAlg.h:39
bool getDecisionHardwareBit(const unsigned int &bitNumber) const
! get one hardware decision bit from this algo
bool bit(unsigned int index) const
Definition Decision.h:40
void setBit(unsigned int index, bool value)
Definition Decision.cxx:12
virtual StatusCode initialize()
DeltaRSqrIncl1(const std::string &name)
virtual StatusCode process(const std::vector< TCS::TOBArray const * > &input, const std::vector< TCS::TOBArray * > &output, Decision &decison)
virtual StatusCode processBitCorrect(const std::vector< TCS::TOBArray const * > &input, const std::vector< TCS::TOBArray * > &output, Decision &decison)
parType_t p_DeltaRMin[3]
parType_t p_DeltaRMax[3]
uint32_t parType_t
Definition Parameter.h:22
bool isAmbiguousTruncation(TCS::TOBArray const *tobs, size_t pos, unsigned minEt=0)