CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PatternRecognition.cc
Go to the documentation of this file.
1 
9 
10 //hardcoded pattern definitions
11 #define PATTERN_SIZE 9
12 PhiMemoryImage pattern1 (0x8000,0,0x8000,0,0x8000,0,0x8000,0);
13 PhiMemoryImage pattern2 (0x10000,0,0x8000,0,0xc000,0,0xc000,0);
14 PhiMemoryImage pattern3 (0x4000,0,0x8000,0,0x18000,0,0x18000,0);
15 PhiMemoryImage pattern4 (0x60000,0,0x8000,0,0xe000,0,0xe000,0);
16 PhiMemoryImage pattern5 (0x3000,0,0x8000,0,0x78000,0,0x78000,0);
17 PhiMemoryImage pattern6 (0x780000,0,0x8000,0,0xff00,0,0xff00,0);
18 PhiMemoryImage pattern7 (0xf00,0,0x8000,0,0x7f8000,0,0x7f8000,0);
19 PhiMemoryImage pattern8 (0x7f800000,0,0x8000,0,0xff00,0,0xff00,0);//
20 PhiMemoryImage pattern9 (0xff,0,0x8000,0,0x7f8000,0,0x7f8000,0);
22 
23 
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  }
135 
136 
137  std::vector<PatternOutput> Patterns(std::vector<ZonesOutput> Zones){
138 
140  std::vector<PatternOutput> output (3,tmp);
141 
142  for(int i=0;i<3;i++)
143  output[i] = DetectPatterns(Zones[i]);
144 
145 
146  return output;
147 
148  }
149 
150 
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  }
int i
Definition: DBlmapReader.cc:9
void PrintQuality(QualityOutput out)
PhiMemoryImage patterns[9]
PhiMemoryImage pattern2(0x10000, 0, 0x8000, 0, 0xc000, 0, 0xc000, 0)
PatternOutput DetectPatterns(ZonesOutput Eout)
float float float z
PhiMemoryImage pattern5(0x3000, 0, 0x8000, 0, 0x78000, 0, 0x78000, 0)
std::vector< PatternOutput > Patterns(std::vector< ZonesOutput > Zones)
std::vector< PhiMemoryImage > zone
PhiMemoryImage pattern4(0x60000, 0, 0x8000, 0, 0xe000, 0, 0xe000, 0)
std::vector< ConvertedHit > convertedhits
#define PATTERN_SIZE
PhiMemoryImage pattern7(0xf00, 0, 0x8000, 0, 0x7f8000, 0, 0x7f8000, 0)
PhiMemoryImage pattern8(0x7f800000, 0, 0x8000, 0, 0xff00, 0, 0xff00, 0)
void BitShift(int nBits)
PhiMemoryImage pattern6(0x780000, 0, 0x8000, 0, 0xff00, 0, 0xff00, 0)
double b
Definition: hdecay.h:120
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
PhiMemoryImage pattern3(0x4000, 0, 0x8000, 0, 0x18000, 0, 0x18000, 0)
double a
Definition: hdecay.h:121
PhiMemoryImage pattern1(0x8000, 0, 0x8000, 0, 0x8000, 0, 0x8000, 0)
PhiMemoryImage pattern9(0xff, 0, 0x8000, 0, 0x7f8000, 0, 0x7f8000, 0)
std::vector< ZonesOutput > Zones(std::vector< std::vector< ConvertedHit >> Hits)
Definition: ZoneCreation.h:39
QualityOutput detected
std::vector< ConvertedHit > hits
float patt[4][130000]
Definition: HijingWrapper.h:38