CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
L1ITMuonBarrelPrimitiveProducer.cc
Go to the documentation of this file.
1 //Authors:
2 //Luigi Guiducci - Giuseppe Codispoti
3 // framework include files
11 
12 // L1IT include files
14 
17 
20 
23 
26 
29 
30 // user include files
32 
33 using namespace L1TwinMux;
34 using namespace L1TMuon;
35 
37 
38 public:
39  inline L1ITMuonBarrelPrimitiveProducer(std::auto_ptr<MBLTContainer> _mbltContainer);
41  inline virtual std::auto_ptr<L1MuDTChambPhContainer> produce( const edm::EventSetup&);
42 
43 private:
44  edm::InputTag _mbltCollectionInput = edm::InputTag("MBLTProducer");
46  //std::auto_ptr<MBLTContainer> mbltContainer;
47 std::auto_ptr<MBLTContainer> mbltContainer;
48 };
49 
50 inline std::ostream & operator<< (std::ostream & out, const TriggerPrimitiveList & rpc )
51 {
52  std::vector<TriggerPrimitiveRef>::const_iterator it = rpc.begin();
53  std::vector<TriggerPrimitiveRef>::const_iterator end = rpc.end();
54  for ( ; it != end ; ++it ) out << (*it)->getCMSGlobalPhi() << '\t';
55  out << std::endl;
56  return out;
57 }
58 
60 {
61 }
62 
63 inline L1ITMuonBarrelPrimitiveProducer::L1ITMuonBarrelPrimitiveProducer( std::auto_ptr<MBLTContainer> _mbltContainer )
64 : mbltContainer(_mbltContainer)
65 {
66  //produces<L1MuDTChambPhContainer>("L1ITMuonBarrelPrimitiveProducer");
67 
68  //consumes<MBLTContainer>(iConfig.getParameter<edm::InputTag>("MBLTCollection"));
69  //mbltContainer = _mbltContainer;
70 }
71 
72 
73 inline std::auto_ptr<L1MuDTChambPhContainer> L1ITMuonBarrelPrimitiveProducer::produce(const edm::EventSetup& iSetup )
74 {
75 
76  const PrimitiveCombiner::resolutions _resol(0.1, 2., 0.005, 0.04);
77  const int _qualityRemappingMode = 2;
78  const int _useRpcBxForDtBelowQuality = 8;
79  const bool _is7QualityCodes = true;
80 
81 
82  iSetup.get<MuonGeometryRecord>().get(_muonGeom);
83 
84  std::auto_ptr<L1MuDTChambPhContainer> out(new L1MuDTChambPhContainer);
85  std::vector<L1MuDTChambPhDigi> phiChambVector;
86 
87  // edm::Handle<MBLTContainer> mbltContainer;
88  //iEvent.getByLabel( _mbltCollectionInput, mbltContainer );
89 
90  MBLTContainer::const_iterator st = mbltContainer->begin();
91  MBLTContainer::const_iterator stend = mbltContainer->end();
92 
93  L1MuDTChambPhContainer phiContainer;
94  std::vector<L1MuDTChambPhDigi> phiVector;
95 
96  for ( ; st != stend; ++st ) {
97 
98  const MBLTCollection & mbltStation = st->second;
99 
101  int station = mbltStation.station();
102  int wheel = mbltStation.wheel();
103  int sector = mbltStation.sector();
105 
107  size_t dtListSize = mbltStation.getDtSegments().size();
108  std::vector<size_t> uncorrelated;
109  std::vector<size_t> correlated;
110  for ( size_t iDt = 0; iDt < dtListSize; ++iDt ) {
111  const TriggerPrimitiveRef & dt = mbltStation.getDtSegments().at(iDt);
112  int dtquality = dt->getDTData().qualityCode;
113  //if ( dtquality == 2 || dtquality == 3 ) std::cout << "[o]" << dtquality << '\t' ; /// GC
114  // if ( dtquality > 3 ) std::cout << "[o]" << dtquality << '\t' ; /// GC
117  // int qualityCode = -2;
118  // switch ( dtquality ) {
119  // case -1 : continue;/// -1 are theta
120  // case 0 : /* qualityCode = -2;*/ break;
121  // case 1 : /* qualityCode = -2;*/ break;
122  // case 2 : uncorrelated.push_back( iDt ); continue;
123  // case 3 : uncorrelated.push_back( iDt ); continue;
124  // case 4 : correlated.push_back( iDt ); continue; //qualityCode = 5; break;
125  // case 5 : correlated.push_back( iDt ); continue; //qualityCode = 5; break;
126  // case 6 : correlated.push_back( iDt ); continue; //qualityCode = 5; break;
127  // default : /* qualityCode = dtquality; */ break;
128  // }
129 
130  switch ( dtquality ) {
131  case -1 : continue;
132  case 0 : /* qualityCode = -2;*/ break;
133  case 1 : /* qualityCode = -2;*/ break;
134  case 2 : uncorrelated.push_back( iDt ); continue; // HI
135  case 3 : uncorrelated.push_back( iDt ); continue; // HO
136  case 4 : correlated.push_back( iDt ); continue; // LL
137  case 5 : correlated.push_back( iDt ); continue; // HL
138  case 6 : correlated.push_back( iDt ); continue; // HH
139  default : /* qualityCode = dtquality; */ break;
140  }
141 
142  //L1MuDTChambPhDigi chamb( dt->getBX(), wheel, sector-1, station, dt->getDTData().radialAngle,
143  // dt->getDTData().bendingAngle, qualityCode,
144  // dt->getDTData().Ts2TagCode, dt->getDTData().BxCntCode );
145  //phiChambVector.push_back( chamb );
146  }
147 
148  // START OF BX ANALYSIS FOR CORRELATED TRIGGER
149  size_t cSize = correlated.size();
150  for ( size_t idxDt = 0; idxDt < cSize; ++idxDt ) {
151  int bx=-999;
152  int iDt = correlated.at(idxDt);
153  if ( iDt < 0 ) continue;
154  const TriggerPrimitive & dt = *mbltStation.getDtSegments().at(iDt);
155  TriggerPrimitiveList rpcInMatch = mbltStation.getRpcInAssociatedStubs( iDt );
156  TriggerPrimitiveList rpcOutMatch = mbltStation.getRpcOutAssociatedStubs( iDt );
157  size_t rpcInMatchSize = rpcInMatch.size();
158  size_t rpcOutMatchSize = rpcOutMatch.size();
159  if ( rpcInMatchSize && rpcOutMatchSize ) {
160  const TriggerPrimitive & rpcIn = *rpcInMatch.front();
161  const TriggerPrimitive & rpcOut = *rpcOutMatch.front();
163  // LG try also to reassign BX to single H using RPC BX, e.g. do not ask for DT and RPC to have the same BX
164  if ( ( dt.getBX() == rpcIn.getBX() && dt.getBX() == rpcOut.getBX() )
165  || (_qualityRemappingMode>1 && rpcIn.getBX()==rpcOut.getBX() && abs(dt.getBX()-rpcIn.getBX())<=1) ) {
166  bx = rpcIn.getBX();
167  }
168  } else if (rpcInMatchSize){
169  const TriggerPrimitive & rpcIn = *rpcInMatch.front();
170  if ( dt.getBX() == rpcIn.getBX() || (_qualityRemappingMode>1 && abs(dt.getBX()-rpcIn.getBX())<=1)) {
171  bx = rpcIn.getBX();
172  }
173  }
174  else if (rpcOutMatchSize){
175  const TriggerPrimitive & rpcOut = *rpcOutMatch.front();
176  if ( dt.getBX() == rpcOut.getBX() || (_qualityRemappingMode>1 && abs(dt.getBX()-rpcOut.getBX())<=1)) {
177  bx = rpcOut.getBX();
178  }
179  }
180  // add primitive here
181  int newBx=dt.getBX();
182  if (bx>-999 && dt.getDTData().qualityCode<_useRpcBxForDtBelowQuality){
183  newBx=bx;
184  }
185 
186  int qualityCode = 6;
187  if ( ! _is7QualityCodes ) {
188  qualityCode = 13;
189  switch ( dt.getDTData().qualityCode ) {
190  case 4 : qualityCode = 14; break; // LL // TODO: LL+rpc=13
191  case 5 : qualityCode = 15; break; // HL
192  case 6 : qualityCode = 15; break; // HH
193  default : break;
194  }
195  }
196 
197  //std::cout << "[n]" << dt.getDTData().qualityCode << std::endl; /// GC
198  L1MuDTChambPhDigi chamb( newBx, wheel, sector-1, station, dt.getDTData().radialAngle,
199  dt.getDTData().bendingAngle, qualityCode,
201  phiChambVector.push_back( chamb );
202  }
203  // END OF BX ANALYSIS FOR CORRELATED TRIGGER
204 
205  // BEGIN OF BX ANALYSIS FOR UNCORRELATED TRIGGER
206  size_t uncSize = uncorrelated.size();
207  for ( size_t idxDt = 0; idxDt < uncSize; ++idxDt ) {
208 
209  int iDt = uncorrelated.at(idxDt);
210  if ( iDt < 0 ) continue;
211  const TriggerPrimitive & dt = *mbltStation.getDtSegments().at(iDt);
212 
214  int closest = -1;
215  int closestIdx = -1;
216  double minDeltaPhiDt = 9999999999;
217  for ( size_t jdxDt = idxDt+1; jdxDt < uncSize; ++jdxDt ) {
218 
219  int jDt = uncorrelated.at(jdxDt);
220  if ( jDt < 0 ) continue;
221 
222  const TriggerPrimitiveRef & dtM = mbltStation.getDtSegments().at(jDt);
223  if ( dt.getBX() == dtM->getBX() || dt.getDTData().qualityCode == dtM->getDTData().qualityCode )
224  continue;
225 
226  double deltaPhiDt = fabs( reco::deltaPhi( dt.getCMSGlobalPhi(), dtM->getCMSGlobalPhi() ) );
227  if ( deltaPhiDt < minDeltaPhiDt ) {
228  closest = jDt;
229  closestIdx = jdxDt;
230  minDeltaPhiDt=deltaPhiDt;
231  }
232  }
233 
236  if ( closest > 0 && minDeltaPhiDt < 0.05 ) {
237  //if ( closest > 0 ) {
238  match = mbltStation.haveCommonRpc( iDt, closest );
239  }
240 
242  // int qualityCode = dt.getDTData().qualityCode;
243  int bx = -2;
244  int radialAngle = 0;
245  int bendingAngle = 0;
248  combiner.addDt( dt );
249 
251  if ( match != MBLTCollection::NOMATCH ) {
252  uncorrelated[closestIdx] = -1;
253 
255  combiner.addDt( *mbltStation.getDtSegments().at(closest) );
256 
259  TriggerPrimitiveList rpcInMatch = mbltStation.getRpcInAssociatedStubs( iDt );
260  TriggerPrimitiveList rpcOutMatch = mbltStation.getRpcOutAssociatedStubs( iDt );
261 
263  if ( match == MBLTCollection::INMATCH ) {
264 
265  const TriggerPrimitive & rpcIn = *rpcInMatch.front();
266  combiner.addRpcIn( rpcIn );
267  bx = rpcIn.getBX();
268 
270  } else if ( match == MBLTCollection::OUTMATCH ) {
271 
272  const TriggerPrimitive & rpcOut = *rpcOutMatch.front();
273  combiner.addRpcOut( rpcOut );
274  bx = rpcOut.getBX();
275 
277  } else if ( match == MBLTCollection::FULLMATCH ) {
278 
279  const TriggerPrimitive & rpcIn = *rpcInMatch.front();
280  const TriggerPrimitive & rpcOut = *rpcOutMatch.front();
281  combiner.addRpcIn( rpcIn );
282  combiner.addRpcOut( rpcOut );
283  bx = rpcIn.getBX();
284  }
285 
286 
287  } else {
288 
289  TriggerPrimitiveList rpcInMatch = mbltStation.getRpcInAssociatedStubs( iDt );
290  TriggerPrimitiveList rpcOutMatch = mbltStation.getRpcOutAssociatedStubs( iDt );
291  size_t rpcInMatchSize = rpcInMatch.size();
292  size_t rpcOutMatchSize = rpcOutMatch.size();
293 
295  if ( rpcInMatchSize && rpcOutMatchSize ) {
296  const TriggerPrimitive & rpcIn = *rpcInMatch.front();
297  const TriggerPrimitive & rpcOut = *rpcOutMatch.front();
299  // LG try also to reassign BX to single H using RPC BX, e.g. do not ask for DT and RPC to have the same BX
300  if (( dt.getBX() == rpcIn.getBX() && dt.getBX() == rpcOut.getBX() )
301  || (_qualityRemappingMode>1 && rpcIn.getBX()==rpcOut.getBX() && abs(dt.getBX()-rpcIn.getBX())<=1)) {
302  bx = rpcIn.getBX();
303  combiner.addRpcIn( rpcIn );
304  combiner.addRpcOut( rpcOut );
305  } else if ( dt.getBX() == rpcIn.getBX() ) {
306  bx = rpcIn.getBX();
307  combiner.addRpcIn( rpcIn );
308  } else if ( dt.getBX() == rpcOut.getBX() ) {
309  bx = rpcOut.getBX();
310  combiner.addRpcOut( rpcOut );
311  }
312 
314  } else if ( rpcInMatchSize ) {
315  const TriggerPrimitive & rpcIn = *rpcInMatch.front();
316  if ( dt.getBX() == rpcIn.getBX() || (_qualityRemappingMode>1 && abs(dt.getBX()-rpcIn.getBX())<=1)) {
317  bx = rpcIn.getBX();
318  combiner.addRpcIn( rpcIn );
319  }
320 
322  } else if ( rpcOutMatchSize ) {
323  const TriggerPrimitive & rpcOut = *rpcOutMatch.front();
324  if ( dt.getBX() == rpcOut.getBX()|| (_qualityRemappingMode>1 && abs(dt.getBX()-rpcOut.getBX())<=1)) {
325  bx = rpcOut.getBX();
326  combiner.addRpcOut( rpcOut );
327  }
328 
329  }
330  }
331 
332  // match found, PrimitiveCombiner has the needed variables already calculated
333  if ( combiner.isValid() ) {
334  //std::cout<<"=== I am making a combination ==="<<std::endl;
335  combiner.combine();
336  radialAngle = combiner.radialAngle();
337  bendingAngle = (combiner.bendingAngle() < -511 || combiner.bendingAngle() > 511) ? dt.getDTData().bendingAngle : combiner.bendingAngle( );
338  } else {
339  // no match found, keep the primitive as it is
340  bx = dt.getBX();
341  radialAngle = dt.getDTData().radialAngle;
342  bendingAngle = dt.getDTData().bendingAngle;
343  //if (_qualityRemappingMode==0)
344  // qualityCode = ( qualityCode == 2 ) ? 0 : 1;
345  }
346 
347  int qualityCode = ( _is7QualityCodes ?
348  combiner.getUncorrelatedQuality7() :
349  combiner.getUncorrelatedQuality16() );
350 
351  // std::cout << "[n]" << qualityCode << std::endl; /// GC
352  L1MuDTChambPhDigi chamb( bx, wheel, sector-1, station, radialAngle,
353  bendingAngle, qualityCode,
355  phiChambVector.push_back( chamb );
356  //if (abs(bendingAngle)>511||1==1){
357  // std::cout<<"Got bending angle: "<<bendingAngle<<std::endl;
358  //std::cout<<"Original DT primitive had bending angle: "<<dt.getDTData().bendingAngle<<std::endl;
359  //std::cout<<"Original radial angle: "<<radialAngle<<std::endl;
360  //std::cout<<"Quality: "<<qualityCode<<std::endl;
361  //std::cout<<"Station: "<<station<<std::endl;
362  //}
363 
364  }
365 // ////////////////////////////////////////////////////
366 // /// loop over unassociated inner and outer RPC hits
367 // const TriggerPrimitiveList & rpcInUnass = mbltStation.getRpcInUnassociatedStubs();
368 // const TriggerPrimitiveList & rpcOutUnass = mbltStation.getRpcOutUnassociatedStubs();
369 
370 // size_t rpcInUSize = rpcInUnass.size();
371 // size_t rpcOutUsize = rpcOutUnass.size();
372 
373 // for ( size_t in = 0; in < rpcInUSize; ++in ) {
374 // for ( size_t out = 0; out < rpcOutUSize; ++out ) {
375 
376  const std::vector< std::pair< TriggerPrimitiveList, TriggerPrimitiveList > >
377  rpcPairList = mbltStation.getUnassociatedRpcClusters( 0.05 );
378  auto rpcPair = rpcPairList.cbegin();
379  auto rpcPairEnd = rpcPairList.cend();
380  for ( ; rpcPair != rpcPairEnd; ++ rpcPair ) {
381  const TriggerPrimitiveList & inRpc = rpcPair->first;
382  const TriggerPrimitiveList & outRpc = rpcPair->second;
383 
384  if ( inRpc.empty() && outRpc.empty() ) continue;
385 
387  size_t inSize = inRpc.size();
388  size_t outSize = outRpc.size();
389  int station = -1;
390  int sector = -1;
391  int wheel = -5;
392  // double qualityCode = 0;
393 
394  if ( inSize ) {
395  //std::cout<<"Producer working on IN&&!OUT"<<std::endl;
396  size_t inPos = 0;
397  // double avPhiIn = 0;
398  double avPhiSin = 0;
399  double avPhiCos = 0;
400  for ( size_t i = 0; i < inSize; ++i ) {
401  double locPhi = inRpc.at(i)->getCMSGlobalPhi();
402  // avPhiIn += ( locPhi > 0 ? locPhi : 2*M_PI + locPhi );
403  avPhiSin += sin( locPhi );
404  avPhiCos += cos( locPhi );
405  }
406  // avPhiIn /= inSize;
407  avPhiSin /= inSize;
408  avPhiCos /= inSize;
409  double avPhiIn = atan2( avPhiSin, avPhiCos );
410 
411  double minDist = fabs( inRpc.at(0)->getCMSGlobalPhi() - avPhiIn );
412  for ( size_t i = 1; i < inSize; ++i ) {
413  double dist = fabs( inRpc.at(i)->getCMSGlobalPhi() - avPhiIn );
414  if ( dist < minDist ) {
415  inPos = i;
416  minDist = dist;
417  }
418  }
419 
420  // const TriggerPrimitive & rpc = (*inRpc.at(inPos));
421  TriggerPrimitive rpc = (*inRpc.at(inPos));
422  rpc.setCMSGlobalPhi( avPhiIn );
423  station = rpc.detId<RPCDetId>().station();
424  sector = rpc.detId<RPCDetId>().sector();
425  wheel = rpc.detId<RPCDetId>().ring();
426  combiner.addRpcIn( rpc );
427 
428 
429  }
430  if ( outSize ) {
431  //std::cout<<"Producer working on OUT&&!IN"<<std::endl;
432  size_t outPos = 0;
433  //double avPhiOut = 0;
434  double avPhiSin = 0;
435  double avPhiCos = 0;
436  for ( size_t i = 0; i < outSize; ++i ) {
437  double locPhi = outRpc.at(i)->getCMSGlobalPhi();
438  // avPhiOut += ( locPhi > 0 ? locPhi : 2*M_PI + locPhi );
439  avPhiSin += sin( locPhi );
440  avPhiCos += cos( locPhi );
441  }
442 
443  //avPhiOut /= outSize;
444  avPhiSin /= outSize;
445  avPhiCos /= outSize;
446  double avPhiOut = atan2( avPhiSin, avPhiCos );
447  double minDist = fabs( outRpc.at(0)->getCMSGlobalPhi() - avPhiOut );
448  for ( size_t i = 1; i < outSize; ++i ) {
449  double dist = fabs( outRpc.at(i)->getCMSGlobalPhi() - avPhiOut );
450  if ( dist < minDist ) {
451  outPos = i;
452  minDist = dist;
453  }
454  }
455  // const TriggerPrimitive & rpc = (*outRpc.at(outPos));
456  TriggerPrimitive rpc = (*outRpc.at(outPos));
457  rpc.setCMSGlobalPhi( avPhiOut );
458  station = rpc.detId<RPCDetId>().station();
459  sector = rpc.detId<RPCDetId>().sector();
460  wheel = rpc.detId<RPCDetId>().ring();
461  combiner.addRpcOut( rpc );
462  }
463  //else // {
464 // // std::cout<<"Producer working on IN&&OUT"<<std::endl;
465 // size_t inPos = 0;
466 // size_t outPos = 0;
467 // double minDist = 9999;
468 
469 // for ( size_t i = 0; i < inSize; ++i ) {
470 // for ( size_t j = 0; j < outSize; ++j ) {
471 
472 // double dist = fabs( inRpc.at(0)->getCMSGlobalPhi()
473 // - outRpc.at(0)->getCMSGlobalPhi() );
474 // if ( dist < minDist ) {
475 // inPos = i;
476 // outPos = j;
477 // minDist = dist;
478 // }
479 // }
480 // }
481 // const TriggerPrimitive & rpc_in = (*inRpc.at(inPos));
482 
483 // const TriggerPrimitive & rpc_out = (*outRpc.at(outPos));
484 // station = rpc_in.detId<RPCDetId>().station();
485 // sector = rpc_in.detId<RPCDetId>().sector();
486 // wheel = rpc_in.detId<RPCDetId>().ring();
487 // combiner.addRpcIn( rpc_in );
488 // combiner.addRpcOut( rpc_out );
489 // qualityCode = 1;
490 // }
491 
492  // if (inSize && outSize) qualityCode=1;
493  combiner.combine();
494  double radialAngle = combiner.radialAngle();
495  double bendingAngle = combiner.bendingAngle();
496  double bx = combiner.bx();
497  double Ts2TagCode = 0;
498  double BxCntCode = 0;
499 
500 
501  int qualityCode = ( _is7QualityCodes ?
502  combiner.getUncorrelatedQuality7() :
503  combiner.getUncorrelatedQuality16() );
504  if ( qualityCode >= 0 ) {
505  // std::cout << "[r]" << qualityCode << std::endl ; /// GC
506  L1MuDTChambPhDigi chamb( bx, wheel, sector-1, station, radialAngle,
507  bendingAngle, qualityCode,
508  Ts2TagCode, BxCntCode );
509  phiChambVector.push_back( chamb );
510  }
511 
512  //std::cout << "IN: \n" << inRpc;
513  //std::cout << "OUT: \n" << outRpc;
514  //std::cout << "\n";
515 
516  }
517 
518  }
519 
520 
521 
522 
523  out->setContainer( phiChambVector );
525  //iEvent.put(out);
526  return out;
527 
528 }
529 
530 //#include "FWCore/Framework/interface/MakerMacros.h"
531 //DEFINE_FWK_MODULE(L1ITMuonBarrelPrimitiveProducer);
532 
float dt
Definition: AMPTWrapper.h:126
int i
Definition: DBlmapReader.cc:9
int wheel() const
returns wheel
int getUncorrelatedQuality7() const
FIXME END.
const DTData getDTData() const
void addRpcIn(const TriggerPrimitive &prim)
a struct useful for resulution info sharing
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
virtual std::auto_ptr< L1MuDTChambPhContainer > produce(const edm::EventSetup &)
bool isValid() const
valid if we have at least: 1 rpc; 1 dt + 1 any
bxMatch haveCommonRpc(size_t dt1, size_t dt2) const
std::vector< std::pair< TriggerPrimitiveList, TriggerPrimitiveList > > getUnassociatedRpcClusters(double minRpcPhi) const
RPC unassociated clusters.
std::auto_ptr< MBLTContainer > mbltContainer
std::ostream & operator<<(std::ostream &out, const ALILine &li)
Definition: ALILine.cc:187
void combine()
do combine the primitives
const double getCMSGlobalPhi() const
const double NOMATCH
TriggerPrimitiveList getRpcInAssociatedStubs(size_t dtIndex) const
rpc inner layer hits associated to a given dt station
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define end
Definition: vmac.h:37
int sector() const
returns sector
double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:22
void addRpcOut(const TriggerPrimitive &prim)
const T & get() const
Definition: EventSetup.h:56
std::vector< TriggerPrimitiveRef > TriggerPrimitiveList
int bx() const
output result variables
int station() const
returns station
void addDt(const TriggerPrimitive &prim)
feed the combiner with the available primitives
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
void setCMSGlobalPhi(const double phi)
TriggerPrimitiveList getRpcOutAssociatedStubs(size_t dtIndex) const
rpc outer layer hits associated to a given dt station
L1ITMuonBarrelPrimitiveProducer(std::auto_ptr< MBLTContainer > _mbltContainer)
const TriggerPrimitiveList & getDtSegments() const
return a reference to the DT only segments