#include <Alignment/MuonStandaloneAlgorithm/plugins/MuonStandaloneAlgorithm.h>
This class produces a collection of TrackForAlignment using as input Tracks and 4DSegments from AlcaReco.
Definition at line 51 of file MuonStandaloneAlgorithm.h.
MuonStandaloneAlgorithm::MuonStandaloneAlgorithm | ( | const edm::ParameterSet & | pset | ) |
Constructor.
Definition at line 59 of file MuonStandaloneAlgorithm.cc.
References curvStep, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), longiStep, phiStep, theRecHits2DLabelCSC, theRecHits4DLabelDT, theSeedCollectionLabel, theSelectorOfFirstPoint, theSTAMuonTag, thetaStep, transStep, and verbosity.
00059 { 00060 00061 theSTAMuonTag = pset.getParameter<edm::InputTag>("StandAloneTrackCollectionTag"); 00062 00063 theSeedCollectionLabel = pset.getUntrackedParameter<string>("MuonSeedCollectionLabel"); 00064 00065 theRecHits4DLabelDT = pset.getParameter<string>("recHits4DLabelDT"); 00066 00067 theRecHits2DLabelCSC = pset.getParameter<string>("recHits2DLabelCSC"); 00068 00069 theSelectorOfFirstPoint = pset.getParameter<int>("SelectorOfFirstPoint"); 00070 00071 verbosity = pset.getParameter<int>("Verbosity"); 00072 00073 curvStep = pset.getParameter<double>("CurvatureStep"); 00074 00075 thetaStep = pset.getParameter<double>("ThetaStep"); 00076 00077 phiStep = pset.getParameter<double>("PhiStep"); 00078 00079 transStep = pset.getParameter<double>("TransStep"); 00080 00081 longiStep = pset.getParameter<double>("LongiStep"); 00082 00084 // ParameterSet serviceParameters = pset.getParameter<ParameterSet>("ServiceParameters"); 00085 // theService = new MuonServiceProxy(serviceParameters); 00086 // ParameterSet updatorPSet = pset.getParameter<ParameterSet>("UpdatorParameters"); 00087 // theUpdator = new MuonUpdatorAtVertex(updatorPSet,theService); 00088 00089 produces<TrackForAlignmentCollection>(); 00090 00091 }
MuonStandaloneAlgorithm::~MuonStandaloneAlgorithm | ( | ) | [virtual] |
void MuonStandaloneAlgorithm::calculateError | ( | AlgebraicSymMatrix55 | a, | |
TMatrixD * | err | |||
) | [private] |
Definition at line 492 of file MuonStandaloneAlgorithm.cc.
References a, i, index, j, and NDOFCoor.
Referenced by produce().
00492 { 00493 00494 int index[] = {3,4,1,2}; 00495 for(int i = 0; i < NDOFCoor; ++i) { 00496 for(int j = 0; j < NDOFCoor; ++j) { 00497 (*err)(i,j) = a(index[i],index[j]); 00498 } 00499 } 00500 }
bool MuonStandaloneAlgorithm::calculateJacobian | ( | TrajectoryStateOnSurface | innerTSOS_orig, | |
const GeomDet * | geomDet, | |||
std::vector< double > | param, | |||
TMatrixD * | Jacobian | |||
) | [private] |
Definition at line 483 of file MuonStandaloneAlgorithm.cc.
References counter(), Derivative(), and NDOFTrack.
Referenced by produce().
00483 { 00484 00485 for(int counter = 0; counter < NDOFTrack; counter++) { 00486 if(Derivative(innerTSOS_orig, geomDet, counter, param, Jacobian)==false) return false; 00487 } 00488 return true; 00489 }
bool MuonStandaloneAlgorithm::Derivative | ( | TrajectoryStateOnSurface | innerTSOS_orig, | |
const GeomDet * | geomDet, | |||
int | parameter, | |||
std::vector< double > | param, | |||
TMatrixD * | Jacobian | |||
) | [private] |
Definition at line 426 of file MuonStandaloneAlgorithm.cc.
References curvStep, TrajectoryStateOnSurface::isValid(), TrajectoryStateOnSurface::localDirection(), TrajectoryStateOnSurface::localPosition(), longiStep, phiStep, produceFreeTrajectoryState(), Propagator::propagate(), cmsPerfCommons::Step, GeomDet::surface(), thePropagator1, thetaStep, transStep, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().
Referenced by calculateJacobian().
00426 { 00427 00428 double Step; 00429 switch(parameter) { 00430 case 0: 00431 Step = curvStep; 00432 break; 00433 case 1: 00434 Step = phiStep; 00435 break; 00436 case 2: 00437 Step = thetaStep; 00438 break; 00439 case 3: 00440 Step = transStep; 00441 break; 00442 case 4: 00443 Step = longiStep; 00444 break; 00445 default: 00446 Step = curvStep; 00447 break; 00448 } 00449 00450 FreeTrajectoryState innerTSOS_plus = produceFreeTrajectoryState(innerTSOS_orig, parameter, Step, param); 00451 TrajectoryStateOnSurface destiny_plus = thePropagator1->propagate(innerTSOS_plus, geomDet->surface()); 00452 if(!destiny_plus.isValid()) return false; 00453 00454 FreeTrajectoryState innerTSOS_minus = produceFreeTrajectoryState(innerTSOS_orig, parameter, -Step, param); 00455 TrajectoryStateOnSurface destiny_minus = thePropagator1->propagate(innerTSOS_minus, geomDet->surface()); 00456 if(!destiny_minus.isValid()) return false; 00457 00458 if(parameter == 0) { 00459 LocalVector der_(destiny_plus.localPosition()-destiny_minus.localPosition()); 00460 //X 00461 (*Jacobian)(0, parameter) = der_.x()/(2.0*Step*param.at(0)); 00462 //Z 00463 (*Jacobian)(1, parameter) = der_.y()/(2.0*Step*param.at(0)); 00464 //PHI 00465 (*Jacobian)(2, parameter) = (TMath::ATan2(destiny_plus.localDirection().z(), destiny_plus.localDirection().x())-TMath::ATan2(destiny_minus.localDirection().z(), destiny_minus.localDirection().x()))/(2.0*Step*param.at(0)); 00466 //THETA 00467 (*Jacobian)(3, parameter) = (TMath::ATan2(destiny_plus.localDirection().z(), destiny_plus.localDirection().y())-TMath::ATan2(destiny_minus.localDirection().z(), destiny_minus.localDirection().y()))/(2.0*Step*param.at(0)); 00468 } else { 00469 LocalVector der_(destiny_plus.localPosition()-destiny_minus.localPosition()); 00470 //X 00471 (*Jacobian)(0, parameter) = der_.x()/(2.0*Step); 00472 //Z 00473 (*Jacobian)(1, parameter) = der_.y()/(2.0*Step); 00474 //PHI 00475 (*Jacobian)(2, parameter) = (TMath::ATan2(destiny_plus.localDirection().z(), destiny_plus.localDirection().x())-TMath::ATan2(destiny_minus.localDirection().z(), destiny_minus.localDirection().x()))/(2.0*Step); 00476 //THETA 00477 (*Jacobian)(3, parameter) = (TMath::ATan2(destiny_plus.localDirection().z(), destiny_plus.localDirection().y())-TMath::ATan2(destiny_minus.localDirection().z(), destiny_minus.localDirection().y()))/(2.0*Step); 00478 } 00479 return true; 00480 }
RecHitVector MuonStandaloneAlgorithm::doMatching | ( | const reco::Track & | staTrack, | |
edm::Handle< DTRecSegment4DCollection > & | all4DSegmentsDT, | |||
edm::Handle< CSCSegmentCollection > & | all4DSegmentsCSC, | |||
intDVector * | indexCollectionDT, | |||
intDVector * | indexCollectionCSC, | |||
edm::ESHandle< GlobalTrackingGeometry > & | theTrackingGeometry | |||
) | [private] |
Definition at line 312 of file MuonStandaloneAlgorithm.cc.
References counter(), GeomDetEnumerators::CSC, GeomDetEnumerators::DT, TrackingRecHit::geographicalId(), edm::Ref< C, T, F >::get(), DetId::rawId(), reco::Track::recHit(), reco::Track::recHitsSize(), and GeomDet::subDetector().
Referenced by produce().
00312 { 00313 00314 DTRecSegment4DCollection::const_iterator segmentDT; 00315 CSCSegmentCollection::const_iterator segmentCSC; 00316 00317 std::vector<int> positionDT; 00318 std::vector<int> positionCSC; 00319 std::vector<TrackingRecHit *> my4DTrack; 00320 00321 //Loop over the hits of the track 00322 for(int counter = 0; counter != staTrack.recHitsSize()-1; counter++) { 00323 00324 TrackingRecHitRef myRef = staTrack.recHit(counter); 00325 const TrackingRecHit *rechit = myRef.get(); 00326 const GeomDet* geomDet = theTrackingGeometry->idToDet(rechit->geographicalId()); 00327 00328 //It's a DT Hit 00329 if(geomDet->subDetector() == GeomDetEnumerators::DT) { 00330 00331 //Take the layer associated to this hit 00332 DTLayerId myLayer(rechit->geographicalId().rawId()); 00333 00334 int NumberOfDTSegment = 0; 00335 //Loop over segments 00336 for(segmentDT = all4DSegmentsDT->begin(); segmentDT != all4DSegmentsDT->end(); ++segmentDT) { 00337 00338 //By default the chamber associated to this Segment is new 00339 bool isNewChamber = true; 00340 00341 //Loop over segments already included in the vector of segments in the actual track 00342 for(std::vector<int>::iterator positionIt = positionDT.begin(); positionIt != positionDT.end(); positionIt++) { 00343 00344 //If this segment has been used before isNewChamber = false 00345 if(NumberOfDTSegment == *positionIt) isNewChamber = false; 00346 } 00347 00348 //Loop over vectors of segments associated to previous tracks 00349 for(std::vector<std::vector<int> >::iterator collect = indexCollectionDT->begin(); collect != indexCollectionDT->end(); ++collect) { 00350 00351 //Loop over segments associated to a track 00352 for(std::vector<int>::iterator positionIt = (*collect).begin(); positionIt != (*collect).end(); positionIt++) { 00353 00354 //If this segment was used in a previos track then isNewChamber = false 00355 if(NumberOfDTSegment == *positionIt) isNewChamber = false; 00356 } 00357 } 00358 00359 //If the chamber is new 00360 if(isNewChamber) { 00361 00362 DTChamberId myChamber((*segmentDT).geographicalId().rawId()); 00363 //If the layer of the hit belongs to the chamber of the 4D Segment 00364 if(myLayer.wheel() == myChamber.wheel() && myLayer.station() == myChamber.station() && myLayer.sector() == myChamber.sector()) { 00365 00366 //push position of the segment and tracking rechit 00367 positionDT.push_back(NumberOfDTSegment); 00368 my4DTrack.push_back((TrackingRecHit *) &(*segmentDT)); 00369 } 00370 } 00371 NumberOfDTSegment++; 00372 } 00373 //In case is a CSC 00374 } else if (geomDet->subDetector() == GeomDetEnumerators::CSC) { 00375 00376 //Take the layer associated to this hit 00377 CSCDetId myLayer(rechit->geographicalId().rawId()); 00378 00379 int NumberOfCSCSegment = 0; 00380 //Loop over 4Dsegments 00381 for(segmentCSC = all4DSegmentsCSC->begin(); segmentCSC != all4DSegmentsCSC->end(); segmentCSC++) { 00382 00383 //By default the chamber associated to the segment is new 00384 bool isNewChamber = true; 00385 00386 //Loop over segments in the current track 00387 for(std::vector<int>::iterator positionIt = positionCSC.begin(); positionIt != positionCSC.end(); positionIt++) { 00388 00389 //If this segment has been used then newchamber = false 00390 if(NumberOfCSCSegment == *positionIt) isNewChamber = false; 00391 } 00392 //Loop over vectors of segments in previous tracks 00393 for(std::vector<std::vector<int> >::iterator collect = indexCollectionCSC->begin(); collect != indexCollectionCSC->end(); ++collect) { 00394 00395 //Loop over segments in a track 00396 for(std::vector<int>::iterator positionIt = (*collect).begin(); positionIt != (*collect).end(); positionIt++) { 00397 00398 //If the segment was used in a previous track isNewChamber = false 00399 if(NumberOfCSCSegment == *positionIt) isNewChamber = false; 00400 } 00401 } 00402 //If the chamber is new 00403 if(isNewChamber) { 00404 00405 CSCDetId myChamber((*segmentCSC).geographicalId().rawId()); 00406 //If the chambers are the same 00407 if(myLayer.chamberId() == myChamber.chamberId()) { 00408 //push 00409 positionCSC.push_back(NumberOfCSCSegment); 00410 my4DTrack.push_back((TrackingRecHit *) &(*segmentCSC)); 00411 } 00412 } 00413 NumberOfCSCSegment++; 00414 } 00415 } 00416 } 00417 00418 indexCollectionDT->push_back(positionDT); 00419 indexCollectionCSC->push_back(positionCSC); 00420 00421 return my4DTrack; 00422 }
void MuonStandaloneAlgorithm::produce | ( | edm::Event & | event, | |
const edm::EventSetup & | eventSetup | |||
) | [virtual] |
Implements edm::EDProducer.
Definition at line 98 of file MuonStandaloneAlgorithm.cc.
References alongMomentum, calculateError(), calculateJacobian(), TrackForAlignment::CalculateMatrizes(), GenMuonPlsPt100GeV_cfg::cout, doMatching(), lat::endl(), cond::Error, TrajectoryStateOnSurface::freeState(), edm::EventSetup::get(), TrajectoryStateOnSurface::globalDirection(), TrajectoryStateOnSurface::globalParameters(), TrajectoryStateOnSurface::hasError(), reco::TransientTrack::impactPointState(), reco::TransientTrack::innermostMeasurementState(), TrackForAlignment::insert(), TrackForAlignment::isValid(), TrajectoryStateOnSurface::isValid(), TrajectoryStateOnSurface::localDirection(), TrajectoryStateOnSurface::localError(), TrajectoryStateOnSurface::localPosition(), PerigeeTrajectoryParameters::longitudinalImpactParameter(), LocalTrajectoryError::matrix(), FreeTrajectoryState::momentum(), NDOFCoor, NDOFTrack, p, phi, PerigeeTrajectoryParameters::phi(), FreeTrajectoryState::position(), GlobalTrajectoryParameters::position(), Propagator::propagate(), TrackForAlignment::setP(), TrackForAlignment::setPerigeeParameters(), SteppingHelixPropagator_cfi::SteppingHelixPropagator, GeomDet::surface(), thePropagator1, theRecHits2DLabelCSC, theRecHits4DLabelDT, theSelectorOfFirstPoint, theSTAMuonTag, PerigeeTrajectoryParameters::theta(), theta, GeomDet::toGlobal(), track, TrackForAlignment::trackValid, PerigeeTrajectoryParameters::transverseCurvature(), PerigeeTrajectoryParameters::transverseImpactParameter(), verbosity, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().
00098 { 00099 00100 if(verbosity > 0) { 00101 cout << "<MuonStandaloneAlgorithm> Run: " << event.id().run() << " Event: " << event.id().event() << endl; 00102 } 00103 00104 // Get the RecTrack collection from the event 00105 Handle<reco::TrackCollection> staTracks; 00106 event.getByLabel(theSTAMuonTag, staTracks); 00107 00108 // Get the magnetic field 00109 ESHandle<MagneticField> theMGField; 00110 eventSetup.get<IdealMagneticFieldRecord>().get(theMGField); 00111 00112 // Get the tracking geometry 00113 ESHandle<GlobalTrackingGeometry> theTrackingGeometry; 00114 eventSetup.get<GlobalTrackingGeometryRecord>().get(theTrackingGeometry); 00115 00116 00117 // Get the 4D DTSegments 00118 edm::Handle<DTRecSegment4DCollection> all4DSegmentsDT; 00119 event.getByLabel(theRecHits4DLabelDT, all4DSegmentsDT); 00120 DTRecSegment4DCollection::const_iterator segmentDT; 00121 00122 // Get the 4D CSCSegments 00123 edm::Handle<CSCSegmentCollection> all4DSegmentsCSC; 00124 event.getByLabel(theRecHits2DLabelCSC, all4DSegmentsCSC); 00125 CSCSegmentCollection::const_iterator segmentCSC; 00126 00127 00128 if(verbosity > 1) { 00129 cout << "<MuonStandaloneAlgorithm> List of DTSegments found in Local Reconstruction" << endl; 00130 cout << "Number: " << all4DSegmentsDT->size() << endl; 00131 for (segmentDT = all4DSegmentsDT->begin(); segmentDT != all4DSegmentsDT->end(); ++segmentDT){ 00132 const GeomDet* geomDet = theTrackingGeometry->idToDet((*segmentDT).geographicalId()); 00133 cout << "<MuonStandaloneAlgorithm> " << geomDet->toGlobal((*segmentDT).localPosition()) << endl; 00134 cout << "<MuonStandaloneAlgorithm> Local " << (*segmentDT).localPosition() << std::endl; 00135 } 00136 cout << "<MuonStandaloneAlgorithm> List of CSCSegments found in Local Reconstruction" << endl; 00137 for (segmentCSC = all4DSegmentsCSC->begin(); segmentCSC != all4DSegmentsCSC->end(); ++segmentCSC){ 00138 const GeomDet* geomDet = theTrackingGeometry->idToDet((*segmentCSC).geographicalId()); 00139 cout << "<MuonStandaloneAlgorithm>" << geomDet->toGlobal((*segmentCSC).localPosition()) << endl; 00140 } 00141 } 00142 00143 //Allocate collection of tracks 00144 auto_ptr<TrackForAlignmentCollection> aliTracks(new TrackForAlignmentCollection()); 00145 00146 //Create the propagator 00147 thePropagator1 = new SteppingHelixPropagator(&*theMGField, alongMomentum); 00148 00149 //Vectors used to perform the matching between Segments and hits from Track 00150 intDVector indexCollectionDT; 00151 intDVector indexCollectionCSC; 00152 00153 if(verbosity > 0) { 00154 cout << "<MuonStandaloneAlgorithm> Reconstructed tracks: " << staTracks->size() << endl; 00155 } 00156 reco::TrackCollection::const_iterator staTrack; 00157 for (staTrack = staTracks->begin(); staTrack != staTracks->end(); ++staTrack){ 00158 00159 reco::TransientTrack track(*staTrack,&*theMGField,theTrackingGeometry); 00160 TrackForAlignment *mTrack = new TrackForAlignment(); 00161 00162 RecHitVector my4DTrack = this->doMatching(*staTrack, all4DSegmentsDT, all4DSegmentsCSC, &indexCollectionDT, &indexCollectionCSC, theTrackingGeometry); 00163 00164 //Take the first state: impactpointstate or innerpointstate 00165 TrajectoryStateOnSurface innerTSOS = track.impactPointState(); 00166 00167 if(theSelectorOfFirstPoint == 1) { 00168 innerTSOS = track.innermostMeasurementState(); 00169 } 00170 //If the state is valid 00171 if(innerTSOS.isValid()) { 00172 //Fill the Perigee Values and Pt Values 00173 00174 TrajectoryStateOnSurface innerTSOS_orig = innerTSOS; 00175 double p = TMath::Sqrt(innerTSOS_orig.freeState()->momentum().x()* 00176 innerTSOS_orig.freeState()->momentum().x()+ 00177 innerTSOS_orig.freeState()->momentum().y()* 00178 innerTSOS_orig.freeState()->momentum().y()+ 00179 innerTSOS_orig.freeState()->momentum().z()* 00180 innerTSOS_orig.freeState()->momentum().z()); 00181 double pt = TMath::Sqrt(innerTSOS_orig.freeState()->momentum().x()* 00182 innerTSOS_orig.freeState()->momentum().x()+ 00183 innerTSOS_orig.freeState()->momentum().y()* 00184 innerTSOS_orig.freeState()->momentum().y()); 00185 00186 PerigeeConversions myPerigeeConverter; 00187 PerigeeTrajectoryParameters myParam = myPerigeeConverter.ftsToPerigeeParameters(*innerTSOS_orig.freeState(), innerTSOS_orig.globalParameters().position(), pt); 00188 double aCurv = myParam.transverseCurvature(); 00189 double theta = myParam.theta(); 00190 double phi = myParam.phi(); 00191 double trans = myParam.transverseImpactParameter(); 00192 double longi = myParam.longitudinalImpactParameter(); 00193 00194 //Insert the values into the track 00195 00196 mTrack->setP(p, pt); 00197 mTrack->setPerigeeParameters(aCurv, theta, phi, trans, longi); 00198 std::vector<double> param; 00199 param.push_back(aCurv); param.push_back(phi); param.push_back(theta); param.push_back(trans); param.push_back(longi); param.push_back(pt); 00200 std::cout << "Values: " << pt << " " << p << " " << aCurv << " " << pt*aCurv << " " << p*aCurv << std::endl; 00201 //Loop over Associated segments 00202 for(std::vector<TrackingRecHit *>::iterator rechit = my4DTrack.begin(); rechit != my4DTrack.end(); ++rechit) { 00203 const GeomDet* geomDet = theTrackingGeometry->idToDet((*rechit)->geographicalId()); 00204 int id = (*rechit)->geographicalId().subdetId(); 00205 int station; 00206 if(id == 1) { 00207 DTChamberId mCham((*rechit)->geographicalId().rawId()); 00208 station = mCham.station(); 00209 } else { 00210 CSCDetId mCham((*rechit)->geographicalId().rawId()); 00211 station = mCham.station(); 00212 } 00213 00214 00215 //Otherwise the propagator could throw an exception 00216 const Plane* pDest = dynamic_cast<const Plane*>(&geomDet->surface()); 00217 const Cylinder* cDest = dynamic_cast<const Cylinder*>(&geomDet->surface()); 00218 if(pDest != 0 || cDest != 0) { 00219 00220 TrajectoryStateOnSurface destiny = thePropagator1->propagate(*(innerTSOS.freeState()), geomDet->surface()); 00221 if(!destiny.isValid() || !destiny.hasError()) { 00222 continue; 00223 } 00224 00225 if(verbosity > 1) { 00226 cout << "<MuonStandaloneAlgorithm> Segment: " << geomDet->toGlobal((*rechit)->localPosition()) << endl; 00227 cout << "<MuonStandaloneAlgorithm> Segment local: " << (*rechit)->localPosition() << endl; 00228 cout << "<MuonStandaloneAlgorithm> Predicted: " << destiny.freeState()->position() << endl; 00229 cout << "<MuonStandaloneAlgorithm> Predicted local: " << destiny.localPosition() << endl; 00230 } 00231 //Calculation of derivatives 00232 TMatrixD Jacobian(NDOFCoor, NDOFTrack); 00233 if(calculateJacobian(innerTSOS_orig, geomDet, param, &Jacobian) == false) continue; 00234 TMatrixD Error(NDOFCoor, NDOFCoor); 00235 calculateError(destiny.localError().matrix(), &Error); 00236 00237 PointForAlignment alignP; 00238 alignP.setPointForAlignment((*rechit)->geographicalId().rawId(), id, station, 00239 geomDet->toGlobal((*rechit)->localPosition()), 00240 geomDet->toGlobal(((RecSegment *)(*rechit))->localDirection()), 00241 (*rechit)->localPosition(), 00242 (*rechit)->localPositionError(), 00243 ((RecSegment *)(*rechit))->localDirection(), 00244 ((RecSegment *)(*rechit))->localDirectionError(), 00245 destiny.freeState()->position(), 00246 destiny.globalDirection(), 00247 destiny.localPosition(), 00248 destiny.localDirection(), 00249 Jacobian, Error); 00250 mTrack->insert(alignP); 00251 innerTSOS = destiny; 00252 } else { 00253 cout << "<MuonStandaloneAlgorithm> Exception in propagator catched" << endl; 00254 continue; 00255 } 00256 } 00257 mTrack->isValid(); 00258 if(mTrack->trackValid == true) { 00259 mTrack->CalculateMatrizes(); 00260 aliTracks->push_back(*mTrack); 00261 } 00262 } 00263 } 00264 event.put(aliTracks); 00265 delete thePropagator1; 00266 }
FreeTrajectoryState MuonStandaloneAlgorithm::produceFreeTrajectoryState | ( | TrajectoryStateOnSurface | state, | |
int | parameter, | |||
double | step, | |||
std::vector< double > | param | |||
) | [private] |
Definition at line 269 of file MuonStandaloneAlgorithm.cc.
References PerigeeConversions::chargeFromPerigee(), TrajectoryStateOnSurface::globalParameters(), GlobalTrajectoryParameters::magneticField(), PerigeeConversions::momentumFromPerigee(), phi, GlobalTrajectoryParameters::position(), PerigeeConversions::positionFromPerigee(), HLT_VtxMuL3::result, and theta.
Referenced by Derivative().
00269 { 00270 00271 double aCurv = param.at(0); 00272 double phi = param.at(1); 00273 double theta = param.at(2); 00274 double trans = param.at(3); 00275 double longi = param.at(4); 00276 double pt = param.at(5); 00277 00278 switch(parameter) { 00279 case 0: 00280 aCurv += (step*aCurv); 00281 break; 00282 case 1: 00283 phi += step; 00284 break; 00285 case 2: 00286 theta += step; 00287 break; 00288 case 3: 00289 trans += step; 00290 break; 00291 case 4: 00292 longi += step; 00293 break; 00294 default: 00295 break; 00296 } 00297 PerigeeTrajectoryParameters result(aCurv, theta, phi, trans, longi, true); 00298 PerigeeConversions myPerigeeConverter; 00299 GlobalTrajectoryParameters myGlobalParam(myPerigeeConverter.positionFromPerigee(result, state.globalParameters().position()), myPerigeeConverter.momentumFromPerigee(result, pt*(param.at(0)/aCurv), state.globalParameters().position()), myPerigeeConverter.chargeFromPerigee(result), &(state.globalParameters().magneticField())); 00300 00301 FreeTrajectoryState *myFree = new FreeTrajectoryState(myGlobalParam); 00302 00303 return *myFree; 00304 }
double MuonStandaloneAlgorithm::curvStep [private] |
Definition at line 84 of file MuonStandaloneAlgorithm.h.
Referenced by Derivative(), and MuonStandaloneAlgorithm().
double MuonStandaloneAlgorithm::longiStep [private] |
Definition at line 88 of file MuonStandaloneAlgorithm.h.
Referenced by Derivative(), and MuonStandaloneAlgorithm().
const int MuonStandaloneAlgorithm::NDOFAlign = 6 [static, private] |
Definition at line 93 of file MuonStandaloneAlgorithm.h.
const int MuonStandaloneAlgorithm::NDOFChamber = 4 [static, private] |
Definition at line 94 of file MuonStandaloneAlgorithm.h.
const int MuonStandaloneAlgorithm::NDOFCoor = 4 [static, private] |
Definition at line 95 of file MuonStandaloneAlgorithm.h.
Referenced by calculateError(), and produce().
const int MuonStandaloneAlgorithm::NDOFTrack = 5 [static, private] |
Definition at line 92 of file MuonStandaloneAlgorithm.h.
Referenced by calculateJacobian(), and produce().
double MuonStandaloneAlgorithm::phiStep [private] |
Definition at line 86 of file MuonStandaloneAlgorithm.h.
Referenced by Derivative(), and MuonStandaloneAlgorithm().
std::string MuonStandaloneAlgorithm::theRecHits2DLabelCSC [private] |
Definition at line 81 of file MuonStandaloneAlgorithm.h.
Referenced by MuonStandaloneAlgorithm(), and produce().
std::string MuonStandaloneAlgorithm::theRecHits4DLabelDT [private] |
Definition at line 80 of file MuonStandaloneAlgorithm.h.
Referenced by MuonStandaloneAlgorithm(), and produce().
std::string MuonStandaloneAlgorithm::theSeedCollectionLabel [private] |
Definition at line 82 of file MuonStandaloneAlgorithm.h.
Referenced by MuonStandaloneAlgorithm(), and produce().
Definition at line 77 of file MuonStandaloneAlgorithm.h.
Referenced by MuonStandaloneAlgorithm(), and produce().
double MuonStandaloneAlgorithm::thetaStep [private] |
Definition at line 85 of file MuonStandaloneAlgorithm.h.
Referenced by Derivative(), and MuonStandaloneAlgorithm().
double MuonStandaloneAlgorithm::transStep [private] |
Definition at line 87 of file MuonStandaloneAlgorithm.h.
Referenced by Derivative(), and MuonStandaloneAlgorithm().
int MuonStandaloneAlgorithm::verbosity [private] |
Definition at line 83 of file MuonStandaloneAlgorithm.h.
Referenced by MuonStandaloneAlgorithm(), and produce().