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