CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Functions
PatternRecognition.h File Reference
#include "L1Trigger/L1TMuonEndCap/interface/PhiMemoryImage.h"
#include "L1Trigger/L1TMuonEndCap/interface/EmulatorClasses.h"

Go to the source code of this file.

Functions

PatternOutput DetectPatterns (ZonesOutput Eout)
 
std::vector< PatternOutputPatterns (std::vector< ZonesOutput > Zones)
 
void PrintQuality (QualityOutput out)
 

Function Documentation

PatternOutput DetectPatterns ( ZonesOutput  Eout)

variable declarations///

Definition at line 24 of file PatternRecognition.cc.

References a, b, PhiMemoryImage::BitShift(), ZonesOutput::convertedhits, PatternOutput::detected, PatternOutput::hits, i, relval_2017::k, QualityOutput::layer, convertSQLitetoXML_cfg::output, patt, PATTERN_SIZE, QualityOutput::rank, QualityOutput::straightness, tmp, detailsBasic3DVector::y, and ZonesOutput::zone.

Referenced by Patterns().

24  {
25 
27  //bool verbose = false;
28  std::vector<int> tmp (128, 0);
29  std::vector<std::vector<int>> lya (4, tmp), stra (4, tmp), ranka_t (4, tmp), ranka (4, tmp);
30  std::vector<PhiMemoryImage> Merged = Eout.zone;
32 
33  for(int zone=0;zone<4;zone++){
34 
35 
36 
37  for(int b=0;b<128;b++){//loop over stips of detector zones
38 
39  int ly[PATTERN_SIZE] = {0}, srt[PATTERN_SIZE] = {0}, qu[PATTERN_SIZE] = {0};
41  for (int i=0; i<PATTERN_SIZE; i++) patt[i] = patterns[i];
42  for(int y=0;y != PATTERN_SIZE;y++){//loop over patterns
43 
44  bool zona[8] = {false}; //Clear out station presence
45 
46  if((b-15) < 63){
47  patt[y].BitShift(b-15);
48  }
49  else{
50  patt[y].BitShift(63);patt[y].BitShift(b-78);
51  }
52 
53 
54  for(int yy=0;yy != 8;yy++){//loop over 8 long integers of each pattern
55 
56  zona[yy] = patt[y][yy] & Merged[zone][yy];
57  }
58 
59 
60 
61  if(zona[0] || zona[1]){ly[y] += 4;}//if station 1 is present
62  if(zona[2] || zona[3]){ly[y] += 2;}//if station 2 is present
63  if(zona[4] || zona[5] || zona[6] || zona[7]){ly[y] += 1;}//if station 3 or 4 is present
64  srt[y] = y/2;//straightness code::pattern specific
65 
66  if( (ly[y] != 0) && (ly[y] != 1) && (ly[y] != 2) && (ly[y] != 4) ){//Removes single and ME34 hit combinations//
67 
68 
69  //creates quality code by interleving straightness and layer bit words///
70  if((srt[y] & 1) != 0){qu[y] += 2;}
71  if((srt[y] & 2) != 0){qu[y] += 8;}
72  if((srt[y] & 4) != 0){qu[y] += 32;}
73  if((ly[y] & 1) != 0){qu[y] += 1;}
74  if((ly[y] & 2) != 0){qu[y] += 4;}
75  if((ly[y] & 4) != 0){qu[y] += 16;}
77 
78  }
79 
80  }//pattern loop
81 
82  for(int a=0;a<PATTERN_SIZE;a++)
83  {
84  if(qu[a] > ranka_t[zone][b]){//take highest quality from all patterns at given key strip
85 
86  ranka_t[zone][b] = qu[a];
87  lya[zone][b] = ly[a];
88  stra[zone][b] = srt[a];
89  }
90  }//pattern loop to assign quality
91 
92 
93 
94 
95 
96  }//strip loop
97  }//zone loop
98 
99 
103 
104 
105  for(int zone=0;zone<4;zone++){
106 
107  for(int k=0;k<128;k++){
108 
109  int qr = (k==0) ? qr=0 : ranka_t[zone][k-1];
110  int ql = (k==127) ? ql=0 :ranka_t[zone][k+1];
111  int qc = ranka_t[zone][k];
112 
113  if((qc <= ql) || (qc < qr)){qc = 0;}
114 
115  ranka[zone][k] = qc;
116  }
117  }
118 
119 
120 
121 
122  QualityOutput qout;
123  qout.rank = ranka;
124  qout.layer = lya;
125  qout.straightness = stra;
126 
128  output.detected = qout;
129  output.hits = Eout.convertedhits;
130 
131 
132  return output;
133 
134  }
int i
Definition: DBlmapReader.cc:9
PhiMemoryImage patterns[9]
std::vector< PhiMemoryImage > zone
std::vector< ConvertedHit > convertedhits
#define PATTERN_SIZE
void BitShift(int nBits)
double b
Definition: hdecay.h:120
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
double a
Definition: hdecay.h:121
QualityOutput detected
std::vector< ConvertedHit > hits
float patt[4][130000]
Definition: HijingWrapper.h:38
std::vector<PatternOutput> Patterns ( std::vector< ZonesOutput Zones)

Definition at line 137 of file PatternRecognition.cc.

References DetectPatterns(), i, convertSQLitetoXML_cfg::output, and tmp.

Referenced by L1TMuonEndCapTrackProducer::produce().

137  {
138 
140  std::vector<PatternOutput> output (3,tmp);
141 
142  for(int i=0;i<3;i++)
144 
145 
146  return output;
147 
148  }
int i
Definition: DBlmapReader.cc:9
PatternOutput DetectPatterns(ZonesOutput Eout)
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
std::vector< ZonesOutput > Zones(std::vector< std::vector< ConvertedHit >> Hits)
Definition: ZoneCreation.h:39
void PrintQuality ( QualityOutput  out)

Print Quality for comparison ///

Definition at line 151 of file PatternRecognition.cc.

References detailsBasic3DVector::z.

151  {
152 
153 
157  for(int zz=0;zz<4;zz++){
158  for(int z = 0;z<128;z++){
159 
160  //if((out.rank)[zz][z]){std::cout<<"Zone: "<<zz<<"::new "<<(z+1)<<": "<<(out.layer)[zz][z]<<", "<<(out.straightness)[zz][z]<<", "<<(out.rank)[zz][z]<<" ";std::cout<<"\n\n";}//changing zones to Merged
161 
162  }
163  }
164  }
float float float z