From ad03e6f33a04a8687473d3a27d910feef8e647bd Mon Sep 17 00:00:00 2001 From: Aaron Armbruster Date: Fri, 18 Oct 2019 17:11:50 +0200 Subject: [PATCH 01/12] add interface classes --- .../TrigT1Interfaces/IMuctpiSimTool.h | 1 + .../Lvl1MuBarrelSectorLogicDataPhase1.h | 44 +++ .../TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h | 177 +++++++++++ .../Lvl1MuEndcapSectorLogicDataPhase1.h | 44 +++ .../Lvl1MuForwardSectorLogicDataPhase1.h | 44 +++ .../Lvl1MuSectorLogicConstantsPhase1.h | 21 ++ .../Lvl1MuSectorLogicDataPhase1.h | 100 ++++++ .../TrigT1Interfaces/MuCTPICTP.h | 11 +- .../TrigT1Interfaces/MuCTPICTPPhase1.h | 48 +++ .../src/Lvl1MuBarrelSectorLogicDataPhase1.cxx | 290 +++++++++++++++++ .../src/Lvl1MuCTPIInputPhase1.cxx | 291 ++++++++++++++++++ .../src/Lvl1MuEndcapSectorLogicDataPhase1.cxx | 200 ++++++++++++ .../Lvl1MuForwardSectorLogicDataPhase1.cxx | 200 ++++++++++++ .../src/Lvl1MuSectorLogicDataPhase1.cxx | 135 ++++++++ .../TrigT1/TrigT1Interfaces/src/MuCTPICTP.cxx | 7 +- .../TrigT1Interfaces/src/MuCTPICTPPhase1.cxx | 22 ++ 16 files changed, 1631 insertions(+), 4 deletions(-) create mode 100644 Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuBarrelSectorLogicDataPhase1.h create mode 100644 Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h create mode 100644 Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuEndcapSectorLogicDataPhase1.h create mode 100644 Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuForwardSectorLogicDataPhase1.h create mode 100644 Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuSectorLogicConstantsPhase1.h create mode 100644 Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuSectorLogicDataPhase1.h create mode 100644 Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTPPhase1.h create mode 100644 Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuBarrelSectorLogicDataPhase1.cxx create mode 100644 Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuCTPIInputPhase1.cxx create mode 100644 Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuEndcapSectorLogicDataPhase1.cxx create mode 100644 Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuForwardSectorLogicDataPhase1.cxx create mode 100644 Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuSectorLogicDataPhase1.cxx create mode 100644 Trigger/TrigT1/TrigT1Interfaces/src/MuCTPICTPPhase1.cxx diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/IMuctpiSimTool.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/IMuctpiSimTool.h index 8382c3e071e..d22213fab04 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/IMuctpiSimTool.h +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/IMuctpiSimTool.h @@ -29,6 +29,7 @@ namespace LVL1MUCTPI { * \param inputEvent reference to the inputEvent */ + virtual StatusCode executeSimulation() = 0; virtual StatusCode fillMuCTPIL1Topo(LVL1::MuCTPIL1Topo &, int bcidOffset=0) const = 0; }; diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuBarrelSectorLogicDataPhase1.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuBarrelSectorLogicDataPhase1.h new file mode 100644 index 00000000000..634bfa73c46 --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuBarrelSectorLogicDataPhase1.h @@ -0,0 +1,44 @@ +// Dear emacs, this is -*- c++ -*- +#ifndef TRIGT1INTERFACES_LVL1MUBARRELSECTORLOGICDATAPHASE1_H +#define TRIGT1INTERFACES_LVL1MUBARRELSECTORLOGICDATAPHASE1_H + +// System include(s): +#include + +// Local include(s): +#include "TrigT1Interfaces/Lvl1MuSectorLogicDataPhase1.h" + +namespace LVL1MUONIF { + + /** + * @short Class representing data from a barrel SL board + * + * This class represents the data coming from a single + * RPC SL board to the MuCTPI. + * + * @see LVL1MUONIF::Lvl1MuSectorLogicData + * + * $Revision: 187728 $ + * $Date: 2009-05-27 18:18:06 +0200 (Wed, 27 May 2009) $ + */ + class Lvl1MuBarrelSectorLogicDataPhase1: public Lvl1MuSectorLogicDataPhase1 { + + public: + Lvl1MuBarrelSectorLogicDataPhase1(); + ~Lvl1MuBarrelSectorLogicDataPhase1() {} + + Lvl1MuBarrelSectorLogicDataPhase1& operator=( const Lvl1MuSectorLogicDataPhase1& right ); + + /// Get data in 32 bit word format + SectorLogicWord getWordFormat() const; + /// Convert SectorLogicDataPhase1 from 32 bit word data + const Lvl1MuSectorLogicDataPhase1& convertFromWordFormat( const SectorLogicWord& ); + + protected: + virtual void printOut( std::ostream& out ) const; + + }; // class Lvl1MuBarrelSectorLogicDataPhase1 + +} // namespace LVL1MUONIF + +#endif // TRIGT1INTERFACES_LVL1MUBARRELSECTORLOGICDATAPHASE1_H diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h new file mode 100644 index 00000000000..07124b89fe4 --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h @@ -0,0 +1,177 @@ + +// Dear emacs, this is -*- c++ -*- +#ifndef TRIGT1INTERFACES_LVL1MUCTPIINPUTPHASE1_H +#define TRIGT1INTERFACES_LVL1MUCTPIINPUTPHASE1_H + +// System include(s): +#include +#include +#include +#include + +// Local include(s): +#include "TrigT1Interfaces/Lvl1MuSectorLogicDataPhase1.h" +#include "TrigT1Interfaces/Lvl1MuBarrelSectorLogicDataPhase1.h" +#include "TrigT1Interfaces/Lvl1MuEndcapSectorLogicDataPhase1.h" +#include "TrigT1Interfaces/Lvl1MuForwardSectorLogicDataPhase1.h" + +namespace LVL1MUONIF { + + /** + * @short Class representing (part of) the input data to the MuCTPI for Phase 1 + * + * This class can represent the full input data coming from the + * SL boards to the MuCTPI, or it can just represent a part of it. + * (Let's say only the data coming from the RPC simulation.) + * + * @see LVL1MUONIF::Lvl1MuBarrelSectorLogicDataPhase1 + * @see LVL1MUONIF::Lvl1MuEndcapSectorLogicDataPhase1 + * @see LVL1MUONIF::Lvl1MuForwardSectorLogicDataPhase1 + * + * $Revision: 782811 $ + * $Date: 2016-11-07 18:20:40 +0100 (Mon, 07 Nov 2016) $ + */ + class Lvl1MuCTPIInputPhase1 { + + public: + Lvl1MuCTPIInputPhase1(); + Lvl1MuCTPIInputPhase1( const Lvl1MuCTPIInputPhase1& ); + virtual ~Lvl1MuCTPIInputPhase1(); + + Lvl1MuCTPIInputPhase1& operator=( const Lvl1MuCTPIInputPhase1& right ); + + + // data from each sector logic is identifed by + // System Address : Barrel=0, Endcap=1, Forward=2 + // Sub-system Address : A_side(Z>0) =1, C_side(Z<0) =0 + // Sector Address : Barrel=0-31, Endcap=0-47, Forward=0-23 + enum MuonSystem { Barrel = 0, Endcap = 1, Forward = 2 }; + enum MuonSubSystem { A_side = 1, C_side = 0}; + enum { NumberOfMuonSystem = 3 }; + enum { NumberOfMuonSubSystem = 2 }; + enum { NumberOfBarrelSector = 32 }; + enum { NumberOfEndcapSector = 48 }; + enum { NumberOfForwardSector = 24 }; + + + static size_t idBarrelSystem() { return Barrel; } + static size_t numberOfBarrelSector() { return NumberOfBarrelSector; } + static size_t idEndcapSystem() { return Endcap; } + static size_t numberOfEndcapSector() { return NumberOfEndcapSector; } + static size_t idForwardSystem() { return Forward; } + static size_t numberOfForwardSector() { return NumberOfForwardSector; } + static size_t idSideA() { return A_side; } + static size_t idSideC() { return C_side; } + + static size_t numberOfSystems() { return NumberOfMuonSystem; } + static size_t numberOfSector(MuonSystem system) + { + if (system == Barrel) return numberOfBarrelSector(); + else if (system == Endcap) return numberOfEndcapSector(); + else return numberOfForwardSector(); + } + + const Lvl1MuSectorLogicDataPhase1& getSectorLogicData( size_t systemAddress, + size_t subSystemAddress, + size_t sectorAddress, + int bcid=0 ) const; + + void setSectorLogicData( const Lvl1MuSectorLogicDataPhase1& data, + size_t systemAddress, + size_t subSystemAddress, + size_t sectorAddress, + int bcid=0 ); + + void setSectorLogicData( const Lvl1MuSectorLogicDataPhase1::SectorLogicWord & sectorWord, + size_t systemAddress, + size_t subSystemAddress, + size_t sectorAddress, + int bcid=0 ); + + /** + * Merge SectorLogic data of another object into this + * data of a system (Barrel, Endcap or Forward) is not overwritten + * if this object already has corresponding data + */ + void merge( const Lvl1MuCTPIInputPhase1& another ); + + void clear( size_t systemAddress ); + /// Clear Sector Logic data + void clearAll(); + + /// Return "true" if data of specified system is empty + bool isEmpty( size_t systemAddress, + int bcid=0 ) const; + + /// Return "true" if data of all systems for this bcid is empty + bool isEmptyAll(int bcid=0) const; + + /// Return "true" if data of specified system is filled + /// for bunches other than 'current' bunch + bool hasOutOfTimeCandidates(size_t systemAddress) const + { + if ( systemAddress < NumberOfMuonSystem) { + return m_isFilledOutOfTimeCandidates[systemAddress]; + } + return false; + } + + // for testing purposes only + // void duplicateToOtherBC(int bcidOffset); + + friend std::ostream& operator<<( std::ostream&, const Lvl1MuCTPIInputPhase1& ); + + /// To store object to file. (NOT TO BE USED ANYMORE...) + //bool storeInWordFormat( std::ofstream& fOut, bool ascii = true ); + + /// To retrieve object from file. (NOT TO BE USED ANYMORE...) + //bool retrieveInWordFormat( std::ifstream& fIn, bool ascii = true ); + + private: + //bool storeInWordFormat( std::ofstream& fOut, + // bool ascii, + // size_t systemAddress, + // size_t subSystemAddress, + // size_t sectorAddress ); + + size_t reserve( size_t systemAddress , + int bcid=0 ); + + size_t getSystemIndex(size_t systemAddress, + size_t subSystemAddress, + size_t sectorAddress ) const + { + if (systemAddress==0) { + return NumberOfBarrelSector*subSystemAddress+sectorAddress; + } else if (systemAddress==1) { + return NumberOfEndcapSector*subSystemAddress+sectorAddress; + } else { + return NumberOfForwardSector*subSystemAddress+sectorAddress; + } + } + + size_t getBcidIndex(size_t systemAddress, + int bcid=0) const + { + for( size_t ip=0; ip > Lvl1MuVect; + typedef std::pair Lvl1MuVectWithBC; + std::vector m_data[ NumberOfMuonSystem ]; + + }; // class Lvl1MuCTPIInputPhase1 + +} // namespace LVL1MUONIF + +#include "AthenaKernel/CLASS_DEF.h" +CLASS_DEF( LVL1MUONIF::Lvl1MuCTPIInputPhase1, 6112, 0 ) + +#endif // TRIGT1INTERFACES_LVL1MUCTPIINPUTPHASE1_H diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuEndcapSectorLogicDataPhase1.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuEndcapSectorLogicDataPhase1.h new file mode 100644 index 00000000000..8d730041767 --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuEndcapSectorLogicDataPhase1.h @@ -0,0 +1,44 @@ +// Dear emacs, this is -*- c++ -*- +#ifndef TRIGT1INTERFACES_LVL1MUENDCAPSECTORLOGICDATAPHASE1_H +#define TRIGT1INTERFACES_LVL1MUENDCAPSECTORLOGICDATAPHASE1_H + +// System include(s): +#include + +// Local include(s): +#include "TrigT1Interfaces/Lvl1MuSectorLogicDataPhase1.h" + +namespace LVL1MUONIF { + + /** + * @short Class representing data from an endcap SL board + * + * This class representds the data coming from a single + * TGC endcap SL board to the MuCTPI. + * + * @see LVL1MUONIF::Lvl1MuSectorLogicDataPhase1 + * + * $Revision: 187728 $ + * $Date: 2009-05-27 18:18:06 +0200 (Wed, 27 May 2009) $ + */ + class Lvl1MuEndcapSectorLogicDataPhase1 : public Lvl1MuSectorLogicDataPhase1 { + + public: + Lvl1MuEndcapSectorLogicDataPhase1(); + ~Lvl1MuEndcapSectorLogicDataPhase1() {} + + Lvl1MuEndcapSectorLogicDataPhase1& operator=( const Lvl1MuSectorLogicDataPhase1& right ); + + /// Get data in 32 bit word format + SectorLogicWord getWordFormat() const; + /// Convert SectorLogicDataPhase1 from 32 bit word data + const Lvl1MuSectorLogicDataPhase1& convertFromWordFormat( const SectorLogicWord& ); + + protected: + virtual void printOut( std::ostream& out ) const; + + }; // class Lvl1MuEndcapSectorLogicDataPhase1 + +} // namespace LVL1MUONIF + +#endif // TRIGT1INTERFACES_LVL1MUENDCAPSECTORLOGICDATAPHASE1_H diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuForwardSectorLogicDataPhase1.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuForwardSectorLogicDataPhase1.h new file mode 100644 index 00000000000..66052d31433 --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuForwardSectorLogicDataPhase1.h @@ -0,0 +1,44 @@ +// Dear emacs, this is -*- c++ -*- +#ifndef TRIGT1INTERFACES_LVL1MUFORWARDSECTORLOGICDATAPHASE1_H +#define TRIGT1INTERFACES_LVL1MUFORWARDSECTORLOGICDATAPHASE1_H + +// System include(s): +#include + +// Local include(s): +#include "TrigT1Interfaces/Lvl1MuSectorLogicDataPhase1.h" + +namespace LVL1MUONIF { + + /** + * @short Class representing data from an forward SL board + * + * This class representds the data coming from a single + * TGC forward SL board to the MuCTPI. + * + * @see LVL1MUONIF::Lvl1MuSectorLogicDataPhase1 + * + * $Revision: 187728 $ + * $Date: 2009-05-27 18:18:06 +0200 (Wed, 27 May 2009) $ + */ + class Lvl1MuForwardSectorLogicDataPhase1 : public Lvl1MuSectorLogicDataPhase1 { + + public: + Lvl1MuForwardSectorLogicDataPhase1(); + ~Lvl1MuForwardSectorLogicDataPhase1() {} + + Lvl1MuForwardSectorLogicDataPhase1& operator=( const Lvl1MuSectorLogicDataPhase1& right ); + + /// Get data in 32 bit word format + SectorLogicWord getWordFormat() const; + /// Convert SectorLogicDataPhase1 from 32 bit word data + const Lvl1MuSectorLogicDataPhase1& convertFromWordFormat( const SectorLogicWord& ); + + protected: + virtual void printOut( std::ostream& out ) const; + + }; // class Lvl1MuForwardSectorLogicDataPhase1 + +} // namespace LVL1MUONIF + +#endif // TRIGT1INTERFACES_LVL1MUFORWARDSECTORLOGICDATAPHASE1_H diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuSectorLogicConstantsPhase1.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuSectorLogicConstantsPhase1.h new file mode 100644 index 00000000000..c3807a905e7 --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuSectorLogicConstantsPhase1.h @@ -0,0 +1,21 @@ +#ifndef TRIGT1INTERFACES_SECTORLOGICCONSTANTSPHASE1_H +#define TRIGT1INTERFACES_SECTORLOGICCONSTANTSPHASE1_H + +namespace LVL1MUONIF { + + static const unsigned int NBITS_BCID[3] = {12,12,12}; + static const unsigned int NBITS_ROI[3] = {5,8,8}; + static const unsigned int NBITS_OVL[3] = {2,2,2}; + static const unsigned int NBITS_PT[3] = {3,4,4}; + static const unsigned int NBITS_CHARGE[3] = {1,1,1}; + static const unsigned int NBITS_IS2CANDIDATES[3] = {1,1,1}; + static const unsigned int NBITS_IS2CANDIDATESINSECTOR[3] = {1,1,1}; + static const unsigned int NBITS_BW2OR3[3] = {0,1,1}; + static const unsigned int NBITS_INNERCOIN[3] = {0,1,1}; + static const unsigned int NBITS_GOODMF[3] = {0,1,1}; + + static const size_t NCAND[3] = {2,4,4}; + +} + +#endif //TRIGT1INTERFACES_SECTORLOGICCONSTANTSPHASE1_H diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuSectorLogicDataPhase1.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuSectorLogicDataPhase1.h new file mode 100644 index 00000000000..f585a24f13b --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuSectorLogicDataPhase1.h @@ -0,0 +1,100 @@ +// Dear emacs, this is -*- c++ -*- +#ifndef TRIGT1INTERFACES_LVL1MUSECTORLOGICDATAPHASE1_H +#define TRIGT1INTERFACES_LVL1MUSECTORLOGICDATAPHASE1_H + +// System include(s): +#include +#include + +/** + * @short Namespace for the LVL1 muon interface classes + * + * The classes used in the communication between the different parts + * of the LVL1 muon trigger simulation are put into this namespace. + * + * $Revision: 187728 $ + * $Date: 2009-05-27 18:18:06 +0200 (Wed, 27 May 2009) $ + */ +namespace LVL1MUONIF { + + /** + * @short Base class for the data coming from one SL board + * + * Each muon SL board sends 32 bits of information to the MuCTPI. + * While the format of these 32 bits is a bit different for the + * different sector types, the information stored in them is the + * same. So the derived classes only have to implement the functions + * decoding the 32-bit words into the variables in this class. + * + * $Revision: 187728 $ + * $Date: 2009-05-27 18:18:06 +0200 (Wed, 27 May 2009) $ + */ + class Lvl1MuSectorLogicDataPhase1 { + + public: + Lvl1MuSectorLogicDataPhase1(); + Lvl1MuSectorLogicDataPhase1( const Lvl1MuSectorLogicDataPhase1& right ); + virtual ~Lvl1MuSectorLogicDataPhase1(); + + Lvl1MuSectorLogicDataPhase1& operator=( const Lvl1MuSectorLogicDataPhase1& right ); + + // assume unsigned long int is 8 bytes, unsigned short int is 2 bytes: + typedef std::pair SectorLogicWord; + + bool is2candidatesInSector() const { return m_2candidatesInSector; } // MORE than two candidates per sector + int bcid() const { return m_bcid; } + int roi( size_t id ) const { return m_roi[ id ]; } + int ovl( size_t id ) const { return m_ovl[ id ]; } + int pt( size_t id ) const { return m_pt[ id ]; } + int charge( size_t id ) const { return m_charge[ id ]; } + bool is2candidates( size_t id ) const { return m_2candidates[ id ]; } // per ROI (not used for mult counting) + int goodmf( size_t id) const { return m_goodmf[ id ]; } + int innercoin( size_t id) const { return m_innercoin[ id ]; } + int bw2or3( size_t id) const { return m_bw2or3[ id ]; } + + void set2candidatesInSector() { m_2candidatesInSector = true; } + void clear2candidatesInSector() { m_2candidatesInSector = false;} + void bcid( int value ) { m_bcid = value; } + void roi( size_t id, int value ) { m_roi[ id ] = value; } + void ovl( size_t id, int value ) { m_ovl[ id ] = value; } + void pt( size_t id, int value ) { m_pt[ id ] = value; } + void charge( size_t id, int value ) { m_charge[ id ] = value; } + void set2candidates( size_t id ) { m_2candidates[ id ] = true; } + void clear2candidates( size_t id ) { m_2candidates[ id ] = false; } + void goodmf( size_t id, int value) {m_goodmf[ id ] = value; } + void innercoin( size_t id, int value) {m_innercoin[ id ] = value; } + void bw2or3( size_t id, int value) {m_bw2or3[ id ] = value; } + + void clear(); + + friend std::ostream& operator<<( std::ostream&, const Lvl1MuSectorLogicDataPhase1& ); + + /// Get data in 32 bit word format: + virtual SectorLogicWord getWordFormat() const = 0; + /// Convert SectorLogicDataPhase1 from 32 bit word data + virtual const Lvl1MuSectorLogicDataPhase1& convertFromWordFormat( const SectorLogicWord& ) = 0; + + int getSystemId() const { return m_id_system; } + + protected: + /// print out data + virtual void printOut( std::ostream& out ) const=0; + void initialize(); + + bool m_2candidatesInSector; + int* m_roi; //[m_ncand] + int* m_ovl; //[m_ncand] + int* m_pt; //[m_ncand] + bool* m_2candidates; //[m_ncand] + int m_bcid; + int* m_charge; //[m_ncand] + int m_id_system; + int* m_goodmf; //[m_ncand] + int* m_innercoin; //[m_ncand] + int* m_bw2or3; //[m_ncand] + + }; // class Lvl1MuSectorLogicDataPhase1 + +} // namespace LVL1MUONIF + +#endif // TRIGT1INTERFACES_LVL1MUSECTORLOGICDATAPHASE1_H diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTP.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTP.h index a1e82a74728..c0168466947 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTP.h +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTP.h @@ -5,6 +5,8 @@ #ifndef TRIGT1INTERFACES_MUCTPICTP_H #define TRIGT1INTERFACES_MUCTPICTP_H +#include + namespace LVL1 { /** @@ -23,22 +25,25 @@ namespace LVL1 { public: /* constructor and destructor */ MuCTPICTP( unsigned int word = 0 ); + MuCTPICTP( std::vector words ); ~MuCTPICTP(); /** * Return the muon data i.e. (xxxxx|thr6|thr5|thr4|thr3|thr2|thr1) */ - unsigned int muCTPIWord() const; + std::vector muCTPIWord() const; private: /// The only data member - const unsigned int m_MuCTPICTPWord; + std::vector m_MuCTPICTPWord; }; // class MuCTPICTP } // namespace LVL1 -#include "AthenaKernel/CLASS_DEF.h" +#ifndef CLIDSVC_CLASSDEF_H +#include "CLIDSvc/CLASS_DEF.h" +#endif CLASS_DEF( LVL1::MuCTPICTP, 6070, 0 ) #endif // TRIGT1INTERFACES_MUCTPICTP_H diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTPPhase1.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTPPhase1.h new file mode 100644 index 00000000000..cde7bbea2ce --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTPPhase1.h @@ -0,0 +1,48 @@ +// Dear emacs, this is -*- c++ -*- +/* + Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +*/ +#ifndef TRIGT1INTERFACES_MUCTPICTPPHASE1_H +#define TRIGT1INTERFACES_MUCTPICTPPHASE1_H + +#include + +namespace LVL1 { + + /** + * @short MuCTPI input class to the CTP simulation + * + * This class is used to send the LVL1 muon multiplicity information + * from the MuCTPI simulation to the CTP simulation. + * + * $author Thomas SChoerner-Sadenius + * + * $Revision: 187728 $ + * $Date: 2009-05-27 18:18:06 +0200 (Wed, 27 May 2009) $ + */ + class MuCTPICTPPhase1 { + + public: + /* constructor and destructor */ + MuCTPICTPPhase1( std::vector words ); + ~MuCTPICTPPhase1(); + + /** + * Return the muon data i.e. (xxxxx|thrN|...|thr2|thr1) + */ + std::vector muCTPIWord() const; + + private: + /// The only data member + std::vector m_MuCTPICTPWord; + + }; // class MuCTPICTPPhase1 + +} // namespace LVL1 + +#ifndef CLIDSVC_CLASSDEF_H +#include "CLIDSvc/CLASS_DEF.h" +#endif +CLASS_DEF( LVL1::MuCTPICTPPhase1, 98734023, 0 ) + +#endif // TRIGT1INTERFACES_MUCTPICTPPHASE1_H diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuBarrelSectorLogicDataPhase1.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuBarrelSectorLogicDataPhase1.cxx new file mode 100644 index 00000000000..1d5444bf1ab --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuBarrelSectorLogicDataPhase1.cxx @@ -0,0 +1,290 @@ +#include +#include + +#include "TrigT1Interfaces/Lvl1MuBarrelSectorLogicDataPhase1.h" +#include "TrigT1Interfaces/Lvl1MuSectorLogicConstantsPhase1.h" + +namespace LVL1MUONIF { + + Lvl1MuBarrelSectorLogicDataPhase1::Lvl1MuBarrelSectorLogicDataPhase1() + : Lvl1MuSectorLogicDataPhase1() { + + m_id_system = 0; + initialize(); + } + + Lvl1MuBarrelSectorLogicDataPhase1& Lvl1MuBarrelSectorLogicDataPhase1::operator=( const Lvl1MuSectorLogicDataPhase1& right ) { + + if ( ( right.getSystemId() == m_id_system ) && + ( this != &right ) ) { + + m_bcid = right.bcid(); + m_2candidatesInSector = right.is2candidatesInSector(); + for ( size_t i = 0; i < NCAND[m_id_system]; ++i ) { + m_roi[ i ] = right.roi( i ); + m_ovl[ i ] = right.ovl( i ); + m_pt[ i ] = right.pt( i ); + m_charge[ i ] = right.charge( i ); + m_2candidates[ i ] = right.is2candidates( i ); + } + } + + return *this; + } + + Lvl1MuSectorLogicDataPhase1::SectorLogicWord Lvl1MuBarrelSectorLogicDataPhase1::getWordFormat() const { + + SectorLogicWord val(std::make_pair(0, 0)); + unsigned int len=0; + unsigned int pos=0; + for (size_t i=0;i 0) val.first |= (1 >> (i*16+pos)) & len; + pos += len; + } + + + + // Global+BCID flags (bits 32-47) + len=0; + pos=0; + + //0-11: BCID + len=NBITS_BCID[m_id_system]; + val.second |= ( bcid() & len); + pos += len; + + //12-15: global flags + len=NBITS_IS2CANDIDATESINSECTOR[m_id_system]; + if (is2candidatesInSector()) val.second |= (1 >> pos) & len; + + + return val; + } + + + const Lvl1MuSectorLogicDataPhase1& Lvl1MuBarrelSectorLogicDataPhase1::convertFromWordFormat( const SectorLogicWord& value ) { + + unsigned int val; + unsigned int pos=0; + unsigned int len=0; + for (size_t i=0;i> (i*16+pos)) & len; + if (val == len) + { + noROI=1; + roi(i, -1); + ovl(i, -1); + } + else roi(i, val); + pos += len; + + //5-7: Nothing - 3 bits + len=3; + pos += len; + + //8-10: pT - 3 bits + len=NBITS_PT[m_id_system]; + val = (value.first >> (i*16+pos)) & len; + if (val == len) pt(i, -1); + else pt(i, val); + pos += len; + + //11: Nothing - 1 bit + len=1; + pos += len; + + //12: 2 candidates in ROI + len=NBITS_IS2CANDIDATES[m_id_system]; + val = (value.first >> (i*16+pos)) & len; + if (val == len) set2candidates(i); + else clear2candidates(i); + pos += len; + + //13-14: overlap + len=NBITS_OVL[m_id_system]; + val = (value.first >> (i*16+pos)) & len; + if (!noROI) ovl(i, val); + pos += len; + + //15: charge? + len=NBITS_CHARGE[m_id_system]; + val = (value.first >> (i*16+pos)) & len; + if (val > 0) charge(i, +1); + else charge(i, -1); // should this be -1 or 0? + pos += len; + } + + // Global+BCID flags (bits 32-47) + len=0; + pos=0; + + //0-11: BCID + len=NBITS_BCID[m_id_system]; + val = value.second & len; + bcid(val); + pos += len; + + //12: > 2 candidates + len=NBITS_IS2CANDIDATESINSECTOR[m_id_system]; + val = (value.second >> pos) & len; + if (val) set2candidatesInSector(); + else clear2candidatesInSector(); + pos += len; + + //13-15: other global flags + + + return *this; + } + + + void Lvl1MuBarrelSectorLogicDataPhase1::printOut( std::ostream& out ) const { + + for (size_t i=0;i "; + if (roi(i) == -1) out << "NA" << std::endl; + else out << std::setw(8) << roi(i) << std::endl; + + out << "Bit 8-10 "<< "Pt" << i+1 << " "; + if (pt(i) == -1) out << "No Hit" << std::endl; + else out << pt(i) << std::endl; + + out << "Bit 12 "<<"2 candidates in ROI<" << i+1 << "> "; + out << std::setw(8) << is2candidates(i) << std::endl; + + out << "Bit 13-14 "<<"overlap<"< "; + out << std::setw(8) << ovl(i) << std::endl; + + out << "Bit 15 "<<"charge<"< "; + out << std::setw(8) << charge(i) << std::endl; + } + out << "Bit 0-11 " << " BCID "; + out << std::setw( 8 ) << bcid() << std::endl; + + out << "Bit 12 " << " >2candidates in a sector "; + out << std::setw( 8 ) << m_2candidatesInSector << std::endl; + + + + + + // out << "Bit 0 " << " >2candidates in a sector "; + // out << std::setw( 8 ) << m_2candidatesInSector << std::endl; + + // out << "Bit 1-5 " << " ROI<1> "; + // if ( m_roi[ 0 ] == -1 ) { + // out << std::setw( 8 ) << "NA" << std::endl; + // } else { + // out << std::setw( 8 ) << m_roi[ 0 ] << std::endl; + // } + // out << "Bit 6-7 " << " NA " << std::endl; + // out << "Bit 8-9 " << " OVL<1> "; + // if ( m_ovl[ 0 ] == 0 ) { + // out << std::setw( 8 ) << "No Ovl" << std::endl; + // } else if ( m_ovl[ 0 ] == 1 ) { + // out << std::setw( 8 ) << "Phi" << std::endl; + // } else if ( m_ovl[ 0 ] == 2 ) { + // out << std::setw( 8 ) << "Eta" << std::endl; + // } else if ( m_ovl[ 0 ] == 3 ) { + // out << std::setw( 8 ) << "Phi,Eta" << std::endl; + // } else { + // out << std::setw( 8 ) << "NA" << std::endl; + // } + // out << "Bit 10-14 " << " ROI<2> "; + // if ( m_roi[ 1 ] == -1 ) { + // out << std::setw( 8 ) << "NA" << std::endl; + // } else { + // out << std::setw( 8 ) << m_roi[ 1 ] << std::endl; + // } + // out << "Bit 15-16 " << " NA " << std::endl; + // out << "Bit 17-18 " << " OVL<2> "; + // if ( m_ovl[ 1 ] == 0 ) { + // out << std::setw( 8 ) << "No Ovl" << std::endl; + // } else if ( m_ovl[ 1 ] == 1 ) { + // out << std::setw( 8 ) << "Phi" << std::endl; + // } else if ( m_ovl[ 1 ] == 2 ) { + // out << std::setw( 8 ) << "Eta" << std::endl; + // } else if ( m_ovl[ 1 ] == 3 ) { + // out << std::setw( 8 ) << "Phi,Eta" << std::endl; + // } else { + // out << std::setw( 8 ) << "NA" << std::endl; + // } + // out << "Bit 19-21 " << " Pt1 "; + // if ( m_pt[ 0 ] == -1 ) { + // out << std::setw( 8 ) << "No Hit" << std::endl; + // } else { + // out << std::setw( 8 ) << m_pt[ 0 ] << std::endl; + // } + // out << "Bit 22-24 " << " Pt2 "; + // if ( m_pt[ 1 ] == -1 ) { + // out << std::setw( 8 ) << "No Hit" << std::endl; + // } else { + // out << std::setw( 8 ) << m_pt[ 1 ] << std::endl; + // } + // out << "Bit 25 " << " >2candidates in ROI1 "; + // out << std::setw( 8 ) << m_2candidates[ 0 ] << std::endl; + // out << "Bit 26 " << " >2candidates in ROI2 "; + // out << std::setw( 8 ) << m_2candidates[ 1 ] << std::endl; + // out << "Bit 27-29 " << " BCID "; + // out << std::setw( 8 ) << m_bcid << std::endl; + // out << "Bit 30 " << " charge in ROI1 "; + // out << std::setw( 8 ) << m_charge[ 0 ] << std::endl; + // out << "Bit 31 " << " charge in ROI2 "; + // out << std::setw( 8 ) << m_charge[ 1 ] << std::endl; + } + +} // namespace LVL1MUONIF diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuCTPIInputPhase1.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuCTPIInputPhase1.cxx new file mode 100644 index 00000000000..e78bedb9a37 --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuCTPIInputPhase1.cxx @@ -0,0 +1,291 @@ + +#include +#include + +#include "TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h" + +namespace LVL1MUONIF { + + Lvl1MuCTPIInputPhase1::Lvl1MuCTPIInputPhase1() { + for (size_t isys=0; isys(vecSL.at(idx)) = data; + } else if ( systemAddress == Endcap ) { + *std::dynamic_pointer_cast(vecSL.at(idx))= data; + } else if ( systemAddress == Forward ) { + *std::dynamic_pointer_cast(vecSL.at(idx))= data; + } + } + + ///////////// + void Lvl1MuCTPIInputPhase1::setSectorLogicData( const Lvl1MuSectorLogicDataPhase1::SectorLogicWord & sectorWord, + size_t systemAddress, + size_t subSystemAddress, + size_t sectorAddress, + int bcid ) { + // convert to SectorLogicDataPhase1 + Lvl1MuSectorLogicDataPhase1 * pData; + if ( systemAddress == Barrel ) { + pData = new Lvl1MuBarrelSectorLogicDataPhase1(); + } else if ( systemAddress == Endcap ) { + pData = new Lvl1MuEndcapSectorLogicDataPhase1(); + } else if ( systemAddress == Forward ) { + pData = new Lvl1MuForwardSectorLogicDataPhase1(); + } else { + return ; + } + pData->convertFromWordFormat( sectorWord ); + setSectorLogicData( *pData, systemAddress, subSystemAddress, sectorAddress, bcid ); + delete pData; + } + + ///////////// + void Lvl1MuCTPIInputPhase1::merge( const Lvl1MuCTPIInputPhase1& right ) { + if ( this == &right ) return; + + for (size_t idSys=0; idSys barrelSect(new Lvl1MuBarrelSectorLogicDataPhase1); + vecSL.push_back(barrelSect); + } + + } else if ( systemAddress == Endcap ) { + for ( size_t id = 0; id < NumberOfEndcapSector*NumberOfMuonSubSystem; id++ ) { + std::shared_ptr endcapSect(new Lvl1MuEndcapSectorLogicDataPhase1); + vecSL.push_back(endcapSect); + } + + } else if ( systemAddress == Forward ) { + for ( size_t id = 0; id < NumberOfForwardSector*NumberOfMuonSubSystem; id++ ) { + std::shared_ptr forwardSect(new Lvl1MuForwardSectorLogicDataPhase1); + vecSL.push_back(forwardSect); + } + } + + size_t ip = m_data[systemAddress].size(); + m_data[systemAddress].push_back( std::make_pair(bcid, vecSL) ); + + if (bcid!=0) m_isFilledOutOfTimeCandidates[systemAddress] = true; + + return ip; + } + + ///////////// + bool Lvl1MuCTPIInputPhase1::isEmpty( size_t systemAddress, + int bcid ) const { + for( size_t ip=0; ip dataCopy[ NumberOfMuonSystem ]; + + // for ( size_t id = 0; id < NumberOfMuonSystem; id++ ) { + // dataCopy[ id ] = m_data[ id ]; + // } + + // for (std::vector::iterator itb = dataCopy[Barrel].begin(); itb !=dataCopy[Barrel].end(); ++itb){ + // (*itb).first =bcidOffset ; + // } + // std::vector::iterator itb = m_data[Barrel].end(); + // m_data[Barrel].insert(itb, dataCopy[Barrel].begin(), dataCopy[Barrel].end()); + + // for (std::vector::iterator ite = dataCopy[Endcap].begin(); ite !=dataCopy[Endcap].end(); ++ite){ + // (*ite).first =bcidOffset ; + // } + // std::vector::iterator ite = m_data[Endcap].end(); + // m_data[Endcap].insert(ite, dataCopy[Endcap].begin(), dataCopy[Endcap].end()); + + // for (std::vector::iterator itf = dataCopy[Forward].begin(); itf !=dataCopy[Forward].end(); ++itf){ + // (*itf).first =bcidOffset ; + // } + // std::vector::iterator itf = m_data[Forward].end(); + // m_data[Forward].insert(itf, dataCopy[Forward].begin(), dataCopy[Forward].end()); + // } + + + std::ostream& operator<<( std::ostream& out, const Lvl1MuCTPIInputPhase1& right ) { + + size_t systemAddress; + size_t subSystemAddress; + size_t side, id; + + out << "--------- Barrel Sector ---------------------------" << std::endl; + systemAddress = right.idBarrelSystem(); + for ( side = 0; side < right.NumberOfMuonSubSystem; ++side ) { + if ( side == 0 ) { + out << " ------ A Side (Z>0) ---------------------------" << std::endl; + subSystemAddress = right.idSideA(); + } else { + out << " ------ C Side (Z<0) ---------------------------" << std::endl; + subSystemAddress = right.idSideC(); + } + for ( id = 0; id < right.numberOfBarrelSector() ;++id ) { + out << " --- Sector ID : " << id << " ----------" << std::endl; + for( size_t ip=0; ip < right.m_data[systemAddress].size(); ip++){ + int bc=((right.m_data[systemAddress]).at(ip)).first; + out << right.getSectorLogicData( systemAddress, subSystemAddress, id, bc ); + out << " BC: " << bc; + out << std::endl; + } + } + } + + out << "--------- Endcap Sector ---------------------------" << std::endl; + systemAddress = right.idEndcapSystem(); + for ( side = 0; side < right.NumberOfMuonSubSystem; ++side ) { + if ( side == 0 ) { + out << " ------ A Side (Z>0) ---------------------------" << std::endl; + subSystemAddress = right.idSideA(); + } else { + out << " ------ C Side (Z<0) ---------------------------" << std::endl; + subSystemAddress = right.idSideC(); + } + for ( id = 0; id < right.numberOfEndcapSector() ;++id ) { + out << " --- Sector ID : " << id << " ----------" << std::endl; + for( size_t ip=0; ip < right.m_data[systemAddress].size(); ip++){ + int bc=((right.m_data[systemAddress]).at(ip)).first; + out << right.getSectorLogicData( systemAddress, subSystemAddress, id, bc ); + out << " BC: " << bc; + out << std::endl; + } + } + } + + out << "--------- Forward Sector ---------------------------" << std::endl; + systemAddress = right.idForwardSystem(); + for ( side = 0; side < right.NumberOfMuonSubSystem; ++side ) { + if ( side == 0 ) { + out << " ------ A Side (Z>0) ---------------------------" << std::endl; + subSystemAddress = right.idSideA(); + } else { + out << " ------ C Side (Z<0) ---------------------------" << std::endl; + subSystemAddress = right.idSideC(); + } + for ( id = 0; id < right.numberOfForwardSector() ;++id ) { + out << " --- Sector ID : " << id << " ----------" << std::endl; + for( size_t ip=0; ip < right.m_data[systemAddress].size(); ip++){ + int bc=((right.m_data[systemAddress]).at(ip)).first; + out << right.getSectorLogicData( systemAddress, subSystemAddress, id, bc ); + out << " BC: " << bc; + out << std::endl; + } + } + } + + return out; + } +} diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuEndcapSectorLogicDataPhase1.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuEndcapSectorLogicDataPhase1.cxx new file mode 100644 index 00000000000..450725dd26d --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuEndcapSectorLogicDataPhase1.cxx @@ -0,0 +1,200 @@ + +#include +#include + +#include "TrigT1Interfaces/Lvl1MuEndcapSectorLogicDataPhase1.h" +#include "TrigT1Interfaces/Lvl1MuSectorLogicConstantsPhase1.h" + +namespace LVL1MUONIF { + + Lvl1MuEndcapSectorLogicDataPhase1::Lvl1MuEndcapSectorLogicDataPhase1() + : Lvl1MuSectorLogicDataPhase1() { + m_id_system = 1; + initialize(); + } + + Lvl1MuEndcapSectorLogicDataPhase1& Lvl1MuEndcapSectorLogicDataPhase1::operator=( const Lvl1MuSectorLogicDataPhase1& right ) { + if ( ( right.getSystemId() == m_id_system ) && + ( this != &right ) ) { + m_bcid = right.bcid(); + m_2candidatesInSector = right.is2candidatesInSector(); + for ( size_t i = 0; i < NCAND[m_id_system]; ++i ) { + m_roi[ i ] = right.roi( i ); + m_ovl[ i ] = right.ovl( i ); + m_pt[ i ] = right.pt( i ); + m_charge[ i ] = right.charge( i ); + m_2candidates[ i ] = right.is2candidates( i ); + m_goodmf[ i ] = right.goodmf(i); + m_innercoin[ i ] = right.innercoin(i); + m_bw2or3[ i ] = right.bw2or3(i); + } + } + return *this; + } + + Lvl1MuSectorLogicDataPhase1::SectorLogicWord Lvl1MuEndcapSectorLogicDataPhase1::getWordFormat() const { + + SectorLogicWord val(std::make_pair(0, 0)); + unsigned int len=0; + unsigned int pos=0; + for (size_t i=0;i 0) val.first |= (1 >> (i*16+pos)) & len; + pos += len; + + //15: GoodMF + len=NBITS_GOODMF[m_id_system]; + val.first |= (goodmf(i) & len) << (i*16+pos); + pos += len; + } + + + // Global+BCID flags (bits 32-47) + len=0; + pos=0; + + //0-11: BCID + len=NBITS_BCID[m_id_system]; + val.second |= ( bcid() & len); + pos += len; + + //12-15: global flags + len=NBITS_IS2CANDIDATESINSECTOR[m_id_system]; + if (is2candidatesInSector()) val.second |= (1 >> pos) & len; + pos += len; + + return val; + } + + + const Lvl1MuSectorLogicDataPhase1& Lvl1MuEndcapSectorLogicDataPhase1::convertFromWordFormat( const SectorLogicWord& value ) { + + unsigned int val; + unsigned int pos=0; + unsigned int len=0; + for (size_t i=0;i> (i*16+pos)) & len; + if (val == len) roi(i, -1); + else roi(i, val); + pos += len; + + //8-11: pT - 4 bits + len=NBITS_PT[m_id_system]; + val = (value.first >> (i*16+pos)) & len; + if (val == len) pt(i, -1); + else pt(i, val); + pos += len; + + //12: charge + len=NBITS_CHARGE[m_id_system]; + val = (value.first >> (i*16+pos)) & len; + if (val > 0) charge(i, +1); + else charge(i, -1); + pos += len; + + //13: 2 or 3 hits in BW + len=NBITS_BW2OR3[m_id_system]; + val = (value.first >> (i*16+pos)) & len; + bw2or3(i, val); + pos += len; + + //14: inner coincidence + len=NBITS_INNERCOIN[m_id_system]; + val = (value.first >> (i*16+pos)) & len; + innercoin(i, val); + pos += len; + + //15: GoodMF + len=NBITS_GOODMF[m_id_system]; + val = (value.first >> (i*16+pos)) & len; + goodmf(i, val); + pos += len; + } + + // Global+BCID flags (bits 32-47) + len=0; + pos=0; + + //0-11: BCID + len=NBITS_BCID[m_id_system]; + val = value.second & len; + bcid(val); + pos += len; + + //12: > 2 candidates + len=NBITS_IS2CANDIDATESINSECTOR[m_id_system]; + val = (value.second >> pos) & len; + if (val) set2candidatesInSector(); + else clear2candidatesInSector(); + + //13-15: other global flags + + return *this; + } + + + void Lvl1MuEndcapSectorLogicDataPhase1::printOut( std::ostream& out ) const { + + for (size_t i=0;i "; + if (roi(i) == -1) out << "NA" << std::endl; + else out << std::setw(8) << roi(i) << std::endl; + + out << "Bit 8-11 "<< "Pt" << i+1 << " "; + if (pt(i) == -1) out << "No Hit" << std::endl; + else out << pt(i) << std::endl; + + out << "Bit 12 "<<"2 candidates in ROI<" << i+1 << "> "; + out << std::setw(8) << is2candidates(i) << std::endl; + + out << "Bit 13-14 "<<"overlap<"< "; + out << std::setw(8) << ovl(i) << std::endl; + + out << "Bit 15 "<<"charge<"< "; + out << std::setw(8) << charge(i) << std::endl; + } + out << "Bit 0-11 " << " BCID "; + out << std::setw( 8 ) << bcid() << std::endl; + + out << "Bit 12 " << " >2candidates in a sector "; + out << std::setw( 8 ) << m_2candidatesInSector << std::endl; + } + +} // namespace LVL1MUONIF diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuForwardSectorLogicDataPhase1.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuForwardSectorLogicDataPhase1.cxx new file mode 100644 index 00000000000..caf84eb3b73 --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuForwardSectorLogicDataPhase1.cxx @@ -0,0 +1,200 @@ + +#include +#include + +#include "TrigT1Interfaces/Lvl1MuForwardSectorLogicDataPhase1.h" +#include "TrigT1Interfaces/Lvl1MuSectorLogicConstantsPhase1.h" + +namespace LVL1MUONIF { + + Lvl1MuForwardSectorLogicDataPhase1::Lvl1MuForwardSectorLogicDataPhase1() + : Lvl1MuSectorLogicDataPhase1() { + m_id_system = 2; + initialize(); + } + + Lvl1MuForwardSectorLogicDataPhase1& Lvl1MuForwardSectorLogicDataPhase1::operator=( const Lvl1MuSectorLogicDataPhase1& right ) { + if ( ( right.getSystemId() == m_id_system ) && + ( this != &right ) ) { + m_bcid = right.bcid(); + m_2candidatesInSector = right.is2candidatesInSector(); + for ( size_t i = 0; i < NCAND[m_id_system]; ++i ) { + m_roi[ i ] = right.roi( i ); + m_ovl[ i ] = right.ovl( i ); + m_pt[ i ] = right.pt( i ); + m_charge[ i ] = right.charge( i ); + m_2candidates[ i ] = right.is2candidates( i ); + m_goodmf[ i ] = right.goodmf(i); + m_innercoin[ i ] = right.innercoin(i); + m_bw2or3[ i ] = right.bw2or3(i); + } + } + return *this; + } + + Lvl1MuSectorLogicDataPhase1::SectorLogicWord Lvl1MuForwardSectorLogicDataPhase1::getWordFormat() const { + + SectorLogicWord val(std::make_pair(0, 0)); + unsigned int len=0; + unsigned int pos=0; + for (size_t i=0;i 0) val.first |= (1 >> (i*16+pos)) & len; + pos += len; + + //15: GoodMF + len=NBITS_GOODMF[m_id_system]; + val.first |= (goodmf(i) & len) << (i*16+pos); + pos += len; + } + + + // Global+BCID flags (bits 32-47) + len=0; + pos=0; + + //0-11: BCID + len=NBITS_BCID[m_id_system]; + val.second |= ( bcid() & len); + pos += len; + + //12-15: global flags + len=NBITS_IS2CANDIDATESINSECTOR[m_id_system]; + if (is2candidatesInSector()) val.second |= (1 >> pos) & len; + pos += len; + + return val; + } + + + const Lvl1MuSectorLogicDataPhase1& Lvl1MuForwardSectorLogicDataPhase1::convertFromWordFormat( const SectorLogicWord& value ) { + + unsigned int val; + unsigned int pos=0; + unsigned int len=0; + for (size_t i=0;i> (i*16+pos)) & len; + if (val == len) roi(i, -1); + else roi(i, val); + pos += len; + + //8-11: pT - 4 bits + len=NBITS_PT[m_id_system]; + val = (value.first >> (i*16+pos)) & len; + if (val == len) pt(i, -1); + else pt(i, val); + pos += len; + + //12: charge + len=NBITS_CHARGE[m_id_system]; + val = (value.first >> (i*16+pos)) & len; + if (val > 0) charge(i, +1); + else charge(i, -1); + pos += len; + + //13: 2 or 3 hits in BW + len=NBITS_BW2OR3[m_id_system]; + val = (value.first >> (i*16+pos)) & len; + bw2or3(i, val); + pos += len; + + //14: inner coincidence + len=NBITS_INNERCOIN[m_id_system]; + val = (value.first >> (i*16+pos)) & len; + innercoin(i, val); + pos += len; + + //15: GoodMF + len=NBITS_GOODMF[m_id_system]; + val = (value.first >> (i*16+pos)) & len; + goodmf(i, val); + pos += len; + } + + // Global+BCID flags (bits 32-47) + len=0; + pos=0; + + //0-11: BCID + len=NBITS_BCID[m_id_system]; + val = value.second & len; + bcid(val); + pos += len; + + //12: > 2 candidates + len=NBITS_IS2CANDIDATESINSECTOR[m_id_system]; + val = (value.second >> pos) & len; + if (val) set2candidatesInSector(); + else clear2candidatesInSector(); + + //13-15: other global flags + + return *this; + } + + + void Lvl1MuForwardSectorLogicDataPhase1::printOut( std::ostream& out ) const { + + for (size_t i=0;i "; + if (roi(i) == -1) out << "NA" << std::endl; + else out << std::setw(8) << roi(i) << std::endl; + + out << "Bit 8-11 "<< "Pt" << i+1 << " "; + if (pt(i) == -1) out << "No Hit" << std::endl; + else out << pt(i) << std::endl; + + out << "Bit 12 "<<"2 candidates in ROI<" << i+1 << "> "; + out << std::setw(8) << is2candidates(i) << std::endl; + + out << "Bit 13-14 "<<"overlap<"< "; + out << std::setw(8) << ovl(i) << std::endl; + + out << "Bit 15 "<<"charge<"< "; + out << std::setw(8) << charge(i) << std::endl; + } + out << "Bit 0-11 " << " BCID "; + out << std::setw( 8 ) << bcid() << std::endl; + + out << "Bit 12 " << " >2candidates in a sector "; + out << std::setw( 8 ) << m_2candidatesInSector << std::endl; + } + +} // namespace LVL1MUONIF diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuSectorLogicDataPhase1.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuSectorLogicDataPhase1.cxx new file mode 100644 index 00000000000..81a09d93e13 --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuSectorLogicDataPhase1.cxx @@ -0,0 +1,135 @@ + +#include +#include +#include + +#include "TrigT1Interfaces/Lvl1MuSectorLogicDataPhase1.h" +#include "TrigT1Interfaces/Lvl1MuSectorLogicConstantsPhase1.h" + +namespace LVL1MUONIF { + + Lvl1MuSectorLogicDataPhase1::Lvl1MuSectorLogicDataPhase1() + : + m_2candidatesInSector ( false ), + m_roi(NULL), + m_ovl(NULL), + m_pt(NULL), + m_2candidates(NULL), + m_bcid( 0 ), + m_charge(NULL), + m_id_system( -1 ), + m_goodmf(NULL), + m_innercoin(NULL), + m_bw2or3(NULL) + { + } + Lvl1MuSectorLogicDataPhase1::~Lvl1MuSectorLogicDataPhase1() + { + delete m_roi; + delete m_ovl; + delete m_pt; + delete m_charge; + delete m_2candidates; + delete m_goodmf; + delete m_innercoin; + delete m_bw2or3; + } + + void Lvl1MuSectorLogicDataPhase1::initialize() + { + if (m_id_system == -1) return; + + size_t ncand = NCAND[m_id_system]; + m_roi = new int[ncand]; + m_ovl = new int[ncand]; + m_pt = new int[ncand]; + m_charge = new int[ncand]; + m_2candidates = new bool[ncand]; + m_goodmf = new int[ncand]; + m_innercoin = new int[ncand]; + m_bw2or3 = new int[ncand]; + for ( size_t i = 0; i < ncand; ++i ) { + m_roi[ i ] = -1; + m_ovl[ i ] = -1; + m_pt[ i ] = -1; + m_charge[ i ] = + 1; + m_2candidates[ i ] = false; + m_goodmf[ i ] = -1; + m_innercoin[ i ] = -1; + m_bw2or3[ i ] = -1; + } + } + + + Lvl1MuSectorLogicDataPhase1::Lvl1MuSectorLogicDataPhase1( const Lvl1MuSectorLogicDataPhase1& right ) { + *this = right; + } + + Lvl1MuSectorLogicDataPhase1& Lvl1MuSectorLogicDataPhase1::operator=( const Lvl1MuSectorLogicDataPhase1& right ) { + if ( this != &right ) { + m_id_system = right.m_id_system; + m_bcid = right.m_bcid; + m_2candidatesInSector = right.m_2candidatesInSector; + for ( size_t i = 0; i < NCAND[m_id_system]; ++i ) { + m_roi[ i ] = right.m_roi[ i ]; + m_ovl[ i ] = right.m_ovl[ i ]; + m_pt[ i ] = right.m_pt[ i ]; + m_charge[ i ] = right.m_charge[ i ]; + m_2candidates[ i ] = right.m_2candidates[ i ]; + m_goodmf[ i ] = right.m_goodmf[ i ]; + m_innercoin[ i ] = right.m_innercoin[ i ]; + m_bw2or3[ i ] = right.m_bw2or3[ i ]; + } + } + return *this; + } + + std::ostream& operator<<( std::ostream& out, const Lvl1MuSectorLogicDataPhase1& right ) { + + right.printOut( out ); + return out; + + } + + // void Lvl1MuSectorLogicDataPhase1::printOut( std::ostream& out ) const { + + // out << "Bit 0 " << " >2candidates in a sector "; + // out << std::setw( 8 ) << m_2candidatesInSector << std::endl; + + // out << "Bit 1-9 " << " ROI<1> + OVL<1> "; + // out << std::setw( 8 ) << m_roi[ 0 ] << " : " << m_ovl[ 0 ] << std::endl; + // out << "Bit 10-18 " << " ROI<2> + OVL<2> "; + // out << std::setw( 8 ) << m_roi[ 1 ] << " : " << m_ovl[ 1 ] << std::endl; + // out << "Bit 19-21 " << " Pt1 "; + // out << std::setw( 8 ) << m_pt[ 0 ] << std::endl; + // out << "Bit 22-24 " << " Pt2 "; + // out << std::setw( 8 ) << m_pt[ 1 ] << std::endl; + // out << "Bit 25 " << " >2candidates in ROI1 "; + // out << std::setw( 8 ) << m_2candidates[ 0 ] << std::endl; + // out << "Bit 26 " << " >2candidates in ROI2 "; + // out << std::setw( 8 ) << m_2candidates[ 1 ] << std::endl; + // out << "Bit 27-29 " << " BCID "; + // out << std::setw( 8 ) << m_bcid << std::endl; + // out << "Bit 30 " << " charge in ROI1 "; + // out << std::setw( 8 ) << m_charge[ 0 ] << std::endl; + // out << "Bit 31 " << " charge in ROI2 "; + // out << std::setw( 8 ) << m_charge[ 1 ] << std::endl; + + // } + + void Lvl1MuSectorLogicDataPhase1::clear() { + m_2candidatesInSector = false; + m_bcid = 0; + for ( size_t i = 0; i < NCAND[m_id_system]; ++i ) { + m_roi[ i ] = -1; + m_ovl[ i ] = -1; + m_pt[ i ] = -1; + m_charge[ i ] = -1; + m_2candidates[ i ] = false; + m_goodmf[ i ] = -1; + m_innercoin[ i ] = -1; + m_bw2or3[ i ] = -1; + } + } + +} // namespace LVL1MUONIF diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPICTP.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPICTP.cxx index 094f9e987e8..24459287f41 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPICTP.cxx +++ b/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPICTP.cxx @@ -7,6 +7,11 @@ namespace LVL1 { MuCTPICTP::MuCTPICTP( unsigned int word ) + { + m_MuCTPICTPWord.push_back(word); + } + + MuCTPICTP::MuCTPICTP( std::vector word ) : m_MuCTPICTPWord( word ) { } @@ -15,7 +20,7 @@ namespace LVL1 { } - unsigned int MuCTPICTP::muCTPIWord() const { + std::vector MuCTPICTP::muCTPIWord() const { return m_MuCTPICTPWord; } diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPICTPPhase1.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPICTPPhase1.cxx new file mode 100644 index 00000000000..7dea1485dc2 --- /dev/null +++ b/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPICTPPhase1.cxx @@ -0,0 +1,22 @@ +/* + Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +*/ + +#include "TrigT1Interfaces/MuCTPICTPPhase1.h" + +namespace LVL1 { + + MuCTPICTPPhase1::MuCTPICTPPhase1( std::vector word ) + : m_MuCTPICTPWord( word ) { + + } + + MuCTPICTPPhase1::~MuCTPICTPPhase1() { + + } + + std::vector MuCTPICTPPhase1::muCTPIWord() const { + return m_MuCTPICTPWord; + } + +} // namespace LVL1 -- GitLab From 1073cbb018b68bc78bef805d780db168bb009ab3 Mon Sep 17 00:00:00 2001 From: Aaron Armbruster Date: Mon, 21 Oct 2019 10:46:27 +0200 Subject: [PATCH 02/12] commit CLASS_DEF changes to MuCTPICTP* classes --- Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTP.h | 4 +--- .../TrigT1Interfaces/TrigT1Interfaces/MuCTPICTPPhase1.h | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTP.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTP.h index c0168466947..3991179a191 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTP.h +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTP.h @@ -41,9 +41,7 @@ namespace LVL1 { } // namespace LVL1 -#ifndef CLIDSVC_CLASSDEF_H -#include "CLIDSvc/CLASS_DEF.h" -#endif +#include "AthenaKernel/CLASS_DEF.h" CLASS_DEF( LVL1::MuCTPICTP, 6070, 0 ) #endif // TRIGT1INTERFACES_MUCTPICTP_H diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTPPhase1.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTPPhase1.h index cde7bbea2ce..b070c66b5e0 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTPPhase1.h +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTPPhase1.h @@ -40,9 +40,7 @@ namespace LVL1 { } // namespace LVL1 -#ifndef CLIDSVC_CLASSDEF_H -#include "CLIDSvc/CLASS_DEF.h" -#endif +#include "AthenaKernel/CLASS_DEF.h" CLASS_DEF( LVL1::MuCTPICTPPhase1, 98734023, 0 ) #endif // TRIGT1INTERFACES_MUCTPICTPPHASE1_H -- GitLab From 8144bac5e50ae2201351511f4721d948358cda25 Mon Sep 17 00:00:00 2001 From: Hiroaki Hibi Date: Thu, 17 Oct 2019 13:21:47 +0200 Subject: [PATCH 03/12] Implemented DO_RUN3ALGO that can switch between Run3 and Run2 algorithms --- Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx b/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx index 161b7f3ddc7..380e1ea458c 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx @@ -69,7 +69,7 @@ namespace LVL1TGCTrigger { bool g_INNER_VETO; bool g_TILE_MU; bool g_USE_CONDDB; - + bool g_DO_RUN3ALGO; /////////////////////////////////////////////////////////////////////////// LVL1TGCTrigger::LVL1TGCTrigger::LVL1TGCTrigger(const std::string& name, ISvcLocator* pSvcLocator): AthAlgorithm(name,pSvcLocator), @@ -104,6 +104,7 @@ namespace LVL1TGCTrigger { declareProperty("FULLCW", m_FULLCW =true); // Obsolete declareProperty("TILEMU", m_TILEMU =false); // Obsolete declareProperty("ReadCondKey", m_readCondKey); + declareProperty("DO_RUN3ALGO", m_DO_RUN3ALGO =false); } @@ -152,7 +153,7 @@ namespace LVL1TGCTrigger { g_INNER_VETO = m_INNERVETO.value() && g_USE_INNER; g_TILE_MU = m_TILEMU.value() && g_USE_INNER; g_USE_CONDDB = true; - + g_DO_RUN3ALGO = m_DO_RUN3ALGO.value(); // TrigConfigSvc StatusCode sc = m_configSvc.retrieve(); -- GitLab From d23a8db44350c51c1c74727b009e3fdd547b4016 Mon Sep 17 00:00:00 2001 From: Hiroaki Hibi Date: Thu, 17 Oct 2019 13:46:13 +0200 Subject: [PATCH 04/12] Implemented DO_RUN3ALGO that can switch between Run3 and Run2 algorithms --- Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h index cdaee91675b..eb4e5044edc 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h @@ -154,6 +154,8 @@ class LVL1TGCTrigger : public AthAlgorithm BooleanProperty m_INNERVETO; // flag for using VETO by Inner Station for SL BooleanProperty m_FULLCW; // flag for using differne CW for each octant BooleanProperty m_TILEMU; // flag for using TileMu + BooleanProperty m_DO_RUN3ALGO ; // flag for using switch between Run3 and Run2 algorithms + uint16_t m_bctagInProcess; -- GitLab From 5875e664d54cb3b7ca4744364bf8ef05403a2290 Mon Sep 17 00:00:00 2001 From: Hiroaki Hibi Date: Thu, 17 Oct 2019 15:39:14 +0200 Subject: [PATCH 05/12] Implemented DO_RUN3ALGO flag in TGCRPhiCoincidenceMap and TGCSectorLogic --- .../TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx | 20 +++++--- .../TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx | 46 ++++++++++++------- 2 files changed, 44 insertions(+), 22 deletions(-) diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx index 3893bda892b..f41dd508e3e 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx @@ -26,7 +26,7 @@ namespace LVL1TGCTrigger { extern bool g_DEBUGLEVEL; extern bool g_USE_CONDDB; - + extern bool g_DO_RUN3ALGO; bool TGCRPhiCoincidenceMap::test(int octantId, int moduleId, int subsector, int type, int pt, int dr, int dphi) const @@ -44,7 +44,7 @@ bool TGCRPhiCoincidenceMap::test(int octantId, int moduleId, int subsector, std::map > readMap; - if (g_USE_CONDDB) { + if (g_USE_CONDDB){ readMap = readCdo->getReadMapBw(m_side, m_octant, pt); } else { readMap = m_mapDB[pt]; @@ -78,8 +78,14 @@ TGCRPhiCoincidenceMap::TGCRPhiCoincidenceMap(const SG::ReadCondHandleKeyreadMap(); // read Coincidence Map - + + if(!g_DO_RUN3ALGO){ + this->readMap(); // read Coincidence Map for Run2 (6 thresholds) + } + else{ + //this -> readMap_Run3(); This function will be implemented. // read Coincidence Map for Run3 (15 thresholds) + } + } } @@ -164,7 +170,8 @@ TGCRPhiCoincidenceMap::TGCRPhiCoincidenceMap(const TGCRPhiCoincidenceMap& right) m_side=right.m_side; m_octant=right.m_octant; m_fullCW=right.m_fullCW; - if (m_verName!="NA") this->readMap(); // read Coincidence Map + if(m_verName!="NA" && !g_DO_RUN3ALGO) this->readMap(); // read Coincidence Map for Run2 (6 thresholds) + if(m_verName!="NA" && g_DO_RUN3ALGO){/*this -> readMap_Run3(); This function will be implemented. */}// read Coincidence Map for Run3 (15 thresholds) } @@ -177,7 +184,8 @@ TGCRPhiCoincidenceMap& TGCRPhiCoincidenceMap::operator=(const TGCRPhiCoincidence m_side=right.m_side; m_octant=right.m_octant; m_fullCW=right.m_fullCW; - if (m_verName!="NA") this->readMap(); // read Coincidence Map + if(m_verName!="NA" && !g_DO_RUN3ALGO) this->readMap(); // read Coincidence Map for Run2 (6 thresholds) + if(m_verName!="NA" && g_DO_RUN3ALGO){ /*this -> readMap_Run3(); This function will be implemented.*/} // read Coincidence Map for Run3 (15 thresholds) } return *this; diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx index b27654e8ff0..e071e9ab27f 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx @@ -22,6 +22,8 @@ namespace LVL1TGCTrigger { extern bool g_INNER_VETO; extern bool g_TILE_MU; extern bool g_USE_CONDDB; + extern bool g_DO_RUN3ALGO; + TGCSectorLogic::TGCSectorLogic(TGCRegionType regionIn, int idIn): m_bid(0), @@ -182,38 +184,50 @@ void TGCSectorLogic::clockIn(const SG::ReadCondHandleKey readCon // do coincidence with Inner Tracklet and/or TileMu if (m_useInner) doInnerCoincidence(readCondKey, SSCid, coincidenceOut); - if(coincidenceOut) m_preSelector.input(coincidenceOut); + if(coincidenceOut){ + if(g_DO_RUN3ALGO){/*trackSelector.input(coincidenceOut);*/}// TrackSelector for Run3 + else{m_preSelector.input(coincidenceOut);} // coincidenceOut will be deleted // in m_preSelector.input() if coincidenceOut has no hit // in m_preSelector.select() if if coincidenceOut has hit + } } if(SSCCOut!=0) delete SSCCOut; SSCCOut=0; + if(g_DO_RUN3ALGO){ + /* + if(trackSelectorOut!=0){delete trackSelectorOut;}//NEW + trackSelectorOut = new TGCTrackSelectorOut;//NEW + trackSelector.select(trackSelectorOut);//NEW + */ + } + else{ #ifdef TGCDEBUG - m_preSelector.dumpInput(); + m_preSelector.dumpInput(); #endif - // get SLPreSelectorOut - TGCSLPreSelectorOut* preSelectorOut = m_preSelector.select(); - // preSelectorOut will be deleted after m_selector.select() + // get SLPreSelectorOut + TGCSLPreSelectorOut* preSelectorOut = m_preSelector.select(); + // preSelectorOut will be deleted after m_selector.select() #ifdef TGCDEBUG - preSelectorOut->print(); + preSelectorOut->print(); #endif - // delete SLSelectorOut if exists - if(m_selectorOut!=0) delete m_selectorOut; - // create new SLSelectorOut - m_selectorOut = new TGCSLSelectorOut; + // delete SLSelectorOut if exists + if(m_selectorOut!=0) delete m_selectorOut; + // create new SLSelectorOut + m_selectorOut = new TGCSLSelectorOut; - if(preSelectorOut!=0){ - // select final canidates - m_selector.select(preSelectorOut,m_selectorOut); + if(preSelectorOut!=0){ + // select final canidates + m_selector.select(preSelectorOut,m_selectorOut); - // delete SLPreSelectorOut - delete preSelectorOut; - preSelectorOut=0; + // delete SLPreSelectorOut + delete preSelectorOut; + preSelectorOut=0; + } } #ifdef TGCDEBUG -- GitLab From 2bbff9e37586d8dade523471a3fa6eb13777f5ad Mon Sep 17 00:00:00 2001 From: Hiroaki Hibi Date: Mon, 21 Oct 2019 11:00:49 +0200 Subject: [PATCH 06/12] Add Lvl1MuCTPIInputPhase1 into TrigT1TGC Add Lvl1MuCTPIInputPhase1 into TrigT1TGC --- .../TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h | 5 +- .../TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx | 52 ++++++++++++++----- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h index eb4e5044edc..663d48e6738 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h @@ -22,6 +22,7 @@ // Other stuff #include "TrigT1Interfaces/SlinkWord.h" #include "TrigT1Interfaces/Lvl1MuCTPIInput.h" +#include "TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h" #include "Identifier/Identifier.h" // EIFI-SL connection @@ -82,7 +83,9 @@ class LVL1TGCTrigger : public AthAlgorithm private: // Process one bunch StatusCode processOneBunch(const DataHandle& , - LVL1MUONIF::Lvl1MuCTPIInput* ); + LVL1MUONIF::Lvl1MuCTPIInput*, + LVL1MUONIF::Lvl1MuCTPIInputPhase1* + ); void doMaskOperation(const DataHandle& ,std::map& ); void fillTGCEvent(std::map& , TGCEvent&); diff --git a/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx b/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx index 380e1ea458c..ef28aab65fb 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx @@ -39,6 +39,9 @@ #include "TrigT1Interfaces/Lvl1MuCTPIInput.h" #include "TrigT1Interfaces/Lvl1MuEndcapSectorLogicData.h" #include "TrigT1Interfaces/Lvl1MuForwardSectorLogicData.h" +#include "TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h" +#include "TrigT1Interfaces/Lvl1MuEndcapSectorLogicDataPhase1.h" +#include "TrigT1Interfaces/Lvl1MuForwardSectorLogicDataPhase1.h" // MuonSpectrometer #include "MuonDigitContainer/TgcDigitContainer.h" @@ -283,7 +286,13 @@ namespace LVL1TGCTrigger { return sc; } + + LVL1MUONIF::Lvl1MuCTPIInputPhase1* muctpiinputPhase1 = new LVL1MUONIF::Lvl1MuCTPIInputPhase1; LVL1MUONIF::Lvl1MuCTPIInput* muctpiinput = new LVL1MUONIF::Lvl1MuCTPIInput; + + if(g_DO_RUN3ALGO){delete muctpiinput;} + else{delete muctpiinputPhase1;} + // process one by one for (int bc=TgcDigit::BC_PREVIOUS; bc<=TgcDigit::BC_NEXT; bc++){ sc = StatusCode::SUCCESS; @@ -299,7 +308,7 @@ namespace LVL1TGCTrigger { if (m_ProcessAllBunches || bc==m_CurrentBunchTag){ m_bctagInProcess =bc; - sc=processOneBunch(tgc_container, muctpiinput); + sc=processOneBunch(tgc_container, muctpiinput, muctpiinputPhase1); } if (sc.isFailure()) { msg() << MSG::FATAL @@ -320,7 +329,9 @@ namespace LVL1TGCTrigger { } StatusCode LVL1TGCTrigger::processOneBunch(const DataHandle& tgc_container, - LVL1MUONIF::Lvl1MuCTPIInput* muctpiinput ) + LVL1MUONIF::Lvl1MuCTPIInput* muctpiinput, + LVL1MUONIF::Lvl1MuCTPIInputPhase1* muctpiinputPhase1 + ) { std::map tgcDigitIDs; std::map::iterator itCh; @@ -401,18 +412,35 @@ StatusCode LVL1TGCTrigger::processOneBunch(const DataHandle& if (m_OutputTgcRDO.value()) recordRdoSL(sector, subsystem); TGCSLSelectorOut* selectorOut = sector->getSL()->getSelectorOutput(); + //TGCTrackSelectorOut* trackSelectorOut = sector->getSL()->getTrackSelectorOutput();// will be installed if(sector->getRegionType()==Endcap){ - LVL1MUONIF::Lvl1MuEndcapSectorLogicData sldata; - tgcsystem = LVL1MUONIF::Lvl1MuCTPIInput::idEndcapSystem(); - if(selectorOut!=0) FillSectorLogicData(&sldata,selectorOut,subsystem); - muctpiinput->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_endcap++,muctpiBcId); - } + if(g_DO_RUN3ALGO){ + LVL1MUONIF::Lvl1MuEndcapSectorLogicDataPhase1 sldata; + tgcsystem = LVL1MUONIF::Lvl1MuCTPIInputPhase1::idEndcapSystem(); + //if(trackSelectorOut!=0) FillSectorLogicData(&sldata,trackSelectorOut); // this function will be implemented. + muctpiinputPhase1->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_endcap++,muctpiBcId); + } + else{ + LVL1MUONIF::Lvl1MuEndcapSectorLogicData sldata; + tgcsystem = LVL1MUONIF::Lvl1MuCTPIInput::idEndcapSystem(); + if(selectorOut!=0) FillSectorLogicData(&sldata,selectorOut,subsystem); + muctpiinput->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_endcap++,muctpiBcId); + } + } if(sector->getRegionType()==Forward){ - LVL1MUONIF::Lvl1MuForwardSectorLogicData sldata; - tgcsystem = LVL1MUONIF::Lvl1MuCTPIInput::idForwardSystem(); - if(selectorOut!=0) FillSectorLogicData(&sldata,selectorOut,subsystem); - muctpiinput->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_forward++,muctpiBcId); - } + if(g_DO_RUN3ALGO){ + LVL1MUONIF::Lvl1MuForwardSectorLogicDataPhase1 sldata; + tgcsystem = LVL1MUONIF::Lvl1MuCTPIInputPhase1::idForwardSystem(); + //if(trackSelectorOut!=0) FillSectorLogicData(&sldata,trackSelectorOut); //will be implemented. + muctpiinputPhase1->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_forward++,muctpiBcId); + } + else{ + LVL1MUONIF::Lvl1MuForwardSectorLogicData sldata; + tgcsystem = LVL1MUONIF::Lvl1MuCTPIInput::idForwardSystem(); + if(selectorOut!=0) FillSectorLogicData(&sldata,selectorOut,subsystem); + muctpiinput->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_forward++,muctpiBcId); + } + } // delete selectorOut sector->getSL()->eraseSelectorOut(); -- GitLab From 25c83b6bd8a31f44c93ed28d0a324a3c8f039e63 Mon Sep 17 00:00:00 2001 From: Masato Aoki Date: Tue, 22 Oct 2019 10:28:34 +0200 Subject: [PATCH 07/12] change naming of switch --- Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h | 2 +- Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx | 12 ++++++------ .../TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx | 12 ++++++------ Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx | 6 +++--- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h index 663d48e6738..a8895669cfe 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h @@ -157,7 +157,7 @@ class LVL1TGCTrigger : public AthAlgorithm BooleanProperty m_INNERVETO; // flag for using VETO by Inner Station for SL BooleanProperty m_FULLCW; // flag for using differne CW for each octant BooleanProperty m_TILEMU; // flag for using TileMu - BooleanProperty m_DO_RUN3ALGO ; // flag for using switch between Run3 and Run2 algorithms + BooleanProperty m_useRun3Config; // flag for using switch between Run3 and Run2 algorithms uint16_t m_bctagInProcess; diff --git a/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx b/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx index ef28aab65fb..1c9d145e420 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx @@ -72,7 +72,7 @@ namespace LVL1TGCTrigger { bool g_INNER_VETO; bool g_TILE_MU; bool g_USE_CONDDB; - bool g_DO_RUN3ALGO; + bool g_useRun3Config; /////////////////////////////////////////////////////////////////////////// LVL1TGCTrigger::LVL1TGCTrigger::LVL1TGCTrigger(const std::string& name, ISvcLocator* pSvcLocator): AthAlgorithm(name,pSvcLocator), @@ -107,7 +107,7 @@ namespace LVL1TGCTrigger { declareProperty("FULLCW", m_FULLCW =true); // Obsolete declareProperty("TILEMU", m_TILEMU =false); // Obsolete declareProperty("ReadCondKey", m_readCondKey); - declareProperty("DO_RUN3ALGO", m_DO_RUN3ALGO =false); + declareProperty("useRun3Config", m_useRun3Config =false); } @@ -156,7 +156,7 @@ namespace LVL1TGCTrigger { g_INNER_VETO = m_INNERVETO.value() && g_USE_INNER; g_TILE_MU = m_TILEMU.value() && g_USE_INNER; g_USE_CONDDB = true; - g_DO_RUN3ALGO = m_DO_RUN3ALGO.value(); + g_useRun3Config = m_useRun3Config.value(); // TrigConfigSvc StatusCode sc = m_configSvc.retrieve(); @@ -290,7 +290,7 @@ namespace LVL1TGCTrigger { LVL1MUONIF::Lvl1MuCTPIInputPhase1* muctpiinputPhase1 = new LVL1MUONIF::Lvl1MuCTPIInputPhase1; LVL1MUONIF::Lvl1MuCTPIInput* muctpiinput = new LVL1MUONIF::Lvl1MuCTPIInput; - if(g_DO_RUN3ALGO){delete muctpiinput;} + if(g_useRun3Config){delete muctpiinput;} else{delete muctpiinputPhase1;} // process one by one @@ -414,7 +414,7 @@ StatusCode LVL1TGCTrigger::processOneBunch(const DataHandle& TGCSLSelectorOut* selectorOut = sector->getSL()->getSelectorOutput(); //TGCTrackSelectorOut* trackSelectorOut = sector->getSL()->getTrackSelectorOutput();// will be installed if(sector->getRegionType()==Endcap){ - if(g_DO_RUN3ALGO){ + if(g_useRun3Config){ LVL1MUONIF::Lvl1MuEndcapSectorLogicDataPhase1 sldata; tgcsystem = LVL1MUONIF::Lvl1MuCTPIInputPhase1::idEndcapSystem(); //if(trackSelectorOut!=0) FillSectorLogicData(&sldata,trackSelectorOut); // this function will be implemented. @@ -428,7 +428,7 @@ StatusCode LVL1TGCTrigger::processOneBunch(const DataHandle& } } if(sector->getRegionType()==Forward){ - if(g_DO_RUN3ALGO){ + if(g_useRun3Config){ LVL1MUONIF::Lvl1MuForwardSectorLogicDataPhase1 sldata; tgcsystem = LVL1MUONIF::Lvl1MuCTPIInputPhase1::idForwardSystem(); //if(trackSelectorOut!=0) FillSectorLogicData(&sldata,trackSelectorOut); //will be implemented. diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx index f41dd508e3e..b7a80a4a8ec 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx @@ -26,7 +26,7 @@ namespace LVL1TGCTrigger { extern bool g_DEBUGLEVEL; extern bool g_USE_CONDDB; - extern bool g_DO_RUN3ALGO; + extern bool g_useRun3Config; bool TGCRPhiCoincidenceMap::test(int octantId, int moduleId, int subsector, int type, int pt, int dr, int dphi) const @@ -79,7 +79,7 @@ TGCRPhiCoincidenceMap::TGCRPhiCoincidenceMap(const SG::ReadCondHandleKeyreadMap(); // read Coincidence Map for Run2 (6 thresholds) } else{ @@ -170,8 +170,8 @@ TGCRPhiCoincidenceMap::TGCRPhiCoincidenceMap(const TGCRPhiCoincidenceMap& right) m_side=right.m_side; m_octant=right.m_octant; m_fullCW=right.m_fullCW; - if(m_verName!="NA" && !g_DO_RUN3ALGO) this->readMap(); // read Coincidence Map for Run2 (6 thresholds) - if(m_verName!="NA" && g_DO_RUN3ALGO){/*this -> readMap_Run3(); This function will be implemented. */}// read Coincidence Map for Run3 (15 thresholds) + if(m_verName!="NA" && !g_useRun3Config) this->readMap(); // read Coincidence Map for Run2 (6 thresholds) + if(m_verName!="NA" && g_useRun3Config){/*this -> readMap_Run3(); This function will be implemented. */}// read Coincidence Map for Run3 (15 thresholds) } @@ -184,8 +184,8 @@ TGCRPhiCoincidenceMap& TGCRPhiCoincidenceMap::operator=(const TGCRPhiCoincidence m_side=right.m_side; m_octant=right.m_octant; m_fullCW=right.m_fullCW; - if(m_verName!="NA" && !g_DO_RUN3ALGO) this->readMap(); // read Coincidence Map for Run2 (6 thresholds) - if(m_verName!="NA" && g_DO_RUN3ALGO){ /*this -> readMap_Run3(); This function will be implemented.*/} // read Coincidence Map for Run3 (15 thresholds) + if(m_verName!="NA" && !g_useRun3Config) this->readMap(); // read Coincidence Map for Run2 (6 thresholds) + if(m_verName!="NA" && g_useRun3Config){ /*this -> readMap_Run3(); This function will be implemented.*/} // read Coincidence Map for Run3 (15 thresholds) } return *this; diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx index e071e9ab27f..aef46fd6ee2 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx @@ -22,7 +22,7 @@ namespace LVL1TGCTrigger { extern bool g_INNER_VETO; extern bool g_TILE_MU; extern bool g_USE_CONDDB; - extern bool g_DO_RUN3ALGO; + extern bool g_useRun3Config; TGCSectorLogic::TGCSectorLogic(TGCRegionType regionIn, int idIn): @@ -185,7 +185,7 @@ void TGCSectorLogic::clockIn(const SG::ReadCondHandleKey readCon if (m_useInner) doInnerCoincidence(readCondKey, SSCid, coincidenceOut); if(coincidenceOut){ - if(g_DO_RUN3ALGO){/*trackSelector.input(coincidenceOut);*/}// TrackSelector for Run3 + if(g_useRun3Config){/*trackSelector.input(coincidenceOut);*/}// TrackSelector for Run3 else{m_preSelector.input(coincidenceOut);} // coincidenceOut will be deleted // in m_preSelector.input() if coincidenceOut has no hit @@ -195,7 +195,7 @@ void TGCSectorLogic::clockIn(const SG::ReadCondHandleKey readCon if(SSCCOut!=0) delete SSCCOut; SSCCOut=0; - if(g_DO_RUN3ALGO){ + if(g_useRun3Config){ /* if(trackSelectorOut!=0){delete trackSelectorOut;}//NEW trackSelectorOut = new TGCTrackSelectorOut;//NEW -- GitLab From ad5bd4d0d68c2ec52d9b75d7ec5060cc8e1edd29 Mon Sep 17 00:00:00 2001 From: Masato Aoki Date: Tue, 22 Oct 2019 11:18:04 +0200 Subject: [PATCH 08/12] run2-run3 switch --- .../TrigT1RPCsteering/TrigT1RPC.h | 5 +++ .../TrigT1RPCsteering/src/TrigT1RPC.cxx | 44 ++++++++++++++++--- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/Trigger/TrigT1/TrigT1RPCsteering/TrigT1RPCsteering/TrigT1RPC.h b/Trigger/TrigT1/TrigT1RPCsteering/TrigT1RPCsteering/TrigT1RPC.h index b160b37f527..cbcb7d76e87 100755 --- a/Trigger/TrigT1/TrigT1RPCsteering/TrigT1RPCsteering/TrigT1RPC.h +++ b/Trigger/TrigT1/TrigT1RPCsteering/TrigT1RPCsteering/TrigT1RPC.h @@ -32,6 +32,7 @@ #include "MuonReadoutGeometry/MuonDetectorManager.h" #include "MuonDigitContainer/RpcDigitContainer.h" #include "TrigT1Interfaces/Lvl1MuCTPIInput.h" +#include "TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h" #define DEFAULT_L1MuctpiStoreLocationRPC "L1MuctpiStoreRPC" @@ -76,6 +77,8 @@ private: IntegerProperty m_firstBC_to_MUCTPI; // First BC to be sent to muctpi, wrt to BC0, e.g. -1 meanst the BC before the trigger Bc IntegerProperty m_lastBC_to_MUCTPI; // First BC to be sent to muctpi, wrt to BC0, e.g. -1 meanst the BC before the trigger Bc + + BooleanProperty m_useRun3Config; // flag for using switch between Run3 and Run2 configurations StatusCode fill_RPCdata(RPCsimuData&); @@ -91,6 +94,8 @@ private: SG::ReadHandleKey m_rpcDigitKey{this, "RPCDigitContainer", "RPC_DIGITS", "RPC Digit Input Container"}; SG::WriteHandleKey m_muctpiKey{this, "MuctpiLocationRPC", DEFAULT_L1MuctpiStoreLocationRPC, "Location of muctip for Rpc"}; + SG::WriteHandleKey m_muctpiPhase1Key{this, "MuctpiLocationRPC", DEFAULT_L1MuctpiStoreLocationRPC, "Location of muctip for Rpc"}; + }; diff --git a/Trigger/TrigT1/TrigT1RPCsteering/src/TrigT1RPC.cxx b/Trigger/TrigT1/TrigT1RPCsteering/src/TrigT1RPC.cxx index ce762bfdfd8..3f52139c646 100755 --- a/Trigger/TrigT1/TrigT1RPCsteering/src/TrigT1RPC.cxx +++ b/Trigger/TrigT1/TrigT1RPCsteering/src/TrigT1RPC.cxx @@ -32,6 +32,7 @@ #include "TrigT1RPClogic/decodeSL.h" #include "TrigT1Interfaces/Lvl1MuCTPIInput.h" +#include "TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h" #include @@ -78,6 +79,8 @@ TrigT1RPC::TrigT1RPC(const std::string& name, ISvcLocator* pSvcLocator) : declareProperty ( "firstBC_to_MUCTPI", m_firstBC_to_MUCTPI=-1 ); declareProperty ( "lastBC_to_MUCTPI", m_lastBC_to_MUCTPI=1 ); + + declareProperty ( "useRun3Config", m_useRun3Config=false ); m_MuonMgr=0; m_rpcId=0; @@ -101,7 +104,11 @@ StatusCode TrigT1RPC::initialize(){ CHECK(m_cabling_getter->giveCabling(m_cabling)); ATH_CHECK(m_rpcDigitKey.initialize()); - ATH_CHECK(m_muctpiKey.initialize()); + + if(m_useRun3Config) + ATH_CHECK(m_muctpiPhase1Key.initialize()); + else + ATH_CHECK(m_muctpiKey.initialize()); return StatusCode::SUCCESS; } @@ -167,10 +174,18 @@ StatusCode TrigT1RPC::execute() { //////////////////////////////////////////////////////////////////////// ///// Access the SL word and fill the MuCTPInterface /////////////////// - SG::WriteHandle wh_muctpiRpc(m_muctpiKey); - ATH_CHECK(wh_muctpiRpc.record(std::make_unique())); + LVL1MUONIF::Lvl1MuCTPIInput * ctpiInRPC = nullptr; + LVL1MUONIF::Lvl1MuCTPIInputPhase1 * ctpiPhase1InRPC = nullptr; + if(m_useRun3Config){ + SG::WriteHandle wh_muctpiRpc(m_muctpiPhase1Key); + ATH_CHECK(wh_muctpiRpc.record(std::make_unique())); + ctpiPhase1InRPC = wh_muctpiRpc.ptr(); + }else{ + SG::WriteHandle wh_muctpiRpc(m_muctpiKey); + ATH_CHECK(wh_muctpiRpc.record(std::make_unique())); + ctpiInRPC = wh_muctpiRpc.ptr(); + } - LVL1MUONIF::Lvl1MuCTPIInput * ctpiInRPC = wh_muctpiRpc.ptr(); // // SLdata::PatternsList sectors_patterns = sectors.give_patterns(); // SLdata::PatternsList::iterator SLit = sectors_patterns.begin(); // @@ -194,8 +209,25 @@ StatusCode TrigT1RPC::execute() { << ", Th=" << TriggerRPC::PT1(data_word) // << ", data word " << MSG::hex << data_word // << MSG::dec ); // - - ctpiInRPC->setSectorLogicData(data_word,0,subsystem,logic_sector,dbc); + if(m_useRun3Config){ + LVL1MUONIF::Lvl1MuBarrelSectorLogicData sldata; + sldata.convertFromWordFormat(data_word); + LVL1MUONIF::Lvl1MuBarrelSectorLogicDataPhase1 sldata2; + sldata2.bcid( sldata.bcid() ); + if(sldata.is2candidatesInSector()) sldata2.set2candidatesInSector(); + else sldata2.clear2candidatesInSector(); + for(int icand = 0 ; icand < 2 ; icand++){ // up to 2 candidates + sldata2.pt(icand, sldata.pt(icand) ); + sldata2.roi(icand, sldata.roi(icand) ); + sldata2.ovl(icand, sldata.ovl(icand) ); + sldata2.charge(icand, sldata.charge(icand) ); + if(sldata.is2candidates(icand)) sldata2.set2candidates(icand); + else sldata2.clear2candidates(icand); + } + ctpiPhase1InRPC->setSectorLogicData(sldata2,0,subsystem,logic_sector,dbc); + }else{ + ctpiInRPC->setSectorLogicData(data_word,0,subsystem,logic_sector,dbc); + } } // ++SLit; // -- GitLab From 5d02b0e09675f282896a3f824dcb75abdf02897b Mon Sep 17 00:00:00 2001 From: Aaron Armbruster Date: Tue, 22 Oct 2019 17:12:32 +0200 Subject: [PATCH 09/12] revert MuCTPICTP class --- .../TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTP.h | 7 ++----- Trigger/TrigT1/TrigT1Interfaces/src/MuCTPICTP.cxx | 7 +------ 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTP.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTP.h index 3991179a191..a1e82a74728 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTP.h +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTP.h @@ -5,8 +5,6 @@ #ifndef TRIGT1INTERFACES_MUCTPICTP_H #define TRIGT1INTERFACES_MUCTPICTP_H -#include - namespace LVL1 { /** @@ -25,17 +23,16 @@ namespace LVL1 { public: /* constructor and destructor */ MuCTPICTP( unsigned int word = 0 ); - MuCTPICTP( std::vector words ); ~MuCTPICTP(); /** * Return the muon data i.e. (xxxxx|thr6|thr5|thr4|thr3|thr2|thr1) */ - std::vector muCTPIWord() const; + unsigned int muCTPIWord() const; private: /// The only data member - std::vector m_MuCTPICTPWord; + const unsigned int m_MuCTPICTPWord; }; // class MuCTPICTP diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPICTP.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPICTP.cxx index 24459287f41..094f9e987e8 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPICTP.cxx +++ b/Trigger/TrigT1/TrigT1Interfaces/src/MuCTPICTP.cxx @@ -7,11 +7,6 @@ namespace LVL1 { MuCTPICTP::MuCTPICTP( unsigned int word ) - { - m_MuCTPICTPWord.push_back(word); - } - - MuCTPICTP::MuCTPICTP( std::vector word ) : m_MuCTPICTPWord( word ) { } @@ -20,7 +15,7 @@ namespace LVL1 { } - std::vector MuCTPICTP::muCTPIWord() const { + unsigned int MuCTPICTP::muCTPIWord() const { return m_MuCTPICTPWord; } -- GitLab From a1ce3d153c3cc74e5d7f2eb4d62accd9c90e4fa8 Mon Sep 17 00:00:00 2001 From: Masato Aoki Date: Tue, 22 Oct 2019 18:54:16 +0200 Subject: [PATCH 10/12] fix duplicated name --- .../TrigT1/TrigT1RPCsteering/TrigT1RPCsteering/TrigT1RPC.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Trigger/TrigT1/TrigT1RPCsteering/TrigT1RPCsteering/TrigT1RPC.h b/Trigger/TrigT1/TrigT1RPCsteering/TrigT1RPCsteering/TrigT1RPC.h index cbcb7d76e87..8ad65acdf2a 100755 --- a/Trigger/TrigT1/TrigT1RPCsteering/TrigT1RPCsteering/TrigT1RPC.h +++ b/Trigger/TrigT1/TrigT1RPCsteering/TrigT1RPCsteering/TrigT1RPC.h @@ -93,8 +93,8 @@ private: const IRPCcablingSvc* m_cabling; SG::ReadHandleKey m_rpcDigitKey{this, "RPCDigitContainer", "RPC_DIGITS", "RPC Digit Input Container"}; - SG::WriteHandleKey m_muctpiKey{this, "MuctpiLocationRPC", DEFAULT_L1MuctpiStoreLocationRPC, "Location of muctip for Rpc"}; - SG::WriteHandleKey m_muctpiPhase1Key{this, "MuctpiLocationRPC", DEFAULT_L1MuctpiStoreLocationRPC, "Location of muctip for Rpc"}; + SG::WriteHandleKey m_muctpiKey{this, "MuctpiLocationRPC", DEFAULT_L1MuctpiStoreLocationRPC, "Location of muctpi for Rpc"}; + SG::WriteHandleKey m_muctpiPhase1Key{this, "MuctpiPhase1LocationRPC", DEFAULT_L1MuctpiStoreLocationRPC, "Location of muctpiPhase1 for Rpc"}; }; -- GitLab From 2e7862b802f5fea92e8541142dd3171284de449f Mon Sep 17 00:00:00 2001 From: Masato Aoki Date: Wed, 23 Oct 2019 19:23:48 +0200 Subject: [PATCH 11/12] remove pure virtual func --- .../TrigT1/TrigT1Interfaces/TrigT1Interfaces/IMuctpiSimTool.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/IMuctpiSimTool.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/IMuctpiSimTool.h index d22213fab04..8382c3e071e 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/IMuctpiSimTool.h +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/IMuctpiSimTool.h @@ -29,7 +29,6 @@ namespace LVL1MUCTPI { * \param inputEvent reference to the inputEvent */ - virtual StatusCode executeSimulation() = 0; virtual StatusCode fillMuCTPIL1Topo(LVL1::MuCTPIL1Topo &, int bcidOffset=0) const = 0; }; -- GitLab From e4b905998d5660019447a72f4aa727d09e29244a Mon Sep 17 00:00:00 2001 From: Masato Aoki Date: Sun, 27 Oct 2019 00:23:25 +0200 Subject: [PATCH 12/12] clean up --- .../Lvl1MuBarrelSectorLogicDataPhase1.h | 12 +- .../TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h | 120 +- .../Lvl1MuEndcapSectorLogicDataPhase1.h | 4 +- .../Lvl1MuForwardSectorLogicDataPhase1.h | 4 +- .../Lvl1MuSectorLogicConstantsPhase1.h | 3 + .../Lvl1MuSectorLogicDataPhase1.h | 21 +- .../TrigT1Interfaces/MuCTPICTPPhase1.h | 3 +- .../src/Lvl1MuBarrelSectorLogicDataPhase1.cxx | 70 +- .../src/Lvl1MuCTPIInputPhase1.cxx | 51 +- .../src/Lvl1MuEndcapSectorLogicDataPhase1.cxx | 4 +- .../Lvl1MuForwardSectorLogicDataPhase1.cxx | 4 +- .../src/Lvl1MuSectorLogicDataPhase1.cxx | 79 +- .../TrigT1RPCsteering/TrigT1RPC.h | 70 +- .../TrigT1RPCsteering/src/TrigT1RPC.cxx | 34 +- .../TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h | 262 +-- .../TrigT1TGC/TrigT1TGC/MakeCoincidenceOut.h | 8 +- .../TrigT1TGC/TrigT1TGC/TGCArguments.hh | 67 + .../TrigT1TGC/TrigT1TGC/TGCDatabaseManager.hh | 15 +- .../TrigT1TGC/TrigT1TGC/TGCDoubletSB.hh | 2 +- .../TrigT1TGC/TGCElectronicsSystem.hh | 9 +- .../TrigT1TGC/TGCInnerCoincidenceMap.hh | 13 +- .../TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerSB.hh | 2 +- .../TrigT1TGC/TGCInnerTrackletSlot.hh | 12 +- .../TrigT1TGC/TGCInnerTrackletSlotHolder.hh | 10 +- .../TrigT1TGC/TrigT1TGC/TGCPatchPanel.hh | 11 +- .../TrigT1TGC/TGCRPhiCoincidenceMap.hh | 12 +- .../TrigT1TGC/TGCRPhiCoincidenceMatrix.hh | 14 +- .../TrigT1TGC/TrigT1TGC/TGCSSCController.hh | 10 +- .../TrigT1/TrigT1TGC/TrigT1TGC/TGCSector.hh | 16 +- .../TrigT1TGC/TrigT1TGC/TGCSectorLogic.hh | 15 +- .../TrigT1TGC/TrigT1TGC/TGCSlaveBoard.hh | 13 +- .../TrigT1TGC/TrigT1TGC/TGCStripDoubletSB.hh | 2 +- .../TrigT1TGC/TrigT1TGC/TGCStripTripletSB.hh | 2 +- .../TrigT1TGC/TGCTileMuCoincidenceMap.hh | 10 +- .../TrigT1TGC/TrigT1TGC/TGCWireDoubletSB.hh | 2 +- .../TrigT1TGC/TrigT1TGC/TGCWireTripletSB.hh | 2 +- .../TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx | 1786 ++++++++--------- .../TrigT1TGC/src/MakeCoincidenceOut.cxx | 49 +- Trigger/TrigT1/TrigT1TGC/src/TGCArguments.cxx | 61 + .../TrigT1TGC/src/TGCDatabaseManager.cxx | 21 +- Trigger/TrigT1/TrigT1TGC/src/TGCDoubletSB.cxx | 11 +- .../TrigT1TGC/src/TGCElectronicsSystem.cxx | 21 +- .../TrigT1TGC/src/TGCInnerCoincidenceMap.cxx | 22 +- Trigger/TrigT1/TrigT1TGC/src/TGCInnerSB.cxx | 6 +- .../TrigT1TGC/src/TGCInnerTrackletSlot.cxx | 9 +- .../src/TGCInnerTrackletSlotHolder.cxx | 5 +- .../TrigT1/TrigT1TGC/src/TGCPatchPanel.cxx | 7 +- .../TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx | 27 +- .../src/TGCRPhiCoincidenceMatrix.cxx | 14 +- .../TrigT1/TrigT1TGC/src/TGCSSCController.cxx | 9 +- Trigger/TrigT1/TrigT1TGC/src/TGCSector.cxx | 45 +- .../TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx | 36 +- .../TrigT1/TrigT1TGC/src/TGCSlaveBoard.cxx | 5 +- .../TrigT1TGC/src/TGCStripTripletSB.cxx | 6 +- .../TrigT1TGC/src/TGCTileMuCoincidenceMap.cxx | 19 +- .../TrigT1/TrigT1TGC/src/TGCWireTripletSB.cxx | 6 +- 56 files changed, 1550 insertions(+), 1603 deletions(-) create mode 100644 Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCArguments.hh create mode 100644 Trigger/TrigT1/TrigT1TGC/src/TGCArguments.cxx diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuBarrelSectorLogicDataPhase1.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuBarrelSectorLogicDataPhase1.h index 634bfa73c46..4cee814b7b1 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuBarrelSectorLogicDataPhase1.h +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuBarrelSectorLogicDataPhase1.h @@ -1,4 +1,6 @@ -// Dear emacs, this is -*- c++ -*- +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ #ifndef TRIGT1INTERFACES_LVL1MUBARRELSECTORLOGICDATAPHASE1_H #define TRIGT1INTERFACES_LVL1MUBARRELSECTORLOGICDATAPHASE1_H @@ -25,17 +27,17 @@ namespace LVL1MUONIF { public: Lvl1MuBarrelSectorLogicDataPhase1(); - ~Lvl1MuBarrelSectorLogicDataPhase1() {} + virtual ~Lvl1MuBarrelSectorLogicDataPhase1() {} Lvl1MuBarrelSectorLogicDataPhase1& operator=( const Lvl1MuSectorLogicDataPhase1& right ); /// Get data in 32 bit word format - SectorLogicWord getWordFormat() const; + virtual SectorLogicWord getWordFormat() const override; /// Convert SectorLogicDataPhase1 from 32 bit word data - const Lvl1MuSectorLogicDataPhase1& convertFromWordFormat( const SectorLogicWord& ); + virtual const Lvl1MuSectorLogicDataPhase1& convertFromWordFormat( const SectorLogicWord& ) override; protected: - virtual void printOut( std::ostream& out ) const; + virtual void printOut( std::ostream& out ) const override; }; // class Lvl1MuBarrelSectorLogicDataPhase1 diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h index 07124b89fe4..d67fce5fd8a 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h @@ -1,5 +1,6 @@ - -// Dear emacs, this is -*- c++ -*- +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ #ifndef TRIGT1INTERFACES_LVL1MUCTPIINPUTPHASE1_H #define TRIGT1INTERFACES_LVL1MUCTPIINPUTPHASE1_H @@ -54,22 +55,17 @@ namespace LVL1MUONIF { enum { NumberOfForwardSector = 24 }; - static size_t idBarrelSystem() { return Barrel; } - static size_t numberOfBarrelSector() { return NumberOfBarrelSector; } - static size_t idEndcapSystem() { return Endcap; } - static size_t numberOfEndcapSector() { return NumberOfEndcapSector; } - static size_t idForwardSystem() { return Forward; } - static size_t numberOfForwardSector() { return NumberOfForwardSector; } - static size_t idSideA() { return A_side; } - static size_t idSideC() { return C_side; } + static size_t idBarrelSystem(); + static size_t numberOfBarrelSector(); + static size_t idEndcapSystem(); + static size_t numberOfEndcapSector(); + static size_t idForwardSystem(); + static size_t numberOfForwardSector(); + static size_t idSideA(); + static size_t idSideC(); + static size_t numberOfSystems(); + static size_t numberOfSector(MuonSystem system); - static size_t numberOfSystems() { return NumberOfMuonSystem; } - static size_t numberOfSector(MuonSystem system) - { - if (system == Barrel) return numberOfBarrelSector(); - else if (system == Endcap) return numberOfEndcapSector(); - else return numberOfForwardSector(); - } const Lvl1MuSectorLogicDataPhase1& getSectorLogicData( size_t systemAddress, size_t subSystemAddress, @@ -108,57 +104,21 @@ namespace LVL1MUONIF { /// Return "true" if data of specified system is filled /// for bunches other than 'current' bunch - bool hasOutOfTimeCandidates(size_t systemAddress) const - { - if ( systemAddress < NumberOfMuonSystem) { - return m_isFilledOutOfTimeCandidates[systemAddress]; - } - return false; - } - - // for testing purposes only - // void duplicateToOtherBC(int bcidOffset); + bool hasOutOfTimeCandidates(size_t systemAddress) const; friend std::ostream& operator<<( std::ostream&, const Lvl1MuCTPIInputPhase1& ); - /// To store object to file. (NOT TO BE USED ANYMORE...) - //bool storeInWordFormat( std::ofstream& fOut, bool ascii = true ); - - /// To retrieve object from file. (NOT TO BE USED ANYMORE...) - //bool retrieveInWordFormat( std::ifstream& fIn, bool ascii = true ); - private: - //bool storeInWordFormat( std::ofstream& fOut, - // bool ascii, - // size_t systemAddress, - // size_t subSystemAddress, - // size_t sectorAddress ); size_t reserve( size_t systemAddress , int bcid=0 ); size_t getSystemIndex(size_t systemAddress, - size_t subSystemAddress, - size_t sectorAddress ) const - { - if (systemAddress==0) { - return NumberOfBarrelSector*subSystemAddress+sectorAddress; - } else if (systemAddress==1) { - return NumberOfEndcapSector*subSystemAddress+sectorAddress; - } else { - return NumberOfForwardSector*subSystemAddress+sectorAddress; - } - } + size_t subSystemAddress, + size_t sectorAddress ) const; size_t getBcidIndex(size_t systemAddress, - int bcid=0) const - { - for( size_t ip=0; ip m_data[ NumberOfMuonSystem ]; }; // class Lvl1MuCTPIInputPhase1 + + inline size_t Lvl1MuCTPIInputPhase1::idBarrelSystem() { return Barrel; } + inline size_t Lvl1MuCTPIInputPhase1::numberOfBarrelSector() { return NumberOfBarrelSector; } + inline size_t Lvl1MuCTPIInputPhase1::idEndcapSystem() { return Endcap; } + inline size_t Lvl1MuCTPIInputPhase1::numberOfEndcapSector() { return NumberOfEndcapSector; } + inline size_t Lvl1MuCTPIInputPhase1::idForwardSystem() { return Forward; } + inline size_t Lvl1MuCTPIInputPhase1::numberOfForwardSector() { return NumberOfForwardSector; } + inline size_t Lvl1MuCTPIInputPhase1::idSideA() { return A_side; } + inline size_t Lvl1MuCTPIInputPhase1::idSideC() { return C_side; } + inline size_t Lvl1MuCTPIInputPhase1::numberOfSystems() { return NumberOfMuonSystem; } + inline size_t Lvl1MuCTPIInputPhase1::numberOfSector(MuonSystem system) + { + if (system == Barrel) return numberOfBarrelSector(); + else if (system == Endcap) return numberOfEndcapSector(); + else return numberOfForwardSector(); + } + inline bool Lvl1MuCTPIInputPhase1::hasOutOfTimeCandidates(size_t systemAddress) const + { + if ( systemAddress < NumberOfMuonSystem) { + return m_isFilledOutOfTimeCandidates[systemAddress]; + } + return false; + } + + inline size_t Lvl1MuCTPIInputPhase1::getSystemIndex(size_t systemAddress, + size_t subSystemAddress, + size_t sectorAddress ) const + { + if (systemAddress==0) { + return NumberOfBarrelSector*subSystemAddress+sectorAddress; + } else if (systemAddress==1) { + return NumberOfEndcapSector*subSystemAddress+sectorAddress; + } else { + return NumberOfForwardSector*subSystemAddress+sectorAddress; + } + } + inline size_t Lvl1MuCTPIInputPhase1::getBcidIndex(size_t systemAddress, + int bcid) const + { + for( size_t ip=0; ip #include +#include /** * @short Namespace for the LVL1 muon interface classes @@ -82,16 +85,16 @@ namespace LVL1MUONIF { void initialize(); bool m_2candidatesInSector; - int* m_roi; //[m_ncand] - int* m_ovl; //[m_ncand] - int* m_pt; //[m_ncand] - bool* m_2candidates; //[m_ncand] + std::vector m_roi; //[m_ncand] + std::vector m_ovl; //[m_ncand] + std::vector m_pt; //[m_ncand] + std::vector m_2candidates; //[m_ncand] int m_bcid; - int* m_charge; //[m_ncand] + std::vector m_charge; //[m_ncand] int m_id_system; - int* m_goodmf; //[m_ncand] - int* m_innercoin; //[m_ncand] - int* m_bw2or3; //[m_ncand] + std::vector m_goodmf; //[m_ncand] + std::vector m_innercoin; //[m_ncand] + std::vector m_bw2or3; //[m_ncand] }; // class Lvl1MuSectorLogicDataPhase1 diff --git a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTPPhase1.h b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTPPhase1.h index b070c66b5e0..63f4e2ff88e 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTPPhase1.h +++ b/Trigger/TrigT1/TrigT1Interfaces/TrigT1Interfaces/MuCTPICTPPhase1.h @@ -1,6 +1,5 @@ -// Dear emacs, this is -*- c++ -*- /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef TRIGT1INTERFACES_MUCTPICTPPHASE1_H #define TRIGT1INTERFACES_MUCTPICTPPHASE1_H diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuBarrelSectorLogicDataPhase1.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuBarrelSectorLogicDataPhase1.cxx index 1d5444bf1ab..6e46ed41953 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuBarrelSectorLogicDataPhase1.cxx +++ b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuBarrelSectorLogicDataPhase1.cxx @@ -1,3 +1,6 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ #include #include @@ -218,73 +221,6 @@ namespace LVL1MUONIF { out << "Bit 12 " << " >2candidates in a sector "; out << std::setw( 8 ) << m_2candidatesInSector << std::endl; - - - - - // out << "Bit 0 " << " >2candidates in a sector "; - // out << std::setw( 8 ) << m_2candidatesInSector << std::endl; - - // out << "Bit 1-5 " << " ROI<1> "; - // if ( m_roi[ 0 ] == -1 ) { - // out << std::setw( 8 ) << "NA" << std::endl; - // } else { - // out << std::setw( 8 ) << m_roi[ 0 ] << std::endl; - // } - // out << "Bit 6-7 " << " NA " << std::endl; - // out << "Bit 8-9 " << " OVL<1> "; - // if ( m_ovl[ 0 ] == 0 ) { - // out << std::setw( 8 ) << "No Ovl" << std::endl; - // } else if ( m_ovl[ 0 ] == 1 ) { - // out << std::setw( 8 ) << "Phi" << std::endl; - // } else if ( m_ovl[ 0 ] == 2 ) { - // out << std::setw( 8 ) << "Eta" << std::endl; - // } else if ( m_ovl[ 0 ] == 3 ) { - // out << std::setw( 8 ) << "Phi,Eta" << std::endl; - // } else { - // out << std::setw( 8 ) << "NA" << std::endl; - // } - // out << "Bit 10-14 " << " ROI<2> "; - // if ( m_roi[ 1 ] == -1 ) { - // out << std::setw( 8 ) << "NA" << std::endl; - // } else { - // out << std::setw( 8 ) << m_roi[ 1 ] << std::endl; - // } - // out << "Bit 15-16 " << " NA " << std::endl; - // out << "Bit 17-18 " << " OVL<2> "; - // if ( m_ovl[ 1 ] == 0 ) { - // out << std::setw( 8 ) << "No Ovl" << std::endl; - // } else if ( m_ovl[ 1 ] == 1 ) { - // out << std::setw( 8 ) << "Phi" << std::endl; - // } else if ( m_ovl[ 1 ] == 2 ) { - // out << std::setw( 8 ) << "Eta" << std::endl; - // } else if ( m_ovl[ 1 ] == 3 ) { - // out << std::setw( 8 ) << "Phi,Eta" << std::endl; - // } else { - // out << std::setw( 8 ) << "NA" << std::endl; - // } - // out << "Bit 19-21 " << " Pt1 "; - // if ( m_pt[ 0 ] == -1 ) { - // out << std::setw( 8 ) << "No Hit" << std::endl; - // } else { - // out << std::setw( 8 ) << m_pt[ 0 ] << std::endl; - // } - // out << "Bit 22-24 " << " Pt2 "; - // if ( m_pt[ 1 ] == -1 ) { - // out << std::setw( 8 ) << "No Hit" << std::endl; - // } else { - // out << std::setw( 8 ) << m_pt[ 1 ] << std::endl; - // } - // out << "Bit 25 " << " >2candidates in ROI1 "; - // out << std::setw( 8 ) << m_2candidates[ 0 ] << std::endl; - // out << "Bit 26 " << " >2candidates in ROI2 "; - // out << std::setw( 8 ) << m_2candidates[ 1 ] << std::endl; - // out << "Bit 27-29 " << " BCID "; - // out << std::setw( 8 ) << m_bcid << std::endl; - // out << "Bit 30 " << " charge in ROI1 "; - // out << std::setw( 8 ) << m_charge[ 0 ] << std::endl; - // out << "Bit 31 " << " charge in ROI2 "; - // out << std::setw( 8 ) << m_charge[ 1 ] << std::endl; } } // namespace LVL1MUONIF diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuCTPIInputPhase1.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuCTPIInputPhase1.cxx index e78bedb9a37..1467c3639a1 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuCTPIInputPhase1.cxx +++ b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuCTPIInputPhase1.cxx @@ -1,4 +1,6 @@ - +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ #include #include @@ -87,19 +89,18 @@ namespace LVL1MUONIF { size_t sectorAddress, int bcid ) { // convert to SectorLogicDataPhase1 - Lvl1MuSectorLogicDataPhase1 * pData; + std::unique_ptr pData; if ( systemAddress == Barrel ) { - pData = new Lvl1MuBarrelSectorLogicDataPhase1(); + pData = std::make_unique(); } else if ( systemAddress == Endcap ) { - pData = new Lvl1MuEndcapSectorLogicDataPhase1(); + pData = std::make_unique(); } else if ( systemAddress == Forward ) { - pData = new Lvl1MuForwardSectorLogicDataPhase1(); + pData = std::make_unique(); } else { return ; } pData->convertFromWordFormat( sectorWord ); setSectorLogicData( *pData, systemAddress, subSystemAddress, sectorAddress, bcid ); - delete pData; } ///////////// @@ -127,19 +128,19 @@ namespace LVL1MUONIF { if ( systemAddress == Barrel ) { for ( size_t id = 0; id < NumberOfBarrelSector*NumberOfMuonSubSystem; id++ ) { - std::shared_ptr barrelSect(new Lvl1MuBarrelSectorLogicDataPhase1); + std::shared_ptr barrelSect = std::make_shared(); vecSL.push_back(barrelSect); } } else if ( systemAddress == Endcap ) { for ( size_t id = 0; id < NumberOfEndcapSector*NumberOfMuonSubSystem; id++ ) { - std::shared_ptr endcapSect(new Lvl1MuEndcapSectorLogicDataPhase1); + std::shared_ptr endcapSect = std::make_shared(); vecSL.push_back(endcapSect); } } else if ( systemAddress == Forward ) { for ( size_t id = 0; id < NumberOfForwardSector*NumberOfMuonSubSystem; id++ ) { - std::shared_ptr forwardSect(new Lvl1MuForwardSectorLogicDataPhase1); + std::shared_ptr forwardSect = std::make_shared(); vecSL.push_back(forwardSect); } } @@ -173,7 +174,6 @@ namespace LVL1MUONIF { ///////////// void Lvl1MuCTPIInputPhase1::clear( size_t systemAddress ) { - std::cout << "TW: SysAd: in " << systemAddress << " size: " << m_data[systemAddress].size() << std::endl; m_data[systemAddress].clear(); } @@ -186,37 +186,6 @@ namespace LVL1MUONIF { } -//// routine for testing purposes only - // void Lvl1MuCTPIInputPhase1::duplicateToOtherBC(int bcidOffset) { - - // std::cout << "I am faking candidates for testing - do you really want that??" << std::endl; - - // std::vector dataCopy[ NumberOfMuonSystem ]; - - // for ( size_t id = 0; id < NumberOfMuonSystem; id++ ) { - // dataCopy[ id ] = m_data[ id ]; - // } - - // for (std::vector::iterator itb = dataCopy[Barrel].begin(); itb !=dataCopy[Barrel].end(); ++itb){ - // (*itb).first =bcidOffset ; - // } - // std::vector::iterator itb = m_data[Barrel].end(); - // m_data[Barrel].insert(itb, dataCopy[Barrel].begin(), dataCopy[Barrel].end()); - - // for (std::vector::iterator ite = dataCopy[Endcap].begin(); ite !=dataCopy[Endcap].end(); ++ite){ - // (*ite).first =bcidOffset ; - // } - // std::vector::iterator ite = m_data[Endcap].end(); - // m_data[Endcap].insert(ite, dataCopy[Endcap].begin(), dataCopy[Endcap].end()); - - // for (std::vector::iterator itf = dataCopy[Forward].begin(); itf !=dataCopy[Forward].end(); ++itf){ - // (*itf).first =bcidOffset ; - // } - // std::vector::iterator itf = m_data[Forward].end(); - // m_data[Forward].insert(itf, dataCopy[Forward].begin(), dataCopy[Forward].end()); - // } - - std::ostream& operator<<( std::ostream& out, const Lvl1MuCTPIInputPhase1& right ) { size_t systemAddress; diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuEndcapSectorLogicDataPhase1.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuEndcapSectorLogicDataPhase1.cxx index 450725dd26d..b0a7bfa69ba 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuEndcapSectorLogicDataPhase1.cxx +++ b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuEndcapSectorLogicDataPhase1.cxx @@ -1,4 +1,6 @@ - +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ #include #include diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuForwardSectorLogicDataPhase1.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuForwardSectorLogicDataPhase1.cxx index caf84eb3b73..97a259af17f 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuForwardSectorLogicDataPhase1.cxx +++ b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuForwardSectorLogicDataPhase1.cxx @@ -1,4 +1,6 @@ - +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ #include #include diff --git a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuSectorLogicDataPhase1.cxx b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuSectorLogicDataPhase1.cxx index 81a09d93e13..c9d98220768 100644 --- a/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuSectorLogicDataPhase1.cxx +++ b/Trigger/TrigT1/TrigT1Interfaces/src/Lvl1MuSectorLogicDataPhase1.cxx @@ -1,3 +1,6 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ #include #include @@ -11,28 +14,20 @@ namespace LVL1MUONIF { Lvl1MuSectorLogicDataPhase1::Lvl1MuSectorLogicDataPhase1() : m_2candidatesInSector ( false ), - m_roi(NULL), - m_ovl(NULL), - m_pt(NULL), - m_2candidates(NULL), m_bcid( 0 ), - m_charge(NULL), - m_id_system( -1 ), - m_goodmf(NULL), - m_innercoin(NULL), - m_bw2or3(NULL) + m_id_system( -1 ) { } Lvl1MuSectorLogicDataPhase1::~Lvl1MuSectorLogicDataPhase1() { - delete m_roi; - delete m_ovl; - delete m_pt; - delete m_charge; - delete m_2candidates; - delete m_goodmf; - delete m_innercoin; - delete m_bw2or3; + m_roi.clear(); + m_ovl.clear(); + m_pt.clear(); + m_charge.clear(); + m_2candidates.clear(); + m_goodmf.clear(); + m_innercoin.clear(); + m_bw2or3.clear(); } void Lvl1MuSectorLogicDataPhase1::initialize() @@ -40,23 +35,15 @@ namespace LVL1MUONIF { if (m_id_system == -1) return; size_t ncand = NCAND[m_id_system]; - m_roi = new int[ncand]; - m_ovl = new int[ncand]; - m_pt = new int[ncand]; - m_charge = new int[ncand]; - m_2candidates = new bool[ncand]; - m_goodmf = new int[ncand]; - m_innercoin = new int[ncand]; - m_bw2or3 = new int[ncand]; for ( size_t i = 0; i < ncand; ++i ) { - m_roi[ i ] = -1; - m_ovl[ i ] = -1; - m_pt[ i ] = -1; - m_charge[ i ] = + 1; - m_2candidates[ i ] = false; - m_goodmf[ i ] = -1; - m_innercoin[ i ] = -1; - m_bw2or3[ i ] = -1; + m_roi.push_back(-1); + m_ovl.push_back(-1); + m_pt.push_back(-1); + m_charge.push_back(+1); + m_2candidates.push_back(false); + m_goodmf.push_back(-1); + m_innercoin.push_back(-1); + m_bw2or3.push_back(-1); } } @@ -91,32 +78,6 @@ namespace LVL1MUONIF { } - // void Lvl1MuSectorLogicDataPhase1::printOut( std::ostream& out ) const { - - // out << "Bit 0 " << " >2candidates in a sector "; - // out << std::setw( 8 ) << m_2candidatesInSector << std::endl; - - // out << "Bit 1-9 " << " ROI<1> + OVL<1> "; - // out << std::setw( 8 ) << m_roi[ 0 ] << " : " << m_ovl[ 0 ] << std::endl; - // out << "Bit 10-18 " << " ROI<2> + OVL<2> "; - // out << std::setw( 8 ) << m_roi[ 1 ] << " : " << m_ovl[ 1 ] << std::endl; - // out << "Bit 19-21 " << " Pt1 "; - // out << std::setw( 8 ) << m_pt[ 0 ] << std::endl; - // out << "Bit 22-24 " << " Pt2 "; - // out << std::setw( 8 ) << m_pt[ 1 ] << std::endl; - // out << "Bit 25 " << " >2candidates in ROI1 "; - // out << std::setw( 8 ) << m_2candidates[ 0 ] << std::endl; - // out << "Bit 26 " << " >2candidates in ROI2 "; - // out << std::setw( 8 ) << m_2candidates[ 1 ] << std::endl; - // out << "Bit 27-29 " << " BCID "; - // out << std::setw( 8 ) << m_bcid << std::endl; - // out << "Bit 30 " << " charge in ROI1 "; - // out << std::setw( 8 ) << m_charge[ 0 ] << std::endl; - // out << "Bit 31 " << " charge in ROI2 "; - // out << std::setw( 8 ) << m_charge[ 1 ] << std::endl; - - // } - void Lvl1MuSectorLogicDataPhase1::clear() { m_2candidatesInSector = false; m_bcid = 0; diff --git a/Trigger/TrigT1/TrigT1RPCsteering/TrigT1RPCsteering/TrigT1RPC.h b/Trigger/TrigT1/TrigT1RPCsteering/TrigT1RPCsteering/TrigT1RPC.h index 8ad65acdf2a..8b52e5212c8 100755 --- a/Trigger/TrigT1/TrigT1RPCsteering/TrigT1RPCsteering/TrigT1RPC.h +++ b/Trigger/TrigT1/TrigT1RPCsteering/TrigT1RPCsteering/TrigT1RPC.h @@ -34,8 +34,6 @@ #include "TrigT1Interfaces/Lvl1MuCTPIInput.h" #include "TrigT1Interfaces/Lvl1MuCTPIInputPhase1.h" -#define DEFAULT_L1MuctpiStoreLocationRPC "L1MuctpiStoreRPC" - class RpcIdHelper; ///////////////////////////////////////////////////////////////////////////// @@ -50,39 +48,39 @@ public: StatusCode finalize(); private: - IntegerProperty m_fast_debug; // bits for debugging "fast" algos - - IntegerProperty m_cma_debug; // bits for debugging CMA simulation - IntegerProperty m_pad_debug; // bits for debugging PAD simulation - IntegerProperty m_sl_debug; // bits for debugging SL simulation - - IntegerProperty m_cma_ro_debug; // bits for debugging CMA readout - IntegerProperty m_pad_ro_debug; // bits for debugging PAD readout - IntegerProperty m_rx_ro_debug; // bits for debugging Rx readout - IntegerProperty m_sl_ro_debug; // bits for debugging SL readout - - IntegerProperty m_cma_rostruct_debug; // bits for debugging CMA ro struct - IntegerProperty m_pad_rostruct_debug; // bits for debugging PAD ro struct - IntegerProperty m_rx_rostruct_debug; // bits for debugging Rx ro struct - IntegerProperty m_sl_rostruct_debug; // bits for debugging SL ro struct - - BooleanProperty m_geometric_algo; // flag to activate fast simu - BooleanProperty m_logic_emulation; // flag to activate logic emulation - BooleanProperty m_hardware_emulation; // flag to activate hardware emula. - BooleanProperty m_bytestream_production; // flag to produce RPC byte stream - StringProperty m_bytestream_file; // name for the bytestream file - - BooleanProperty m_data_detail; // flag to printout detailed INFO on - // processed data - - IntegerProperty m_firstBC_to_MUCTPI; // First BC to be sent to muctpi, wrt to BC0, e.g. -1 meanst the BC before the trigger Bc - IntegerProperty m_lastBC_to_MUCTPI; // First BC to be sent to muctpi, wrt to BC0, e.g. -1 meanst the BC before the trigger Bc - - BooleanProperty m_useRun3Config; // flag for using switch between Run3 and Run2 configurations - + IntegerProperty m_fast_debug{this,"FastDebug",0}; // bits for debugging "fast" algos + + IntegerProperty m_cma_debug{this,"CMAdebug",0}; // bits for debugging CMA simulation + IntegerProperty m_pad_debug{this,"PADdebug",0}; // bits for debugging PAD simulation + IntegerProperty m_sl_debug{this,"SLdebug",0}; // bits for debugging SL simulation + + IntegerProperty m_cma_ro_debug{this,"CMArodebug",0}; // bits for debugging CMA readout + IntegerProperty m_pad_ro_debug{this,"PADrodebug",0}; // bits for debugging PAD readout + IntegerProperty m_rx_ro_debug{this,"RXrodebug",0}; // bits for debugging Rx readout + IntegerProperty m_sl_ro_debug{this,"SLrodebug",0}; // bits for debugging SL readout + + IntegerProperty m_cma_rostruct_debug{this,"CMArostructdebug",0}; // bits for debugging CMA ro struct + IntegerProperty m_pad_rostruct_debug{this,"PADrostructdebug",0}; // bits for debugging PAD ro struct + IntegerProperty m_rx_rostruct_debug{this,"RXrostructdebug",0}; // bits for debugging Rx ro struct + IntegerProperty m_sl_rostruct_debug{this,"SLrostructdebug",0}; // bits for debugging SL ro struct + + BooleanProperty m_geometric_algo{this,"Geometric",false}; // flag to activate fast simu + BooleanProperty m_logic_emulation{this,"Logic",false}; // flag to activate logic emulation + BooleanProperty m_hardware_emulation{this,"Hardware",true}; // flag to activate hardware emula. + BooleanProperty m_bytestream_production{this,"RPCbytestream",false}; // flag to produce RPC byte stream + StringProperty m_bytestream_file{this,"RPCbytestreamFile",""}; // name for the bytestream file + + BooleanProperty m_data_detail{this,"DataDetail",false}; // flag to printout detailed INFO on + // processed data + + IntegerProperty m_firstBC_to_MUCTPI{this,"firstBC_to_MUCTPI",-1}; // First BC to be sent to muctpi, wrt to BC0, e.g. -1 meanst the BC before the trigger Bc + IntegerProperty m_lastBC_to_MUCTPI{this,"lastBC_to_MUCTPI",1}; // First BC to be sent to muctpi, wrt to BC0, e.g. -1 meanst the BC before the trigger Bc + + BooleanProperty m_useRun3Config{this,"useRun3Config",false}; // flag for using switch between Run3 and Run2 configurations + StatusCode fill_RPCdata(RPCsimuData&); - -private: + + private: // ActiveStoreSvc* m_activeStore; @@ -93,8 +91,8 @@ private: const IRPCcablingSvc* m_cabling; SG::ReadHandleKey m_rpcDigitKey{this, "RPCDigitContainer", "RPC_DIGITS", "RPC Digit Input Container"}; - SG::WriteHandleKey m_muctpiKey{this, "MuctpiLocationRPC", DEFAULT_L1MuctpiStoreLocationRPC, "Location of muctpi for Rpc"}; - SG::WriteHandleKey m_muctpiPhase1Key{this, "MuctpiPhase1LocationRPC", DEFAULT_L1MuctpiStoreLocationRPC, "Location of muctpiPhase1 for Rpc"}; + SG::WriteHandleKey m_muctpiKey{this, "MuctpiLocationRPC", "L1MuctpiStoreRPC", "Location of muctpi for Rpc"}; + SG::WriteHandleKey m_muctpiPhase1Key{this, "MuctpiPhase1LocationRPC", "L1MuctpiStoreRPC", "Location of muctpiPhase1 for Rpc"}; }; diff --git a/Trigger/TrigT1/TrigT1RPCsteering/src/TrigT1RPC.cxx b/Trigger/TrigT1/TrigT1RPCsteering/src/TrigT1RPC.cxx index 3f52139c646..9025e2ead3e 100755 --- a/Trigger/TrigT1/TrigT1RPCsteering/src/TrigT1RPC.cxx +++ b/Trigger/TrigT1/TrigT1RPCsteering/src/TrigT1RPC.cxx @@ -54,34 +54,6 @@ TrigT1RPC::TrigT1RPC(const std::string& name, ISvcLocator* pSvcLocator) : m_cabling_getter("RPCcablingServerSvc/RPCcablingServerSvc","TrigT1RPC"), m_cabling(0) { - declareProperty ( "FastDebug", m_fast_debug=0 ); - declareProperty ( "Geometric", m_geometric_algo=false ); - declareProperty ( "Hardware", m_hardware_emulation=true ); - declareProperty ( "Logic", m_logic_emulation=false ); - declareProperty ( "RPCbytestream", m_bytestream_production=false ); - declareProperty ( "RPCbytestreamFile", m_bytestream_file="" ); - - declareProperty ( "DataDetail", m_data_detail=false ); - - declareProperty ( "CMAdebug", m_cma_debug=0 ); - declareProperty ( "PADdebug", m_pad_debug=0 ); - declareProperty ( "SLdebug", m_sl_debug=0 ); - - declareProperty ( "CMArodebug", m_cma_ro_debug=0 ); - declareProperty ( "PADrodebug", m_pad_ro_debug=0 ); - declareProperty ( "RXrodebug", m_rx_ro_debug=0 ); - declareProperty ( "SLrodebug", m_sl_ro_debug=0 ); - - declareProperty ( "CMArostructdebug", m_cma_rostruct_debug=0 ); - declareProperty ( "PADrostructdebug", m_pad_rostruct_debug=0 ); - declareProperty ( "RXrostructdebug", m_rx_rostruct_debug=0 ); - declareProperty ( "SLrostructdebug", m_sl_rostruct_debug=0 ); - - declareProperty ( "firstBC_to_MUCTPI", m_firstBC_to_MUCTPI=-1 ); - declareProperty ( "lastBC_to_MUCTPI", m_lastBC_to_MUCTPI=1 ); - - declareProperty ( "useRun3Config", m_useRun3Config=false ); - m_MuonMgr=0; m_rpcId=0; } @@ -105,10 +77,8 @@ StatusCode TrigT1RPC::initialize(){ ATH_CHECK(m_rpcDigitKey.initialize()); - if(m_useRun3Config) - ATH_CHECK(m_muctpiPhase1Key.initialize()); - else - ATH_CHECK(m_muctpiKey.initialize()); + ATH_CHECK(m_muctpiPhase1Key.initialize(m_useRun3Config)); + ATH_CHECK(m_muctpiKey.initialize(!m_useRun3Config)); return StatusCode::SUCCESS; } diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h index a8895669cfe..b1c42e74b14 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h @@ -31,17 +31,18 @@ #include "StoreGate/ReadCondHandle.h" #include "MuonCondSvc/TGCTriggerData.h" +#include "MuonDigitContainer/TgcDigit.h" +#include "TrigConfInterfaces/ILVL1ConfigSvc.h" + +#include "TrigT1TGC/TGCArguments.hh" + class TgcRdo; class TgcRawData; class ITGCcablingSvc; class TgcDigitContainer; -namespace TrigConf { - class ILVL1ConfigSvc; -} - namespace LVL1TGCTrigger { - + /** * * @short Dump LVL1TGCTrigger::LVL1TGCTrigger for main algorithm @@ -59,129 +60,138 @@ namespace LVL1TGCTrigger { * * */ -class TGCSector; -class TGCSLSelectorOut; -class TGCElectronicsSystem; -class TGCTimingManager; -class TGCDatabaseManager; -class TGCEvent; - -class LVL1TGCTrigger : public AthAlgorithm -{ - public: - - /** standard constructor and destructor for algorithms - */ - LVL1TGCTrigger( const std::string& name, ISvcLocator* pSvcLocator ) ; - ~LVL1TGCTrigger(); + class TGCSector; + class TGCSLSelectorOut; + class TGCElectronicsSystem; + class TGCTimingManager; + class TGCDatabaseManager; + class TGCEvent; - // standard algorithm methods: - StatusCode initialize() ; - StatusCode execute() ; - StatusCode finalize() ; - - private: - // Process one bunch - StatusCode processOneBunch(const DataHandle& , - LVL1MUONIF::Lvl1MuCTPIInput*, - LVL1MUONIF::Lvl1MuCTPIInputPhase1* - ); - void doMaskOperation(const DataHandle& ,std::map& ); - void fillTGCEvent(std::map& , TGCEvent&); - - // Fill TMDB event data - StatusCode fillTMDB(); - - // record bare-RDO for LowPT coincidences (on m_OutputTgcRDO=True): - void recordRdoSLB(TGCSector *); - - // record bare-RDO for HighPT coincidences (on OutputTgcRDO=True): - void recordRdoHPT(TGCSector *); - - // record bare-RDO for Inner coincidences (on OutputTgcRDO=True): - void recordRdoInner(TGCSector *); + class LVL1TGCTrigger : public AthAlgorithm + { + public: + + /** standard constructor and destructor for algorithms + */ + LVL1TGCTrigger( const std::string& name, ISvcLocator* pSvcLocator ) ; + ~LVL1TGCTrigger(); + + // standard algorithm methods: + StatusCode initialize() ; + StatusCode execute() ; + StatusCode finalize() ; + + private: + StatusCode processOneBunch(const DataHandle&, + LVL1MUONIF::Lvl1MuCTPIInput*, + LVL1MUONIF::Lvl1MuCTPIInputPhase1*); + void doMaskOperation(const DataHandle& ,std::map& ); + void fillTGCEvent(std::map& , TGCEvent&); + + // Fill TMDB event data + StatusCode fillTMDB(); + + // record bare-RDO for LowPT coincidences (on m_OutputTgcRDO=True): + void recordRdoSLB(TGCSector *); + + // record bare-RDO for HighPT coincidences (on OutputTgcRDO=True): + void recordRdoHPT(TGCSector *); + + // record bare-RDO for Inner coincidences (on OutputTgcRDO=True): + void recordRdoInner(TGCSector *); + + // record bare-RDO for R-phi coincidences (on m_OutputTgcRDO=True): + void recordRdoSL(TGCSector *, unsigned int ); + + std::map, TgcRdo*> m_tgcrdo; + + // Retrieve Masked channel list + StatusCode getMaskedChannel(); + std::map m_MaskedChannel; + + // pointers to various external services + const ITGCcablingSvc* m_cabling ; + + // useful functions + int getCharge(int dR, int Zdir); + void extractFromString(std::string, std::vector&); + bool addRawData(TgcRawData *); + int getLPTTypeInRawData(int type); + void FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData* sldata, + const TGCSLSelectorOut *selectorOut, + unsigned int subsystem); + void FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicDataPhase1* sldata, + const TGCSLSelectorOut *selectorOut, + unsigned int subsystem); + + + // Properties + + // Location of LVL1MUONIF::Lvl1MuSectorLogicData (output from SL) + StringProperty m_keyMuCTPIInput_TGC{this,"MuCTPIInput_TGC","L1MuctpiStoreTGC"}; + + // Version of Coincidence Window + StringProperty m_VerCW{this,"VersionCW","00_07_0022"}; + + // Location of TgcDigitContainer + StringProperty m_keyTgcDigit{this,"InputData_perEvent","TGC_DIGITS"}; + + // Location of TileMuonReceiverContainer + StringProperty m_keyTileMu{this,"TileMuRcv_Input","TileMuRcvCnt"}; + + StringProperty m_MaskFileName{this,"MaskFileName",""}; //!< property, see @link LVL1TGCTrigger::LVL1TGCTrigger @endlink + StringProperty m_MaskFileName12{this,"MaskFileName12",""}; //!< property, see @link LVL1TGCTrigger::LVL1TGCTrigger @endlink + ShortProperty m_CurrentBunchTag{this,"CurrentBunchTag",TgcDigit::BC_CURRENT}; //!< property, see @link LVL1TGCTrigger::LVL1TGCTrigger @endlink + BooleanProperty m_ProcessAllBunches{this,"ProcessAllBunhes",true}; + BooleanProperty m_OutputTgcRDO{this,"OutputTgcRDO",true}; //!< property, see @link LVL1TGCTrigger::LVL1TGCTrigger @endlink + + // expert usage + BooleanProperty m_STRICTWD{this,"STRICTWD",false}; + BooleanProperty m_STRICTWT{this,"STRICTWT",false}; + BooleanProperty m_STRICTSD{this,"STRICTSD",false}; + BooleanProperty m_STRICTST{this,"STRICTST",false}; + BooleanProperty m_OUTCOINCIDENCE{this,"OUTCOINCIDENCE",false}; //!< property, see @link LVL1TGCTrigger::LVL1TGCTrigger @endlink + BooleanProperty m_SINGLEBEAM{this,"SINGLEBEAM",false}; // for the single beam run + BooleanProperty m_MUHALO{this,"MUHALO",false}; // flag for including MUHALO (i.e. 2-st coin ) in pt=1 + BooleanProperty m_SHPTORED{this,"SHPTORED",true}; // flag for E1/E2 chamber ORED in Strip HPT + BooleanProperty m_USEINNER{this,"USEINNER",true}; // flag for using Inner Station for SL + BooleanProperty m_INNERVETO{this,"INNERVETO",true}; // flag for using VETO by Inner Station for SL + BooleanProperty m_FULLCW{this,"FULLCW",true}; // flag for using differne CW for each octant + BooleanProperty m_TILEMU{this,"TILEMU",false}; // flag for using TileMu + BooleanProperty m_useRun3Config{this,"useRun3Config",false}; // flag for using switch between Run3 and Run2 algorithms + + + uint16_t m_bctagInProcess; + + TGCDatabaseManager *m_db; + ServiceHandle m_configSvc{this, "LVL1ConfigSvc", "TrigConf::LVL1ConfigSvc/LVL1ConfigSvc", ""}; + TGCTimingManager *m_TimingManager; + TGCElectronicsSystem *m_system; + + int m_nEventInSector; + + // EIFI-SL connection + TGCInnerTrackletSlotHolder m_innerTrackletSlotHolder; + + // getCabling method + StatusCode getCabling(); + + // log + mutable MsgStream m_log; + bool m_debuglevel; + + TGCArguments m_tgcArgs; + TGCArguments* tgcArgs(); + + SG::ReadCondHandleKey m_readCondKey{this,"ReadCondKey","TGCTriggerData"}; + SG::WriteHandleKey m_muctpiKey{this, "MuctpiLocationTGC", "L1MuctpiStoreTGC", "Location of muctpi for Tgc"}; + SG::WriteHandleKey m_muctpiPhase1Key{this, "MuctpiPhase1LocationTGC", "L1MuctpiStoreTGC", "Location of muctpiPhase1 for Tgc"}; + }; // class LVL1TGCTrigger + + inline TGCArguments* LVL1TGCTrigger::tgcArgs() { + return &m_tgcArgs; + } - // record bare-RDO for R-phi coincidences (on m_OutputTgcRDO=True): - void recordRdoSL(TGCSector *, unsigned int ); - - std::map, TgcRdo*> m_tgcrdo; - - // Retrieve Masked channel list - StatusCode getMaskedChannel(); - std::map m_MaskedChannel; - - // pointers to various external services - const ITGCcablingSvc* m_cabling ; - - // useful functions - int getCharge(int dR, int Zdir); - void extractFromString(std::string, std::vector&); - bool addRawData(TgcRawData *); - int getLPTTypeInRawData(int type); - void FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData* sldata, - const TGCSLSelectorOut *selectorOut, - unsigned int subsystem); - - - - // Properties - - // Location of LVL1MUONIF::Lvl1MuSectorLogicData (output from SL) - StringProperty m_keyMuCTPIInput_TGC; - - // Version of Coincidence Window - StringProperty m_VerCW; - - // Location of TgcDigitContainer - StringProperty m_keyTgcDigit ; - - // Location of TileMuonReceiverContainer - StringProperty m_keyTileMu ; - - StringProperty m_MaskFileName ; //!< property, see @link LVL1TGCTrigger::LVL1TGCTrigger @endlink - StringProperty m_MaskFileName12 ; //!< property, see @link LVL1TGCTrigger::LVL1TGCTrigger @endlink - ShortProperty m_CurrentBunchTag; //!< property, see @link LVL1TGCTrigger::LVL1TGCTrigger @endlink - BooleanProperty m_ProcessAllBunches; - BooleanProperty m_OutputTgcRDO; //!< property, see @link LVL1TGCTrigger::LVL1TGCTrigger @endlink - - // expert usage - BooleanProperty m_STRICTWD; - BooleanProperty m_STRICTWT; - BooleanProperty m_STRICTSD; - BooleanProperty m_STRICTST; - BooleanProperty m_OUTCOINCIDENCE; //!< property, see @link LVL1TGCTrigger::LVL1TGCTrigger @endlink - BooleanProperty m_SINGLEBEAM; // for the single beam run - BooleanProperty m_MUHALO; // flag for including MUHALO (i.e. 2-st coin ) in pt=1 - BooleanProperty m_SHPTORED; // flag for E1/E2 chamber ORED in Strip HPT - BooleanProperty m_USEINNER; // flag for using Inner Station for SL - BooleanProperty m_INNERVETO; // flag for using VETO by Inner Station for SL - BooleanProperty m_FULLCW; // flag for using differne CW for each octant - BooleanProperty m_TILEMU; // flag for using TileMu - BooleanProperty m_useRun3Config; // flag for using switch between Run3 and Run2 algorithms - - - uint16_t m_bctagInProcess; - - TGCDatabaseManager *m_db; - ServiceHandle m_configSvc; - TGCTimingManager *m_TimingManager; - TGCElectronicsSystem *m_system; - - int m_nEventInSector; - - // EIFI-SL connection - TGCInnerTrackletSlotHolder m_innerTrackletSlotHolder; - - // getCabling method - StatusCode getCabling(); - - // log - bool m_debuglevel; - - SG::ReadCondHandleKey m_readCondKey; -}; // class LVL1TGCTrigger - - } // namespace LVL1TGCTrigger #endif // not TRIGT1TGC_LVL1TGCTRIGGER_H diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/MakeCoincidenceOut.h b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/MakeCoincidenceOut.h index 72adb7c48c9..5341d770348 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/MakeCoincidenceOut.h +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/MakeCoincidenceOut.h @@ -13,6 +13,7 @@ #include "GaudiKernel/ToolHandle.h" #include "GaudiKernel/NTuple.h" #include "MuonIdHelpers/MuonIdHelperTool.h" +#include "TrigT1TGC/TGCCoincidence.hh" namespace LVL1TGCTrigger { @@ -37,8 +38,8 @@ namespace LVL1TGCTrigger { StatusCode bookHistos(); private: - StringProperty m_key; - BooleanProperty m_WriteMCtruth; + StringProperty m_key{this,"InputData_perEvent",""}; + BooleanProperty m_WriteMCtruth{this,"WriteMCtruth",true}; ToolHandle m_muonIdHelperTool{this, "idHelper", "Muon::MuonIdHelperTool/MuonIdHelperTool", "Handle to the MuonIdHelperTool"}; //NTuple::Tuple* m_ntuplePtr; @@ -52,6 +53,9 @@ namespace LVL1TGCTrigger { NTuple::Item m_nmuMC; NTuple::Array m_idMC; NTuple::Array m_ptMC, m_etaMC, m_phiMC; + + bool m_OUTCOINCIDENCE; + TGCCoincidences * m_TGCCOIN; }; // class MakeCoincidenceOut diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCArguments.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCArguments.hh new file mode 100644 index 00000000000..00a6ce58e90 --- /dev/null +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCArguments.hh @@ -0,0 +1,67 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ +// TGCArguments.h +#ifndef TRIGT1TGC_TGCARGUMENTS_HH +#define TRIGT1TGC_TGCARGUMENTS_HH + +#include "TrigT1TGC/TGCCoincidence.hh" + +namespace LVL1TGCTrigger { + + class TGCArguments{ + public: + TGCArguments(); + ~TGCArguments(); + + void set_STRICTWD(bool v); + void set_STRICTWT(bool v); + void set_STRICTSD(bool v); + void set_STRICTST(bool v); + void set_OUTCOINCIDENCE(bool v); + void set_TGCCOIN(TGCCoincidences* v); + void set_DEBUGLEVEL(bool v); + void set_SHPT_ORED(bool v); + void set_USE_INNER(bool v); + void set_INNER_VETO(bool v); + void set_TILE_MU(bool v); + void set_USE_CONDDB(bool v); + void set_useRun3Config(bool v); + + bool STRICTWD() const; + bool STRICTWT() const; + bool STRICTSD() const; + bool STRICTST() const; + bool OUTCOINCIDENCE() const; + TGCCoincidences* TGCCOIN() const; + bool DEBUGLEVEL() const; + bool SHPT_ORED() const; + bool USE_INNER() const; + bool INNER_VETO() const; + bool TILE_MU() const; + bool USE_CONDDB() const; + bool useRun3Config() const; + + void clear(); + + private: + bool m_STRICTWD; + bool m_STRICTWT; + bool m_STRICTSD; + bool m_STRICTST; + bool m_OUTCOINCIDENCE; + TGCCoincidences * m_TGCCOIN; + bool m_DEBUGLEVEL; + bool m_SHPT_ORED; + bool m_USE_INNER; + bool m_INNER_VETO; + bool m_TILE_MU; + bool m_USE_CONDDB; + bool m_useRun3Config; + }; + +} // namespace LVL1TGCTrigger + + +#endif + diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCDatabaseManager.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCDatabaseManager.hh index 6fd324bfd8d..6f68f9bf2b9 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCDatabaseManager.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCDatabaseManager.hh @@ -9,6 +9,7 @@ #include #include +#include "TrigT1TGC/TGCArguments.hh" #include "TrigT1TGC/TGCNumbering.hh" #include "TrigT1TGC/TGCElectronicsSystem.hh" #include "TrigT1TGC/TGCConnectionPPToSB.hh" @@ -40,8 +41,9 @@ public: TGCConnectionInPP* getConnectionInPP(TGCPatchPanel* patchPanel) const; void addConnectionInPP(const TGCPatchPanel* patchPanel, const TGCConnectionInPP* connectionInPP); - TGCDatabaseManager(); - TGCDatabaseManager(const SG::ReadCondHandleKey& readCondKey, + TGCDatabaseManager(TGCArguments*); + TGCDatabaseManager(TGCArguments*, + const SG::ReadCondHandleKey& readCondKey, const std::string& version, bool flag=false); ~TGCDatabaseManager(); TGCDatabaseManager(const TGCDatabaseManager& right); @@ -52,6 +54,7 @@ public: static const std::string& getFilename(int type); static const std::vector splitCW(const std::string& input, char delimiter); + TGCArguments* tgcArgs() const; private: TGCRPhiCoincidenceMap* m_mapRphi[NumberOfSide][NumberOfOctant]; @@ -61,8 +64,16 @@ private: TGCConnectionASDToPP* m_ASDToPP[NumberOfRegionType][NumberOfPatchPanelType][TotalNumForwardBackwardType]; std::map > m_patchPanelToConnectionInPP; + + TGCArguments* m_tgcArgs; + }; +inline +TGCArguments* TGCDatabaseManager::tgcArgs() const { + return m_tgcArgs; +} + inline TGCRPhiCoincidenceMap* TGCDatabaseManager::getRPhiCoincidenceMap(int sideId, int octantId) const { diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCDoubletSB.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCDoubletSB.hh index 01e5634946c..44dbb2d062d 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCDoubletSB.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCDoubletSB.hh @@ -17,7 +17,7 @@ class TGCHitPattern; class TGCDoubletSB: public TGCSlaveBoard { public: - TGCDoubletSB(); + TGCDoubletSB( TGCArguments* ); virtual ~TGCDoubletSB(); protected: diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCElectronicsSystem.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCElectronicsSystem.hh index 578d668730b..93fc3c66ba9 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCElectronicsSystem.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCElectronicsSystem.hh @@ -5,7 +5,7 @@ #ifndef TGCElectronicsSystem_hh #define TGCElectronicsSystem_hh -//#include "TrigT1TGC/TGCNumbering.hh" +#include "TrigT1TGC/TGCArguments.hh" #include "TrigT1TGC/TGCReadoutIndex.h" namespace LVL1TGCTrigger { @@ -41,12 +41,14 @@ public: }; TGCTMDB* getTMDB() const {return m_tmdb;} - TGCElectronicsSystem(TGCDatabaseManager* database, bool isAtlas=true); + TGCElectronicsSystem(TGCArguments*, TGCDatabaseManager* database, bool isAtlas=true); ~TGCElectronicsSystem(); + TGCArguments* tgcArgs() const { return m_tgcArgs;} + private: // hide default/copy constructor and assignment operator - TGCElectronicsSystem(); + TGCElectronicsSystem( TGCArguments* ); TGCElectronicsSystem(const TGCElectronicsSystem& right); TGCElectronicsSystem& operator=(const TGCElectronicsSystem& right); @@ -54,6 +56,7 @@ private: TGCDatabaseManager* m_DB; TGCSector* m_sector[NumberOfSide][NumberOfOctant][NumberOfModule]; TGCTMDB* m_tmdb; + TGCArguments* m_tgcArgs; }; diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerCoincidenceMap.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerCoincidenceMap.hh index 19082dc495e..6e305698f1a 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerCoincidenceMap.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerCoincidenceMap.hh @@ -14,13 +14,15 @@ #include "StoreGate/ReadCondHandle.h" #include "MuonCondSvc/TGCTriggerData.h" +#include "TrigT1TGC/TGCArguments.hh" + namespace LVL1TGCTrigger { class TGCInnerCoincidenceMap { public: - TGCInnerCoincidenceMap(const SG::ReadCondHandleKey& readCondKey); - TGCInnerCoincidenceMap(const SG::ReadCondHandleKey& readCondKey, + TGCInnerCoincidenceMap(TGCArguments*, const SG::ReadCondHandleKey& readCondKey); + TGCInnerCoincidenceMap(TGCArguments*, const SG::ReadCondHandleKey& readCondKey, const std::string& version,int sideId=0); virtual ~TGCInnerCoincidenceMap(); @@ -54,6 +56,8 @@ public: bool readMap(); void dumpMap() const; + TGCArguments* tgcArgs() const; + protected: enum {N_EndcapSector=48}; @@ -75,9 +79,14 @@ private: int m_side; bool m_fullCW; + TGCArguments* m_tgcArgs; + const SG::ReadCondHandleKey& m_readCondKey; }; +inline TGCArguments* TGCInnerCoincidenceMap::tgcArgs() const { + return m_tgcArgs; +} inline const std::string& TGCInnerCoincidenceMap::getVersion() const diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerSB.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerSB.hh index ecc194e7e3c..f234f72cee8 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerSB.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerSB.hh @@ -14,7 +14,7 @@ const int NumberOfInnerSBData = 8; class TGCInnerSB: public TGCSlaveBoard { public: - TGCInnerSB(); + TGCInnerSB( TGCArguments* ); virtual ~TGCInnerSB(){}; protected: diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerTrackletSlot.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerTrackletSlot.hh index 3d06ddc70d3..03f325a6e7f 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerTrackletSlot.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerTrackletSlot.hh @@ -5,6 +5,8 @@ #ifndef TGCInnerTrackletSlot_hh #define TGCInnerTrackletSlot_hh +#include "TrigT1TGC/TGCArguments.hh" + namespace LVL1TGCTrigger { class TGCInnerTrackletSlot { public: @@ -37,6 +39,9 @@ namespace LVL1TGCTrigger { NUMBER_OF_TRIGGER_BITS = 4 }; + const TGCArguments* tgcArgs() const; + void setTgcArguments( const TGCArguments* ); + private: int m_sideId; // Side A or Side C // slot01 - slot24 @@ -44,9 +49,14 @@ namespace LVL1TGCTrigger { int m_slotId; // Trigger bits from EI/FI, TRIG0-TRIG3 // https://twiki.cern.ch/twiki/pub/Main/TgcDocument/celladdress2_asic_rev2.pdf - bool m_triggerBit[NUMBER_OF_REGIONS][NUMBER_OF_READOUTS][NUMBER_OF_TRIGGER_BITS]; + bool m_triggerBit[NUMBER_OF_REGIONS][NUMBER_OF_READOUTS][NUMBER_OF_TRIGGER_BITS]; + + const TGCArguments* m_tgcArgs; }; + inline const TGCArguments* TGCInnerTrackletSlot::tgcArgs() const { + return m_tgcArgs; + } } //end of namespace bracket #endif // TGCInnerTrackletSlot_hh diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerTrackletSlotHolder.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerTrackletSlotHolder.hh index 276d7f79721..22620501136 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerTrackletSlotHolder.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCInnerTrackletSlotHolder.hh @@ -6,6 +6,7 @@ #define TGCInnerTrackletSlotHolder_hh #include "TrigT1TGC/TGCInnerTrackletSlot.hh" +#include "TrigT1TGC/TGCArguments.hh" namespace LVL1TGCTrigger { // class TGCInnerTrackletSlot; @@ -13,7 +14,7 @@ namespace LVL1TGCTrigger { class TGCInnerTrackletSlotHolder { public: /** Constructor */ - TGCInnerTrackletSlotHolder(); + TGCInnerTrackletSlotHolder( TGCArguments* ); /** Destructor */ ~TGCInnerTrackletSlotHolder() {}; @@ -36,10 +37,15 @@ namespace LVL1TGCTrigger { // slot23, slot24, slot01, slot02 go to A01 phi0/phi1 Endcap SL }; + TGCArguments* tgcArgs() const; + private: TGCInnerTrackletSlot m_innerTrackletSlot[NUMBER_OF_SIDES][NUMBER_OF_SLOTS]; + TGCArguments* m_tgcArgs; }; - + inline TGCArguments* TGCInnerTrackletSlotHolder::tgcArgs() const { + return m_tgcArgs; + } } //end of namespace bracket #endif // TGCInnerTrackletSlotHolder_hh diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCPatchPanel.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCPatchPanel.hh index 7307a667ca7..62d1668d490 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCPatchPanel.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCPatchPanel.hh @@ -6,6 +6,7 @@ #ifndef TGCPatchPanel_hh #define TGCPatchPanel_hh +#include "TrigT1TGC/TGCArguments.hh" #include "TrigT1TGC/TGCConnectionPPToSB.hh" #include "TrigT1TGC/TGCNumbering.hh" #include @@ -69,12 +70,14 @@ public: void connect(); std::string getTypeName(int typeIn) const; - TGCPatchPanel(); + TGCPatchPanel( TGCArguments* ); ~TGCPatchPanel(); TGCPatchPanel(const TGCPatchPanel& right); TGCPatchPanel& operator=(const TGCPatchPanel& right); + TGCArguments* tgcArgs() const; + private: void showResult() const; void doBID(); @@ -98,8 +101,14 @@ private: TGCBIDOut* m_BIDOut[NChOfPPOutputConnector][MaxNumberOfConnector][NumberOfBunchKeptInPP]; TGCPatchPanel* m_PPAdj[2]; // pointer to adjacent board. TGCConnectionInPP* m_connectionInPP; + + TGCArguments* m_tgcArgs; + }; + inline TGCArguments* TGCPatchPanel::tgcArgs() const { + return m_tgcArgs; + } } //end of namespace bracket diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCRPhiCoincidenceMap.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCRPhiCoincidenceMap.hh index b3658e9e558..a02227a9e11 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCRPhiCoincidenceMap.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCRPhiCoincidenceMap.hh @@ -12,6 +12,7 @@ #include "GaudiKernel/ToolHandle.h" #include "StoreGate/ReadCondHandleKey.h" #include "MuonCondSvc/TGCTriggerData.h" +#include "TrigT1TGC/TGCArguments.hh" namespace LVL1TGCTrigger { @@ -28,7 +29,8 @@ public: bool isFullCW() const; void setFullCW( bool val); - TGCRPhiCoincidenceMap(const SG::ReadCondHandleKey& readCondKey, + TGCRPhiCoincidenceMap(TGCArguments*, + const SG::ReadCondHandleKey& readCondKey, const std::string& version, int sideId=0, int octantId=0); @@ -40,6 +42,8 @@ public: bool readMap(); + TGCArguments* tgcArgs() const; + private: // hide default constructor TGCRPhiCoincidenceMap() = delete; @@ -64,10 +68,16 @@ private: int m_side; int m_octant; bool m_fullCW; + + TGCArguments* m_tgcArgs; const SG::ReadCondHandleKey& m_readCondKey; }; +inline +TGCArguments* TGCRPhiCoincidenceMap::tgcArgs() const { + return m_tgcArgs; +} inline const std::string& TGCRPhiCoincidenceMap::getVersion() const diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCRPhiCoincidenceMatrix.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCRPhiCoincidenceMatrix.hh index bae81a4a722..382863e3eb3 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCRPhiCoincidenceMatrix.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCRPhiCoincidenceMatrix.hh @@ -7,6 +7,7 @@ #include "TrigT1TGC/TGCSSCControllerOut.hh" #include "TrigT1TGC/TGCRPhiCoincidenceMap.hh" +#include "TrigT1TGC/TGCArguments.hh" namespace LVL1TGCTrigger { @@ -24,12 +25,14 @@ public: void clear(); TGCRPhiCoincidenceOut* doCoincidence(); - TGCRPhiCoincidenceMatrix(const TGCSectorLogic* sL=0); + TGCRPhiCoincidenceMatrix(TGCArguments*, const TGCSectorLogic* sL=0); virtual ~TGCRPhiCoincidenceMatrix(); TGCRPhiCoincidenceMatrix(const TGCRPhiCoincidenceMatrix& right); TGCRPhiCoincidenceMatrix& operator=(const TGCRPhiCoincidenceMatrix& right); - + + TGCArguments* tgcArgs() const ; + private: enum {MaxNPhiHit = 2}; @@ -47,8 +50,15 @@ private: int m_phi[MaxNPhiHit]; int m_dPhi[MaxNPhiHit]; int m_ptPhi[MaxNPhiHit]; + + TGCArguments* m_tgcArgs; }; +inline +TGCArguments* TGCRPhiCoincidenceMatrix::tgcArgs() const { + return m_tgcArgs; +} + } //end of namespace bracket #endif // TGCRPhiCoincidenceMatrix_hh diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSSCController.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSSCController.hh index 154899a0a27..70c942c312e 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSSCController.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSSCController.hh @@ -7,6 +7,7 @@ #include "TrigT1TGC/TGCHighPtChipOut.hh" #include "TrigT1TGC/TGCSSCControllerOut.hh" +#include "TrigT1TGC/TGCArguments.hh" namespace LVL1TGCTrigger { class TGCSectorLogic; @@ -15,7 +16,7 @@ class TGCSectorLogic; class TGCSSCController { public: - TGCSSCController( const TGCSectorLogic* sL=0); + TGCSSCController( TGCArguments*, const TGCSectorLogic* sL=0 ); virtual ~TGCSSCController(){} TGCSSCControllerOut* distribute(TGCHighPtChipOut* wire[], TGCHighPtChipOut* strip); @@ -23,6 +24,8 @@ public: int getNumberOfWireHighPtBoard(){return m_NumberOfWireHighPtBoard;}; void setRegion(TGCRegionType regionIn){ m_region=regionIn;}; + TGCArguments* tgcArgs() const; + private: const TGCSectorLogic* m_sectorLogic; int getSSCId(int nHPB, int chip, int block) const; @@ -31,8 +34,11 @@ private: int getPhiPosInSSC(int chip, int block) const; int m_NumberOfWireHighPtBoard; TGCRegionType m_region; + TGCArguments* m_tgcArgs; }; - + inline TGCArguments* TGCSSCController::tgcArgs() const { + return m_tgcArgs; + } } //end of namespace bracket #endif diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSector.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSector.hh index 461ed2a9286..fa4acebc483 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSector.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSector.hh @@ -5,6 +5,7 @@ #ifndef TGCSector_h #define TGCSector_h +#include "TrigT1TGC/TGCArguments.hh" #include "TrigT1TGC/TGCDatabaseManager.hh" #include "TrigT1TGC/TGCTimingManager.hh" #include "TrigT1TGC/TGCReadoutIndex.h" @@ -37,13 +38,14 @@ namespace LVL1TGCTrigger { class TGCSector { public: - TGCSector(int idIn, + TGCSector(TGCArguments*, + int idIn, TGCRegionType type, TGCForwardBackwardType forwardBackward, const TGCDatabaseManager* db, const TGCTMDB* tmdb); - TGCSector(); + TGCSector(TGCArguments*); private: // copy constructor and assignement operator are hidden @@ -74,6 +76,8 @@ public: int getOctantId() const { return m_octantId; } int getModuleId() const { return m_moduleId; } + TGCArguments* tgcArgs() const; + private: const TGCTMDB* getTMDB() const { return m_TMDB; } @@ -117,8 +121,16 @@ private: TGCSectorLogic* m_SL; const TGCTMDB* m_TMDB; + + TGCArguments* m_tgcArgs; + }; +inline +TGCArguments* TGCSector::tgcArgs() const { + return m_tgcArgs; +} + inline bool TGCSector::hasHit() const { diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSectorLogic.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSectorLogic.hh index cf506e0bd94..f26aa16d1f5 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSectorLogic.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSectorLogic.hh @@ -5,6 +5,7 @@ #ifndef TGGSectorLogic_hh #define TGGSectorLogic_hh +#include "TrigT1TGC/TGCArguments.hh" #include "TrigT1TGC/TGCNumbering.hh" #include "TrigT1TGC/TGCEvent.h" #include "TrigT1TGC/TGCReadoutIndex.h" @@ -64,7 +65,7 @@ public: const TGCTileMuCoincidenceMap* mapTM); void showResult(TGCSLSelectorOut* out); - TGCSectorLogic(TGCRegionType regionIn, int id); + TGCSectorLogic(TGCArguments*, TGCRegionType regionIn, int id); ~TGCSectorLogic(); int getNumberOfSubSectorCluster() const; @@ -76,6 +77,8 @@ public: void setInnerTrackletSlots(const TGCInnerTrackletSlot* innerTrackletSlots[]); + TGCArguments* tgcArgs() const; + protected: enum {MaxNumberOfWireHighPtBoard =2}; void collectInput(); @@ -116,8 +119,14 @@ private: const TGCInnerTrackletSlot* m_innerTrackletSlots[TGCInnerTrackletSlotHolder::NUMBER_OF_SLOTS_PER_TRIGGER_SECTOR]; bool m_useInner; bool m_useTileMu; + TGCArguments* m_tgcArgs; }; +inline +TGCArguments* TGCSectorLogic::tgcArgs() const { + return m_tgcArgs; +} + inline int TGCSectorLogic::getNumberOfSubSectorCluster() const { @@ -176,10 +185,6 @@ inline return m_wordInnerStation; } -#ifdef GENRPHIMAP - extern std::ofstream rphimap; -#endif - } //end of namespace bracket #endif diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSlaveBoard.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSlaveBoard.hh index 3f9565425f0..dca46e11503 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSlaveBoard.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCSlaveBoard.hh @@ -5,6 +5,7 @@ #ifndef TGCSlaveBoard_hh #define TGCSlaveBoard_hh +#include "TrigT1TGC/TGCArguments.hh" #include "TrigT1TGC/TGCSlaveBoardOut.hh" #include "TrigT1TGC/TGCPatchPanel.hh" #include "TrigT1TGC/TGCPatchPanelOut.hh" @@ -29,7 +30,7 @@ class TGCSlaveBoard { public: - TGCSlaveBoard(); + TGCSlaveBoard( TGCArguments* ); virtual ~TGCSlaveBoard(); TGCSlaveBoard(const TGCSlaveBoard& right); TGCSlaveBoard& operator=(const TGCSlaveBoard& right); @@ -60,6 +61,8 @@ public: void storeSlbIn(); const std::bitset<200>& GetSlbIn(void) const { return m_slbin; } // for readout + TGCArguments* tgcArgs() const; + protected: void collectInput(); void doMaskOperation(){}; @@ -82,8 +85,16 @@ protected: TGCPatchPanel* m_patchPanel; TGCPatchPanelOut* m_patchPanelOut; std::bitset<200> m_slbin; // store SlaveBoard input for readout + + TGCArguments* m_tgcArgs; + }; + inline TGCArguments* TGCSlaveBoard::tgcArgs() const { + return m_tgcArgs; + } + + } //end of namespace bracket #endif // TGCSlaveBoard_hh diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCStripDoubletSB.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCStripDoubletSB.hh index d5be76e509c..8d50b00f460 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCStripDoubletSB.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCStripDoubletSB.hh @@ -11,7 +11,7 @@ namespace LVL1TGCTrigger { class TGCStripDoubletSB : public TGCDoubletSB { public: - TGCStripDoubletSB(){ + TGCStripDoubletSB(TGCArguments* tgcargs):TGCDoubletSB(tgcargs){ m_maxDev=3; m_nChAdj=0; m_iChBase=1; diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCStripTripletSB.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCStripTripletSB.hh index f476f74113d..17ac0862f0c 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCStripTripletSB.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCStripTripletSB.hh @@ -14,7 +14,7 @@ const int NumberOfStripTripletSBData = 8; class TGCStripTripletSB: public TGCSlaveBoard { public: - TGCStripTripletSB(); + TGCStripTripletSB( TGCArguments* ); virtual ~TGCStripTripletSB(){}; protected: diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCTileMuCoincidenceMap.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCTileMuCoincidenceMap.hh index f09b374dc0e..a3702b21de5 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCTileMuCoincidenceMap.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCTileMuCoincidenceMap.hh @@ -12,12 +12,14 @@ #include "StoreGate/ReadCondHandle.h" #include "MuonCondSvc/TGCTriggerData.h" +#include "TrigT1TGC/TGCArguments.hh" + namespace LVL1TGCTrigger { class TGCTileMuCoincidenceMap { public: - TGCTileMuCoincidenceMap(const SG::ReadCondHandleKey& readCondKey, + TGCTileMuCoincidenceMap(TGCArguments*, const SG::ReadCondHandleKey& readCondKey, const std::string& version="NA"); virtual ~TGCTileMuCoincidenceMap(); @@ -55,6 +57,8 @@ public: bool readMap(); + TGCArguments* tgcArgs() const; + protected: enum {N_Side=2}; enum {N_EndcapSector=48}; @@ -72,9 +76,13 @@ private: int m_map[N_Input_TileMuModule][N_Endcap_SSC][N_EndcapSector][N_Side]; std::string m_verName; + TGCArguments* m_tgcArgs; const SG::ReadCondHandleKey& m_readCondKey; }; +inline TGCArguments* TGCTileMuCoincidenceMap::tgcArgs() const { + return m_tgcArgs; +} inline const std::string& TGCTileMuCoincidenceMap::getVersion() const diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCWireDoubletSB.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCWireDoubletSB.hh index fc68dec1edf..d89b8f64199 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCWireDoubletSB.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCWireDoubletSB.hh @@ -10,7 +10,7 @@ namespace LVL1TGCTrigger { class TGCWireDoubletSB : public TGCDoubletSB { public: - TGCWireDoubletSB(){ + TGCWireDoubletSB(TGCArguments* tgcargs):TGCDoubletSB(tgcargs){ m_maxDev=7; m_nChAdj=4; m_iChBase=9; diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCWireTripletSB.hh b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCWireTripletSB.hh index efaf3d52794..e0fb05c3aa9 100644 --- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCWireTripletSB.hh +++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCWireTripletSB.hh @@ -19,7 +19,7 @@ public: TGCWireTripletSB(const TGCWireTripletSB& right); TGCWireTripletSB& operator=(const TGCWireTripletSB& right); - TGCWireTripletSB(); + TGCWireTripletSB( TGCArguments* ); virtual ~TGCWireTripletSB(){}; protected: diff --git a/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx b/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx index 1c9d145e420..91dd912ab0c 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx @@ -54,67 +54,29 @@ #include "PathResolver/PathResolver.h" #include "AthenaPoolUtilities/CondAttrListCollection.h" -// Debug flag -//#define TGCDEBUG 1 - -using namespace TrigConf; - namespace LVL1TGCTrigger { - bool g_STRICTWD; - bool g_STRICTWT; - bool g_STRICTSD; - bool g_STRICTST; - bool g_OUTCOINCIDENCE; - TGCCoincidences * g_TGCCOIN; - bool g_DEBUGLEVEL; - bool g_SHPT_ORED; - bool g_USE_INNER; - bool g_INNER_VETO; - bool g_TILE_MU; - bool g_USE_CONDDB; - bool g_useRun3Config; -/////////////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////////////// LVL1TGCTrigger::LVL1TGCTrigger::LVL1TGCTrigger(const std::string& name, ISvcLocator* pSvcLocator): AthAlgorithm(name,pSvcLocator), m_cabling(0), m_bctagInProcess(0), m_db(0), - m_configSvc("TrigConf::LVL1ConfigSvc/LVL1ConfigSvc",name), m_TimingManager(0), m_system(0), m_nEventInSector(0), - m_debuglevel(false), - m_readCondKey("TGCTriggerData") -{ - declareProperty("MuCTPIInput_TGC", m_keyMuCTPIInput_TGC="L1MuctpiStoreTGC"); - declareProperty("InputData_perEvent", m_keyTgcDigit="TGC_DIGITS"); - declareProperty("TileMuRcv_Input", m_keyTileMu="TileMuRcvCnt"); - declareProperty("ProcessAllBunhes", m_ProcessAllBunches=true); - declareProperty("CurrentBunchTag", m_CurrentBunchTag=TgcDigit::BC_CURRENT); - declareProperty("OutputTgcRDO", m_OutputTgcRDO=true); - declareProperty("MaskFileName", m_MaskFileName=""); - declareProperty("MaskFileName12", m_MaskFileName12=""); - declareProperty("LVL1ConfigSvc", m_configSvc, "LVL1 Config Service"); - declareProperty("VersionCW", m_VerCW="00_07_0022"); // TILE_EIFI_BW - declareProperty("STRICTWD", m_STRICTWD =false); - declareProperty("STRICTWT", m_STRICTWT =false); - declareProperty("STRICTSD", m_STRICTSD =false); - declareProperty("STRICTST", m_STRICTST =false); - declareProperty("OUTCOINCIDENCE", m_OUTCOINCIDENCE =false); - declareProperty("SHPTORED", m_SHPTORED =true); - declareProperty("USEINNER", m_USEINNER =true); // Should be true - declareProperty("INNERVETO", m_INNERVETO =true); // Obsolete - declareProperty("FULLCW", m_FULLCW =true); // Obsolete - declareProperty("TILEMU", m_TILEMU =false); // Obsolete - declareProperty("ReadCondKey", m_readCondKey); - declareProperty("useRun3Config", m_useRun3Config =false); -} - - -//////////////////////////////////////////////////////////// + m_innerTrackletSlotHolder( tgcArgs() ), + m_log( msgSvc(), name ), + m_debuglevel(false) + { + + } + + + //////////////////////////////////////////////////////////// LVL1TGCTrigger::~LVL1TGCTrigger() { - msg() << MSG::DEBUG << "LVL1TGCTrigger destructor called" << endmsg; + ATH_MSG_DEBUG("LVL1TGCTrigger destructor called"); // delete m_TimingManager ,ElectronicsSystem and Database if (m_TimingManager){ delete m_TimingManager; @@ -128,121 +90,103 @@ namespace LVL1TGCTrigger { delete m_db; m_db =0; } - + } - - -//////////////////////////////////////////////////////////// + + + //////////////////////////////////////////////////////////// StatusCode LVL1TGCTrigger::initialize() { // init message stram - -// msg().setLevel(msgLevel()); // inidividual output level not known before initialize -// msgLevel() is only available in rel.21. Previously, we used outputLevel() which is obsolete in rel.21 -// so we don't call setLevel(). (still works fine) - m_debuglevel = (msg().level() <= MSG::DEBUG); // save if threshold for debug - - g_DEBUGLEVEL = m_debuglevel; - - msg() << MSG::DEBUG << "LVL1TGCTrigger::initialize() called" << endmsg; - - g_STRICTWD = m_STRICTWD.value(); - g_STRICTWT = m_STRICTWT.value(); - g_STRICTSD = m_STRICTSD.value(); - g_STRICTST = m_STRICTST.value(); - g_OUTCOINCIDENCE = m_OUTCOINCIDENCE.value(); - g_SHPT_ORED = m_SHPTORED.value(); - g_USE_INNER = m_USEINNER.value(); - g_INNER_VETO = m_INNERVETO.value() && g_USE_INNER; - g_TILE_MU = m_TILEMU.value() && g_USE_INNER; - g_USE_CONDDB = true; - g_useRun3Config = m_useRun3Config.value(); - + + m_debuglevel = (m_log.level() <= MSG::DEBUG); // save if threshold for debug + + ATH_MSG_DEBUG("LVL1TGCTrigger::initialize() called"); + + m_tgcArgs.set_STRICTWD( m_STRICTWD.value() ); + m_tgcArgs.set_STRICTWT( m_STRICTWT.value() ); + m_tgcArgs.set_STRICTSD( m_STRICTSD.value() ); + m_tgcArgs.set_STRICTST( m_STRICTST.value() ); + m_tgcArgs.set_OUTCOINCIDENCE( m_OUTCOINCIDENCE.value() ); + m_tgcArgs.set_SHPT_ORED( m_SHPTORED.value() ); + m_tgcArgs.set_USE_INNER( m_USEINNER.value() ); + m_tgcArgs.set_INNER_VETO( m_INNERVETO.value() && m_tgcArgs.USE_INNER() ); + m_tgcArgs.set_TILE_MU( m_TILEMU.value() && m_tgcArgs.USE_INNER() ); + m_tgcArgs.set_USE_CONDDB( true ); + m_tgcArgs.set_useRun3Config( m_useRun3Config.value() ); + // TrigConfigSvc StatusCode sc = m_configSvc.retrieve(); if (sc.isFailure()) { - msg() << MSG::ERROR << "Could not connect to " << m_configSvc.typeAndName() << endmsg; + ATH_MSG_ERROR("Could not connect to " << m_configSvc.typeAndName()); } else { - msg() << MSG::DEBUG << "Connected to " << m_configSvc.typeAndName() << endmsg; + ATH_MSG_DEBUG("Connected to " << m_configSvc.typeAndName()); } // clear Masked channel m_MaskedChannel.clear(); - - g_TGCCOIN=0; - if (g_OUTCOINCIDENCE) g_TGCCOIN = new TGCCoincidences(); + + if (m_tgcArgs.OUTCOINCIDENCE()) m_tgcArgs.set_TGCCOIN( new TGCCoincidences() ); - // For your information - if (m_debuglevel) { - if (m_CurrentBunchTag>0) { - msg() << MSG::DEBUG - << "---> Take hits with CURRENT banch tag = " << m_CurrentBunchTag << endmsg; - } - msg() << MSG::DEBUG << "OutputRdo " << m_OutputTgcRDO.value() << endmsg; - } - - + if (m_CurrentBunchTag>0) ATH_MSG_DEBUG("---> Take hits with CURRENT banch tag = " << m_CurrentBunchTag); + ATH_MSG_DEBUG("OutputRdo " << m_OutputTgcRDO.value()); + ATH_CHECK( m_readCondKey.initialize() ); - + // initialize TGCDataBase - m_db = new TGCDatabaseManager(m_readCondKey,m_VerCW); + m_db = new TGCDatabaseManager(&m_tgcArgs,m_readCondKey,m_VerCW); // try to initialize the TGCcabling sc = getCabling(); if(sc.isFailure()) { - msg() << MSG::DEBUG - << "TGCcablingServerSvc not yet configured; postone TGCcabling initialization at first event. " - << endmsg; + ATH_MSG_DEBUG("TGCcablingServerSvc not yet configured; postone TGCcabling initialization at first event."); } + ATH_CHECK(m_muctpiPhase1Key.initialize(tgcArgs()->useRun3Config())); + ATH_CHECK(m_muctpiKey.initialize(!tgcArgs()->useRun3Config())); + return StatusCode::SUCCESS; } - -//////////////////////////////////////////////// + + //////////////////////////////////////////////// StatusCode LVL1TGCTrigger::finalize() { - if (m_debuglevel) { - msg() << MSG::DEBUG << "LVL1TGCTrigger::finalize() called" - << " m_nEventInSector = " << m_nEventInSector << endmsg; - } - + ATH_MSG_DEBUG("LVL1TGCTrigger::finalize() called" << " m_nEventInSector = " << m_nEventInSector); + // clear and delete TGCCOIN - if (g_OUTCOINCIDENCE) { - if (g_TGCCOIN->size()) { - for(std::vector::iterator iss=g_TGCCOIN->begin(); iss!=g_TGCCOIN->end(); iss++) + if (m_tgcArgs.OUTCOINCIDENCE()) { + if (m_tgcArgs.TGCCOIN()->size()) { + for(std::vector::iterator iss=m_tgcArgs.TGCCOIN()->begin(); iss!=m_tgcArgs.TGCCOIN()->end(); iss++) delete (*iss); } - g_TGCCOIN->clear(); + m_tgcArgs.TGCCOIN()->clear(); } - delete g_TGCCOIN; - g_TGCCOIN = 0; - + m_tgcArgs.clear(); + if (m_db) delete m_db; m_db = 0 ; if (m_system) delete m_system; m_system = 0; if (m_TimingManager) delete m_TimingManager; m_TimingManager=0; - + return StatusCode::SUCCESS; } - - -//////////////////////////////////////////// + + + //////////////////////////////////////////// StatusCode LVL1TGCTrigger::execute() { - if (m_debuglevel) { - msg() << MSG::DEBUG << "LVL1TGCTrigger::execute() called" << endmsg; - } - + ATH_MSG_DEBUG("execute() called"); + if(!m_cabling) { // get cabling svc if(getCabling().isFailure()) return StatusCode::FAILURE; } - - // doMaskOperation is performed at the first event - // It is better to implement callback against + + // doMaskOperation is performed at the first event + // It is better to implement callback against // MuonTGC_CablingSvc::updateCableASDToPP (Susumu Oda, 2010/10/27) static bool firstTime = true; if(firstTime) { @@ -250,23 +194,23 @@ namespace LVL1TGCTrigger { if(getMaskedChannel().isFailure()) return StatusCode::FAILURE; firstTime = false; } - + StatusCode sc = StatusCode::SUCCESS; // Tile Mu Data - bool doTileMu = g_TILE_MU; - - if (g_USE_CONDDB) { + bool doTileMu = m_tgcArgs.TILE_MU(); + + if (m_tgcArgs.USE_CONDDB()) { SG::ReadCondHandle readHandle{m_readCondKey}; const TGCTriggerData* readCdo{*readHandle}; doTileMu = readCdo->isActive(TGCTriggerData::CW_TILE); } - + // TgcRdo m_tgcrdo.clear(); const TgcRdoContainer * rdoCont; sc = evtStore()->retrieve( rdoCont, "TGCRDO" ); if (sc.isFailure()) { - msg() << MSG::WARNING << "Cannot retrieve TgcRdoContainer with key=TGCRDO" << endmsg; + ATH_MSG_WARNING("Cannot retrieve TgcRdoContainer with key=TGCRDO"); return StatusCode::SUCCESS; } if (rdoCont->size()>0) { @@ -278,385 +222,391 @@ namespace LVL1TGCTrigger { m_tgcrdo.insert(std::map, TgcRdo*>::value_type(subDetectorRod, thisRdo)); } } - + const DataHandle tgc_container; sc = evtStore()->retrieve(tgc_container, m_keyTgcDigit); if (sc.isFailure()) { - msg() << MSG::FATAL << " Cannot retrieve TGC Digit Container " << endmsg; + ATH_MSG_FATAL("Cannot retrieve TGC Digit Container"); return sc; } - - - LVL1MUONIF::Lvl1MuCTPIInputPhase1* muctpiinputPhase1 = new LVL1MUONIF::Lvl1MuCTPIInputPhase1; - LVL1MUONIF::Lvl1MuCTPIInput* muctpiinput = new LVL1MUONIF::Lvl1MuCTPIInput; - - if(g_useRun3Config){delete muctpiinput;} - else{delete muctpiinputPhase1;} - - // process one by one - for (int bc=TgcDigit::BC_PREVIOUS; bc<=TgcDigit::BC_NEXT; bc++){ - sc = StatusCode::SUCCESS; + LVL1MUONIF::Lvl1MuCTPIInputPhase1* muctpiinputPhase1 = nullptr; + LVL1MUONIF::Lvl1MuCTPIInput* muctpiinput = nullptr; + if(tgcArgs()->useRun3Config()){ + SG::WriteHandle wh_muctpiTgc(m_muctpiPhase1Key); + ATH_CHECK(wh_muctpiTgc.record(std::make_unique())); + muctpiinputPhase1 = wh_muctpiTgc.ptr(); + }else{ + SG::WriteHandle wh_muctpiTgc(m_muctpiKey); + ATH_CHECK(wh_muctpiTgc.record(std::make_unique())); + muctpiinput = wh_muctpiTgc.ptr(); + } + + // process one by one + for (int bc=TgcDigit::BC_PREVIOUS; bc<=TgcDigit::BC_NEXT; bc++){ + sc = StatusCode::SUCCESS; + // Use TileMu only if BC_CURRENT - if (doTileMu && bc==m_CurrentBunchTag) { + if (doTileMu && bc==m_CurrentBunchTag) { sc = fillTMDB(); if (sc.isFailure()) { - msg() << MSG::WARNING << "Cannot retrieve Tile Mu Data " << endmsg; + ATH_MSG_WARNING("Cannot retrieve Tile Mu Data"); return sc; } } - - if (m_ProcessAllBunches || bc==m_CurrentBunchTag){ - m_bctagInProcess =bc; - sc=processOneBunch(tgc_container, muctpiinput, muctpiinputPhase1); + + if (m_ProcessAllBunches || bc==m_CurrentBunchTag){ + m_bctagInProcess =bc; + sc=processOneBunch(tgc_container, muctpiinput, muctpiinputPhase1); } - if (sc.isFailure()) { - msg() << MSG::FATAL - << "Fail to process the bunch " << m_bctagInProcess << endmsg; - return sc; + if (sc.isFailure()) { + ATH_MSG_FATAL("Fail to process the bunch " << m_bctagInProcess); + return sc; } } - - // record MuCTPIInput_TGC - sc = evtStore()->record(muctpiinput, m_keyMuCTPIInput_TGC); - if (sc.isFailure()) { - msg() << MSG::FATAL - << "Could not record MuCTPIInput_TGC." << endmsg; - return StatusCode::FAILURE; - } - + return sc; } - -StatusCode LVL1TGCTrigger::processOneBunch(const DataHandle& tgc_container, - LVL1MUONIF::Lvl1MuCTPIInput* muctpiinput, - LVL1MUONIF::Lvl1MuCTPIInputPhase1* muctpiinputPhase1 - ) -{ - std::map tgcDigitIDs; - std::map::iterator itCh; - - // doMaskOperation (masked & fired) - doMaskOperation(tgc_container, tgcDigitIDs); - - // fill ASDOut to this event - TGCEvent event; - fillTGCEvent(tgcDigitIDs, event); - tgcDigitIDs.clear(); - - // process trigger electronics emulation... - m_TimingManager->increaseBunchCounter(); - m_system->distributeSignal(&event); - - // clear TGCCOIN - if (g_OUTCOINCIDENCE && (g_TGCCOIN->size() >0 )) { - for(std::vector::iterator iss=g_TGCCOIN->begin(); iss!=g_TGCCOIN->end(); iss++) delete (*iss); - g_TGCCOIN->clear(); - } - // EIFI trigger bits for SL are cleared. - m_innerTrackletSlotHolder.clearTriggerBits(); - - // PatchPanel, SlaveBoard - for( int i=0; igetNumberOfSide(); i+=1){ // i=0:Z>0(A) , i=1:Z<0(C) - for( int j=0; jgetNumberOfOctant(); j+=1){ - for( int k=0; kgetNumberOfModule(); k+=1){ - TGCSector* sector = m_system->getSector(i,j,k); - if((sector!=0)&&(sector->hasHit())){ - m_nEventInSector++; - m_TimingManager->startPatchPanel(sector, m_db); - m_TimingManager->startSlaveBoard(sector); - if (m_OutputTgcRDO.value()) recordRdoSLB(sector); - // EIFI trigger bits for SL are filled in this method. - } - } - } - } - - // HighPtBoard, SectorLogic - const int muctpiBcId_offset =TgcDigit::BC_CURRENT; - int muctpiBcId = m_bctagInProcess - muctpiBcId_offset; - for(int i=0; igetNumberOfSide(); i+=1){ - int sectoraddr_endcap = 0; - int sectoraddr_forward = 0; - for(int j=0; jgetNumberOfOctant(); j+=1){ - for(int k=0; kgetNumberOfModule(); k+=1){ - if(k>=9) continue;// skip Inner TGC - TGCSector* sector = m_system->getSector(i,j,k); - if(sector==0) continue; - - if((sector->hasHit())){ - m_TimingManager->startHighPtBoard(sector); - if (m_OutputTgcRDO.value()) recordRdoHPT(sector); - - // EIFI trigger bits are checked if Endcap - if(sector->getRegionType()==Endcap && sector->getSL()) { - // Pointers to store EIFI trigger bits for Endcap SL - const TGCInnerTrackletSlot* innerTrackletSlots[TGCInnerTrackletSlotHolder::NUMBER_OF_SLOTS_PER_TRIGGER_SECTOR] - = {0, 0, 0, 0}; - m_innerTrackletSlotHolder.getInnerTrackletSlots(i, j, k, innerTrackletSlots); - sector->getSL()->setInnerTrackletSlots(innerTrackletSlots); - } - - m_TimingManager->startSectorLogic(sector); - sector->clearNumberOfHit(); - } - - // Fill inner (EIFI/Tile) words - if (m_OutputTgcRDO.value() && g_USE_INNER) recordRdoInner(sector); - - // Fill Lvl1MuCTPInput - size_t tgcsystem=0,subsystem=0; - if(i==0) subsystem = LVL1MUONIF::Lvl1MuCTPIInput::idSideA(); - if(i==1) subsystem = LVL1MUONIF::Lvl1MuCTPIInput::idSideC(); - if (m_OutputTgcRDO.value()) recordRdoSL(sector, subsystem); - - TGCSLSelectorOut* selectorOut = sector->getSL()->getSelectorOutput(); - //TGCTrackSelectorOut* trackSelectorOut = sector->getSL()->getTrackSelectorOutput();// will be installed - if(sector->getRegionType()==Endcap){ - if(g_useRun3Config){ - LVL1MUONIF::Lvl1MuEndcapSectorLogicDataPhase1 sldata; - tgcsystem = LVL1MUONIF::Lvl1MuCTPIInputPhase1::idEndcapSystem(); - //if(trackSelectorOut!=0) FillSectorLogicData(&sldata,trackSelectorOut); // this function will be implemented. - muctpiinputPhase1->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_endcap++,muctpiBcId); - } - else{ - LVL1MUONIF::Lvl1MuEndcapSectorLogicData sldata; - tgcsystem = LVL1MUONIF::Lvl1MuCTPIInput::idEndcapSystem(); - if(selectorOut!=0) FillSectorLogicData(&sldata,selectorOut,subsystem); - muctpiinput->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_endcap++,muctpiBcId); + StatusCode LVL1TGCTrigger::processOneBunch(const DataHandle& tgc_container, + LVL1MUONIF::Lvl1MuCTPIInput* muctpiinput, + LVL1MUONIF::Lvl1MuCTPIInputPhase1* muctpiinputPhase1) + { + std::map tgcDigitIDs; + std::map::iterator itCh; + + // doMaskOperation (masked & fired) + doMaskOperation(tgc_container, tgcDigitIDs); + + // fill ASDOut to this event + TGCEvent event; + fillTGCEvent(tgcDigitIDs, event); + tgcDigitIDs.clear(); + + // process trigger electronics emulation... + m_TimingManager->increaseBunchCounter(); + m_system->distributeSignal(&event); + + // clear TGCCOIN + if (m_tgcArgs.OUTCOINCIDENCE() && (m_tgcArgs.TGCCOIN()->size() >0 )) { + for(std::vector::iterator iss=m_tgcArgs.TGCCOIN()->begin(); iss!=m_tgcArgs.TGCCOIN()->end(); iss++) delete (*iss); + m_tgcArgs.TGCCOIN()->clear(); + } + + // EIFI trigger bits for SL are cleared. + m_innerTrackletSlotHolder.clearTriggerBits(); + + // PatchPanel, SlaveBoard + for( int i=0; igetNumberOfSide(); i+=1){ // i=0:Z>0(A) , i=1:Z<0(C) + for( int j=0; jgetNumberOfOctant(); j+=1){ + for( int k=0; kgetNumberOfModule(); k+=1){ + TGCSector* sector = m_system->getSector(i,j,k); + if((sector!=0)&&(sector->hasHit())){ + m_nEventInSector++; + m_TimingManager->startPatchPanel(sector, m_db); + m_TimingManager->startSlaveBoard(sector); + if (m_OutputTgcRDO.value()) recordRdoSLB(sector); + // EIFI trigger bits for SL are filled in this method. } } - if(sector->getRegionType()==Forward){ - if(g_useRun3Config){ - LVL1MUONIF::Lvl1MuForwardSectorLogicDataPhase1 sldata; - tgcsystem = LVL1MUONIF::Lvl1MuCTPIInputPhase1::idForwardSystem(); - //if(trackSelectorOut!=0) FillSectorLogicData(&sldata,trackSelectorOut); //will be implemented. - muctpiinputPhase1->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_forward++,muctpiBcId); + } + } + + // HighPtBoard, SectorLogic + const int muctpiBcId_offset =TgcDigit::BC_CURRENT; + int muctpiBcId = m_bctagInProcess - muctpiBcId_offset; + for(int i=0; igetNumberOfSide(); i+=1){ + int sectoraddr_endcap = 0; + int sectoraddr_forward = 0; + for(int j=0; jgetNumberOfOctant(); j+=1){ + for(int k=0; kgetNumberOfModule(); k+=1){ + if(k>=9) continue;// skip Inner TGC + TGCSector* sector = m_system->getSector(i,j,k); + if(sector==0) continue; + + if((sector->hasHit())){ + m_TimingManager->startHighPtBoard(sector); + if (m_OutputTgcRDO.value()) recordRdoHPT(sector); + + // EIFI trigger bits are checked if Endcap + if(sector->getRegionType()==Endcap && sector->getSL()) { + // Pointers to store EIFI trigger bits for Endcap SL + const TGCInnerTrackletSlot* innerTrackletSlots[TGCInnerTrackletSlotHolder::NUMBER_OF_SLOTS_PER_TRIGGER_SECTOR] + = {0, 0, 0, 0}; + m_innerTrackletSlotHolder.getInnerTrackletSlots(i, j, k, innerTrackletSlots); + sector->getSL()->setInnerTrackletSlots(innerTrackletSlots); + } + + m_TimingManager->startSectorLogic(sector); + sector->clearNumberOfHit(); } - else{ - LVL1MUONIF::Lvl1MuForwardSectorLogicData sldata; - tgcsystem = LVL1MUONIF::Lvl1MuCTPIInput::idForwardSystem(); - if(selectorOut!=0) FillSectorLogicData(&sldata,selectorOut,subsystem); - muctpiinput->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_forward++,muctpiBcId); + + // Fill inner (EIFI/Tile) words + if (m_OutputTgcRDO.value() && m_tgcArgs.USE_INNER()) recordRdoInner(sector); + + // Fill Lvl1MuCTPInput + size_t tgcsystem=0,subsystem=0; + if(i==0) subsystem = LVL1MUONIF::Lvl1MuCTPIInput::idSideA(); + if(i==1) subsystem = LVL1MUONIF::Lvl1MuCTPIInput::idSideC(); + if (m_OutputTgcRDO.value()) recordRdoSL(sector, subsystem); + + TGCSLSelectorOut* selectorOut = sector->getSL()->getSelectorOutput(); + + if(sector->getRegionType()==Endcap){ + if(m_tgcArgs.useRun3Config()){ + LVL1MUONIF::Lvl1MuEndcapSectorLogicDataPhase1 sldata; + tgcsystem = LVL1MUONIF::Lvl1MuCTPIInputPhase1::idEndcapSystem(); + if(selectorOut!=0) FillSectorLogicData(&sldata,selectorOut,subsystem); + muctpiinputPhase1->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_endcap++,muctpiBcId); + }else{ + LVL1MUONIF::Lvl1MuEndcapSectorLogicData sldata; + tgcsystem = LVL1MUONIF::Lvl1MuCTPIInput::idEndcapSystem(); + if(selectorOut!=0) FillSectorLogicData(&sldata,selectorOut,subsystem); + muctpiinput->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_endcap++,muctpiBcId); + } } - } - - // delete selectorOut - sector->getSL()->eraseSelectorOut(); - if (selectorOut != 0 ) delete selectorOut; - selectorOut=0; - } // k Module - } // j Octant - } // i Side - - event.Clear(); - - return StatusCode::SUCCESS; -} - - -//////////////////////////////////////////////////////// -void LVL1TGCTrigger::doMaskOperation(const DataHandle& tgc_container, - std::map& TgcDigitIDs) -{ - std::map::iterator itCh; - // (1) skip masked channels - for (TgcDigitContainer::const_iterator c = tgc_container->begin(); c != tgc_container->end(); ++c) { - for (TgcDigitCollection::const_iterator h = (*c)->begin(); h != (*c)->end(); ++h) { - - // check BCID - if ((*h)->bcTag()!=m_bctagInProcess) continue; + if(sector->getRegionType()==Forward){ + if(m_tgcArgs.useRun3Config()){ + LVL1MUONIF::Lvl1MuForwardSectorLogicDataPhase1 sldata; + tgcsystem = LVL1MUONIF::Lvl1MuCTPIInputPhase1::idForwardSystem(); + if(selectorOut!=0) FillSectorLogicData(&sldata,selectorOut,subsystem); + muctpiinputPhase1->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_forward++,muctpiBcId); + }else{ + LVL1MUONIF::Lvl1MuForwardSectorLogicData sldata; + tgcsystem = LVL1MUONIF::Lvl1MuCTPIInput::idForwardSystem(); + if(selectorOut!=0) FillSectorLogicData(&sldata,selectorOut,subsystem); + muctpiinput->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_forward++,muctpiBcId); + } + } + + // delete selectorOut + sector->getSL()->eraseSelectorOut(); + if (selectorOut != 0 ) delete selectorOut; + selectorOut=0; + } // k Module + } // j Octant + } // i Side + + event.Clear(); + + return StatusCode::SUCCESS; + } + + + //////////////////////////////////////////////////////// + void LVL1TGCTrigger::doMaskOperation(const DataHandle& tgc_container, + std::map& TgcDigitIDs) + { + std::map::iterator itCh; + // (1) skip masked channels + for (TgcDigitContainer::const_iterator c = tgc_container->begin(); c != tgc_container->end(); ++c) { + for (TgcDigitCollection::const_iterator h = (*c)->begin(); h != (*c)->end(); ++h) { - Identifier channelId = (*h)->identify(); - itCh=m_MaskedChannel.find(channelId); - if (itCh!=m_MaskedChannel.end() && itCh->second==0) { - if (m_debuglevel) { - msg() << MSG::DEBUG << "This channel is masked! offlineID=" << channelId << endmsg; - } - continue; + // check BCID + if ((*h)->bcTag()!=m_bctagInProcess) continue; + + Identifier channelId = (*h)->identify(); + itCh=m_MaskedChannel.find(channelId); + if (itCh!=m_MaskedChannel.end() && itCh->second==0) { + ATH_MSG_DEBUG("This channel is masked! offlineID=" << channelId); + continue; + } + TgcDigitIDs.insert(std::map::value_type(channelId,1)); } - TgcDigitIDs.insert(std::map::value_type(channelId,1)); } - } - - // (2) add fired channels by force - for(itCh=m_MaskedChannel.begin(); itCh!=m_MaskedChannel.end(); itCh++) { - if (itCh->second==1) { - if (m_debuglevel) { - msg() << MSG::VERBOSE << "This channel is fired by force! offlineID=" << itCh->first << endmsg; + + // (2) add fired channels by force + for(itCh=m_MaskedChannel.begin(); itCh!=m_MaskedChannel.end(); itCh++) { + if (itCh->second==1) { + ATH_MSG_VERBOSE("This channel is fired by force! offlineID=" << itCh->first); + if (TgcDigitIDs.find(itCh->first)==TgcDigitIDs.end()) { + TgcDigitIDs.insert(std::map::value_type(itCh->first,1)); + } } - if (TgcDigitIDs.find(itCh->first)==TgcDigitIDs.end()) { - TgcDigitIDs.insert(std::map::value_type(itCh->first,1)); - } } - } - if (m_debuglevel) { - msg() << MSG::DEBUG << "# of total hits " << TgcDigitIDs.size() << endmsg; + ATH_MSG_DEBUG("# of total hits " << TgcDigitIDs.size()); + + return; } - - return; -} - -////////////////////////////////////////////////// -void LVL1TGCTrigger::fillTGCEvent(std::map& tgcDigitIDs, TGCEvent& event) -{ - std::map::iterator itCh; - - // Loop on TGC detectors (collections) - for(itCh=tgcDigitIDs.begin(); itCh!=tgcDigitIDs.end(); itCh++) { - Identifier channelId = itCh->first; - int subsystemNumber; - int octantNumber; - int moduleNumber; - int layerNumber; - int rNumber; - int wireOrStrip; - int channelNumber; - bool status = m_cabling->getOnlineIDfromOfflineID(channelId, - subsystemNumber, - octantNumber, - moduleNumber, - layerNumber, - rNumber, - wireOrStrip, - channelNumber); - - if(!status) { - msg() << MSG::INFO << " Fail to getOnlineIDfromOfflineID " - << "for " << channelId << endmsg; - } else { - bool fstatus; - int subDetectorID, rodID, sswID, sbLoc, channelID; - int phi=0; - int moduleType=0; - int slbID=0; - bool isAside=true; - bool isEndcap=true; - - fstatus = m_cabling->getReadoutIDfromOfflineID(channelId, - subDetectorID, - rodID,sswID, - sbLoc,channelID); + + ////////////////////////////////////////////////// + void LVL1TGCTrigger::fillTGCEvent(std::map& tgcDigitIDs, TGCEvent& event) + { + std::map::iterator itCh; + + // Loop on TGC detectors (collections) + for(itCh=tgcDigitIDs.begin(); itCh!=tgcDigitIDs.end(); itCh++) { + Identifier channelId = itCh->first; + int subsystemNumber; + int octantNumber; + int moduleNumber; + int layerNumber; + int rNumber; + int wireOrStrip; + int channelNumber; + bool status = m_cabling->getOnlineIDfromOfflineID(channelId, + subsystemNumber, + octantNumber, + moduleNumber, + layerNumber, + rNumber, + wireOrStrip, + channelNumber); - if (fstatus) { - fstatus = m_cabling->getSLBIDfromReadoutID(phi, isAside, isEndcap, - moduleType, slbID, - subDetectorID, - rodID, sswID,sbLoc); + if(!status) { + ATH_MSG_INFO("Fail to getOnlineIDfromOfflineID for " << channelId); + } else { + bool fstatus; + int subDetectorID, rodID, sswID, sbLoc, channelID; + int phi=0; + int moduleType=0; + int slbID=0; + bool isAside=true; + bool isEndcap=true; + + fstatus = m_cabling->getReadoutIDfromOfflineID(channelId, + subDetectorID, + rodID,sswID, + sbLoc,channelID); + + if (fstatus) { + fstatus = m_cabling->getSLBIDfromReadoutID(phi, isAside, isEndcap, + moduleType, slbID, + subDetectorID, + rodID, sswID,sbLoc); + } + if (fstatus) { + ATH_MSG_DEBUG("hit : subsys#=" << subsystemNumber + << " octant#=" << octantNumber + << " mod#=" << moduleNumber + << " layer#=" << layerNumber << " r#=" << rNumber + << " isStrip=" << wireOrStrip + << " ch#=" << channelNumber << endmsg + << " --> readoutID: sudetID=" << subDetectorID + << " rodID=" << rodID << " sswID=" << sswID + << " slbID=" << slbID << " chID=" << channelID ); + + TGCZDirection zdire = (subsystemNumber==1)? kZ_FORWARD : kZ_BACKWARD; + TGCReadoutIndex index(zdire,octantNumber,moduleNumber,rNumber,layerNumber); + TGCSignalType signal = (wireOrStrip==1)? Strip : WireGroup; + event.NewASDOut(index, + signal, + channelNumber, + 0); + } else { + ATH_MSG_INFO("Fail to getSLBIDfromOfflineID for " << channelId); + } } - if (fstatus) { - if (m_debuglevel) { - msg() << MSG::DEBUG << "hit : subsys#=" << subsystemNumber - << " octant#=" << octantNumber - << " mod#=" << moduleNumber - << " layer#=" << layerNumber << " r#=" << rNumber - << " isStrip=" << wireOrStrip - << " ch#=" << channelNumber << endmsg - << " --> readoutID: sudetID=" << subDetectorID - << " rodID=" << rodID << " sswID=" << sswID - << " slbID=" << slbID << " chID=" << channelID - << endmsg; - } - - TGCZDirection zdire = (subsystemNumber==1)? kZ_FORWARD : kZ_BACKWARD; - TGCReadoutIndex index(zdire,octantNumber,moduleNumber,rNumber,layerNumber); - TGCSignalType signal = (wireOrStrip==1)? Strip : WireGroup; - event.NewASDOut(index, - signal, - channelNumber, - 0); - } else { - msg() << MSG::INFO << " Fail to getSLBIDfromOfflineID " - << "for " << channelId << endmsg; + } // End Loop on TGC detectors (collections) + if (m_debuglevel) { + ATH_MSG_DEBUG("Could make TGCEvent with TgcDigitContainer." + << " vector size : " << event.GetNASDOut() ); + for(int iout=1; iout<= event.GetNASDOut(); iout++){ + TGCASDOut* asdout = (event.GetASDOutVector()[iout-1]); + ATH_MSG_DEBUG( " Z:" << asdout->GetTGCReadoutIndex().GetZDirection() << + " O:" << asdout->GetTGCReadoutIndex().GetOctantNumber() << + " M:" << asdout->GetTGCReadoutIndex().GetModuleNumber() << + " R:" << asdout->GetTGCReadoutIndex().GetRNumber() << + " L:" << asdout->GetTGCReadoutIndex().GetLayerNumber() << + " S:" << asdout->GetSignalType() << + " I:" << asdout->GetHitID() << + " T:" << asdout->GetHitToF() ); } - } - } // End Loop on TGC detectors (collections) - - if (m_debuglevel) { - msg() << MSG::DEBUG - << "Could make TGCEvent with TgcDigitContainer." - << " vector size : " << event.GetNASDOut() - << endmsg; - - for(int iout=1; iout<= event.GetNASDOut(); iout++){ - TGCASDOut* asdout = (event.GetASDOutVector()[iout-1]); - msg() << MSG::DEBUG - << " Z:" << asdout->GetTGCReadoutIndex().GetZDirection() - << " O:" << asdout->GetTGCReadoutIndex().GetOctantNumber() - << " M:" << asdout->GetTGCReadoutIndex().GetModuleNumber() - << " R:" << asdout->GetTGCReadoutIndex().GetRNumber() - << " L:" << asdout->GetTGCReadoutIndex().GetLayerNumber() - << " S:" << asdout->GetSignalType() - << " I:" << asdout->GetHitID() - << " T:" << asdout->GetHitToF() - << endmsg; } } -} - - -//////////////////////////////////////////////////////// -void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *sldata, - const TGCSLSelectorOut* selectorOut, unsigned int subsystem) -{ - if(selectorOut ==0) return; - int Zdir= (subsystem==LVL1MUONIF::Lvl1MuCTPIInput::idSideA() ? 1 : -1); - - sldata->clear2candidatesInSector();// for temporary - sldata->bcid(0); - if ((selectorOut->getNCandidate()) >= 1) { - sldata->roi(0,((selectorOut->getR(0))<<2)+(selectorOut->getPhi(0))); - // ovl --> veto - // sldata->ovl(0,0); - if (selectorOut->getInnerVeto(0)) sldata->ovl(0,1); - else sldata->ovl(0,0); - sldata->pt(0,selectorOut->getPtLevel(0)); - sldata->charge(0, getCharge(selectorOut->getDR(0),Zdir)); - } else { - // no entry - } - if ((selectorOut->getNCandidate()) == 2) { - sldata->roi(1,((selectorOut->getR(1))<<2)+(selectorOut->getPhi(1))); - // ovl --> veto - // sldata->ovl(1,0); - if (selectorOut->getInnerVeto(1)) sldata->ovl(1,1); - else sldata->ovl(1,0); - sldata->pt(1,selectorOut->getPtLevel(1)); - sldata->charge(1, getCharge(selectorOut->getDR(1),Zdir)); + + + //////////////////////////////////////////////////////// + void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *sldata, + const TGCSLSelectorOut* selectorOut, unsigned int subsystem) + { + if(selectorOut ==0) return; + int Zdir= (subsystem==LVL1MUONIF::Lvl1MuCTPIInput::idSideA() ? 1 : -1); + + sldata->clear2candidatesInSector();// for temporary + sldata->bcid(0); + if ((selectorOut->getNCandidate()) >= 1) { + sldata->roi(0,((selectorOut->getR(0))<<2)+(selectorOut->getPhi(0))); + // ovl --> veto + // sldata->ovl(0,0); + if (selectorOut->getInnerVeto(0)) sldata->ovl(0,1); + else sldata->ovl(0,0); + sldata->pt(0,selectorOut->getPtLevel(0)); + sldata->charge(0, getCharge(selectorOut->getDR(0),Zdir)); + } else { + // no entry + } + if ((selectorOut->getNCandidate()) == 2) { + sldata->roi(1,((selectorOut->getR(1))<<2)+(selectorOut->getPhi(1))); + // ovl --> veto + // sldata->ovl(1,0); + if (selectorOut->getInnerVeto(1)) sldata->ovl(1,1); + else sldata->ovl(1,0); + sldata->pt(1,selectorOut->getPtLevel(1)); + sldata->charge(1, getCharge(selectorOut->getDR(1),Zdir)); + } + sldata->set2candidates(0);// not used for TGC + sldata->clear2candidates(0);// not used for TGC + sldata->set2candidates(1);// not used for TGC + sldata->clear2candidates(1);// not used for TGC + + // Print + if(m_debuglevel) { + if ((selectorOut->getNCandidate()) >= 1) { + ATH_MSG_DEBUG( "SectorLogic: 1st candidate " + << " roi:" << (selectorOut->getR(0))<<2 + selectorOut->getPhi(0) + << " pt:" << selectorOut->getPtLevel(0) + << " charge:" << getCharge(selectorOut->getDR(0),Zdir) + << " veto:" << sldata->ovl(0)); + } + if ((selectorOut->getNCandidate()) == 2) { + ATH_MSG_DEBUG( "SectorLogic: 2nd candidate " + << " roi:" << (selectorOut->getR(1))<<2 + selectorOut->getPhi(1) + << " pt:" << selectorOut->getPtLevel(1) + << " charge:" << getCharge(selectorOut->getDR(1),Zdir) + << " veto:" << sldata->ovl(1)); + } + } } - sldata->set2candidates(0);// not used for TGC - sldata->clear2candidates(0);// not used for TGC - sldata->set2candidates(1);// not used for TGC - sldata->clear2candidates(1);// not used for TGC - - // Print - if(m_debuglevel) { + //////////////////////////////////////////////////////// + void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicDataPhase1 *sldata, + const TGCSLSelectorOut* selectorOut, unsigned int subsystem) + { + // M.Aoki (26/10/2019) + // this function will be updated for Run3-specific configuration such as quality flags, 15 thresholds + + if(selectorOut ==0) return; + int Zdir= (subsystem==LVL1MUONIF::Lvl1MuCTPIInputPhase1::idSideA() ? 1 : -1); + sldata->clear2candidatesInSector();// for temporary + sldata->bcid(0); if ((selectorOut->getNCandidate()) >= 1) { - msg() << MSG::DEBUG - << "SectorLogic: 1st candidate " - << " roi:" << (selectorOut->getR(0))<<2 + selectorOut->getPhi(0) - << " pt:" << selectorOut->getPtLevel(0) - << " charge:" << getCharge(selectorOut->getDR(0),Zdir) - << " veto:" << sldata->ovl(0) - <roi(0,((selectorOut->getR(0))<<2)+(selectorOut->getPhi(0))); + // ovl --> veto + // sldata->ovl(0,0); + if (selectorOut->getInnerVeto(0)) sldata->ovl(0,1); + else sldata->ovl(0,0); + sldata->pt(0,selectorOut->getPtLevel(0)); + sldata->charge(0, getCharge(selectorOut->getDR(0),Zdir)); + } else { + // no entry } if ((selectorOut->getNCandidate()) == 2) { - msg() << MSG::DEBUG - << "SectorLogic: 2nd candidate " - << " roi:" << (selectorOut->getR(1))<<2 + selectorOut->getPhi(1) - << " pt:" << selectorOut->getPtLevel(1) - << " charge:" << getCharge(selectorOut->getDR(1),Zdir) - << " veto:" << sldata->ovl(1) - << endmsg; + sldata->roi(1,((selectorOut->getR(1))<<2)+(selectorOut->getPhi(1))); + // ovl --> veto + // sldata->ovl(1,0); + if (selectorOut->getInnerVeto(1)) sldata->ovl(1,1); + else sldata->ovl(1,0); + sldata->pt(1,selectorOut->getPtLevel(1)); + sldata->charge(1, getCharge(selectorOut->getDR(1),Zdir)); } - } -} - - -////////////////////////////////////////// - void LVL1TGCTrigger::recordRdoSLB(TGCSector * sector) + sldata->set2candidates(0);// not used for TGC + sldata->clear2candidates(0);// not used for TGC + sldata->set2candidates(1);// not used for TGC + sldata->clear2candidates(1);// not used for TGC + } + ////////////////////////////////////////// + void LVL1TGCTrigger::recordRdoSLB(TGCSector * sector) { uint16_t bcTag=m_CurrentBunchTag, l1Id=0, bcId=0; // readoutID @@ -666,10 +616,10 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda isAside = (sector->getSideId()==0 ? 1 : 0); isEndcap = (sector->getRegionType()==Endcap ? 1 : 0); int module = sector->getModuleId(); - // OnlineID moduleNumber - // <---- phi ---- + // OnlineID moduleNumber + // <---- phi ---- // EC: 7 6 4 3 1 0 11 10 9 - // FWD: 8 5 2 14 13 12 + // FWD: 8 5 2 14 13 12 // [M1, M2, M3] [EI/FI] // secId=0-5(EC), 0-2(FWD) for TgcRawData secId = (isEndcap ? (module/3)*2+module%3 : module/3); @@ -679,13 +629,13 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda secIdEIFI = module%3; // phiEIFI=1-24 phiEIFI = (secIdEIFI+23+sector->getOctantId()*3)%24+1; - + // SLB const int NumberOfSLBType = 6; - // 0: WT, 1: WD, 2: ST, 3: SD, 4: WI 5:SI + // 0: WT, 1: WD, 2: ST, 3: SD, 4: WI 5:SI for(int itype=0; itypegetNumberOfSB(itype); index++) { TGCSlaveBoard * slb = sector->getSB(itype, index); @@ -693,40 +643,35 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda id = slb->getId(); TGCSlaveBoardOut * out = slb->getOutput(); if (0==out) continue; - + bool isEIFI = (moduleType==TgcRawData::SLB_TYPE_INNER_WIRE || moduleType==TgcRawData::SLB_TYPE_INNER_STRIP); // get ReadoutID bool status = - m_cabling->getReadoutIDfromSLBID((isEIFI ? phiEIFI : phi), - isAside, isEndcap, + m_cabling->getReadoutIDfromSLBID((isEIFI ? phiEIFI : phi), + isAside, isEndcap, moduleType, id, - subDetectorId, rodId, + subDetectorId, rodId, sswId, sbLoc); if (!status) { - if (m_debuglevel) { - msg() << MSG::DEBUG - << "TGCcablignSvc::getReadoutIDfromSLBID fails" << endmsg - << MSG::DEBUG - << "phi=" << phi - << " side=" << ((isAside) ? "A": "C") - << " region=" << ((isEndcap) ? "Endcap" : "Forward") - << " type=" << moduleType - << " id=" << id - << " subDetectorId=" << subDetectorId - << " rodId=" << rodId - << " sswId=" << sswId - << " sbLoc=" << sbLoc - << endmsg; - } + ATH_MSG_DEBUG("TGCcablignSvc::getReadoutIDfromSLBID fails"); + ATH_MSG_DEBUG( "phi=" << phi + << " side=" << ((isAside) ? "A": "C") + << " region=" << ((isEndcap) ? "Endcap" : "Forward") + << " type=" << moduleType + << " id=" << id + << " subDetectorId=" << subDetectorId + << " rodId=" << rodId + << " sswId=" << sswId + << " sbLoc=" << sbLoc); continue; } - + // fill TgcRawData for(int iData=0; iDatagetNumberOfData(); iData++) { // max 8 if (!out->getHit(iData)) continue; - + // see TGCcabling/TGCId.h (WD=0,SD,WT,ST,SI,WI). Same as TgcRawData TgcRawData::SlbType type = (TgcRawData::SlbType)moduleType; int subMat = iData % 4; @@ -736,80 +681,63 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda // 13.Jan.2011 reversed by Hisaya // because Layer swap in TGCStripTripletSB::doCoincidence() } else if ( (type==TgcRawData::SLB_TYPE_INNER_WIRE ) || - (type==TgcRawData::SLB_TYPE_INNER_STRIP) ) { + (type==TgcRawData::SLB_TYPE_INNER_STRIP) ) { seg= iData/4; } TgcRawData * rawdata = new TgcRawData(bcTag, static_cast(subDetectorId), - static_cast(rodId), - static_cast(sswId), - static_cast(sbLoc), + static_cast(rodId), + static_cast(sswId), + static_cast(sbLoc), l1Id, bcId, - type, out->getDev(iData), seg, subMat, - out->getPos(iData)); + type, out->getDev(iData), seg, subMat, + out->getPos(iData)); if (!addRawData(rawdata)) delete rawdata; - - // EIFI trigger bits for SL are filled. + + // EIFI trigger bits for SL are filled. if(isEIFI) { - bool setEIFITriggerBit = - m_innerTrackletSlotHolder.setTriggerBit(sector->getSideId(), - phiEIFI, - (isEndcap ? - TGCInnerTrackletSlot::EI : TGCInnerTrackletSlot::FI), - (type==TgcRawData::SLB_TYPE_INNER_WIRE ? - TGCInnerTrackletSlot::WIRE : TGCInnerTrackletSlot::STRIP), - static_cast(subMat), + bool setEIFITriggerBit = + m_innerTrackletSlotHolder.setTriggerBit(sector->getSideId(), + phiEIFI, + (isEndcap ? + TGCInnerTrackletSlot::EI : TGCInnerTrackletSlot::FI), + (type==TgcRawData::SLB_TYPE_INNER_WIRE ? + TGCInnerTrackletSlot::WIRE : TGCInnerTrackletSlot::STRIP), + static_cast(subMat), true); -#ifdef TGCDEBUG - ///////HISAYA//////////// - msg() << MSG::INFO - << " recordRdoSLB : reg=" << (isEndcap ? "EC" : "FWD") - << " phi=" << phiEIFI - << " type=" << type - << " subMat =" << subMat - << " pos=" << out->getPos(iData) - << " dev=" << out->getDev(iData) - << endmsg; - ///////HISAYA/////////// -#endif - + if(!setEIFITriggerBit) { - msg() << MSG::INFO << "Fail to set Inner trigger bit of" - << " sideId= " << sector->getSideId() - << " slotId= " << phiEIFI - << " region= " << (isEndcap ? "EI" : "FI") - << " readout= " << (type==TgcRawData::SLB_TYPE_INNER_WIRE ? "WIRE" : "STRIP") - << " subMat(iBit)= " << static_cast(subMat) - << endmsg; + ATH_MSG_INFO("Fail to set Inner trigger bit of" + << " sideId= " << sector->getSideId() + << " slotId= " << phiEIFI + << " region= " << (isEndcap ? "EI" : "FI") + << " readout= " << (type==TgcRawData::SLB_TYPE_INNER_WIRE ? "WIRE" : "STRIP") + << " subMat(iBit)= " << static_cast(subMat) ); } } - - if (m_debuglevel) { - msg() << MSG::DEBUG - << " recordRdoSLB : reg=" << (isEndcap ? "EC" : "FWD") - << " rod=" << rodId << " sswId=" << sswId - << " SBLoc=" << sbLoc << " type=" << itype - << " iData(subMat:seg)=" << iData << " pos=" - << out->getPos(iData) << " dev=" << out->getDev(iData) - << endmsg; - } + + ATH_MSG_DEBUG(" recordRdoSLB : reg=" << (isEndcap ? "EC" : "FWD") + << " rod=" << rodId << " sswId=" << sswId + << " SBLoc=" << sbLoc << " type=" << itype + << " iData(subMat:seg)=" << iData << " pos=" + << out->getPos(iData) << " dev=" << out->getDev(iData) ); } // end of filling TgcRawData - + } // end of loop over SB } } - -//////////////////////////////////////////////////////// - void LVL1TGCTrigger::recordRdoHPT(TGCSector * sector) + + //////////////////////////////////////////////////////// + void LVL1TGCTrigger::recordRdoHPT(TGCSector * sector) { // readoutID int subDetectorId, rodId, sswId, sbLoc, secId; - - // get numbering scheme info from cabling svc + + // get numbering scheme info from cabling svc int startEndcapSector, coverageOfEndcapSector; int startForwardSector, coverageOfForwardSector; rodId = 1; @@ -819,15 +747,15 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda startForwardSector, coverageOfForwardSector ) ; - + uint16_t bcTag=m_CurrentBunchTag, l1Id=0, bcId=0; - - // HPTID + + // HPTID bool isAside, isEndcap, isStrip; int phi; isAside = (sector->getSideId()==0); isEndcap = (sector->getRegionType()==Endcap); int module = sector->getModuleId(); - // sector Id = 0..47 (Endcap) 0..23 (forward) + // sector Id = 0..47 (Endcap) 0..23 (forward) int sectorId; if (isEndcap){ sectorId = ((module/3)*2+module%3) + sector->getOctantId()*6; @@ -844,7 +772,7 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda } // phi=1-48(EC), 1-24(FWD) in detector ID scheme phi = (isEndcap ? (sectorId+46)%48+1 : (sectorId+23)%24+1); - + for(int itype=0; itype<2; itype++) { // loop over HPB type(wire/strip) isStrip = (itype==0 ? 0 : 1); // 0=wire 1=strip for(int ihpb=0; ihpbgetNumberOfHPB(itype); ihpb++) { // loop over # of HPB per sector @@ -852,16 +780,16 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda if (0==hpb) continue; TGCHighPtChipOut * out = hpb->getOutput(); if (0==out) continue; - + // get ReadoutID bool status = m_cabling->getReadoutIDfromHPTID(phi, isAside, isEndcap, isStrip, hpb->getId(), subDetectorId, rodId, sswId, sbLoc); if (!status) { - msg() << MSG::WARNING << "TGCcablignSvc::getReadoutIDfromHPTID fails" << endmsg; + ATH_MSG_WARNING("TGCcablignSvc::getReadoutIDfromHPTID fails"); continue; } - - // loop over chip and candidate + + // loop over chip and candidate for(int ichip=0; ichipgetSel(ichip, icand)) continue; // should be 1 or 2 @@ -871,59 +799,36 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda m_cabling->getRDOHighPtIDfromSimHighPtID(!isEndcap, isStrip, index, chip, hitId); bool isHPT = out->getPt(ichip,icand)==PtHigh ? 1 : 0; - TgcRawData * rawdata = + TgcRawData * rawdata = new TgcRawData(bcTag, - static_cast(subDetectorId), - static_cast(rodId), - l1Id, + static_cast(subDetectorId), + static_cast(rodId), + l1Id, bcId, isStrip, (!isEndcap), secId, chip, icand, isHPT, hitId, - out->getPos(ichip, icand), + out->getPos(ichip, icand), out->getDev(ichip, icand), - 0); - + 0); + if (!addRawData(rawdata)) delete rawdata; -#ifdef TGCDEBUG - ///////////HISAYA/////////// - msg() << MSG::INFO - << "recordRdoHPT : bdTag =" << bcTag - << " side=" << ( (isAside)? "A" : "C") - << (isEndcap ? "EC" : "FWD") - << " w/s=" << ( (isStrip)? "s" : "w") - << " id=" << hpb->getId() - << " ecId=" << secId - << " chip=" << ichip - << " cand=" << icand - << " block=" << out->getHitID(ichip, icand) - << " subMatrix=" << out->getPos(ichip, icand) - << " dev=" << out->getDev(ichip, icand) - << " rod=" << rodId << " sswId=" << sswId - << " SBLoc=" << sbLoc - << endmsg; - //////////////////// -#endif // Print - if (m_debuglevel) { - msg() << MSG::DEBUG - << "recordRdoHPT : bdTag =" << bcTag - << " side=" << ( (isAside)? "A" : "C") - << (isEndcap ? "EC" : "FWD") - << " w/s=" << ( (isStrip)? "s" : "w") - << " id=" << hpb->getId() - << " ecId=" << secId - << " chip=" << ichip - << " cand=" << icand - << " block=" << out->getHitID(ichip, icand) - << " subMatrix=" << out->getPos(ichip, icand) - << " dev=" << out->getDev(ichip, icand) - << " rod=" << rodId << " sswId=" << sswId << " SBLoc=" << sbLoc - << endmsg; - } - + ATH_MSG_DEBUG( "recordRdoHPT : bdTag =" << bcTag + << " side=" << ( (isAside)? "A" : "C") + << (isEndcap ? "EC" : "FWD") + << " w/s=" << ( (isStrip)? "s" : "w") + << " id=" << hpb->getId() + << " ecId=" << secId + << " chip=" << ichip + << " cand=" << icand + << " block=" << out->getHitID(ichip, icand) + << " subMatrix=" << out->getPos(ichip, icand) + << " dev=" << out->getDev(ichip, icand) + << " rod=" << rodId << " sswId=" << sswId << " SBLoc=" << sbLoc ); + // Strip HPT hit may be duplicated - if ( g_SHPT_ORED && + if ( m_tgcArgs.SHPT_ORED() && isEndcap && isStrip && (chip==1) ) { int oredId = -1; @@ -932,139 +837,137 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda else if (hitId == 5) oredId = 1; else if (hitId == 6) oredId = 2; if (oredId >=0) { - TgcRawData * rawdata2 = + TgcRawData * rawdata2 = new TgcRawData(bcTag, - static_cast(subDetectorId), - static_cast(rodId), - l1Id, - bcId, - isStrip, (!isEndcap), secId, chip, icand, - isHPT, oredId, - out->getPos(ichip, icand), - out->getDev(ichip, icand), - 0); + static_cast(subDetectorId), + static_cast(rodId), + l1Id, + bcId, + isStrip, (!isEndcap), secId, chip, icand, + isHPT, oredId, + out->getPos(ichip, icand), + out->getDev(ichip, icand), + 0); if (!addRawData(rawdata2)) delete rawdata2; } //////////////////// - + } - + } } - // end loop of candidate and chip - + // end loop of candidate and chip + } } // end loop of board and type } - - - -//////////////////////////////////////////////////////// + + + + //////////////////////////////////////////////////////// void LVL1TGCTrigger::recordRdoInner(TGCSector * sector) { bool isAside = sector->getSideId()==0; bool isEndcap = (sector->getRegionType()==Endcap); if (!isEndcap) return; - + // sector Id = 0..47, phi = 1..48 int module = sector->getModuleId(); int octant = sector->getOctantId(); int sectorId = ((module/3)*2+module%3) + octant*6; int phi = (sectorId+46)%48+1; - + // get readout ID int subDetectorId=0, rodId=0, sswId=0, sbLoc=0; - + bool status = m_cabling->getReadoutIDfromSLID(phi, isAside, isEndcap, - subDetectorId, rodId, sswId, sbLoc); + subDetectorId, rodId, sswId, sbLoc); if (!status) { - msg() << MSG::WARNING - << "TGCcablignSvc::ReadoutIDfromSLID fails in recordRdoInner()" - << endmsg; + ATH_MSG_WARNING("TGCcablignSvc::ReadoutIDfromSLID fails in recordRdoInner()" ); return; } - + uint16_t bcTag = m_CurrentBunchTag, l1Id = 0, bcId = 0; - + // EIFI - const int n_slots = TGCInnerTrackletSlotHolder::NUMBER_OF_SLOTS_PER_TRIGGER_SECTOR; - + const int n_slots = TGCInnerTrackletSlotHolder::NUMBER_OF_SLOTS_PER_TRIGGER_SECTOR; + const TGCInnerTrackletSlot* innerTrackletSlots[n_slots] = {0, 0, 0, 0}; - m_innerTrackletSlotHolder.getInnerTrackletSlots(sector->getSideId(), - octant, module, innerTrackletSlots); - - int inner_eifi = + m_innerTrackletSlotHolder.getInnerTrackletSlots(sector->getSideId(), + octant, module, innerTrackletSlots); + + int inner_eifi = m_innerTrackletSlotHolder.getInnerTrackletBits(innerTrackletSlots); - + if (inner_eifi > 0) { TgcRawData * rawdata_eifi = new TgcRawData(bcTag, - static_cast(subDetectorId), - static_cast(rodId), - l1Id, - bcId, - 0, - 0, - static_cast(sbLoc | 4), - 0, - 0, - 0, - 0, - 0, - 0, - static_cast(inner_eifi)); + static_cast(subDetectorId), + static_cast(rodId), + l1Id, + bcId, + 0, + 0, + static_cast(sbLoc | 4), + 0, + 0, + 0, + 0, + 0, + 0, + static_cast(inner_eifi)); if (!addRawData(rawdata_eifi)) delete rawdata_eifi; } - - + + // Tile TGCTMDB* tmdb = m_system->getTMDB(); int inner_tile = tmdb->getInnerTileBits(sector->getSideId(), sectorId); - if (inner_tile > 0) { + if (inner_tile > 0) { TgcRawData * rawdata_tile = new TgcRawData(bcTag, - static_cast(subDetectorId), - static_cast(rodId), - l1Id, - bcId, - 1, - 0, - static_cast(sbLoc | 4), - 0, - 0, - 0, - 0, - 0, - 0, - static_cast(inner_tile)); + static_cast(subDetectorId), + static_cast(rodId), + l1Id, + bcId, + 1, + 0, + static_cast(sbLoc | 4), + 0, + 0, + 0, + 0, + 0, + 0, + static_cast(inner_tile)); if (!addRawData(rawdata_tile)) delete rawdata_tile; } - - + + } - -/////////////////////////////////////////////////////// - void LVL1TGCTrigger::recordRdoSL(TGCSector * sector, unsigned int subsystem) + + /////////////////////////////////////////////////////// + void LVL1TGCTrigger::recordRdoSL(TGCSector * sector, unsigned int subsystem) { // check if whether trigger exists or not TGCSLSelectorOut* selectorOut = sector->getSL()->getSelectorOutput(); if (selectorOut ==0) return; if (selectorOut->getNCandidate()==0) return; - + // readoutID int subDetectorId=0, rodId=0, sswId=0, sbLoc=0, secId=0; // trigger info - bool cand3plus=0, isEndcap=0, isAside=0, muplus=0, overlap=0, veto=0; + bool cand3plus=0, isEndcap=0, isAside=0, muplus=0, overlap=0, veto=0; int phi=0, index=0, threshold=0, roi=0; int Zdir= (subsystem==LVL1MUONIF::Lvl1MuCTPIInput::idSideA() ? 1 : -1); - + isAside = (sector->getSideId()==0); isEndcap = (sector->getRegionType()==Endcap); cand3plus = 0; - - // sector Id = 0..47 (Endcap) 0..23 (forward) + + // sector Id = 0..47 (Endcap) 0..23 (forward) int module = sector->getModuleId(); int sectorId; if (isEndcap){ @@ -1072,7 +975,7 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda } else { sectorId = (module/3) + sector->getOctantId()*3; } - + // secID for TGCRawData // 0-3(EC), 0-1(FWD) for new TGCcabling (1/12sector) // 0-5(EC), 0-2(FWD) for new TGCcabling (octant) @@ -1090,23 +993,21 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda } else { secId = sectorId % coverageOfForwardSector; } - + // phi=1-48(EC), 1-24(FWD) in detector ID scheme phi = (isEndcap ? (sectorId+46)%48+1 : (sectorId+23)%24+1); // get readout ID - bool status = m_cabling->getReadoutIDfromSLID(phi, isAside, isEndcap, - subDetectorId, rodId, sswId, sbLoc); + bool status = m_cabling->getReadoutIDfromSLID(phi, isAside, isEndcap, + subDetectorId, rodId, sswId, sbLoc); if (!status) { - msg() << MSG::WARNING << "TGCcablignSvc::ReadoutIDfromSLID fails" - << (isEndcap ? " Endcap-" : " Forward-") - << (isAside ? "A " : "C ") - << " phi=" << phi - << endmsg; - + ATH_MSG_WARNING("TGCcablignSvc::ReadoutIDfromSLID fails" + << (isEndcap ? " Endcap-" : " Forward-") + << (isAside ? "A " : "C ") + << " phi=" << phi ); return; } - + uint16_t bcTag=m_CurrentBunchTag, l1Id=0, bcId=0; for (int icand=0; icand < selectorOut->getNCandidate(); icand +=1) { index=icand; @@ -1115,70 +1016,48 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda roi = ((selectorOut->getR(icand))<<2)+(selectorOut->getPhi(icand)); if (selectorOut->getInnerVeto(icand)) veto = 1; else veto = 0; - + // create TgcRawData - TgcRawData * rawdata = - new TgcRawData(bcTag, - static_cast(subDetectorId), - static_cast(rodId), - l1Id, - bcId, - cand3plus, (!isEndcap), secId, index, - muplus, threshold, overlap, veto, roi); - if (!addRawData(rawdata)) delete rawdata; - -#ifdef TGCDEBUG - //////////////HISAYA//////////// - msg() << MSG::INFO - << "recordRdoSL : bcTag =" << bcTag - << " side=" << (isAside ? "A " : "C ") - << " reg=" << (isEndcap ? "EC" : "FWD") - << " phi=" << phi - << " cand=" << index - << " charge=" << (muplus ? "mu+" : "mu-") - << " thre=" << threshold - << " veto=" << veto - << " roi=" << roi - << " rod=" << rodId << " sswId=" << sswId - << " SBLoc=" << sbLoc - << endmsg; - ///////////////////////// -#endif - - if (m_debuglevel) { - msg() << MSG::DEBUG - << "recordRdoSL : bcTag =" << bcTag - << " side=" << (isAside ? "A " : "C ") - << " reg=" << (isEndcap ? "EC" : "FWD") - << " phi=" << phi - << " cand=" << index - << " charge=" << (muplus ? "mu+" : "mu-") - << " thre=" << threshold - << " veto=" << veto - << " roi=" << roi - << " rod=" << rodId << " sswId=" << sswId << " SBLoc=" << sbLoc - << endmsg; - } + TgcRawData * rawdata = + new TgcRawData(bcTag, + static_cast(subDetectorId), + static_cast(rodId), + l1Id, + bcId, + cand3plus, (!isEndcap), secId, index, + muplus, threshold, overlap, veto, roi); + if (!addRawData(rawdata)) delete rawdata; + + ATH_MSG_DEBUG("recordRdoSL : bcTag =" << bcTag + << " side=" << (isAside ? "A " : "C ") + << " reg=" << (isEndcap ? "EC" : "FWD") + << " phi=" << phi + << " cand=" << index + << " charge=" << (muplus ? "mu+" : "mu-") + << " thre=" << threshold + << " veto=" << veto + << " roi=" << roi + << " rod=" << rodId << " sswId=" << sswId << " SBLoc=" << sbLoc ); } } - -/////////////////////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////////////////////// // Mask=0/Fire=1 - StatusCode LVL1TGCTrigger::getMaskedChannel() + StatusCode LVL1TGCTrigger::getMaskedChannel() { std::string fname=m_MaskFileName12.value(); if (fname.empty()) return StatusCode::SUCCESS; - + std::string fullName = PathResolver::find_file (fname.c_str(), "PWD"); if( fullName.length() == 0 ) fullName = PathResolver::find_file (fname.c_str(), "DATAPATH"); - + std::ifstream fin(fullName.c_str()); if (!fin) { - msg() << MSG::FATAL << "Cannot open file " << fullName << endmsg; + ATH_MSG_FATAL("Cannot open file " << fullName); return StatusCode::FAILURE; } else { - msg() << MSG::INFO << "Use mask file : " << fullName << endmsg; + ATH_MSG_INFO("Use mask file : " << fullName); } // read database ------------------------------------------------------------------------------ std::vector mask; @@ -1191,7 +1070,7 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda if (!aLine.empty()) mask.push_back(aLine); } fin.close(); - + // std::vector ids; Identifier ID; @@ -1208,20 +1087,16 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda for(int octno=octno1; octno<=octno2; octno++) { bool status = m_cabling->getOfflineIDfromOnlineID(ID,sysno,octno, ids[3],ids[4],ids[5],ids[6],ids[7]); - if ( m_debuglevel) { - msg() << MSG::VERBOSE - << (OnOff==0 ? "Mask" : "Fire") << " : offlineID=" << ID - << " sys=" << sysno << " oct=" << octno << " modno=" << ids[3] - << " layerno=" << ids[4] << " rNumber=" << ids[5] - << " strip=" << ids[6] << " chno=" << ids[7] << endmsg; - } + ATH_MSG_VERBOSE( (OnOff==0 ? "Mask" : "Fire") << " : offlineID=" << ID + << " sys=" << sysno << " oct=" << octno << " modno=" << ids[3] + << " layerno=" << ids[4] << " rNumber=" << ids[5] + << " strip=" << ids[6] << " chno=" << ids[7] ); + if (!status) { - msg() << MSG::WARNING - << "This onlineID is not valid and cannot be converted to offline ID." - << endmsg - << "sys=" << sysno << " oct=" << octno << " modno=" << ids[3] - << " layerno=" << ids[4] << " rNumber=" << ids[5] - << " strip=" << ids[6] << " chno=" << ids[7] << endmsg; + ATH_MSG_WARNING("This onlineID is not valid and cannot be converted to offline ID." ); + ATH_MSG_WARNING("sys=" << sysno << " oct=" << octno << " modno=" << ids[3] + << " layerno=" << ids[4] << " rNumber=" << ids[5] + << " strip=" << ids[6] << " chno=" << ids[7] ); } else { m_MaskedChannel.insert(std::map::value_type(ID, OnOff)); if (OnOff==0) nmasked+=1; @@ -1229,25 +1104,20 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda } } } - + } else if (id_type==2 && ids.size()==6) { // readout id int sysno1 = (ids[1]==-99 ? 103 : ids[1]); int sysno2=(ids[1]==-99 ? 104 : ids[1]);// 103(F), 104(B) int octno1 = (ids[2]==-99 ? 0 : ids[2]); int octno2=(ids[2]==-99 ? 7 : ids[2]); for(int sysno=sysno1; sysno<=sysno2; sysno+=1) { for(int octno=octno1; octno<=octno2; octno++) { bool status = m_cabling->getOfflineIDfromReadoutID(ID, sysno,octno,ids[3],ids[4],ids[5]); - if (m_debuglevel) { - msg() << MSG::VERBOSE - << (OnOff==0 ? "Mask" : "Fire") << " : offlineID=" << ID - << " subdetectorID=" << sysno << " rodId=" << octno << " sswID=" << ids[3] - << " SBLoc=" << ids[4] << " channelId=" << ids[5] << endmsg; - } + ATH_MSG_VERBOSE( (OnOff==0 ? "Mask" : "Fire") << " : offlineID=" << ID + << " subdetectorID=" << sysno << " rodId=" << octno << " sswID=" << ids[3] + << " SBLoc=" << ids[4] << " channelId=" << ids[5] ); if (!status) { - msg() << MSG::WARNING - << "This readoutID is not valid and cannot be converted to offline ID " - << endmsg - << "subdetectorID=" << sysno << " rodId=" << octno << " sswID=" << ids[3] - << " SBLoc=" << ids[4] << " channelId=" << ids[5] << endmsg; + ATH_MSG_WARNING("This readoutID is not valid and cannot be converted to offline ID " ); + ATH_MSG_WARNING("subdetectorID=" << sysno << " rodId=" << octno << " sswID=" << ids[3] + << " SBLoc=" << ids[4] << " channelId=" << ids[5] ); } else { m_MaskedChannel.insert(std::map::value_type(ID, OnOff)); if (OnOff==0) nmasked+=1; @@ -1255,32 +1125,29 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda } } } - + } else if (id_type==3 && ids.size()==2) { // offline id ID = Identifier((unsigned int)ids[1]); - if (m_debuglevel) { - msg() << MSG::DEBUG << (OnOff==0 ? "Mask" : "Fire") << " : offlineID=" << ID << endmsg; - } + ATH_MSG_DEBUG((OnOff==0 ? "Mask" : "Fire") << " : offlineID=" << ID); m_MaskedChannel.insert(std::map::value_type(ID, OnOff)); if (OnOff==0) nmasked+=1; else if (OnOff==1) nfired+=1; - + } else { - msg() << MSG::INFO - << "Invalid input. Idtype or number of parameters are invalid: idtype=" << id_type - << " number of elements = " << ids.size() << endmsg; + ATH_MSG_INFO("Invalid input. Idtype or number of parameters are invalid: idtype=" << id_type + << " number of elements = " << ids.size() ); return StatusCode::FAILURE; } } // - msg() << MSG::INFO << "Total number of masked channels ... " << nmasked << endmsg; - msg() << MSG::INFO << "Total number of fired channels ... " << nfired << endmsg; + ATH_MSG_INFO("Total number of masked channels ... " << nmasked); + ATH_MSG_INFO("Total number of fired channels ... " << nfired); // return StatusCode::SUCCESS; } - - -///////////////////////////////////////// + + + ///////////////////////////////////////// void LVL1TGCTrigger::extractFromString(std::string str, std::vector & v) { v.clear(); if (str.empty()) return; @@ -1298,18 +1165,18 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda line.erase(0,i+1); } } - -//////////////////////////////////////////////// + + //////////////////////////////////////////////// int LVL1TGCTrigger::getCharge(int dR, int /*Zdir*/) { // old scheme // if (dR==0) return (Zdir>0 ? -1 : 1); // return (dR*Zdir>0 ? 1 : -1); return (dR >=0 ? 1 : -1 ); } - -//////////////////////////////////////////////// + + //////////////////////////////////////////////// // see TGCNumbering.hh - int LVL1TGCTrigger::getLPTTypeInRawData(int type) + int LVL1TGCTrigger::getLPTTypeInRawData(int type) { switch(type) { case WTSB : @@ -1328,224 +1195,217 @@ void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicData *slda return -1; } } - - -///////////////////////////////////////////////// - bool LVL1TGCTrigger::addRawData(TgcRawData * rawdata) + + + ///////////////////////////////////////////////// + bool LVL1TGCTrigger::addRawData(TgcRawData * rawdata) { + ATH_MSG_DEBUG("addRawData() is called."); std::pair subDetectorRod(rawdata->subDetectorId(), rawdata->rodId()); std::map, TgcRdo*>::iterator itRdo = m_tgcrdo.find(subDetectorRod); - + if (itRdo==m_tgcrdo.end()) { bool isHipt = rawdata->type()==TgcRawData::TYPE_HIPT; bool isInner = (rawdata->sector() & 4) != 0; - + // variables for non-registered data of EI/FI mask2=1 hits bool isTracklet = rawdata->type() == TgcRawData::TYPE_TRACKLET; TgcRawData::SlbType slbtype = rawdata->slbType(); - + if(isTracklet && (slbtype == TgcRawData::SLB_TYPE_INNER_WIRE || slbtype == TgcRawData::SLB_TYPE_INNER_STRIP)) { - - msg() << MSG::DEBUG << "Inner coincidence words without BW hits" - << " for subDetectorId=" << rawdata->subDetectorId() - << " for rodId=" << rawdata->rodId() << endmsg; - + + ATH_MSG_DEBUG("Inner coincidence words without BW hits" + << " for subDetectorId=" << rawdata->subDetectorId() + << " for rodId=" << rawdata->rodId() ); + } else if (isHipt && isInner) { - msg() << MSG::DEBUG << "Inner coincidence words without BW hits" - << " for subDetectorId=" << rawdata->subDetectorId() - << " for rodId=" << rawdata->rodId() - << endmsg; - + ATH_MSG_DEBUG("Inner coincidence words without BW hits" + << " for subDetectorId=" << rawdata->subDetectorId() + << " for rodId=" << rawdata->rodId() ); } else { - msg() << MSG::WARNING << "Inconsistent RodId with hits " - << " for subDetectorId=" << rawdata->subDetectorId() - << " for rodId=" << rawdata->rodId() - << " Type=" << static_cast(rawdata->type()) - << endmsg; + ATH_MSG_WARNING("Inconsistent RodId with hits " + << " for subDetectorId=" << rawdata->subDetectorId() + << " for rodId=" << rawdata->rodId() + << " Type=" << static_cast(rawdata->type()) ); } return false; - + } else { TgcRdo * thisRdo = itRdo->second; thisRdo->push_back(rawdata); - + return true; } } -/////////////////////////////////////////////////////////// - -StatusCode LVL1TGCTrigger::getCabling() -{ - // TGCcablingSvc - // get Cabling Server Service - const ITGCcablingServerSvc* TgcCabGet = 0; - StatusCode sc = service("TGCcablingServerSvc", TgcCabGet); - if (sc.isFailure()){ - msg() << MSG::FATAL << " Can't get TGCcablingServerSvc " << endmsg; - return StatusCode::FAILURE; - } - - // get Cabling Service - sc = TgcCabGet->giveCabling(m_cabling); - if (sc.isFailure()){ - msg() << MSG::FATAL << " Can't get TGCcablingSvc Server" << endmsg; - return StatusCode::FAILURE; - } - - int maxRodId,maxSswId, maxSbloc,minChannelId, maxChannelId; - m_cabling->getReadoutIDRanges( maxRodId,maxSswId, maxSbloc,minChannelId, maxChannelId); - if (maxRodId ==12) { - msg() << MSG::INFO << m_cabling->name() << " is OK" << endmsg ; - } else { - msg() << MSG::FATAL - << " Old TGCcablingSvc(octant segmentation) can not be used !" - << endmsg; - return StatusCode::FAILURE; - } - - // determine version of CW - // !! NOTE : CW version is determined by jobOption of VersionCW - // !! independent from TrigConfigSvc - // default set is 0x0007019 - // 00_00_0000 -> TILE_EIFI_BW - // see https://twiki.cern.ch/twiki/bin/view/Atlas/TgcSectorLogicLUT - - // Since m_VerCW is set as default value above, - // Here don't overwrite by any version if proper version number is provided. - std::string ver=m_VerCW.value(); - if((ver.size() != 10)) { - // default CW is v00070022 - ver= "00_07_0022"; - m_VerCW = ver; - } - - if (!g_USE_CONDDB) msg() << MSG::INFO - << " TGC CW version of " << ver << " is selected " << endmsg; - - // check Inner /TileMu - std::vector vers = TGCDatabaseManager::splitCW(ver, '_'); - if (g_USE_INNER) { - if (vers.size() == 3) g_USE_INNER = (vers[1] != "00"); - } - if (g_TILE_MU) { - if (vers.size() == 3) g_TILE_MU = (vers[0] != "00"); - } - - // create DataBase and TGCElectronicsSystem - //m_db = new TGCDatabaseManager(m_VerCW); - m_system = new TGCElectronicsSystem(m_db); - - m_TimingManager = new TGCTimingManager (m_readCondKey); - m_TimingManager->setBunchCounter(0); - m_nEventInSector = 0; - - return sc; -} - -StatusCode LVL1TGCTrigger::fillTMDB() -{ - StatusCode sc = StatusCode::SUCCESS; - TGCTMDB* tmdb = m_system->getTMDB(); - - // clear TMDB - tmdb->eraseOutput(); - - // retrive TileMuonReceiverContainer - const DataHandle tileMuRecCont; - sc = evtStore()->retrieve(tileMuRecCont, m_keyTileMu); - - if (sc.isFailure()) { - msg() << MSG::WARNING << " Cannot retrieve Tile Muon Receiver Container " << endmsg; - return sc; - } + /////////////////////////////////////////////////////////// - // loop over all TileMuonReceiverObj in container - TileMuonReceiverContainer::const_iterator tmItr = tileMuRecCont->begin(); - - const TileMuonReceiverObj * tmObj_Thresholds = *tmItr; - if ( (tmObj_Thresholds->GetThresholds()).size() == 4) { - float thresholds[4]; - for (size_t ip=0;ip<4;ip++){ - thresholds[ip] = (tmObj_Thresholds->GetThresholds()).at(ip); + StatusCode LVL1TGCTrigger::getCabling() + { + ATH_MSG_DEBUG("start getCabling()"); + // TGCcablingSvc + // get Cabling Server Service + const ITGCcablingServerSvc* TgcCabGet = 0; + StatusCode sc = service("TGCcablingServerSvc", TgcCabGet); + if (sc.isFailure()){ + ATH_MSG_FATAL("Can't get TGCcablingServerSvc."); + return StatusCode::FAILURE; } - if (m_debuglevel) { - msg() << MSG::DEBUG << "thresholds[] :" - << thresholds[0] << thresholds[1] << thresholds[2] << thresholds[3] << endmsg; - msg() << MSG::DEBUG << "type of GetThreshold : " - << typeid((tmObj_Thresholds->GetThresholds())).name() - << " ID of GetThreshold : " - << tmObj_Thresholds->GetID() << endmsg; + + // get Cabling Service + sc = TgcCabGet->giveCabling(m_cabling); + if (sc.isFailure()){ + ATH_MSG_FATAL("Can't get TGCcablingSvc Server"); + return StatusCode::FAILURE; } + + int maxRodId,maxSswId, maxSbloc,minChannelId, maxChannelId; + m_cabling->getReadoutIDRanges( maxRodId,maxSswId, maxSbloc,minChannelId, maxChannelId); + if (maxRodId ==12) { + ATH_MSG_INFO(m_cabling->name() << " is OK"); + } else { + ATH_MSG_FATAL("Old TGCcablingSvc(octant segmentation) can not be used !"); + return StatusCode::FAILURE; + } + + // determine version of CW + // !! NOTE : CW version is determined by jobOption of VersionCW + // !! independent from TrigConfigSvc + // default set is 0x0007019 + // 00_00_0000 -> TILE_EIFI_BW + // see https://twiki.cern.ch/twiki/bin/view/Atlas/TgcSectorLogicLUT + + // Since m_VerCW is set as default value above, + // Here don't overwrite by any version if proper version number is provided. + std::string ver=m_VerCW.value(); + if((ver.size() != 10)) { + // default CW is v00070022 + ver= "00_07_0022"; + m_VerCW = ver; + } + + if (!m_tgcArgs.USE_CONDDB()) ATH_MSG_INFO("TGC CW version of " << ver << " is selected"); + + // check Inner /TileMu + std::vector vers = TGCDatabaseManager::splitCW(ver, '_'); + if (m_tgcArgs.USE_INNER()) { + if (vers.size() == 3) m_tgcArgs.set_USE_INNER( (vers[1] != "00") ); + } + if (m_tgcArgs.TILE_MU()) { + if (vers.size() == 3) m_tgcArgs.set_TILE_MU( (vers[0] != "00") ); + } + + // create DataBase and TGCElectronicsSystem + //m_db = new TGCDatabaseManager(m_VerCW); + m_system = new TGCElectronicsSystem(&m_tgcArgs,m_db); + + m_TimingManager = new TGCTimingManager (m_readCondKey); + m_TimingManager->setBunchCounter(0); + m_nEventInSector = 0; + + return sc; } - - //clear tmobj_Threshols - tmObj_Thresholds = 0; - // m_id and decision , etc ... from - ++tmItr; - - for ( ; tmItr != tileMuRecCont->end(); ++tmItr) { - - const TileMuonReceiverObj * tmObj = *tmItr; - // Tile Module - int moduleID = tmObj-> GetID(); - int sideID = (moduleID & 0xf00) >> 8; - int mod = (moduleID & 0x0ff); - // TMDB decision - bool tile2SL[4]; - // [0] [1] [2] [3] - // d5d6_hi d5d6_lo d6_hi d6_lo - for (size_t ip=0;ip<4;ip++){ - tile2SL[ip] = (tmObj->GetDecision()).at(ip); + StatusCode LVL1TGCTrigger::fillTMDB() + { + ATH_MSG_DEBUG("fillTMDB"); + StatusCode sc = StatusCode::SUCCESS; + TGCTMDB* tmdb = m_system->getTMDB(); + + // clear TMDB + tmdb->eraseOutput(); + + // retrive TileMuonReceiverContainer + const DataHandle tileMuRecCont; + sc = evtStore()->retrieve(tileMuRecCont, m_keyTileMu); + + if (sc.isFailure()) { + ATH_MSG_WARNING("Cannot retrieve Tile Muon Receiver Container."); + return sc; } - //if ( moduleID < 300 || (moduleID > 363 && moduleID < 400) || moduleID > 463 || - if ( mod < 0 || mod > 63 || (sideID !=3 && sideID !=4) || - ((tmObj->GetDecision()).size() != 4) ) { - continue; - } else { - - // side 0: a-side, 1: c-side, 3: NA - // mod 0~63 - int side = 3; - if (sideID == 3) { - side = 0; - } else if (sideID == 4) { - side = 1; - } - // setOutput(side, mod, hit56, hit6) -> hit56, 6 -> 0: No Hit, 1: Low, 2: High, 3: NA - int hit56 = 3, hit6 = 3; - if (tile2SL[0] == true && tile2SL[1] == false) { - hit56 = 2; - } else if (tile2SL[0] == false && tile2SL[1] == true) { - hit56 = 1; - } else if (tile2SL[0] == false && tile2SL[1] == false) { - hit56 = 0; + + // loop over all TileMuonReceiverObj in container + TileMuonReceiverContainer::const_iterator tmItr = tileMuRecCont->begin(); + + const TileMuonReceiverObj * tmObj_Thresholds = *tmItr; + if ( (tmObj_Thresholds->GetThresholds()).size() == 4) { + float thresholds[4]; + for (size_t ip=0;ip<4;ip++){ + thresholds[ip] = (tmObj_Thresholds->GetThresholds()).at(ip); } + ATH_MSG_DEBUG("thresholds[] :" << thresholds[0] << thresholds[1] << thresholds[2] << thresholds[3] ); + ATH_MSG_DEBUG("type of GetThreshold : " << typeid((tmObj_Thresholds->GetThresholds())).name() + << " ID of GetThreshold : " + << tmObj_Thresholds->GetID() ); + } + + + //clear tmobj_Threshols + tmObj_Thresholds = 0; + // m_id and decision , etc ... from + ++tmItr; + + for ( ; tmItr != tileMuRecCont->end(); ++tmItr) { - if (tile2SL[2] == true && tile2SL[3] == false) { - hit6 = 2; - } else if (tile2SL[2] == false && tile2SL[3] == true) { - hit6 = 1; - } else if (tile2SL[2] == false && tile2SL[3] == false) { - hit6 = 0; + const TileMuonReceiverObj * tmObj = *tmItr; + // Tile Module + int moduleID = tmObj-> GetID(); + int sideID = (moduleID & 0xf00) >> 8; + int mod = (moduleID & 0x0ff); + // TMDB decision + bool tile2SL[4]; + // [0] [1] [2] [3] + // d5d6_hi d5d6_lo d6_hi d6_lo + for (size_t ip=0;ip<4;ip++){ + tile2SL[ip] = (tmObj->GetDecision()).at(ip); + } + //if ( moduleID < 300 || (moduleID > 363 && moduleID < 400) || moduleID > 463 || + if ( mod < 0 || mod > 63 || (sideID !=3 && sideID !=4) || + ((tmObj->GetDecision()).size() != 4) ) { + continue; + } else { + + // side 0: a-side, 1: c-side, 3: NA + // mod 0~63 + int side = 3; + if (sideID == 3) { + side = 0; + } else if (sideID == 4) { + side = 1; + } + // setOutput(side, mod, hit56, hit6) -> hit56, 6 -> 0: No Hit, 1: Low, 2: High, 3: NA + int hit56 = 3, hit6 = 3; + if (tile2SL[0] == true && tile2SL[1] == false) { + hit56 = 2; + } else if (tile2SL[0] == false && tile2SL[1] == true) { + hit56 = 1; + } else if (tile2SL[0] == false && tile2SL[1] == false) { + hit56 = 0; + } + + if (tile2SL[2] == true && tile2SL[3] == false) { + hit6 = 2; + } else if (tile2SL[2] == false && tile2SL[3] == true) { + hit6 = 1; + } else if (tile2SL[2] == false && tile2SL[3] == false) { + hit6 = 0; + } + + int prehit56=(tmdb->getOutput(side, mod))->GetHit56(); + int prehit6=(tmdb->getOutput(side, mod))->GetHit6(); + if(prehit56 != 3 && prehit56 > hit56) { hit56=prehit56; } + if(prehit6 != 3 && prehit6 > hit6) { hit6=prehit6; } + + tmdb->setOutput(side, mod, hit56, hit6); } - - int prehit56=(tmdb->getOutput(side, mod))->GetHit56(); - int prehit6=(tmdb->getOutput(side, mod))->GetHit6(); - if(prehit56 != 3 && prehit56 > hit56) { hit56=prehit56; } - if(prehit6 != 3 && prehit6 > hit6) { hit6=prehit6; } - - tmdb->setOutput(side, mod, hit56, hit6); } + + return sc; } - return sc; -} - - + } //end of namespace bracket diff --git a/Trigger/TrigT1/TrigT1TGC/src/MakeCoincidenceOut.cxx b/Trigger/TrigT1/TrigT1TGC/src/MakeCoincidenceOut.cxx index 2ba46081f1e..644617cc1c7 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/MakeCoincidenceOut.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/MakeCoincidenceOut.cxx @@ -35,64 +35,57 @@ #define MaxNdig 4096 namespace LVL1TGCTrigger { - extern bool g_OUTCOINCIDENCE; - extern TGCCoincidences * g_TGCCOIN; MakeCoincidenceOut::MakeCoincidenceOut(const std::string& name, ISvcLocator* pSvcLocator): AthAlgorithm(name,pSvcLocator) - //m_ntuplePtr(0) { - declareProperty("InputData_perEvent", m_key); - declareProperty("WriteMCtruth", m_WriteMCtruth=true); } MakeCoincidenceOut::~MakeCoincidenceOut() { - if(msgLvl(MSG::DEBUG)) { - msg(MSG::DEBUG) << "MakeCoincidenceOut destructor called" << endmsg; - } + ATH_MSG_DEBUG("MakeCoincidenceOut destructor called"); } StatusCode MakeCoincidenceOut::initialize() { - if(msgLvl(MSG::DEBUG)) { - msg(MSG::DEBUG) << "MakeCoincidenceOut::initialize() called" << endmsg; - } - msg(MSG::INFO) << "MakeCoincidenceOut initialize" << endmsg; + ATH_MSG_DEBUG("MakeCoincidenceOut::initialize() called"); + ATH_MSG_INFO("MakeCoincidenceOut initialize"); // get ID helper ATH_CHECK( m_muonIdHelperTool.retrieve() ); - if (0==g_OUTCOINCIDENCE) { - msg(MSG::INFO) << "You should make LVL1TGCTrigger::OUTCOINCIDENCE=1 in your jobOptions file" << endmsg; + if (0==m_OUTCOINCIDENCE) { + ATH_MSG_INFO("You should make LVL1TGCTrigger::OUTCOINCIDENCE=1 in your jobOptions file"); return StatusCode::FAILURE; } StatusCode sc = bookHistos(); if (sc!=StatusCode::SUCCESS) { - msg(MSG::ERROR) << "Cannot book histograms" << endmsg; + ATH_MSG_ERROR("Cannot book histograms"); return StatusCode::FAILURE; } + + m_TGCCOIN = new TGCCoincidences(); return StatusCode::SUCCESS; } StatusCode MakeCoincidenceOut::finalize() { - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "MakeCoincidenceOut::finalize() called" << endmsg; + ATH_MSG_DEBUG("MakeCoincidenceOut::finalize() called"); return StatusCode::SUCCESS; } StatusCode MakeCoincidenceOut::execute() { - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "MakeCoincidenceOut::execute() called" << endmsg; + ATH_MSG_DEBUG("MakeCoincidenceOut::execute() called"); const EventInfo * evtInfo=0; StatusCode sc = evtStore()->retrieve(evtInfo, "McEventInfo"); if (sc.isFailure()) { - msg(MSG::WARNING) << "Cannot retrieve EventInfo" << endmsg; + ATH_MSG_WARNING("Cannot retrieve EventInfo"); m_runNumber=-1; m_eventNumber=-1; } else { @@ -100,12 +93,12 @@ namespace LVL1TGCTrigger { m_eventNumber = (long int)(evtInfo->event_ID())->event_number(); } - TGCCoincidences::iterator iss=g_TGCCOIN->begin(); + TGCCoincidences::iterator iss=m_TGCCOIN->begin(); m_nhpt=0; - if (g_TGCCOIN->size()>MaxNhpt) { - msg(MSG::WARNING) << "Number of Hpt triggers is " << g_TGCCOIN->size() << ", more than " << MaxNhpt << endmsg; + if (m_TGCCOIN->size()>MaxNhpt) { + ATH_MSG_WARNING("Number of Hpt triggers is " << m_TGCCOIN->size() << ", more than " << MaxNhpt); } - while( iss!=g_TGCCOIN->end() && m_nhptend() && m_nhptgetBid(); m_hsec [m_nhpt]=(*iss)->getSLid(); m_hmod [m_nhpt]=(*iss)->getModule(); @@ -125,7 +118,7 @@ namespace LVL1TGCTrigger { const DataHandle tgc_container; sc = evtStore()->retrieve(tgc_container, m_key); if (sc.isFailure()) { - msg(MSG::ERROR) << " Cannot retrieve TGC Digit Container " << endmsg; + ATH_MSG_ERROR(" Cannot retrieve TGC Digit Container "); return sc; } @@ -152,7 +145,7 @@ namespace LVL1TGCTrigger { const DataHandle mcColl(0); sc = evtStore()->retrieve(mcColl,"TruthEvent"); if (sc.isFailure() && !mcColl) { - msg(MSG::WARNING) << "Cannot retrieve McEventCollection. McEventCollection is recorded in simulation file?" << endmsg; + ATH_MSG_WARNING("Cannot retrieve McEventCollection. McEventCollection is recorded in simulation file?"); } else { McEventCollection::const_iterator itr; m_nmuMC=0; @@ -177,7 +170,7 @@ namespace LVL1TGCTrigger { // write sc = ntupleSvc()->writeRecord("/NTUPLES/FILE1/merge"); if (!sc.isSuccess()) { - msg(MSG::ERROR) << "Cannot fill ntuple" << endmsg; + ATH_MSG_ERROR("Cannot fill ntuple"); return StatusCode::FAILURE; } @@ -186,7 +179,7 @@ namespace LVL1TGCTrigger { StatusCode MakeCoincidenceOut::bookHistos() { - if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "bookHistos is Called" << endmsg; + ATH_MSG_DEBUG("bookHistos is Called"); StatusCode sc; @@ -228,12 +221,12 @@ namespace LVL1TGCTrigger { if (sc.isSuccess()) sc = nt->addItem ("phiMC", m_nmuMC,m_phiMC); } } else { - msg(MSG::ERROR) << "Cannot book this histo" << endmsg; + ATH_MSG_ERROR("Cannot book this histo"); return StatusCode::FAILURE; } if (sc.isFailure()) { - msg(MSG::ERROR) << "Error happens during add an item..." << endmsg; + ATH_MSG_ERROR("Error happens during add an item..."); return sc; } } diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCArguments.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCArguments.cxx new file mode 100644 index 00000000000..e528a140ebe --- /dev/null +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCArguments.cxx @@ -0,0 +1,61 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#include "TrigT1TGC/TGCArguments.hh" + +namespace LVL1TGCTrigger { + + TGCArguments::TGCArguments(): + m_STRICTWD(false), + m_STRICTWT(false), + m_STRICTSD(false), + m_STRICTST(false), + m_OUTCOINCIDENCE(false), + m_TGCCOIN(nullptr), + m_DEBUGLEVEL(false), + m_SHPT_ORED(false), + m_USE_INNER(false), + m_INNER_VETO(false), + m_TILE_MU(false), + m_USE_CONDDB(false), + m_useRun3Config(false) + { + } + + TGCArguments::~TGCArguments(){ + } + + void TGCArguments::clear(){ + if(m_TGCCOIN!=nullptr)delete m_TGCCOIN; + } + + void TGCArguments::set_STRICTWD(bool v){ m_STRICTWD = v;} + void TGCArguments::set_STRICTWT(bool v){ m_STRICTWT = v;} + void TGCArguments::set_STRICTSD(bool v){ m_STRICTSD = v;} + void TGCArguments::set_STRICTST(bool v){ m_STRICTST = v;} + void TGCArguments::set_OUTCOINCIDENCE(bool v){ m_OUTCOINCIDENCE = v;} + void TGCArguments::set_TGCCOIN(TGCCoincidences* v){ m_TGCCOIN = v;} + void TGCArguments::set_DEBUGLEVEL(bool v){ m_DEBUGLEVEL = v;} + void TGCArguments::set_SHPT_ORED(bool v){ m_SHPT_ORED = v;} + void TGCArguments::set_USE_INNER(bool v){ m_USE_INNER = v;} + void TGCArguments::set_INNER_VETO(bool v){ m_INNER_VETO = v;} + void TGCArguments::set_TILE_MU(bool v){ m_TILE_MU = v;} + void TGCArguments::set_USE_CONDDB(bool v){ m_USE_CONDDB = v;} + void TGCArguments::set_useRun3Config(bool v){ m_useRun3Config = v;} + + bool TGCArguments::STRICTWD() const {return m_STRICTWD;} + bool TGCArguments::STRICTWT() const {return m_STRICTWT;} + bool TGCArguments::STRICTSD() const {return m_STRICTSD;} + bool TGCArguments::STRICTST() const {return m_STRICTST;} + bool TGCArguments::OUTCOINCIDENCE() const {return m_OUTCOINCIDENCE;} + TGCCoincidences* TGCArguments::TGCCOIN() const {return m_TGCCOIN;} + bool TGCArguments::DEBUGLEVEL() const {return m_DEBUGLEVEL;} + bool TGCArguments::SHPT_ORED() const {return m_SHPT_ORED;} + bool TGCArguments::USE_INNER() const {return m_USE_INNER;} + bool TGCArguments::INNER_VETO() const {return m_INNER_VETO;} + bool TGCArguments::TILE_MU() const {return m_TILE_MU;} + bool TGCArguments::USE_CONDDB() const {return m_USE_CONDDB;} + bool TGCArguments::useRun3Config() const {return m_useRun3Config;} + +} diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCDatabaseManager.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCDatabaseManager.cxx index 971b5d530e7..562edf4dc95 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCDatabaseManager.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCDatabaseManager.cxx @@ -20,8 +20,6 @@ namespace LVL1TGCTrigger { - extern bool g_DEBUGLEVEL; - TGCConnectionInPP* TGCDatabaseManager::getConnectionInPP(TGCPatchPanel* patchPanel) const { if(!patchPanel) return 0; @@ -75,8 +73,9 @@ void TGCDatabaseManager::addConnectionInPP(const TGCPatchPanel* patchPanel, (patchPanelIDs, cInPP_PPPs)); } -TGCDatabaseManager::TGCDatabaseManager() - : m_mapTileMu(0) +TGCDatabaseManager::TGCDatabaseManager(TGCArguments* tgcargs) + : m_mapTileMu(0), + m_tgcArgs(tgcargs) { // default constructor int i,j,k; @@ -99,8 +98,10 @@ TGCDatabaseManager::TGCDatabaseManager() } -TGCDatabaseManager::TGCDatabaseManager(const SG::ReadCondHandleKey& readCondKey, - const std::string& ver, bool ) + TGCDatabaseManager::TGCDatabaseManager(TGCArguments* tgcargs, + const SG::ReadCondHandleKey& readCondKey, + const std::string& ver, bool ) + : m_tgcArgs(tgcargs) { bool status = true; @@ -119,7 +120,7 @@ TGCDatabaseManager::TGCDatabaseManager(const SG::ReadCondHandleKeyreadData((TGCRegionType)(i+1)); } - if (g_DEBUGLEVEL) { + if (tgcArgs()->DEBUGLEVEL()) { IMessageSvc* msgSvc = 0; ISvcLocator* svcLocator = Gaudi::svcLocator(); if (svcLocator->service("MessageSvc", msgSvc) == StatusCode::FAILURE) { @@ -147,17 +148,17 @@ TGCDatabaseManager::TGCDatabaseManager(const SG::ReadCondHandleKeySTRICTWD()) { if(m_SType == WIREGROUP) return (A & D); } - if (g_STRICTSD) { + if (tgcArgs()->STRICTSD()) { if(m_SType == STRIP) return (A & D); } diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCElectronicsSystem.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCElectronicsSystem.cxx index 2e739d594d3..cfc418147dc 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCElectronicsSystem.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCElectronicsSystem.cxx @@ -33,9 +33,10 @@ void TGCElectronicsSystem::distributeSignal(LVL1TGCTrigger::TGCEvent* event) } -TGCElectronicsSystem::TGCElectronicsSystem() +TGCElectronicsSystem::TGCElectronicsSystem(TGCArguments* tgcargs) :m_DB(0), - m_tmdb(0) + m_tmdb(0), + m_tgcArgs(tgcargs) { for(int side=0; side < NumberOfSide; side++){ for(int oct=0; oct < NumberOfOctant; oct++){ @@ -48,10 +49,12 @@ TGCElectronicsSystem::TGCElectronicsSystem() } -TGCElectronicsSystem::TGCElectronicsSystem(TGCDatabaseManager* database, - bool ): + TGCElectronicsSystem::TGCElectronicsSystem(TGCArguments* tgcargs, + TGCDatabaseManager* database, + bool ): m_DB(database), - m_tmdb(0) + m_tmdb(0), + m_tgcArgs(tgcargs) { // TileMu m_tmdb = new TGCTMDB(); @@ -65,10 +68,10 @@ TGCElectronicsSystem::TGCElectronicsSystem(TGCDatabaseManager* database, SectorId = getSectorId(side,oct,mod); RegionType = getRegionType(mod); forwardBackward = getForwardBackward(side,oct,mod); - m_sector[side][oct][mod] = new TGCSector(SectorId, RegionType, - forwardBackward, - m_DB, - m_tmdb); + m_sector[side][oct][mod] = new TGCSector(tgcArgs(),SectorId, RegionType, + forwardBackward, + m_DB, + m_tmdb); } // loop module } // loop octant } //loop side diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCInnerCoincidenceMap.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCInnerCoincidenceMap.cxx index 63706f74bb8..61baf72d00d 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCInnerCoincidenceMap.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCInnerCoincidenceMap.cxx @@ -20,13 +20,11 @@ namespace LVL1TGCTrigger { - extern bool g_USE_INNER; - extern bool g_USE_CONDDB; - -TGCInnerCoincidenceMap::TGCInnerCoincidenceMap(const SG::ReadCondHandleKey& readCondKey) +TGCInnerCoincidenceMap::TGCInnerCoincidenceMap(TGCArguments* tgcargs, const SG::ReadCondHandleKey& readCondKey) :m_verName("NA"), m_side(0), m_fullCW(false), + m_tgcArgs(tgcargs), m_readCondKey(readCondKey) { // intialize map @@ -49,12 +47,14 @@ TGCInnerCoincidenceMap::TGCInnerCoincidenceMap(const SG::ReadCondHandleKey& readCondKey, + TGCInnerCoincidenceMap::TGCInnerCoincidenceMap(TGCArguments* tgcargs, + const SG::ReadCondHandleKey& readCondKey, const std::string& version, int sideID) :m_verName(version), m_side(sideID), m_fullCW(false), + m_tgcArgs(tgcargs), m_readCondKey(readCondKey) { // initialize map @@ -75,8 +75,8 @@ TGCInnerCoincidenceMap::TGCInnerCoincidenceMap(const SG::ReadCondHandleKeyUSE_INNER()) return; + if (tgcArgs()->USE_CONDDB()) return; ////////////////////////////// IMessageSvc* msgSvc = 0; @@ -96,7 +96,7 @@ TGCInnerCoincidenceMap::TGCInnerCoincidenceMap(const SG::ReadCondHandleKeyset_USE_INNER( false ); for (size_t sec=0; sec< N_EndcapSector; sec++){ for (size_t ssc=0; ssc< N_Endcap_SSC; ssc++){ m_flagPT[0][ssc][sec] =0; //pt1 @@ -283,7 +283,7 @@ int TGCInnerCoincidenceMap::getFlagPT(const int pt, if ((ssc<0)||(ssc>=N_Endcap_SSC)) return 0; if ((sec<0)||(sec>=N_EndcapSector)) return -1; - if (g_USE_CONDDB) { + if (tgcArgs()->USE_CONDDB()) { SG::ReadCondHandle readHandle{m_readCondKey}; const TGCTriggerData* readCdo{*readHandle}; return readCdo->getFlagPtEifi(m_side,pt-1,ssc,sec); @@ -300,7 +300,7 @@ int TGCInnerCoincidenceMap::getFlagROI(const int roi, if ((ssc<0)||(ssc>=N_Endcap_SSC)) return 0; if ((sec<0)||(sec>=N_EndcapSector)) return -1; - if (g_USE_CONDDB) { + if (tgcArgs()->USE_CONDDB()) { SG::ReadCondHandle readHandle{m_readCondKey}; const TGCTriggerData* readCdo{*readHandle}; return readCdo->getFlagRoiEifi(m_side,roi,ssc,sec); @@ -316,7 +316,7 @@ int TGCInnerCoincidenceMap::getTriggerBit(const int slot, const int read, const int bit) const { - if (g_USE_CONDDB) { + if (tgcArgs()->USE_CONDDB()) { SG::ReadCondHandle readHandle{m_readCondKey}; const TGCTriggerData* readCdo{*readHandle}; return readCdo->getTrigBitEifi(m_side,slot,ssc,sec,reg,read,bit); diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCInnerSB.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCInnerSB.cxx index da630ae4187..1c00aa4c4b8 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCInnerSB.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCInnerSB.cxx @@ -10,9 +10,7 @@ namespace LVL1TGCTrigger { -extern bool g_STRICTST; - -TGCInnerSB::TGCInnerSB():TGCSlaveBoard() +TGCInnerSB::TGCInnerSB(TGCArguments* tgcargs):TGCSlaveBoard(tgcargs) {} void TGCInnerSB::createSlaveBoardOut() @@ -121,7 +119,7 @@ void TGCInnerSB::doCoincidence() +b & d & !c */ - if(g_STRICTST){ + if(tgcArgs()->STRICTST()){ for(int i=base+1; isetChannel(i,( b[i-1] & b[i] )); } diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCInnerTrackletSlot.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCInnerTrackletSlot.cxx index 2e678f3973a..ff6679d0a16 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCInnerTrackletSlot.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCInnerTrackletSlot.cxx @@ -6,15 +6,18 @@ namespace LVL1TGCTrigger { - extern bool g_USE_CONDDB; - /** Constructor */ - TGCInnerTrackletSlot::TGCInnerTrackletSlot() { + TGCInnerTrackletSlot::TGCInnerTrackletSlot() + { m_sideId = -1; m_slotId = -1; clearTriggerBits(); } + void TGCInnerTrackletSlot::setTgcArguments( const TGCArguments* tgcargs ) { + m_tgcArgs = tgcargs; + } + void TGCInnerTrackletSlot::setSideId(const int sideId) { m_sideId = sideId; } diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCInnerTrackletSlotHolder.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCInnerTrackletSlotHolder.cxx index a8952f4b8a4..ce46293aa66 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCInnerTrackletSlotHolder.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCInnerTrackletSlotHolder.cxx @@ -6,12 +6,15 @@ namespace LVL1TGCTrigger { /** Constructor */ - TGCInnerTrackletSlotHolder::TGCInnerTrackletSlotHolder() { + TGCInnerTrackletSlotHolder::TGCInnerTrackletSlotHolder( TGCArguments* tgcargs): + m_tgcArgs(tgcargs) + { for(int sideId=0; sideIdexistOredSignal()) m_nHit+=doOrLogic(); // 18-Jan-01 Fixed by KH - if( g_DEBUGLEVEL && ( (m_nHit>0) || m_hasBIDOut || m_hasASDOut) ) showResult(); + if( tgcArgs()->DEBUGLEVEL() && ( (m_nHit>0) || m_hasBIDOut || m_hasASDOut) ) showResult(); #ifdef TGCDEBUG if ( (m_nHit>0) || m_hasBIDOut || m_hasASDOut) showResult(); diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx index b7a80a4a8ec..81c4642d1ae 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMap.cxx @@ -24,9 +24,6 @@ namespace LVL1TGCTrigger { - extern bool g_DEBUGLEVEL; - extern bool g_USE_CONDDB; - extern bool g_useRun3Config; bool TGCRPhiCoincidenceMap::test(int octantId, int moduleId, int subsector, int type, int pt, int dr, int dphi) const @@ -44,7 +41,7 @@ bool TGCRPhiCoincidenceMap::test(int octantId, int moduleId, int subsector, std::map > readMap; - if (g_USE_CONDDB){ + if (tgcArgs()->USE_CONDDB()){ readMap = readCdo->getReadMapBw(m_side, m_octant, pt); } else { readMap = m_mapDB[pt]; @@ -63,7 +60,8 @@ bool TGCRPhiCoincidenceMap::test(int octantId, int moduleId, int subsector, else return false; } -TGCRPhiCoincidenceMap::TGCRPhiCoincidenceMap(const SG::ReadCondHandleKey& readCondKey, +TGCRPhiCoincidenceMap::TGCRPhiCoincidenceMap(TGCArguments* tgcargs, + const SG::ReadCondHandleKey& readCondKey, const std::string& version, int sideId, int octantId) :m_numberOfDR(0), m_numberOfDPhi(0), @@ -71,15 +69,16 @@ TGCRPhiCoincidenceMap::TGCRPhiCoincidenceMap(const SG::ReadCondHandleKeyUSE_CONDDB()) { if (!checkVersion()){ m_verName = "NA"; return; } - if(!g_useRun3Config){ + if(!tgcArgs()->useRun3Config()){ this->readMap(); // read Coincidence Map for Run2 (6 thresholds) } else{ @@ -107,7 +106,7 @@ bool TGCRPhiCoincidenceMap::checkVersion() fullName = PathResolver::find_file( dbname.c_str(), "DATAPATH" ); bool isFound =( fullName.length() > 0 ); if (!isFound) { - if (g_DEBUGLEVEL) { + if (tgcArgs()->DEBUGLEVEL()) { log << MSG::DEBUG << " Could not found " << dbname.c_str() << " Default set is chosen !!" << endmsg; @@ -170,8 +169,8 @@ TGCRPhiCoincidenceMap::TGCRPhiCoincidenceMap(const TGCRPhiCoincidenceMap& right) m_side=right.m_side; m_octant=right.m_octant; m_fullCW=right.m_fullCW; - if(m_verName!="NA" && !g_useRun3Config) this->readMap(); // read Coincidence Map for Run2 (6 thresholds) - if(m_verName!="NA" && g_useRun3Config){/*this -> readMap_Run3(); This function will be implemented. */}// read Coincidence Map for Run3 (15 thresholds) + if(m_verName!="NA" && !tgcArgs()->useRun3Config()) this->readMap(); // read Coincidence Map for Run2 (6 thresholds) + if(m_verName!="NA" && tgcArgs()->useRun3Config()){/*this -> readMap_Run3(); This function will be implemented. */}// read Coincidence Map for Run3 (15 thresholds) } @@ -184,8 +183,8 @@ TGCRPhiCoincidenceMap& TGCRPhiCoincidenceMap::operator=(const TGCRPhiCoincidence m_side=right.m_side; m_octant=right.m_octant; m_fullCW=right.m_fullCW; - if(m_verName!="NA" && !g_useRun3Config) this->readMap(); // read Coincidence Map for Run2 (6 thresholds) - if(m_verName!="NA" && g_useRun3Config){ /*this -> readMap_Run3(); This function will be implemented.*/} // read Coincidence Map for Run3 (15 thresholds) + if(m_verName!="NA" && !tgcArgs()->useRun3Config()) this->readMap(); // read Coincidence Map for Run2 (6 thresholds) + if(m_verName!="NA" && tgcArgs()->useRun3Config()){ /*this -> readMap_Run3(); This function will be implemented.*/} // read Coincidence Map for Run3 (15 thresholds) } return *this; @@ -271,7 +270,7 @@ bool TGCRPhiCoincidenceMap::readMap() } // Warning : no window if (aWindow.size()==0) { - if (g_DEBUGLEVEL) { + if (tgcArgs()->DEBUGLEVEL()) { log << MSG::DEBUG << " No window is opened for (ptLevel,ssId,mod) = (" << ptLevel << ", " << ssId << ", " << mod << ")" @@ -280,7 +279,7 @@ bool TGCRPhiCoincidenceMap::readMap() } int addr = SUBSECTORADD(ssId,mod,phimod2,type); if (m_mapDB[ptLevel-1].find(addr)!=m_mapDB[ptLevel-1].end()) { - if (g_DEBUGLEVEL) { + if (tgcArgs()->DEBUGLEVEL()) { log << MSG::DEBUG << "This subsector was already reserved." << endmsg; diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMatrix.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMatrix.cxx index 64d267053a7..89ef007d2ab 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMatrix.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCRPhiCoincidenceMatrix.cxx @@ -17,10 +17,6 @@ namespace LVL1TGCTrigger { -extern bool g_OUTCOINCIDENCE; -extern TGCCoincidences * g_TGCCOIN; -extern bool g_DEBUGLEVEL; - void TGCRPhiCoincidenceMatrix::inputR(int rIn, int dRIn, int ptRIn) { m_r=rIn; @@ -92,12 +88,12 @@ TGCRPhiCoincidenceOut* TGCRPhiCoincidenceMatrix::doCoincidence() } } // loop pt - if (g_OUTCOINCIDENCE) { + if (tgcArgs()->OUTCOINCIDENCE()) { TGCCoincidence * coin = new TGCCoincidence(m_sectorLogic->getBid(), m_sectorLogic->getId(), m_sectorLogic->getModuleID(), m_sectorLogic->getRegion(), m_SSCId, m_r, m_phi[j], subsector, m_ptR, m_dR, m_ptPhi[j], m_dPhi[j], ptOut); - g_TGCCOIN->push_back(coin); + tgcArgs()->TGCCOIN()->push_back(coin); } // Trigger Out @@ -114,7 +110,7 @@ TGCRPhiCoincidenceOut* TGCRPhiCoincidenceMatrix::doCoincidence() } } - if (g_DEBUGLEVEL){ + if (tgcArgs()->DEBUGLEVEL()){ IMessageSvc* msgSvc = 0; ISvcLocator* svcLocator = Gaudi::svcLocator(); if (svcLocator->service("MessageSvc", msgSvc) != StatusCode::FAILURE) { @@ -140,10 +136,10 @@ void TGCRPhiCoincidenceMatrix::setRPhiMap(const TGCRPhiCoincidenceMap* map) this->m_map = map; } -TGCRPhiCoincidenceMatrix::TGCRPhiCoincidenceMatrix(const TGCSectorLogic* sL) +TGCRPhiCoincidenceMatrix::TGCRPhiCoincidenceMatrix(TGCArguments* tgcargs,const TGCSectorLogic* sL) : m_sectorLogic(sL), m_matrixOut(0), m_map(0), - m_nPhiHit(0), m_SSCId(0), m_r(0), m_dR(0), m_ptR(0) + m_nPhiHit(0), m_SSCId(0), m_r(0), m_dR(0), m_ptR(0), m_tgcArgs(tgcargs) { for (int i=0; i namespace LVL1TGCTrigger { - -extern bool g_SHPT_ORED; - //constructor -TGCSSCController::TGCSSCController(const TGCSectorLogic* sL) +TGCSSCController::TGCSSCController(TGCArguments* tgcargs, const TGCSectorLogic* sL) :m_sectorLogic(sL), m_NumberOfWireHighPtBoard(0), - m_region(FORWARD) + m_region(FORWARD), m_tgcArgs(tgcargs) { } @@ -74,7 +71,7 @@ TGCSSCControllerOut* TGCSSCController::distribute(TGCHighPtChipOut* wire[], TGCH int oredChamber=-1; if (chamberNo==4) oredChamber= 3; if (chamberNo==3) oredChamber= 4; - if (g_SHPT_ORED && (oredChamber>0)) { + if (tgcArgs()->SHPT_ORED() && (oredChamber>0)) { if(!out->hasHitPhi(oredChamber, PhiPosInSSC)){ out->setPhi(oredChamber, PhiPosInSSC, iPhi); out->setDPhi(oredChamber, PhiPosInSSC,strip->getDev(chip,iCandidate)); diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCSector.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCSector.cxx index cb86e0a7452..7671859f6b5 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCSector.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCSector.cxx @@ -15,8 +15,6 @@ namespace LVL1TGCTrigger { - extern bool g_DEBUGLEVEL; - int TGCSector::distributeSignal(const TGCASDOut* ASDOut) { int idPP,conPP,chPP; @@ -38,7 +36,7 @@ int TGCSector::distributeSignal(const TGCASDOut* ASDOut) notFound = m_ASDToPP[PPType]->getConnection(m_sideId,layer,rNumber,ch,&idPP,&conPP,&chPP); } - if (g_DEBUGLEVEL) { + if (tgcArgs()->DEBUGLEVEL()) { IMessageSvc* msgSvc = 0; ISvcLocator* svcLocator = Gaudi::svcLocator(); if (svcLocator->service("MessageSvc", msgSvc) == StatusCode::FAILURE) { @@ -78,11 +76,12 @@ int TGCSector::getPatchPanelType(TGCSignalType signal, int layer) const } } -TGCSector::TGCSector() +TGCSector::TGCSector( TGCArguments* tgcargs) : m_id(0), m_regionType(FORWARD), m_numberOfHit(0), m_sideId(0), m_octantId(0), m_moduleId(0), m_forwardBackward(ForwardSector), - m_SL(0), m_TMDB(0) + m_SL(0), m_TMDB(0), + m_tgcArgs(tgcargs) { for(unsigned int iPatchPanelType=0; iPatchPanelTypegetPPToSB()->getNumber(jpp); m_PP[jpp] = new TGCPatchPanel* [m_numberOfPP[jpp]]; for(int i=0; isetId(connection->getPPToSB()->getId(jpp,i)); m_PP[jpp][i]->setType(jpp); m_PP[jpp][i]->setRegion(m_regionType); @@ -207,10 +208,10 @@ void TGCSector::setModule(const TGCConnectionPPToSL* connection) m_numberOfSB[jsb] = connection->getSBToHPB()->getNumber(jsb); m_SB[jsb] = new TGCSlaveBoard* [m_numberOfSB[jsb]]; for(int i=0; isetId(connection->getSBToHPB()->getId(jsb,i)); m_SB[jsb][i]->setType(jsb); m_SB[jsb][i]->setRegion(m_regionType); @@ -235,7 +236,7 @@ void TGCSector::setModule(const TGCConnectionPPToSL* connection) } //m_SL - m_SL = new TGCSectorLogic(m_regionType, m_id); + m_SL = new TGCSectorLogic(tgcArgs(),m_regionType, m_id); m_SL->getSSCController()->setNumberOfWireHighPtBoard(connection->getHPBToSL()->getNumber(WHPB)); } else { //Inner @@ -248,8 +249,8 @@ void TGCSector::setModule(const TGCConnectionPPToSL* connection) m_numberOfPP[jpp] = connection->getPPToSB()->getNumber(jpp); m_PP[jpp] = new TGCPatchPanel* [m_numberOfPP[jpp]]; for(int i=0; isetId(connection->getPPToSB()->getId(jpp,i)); m_PP[jpp][i]->setType(jpp); m_PP[jpp][i]->setRegion(m_regionType); @@ -264,7 +265,7 @@ void TGCSector::setModule(const TGCConnectionPPToSL* connection) for( jsb=WISB; jsbsetType(jsb); m_SB[jsb][0]->setRegion(m_regionType); m_SB[jsb][0]->setId(0); diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx index aef46fd6ee2..32cc271a357 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx @@ -18,22 +18,15 @@ namespace LVL1TGCTrigger { - extern bool g_USE_INNER; - extern bool g_INNER_VETO; - extern bool g_TILE_MU; - extern bool g_USE_CONDDB; - extern bool g_useRun3Config; - - -TGCSectorLogic::TGCSectorLogic(TGCRegionType regionIn, int idIn): + TGCSectorLogic::TGCSectorLogic(TGCArguments* tgcargs, TGCRegionType regionIn, int idIn): m_bid(0), m_id(idIn), m_sectorId(0), m_moduleId(0), m_sideId(0), m_octantId(0), m_region(regionIn), m_NumberOfWireHighPtBoard(0), - m_SSCController(this), - m_matrix(this), + m_SSCController(tgcargs,this), + m_matrix(tgcargs,this), m_mapInner(0), m_mapTileMu(0), m_pTMDB(0), @@ -45,7 +38,8 @@ TGCSectorLogic::TGCSectorLogic(TGCRegionType regionIn, int idIn): m_stripHighPtBoard(0), m_stripHighPtChipOut(0), m_useInner(false), - m_useTileMu(false) + m_useTileMu(false), + m_tgcArgs(tgcargs) { m_sideId = (idIn/NumberOfModule)/NumberOfOctant; m_octantId = (idIn/NumberOfModule)%NumberOfOctant; @@ -69,8 +63,8 @@ TGCSectorLogic::TGCSectorLogic(TGCRegionType regionIn, int idIn): m_SSCController.setRegion(regionIn); - m_useInner = g_USE_INNER && (m_region==ENDCAP); - m_useTileMu = g_TILE_MU && (m_region==ENDCAP); + m_useInner = tgcArgs()->USE_INNER() && (m_region==ENDCAP); + m_useTileMu = tgcArgs()->TILE_MU() && (m_region==ENDCAP); } TGCSectorLogic::~TGCSectorLogic() @@ -185,7 +179,7 @@ void TGCSectorLogic::clockIn(const SG::ReadCondHandleKey readCon if (m_useInner) doInnerCoincidence(readCondKey, SSCid, coincidenceOut); if(coincidenceOut){ - if(g_useRun3Config){/*trackSelector.input(coincidenceOut);*/}// TrackSelector for Run3 + if(tgcArgs()->useRun3Config()){/*trackSelector.input(coincidenceOut);*/}// TrackSelector for Run3 else{m_preSelector.input(coincidenceOut);} // coincidenceOut will be deleted // in m_preSelector.input() if coincidenceOut has no hit @@ -195,7 +189,7 @@ void TGCSectorLogic::clockIn(const SG::ReadCondHandleKey readCon if(SSCCOut!=0) delete SSCCOut; SSCCOut=0; - if(g_useRun3Config){ + if(tgcArgs()->useRun3Config()){ /* if(trackSelectorOut!=0){delete trackSelectorOut;}//NEW trackSelectorOut = new TGCTrackSelectorOut;//NEW @@ -305,8 +299,8 @@ TGCSectorLogic::TGCSectorLogic(const TGCSectorLogic& right): m_sideId(right.m_sideId), m_octantId(right.m_octantId), m_region(right.m_region), m_NumberOfWireHighPtBoard(right.m_NumberOfWireHighPtBoard), - m_SSCController(this), - m_matrix(this), + m_SSCController(right.tgcArgs(),this), + m_matrix(right.tgcArgs(),this), m_mapInner(right.m_mapInner), m_mapTileMu(right.m_mapTileMu), m_pTMDB(right.m_pTMDB), m_preSelector(this), m_selector(this), @@ -314,7 +308,7 @@ TGCSectorLogic::TGCSectorLogic(const TGCSectorLogic& right): m_wordTileMuon(0), m_wordInnerStation(0), m_stripHighPtBoard(right.m_stripHighPtBoard), m_stripHighPtChipOut(0), - m_useInner(right.m_useInner), m_useTileMu(right.m_useTileMu) + m_useInner(right.m_useInner), m_useTileMu(right.m_useTileMu), m_tgcArgs(right.m_tgcArgs) { for(int i=0; i readHandle{readCondKey}; const TGCTriggerData* readCdo{*readHandle}; - if (g_USE_CONDDB) { + if (tgcArgs()->USE_CONDDB()) { bool isActiveTile = readCdo->isActive(TGCTriggerData::CW_TILE); m_useTileMu = isActiveTile && (m_region==ENDCAP); } @@ -509,8 +503,8 @@ void TGCSectorLogic::doInnerCoincidence(const SG::ReadCondHandleKeyINNER_VETO(); + if (tgcArgs()->USE_CONDDB()) { bool isActiveEifi = readCdo->isActive(TGCTriggerData::CW_EIFI); innerVeto = isActiveEifi && (m_region==ENDCAP); } diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCSlaveBoard.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCSlaveBoard.cxx index fb77d823620..59374e8683f 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCSlaveBoard.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCSlaveBoard.cxx @@ -10,12 +10,13 @@ namespace LVL1TGCTrigger { -TGCSlaveBoard::TGCSlaveBoard() +TGCSlaveBoard::TGCSlaveBoard( TGCArguments* tgcargs ) :m_lengthOfCoincidenceOut(0),m_coincidenceOut(0), m_slaveBoardOut(0), m_id(0), m_bid(-1),m_idHighPtBoard(0), m_type(0), m_region(FORWARD), - m_patchPanel(0), m_patchPanelOut(0) + m_patchPanel(0), m_patchPanelOut(0), + m_tgcArgs(tgcargs) { } diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCStripTripletSB.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCStripTripletSB.cxx index 02a8fbe46e0..4db970b4e16 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCStripTripletSB.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCStripTripletSB.cxx @@ -10,9 +10,7 @@ namespace LVL1TGCTrigger { -extern bool g_STRICTST; - -TGCStripTripletSB::TGCStripTripletSB():TGCSlaveBoard() +TGCStripTripletSB::TGCStripTripletSB( TGCArguments* tgcargs ):TGCSlaveBoard(tgcargs) {} void TGCStripTripletSB::createSlaveBoardOut() @@ -112,7 +110,7 @@ void TGCStripTripletSB::doCoincidence() +b & d & !c */ - if(g_STRICTST){ + if(tgcArgs()->STRICTST()){ for(int i=base+1; isetChannel(i,( b[i-1] & b[i] )); } diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCTileMuCoincidenceMap.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCTileMuCoincidenceMap.cxx index 06ceaaec392..e13f8ddb9a7 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCTileMuCoincidenceMap.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCTileMuCoincidenceMap.cxx @@ -20,12 +20,11 @@ namespace LVL1TGCTrigger { - extern bool g_TILE_MU; - extern bool g_USE_CONDDB; - -TGCTileMuCoincidenceMap::TGCTileMuCoincidenceMap(const SG::ReadCondHandleKey& readCondKey, +TGCTileMuCoincidenceMap::TGCTileMuCoincidenceMap(TGCArguments* tgcargs, + const SG::ReadCondHandleKey& readCondKey, const std::string& version) :m_verName(version), + m_tgcArgs(tgcargs), m_readCondKey(readCondKey) { // intialize map @@ -48,8 +47,8 @@ TGCTileMuCoincidenceMap::TGCTileMuCoincidenceMap(const SG::ReadCondHandleKeyTILE_MU()) return; + if (tgcArgs()->USE_CONDDB()) return; ////////////////////////////// IMessageSvc* msgSvc = 0; @@ -66,7 +65,7 @@ TGCTileMuCoincidenceMap::TGCTileMuCoincidenceMap(const SG::ReadCondHandleKeyset_TILE_MU( false ); for (size_t side=0; side< N_Side; side++){ for (size_t sec=0; sec< N_EndcapSector; sec++){ for (size_t ssc=0; ssc< N_Endcap_SSC; ssc++){ @@ -265,7 +264,7 @@ int TGCTileMuCoincidenceMap::getMask(const int module, if ((sec<0)||(sec>=TGCTriggerData::N_ENDCAP_SECTOR)) return TM_NA; if ((side<0)||(side>=TGCTriggerData::N_SIDE)) return TM_NA; - if (g_USE_CONDDB) { + if (tgcArgs()->USE_CONDDB()) { SG::ReadCondHandle readHandle{m_readCondKey}; const TGCTriggerData* readCdo{*readHandle}; return readCdo->getTrigMaskTile(module, ssc, sec, side); @@ -284,7 +283,7 @@ int TGCTileMuCoincidenceMap::getFlagPT(const int pt, if ((sec<0)||(sec>=N_EndcapSector)) return -1; if ((side<0)||(side>=N_Side)) return -1; - if (g_USE_CONDDB) { + if (tgcArgs()->USE_CONDDB()) { SG::ReadCondHandle readHandle{m_readCondKey}; const TGCTriggerData* readCdo{*readHandle}; return readCdo->getFlagPtTile(pt, ssc, sec, side); @@ -303,7 +302,7 @@ int TGCTileMuCoincidenceMap::getFlagROI(const int roi, if ((sec<0)||(sec>=N_EndcapSector)) return -1; if ((side<0)||(side>=N_Side)) return -1; - if (g_USE_CONDDB) { + if (tgcArgs()->USE_CONDDB()) { SG::ReadCondHandle readHandle{m_readCondKey}; const TGCTriggerData* readCdo{*readHandle}; return readCdo->getFlagRoiTile(roi, ssc, sec, side); diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCWireTripletSB.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCWireTripletSB.cxx index d39114491a8..4196c8cdb70 100644 --- a/Trigger/TrigT1/TrigT1TGC/src/TGCWireTripletSB.cxx +++ b/Trigger/TrigT1/TrigT1TGC/src/TGCWireTripletSB.cxx @@ -9,9 +9,7 @@ namespace LVL1TGCTrigger { -extern bool g_STRICTWT; - -TGCWireTripletSB::TGCWireTripletSB():TGCSlaveBoard() +TGCWireTripletSB::TGCWireTripletSB( TGCArguments* tgcargs ):TGCSlaveBoard(tgcargs) {} void TGCWireTripletSB::createSlaveBoardOut() @@ -92,7 +90,7 @@ void TGCWireTripletSB::doCoincidence() // bug fixed (KH 19/01/01) bool* out = new bool [totalLength]; for( i=0; iSTRICTWT()){ out[i] = ( b[i+3] & b[i+4] & b[i+5] ); } else { out[i] = ( b[i+3] & b[i+5] & !b[i+1] & !b[i+7] ) | -- GitLab