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