File indexing completed on 2024-04-06 12:33:04
0001 #include <iostream>
0002
0003 #include "FWCore/ServiceRegistry/interface/Service.h"
0004 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0005
0006 #include "Validation/RecoEgamma/plugins/TkConvValidator.h"
0007
0008
0009 #include "FWCore/Framework/interface/MakerMacros.h"
0010 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0011 #include "FWCore/Utilities/interface/Exception.h"
0012
0013 #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"
0014 #include "SimDataFormats/Track/interface/SimTrack.h"
0015 #include "SimDataFormats/Track/interface/SimTrackContainer.h"
0016 #include "SimDataFormats/Vertex/interface/SimVertex.h"
0017 #include "SimDataFormats/Vertex/interface/SimVertexContainer.h"
0018
0019 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h"
0020 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h"
0021 #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h"
0022
0023 #include "SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h"
0024 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0025 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0026 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0027
0028 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
0029 #include "TrackingTools/PatternTools/interface/TwoTrackMinimumDistance.h"
0030 #include "TrackingTools/TransientTrack/interface/TrackTransientTrack.h"
0031
0032 #include "CLHEP/Units/GlobalPhysicalConstants.h"
0033 #include "CommonTools/Statistics/interface/ChiSquaredProbability.h"
0034
0035 #include "MagneticField/Engine/interface/MagneticField.h"
0036 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0037 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0038 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
0039 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
0040 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
0041 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
0042 #include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h"
0043
0044
0045 #include "DataFormats/Common/interface/Handle.h"
0046 #include "DataFormats/TrackReco/interface/Track.h"
0047 #include "DataFormats/TrackReco/interface/TrackExtra.h"
0048 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0049 #include "DataFormats/EgammaCandidates/interface/Conversion.h"
0050 #include "DataFormats/EgammaCandidates/interface/Photon.h"
0051 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
0052 #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h"
0053 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
0054 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
0055 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
0056 #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
0057 #include "DataFormats/CaloRecHit/interface/CaloCluster.h"
0058 #include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h"
0059 #include "DataFormats/DetId/interface/DetId.h"
0060 #include "DataFormats/JetReco/interface/GenJetCollection.h"
0061 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
0062 #include "DataFormats/GeometrySurface/interface/BoundCylinder.h"
0063 #include "DataFormats/GeometrySurface/interface/BoundDisk.h"
0064 #include "DataFormats/GeometrySurface/interface/SimpleCylinderBounds.h"
0065 #include "DataFormats/GeometrySurface/interface/SimpleDiskBounds.h"
0066 #include "DataFormats/Math/interface/deltaPhi.h"
0067
0068
0069 #include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruthFinder.h"
0070 #include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruth.h"
0071 #include "RecoEgamma/EgammaMCTools/interface/ElectronMCTruth.h"
0072 #include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h"
0073 #include "Geometry/CaloTopology/interface/CaloTopology.h"
0074 #include "Geometry/Records/interface/CaloTopologyRecord.h"
0075
0076
0077
0078 #include "TFile.h"
0079 #include "TH1.h"
0080 #include "TH2.h"
0081 #include "TTree.h"
0082 #include "TVector3.h"
0083 #include "TProfile.h"
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093 using namespace std;
0094
0095 TkConvValidator::TkConvValidator(const edm::ParameterSet& pset)
0096 : magneticFieldToken_{esConsumes<edm::Transition::BeginRun>()},
0097 caloGeometryToken_{esConsumes()},
0098 transientTrackBuilderToken_{esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))},
0099 trackerGeometryToken_{esConsumes()} {
0100 fName_ = pset.getUntrackedParameter<std::string>("Name");
0101 verbosity_ = pset.getUntrackedParameter<int>("Verbosity");
0102 parameters_ = pset;
0103
0104 photonCollectionProducer_ = pset.getParameter<std::string>("phoProducer");
0105 photonCollection_ = pset.getParameter<std::string>("photonCollection");
0106 photonCollectionPr_Token_ =
0107 consumes<reco::PhotonCollection>(edm::InputTag(photonCollectionProducer_, photonCollection_));
0108
0109 conversionCollectionProducer_ = pset.getParameter<std::string>("convProducer");
0110 conversionCollection_ = pset.getParameter<std::string>("conversionCollection");
0111 conversionCollectionPr_Token_ =
0112 consumes<reco::ConversionCollection>(edm::InputTag(conversionCollectionProducer_, conversionCollection_));
0113
0114
0115 dqmpath_ = pset.getParameter<std::string>("dqmpath");
0116 minPhoEtCut_ = pset.getParameter<double>("minPhoEtCut");
0117 generalTracksOnly_ = pset.getParameter<bool>("generalTracksOnly");
0118 arbitratedMerged_ = pset.getParameter<bool>("arbitratedMerged");
0119 arbitratedEcalSeeded_ = pset.getParameter<bool>("arbitratedEcalSeeded");
0120 ecalalgotracks_ = pset.getParameter<bool>("ecalalgotracks");
0121 highPurity_ = pset.getParameter<bool>("highPurity");
0122 minProb_ = pset.getParameter<double>("minProb");
0123 maxHitsBeforeVtx_ = pset.getParameter<uint>("maxHitsBeforeVtx");
0124 minLxy_ = pset.getParameter<double>("minLxy");
0125 isRunCentrally_ = pset.getParameter<bool>("isRunCentrally");
0126
0127 offline_pvToken_ = consumes<reco::VertexCollection>(
0128 pset.getUntrackedParameter<edm::InputTag>("offlinePV", edm::InputTag("offlinePrimaryVertices")));
0129 beamspotToken_ =
0130 consumes<reco::BeamSpot>(pset.getUntrackedParameter<edm::InputTag>("beamspot", edm::InputTag("offlineBeamSpot")));
0131 g4_simTk_Token_ = consumes<edm::SimTrackContainer>(pset.getParameter<edm::InputTag>("simTracks"));
0132 g4_simVtx_Token_ = consumes<edm::SimVertexContainer>(pset.getParameter<edm::InputTag>("simTracks"));
0133
0134 tpSelForEff_Token_ = consumes<TrackingParticleRefVector>(edm::InputTag("tpSelecForEfficiency"));
0135 tpSelForFake_Token_ = consumes<TrackingParticleRefVector>(edm::InputTag("tpSelecForFakeRate"));
0136
0137
0138
0139
0140 trackAssociator_Token_ =
0141 consumes<reco::TrackToTrackingParticleAssociator>(edm::InputTag("trackAssociatorByHitsForConversionValidation"));
0142 }
0143
0144 TkConvValidator::~TkConvValidator() {}
0145
0146 void TkConvValidator::bookHistograms(DQMStore::IBooker& iBooker, edm::Run const& run, edm::EventSetup const&) {
0147 nEvt_ = 0;
0148 nEntry_ = 0;
0149 nRecConv_ = 0;
0150 nRecConvAss_ = 0;
0151 nRecConvAssWithEcal_ = 0;
0152
0153 nInvalidPCA_ = 0;
0154
0155 dbe_ = nullptr;
0156 dbe_ = edm::Service<DQMStore>().operator->();
0157
0158 double etMin = parameters_.getParameter<double>("etMin");
0159 double etMax = parameters_.getParameter<double>("etMax");
0160 int etBin = parameters_.getParameter<int>("etBin");
0161
0162 double resMin = parameters_.getParameter<double>("resMin");
0163 double resMax = parameters_.getParameter<double>("resMax");
0164 int resBin = parameters_.getParameter<int>("resBin");
0165
0166 double etaMin = parameters_.getParameter<double>("etaMin");
0167 double etaMax = parameters_.getParameter<double>("etaMax");
0168 int etaBin = parameters_.getParameter<int>("etaBin");
0169 int etaBin2 = parameters_.getParameter<int>("etaBin2");
0170
0171 double phiMin = parameters_.getParameter<double>("phiMin");
0172 double phiMax = parameters_.getParameter<double>("phiMax");
0173 int phiBin = parameters_.getParameter<int>("phiBin");
0174
0175 double rMin = parameters_.getParameter<double>("rMin");
0176 double rMax = parameters_.getParameter<double>("rMax");
0177 int rBin = parameters_.getParameter<int>("rBin");
0178
0179 double zMin = parameters_.getParameter<double>("zMin");
0180 double zMax = parameters_.getParameter<double>("zMax");
0181 int zBin = parameters_.getParameter<int>("zBin");
0182
0183 double dPhiTracksMin = parameters_.getParameter<double>("dPhiTracksMin");
0184 double dPhiTracksMax = parameters_.getParameter<double>("dPhiTracksMax");
0185 int dPhiTracksBin = parameters_.getParameter<int>("dPhiTracksBin");
0186
0187 double eoverpMin = parameters_.getParameter<double>("eoverpMin");
0188 double eoverpMax = parameters_.getParameter<double>("eoverpMax");
0189 int eoverpBin = parameters_.getParameter<int>("eoverpBin");
0190
0191
0192
0193
0194
0195 double dCotTracksMin = parameters_.getParameter<double>("dCotTracksMin");
0196 double dCotTracksMax = parameters_.getParameter<double>("dCotTracksMax");
0197 int dCotTracksBin = parameters_.getParameter<int>("dCotTracksBin");
0198
0199 double chi2Min = parameters_.getParameter<double>("chi2Min");
0200 double chi2Max = parameters_.getParameter<double>("chi2Max");
0201
0202 double rMinForXray = parameters_.getParameter<double>("rMinForXray");
0203 double rMaxForXray = parameters_.getParameter<double>("rMaxForXray");
0204 int rBinForXray = parameters_.getParameter<int>("rBinForXray");
0205 double zMinForXray = parameters_.getParameter<double>("zMinForXray");
0206 double zMaxForXray = parameters_.getParameter<double>("zMaxForXray");
0207 int zBinForXray = parameters_.getParameter<int>("zBinForXray");
0208 int zBin2ForXray = parameters_.getParameter<int>("zBin2ForXray");
0209
0210 minPhoPtForEffic = parameters_.getParameter<double>("minPhoPtForEffic");
0211 maxPhoEtaForEffic = parameters_.getParameter<double>("maxPhoEtaForEffic");
0212 maxPhoZForEffic = parameters_.getParameter<double>("maxPhoZForEffic");
0213 maxPhoRForEffic = parameters_.getParameter<double>("maxPhoRForEffic");
0214 minPhoPtForPurity = parameters_.getParameter<double>("minPhoPtForPurity");
0215 maxPhoEtaForPurity = parameters_.getParameter<double>("maxPhoEtaForPurity");
0216 maxPhoZForPurity = parameters_.getParameter<double>("maxPhoZForPurity");
0217 maxPhoRForPurity = parameters_.getParameter<double>("maxPhoRForPurity");
0218
0219 if (dbe_) {
0220
0221
0222
0223
0224 std::string simpath = dqmpath_ + "SimulationInfo";
0225 iBooker.setCurrentFolder(simpath);
0226
0227
0228
0229 std::string histname = "nOfSimConversions";
0230 h_nSimConv_[0] = iBooker.book1D(histname, "# of Sim conversions per event ", 20, -0.5, 19.5);
0231
0232 histname = "h_AllSimConvEta";
0233 h_AllSimConv_[0] = iBooker.book1D(histname, " All conversions: simulated #eta", etaBin2, etaMin, etaMax);
0234 histname = "h_AllSimConvPhi";
0235 h_AllSimConv_[1] = iBooker.book1D(histname, " All conversions: simulated #phi", phiBin, phiMin, phiMax);
0236 histname = "h_AllSimConvR";
0237 h_AllSimConv_[2] = iBooker.book1D(histname, " All conversions: simulated R", rBin, rMin, rMax);
0238 histname = "h_AllSimConvZ";
0239 h_AllSimConv_[3] = iBooker.book1D(histname, " All conversions: simulated Z", zBin, zMin, zMax);
0240 histname = "h_AllSimConvEt";
0241 h_AllSimConv_[4] = iBooker.book1D(histname, " All conversions: simulated Et", etBin, etMin, etMax);
0242
0243 histname = "nOfVisSimConversions";
0244 h_nSimConv_[1] = iBooker.book1D(histname, "# of Sim conversions per event ", 20, -0.5, 19.5);
0245 histname = "h_VisSimConvEta";
0246 h_VisSimConv_[0] = iBooker.book1D(histname, " All vis conversions: simulated #eta", etaBin2, etaMin, etaMax);
0247 histname = "h_VisSimConvPhi";
0248 h_VisSimConv_[1] = iBooker.book1D(histname, " All vis conversions: simulated #phi", phiBin, phiMin, phiMax);
0249 histname = "h_VisSimConvR";
0250 h_VisSimConv_[2] = iBooker.book1D(histname, " All vis conversions: simulated R", rBin, rMin, rMax);
0251 histname = "h_VisSimConvZ";
0252 h_VisSimConv_[3] = iBooker.book1D(histname, " All vis conversions: simulated Z", zBin, zMin, zMax);
0253 histname = "h_VisSimConvEt";
0254 h_VisSimConv_[4] = iBooker.book1D(histname, " All vis conversions: simulated Et", etBin, etMin, etMax);
0255
0256
0257 histname = "h_SimConvTwoMTracksEta";
0258 h_SimConvTwoMTracks_[0] = iBooker.book1D(
0259 histname, " All vis conversions with 2 reco-matching tracks: simulated #eta", etaBin2, etaMin, etaMax);
0260 histname = "h_SimConvTwoMTracksPhi";
0261 h_SimConvTwoMTracks_[1] = iBooker.book1D(
0262 histname, " All vis conversions with 2 reco-matching tracks: simulated #phi", phiBin, phiMin, phiMax);
0263 histname = "h_SimConvTwoMTracksR";
0264 h_SimConvTwoMTracks_[2] =
0265 iBooker.book1D(histname, " All vis conversions with 2 reco-matching tracks: simulated R", rBin, rMin, rMax);
0266 histname = "h_SimConvTwoMTracksZ";
0267 h_SimConvTwoMTracks_[3] =
0268 iBooker.book1D(histname, " All vis conversions with 2 reco-matching tracks: simulated Z", zBin, zMin, zMax);
0269 histname = "h_SimConvTwoMTracksEt";
0270 h_SimConvTwoMTracks_[4] =
0271 iBooker.book1D(histname, " All vis conversions with 2 reco-matching tracks: simulated Et", etBin, etMin, etMax);
0272
0273 histname = "h_SimConvTwoTracksEta";
0274 h_SimConvTwoTracks_[0] =
0275 iBooker.book1D(histname, " All vis conversions with 2 reco tracks: simulated #eta", etaBin2, etaMin, etaMax);
0276 histname = "h_SimConvTwoTracksPhi";
0277 h_SimConvTwoTracks_[1] =
0278 iBooker.book1D(histname, " All vis conversions with 2 reco tracks: simulated #phi", phiBin, phiMin, phiMax);
0279 histname = "h_SimConvTwoTracksR";
0280 h_SimConvTwoTracks_[2] =
0281 iBooker.book1D(histname, " All vis conversions with 2 reco tracks: simulated R", rBin, rMin, rMax);
0282 histname = "h_SimConvTwoTracksZ";
0283 h_SimConvTwoTracks_[3] =
0284 iBooker.book1D(histname, " All vis conversions with 2 reco tracks: simulated Z", zBin, zMin, zMax);
0285 histname = "h_SimConvTwoTracksEt";
0286 h_SimConvTwoTracks_[4] =
0287 iBooker.book1D(histname, " All vis conversions with 2 reco tracks: simulated Et", etBin, etMin, etMax);
0288
0289 histname = "h_SimConvTwoMTracksEtaAndVtxPGT0";
0290 h_SimConvTwoMTracksAndVtxPGT0_[0] = iBooker.book1D(
0291 histname, " All vis conversions with 2 reco-matching tracks + vertex: simulated #eta", etaBin2, etaMin, etaMax);
0292 histname = "h_SimConvTwoMTracksPhiAndVtxPGT0";
0293 h_SimConvTwoMTracksAndVtxPGT0_[1] = iBooker.book1D(
0294 histname, " All vis conversions with 2 reco-matching tracks + vertex: simulated #phi", phiBin, phiMin, phiMax);
0295 histname = "h_SimConvTwoMTracksRAndVtxPGT0";
0296 h_SimConvTwoMTracksAndVtxPGT0_[2] = iBooker.book1D(
0297 histname, " All vis conversions with 2 reco-matching tracks + vertex: simulated R", rBin, rMin, rMax);
0298 histname = "h_SimConvTwoMTracksZAndVtxPGT0";
0299 h_SimConvTwoMTracksAndVtxPGT0_[3] = iBooker.book1D(
0300 histname, " All vis conversions with 2 reco-matching tracks + vertex: simulated Z", zBin, zMin, zMax);
0301 histname = "h_SimConvTwoMTracksEtAndVtxPGT0";
0302 h_SimConvTwoMTracksAndVtxPGT0_[4] = iBooker.book1D(
0303 histname, " All vis conversions with 2 reco-matching tracks + vertex: simulated Et", etBin, etMin, etMax);
0304
0305
0306 histname = "h_SimConvTwoMTracksEtaAndVtxPGT0005";
0307 h_SimConvTwoMTracksAndVtxPGT0005_[0] = iBooker.book1D(
0308 histname, " All vis conversions with 2 reco-matching tracks + vertex: simulated #eta", etaBin2, etaMin, etaMax);
0309 histname = "h_SimConvTwoMTracksPhiAndVtxPGT0005";
0310 h_SimConvTwoMTracksAndVtxPGT0005_[1] = iBooker.book1D(
0311 histname, " All vis conversions with 2 reco-matching tracks + vertex: simulated #phi", phiBin, phiMin, phiMax);
0312 histname = "h_SimConvTwoMTracksRAndVtxPGT0005";
0313 h_SimConvTwoMTracksAndVtxPGT0005_[2] = iBooker.book1D(
0314 histname, " All vis conversions with 2 reco-matching tracks + vertex: simulated R", rBin, rMin, rMax);
0315 histname = "h_SimConvTwoMTracksZAndVtxPGT0005";
0316 h_SimConvTwoMTracksAndVtxPGT0005_[3] = iBooker.book1D(
0317 histname, " All vis conversions with 2 reco-matching tracks + vertex: simulated Z", zBin, zMin, zMax);
0318 histname = "h_SimConvTwoMTracksEtAndVtxPGT0005";
0319 h_SimConvTwoMTracksAndVtxPGT0005_[4] = iBooker.book1D(
0320 histname, " All vis conversions with 2 reco-matching tracks + vertex: simulated Et", etBin, etMin, etMax);
0321
0322 histname = "h_SimRecConvTwoMTracksEta";
0323 h_SimRecConvTwoMTracks_[0] = iBooker.book1D(
0324 histname, " All vis conversions with 2 reco-matching tracks: simulated #eta", etaBin2, etaMin, etaMax);
0325 histname = "h_SimRecConvTwoMTracksPhi";
0326 h_SimRecConvTwoMTracks_[1] = iBooker.book1D(
0327 histname, " All vis conversions with 2 reco-matching tracks: simulated #phi", phiBin, phiMin, phiMax);
0328 histname = "h_SimRecConvTwoMTracksR";
0329 h_SimRecConvTwoMTracks_[2] =
0330 iBooker.book1D(histname, " All vis conversions with 2 reco-matching tracks: simulated R", rBin, rMin, rMax);
0331 histname = "h_SimRecConvTwoMTracksZ";
0332 h_SimRecConvTwoMTracks_[3] =
0333 iBooker.book1D(histname, " All vis conversions with 2 reco-matching tracks: simulated Z", zBin, zMin, zMax);
0334 histname = "h_SimRecConvTwoMTracksEt";
0335 h_SimRecConvTwoMTracks_[4] =
0336 iBooker.book1D(histname, " All vis conversions with 2 reco-matching tracks: simulated Et", etBin, etMin, etMax);
0337
0338
0339 h_SimConvEtaPix_[0] = iBooker.book1D("simConvEtaPix", " sim converted Photon Eta: Pix ", etaBin, etaMin, etaMax);
0340 h_simTkPt_ = iBooker.book1D("simTkPt", "Sim conversion tracks pt ", etBin * 3, 0., etMax);
0341 h_simTkEta_ = iBooker.book1D("simTkEta", "Sim conversion tracks eta ", etaBin, etaMin, etaMax);
0342
0343 h_simConvVtxRvsZ_[0] = iBooker.book2D("simConvVtxRvsZAll",
0344 " Photon Sim conversion vtx position",
0345 zBinForXray,
0346 zMinForXray,
0347 zMaxForXray,
0348 rBinForXray,
0349 rMinForXray,
0350 rMaxForXray);
0351 h_simConvVtxRvsZ_[1] = iBooker.book2D("simConvVtxRvsZBarrel",
0352 " Photon Sim conversion vtx position",
0353 zBinForXray,
0354 zMinForXray,
0355 zMaxForXray,
0356 rBinForXray,
0357 rMinForXray,
0358 rMaxForXray);
0359 h_simConvVtxRvsZ_[2] = iBooker.book2D("simConvVtxRvsZEndcap",
0360 " Photon Sim conversion vtx position",
0361 zBin2ForXray,
0362 zMinForXray,
0363 zMaxForXray,
0364 rBinForXray,
0365 rMinForXray,
0366 rMaxForXray);
0367 h_simConvVtxRvsZ_[3] = iBooker.book2D("simConvVtxRvsZBarrel2",
0368 " Photon Sim conversion vtx position when reco R<4cm",
0369 zBinForXray,
0370 zMinForXray,
0371 zMaxForXray,
0372 rBinForXray,
0373 rMinForXray,
0374 rMaxForXray);
0375 h_simConvVtxYvsX_ = iBooker.book2D(
0376 "simConvVtxYvsXTrkBarrel", " Photon Sim conversion vtx position, (x,y) eta<1 ", 100, -80., 80., 100, -80., 80.);
0377
0378 std::string convpath = dqmpath_ + "ConversionInfo";
0379 iBooker.setCurrentFolder(convpath);
0380
0381 histname = "nConv";
0382 h_nConv_[0][0] = iBooker.book1D(
0383 histname + "All", "Number Of Conversions per isolated candidates per events: All Ecal ", 10, -0.5, 9.5);
0384 h_nConv_[0][1] = iBooker.book1D(
0385 histname + "Barrel", "Number Of Conversions per isolated candidates per events: Ecal Barrel ", 10, -0.5, 9.5);
0386 h_nConv_[0][2] = iBooker.book1D(
0387 histname + "Endcap", "Number Of Conversions per isolated candidates per events: Ecal Endcap ", 10, -0.5, 9.5);
0388 h_nConv_[1][0] = iBooker.book1D(histname + "All_Ass",
0389 "Number Of associated Conversions per isolated candidates per events: All Ecal ",
0390 10,
0391 -0.5,
0392 9.5);
0393
0394 h_convEta_[0][0] = iBooker.book1D("convEta", " converted Photon Eta ", etaBin, etaMin, etaMax);
0395 h_convEtaMatchSC_[0][0] =
0396 iBooker.book1D("convEtaMatchSC", " converted Photon Eta when SC is matched ", etaBin, etaMin, etaMax);
0397 h_convEta2_[0][0] = iBooker.book1D("convEta2", " converted Photon Eta ", etaBin2, etaMin, etaMax);
0398 h_convPhi_[0][0] = iBooker.book1D("convPhi", " converted Photon Phi ", phiBin, phiMin, phiMax);
0399 h_convR_[0][0] = iBooker.book1D("convR", " converted photon R", rBin, rMin, rMax);
0400 h_convZ_[0][0] = iBooker.book1D("convZ", " converted photon Z", zBin, zMin, zMax);
0401 h_convPt_[0][0] = iBooker.book1D("convPt", " conversions Transverse Energy: all eta ", etBin, etMin, etMax);
0402
0403 h_convEta_[1][0] = iBooker.book1D("convEtaAss2", " Matched converted Photon Eta ", etaBin2, etaMin, etaMax);
0404 h_convEta_[1][1] = iBooker.book1D("convEtaAss", " Matched converted Photon Eta ", etaBin, etaMin, etaMax);
0405 h_convEtaMatchSC_[1][0] =
0406 iBooker.book1D("convEtaMatchSCAss", " converted Photon Eta when SC is matched ", etaBin, etaMin, etaMax);
0407 h_convPhi_[1][0] = iBooker.book1D("convPhiAss", " Matched converted Photon Phi ", phiBin, phiMin, phiMax);
0408 h_convR_[1][0] = iBooker.book1D("convRAss", " Matched converted photon R", rBin, rMin, rMax);
0409 h_convZ_[1][0] = iBooker.book1D("convZAss", " Matched converted photon Z", zBin, zMin, zMax);
0410 h_convPt_[1][0] =
0411 iBooker.book1D("convPtAss", "Matched conversions Transverse Energy: all eta ", etBin, etMin, etMax);
0412
0413 h_convEta_[2][0] = iBooker.book1D("convEtaFake2", " Fake converted Photon Eta ", etaBin2, etaMin, etaMax);
0414 h_convEta_[2][1] = iBooker.book1D("convEtaFake", " Fake converted Photon Eta ", etaBin, etaMin, etaMax);
0415 h_convEtaMatchSC_[2][0] =
0416 iBooker.book1D("convEtaMatchSCFake", " converted Photon Eta when SC is matched ", etaBin, etaMin, etaMax);
0417 h_convPhi_[2][0] = iBooker.book1D("convPhiFake", " Fake converted Photon Phi ", phiBin, phiMin, phiMax);
0418 h_convR_[2][0] = iBooker.book1D("convRFake", " Fake converted photon R", rBin, rMin, rMax);
0419 h_convZ_[2][0] = iBooker.book1D("convZFake", " Fake converted photon Z", zBin, zMin, zMax);
0420 h_convPt_[2][0] = iBooker.book1D("convPtFake", "Fake conversions Transverse Energy: all eta ", etBin, etMin, etMax);
0421
0422 h_convRplot_ = iBooker.book1D("convRplot", " converted photon R", 600, 0., 120.);
0423 h_convZplot_ = iBooker.book1D("convZplot", " converted photon Z", 320, -160., 160.);
0424
0425 histname = "convSCdPhi";
0426 h_convSCdPhi_[0][0] = iBooker.book1D(histname + "All", "dPhi between SC and conversion", 100, -0.1, 0.1);
0427 h_convSCdPhi_[0][1] =
0428 iBooker.book1D(histname + "Barrel", " dPhi between SC and conversion: Barrel", 100, -0.1, 0.1);
0429 h_convSCdPhi_[0][2] =
0430 iBooker.book1D(histname + "Endcap", " dPhi between SC and conversion: Endcap", 100, -0.1, 0.1);
0431 h_convSCdPhi_[1][0] = iBooker.book1D(histname + "All_Ass", "dPhi between SC and conversion", 100, -0.1, 0.1);
0432 h_convSCdPhi_[1][1] =
0433 iBooker.book1D(histname + "Barrel_Ass", " dPhi between SC and conversion: Barrel", 100, -0.1, 0.1);
0434 h_convSCdPhi_[1][2] =
0435 iBooker.book1D(histname + "Endcap_Ass", " dPhi between SC and conversion: Endcap", 100, -0.1, 0.1);
0436 h_convSCdPhi_[2][0] = iBooker.book1D(histname + "All_Fakes", "dPhi between SC and conversion", 100, -0.1, 0.1);
0437 h_convSCdPhi_[2][1] =
0438 iBooker.book1D(histname + "Barrel_Fakes", " dPhi between SC and conversion: Barrel", 100, -0.1, 0.1);
0439 h_convSCdPhi_[2][2] =
0440 iBooker.book1D(histname + "Endcap_Fakes", " dPhi between SC and conversion: Endcap", 100, -0.1, 0.1);
0441 histname = "convSCdEta";
0442 h_convSCdEta_[0][0] = iBooker.book1D(histname + "All", " dEta between SC and conversion", 100, -0.1, 0.1);
0443 h_convSCdEta_[0][1] =
0444 iBooker.book1D(histname + "Barrel", " dEta between SC and conversion: Barrel", 100, -0.1, 0.1);
0445 h_convSCdEta_[0][2] =
0446 iBooker.book1D(histname + "Endcap", " dEta between SC and conversion: Endcap", 100, -0.1, 0.1);
0447 h_convSCdEta_[1][0] = iBooker.book1D(histname + "All_Ass", " dEta between SC and conversion", 100, -0.1, 0.1);
0448 h_convSCdEta_[1][1] =
0449 iBooker.book1D(histname + "Barrel_Ass", " dEta between SC and conversion: Barrel", 100, -0.1, 0.1);
0450 h_convSCdEta_[1][2] =
0451 iBooker.book1D(histname + "Endcap_Ass", " dEta between SC and conversion: Endcap", 100, -0.1, 0.1);
0452 h_convSCdEta_[2][0] = iBooker.book1D(histname + "All_Fakes", " dEta between SC and conversion", 100, -0.1, 0.1);
0453 h_convSCdEta_[2][1] =
0454 iBooker.book1D(histname + "Barrel_Fakes", " dEta between SC and conversion: Barrel", 100, -0.1, 0.1);
0455 h_convSCdEta_[2][2] =
0456 iBooker.book1D(histname + "Endcap_Fakes", " dEta between SC and conversion: Endcap", 100, -0.1, 0.1);
0457
0458 histname = "convPtRes";
0459 h_convPtRes_[0] = iBooker.book1D(histname + "All", " Conversion Pt rec/true : All ecal ", resBin, resMin, resMax);
0460 h_convPtRes_[1] = iBooker.book1D(histname + "Barrel", " Conversion Pt rec/true : Barrel ", resBin, resMin, resMax);
0461 h_convPtRes_[2] = iBooker.book1D(histname + "Endcap", " Conversion Pt rec/true : Endcap ", resBin, resMin, resMax);
0462
0463 histname = "hInvMass";
0464 h_invMass_[0][0] = iBooker.book1D(
0465 histname + "All_AllTracks", " Photons:Tracks from conversion: Pair invariant mass: all Ecal ", 100, 0., 1.5);
0466 h_invMass_[0][1] = iBooker.book1D(histname + "Barrel_AllTracks",
0467 " Photons:Tracks from conversion: Pair invariant mass: Barrel Ecal ",
0468 100,
0469 0.,
0470 1.5);
0471 h_invMass_[0][2] = iBooker.book1D(histname + "Endcap_AllTracks",
0472 " Photons:Tracks from conversion: Pair invariant mass: Endcap Ecal ",
0473 100,
0474 0.,
0475 1.5);
0476
0477 h_invMass_[1][0] = iBooker.book1D(
0478 histname + "All_AssTracks", " Photons:Tracks from conversion: Pair invariant mass: all Ecal ", 100, 0., 1.5);
0479 h_invMass_[1][1] = iBooker.book1D(histname + "Barrel_AssTracks",
0480 " Photons:Tracks from conversion: Pair invariant mass: Barrel Ecal ",
0481 100,
0482 0.,
0483 1.5);
0484 h_invMass_[1][2] = iBooker.book1D(histname + "Endcap_AssTracks",
0485 " Photons:Tracks from conversion: Pair invariant mass: Endcap Ecal ",
0486 100,
0487 0.,
0488 1.5);
0489
0490 h_invMass_[2][0] = iBooker.book1D(
0491 histname + "All_FakeTracks", " Photons:Tracks from conversion: Pair invariant mass: all Ecal ", 100, 0., 1.5);
0492 h_invMass_[2][1] = iBooker.book1D(histname + "Barrel_FakeTracks",
0493 " Photons:Tracks from conversion: Pair invariant mass: Barrel Ecal ",
0494 100,
0495 0.,
0496 1.5);
0497 h_invMass_[2][2] = iBooker.book1D(histname + "Endcap_FaleTracks",
0498 " Photons:Tracks from conversion: Pair invariant mass: Endcap Ecal ",
0499 100,
0500 0.,
0501 1.5);
0502
0503 histname = "hDPhiTracksAtVtx";
0504 h_DPhiTracksAtVtx_[0][0] = iBooker.book1D(histname + "All",
0505 " Photons:Tracks from conversions: #delta#phi Tracks at vertex: all Ecal",
0506 dPhiTracksBin,
0507 dPhiTracksMin,
0508 dPhiTracksMax);
0509 h_DPhiTracksAtVtx_[0][1] =
0510 iBooker.book1D(histname + "Barrel",
0511 " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Barrel Ecal",
0512 dPhiTracksBin,
0513 dPhiTracksMin,
0514 dPhiTracksMax);
0515 h_DPhiTracksAtVtx_[0][2] =
0516 iBooker.book1D(histname + "Endcap",
0517 " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Endcap Ecal",
0518 dPhiTracksBin,
0519 dPhiTracksMin,
0520 dPhiTracksMax);
0521 h_DPhiTracksAtVtx_[1][0] = iBooker.book1D(histname + "All_Ass",
0522 " Photons:Tracks from conversions: #delta#phi Tracks at vertex: all Ecal",
0523 dPhiTracksBin,
0524 dPhiTracksMin,
0525 dPhiTracksMax);
0526 h_DPhiTracksAtVtx_[1][1] =
0527 iBooker.book1D(histname + "Barrel_Ass",
0528 " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Barrel Ecal",
0529 dPhiTracksBin,
0530 dPhiTracksMin,
0531 dPhiTracksMax);
0532 h_DPhiTracksAtVtx_[1][2] =
0533 iBooker.book1D(histname + "Endcap_Ass",
0534 " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Endcap Ecal",
0535 dPhiTracksBin,
0536 dPhiTracksMin,
0537 dPhiTracksMax);
0538 h_DPhiTracksAtVtx_[2][0] = iBooker.book1D(histname + "All_Fakes",
0539 " Photons:Tracks from conversions: #delta#phi Tracks at vertex: all Ecal",
0540 dPhiTracksBin,
0541 dPhiTracksMin,
0542 dPhiTracksMax);
0543 h_DPhiTracksAtVtx_[2][1] =
0544 iBooker.book1D(histname + "Barrel_Fakes",
0545 " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Barrel Ecal",
0546 dPhiTracksBin,
0547 dPhiTracksMin,
0548 dPhiTracksMax);
0549 h_DPhiTracksAtVtx_[2][2] =
0550 iBooker.book1D(histname + "Endcap_Fakes",
0551 " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Endcap Ecal",
0552 dPhiTracksBin,
0553 dPhiTracksMin,
0554 dPhiTracksMax);
0555
0556 histname = "hDPhiTracksAtVtxVsEta";
0557 h2_DPhiTracksAtVtxVsEta_ = iBooker.book2D(histname + "All",
0558 " Photons:Tracks from conversions: #delta#phi Tracks at vertex vs #eta",
0559 etaBin2,
0560 etaMin,
0561 etaMax,
0562 100,
0563 -0.5,
0564 0.5);
0565 histname = "pDPhiTracksAtVtxVsEta";
0566 p_DPhiTracksAtVtxVsEta_ =
0567 iBooker.bookProfile(histname + "All",
0568 " Photons:Tracks from conversions: #delta#phi Tracks at vertex vs #eta ",
0569 etaBin2,
0570 etaMin,
0571 etaMax,
0572 100,
0573 -0.5,
0574 0.5,
0575 "");
0576
0577 histname = "hDPhiTracksAtVtxVsR";
0578 h2_DPhiTracksAtVtxVsR_ = iBooker.book2D(histname + "All",
0579 " Photons:Tracks from conversions: #delta#phi Tracks at vertex vs R",
0580 rBin,
0581 rMin,
0582 rMax,
0583 100,
0584 -0.5,
0585 0.5);
0586 histname = "pDPhiTracksAtVtxVsR";
0587 p_DPhiTracksAtVtxVsR_ = iBooker.bookProfile(histname + "All",
0588 " Photons:Tracks from conversions: #delta#phi Tracks at vertex vs R ",
0589 rBin,
0590 rMin,
0591 rMax,
0592 100,
0593 -0.5,
0594 0.5,
0595 "");
0596
0597 histname = "hDCotTracks";
0598 h_DCotTracks_[0][0] = iBooker.book1D(histname + "All",
0599 " Photons:Tracks from conversions #delta cotg(#Theta) Tracks: all Ecal ",
0600 dCotTracksBin,
0601 dCotTracksMin,
0602 dCotTracksMax);
0603 h_DCotTracks_[0][1] = iBooker.book1D(histname + "Barrel",
0604 " Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Barrel Ecal ",
0605 dCotTracksBin,
0606 dCotTracksMin,
0607 dCotTracksMax);
0608 h_DCotTracks_[0][2] = iBooker.book1D(histname + "Endcap",
0609 " Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Endcap Ecal ",
0610 dCotTracksBin,
0611 dCotTracksMin,
0612 dCotTracksMax);
0613 h_DCotTracks_[1][0] = iBooker.book1D(histname + "All_Ass",
0614 " Photons:Tracks from conversions #delta cotg(#Theta) Tracks: all Ecal ",
0615 dCotTracksBin,
0616 dCotTracksMin,
0617 dCotTracksMax);
0618 h_DCotTracks_[1][1] = iBooker.book1D(histname + "Barrel_Ass",
0619 " Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Barrel Ecal ",
0620 dCotTracksBin,
0621 dCotTracksMin,
0622 dCotTracksMax);
0623 h_DCotTracks_[1][2] = iBooker.book1D(histname + "Endcap_Ass",
0624 " Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Endcap Ecal ",
0625 dCotTracksBin,
0626 dCotTracksMin,
0627 dCotTracksMax);
0628 h_DCotTracks_[2][0] = iBooker.book1D(histname + "All_Fakes",
0629 " Photons:Tracks from conversions #delta cotg(#Theta) Tracks: all Ecal ",
0630 dCotTracksBin,
0631 dCotTracksMin,
0632 dCotTracksMax);
0633 h_DCotTracks_[2][1] = iBooker.book1D(histname + "Barrel_Fakes",
0634 " Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Barrel Ecal ",
0635 dCotTracksBin,
0636 dCotTracksMin,
0637 dCotTracksMax);
0638 h_DCotTracks_[2][2] = iBooker.book1D(histname + "Endcap_Fakes",
0639 " Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Endcap Ecal ",
0640 dCotTracksBin,
0641 dCotTracksMin,
0642 dCotTracksMax);
0643
0644 histname = "hDCotTracksVsEta";
0645 h2_DCotTracksVsEta_ = iBooker.book2D(histname + "All",
0646 " Photons:Tracks from conversions: #delta cotg(#Theta) Tracks vs #eta",
0647 etaBin2,
0648 etaMin,
0649 etaMax,
0650 100,
0651 -0.2,
0652 0.2);
0653 histname = "pDCotTracksVsEta";
0654 p_DCotTracksVsEta_ = iBooker.bookProfile(histname + "All",
0655 " Photons:Tracks from conversions: #delta cotg(#Theta) Tracks vs #eta ",
0656 etaBin2,
0657 etaMin,
0658 etaMax,
0659 100,
0660 -0.2,
0661 0.2,
0662 "");
0663
0664 histname = "hDCotTracksVsR";
0665 h2_DCotTracksVsR_ = iBooker.book2D(histname + "All",
0666 " Photons:Tracks from conversions: #delta cotg(#Theta) Tracks at vertex vs R",
0667 rBin,
0668 rMin,
0669 rMax,
0670 100,
0671 -0.2,
0672 0.2);
0673 histname = "pDCotTracksVsR";
0674 p_DCotTracksVsR_ =
0675 iBooker.bookProfile(histname + "All",
0676 " Photons:Tracks from conversions: #delta cotg(#Theta) Tracks at vertex vs R ",
0677 rBin,
0678 rMin,
0679 rMax,
0680 100,
0681 -0.2,
0682 0.2,
0683 "");
0684
0685 histname = "hDistMinAppTracks";
0686 h_distMinAppTracks_[0][0] = iBooker.book1D(
0687 histname + "All", " Photons:Tracks from conversions Min Approach Dist Tracks: all Ecal ", 120, -0.5, 1.0);
0688 h_distMinAppTracks_[0][1] = iBooker.book1D(
0689 histname + "Barrel", " Photons:Tracks from conversions Min Approach Dist Tracks: Barrel Ecal ", 120, -0.5, 1.0);
0690 h_distMinAppTracks_[0][2] = iBooker.book1D(
0691 histname + "Endcap", " Photons:Tracks from conversions Min Approach Dist Tracks: Endcap Ecal ", 120, -0.5, 1.0);
0692 h_distMinAppTracks_[1][0] = iBooker.book1D(
0693 histname + "All_Ass", " Photons:Tracks from conversions Min Approach Dist Tracks: all Ecal ", 120, -0.5, 1.0);
0694 h_distMinAppTracks_[1][1] =
0695 iBooker.book1D(histname + "Barrel_Ass",
0696 " Photons:Tracks from conversions Min Approach Dist Tracks: Barrel Ecal ",
0697 120,
0698 -0.5,
0699 1.0);
0700 h_distMinAppTracks_[1][2] =
0701 iBooker.book1D(histname + "Endcap_Ass",
0702 " Photons:Tracks from conversions Min Approach Dist Tracks: Endcap Ecal ",
0703 120,
0704 -0.5,
0705 1.0);
0706 h_distMinAppTracks_[2][0] = iBooker.book1D(
0707 histname + "All_Fakes", " Photons:Tracks from conversions Min Approach Dist Tracks: all Ecal ", 120, -0.5, 1.0);
0708 h_distMinAppTracks_[2][1] =
0709 iBooker.book1D(histname + "Barrel_Fakes",
0710 " Photons:Tracks from conversions Min Approach Dist Tracks: Barrel Ecal ",
0711 120,
0712 -0.5,
0713 1.0);
0714 h_distMinAppTracks_[2][2] =
0715 iBooker.book1D(histname + "Endcap_Fakes",
0716 " Photons:Tracks from conversions Min Approach Dist Tracks: Endcap Ecal ",
0717 120,
0718 -0.5,
0719 1.0);
0720
0721 h_convVtxRvsZ_[0] = iBooker.book2D("convVtxRvsZAll",
0722 " Photon Reco conversion vtx position",
0723 zBinForXray,
0724 zMinForXray,
0725 zMaxForXray,
0726 rBinForXray,
0727 rMinForXray,
0728 rMaxForXray);
0729 h_convVtxRvsZ_[1] = iBooker.book2D("convVtxRvsZBarrel",
0730 " Photon Reco conversion vtx position",
0731 zBinForXray,
0732 zMinForXray,
0733 zMaxForXray,
0734 rBinForXray,
0735 rMinForXray,
0736 rMaxForXray);
0737 h_convVtxRvsZ_[2] = iBooker.book2D("convVtxRvsZEndcap",
0738 " Photon Reco conversion vtx position",
0739 zBin2ForXray,
0740 zMinForXray,
0741 zMaxForXray,
0742 rBinForXray,
0743 rMinForXray,
0744 rMaxForXray);
0745 h_convVtxYvsX_ = iBooker.book2D(
0746 "convVtxYvsXTrkBarrel", " Photon Reco conversion vtx position, (x,y) eta<1 ", 1000, -60., 60., 1000, -60., 60.);
0747
0748 h_convVtxRvsZ_zoom_[0] = iBooker.book2D("convVtxRvsZBarrelZoom1",
0749 " Photon Reco conversion vtx position",
0750 zBinForXray,
0751 zMinForXray,
0752 zMaxForXray,
0753 rBinForXray,
0754 -10.,
0755 40.);
0756 h_convVtxRvsZ_zoom_[1] = iBooker.book2D("convVtxRvsZBarrelZoom2",
0757 " Photon Reco conversion vtx position",
0758 zBinForXray,
0759 zMinForXray,
0760 zMaxForXray,
0761 rBinForXray,
0762 -10.,
0763 20.);
0764 h_convVtxYvsX_zoom_[0] = iBooker.book2D("convVtxYvsXTrkBarrelZoom1",
0765 " Photon Reco conversion vtx position, (x,y) eta<1 ",
0766 100,
0767 -40.,
0768 40.,
0769 100,
0770 -40.,
0771 40.);
0772 h_convVtxYvsX_zoom_[1] = iBooker.book2D("convVtxYvsXTrkBarrelZoom2",
0773 " Photon Reco conversion vtx position, (x,y) eta<1 ",
0774 100,
0775 -20.,
0776 20.,
0777 100,
0778 -20.,
0779 20.);
0780
0781 h_convVtxdR_ = iBooker.book1D("convVtxdR", " Photon Reco conversion vtx dR", 100, -10., 10.);
0782 h_convVtxdX_ = iBooker.book1D("convVtxdX", " Photon Reco conversion vtx dX", 100, -10., 10.);
0783 h_convVtxdY_ = iBooker.book1D("convVtxdY", " Photon Reco conversion vtx dY", 100, -10., 10.);
0784 h_convVtxdZ_ = iBooker.book1D("convVtxdZ", " Photon Reco conversion vtx dZ", 100, -20., 20.);
0785
0786 h_convVtxdPhi_ = iBooker.book1D("convVtxdPhi", " Photon Reco conversion vtx dPhi", 100, -0.01, 0.01);
0787 h_convVtxdEta_ = iBooker.book1D("convVtxdEta", " Photon Reco conversion vtx dEta", 100, -0.5, 0.5);
0788
0789 h_convVtxdR_barrel_ =
0790 iBooker.book1D("convVtxdR_barrel", " Photon Reco conversion vtx dR, |eta|<=1.2", 100, -10., 10.);
0791 h_convVtxdX_barrel_ =
0792 iBooker.book1D("convVtxdX_barrel", " Photon Reco conversion vtx dX, |eta|<=1.2", 100, -10., 10.);
0793 h_convVtxdY_barrel_ =
0794 iBooker.book1D("convVtxdY_barrel", " Photon Reco conversion vtx dY, |eta|<=1.2 ", 100, -10., 10.);
0795 h_convVtxdZ_barrel_ =
0796 iBooker.book1D("convVtxdZ_barrel", " Photon Reco conversion vtx dZ, |eta|<=1.2,", 100, -20., 20.);
0797
0798 h_convVtxdR_endcap_ =
0799 iBooker.book1D("convVtxdR_endcap", " Photon Reco conversion vtx dR, |eta|>1.2 ", 100, -10., 10.);
0800 h_convVtxdX_endcap_ =
0801 iBooker.book1D("convVtxdX_endcap", " Photon Reco conversion vtx dX, |eta|>1.2", 100, -10., 10.);
0802 h_convVtxdY_endcap_ =
0803 iBooker.book1D("convVtxdY_endcap", " Photon Reco conversion vtx dY, |eta|>1.2", 100, -10., 10.);
0804 h_convVtxdZ_endcap_ =
0805 iBooker.book1D("convVtxdZ_endcap", " Photon Reco conversion vtx dZ, |eta|>1.2", 100, -20., 20.);
0806
0807 h2_convVtxdRVsR_ = iBooker.book2D("h2ConvVtxdRVsR", " Conversion vtx dR vsR", rBin, rMin, rMax, 100, -20., 20.);
0808 h2_convVtxdRVsEta_ =
0809 iBooker.book2D("h2ConvVtxdRVsEta", "Conversion vtx dR vs Eta", etaBin2, etaMin, etaMax, 100, -20., 20.);
0810
0811 p_convVtxdRVsR_ =
0812 iBooker.bookProfile("pConvVtxdRVsR", " Conversion vtx dR vsR", rBin, rMin, rMax, 100, -20., 20., "");
0813 p_convVtxdRVsEta_ =
0814 iBooker.bookProfile("pConvVtxdRVsEta", "Conversion vtx dR vs Eta", etaBin2, etaMin, etaMax, 100, -20., 20., "");
0815 p_convVtxdXVsX_ = iBooker.bookProfile("pConvVtxdXVsX", "Conversion vtx dX vs X", 120, -60, 60, 100, -20., 20., "");
0816 p_convVtxdYVsY_ = iBooker.bookProfile("pConvVtxdYVsY", "Conversion vtx dY vs Y", 120, -60, 60, 100, -20., 20., "");
0817 p_convVtxdZVsZ_ =
0818 iBooker.bookProfile("pConvVtxdZVsZ", "Conversion vtx dZ vs Z", zBin, zMin, zMax, 100, -20., 20., "");
0819
0820 p_convVtxdZVsR_ =
0821 iBooker.bookProfile("pConvVtxdZVsR", "Conversion vtx dZ vs R", rBin, rMin, rMax, 100, -20., 20., "");
0822 p2_convVtxdRVsRZ_ = iBooker.bookProfile2D(
0823 "p2ConvVtxdRVsRZ", "Conversion vtx dR vs RZ", zBin, zMin, zMax, rBin, rMin, rMax, 100, 0., 20., "s");
0824 p2_convVtxdZVsRZ_ = iBooker.bookProfile2D(
0825 "p2ConvVtxdZVsRZ", "Conversion vtx dZ vs RZ", zBin, zMin, zMax, rBin, rMin, rMax, 100, 0., 20., "s");
0826
0827 histname = "EoverPtracks";
0828 h_EoverPTracks_[0][0] =
0829 iBooker.book1D(histname + "All", " photons conversion E/p: all Ecal ", eoverpBin, eoverpMin, eoverpMax);
0830 h_EoverPTracks_[0][1] =
0831 iBooker.book1D(histname + "Barrel", " photons conversion E/p: Barrel Ecal", eoverpBin, eoverpMin, eoverpMax);
0832 h_EoverPTracks_[0][2] =
0833 iBooker.book1D(histname + "Endcap", " photons conversion E/p: Endcap Ecal ", eoverpBin, eoverpMin, eoverpMax);
0834 h_EoverPTracks_[1][0] =
0835 iBooker.book1D(histname + "All_Ass", " photons conversion E/p: all Ecal ", eoverpBin, eoverpMin, eoverpMax);
0836 h_EoverPTracks_[1][1] = iBooker.book1D(
0837 histname + "Barrel_Ass", " photons conversion E/p: Barrel Ecal", eoverpBin, eoverpMin, eoverpMax);
0838 h_EoverPTracks_[1][2] = iBooker.book1D(
0839 histname + "Endcap_Ass", " photons conversion E/p: Endcap Ecal ", eoverpBin, eoverpMin, eoverpMax);
0840 h_EoverPTracks_[2][0] =
0841 iBooker.book1D(histname + "All_Fakes", " photons conversion E/p: all Ecal ", eoverpBin, eoverpMin, eoverpMax);
0842 h_EoverPTracks_[2][1] = iBooker.book1D(
0843 histname + "Barrel_Fakes", " photons conversion E/p: Barrel Ecal", eoverpBin, eoverpMin, eoverpMax);
0844 h_EoverPTracks_[2][2] = iBooker.book1D(
0845 histname + "Endcap_Fakes", " photons conversion E/p: Endcap Ecal ", eoverpBin, eoverpMin, eoverpMax);
0846
0847 h2_convVtxRrecVsTrue_ = iBooker.book2D(
0848 "h2ConvVtxRrecVsTrue", "Photon Reco conversion vtx R rec vs true", rBin, rMin, rMax, rBin, rMin, rMax);
0849
0850 histname = "vtxChi2Prob";
0851 h_vtxChi2Prob_[0][0] = iBooker.book1D(histname + "All", "vertex #chi^{2} all", 100, 0., 1.);
0852 h_vtxChi2Prob_[0][1] = iBooker.book1D(histname + "Barrel", "vertex #chi^{2} barrel", 100, 0., 1.);
0853 h_vtxChi2Prob_[0][2] = iBooker.book1D(histname + "Endcap", "vertex #chi^{2} endcap", 100, 0., 1.);
0854 h_vtxChi2Prob_[1][0] = iBooker.book1D(histname + "All_Ass", "vertex #chi^{2} all", 100, 0., 1.);
0855 h_vtxChi2Prob_[1][1] = iBooker.book1D(histname + "Barrel_Ass", "vertex #chi^{2} barrel", 100, 0., 1.);
0856 h_vtxChi2Prob_[1][2] = iBooker.book1D(histname + "Endcap_Ass", "vertex #chi^{2} endcap", 100, 0., 1.);
0857 h_vtxChi2Prob_[2][0] = iBooker.book1D(histname + "All_Fakes", "vertex #chi^{2} all", 100, 0., 1.);
0858 h_vtxChi2Prob_[2][1] = iBooker.book1D(histname + "Barrel_Fakes", "vertex #chi^{2} barrel", 100, 0., 1.);
0859 h_vtxChi2Prob_[2][2] = iBooker.book1D(histname + "Endcap_Fakes", "vertex #chi^{2} endcap", 100, 0., 1.);
0860
0861 h_zPVFromTracks_[1] = iBooker.book1D("zPVFromTracks", " Photons: PV z from conversion tracks", 100, -25., 25.);
0862 h_dzPVFromTracks_[1] =
0863 iBooker.book1D("dzPVFromTracks", " Photons: PV Z_rec - Z_true from conversion tracks", 100, -5., 5.);
0864 h2_dzPVVsR_ = iBooker.book2D("h2dzPVVsR", "Photon Reco conversions: dz(PV) vs R", rBin, rMin, rMax, 100, -3., 3.);
0865 p_dzPVVsR_ =
0866 iBooker.bookProfile("pdzPVVsR", "Photon Reco conversions: dz(PV) vs R", rBin, rMin, rMax, 100, -3., 3., "");
0867
0868 histname = "lxybs";
0869 h_lxybs_[0][0] = iBooker.book1D(histname + "All", "vertex #chi^{2} all", 200, -100., 100.);
0870 h_lxybs_[0][1] = iBooker.book1D(histname + "Barrel", "vertex #chi^{2} barrel", 200, -100., 100.);
0871 h_lxybs_[0][2] = iBooker.book1D(histname + "Endcap", "vertex #chi^{2} endcap", 200, -100., 100.);
0872 h_lxybs_[1][0] = iBooker.book1D(histname + "All_Ass", "vertex #chi^{2} all", 200, -100., 100.);
0873 h_lxybs_[1][1] = iBooker.book1D(histname + "Barrel_Ass", "vertex #chi^{2} barrel", 200, -100., 100.);
0874 h_lxybs_[1][2] = iBooker.book1D(histname + "Endcap_Ass", "vertex #chi^{2} endcap", 200, -100., 100.);
0875 h_lxybs_[2][0] = iBooker.book1D(histname + "All_Fakes", "vertex #chi^{2} all", 200, -100., 100.);
0876 h_lxybs_[2][1] = iBooker.book1D(histname + "Barrel_Fakes", "vertex #chi^{2} barrel", 200, -100., 100.);
0877 h_lxybs_[2][2] = iBooker.book1D(histname + "Endcap_Fakes", "vertex #chi^{2} endcap", 200, -100., 100.);
0878
0879 histname = "maxNHitsBeforeVtx";
0880 h_maxNHitsBeforeVtx_[0][0] = iBooker.book1D(histname + "All", "vertex #chi^{2} all", 16, -0.5, 15.5);
0881 h_maxNHitsBeforeVtx_[0][1] = iBooker.book1D(histname + "Barrel", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0882 h_maxNHitsBeforeVtx_[0][2] = iBooker.book1D(histname + "Endcap", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0883 h_maxNHitsBeforeVtx_[1][0] = iBooker.book1D(histname + "All_Ass", "vertex #chi^{2} all", 16, -0.5, 15.5);
0884 h_maxNHitsBeforeVtx_[1][1] = iBooker.book1D(histname + "Barrel_Ass", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0885 h_maxNHitsBeforeVtx_[1][2] = iBooker.book1D(histname + "Endcap_Ass", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0886 h_maxNHitsBeforeVtx_[2][0] = iBooker.book1D(histname + "All_Fakes", "vertex #chi^{2} all", 16, -0.5, 15.5);
0887 h_maxNHitsBeforeVtx_[2][1] = iBooker.book1D(histname + "Barrel_Fakes", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0888 h_maxNHitsBeforeVtx_[2][2] = iBooker.book1D(histname + "Endcap_Fakes", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0889
0890 histname = "leadNHitsBeforeVtx";
0891 h_leadNHitsBeforeVtx_[0][0] = iBooker.book1D(histname + "All", "vertex #chi^{2} all", 16, -0.5, 15.5);
0892 h_leadNHitsBeforeVtx_[0][1] = iBooker.book1D(histname + "Barrel", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0893 h_leadNHitsBeforeVtx_[0][2] = iBooker.book1D(histname + "Endcap", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0894 h_leadNHitsBeforeVtx_[1][0] = iBooker.book1D(histname + "All_Ass", "vertex #chi^{2} all", 16, -0.5, 15.5);
0895 h_leadNHitsBeforeVtx_[1][1] = iBooker.book1D(histname + "Barrel_Ass", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0896 h_leadNHitsBeforeVtx_[1][2] = iBooker.book1D(histname + "Endcap_Ass", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0897 h_leadNHitsBeforeVtx_[2][0] = iBooker.book1D(histname + "All_Fakes", "vertex #chi^{2} all", 16, -0.5, 15.5);
0898 h_leadNHitsBeforeVtx_[2][1] = iBooker.book1D(histname + "Barrel_Fakes", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0899 h_leadNHitsBeforeVtx_[2][2] = iBooker.book1D(histname + "Endcap_Fakes", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0900
0901 histname = "trailNHitsBeforeVtx";
0902 h_trailNHitsBeforeVtx_[0][0] = iBooker.book1D(histname + "All", "vertex #chi^{2} all", 16, -0.5, 15.5);
0903 h_trailNHitsBeforeVtx_[0][1] = iBooker.book1D(histname + "Barrel", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0904 h_trailNHitsBeforeVtx_[0][2] = iBooker.book1D(histname + "Endcap", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0905 h_trailNHitsBeforeVtx_[1][0] = iBooker.book1D(histname + "All_Ass", "vertex #chi^{2} all", 16, -0.5, 15.5);
0906 h_trailNHitsBeforeVtx_[1][1] = iBooker.book1D(histname + "Barrel_Ass", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0907 h_trailNHitsBeforeVtx_[1][2] = iBooker.book1D(histname + "Endcap_Ass", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0908 h_trailNHitsBeforeVtx_[2][0] = iBooker.book1D(histname + "All_Fakes", "vertex #chi^{2} all", 16, -0.5, 15.5);
0909 h_trailNHitsBeforeVtx_[2][1] = iBooker.book1D(histname + "Barrel_Fakes", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0910 h_trailNHitsBeforeVtx_[2][2] = iBooker.book1D(histname + "Endcap_Fakes", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0911
0912 histname = "sumNHitsBeforeVtx";
0913 h_sumNHitsBeforeVtx_[0][0] = iBooker.book1D(histname + "All", "vertex #chi^{2} all", 16, -0.5, 15.5);
0914 h_sumNHitsBeforeVtx_[0][1] = iBooker.book1D(histname + "Barrel", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0915 h_sumNHitsBeforeVtx_[0][2] = iBooker.book1D(histname + "Endcap", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0916 h_sumNHitsBeforeVtx_[1][0] = iBooker.book1D(histname + "All_Ass", "vertex #chi^{2} all", 16, -0.5, 15.5);
0917 h_sumNHitsBeforeVtx_[1][1] = iBooker.book1D(histname + "Barrel_Ass", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0918 h_sumNHitsBeforeVtx_[1][2] = iBooker.book1D(histname + "Endcap_Ass", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0919 h_sumNHitsBeforeVtx_[2][0] = iBooker.book1D(histname + "All_Fakes", "vertex #chi^{2} all", 16, -0.5, 15.5);
0920 h_sumNHitsBeforeVtx_[2][1] = iBooker.book1D(histname + "Barrel_Fakes", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0921 h_sumNHitsBeforeVtx_[2][2] = iBooker.book1D(histname + "Endcap_Fakes", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0922
0923 histname = "maxDlClosestHitToVtx";
0924 h_maxDlClosestHitToVtx_[0][0] = iBooker.book1D(histname + "All", "vertex #chi^{2} all", 100, -10., 10.);
0925 h_maxDlClosestHitToVtx_[0][1] = iBooker.book1D(histname + "Barrel", "vertex #chi^{2} barrel", 100, -10., 10.);
0926 h_maxDlClosestHitToVtx_[0][2] = iBooker.book1D(histname + "Endcap", "vertex #chi^{2} endcap", 100, -10., 10.);
0927 h_maxDlClosestHitToVtx_[1][0] = iBooker.book1D(histname + "All_Ass", "vertex #chi^{2} all", 100, -10., 10.);
0928 h_maxDlClosestHitToVtx_[1][1] = iBooker.book1D(histname + "Barrel_Ass", "vertex #chi^{2} barrel", 100, -10., 10.);
0929 h_maxDlClosestHitToVtx_[1][2] = iBooker.book1D(histname + "Endcap_Ass", "vertex #chi^{2} endcap", 100, -10., 10.);
0930 h_maxDlClosestHitToVtx_[2][0] = iBooker.book1D(histname + "All_Fakes", "vertex #chi^{2} all", 100, -10., 10.);
0931 h_maxDlClosestHitToVtx_[2][1] = iBooker.book1D(histname + "Barrel_Fakes", "vertex #chi^{2} barrel", 100, -10., 10.);
0932 h_maxDlClosestHitToVtx_[2][2] = iBooker.book1D(histname + "Endcap_Fakes", "vertex #chi^{2} endcap", 100, -10., 10.);
0933
0934 histname = "maxDlClosestHitToVtxSig";
0935 h_maxDlClosestHitToVtxSig_[0][0] = iBooker.book1D(histname + "All", "vertex #chi^{2} all", 100, -8., 8.);
0936 h_maxDlClosestHitToVtxSig_[0][1] = iBooker.book1D(histname + "Barrel", "vertex #chi^{2} barrel", 100, -8., 8.);
0937 h_maxDlClosestHitToVtxSig_[0][2] = iBooker.book1D(histname + "Endcap", "vertex #chi^{2} endcap", 100, -8., 8.);
0938 h_maxDlClosestHitToVtxSig_[1][0] = iBooker.book1D(histname + "All_Ass", "vertex #chi^{2} all", 100, -8., 8.);
0939 h_maxDlClosestHitToVtxSig_[1][1] = iBooker.book1D(histname + "Barrel_Ass", "vertex #chi^{2} barrel", 100, -8., 8.);
0940 h_maxDlClosestHitToVtxSig_[1][2] = iBooker.book1D(histname + "Endcap_Ass", "vertex #chi^{2} endcap", 100, -8., 8.);
0941 h_maxDlClosestHitToVtxSig_[2][0] = iBooker.book1D(histname + "All_Fakes", "vertex #chi^{2} all", 100, -8., 8.);
0942 h_maxDlClosestHitToVtxSig_[2][1] =
0943 iBooker.book1D(histname + "Barrel_Fakes", "vertex #chi^{2} barrel", 100, -8., 8.);
0944 h_maxDlClosestHitToVtxSig_[2][2] =
0945 iBooker.book1D(histname + "Endcap_Fakes", "vertex #chi^{2} endcap", 100, -8., 8.);
0946
0947 histname = "deltaExpectedHitsInner";
0948 h_deltaExpectedHitsInner_[0][0] = iBooker.book1D(histname + "All", "vertex #chi^{2} all", 31, -15.5, 15.5);
0949 h_deltaExpectedHitsInner_[0][1] = iBooker.book1D(histname + "Barrel", "vertex #chi^{2} barrel", 31, -15.5, 15.5);
0950 h_deltaExpectedHitsInner_[0][2] = iBooker.book1D(histname + "Endcap", "vertex #chi^{2} endcap", 31, -15.5, 15.5);
0951 h_deltaExpectedHitsInner_[1][0] = iBooker.book1D(histname + "All_Ass", "vertex #chi^{2} all", 31, -15.5, 15.5);
0952 h_deltaExpectedHitsInner_[1][1] =
0953 iBooker.book1D(histname + "Barrel_Ass", "vertex #chi^{2} barrel", 31, -15.5, 15.5);
0954 h_deltaExpectedHitsInner_[1][2] =
0955 iBooker.book1D(histname + "Endcap_Ass", "vertex #chi^{2} endcap", 31, -15.5, 15.5);
0956 h_deltaExpectedHitsInner_[2][0] = iBooker.book1D(histname + "All_Fakes", "vertex #chi^{2} all", 31, -15.5, 15.5);
0957 h_deltaExpectedHitsInner_[2][1] =
0958 iBooker.book1D(histname + "Barrel_Fakes", "vertex #chi^{2} barrel", 31, -15.5, 15.5);
0959 h_deltaExpectedHitsInner_[2][2] =
0960 iBooker.book1D(histname + "Endcap_Fakes", "vertex #chi^{2} endcap", 31, -15.5, 15.5);
0961
0962 histname = "leadExpectedHitsInner";
0963 h_leadExpectedHitsInner_[0][0] = iBooker.book1D(histname + "All", "vertex #chi^{2} all", 16, -0.5, 15.5);
0964 h_leadExpectedHitsInner_[0][1] = iBooker.book1D(histname + "Barrel", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0965 h_leadExpectedHitsInner_[0][2] = iBooker.book1D(histname + "Endcap", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0966 h_leadExpectedHitsInner_[1][0] = iBooker.book1D(histname + "All_Ass", "vertex #chi^{2} all", 16, -0.5, 15.5);
0967 h_leadExpectedHitsInner_[1][1] = iBooker.book1D(histname + "Barrel_Ass", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0968 h_leadExpectedHitsInner_[1][2] = iBooker.book1D(histname + "Endcap_Ass", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0969 h_leadExpectedHitsInner_[2][0] = iBooker.book1D(histname + "All_Fakes", "vertex #chi^{2} all", 16, -0.5, 15.5);
0970 h_leadExpectedHitsInner_[2][1] =
0971 iBooker.book1D(histname + "Barrel_Fakes", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0972 h_leadExpectedHitsInner_[2][2] =
0973 iBooker.book1D(histname + "Endcap_Fakes", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0974
0975 histname = "nSharedHits";
0976 h_nSharedHits_[0][0] = iBooker.book1D(histname + "All", "vertex #chi^{2} all", 16, -0.5, 15.5);
0977 h_nSharedHits_[0][1] = iBooker.book1D(histname + "Barrel", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0978 h_nSharedHits_[0][2] = iBooker.book1D(histname + "Endcap", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0979 h_nSharedHits_[1][0] = iBooker.book1D(histname + "All_Ass", "vertex #chi^{2} all", 16, -0.5, 15.5);
0980 h_nSharedHits_[1][1] = iBooker.book1D(histname + "Barrel_Ass", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0981 h_nSharedHits_[1][2] = iBooker.book1D(histname + "Endcap_Ass", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0982 h_nSharedHits_[2][0] = iBooker.book1D(histname + "All_Fakes", "vertex #chi^{2} all", 16, -0.5, 15.5);
0983 h_nSharedHits_[2][1] = iBooker.book1D(histname + "Barrel_Fakes", "vertex #chi^{2} barrel", 16, -0.5, 15.5);
0984 h_nSharedHits_[2][2] = iBooker.book1D(histname + "Endcap_Fakes", "vertex #chi^{2} endcap", 16, -0.5, 15.5);
0985
0986
0987 histname = "nHits";
0988 nHits_[0] = iBooker.book2D(histname + "AllTracks",
0989 "Photons:Tracks from conversions: # of hits all tracks",
0990 etaBin,
0991 etaMin,
0992 etaMax,
0993 30,
0994 0.,
0995 30.);
0996 nHits_[1] = iBooker.book2D(histname + "AllTracks_Ass",
0997 "Photons:Tracks from conversions: # of hits all tracks ass",
0998 etaBin,
0999 etaMin,
1000 etaMax,
1001 30,
1002 0.,
1003 30.);
1004 nHits_[2] = iBooker.book2D(histname + "AllTracks_Fakes",
1005 "Photons:Tracks from conversions: # of hits all tracks fakes",
1006 etaBin,
1007 etaMin,
1008 etaMax,
1009 30,
1010 0.,
1011 30.);
1012
1013 histname = "nHitsVsEta";
1014 nHitsVsEta_[0] = iBooker.book2D(histname + "AllTracks",
1015 "Photons:Tracks from conversions: # of hits vs #eta all tracks",
1016 etaBin,
1017 etaMin,
1018 etaMax,
1019 30,
1020 0.,
1021 30.);
1022 nHitsVsEta_[1] = iBooker.book2D(histname + "AllTracks_Ass",
1023 "Photons:Tracks from conversions: # of hits vs #eta all tracks",
1024 etaBin,
1025 etaMin,
1026 etaMax,
1027 30,
1028 0.,
1029 30.);
1030 nHitsVsEta_[2] = iBooker.book2D(histname + "AllTracks_Fakes",
1031 "Photons:Tracks from conversions: # of hits vs #eta all tracks",
1032 etaBin,
1033 etaMin,
1034 etaMax,
1035 30,
1036 0.,
1037 30.);
1038 histname = "h_nHitsVsEta";
1039 p_nHitsVsEta_[0] = iBooker.bookProfile(histname + "AllTracks",
1040 "Photons:Tracks from conversions: # of hits vs #eta all tracks",
1041 etaBin,
1042 etaMin,
1043 etaMax,
1044 30,
1045 -0.5,
1046 29.5,
1047 "");
1048 p_nHitsVsEta_[1] = iBooker.bookProfile(histname + "AllTracks_Ass",
1049 "Photons:Tracks from conversions: # of hits vs #eta all tracks",
1050 etaBin,
1051 etaMin,
1052 etaMax,
1053 30,
1054 -0.5,
1055 29.5,
1056 "");
1057 p_nHitsVsEta_[2] = iBooker.bookProfile(histname + "AllTracks_Fakes",
1058 "Photons:Tracks from conversions: # of hits vs #eta all tracks",
1059 etaBin,
1060 etaMin,
1061 etaMax,
1062 30,
1063 -0.5,
1064 29.5,
1065 "");
1066
1067 histname = "nHitsVsR";
1068 nHitsVsR_[0] = iBooker.book2D(histname + "AllTracks",
1069 "Photons:Tracks from conversions: # of hits vs radius all tracks",
1070 rBin,
1071 rMin,
1072 rMax,
1073 30,
1074 0.,
1075 30.);
1076 nHitsVsR_[1] = iBooker.book2D(histname + "AllTracks_Ass",
1077 "Photons:Tracks from conversions: # of hits vs radius all tracks",
1078 rBin,
1079 rMin,
1080 rMax,
1081 30,
1082 0.,
1083 30.);
1084 nHitsVsR_[2] = iBooker.book2D(histname + "AllTracks_Fakes",
1085 "Photons:Tracks from conversions: # of hits vs radius all tracks",
1086 rBin,
1087 rMin,
1088 rMax,
1089 30,
1090 0.,
1091 30.);
1092
1093 histname = "h_nHitsVsR";
1094 p_nHitsVsR_[0] = iBooker.bookProfile(histname + "AllTracks",
1095 "Photons:Tracks from conversions: # of hits vs radius all tracks",
1096 rBin,
1097 rMin,
1098 rMax,
1099 30,
1100 -0.5,
1101 29.5,
1102 "");
1103 p_nHitsVsR_[1] = iBooker.bookProfile(histname + "AllTracks_Ass",
1104 "Photons:Tracks from conversions: # of hits vs radius all tracks",
1105 rBin,
1106 rMin,
1107 rMax,
1108 30,
1109 -0.5,
1110 29.5,
1111 "");
1112 p_nHitsVsR_[2] = iBooker.bookProfile(histname + "AllTracks_Fakes",
1113 "Photons:Tracks from conversions: # of hits vs radius all tracks",
1114 rBin,
1115 rMin,
1116 rMax,
1117 30,
1118 -0.5,
1119 29.5,
1120 "");
1121
1122 histname = "tkChi2";
1123 h_tkChi2_[0] = iBooker.book1D(
1124 histname + "AllTracks", "Photons:Tracks from conversions: #chi^{2} of all tracks", 100, chi2Min, chi2Max);
1125 h_tkChi2_[1] = iBooker.book1D(
1126 histname + "AllTracks_Ass", "Photons:Tracks from conversions: #chi^{2} of all tracks", 100, chi2Min, chi2Max);
1127 h_tkChi2_[2] = iBooker.book1D(
1128 histname + "AllTracks_Fakes", "Photons:Tracks from conversions: #chi^{2} of all tracks", 100, chi2Min, chi2Max);
1129
1130 histname = "tkChi2Large";
1131 h_tkChi2Large_[0] = iBooker.book1D(
1132 histname + "AllTracks", "Photons:Tracks from conversions: #chi^{2} of all tracks", 1000, 0., 5000.0);
1133 h_tkChi2Large_[1] = iBooker.book1D(
1134 histname + "AllTracks_Ass", "Photons:Tracks from conversions: #chi^{2} of all tracks", 1000, 0., 5000.0);
1135 h_tkChi2Large_[2] = iBooker.book1D(
1136 histname + "AllTracks_Fakes", "Photons:Tracks from conversions: #chi^{2} of all tracks", 1000, 0., 5000.0);
1137
1138 histname = "h2Chi2VsEta";
1139 h2_Chi2VsEta_[0] = iBooker.book2D(
1140 histname + "All", " Reco Track #chi^{2} vs #eta: All ", etaBin2, etaMin, etaMax, 100, chi2Min, chi2Max);
1141 h2_Chi2VsEta_[1] = iBooker.book2D(
1142 histname + "All_Ass", " Reco Track #chi^{2} vs #eta: All ", etaBin2, etaMin, etaMax, 100, chi2Min, chi2Max);
1143 h2_Chi2VsEta_[2] = iBooker.book2D(
1144 histname + "All_Fakes", " Reco Track #chi^{2} vs #eta: All ", etaBin2, etaMin, etaMax, 100, chi2Min, chi2Max);
1145 histname = "pChi2VsEta";
1146 p_Chi2VsEta_[0] = iBooker.bookProfile(
1147 histname + "All", " Reco Track #chi^{2} vs #eta : All ", etaBin2, etaMin, etaMax, 100, chi2Min, chi2Max, "");
1148 p_Chi2VsEta_[1] = iBooker.bookProfile(
1149 histname + "All_Ass", " Reco Track #chi^{2} vs #eta : All ", etaBin2, etaMin, etaMax, 100, chi2Min, chi2Max, "");
1150 p_Chi2VsEta_[2] = iBooker.bookProfile(histname + "All_Fakes",
1151 " Reco Track #chi^{2} vs #eta : All ",
1152 etaBin2,
1153 etaMin,
1154 etaMax,
1155 100,
1156 chi2Min,
1157 chi2Max,
1158 "");
1159
1160 histname = "h2Chi2VsR";
1161 h2_Chi2VsR_[0] =
1162 iBooker.book2D(histname + "All", " Reco Track #chi^{2} vs R: All ", rBin, rMin, rMax, 100, chi2Min, chi2Max);
1163 h2_Chi2VsR_[1] = iBooker.book2D(
1164 histname + "All_Ass", " Reco Track #chi^{2} vs R: All ", rBin, rMin, rMax, 100, chi2Min, chi2Max);
1165 h2_Chi2VsR_[2] = iBooker.book2D(
1166 histname + "All_Fakes", " Reco Track #chi^{2} vs R: All ", rBin, rMin, rMax, 100, chi2Min, chi2Max);
1167 histname = "pChi2VsR";
1168 p_Chi2VsR_[0] = iBooker.bookProfile(
1169 histname + "All", " Reco Track #chi^{2} vas R : All ", rBin, rMin, rMax, 100, chi2Min, chi2Max, "");
1170 p_Chi2VsR_[1] = iBooker.bookProfile(
1171 histname + "All_Ass", " Reco Track #chi^{2} vas R : All ", rBin, rMin, rMax, 100, chi2Min, chi2Max, "");
1172 p_Chi2VsR_[2] = iBooker.bookProfile(
1173 histname + "All_Fakes", " Reco Track #chi^{2} vas R : All ", rBin, rMin, rMax, 100, chi2Min, chi2Max, "");
1174
1175 histname = "hTkD0";
1176 h_TkD0_[0] = iBooker.book1D(histname + "All", " Reco Track D0*q: All ", 200, -0.1, 60);
1177 h_TkD0_[1] = iBooker.book1D(histname + "All_Ass", " Reco Track D0*q: Barrel ", 200, -0.1, 60);
1178 h_TkD0_[2] = iBooker.book1D(histname + "All_Fakes", " Reco Track D0*q: Endcap ", 200, -0.1, 60);
1179
1180 histname = "hTkPtPull";
1181 h_TkPtPull_[0] = iBooker.book1D(histname + "All", " Reco Track Pt pull: All ", 100, -20., 10.);
1182 histname = "hTkPtPull";
1183 h_TkPtPull_[1] = iBooker.book1D(histname + "Barrel", " Reco Track Pt pull: Barrel ", 100, -20., 10.);
1184 histname = "hTkPtPull";
1185 h_TkPtPull_[2] = iBooker.book1D(histname + "Endcap", " Reco Track Pt pull: Endcap ", 100, -20., 10.);
1186
1187 histname = "h2TkPtPullEta";
1188 h2_TkPtPull_[0] =
1189 iBooker.book2D(histname + "All", " Reco Track Pt pull: All ", etaBin2, etaMin, etaMax, 100, -20., 10.);
1190 histname = "pTkPtPullEta";
1191 p_TkPtPull_[0] = iBooker.bookProfile(
1192 histname + "All", " Reco Track Pt pull: All ", etaBin2, etaMin, etaMax, 100, -20., 10., " ");
1193
1194 histname = "PtRecVsPtSim";
1195 h2_PtRecVsPtSim_[0] =
1196 iBooker.book2D(histname + "All", "Pt Rec vs Pt sim: All ", etBin, etMin, etMax, etBin, etMin, etMax);
1197 h2_PtRecVsPtSim_[1] =
1198 iBooker.book2D(histname + "Barrel", "Pt Rec vs Pt sim: Barrel ", etBin, etMin, etMax, etBin, etMin, etMax);
1199 h2_PtRecVsPtSim_[2] =
1200 iBooker.book2D(histname + "Endcap", "Pt Rec vs Pt sim: Endcap ", etBin, etMin, etMax, etBin, etMin, etMax);
1201
1202 histname = "photonPtRecVsPtSim";
1203 h2_photonPtRecVsPtSim_ =
1204 iBooker.book2D(histname + "All", "Pt Rec vs Pt sim: All ", etBin, etMin, etMax, etBin, etMin, etMax);
1205
1206 histname = "nHitsBeforeVtx";
1207 h_nHitsBeforeVtx_[0] = iBooker.book1D(histname + "All", "Pt Rec vs Pt sim: All ", 16, -0.5, 15.5);
1208 h_nHitsBeforeVtx_[1] = iBooker.book1D(histname + "Barrel", "Pt Rec vs Pt sim: Barrel ", 16, -0.5, 15.5);
1209 h_nHitsBeforeVtx_[2] = iBooker.book1D(histname + "Endcap", "Pt Rec vs Pt sim: Endcap ", 16, -0.5, 15.5);
1210
1211 histname = "dlClosestHitToVtx";
1212 h_dlClosestHitToVtx_[0] = iBooker.book1D(histname + "All", "Pt Rec vs Pt sim: All ", 100, -10., 10.);
1213 h_dlClosestHitToVtx_[1] = iBooker.book1D(histname + "Barrel", "Pt Rec vs Pt sim: Barrel ", 100, -10., 10.);
1214 h_dlClosestHitToVtx_[2] = iBooker.book1D(histname + "Endcap", "Pt Rec vs Pt sim: Endcap ", 100, -10., 10.);
1215
1216 histname = "dlClosestHitToVtxSig";
1217 h_dlClosestHitToVtxSig_[0] = iBooker.book1D(histname + "All", "Pt Rec vs Pt sim: All ", 100, -8., 8.);
1218 h_dlClosestHitToVtxSig_[1] = iBooker.book1D(histname + "Barrel", "Pt Rec vs Pt sim: Barrel ", 100, -8., 8.);
1219 h_dlClosestHitToVtxSig_[2] = iBooker.book1D(histname + "Endcap", "Pt Rec vs Pt sim: Endcap ", 100, -8., 8.);
1220
1221 h_match_ = iBooker.book1D("h_match", " ", 3, -0.5, 2.5);
1222
1223 }
1224 }
1225
1226 void TkConvValidator::dqmBeginRun(edm::Run const& r, edm::EventSetup const& theEventSetup) {
1227
1228 edm::LogInfo("ConvertedPhotonProducer") << " get magnetic field"
1229 << "\n";
1230 theMF_ = theEventSetup.getHandle(magneticFieldToken_);
1231
1232 thePhotonMCTruthFinder_ = new PhotonMCTruthFinder();
1233 }
1234
1235 void TkConvValidator::dqmEndRun(edm::Run const& r, edm::EventSetup const&) { delete thePhotonMCTruthFinder_; }
1236
1237 void TkConvValidator::analyze(const edm::Event& e, const edm::EventSetup& esup) {
1238 thePhotonMCTruthFinder_->clear();
1239 using namespace edm;
1240
1241
1242
1243 const float BARL = 1.4442;
1244
1245 const float END_HI = 2.5;
1246
1247
1248
1249 Handle<reco::TrackToTrackingParticleAssociator> theTrackAssociator;
1250 e.getByToken(trackAssociator_Token_, theTrackAssociator);
1251
1252 nEvt_++;
1253 LogInfo("TkConvValidator") << "TkConvValidator Analyzing event number: " << e.id() << " Global Counter " << nEvt_
1254 << "\n";
1255
1256
1257
1258 theCaloGeom_ = esup.getHandle(caloGeometryToken_);
1259
1260
1261 auto theTTB = esup.getHandle(transientTrackBuilderToken_);
1262
1263
1264 Handle<reco::ConversionCollection> convHandle;
1265 e.getByToken(conversionCollectionPr_Token_, convHandle);
1266 const reco::ConversionCollection convCollection = *(convHandle.product());
1267 if (!convHandle.isValid()) {
1268 edm::LogError("ConversionsProducer") << "Error! Can't get the collection " << std::endl;
1269 return;
1270 }
1271
1272
1273 Handle<reco::PhotonCollection> photonHandle;
1274 e.getByToken(photonCollectionPr_Token_, photonHandle);
1275 const reco::PhotonCollection photonCollection = *(photonHandle.product());
1276 if (!photonHandle.isValid()) {
1277 edm::LogError("PhotonProducer") << "Error! Can't get the Photon collection " << std::endl;
1278 return;
1279 }
1280
1281
1282 edm::Handle<reco::VertexCollection> vertexHandle;
1283 reco::VertexCollection vertexCollection;
1284 e.getByToken(offline_pvToken_, vertexHandle);
1285 if (!vertexHandle.isValid()) {
1286 edm::LogError("TrackerOnlyConversionProducer") << "Error! Can't get the product primary Vertex Collection "
1287 << "\n";
1288 } else {
1289 vertexCollection = *(vertexHandle.product());
1290 }
1291 reco::Vertex the_pvtx;
1292 bool valid_pvtx = false;
1293 if (!vertexCollection.empty()) {
1294 the_pvtx = *(vertexCollection.begin());
1295
1296 if (the_pvtx.isValid() && fabs(the_pvtx.position().z()) <= 15 && the_pvtx.position().Rho() <= 2) {
1297 valid_pvtx = true;
1298 }
1299 }
1300
1301 edm::Handle<reco::BeamSpot> bsHandle;
1302 e.getByToken(beamspotToken_, bsHandle);
1303 if (!bsHandle.isValid()) {
1304 edm::LogError("TrackerOnlyConversionProducer") << "Error! Can't get the product primary Vertex Collection "
1305 << "\n";
1306 return;
1307 }
1308 const reco::BeamSpot& thebs = *bsHandle.product();
1309
1310
1311
1312
1313 auto tracker = esup.getHandle(trackerGeometryToken_);
1314 const TrackerGeometry* trackerGeom = tracker.product();
1315
1316
1317
1318
1319
1320
1321 edm::Handle<SimTrackContainer> SimTk;
1322 edm::Handle<SimVertexContainer> SimVtx;
1323 e.getByToken(g4_simTk_Token_, SimTk);
1324 e.getByToken(g4_simVtx_Token_, SimVtx);
1325
1326 bool useTP = parameters_.getParameter<bool>("useTP");
1327 TrackingParticleRefVector dummy;
1328 edm::Handle<TrackingParticleRefVector> TPHandleForEff;
1329 edm::Handle<TrackingParticleRefVector> TPHandleForFakeRate;
1330 if (useTP) {
1331 e.getByToken(tpSelForEff_Token_, TPHandleForEff);
1332 e.getByToken(tpSelForFake_Token_, TPHandleForFakeRate);
1333 }
1334
1335 const TrackingParticleRefVector& tpForEfficiency = useTP ? *(TPHandleForEff.product()) : dummy;
1336 const TrackingParticleRefVector& tpForFakeRate = useTP ? *(TPHandleForFakeRate.product()) : dummy;
1337
1338 const std::vector<SimTrack>& theSimTracks = *SimTk;
1339 const std::vector<SimVertex>& theSimVertices = *SimVtx;
1340
1341
1342
1343 std::vector<PhotonMCTruth> mcPhotons = thePhotonMCTruthFinder_->find(theSimTracks, theSimVertices);
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355 std::map<const reco::Track*, TrackingParticleRef> myAss;
1356 std::map<const reco::Track*, TrackingParticleRef>::const_iterator itAss;
1357
1358 for (std::vector<PhotonMCTruth>::const_iterator mcPho = mcPhotons.begin(); mcPho != mcPhotons.end(); mcPho++) {
1359 mcConvPt_ = (*mcPho).fourMomentum().et();
1360 float mcPhi = (*mcPho).fourMomentum().phi();
1361 mcPhi_ = phiNormalization(mcPhi);
1362 mcEta_ = (*mcPho).fourMomentum().pseudoRapidity();
1363 mcEta_ = etaTransformation(mcEta_, (*mcPho).primaryVertex().z());
1364 mcConvR_ = (*mcPho).vertex().perp();
1365 mcConvX_ = (*mcPho).vertex().x();
1366 mcConvY_ = (*mcPho).vertex().y();
1367 mcConvZ_ = (*mcPho).vertex().z();
1368 mcConvEta_ = (*mcPho).vertex().eta();
1369 mcConvPhi_ = (*mcPho).vertex().phi();
1370
1371 if (fabs(mcEta_) > END_HI)
1372 continue;
1373
1374 if (mcConvPt_ < minPhoPtForEffic)
1375 continue;
1376 if (fabs(mcEta_) > maxPhoEtaForEffic)
1377 continue;
1378 if (fabs(mcConvZ_) > maxPhoZForEffic)
1379 continue;
1380 if (mcConvR_ > maxPhoRForEffic)
1381 continue;
1382
1383
1384 bool goodSimConversion = false;
1385 bool visibleConversion = false;
1386 bool visibleConversionsWithTwoSimTracks = false;
1387 if ((*mcPho).isAConversion() == 1) {
1388 nSimConv_[0]++;
1389 h_AllSimConv_[0]->Fill(mcEta_);
1390 h_AllSimConv_[1]->Fill(mcPhi_);
1391 h_AllSimConv_[2]->Fill(mcConvR_);
1392 h_AllSimConv_[3]->Fill(mcConvZ_);
1393 h_AllSimConv_[4]->Fill((*mcPho).fourMomentum().et());
1394
1395 if (mcConvR_ < 15)
1396 h_SimConvEtaPix_[0]->Fill(mcEta_);
1397
1398 if ((fabs(mcEta_) <= BARL && mcConvR_ < 85) ||
1399 (fabs(mcEta_) > BARL && fabs(mcEta_) <= END_HI && fabs((*mcPho).vertex().z()) < 210))
1400 visibleConversion = true;
1401
1402 theConvTP_.clear();
1403
1404
1405 for (const TrackingParticleRef& tp : tpForEfficiency) {
1406 if (fabs(tp->vx() - (*mcPho).vertex().x()) < 0.0001 && fabs(tp->vy() - (*mcPho).vertex().y()) < 0.0001 &&
1407 fabs(tp->vz() - (*mcPho).vertex().z()) < 0.0001) {
1408 theConvTP_.push_back(tp);
1409 }
1410 }
1411
1412
1413 if (theConvTP_.size() == 2)
1414 visibleConversionsWithTwoSimTracks = true;
1415 goodSimConversion = false;
1416
1417 if (visibleConversion && visibleConversionsWithTwoSimTracks)
1418 goodSimConversion = true;
1419 if (goodSimConversion) {
1420 nSimConv_[1]++;
1421 h_VisSimConv_[0]->Fill(mcEta_);
1422 h_VisSimConv_[1]->Fill(mcPhi_);
1423 h_VisSimConv_[2]->Fill(mcConvR_);
1424 h_VisSimConv_[3]->Fill(mcConvZ_);
1425 h_VisSimConv_[4]->Fill((*mcPho).fourMomentum().et());
1426 }
1427
1428 for (edm::RefVector<TrackingParticleCollection>::iterator iTrk = theConvTP_.begin(); iTrk != theConvTP_.end();
1429 ++iTrk) {
1430 h_simTkPt_->Fill((*iTrk)->pt());
1431 h_simTkEta_->Fill((*iTrk)->eta());
1432 }
1433
1434 }
1435
1436 if (!(visibleConversion && visibleConversionsWithTwoSimTracks))
1437 continue;
1438
1439 h_simConvVtxRvsZ_[0]->Fill(fabs(mcConvZ_), mcConvR_);
1440 if (fabs(mcEta_) <= 1.) {
1441 h_simConvVtxRvsZ_[1]->Fill(fabs(mcConvZ_), mcConvR_);
1442 h_simConvVtxYvsX_->Fill(mcConvX_, mcConvY_);
1443 } else
1444 h_simConvVtxRvsZ_[2]->Fill(fabs(mcConvZ_), mcConvR_);
1445
1446
1447 for (edm::RefVector<TrackingParticleCollection>::iterator iTP = theConvTP_.begin(); iTP != theConvTP_.end();
1448 iTP++) {
1449
1450 }
1451
1452 bool recomatch = false;
1453 float chi2Prob = 0.;
1454
1455
1456 for (reco::ConversionCollection::const_iterator conv = convHandle->begin(); conv != convHandle->end(); ++conv) {
1457 const reco::Conversion& aConv = (*conv);
1458 if (arbitratedMerged_ && !aConv.quality(reco::Conversion::arbitratedMerged))
1459 continue;
1460 if (generalTracksOnly_ && !aConv.quality(reco::Conversion::generalTracksOnly))
1461 continue;
1462 if (arbitratedEcalSeeded_ && !aConv.quality(reco::Conversion::arbitratedEcalSeeded))
1463 continue;
1464
1465 if (highPurity_ && !aConv.quality(reco::Conversion::highPurity))
1466 continue;
1467
1468
1469 const std::vector<edm::RefToBase<reco::Track> >& tracks = aConv.tracks();
1470
1471 const reco::Vertex& vtx = aConv.conversionVertex();
1472
1473 if (tracks.size() != 2 || !(vtx.isValid()))
1474 continue;
1475
1476 if (ChiSquaredProbability(aConv.conversionVertex().chi2(), aConv.conversionVertex().ndof()) <= minProb_)
1477 continue;
1478 if (aConv.nHitsBeforeVtx().size() > 1 &&
1479 max(aConv.nHitsBeforeVtx().at(0), aConv.nHitsBeforeVtx().at(1)) > maxHitsBeforeVtx_)
1480 continue;
1481
1482
1483 math::XYZVectorF themom = aConv.refittedPairMomentum();
1484 double dbsx = aConv.conversionVertex().x() - thebs.x0();
1485 double dbsy = aConv.conversionVertex().y() - thebs.y0();
1486 double lxy = (themom.x() * dbsx + themom.y() * dbsy) / themom.rho();
1487
1488 if (lxy < minLxy_)
1489 continue;
1490
1491
1492
1493 RefToBase<reco::Track> tfrb1 = aConv.tracks().front();
1494 RefToBase<reco::Track> tfrb2 = aConv.tracks().back();
1495
1496 if (ecalalgotracks_ && (!(tfrb1->algo() == reco::TrackBase::outInEcalSeededConv ||
1497 tfrb1->algo() == reco::TrackBase::inOutEcalSeededConv) ||
1498 !(tfrb2->algo() == reco::TrackBase::outInEcalSeededConv ||
1499 tfrb2->algo() == reco::TrackBase::inOutEcalSeededConv)))
1500 continue;
1501
1502
1503
1504
1505
1506
1507 RefToBaseVector<reco::Track> tc1, tc2;
1508 tc1.push_back(tfrb1);
1509 tc2.push_back(tfrb2);
1510 bool isAssociated = false;
1511 reco::SimToRecoCollection q1 = theTrackAssociator->associateSimToReco(tc1, theConvTP_);
1512 reco::SimToRecoCollection q2 = theTrackAssociator->associateSimToReco(tc2, theConvTP_);
1513
1514 std::vector<std::pair<RefToBase<reco::Track>, double> > trackV1, trackV2;
1515
1516 int tp_1 = 0, tp_2 = 1;
1517 if (q1.find(theConvTP_[0]) != q1.end()) {
1518 trackV1 = (std::vector<std::pair<RefToBase<reco::Track>, double> >)q1[theConvTP_[0]];
1519 } else if (q1.find(theConvTP_[1]) != q1.end()) {
1520 trackV1 = (std::vector<std::pair<RefToBase<reco::Track>, double> >)q1[theConvTP_[1]];
1521 tp_1 = 1;
1522 }
1523 if (q2.find(theConvTP_[1]) != q2.end()) {
1524 trackV2 = (std::vector<std::pair<RefToBase<reco::Track>, double> >)q2[theConvTP_[1]];
1525 } else if (q2.find(theConvTP_[0]) != q2.end()) {
1526 trackV2 = (std::vector<std::pair<RefToBase<reco::Track>, double> >)q2[theConvTP_[0]];
1527 tp_2 = 0;
1528 }
1529 if (!(!trackV1.empty() && !trackV2.empty()))
1530 continue;
1531 if (tp_1 == tp_2)
1532 continue;
1533
1534 edm::RefToBase<reco::Track> tr1 = trackV1.front().first;
1535 edm::RefToBase<reco::Track> tr2 = trackV2.front().first;
1536
1537
1538 myAss.insert(std::make_pair(tr1.get(), theConvTP_[tp_1]));
1539 myAss.insert(std::make_pair(tr2.get(), theConvTP_[tp_2]));
1540
1541
1542
1543
1544
1545
1546 isAssociated = true;
1547 recomatch = true;
1548 chi2Prob = ChiSquaredProbability(aConv.conversionVertex().chi2(), aConv.conversionVertex().ndof());
1549
1550 if (isAssociated) {
1551 h_SimRecConvTwoMTracks_[0]->Fill(mcEta_);
1552 h_SimRecConvTwoMTracks_[1]->Fill(mcPhi_);
1553 h_SimRecConvTwoMTracks_[2]->Fill(mcConvR_);
1554 h_SimRecConvTwoMTracks_[3]->Fill(mcConvZ_);
1555 h_SimRecConvTwoMTracks_[4]->Fill((*mcPho).fourMomentum().et());
1556 }
1557
1558
1559 }
1560 if (recomatch) {
1561
1562 h_SimConvTwoMTracks_[0]->Fill(mcEta_);
1563 h_SimConvTwoMTracks_[1]->Fill(mcPhi_);
1564 h_SimConvTwoMTracks_[2]->Fill(mcConvR_);
1565 h_SimConvTwoMTracks_[3]->Fill(mcConvZ_);
1566 h_SimConvTwoMTracks_[4]->Fill((*mcPho).fourMomentum().et());
1567
1568 if (chi2Prob > 0) {
1569 h_SimConvTwoMTracksAndVtxPGT0_[0]->Fill(mcEta_);
1570 h_SimConvTwoMTracksAndVtxPGT0_[1]->Fill(mcPhi_);
1571 h_SimConvTwoMTracksAndVtxPGT0_[2]->Fill(mcConvR_);
1572 h_SimConvTwoMTracksAndVtxPGT0_[3]->Fill(mcConvZ_);
1573 h_SimConvTwoMTracksAndVtxPGT0_[4]->Fill((*mcPho).fourMomentum().et());
1574 }
1575 if (chi2Prob > 0.0005) {
1576 h_SimConvTwoMTracksAndVtxPGT0005_[0]->Fill(mcEta_);
1577 h_SimConvTwoMTracksAndVtxPGT0005_[1]->Fill(mcPhi_);
1578 h_SimConvTwoMTracksAndVtxPGT0005_[2]->Fill(mcConvR_);
1579 h_SimConvTwoMTracksAndVtxPGT0005_[3]->Fill(mcConvZ_);
1580 h_SimConvTwoMTracksAndVtxPGT0005_[4]->Fill((*mcPho).fourMomentum().et());
1581 }
1582 }
1583
1584 }
1585
1586
1587
1588 for (reco::ConversionCollection::const_iterator conv = convHandle->begin(); conv != convHandle->end(); ++conv) {
1589 const reco::Conversion& aConv = (*conv);
1590 if (arbitratedMerged_ && !aConv.quality(reco::Conversion::arbitratedMerged))
1591 continue;
1592 if (generalTracksOnly_ && !aConv.quality(reco::Conversion::generalTracksOnly))
1593 continue;
1594 if (arbitratedEcalSeeded_ && !aConv.quality(reco::Conversion::arbitratedEcalSeeded))
1595 continue;
1596
1597 if (highPurity_ && !aConv.quality(reco::Conversion::highPurity))
1598 continue;
1599
1600
1601 std::vector<edm::RefToBase<reco::Track> > tracks = aConv.tracks();
1602
1603 const reco::Vertex& vtx = aConv.conversionVertex();
1604
1605 if (tracks.size() != 2 || !(vtx.isValid()))
1606 continue;
1607
1608
1609 if (ChiSquaredProbability(aConv.conversionVertex().chi2(), aConv.conversionVertex().ndof()) <= minProb_)
1610 continue;
1611 if (aConv.nHitsBeforeVtx().size() > 1 &&
1612 max(aConv.nHitsBeforeVtx().at(0), aConv.nHitsBeforeVtx().at(1)) > maxHitsBeforeVtx_)
1613 continue;
1614
1615
1616 math::XYZVectorF themom = aConv.refittedPairMomentum();
1617 double dbsx = aConv.conversionVertex().x() - thebs.x0();
1618 double dbsy = aConv.conversionVertex().y() - thebs.y0();
1619 double lxy = (themom.x() * dbsx + themom.y() * dbsy) / themom.rho();
1620
1621 if (lxy < minLxy_)
1622 continue;
1623
1624 bool phoIsInBarrel = false;
1625 bool phoIsInEndcap = false;
1626 RefToBase<reco::Track> tk1 = aConv.tracks().front();
1627 RefToBase<reco::Track> tk2 = aConv.tracks().back();
1628 RefToBaseVector<reco::Track> tc1, tc2;
1629 tc1.push_back(tk1);
1630 tc2.push_back(tk2);
1631
1632 if (ecalalgotracks_ &&
1633 (!(tk1->algo() == reco::TrackBase::outInEcalSeededConv ||
1634 tk1->algo() == reco::TrackBase::inOutEcalSeededConv) ||
1635 !(tk2->algo() == reco::TrackBase::outInEcalSeededConv || tk2->algo() == reco::TrackBase::inOutEcalSeededConv)))
1636 continue;
1637
1638
1639 const reco::Track refTk1 = aConv.conversionVertex().refittedTracks().front();
1640 const reco::Track refTk2 = aConv.conversionVertex().refittedTracks().back();
1641
1642 float dPhiTracksAtVtx;
1643
1644 math::XYZVector p1AtVtx = recalculateMomentumAtFittedVertex((*theMF_), *trackerGeom, tk1, aConv.conversionVertex());
1645 math::XYZVector p2AtVtx = recalculateMomentumAtFittedVertex((*theMF_), *trackerGeom, tk2, aConv.conversionVertex());
1646 if (p1AtVtx.perp2() > p2AtVtx.perp2())
1647 dPhiTracksAtVtx = p1AtVtx.phi() - p2AtVtx.phi();
1648 else
1649 dPhiTracksAtVtx = p2AtVtx.phi() - p1AtVtx.phi();
1650
1651 math::XYZVectorF refittedMom = aConv.refittedPairMomentum();
1652
1653 if (fabs(refittedMom.eta()) < 1.479) {
1654 phoIsInBarrel = true;
1655 } else {
1656 phoIsInEndcap = true;
1657 }
1658
1659 nRecConv_++;
1660
1661
1662 double Mindeltaeta = 999999;
1663 double Mindeltaphi = 999999;
1664 bool matchConvSC = false;
1665 reco::PhotonCollection::const_iterator iMatchingSC;
1666 for (reco::PhotonCollection::const_iterator iPho = photonCollection.begin(); iPho != photonCollection.end();
1667 iPho++) {
1668 reco::Photon aPho = reco::Photon(*iPho);
1669 const double deltaphi = reco::deltaPhi(aConv.refittedPairMomentum().phi(), aPho.superCluster()->position().phi());
1670 double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(), aConv.zOfPrimaryVertexFromTracks());
1671 double deltaeta = abs(aPho.superCluster()->position().eta() - ConvEta);
1672 if (abs(deltaeta) < abs(Mindeltaeta) && abs(deltaphi) < abs(Mindeltaphi)) {
1673 Mindeltaphi = abs(deltaphi);
1674 Mindeltaeta = abs(deltaeta);
1675 iMatchingSC = iPho;
1676 }
1677 }
1678 if (abs(Mindeltaeta) < 0.1 && abs(Mindeltaphi) < 0.1) {
1679 matchConvSC = true;
1680 }
1681
1682
1683 int match = 0;
1684 float invM = aConv.pairInvariantMass();
1685 float chi2Prob = ChiSquaredProbability(aConv.conversionVertex().chi2(), aConv.conversionVertex().ndof());
1686 uint maxNHitsBeforeVtx =
1687 aConv.nHitsBeforeVtx().size() > 1 ? max(aConv.nHitsBeforeVtx().at(0), aConv.nHitsBeforeVtx().at(1)) : 0;
1688 uint sumNHitsBeforeVtx =
1689 aConv.nHitsBeforeVtx().size() > 1 ? aConv.nHitsBeforeVtx().at(0) + aConv.nHitsBeforeVtx().at(1) : 0;
1690 float maxDlClosestHitToVtx = aConv.dlClosestHitToVtx().size() > 1 ? max(aConv.dlClosestHitToVtx().at(0).value(),
1691 aConv.dlClosestHitToVtx().at(1).value())
1692 : 0;
1693 float maxDlClosestHitToVtxSig =
1694 aConv.dlClosestHitToVtx().size() > 1
1695 ? max(aConv.dlClosestHitToVtx().at(0).value() / aConv.dlClosestHitToVtx().at(0).error(),
1696 aConv.dlClosestHitToVtx().at(1).value() / aConv.dlClosestHitToVtx().at(1).error())
1697 : 0;
1698
1699 int ilead = 0, itrail = 1;
1700 if (tk2->pt() > tk1->pt()) {
1701 ilead = 1;
1702 itrail = 0;
1703 }
1704 RefToBase<reco::Track> tklead = aConv.tracks().at(ilead);
1705 RefToBase<reco::Track> tktrail = aConv.tracks().at(itrail);
1706
1707 int deltaExpectedHitsInner = tklead->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS) -
1708 tktrail->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS);
1709 int leadExpectedHitsInner = tklead->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS);
1710 uint leadNHitsBeforeVtx = aConv.nHitsBeforeVtx().size() > 1 ? aConv.nHitsBeforeVtx().at(ilead) : 0;
1711 uint trailNHitsBeforeVtx = aConv.nHitsBeforeVtx().size() > 1 ? aConv.nHitsBeforeVtx().at(itrail) : 0;
1712
1713 h_convEta_[match][0]->Fill(refittedMom.eta());
1714 h_convEta2_[match][0]->Fill(refittedMom.eta());
1715
1716 h_convPhi_[match][0]->Fill(refittedMom.phi());
1717 h_convR_[match][0]->Fill(sqrt(aConv.conversionVertex().position().perp2()));
1718 h_convRplot_->Fill(sqrt(aConv.conversionVertex().position().perp2()));
1719 h_convZ_[match][0]->Fill(aConv.conversionVertex().position().z());
1720 h_convZplot_->Fill(aConv.conversionVertex().position().z());
1721 h_convPt_[match][0]->Fill(sqrt(refittedMom.perp2()));
1722 h_invMass_[match][0]->Fill(invM);
1723 h_vtxChi2Prob_[match][0]->Fill(chi2Prob);
1724 h_lxybs_[match][0]->Fill(lxy);
1725 h_maxNHitsBeforeVtx_[match][0]->Fill(maxNHitsBeforeVtx);
1726 h_leadNHitsBeforeVtx_[match][0]->Fill(leadNHitsBeforeVtx);
1727 h_trailNHitsBeforeVtx_[match][0]->Fill(trailNHitsBeforeVtx);
1728 h_sumNHitsBeforeVtx_[match][0]->Fill(sumNHitsBeforeVtx);
1729 h_deltaExpectedHitsInner_[match][0]->Fill(deltaExpectedHitsInner);
1730 h_leadExpectedHitsInner_[match][0]->Fill(leadExpectedHitsInner);
1731 h_maxDlClosestHitToVtx_[match][0]->Fill(maxDlClosestHitToVtx);
1732 h_maxDlClosestHitToVtxSig_[match][0]->Fill(maxDlClosestHitToVtxSig);
1733 h_nSharedHits_[match][0]->Fill(aConv.nSharedHits());
1734
1735 if (matchConvSC) {
1736 h_convEtaMatchSC_[match][0]->Fill(refittedMom.eta());
1737 h_EoverPTracks_[match][0]->Fill(iMatchingSC->superCluster()->energy() / sqrt(refittedMom.mag2()));
1738 h_convSCdPhi_[match][0]->Fill(iMatchingSC->superCluster()->position().phi() - refittedMom.phi());
1739 double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(), aConv.zOfPrimaryVertexFromTracks());
1740 h_convSCdEta_[match][0]->Fill(iMatchingSC->superCluster()->position().eta() - ConvEta);
1741 }
1742
1743 h_distMinAppTracks_[match][0]->Fill(aConv.distOfMinimumApproach());
1744 h_DPhiTracksAtVtx_[match][0]->Fill(dPhiTracksAtVtx);
1745 h2_DPhiTracksAtVtxVsEta_->Fill(mcEta_, dPhiTracksAtVtx);
1746 h2_DPhiTracksAtVtxVsR_->Fill(mcConvR_, dPhiTracksAtVtx);
1747 p_DPhiTracksAtVtxVsEta_->Fill(mcEta_, dPhiTracksAtVtx);
1748 p_DPhiTracksAtVtxVsR_->Fill(mcConvR_, dPhiTracksAtVtx);
1749
1750 h_DCotTracks_[match][0]->Fill(aConv.pairCotThetaSeparation());
1751 h2_DCotTracksVsEta_->Fill(mcEta_, aConv.pairCotThetaSeparation());
1752 h2_DCotTracksVsR_->Fill(mcConvR_, aConv.pairCotThetaSeparation());
1753 p_DCotTracksVsEta_->Fill(mcEta_, aConv.pairCotThetaSeparation());
1754 p_DCotTracksVsR_->Fill(mcConvR_, aConv.pairCotThetaSeparation());
1755
1756 if (phoIsInBarrel) {
1757 h_invMass_[match][1]->Fill(invM);
1758 h_vtxChi2Prob_[match][1]->Fill(chi2Prob);
1759 h_distMinAppTracks_[match][1]->Fill(aConv.distOfMinimumApproach());
1760 h_DPhiTracksAtVtx_[match][1]->Fill(dPhiTracksAtVtx);
1761 h_DCotTracks_[match][1]->Fill(aConv.pairCotThetaSeparation());
1762 h_lxybs_[match][1]->Fill(lxy);
1763 h_maxNHitsBeforeVtx_[match][1]->Fill(maxNHitsBeforeVtx);
1764 h_leadNHitsBeforeVtx_[match][1]->Fill(leadNHitsBeforeVtx);
1765 h_trailNHitsBeforeVtx_[match][1]->Fill(trailNHitsBeforeVtx);
1766 h_sumNHitsBeforeVtx_[match][1]->Fill(sumNHitsBeforeVtx);
1767 h_deltaExpectedHitsInner_[match][1]->Fill(deltaExpectedHitsInner);
1768 h_leadExpectedHitsInner_[match][1]->Fill(leadExpectedHitsInner);
1769 h_maxDlClosestHitToVtx_[match][1]->Fill(maxDlClosestHitToVtx);
1770 h_maxDlClosestHitToVtxSig_[match][1]->Fill(maxDlClosestHitToVtxSig);
1771 h_nSharedHits_[match][1]->Fill(aConv.nSharedHits());
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781 if (matchConvSC) {
1782 h_EoverPTracks_[match][1]->Fill(iMatchingSC->superCluster()->energy() / sqrt(refittedMom.mag2()));
1783 h_convSCdPhi_[match][1]->Fill(iMatchingSC->superCluster()->position().phi() - refittedMom.phi());
1784 double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(), aConv.zOfPrimaryVertexFromTracks());
1785 h_convSCdEta_[match][1]->Fill(iMatchingSC->superCluster()->position().eta() - ConvEta);
1786 }
1787 }
1788
1789 if (phoIsInEndcap) {
1790 h_invMass_[match][2]->Fill(invM);
1791 h_vtxChi2Prob_[match][2]->Fill(chi2Prob);
1792 h_distMinAppTracks_[match][2]->Fill(aConv.distOfMinimumApproach());
1793 h_DPhiTracksAtVtx_[match][2]->Fill(dPhiTracksAtVtx);
1794 h_DCotTracks_[match][2]->Fill(aConv.pairCotThetaSeparation());
1795 h_lxybs_[match][2]->Fill(lxy);
1796 h_maxNHitsBeforeVtx_[match][2]->Fill(maxNHitsBeforeVtx);
1797 h_leadNHitsBeforeVtx_[match][2]->Fill(leadNHitsBeforeVtx);
1798 h_trailNHitsBeforeVtx_[match][2]->Fill(trailNHitsBeforeVtx);
1799 h_sumNHitsBeforeVtx_[match][2]->Fill(sumNHitsBeforeVtx);
1800 h_deltaExpectedHitsInner_[match][2]->Fill(deltaExpectedHitsInner);
1801 h_leadExpectedHitsInner_[match][2]->Fill(leadExpectedHitsInner);
1802 h_maxDlClosestHitToVtx_[match][2]->Fill(maxDlClosestHitToVtx);
1803 h_maxDlClosestHitToVtxSig_[match][2]->Fill(maxDlClosestHitToVtxSig);
1804 h_nSharedHits_[match][2]->Fill(aConv.nSharedHits());
1805 if (matchConvSC) {
1806 h_EoverPTracks_[match][2]->Fill(iMatchingSC->superCluster()->energy() / sqrt(refittedMom.mag2()));
1807 h_convSCdPhi_[match][2]->Fill(iMatchingSC->superCluster()->position().phi() - refittedMom.phi());
1808 double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(), aConv.zOfPrimaryVertexFromTracks());
1809 h_convSCdEta_[match][2]->Fill(iMatchingSC->superCluster()->position().eta() - ConvEta);
1810 }
1811 }
1812
1813 h_convVtxRvsZ_[0]->Fill(fabs(aConv.conversionVertex().position().z()),
1814 sqrt(aConv.conversionVertex().position().perp2()));
1815 h_convVtxYvsX_->Fill(aConv.conversionVertex().position().x(), aConv.conversionVertex().position().y());
1816 h_convVtxYvsX_zoom_[0]->Fill(aConv.conversionVertex().position().x(), aConv.conversionVertex().position().y());
1817 h_convVtxYvsX_zoom_[1]->Fill(aConv.conversionVertex().position().x(), aConv.conversionVertex().position().y());
1818
1819
1820 for (unsigned int i = 0; i < tracks.size(); i++) {
1821 double d0;
1822 if (valid_pvtx) {
1823 d0 = -tracks[i]->dxy(the_pvtx.position());
1824 } else {
1825 d0 = tracks[i]->d0();
1826 }
1827 h_TkD0_[match]->Fill(d0 * tracks[i]->charge());
1828 h_nHitsBeforeVtx_[match]->Fill(aConv.nHitsBeforeVtx().size() > 1 ? aConv.nHitsBeforeVtx().at(i) : 0);
1829 h_dlClosestHitToVtx_[match]->Fill(aConv.dlClosestHitToVtx().size() > 1 ? aConv.dlClosestHitToVtx().at(i).value()
1830 : 0);
1831 h_dlClosestHitToVtxSig_[match]->Fill(aConv.dlClosestHitToVtx().size() > 1
1832 ? aConv.dlClosestHitToVtx().at(i).value() /
1833 aConv.dlClosestHitToVtx().at(i).error()
1834 : 0);
1835
1836 nHitsVsEta_[match]->Fill(mcEta_, float(tracks[i]->numberOfValidHits()));
1837 nHitsVsR_[match]->Fill(mcConvR_, float(tracks[i]->numberOfValidHits()));
1838 p_nHitsVsEta_[match]->Fill(mcEta_, float(tracks[i]->numberOfValidHits()) - 0.0001);
1839 p_nHitsVsR_[match]->Fill(mcConvR_, float(tracks[i]->numberOfValidHits()) - 0.0001);
1840 h_tkChi2_[match]->Fill(tracks[i]->normalizedChi2());
1841 h_tkChi2Large_[match]->Fill(tracks[i]->normalizedChi2());
1842 h2_Chi2VsEta_[match]->Fill(mcEta_, tracks[i]->normalizedChi2());
1843 h2_Chi2VsR_[match]->Fill(mcConvR_, tracks[i]->normalizedChi2());
1844 p_Chi2VsEta_[match]->Fill(mcEta_, tracks[i]->normalizedChi2());
1845 p_Chi2VsR_[match]->Fill(mcConvR_, tracks[i]->normalizedChi2());
1846 }
1847
1848 bool associated = false;
1849 float mcConvPt_ = -99999999.0;
1850
1851 float simPV_Z = 0;
1852 for (std::vector<PhotonMCTruth>::const_iterator mcPho = mcPhotons.begin(); mcPho != mcPhotons.end(); mcPho++) {
1853 mcConvPt_ = (*mcPho).fourMomentum().et();
1854 float mcPhi = (*mcPho).fourMomentum().phi();
1855 simPV_Z = (*mcPho).primaryVertex().z();
1856 mcPhi_ = phiNormalization(mcPhi);
1857 mcEta_ = (*mcPho).fourMomentum().pseudoRapidity();
1858 mcEta_ = etaTransformation(mcEta_, (*mcPho).primaryVertex().z());
1859 mcConvR_ = (*mcPho).vertex().perp();
1860 mcConvX_ = (*mcPho).vertex().x();
1861 mcConvY_ = (*mcPho).vertex().y();
1862 mcConvZ_ = (*mcPho).vertex().z();
1863 mcConvEta_ = (*mcPho).vertex().eta();
1864 mcConvPhi_ = (*mcPho).vertex().phi();
1865 if (fabs(mcEta_) > END_HI)
1866 continue;
1867 if (mcConvPt_ < minPhoPtForPurity)
1868 continue;
1869 if (fabs(mcEta_) > maxPhoEtaForPurity)
1870 continue;
1871 if (fabs(mcConvZ_) > maxPhoZForPurity)
1872 continue;
1873 if (mcConvR_ > maxPhoRForEffic)
1874 continue;
1875
1876 if ((*mcPho).isAConversion() != 1)
1877 continue;
1878 if (!((fabs(mcEta_) <= BARL && mcConvR_ < 85) ||
1879 (fabs(mcEta_) > BARL && fabs(mcEta_) <= END_HI && fabs((*mcPho).vertex().z()) < 210)))
1880 continue;
1881
1882 theConvTP_.clear();
1883 for (const TrackingParticleRef& tp : tpForFakeRate) {
1884 if (fabs(tp->vx() - (*mcPho).vertex().x()) < 0.0001 && fabs(tp->vy() - (*mcPho).vertex().y()) < 0.0001 &&
1885 fabs(tp->vz() - (*mcPho).vertex().z()) < 0.0001) {
1886 theConvTP_.push_back(tp);
1887 }
1888 }
1889
1890 if (theConvTP_.size() < 2)
1891 continue;
1892
1893
1894 reco::RecoToSimCollection const& p1 = theTrackAssociator->associateRecoToSim(tc1, theConvTP_);
1895 reco::RecoToSimCollection const& p2 = theTrackAssociator->associateRecoToSim(tc2, theConvTP_);
1896
1897 auto itP1 = p1.find(tk1);
1898 auto itP2 = p2.find(tk2);
1899 bool good = (itP1 != p1.end()) and (not itP1->val.empty()) and (itP2 != p2.end()) and (not itP2->val.empty());
1900 if (not good) {
1901 itP1 = p1.find(tk2);
1902 itP2 = p2.find(tk1);
1903 good = (itP1 != p1.end()) and (not itP1->val.empty()) and (itP2 != p2.end()) and (not itP2->val.empty());
1904 }
1905
1906 if (good) {
1907 std::vector<std::pair<TrackingParticleRef, double> > const& tp1 = itP1->val;
1908 std::vector<std::pair<TrackingParticleRef, double> > const& tp2 = itP2->val;
1909 TrackingParticleRef tpr1 = tp1.front().first;
1910 TrackingParticleRef tpr2 = tp2.front().first;
1911 if (abs(tpr1->pdgId()) == 11 && abs(tpr2->pdgId()) == 11 && tpr1->pdgId() * tpr2->pdgId() < 0) {
1912 if ((tpr1->parentVertex()->sourceTracks_end() - tpr1->parentVertex()->sourceTracks_begin() == 1) &&
1913 (tpr2->parentVertex()->sourceTracks_end() - tpr2->parentVertex()->sourceTracks_begin() == 1)) {
1914 if (tpr1->parentVertex().key() == tpr2->parentVertex().key() &&
1915 ((*tpr1->parentVertex()->sourceTracks_begin())->pdgId() == 22)) {
1916 mcConvR_ = sqrt(tpr1->parentVertex()->position().Perp2());
1917 mcConvZ_ = tpr1->parentVertex()->position().z();
1918 mcConvX_ = tpr1->parentVertex()->position().x();
1919 mcConvY_ = tpr1->parentVertex()->position().y();
1920 mcConvEta_ = tpr1->parentVertex()->position().eta();
1921 mcConvPhi_ = tpr1->parentVertex()->position().phi();
1922 mcConvPt_ = sqrt((*tpr1->parentVertex()->sourceTracks_begin())->momentum().Perp2());
1923
1924
1925
1926 associated = true;
1927 break;
1928 }
1929 }
1930 }
1931 }
1932
1933 }
1934
1935 if (false) {
1936 theConvTP_.clear();
1937 theConvTP_ = tpForFakeRate;
1938 reco::RecoToSimCollection p1incl = theTrackAssociator->associateRecoToSim(tc1, theConvTP_);
1939 reco::RecoToSimCollection p2incl = theTrackAssociator->associateRecoToSim(tc2, theConvTP_);
1940
1941 for (std::vector<PhotonMCTruth>::const_iterator mcPho = mcPhotons.begin(); mcPho != mcPhotons.end(); mcPho++) {
1942 mcConvPt_ = (*mcPho).fourMomentum().et();
1943 float mcPhi = (*mcPho).fourMomentum().phi();
1944 simPV_Z = (*mcPho).primaryVertex().z();
1945 mcPhi_ = phiNormalization(mcPhi);
1946 mcEta_ = (*mcPho).fourMomentum().pseudoRapidity();
1947 mcEta_ = etaTransformation(mcEta_, (*mcPho).primaryVertex().z());
1948 mcConvR_ = (*mcPho).vertex().perp();
1949 mcConvX_ = (*mcPho).vertex().x();
1950 mcConvY_ = (*mcPho).vertex().y();
1951 mcConvZ_ = (*mcPho).vertex().z();
1952 mcConvEta_ = (*mcPho).vertex().eta();
1953 mcConvPhi_ = (*mcPho).vertex().phi();
1954 if (fabs(mcEta_) > END_HI)
1955 continue;
1956 if (mcConvPt_ < minPhoPtForPurity)
1957 continue;
1958 if (fabs(mcEta_) > maxPhoEtaForPurity)
1959 continue;
1960 if (fabs(mcConvZ_) > maxPhoZForPurity)
1961 continue;
1962 if (mcConvR_ > maxPhoRForEffic)
1963 continue;
1964
1965 if ((*mcPho).isAConversion() != 1)
1966 continue;
1967 if (!((fabs(mcEta_) <= BARL && mcConvR_ < 85) ||
1968 (fabs(mcEta_) > BARL && fabs(mcEta_) <= END_HI && fabs((*mcPho).vertex().z()) < 210)))
1969 continue;
1970
1971 theConvTP_.clear();
1972 for (const TrackingParticleRef& tp : tpForFakeRate) {
1973 if (fabs(tp->vx() - (*mcPho).vertex().x()) < 0.0001 && fabs(tp->vy() - (*mcPho).vertex().y()) < 0.0001 &&
1974 fabs(tp->vz() - (*mcPho).vertex().z()) < 0.0001) {
1975 theConvTP_.push_back(tp);
1976 }
1977 }
1978
1979 if (theConvTP_.size() < 2)
1980 continue;
1981
1982
1983 reco::RecoToSimCollection p1 = theTrackAssociator->associateRecoToSim(tc1, theConvTP_);
1984 reco::RecoToSimCollection p2 = theTrackAssociator->associateRecoToSim(tc2, theConvTP_);
1985
1986 if ((!p1incl.empty() && !p2incl.empty()) && (!p1.empty() || !p2.empty())) {
1987 try {
1988 std::vector<std::pair<TrackingParticleRef, double> > tp1 = p1incl[tk1];
1989 std::vector<std::pair<TrackingParticleRef, double> > tp2 = p2incl[tk2];
1990 if (!(!tp1.empty() && !tp2.empty())) {
1991 tp1 = p1[tk2];
1992 tp2 = p2[tk1];
1993 }
1994 if (!tp1.empty() && !tp2.empty()) {
1995 TrackingParticleRef tpr1 = tp1.front().first;
1996 TrackingParticleRef tpr2 = tp2.front().first;
1997 if (abs(tpr1->pdgId()) == 11 && abs(tpr2->pdgId()) == 11 && tpr1->pdgId() * tpr2->pdgId() < 0) {
1998 if (((tpr1->parentVertex()->sourceTracks_end() - tpr1->parentVertex()->sourceTracks_begin() >= 1) &&
1999 (*tpr1->parentVertex()->sourceTracks_begin())->pdgId() == 22) &&
2000 ((tpr2->parentVertex()->sourceTracks_end() - tpr2->parentVertex()->sourceTracks_begin() >= 1) &&
2001 (*tpr2->parentVertex()->sourceTracks_begin())->pdgId() == 22)) {
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014 associated = true;
2015 break;
2016
2017
2018 }
2019 }
2020 }
2021 } catch (Exception const& event) {
2022
2023
2024 }
2025 }
2026 }
2027 }
2028
2029 if (associated)
2030 match = 1;
2031 else
2032 match = 2;
2033
2034 h_match_->Fill(float(match));
2035
2036 if (match == 1)
2037 nRecConvAss_++;
2038 h_convEta_[match][0]->Fill(refittedMom.eta());
2039 h_convEta_[match][1]->Fill(refittedMom.eta());
2040 if (matchConvSC)
2041 h_convEtaMatchSC_[match][0]->Fill(refittedMom.eta());
2042 h_convPhi_[match][0]->Fill(refittedMom.phi());
2043 h_convR_[match][0]->Fill(sqrt(aConv.conversionVertex().position().perp2()));
2044 h_convZ_[match][0]->Fill(aConv.conversionVertex().position().z());
2045 h_convPt_[match][0]->Fill(sqrt(refittedMom.perp2()));
2046 h_invMass_[match][0]->Fill(invM);
2047 h_vtxChi2Prob_[match][0]->Fill(chi2Prob);
2048 h_DPhiTracksAtVtx_[match][0]->Fill(dPhiTracksAtVtx);
2049 h_DCotTracks_[match][0]->Fill(aConv.pairCotThetaSeparation());
2050 h_distMinAppTracks_[match][0]->Fill(aConv.distOfMinimumApproach());
2051 h_lxybs_[match][0]->Fill(lxy);
2052 h_maxNHitsBeforeVtx_[match][0]->Fill(maxNHitsBeforeVtx);
2053 h_leadNHitsBeforeVtx_[match][0]->Fill(leadNHitsBeforeVtx);
2054 h_trailNHitsBeforeVtx_[match][0]->Fill(trailNHitsBeforeVtx);
2055 h_sumNHitsBeforeVtx_[match][0]->Fill(sumNHitsBeforeVtx);
2056 h_deltaExpectedHitsInner_[match][0]->Fill(deltaExpectedHitsInner);
2057 h_leadExpectedHitsInner_[match][0]->Fill(leadExpectedHitsInner);
2058 h_maxDlClosestHitToVtx_[match][0]->Fill(maxDlClosestHitToVtx);
2059 h_maxDlClosestHitToVtxSig_[match][0]->Fill(maxDlClosestHitToVtxSig);
2060 h_nSharedHits_[match][0]->Fill(aConv.nSharedHits());
2061 if (matchConvSC) {
2062
2063 h_EoverPTracks_[match][0]->Fill(iMatchingSC->superCluster()->energy() / sqrt(refittedMom.mag2()));
2064 h_convSCdPhi_[match][0]->Fill(iMatchingSC->superCluster()->position().phi() - refittedMom.phi());
2065 double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(), aConv.zOfPrimaryVertexFromTracks());
2066 h_convSCdEta_[match][0]->Fill(iMatchingSC->superCluster()->position().eta() - ConvEta);
2067 }
2068 if (match == 1) {
2069 h2_photonPtRecVsPtSim_->Fill(mcConvPt_, sqrt(refittedMom.perp2()));
2070 h_convPtRes_[0]->Fill(sqrt(refittedMom.perp2()) / mcConvPt_);
2071 }
2072
2073 if (phoIsInBarrel) {
2074 h_invMass_[match][1]->Fill(invM);
2075 h_vtxChi2Prob_[match][1]->Fill(chi2Prob);
2076 h_DPhiTracksAtVtx_[match][1]->Fill(dPhiTracksAtVtx);
2077 h_DCotTracks_[match][1]->Fill(aConv.pairCotThetaSeparation());
2078 h_distMinAppTracks_[match][1]->Fill(aConv.distOfMinimumApproach());
2079 h_lxybs_[match][1]->Fill(lxy);
2080 h_maxNHitsBeforeVtx_[match][1]->Fill(maxNHitsBeforeVtx);
2081 h_leadNHitsBeforeVtx_[match][1]->Fill(leadNHitsBeforeVtx);
2082 h_trailNHitsBeforeVtx_[match][1]->Fill(trailNHitsBeforeVtx);
2083 h_sumNHitsBeforeVtx_[match][1]->Fill(sumNHitsBeforeVtx);
2084 h_deltaExpectedHitsInner_[match][1]->Fill(deltaExpectedHitsInner);
2085 h_leadExpectedHitsInner_[match][1]->Fill(leadExpectedHitsInner);
2086 h_maxDlClosestHitToVtx_[match][1]->Fill(maxDlClosestHitToVtx);
2087 h_maxDlClosestHitToVtxSig_[match][1]->Fill(maxDlClosestHitToVtxSig);
2088 h_nSharedHits_[match][1]->Fill(aConv.nSharedHits());
2089 if (matchConvSC) {
2090
2091 h_EoverPTracks_[match][1]->Fill(iMatchingSC->superCluster()->energy() / sqrt(refittedMom.mag2()));
2092 h_convSCdPhi_[match][1]->Fill(iMatchingSC->superCluster()->position().phi() - refittedMom.phi());
2093 double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(), aConv.zOfPrimaryVertexFromTracks());
2094 h_convSCdEta_[match][1]->Fill(iMatchingSC->superCluster()->position().eta() - ConvEta);
2095 }
2096 if (match == 1)
2097 h_convPtRes_[1]->Fill(sqrt(refittedMom.perp2()) / mcConvPt_);
2098 }
2099
2100 if (phoIsInEndcap) {
2101 h_invMass_[match][2]->Fill(invM);
2102 h_vtxChi2Prob_[match][2]->Fill(chi2Prob);
2103 h_DPhiTracksAtVtx_[match][2]->Fill(dPhiTracksAtVtx);
2104 h_DCotTracks_[match][2]->Fill(aConv.pairCotThetaSeparation());
2105 h_distMinAppTracks_[match][2]->Fill(aConv.distOfMinimumApproach());
2106 h_lxybs_[match][2]->Fill(lxy);
2107 h_maxNHitsBeforeVtx_[match][2]->Fill(maxNHitsBeforeVtx);
2108 h_leadNHitsBeforeVtx_[match][2]->Fill(leadNHitsBeforeVtx);
2109 h_trailNHitsBeforeVtx_[match][2]->Fill(trailNHitsBeforeVtx);
2110 h_sumNHitsBeforeVtx_[match][2]->Fill(sumNHitsBeforeVtx);
2111 h_deltaExpectedHitsInner_[match][2]->Fill(deltaExpectedHitsInner);
2112 h_leadExpectedHitsInner_[match][2]->Fill(leadExpectedHitsInner);
2113 h_maxDlClosestHitToVtx_[match][2]->Fill(maxDlClosestHitToVtx);
2114 h_maxDlClosestHitToVtxSig_[match][2]->Fill(maxDlClosestHitToVtxSig);
2115 h_nSharedHits_[match][2]->Fill(aConv.nSharedHits());
2116 if (matchConvSC) {
2117
2118 h_EoverPTracks_[match][2]->Fill(iMatchingSC->superCluster()->energy() / sqrt(refittedMom.mag2()));
2119 h_convSCdPhi_[match][2]->Fill(iMatchingSC->superCluster()->position().phi() - refittedMom.phi());
2120 double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(), aConv.zOfPrimaryVertexFromTracks());
2121 h_convSCdEta_[match][2]->Fill(iMatchingSC->superCluster()->position().eta() - ConvEta);
2122 }
2123 if (match == 1)
2124 h_convPtRes_[2]->Fill(sqrt(refittedMom.perp2()) / mcConvPt_);
2125 }
2126
2127 if (match == 1) {
2128 h_convVtxdX_->Fill(aConv.conversionVertex().position().x() - mcConvX_);
2129 h_convVtxdY_->Fill(aConv.conversionVertex().position().y() - mcConvY_);
2130 h_convVtxdZ_->Fill(aConv.conversionVertex().position().z() - mcConvZ_);
2131 h_convVtxdR_->Fill(sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_);
2132 h_convVtxdPhi_->Fill(aConv.conversionVertex().position().phi() - mcConvPhi_);
2133 h_convVtxdEta_->Fill(aConv.conversionVertex().position().eta() - mcConvEta_);
2134 h2_convVtxdRVsR_->Fill(mcConvR_, sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_);
2135 h2_convVtxdRVsEta_->Fill(mcEta_, sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_);
2136 p_convVtxdRVsR_->Fill(mcConvR_, sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_);
2137 p_convVtxdRVsEta_->Fill(mcEta_, sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_);
2138 p_convVtxdXVsX_->Fill(mcConvX_, aConv.conversionVertex().position().x() - mcConvX_);
2139 p_convVtxdYVsY_->Fill(mcConvY_, aConv.conversionVertex().position().y() - mcConvY_);
2140 p_convVtxdZVsZ_->Fill(mcConvZ_, aConv.conversionVertex().position().z() - mcConvZ_);
2141 p_convVtxdZVsR_->Fill(mcConvR_, aConv.conversionVertex().position().z() - mcConvZ_);
2142
2143 float dR = sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_;
2144 float dZ = aConv.conversionVertex().position().z() - mcConvZ_;
2145 p2_convVtxdRVsRZ_->Fill(mcConvZ_, mcConvR_, dR);
2146 p2_convVtxdZVsRZ_->Fill(mcConvZ_, mcConvR_, dZ);
2147
2148 h2_convVtxRrecVsTrue_->Fill(mcConvR_, sqrt(aConv.conversionVertex().position().perp2()));
2149
2150 h_zPVFromTracks_[match]->Fill(aConv.zOfPrimaryVertexFromTracks());
2151 h_dzPVFromTracks_[match]->Fill(aConv.zOfPrimaryVertexFromTracks() - simPV_Z);
2152 h2_dzPVVsR_->Fill(mcConvR_, aConv.zOfPrimaryVertexFromTracks() - simPV_Z);
2153 p_dzPVVsR_->Fill(mcConvR_, aConv.zOfPrimaryVertexFromTracks() - simPV_Z);
2154
2155 if (phoIsInBarrel) {
2156 h_convVtxdX_barrel_->Fill(aConv.conversionVertex().position().x() - mcConvX_);
2157 h_convVtxdY_barrel_->Fill(aConv.conversionVertex().position().y() - mcConvY_);
2158 h_convVtxdZ_barrel_->Fill(aConv.conversionVertex().position().z() - mcConvZ_);
2159 h_convVtxdR_barrel_->Fill(sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_);
2160 }
2161 if (phoIsInEndcap) {
2162 h_convVtxdX_endcap_->Fill(aConv.conversionVertex().position().x() - mcConvX_);
2163 h_convVtxdY_endcap_->Fill(aConv.conversionVertex().position().y() - mcConvY_);
2164 h_convVtxdZ_endcap_->Fill(aConv.conversionVertex().position().z() - mcConvZ_);
2165 h_convVtxdR_endcap_->Fill(sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_);
2166 }
2167 }
2168
2169
2170 for (unsigned int i = 0; i < tracks.size(); i++) {
2171
2172 RefToBase<reco::Track> tfrb(aConv.tracks()[i]);
2173 itAss = myAss.find(tfrb.get());
2174
2175 nHitsVsEta_[match]->Fill(mcEta_, float(tracks[i]->numberOfValidHits()));
2176 nHitsVsR_[match]->Fill(mcConvR_, float(tracks[i]->numberOfValidHits()));
2177 p_nHitsVsEta_[match]->Fill(mcEta_, float(tracks[i]->numberOfValidHits()) - 0.0001);
2178 p_nHitsVsR_[match]->Fill(mcConvR_, float(tracks[i]->numberOfValidHits()) - 0.0001);
2179 h_tkChi2_[match]->Fill(tracks[i]->normalizedChi2());
2180 h_tkChi2Large_[match]->Fill(tracks[i]->normalizedChi2());
2181 h2_Chi2VsEta_[match]->Fill(mcEta_, tracks[i]->normalizedChi2());
2182 h2_Chi2VsR_[match]->Fill(mcConvR_, tracks[i]->normalizedChi2());
2183 p_Chi2VsEta_[match]->Fill(mcEta_, tracks[i]->normalizedChi2());
2184 p_Chi2VsR_[match]->Fill(mcConvR_, tracks[i]->normalizedChi2());
2185 double d0;
2186 if (valid_pvtx) {
2187 d0 = -tracks[i]->dxy(the_pvtx.position());
2188 } else {
2189 d0 = tracks[i]->d0();
2190 }
2191 h_TkD0_[match]->Fill(d0 * tracks[i]->charge());
2192 h_nHitsBeforeVtx_[match]->Fill(aConv.nHitsBeforeVtx().size() > 1 ? aConv.nHitsBeforeVtx().at(i) : 0);
2193 h_dlClosestHitToVtx_[match]->Fill(aConv.dlClosestHitToVtx().size() > 1 ? aConv.dlClosestHitToVtx().at(i).value()
2194 : 0);
2195 h_dlClosestHitToVtxSig_[match]->Fill(aConv.dlClosestHitToVtx().size() > 1
2196 ? aConv.dlClosestHitToVtx().at(i).value() /
2197 aConv.dlClosestHitToVtx().at(i).error()
2198 : 0);
2199
2200 if (itAss == myAss.end())
2201 continue;
2202 reco::Track refTrack = aConv.conversionVertex().refittedTracks()[i];
2203
2204 float simPt = sqrt(((*itAss).second)->momentum().perp2());
2205 float recPt = refTrack.pt();
2206 float ptres = recPt - simPt;
2207
2208 float pterror = aConv.conversionVertex().refittedTracks()[i].ptError();
2209 h2_PtRecVsPtSim_[0]->Fill(simPt, recPt);
2210 h_TkPtPull_[0]->Fill(ptres / pterror);
2211 h2_TkPtPull_[0]->Fill(mcEta_, ptres / pterror);
2212
2213 if (phoIsInBarrel) {
2214 h_TkPtPull_[1]->Fill(ptres / pterror);
2215 h2_PtRecVsPtSim_[1]->Fill(simPt, recPt);
2216 }
2217 if (phoIsInEndcap) {
2218 h_TkPtPull_[2]->Fill(ptres / pterror);
2219 h2_PtRecVsPtSim_[2]->Fill(simPt, recPt);
2220 }
2221 }
2222
2223 }
2224
2225 h_nConv_[0][0]->Fill(float(nRecConv_));
2226 h_nConv_[1][0]->Fill(float(nRecConvAss_));
2227 }
2228
2229 void TkConvValidator::endJob() {
2230 std::string outputFileName = parameters_.getParameter<std::string>("OutputFileName");
2231 if (!isRunCentrally_) {
2232 dbe_->save(outputFileName);
2233 }
2234
2235 edm::LogInfo("TkConvValidator") << "Analyzed " << nEvt_ << "\n";
2236
2237
2238
2239 return;
2240 }
2241
2242 math::XYZVector TkConvValidator::recalculateMomentumAtFittedVertex(const MagneticField& mf,
2243 const TrackerGeometry& trackerGeom,
2244 const edm::RefToBase<reco::Track>& tk,
2245 const reco::Vertex& vtx) {
2246 math::XYZVector result;
2247 Surface::RotationType rot;
2248 auto scp = new SimpleCylinderBounds(sqrt(vtx.position().perp2()) - 0.001f,
2249 sqrt(vtx.position().perp2()) + 0.001f,
2250 -fabs(vtx.position().z()),
2251 fabs(vtx.position().z()));
2252 ReferenceCountingPointer<Cylinder> theBarrel_(
2253 new Cylinder(Cylinder::computeRadius(*scp), Surface::PositionType(0, 0, 0), rot, scp));
2254
2255 ReferenceCountingPointer<Disk> theDisk_(
2256 new Disk(Surface::PositionType(0, 0, vtx.position().z()),
2257 rot,
2258 new SimpleDiskBounds(0, sqrt(vtx.position().perp2()), -0.001, 0.001)));
2259
2260 const TrajectoryStateOnSurface myTSOS = trajectoryStateTransform::innerStateOnSurface(*tk, trackerGeom, &mf);
2261 PropagatorWithMaterial propag(anyDirection, 0.000511, &mf);
2262 TrajectoryStateOnSurface stateAtVtx;
2263 stateAtVtx = propag.propagate(myTSOS, *theBarrel_);
2264 if (!stateAtVtx.isValid()) {
2265 stateAtVtx = propag.propagate(myTSOS, *theDisk_);
2266 }
2267 if (stateAtVtx.isValid()) {
2268 return math::XYZVector(double(stateAtVtx.globalMomentum().x()),
2269 double(stateAtVtx.globalMomentum().y()),
2270 double(stateAtVtx.globalMomentum().z()));
2271 } else {
2272 return math::XYZVector(0., 0., 0.);
2273 }
2274 }
2275
2276 float TkConvValidator::phiNormalization(float& phi) {
2277
2278 const float PI = 3.1415927;
2279 const float TWOPI = 2.0 * PI;
2280
2281 if (phi > PI) {
2282 phi = phi - TWOPI;
2283 }
2284 if (phi < -PI) {
2285 phi = phi + TWOPI;
2286 }
2287
2288
2289 return phi;
2290 }
2291
2292 float TkConvValidator::etaTransformation(float EtaParticle, float Zvertex) {
2293
2294 const float PI = 3.1415927;
2295
2296
2297 const float R_ECAL = 136.5;
2298 const float Z_Endcap = 328.0;
2299 const float etaBarrelEndcap = 1.479;
2300
2301
2302
2303 float Theta = 0.0;
2304 float ZEcal = R_ECAL * sinh(EtaParticle) + Zvertex;
2305
2306 if (ZEcal != 0.0)
2307 Theta = atan(R_ECAL / ZEcal);
2308 if (Theta < 0.0)
2309 Theta = Theta + PI;
2310 float ETA = -log(tan(0.5 * Theta));
2311
2312 if (fabs(ETA) > etaBarrelEndcap) {
2313 float Zend = Z_Endcap;
2314 if (EtaParticle < 0.0)
2315 Zend = -Zend;
2316 float Zlen = Zend - Zvertex;
2317 float RR = Zlen / sinh(EtaParticle);
2318 Theta = atan(RR / Zend);
2319 if (Theta < 0.0)
2320 Theta = Theta + PI;
2321 ETA = -log(tan(0.5 * Theta));
2322 }
2323
2324 return ETA;
2325
2326 }