00001
00013 #ifndef Alignment_MuonStandaloneAlgorithm_MuonStandaloneAlgorithm_H
00014 #define Alignment_MuonStandaloneAlgorithm_MuonStandaloneAlgorithm_H
00015
00016
00017
00018 #include "FWCore/Framework/interface/EDProducer.h"
00019
00020 #include "DataFormats/DTRecHit/interface/DTRecSegment4DCollection.h"
00021 #include "DataFormats/CSCRecHit/interface/CSCSegmentCollection.h"
00022 #include "DataFormats/TrackReco/interface/Track.h"
00023 #include "Alignment/MuonStandaloneAlgorithm/interface/TrackForAlignment.h"
00024 #include "RecoMuon/TrackingTools/interface/MuonServiceProxy.h"
00025 #include "RecoMuon/TrackingTools/interface/MuonUpdatorAtVertex.h"
00026 #include "FWCore/Framework/interface/ESHandle.h"
00027 #include "FWCore/Framework/interface/Event.h"
00028 #include "FWCore/ServiceRegistry/interface/Service.h"
00029 #include "TMatrixD.h"
00030 #include "DataFormats/CLHEP/interface/AlgebraicObjects.h"
00031
00032
00033 namespace edm {
00034 class ParameterSet;
00035 class Event;
00036 class EventSetup;
00037 class InputTag;
00038 }
00039
00040
00041 using namespace edm;
00042
00043
00044 class Propagator;
00045 class TrajectoryStateOnSurface;
00046 class FreeTrajectoryState;
00047
00048 typedef std::vector< std::vector<int> > intDVector;
00049 typedef std::vector<TrackingRecHit *> RecHitVector;
00050
00051 class MuonStandaloneAlgorithm: public edm::EDProducer {
00052 public:
00054 MuonStandaloneAlgorithm(const edm::ParameterSet& pset);
00055
00057 virtual ~MuonStandaloneAlgorithm();
00058
00059
00060
00061 virtual void produce(edm::Event & event, const edm::EventSetup& eventSetup);
00062
00063 protected:
00064
00065 private:
00066
00067 bool Derivative(TrajectoryStateOnSurface , const GeomDet *, int, std::vector<double>, TMatrixD *);
00068
00069 bool calculateJacobian(TrajectoryStateOnSurface, const GeomDet *, std::vector<double>, TMatrixD *);
00070
00071 void calculateError(AlgebraicSymMatrix55, TMatrixD *);
00072
00073 RecHitVector doMatching(const reco::Track &, edm::Handle<DTRecSegment4DCollection> &, edm::Handle<CSCSegmentCollection> &, intDVector *, intDVector *, edm::ESHandle<GlobalTrackingGeometry> &);
00074
00075 FreeTrajectoryState produceFreeTrajectoryState(TrajectoryStateOnSurface, int, double, std::vector<double> );
00076
00077 edm::InputTag theSTAMuonTag;
00078
00079 std::string theSeedCollectionLabel;
00080 std::string theRecHits4DLabelDT;
00081 std::string theRecHits2DLabelCSC;
00082 int theSelectorOfFirstPoint;
00083 int verbosity;
00084 double curvStep;
00085 double thetaStep;
00086 double phiStep;
00087 double transStep;
00088 double longiStep;
00089
00090 Propagator *thePropagator1;
00091
00092 const static int NDOFTrack = 5;
00093 const static int NDOFAlign = 6;
00094 const static int NDOFChamber = 4;
00095 const static int NDOFCoor = 4;
00096
00097
00098 };
00099 #endif
00100
00101
00102
00103