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 (192, 0);//was 128
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 
34  for(int zone=0;zone<4;zone++){
35 
36 
37 
38  for(int b=0;b<192;b++){//loop over stips of detector zones//was 128 now 192 to accomodate
39  //larger phi scale used in neighboring sectors algorithm
40  int ly[PATTERN_SIZE] = {0}, srt[PATTERN_SIZE] = {0}, qu[PATTERN_SIZE] = {0};
42  for (int i=0; i<PATTERN_SIZE; i++) patt[i] = patterns[i];
43  for(int y=0;y != PATTERN_SIZE;y++){//loop over patterns
44 
45  bool zona[12] = {false}; //Clear out station presence
46 
47  if((b-15) < 63){
48  patt[y].BitShift(b-15);
49  }
50  else if((b-15) < 127){
51  patt[y].BitShift(63);patt[y].BitShift(b-78);
52  }
53  else{
54  patt[y].BitShift(63);patt[y].BitShift(63);patt[y].BitShift(b-141);
55  }
56 
57 
58  for(int yy=0;yy != 12;yy++){//loop over 8 long integers of each pattern
59 
60  zona[yy] = patt[y][yy] & Merged[zone][yy];
61  }
62 
63 
64 
65  if(zona[0] || zona[1] || zona[2]){ly[y] += 4;}//if station 1 is present
66  if(zona[3] || zona[4] || zona[5]){ly[y] += 2;}//if station 2 is present
67  if(zona[6] || zona[7] || zona[8] || zona[9] || zona[10] || zona[11]){ly[y] += 1;}//if station 3 or 4 is present
68  srt[y] = y/2;//straightness code::pattern specific
69 
70  if( (ly[y] != 0) && (ly[y] != 1) && (ly[y] != 2) && (ly[y] != 4) ){//Removes single and ME34 hit combinations//
71 
72 
73  //creates quality code by interleving straightness and layer bit words///
74  if((srt[y] & 1) != 0){qu[y] += 2;}
75  if((srt[y] & 2) != 0){qu[y] += 8;}
76  if((srt[y] & 4) != 0){qu[y] += 32;}
77  if((ly[y] & 1) != 0){qu[y] += 1;}
78  if((ly[y] & 2) != 0){qu[y] += 4;}
79  if((ly[y] & 4) != 0){qu[y] += 16;}
81 
82  }
83 
84  }//pattern loop
85 
86  for(int a=0;a<PATTERN_SIZE;a++)
87  {
88  if(qu[a] > ranka_t[zone][b]){//take highest quality from all patterns at given key strip
89 
90  ranka_t[zone][b] = qu[a];
91  lya[zone][b] = ly[a];
92  stra[zone][b] = srt[a];
93  }
94  }//pattern loop to assign quality
95 
96 
97 
98 
99 
100  }//strip loop
101  }//zone loop
102 
103 
107 
108 
109  for(int zone=0;zone<4;zone++){
110 
111  for(int k=0;k<192;k++){//was 128
112 
113  int qr = ranka_t[zone][k-1], ql = ranka_t[zone][k+1], qc = ranka_t[zone][k];
114 
115  //if(qc && verbose)
116  // std::cout<<"\n"<<k<<":qc = "<<qc<<" straight: "<<stra[zone][k]<<" lya: "<<lya[zone][k]<<std::endl;
117 
118  if(k==0){qr=0;}
119  if(k==191){ql=0;}//was 127
120 
121  if((qc <= ql) || (qc < qr)){qc = 0;}
122 
123  ranka[zone][k] = qc;
124  }
125  }
126 
127 
128  QualityOutput qout;
129  qout.rank = ranka;
130  qout.layer = lya;
131  qout.straightness = stra;
132 
134  output.detected = qout;
135  output.hits = Eout.convertedhits;
136 
137 
138  return output;
139 
140  }
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 143 of file PatternRecognition.cc.

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

Referenced by L1TMuonEndCapTrackProducer::produce().

143  {
144 
146  std::vector<PatternOutput> output (3,tmp);
147 
148  for(int i=0;i<3;i++)
150 
151 
152  return output;
153 
154  }
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 157 of file PatternRecognition.cc.

References gather_cfg::cout, QualityOutput::layer, QualityOutput::rank, QualityOutput::straightness, and detailsBasic3DVector::z.

157  {
158 
159 
163  for(int zz=0;zz<4;zz++){
164  for(int z = 0;z<192;z++){//was 128
165 
166  if((out.rank)[zz][z] && ((out.layer)[zz][z] || (out.straightness)[zz][z])){std::cout<<"Found Pattern 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
167 
168  }
169  }
170  }
float float float z
tuple cout
Definition: gather_cfg.py:145