HitResol

Macros

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 162 163
#ifndef CalibTracker_SiStripHitResolution_HitResol_H
#define CalibTracker_SiStripHitResolution_HitResol_H

// system includes
#include <vector>

// user includes
#include "CalibFormats/SiStripObjects/interface/SiStripQuality.h"
#include "CalibTracker/Records/interface/SiStripQualityRcd.h"
#include "DataFormats/Common/interface/Handle.h"
#include "DataFormats/Scalers/interface/LumiScalers.h"
#include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
#include "MagneticField/Engine/interface/MagneticField.h"
#include "RecoLocalTracker/ClusterParameterEstimator/interface/StripClusterParameterEstimator.h"
#include "RecoTracker/Record/interface/CkfComponentsRecord.h"
#include "TrackingTools/GeomPropagators/interface/AnalyticalPropagator.h"
#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
#include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHitBuilder.h"

// ROOT includes
#include "TTree.h"
#include "TROOT.h"
#include "TH1F.h"
#include "TH2F.h"

class TrackerTopology;

class HitResol : public edm::one::EDAnalyzer<edm::one::SharedResources> {
public:
  explicit HitResol(const edm::ParameterSet& conf);
  ~HitResol() override = default;
  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
  double checkConsistency(const StripClusterParameterEstimator::LocalValues& parameters, double xx, double xerr);
  void getSimHitRes(const GeomDetUnit* det,
                    const LocalVector& trackdirection,
                    const TrackingRecHit& recHit,
                    float& trackWidth,
                    float* pitch,
                    LocalVector& drift);
  double getSimpleRes(const TrajectoryMeasurement* traj1);
  bool getPairParameters(const MagneticField* magField_,
                         AnalyticalPropagator& propagator,
                         const TrajectoryMeasurement* traj1,
                         const TrajectoryMeasurement* traj2,
                         float& pairPath,
                         float& hitDX,
                         float& trackDX,
                         float& trackDXE,
                         float& trackParamX,
                         float& trackParamY,
                         float& trackParamDXDZ,
                         float& trackParamDYDZ,
                         float& trackParamXE,
                         float& trackParamYE,
                         float& trackParamDXDZE,
                         float& trackParamDYDZE);
  typedef std::vector<Trajectory> TrajectoryCollection;

private:
  void beginJob() override;
  void endJob() override;
  void analyze(const edm::Event& e, const edm::EventSetup& c) override;

  // ----------member data ---------------------------

  // ED tokens
  const edm::EDGetTokenT<LumiScalersCollection> scalerToken_;
  const edm::EDGetTokenT<reco::TrackCollection> combinatorialTracks_token_;
  const edm::EDGetTokenT<std::vector<Trajectory> > tjToken_;
  const edm::EDGetTokenT<reco::TrackCollection> tkToken_;

  // ES tokens
  const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> topoToken_;
  const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geomToken_;
  const edm::ESGetToken<StripClusterParameterEstimator, TkStripCPERecord> cpeToken_;
  const edm::ESGetToken<SiStripQuality, SiStripQualityRcd> siStripQualityToken_;
  const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> magFieldToken_;

  // configuration parameters
  const bool addLumi_;
  const bool DEBUG_;
  const bool cutOnTracks_;
  const double momentumCut_;
  const int compSettings_;
  const unsigned int usePairsOnly_;
  const unsigned int layers_;
  const unsigned int trackMultiplicityCut_;

  // output file
  TTree* reso;
  TTree* treso;
  std::map<TString, TH2F*> histos2d_;

  // conversion
  static constexpr float cmToUm = 10000.f;

  // counters
  int events, EventTrackCKF;

  // Tree declarations
  // Hit Resolution Ntuple Content
  float mymom;
  int numHits;
  int NumberOf_tracks;
  float ProbTrackChi2;
  float StripCPE1_smp_pos_error;
  float StripCPE2_smp_pos_error;
  float StripErrorSquared1;
  float StripErrorSquared2;
  float uerr2;
  float uerr2_2;
  unsigned int clusterWidth;
  unsigned int clusterWidth_2;
  unsigned int clusterCharge;
  unsigned int clusterCharge_2;
  unsigned int iidd1;
  unsigned int iidd2;
  unsigned int pairsOnly;
  float pairPath;
  float mypitch1;
  float mypitch2;
  float expWidth;
  float expWidth_2;
  float driftAlpha;
  float driftAlpha_2;
  float thickness;
  float thickness_2;
  float trackWidth;
  float trackWidth_2;
  float atEdge;
  float atEdge_2;
  float simpleRes;
  float hitDX;
  float trackDX;
  float trackDXE;
  float trackParamX;
  float trackParamY;
  float trackParamXE;
  float trackParamYE;
  float trackParamDXDZ;
  float trackParamDYDZ;
  float trackParamDXDZE;
  float trackParamDYDZE;
  float track_momentum;
  float track_pt;
  float track_eta;
  float track_width;
  float track_phi;
  float track_trackChi2;
  float N1;
  float N2;
  float N1uProj;
  float N2uProj;
  int Nstrips;
  int Nstrips_2;
};

#endif