CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
OMTFSorter< GoldenPatternType > Class Template Reference

#include <OMTFSorter.h>

Inheritance diagram for OMTFSorter< GoldenPatternType >:
SorterBase< GoldenPatternType >

Public Member Functions

std::vector< l1t::RegionalMuonCandcandidates (unsigned int iProcessor, l1t::tftype mtfType, const std::vector< AlgoMuon > &algoCands)
 
void initialize (const OMTFConfiguration *cfg)
 
 OMTFSorter (int sorterTypeFlag)
 
void setNphiBins (unsigned int phiBins)
 
AlgoMuons::value_type sortRefHitResults (unsigned int procIndx, unsigned int iRefHit, const GoldenPatternVec< GoldenPatternType > &gPatterns, int charge=0) override
 
void sortRefHitResults (const std::vector< OMTFProcessor::resultsMap > &procResults, std::vector< AlgoMuon > &refHitCleanCands, int charge=0)
 
AlgoMuon sortRefHitResults (const OMTFProcessor::resultsMap &aResultsMap, int charge=0)
 
 ~OMTFSorter () override
 
- Public Member Functions inherited from SorterBase< GoldenPatternType >
virtual AlgoMuons sortResults (unsigned int procIndx, const GoldenPatternVec< GoldenPatternType > &gPatterns, int charge=0)
 
virtual ~SorterBase ()
 

Private Member Functions

bool checkHitPatternValidity (unsigned int hits)
 
AlgoMuon sortSingleResult (const OMTFResult &aResult)
 

Private Attributes

const OMTFConfigurationmyOmtfConfig
 
int myType
 
unsigned int nPhiBins
 

Detailed Description

template<class GoldenPatternType>
class OMTFSorter< GoldenPatternType >

Definition at line 17 of file OMTFSorter.h.

Constructor & Destructor Documentation

◆ OMTFSorter()

template<class GoldenPatternType >
OMTFSorter< GoldenPatternType >::OMTFSorter ( int  sorterTypeFlag)
inline

Definition at line 10 of file OMTFSorter.h.

10 : myType(sorterTypeFlag) {}
int myType
Definition: OMTFSorter.h:24

◆ ~OMTFSorter()

template<class GoldenPatternType >
OMTFSorter< GoldenPatternType >::~OMTFSorter ( )
inlineoverride

Definition at line 12 of file OMTFSorter.h.

12 {}

Member Function Documentation

◆ candidates()

template<class GoldenPatternType >
std::vector< l1t::RegionalMuonCand > OMTFSorter< GoldenPatternType >::candidates ( unsigned int  iProcessor,
l1t::tftype  mtfType,
const std::vector< AlgoMuon > &  algoCands 
)

conversion factor from OMTF to uGMT scale is 5400/576 i.e. phiValue/=9.375;

Definition at line 156 of file OMTFSorter.cc.

References funct::abs(), OMTFSorter< GoldenPatternType >::checkHitPatternValidity(), OMTFConfiguration::fwVersion(), l1t::RegionalMuonCand::hwPt(), OMTFSorter< GoldenPatternType >::myOmtfConfig, OMTFSorter< GoldenPatternType >::nPhiBins, funct::pow(), quality, mps_fire::result, l1t::RegionalMuonCand::setHwEta(), l1t::RegionalMuonCand::setHwPhi(), l1t::RegionalMuonCand::setHwPt(), l1t::RegionalMuonCand::setHwQual(), l1t::RegionalMuonCand::setHwSign(), l1t::RegionalMuonCand::setHwSignValid(), l1t::RegionalMuonCand::setTFIdentifiers(), and l1t::RegionalMuonCand::setTrackAddress().

Referenced by OMTFReconstruction::getProcessorCandidates().

158  {
159  std::vector<l1t::RegionalMuonCand> result;
160 
161  for (const auto& myCand : algoCands) {
162  l1t::RegionalMuonCand candidate;
163  candidate.setHwPt(myCand.getPt());
164  candidate.setHwEta(myCand.getEta());
165 
166  int phiValue = myCand.getPhi();
167  if (phiValue >= int(nPhiBins))
168  phiValue -= nPhiBins;
170  phiValue = floor(phiValue * 437. / pow(2, 12)); // ie. use as in hw: 9.3729977
171  candidate.setHwPhi(phiValue);
172 
173  candidate.setHwSign(myCand.getCharge() < 0 ? 1 : 0);
174  candidate.setHwSignValid(1);
175 
176  unsigned int quality = checkHitPatternValidity(myCand.getHits()) ? 0 | (1 << 2) | (1 << 3) : 0 | (1 << 2);
177  if (abs(myCand.getEta()) == 115 &&
178  (static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("100000001110000000").to_ulong() ||
179  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000000001110000000").to_ulong() ||
180  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("100000000110000000").to_ulong() ||
181  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("100000001100000000").to_ulong() ||
182  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("100000001010000000").to_ulong()))
183  quality = 4;
184  if (myOmtfConfig->fwVersion() >= 5) {
185  if (static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000000010000000011").to_ulong() ||
186  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000000100000000011").to_ulong() ||
187  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000001000000000011").to_ulong() ||
188  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000010000000000011").to_ulong() ||
189  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000100000000000011").to_ulong() ||
190  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("001000000000000011").to_ulong() ||
191  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("010000000000000011").to_ulong() ||
192  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("100000000000000011").to_ulong() ||
193  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000000010000001100").to_ulong() ||
194  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000000100000001100").to_ulong() ||
195  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000001000000001100").to_ulong() ||
196  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000010000000001100").to_ulong() ||
197  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000100000000001100").to_ulong() ||
198  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("001000000000001100").to_ulong() ||
199  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("010000000000001100").to_ulong() ||
200  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("100000000000001100").to_ulong() ||
201  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000000010000110000").to_ulong() ||
202  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000000100000110000").to_ulong() ||
203  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000001000000110000").to_ulong() ||
204  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000010000000110000").to_ulong() ||
205  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("000100000000110000").to_ulong() ||
206  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("001000000000110000").to_ulong() ||
207  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("010000000000110000").to_ulong() ||
208  static_cast<unsigned int>(myCand.getHits()) == std::bitset<18>("100000000000110000").to_ulong())
209  quality = 1;
210  }
211 
212  // if (abs(myCand.getEta()) == 121) quality = 4;
213  if (abs(myCand.getEta()) == 121)
214  quality = 0; // changed on request from HI
215 
216  candidate.setHwQual(quality);
217 
218  std::map<int, int> trackAddr;
219  trackAddr[0] = myCand.getHits();
220  trackAddr[1] = myCand.getRefLayer();
221  trackAddr[2] = myCand.getDisc();
222  candidate.setTrackAddress(trackAddr);
223  candidate.setTFIdentifiers(iProcessor, mtfType);
224  if (candidate.hwPt())
225  result.push_back(candidate);
226  }
227  return result;
228 }
void setHwPhi(int bits)
Set compressed relative phi as transmitted by hardware LSB = 2*pi/576 (8 bits)
unsigned int nPhiBins
Definition: OMTFSorter.h:54
const int hwPt() const
Get compressed pT (returned int * 0.5 = pT (GeV))
void setTrackAddress(const std::map< int, int > &address)
Set the whole track address.
bool checkHitPatternValidity(unsigned int hits)
Definition: OMTFSorter.cc:142
string quality
unsigned int fwVersion() const
void setTFIdentifiers(int processor, tftype trackFinder)
Set the processor ID, track-finder type. From these two, the link is set.
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
void setHwQual(int bits)
Set compressed quality code as transmitted by hardware (4 bits)
void setHwPt(int bits)
Set compressed pT as transmitted by hardware LSB = 0.5 (9 bits)
void setHwEta(int bits)
Set compressed eta as transmitted by hardware LSB = 0.010875 (9 bits)
void setHwSignValid(int bits)
Set whether charge measurement is valid (0 for high pT muons)
const OMTFConfiguration * myOmtfConfig
Definition: OMTFSorter.h:55
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
void setHwSign(int bits)
Set charge sign bit (charge = (-1)^(sign))

◆ checkHitPatternValidity()

template<class GoldenPatternType >
bool OMTFSorter< GoldenPatternType >::checkHitPatternValidity ( unsigned int  hits)
private

Check if the hit pattern of given OMTF candite is not on the list of invalid hit patterns. Invalid hit patterns provode very little to efficiency, but gives high contribution to rate. Candidate with invalid hit patterns is assigned quality=0. Currently the list of invalid patterns is hardcoded. This has to be read from configuration.

FIXME: read the list from configuration so this can be controlled at runtime.

Definition at line 142 of file OMTFSorter.cc.

References hfClusterShapes_cfi::hits.

Referenced by OMTFSorter< GoldenPatternType >::candidates().

142  {
144  std::vector<unsigned int> badPatterns = {
145  99840, 34304, 3075, 36928, 12300, 98816, 98944, 33408, 66688, 66176, 7171, 20528, 33856, 35840, 4156, 34880};
146 
147  for (auto aHitPattern : badPatterns) {
148  if (hits == aHitPattern)
149  return false;
150  }
151 
152  return true;
153 }

◆ initialize()

template<class GoldenPatternType >
void OMTFSorter< GoldenPatternType >::initialize ( const OMTFConfiguration cfg)
inline

Definition at line 19 of file OMTFSorter.h.

References looper::cfg, and OMTFSorter< GoldenPatternType >::myOmtfConfig.

Referenced by OMTFReconstruction::beginRun().

19 { myOmtfConfig = cfg; }
const OMTFConfiguration * myOmtfConfig
Definition: OMTFSorter.h:55

◆ setNphiBins()

template<class GoldenPatternType >
void OMTFSorter< GoldenPatternType >::setNphiBins ( unsigned int  phiBins)
inline

◆ sortRefHitResults() [1/3]

template<class GoldenPatternType >
AlgoMuons::value_type OMTFSorter< GoldenPatternType >::sortRefHitResults ( unsigned int  procIndx,
unsigned int  iRefHit,
const GoldenPatternVec< GoldenPatternType > &  gPatterns,
int  charge = 0 
)
overridevirtual

Sort results from a single reference hit. Select candidate with highest number of hit layers Then select a candidate with largest likelihood value and given charge as we allow two candidates with opposite charge from single 10deg region

Accept only candidates with >2 hits

Implements SorterBase< GoldenPatternType >.

Definition at line 17 of file OMTFSorter.cc.

References ALCARECOTkAlJpsiMuMu_cff::charge.

18  {
19  GoldenPatternType* bestGP = nullptr; //the GoldenPattern with the best result for this iRefHit
20 
21  GoldenPatternType* bestGpUnconstr = nullptr;
22 
23  for (auto& itGP : gPatterns) {
24  if (!itGP->getResults()[procIndx][iRefHit].isValid())
25  continue;
26 
27  if (charge != 0 && itGP->key().theCharge != charge)
28  continue; //charge==0 means ignore charge
29 
31  if (itGP->getResults()[procIndx][iRefHit].getFiredLayerCnt() < 3) //TODO - move 3 to the configuration??
32  continue;
33 
34  if (bestGP == nullptr) {
35  bestGP = itGP.get();
36  } else if (myType == 0 && itGP->getResults()[procIndx][iRefHit].getFiredLayerCnt() >
37  bestGP->getResults()[procIndx][iRefHit].getFiredLayerCnt()) {
38  bestGP = itGP.get();
39  } else if (myType == 1 || (itGP->getResults()[procIndx][iRefHit].getFiredLayerCnt() ==
40  bestGP->getResults()[procIndx][iRefHit].getFiredLayerCnt())) {
41  if (itGP->getResults()[procIndx][iRefHit].getPdfSum() > bestGP->getResults()[procIndx][iRefHit].getPdfSum()) {
42  //if the PdfWeigtSum is equal, we take the GP with the lower number, i.e. lower pt = check if this is ok for physics FIXME (KB)
43  bestGP = itGP.get();
44  }
45  }
46 
47  if (bestGpUnconstr == nullptr) {
48  if (itGP->getResults()[procIndx][iRefHit].getPdfSumUnconstr() > 0)
49  bestGpUnconstr = itGP.get();
50  } else if (myType == 0 && itGP->getResults()[procIndx][iRefHit].getFiredLayerCnt() >
51  bestGpUnconstr->getResults()[procIndx][iRefHit].getFiredLayerCnt()) {
52  bestGpUnconstr = itGP.get();
53  } else if (myType == 1 || (itGP->getResults()[procIndx][iRefHit].getFiredLayerCnt() ==
54  bestGpUnconstr->getResults()[procIndx][iRefHit].getFiredLayerCnt())) {
55  if (itGP->getResults()[procIndx][iRefHit].getPdfSumUnconstr() >
56  bestGpUnconstr->getResults()[procIndx][iRefHit].getPdfSumUnconstr()) {
57  //if the PdfWeigtSum is equal, we take the GP with the lower number, i.e. lower pt = check if this is ok for physics FIXME (KB)
58  bestGpUnconstr = itGP.get();
59  }
60  }
61  }
62  if (bestGP) {
63  AlgoMuons::value_type candidate(new AlgoMuon(bestGP->getResults()[procIndx][iRefHit], bestGP, iRefHit));
64 
65  if (bestGpUnconstr) {
66  candidate->setGpResultUnconstr(bestGpUnconstr->getResults()[procIndx][iRefHit]);
67  candidate->setGoldenPaternUnconstr(bestGpUnconstr);
68  }
69 
70  return candidate;
71  } else {
72  AlgoMuons::value_type candidate(new AlgoMuon());
73  candidate->setRefHitNumber(iRefHit);
74  return candidate;
75  }
76 }
int myType
Definition: OMTFSorter.h:24

◆ sortRefHitResults() [2/3]

template<class GoldenPatternType >
void OMTFSorter< GoldenPatternType >::sortRefHitResults ( const std::vector< OMTFProcessor::resultsMap > &  procResults,
std::vector< AlgoMuon > &  refHitCleanCands,
int  charge = 0 
)

Definition at line 130 of file OMTFSorter.cc.

References ALCARECOTkAlJpsiMuMu_cff::charge, and amptDefaultParameters_cff::mu.

Referenced by OMTFReconstruction::getProcessorCandidates(), and OMTFReconstruction::writeResultToXML().

132  {
133  // for(auto itRefHit: procResults) refHitCands.push_back(sortRefHitResults(itRefHit,charge));
134  for (unsigned int iRefHit = 0; iRefHit < procResults.size(); iRefHit++) {
135  AlgoMuon mu = sortRefHitResults(procResults[iRefHit], charge);
136  mu.setRefHitNumber(iRefHit);
137  refHitCands.push_back(mu);
138  }
139 }
void sortRefHitResults(const std::vector< OMTFProcessor::resultsMap > &procResults, std::vector< AlgoMuon > &refHitCleanCands, int charge=0)
Definition: OMTFSorter.cc:130

◆ sortRefHitResults() [3/3]

template<class GoldenPatternType >
AlgoMuon OMTFSorter< GoldenPatternType >::sortRefHitResults ( const OMTFProcessor::resultsMap aResultsMap,
int  charge = 0 
)

Sort results from a single reference hit. Select candidate with highest number of hit layers Then select a candidate with largest likelihood value and given charge as we allow two candidates with opposite charge from single 10deg region

Accept only candidates with >2 hits

Definition at line 68 of file OMTFSorter.cc.

References ALCARECOTkAlJpsiMuMu_cff::charge, createfilelist::int, Key::number(), AlgoMuon::setPatternNumber(), AlgoMuon::setPhiRHit(), OMTFSorter< GoldenPatternType >::sortSingleResult(), Key::theCharge, Key::thePtCode, and heppy_batch::val.

68  {
69  unsigned int pdfValMax = 0;
70  unsigned int nHitsMax = 0;
71  unsigned int hitsWord = 0;
72  int refPhi = 9999;
73  int refEta = 999;
74  int refLayer = -1;
75  int refPhiRHit = 9999;
76  Key bestKey;
77 
78  // std::cout <<" ====== sortRefHitResults: " << std::endl;
79  for (const auto& itKey : aResultsMap) {
80  if (charge != 0 && itKey.first.theCharge != charge)
81  continue; //charge==0 means ignore charge
82  AlgoMuon val = sortSingleResult(itKey.second);
84  if (val.getQ() < 3)
85  continue;
86 
87  if (val.getQ() > (int)nHitsMax) {
88  nHitsMax = val.getQ();
89  pdfValMax = val.getDisc();
90  refPhi = val.getPhi();
91  refEta = val.getEta();
92  refLayer = val.getRefLayer();
93  hitsWord = val.getHits();
94  refPhiRHit = val.getPhiRHit();
95  bestKey = itKey.first;
96  // std::cout <<" sorter, byQual, now best is: "<<bestKey << std::endl;
97  } else if (val.getQ() == (int)nHitsMax && val.getDisc() > (int)pdfValMax) {
98  pdfValMax = val.getDisc();
99  refPhi = val.getPhi();
100  refEta = val.getEta();
101  refLayer = val.getRefLayer();
102  hitsWord = val.getHits();
103  refPhiRHit = val.getPhiRHit();
104  bestKey = itKey.first;
105  // std::cout <<" sorter, byDisc, now best is: "<<bestKey << std::endl;
106  } else if (val.getQ() == (int)nHitsMax && val.getDisc() == (int)pdfValMax &&
107  itKey.first.number() < bestKey.number()) {
108  // itKey.first.thePtCode < bestKey.thePtCode){
109  pdfValMax = val.getDisc();
110  refPhi = val.getPhi();
111  refEta = val.getEta();
112  refLayer = val.getRefLayer();
113  hitsWord = val.getHits();
114  refPhiRHit = val.getPhiRHit();
115  bestKey = itKey.first;
116  // std::cout <<" sorter, byNumb, now best is: "<<bestKey << std::endl;
117  }
118  }
119 
120  AlgoMuon candidate(pdfValMax, refPhi, refEta, refLayer, hitsWord, nHitsMax, 0, bestKey.thePtCode, bestKey.theCharge);
121 
122  candidate.setPhiRHit(refPhiRHit); // for backward compatibility
123  candidate.setPatternNumber(bestKey.number());
124 
125  // std::cout <<" return: " << candidate << std::endl;
126  return candidate;
127 }
unsigned int number() const
Definition: GoldenPattern.h:32
int theCharge
Definition: GoldenPattern.h:36
AlgoMuon sortSingleResult(const OMTFResult &aResult)
Definition: OMTFSorter.cc:14
unsigned int thePtCode
Definition: GoldenPattern.h:35

◆ sortSingleResult()

template<class GoldenPatternType >
AlgoMuon OMTFSorter< GoldenPatternType >::sortSingleResult ( const OMTFResult aResult)
private

Find a candidate with best parameters for given GoldenPattern Sorting is made amongs candidates with different reference layers The output tuple contains (nHitsMax, pdfValMax, refPhi, refLayer, hitsWord, refEta) hitsWord codes number of layers hit: hitsWord= sum 2**iLogicLayer, where sum runs over layers which were hit

Find a result with biggest number of hits

Definition at line 14 of file OMTFSorter.cc.

References cms::cuda::assert(), OMTFResult::getHitsWord(), OMTFResult::getRefEtas(), OMTFResult::getRefPhiRHits(), OMTFResult::getRefPhis(), OMTFResult::getSummaryHits(), OMTFResult::getSummaryVals(), AlgoMuon::setDisc(), AlgoMuon::setEta(), AlgoMuon::setHits(), AlgoMuon::setPhi(), AlgoMuon::setPhiRHit(), AlgoMuon::setQ(), and AlgoMuon::setRefLayer().

Referenced by OMTFSorter< GoldenPatternType >::sortRefHitResults().

14  {
15  OMTFResult::vector1D pdfValsVec = aResult.getSummaryVals();
16  OMTFResult::vector1D nHitsVec = aResult.getSummaryHits();
17  OMTFResult::vector1D refPhiVec = aResult.getRefPhis();
18  OMTFResult::vector1D refEtaVec = aResult.getRefEtas();
19  OMTFResult::vector1D hitsVec = aResult.getHitsWord();
20  OMTFResult::vector1D refPhiRHitVec = aResult.getRefPhiRHits();
21 
22  assert(pdfValsVec.size() == nHitsVec.size());
23 
24  unsigned int nHitsMax = 0;
25  unsigned int pdfValMax = 0;
26  unsigned int hitsWord = 0;
27  int refPhi = 1024;
28  int refEta = -10;
29  int refLayer = -1;
30  int refPhiRHit = 1024;
31 
32  AlgoMuon sortedResult(pdfValMax, refPhi, refEta, refLayer, hitsWord, nHitsMax);
33 
35  for (auto itHits : nHitsVec) {
36  if (itHits > nHitsMax)
37  nHitsMax = itHits;
38  }
39 
40  if (!nHitsMax)
41  return sortedResult;
42 
43  for (unsigned int ipdfVal = 0; ipdfVal < pdfValsVec.size(); ++ipdfVal) {
44  if (nHitsVec[ipdfVal] == nHitsMax) {
45  if (pdfValsVec[ipdfVal] > pdfValMax) {
46  pdfValMax = pdfValsVec[ipdfVal];
47  refPhi = refPhiVec[ipdfVal];
48  refEta = refEtaVec[ipdfVal];
49  refLayer = ipdfVal;
50  hitsWord = hitsVec[ipdfVal];
51  refPhiRHit = refPhiRHitVec[ipdfVal];
52  }
53  }
54  }
55 
56  sortedResult.setDisc(pdfValMax);
57  sortedResult.setPhi(refPhi);
58  sortedResult.setEta(refEta);
59  sortedResult.setRefLayer(refLayer);
60  sortedResult.setHits(hitsWord);
61  sortedResult.setQ(nHitsMax);
62  sortedResult.setPhiRHit(refPhiRHit);
63 
64  return sortedResult;
65 }
const OMTFResult::vector1D & getSummaryHits() const
Definition: OMTFResult.h:22
assert(be >=bs)
const OMTFResult::vector1D & getSummaryVals() const
Definition: OMTFResult.h:20
const OMTFResult::vector1D & getRefPhis() const
Definition: OMTFResult.h:24
std::vector< unsigned int > vector1D
Definition: OMTFResult.h:11
const OMTFResult::vector1D & getHitsWord() const
Definition: OMTFResult.h:28
const OMTFResult::vector1D & getRefEtas() const
Definition: OMTFResult.h:26
const OMTFResult::vector1D & getRefPhiRHits() const
Definition: OMTFResult.h:30

Member Data Documentation

◆ myOmtfConfig

template<class GoldenPatternType >
const OMTFConfiguration* OMTFSorter< GoldenPatternType >::myOmtfConfig
private

◆ myType

template<class GoldenPatternType >
int OMTFSorter< GoldenPatternType >::myType
private

Definition at line 24 of file OMTFSorter.h.

◆ nPhiBins

template<class GoldenPatternType >
unsigned int OMTFSorter< GoldenPatternType >::nPhiBins
private