ATLAS Offline Software
RpcPatFinder.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "RpcPatFinder.h"
6 
7 #include <math.h>
8 #include <bitset>
9 #include <iostream>
10 
12 
13 // Original author: Massimo Corradi
14 
15 // --------------------------------------------------------------------------------
16 // --------------------------------------------------------------------------------
17 
19  const std::string& name,
20  const IInterface* parent):
22 {
23 }
24 
25 // --------------------------------------------------------------------------------
26 // --------------------------------------------------------------------------------
27 
29  int stationEta,
30  bool measuresPhi,
31  unsigned int gasGap,
32  unsigned int doubletR,
33  double gPosX,
34  double gPosY,
35  double gPosZ,
36  TrigL2MuonSA::RpcLayerHits& rpcLayerHits ) const{
37 
38  int ilay=0;
39  // BO
40  if (stationName.substr(0,2)=="BO") ilay=4;
41  // doubletR
42  ilay+=2*(doubletR-1);
43  // BML7 special chamber with 1 RPC doublet (doubletR=1 but RPC2) :
44  if (stationName.substr(0,3)=="BML" && stationEta==7) ilay+=2;
45  // gasGap
46  ilay+=gasGap-1;
47 
48  double R=std::sqrt(gPosX*gPosX+gPosY*gPosY);
49  const double Phi=std::atan2(gPosY,gPosX);
50 
51  if (!measuresPhi){
52  // if eta measurement then save Z/R
53  R = calibR(stationName,R, Phi);
54  double x=gPosZ/R;
55  rpcLayerHits.hits_in_layer_eta.at(ilay).push_back(x);
56  rpcLayerHits.hits_in_layer_R.at(ilay).push_back(R);//mod!
57  rpcLayerHits.hits_in_layer_Z.at(ilay).push_back(gPosZ);//mod!
58  }else{
59  // if phi measurement then save phi
60  rpcLayerHits.hits_in_layer_phi.at(ilay).push_back(Phi);
61  }
62 }
63 
64 
65 // --------------------------------------------------------------------------------
66 // --------------------------------------------------------------------------------
68  double &phi_outer,
69  unsigned int &pattern,
70  const TrigL2MuonSA::RpcLayerHits& rpcLayerHits) const{
71  double result_dMO;
72  bool found=false;
73  if (patfinder(true, pattern, phi_middle,phi_outer, result_dMO, rpcLayerHits)>=2) found=true;
74  return found;
75 }
76 // --------------------------------------------------------------------------------
77 // --------------------------------------------------------------------------------
78 
80  double bw[],
81  unsigned int & pattern,
82  const TrigL2MuonSA::RpcLayerHits& rpcLayerHits) const{
83  double result_delta[3]={9999,9999,9999};
84  bool found=false;
85  if( patfinder_forEta(false, pattern, aw, bw, result_delta, rpcLayerHits)>=2) found=true;
86  return found;
87 }
88 // --------------------------------------------------------------------------------
89 // --------------------------------------------------------------------------------
90 
92  unsigned int &result_pat,
93  double result_aw[],
94  double result_bw[],
95  double result_dist[],
96  const TrigL2MuonSA::RpcLayerHits& rpcLayerHits) const {
97 
98  const std::vector<std::list<double>> * rpc_x;
99  rpc_x = &rpcLayerHits.hits_in_layer_eta;
100 
101  int layer_end;
102  if(rpc_x->at(6).size()+rpc_x->at(7).size() >0) layer_end = 7;//special "feet" towers
103  else layer_end = 5;
104 
105  // reset parameters
106  result_pat=0;
107 
108  int n_max=0;
109  size_t index[8]={};
110  size_t result_index[8]={};
111 
112  // Loop on start layer
113  for (int l_start=0; l_start<layer_end; l_start++){
114  for(int i=0; i<8; i++) index[i]=0;
115 
116  // Loop on hits of start layer, for each hit try a new pattern
117  for (std::list<double>::const_iterator i_start=rpc_x->at(l_start).begin(); i_start!=rpc_x->at(l_start).end(); ++i_start){
118  int n_hits=1;
119  unsigned int pat=(1<<l_start); // bit pattern of hit layers
120  double dMO=9999; // disstance middle-outer station
121  double dMM=9999; // distance RPC1-RPC2 on middle stations
122  double current_x =*i_start; // set current_x to the starting hit
123  int l_current = l_start;
124 
125  index[0] = std::distance(rpc_x->at(l_start).begin(), i_start);//mod!
126 
127  ATH_MSG_DEBUG("patfinder: l_start = "<< l_start << " x= " << current_x
128  << " pat= " << (std::bitset<8>) pat);
129 
130  // ----- add compatible hits in other layers ----//
131  // loop on test layers:
132  for (int l_test=l_start+1; l_test<=layer_end; l_test++){
133  int n_layer=0;
134  double x_layer=0;
135  double delta_layer=999;
136  // loop on hits of test layer and picks the one with smaller distance from current_x
137  for (std::list<double>::const_iterator i_test=rpc_x->at(l_test).begin(); i_test!=rpc_x->at(l_test).end(); ++i_test){
138  double delta=-1;
139  // check if within the road
140  if (deltaOK(l_current,l_test,current_x,*i_test,iphi,delta)){
141  n_layer++;
142  // if closest hit update x_layer
143  if (delta<delta_layer) {
144  delta_layer=delta;
145  x_layer=*i_test;
146  index[l_test] = std::distance(rpc_x->at(l_test).begin(), i_test);//mod!
147  }
148  }
149  }//for i_test
150  if (n_layer>0) {// compatible hit found in this layer increase n_hits
151  n_hits+=1;
152  current_x=x_layer;
153  pat+=(1<<l_test);
154  l_current=l_test;
155  if (l_start<4&&l_test>=4&&delta_layer<dMO){
156  dMO=delta_layer;
157  }else if (l_start<2&&l_test>=2&&l_test<4&&delta_layer<dMM) {
158  dMM=delta_layer;
159  } else if (l_start>=4&&l_start<5&&l_test>=6&&delta_layer<dMM) {
160  dMM=delta_layer;
161  }
162  }// if (n_layer)
163 
164  ATH_MSG_DEBUG("patfinder: l_test = "<< l_test << " n_layer= "<< n_layer
165  << " x= " << current_x << " pat= " << (std::bitset<8>)pat);
166  }//for l_test
167 
168  // if longest pattern found, update result
169  if (n_hits>n_max) {
170  n_max=n_hits;
171  result_pat=pat;
172  result_dist[2]=dMO;
173  result_dist[1]=dMM;
174  for(int i=0; i<8; i++) result_index[i]=index[i];
175  }else if (n_hits==n_max) {
176  // if same lenght but smallest dMM/dMO, update result
177  if (dMM<result_dist[1]||(dMM==result_dist[1]&&dMO<result_dist[2])){
178  result_pat=pat;
179  result_dist[2]=dMO;
180  result_dist[1]=dMM;
181  for(int i=0; i<8; i++) result_index[i]=index[i];
182  }
183  }
184  }//for i_start
185  }//for l_start
186 
187  if (n_max>=2) {
188  abcal(result_pat, result_index, result_aw, result_bw, rpcLayerHits);
189  ATH_MSG_DEBUG("patfinder: BEST pat= " << (std::bitset<8>)result_pat
190  <<" dMM= "<<result_dist[1] <<" dMO= "<<result_dist[2]);
191 
192  }//if(n_max>2)
193 
194  return n_max;
195 }//patfinder_forEta()
196 
197 // --------------------------------------------------------------------------------
198 // --------------------------------------------------------------------------------
199 
201  unsigned int &result_pat,
202  double &result_x,
203  double &result_x1,
204  double &result_dMO,
205  const TrigL2MuonSA::RpcLayerHits& rpcLayerHits) const{
206 
207  const int N_layers=8;
208 
209  const std::vector<std::list<double>> * rpc_x;
210  if (iphi){
211  rpc_x = &rpcLayerHits.hits_in_layer_phi;
212  } else {
213  rpc_x = &rpcLayerHits.hits_in_layer_eta;
214  }
215 
216  int l_start_max=2; //max layer of first hit
217  if (rpc_x->at(6).size()+rpc_x->at(7).size()>0) l_start_max=5; // special "feet" towers
218 
219  // reset parameters
220  result_x=0;
221  result_x1=0;
222  result_pat=0;
223  double result_dMM=9999;
224  result_dMO=9999;
225  int n_max=0;
226 
227 
228  // Loop on start layer
229  for (int l_start=0; l_start<=l_start_max; l_start++){
230  // Loop on hits of start layer, for each hit try a new pattern
231  for (std::list<double>::const_iterator i_start=rpc_x->at(l_start).begin(); i_start!=rpc_x->at(l_start).end(); ++i_start){
232  int n_hits=1;
233  unsigned int pat=(1<<l_start); // bit pattern of hit layers
234  double dMO=9999; // disstance middle-outer station
235  double dMM=9999; // distance RPC1-RPC2 on middle stations
236 
237  double current_x =*i_start; // set current_x to the starting hit
238  int l_current = l_start;
239  ATH_MSG_DEBUG("patfinder: l_start = "<< l_start << " x= " << current_x
240  << " pat= " << (std::bitset<8>) pat);
241 
242  // ----- add compatible hits in other layers ----//
243  // loop on test layers:
244  for (int l_test=l_start+1; l_test<N_layers; l_test++){
245  int n_layer=0;
246  double x_layer=0;
247  double delta_layer=999;
248  // loop on hits of test layer and picks the one with smaller distance from current_x
249  for (std::list<double>::const_iterator i_test=rpc_x->at(l_test).begin(); i_test!=rpc_x->at(l_test).end(); ++i_test){
250  double delta=-1;
251  // check if within the road
252  if (deltaOK(l_current,l_test,current_x,*i_test,iphi,delta)){
253  n_layer++;
254  // if closest hit update x_layer
255  if (delta<delta_layer) {
256  delta_layer=delta;
257  x_layer=*i_test;
258  }
259  }
260  }
261  if (n_layer>0) {// compatible hit found in this layer increase n_hits
262  n_hits+=1;
263  current_x=x_layer;
264  pat+=(1<<l_test);
265  l_current=l_test;
266  if (l_start<4&&l_test>=4&&delta_layer<dMO){
267  dMO=delta_layer;
268  }else if (l_start<2&&l_test>=2&&l_test<4&&delta_layer<dMM) {
269  dMM=delta_layer;
270  } else if (l_start>=4&&l_start<5&&l_test>=6&&delta_layer<dMM) {
271  dMM=delta_layer;
272  }
273  }
274  ATH_MSG_DEBUG("patfinder: l_test = "<< l_test << " n_layer= "<< n_layer
275  << " x= " << current_x << " pat= " << (std::bitset<8>)pat);
276  }
277  // if longest pattern found, update result
278  if (n_hits>n_max) {
279  n_max=n_hits;
280  result_x=*i_start;
281  result_pat=pat;
282  result_dMO=dMO;
283  result_dMM=dMM;
284  result_x1=current_x;
285  }else if (n_hits==n_max) {
286  // if same lenght but smallest dMM/dMO, update result
287  if (dMM<result_dMM||(dMM==result_dMM&&dMO<result_dMO)){
288  result_x=*i_start;
289  result_pat=pat;
290  result_dMO=dMO;
291  result_dMM=dMM;
292  result_x1=current_x;
293  }
294  }
295  }
296  }
297  if (n_max>2) {
298  ATH_MSG_DEBUG("patfinder: BEST pat= " << (std::bitset<8>)result_pat
299  <<" dMM= "<<result_dMM <<" dMO= "<<result_dMO
300  <<" x0= "<<result_x <<" x1= "<<result_x1);
301  }
302  return n_max;
303 
304 }
305 
306 // --------------------------------------------------------------------------------
307 // --------------------------------------------------------------------------------
308 
309 bool TrigL2MuonSA::RpcPatFinder::deltaOK(int l1, int l2, double x1, double x2, int isphi, double &delta) const{
310 
311 
312  // ROAD tuned for ~20 GeV
313  /*
314  double delta_gasgap_eta = 0.004;
315  double delta_lowpt_eta = 0.005;
316  double delta_highpt_eta = 0.012;
317  double delta_feet_eta = 0.02;
318 
319  double delta_gasgap_phi = 0.004;
320  double delta_lowpt_phi = 0.005;
321  double delta_highpt_phi = 0.008;
322  double delta_feet_phi = 0.02;
323  */
324 
325  //OPEN road
326 
327  const double delta_gasgap_eta = 0.01;
328  const double delta_lowpt_eta = 0.05;
329  const double delta_highpt_eta = 0.1;
330  const double delta_feet_eta = 0.05;
331 
332  const double delta_gasgap_phi = 0.01;
333  const double delta_lowpt_phi = 0.03;
334  const double delta_highpt_phi = 0.04;
335  const double delta_feet_phi = 0.03;
336 
337  // calculate delta-eta or delta-phi
338  if(isphi) delta=std::abs(std::acos(std::cos(x2-x1)));
339  else delta=std::abs(x2-x1);
340 
341  double delta_max=0;
342  if (l1>l2) {
343  int tmp=l2;
344  l2=l1;
345  l1=tmp;
346  }
347  // calculate delta_max
348  if (isphi){
349  if (l2-l1==1&&(l1==0||l1==2||l1==4||l1==6)){
350  delta_max=delta_gasgap_phi;
351  } else if (l1<2&&l2<4) {
352  delta_max=delta_lowpt_phi;
353  }else if (l1<4&&l2>=4) {
354  delta_max=delta_highpt_phi;
355  }else if (l1<6&&l1>=4&&l2>=6) {
356  delta_max=delta_feet_phi;
357  }
358  } else {
359  if (l2-l1==1&&(l1==0||l1==2||l1==4||l1==6)){
360  delta_max=delta_gasgap_eta;
361  } else if (l1<2&&l2>=2&&l2<4) {
362  delta_max=delta_lowpt_eta;
363  }else if (l1<4&&l2>=4) {
364  delta_max=delta_highpt_eta;
365  }else if (l1<6&&l1>=4&&l2>=6) {
366  delta_max=delta_feet_eta;
367  }
368  }
369 
370  // evaluate the result
371 
372  bool OK=false;
373  if (delta<delta_max) OK=true;
374 
375  return OK;
376 
377 }
378 
379 // --------------------------------------------------------------------------------
380 // --------------------------------------------------------------------------------
381 
382 double TrigL2MuonSA::RpcPatFinder::calibR(const std::string& stationName, double R, double Phi) const{
383  double DeltaPhi, temp_phi;
384  double calibPhi = std::acos(std::cos(Phi)); // 0 < Phi < 2PI
385 
386  if(std::string::npos != stationName.rfind('L')){//For Large , SP
387  DeltaPhi= 999; temp_phi=9999;
388  for(int inum=0;inum < 8;inum++){
389  temp_phi = std::abs((inum * M_PI/4.0 )- calibPhi);
390  if(temp_phi < DeltaPhi) DeltaPhi = temp_phi;
391  }
392  }else if(std::string::npos != stationName.rfind('S') ||
393  std::string::npos != stationName.rfind('F') ||
394  std::string::npos != stationName.rfind('G') ){
395  DeltaPhi= 999; temp_phi=9999;
396 
397  for(int inum=0;inum < 8;inum++){
398  temp_phi = std::abs(inum *(M_PI/4.0 )+(M_PI/8.0) - calibPhi);
399  if(temp_phi < DeltaPhi) DeltaPhi = temp_phi;
400  }//for end
401  }else return R;
402 
403  double calibR = R *std::cos(DeltaPhi);
404 
405  return calibR;
406 }//calbR()
407 
408 // --------------------------------------------------------------------------------
409 // --------------------------------------------------------------------------------
410 
411 void TrigL2MuonSA::RpcPatFinder::abcal(unsigned int result_pat,
412  size_t index[],
413  double aw[],
414  double bw[],
415  const TrigL2MuonSA::RpcLayerHits& rpcLayerHits) const{
416  const float ZERO_LIMIT = 1.e-5;
417 
418  const std::vector<std::vector<double> > * rpc_R;
419  const std::vector<std::vector<double> > * rpc_Z;
420  rpc_R = &rpcLayerHits.hits_in_layer_R;
421  rpc_Z = &rpcLayerHits.hits_in_layer_Z;
422  double R[8]={0,0,0,0,0,0,0,0};
423  double Z[8]={0,0,0,0,0,0,0,0};
424  unsigned int bit=1;
425 
426  int hot_min[3]={999,999,999};
427  int hot_max[3]={-999,-999,-999};
428 
429  int out_counter=0;
430 
431  for(int i=0; i<8; i++){
432  if(i != 0) bit = bit << 1;
433  if((result_pat & bit)==false) continue;
434  R[i] = rpc_R->at(i).at(index[i]);
435  Z[i] = rpc_Z->at(i).at(index[i]);
436 
437  if(i < hot_min[0]) hot_min[0] = i;
438  if(i < hot_min[1]) hot_min[1] = i;
439  if(1 < i && out_counter <1) hot_min[2] = i;
440 
441  if(i < 4){
442  hot_max[0] = i;
443  hot_max[1] = i;
444  }
445  if(hot_max[2] < i ) hot_max[2] = i;
446 
447  if(1 < i) out_counter++;
448  }//for i
449 
450  unsigned int inn_bit;
451  inn_bit=0x3;//00000011
452  if((result_pat & inn_bit)==inn_bit){
453  R[hot_min[0]] = (R[0]+R[1])/2.0;
454  Z[hot_min[0]] = (Z[0]+Z[1])/2.0;
455  }
456  inn_bit=0xC;//00001100
457  if((result_pat & inn_bit)==inn_bit){
458  R[hot_max[0]] = (R[2]+R[3])/2.0;
459  Z[hot_max[0]] = (Z[2]+Z[3])/2.0;
460  }
461 
462  unsigned int mid_bit;
463  mid_bit=0x3;//00000011
464  if((result_pat & mid_bit)==mid_bit){
465  R[hot_min[1]] = (R[0]+R[1])/2.0;
466  Z[hot_min[1]] = (Z[0]+Z[1])/2.0;
467  }
468  mid_bit=0xC;//00001100
469  if((result_pat & mid_bit)==mid_bit){
470  R[hot_max[1]] = (R[2]+R[3])/2.0;
471  Z[hot_max[1]] = (Z[2]+Z[3])/2.0;
472  }
473 
474  unsigned int out_bit;
475  out_bit=0xC;//00001100
476  if((result_pat & out_bit)==out_bit){
477  R[hot_min[2]] = (R[2]+R[3])/2.0;
478  Z[hot_min[2]] = (Z[2]+Z[3])/2.0;
479  }
480 
481  out_bit=0x30;//00110000
482  if((result_pat & out_bit)==out_bit){
483  R[hot_max[2]] = (R[4]+R[5])/2.0;
484  Z[hot_max[2]] = (Z[4]+Z[5])/2.0;
485  }
486 
487  out_bit=0xC0;//11000000
488  if((result_pat & out_bit)==out_bit){
489  R[hot_max[2]] = (R[6]+R[7])/2.0;
490  Z[hot_max[2]] = (Z[6]+Z[7])/2.0;
491  }
492 
493  inn_bit=0xF;//00001111
494  double theta_m,theta_t, theta_f;
495  if((result_pat & inn_bit)==inn_bit){
496  theta_m = std::atan2(R[hot_min[0]],Z[hot_min[0]]);
497  theta_t = std::atan2(R[hot_max[0]]-R[hot_min[0]],Z[hot_max[0]]-Z[hot_min[0]]);
498  theta_f = (theta_m+theta_t)/2.0;
499 
500  aw[0] = std::tan(theta_f);
501  bw[0] = R[hot_min[0]] - Z[hot_min[0]]*aw[0];
502  aw[0] = 1.0/aw[0];
503  }else{
504  if(hot_min[0]!=999){
505  aw[0] = Z[hot_min[0]] / R[hot_min[0]];
506  bw[0] = 0.0;
507  }else{
508  aw[0] = Z[hot_max[0]] / R[hot_max[0]];
509  bw[0] = 0.0;
510  }//else
511  }//else
512 
513  for(int i=1;i<3;i++){
514  if(hot_max[i]!=-999 && hot_min[i]!=999){
515  if(std::abs(Z[hot_max[i]] - Z[hot_min[i]]) > ZERO_LIMIT) {
516  aw[i] = (R[hot_max[i]]- R[hot_min[i]]) / (Z[hot_max[i]]-Z[hot_min[i]]);
517  bw[i] = R[hot_max[i]] - Z[hot_max[i]]*aw[i];
518  aw[i] = 1.0/aw[i];
519  }else if(i<2){
520  aw[i] = Z[hot_min[i]] / R[hot_min[i]];
521  bw[i] = 0.0;
522  } else{
523  aw[i] = Z[hot_max[i]] / R[hot_max[i]];
524  bw[i] = 0.0;
525  }
526  }else{
527  if(i <2){
528  if(hot_min[i]!=999){
529  aw[i] = Z[hot_min[i]] / R[hot_min[i]];
530  bw[i] = 0.0;
531  }else if(hot_max[i]!=-999){
532  aw[i] = Z[hot_max[i]] / R[hot_max[i]];
533  bw[i] = 0.0;
534  }
535  }else{
536  if(hot_max[i]!=-999){
537  aw[i] = Z[hot_max[i]] / R[hot_max[i]];
538  bw[i] = 0.0;
539  }else if(hot_min[i]!=999){
540  aw[i] = Z[hot_min[i]] / R[hot_min[i]];
541  bw[i] = 0.0;
542  }
543  }
544  }
545  }
546 }//abcal()
547 
548 // --------------------------------------------------------------------------------
549 // --------------------------------------------------------------------------------
550 
mergePhysValFiles.pattern
pattern
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:26
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
RpcPatFinder.h
TrigL2MuonSA::RpcPatFinder::findPatternPhi
bool findPatternPhi(double &phi_middle, double &phi_outer, unsigned int &pattern, const TrigL2MuonSA::RpcLayerHits &rpcLayerHits) const
Definition: RpcPatFinder.cxx:67
TrigL2MuonSA::RpcPatFinder::patfinder_forEta
int patfinder_forEta(bool iphi, unsigned int &result_pat, double result_aw[], double result_bw[], double result_dist[], const TrigL2MuonSA::RpcLayerHits &rpcLayerHits) const
Definition: RpcPatFinder.cxx:91
AthMsgStreamMacros.h
dumpTgcDigiDeadChambers.stationName
dictionary stationName
Definition: dumpTgcDigiDeadChambers.py:30
index
Definition: index.py:1
plotBeamSpotCompare.x2
x2
Definition: plotBeamSpotCompare.py:218
createCablingJSON.doubletR
int doubletR
Definition: createCablingJSON.py:10
M_PI
#define M_PI
Definition: ActiveFraction.h:11
TrigL2MuonSA::RpcPatFinder::addHit
void addHit(const std::string &stationName, int stationEta, bool measuresPhi, unsigned int gasGap, unsigned int doubletR, double gPosX, double gPosY, double gPosZ, TrigL2MuonSA::RpcLayerHits &rpcLayerHits) const
Definition: RpcPatFinder.cxx:28
Phi
@ Phi
Definition: RPCdef.h:8
TrigL2MuonSA::RpcPatFinder::abcal
void abcal(unsigned int result_pat, size_t index[], double aw[], double bw[], const TrigL2MuonSA::RpcLayerHits &rpcLayerHits) const
Definition: RpcPatFinder.cxx:411
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
x
#define x
TrigL2MuonSA::RpcLayerHits::hits_in_layer_Z
std::vector< std::vector< double > > hits_in_layer_Z
Definition: RpcPatFinder.h:23
TrigL2MuonSA::RpcPatFinder::RpcPatFinder
RpcPatFinder(const std::string &type, const std::string &name, const IInterface *parent)
Definition: RpcPatFinder.cxx:18
skel.l2
l2
Definition: skel.GENtoEVGEN.py:426
TrigL2MuonSA::RpcPatFinder::patfinder
int patfinder(bool iphi, unsigned int &result_pat, double &result_x, double &result_x1, double &result_dMO, const TrigL2MuonSA::RpcLayerHits &rpcLayerHits) const
Definition: RpcPatFinder.cxx:200
lumiFormat.i
int i
Definition: lumiFormat.py:92
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TrigL2MuonSA::RpcLayerHits::hits_in_layer_eta
std::vector< std::list< double > > hits_in_layer_eta
Definition: RpcPatFinder.h:21
TrigL2MuonSA::RpcPatFinder::findPatternEta
bool findPatternEta(double aw[], double bw[], unsigned int &pattern, const TrigL2MuonSA::RpcLayerHits &rpcLayerHits) const
Definition: RpcPatFinder.cxx:79
test_pyathena.parent
parent
Definition: test_pyathena.py:15
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
DeMoUpdate.tmp
string tmp
Definition: DeMoUpdate.py:1167
ZERO_LIMIT
const float ZERO_LIMIT
Definition: VP1TriggerHandleL2.cxx:37
TrigL2MuonSA::RpcPatFinder::calibR
double calibR(const std::string &stationName, double R, double Phi) const
Definition: RpcPatFinder.cxx:382
dso-stats.pat
pat
Definition: dso-stats.py:39
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
TrigL2MuonSA::RpcLayerHits
Definition: RpcPatFinder.h:20
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
TrigL2MuonSA::RpcPatFinder::deltaOK
bool deltaOK(int l1, int l2, double x1, double x2, int isphi, double &delta) const
Definition: RpcPatFinder.cxx:309
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TrigL2MuonSA::RpcLayerHits::hits_in_layer_phi
std::vector< std::list< double > > hits_in_layer_phi
Definition: RpcPatFinder.h:22
skel.l1
l1
Definition: skel.GENtoEVGEN.py:425
AthAlgTool
Definition: AthAlgTool.h:26
TrigL2MuonSA::RpcLayerHits::hits_in_layer_R
std::vector< std::vector< double > > hits_in_layer_R
Definition: RpcPatFinder.h:24
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54