ATLAS Offline Software
Loading...
Searching...
No Matches
eTauSort.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4// eTauSort.cxx
5// TopoCore
6// algorithm to create sorted lists for eTaus, et order applied
7//
12#include <algorithm>
13
14REGISTER_ALG_TCS(eTauSort)
15
16bool SortByEtLargesteTau(TCS::GenericTOB* tob1, TCS::GenericTOB* tob2)
17{
18 return tob1->Et() > tob2->Et();
19}
20
21
22// constructor
24 defineParameter( "InputWidth", 120 ); // for FW
25 defineParameter( "InputWidth1stStage", 30 ); // for FW
26 defineParameter( "OutputWidth", 6 );
27 defineParameter( "RCoreMin", 0 );
28 defineParameter( "RHadMin", 0 );
29 defineParameter( "MinEta", 0 );
30 defineParameter( "MaxEta", 196 );
31}
32
33
34// destructor
36
37
40 m_numberOfeTaus = parameter("OutputWidth").value();
41 m_minRCore = parameter("RCoreMin").value();
42 m_minRHad = parameter("RHadMin").value();
44}
45
46
48TCS::eTauSort::sort(const InputTOBArray & input, TOBArray & output) {
49
50 const eTauTOBArray & clusters = dynamic_cast<const eTauTOBArray&>(input);
51
52 // fill output array with GenericTOB buildt from clusters
53 for(eTauTOBArray::const_iterator etau = clusters.begin(); etau!= clusters.end(); ++etau ) {
54
55 // Isolation cut
56 if ( !isocut(m_minRCore, (*etau)-> rCore()) ) {continue;}
57 if ( !isocut(m_minRHad, (*etau)-> rHad()) ) {continue;}
58
59 const GenericTOB gtob(**etau);
60 output.push_back( gtob );
61 }
62
63 // sort
64 output.sort(SortByEtLargesteTau);
65
66
67 // keep only max number of clusters
68 int par = m_numberOfeTaus;
69 unsigned int maxNumberOfeTaus = std::clamp(par, 0, std::abs(par));
70 if(maxNumberOfeTaus>0) {
71 while( output.size()> maxNumberOfeTaus ) {
72 if (output.size() == (maxNumberOfeTaus+1)) {
73 bool isAmbiguous = output[maxNumberOfeTaus-1].EtDouble() == output[maxNumberOfeTaus].EtDouble();
74 if (isAmbiguous) { output.setAmbiguityFlag(true); }
75 }
76 output.pop_back();
77 }
78 }
80}
81
#define REGISTER_ALG_TCS(CLASS)
Definition AlgFactory.h:62
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 sort(const InputTOBArray &input, TOBArray &output) override final
Definition eTauSort.cxx:48
virtual ~eTauSort()
Definition eTauSort.cxx:35
parType_t m_minRCore
Definition eTauSort.h:32
virtual TCS::StatusCode initialize() override
Definition eTauSort.cxx:39
parType_t m_minRHad
Definition eTauSort.h:33
eTauSort(const std::string &name)
Definition eTauSort.cxx:23
parType_t m_numberOfeTaus
Definition eTauSort.h:31
bool SortByEtLargesteTau(TCS::GenericTOB *tob1, TCS::GenericTOB *tob2)
Definition eTauSort.cxx:16