TrackBuildingAnalyzer

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
#ifndef TrackBuildingAnalyzer_H
#define TrackBuildingAnalyzer_H
// -*- C++ -*-
//
//
/**\class TrackBuildingAnalyzer TrackBuildingAnalyzer.cc 
Monitoring source for general quantities related to tracks.
*/
// Original Author:  Ryan Kelley
//         Created:  Sat 28 13;30:00 CEST 2009
//

// system includes
#include <memory>
#include <fstream>

// user includes
#include "DQMServices/Core/interface/DQMStore.h"
#include "DataFormats/Candidate/interface/CandidateFwd.h"
#include "DataFormats/TrackCandidate/interface/TrackCandidate.h"
#include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h"
#include "DataFormats/TrackReco/interface/SeedStopInfo.h"
#include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "RecoTracker/TkTrackingRegions/interface/TrackingRegion.h"
#include "RecoTracker/TkTrackingRegions/interface/TrackingRegionsSeedingLayerSets.h"
#include "TrackingTools/Records/interface/TransientTrackRecord.h"
#include "TrackingTools/TransientTrack/interface/TransientTrack.h"
#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
#include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHitBuilder.h"

class TrackBuildingAnalyzer {
public:
  typedef dqm::legacy::DQMStore DQMStore;
  typedef dqm::legacy::MonitorElement MonitorElement;
  using MVACollection = std::vector<float>;
  using QualityMaskCollection = std::vector<unsigned char>;

  TrackBuildingAnalyzer(const edm::ParameterSet&);
  ~TrackBuildingAnalyzer() = default;
  void initHisto(DQMStore::IBooker& ibooker, const edm::ParameterSet&);
  void analyze(const edm::Event& iEvent,
               const edm::EventSetup& iSetup,
               const TrajectorySeed& seed,
               const SeedStopInfo& stopInfo,
               const reco::BeamSpot& bs,
               const MagneticField& theMF,
               const TransientTrackingRecHitBuilder& theTTRHBuilder);
  void analyze(const edm::Event& iEvent,
               const edm::EventSetup& iSetup,
               const TrackCandidate& candidate,
               const reco::BeamSpot& bs,
               const MagneticField& theMF,
               const TransientTrackingRecHitBuilder& theTTRHBuilder);
  void analyze(const edm::View<reco::Track>& trackCollection,
               const std::vector<const MVACollection*>& mvaCollections,
               const std::vector<const QualityMaskCollection*>& qualityMaskCollections);
  void analyze(const reco::CandidateView& regionCandidates);
  void analyze(const std::vector<std::unique_ptr<TrackingRegion>>& regions);
  void analyze(const TrackingRegionsSeedingLayerSets& regions);

private:
  void fillHistos(const edm::EventSetup& iSetup, const reco::Track& track, std::string sname);
  void bookHistos(std::string sname, DQMStore::IBooker& ibooker);

  template <typename T>
  void analyzeRegions(const T& regions);

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

  // Regions covered by tracking regions
  MonitorElement* TrackingRegionEta = nullptr;
  MonitorElement* TrackingRegionPhi = nullptr;
  MonitorElement* TrackingRegionPhiVsEta = nullptr;
  double etaBinWidth = 0.;
  double phiBinWidth = 0.;
  // Candidates used for tracking regions
  MonitorElement* TrackingRegionCandidatePt = nullptr;
  MonitorElement* TrackingRegionCandidateEta = nullptr;
  MonitorElement* TrackingRegionCandidatePhi = nullptr;
  MonitorElement* TrackingRegionCandidatePhiVsEta = nullptr;

  // Track Seeds
  MonitorElement* SeedPt = nullptr;
  MonitorElement* SeedEta = nullptr;
  MonitorElement* SeedPhi = nullptr;
  MonitorElement* SeedPhiVsEta = nullptr;
  MonitorElement* SeedTheta = nullptr;
  MonitorElement* SeedQ = nullptr;
  MonitorElement* SeedDxy = nullptr;
  MonitorElement* SeedDz = nullptr;
  MonitorElement* NumberOfRecHitsPerSeed = nullptr;
  MonitorElement* NumberOfRecHitsPerSeedVsPhiProfile = nullptr;
  MonitorElement* NumberOfRecHitsPerSeedVsEtaProfile = nullptr;

  MonitorElement* seedStoppingSource = nullptr;
  MonitorElement* seedStoppingSourceVsPhi = nullptr;
  MonitorElement* seedStoppingSourceVsEta = nullptr;

  MonitorElement* numberOfTrajCandsPerSeed = nullptr;
  MonitorElement* numberOfTrajCandsPerSeedVsPhi = nullptr;
  MonitorElement* numberOfTrajCandsPerSeedVsEta = nullptr;

  MonitorElement* seedStoppingSourceVsNumberOfTrajCandsPerSeed = nullptr;

  // Track Candidate
  MonitorElement* TrackCandPt = nullptr;
  MonitorElement* TrackCandEta = nullptr;
  MonitorElement* TrackCandPhi = nullptr;
  MonitorElement* TrackCandPhiVsEta = nullptr;
  MonitorElement* TrackCandTheta = nullptr;
  MonitorElement* TrackCandQ = nullptr;
  MonitorElement* TrackCandDxy = nullptr;
  MonitorElement* TrackCandDz = nullptr;
  MonitorElement* NumberOfRecHitsPerTrackCand = nullptr;
  MonitorElement* NumberOfRecHitsPerTrackCandVsPhiProfile = nullptr;
  MonitorElement* NumberOfRecHitsPerTrackCandVsEtaProfile = nullptr;

  MonitorElement* stoppingSource = nullptr;
  MonitorElement* stoppingSourceVSeta = nullptr;
  MonitorElement* stoppingSourceVSphi = nullptr;

  std::vector<MonitorElement*> trackMVAs;
  std::vector<MonitorElement*> trackMVAsHP;
  std::vector<MonitorElement*> trackMVAsVsPtProfile;
  std::vector<MonitorElement*> trackMVAsHPVsPtProfile;
  std::vector<MonitorElement*> trackMVAsVsEtaProfile;
  std::vector<MonitorElement*> trackMVAsHPVsEtaProfile;

  std::string histname;  //for naming the histograms according to algorithm used

  //to disable some plots
  const bool doAllPlots;
  const bool doAllSeedPlots;
  const bool doTCPlots;
  const bool doAllTCPlots;
  const bool doPT;
  const bool doETA;
  const bool doPHI;
  const bool doPHIVsETA;
  const bool doTheta;
  const bool doQ;
  const bool doDxy;
  const bool doDz;
  const bool doNRecHits;
  const bool doProfPHI;
  const bool doProfETA;
  const bool doStopSource;
  const bool doMVAPlots;
  const bool doRegionPlots;
  const bool doRegionCandidatePlots;
};
#endif