File indexing completed on 2025-06-03 00:12:19
0001 #include "L1Trigger/TrackFindingTMTT/interface/Settings.h"
0002 #include "FWCore/Utilities/interface/Exception.h"
0003 #include <set>
0004 #include <cmath>
0005
0006 using namespace std;
0007
0008 namespace tmtt {
0009
0010
0011
0012
0013 Settings::Settings()
0014 :
0015
0016
0017
0018
0019
0020 enableDigitize_(false),
0021 useApproxB_(true),
0022 bApprox_gradient_(0.886454),
0023 bApprox_intercept_(0.504148),
0024 numPhiNonants_(9),
0025 numPhiSectors_(9),
0026 chosenRofPhi_(55.),
0027 etaRegions_(
0028 {-2.4, -2.08, -1.68, -1.26, -0.90, -0.62, -0.41, -0.20, 0.0, 0.20, 0.41, 0.62, 0.90, 1.26, 1.68, 2.08, 2.4}),
0029 chosenRofZ_(50.0),
0030 houghMinPt_(2.0),
0031 minStubLayers_(4),
0032 minPtToReduceLayers_(99999.),
0033 reduceLayerID_(true),
0034 minFracMatchStubsOnReco_(-99),
0035 minFracMatchStubsOnTP_(-99),
0036 minNumMatchLayers_(4),
0037 minNumMatchPSLayers_(0),
0038 stubMatchStrict_(false),
0039
0040
0041 kalmanDebugLevel_(0),
0042 kalmanMinNumStubs_(4),
0043 kalmanMaxNumStubs_(6),
0044 kalmanAddBeamConstr_(false),
0045 kalmanRemove2PScut_(true),
0046 kalmanMaxSkipLayersHard_(1),
0047 kalmanMaxSkipLayersEasy_(2),
0048 kalmanMaxStubsEasy_(10),
0049 kfUseMaybeLayers_(true),
0050 kfLayerVsPtToler_({999., 999., 0.1, 0.1, 0.05, 0.05, 0.05}),
0051 kfLayerVsD0Cut5_({999., 999., 999., 10., 10., 10., 10.}),
0052 kfLayerVsZ0Cut5_({999., 999., 25.5, 25.5, 25.5, 25.5, 25.5}),
0053 kfLayerVsZ0Cut4_({999., 999., 15., 15., 15., 15., 15.}),
0054 kfLayerVsChiSq5_({999., 999., 10., 30., 80., 120., 160.}),
0055 kfLayerVsChiSq4_({999., 999., 10., 30., 80., 120., 160.}),
0056 kalmanMaxStubsPerLayer_(4),
0057 kalmanMultiScattTerm_(0.00075),
0058 kalmanChi2RphiScale_(8),
0059 kalmanHOtilted_(true),
0060 kalmanHOhelixExp_(true),
0061 kalmanHOalpha_(1),
0062 kalmanHOprojZcorr_(1),
0063 kalmanHOfw_(false) {
0064 hybrid_ = true;
0065 magneticField_ = 0.;
0066 killScenario_ = 0;
0067 killRecover_ = false;
0068
0069 if (hybrid_) {
0070 if (not useApproxB_) {
0071 throw cms::Exception("BadConfig")
0072 << "TMTT Settings Error: module tilt angle unknown, so must set useApproxB = true";
0073 }
0074 }
0075 }
0076
0077
0078
0079
0080 Settings::Settings(const edm::ParameterSet& iConfig)
0081 :
0082
0083
0084
0085
0086 magneticFieldInputTag_(iConfig.getParameter<edm::ESInputTag>("magneticFieldInputTag")),
0087 trackerGeometryInputTag_(iConfig.getParameter<edm::ESInputTag>("trackerGeometryInputTag")),
0088 trackerTopologyInputTag_(iConfig.getParameter<edm::ESInputTag>("trackerTopologyInputTag")),
0089 ttStubAlgoInputTag_(iConfig.getParameter<edm::ESInputTag>("ttStubAlgoInputTag")),
0090
0091 stubInputTag_(iConfig.getParameter<edm::InputTag>("stubInputTag")),
0092 tpInputTag_(iConfig.getParameter<edm::InputTag>("tpInputTag")),
0093 stubTruthInputTag_(iConfig.getParameter<edm::InputTag>("stubTruthInputTag")),
0094 clusterTruthInputTag_(iConfig.getParameter<edm::InputTag>("clusterTruthInputTag")),
0095 genJetInputTag_(iConfig.getParameter<edm::InputTag>("genJetInputTag")),
0096
0097
0098 genCuts_(iConfig.getParameter<edm::ParameterSet>("GenCuts")),
0099 stubCuts_(iConfig.getParameter<edm::ParameterSet>("StubCuts")),
0100 stubDigitize_(iConfig.getParameter<edm::ParameterSet>("StubDigitize")),
0101 trackerModuleType_(iConfig.getParameter<edm::ParameterSet>("TrackerModuleType")),
0102 geometricProc_(iConfig.getParameter<edm::ParameterSet>("GeometricProc")),
0103 phiSectors_(iConfig.getParameter<edm::ParameterSet>("PhiSectors")),
0104 etaSectors_(iConfig.getParameter<edm::ParameterSet>("EtaSectors")),
0105 htArraySpecRphi_(iConfig.getParameter<edm::ParameterSet>("HTArraySpecRphi")),
0106 htFillingRphi_(iConfig.getParameter<edm::ParameterSet>("HTFillingRphi")),
0107 rzFilterOpts_(iConfig.getParameter<edm::ParameterSet>("RZfilterOpts")),
0108 l1TrackDef_(iConfig.getParameter<edm::ParameterSet>("L1TrackDef")),
0109 dupTrkRemoval_(iConfig.getParameter<edm::ParameterSet>("DupTrkRemoval")),
0110 trackMatchDef_(iConfig.getParameter<edm::ParameterSet>("TrackMatchDef")),
0111 trackFitSettings_(iConfig.getParameter<edm::ParameterSet>("TrackFitSettings")),
0112 deadModuleOpts_(iConfig.getParameter<edm::ParameterSet>("DeadModuleOpts")),
0113 trackDigi_(iConfig.getParameter<edm::ParameterSet>("TrackDigi")),
0114
0115
0116
0117 enableMCtruth_(iConfig.getParameter<bool>("EnableMCtruth")),
0118 enableHistos_(iConfig.getParameter<bool>("EnableHistos")),
0119 enableOutputIntermediateTTTracks_(iConfig.getParameter<bool>("EnableOutputIntermediateTTTracks")),
0120
0121
0122
0123 genMinPt_(genCuts_.getParameter<double>("GenMinPt")),
0124 genMaxAbsEta_(genCuts_.getParameter<double>("GenMaxAbsEta")),
0125 genMaxVertR_(genCuts_.getParameter<double>("GenMaxVertR")),
0126 genMaxVertZ_(genCuts_.getParameter<double>("GenMaxVertZ")),
0127 genMaxD0_(genCuts_.getParameter<double>("GenMaxD0")),
0128 genMaxZ0_(genCuts_.getParameter<double>("GenMaxZ0")),
0129 genMinStubLayers_(genCuts_.getParameter<unsigned int>("GenMinStubLayers")),
0130
0131
0132
0133 degradeBendRes_(stubCuts_.getParameter<unsigned int>("DegradeBendRes")),
0134 maxStubEta_(stubCuts_.getParameter<double>("MaxStubEta")),
0135 killLowPtStubs_(stubCuts_.getParameter<bool>("KillLowPtStubs")),
0136 printStubWindows_(stubCuts_.getParameter<bool>("PrintStubWindows")),
0137 bendCut_(stubCuts_.getParameter<double>("BendCut")),
0138 bendCutExtra_(stubCuts_.getParameter<double>("BendCutExtra")),
0139 orderStubsByBend_(stubCuts_.getParameter<bool>("OrderStubsByBend")),
0140
0141
0142
0143 enableDigitize_(stubDigitize_.getParameter<bool>("EnableDigitize")),
0144
0145
0146 phiSectorBits_(stubDigitize_.getParameter<unsigned int>("PhiSectorBits")),
0147 phiSBits_(stubDigitize_.getParameter<unsigned int>("PhiSBits")),
0148 phiSRange_(stubDigitize_.getParameter<double>("PhiSRange")),
0149 rtBits_(stubDigitize_.getParameter<unsigned int>("RtBits")),
0150 rtRange_(stubDigitize_.getParameter<double>("RtRange")),
0151 zBits_(stubDigitize_.getParameter<unsigned int>("ZBits")),
0152 zRange_(stubDigitize_.getParameter<double>("ZRange")),
0153
0154 phiNBits_(stubDigitize_.getParameter<unsigned int>("PhiNBits")),
0155 phiNRange_(stubDigitize_.getParameter<double>("PhiNRange")),
0156 bendBits_(stubDigitize_.getParameter<unsigned int>("BendBits")),
0157
0158
0159 pitchVsType_(trackerModuleType_.getParameter<vector<double>>("PitchVsType")),
0160 spaceVsType_(trackerModuleType_.getParameter<vector<double>>("SpaceVsType")),
0161 barrelVsTypeTmp_(trackerModuleType_.getParameter<vector<unsigned int>>("BarrelVsType")),
0162 psVsTypeTmp_(trackerModuleType_.getParameter<vector<unsigned int>>("PSVsType")),
0163 tiltedVsTypeTmp_(trackerModuleType_.getParameter<vector<unsigned int>>("TiltedVsType")),
0164
0165
0166 useApproxB_(geometricProc_.getParameter<bool>("UseApproxB")),
0167 bApprox_gradient_(geometricProc_.getParameter<double>("BApprox_gradient")),
0168 bApprox_intercept_(geometricProc_.getParameter<double>("BApprox_intercept")),
0169
0170
0171 numPhiNonants_(phiSectors_.getParameter<unsigned int>("NumPhiNonants")),
0172 numPhiSectors_(phiSectors_.getParameter<unsigned int>("NumPhiSectors")),
0173 chosenRofPhi_(phiSectors_.getParameter<double>("ChosenRofPhi")),
0174 useStubPhi_(phiSectors_.getParameter<bool>("UseStubPhi")),
0175 useStubPhiTrk_(phiSectors_.getParameter<bool>("UseStubPhiTrk")),
0176 assumedPhiTrkRes_(phiSectors_.getParameter<double>("AssumedPhiTrkRes")),
0177 calcPhiTrkRes_(phiSectors_.getParameter<bool>("CalcPhiTrkRes")),
0178
0179
0180 etaRegions_(etaSectors_.getParameter<vector<double>>("EtaRegions")),
0181 chosenRofZ_(etaSectors_.getParameter<double>("ChosenRofZ")),
0182 beamWindowZ_(etaSectors_.getParameter<double>("BeamWindowZ")),
0183 allowOver2EtaSecs_(etaSectors_.getParameter<bool>("AllowOver2EtaSecs")),
0184
0185
0186 houghMinPt_(htArraySpecRphi_.getParameter<double>("HoughMinPt")),
0187 houghNbinsPt_(htArraySpecRphi_.getParameter<unsigned int>("HoughNbinsPt")),
0188 houghNbinsPhi_(htArraySpecRphi_.getParameter<unsigned int>("HoughNbinsPhi")),
0189 enableMerge2x2_(htArraySpecRphi_.getParameter<bool>("EnableMerge2x2")),
0190 maxPtToMerge2x2_(htArraySpecRphi_.getParameter<double>("MaxPtToMerge2x2")),
0191 numSubSecsEta_(htArraySpecRphi_.getParameter<unsigned int>("NumSubSecsEta")),
0192 shape_(htArraySpecRphi_.getParameter<unsigned int>("Shape")),
0193 miniHTstage_(htArraySpecRphi_.getParameter<bool>("MiniHTstage")),
0194 miniHoughNbinsPt_(htArraySpecRphi_.getParameter<unsigned int>("MiniHoughNbinsPt")),
0195 miniHoughNbinsPhi_(htArraySpecRphi_.getParameter<unsigned int>("MiniHoughNbinsPhi")),
0196 miniHoughMinPt_(htArraySpecRphi_.getParameter<double>("MiniHoughMinPt")),
0197 miniHoughDontKill_(htArraySpecRphi_.getParameter<bool>("MiniHoughDontKill")),
0198 miniHoughDontKillMinPt_(htArraySpecRphi_.getParameter<double>("MiniHoughDontKillMinPt")),
0199 miniHoughLoadBalance_(htArraySpecRphi_.getParameter<unsigned int>("MiniHoughLoadBalance")),
0200
0201
0202 killSomeHTCellsRphi_(htFillingRphi_.getParameter<unsigned int>("KillSomeHTCellsRphi")),
0203 useBendFilter_(htFillingRphi_.getParameter<bool>("UseBendFilter")),
0204 maxStubsInCell_(htFillingRphi_.getParameter<unsigned int>("MaxStubsInCell")),
0205 maxStubsInCellMiniHough_(htFillingRphi_.getParameter<unsigned int>("MaxStubsInCellMiniHough")),
0206 busySectorKill_(htFillingRphi_.getParameter<bool>("BusySectorKill")),
0207 busySectorNumStubs_(htFillingRphi_.getParameter<unsigned int>("BusySectorNumStubs")),
0208 busySectorMbinRanges_(htFillingRphi_.getParameter<vector<unsigned int>>("BusySectorMbinRanges")),
0209 busySectorMbinOrder_(htFillingRphi_.getParameter<vector<unsigned int>>("BusySectorMbinOrder")),
0210 busyInputSectorKill_(htFillingRphi_.getParameter<bool>("BusyInputSectorKill")),
0211 busyInputSectorNumStubs_(htFillingRphi_.getParameter<unsigned int>("BusyInputSectorNumStubs")),
0212 muxOutputsHT_(htFillingRphi_.getParameter<unsigned int>("MuxOutputsHT")),
0213 etaRegWhitelist_(htFillingRphi_.getParameter<vector<unsigned int>>("EtaRegWhitelist")),
0214
0215
0216
0217 rzFilterName_(rzFilterOpts_.getParameter<string>("RZFilterName")),
0218 seedResCut_(rzFilterOpts_.getParameter<double>("SeedResCut")),
0219 keepAllSeed_(rzFilterOpts_.getParameter<bool>("KeepAllSeed")),
0220 maxSeedCombinations_(rzFilterOpts_.getParameter<unsigned int>("MaxSeedCombinations")),
0221 maxGoodSeedCombinations_(rzFilterOpts_.getParameter<unsigned int>("MaxGoodSeedCombinations")),
0222 maxSeedsPerStub_(rzFilterOpts_.getParameter<unsigned int>("MaxSeedsPerStub")),
0223 zTrkSectorCheck_(rzFilterOpts_.getParameter<bool>("zTrkSectorCheck")),
0224 minFilterLayers_(rzFilterOpts_.getParameter<unsigned int>("MinFilterLayers")),
0225
0226
0227
0228 minStubLayers_(l1TrackDef_.getParameter<unsigned int>("MinStubLayers")),
0229 minPtToReduceLayers_(l1TrackDef_.getParameter<double>("MinPtToReduceLayers")),
0230 etaSecsReduceLayers_(l1TrackDef_.getParameter<vector<unsigned int>>("EtaSecsReduceLayers")),
0231 reduceLayerID_(l1TrackDef_.getParameter<bool>("ReducedLayerID")),
0232
0233
0234
0235 dupTrkAlgFit_(dupTrkRemoval_.getParameter<unsigned int>("DupTrkAlgFit")),
0236
0237
0238
0239 minFracMatchStubsOnReco_(trackMatchDef_.getParameter<double>("MinFracMatchStubsOnReco")),
0240 minFracMatchStubsOnTP_(trackMatchDef_.getParameter<double>("MinFracMatchStubsOnTP")),
0241 minNumMatchLayers_(trackMatchDef_.getParameter<unsigned int>("MinNumMatchLayers")),
0242 minNumMatchPSLayers_(trackMatchDef_.getParameter<unsigned int>("MinNumMatchPSLayers")),
0243 stubMatchStrict_(trackMatchDef_.getParameter<bool>("StubMatchStrict")),
0244
0245
0246
0247 trackFitters_(trackFitSettings_.getParameter<vector<std::string>>("TrackFitters")),
0248 useRZfilter_(trackFitSettings_.getParameter<vector<std::string>>("UseRZfilter")),
0249 detailedFitOutput_(trackFitSettings_.getParameter<bool>("DetailedFitOutput")),
0250 trackFitCheat_(trackFitSettings_.getParameter<bool>("TrackFitCheat")),
0251
0252 numTrackFitIterations_(trackFitSettings_.getParameter<unsigned int>("NumTrackFitIterations")),
0253 killTrackFitWorstHit_(trackFitSettings_.getParameter<bool>("KillTrackFitWorstHit")),
0254 generalResidualCut_(trackFitSettings_.getParameter<double>("GeneralResidualCut")),
0255 killingResidualCut_(trackFitSettings_.getParameter<double>("KillingResidualCut")),
0256
0257 digitizeSLR_(trackFitSettings_.getParameter<bool>("DigitizeSLR")),
0258 dividerBitsHelix_(trackFitSettings_.getParameter<unsigned int>("DividerBitsHelix")),
0259 dividerBitsHelixZ_(trackFitSettings_.getParameter<unsigned int>("DividerBitsHelixZ")),
0260 ShiftingBitsDenRPhi_(trackFitSettings_.getParameter<unsigned int>("ShiftingBitsDenRPhi")),
0261 ShiftingBitsDenRZ_(trackFitSettings_.getParameter<unsigned int>("ShiftingBitsDenRZ")),
0262 ShiftingBitsPt_(trackFitSettings_.getParameter<unsigned int>("ShiftingBitsPt")),
0263 ShiftingBitsPhi_(trackFitSettings_.getParameter<unsigned int>("ShiftingBitsPhi")),
0264
0265 ShiftingBitsLambda_(trackFitSettings_.getParameter<unsigned int>("ShiftingBitsLambda")),
0266 ShiftingBitsZ0_(trackFitSettings_.getParameter<unsigned int>("ShiftingBitsZ0")),
0267 slr_chi2cut_(trackFitSettings_.getParameter<double>("SLR_chi2cut")),
0268 residualCut_(trackFitSettings_.getParameter<double>("ResidualCut")),
0269
0270 kalmanDebugLevel_(trackFitSettings_.getParameter<unsigned int>("KalmanDebugLevel")),
0271 kalmanMinNumStubs_(trackFitSettings_.getParameter<unsigned int>("KalmanMinNumStubs")),
0272 kalmanMaxNumStubs_(trackFitSettings_.getParameter<unsigned int>("KalmanMaxNumStubs")),
0273 kalmanAddBeamConstr_(trackFitSettings_.getParameter<bool>("KalmanAddBeamConstr")),
0274 kalmanRemove2PScut_(trackFitSettings_.getParameter<bool>("KalmanRemove2PScut")),
0275 kalmanMaxSkipLayersHard_(trackFitSettings_.getParameter<unsigned>("KalmanMaxSkipLayersHard")),
0276 kalmanMaxSkipLayersEasy_(trackFitSettings_.getParameter<unsigned>("KalmanMaxSkipLayersEasy")),
0277 kalmanMaxStubsEasy_(trackFitSettings_.getParameter<unsigned>("KalmanMaxStubsEasy")),
0278 kfUseMaybeLayers_(trackFitSettings_.getParameter<bool>("KFUseMaybeLayers")),
0279
0280 kfLayerVsPtToler_(trackFitSettings_.getParameter<vector<double>>("KFLayerVsPtToler")),
0281 kfLayerVsD0Cut5_(trackFitSettings_.getParameter<vector<double>>("KFLayerVsD0Cut5")),
0282 kfLayerVsZ0Cut5_(trackFitSettings_.getParameter<vector<double>>("KFLayerVsZ0Cut5")),
0283 kfLayerVsZ0Cut4_(trackFitSettings_.getParameter<vector<double>>("KFLayerVsZ0Cut4")),
0284 kfLayerVsChiSq5_(trackFitSettings_.getParameter<vector<double>>("KFLayerVsChiSq5")),
0285 kfLayerVsChiSq4_(trackFitSettings_.getParameter<vector<double>>("KFLayerVsChiSq4")),
0286
0287 kalmanMaxStubsPerLayer_(trackFitSettings_.getParameter<unsigned>("KalmanMaxStubsPerLayer")),
0288 kalmanMultiScattTerm_(trackFitSettings_.getParameter<double>("KalmanMultiScattTerm")),
0289 kalmanChi2RphiScale_(trackFitSettings_.getParameter<unsigned>("KalmanChi2RphiScale")),
0290 kalmanHOtilted_(trackFitSettings_.getParameter<bool>("KalmanHOtilted")),
0291 kalmanHOhelixExp_(trackFitSettings_.getParameter<bool>("KalmanHOhelixExp")),
0292 kalmanHOalpha_(trackFitSettings_.getParameter<unsigned int>("KalmanHOalpha")),
0293 kalmanHOprojZcorr_(trackFitSettings_.getParameter<unsigned int>("KalmanHOprojZcorr")),
0294 kalmanHOfw_(trackFitSettings_.getParameter<bool>("KalmanHOfw")),
0295
0296
0297
0298 killScenario_(deadModuleOpts_.getParameter<unsigned int>("KillScenario")),
0299 killRecover_(deadModuleOpts_.getParameter<bool>("KillRecover")),
0300
0301
0302
0303 slr_skipTrackDigi_(trackDigi_.getParameter<bool>("SLR_skipTrackDigi")),
0304 slr_oneOver2rBits_(trackDigi_.getParameter<unsigned int>("SLR_oneOver2rBits")),
0305 slr_oneOver2rRange_(trackDigi_.getParameter<double>("SLR_oneOver2rRange")),
0306 slr_d0Bits_(trackDigi_.getParameter<unsigned int>("SLR_d0Bits")),
0307 slr_d0Range_(trackDigi_.getParameter<double>("SLR_d0Range")),
0308 slr_phi0Bits_(trackDigi_.getParameter<unsigned int>("SLR_phi0Bits")),
0309 slr_phi0Range_(trackDigi_.getParameter<double>("SLR_phi0Range")),
0310 slr_z0Bits_(trackDigi_.getParameter<unsigned int>("SLR_z0Bits")),
0311 slr_z0Range_(trackDigi_.getParameter<double>("SLR_z0Range")),
0312 slr_tanlambdaBits_(trackDigi_.getParameter<unsigned int>("SLR_tanlambdaBits")),
0313 slr_tanlambdaRange_(trackDigi_.getParameter<double>("SLR_tanlambdaRange")),
0314 slr_chisquaredBits_(trackDigi_.getParameter<unsigned int>("SLR_chisquaredBits")),
0315 slr_chisquaredRange_(trackDigi_.getParameter<double>("SLR_chisquaredRange")),
0316
0317 kf_skipTrackDigi_(trackDigi_.getParameter<bool>("KF_skipTrackDigi")),
0318 kf_oneOver2rBits_(trackDigi_.getParameter<unsigned int>("KF_oneOver2rBits")),
0319 kf_oneOver2rRange_(trackDigi_.getParameter<double>("KF_oneOver2rRange")),
0320 kf_d0Bits_(trackDigi_.getParameter<unsigned int>("KF_d0Bits")),
0321 kf_d0Range_(trackDigi_.getParameter<double>("KF_d0Range")),
0322 kf_phi0Bits_(trackDigi_.getParameter<unsigned int>("KF_phi0Bits")),
0323 kf_phi0Range_(trackDigi_.getParameter<double>("KF_phi0Range")),
0324 kf_z0Bits_(trackDigi_.getParameter<unsigned int>("KF_z0Bits")),
0325 kf_z0Range_(trackDigi_.getParameter<double>("KF_z0Range")),
0326 kf_tanlambdaBits_(trackDigi_.getParameter<unsigned int>("KF_tanlambdaBits")),
0327 kf_tanlambdaRange_(trackDigi_.getParameter<double>("KF_tanlambdaRange")),
0328 kf_chisquaredBits_(trackDigi_.getParameter<unsigned int>("KF_chisquaredBits")),
0329 kf_chisquaredRange_(trackDigi_.getParameter<double>("KF_chisquaredRange")),
0330 kf_chisquaredBinEdges_(trackDigi_.getParameter<vector<double>>("KF_chisquaredBinEdges")),
0331
0332 other_skipTrackDigi_(trackDigi_.getParameter<bool>("Other_skipTrackDigi")),
0333
0334
0335 resPlotOpt_(iConfig.getParameter<bool>("ResPlotOpt")),
0336
0337
0338
0339
0340 writeOutEdmFile_(iConfig.getUntrackedParameter<bool>("WriteOutEdmFile", true)),
0341
0342
0343 magneticField_(0.),
0344
0345
0346 hybrid_(iConfig.getParameter<bool>("Hybrid")) {
0347
0348 vector<unsigned int> genPdgIdsUnsigned(genCuts_.getParameter<vector<unsigned int>>("GenPdgIds"));
0349 if (genPdgIdsUnsigned.empty()) {
0350 genPdgIdsUnsigned = {11, 13, 211, 321, 2212};
0351 }
0352
0353
0354
0355 for (unsigned int i = 0; i < genPdgIdsUnsigned.size(); i++) {
0356 genPdgIds_.push_back(genPdgIdsUnsigned[i]);
0357 genPdgIds_.push_back(-genPdgIdsUnsigned[i]);
0358 }
0359
0360
0361
0362 vector<string> useRZfilterTmp;
0363 for (const string& name : useRZfilter_) {
0364 if (std::count(trackFitters_.begin(), trackFitters_.end(), name) > 0)
0365 useRZfilterTmp.push_back(name);
0366 }
0367 useRZfilter_ = useRZfilterTmp;
0368
0369
0370 for (unsigned int i = 0; i < barrelVsTypeTmp_.size(); i++) {
0371 barrelVsType_.push_back(bool(barrelVsTypeTmp_[i]));
0372 psVsType_.push_back(bool(psVsTypeTmp_[i]));
0373 tiltedVsType_.push_back(bool(tiltedVsTypeTmp_[i]));
0374 }
0375
0376
0377
0378 if (!(useStubPhi_ || useStubPhiTrk_))
0379 throw cms::Exception("BadConfig")
0380 << "Settings: Invalid cfg parameters - You cant set both UseStubPhi & useStubPhiTrk to false.";
0381
0382 if (minNumMatchLayers_ > minStubLayers_)
0383 throw cms::Exception("BadConfig")
0384 << "Settings: Invalid cfg parameters - You are setting the minimum number of layers incorrectly : type A.";
0385 if (genMinStubLayers_ > minStubLayers_)
0386 throw cms::Exception("BadConfig")
0387 << "Settings: Invalid cfg parameters - You are setting the minimum number of layers incorrectly : type B.";
0388 if (minNumMatchLayers_ > genMinStubLayers_)
0389 throw cms::Exception("BadConfig")
0390 << "Settings: Invalid cfg parameters - You are setting the minimum number of layers incorrectly : type C.";
0391
0392
0393 bool doReduceLayers = (minPtToReduceLayers_ < 10000. || not etaSecsReduceLayers_.empty());
0394 if (doReduceLayers && minStubLayers_ > 4) {
0395 if (minNumMatchLayers_ > minStubLayers_ - 1)
0396 throw cms::Exception("BadConfig")
0397 << "Settings: Invalid cfg parameters - You are setting the minimum number of layers incorrectly : type D.";
0398 if (genMinStubLayers_ > minStubLayers_ - 1)
0399 throw cms::Exception("BadConfig")
0400 << "Settings: Invalid cfg parameters - You are setting the minimum number of layers incorrectly : type E.";
0401 }
0402
0403 constexpr float verySmall = 0.1;
0404 if (houghMinPt_ < verySmall)
0405 throw cms::Exception("BadConfig") << "Settings: Invalid cfg parameters -- HoughMinPt must be positive.";
0406 miniHoughMinPt_ = std::max(miniHoughMinPt_, houghMinPt_);
0407
0408 for (const unsigned int& iEtaReg : etaSecsReduceLayers_) {
0409 if (iEtaReg >= etaRegions_.size())
0410 throw cms::Exception("BadConfig") << "Settings: You specified an eta sector number in EtaSecsReduceLayers "
0411 "which exceeds the total number of eta sectors! "
0412 << iEtaReg << " " << etaRegions_.size();
0413 }
0414
0415
0416 if (!busySectorMbinOrder_.empty()) {
0417
0418 if (busySectorMbinOrder_.size() != houghNbinsPt_)
0419 throw cms::Exception("BadConfig")
0420 << "Settings: Invalid cfg parameters - BusySectorMbinOrder used by HT MUX contains wrong number of "
0421 "elements. Unless you are optimising the MUX, suggest you configure it to an empty vector.";
0422 set<unsigned int> mOrderCheck;
0423 for (const unsigned int& m : busySectorMbinOrder_) {
0424 mOrderCheck.insert(m);
0425 }
0426 if (mOrderCheck.size() != houghNbinsPt_)
0427 throw cms::Exception("BadConfig")
0428 << "Settings: Invalid cfg parameters - BusySectorMbinOrder used by HT MUX contains duplicate elements.";
0429 unsigned int sum_nr = 0;
0430 for (unsigned int nr : busySectorMbinRanges_) {
0431 sum_nr += nr;
0432 }
0433 if (sum_nr != houghNbinsPt_)
0434 throw cms::Exception("BadConfig")
0435 << "Settings: Invalid cfg parameters - Sum of entries in BusySectorMbinRanges is incorrect.";
0436 }
0437
0438 if (miniHTstage_) {
0439 if (enableMerge2x2_)
0440 throw cms::Exception("BadConfig")
0441 << "Settings: it is not allowed to enable both MiniHTstage & EnableMerge2x2 options.";
0442
0443 if (shape_ != 0)
0444 throw cms::Exception("BadConfig")
0445 << "Settings: Invalid cfg parameters - 2nd stage mini HT only allowed for square-shaped cells.";
0446 if (miniHoughNbinsPt_ != 2 || miniHoughNbinsPhi_ != 2)
0447 throw cms::Exception("BadConfig") << "Settings: 2nd mini HT has so dar only been implemented in C++ for 2x2.";
0448 }
0449
0450 if (enableMerge2x2_) {
0451 if (miniHTstage_)
0452 throw cms::Exception("BadConfig")
0453 << "Settings: it is not allowed to enable both MiniHTstage & EnableMerge2x2 options.";
0454
0455 if (enableMerge2x2_ && shape_ != 0)
0456 throw cms::Exception("BadConfig")
0457 << "Settings: Invalid cfg parameters - merging only allowed for square-shaped cells.";
0458 }
0459
0460
0461 if (kalmanMaxNumStubs_ < kalmanMinNumStubs_)
0462 throw cms::Exception("BadConfig")
0463 << "Settings: Invalid cfg parameters - KalmanMaxNumStubs is less than KalmanMaxNumStubs.";
0464 }
0465
0466 bool Settings::isHTRPhiEtaRegWhitelisted(unsigned const iEtaReg) const {
0467 bool whitelisted = true;
0468
0469 bool const whitelist_enabled = (!etaRegWhitelist_.empty());
0470 if (whitelist_enabled) {
0471 whitelisted = (std::count(etaRegWhitelist_.begin(), etaRegWhitelist_.end(), iEtaReg) > 0);
0472 }
0473
0474 return whitelisted;
0475 }
0476
0477 }