ATLAS Offline Software
Loading...
Searching...
No Matches
jEmSort.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4// jEmSort.cxx
5// TopoCore
6// algorithm to make sorted jEms lists
7//
12#include <algorithm>
13
14REGISTER_ALG_TCS(jEmSort)
15
16bool SortByEtLargestjEm(TCS::GenericTOB* tob1, TCS::GenericTOB* tob2)
17{
18 return tob1->Et() > tob2->Et();
19}
20
21// constructor
22TCS::jEmSort::jEmSort(const std::string & name) :
24{
25 defineParameter( "InputWidth", 64 ); // for FW
26 defineParameter( "InputWidth1stStage", 16 ); // for FW
27 defineParameter( "OutputWidth", 10 );
28 defineParameter( "MinEta", 0 );
29 defineParameter( "MaxEta", 196 );
30 defineParameter( "IsoMin", 0 );
31 defineParameter( "Frac1Min", 0 );
32 defineParameter( "Frac2Min", 0 );
33}
34
35
38
39
40
43 m_numberOfJets = parameter("OutputWidth").value();
44 m_minEta = parameter("MinEta").value();
45 m_maxEta = parameter("MaxEta").value();
46 m_iso = parameter("IsoMin").value();
47 m_frac1 = parameter("Frac1Min").value();
48 m_frac2 = parameter("Frac2Min").value();
50}
51
52
54TCS::jEmSort::sort(const InputTOBArray & input, TOBArray & output) {
55
56 const jEmTOBArray & jets = dynamic_cast<const jEmTOBArray&>(input);
57
58 // fill output array with GenericTOBs builds from jets
59 for(jEmTOBArray::const_iterator jet = jets.begin(); jet!= jets.end(); ++jet ) {
60 // Isolation cuts
61 if ( !isocut(m_iso, (*jet)-> isolation()) ) continue;
62 if ( !isocut(m_frac1, (*jet)-> frac1()) ) continue;
63 if ( !isocut(m_frac2, (*jet)-> frac2()) ) continue;
64 // Eta cut
65 if ( parType_t(std::abs((*jet)-> eta())) < m_minEta ) continue;
66 if ( parType_t(std::abs((*jet)-> eta())) > m_maxEta ) continue;
67
68 output.push_back( GenericTOB(**jet) );
69 }
70
71 // sort
72 output.sort(SortByEtLargestjEm);
73
74 // keep only max number of jets
75 int par = m_numberOfJets;
76 unsigned int maxNumberOfJets = std::clamp(par, 0, std::abs(par));
77 if(maxNumberOfJets>0) {
78 while( output.size()> maxNumberOfJets ) {
79 if (output.size() == (maxNumberOfJets+1)) {
80 bool isAmbiguous = output[maxNumberOfJets-1].EtDouble() == output[maxNumberOfJets].EtDouble();
81 if (isAmbiguous) { output.setAmbiguityFlag(true); }
82 }
83 output.pop_back();
84 }
85 }
87}
88
#define REGISTER_ALG_TCS(CLASS)
Definition AlgFactory.h:62
Scalar eta() const
pseudorapidity method
const Parameter & parameter(const std::string &parameterName) const
const std::string & name() const
bool isocut(const std::string &threshold, const unsigned int bit) const
void defineParameter(const std::string &name, TCS::parType_t value)
data_t::const_iterator const_iterator
SortingAlg(const std::string &name)
Definition SortingAlg.h:21
virtual TCS::StatusCode initialize() override
Definition jEmSort.cxx:42
parType_t m_frac1
Definition jEmSort.h:35
parType_t m_numberOfJets
Definition jEmSort.h:31
parType_t m_minEta
Definition jEmSort.h:32
parType_t m_frac2
Definition jEmSort.h:36
parType_t m_maxEta
Definition jEmSort.h:33
virtual TCS::StatusCode sort(const InputTOBArray &input, TOBArray &output) override final
Definition jEmSort.cxx:54
parType_t m_iso
Definition jEmSort.h:34
jEmSort(const std::string &name)
Definition jEmSort.cxx:22
virtual ~jEmSort()
Definition jEmSort.cxx:36
bool SortByEtLargestjEm(TCS::GenericTOB *tob1, TCS::GenericTOB *tob2)
Definition jEmSort.cxx:16
uint32_t parType_t
Definition Parameter.h:22