CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
StandAloneMuonRefitter.cc
Go to the documentation of this file.
1 
11 
13 
15 
20 
21 using namespace edm;
22 using namespace std;
23 
24 StandAloneMuonRefitter::StandAloneMuonRefitter(const ParameterSet& par, const MuonServiceProxy* service):theService(service) {
25  LogDebug("Muon|RecoMuon|StandAloneMuonRefitter") << "Constructor called." << endl;
26 
27  theFitterName = par.getParameter<string>("FitterName");
28  theNumberOfIterations = par.getParameter<unsigned int>("NumberOfIterations");
29  isForceAllIterations = par.getParameter<bool>("ForceAllIterations");
30  theMaxFractionOfLostHits = par.getParameter<double>("MaxFractionOfLostHits");
31  errorRescale = par.getParameter<double>("RescaleError");
32 }
33 
36  LogDebug("Muon|RecoMuon|StandAloneMuonRefitter") << "Destructor called." << endl;
37 }
38 
39  // Operations
40 
43 
45 
46  vector<Trajectory> refitted;
47 
48  TrajectoryMeasurement lastTM = trajectory.lastMeasurement();
49 
50  TrajectoryStateOnSurface firstTsos(lastTM.updatedState());
51 
52  // Rescale errors before refit, not to bias the result
53  firstTsos.rescaleError(errorRescale);
54 
56  reverse(trajRH.begin(),trajRH.end());
57  refitted = theFitter->fit(trajectory.seed(), trajRH, firstTsos);
58 
59  if(!refitted.empty()) return RefitResult(true,refitted.front());
60  else return RefitResult(false,trajectory);
61 }
62 
63 
65 
66  LogDebug("Muon|RecoMuon|StandAloneMuonRefitter") << "---------------------------------" << endl;
67  LogDebug("Muon|RecoMuon|StandAloneMuonRefitter") << "Starting refitting loop:" << endl;
68 
69  unsigned int nSuccess=0;
70  unsigned int nOrigHits=trajectory.recHits().size();
71  Trajectory lastFitted=trajectory;
72  bool allIter=true;
73  bool enoughRH=true;
74 
75  for(unsigned int j=0; j<theNumberOfIterations; ++j) {
76 
77  StandAloneMuonRefitter::RefitResult singleRefitResult = singleRefit(lastFitted);
78  lastFitted = singleRefitResult.second;
79  unsigned int nLastHits=lastFitted.recHits().size();
80 
81  if(!singleRefitResult.first) {
82  allIter=false;
83  LogDebug("Muon|RecoMuon|StandAloneMuonRefitter") << " refit n. " << nSuccess+1 << ": failed" << endl;
84  break;
85  }
86 
87  double lostFract= 1 - double(nLastHits)/nOrigHits;
88  if(lostFract>theMaxFractionOfLostHits) {
89  enoughRH=false;
90  LogDebug("Muon|RecoMuon|StandAloneMuonRefitter") << " refit n. " << nSuccess+1 << ": too many RH lost" << endl;
91  LogDebug("Muon|RecoMuon|StandAloneMuonRefitter") << " Survived RecHits: " << nLastHits << "/" << nOrigHits << endl;
92  break;
93  }
94 
95  nSuccess++;
96  LogDebug("Muon|RecoMuon|StandAloneMuonRefitter") << " refit n. " << nSuccess << ": OK" << endl;
97  LogDebug("Muon|RecoMuon|StandAloneMuonRefitter") << " Survived RecHits: " << nLastHits << "/" << nOrigHits << endl;
98 
99  } // end for
100 
101  LogDebug("Muon|RecoMuon|StandAloneMuonRefitter") << nSuccess << " successful refits!" << endl;
102 
103  // if isForceAllIterations==true => 3 successful refits: (true, refitted trajectory)
104  // <3 successful refits: (false, original trajectory)
105  // if isForceAllIterations==false => >0 successful refits: (true, last refitted trajectory)
106  // 0 successful refits: (false, original trajectory)
107  if(!enoughRH)
108  return RefitResult(false, trajectory);
109  else if(isForceAllIterations)
110  return allIter ? RefitResult(allIter, lastFitted) : RefitResult(allIter, trajectory);
111  else
112  return nSuccess==0 ? RefitResult(false, trajectory) : RefitResult(true, lastFitted);
113 }
#define LogDebug(id)
const MuonServiceProxy * theService
T getParameter(std::string const &) const
TrajectorySeed const & seed() const
Access to the seed used to reconstruct the Trajectory.
Definition: Trajectory.h:277
StandAloneMuonRefitter(const edm::ParameterSet &par, const MuonServiceProxy *service)
Constructor.
ConstRecHitContainer recHits(bool splitting=false) const
Definition: Trajectory.cc:67
edm::ESHandle< TrajectoryFitter > theFitter
std::pair< bool, Trajectory > RefitResult
TrajectoryMeasurement const & lastMeasurement() const
Definition: Trajectory.h:193
int j
Definition: DBlmapReader.cc:9
RefitResult refit(const Trajectory &)
virtual ~StandAloneMuonRefitter()
Destructor.
std::vector< ConstRecHitPointer > ConstRecHitContainer
RefitResult singleRefit(const Trajectory &)
Refit.
TrajectoryStateOnSurface const & updatedState() const