00001 // -*- C++ -*- 00002 // 00003 // Package: MuonAlignmentAlgorithms 00004 // Class: CSCOverlapsAlignmentAlgorithm 00005 // 00013 // 00014 // Original Author: Jim Pivarski,,, 00015 // Created: Tue Oct 7 14:56:49 CDT 2008 00016 // $Id: CSCOverlapsAlignmentAlgorithm.h,v 1.6 2010/09/10 11:56:11 mussgill Exp $ 00017 // 00018 // 00019 00020 #include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentAlgorithmBase.h" 00021 #include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentParameterSelector.h" 00022 #include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentParameterStore.h" 00023 #include "Alignment/CommonAlignment/interface/Alignable.h" 00024 #include "Alignment/CommonAlignment/interface/AlignableNavigator.h" 00025 #include "Alignment/CommonAlignment/interface/AlignableObjectId.h" 00026 #include "Alignment/CommonAlignment/interface/AlignmentParameters.h" 00027 #include "Alignment/MuonAlignment/interface/AlignableMuon.h" 00028 #include "Alignment/TrackerAlignment/interface/AlignableTracker.h" 00029 #include "DataFormats/CLHEP/interface/AlgebraicObjects.h" 00030 #include "DataFormats/GeometrySurface/interface/LocalError.h" 00031 #include "DataFormats/MuonDetId/interface/CSCDetId.h" 00032 #include "DataFormats/MuonDetId/interface/MuonSubdetId.h" 00033 #include "DataFormats/TrackReco/interface/Track.h" 00034 #include "FWCore/Framework/interface/ESHandle.h" 00035 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00036 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00037 #include "Geometry/CSCGeometry/interface/CSCGeometry.h" 00038 #include "Geometry/Records/interface/MuonGeometryRecord.h" 00039 #include "FWCore/ServiceRegistry/interface/Service.h" 00040 #include "CommonTools/UtilAlgos/interface/TFileService.h" 00041 #include "TrackingTools/PatternTools/interface/Trajectory.h" 00042 #include "TrackingTools/TrackRefitter/interface/TrackTransformer.h" 00043 #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" 00044 #include "TrackingTools/Records/interface/TransientTrackRecord.h" 00045 #include "TrackingTools/TransientTrack/interface/TransientTrack.h" 00046 #include "TrackingTools/GeomPropagators/interface/Propagator.h" 00047 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h" 00048 00049 #include "Alignment/MuonAlignmentAlgorithms/interface/CSCPairConstraint.h" 00050 #include "Alignment/MuonAlignmentAlgorithms/plugins/CSCChamberFitter.h" 00051 #include "Alignment/MuonAlignmentAlgorithms/plugins/CSCAlignmentCorrections.h" 00052 00053 #include "TH1F.h" 00054 #include "TH2F.h" 00055 #include "TProfile.h" 00056 #include "TStyle.h" 00057 00058 #include <sstream> 00059 #include <map> 00060 00061 class CSCOverlapsAlignmentAlgorithm : public AlignmentAlgorithmBase { 00062 public: 00063 CSCOverlapsAlignmentAlgorithm(const edm::ParameterSet& iConfig); 00064 ~CSCOverlapsAlignmentAlgorithm(); 00065 00066 void initialize(const edm::EventSetup& iSetup, AlignableTracker* alignableTracker, AlignableMuon* alignableMuon, 00067 AlignableExtras* alignableExtras, AlignmentParameterStore* alignmentParameterStore); 00068 void run(const edm::EventSetup& iSetup, const EventInfo &eventInfo); 00069 00070 void terminate(); 00071 00072 // having to make read-only accessors for all of these would be ridiculous, so they're public 00073 TH1F *m_hitsPerChamber; 00074 00075 TProfile *m_fiducial_ME11; 00076 TProfile *m_fiducial_ME12; 00077 TProfile *m_fiducial_MEx1; 00078 TProfile *m_fiducial_MEx2; 00079 00080 TH1F *m_slope; 00081 TH1F *m_slope_MEp4; 00082 TH1F *m_slope_MEp3; 00083 TH1F *m_slope_MEp2; 00084 TH1F *m_slope_MEp1; 00085 TH1F *m_slope_MEm1; 00086 TH1F *m_slope_MEm2; 00087 TH1F *m_slope_MEm3; 00088 TH1F *m_slope_MEm4; 00089 00090 TH1F *m_slopeResiduals; 00091 TH1F *m_slopeResiduals_weighted; 00092 TH1F *m_slopeResiduals_normalized; 00093 TH1F *m_offsetResiduals; 00094 TH1F *m_offsetResiduals_weighted; 00095 TH1F *m_offsetResiduals_normalized; 00096 00097 TH1F *m_drdz; 00098 00099 TH2F *m_occupancy; 00100 TH2F *m_XYpos_mep1; 00101 TH2F *m_XYpos_mep2; 00102 TH2F *m_XYpos_mep3; 00103 TH2F *m_XYpos_mep4; 00104 TH2F *m_XYpos_mem1; 00105 TH2F *m_XYpos_mem2; 00106 TH2F *m_XYpos_mem3; 00107 TH2F *m_XYpos_mem4; 00108 TH2F *m_RPhipos_mep1; 00109 TH2F *m_RPhipos_mep2; 00110 TH2F *m_RPhipos_mep3; 00111 TH2F *m_RPhipos_mep4; 00112 TH2F *m_RPhipos_mem1; 00113 TH2F *m_RPhipos_mem2; 00114 TH2F *m_RPhipos_mem3; 00115 TH2F *m_RPhipos_mem4; 00116 00117 int m_mode; 00118 int m_minHitsPerChamber; 00119 double m_maxdrdz; 00120 bool m_fiducial; 00121 bool m_useHitWeights; 00122 bool m_slopeFromTrackRefit; 00123 int m_minStationsInTrackRefits; 00124 double m_truncateSlopeResid; 00125 double m_truncateOffsetResid; 00126 bool m_combineME11; 00127 bool m_useTrackWeights; 00128 bool m_errorFromRMS; 00129 int m_minTracksPerOverlap; 00130 bool m_makeHistograms; 00131 00132 private: 00133 std::string m_mode_string; 00134 std::string m_reportFileName; 00135 double m_minP; 00136 double m_maxRedChi2; 00137 std::string m_writeTemporaryFile; 00138 std::vector<std::string> m_readTemporaryFiles; 00139 bool m_doAlignment; 00140 00141 AlignmentParameterStore* m_alignmentParameterStore; 00142 std::vector<Alignable*> m_alignables; 00143 AlignableNavigator *m_alignableNavigator; 00144 std::vector<CSCChamberFitter> m_fitters; 00145 std::vector<CSCPairResidualsConstraint*> m_residualsConstraints; 00146 std::map<std::pair<CSCDetId,CSCDetId>,CSCPairResidualsConstraint*> m_quickChamberLookup; 00147 00148 TrackTransformer *m_trackTransformer; 00149 std::string m_propagatorName; 00150 const Propagator *m_propagatorPointer; 00151 00152 TH1F *m_histP10; 00153 TH1F *m_histP100; 00154 TH1F *m_histP1000; 00155 };