ATLAS Offline Software
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 //
9 #include "L1TopoEvent/TOBArray.h"
11 #include "L1TopoEvent/GenericTOB.h"
12 #include <algorithm>
13 
14 REGISTER_ALG_TCS(eTauSort)
15 
16 bool SortByEtLargesteTau(TCS::GenericTOB* tob1, TCS::GenericTOB* tob2)
17 {
18  return tob1->Et() > tob2->Et();
19 }
20 
21 
22 // constructor
23 TCS::eTauSort::eTauSort(const std::string & name) : SortingAlg(name) {
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 
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
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 
TCS::eTauSort::~eTauSort
virtual ~eTauSort()
Definition: eTauSort.cxx:35
TCS::StatusCode::SUCCESS
@ SUCCESS
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/L1TopoCommon/StatusCode.h:17
TCS::DataArrayImpl< eTauTOB >::const_iterator
data_t::const_iterator const_iterator
Definition: DataArrayImpl.h:18
eTauSort.h
TCS::eTauSort::initialize
virtual TCS::StatusCode initialize() override
Definition: eTauSort.cxx:39
SortByEtLargesteTau
bool SortByEtLargesteTau(TCS::GenericTOB *tob1, TCS::GenericTOB *tob2)
Definition: eTauSort.cxx:16
TCS::eTauTOBArray
Definition: eTauTOBArray.h:14
TCS::ConfigurableAlg::defineParameter
void defineParameter(const std::string &name, TCS::parType_t value)
Definition: ConfigurableAlg.cxx:201
TCS::InputTOBArray
Definition: InputTOBArray.h:15
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
TOBArray.h
TCS::TOBArray
Definition: TOBArray.h:24
merge.output
output
Definition: merge.py:17
TCS::GenericTOB
Definition: GenericTOB.h:35
REGISTER_ALG_TCS
#define REGISTER_ALG_TCS(CLASS)
Definition: AlgFactory.h:62
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:29
TCS::SortingAlg
Definition: SortingAlg.h:18
TCS::eTauSort::eTauSort
eTauSort(const std::string &name)
Definition: eTauSort.cxx:23
GenericTOB.h
TCS::eTauSort::sort
virtual TCS::StatusCode sort(const InputTOBArray &input, TOBArray &output) override final
Definition: eTauSort.cxx:48
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
TCS
Definition: Global/GlobalSimulation/src/IO/Decision.h:18
xAOD::bool
setBGCode setTAP setLVL2ErrorBits bool
Definition: TrigDecision_v1.cxx:60
GlobalSim::isocut
bool isocut(const std::string &threshold, const unsigned int bit)
Definition: isocut.cxx:10
eTauTOBArray.h
TCS::StatusCode
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/L1TopoCommon/StatusCode.h:15