File indexing completed on 2023-03-17 11:12:53
0001 #include "L1Trigger/L1TMuonOverlapPhase1/interface/Omtf/OMTFSorter.h"
0002 #include "L1Trigger/L1TMuonOverlapPhase1/interface/Omtf/GoldenPattern.h"
0003 #include "L1Trigger/L1TMuonOverlapPhase1/interface/Omtf/GoldenPatternWithStat.h"
0004 #include "L1Trigger/L1TMuonOverlapPhase1/interface/Omtf/OMTFConfiguration.h"
0005
0006 #include <cassert>
0007 #include <iostream>
0008 #include <strstream>
0009 #include <algorithm>
0010 #include <bitset>
0011
0012 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0013
0014 #include "L1Trigger/RPCTrigger/interface/RPCConst.h"
0015
0016
0017 template <class GoldenPatternType>
0018 AlgoMuons::value_type OMTFSorter<GoldenPatternType>::sortRefHitResults(
0019 unsigned int procIndx, unsigned int iRefHit, const GoldenPatternVec<GoldenPatternType>& gPatterns, int charge) {
0020 GoldenPatternType* bestGP = nullptr;
0021
0022
0023 for (auto& itGP : gPatterns) {
0024 if (!itGP->getResults()[procIndx][iRefHit].isValid())
0025 continue;
0026
0027 if (charge != 0 && itGP->key().theCharge != charge)
0028 continue;
0029
0030
0031 if (itGP->getResults()[procIndx][iRefHit].getFiredLayerCnt() < 3)
0032 continue;
0033
0034 if (bestGP == nullptr) {
0035 bestGP = itGP.get();
0036 } else if (myType == 0 && itGP->getResults()[procIndx][iRefHit].getFiredLayerCnt() >
0037 bestGP->getResults()[procIndx][iRefHit].getFiredLayerCnt()) {
0038 bestGP = itGP.get();
0039
0040
0041
0042
0043
0044
0045 } else if (myType == 1 || (itGP->getResults()[procIndx][iRefHit].getFiredLayerCnt() ==
0046 bestGP->getResults()[procIndx][iRefHit].getFiredLayerCnt())) {
0047 if (itGP->getResults()[procIndx][iRefHit].getPdfSum() > bestGP->getResults()[procIndx][iRefHit].getPdfSum()) {
0048
0049 bestGP = itGP.get();
0050
0051
0052
0053
0054
0055
0056 }
0057 }
0058 }
0059 if (bestGP) {
0060 AlgoMuons::value_type candidate(new AlgoMuon(bestGP->getResults()[procIndx][iRefHit], bestGP, iRefHit));
0061
0062 return candidate;
0063 } else {
0064 AlgoMuons::value_type candidate(new AlgoMuon());
0065 candidate->setRefHitNumber(iRefHit);
0066 return candidate;
0067 }
0068 }
0069
0070 template class OMTFSorter<GoldenPattern>;
0071 template class OMTFSorter<GoldenPatternWithStat>;
0072 template class OMTFSorter<GoldenPatternWithThresh>;