17 int aPhiMin,
int aPhiMax,
19 unsigned int aRefLayer):
23 range(
std::pair<
int,
int>(aPhiMin,aPhiMax)){}
28 return iPhi>=
range.first &&
38 <<
" iInput: "<<aRefHitDef.
iInput 39 <<
" iRegion: "<<aRefHitDef.
iRegion 40 <<
" range: ("<<aRefHitDef.
range.first
41 <<
", "<<aRefHitDef.
range.second<<std::endl;
50 std::vector<int> aLayer1D(nInputs(),0);
54 aLayer2D.assign(
nLayers(),aLayer1D);
58 aLayer3D.assign(nLogicRegions(),aLayer2D);
61 measurements4D.assign(nProcessors(),aLayer3D);
62 measurements4Dref.assign(nProcessors(),aLayer3D);
69 rawParams = *omtfParams;
72 barrelMin.resize(nProcessors());
73 endcap10DegMin.resize(nProcessors());
74 endcap20DegMin.resize(nProcessors());
76 barrelMax.resize(nProcessors());
77 endcap10DegMax.resize(nProcessors());
78 endcap20DegMax.resize(nProcessors());
83 std::copy(connectedSectorsStartVec->begin(), connectedSectorsStartVec->begin()+6, barrelMin.begin());
84 std::copy(connectedSectorsStartVec->begin()+6, connectedSectorsStartVec->begin()+12, endcap10DegMin.begin());
85 std::copy(connectedSectorsStartVec->begin()+12, connectedSectorsStartVec->end(), endcap20DegMin.begin());
87 std::copy(connectedSectorsEndVec->begin(), connectedSectorsEndVec->begin()+6, barrelMax.begin());
88 std::copy(connectedSectorsEndVec->begin()+6, connectedSectorsEndVec->begin()+12, endcap10DegMax.begin());
89 std::copy(connectedSectorsEndVec->begin()+12, connectedSectorsEndVec->end(), endcap20DegMax.begin());
92 const std::vector<L1TMuonOverlapParams::LayerMapNode> *layerMap = omtfParams->
layerMap();
94 for(
unsigned int iLayer=0;iLayer<
nLayers();++iLayer){
102 refToLogicNumber.resize(nRefLayers());
104 const std::vector<L1TMuonOverlapParams::RefLayerMapNode> *refLayerMap = omtfParams->
refLayerMap();
111 processorPhiVsRefLayer.assign(nProcessors(),vector1D);
118 aLayer2D.assign(nLogicRegions(),aLayer1D);
120 connections.assign(nProcessors(),aLayer2D);
124 std::vector<std::pair<int,int> > aRefHit1D(nLogicRegions(),std::pair<int,int>(9999,9999));
126 std::vector<std::vector<std::pair<int,int> > > aRefHit2D;
127 aRefHit2D.assign(nRefLayers(),aRefHit1D);
129 regionPhisVsRefLayerVsInput.assign(nInputs(),aRefHit2D);
132 std::vector<RefHitDef> aRefHitsDefs(nRefHits());
134 refHitsDefs.assign(nProcessors(),aRefHitsDefs);
137 const std::vector<L1TMuonOverlapParams::RefHitNode> *refHitMap = omtfParams->
refHitMap();
138 const std::vector<L1TMuonOverlapParams::LayerInputNode> *layerInputMap = omtfParams->
layerInputMap();
139 unsigned int tmpIndex = 0;
140 for(
unsigned int iProcessor=0;iProcessor<nProcessors();++iProcessor){
142 int iPhiStart = phiStartMap->at(
iRefLayer+iProcessor*nRefLayers());
143 processorPhiVsRefLayer[iProcessor][
iRefLayer] = iPhiStart;
145 for(
unsigned int iRefHit=0;iRefHit<nRefHits();++iRefHit){
146 int iPhiMin = refHitMap->at(iRefHit+iProcessor*nRefHits()).iPhiMin;
147 int iPhiMax = refHitMap->at(iRefHit+iProcessor*nRefHits()).iPhiMax;
148 unsigned int iInput = refHitMap->at(iRefHit+iProcessor*nRefHits()).iInput;
149 unsigned int iRegion = refHitMap->at(iRefHit+iProcessor*nRefHits()).iRegion;
150 unsigned int iRefLayer = refHitMap->at(iRefHit+iProcessor*nRefHits()).iRefLayer;
152 refHitsDefs[iProcessor][iRefHit] =
RefHitDef(iInput,iPhiMin,iPhiMax,iRegion,iRefLayer);
154 for(
unsigned int iLogicRegion=0;iLogicRegion<nLogicRegions();++iLogicRegion){
155 for(
unsigned int iLayer=0;iLayer<
nLayers();++iLayer){
156 tmpIndex = iLayer+iLogicRegion*
nLayers() + iProcessor*nLogicRegions()*
nLayers();
157 unsigned int iFirstInput = layerInputMap->at(tmpIndex).iFirstInput;
158 unsigned int nInputsInRegion = layerInputMap->at(tmpIndex).nInputs;
159 connections[iProcessor][iLogicRegion][iLayer] = std::pair<unsigned int, unsigned int>(iFirstInput,nInputsInRegion);
161 if(iProcessor!=0) connections[iProcessor][iLogicRegion][iLayer] = connections[0][iLogicRegion][iLayer];
166 initCounterMatrices();
174 out<<
"nLayers(): "<<aConfig.
nLayers()
181 for(
unsigned int iProcessor = 0;iProcessor<aConfig.
nProcessors(); ++iProcessor){
182 out<<
"Processor: "<<iProcessor;
199 if(iPhiStart<0) iPhiStart+=
nPhiBins();
201 if(iPhiStart+(
int)coneSize<(
int)
nPhiBins()){
202 return iPhiStart<=iPhi && iPhiStart+(int)coneSize>iPhi;
205 return iPhiStart<=iPhi;
208 return iPhi<iPhiStart+(
int)coneSize-(
int)
nPhiBins();
219 if(iPhi>=regionPhisVsRefLayerVsInput[iInput][iRefLayer][
iRegion].
first &&
220 iPhi<=regionPhisVsRefLayerVsInput[iInput][iRefLayer][
iRegion].
second)
230 return *std::min_element(processorPhiVsRefLayer[iProcessor].
begin(),
231 processorPhiVsRefLayer[iProcessor].
end());
242 std::cout <<
"PROBLEM: hit in unknown Det, detID: "<<detId.
det()<<std::endl;
250 if(isBarrel) aLayer = aId.
station() <=2 ?
265 if(csc.
ring()==2 && csc.
station()==1) aLayer = 1811;
266 if(csc.
station()==4) aLayer = 4;
271 int hwNumber = aLayer+100*detId.
subdetId();
bool fitsRange(int iPhi) const
std::vector< vector1D_pair > vector2D_pair
const std::vector< LayerMapNode > * layerMap() const
std::vector< std::pair< unsigned int, unsigned int > > vector1D_pair
unsigned int nRefLayers() const
unsigned int hwNumber
short layer number used within OMTF emulator
const std::vector< int > * connectedSectorsEnd() const
void initCounterMatrices()
bool isInRegionRange(int iPhiStart, unsigned int coneSize, int iPhi) const
unsigned int nLayers() const
unsigned int logicNumber
logic numer of the layer
unsigned int nProcessors() const
std::vector< std::vector< int > > processorPhiVsRefLayer
unsigned int iInput
Hit input number within a cone.
std::vector< vector2D > vector3D
U second(std::pair< T, U > const &p)
const std::vector< LayerInputNode > * layerInputMap() const
unsigned int getRegionNumberFromMap(unsigned int iInput, unsigned int iRefLayer, int iPhi) const
unsigned int nPdfAddrBits() const
std::vector< vector1D > vector2D
unsigned int nHitsPerLayer() const
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
std::vector< int > vector1D
RefHitDef(unsigned int aInput=15, int aPhiMin=5760, int aPhiMax=5760, unsigned int aRegion=99, unsigned int aRefLayer=99)
bool bendingLayer
Is this a bending layers?
void configure(const L1TMuonOverlapParams *omtfParams)
uint32_t getLayerNumber(uint32_t rawId) const
unsigned int refLayer
Reference layer number.
const std::vector< int > * globalPhiStartMap() const
std::pair< int, int > range
int globalPhiStart(unsigned int iProcessor) const
unsigned int iRefLayer
Reference layer logic number (0-7)
unsigned int logicNumber
Corresponding logical layer number.
unsigned int connectedToLayer
unsigned int iRegion
Region number assigned to this referecne hit.
const std::vector< RefLayerMapNode > * refLayerMap() const
int station() const
Return the station number.
unsigned int nPdfValBits() const
friend std::ostream & operator<<(std::ostream &out, const RefHitDef &aRefHitDef)
const std::vector< int > * connectedSectorsStart() const
const std::vector< RefHitNode > * refHitMap() const
constexpr Detector det() const
get the detector field from this detid
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.