Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-06-28 02:36:28

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