CMS 3D CMS Logo

PatternRecognition.cc
Go to the documentation of this file.
1 
10 
11 //hardcoded pattern definitions
12 #define PATTERN_SIZE 9
13 const PhiMemoryImage pattern1 (0x8000,0,0,0x8000,0,0,0x8000,0,0,0x8000,0,0);
14 const PhiMemoryImage pattern2 (0x10000,0,0,0x8000,0,0,0xc000,0,0,0xc000,0,0);
15 const PhiMemoryImage pattern3 (0x4000,0,0,0x8000,0,0,0x18000,0,0,0x18000,0,0);
16 const PhiMemoryImage pattern4 (0x60000,0,0,0x8000,0,0,0xe000,0,0,0xe000,0,0);
17 const PhiMemoryImage pattern5 (0x3000,0,0,0x8000,0,0,0x78000,0,0,0x78000,0,0);
18 const PhiMemoryImage pattern6 (0x780000,0,0,0x8000,0,0,0xff00,0,0,0xff00,0,0);
19 const PhiMemoryImage pattern7 (0xf00,0,0,0x8000,0,0,0x7f8000,0,0,0x7f8000,0,0);
20 const PhiMemoryImage pattern8 (0x7f800000,0,0,0x8000,0,0,0xff00,0,0,0xff00,0,0);//
21 const PhiMemoryImage pattern9 (0xff,0,0,0x8000,0,0,0x7f8000,0,0,0x7f8000,0,0);
23 
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  for(int b=0;b<192;b++){//loop over stips of detector zones//was 128 now 192 to accomodate
37  //larger phi scale used in neighboring sectors algorithm
38  int ly[PATTERN_SIZE] = {0}, srt[PATTERN_SIZE] = {0}, qu[PATTERN_SIZE] = {0};
40  for (int i=0; i<PATTERN_SIZE; i++) patt[i] = patterns[i];
41  for(int y=0;y != PATTERN_SIZE;y++){//loop over patterns
42 
43  bool zona[12] = {false}; //Clear out station presence
44 
45  if((b-15) < 63){
46  patt[y].BitShift(b-15);
47  }
48  else if((b-15) < 127){
49  patt[y].BitShift(63);patt[y].BitShift(1);patt[y].BitShift(b-79);
50  }
51  else{
52  patt[y].BitShift(63);patt[y].BitShift(1);patt[y].BitShift(63);patt[y].BitShift(1);patt[y].BitShift(b-143);
53  }
54 
55  for(int yy=0;yy != 12;yy++){//loop over 8 long integers of each pattern
56  zona[yy] = patt[y][yy] & Merged[zone][yy];
57  }
58 
59  if(zona[0] || zona[1] || zona[2]){ly[y] += 4;}//if station 1 is present
60  if(zona[3] || zona[4] || zona[5]){ly[y] += 2;}//if station 2 is present
61  if(zona[6] || zona[7] || zona[8] || zona[9] || zona[10] || zona[11]){ly[y] += 1;}//if station 3 or 4 is present
62  srt[y] = y/2;//straightness code::pattern specific
63 
64  if( (ly[y] != 0) && (ly[y] != 1) && (ly[y] != 2) && (ly[y] != 4) ){//Removes single and ME34 hit combinations//
65 
66  //creates quality code by interleving straightness and layer bit words///
67  if((srt[y] & 1) != 0){qu[y] += 2;}
68  if((srt[y] & 2) != 0){qu[y] += 8;}
69  if((srt[y] & 4) != 0){qu[y] += 32;}
70  if((ly[y] & 1) != 0){qu[y] += 1;}
71  if((ly[y] & 2) != 0){qu[y] += 4;}
72  if((ly[y] & 4) != 0){qu[y] += 16;}
74 
75  }
76 
77  }//pattern loop
78 
79  for(int a=0;a<PATTERN_SIZE;a++)
80  {
81  if(qu[a] > ranka_t[zone][b]){//take highest quality from all patterns at given key strip
82 
83  ranka_t[zone][b] = qu[a];
84  lya[zone][b] = ly[a];
85  stra[zone][b] = srt[a];
86  }
87  }//pattern loop to assign quality
88 
89  }//strip loop
90  }//zone loop
91 
95 
96  for(int zone=0;zone<4;zone++){
97 
98  for(int k=0;k<192;k++){//was 128
99 
100  int qr = 0, ql = 0, qc = ranka_t[zone][k];
101 
102  if(k>0){qr=ranka_t[zone][k-1];}
103  if(k<191){ql=ranka_t[zone][k+1];}//was 127
104 
105 
106  if((qc <= ql) || (qc < qr)){qc = 0;}
107 
108  ranka[zone][k] = qc;
109  }
110  }
111 
112  QualityOutput qout;
113  qout.rank = ranka;
114  qout.layer = lya;
115  qout.straightness = stra;
116 
118  output.detected = qout;
119  output.hits = Eout.convertedhits;
120 
121  return output;
122 
123 }
124 
125 std::vector<PatternOutput> Patterns(std::vector<ZonesOutput> Zones){
126 
128  std::vector<PatternOutput> output (3,tmp);
129 
130  for(int i=0;i<3;i++)
131  output[i] = DetectPatterns(Zones[i]);
132 
133  return output;
134 
135 }
136 
137 
139 
143  for(int zz=0;zz<4;zz++){
144  for(int z = 0;z<192;z++){//was 128
145 
146  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
147 
148  }
149  }
150 }
std::vector< PatternOutput > Patterns(std::vector< ZonesOutput > Zones)
void PrintQuality(QualityOutput out)
const PhiMemoryImage pattern8(0x7f800000, 0, 0, 0x8000, 0, 0, 0xff00, 0, 0, 0xff00, 0, 0)
const PhiMemoryImage pattern5(0x3000, 0, 0, 0x8000, 0, 0, 0x78000, 0, 0, 0x78000, 0, 0)
PatternOutput DetectPatterns(ZonesOutput Eout)
float float float z
const PhiMemoryImage pattern2(0x10000, 0, 0, 0x8000, 0, 0, 0xc000, 0, 0, 0xc000, 0, 0)
const PhiMemoryImage pattern9(0xff, 0, 0, 0x8000, 0, 0, 0x7f8000, 0, 0, 0x7f8000, 0, 0)
const PhiMemoryImage patterns[9]
const PhiMemoryImage pattern3(0x4000, 0, 0, 0x8000, 0, 0, 0x18000, 0, 0, 0x18000, 0, 0)
std::vector< PhiMemoryImage > zone
std::vector< ConvertedHit > convertedhits
#define PATTERN_SIZE
void BitShift(int nBits)
const PhiMemoryImage pattern1(0x8000, 0, 0, 0x8000, 0, 0, 0x8000, 0, 0, 0x8000, 0, 0)
int k[5][pyjets_maxn]
double b
Definition: hdecay.h:120
const PhiMemoryImage pattern6(0x780000, 0, 0, 0x8000, 0, 0, 0xff00, 0, 0, 0xff00, 0, 0)
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
double a
Definition: hdecay.h:121
const PhiMemoryImage pattern7(0xf00, 0, 0, 0x8000, 0, 0, 0x7f8000, 0, 0, 0x7f8000, 0, 0)
std::vector< ZonesOutput > Zones(std::vector< std::vector< ConvertedHit >> Hits)
Definition: ZoneCreation.h:37
QualityOutput detected
std::vector< ConvertedHit > hits
const PhiMemoryImage pattern4(0x60000, 0, 0, 0x8000, 0, 0, 0xe000, 0, 0, 0xe000, 0, 0)
float patt[4][130000]
Definition: HijingWrapper.h:38