Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-24 02:59:17

0001 #ifndef L1TGlobal_TriggerMenuParser_h
0002 #define L1TGlobal_TriggerMenuParser_h
0003 
0004 /**
0005  * \class TriggerMenuParser
0006  *
0007  *
0008  * Description: Xerces-C XML parser for the L1 Trigger menu.
0009  *
0010  * Implementation:
0011  *    <TODO: enter implementation details>
0012  *
0013  * \author: Vasile Mihai Ghete - HEPHY Vienna
0014  * \author  M. Eder            - HEPHY Vienna - ORCA version, reduced functionality
0015  * \author  Vladimir Rekovic
0016  *                - indexing
0017  *                - correlations with overlap object removal
0018  * \author R. Cavanaugh
0019  *                - displaced muons
0020  * \author Elisa Fontanesi                                                                               
0021  *                - extended for three-body correlation conditions                                                               
0022  *                                                                  
0023  *
0024  * $Date$
0025  * $Revision$
0026  *
0027  */
0028 
0029 // system include files
0030 #include <string>
0031 #include <vector>
0032 
0033 #include "L1Trigger/L1TGlobal/interface/TriggerMenuFwd.h"
0034 
0035 #include "L1Trigger/L1TGlobal/interface/MuonTemplate.h"
0036 #include "L1Trigger/L1TGlobal/interface/MuonShowerTemplate.h"
0037 #include "L1Trigger/L1TGlobal/interface/CaloTemplate.h"
0038 #include "L1Trigger/L1TGlobal/interface/EnergySumTemplate.h"
0039 #include "L1Trigger/L1TGlobal/interface/CorrelationTemplate.h"
0040 #include "L1Trigger/L1TGlobal/interface/CorrelationThreeBodyTemplate.h"
0041 #include "L1Trigger/L1TGlobal/interface/CorrelationWithOverlapRemovalTemplate.h"
0042 #include "L1Trigger/L1TGlobal/interface/ExternalTemplate.h"
0043 
0044 #include "L1Trigger/L1TGlobal/interface/GlobalScales.h"
0045 
0046 #include "CondFormats/L1TObjects/interface/L1TUtmTriggerMenu.h"
0047 
0048 #include <cmath>
0049 #include "CondFormats/L1TObjects/interface/L1TUtmTriggerMenu.h"
0050 #include "CondFormats/L1TObjects/interface/L1TUtmAlgorithm.h"
0051 #include "CondFormats/L1TObjects/interface/L1TUtmCondition.h"
0052 #include "CondFormats/L1TObjects/interface/L1TUtmObject.h"
0053 #include "CondFormats/L1TObjects/interface/L1TUtmCut.h"
0054 #include "CondFormats/L1TObjects/interface/L1TUtmScale.h"
0055 
0056 // forward declarations
0057 class GlobalCondition;
0058 class GlobalAlgorithm;
0059 
0060 namespace l1t {
0061 
0062   typedef enum { COS, SIN } TrigFunc_t;
0063 
0064   // class declaration
0065   class TriggerMenuParser {
0066   public:
0067     /// constructor
0068     ///    empty
0069     TriggerMenuParser();
0070 
0071     /// destructor
0072     virtual ~TriggerMenuParser();
0073 
0074   public:
0075     ///   get / set the number of condition chips in GTL
0076     inline const unsigned int gtNumberConditionChips() const { return m_numberConditionChips; }
0077 
0078     void setGtNumberConditionChips(const unsigned int&);
0079 
0080     ///   get / set the number of pins on the GTL condition chips
0081     inline const unsigned int gtPinsOnConditionChip() const { return m_pinsOnConditionChip; }
0082 
0083     void setGtPinsOnConditionChip(const unsigned int&);
0084 
0085     ///   get / set the correspondence "condition chip - GTL algorithm word"
0086     ///   in the hardware
0087     inline std::vector<int> gtOrderConditionChip() const { return m_orderConditionChip; }
0088 
0089     void setGtOrderConditionChip(const std::vector<int>&);
0090 
0091     /// get / set the number of physics trigger algorithms
0092     inline const unsigned int gtNumberPhysTriggers() const { return m_numberPhysTriggers; }
0093 
0094     void setGtNumberPhysTriggers(const unsigned int&);
0095 
0096   public:
0097     /// get / set / build the condition maps
0098     inline const std::vector<ConditionMap>& gtConditionMap() const { return m_conditionMap; }
0099 
0100     void setGtConditionMap(const std::vector<ConditionMap>&);
0101 
0102     /// get / set the trigger menu names
0103     inline const std::string& gtTriggerMenuInterface() const { return m_triggerMenuInterface; }
0104 
0105     void setGtTriggerMenuInterface(const std::string&);
0106 
0107     //
0108     inline const std::string& gtTriggerMenuName() const { return m_triggerMenuName; }
0109 
0110     void setGtTriggerMenuName(const std::string&);
0111 
0112     //
0113     inline const unsigned long gtTriggerMenuImplementation() const { return m_triggerMenuImplementation; }
0114 
0115     void setGtTriggerMenuImplementation(const unsigned long&);
0116 
0117     /// menu associated scale key
0118     inline const std::string& gtScaleDbKey() const { return m_scaleDbKey; }
0119 
0120     /// menu associated scales
0121     inline const GlobalScales& gtScales() const { return m_gtScales; }
0122 
0123     void setGtScaleDbKey(const std::string&);
0124 
0125     /// get / set the vectors containing the conditions
0126     inline const std::vector<std::vector<MuonTemplate> >& vecMuonTemplate() const { return m_vecMuonTemplate; }
0127     void setVecMuonTemplate(const std::vector<std::vector<MuonTemplate> >&);
0128 
0129     //
0130     inline const std::vector<std::vector<MuonShowerTemplate> >& vecMuonShowerTemplate() const {
0131       return m_vecMuonShowerTemplate;
0132     }
0133     void setVecMuonShowerTemplate(const std::vector<std::vector<MuonShowerTemplate> >&);
0134 
0135     //
0136     inline const std::vector<std::vector<CaloTemplate> >& vecCaloTemplate() const { return m_vecCaloTemplate; }
0137 
0138     void setVecCaloTemplate(const std::vector<std::vector<CaloTemplate> >&);
0139 
0140     //
0141     inline const std::vector<std::vector<EnergySumTemplate> >& vecEnergySumTemplate() const {
0142       return m_vecEnergySumTemplate;
0143     }
0144 
0145     void setVecEnergySumTemplate(const std::vector<std::vector<EnergySumTemplate> >&);
0146 
0147     //
0148     inline const std::vector<std::vector<ExternalTemplate> >& vecExternalTemplate() const {
0149       return m_vecExternalTemplate;
0150     }
0151 
0152     void setVecExternalTemplate(const std::vector<std::vector<ExternalTemplate> >&);
0153 
0154     //
0155     inline const std::vector<std::vector<CorrelationTemplate> >& vecCorrelationTemplate() const {
0156       return m_vecCorrelationTemplate;
0157     }
0158 
0159     void setVecCorrelationTemplate(const std::vector<std::vector<CorrelationTemplate> >&);
0160 
0161     //
0162     inline const std::vector<std::vector<CorrelationThreeBodyTemplate> >& vecCorrelationThreeBodyTemplate() const {
0163       return m_vecCorrelationThreeBodyTemplate;
0164     }
0165 
0166     void setVecCorrelationThreeBodyTemplate(const std::vector<std::vector<CorrelationThreeBodyTemplate> >&);
0167 
0168     //
0169     inline const std::vector<std::vector<CorrelationWithOverlapRemovalTemplate> >&
0170     vecCorrelationWithOverlapRemovalTemplate() const {
0171       return m_vecCorrelationWithOverlapRemovalTemplate;
0172     }
0173 
0174     void setVecCorrelationWithOverlapRemovalTemplate(
0175         const std::vector<std::vector<CorrelationWithOverlapRemovalTemplate> >&);
0176 
0177     // get / set the vectors containing the conditions for correlation templates
0178     //
0179     inline const std::vector<std::vector<MuonTemplate> >& corMuonTemplate() const { return m_corMuonTemplate; }
0180 
0181     void setCorMuonTemplate(const std::vector<std::vector<MuonTemplate> >&);
0182 
0183     //
0184     inline const std::vector<std::vector<CaloTemplate> >& corCaloTemplate() const { return m_corCaloTemplate; }
0185 
0186     void setCorCaloTemplate(const std::vector<std::vector<CaloTemplate> >&);
0187 
0188     //
0189     inline const std::vector<std::vector<EnergySumTemplate> >& corEnergySumTemplate() const {
0190       return m_corEnergySumTemplate;
0191     }
0192 
0193     void setCorEnergySumTemplate(const std::vector<std::vector<EnergySumTemplate> >&);
0194 
0195     /// get / set the algorithm map (by name)
0196     inline const AlgorithmMap& gtAlgorithmMap() const { return m_algorithmMap; }
0197 
0198     void setGtAlgorithmMap(const AlgorithmMap&);
0199 
0200     /// get / set the algorithm map (by alias)
0201     inline const AlgorithmMap& gtAlgorithmAliasMap() const { return m_algorithmAliasMap; }
0202 
0203     void setGtAlgorithmAliasMap(const AlgorithmMap&);
0204 
0205   public:
0206     void parseCondFormats(const L1TUtmTriggerMenu* utmMenu);
0207 
0208     std::map<std::string, unsigned int> getExternalSignals(const L1TUtmTriggerMenu* utmMenu);
0209 
0210   public:
0211     /// get / set the XML parser creation date, author, description for menu interface, menu
0212     inline const std::string& gtTriggerMenuInterfaceDate() const { return m_triggerMenuInterfaceDate; }
0213 
0214     void setGtTriggerMenuInterfaceDate(const std::string&);
0215 
0216     inline const std::string& gtTriggerMenuInterfaceAuthor() const { return m_triggerMenuInterfaceAuthor; }
0217 
0218     void setGtTriggerMenuInterfaceAuthor(const std::string&);
0219 
0220     inline const std::string& gtTriggerMenuInterfaceDescription() const { return m_triggerMenuInterfaceDescription; }
0221 
0222     void setGtTriggerMenuInterfaceDescription(const std::string&);
0223 
0224     //
0225 
0226     inline const int gtTriggerMenuUUID() const { return m_triggerMenuUUID; }
0227 
0228     void setGtTriggerMenuUUID(const int);
0229 
0230     inline const std::string& gtTriggerMenuDate() const { return m_triggerMenuDate; }
0231 
0232     void setGtTriggerMenuDate(const std::string&);
0233 
0234     inline const std::string& gtTriggerMenuAuthor() const { return m_triggerMenuAuthor; }
0235 
0236     void setGtTriggerMenuAuthor(const std::string&);
0237 
0238     inline const std::string& gtTriggerMenuDescription() const { return m_triggerMenuDescription; }
0239 
0240     void setGtTriggerMenuDescription(const std::string&);
0241 
0242     inline const std::string& gtAlgorithmImplementation() const { return m_algorithmImplementation; }
0243 
0244     void setGtAlgorithmImplementation(const std::string&);
0245 
0246   private:
0247     // methods for conditions and algorithms
0248 
0249     /// clearMaps - delete all conditions and algorithms in
0250     /// the maps and clear the maps.
0251     void clearMaps();
0252 
0253     /// insertConditionIntoMap - safe insert of condition into condition map.
0254     /// if the condition name already exists, do not insert it and return false
0255     bool insertConditionIntoMap(GlobalCondition& cond, const int chipNr);
0256 
0257     /// insert an algorithm into algorithm map
0258     bool insertAlgorithmIntoMap(const GlobalAlgorithm& alg);
0259 
0260     template <typename T>
0261     std::string l1t2string(T);
0262     int l1tstr2int(const std::string data);
0263 
0264     /// parse scales
0265     /*     bool parseScale(L1TUtmScale scale); */
0266     //    bool parseScales( L1TUtmScale scale);
0267     bool parseScales(std::map<std::string, tmeventsetup::esScale> scaleMap);
0268 
0269     /// parse a muon condition
0270     /*     bool parseMuon(XERCES_CPP_NAMESPACE::DOMNode* node, */
0271     /*             const std::string& name, unsigned int chipNr = 0, */
0272     /*             const bool corrFlag = false); */
0273     bool parseMuon(L1TUtmCondition condMu, unsigned int chipNr = 0, const bool corrFlag = false);
0274 
0275     bool parseMuonCorr(const L1TUtmObject* condMu, unsigned int chipNr = 0);
0276 
0277     /// parse a muon shower condition
0278     bool parseMuonShower(L1TUtmCondition condMu, unsigned int chipNr = 0, const bool corrFlag = false);
0279 
0280     /// parse a calorimeter condition
0281     /*     bool parseCalo(XERCES_CPP_NAMESPACE::DOMNode* node, */
0282     /*             const std::string& name, unsigned int chipNr = 0, */
0283     /*             const bool corrFlag = false); */
0284     bool parseCalo(L1TUtmCondition condCalo, unsigned int chipNr = 0, const bool corrFlag = false);
0285 
0286     bool parseCaloCorr(const L1TUtmObject* corrCalo, unsigned int chipNr = 0);
0287 
0288     /// parse an "energy sum" condition
0289     /* bool parseEnergySum(XERCES_CPP_NAMESPACE::DOMNode* node, */
0290     /*         const std::string& name, unsigned int chipNr = 0, */
0291     /*         const bool corrFlag = false); */
0292 
0293     bool parseEnergySum(L1TUtmCondition condEnergySums, unsigned int chipNr = 0, const bool corrFlag = false);
0294 
0295     bool parseEnergySumCorr(const L1TUtmObject* corrESum, unsigned int chipNr = 0);
0296 
0297     bool parseExternal(L1TUtmCondition condExt, unsigned int chipNr = 0);
0298 
0299     /// parse a correlation condition
0300     bool parseCorrelation(L1TUtmCondition corrCond, unsigned int chipNr = 0);
0301 
0302     /// parse a three-body correlation condition
0303     bool parseCorrelationThreeBody(L1TUtmCondition corrCond, unsigned int chipNr = 0);
0304 
0305     /// parse a correlation condition with overlap removal
0306     bool parseCorrelationWithOverlapRemoval(const L1TUtmCondition& corrCond, unsigned int chipNr = 0);
0307 
0308     /// parse all algorithms
0309     //bool parseAlgorithms(XERCES_CPP_NAMESPACE::XercesDOMParser* parser);
0310     bool parseAlgorithm(L1TUtmAlgorithm algorithm, unsigned int chipNr = 0);
0311 
0312     // Parse LUT for Cal Mu Eta
0313     void parseCalMuEta_LUTS(std::map<std::string, tmeventsetup::esScale> scaleMap, std::string obj1, std::string obj2);
0314 
0315     // Parse LUT for Cal Mu Phi
0316     void parseCalMuPhi_LUTS(std::map<std::string, tmeventsetup::esScale> scaleMap, std::string obj1, std::string obj2);
0317 
0318     // Parse LUT for Pt LUT in Mass calculation
0319     void parsePt_LUTS(std::map<std::string, tmeventsetup::esScale> scaleMap,
0320                       std::string lutpfx,
0321                       std::string obj1,
0322                       unsigned int prec);
0323 
0324     // Parse LUT for Upt LUT in Mass calculation for displaced muons
0325     void parseUpt_LUTS(std::map<std::string, tmeventsetup::esScale> scaleMap,
0326                        std::string lutpfx,
0327                        std::string obj1,
0328                        unsigned int prec);
0329 
0330     // Parse LUT for Delta Eta and Cosh
0331     void parseDeltaEta_Cosh_LUTS(std::map<std::string, tmeventsetup::esScale> scaleMap,
0332                                  std::string obj1,
0333                                  std::string obj2,
0334                                  unsigned int prec1,
0335                                  unsigned int prec2);
0336 
0337     // Parse LUT for Delta Eta and Cosh
0338     void parseDeltaPhi_Cos_LUTS(const std::map<std::string, tmeventsetup::esScale>& scaleMap,
0339                                 const std::string& obj1,
0340                                 const std::string& obj2,
0341                                 unsigned int prec1,
0342                                 unsigned int prec2);
0343 
0344     // Parse LUT for Sin(Phi),Cos(Phi) in TwoBodyPt algorithm calculation
0345     void parsePhi_Trig_LUTS(const std::map<std::string, tmeventsetup::esScale>& scaleMap,
0346                             const std::string& obj,
0347                             TrigFunc_t func,
0348                             unsigned int prec);
0349 
0350   private:
0351     /// hardware limits
0352 
0353     /// number of condition chips
0354     unsigned int m_numberConditionChips;
0355 
0356     /// number of pins on the GTL condition chips
0357     unsigned int m_pinsOnConditionChip;
0358 
0359     /// correspondence "condition chip - GTL algorithm word" in the hardware
0360     /// chip 2: 0 - 95;  chip 1: 96 - 128 (191)
0361     std::vector<int> m_orderConditionChip;
0362 
0363     /// number of physics trigger algorithms
0364     unsigned int m_numberPhysTriggers;
0365 
0366     /// number of technical triggers
0367     //unsigned int m_numberTechTriggers;
0368 
0369   private:
0370     std::string m_triggerMenuInterfaceDate;
0371     std::string m_triggerMenuInterfaceAuthor;
0372     std::string m_triggerMenuInterfaceDescription;
0373 
0374     std::string m_triggerMenuDate;
0375     std::string m_triggerMenuAuthor;
0376     std::string m_triggerMenuDescription;
0377 
0378     std::string m_algorithmImplementation;
0379 
0380   private:
0381     /// map containing the conditions (per condition chip) - transient
0382     std::vector<ConditionMap> m_conditionMap;
0383 
0384   private:
0385     /// menu names
0386     std::string m_triggerMenuInterface;
0387     std::string m_triggerMenuName;
0388     unsigned long m_triggerMenuImplementation;
0389     unsigned long m_triggerMenuUUID;
0390 
0391     /// menu associated scale key
0392     std::string m_scaleDbKey;
0393 
0394     /// vectors containing the conditions
0395     /// explicit, due to persistency...
0396     std::vector<std::vector<MuonTemplate> > m_vecMuonTemplate;
0397     std::vector<std::vector<MuonShowerTemplate> > m_vecMuonShowerTemplate;
0398     std::vector<std::vector<CaloTemplate> > m_vecCaloTemplate;
0399     std::vector<std::vector<EnergySumTemplate> > m_vecEnergySumTemplate;
0400     std::vector<std::vector<ExternalTemplate> > m_vecExternalTemplate;
0401 
0402     std::vector<std::vector<CorrelationTemplate> > m_vecCorrelationTemplate;
0403     std::vector<std::vector<CorrelationThreeBodyTemplate> > m_vecCorrelationThreeBodyTemplate;
0404     std::vector<std::vector<CorrelationWithOverlapRemovalTemplate> > m_vecCorrelationWithOverlapRemovalTemplate;
0405     std::vector<std::vector<MuonTemplate> > m_corMuonTemplate;
0406     std::vector<std::vector<CaloTemplate> > m_corCaloTemplate;
0407     std::vector<std::vector<EnergySumTemplate> > m_corEnergySumTemplate;
0408 
0409     /// map containing the physics algorithms (by name)
0410     AlgorithmMap m_algorithmMap;
0411 
0412     /// map containing the physics algorithms (by alias)
0413     AlgorithmMap m_algorithmAliasMap;
0414 
0415     // class containing the scales from the L1 Menu XML
0416     GlobalScales m_gtScales;
0417   };
0418 
0419 }  // namespace l1t
0420 #endif /*L1TGlobal_TriggerMenuParser_h*/