44 theTrackerRecHitBuilderName = parameterSet.
getParameter<
string>(
"TrackerRecHitBuilder");
45 theMuonRecHitBuilderName = parameterSet.
getParameter<
string>(
"MuonRecHitBuilder");
47 theRPCInTheFit = parameterSet.
getParameter<
bool>(
"RefitRPCHits");
49 theCacheId_TC = theCacheId_GTG = theCacheId_MG = theCacheId_TRH = 0;
58 const std::string
metname =
"Reco|TrackingTools|TrackTransformer";
67 if ( newCacheId_TC != theCacheId_TC ){
68 LogTrace(metname) <<
"Tracking Component changed!";
69 theCacheId_TC = newCacheId_TC;
76 if ( newCacheId_GTG != theCacheId_GTG ) {
77 LogTrace(metname) <<
"GlobalTrackingGeometry changed!";
78 theCacheId_GTG = newCacheId_GTG;
84 if ( newCacheId_MG != theCacheId_MG ) {
85 LogTrace(metname) <<
"Magnetic Field changed!";
86 theCacheId_MG = newCacheId_MG;
92 if ( newCacheId_TRH != theCacheId_TRH ) {
93 theCacheId_TRH = newCacheId_TRH;
94 LogTrace(metname) <<
"TransientRecHitRecord changed!";
107 bool printout =
false;
115 if((*hit)->isValid())
116 if ( (*hit)->geographicalId().det() ==
DetId::Muon ){
117 if( (*hit)->geographicalId().subdetId() == 3 && !theRPCInTheFit){
118 LogTrace(
"Reco|TrackingTools|TrackTransformer") <<
"RPC Rec Hit discarged";
121 staHits.push_back(theMuonRecHitBuilder->build(&**
hit));
122 DetId hitId = staHits.back()->geographicalId();
123 GlobalPoint glbpoint = trackingGeometry()->idToDet(hitId)->position();
124 float gpy=glbpoint.
y();
125 float gpz=glbpoint.
z();
128 if (gpy > 0 && gpz > 0) quad1 =
true;
129 else if (gpy > 0 && gpz < 0) quad2 =
true;
130 else if (gpy < 0 && gpz < 0) quad3 =
true;
131 else if (gpy < 0 && gpz > 0) quad4 =
true;
135 if(staHits.empty())
return staHits;
137 if (quad1 && quad2)
return tkHits;
138 if (quad1 && quad3)
return tkHits;
139 if (quad1 && quad4)
return tkHits;
140 if (quad2 && quad3)
return tkHits;
141 if (quad2 && quad4)
return tkHits;
142 if (quad3 && quad4)
return tkHits;
145 bool doReverse = staHits.front()->globalPosition().y()>0 ?
true :
false;
147 if (quad1) doReverse = SlopeSum(staHits);
148 if (quad2) doReverse = SlopeSum(staHits);
149 if (quad3) doReverse = SlopeSum(staHits);
150 if (quad4) doReverse = SlopeSum(staHits);
152 reverse(staHits.begin(),staHits.end());
155 copy(staHits.begin(),staHits.end(),back_inserter(tkHits));
166 if (printout)
for(TransientTrackingRecHit::ConstRecHitContainer::const_iterator
hit = tkHits.begin();
167 hit !=tkHits.end(); ++
hit){
169 DetId hitId = (*hit)->geographicalId();
170 GlobalPoint glbpoint = trackingGeometry()->idToDet(hitId)->position();
183 LogTrace(
"TrackFitters") <<
" UNKNOWN MUON HIT TYPE ";
192 if(quad ==1) {
if (sumy < 0)
return theFitterOI;
else return theFitterIO;}
193 if(quad ==2) {
if (sumy < 0)
return theFitterOI;
else return theFitterIO;}
194 if(quad ==3) {
if (sumy > 0)
return theFitterOI;
else return theFitterIO;}
195 if(quad ==4) {
if (sumy > 0)
return theFitterOI;
else return theFitterIO;}
197 if(up)
return theFitterOI;
198 else return theFitterIO;
203 if(quad ==1){
if (sumy < 0)
return theSmootherOI;
else return theSmootherIO;}
204 if(quad ==2){
if (sumy < 0)
return theSmootherOI;
else return theSmootherIO;}
205 if(quad ==3){
if (sumy > 0)
return theSmootherOI;
else return theSmootherIO;}
206 if(quad ==4){
if (sumy > 0)
return theSmootherOI;
else return theSmootherIO;}
207 if(up)
return theSmootherOI;
208 else return theSmootherIO;
212 if(quad ==1) {
if (sumy > 0)
return thePropagatorOI;
else return thePropagatorIO;}
213 if(quad ==2) {
if (sumy > 0)
return thePropagatorOI;
else return thePropagatorIO;}
214 if(quad ==3) {
if (sumy < 0)
return thePropagatorOI;
else return thePropagatorIO;}
215 if(quad ==4) {
if (sumy < 0)
return thePropagatorOI;
else return thePropagatorIO;}
216 if(up)
return thePropagatorIO;
217 else return thePropagatorOI;
225 const std::string
metname =
"Reco|TrackingTools|TrackTransformer";
241 if((*hit)->isValid())
242 if ( (*hit)->geographicalId().det() ==
DetId::Muon ){
243 if( (*hit)->geographicalId().subdetId() == 3 && !theRPCInTheFit){
244 LogTrace(
"Reco|TrackingTools|TrackTransformer") <<
"RPC Rec Hit discarged";
247 staHits.push_back(theMuonRecHitBuilder->build(&**
hit));
248 DetId hitId = staHits.back()->geographicalId();
249 GlobalPoint glbpoint = trackingGeometry()->idToDet(hitId)->position();
250 float gpy=glbpoint.
y();
251 float gpz=glbpoint.
z();
254 if (gpy > 0 && gpz > 0) {quad1 =
true; quadrant = 1;}
255 else if (gpy > 0 && gpz < 0){quad2 =
true; quadrant = 2;}
256 else if (gpy < 0 && gpz < 0){quad3 =
true; quadrant = 3;}
257 else if (gpy < 0 && gpz > 0){quad4 =
true; quadrant = 4;}
258 else return vector<Trajectory>();
262 if(staHits.empty())
return vector<Trajectory>();
264 if (quad1 && quad2)
return vector<Trajectory>();
265 if (quad1 && quad3)
return vector<Trajectory>();
266 if (quad1 && quad4)
return vector<Trajectory>();
267 if (quad2 && quad3)
return vector<Trajectory>();
268 if (quad2 && quad4)
return vector<Trajectory>();
269 if (quad3 && quad4)
return vector<Trajectory>();
271 bool doReverse =
false;
273 if (quad1) doReverse = SlopeSum(staHits);
274 if (quad2) doReverse = SlopeSum(staHits);
275 if (quad3) doReverse = SlopeSum(staHits);
276 if (quad4) doReverse = SlopeSum(staHits);
280 reverse(staHits.begin(),staHits.end());
283 copy(staHits.begin(),staHits.end(),back_inserter(recHitsForReFit));
292 if(recHitsForReFit.size() < 2)
return vector<Trajectory>();
294 bool up = recHitsForReFit.back()->globalPosition().y()>0 ?
true :
false;
297 float sumdy = SumDy(recHitsForReFit);
304 LogTrace(metname) <<
"Prop Dir: " << propagationDirection <<
" FirstId " << innerId <<
" firstTSOS " << firstTSOS;
309 if(recHitsForReFit.front()->geographicalId() !=
DetId(innerId)){
310 LogTrace(metname)<<
"Propagation occurring"<<endl;
311 firstTSOS =
propagator(up, quadrant, sumdy)->propagate(firstTSOS, recHitsForReFit.front()->det()->surface());
312 LogTrace(metname)<<
"Final destination: " << recHitsForReFit.front()->det()->surface().position() << endl;
313 if(!firstTSOS.isValid()){
314 std::cout<<
"Propagation error! Dumping RecHits..."<<std::endl;
316 for(TransientTrackingRecHit::ConstRecHitContainer::const_iterator
hit = recHitsForReFit.begin();
317 hit !=recHitsForReFit.end(); ++
hit){
319 DetId hitId = (*hit)->geographicalId();
320 GlobalPoint glbpoint = trackingGeometry()->idToDet(hitId)->position();
328 LogTrace(metname)<<
"Propagation error!"<<endl;
329 return vector<Trajectory>();
334 vector<Trajectory> trajectories = fitter(up, quadrant, sumdy)->fit(seed,recHitsForReFit,firstTSOS);
336 if(trajectories.empty()){
337 LogTrace(metname)<<
"No Track refitted!"<<endl;
338 return vector<Trajectory>();
341 Trajectory trajectoryBW = trajectories.front();
343 vector<Trajectory> trajectoriesSM = smoother(up, quadrant, sumdy)->trajectories(trajectoryBW);
345 if(trajectoriesSM.empty()){
346 LogTrace(metname)<<
"No Track smoothed!"<<endl;
347 return vector<Trajectory>();
350 return trajectoriesSM;
365 std::vector<float> py;
366 std::vector<float> pz;
372 for(TransientTrackingRecHit::ConstRecHitContainer::const_iterator
hit = tkHits.begin();
373 hit !=tkHits.end(); ++
hit){
375 DetId hitId = (*hit)->geographicalId();
376 GlobalPoint glbpoint = trackingGeometry()->idToDet(hitId)->position();
379 float y2 = glbpoint.
y();
380 float z2 = glbpoint.
z();
391 if (fabs(dz) > 1
e-3) dslope = dy / dz;
409 if ( sumdz < 0) retval =
true;
425 std::vector<float> py;
426 std::vector<float> pz;
434 for(TransientTrackingRecHit::ConstRecHitContainer::const_iterator
hit = tkHits.begin();
435 hit !=tkHits.end(); ++
hit){
437 DetId hitId = (*hit)->geographicalId();
438 GlobalPoint glbpoint = trackingGeometry()->idToDet(hitId)->position();
441 float y2 = glbpoint.
y();
442 float z2 = glbpoint.
z();
453 if (fabs(dz) > 1
e-3) dslope = dy / dz;
T getParameter(std::string const &) const
const std::string metname
TrajectoryStateOnSurface innermostMeasurementState() const
unsigned int outerDetId() const
DetId of the detector on which surface the outermost state is located.
TrajectoryStateOnSurface outermostMeasurementState() const
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
trackingRecHit_iterator recHitsEnd() const
last iterator to RecHits
std::vector< ConstRecHitPointer > ConstRecHitContainer
const Track & track() const
Detector det() const
get the detector field from this detid
unsigned int innerDetId() const
DetId of the detector on which surface the innermost state is located.
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
trackingRecHit_iterator recHitsBegin() const
first iterator to RecHits