File indexing completed on 2023-10-25 09:56:42
0001 #ifndef L1GtConfigProducers_L1GtVhdlWriterCore_h
0002 #define L1GtConfigProducers_L1GtVhdlWriterCore_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 #include <iostream>
0022 #include <fstream>
0023 #include <map>
0024 #include <string>
0025 #include <vector>
0026
0027
0028 #include "L1GtVhdlTemplateFile.h"
0029
0030 #include "CondFormats/L1TObjects/interface/L1GtTriggerMenuFwd.h"
0031 #include "CondFormats/L1TObjects/interface/L1GtFwd.h"
0032 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetupFwd.h"
0033
0034 #include "CondFormats/L1TObjects/interface/L1GtMuonTemplate.h"
0035 #include "CondFormats/L1TObjects/interface/L1GtCaloTemplate.h"
0036 #include "CondFormats/L1TObjects/interface/L1GtEnergySumTemplate.h"
0037
0038 #include "L1TriggerConfig/L1GtConfigProducers/interface/L1GtVhdlDefinitions.h"
0039 #include "L1TriggerConfig/L1GtConfigProducers/interface/L1GtVhdlWriterBitManager.h"
0040 #include "L1TriggerConfig/L1GtConfigProducers/interface/L1GtVhdlWriterCore.h"
0041
0042 class L1GtVhdlWriterCore : public L1GtVhdlDefinitions {
0043 public:
0044
0045 L1GtVhdlWriterCore(const std::string &templatesDirectory, const std::string &outputDirectory, const bool &debug);
0046
0047
0048 ~L1GtVhdlWriterCore() override;
0049
0050
0051
0052
0053
0054
0055 bool returnConditionsOfOneClass(const L1GtConditionType &type,
0056 const L1GtConditionCategory &category,
0057 const L1GtObject &object,
0058 const ConditionMap &map,
0059 ConditionMap &outputMap);
0060
0061
0062
0063
0064
0065
0066 void getMuonSetupContentFromTriggerMenu(const unsigned short int &condChip,
0067 std::map<std::string, std::string> &muonParameters);
0068
0069
0070 bool getSubstParamCommonFromTriggerMenu(const unsigned short int &condChip,
0071 L1GtVhdlTemplateFile &particle,
0072 const L1GtObject &object,
0073 const L1GtConditionCategory &category,
0074 std::string ¶meterStr);
0075
0076 bool getCaloSetupContentFromTriggerMenu(const unsigned short int &condChip,
0077 std::map<std::string, std::string> &caloParameters,
0078 const L1GtObject &caloObject);
0079
0080
0081 bool getEsumsSetupContentFromTriggerMenu(const unsigned short int &condChip,
0082 const L1GtObject &object,
0083 std::string &energySumParameter);
0084
0085
0086
0087
0088
0089
0090
0091
0092 bool getCondChipVhdContentFromTriggerMenu(const unsigned short int &condChip,
0093 std::map<std::string, L1GtVhdlTemplateFile> &templates,
0094 std::map<std::string, std::string> &commonParams);
0095
0096 std::string retNumberOfConditionsString(const std::string &typeStr, const int &number);
0097
0098 bool findObjectType(const L1GtObject &object, ConditionMap &map);
0099
0100
0101
0102
0103
0104
0105 void addJetCountsToCond2IntMap(const int chip,
0106 const std::vector<ConditionMap> &conditionMap,
0107 std::map<std::string, int> &conditionToIntegerMap);
0108
0109
0110
0111 bool processAlgorithmMap(std::vector<std::map<int, std::string> > &algoStrings);
0112
0113
0114 void buildCommonHeader(std::map<std::string, std::string> &headerParameters,
0115 const std::vector<std::string> &connectedChannels);
0116
0117
0118 L1GtVhdlTemplateFile openVhdlFileWithCommonHeader(const std::string &filename, const std::string &outputFilename);
0119
0120
0121 L1GtVhdlTemplateFile retrunCommonHeader();
0122
0123
0124 void printCommonHeader();
0125
0126
0127 bool makeFirmware(const std::vector<ConditionMap> &conditionMap, const AlgorithmMap &algorithmMap);
0128
0129
0130 void writeMuonSetupVhdl(std::map<std::string, std::string> &muonParameters,
0131 const std::string &particle,
0132 unsigned short int &condChip);
0133
0134
0135 void writeConditionChipSetup(const std::map<std::string, L1GtVhdlTemplateFile> &templates,
0136 const std::map<std::string, std::string> &common,
0137 const unsigned short int &chip);
0138
0139
0140 void writeDefValPkg(const std::vector<ConditionMap> &conditionMap, const int &chip);
0141
0142
0143 void writeEtmSetup(std::string &etmString, const int &condChip);
0144
0145
0146 void writeAlgoSetup(std::vector<std::map<int, std::string> > &algoStrings);
0147
0148
0149 void writeQsfSetupFiles(const std::string &version);
0150
0151
0152 static std::string int2str(const int &integerValue);
0153
0154
0155 bool getIntVal(const std::map<std::string, int> &map, const std::string &searchValue, int &intVal);
0156
0157
0158 std::string gtTemplatesPath();
0159
0160
0161 void msg(const std::string &message);
0162
0163
0164 std::vector<std::string> getMsgBuf();
0165
0166
0167
0168 std::string index4CondChipVhd(int intval);
0169
0170
0171
0172
0173 void countCondsAndAdd2NumberVec(const L1GtConditionType &type,
0174 const L1GtConditionCategory &category,
0175 const L1GtObject &object,
0176 const ConditionMap &map,
0177 ConditionMap &outputMap,
0178 const int &condChip);
0179
0180 void initializeDeltaConditions();
0181
0182
0183 void writeCond2intMap2File();
0184
0185
0186 void printConditionsOfCategory(const L1GtConditionCategory &category, const ConditionMap &map);
0187
0188
0189 L1GtConditionCategory getCategoryFromObject(const L1GtObject &object);
0190
0191
0192
0193 std::string buildDefValString(const int &conditionIndex, const std::vector<int> &values);
0194
0195 void writeCondChipPkg(const int &chip);
0196
0197 std::map<std::string, int> getCond2IntMap();
0198
0199
0200
0201 bool buildDefValuesBuffer(L1GtVhdlTemplateFile &buffer,
0202 const std::map<L1GtConditionType, std::string> &typeList,
0203 const std::vector<std::string> &defValuesList,
0204 const L1GtObject &object);
0205
0206
0207
0208 std::string getDefValsFromTriggerMenu(const L1GtConditionType &type,
0209 const L1GtObject &object,
0210 const VmeRegister ®);
0211
0212
0213 std::string sp(const std::string &name);
0214
0215 std::string chip2OutputSubDir(const int &chip);
0216
0217 private:
0218
0219 const std::vector<ConditionMap> *conditionMap_;
0220
0221
0222 const AlgorithmMap *algorithmMap_;
0223
0224
0225 std::map<std::string, int> conditionToIntegerMap_;
0226
0227
0228 std::map<L1GtConditionType, std::string> condType2Str_;
0229
0230
0231 std::map<L1GtObject, std::string> caloType2Int_;
0232
0233
0234 std::map<L1GtObject, std::string> objType2Str_;
0235
0236
0237 std::vector<L1GtObject> caloObjects_;
0238
0239
0240 std::vector<L1GtObject> esumObjects_;
0241
0242
0243 std::string vhdlDir_;
0244
0245
0246 std::string outputDir_;
0247
0248
0249 L1GtVhdlWriterBitManager bm_;
0250
0251 std::string version_;
0252
0253
0254 L1GtVhdlTemplateFile commonHeader_;
0255
0256 std::vector<std::string> internMessageBuf_;
0257
0258
0259 std::vector<std::vector<std::string> > numberOfConditions_;
0260
0261
0262 bool debugMode_;
0263 };
0264 #endif