File indexing completed on 2024-04-06 12:33:04
0001 #ifndef TkConvValidator_H
0002 #define TkConvValidator_H
0003 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0004 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
0005 #include "Geometry/CaloTopology/interface/CaloTopology.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0007 #include "FWCore/Framework/interface/Event.h"
0008 #include "FWCore/Framework/interface/EventSetup.h"
0009 #include "FWCore/Framework/interface/ESHandle.h"
0010 #include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruthFinder.h"
0011 #include "SimDataFormats/Associations/interface/TrackToTrackingParticleAssociator.h"
0012 #include "MagneticField/Engine/interface/MagneticField.h"
0013 #include "DataFormats/Common/interface/RefToBaseVector.h"
0014 #include "DataFormats/Common/interface/RefVector.h"
0015 #include "DataFormats/VertexReco/interface/VertexFwd.h"
0016 #include "DataFormats/VertexReco/interface/Vertex.h"
0017 #include "DataFormats/EgammaCandidates/interface/ConversionFwd.h"
0018 #include "DataFormats/EgammaCandidates/interface/PhotonFwd.h"
0019 #include "DataFormats/JetReco/interface/GenJetCollection.h"
0020 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h"
0021 #include "Geometry/Records/interface/CaloGeometryRecord.h"
0022 #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
0023 #include "TrackingTools/Records/interface/TransientTrackRecord.h"
0024
0025
0026
0027 #include "DQMServices/Core/interface/DQMStore.h"
0028 #include "FWCore/ServiceRegistry/interface/Service.h"
0029 #include "DQMServices/Core/interface/DQMOneEDAnalyzer.h"
0030
0031
0032 #include <map>
0033 #include <vector>
0034
0035
0036 class TFile;
0037 class TH1F;
0038 class TH2F;
0039 class TProfile;
0040 class TTree;
0041 class SimVertex;
0042 class SimTrack;
0043
0044
0045
0046
0047
0048
0049
0050
0051 class TkConvValidator : public DQMOneEDAnalyzer<> {
0052 public:
0053
0054 explicit TkConvValidator(const edm::ParameterSet&);
0055 ~TkConvValidator() override;
0056
0057 void analyze(const edm::Event&, const edm::EventSetup&) override;
0058 void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override;
0059 void dqmBeginRun(edm::Run const& r, edm::EventSetup const& theEventSetup) override;
0060 void dqmEndRun(edm::Run const& r, edm::EventSetup const& es) override;
0061 void endJob() override;
0062
0063 private:
0064
0065
0066 float phiNormalization(float& a);
0067 float etaTransformation(float a, float b);
0068 math::XYZVector recalculateMomentumAtFittedVertex(const MagneticField& mf,
0069 const TrackerGeometry& trackerGeom,
0070 const edm::RefToBase<reco::Track>& tk,
0071 const reco::Vertex& vtx);
0072
0073 std::string fName_;
0074 DQMStore* dbe_;
0075 edm::ESHandle<MagneticField> theMF_;
0076
0077 int verbosity_;
0078 int nEvt_;
0079 int nEntry_;
0080 int nSimConv_[2];
0081 int nMatched_;
0082 int nRecConv_;
0083 int nRecConvAss_;
0084 int nRecConvAssWithEcal_;
0085
0086 int nInvalidPCA_;
0087
0088 edm::ParameterSet parameters_;
0089 edm::ESHandle<CaloGeometry> theCaloGeom_;
0090 edm::ESHandle<CaloTopology> theCaloTopo_;
0091
0092 std::string conversionCollectionProducer_;
0093 std::string conversionCollection_;
0094 edm::EDGetTokenT<reco::ConversionCollection> conversionCollectionPr_Token_;
0095
0096 std::string conversionTrackProducer_;
0097
0098 std::string photonCollectionProducer_;
0099 std::string photonCollection_;
0100 edm::EDGetTokenT<reco::PhotonCollection> photonCollectionPr_Token_;
0101
0102 edm::EDGetTokenT<reco::VertexCollection> offline_pvToken_;
0103 edm::EDGetTokenT<reco::BeamSpot> beamspotToken_;
0104 edm::EDGetTokenT<edm::SimTrackContainer> g4_simTk_Token_;
0105 edm::EDGetTokenT<edm::SimVertexContainer> g4_simVtx_Token_;
0106 edm::EDGetTokenT<TrackingParticleRefVector> tpSelForEff_Token_;
0107 edm::EDGetTokenT<TrackingParticleRefVector> tpSelForFake_Token_;
0108 edm::EDGetTokenT<edm::HepMCProduct> hepMC_Token_;
0109 edm::EDGetTokenT<reco::GenJetCollection> genjets_Token_;
0110 edm::EDGetTokenT<reco::TrackToTrackingParticleAssociator> trackAssociator_Token_;
0111
0112 const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> magneticFieldToken_;
0113 const edm::ESGetToken<CaloGeometry, CaloGeometryRecord> caloGeometryToken_;
0114 const edm::ESGetToken<TransientTrackBuilder, TransientTrackRecord> transientTrackBuilderToken_;
0115 const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> trackerGeometryToken_;
0116
0117 std::string dqmpath_;
0118
0119 edm::InputTag label_tp_;
0120
0121 PhotonMCTruthFinder* thePhotonMCTruthFinder_;
0122
0123 bool isRunCentrally_;
0124
0125 double minPhoEtCut_;
0126 double trkIsolExtRadius_;
0127 double trkIsolInnRadius_;
0128 double trkPtLow_;
0129 double lip_;
0130 double ecalIsolRadius_;
0131 double bcEtLow_;
0132 double hcalIsolExtRadius_;
0133 double hcalIsolInnRadius_;
0134 double hcalHitEtLow_;
0135 int numOfTracksInCone_;
0136 double trkPtSumCut_;
0137 double ecalEtSumCut_;
0138 double hcalEtSumCut_;
0139 bool dCotCutOn_;
0140 double dCotCutValue_;
0141 double dCotHardCutValue_;
0142 bool generalTracksOnly_;
0143 bool arbitratedMerged_;
0144 bool arbitratedEcalSeeded_;
0145 bool ecalalgotracks_;
0146 bool highPurity_;
0147 double minProb_;
0148 uint maxHitsBeforeVtx_;
0149 double minLxy_;
0150
0151
0152 double mcPhi_;
0153 double mcEta_;
0154 double mcConvPt_;
0155 double mcConvR_;
0156 double mcConvZ_;
0157 double mcConvY_;
0158 double mcConvX_;
0159 double mcConvPhi_;
0160 double mcConvEta_;
0161 double mcJetEta_;
0162 double mcJetPhi_;
0163
0164 edm::RefVector<TrackingParticleCollection> theConvTP_;
0165
0166
0167 double minPhoPtForEffic;
0168 double maxPhoEtaForEffic;
0169 double maxPhoZForEffic;
0170 double maxPhoRForEffic;
0171 double minPhoPtForPurity;
0172 double maxPhoEtaForPurity;
0173 double maxPhoZForPurity;
0174 double maxPhoRForPurity;
0175
0176 double simMinPt_;
0177 double simMaxPt_;
0178
0179
0180 double recMinPt_;
0181 double recMaxPt_;
0182
0183
0184
0185 MonitorElement* h_nSimConv_[2];
0186 MonitorElement* h_SimConvEtaPix_[2];
0187
0188 MonitorElement* h_simTkPt_;
0189 MonitorElement* h_simTkEta_;
0190
0191 MonitorElement* h_simConvVtxRvsZ_[4];
0192 MonitorElement* h_simConvVtxYvsX_;
0193
0194
0195 MonitorElement* h_AllSimConv_[5];
0196 MonitorElement* h_VisSimConv_[6];
0197 MonitorElement* h_VisSimConvLarge_;
0198
0199 MonitorElement* h_SimConvOneTracks_[5];
0200 MonitorElement* h_SimConvOneMTracks_[5];
0201 MonitorElement* h_SimConvTwoTracks_[5];
0202 MonitorElement* h_SimConvTwoMTracks_[5];
0203 MonitorElement* h_SimConvTwoMTracksAndVtxPGT0_[5];
0204 MonitorElement* h_SimConvTwoMTracksAndVtxPGT0005_[5];
0205 MonitorElement* h_SimConvTwoMTracksAndVtxPGT01_[5];
0206
0207 MonitorElement* h_SimRecConvOneTracks_[5];
0208 MonitorElement* h_SimRecConvOneMTracks_[5];
0209 MonitorElement* h_SimRecConvTwoTracks_[5];
0210 MonitorElement* h_SimRecConvTwoMTracks_[5];
0211
0212
0213 MonitorElement* h_RecoConvTwoTracks_[5];
0214
0215 MonitorElement* h_RecoConvTwoMTracks_[5];
0216
0217
0218 MonitorElement* h_nConv_[3][3];
0219 MonitorElement* h_convEtaMatchSC_[3][3];
0220 MonitorElement* h_convEta_[3][3];
0221 MonitorElement* h_convEta2_[3][3];
0222 MonitorElement* h_convPhi_[3][3];
0223 MonitorElement* h_convR_[3][3];
0224 MonitorElement* h_convZ_[3][3];
0225 MonitorElement* h_convPt_[3][3];
0226 MonitorElement* h_EoverPTracks_[3][3];
0227
0228 MonitorElement* h_convSCdEta_[3][3];
0229 MonitorElement* h_convSCdPhi_[3][3];
0230
0231 MonitorElement* h_convRplot_;
0232 MonitorElement* h_convZplot_;
0233
0234 MonitorElement* h_convPtRes_[3];
0235
0236 MonitorElement* h_invMass_[3][3];
0237
0238 MonitorElement* h_DPhiTracksAtVtx_[3][3];
0239 MonitorElement* h2_DPhiTracksAtVtxVsEta_;
0240 MonitorElement* p_DPhiTracksAtVtxVsEta_;
0241 MonitorElement* h2_DPhiTracksAtVtxVsR_;
0242 MonitorElement* p_DPhiTracksAtVtxVsR_;
0243
0244 MonitorElement* h_DCotTracks_[3][3];
0245 MonitorElement* h2_DCotTracksVsEta_;
0246 MonitorElement* p_DCotTracksVsEta_;
0247 MonitorElement* h2_DCotTracksVsR_;
0248 MonitorElement* p_DCotTracksVsR_;
0249
0250 MonitorElement* h_distMinAppTracks_[3][3];
0251
0252 MonitorElement* h_DPhiTracksAtEcal_[3][3];
0253 MonitorElement* h2_DPhiTracksAtEcalVsR_;
0254 MonitorElement* p_DPhiTracksAtEcalVsR_;
0255 MonitorElement* h2_DPhiTracksAtEcalVsEta_;
0256 MonitorElement* p_DPhiTracksAtEcalVsEta_;
0257
0258 MonitorElement* h_DEtaTracksAtEcal_[3][3];
0259
0260 MonitorElement* h_convVtxRvsZ_[3];
0261 MonitorElement* h_convVtxYvsX_;
0262 MonitorElement* h_convVtxRvsZ_zoom_[2];
0263 MonitorElement* h_convVtxYvsX_zoom_[2];
0264
0265 MonitorElement* h_convVtxdX_;
0266 MonitorElement* h_convVtxdY_;
0267 MonitorElement* h_convVtxdZ_;
0268 MonitorElement* h_convVtxdR_;
0269 MonitorElement* h_convVtxdEta_;
0270 MonitorElement* h_convVtxdPhi_;
0271
0272 MonitorElement* h_convVtxdX_barrel_;
0273 MonitorElement* h_convVtxdY_barrel_;
0274 MonitorElement* h_convVtxdZ_barrel_;
0275 MonitorElement* h_convVtxdR_barrel_;
0276
0277 MonitorElement* h_convVtxdX_endcap_;
0278 MonitorElement* h_convVtxdY_endcap_;
0279 MonitorElement* h_convVtxdZ_endcap_;
0280 MonitorElement* h_convVtxdR_endcap_;
0281
0282 MonitorElement* h2_convVtxdRVsR_;
0283 MonitorElement* h2_convVtxdRVsEta_;
0284
0285 MonitorElement* p_convVtxdRVsR_;
0286 MonitorElement* p_convVtxdRVsEta_;
0287
0288 MonitorElement* p_convVtxdXVsX_;
0289 MonitorElement* p_convVtxdYVsY_;
0290 MonitorElement* p_convVtxdZVsZ_;
0291 MonitorElement* p_convVtxdZVsR_;
0292
0293 MonitorElement* p2_convVtxdRVsRZ_;
0294 MonitorElement* p2_convVtxdZVsRZ_;
0295
0296 MonitorElement* h2_convVtxRrecVsTrue_;
0297
0298 MonitorElement* h_vtxChi2Prob_[3][3];
0299
0300 MonitorElement* h_zPVFromTracks_[2];
0301 MonitorElement* h_dzPVFromTracks_[2];
0302 MonitorElement* h2_dzPVVsR_;
0303 MonitorElement* p_dzPVVsR_;
0304
0305 MonitorElement* h_lxybs_[3][3];
0306 MonitorElement* h_maxNHitsBeforeVtx_[3][3];
0307 MonitorElement* h_leadNHitsBeforeVtx_[3][3];
0308 MonitorElement* h_trailNHitsBeforeVtx_[3][3];
0309 MonitorElement* h_sumNHitsBeforeVtx_[3][3];
0310 MonitorElement* h_deltaExpectedHitsInner_[3][3];
0311 MonitorElement* h_leadExpectedHitsInner_[3][3];
0312 MonitorElement* h_maxDlClosestHitToVtx_[3][3];
0313 MonitorElement* h_maxDlClosestHitToVtxSig_[3][3];
0314 MonitorElement* h_nSharedHits_[3][3];
0315
0316
0317 MonitorElement* nHits_[3];
0318 MonitorElement* p_nHitsVsEta_[3];
0319 MonitorElement* nHitsVsEta_[3];
0320 MonitorElement* p_nHitsVsR_[3];
0321 MonitorElement* nHitsVsR_[3];
0322 MonitorElement* h_tkChi2_[3];
0323 MonitorElement* h_tkChi2Large_[3];
0324 MonitorElement* h2_Chi2VsEta_[3];
0325 MonitorElement* p_Chi2VsEta_[3];
0326 MonitorElement* h2_Chi2VsR_[3];
0327 MonitorElement* p_Chi2VsR_[3];
0328
0329 MonitorElement* h_TkD0_[3];
0330
0331 MonitorElement* h_TkPtPull_[3];
0332 MonitorElement* h2_TkPtPull_[3];
0333 MonitorElement* p_TkPtPull_[3];
0334 MonitorElement* h2_PtRecVsPtSim_[3];
0335 MonitorElement* h2_photonPtRecVsPtSim_;
0336
0337 MonitorElement* h_match_;
0338
0339 MonitorElement* p2_effRZ_;
0340
0341 MonitorElement* h_nHitsBeforeVtx_[3];
0342 MonitorElement* h_dlClosestHitToVtx_[3];
0343 MonitorElement* h_dlClosestHitToVtxSig_[3];
0344 };
0345
0346 #endif