ATLAS Offline Software
Loading...
Searching...
No Matches
jTauSort.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4// jTauSort.cxx
5// TopoCore
6// algorithm to make sorted jTaus lists
7//
13#include <algorithm>
14
15REGISTER_ALG_TCS(jTauSort)
16
17bool SortByEtLargestjTau(TCS::GenericTOB* tob1, TCS::GenericTOB* tob2)
18{
19 return tob1->Et() > tob2->Et();
20}
21
22
23// constructor
24TCS::jTauSort::jTauSort(const std::string & name) :
26{
27 defineParameter( "InputWidth", 120); // for fw
28 defineParameter( "OutputWidth", 6 );
29 defineParameter( "MinEta", 0 );
30 defineParameter( "MaxEta", 196 );
31 defineParameter( "Isolation", 1024);
32 defineParameter( "passIsolation", false);
33}
34
35
38
39
42
43 m_numberOfjTaus = parameter("OutputWidth").value();
44 m_minEta = parameter("MinEta").value();
45 m_maxEta = parameter("MaxEta").value();
46 m_iso = parameter("Isolation").value();
47 m_passIsolation = parameter("passIsolation").value();
48
50}
51
52
54TCS::jTauSort::sort(const InputTOBArray & input, TOBArray & output) {
55
56 const jTauTOBArray & jtaus = dynamic_cast<const jTauTOBArray&>(input);
57
58 // loop over input TOBs && fill output array with GenericTOBs builds from jTaus
59 for(jTauTOBArray::const_iterator jtau = jtaus.begin(); jtau != jtaus.end(); ++jtau ) {
60 if ( parType_t(std::abs((*jtau)-> eta())) < m_minEta ) continue;
61 if ( parType_t(std::abs((*jtau)-> eta())) > m_maxEta ) continue;
62 if (! ( m_passIsolation || checkIsolation(*jtau) ) ) continue;
63 output.push_back( GenericTOB(**jtau) );
64 }
65
66 // sort
67 output.sort(SortByEtLargestjTau);
68
69 // keep only max number of jTaus
70 int par = m_numberOfjTaus;
71 unsigned int maxNumberOfJTaus = std::clamp(par, 0, std::abs(par));
72 if(maxNumberOfJTaus>0) {
73 while( output.size()> maxNumberOfJTaus ) {
74 if (output.size() == (maxNumberOfJTaus+1)) {
75 bool isAmbiguous = output[maxNumberOfJTaus-1].Et() == output[maxNumberOfJTaus].Et();
76 if (isAmbiguous) { output.setAmbiguityFlag(true); }
77 }
78 output.pop_back();
79 }
80 }
82}
83
84
85bool
87 if(m_passIsolation) return true;
88 return jtau->EtIso()*1024 < jtau->Et()*m_iso;
89}
90
91
92
93
#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
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
parType_t m_minEta
Definition jTauSort.h:32
parType_t m_maxEta
Definition jTauSort.h:33
parType_t m_numberOfjTaus
Definition jTauSort.h:31
virtual TCS::StatusCode initialize() override
Definition jTauSort.cxx:41
bool checkIsolation(const TCS::jTauTOB *jtau) const
Definition jTauSort.cxx:86
parType_t m_passIsolation
Definition jTauSort.h:35
parType_t m_iso
Definition jTauSort.h:34
jTauSort(const std::string &name)
Definition jTauSort.cxx:24
virtual TCS::StatusCode sort(const InputTOBArray &input, TOBArray &output) override final
Definition jTauSort.cxx:54
virtual ~jTauSort()
Definition jTauSort.cxx:36
unsigned int EtIso() const
Definition jTauTOB.h:40
unsigned int Et() const
Definition jTauTOB.h:32
bool SortByEtLargestjTau(TCS::GenericTOB *tob1, TCS::GenericTOB *tob2)
Definition jTauSort.cxx:17
uint32_t parType_t
Definition Parameter.h:22