diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/EtCut.h b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/EtCut.h index cc010cd8d9025638cc13fd3e1af7e95d66b793f5..75406ffd3f4084299d17dd1bcba87a596b59fb81 100644 --- a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/EtCut.h +++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/EtCut.h @@ -18,6 +18,9 @@ namespace TCS { virtual StatusCode initialize(); + virtual StatusCode processBitCorrect( const std::vector<TCS::TOBArray const *> & input, + const std::vector<TCS::TOBArray *> & output, + Decision & decison ); virtual StatusCode process( const std::vector<TCS::TOBArray const *> & input, const std::vector<TCS::TOBArray *> & output, @@ -26,8 +29,8 @@ namespace TCS { private: + parType_t p_NumberLeading1 = { 0 }; parType_t p_MinET = { 0 }; - }; } diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/JetSimpleCone.h b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/JetSimpleCone.h new file mode 100644 index 0000000000000000000000000000000000000000..e6b4c969b259669c22e63767d5a81dc56f26f295 --- /dev/null +++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/JetSimpleCone.h @@ -0,0 +1,42 @@ +// JetSimpleCone.h + +#ifndef __TopoCore__JetSimpleCone__ +#define __TopoCore__JetSimpleCone__ + +#include <iostream> +#include "L1TopoInterfaces/DecisionAlg.h" + +namespace TCS { + + class JetSimpleCone : public DecisionAlg { + public: + JetSimpleCone(const std::string & name); + virtual ~JetSimpleCone(); + + virtual StatusCode initialize(); + + virtual StatusCode processBitCorrect( const std::vector<TCS::TOBArray const *> & input, + const std::vector<TCS::TOBArray *> & output, + Decision & decison ); + + virtual StatusCode process( const std::vector<TCS::TOBArray const *> & input, + const std::vector<TCS::TOBArray *> & output, + Decision & decison ); + + + private: + parType_t p_NumberLeading1 = { 0 }; + parType_t p_R = { 10 }; + parType_t p_MinET = { 0 }; + parType_t p_EtaMin = { 0 }; + parType_t p_EtaMax = { 49 }; + parType_t p_SimpleCone[6] = { 0 , 0,0,0,0,0 }; + + TH1 * m_histAcceptSimpleCone[6] = {}; + TH1 * m_histRejectSimpleCone[6] = {}; + + }; + +} + +#endif diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/DeltaPhiIncl2.cxx b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/DeltaPhiIncl2.cxx index f7d482b2836d28c2b832f14583b32fca4dbc1080..edb45232d9b16aa529273874f66fad90f5368f77 100644 --- a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/DeltaPhiIncl2.cxx +++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/DeltaPhiIncl2.cxx @@ -144,7 +144,7 @@ TCS::DeltaPhiIncl2::processBitCorrect( const std::vector<TCS::TOBArray const *> // test DeltaPhiMin, DeltaPhiMax unsigned int deltaPhi = calcDeltaPhiBW( *tob1, *tob2 ); - bool accept[3] = {false,false,false}; + bool accept[3] = {}; for(unsigned int i=0; i<numberOutputBits(); ++i) { if( parType_t((*tob1)->Et()) <= p_MinET1[i]) continue; // ET cut if( parType_t((*tob2)->Et()) <= p_MinET2[i]) continue; // ET cut @@ -191,6 +191,9 @@ TCS::DeltaPhiIncl2::process( const std::vector<TCS::TOBArray const *> & input, if( input.size() == 2) { bool iaccept[numberOutputBits()]; + for (auto& i : iaccept){ + i=false; + } for( TOBArray::const_iterator tob1 = input[0]->begin(); tob1 != input[0]->end() && distance(input[0]->begin(), tob1) < p_NumberLeading1; @@ -206,7 +209,7 @@ TCS::DeltaPhiIncl2::process( const std::vector<TCS::TOBArray const *> & input, // test DeltaPhiMin, DeltaPhiMax unsigned int deltaPhi = calcDeltaPhi( *tob1, *tob2 ); - bool accept[3]; + bool accept[3] = {}; for(unsigned int i=0; i<numberOutputBits(); ++i) { if( parType_t((*tob1)->Et()) <= p_MinET1[i]) continue; // ET cut if( parType_t((*tob2)->Et()) <= p_MinET2[i]) continue; // ET cut diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/EtCut.cxx b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/EtCut.cxx new file mode 100644 index 0000000000000000000000000000000000000000..2c16e62ef79845fc663773ad350a6f1adb00ea64 --- /dev/null +++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/EtCut.cxx @@ -0,0 +1,96 @@ +/********************************* + * LAr.cpp + * Created by Joerg Stelzer on 11/16/12. + * Modified by V SOrin 2014 + * Copyright (c) 2012 Joerg Stelzer. All rights reserved. + * + * @brief algorithm calculates the phi-distance between one lists and applies delta-phi criteria + * + * @param NumberLeading +**********************************/ + +#include <cmath> + +#include "L1TopoAlgorithms/EtCut.h" +#include "L1TopoCommon/Exception.h" +#include "L1TopoInterfaces/Decision.h" + +REGISTER_ALG_TCS(EtCut) + +using namespace std; + + + +TCS::EtCut::EtCut(const std::string & name) : DecisionAlg(name) +{ + defineParameter("InputWidth", 3); + defineParameter("MaxTob", 0); + defineParameter("NumResultBits", 1); + defineParameter("MinEt",1); + setNumberOutputBits(1); +} + +TCS::EtCut::~EtCut(){} + + +TCS::StatusCode +TCS::EtCut::initialize() { + p_NumberLeading1 = parameter("InputWidth").value(); + if(parameter("MaxTob").value() > 0) p_NumberLeading1 = parameter("MaxTob").value(); + p_MinET = parameter("MinEt").value(); + + TRG_MSG_INFO("NumberLeading1 : " << p_NumberLeading1); // note that the reading of generic parameters doesn't work yet + TRG_MSG_INFO("MinEt : " << p_MinET); + TRG_MSG_INFO("nummber output : " << numberOutputBits()); + + return StatusCode::SUCCESS; +} + +TCS::StatusCode +TCS::EtCut::processBitCorrect( const std::vector<TCS::TOBArray const *> & input, + const std::vector<TCS::TOBArray *> & output, + Decision & decision ) + +{ + return process(input,output,decision); +} + + +TCS::StatusCode +TCS::EtCut::process( const std::vector<TCS::TOBArray const *> & input, + const std::vector<TCS::TOBArray *> & output, + Decision & decision ) +{ + + if(input.size() == 1) { + + TRG_MSG_DEBUG("input size : " << input[0]->size()); + + unsigned int nLeading = p_NumberLeading1; + bool accept{false}; + + for( TOBArray::const_iterator tob1 = input[0]->begin(); + tob1 != input[0]->end() && distance( input[0]->begin(), tob1) < nLeading; + ++tob1) + { + + if( parType_t((*tob1)->Et()) <= p_MinET ) continue; // ET cut + + accept = true; + + output[0]->push_back(TCS::CompositeTOB(*tob1)); + + TRG_MSG_DEBUG("TOB " << distance(input[0]->begin(), tob1) << " ET = " << (*tob1)->Et() ); + } + + decision.setBit( 0, accept ); + + + + } else { + + TCS_EXCEPTION("EtCut alg must have 1 input, but got " << input.size()); + + } + return TCS::StatusCode::SUCCESS; +} diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/GenericArrayCreator.cxx b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/GenericArrayCreator.cxx index aa79804ec8f7ee9e2cb41526a9231dbf662b5f83..03d17aa2e9e30d9202e436ca4c5bc2870996326c 100644 --- a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/GenericArrayCreator.cxx +++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/GenericArrayCreator.cxx @@ -47,5 +47,5 @@ TCS::GenericArrayCreator::sort(const InputTOBArray & input, TOBArray & output) { TCS_EXCEPTION("GenericArrayCreator: neither ClusterArray nor JetArray") } } - // code cannot be reached return StatusCode::SUCCESS; + return StatusCode::SUCCESS; } diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetAbbreviated.cxx b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetAbbreviated.cxx index 18ab4b7647ae039359b57afd6d5ec73cc656bf44..bfcc23b2acec46f11a4a28dc39d5c5db4a2829d6 100644 --- a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetAbbreviated.cxx +++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetAbbreviated.cxx @@ -19,7 +19,7 @@ TCS::JetAbbreviated::JetAbbreviated(const std::string & name) : defineParameter( "JetSize", 0 ); defineParameter( "MinEta", 0 ); defineParameter( "MaxEta", 49); -// m_jetsize = JetTOB::JS1; + m_jetsize = JetTOB::JS1; } diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetNoSort.cxx b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetNoSort.cxx index 5760f08bf913153012182e99b80fb528289244bc..5a881a413ff308cf5b8fe68936181d0175d6d6d3 100644 --- a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetNoSort.cxx +++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetNoSort.cxx @@ -19,7 +19,7 @@ TCS::JetNoSort::JetNoSort(const std::string & name) : defineParameter( "InputWidth", 64 ); // for FW defineParameter( "OutputWidth", 64 ); defineParameter( "JetSize", 2 ); -// m_jetsize = JetTOB::JS1; + m_jetsize = JetTOB::JS1; } diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetNoSortMatch.cxx b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetNoSortMatch.cxx index 9a05e77c66b0a5ef10d909f30ff4ea5ac5151975..85d3ce987b0b522cf87866510f24f742217faf66 100644 --- a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetNoSortMatch.cxx +++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetNoSortMatch.cxx @@ -21,7 +21,7 @@ TCS::JetNoSortMatch::JetNoSortMatch(const std::string & name) : defineParameter( "JetSize", 2 ); defineParameter("MinET1",0); defineParameter("MinET2",0); -// m_jetsize = JetTOB::JS1; + m_jetsize = JetTOB::JS1; } diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSelect.cxx b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSelect.cxx index 7607cb9c847bb478c4257cb03d5c2a69c3f93510..bac614a766b923d4b50f843f3cab5fb448c679bd 100644 --- a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSelect.cxx +++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSelect.cxx @@ -23,7 +23,7 @@ TCS::JetSelect::JetSelect(const std::string & name) : defineParameter( "MinET", 0 ); defineParameter( "MinEta", 0 ); defineParameter( "MaxEta", 31); -// m_jetsize = JetTOB::JS1; + m_jetsize = JetTOB::JS1; } diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSimpleCone.cxx b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSimpleCone.cxx new file mode 100644 index 0000000000000000000000000000000000000000..3a63c5ad8afdfae0d0a35809cf930555c14ad816 --- /dev/null +++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSimpleCone.cxx @@ -0,0 +1,171 @@ +/********************************* + * JetSimpleCone.cpp + * + * @brief algorithm calculates the sum of jets ET around each jet within radius R, makes cut on leading sum ET + * + * @param NumberLeading +**********************************/ + +#include <cmath> +#include <string> +#include <iostream> +#include <sstream> +#include <vector> +#include <algorithm> +#include "TH1F.h" + +#include "L1TopoAlgorithms/JetSimpleCone.h" +#include "L1TopoCommon/Exception.h" +#include "L1TopoInterfaces/Decision.h" + + +REGISTER_ALG_TCS(JetSimpleCone) + +using namespace std; + +// not the best solution but we will move to athena where this comes for free +#define LOG cout << name() << ": " + + +TCS::JetSimpleCone::JetSimpleCone(const std::string & name) : DecisionAlg(name) +{ + defineParameter("InputWidth", 0); + defineParameter("MaxTob", 0); + defineParameter("NumResultBits",6); + defineParameter("NumRegisters", 2); + defineParameter("Radius",10); + defineParameter("MinET",0); + defineParameter("MinEta",0); + defineParameter("MaxEta",31); + defineParameter("MinHt",0,0); + defineParameter("MinHt",0,1); + defineParameter("MinHt",0,2); + defineParameter("MinHt",0,3); + defineParameter("MinHt",0,4); + defineParameter("MinHt",0,5); + setNumberOutputBits(6); +} + +TCS::JetSimpleCone::~JetSimpleCone() +{} + + +TCS::StatusCode +TCS::JetSimpleCone::initialize() { + p_NumberLeading1 = parameter("InputWidth").value(); + if(parameter("MaxTob").value() > 0) p_NumberLeading1 = parameter("MaxTob").value(); + p_R = parameter("Radius").value(); + p_MinET = parameter("MinET").value(); + p_EtaMin = parameter("MinEta").value(); + p_EtaMax = parameter("MaxEta").value(); + + TRG_MSG_INFO("MaxTob : " << p_NumberLeading1); + TRG_MSG_INFO("Radius : " << p_R); + TRG_MSG_INFO("MinET : " << p_MinET); + TRG_MSG_INFO("EtaMin : " << p_EtaMin); + TRG_MSG_INFO("EtaMax : " << p_EtaMax); + for(unsigned int i=0; i<numberOutputBits(); ++i) { + p_SimpleCone[i] = parameter("MinHt", i).value(); + TRG_MSG_INFO("SimpleCone " << i << " : " << p_SimpleCone[i]); + } + TRG_MSG_INFO("number output : " << numberOutputBits()); + + // create strings for histogram names + ostringstream MyAcceptHist[numberOutputBits()]; + ostringstream MyRejectHist[numberOutputBits()]; + + for (unsigned int i=0;i<numberOutputBits();i++) { + MyAcceptHist[i] << "Accept" << p_SimpleCone[i] << "SimpleCone"; + MyRejectHist[i] << "Reject" << p_SimpleCone[i] << "SimpleCone"; + } + + for (unsigned int i=0; i<numberOutputBits();i++) { + + const std::string& MyTitle1 = MyAcceptHist[i].str(); + const std::string& MyTitle2 = MyRejectHist[i].str(); + + registerHist(m_histAcceptSimpleCone[i] = new TH1F(MyTitle1.c_str(),MyTitle1.c_str(),100,0,p_SimpleCone[i]*2)); + registerHist(m_histRejectSimpleCone[i] = new TH1F(MyTitle2.c_str(),MyTitle2.c_str(),100,0,p_SimpleCone[i]*2)); + } + + + return StatusCode::SUCCESS; +} + +TCS::StatusCode +TCS::JetSimpleCone::processBitCorrect( const std::vector<TCS::TOBArray const *> & input, + const std::vector<TCS::TOBArray *> & output, + Decision & decision ) + +{ + return process(input,output,decision); +} + + +TCS::StatusCode +TCS::JetSimpleCone::process( const std::vector<TCS::TOBArray const *> & input, + const std::vector<TCS::TOBArray *> & output, + Decision & decision ) +{ + + if(input.size()!=1) { + TCS_EXCEPTION("JetSimpleCone alg must have exactly 1 input list, but got " << input.size()); + } + + unsigned int leadingET = 0; + + // loop over jets + for( TOBArray::const_iterator tob = input[0]->begin(); + tob != input[0]->end() && distance(input[0]->begin(), tob) < p_NumberLeading1; + ++tob) { + + if( parType_t(fabs((*tob)->eta())) > p_EtaMax ) continue; // Eta cut + if( parType_t(fabs((*tob)->eta())) < p_EtaMin ) continue; // Eta cut + if( parType_t((*tob)->Et()) <= p_MinET ) continue; // E_T cut + + TRG_MSG_DEBUG("Jet : ET = " << (*tob)->Et()); + + unsigned int tmp_SumET = (*tob)->Et(); + + for( TOBArray::const_iterator tob1 = input[0]->begin(); + tob1 != input[0]->end() && distance(input[0]->begin(), tob1) < p_NumberLeading1; + ++tob1) { + + if( tob1 == tob ) continue; // Avoid double counting of central jet + if( parType_t(fabs((*tob1)->eta())) > p_EtaMax ) continue; // Eta cut + if( parType_t(fabs((*tob1)->eta())) < p_EtaMin ) continue; // Eta cut + if( parType_t((*tob1)->Et()) <= p_MinET ) continue; // E_T cut + + double deta = ( (*tob)->etaDouble() - (*tob1)->etaDouble() ); + double dphi = fabs( (*tob)->phiDouble() - (*tob1)->phiDouble() ); + if(dphi>M_PI) + dphi = 2*M_PI - dphi; + + if ( 100 * ((dphi)*(dphi) + (deta)*(deta) ) > p_R*p_R) continue; // Exclude jets outside cone + + tmp_SumET += (*tob1)->Et(); + } + + if (tmp_SumET > leadingET) leadingET = tmp_SumET; + } + + for(unsigned int i=0; i<numberOutputBits(); ++i) { + + bool accept = leadingET > p_SimpleCone[i]; + + decision.setBit( i, accept ); + + if(accept) { + output[i]->push_back( CompositeTOB( GenericTOB::createOnHeap( GenericTOB(leadingET,0,0) ) )); + m_histAcceptSimpleCone[i]->Fill(leadingET); + } + else + m_histRejectSimpleCone[i]->Fill(leadingET); + + + TRG_MSG_DEBUG("Decision " << i << ": " << (accept?"pass":"fail") << " SimpleCone = " << leadingET); + + } + + return TCS::StatusCode::SUCCESS; +} diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSort.cxx b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSort.cxx index b38f15911b9df5d33e3eff40756a61021311bc8e..d0559569a9d2b5b560b18f94acda46f96531a9ef 100644 --- a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSort.cxx +++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSort.cxx @@ -28,7 +28,7 @@ TCS::JetSort::JetSort(const std::string & name) : defineParameter( "JetSize", 2 ); defineParameter( "MinEta", 0 ); defineParameter( "MaxEta", 31); -// m_jetsize = JetTOB::JS1; + m_jetsize = JetTOB::JS1; } diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSortingAlg.cxx b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSortingAlg.cxx index c1aa69550ff1f048da976ccce2936472ef551aab..928f14052536d4ccdd7acdcaaaaa636b9faee764 100644 --- a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSortingAlg.cxx +++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/JetSortingAlg.cxx @@ -30,7 +30,7 @@ TCS::JetSortingAlg::JetSortingAlg(const std::string & name) : defineParameter( "JetSize", 0 ); defineParameter( "MinEta", 0 ); defineParameter( "MaxEta", 49); -// m_jetsize = JetTOB::JS1; + m_jetsize = JetTOB::JS1; } diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/MuonSort_1BC.cxx b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/MuonSort_1BC.cxx index e3b612691a4c699cb837494983a3fa2a9d02513f..91d004acb5b7123c04c7ec0b63e09dd5a1481de3 100644 --- a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/MuonSort_1BC.cxx +++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/MuonSort_1BC.cxx @@ -15,9 +15,10 @@ REGISTER_ALG_TCS(MuonSort_1BC) // constructor TCS::MuonSort_1BC::MuonSort_1BC(const std::string & name) : SortingAlg(name) { - defineParameter( "InputWidth", 32 ); + defineParameter( "InputWidth", 32 ); // for FW + defineParameter( "InputWidth1stStage", 16 ); // for FW defineParameter( "OutputWidth", 6 ); - defineParameter( "MinET", 0 ); + //defineParameter( "MinET", 0 ); defineParameter( "MinEta", 0 ); defineParameter( "MaxEta", 7); defineParameter( "nDelayedMuons", 1 ); @@ -33,7 +34,7 @@ TCS::MuonSort_1BC::initialize() { m_numberOfMuons = parameter("nDelayedMuons").value(); m_minEta = parameter("MinEta").value(); m_maxEta = parameter("MaxEta").value(); - m_et = parameter("MinET").value(); + //m_et = parameter("MinET").value(); return TCS::StatusCode::SUCCESS; } @@ -52,7 +53,7 @@ TCS::MuonSort_1BC::sort(const InputTOBArray & input, TOBArray & output) { const GenericTOB gtob(**lm); ++ii; - if( parType_t((*lm)->Et()) <= m_et ) continue; // ET cut + //if( parType_t((*lm)->Et()) <= m_et ) continue; // ET cut // eta cut if (parType_t(fabs((*lm)-> eta())) < m_minEta) continue;