CSCOverlapsAlignmentAlgorithm

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
// -*- C++ -*-
//
// Package:    MuonAlignmentAlgorithms
// Class:      CSCOverlapsAlignmentAlgorithm
//
/**\class CSCOverlapsAlignmentAlgorithm CSCOverlapsAlignmentAlgorithm.cc Alignment/CSCOverlapsAlignmentAlgorithm/interface/CSCOverlapsAlignmentAlgorithm.h

 Description: <one line class summary>

 Implementation:
     <Notes on implementation>
*/
//
// Original Author:  Jim Pivarski,,,
//         Created:  Tue Oct  7 14:56:49 CDT 2008
// $Id: CSCOverlapsAlignmentAlgorithm.h,v 1.6 2010/09/10 11:56:11 mussgill Exp $
//
//

#include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentAlgorithmBase.h"
#include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentParameterSelector.h"
#include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentParameterStore.h"
#include "Alignment/CommonAlignment/interface/Alignable.h"
#include "Alignment/CommonAlignment/interface/AlignableNavigator.h"
#include "Alignment/CommonAlignment/interface/AlignableObjectId.h"
#include "Alignment/CommonAlignment/interface/AlignmentParameters.h"
#include "Alignment/MuonAlignment/interface/AlignableMuon.h"
#include "Alignment/TrackerAlignment/interface/AlignableTracker.h"
#include "DataFormats/CLHEP/interface/AlgebraicObjects.h"
#include "DataFormats/GeometrySurface/interface/LocalError.h"
#include "DataFormats/MuonDetId/interface/CSCDetId.h"
#include "DataFormats/MuonDetId/interface/MuonSubdetId.h"
#include "DataFormats/TrackReco/interface/Track.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "Geometry/CSCGeometry/interface/CSCGeometry.h"
#include "Geometry/Records/interface/MuonGeometryRecord.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "CommonTools/UtilAlgos/interface/TFileService.h"
#include "TrackingTools/PatternTools/interface/Trajectory.h"
#include "TrackingTools/TrackRefitter/interface/TrackTransformer.h"
#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
#include "TrackingTools/Records/interface/TransientTrackRecord.h"
#include "TrackingTools/TransientTrack/interface/TransientTrack.h"
#include "TrackingTools/GeomPropagators/interface/Propagator.h"
#include "TrackingTools/Records/interface/TrackingComponentsRecord.h"

#include "Alignment/MuonAlignmentAlgorithms/interface/CSCPairConstraint.h"
#include "Alignment/MuonAlignmentAlgorithms/plugins/CSCChamberFitter.h"
#include "Alignment/MuonAlignmentAlgorithms/plugins/CSCAlignmentCorrections.h"

#include "TH1F.h"
#include "TH2F.h"
#include "TProfile.h"
#include "TStyle.h"

#include <sstream>
#include <map>

class CSCOverlapsAlignmentAlgorithm : public AlignmentAlgorithmBase {
public:
  CSCOverlapsAlignmentAlgorithm(const edm::ParameterSet &iConfig, edm::ConsumesCollector &);
  ~CSCOverlapsAlignmentAlgorithm() override;

  void initialize(const edm::EventSetup &iSetup,
                  AlignableTracker *alignableTracker,
                  AlignableMuon *alignableMuon,
                  AlignableExtras *alignableExtras,
                  AlignmentParameterStore *alignmentParameterStore) override;
  void run(const edm::EventSetup &iSetup, const EventInfo &eventInfo) override;

  void terminate(const edm::EventSetup &iSetup) override;

  // having to make read-only accessors for all of these would be ridiculous, so they're public
  TH1F *m_hitsPerChamber;

  TProfile *m_fiducial_ME11;
  TProfile *m_fiducial_ME12;
  TProfile *m_fiducial_MEx1;
  TProfile *m_fiducial_MEx2;

  TH1F *m_slope;
  TH1F *m_slope_MEp4;
  TH1F *m_slope_MEp3;
  TH1F *m_slope_MEp2;
  TH1F *m_slope_MEp1;
  TH1F *m_slope_MEm1;
  TH1F *m_slope_MEm2;
  TH1F *m_slope_MEm3;
  TH1F *m_slope_MEm4;

  TH1F *m_slopeResiduals;
  TH1F *m_slopeResiduals_weighted;
  TH1F *m_slopeResiduals_normalized;
  TH1F *m_offsetResiduals;
  TH1F *m_offsetResiduals_weighted;
  TH1F *m_offsetResiduals_normalized;

  TH1F *m_drdz;

  TH2F *m_occupancy;
  TH2F *m_XYpos_mep1;
  TH2F *m_XYpos_mep2;
  TH2F *m_XYpos_mep3;
  TH2F *m_XYpos_mep4;
  TH2F *m_XYpos_mem1;
  TH2F *m_XYpos_mem2;
  TH2F *m_XYpos_mem3;
  TH2F *m_XYpos_mem4;
  TH2F *m_RPhipos_mep1;
  TH2F *m_RPhipos_mep2;
  TH2F *m_RPhipos_mep3;
  TH2F *m_RPhipos_mep4;
  TH2F *m_RPhipos_mem1;
  TH2F *m_RPhipos_mem2;
  TH2F *m_RPhipos_mem3;
  TH2F *m_RPhipos_mem4;

  int m_mode;
  int m_minHitsPerChamber;
  double m_maxdrdz;
  bool m_fiducial;
  bool m_useHitWeights;
  bool m_slopeFromTrackRefit;
  int m_minStationsInTrackRefits;
  double m_truncateSlopeResid;
  double m_truncateOffsetResid;
  bool m_combineME11;
  bool m_useTrackWeights;
  bool m_errorFromRMS;
  int m_minTracksPerOverlap;
  bool m_makeHistograms;

private:
  const edm::ESGetToken<CSCGeometry, MuonGeometryRecord> m_cscGeometryToken;
  const edm::ESGetToken<Propagator, TrackingComponentsRecord> m_propToken;
  const edm::ESGetToken<TransientTrackBuilder, TransientTrackRecord> m_tthbToken;

  std::string m_mode_string;
  std::string m_reportFileName;
  double m_minP;
  double m_maxRedChi2;
  std::string m_writeTemporaryFile;
  std::vector<std::string> m_readTemporaryFiles;
  bool m_doAlignment;

  AlignmentParameterStore *m_alignmentParameterStore;
  align::Alignables m_alignables;
  AlignableNavigator *m_alignableNavigator;
  std::vector<CSCChamberFitter> m_fitters;
  std::vector<CSCPairResidualsConstraint *> m_residualsConstraints;
  std::map<std::pair<CSCDetId, CSCDetId>, CSCPairResidualsConstraint *> m_quickChamberLookup;

  TrackTransformer *m_trackTransformer;
  const Propagator *m_propagatorPointer;

  TH1F *m_histP10;
  TH1F *m_histP100;
  TH1F *m_histP1000;
};