CMS 3D CMS Logo

MuonSeedOrcaPatternRecognition Class Reference

#include <RecoMuon/MuonSeedGenerator/src/MuonSeedOrcaPatternRecognition.h>

Inheritance diagram for MuonSeedOrcaPatternRecognition:

MuonSeedVPatternRecognition

List of all members.

Public Member Functions

 MuonSeedOrcaPatternRecognition (const edm::ParameterSet &pset)
void produce (edm::Event &event, const edm::EventSetup &eSetup, std::vector< MuonRecHitContainer > &result)

Private Member Functions

bool check (const MuonRecHitContainer &segments)
void complete (MuonRecHitContainer &seedSegments, const MuonRecHitContainer &recHits, bool *used=0) const
void endcapPatterns (const MuonRecHitContainer &me11, const MuonRecHitContainer &me12, const MuonRecHitContainer &me2, const MuonRecHitContainer &me3, const MuonRecHitContainer &me4, const MuonRecHitContainer &mb1, const MuonRecHitContainer &mb2, const MuonRecHitContainer &mb3, bool *MB1, bool *MB2, bool *MB3, std::vector< MuonRecHitContainer > &result)
void rememberCrackSegments (const MuonRecHitContainer &segments, MuonRecHitContainer &crackSegments) const
boolzero (unsigned listSize)

Private Attributes

std::vector< double > theCrackEtas
double theCrackWindow


Detailed Description

Definition at line 6 of file MuonSeedOrcaPatternRecognition.h.


Constructor & Destructor Documentation

MuonSeedOrcaPatternRecognition::MuonSeedOrcaPatternRecognition ( const edm::ParameterSet pset  )  [explicit]

Definition at line 47 of file MuonSeedOrcaPatternRecognition.cc.

00048 : MuonSeedVPatternRecognition(pset),
00049   theCrackEtas(pset.getParameter<std::vector<double> >("crackEtas")),
00050   theCrackWindow(pset.getParameter<double>("crackWindow"))
00051 {
00052 }


Member Function Documentation

bool MuonSeedOrcaPatternRecognition::check ( const MuonRecHitContainer segments  )  [private]

Definition at line 616 of file MuonSeedOrcaPatternRecognition.cc.

Referenced by endcapPatterns(), and produce().

00617 {
00618   return (segments.size() > 1);
00619 }

void MuonSeedOrcaPatternRecognition::complete ( MuonRecHitContainer seedSegments,
const MuonRecHitContainer recHits,
bool used = 0 
) const [private]

Definition at line 453 of file MuonSeedOrcaPatternRecognition.cc.

References dist(), PV3DBase< T, PVType, FrameType >::eta(), first, iter, m, PV3DBase< T, PVType, FrameType >::phi(), funct::sqrt(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by endcapPatterns(), and produce().

00454                                                                                        {
00455 
00456   MuonRecHitContainer good_rhit;
00457 
00458   //+v get all rhits compatible with the seed on dEta/dPhi Glob.
00459 
00460   ConstMuonRecHitPointer first = seedSegments[0]; // first rechit of seed
00461 
00462   GlobalPoint ptg2 = first->globalPosition(); // its global pos +v
00463 
00464   int nr=0; // count rechits we have checked against seed
00465 
00466   for (MuonRecHitContainer::const_iterator iter=recHits.begin(); iter!=recHits.end(); iter++){
00467 
00468     GlobalPoint ptg1 = (*iter)->globalPosition();  //+v global pos of rechit
00469     float deta = fabs (ptg1.eta()-ptg2.eta());
00470     // Geom::Phi should keep it in the range [-pi, pi]
00471     float dphi = fabs (ptg1.phi()-ptg2.phi());
00472     float eta2 = fabs( ptg2.eta() );
00473 
00474     // Cox: Just too far away?
00475     if ( deta > .2 || dphi > .1 ) {
00476       nr++;
00477       continue;
00478     }   // +vvp!!!
00479 
00480     if( eta2 < 1.0 ) {     //  barrel only
00481 
00482       LocalPoint pt1 = first->det()->toLocal(ptg1); // local pos of rechit in seed's det
00483 
00484       LocalVector dir1 = first->localDirection();
00485 
00486       LocalPoint pt2 = first->localPosition();
00487 
00488       float m = dir1.z()/dir1.x();   // seed's slope in local xz
00489       float yf = pt1.z();            // local z of rechit
00490       float yi = pt2.z();            // local z of seed
00491       float xi = pt2.x();            // local x of seed
00492       float xf = (yf-yi)/m + xi;     // x of linear extrap alone seed direction to z of rechit
00493       float dist = fabs ( xf - pt1.x() ); // how close is actual to predicted local x ?
00494 
00495       float d_cut = sqrt((yf-yi)*(yf-yi)+(pt1.x()-pt2.x())*(pt1.x()-pt2.x()))/10.;
00496 
00497 
00498       //@@ Tim asks: what is the motivation for this cut?
00499       //@@ It requires (xpred-xrechit)< 0.1 * distance between rechit and seed in xz plane
00500       if ( dist < d_cut ) {
00501         good_rhit.push_back(*iter);
00502         if (used) used[nr]=true;
00503       }
00504 
00505     }  // eta  < 1.0
00506 
00507     else {    //  endcap & overlap.
00508       // allow a looser dphi cut where bend is greatest, so we get those little 5-GeV muons
00509       // watch out for ghosts from ME1/A, below 2.0.
00510       float dphicut = (eta2 > 1.6 && eta2 < 2.0) ? 0.1 : 0.07;
00511       // segments at the edge of the barrel may not have a good eta measurement
00512       float detacut = (first->isDT() || (*iter)->isDT()) ? 0.2 : 0.1;
00513 
00514       if ( deta < detacut && dphi < dphicut ) {
00515         good_rhit.push_back(*iter);
00516         if (used) used[nr]=true;
00517       }
00518 
00519     }  // eta > 1.0
00520 
00521 
00522     nr++;
00523 
00524   }  // recHits iter
00525 
00526   // select the best rhit among the compatible ones (based on Dphi Glob & Dir)
00527 
00528   MuonRecHitPointer best=0;
00529 
00530   float best_dphiG = M_PI;
00531   float best_dphiD = M_PI;
00532 
00533   if( fabs ( ptg2.eta() ) > 1.0 ) {    //  endcap & overlap.
00534       
00535     // select the best rhit among the compatible ones (based on Dphi Glob & Dir)
00536       
00537     GlobalVector dir2 =  first->globalDirection();
00538    
00539     GlobalPoint  pos2 =  first->globalPosition();  // +v
00540       
00541     for (MuonRecHitContainer::iterator iter=good_rhit.begin(); iter!=good_rhit.end(); iter++){
00542 
00543       GlobalPoint pos1 = (*iter)->globalPosition();  // +v
00544  
00545       float dphi = pos1.phi()-pos2.phi();       //+v
00546 
00547       if (dphi < 0.) dphi = -dphi;             //+v
00548       if (dphi > M_PI) dphi = 2.*M_PI - dphi;  //+v
00549 
00550       if (  dphi < best_dphiG*1.5 ) {  
00551 
00552 
00553         if (  dphi < best_dphiG*.67  && best_dphiG > .005 )  best_dphiD = M_PI;  // thresh. of strip order
00554 
00555         GlobalVector dir1 = (*iter)->globalDirection();
00556         
00557         float  dphidir = fabs ( dir1.phi()-dir2.phi() );
00558 
00559         if (dphidir > M_PI) dphidir = 2.*M_PI - dphidir;
00560         if (dphidir > M_PI*.5) dphidir = M_PI - dphidir;  // +v  [0,pi/2]
00561         if (  dphidir < best_dphiD ) {
00562 
00563           best_dphiG = dphi;
00564           if ( dphi < .002 )  best_dphiG =  .002;                          // thresh. of half-strip order
00565           best_dphiD = dphidir;
00566           best = (*iter);
00567 
00568         }
00569 
00570       }
00571 
00572 
00573     }   //  rhit iter
00574 
00575   }  // eta > 1.0
00576 
00577   if( fabs ( ptg2.eta() ) < 1.0 ) {     //  barrel only
00578 
00579     // select the best rhit among the compatible ones (based on Dphi)
00580 
00581     float best_dphi = M_PI;
00582 
00583     for (MuonRecHitContainer::iterator iter=good_rhit.begin(); iter!=good_rhit.end(); iter++){
00584       GlobalVector dir1 = (*iter)->globalDirection();
00585 
00586       //@@ Tim: Why do this again? 'first' hasn't changed, has it?
00587       //@@ I comment it out.
00588       //    RecHit first = seed.rhit();
00589       
00590       GlobalVector dir2 = first->globalDirection();
00591       
00592       float dphi = dir1.phi()-dir2.phi();
00593 
00594       if (dphi < 0.) dphi = -dphi;
00595       if (dphi > M_PI) dphi = 2.*M_PI - dphi;
00596 
00597       if (  dphi < best_dphi ) {
00598 
00599         best_dphi = dphi;
00600         best = (*iter);
00601       }
00602 
00603     }   //  rhit iter
00604 
00605   }  // eta < 1.0
00606 
00607 
00608   // add the best Rhit to the seed 
00609   if(best)
00610     if ( best->isValid() ) seedSegments.push_back(best);
00611 
00612 }  //   void complete.

void MuonSeedOrcaPatternRecognition::endcapPatterns ( const MuonRecHitContainer me11,
const MuonRecHitContainer me12,
const MuonRecHitContainer me2,
const MuonRecHitContainer me3,
const MuonRecHitContainer me4,
const MuonRecHitContainer mb1,
const MuonRecHitContainer mb2,
const MuonRecHitContainer mb3,
bool MB1,
bool MB2,
bool MB3,
std::vector< MuonRecHitContainer > &  result 
) [private]

Definition at line 276 of file MuonSeedOrcaPatternRecognition.cc.

References check(), complete(), counter(), iter, rememberCrackSegments(), and zero().

Referenced by produce().

00283 {
00284   std::vector<MuonRecHitContainer> patterns;
00285   MuonRecHitContainer crackSegments;
00286   rememberCrackSegments(me11, crackSegments);
00287   rememberCrackSegments(me12, crackSegments);
00288   rememberCrackSegments(me2,  crackSegments);
00289   rememberCrackSegments(me3,  crackSegments);
00290   rememberCrackSegments(me4,  crackSegments);
00291 
00292 
00293   MuonRecHitContainer list24 = me4;
00294   MuonRecHitContainer list23 = me3;
00295 
00296   MuonRecHitContainer list12 = me2;
00297 
00298   MuonRecHitContainer list22 = me12;
00299   MuonRecHitContainer list21 = me11;
00300 
00301   MuonRecHitContainer list11 = list21;
00302   MuonRecHitContainer list5 = list22;
00303   MuonRecHitContainer list13 = list23;
00304   MuonRecHitContainer list4 = list24;
00305 
00306   if ( list21.size() == 0 )  {
00307     list11 = list22; list5 = list21;
00308   }
00309 
00310   if ( list24.size() < list23.size() && list24.size() > 0 )  {
00311     list13 = list24; list4 = list23;
00312   }
00313 
00314   if ( list23.size() == 0 )  {
00315     list13 = list24; list4 = list23;
00316   }
00317 
00318   MuonRecHitContainer list1 = list11;
00319   MuonRecHitContainer list2 = list12;
00320   MuonRecHitContainer list3 = list13;
00321 
00322 
00323   if ( list12.size() == 0 )  {
00324     list3 = list12;
00325     if ( list11.size() <= list13.size() && list11.size() > 0 ) {
00326       list1 = list11; list2 = list13;}
00327     else { list1 = list13; list2 = list11;}
00328   }
00329 
00330   if ( list13.size() == 0 )  {
00331     if ( list11.size() <= list12.size() && list11.size() > 0 ) {
00332       list1 = list11; list2 = list12;}
00333     else { list1 = list12; list2 = list11;}
00334   }
00335 
00336   if ( list12.size() != 0 &&  list13.size() != 0 )  {
00337     if ( list11.size()<=list12.size() && list11.size()<=list13.size() && list11.size()>0 ) {   // ME 1
00338       if ( list12.size() > list13.size() ) {
00339         list2 = list13; list3 = list12;}
00340     }
00341     else if ( list12.size() <= list13.size() ) {                                   //  start with ME 2
00342       list1 = list12;
00343       if ( list11.size() <= list13.size() && list11.size() > 0 ) {
00344         list2 = list11; list3 = list13;}
00345       else { list2 = list13; list3 = list11;}
00346     }
00347     else {                                                                         //  start with ME 3
00348       list1 = list13;
00349       if ( list11.size() <= list12.size() && list11.size() > 0 ) {
00350         list2 = list11; list3 = list12;}
00351       else { list2 = list12; list3 = list11;}
00352     }
00353   }
00354 
00355 
00356   bool* ME2 = zero(list2.size());
00357   bool* ME3 = zero(list3.size());
00358   bool* ME4 = zero(list4.size());
00359   bool* ME5 = zero(list5.size());
00360 
00361 
00362   // creates list of compatible track segments
00363 
00364   for (MuonRecHitContainer::iterator iter = list1.begin(); iter!=list1.end(); iter++ ){
00365     if ( (*iter)->recHits().size() < 4 && list3.size() > 0 ) continue; // 3p.tr-seg. are not so good for starting
00366     MuonRecHitContainer seedSegments;
00367     seedSegments.push_back(*iter);
00368     complete(seedSegments, list2, ME2);
00369     complete(seedSegments, list3, ME3);
00370     complete(seedSegments, list4, ME4);
00371     complete(seedSegments, list5, ME5);
00372     complete(seedSegments, mb3, MB3);
00373     complete(seedSegments, mb2, MB2);
00374     complete(seedSegments, mb1, MB1);
00375     if(check(seedSegments)) patterns.push_back(seedSegments);
00376   }
00377 
00378 
00379   unsigned int counter;
00380 
00381   for ( counter = 0; counter<list2.size(); counter++ ){
00382 
00383     if ( !ME2[counter] ) {
00384       MuonRecHitContainer seedSegments;
00385       seedSegments.push_back(list2[counter]);
00386       complete(seedSegments, list3, ME3);
00387       complete(seedSegments, list4, ME4);
00388       complete(seedSegments, list5, ME5);
00389       complete(seedSegments, mb3, MB3);
00390       complete(seedSegments, mb2, MB2);
00391       complete(seedSegments, mb1, MB1);
00392       if(check(seedSegments)) patterns.push_back(seedSegments);
00393     }
00394   }
00395 
00396 
00397   if ( list3.size() < 20 ) {   // +v
00398     for ( counter = 0; counter<list3.size(); counter++ ){
00399       if ( !ME3[counter] ) {
00400         MuonRecHitContainer seedSegments;
00401         seedSegments.push_back(list3[counter]);
00402         complete(seedSegments, list4, ME4);
00403         complete(seedSegments, list5, ME5);
00404         complete(seedSegments, mb3, MB3);
00405         complete(seedSegments, mb2, MB2);
00406         complete(seedSegments, mb1, MB1);
00407         if(check(seedSegments)) patterns.push_back(seedSegments);
00408       }
00409     }
00410   }
00411 
00412   if ( list4.size() < 20 ) {   // +v
00413     for ( counter = 0; counter<list4.size(); counter++ ){
00414       if ( !ME4[counter] ) {
00415         MuonRecHitContainer seedSegments;
00416         seedSegments.push_back(list4[counter]);
00417         complete(seedSegments, list5, ME5);
00418         complete(seedSegments, mb3, MB3);
00419         complete(seedSegments, mb2, MB2);
00420         complete(seedSegments, mb1, MB1);
00421         if(check(seedSegments)) patterns.push_back(seedSegments);
00422       }
00423     }
00424   }
00425 
00426   if ( ME5 ) delete [] ME5;
00427   if ( ME4 ) delete [] ME4;
00428   if ( ME3 ) delete [] ME3;
00429   if ( ME2 ) delete [] ME2;
00430 
00431   if(!patterns.empty())
00432   {
00433     result.insert(result.end(), patterns.begin(), patterns.end());
00434   }
00435   else
00436   {
00437     if(!crackSegments.empty())
00438     {
00439        // make some single-segment seeds
00440        for(MuonRecHitContainer::const_iterator crackSegmentItr = crackSegments.begin();
00441            crackSegmentItr != crackSegments.end(); ++crackSegmentItr)
00442        {
00443           MuonRecHitContainer singleSegmentPattern;
00444           singleSegmentPattern.push_back(*crackSegmentItr);
00445           result.push_back(singleSegmentPattern);
00446        }
00447     }
00448   }
00449 }

void MuonSeedOrcaPatternRecognition::produce ( edm::Event event,
const edm::EventSetup eSetup,
std::vector< MuonRecHitContainer > &  result 
)

Definition at line 56 of file MuonSeedOrcaPatternRecognition.cc.

References python::cmstools::all(), check(), complete(), edmNew::copy(), counter(), MuonSeedVPatternRecognition::enableCSCMeasurement, MuonSeedVPatternRecognition::enableDTMeasurement, endcapPatterns(), edm::EventSetup::get(), iter, edm::InputTag::label(), LogTrace, MuonSeedVPatternRecognition::theCSCRecSegmentLabel, MuonSeedVPatternRecognition::theDTRecSegmentLabel, tmp, and zero().

00058 {
00059   // divide the RecHits by DetLayer, in order to fill the
00060   // RecHitContainer like it was in ORCA
00061   
00062   // Muon Geometry - DT, CSC and RPC 
00063   edm::ESHandle<MuonDetLayerGeometry> muonLayers;
00064   eSetup.get<MuonRecoGeometryRecord>().get(muonLayers);
00065 
00066   // get the DT layers
00067   vector<DetLayer*> dtLayers = muonLayers->allDTLayers();
00068 
00069   // get the CSC layers
00070   vector<DetLayer*> cscForwardLayers = muonLayers->forwardCSCLayers();
00071   vector<DetLayer*> cscBackwardLayers = muonLayers->backwardCSCLayers();
00072     
00073   // Backward (z<0) EndCap disk
00074   const DetLayer* ME4Bwd = cscBackwardLayers[4];
00075   const DetLayer* ME3Bwd = cscBackwardLayers[3];
00076   const DetLayer* ME2Bwd = cscBackwardLayers[2];
00077   const DetLayer* ME12Bwd = cscBackwardLayers[1];
00078   const DetLayer* ME11Bwd = cscBackwardLayers[0];
00079   
00080   // Forward (z>0) EndCap disk
00081   const DetLayer* ME11Fwd = cscForwardLayers[0];
00082   const DetLayer* ME12Fwd = cscForwardLayers[1];
00083   const DetLayer* ME2Fwd = cscForwardLayers[2];
00084   const DetLayer* ME3Fwd = cscForwardLayers[3];
00085   const DetLayer* ME4Fwd = cscForwardLayers[4];
00086      
00087   // barrel
00088   const DetLayer* MB4DL = dtLayers[3];
00089   const DetLayer* MB3DL = dtLayers[2];
00090   const DetLayer* MB2DL = dtLayers[1];
00091   const DetLayer* MB1DL = dtLayers[0];
00092   
00093   // instantiate the accessor
00094   // Don not use RPC for seeding
00095   MuonDetLayerMeasurements muonMeasurements(theDTRecSegmentLabel.label(),theCSCRecSegmentLabel,edm::InputTag(),
00096                                             enableDTMeasurement,enableCSCMeasurement,false);
00097 
00098   MuonRecHitContainer list9 = muonMeasurements.recHits(MB4DL,event);
00099   MuonRecHitContainer list6 = muonMeasurements.recHits(MB3DL,event);
00100   MuonRecHitContainer list7 = muonMeasurements.recHits(MB2DL,event);
00101   MuonRecHitContainer list8 = muonMeasurements.recHits(MB1DL,event);
00102 
00103   bool* MB1 = zero(list8.size());
00104   bool* MB2 = zero(list7.size());
00105   bool* MB3 = zero(list6.size());
00106 
00107 
00108   endcapPatterns(muonMeasurements.recHits(ME11Bwd,event),
00109                  muonMeasurements.recHits(ME12Bwd,event),
00110                  muonMeasurements.recHits(ME2Bwd,event),
00111                  muonMeasurements.recHits(ME3Bwd,event),
00112                  muonMeasurements.recHits(ME4Bwd,event),
00113                  list8, list7, list6,
00114                  MB1, MB2, MB3, result);
00115 
00116   endcapPatterns(muonMeasurements.recHits(ME11Fwd,event),
00117                  muonMeasurements.recHits(ME12Fwd,event),
00118                  muonMeasurements.recHits(ME2Fwd,event),
00119                  muonMeasurements.recHits(ME3Fwd,event),
00120                  muonMeasurements.recHits(ME4Fwd,event),
00121                  list8, list7, list6,
00122                  MB1, MB2, MB3, result);
00123 
00124 
00125   // ----------    Barrel only
00126   
00127   unsigned int counter = 0;
00128   if ( list9.size() < 100 ) {   // +v
00129     for (MuonRecHitContainer::iterator iter=list9.begin(); iter!=list9.end(); iter++ ){
00130       MuonRecHitContainer seedSegments;
00131       seedSegments.push_back(*iter);
00132       complete(seedSegments, list6, MB3);
00133       complete(seedSegments, list7, MB2);
00134       complete(seedSegments, list8, MB1);
00135       if(check(seedSegments)) result.push_back(seedSegments);
00136     }
00137   }
00138 
00139 
00140   if ( list6.size() < 100 ) {   // +v
00141     for ( counter = 0; counter<list6.size(); counter++ ){
00142       if ( !MB3[counter] ) { 
00143         MuonRecHitContainer seedSegments;
00144         seedSegments.push_back(list6[counter]);
00145         complete(seedSegments, list7, MB2);
00146         complete(seedSegments, list8, MB1);
00147         complete(seedSegments, list9);
00148         if(check(seedSegments)) result.push_back(seedSegments);
00149       }
00150     }
00151   }
00152 
00153 
00154   if ( list7.size() < 100 ) {   // +v
00155     for ( counter = 0; counter<list7.size(); counter++ ){
00156       if ( !MB2[counter] ) { 
00157         MuonRecHitContainer seedSegments;
00158         seedSegments.push_back(list7[counter]);
00159         complete(seedSegments, list8, MB1);
00160         complete(seedSegments, list9);
00161         complete(seedSegments, list6, MB3);
00162         if (seedSegments.size()>1 || 
00163            (seedSegments.size()==1 && seedSegments[0]->dimension()==4) )
00164         {
00165           result.push_back(seedSegments);
00166         }
00167       }
00168     }
00169   }
00170 
00171 
00172   if ( list8.size() < 100 ) {   // +v
00173     for ( counter = 0; counter<list8.size(); counter++ ){
00174       if ( !MB1[counter] ) { 
00175         MuonRecHitContainer seedSegments;
00176         seedSegments.push_back(list8[counter]);
00177         complete(seedSegments, list9);
00178         complete(seedSegments, list6, MB3);
00179         complete(seedSegments, list7, MB2);
00180         if (seedSegments.size()>1 ||
00181            (seedSegments.size()==1 && seedSegments[0]->dimension()==4) )
00182         {
00183           result.push_back(seedSegments);
00184         }
00185       }
00186     }
00187   }
00188 
00189   if ( MB3 ) delete [] MB3;
00190   if ( MB2 ) delete [] MB2;
00191   if ( MB1 ) delete [] MB1;
00192 
00193 
00194   if(result.empty()) 
00195   {
00196     const std::string metname = "Muon|RecoMuon|MuonSeedOrcaPatternRecognition";
00197     MuonRecHitContainer all = muonMeasurements.recHits(ME4Bwd,event);
00198     LogTrace(metname)<<"ME4B "<<all.size();
00199     MuonRecHitContainer tmp = muonMeasurements.recHits(ME3Bwd,event);
00200     copy(tmp.begin(),tmp.end(),back_inserter(all));
00201     LogTrace(metname)<<"ME3B "<<tmp.size();
00202 
00203     tmp = muonMeasurements.recHits(ME2Bwd,event);
00204     copy(tmp.begin(),tmp.end(),back_inserter(all));
00205     LogTrace(metname)<<"ME2B "<<tmp.size();
00206 
00207     tmp = muonMeasurements.recHits(ME12Bwd,event);
00208     copy(tmp.begin(),tmp.end(),back_inserter(all));
00209     LogTrace(metname)<<"ME12B "<<tmp.size();
00210 
00211     tmp = muonMeasurements.recHits(ME11Bwd,event);
00212     copy(tmp.begin(),tmp.end(),back_inserter(all));
00213     LogTrace(metname)<<"ME11B "<<tmp.size();
00214 
00215     tmp = muonMeasurements.recHits(ME11Fwd,event);
00216     copy(tmp.begin(),tmp.end(),back_inserter(all));
00217     LogTrace(metname)<<"ME11F "<<tmp.size();
00218 
00219     tmp = muonMeasurements.recHits(ME12Fwd,event);
00220     copy(tmp.begin(),tmp.end(),back_inserter(all));
00221     LogTrace(metname)<<"ME12F "<<tmp.size();
00222 
00223     tmp = muonMeasurements.recHits(ME2Fwd,event);
00224     copy(tmp.begin(),tmp.end(),back_inserter(all));
00225     LogTrace(metname)<<"ME2F "<<tmp.size();
00226 
00227     tmp = muonMeasurements.recHits(ME3Fwd,event);
00228     copy(tmp.begin(),tmp.end(),back_inserter(all));
00229     LogTrace(metname)<<"ME3F "<<tmp.size();
00230 
00231     tmp = muonMeasurements.recHits(ME4Fwd,event);
00232     copy(tmp.begin(),tmp.end(),back_inserter(all));
00233     LogTrace(metname)<<"ME4F "<<tmp.size();
00234 
00235     tmp = muonMeasurements.recHits(MB4DL,event);
00236     copy(tmp.begin(),tmp.end(),back_inserter(all));
00237     LogTrace(metname)<<"MB4 "<<tmp.size();
00238 
00239     tmp = muonMeasurements.recHits(MB3DL,event);
00240     copy(tmp.begin(),tmp.end(),back_inserter(all));
00241     LogTrace(metname)<<"MB3 "<<tmp.size();
00242 
00243     tmp = muonMeasurements.recHits(MB2DL,event);
00244     copy(tmp.begin(),tmp.end(),back_inserter(all));
00245     LogTrace(metname)<<"MB2 "<<tmp.size();
00246 
00247     tmp = muonMeasurements.recHits(MB1DL,event);
00248     copy(tmp.begin(),tmp.end(),back_inserter(all));
00249     LogTrace(metname)<<"MB1 "<<tmp.size();
00250 
00251     LogTrace(metname)<<"Number of segments: "<<all.size();
00252 
00253     for(MuonRecHitContainer::const_iterator segmentItr = all.begin();
00254         segmentItr != all.end(); ++segmentItr)
00255     {
00256       MuonRecHitContainer singleSegmentContainer;
00257       singleSegmentContainer.push_back(*segmentItr);
00258       result.push_back(singleSegmentContainer);
00259     }
00260   }
00261 
00262 }

void MuonSeedOrcaPatternRecognition::rememberCrackSegments ( const MuonRecHitContainer segments,
MuonRecHitContainer crackSegments 
) const [private]

Definition at line 622 of file MuonSeedOrcaPatternRecognition.cc.

References theCrackEtas, and theCrackWindow.

Referenced by endcapPatterns().

00624 {
00625   for(MuonRecHitContainer::const_iterator segmentItr = segments.begin(); 
00626       segmentItr != segments.end(); ++segmentItr)
00627   {
00628     if((**segmentItr).hit()->dimension() == 4) 
00629     {
00630       double absEta = fabs((**segmentItr).globalPosition().eta());
00631 
00632       for(std::vector<double>::const_iterator crackItr = theCrackEtas.begin();
00633           crackItr != theCrackEtas.end(); ++crackItr)
00634       {
00635         if(fabs(absEta-*crackItr) < theCrackWindow) {
00636            crackSegments.push_back(*segmentItr);
00637         }
00638       }
00639     }
00640   }
00641 }

bool * MuonSeedOrcaPatternRecognition::zero ( unsigned  listSize  )  [private]

Definition at line 265 of file MuonSeedOrcaPatternRecognition.cc.

References i, and HLT_VtxMuL3::result.

Referenced by endcapPatterns(), and produce().

00266 {
00267   bool * result = 0;
00268   if (listSize) {
00269     result = new bool[listSize]; 
00270     for ( size_t i=0; i<listSize; i++ ) result[i]=false;
00271   }
00272   return result;
00273 }


Member Data Documentation

std::vector<double> MuonSeedOrcaPatternRecognition::theCrackEtas [private]

Definition at line 35 of file MuonSeedOrcaPatternRecognition.h.

Referenced by rememberCrackSegments().

double MuonSeedOrcaPatternRecognition::theCrackWindow [private]

Definition at line 36 of file MuonSeedOrcaPatternRecognition.h.

Referenced by rememberCrackSegments().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:28:48 2009 for CMSSW by  doxygen 1.5.4