00001 #include <iostream>
00002
00003 #include "FWCore/ServiceRegistry/interface/Service.h"
00004 #include "CommonTools/UtilAlgos/interface/TFileService.h"
00005
00006 #include "Validation/RecoEgamma/interface/TkConvValidator.h"
00007
00008
00009 #include "FWCore/Framework/interface/MakerMacros.h"
00010 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00011 #include "FWCore/Utilities/interface/Exception.h"
00012
00013 #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"
00014 #include "SimDataFormats/Track/interface/SimTrack.h"
00015 #include "SimDataFormats/Track/interface/SimTrackContainer.h"
00016 #include "SimDataFormats/Vertex/interface/SimVertex.h"
00017 #include "SimDataFormats/Vertex/interface/SimVertexContainer.h"
00018
00019 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h"
00020 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h"
00021 #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h"
00022
00023 #include "SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h"
00024 #include "SimTracker/Records/interface/TrackAssociatorRecord.h"
00025 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00026 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
00027 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00028 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h"
00029
00030 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
00031 #include "TrackingTools/PatternTools/interface/TwoTrackMinimumDistance.h"
00032 #include "TrackingTools/TransientTrack/interface/TrackTransientTrack.h"
00033
00034 #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
00035 #include "TrackingTools/Records/interface/TransientTrackRecord.h"
00036 #include "CLHEP/Units/GlobalPhysicalConstants.h"
00037 #include "CommonTools/Statistics/interface/ChiSquaredProbability.h"
00038
00039 #include "MagneticField/Engine/interface/MagneticField.h"
00040 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00041 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00042 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00043 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
00044 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00045 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
00046 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
00047 #include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h"
00048
00049
00050 #include "DataFormats/Common/interface/Handle.h"
00051 #include "DataFormats/TrackReco/interface/Track.h"
00052 #include "DataFormats/TrackReco/interface/TrackExtra.h"
00053 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00054 #include "DataFormats/EgammaCandidates/interface/Conversion.h"
00055 #include "DataFormats/EgammaCandidates/interface/ConversionFwd.h"
00056 #include "DataFormats/EgammaCandidates/interface/Photon.h"
00057 #include "DataFormats/EgammaCandidates/interface/PhotonFwd.h"
00058 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00059 #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h"
00060 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
00061 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
00062 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
00063 #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
00064 #include "DataFormats/CaloRecHit/interface/CaloCluster.h"
00065 #include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h"
00066 #include "DataFormats/DetId/interface/DetId.h"
00067 #include "DataFormats/JetReco/interface/GenJetCollection.h"
00068 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
00069 #include "DataFormats/GeometrySurface/interface/BoundCylinder.h"
00070 #include "DataFormats/GeometrySurface/interface/BoundDisk.h"
00071 #include "DataFormats/GeometrySurface/interface/SimpleCylinderBounds.h"
00072 #include "DataFormats/GeometrySurface/interface/SimpleDiskBounds.h"
00073
00074
00075 #include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruthFinder.h"
00076 #include "RecoEgamma/EgammaMCTools/interface/PhotonMCTruth.h"
00077 #include "RecoEgamma/EgammaMCTools/interface/ElectronMCTruth.h"
00078 #include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h"
00079 #include "RecoCaloTools/MetaCollections/interface/CaloRecHitMetaCollections.h"
00080 #include "Geometry/Records/interface/CaloGeometryRecord.h"
00081 #include "Geometry/CaloTopology/interface/CaloTopology.h"
00082 #include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h"
00083
00084 #include "RecoEgamma/EgammaPhotonAlgos/interface/ConversionHitChecker.h"
00085
00086
00087
00088 #include "TFile.h"
00089 #include "TH1.h"
00090 #include "TH2.h"
00091 #include "TTree.h"
00092 #include "TVector3.h"
00093 #include "TProfile.h"
00094
00105 using namespace std;
00106
00107
00108 TkConvValidator::TkConvValidator( const edm::ParameterSet& pset )
00109 {
00110
00111 fName_ = pset.getUntrackedParameter<std::string>("Name");
00112 verbosity_ = pset.getUntrackedParameter<int>("Verbosity");
00113 parameters_ = pset;
00114
00115 conversionCollectionProducer_ = pset.getParameter<std::string>("convProducer");
00116 conversionCollection_ = pset.getParameter<std::string>("conversionCollection");
00117
00118 dqmpath_ = pset.getParameter<std::string>("dqmpath");
00119 minPhoEtCut_ = pset.getParameter<double>("minPhoEtCut");
00120 generalTracksOnly_ = pset.getParameter<bool>("generalTracksOnly");
00121 arbitratedMerged_ = pset.getParameter<bool>("arbitratedMerged");
00122 arbitratedEcalSeeded_ = pset.getParameter<bool>("arbitratedEcalSeeded");
00123 ecalalgotracks_ = pset.getParameter<bool>("ecalalgotracks");
00124 highPurity_ = pset.getParameter<bool>("highPurity");
00125 minProb_ = pset.getParameter<double>("minProb");
00126 maxHitsBeforeVtx_ = pset.getParameter<uint>("maxHitsBeforeVtx");
00127 minLxy_ = pset.getParameter<double>("minLxy");
00128 isRunCentrally_= pset.getParameter<bool>("isRunCentrally");
00129 }
00130
00131
00132
00133
00134
00135 TkConvValidator::~TkConvValidator() {}
00136
00137
00138
00139
00140 void TkConvValidator::beginJob() {
00141
00142 nEvt_=0;
00143 nEntry_=0;
00144 nRecConv_=0;
00145 nRecConvAss_=0;
00146 nRecConvAssWithEcal_=0;
00147
00148 nInvalidPCA_=0;
00149
00150 dbe_ = 0;
00151 dbe_ = edm::Service<DQMStore>().operator->();
00152
00153
00154 double etMin = parameters_.getParameter<double>("etMin");
00155 double etMax = parameters_.getParameter<double>("etMax");
00156 int etBin = parameters_.getParameter<int>("etBin");
00157
00158
00159 double resMin = parameters_.getParameter<double>("resMin");
00160 double resMax = parameters_.getParameter<double>("resMax");
00161 int resBin = parameters_.getParameter<int>("resBin");
00162
00163 double etaMin = parameters_.getParameter<double>("etaMin");
00164 double etaMax = parameters_.getParameter<double>("etaMax");
00165 int etaBin = parameters_.getParameter<int>("etaBin");
00166 int etaBin2 = parameters_.getParameter<int>("etaBin2");
00167
00168
00169 double phiMin = parameters_.getParameter<double>("phiMin");
00170 double phiMax = parameters_.getParameter<double>("phiMax");
00171 int phiBin = parameters_.getParameter<int>("phiBin");
00172
00173
00174 double rMin = parameters_.getParameter<double>("rMin");
00175 double rMax = parameters_.getParameter<double>("rMax");
00176 int rBin = parameters_.getParameter<int>("rBin");
00177
00178 double zMin = parameters_.getParameter<double>("zMin");
00179 double zMax = parameters_.getParameter<double>("zMax");
00180 int zBin = parameters_.getParameter<int>("zBin");
00181
00182 double dPhiTracksMin = parameters_.getParameter<double>("dPhiTracksMin");
00183 double dPhiTracksMax = parameters_.getParameter<double>("dPhiTracksMax");
00184 int dPhiTracksBin = parameters_.getParameter<int>("dPhiTracksBin");
00185
00186
00187
00188
00189
00190 double dCotTracksMin = parameters_.getParameter<double>("dCotTracksMin");
00191 double dCotTracksMax = parameters_.getParameter<double>("dCotTracksMax");
00192 int dCotTracksBin = parameters_.getParameter<int>("dCotTracksBin");
00193
00194
00195 double chi2Min = parameters_.getParameter<double>("chi2Min");
00196 double chi2Max = parameters_.getParameter<double>("chi2Max");
00197
00198
00199 double rMinForXray = parameters_.getParameter<double>("rMinForXray");
00200 double rMaxForXray = parameters_.getParameter<double>("rMaxForXray");
00201 int rBinForXray = parameters_.getParameter<int>("rBinForXray");
00202 double zMinForXray = parameters_.getParameter<double>("zMinForXray");
00203 double zMaxForXray = parameters_.getParameter<double>("zMaxForXray");
00204 int zBinForXray = parameters_.getParameter<int>("zBinForXray");
00205 int zBin2ForXray = parameters_.getParameter<int>("zBin2ForXray");
00206
00207 minPhoPtForEffic = parameters_.getParameter<double>("minPhoPtForEffic");
00208 maxPhoEtaForEffic = parameters_.getParameter<double>("maxPhoEtaForEffic");
00209 maxPhoZForEffic = parameters_.getParameter<double>("maxPhoZForEffic");
00210 maxPhoRForEffic = parameters_.getParameter<double>("maxPhoRForEffic");
00211 minPhoPtForPurity = parameters_.getParameter<double>("minPhoPtForPurity");
00212 maxPhoEtaForPurity = parameters_.getParameter<double>("maxPhoEtaForPurity");
00213 maxPhoZForPurity = parameters_.getParameter<double>("maxPhoZForPurity");
00214 maxPhoRForPurity = parameters_.getParameter<double>("maxPhoRForPurity");
00215
00216 if (dbe_) {
00217
00219
00220
00221
00222 std::string simpath = dqmpath_ + "SimulationInfo";
00223 dbe_->setCurrentFolder(simpath);
00224
00225
00227 std::string histname = "nOfSimConversions";
00228 h_nSimConv_[0] = dbe_->book1D(histname,"# of Sim conversions per event ",20,-0.5,19.5);
00230 histname = "h_AllSimConvEta";
00231 h_AllSimConv_[0] = dbe_->book1D(histname," All conversions: simulated #eta",etaBin2,etaMin,etaMax);
00232 histname = "h_AllSimConvPhi";
00233 h_AllSimConv_[1] = dbe_->book1D(histname," All conversions: simulated #phi",phiBin,phiMin,phiMax);
00234 histname = "h_AllSimConvR";
00235 h_AllSimConv_[2] = dbe_->book1D(histname," All conversions: simulated R",rBin,rMin,rMax);
00236 histname = "h_AllSimConvZ";
00237 h_AllSimConv_[3] = dbe_->book1D(histname," All conversions: simulated Z",zBin,zMin,zMax);
00238 histname = "h_AllSimConvEt";
00239 h_AllSimConv_[4] = dbe_->book1D(histname," All conversions: simulated Et",etBin,etMin,etMax);
00240
00241 histname = "nOfVisSimConversions";
00242 h_nSimConv_[1] = dbe_->book1D(histname,"# of Sim conversions per event ",20,-0.5,19.5);
00243 histname = "h_VisSimConvEta";
00244 h_VisSimConv_[0] = dbe_->book1D(histname," All vis conversions: simulated #eta",etaBin2,etaMin, etaMax);
00245 histname = "h_VisSimConvPhi";
00246 h_VisSimConv_[1] = dbe_->book1D(histname," All vis conversions: simulated #phi",phiBin,phiMin, phiMax);
00247 histname = "h_VisSimConvR";
00248 h_VisSimConv_[2] = dbe_->book1D(histname," All vis conversions: simulated R",rBin,rMin,rMax);
00249 histname = "h_VisSimConvZ";
00250 h_VisSimConv_[3] = dbe_->book1D(histname," All vis conversions: simulated Z",zBin,zMin, zMax);
00251 histname = "h_VisSimConvEt";
00252 h_VisSimConv_[4] = dbe_->book1D(histname," All vis conversions: simulated Et",etBin,etMin, etMax);
00253
00254
00255 histname = "h_SimConvTwoMTracksEta";
00256 h_SimConvTwoMTracks_[0] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks: simulated #eta",etaBin2,etaMin, etaMax);
00257 histname = "h_SimConvTwoMTracksPhi";
00258 h_SimConvTwoMTracks_[1] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks: simulated #phi",phiBin,phiMin, phiMax);
00259 histname = "h_SimConvTwoMTracksR";
00260 h_SimConvTwoMTracks_[2] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks: simulated R",rBin,rMin, rMax);
00261 histname = "h_SimConvTwoMTracksZ";
00262 h_SimConvTwoMTracks_[3] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks: simulated Z",zBin,zMin, zMax);
00263 histname = "h_SimConvTwoMTracksEt";
00264 h_SimConvTwoMTracks_[4] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks: simulated Et",etBin,etMin, etMax);
00265
00266 histname = "h_SimConvTwoTracksEta";
00267 h_SimConvTwoTracks_[0] = dbe_->book1D(histname," All vis conversions with 2 reco tracks: simulated #eta",etaBin2,etaMin, etaMax);
00268 histname = "h_SimConvTwoTracksPhi";
00269 h_SimConvTwoTracks_[1] = dbe_->book1D(histname," All vis conversions with 2 reco tracks: simulated #phi",phiBin,phiMin, phiMax);
00270 histname = "h_SimConvTwoTracksR";
00271 h_SimConvTwoTracks_[2] = dbe_->book1D(histname," All vis conversions with 2 reco tracks: simulated R",rBin,rMin, rMax);
00272 histname = "h_SimConvTwoTracksZ";
00273 h_SimConvTwoTracks_[3] = dbe_->book1D(histname," All vis conversions with 2 reco tracks: simulated Z",zBin,zMin, zMax);
00274 histname = "h_SimConvTwoTracksEt";
00275 h_SimConvTwoTracks_[4] = dbe_->book1D(histname," All vis conversions with 2 reco tracks: simulated Et",etBin,etMin, etMax);
00276
00277 histname = "h_SimConvTwoMTracksEtaAndVtxPGT0";
00278 h_SimConvTwoMTracksAndVtxPGT0_[0] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated #eta",etaBin2,etaMin, etaMax);
00279 histname = "h_SimConvTwoMTracksPhiAndVtxPGT0";
00280 h_SimConvTwoMTracksAndVtxPGT0_[1] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated #phi",phiBin,phiMin, phiMax);
00281 histname = "h_SimConvTwoMTracksRAndVtxPGT0";
00282 h_SimConvTwoMTracksAndVtxPGT0_[2] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated R",rBin,rMin, rMax);
00283 histname = "h_SimConvTwoMTracksZAndVtxPGT0";
00284 h_SimConvTwoMTracksAndVtxPGT0_[3] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated Z",zBin,zMin, zMax);
00285 histname = "h_SimConvTwoMTracksEtAndVtxPGT0";
00286 h_SimConvTwoMTracksAndVtxPGT0_[4] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated Et",etBin,etMin, etMax);
00287
00288
00289 histname = "h_SimConvTwoMTracksEtaAndVtxPGT0005";
00290 h_SimConvTwoMTracksAndVtxPGT0005_[0] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated #eta",etaBin2,etaMin, etaMax);
00291 histname = "h_SimConvTwoMTracksPhiAndVtxPGT0005";
00292 h_SimConvTwoMTracksAndVtxPGT0005_[1] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated #phi",phiBin,phiMin, phiMax);
00293 histname = "h_SimConvTwoMTracksRAndVtxPGT0005";
00294 h_SimConvTwoMTracksAndVtxPGT0005_[2] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated R",rBin,rMin, rMax);
00295 histname = "h_SimConvTwoMTracksZAndVtxPGT0005";
00296 h_SimConvTwoMTracksAndVtxPGT0005_[3] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated Z",zBin,zMin, zMax);
00297 histname = "h_SimConvTwoMTracksEtAndVtxPGT0005";
00298 h_SimConvTwoMTracksAndVtxPGT0005_[4] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated Et",etBin,etMin, etMax);
00299
00300 histname = "h_SimRecConvTwoMTracksEta";
00301 h_SimRecConvTwoMTracks_[0] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks: simulated #eta",etaBin2,etaMin, etaMax);
00302 histname = "h_SimRecConvTwoMTracksPhi";
00303 h_SimRecConvTwoMTracks_[1] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks: simulated #phi",phiBin,phiMin, phiMax);
00304 histname = "h_SimRecConvTwoMTracksR";
00305 h_SimRecConvTwoMTracks_[2] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks: simulated R",rBin,rMin, rMax);
00306 histname = "h_SimRecConvTwoMTracksZ";
00307 h_SimRecConvTwoMTracks_[3] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks: simulated Z",zBin,zMin, zMax);
00308 histname = "h_SimRecConvTwoMTracksEt";
00309 h_SimRecConvTwoMTracks_[4] = dbe_->book1D(histname," All vis conversions with 2 reco-matching tracks: simulated Et",etBin,etMin, etMax);
00310
00311
00312
00313 h_SimConvEtaPix_[0] = dbe_->book1D("simConvEtaPix"," sim converted Photon Eta: Pix ",etaBin,etaMin, etaMax) ;
00314 h_simTkPt_ = dbe_->book1D("simTkPt","Sim conversion tracks pt ",etBin*3,0.,etMax);
00315 h_simTkEta_ = dbe_->book1D("simTkEta","Sim conversion tracks eta ",etaBin,etaMin,etaMax);
00316
00317 h_simConvVtxRvsZ_[0] = dbe_->book2D("simConvVtxRvsZAll"," Photon Sim conversion vtx position",zBinForXray, zMinForXray, zMaxForXray, rBinForXray, rMinForXray, rMaxForXray);
00318 h_simConvVtxRvsZ_[1] = dbe_->book2D("simConvVtxRvsZBarrel"," Photon Sim conversion vtx position",zBinForXray, zMinForXray, zMaxForXray, rBinForXray, rMinForXray, rMaxForXray);
00319 h_simConvVtxRvsZ_[2] = dbe_->book2D("simConvVtxRvsZEndcap"," Photon Sim conversion vtx position",zBin2ForXray, zMinForXray, zMaxForXray, rBinForXray, rMinForXray, rMaxForXray);
00320 h_simConvVtxRvsZ_[3] = dbe_->book2D("simConvVtxRvsZBarrel2"," Photon Sim conversion vtx position when reco R<4cm",zBinForXray, zMinForXray, zMaxForXray, rBinForXray, rMinForXray, rMaxForXray);
00321 h_simConvVtxYvsX_ = dbe_->book2D("simConvVtxYvsXTrkBarrel"," Photon Sim conversion vtx position, (x,y) eta<1 ",100, -80., 80., 100, -80., 80.);
00322
00323 std::string convpath = dqmpath_ + "ConversionInfo";
00324 dbe_->setCurrentFolder(convpath);
00325
00326 histname="nConv";
00327 h_nConv_[0][0] = dbe_->book1D(histname+"All","Number Of Conversions per isolated candidates per events: All Ecal ",10,-0.5, 9.5);
00328 h_nConv_[0][1] = dbe_->book1D(histname+"Barrel","Number Of Conversions per isolated candidates per events: Ecal Barrel ",10,-0.5, 9.5);
00329 h_nConv_[0][2] = dbe_->book1D(histname+"Endcap","Number Of Conversions per isolated candidates per events: Ecal Endcap ",10,-0.5, 9.5);
00330 h_nConv_[1][0] = dbe_->book1D(histname+"All_Ass","Number Of associated Conversions per isolated candidates per events: All Ecal ",10,-0.5, 9.5);
00331
00332 h_convEta_[0][0] = dbe_->book1D("convEta"," converted Photon Eta ",etaBin,etaMin, etaMax) ;
00333 h_convEta2_[0][0] = dbe_->book1D("convEta2"," converted Photon Eta ",etaBin2,etaMin, etaMax) ;
00334 h_convPhi_[0][0] = dbe_->book1D("convPhi"," converted Photon Phi ",phiBin,phiMin,phiMax) ;
00335 h_convR_[0][0] = dbe_->book1D("convR"," converted photon R",rBin,rMin, rMax);
00336 h_convZ_[0][0] = dbe_->book1D("convZ"," converted photon Z",zBin,zMin, zMax);
00337 h_convPt_[0][0] = dbe_->book1D("convPt"," conversions Transverse Energy: all eta ", etBin,etMin, etMax);
00338
00339 h_convEta_[1][0] = dbe_->book1D("convEtaAss"," Matched converted Photon Eta ",etaBin2,etaMin, etaMax) ;
00340 h_convPhi_[1][0] = dbe_->book1D("convPhiAss"," Matched converted Photon Phi ",phiBin,phiMin,phiMax) ;
00341 h_convR_[1][0] = dbe_->book1D("convRAss"," Matched converted photon R",rBin,rMin, rMax);
00342 h_convZ_[1][0] = dbe_->book1D("convZAss"," Matched converted photon Z",zBin,zMin, zMax);
00343 h_convPt_[1][0] = dbe_->book1D("convPtAss","Matched conversions Transverse Energy: all eta ", etBin,etMin, etMax);
00344
00345 h_convEta_[2][0] = dbe_->book1D("convEtaFake"," Fake converted Photon Eta ",etaBin2,etaMin, etaMax) ;
00346 h_convPhi_[2][0] = dbe_->book1D("convPhiFake"," Fake converted Photon Phi ",phiBin,phiMin,phiMax) ;
00347 h_convR_[2][0] = dbe_->book1D("convRFake"," Fake converted photon R",rBin,rMin, rMax);
00348 h_convZ_[2][0] = dbe_->book1D("convZFake"," Fake converted photon Z",zBin,zMin, zMax);
00349 h_convPt_[2][0] = dbe_->book1D("convPtFake","Fake conversions Transverse Energy: all eta ", etBin,etMin, etMax);
00350
00351 h_convRplot_ = dbe_->book1D("convRplot"," converted photon R",600, 0.,120.);
00352 h_convZplot_ = dbe_->book1D("convZplot"," converted photon Z",320,-160.,160.);
00353
00354
00355 histname = "convPtRes";
00356 h_convPtRes_[0] = dbe_->book1D(histname+"All"," Conversion Pt rec/true : All ecal ", resBin,resMin, resMax);
00357 h_convPtRes_[1] = dbe_->book1D(histname+"Barrel"," Conversion Pt rec/true : Barrel ",resBin,resMin, resMax);
00358 h_convPtRes_[2] = dbe_->book1D(histname+"Endcap"," Conversion Pt rec/true : Endcap ",resBin,resMin, resMax);
00359
00360
00361 histname="hInvMass";
00362 h_invMass_[0][0]= dbe_->book1D(histname+"All_AllTracks"," Photons:Tracks from conversion: Pair invariant mass: all Ecal ",100, 0., 1.5);
00363 h_invMass_[0][1]= dbe_->book1D(histname+"Barrel_AllTracks"," Photons:Tracks from conversion: Pair invariant mass: Barrel Ecal ",100, 0., 1.5);
00364 h_invMass_[0][2]= dbe_->book1D(histname+"Endcap_AllTracks"," Photons:Tracks from conversion: Pair invariant mass: Endcap Ecal ",100, 0., 1.5);
00365
00366 h_invMass_[1][0]= dbe_->book1D(histname+"All_AssTracks"," Photons:Tracks from conversion: Pair invariant mass: all Ecal ",100, 0., 1.5);
00367 h_invMass_[1][1]= dbe_->book1D(histname+"Barrel_AssTracks"," Photons:Tracks from conversion: Pair invariant mass: Barrel Ecal ",100, 0., 1.5);
00368 h_invMass_[1][2]= dbe_->book1D(histname+"Endcap_AssTracks"," Photons:Tracks from conversion: Pair invariant mass: Endcap Ecal ",100, 0., 1.5);
00369
00370 h_invMass_[2][0]= dbe_->book1D(histname+"All_FakeTracks"," Photons:Tracks from conversion: Pair invariant mass: all Ecal ",100, 0., 1.5);
00371 h_invMass_[2][1]= dbe_->book1D(histname+"Barrel_FakeTracks"," Photons:Tracks from conversion: Pair invariant mass: Barrel Ecal ",100, 0., 1.5);
00372 h_invMass_[2][2]= dbe_->book1D(histname+"Endcap_FaleTracks"," Photons:Tracks from conversion: Pair invariant mass: Endcap Ecal ",100, 0., 1.5);
00373
00374
00375
00376 histname="hDPhiTracksAtVtx";
00377 h_DPhiTracksAtVtx_[0][0] =dbe_->book1D(histname+"All", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: all Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
00378 h_DPhiTracksAtVtx_[0][1] =dbe_->book1D(histname+"Barrel", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Barrel Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
00379 h_DPhiTracksAtVtx_[0][2] =dbe_->book1D(histname+"Endcap", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Endcap Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
00380 h_DPhiTracksAtVtx_[1][0] =dbe_->book1D(histname+"All_Ass", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: all Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
00381 h_DPhiTracksAtVtx_[1][1] =dbe_->book1D(histname+"Barrel_Ass", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Barrel Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
00382 h_DPhiTracksAtVtx_[1][2] =dbe_->book1D(histname+"Endcap_Ass", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Endcap Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
00383 h_DPhiTracksAtVtx_[2][0] =dbe_->book1D(histname+"All_Fakes", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: all Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
00384 h_DPhiTracksAtVtx_[2][1] =dbe_->book1D(histname+"Barrel_Fakes", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Barrel Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
00385 h_DPhiTracksAtVtx_[2][2] =dbe_->book1D(histname+"Endcap_Fakes", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Endcap Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
00386
00387
00388
00389 histname="hDPhiTracksAtVtxVsEta";
00390 h2_DPhiTracksAtVtxVsEta_ = dbe_->book2D(histname+"All"," Photons:Tracks from conversions: #delta#phi Tracks at vertex vs #eta",etaBin2,etaMin, etaMax,100, -0.5, 0.5);
00391 histname="pDPhiTracksAtVtxVsEta";
00392 p_DPhiTracksAtVtxVsEta_ = dbe_->bookProfile(histname+"All"," Photons:Tracks from conversions: #delta#phi Tracks at vertex vs #eta ",etaBin2,etaMin, etaMax, 100, -0.5, 0.5,"");
00393
00394 histname="hDPhiTracksAtVtxVsR";
00395 h2_DPhiTracksAtVtxVsR_ = dbe_->book2D(histname+"All"," Photons:Tracks from conversions: #delta#phi Tracks at vertex vs R",rBin,rMin, rMax,100, -0.5, 0.5);
00396 histname="pDPhiTracksAtVtxVsR";
00397 p_DPhiTracksAtVtxVsR_ = dbe_->bookProfile(histname+"All"," Photons:Tracks from conversions: #delta#phi Tracks at vertex vs R ",rBin,rMin, rMax,100, -0.5, 0.5,"");
00398
00399
00400 histname="hDCotTracks";
00401 h_DCotTracks_[0][0]= dbe_->book1D(histname+"All"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: all Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
00402 h_DCotTracks_[0][1]= dbe_->book1D(histname+"Barrel"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Barrel Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
00403 h_DCotTracks_[0][2]= dbe_->book1D(histname+"Endcap"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Endcap Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
00404 h_DCotTracks_[1][0]= dbe_->book1D(histname+"All_Ass"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: all Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
00405 h_DCotTracks_[1][1]= dbe_->book1D(histname+"Barrel_Ass"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Barrel Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
00406 h_DCotTracks_[1][2]= dbe_->book1D(histname+"Endcap_Ass"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Endcap Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
00407 h_DCotTracks_[2][0]= dbe_->book1D(histname+"All_Fakes"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: all Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
00408 h_DCotTracks_[2][1]= dbe_->book1D(histname+"Barrel_Fakes"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Barrel Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
00409 h_DCotTracks_[2][2]= dbe_->book1D(histname+"Endcap_Fakes"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Endcap Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
00410
00411
00412 histname="hDCotTracksVsEta";
00413 h2_DCotTracksVsEta_ = dbe_->book2D(histname+"All"," Photons:Tracks from conversions: #delta cotg(#Theta) Tracks vs #eta",etaBin2,etaMin, etaMax,100, -0.2, 0.2);
00414 histname="pDCotTracksVsEta";
00415 p_DCotTracksVsEta_ = dbe_->bookProfile(histname+"All"," Photons:Tracks from conversions: #delta cotg(#Theta) Tracks vs #eta ",etaBin2,etaMin, etaMax, 100, -0.2, 0.2,"");
00416
00417 histname="hDCotTracksVsR";
00418 h2_DCotTracksVsR_ = dbe_->book2D(histname+"All"," Photons:Tracks from conversions: #delta cotg(#Theta) Tracks at vertex vs R",rBin,rMin, rMax,100, -0.2, 0.2);
00419 histname="pDCotTracksVsR";
00420 p_DCotTracksVsR_ = dbe_->bookProfile(histname+"All"," Photons:Tracks from conversions: #delta cotg(#Theta) Tracks at vertex vs R ",rBin,rMin, rMax,100, -0.2, 0.2,"");
00421
00422
00423 histname="hDistMinAppTracks";
00424 h_distMinAppTracks_[0][0]= dbe_->book1D(histname+"All"," Photons:Tracks from conversions Min Approach Dist Tracks: all Ecal ",120, -0.5, 1.0);
00425 h_distMinAppTracks_[0][1]= dbe_->book1D(histname+"Barrel"," Photons:Tracks from conversions Min Approach Dist Tracks: Barrel Ecal ",120, -0.5, 1.0);
00426 h_distMinAppTracks_[0][2]= dbe_->book1D(histname+"Endcap"," Photons:Tracks from conversions Min Approach Dist Tracks: Endcap Ecal ",120, -0.5, 1.0);
00427 h_distMinAppTracks_[1][0]= dbe_->book1D(histname+"All_Ass"," Photons:Tracks from conversions Min Approach Dist Tracks: all Ecal ",120, -0.5, 1.0);
00428 h_distMinAppTracks_[1][1]= dbe_->book1D(histname+"Barrel_Ass"," Photons:Tracks from conversions Min Approach Dist Tracks: Barrel Ecal ",120, -0.5, 1.0);
00429 h_distMinAppTracks_[1][2]= dbe_->book1D(histname+"Endcap_Ass"," Photons:Tracks from conversions Min Approach Dist Tracks: Endcap Ecal ",120, -0.5, 1.0);
00430 h_distMinAppTracks_[2][0]= dbe_->book1D(histname+"All_Fakes"," Photons:Tracks from conversions Min Approach Dist Tracks: all Ecal ",120, -0.5, 1.0);
00431 h_distMinAppTracks_[2][1]= dbe_->book1D(histname+"Barrel_Fakes"," Photons:Tracks from conversions Min Approach Dist Tracks: Barrel Ecal ",120, -0.5, 1.0);
00432 h_distMinAppTracks_[2][2]= dbe_->book1D(histname+"Endcap_Fakes"," Photons:Tracks from conversions Min Approach Dist Tracks: Endcap Ecal ",120, -0.5, 1.0);
00433
00434
00435 h_convVtxRvsZ_[0] = dbe_->book2D("convVtxRvsZAll"," Photon Reco conversion vtx position",zBinForXray, zMinForXray, zMaxForXray, rBinForXray, rMinForXray, rMaxForXray);
00436 h_convVtxRvsZ_[1] = dbe_->book2D("convVtxRvsZBarrel"," Photon Reco conversion vtx position",zBinForXray, zMinForXray, zMaxForXray, rBinForXray, rMinForXray, rMaxForXray);
00437 h_convVtxRvsZ_[2] = dbe_->book2D("convVtxRvsZEndcap"," Photon Reco conversion vtx position",zBin2ForXray, zMinForXray, zMaxForXray, rBinForXray, rMinForXray, rMaxForXray);
00438 h_convVtxYvsX_ = dbe_->book2D("convVtxYvsXTrkBarrel"," Photon Reco conversion vtx position, (x,y) eta<1 ", 1000, -60., 60., 1000, -60., 60.);
00440 h_convVtxRvsZ_zoom_[0] = dbe_->book2D("convVtxRvsZBarrelZoom1"," Photon Reco conversion vtx position",zBinForXray, zMinForXray, zMaxForXray, rBinForXray, -10., 40.);
00441 h_convVtxRvsZ_zoom_[1] = dbe_->book2D("convVtxRvsZBarrelZoom2"," Photon Reco conversion vtx position",zBinForXray, zMinForXray, zMaxForXray, rBinForXray, -10., 20.);
00442 h_convVtxYvsX_zoom_[0] = dbe_->book2D("convVtxYvsXTrkBarrelZoom1"," Photon Reco conversion vtx position, (x,y) eta<1 ",100, -40., 40., 100, -40., 40.);
00443 h_convVtxYvsX_zoom_[1] = dbe_->book2D("convVtxYvsXTrkBarrelZoom2"," Photon Reco conversion vtx position, (x,y) eta<1 ",100, -20., 20., 100, -20., 20.);
00444
00445 h_convVtxdR_ = dbe_->book1D("convVtxdR"," Photon Reco conversion vtx dR",100, -10.,10.);
00446 h_convVtxdX_ = dbe_->book1D("convVtxdX"," Photon Reco conversion vtx dX",100, -10.,10.);
00447 h_convVtxdY_ = dbe_->book1D("convVtxdY"," Photon Reco conversion vtx dY",100, -10.,10.);
00448 h_convVtxdZ_ = dbe_->book1D("convVtxdZ"," Photon Reco conversion vtx dZ",100, -20.,20.);
00449
00450 h_convVtxdPhi_ = dbe_->book1D("convVtxdPhi"," Photon Reco conversion vtx dPhi",100, -0.01,0.01);
00451 h_convVtxdEta_ = dbe_->book1D("convVtxdEta"," Photon Reco conversion vtx dEta",100, -0.5,0.5);
00452
00453 h_convVtxdR_barrel_ = dbe_->book1D("convVtxdR_barrel"," Photon Reco conversion vtx dR, |eta|<=1.2",100, -10.,10.);
00454 h_convVtxdX_barrel_ = dbe_->book1D("convVtxdX_barrel"," Photon Reco conversion vtx dX, |eta|<=1.2",100, -10.,10.);
00455 h_convVtxdY_barrel_ = dbe_->book1D("convVtxdY_barrel"," Photon Reco conversion vtx dY, |eta|<=1.2 ",100, -10.,10.);
00456 h_convVtxdZ_barrel_ = dbe_->book1D("convVtxdZ_barrel"," Photon Reco conversion vtx dZ, |eta|<=1.2,",100, -20.,20.);
00457
00458 h_convVtxdR_endcap_ = dbe_->book1D("convVtxdR_endcap"," Photon Reco conversion vtx dR, |eta|>1.2 ",100, -10.,10.);
00459 h_convVtxdX_endcap_ = dbe_->book1D("convVtxdX_endcap"," Photon Reco conversion vtx dX, |eta|>1.2",100, -10.,10.);
00460 h_convVtxdY_endcap_ = dbe_->book1D("convVtxdY_endcap"," Photon Reco conversion vtx dY, |eta|>1.2",100, -10.,10.);
00461 h_convVtxdZ_endcap_ = dbe_->book1D("convVtxdZ_endcap"," Photon Reco conversion vtx dZ, |eta|>1.2",100, -20.,20.);
00462
00463
00464
00465 h2_convVtxdRVsR_ = dbe_->book2D("h2ConvVtxdRVsR"," Conversion vtx dR vsR" ,rBin,rMin, rMax,100, -20.,20.);
00466 h2_convVtxdRVsEta_ = dbe_->book2D("h2ConvVtxdRVsEta","Conversion vtx dR vs Eta" ,etaBin2,etaMin, etaMax,100, -20.,20.);
00467
00468 p_convVtxdRVsR_ = dbe_->bookProfile("pConvVtxdRVsR"," Conversion vtx dR vsR" ,rBin,rMin, rMax ,100, -20.,20., "");
00469 p_convVtxdRVsEta_ = dbe_->bookProfile("pConvVtxdRVsEta","Conversion vtx dR vs Eta" ,etaBin2,etaMin, etaMax, 100, -20.,20., "");
00470 p_convVtxdXVsX_ = dbe_->bookProfile("pConvVtxdXVsX","Conversion vtx dX vs X" ,120,-60, 60 ,100, -20.,20., "");
00471 p_convVtxdYVsY_ = dbe_->bookProfile("pConvVtxdYVsY","Conversion vtx dY vs Y" ,120,-60, 60 ,100, -20.,20., "");
00472 p_convVtxdZVsZ_ = dbe_->bookProfile("pConvVtxdZVsZ","Conversion vtx dZ vs Z" ,zBin,zMin,zMax ,100, -20.,20., "");
00473
00474 p_convVtxdZVsR_ = dbe_->bookProfile("pConvVtxdZVsR","Conversion vtx dZ vs R" ,rBin,rMin,rMax ,100, -20.,20., "");
00475 p2_convVtxdRVsRZ_ = dbe_->bookProfile2D("p2ConvVtxdRVsRZ","Conversion vtx dR vs RZ" ,zBin,zMin, zMax,rBin,rMin,rMax,100, 0.,20.,"s");
00476 p2_convVtxdZVsRZ_ = dbe_->bookProfile2D("p2ConvVtxdZVsRZ","Conversion vtx dZ vs RZ" ,zBin,zMin, zMax,rBin,rMin,rMax,100, 0.,20.,"s");
00477
00478
00479
00480 h2_convVtxRrecVsTrue_ = dbe_->book2D("h2ConvVtxRrecVsTrue","Photon Reco conversion vtx R rec vs true" ,rBin,rMin, rMax,rBin,rMin, rMax);
00481
00482 histname="vtxChi2Prob";
00483 h_vtxChi2Prob_[0][0] = dbe_->book1D(histname+"All","vertex #chi^{2} all", 100, 0., 1.);
00484 h_vtxChi2Prob_[0][1] = dbe_->book1D(histname+"Barrel","vertex #chi^{2} barrel", 100, 0., 1.);
00485 h_vtxChi2Prob_[0][2] = dbe_->book1D(histname+"Endcap","vertex #chi^{2} endcap", 100, 0., 1.);
00486 h_vtxChi2Prob_[1][0] = dbe_->book1D(histname+"All_Ass","vertex #chi^{2} all", 100, 0., 1.);
00487 h_vtxChi2Prob_[1][1] = dbe_->book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 100, 0., 1.);
00488 h_vtxChi2Prob_[1][2] = dbe_->book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 100, 0., 1.);
00489 h_vtxChi2Prob_[2][0] = dbe_->book1D(histname+"All_Fakes","vertex #chi^{2} all", 100, 0., 1.);
00490 h_vtxChi2Prob_[2][1] = dbe_->book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 100, 0., 1.);
00491 h_vtxChi2Prob_[2][2] = dbe_->book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 100, 0., 1.);
00492
00493
00494 h_zPVFromTracks_[1] = dbe_->book1D("zPVFromTracks"," Photons: PV z from conversion tracks",100, -25., 25.);
00495 h_dzPVFromTracks_[1] = dbe_->book1D("dzPVFromTracks"," Photons: PV Z_rec - Z_true from conversion tracks",100, -5., 5.);
00496 h2_dzPVVsR_ = dbe_->book2D("h2dzPVVsR","Photon Reco conversions: dz(PV) vs R" ,rBin,rMin, rMax,100, -3.,3.);
00497 p_dzPVVsR_ = dbe_->bookProfile("pdzPVVsR","Photon Reco conversions: dz(PV) vs R" ,rBin,rMin, rMax, 100, -3.,3.,"");
00498
00499
00500 histname="lxybs";
00501 h_lxybs_[0][0] = dbe_->book1D(histname+"All","vertex #chi^{2} all", 200, -100., 100.);
00502 h_lxybs_[0][1] = dbe_->book1D(histname+"Barrel","vertex #chi^{2} barrel", 200, -100., 100.);
00503 h_lxybs_[0][2] = dbe_->book1D(histname+"Endcap","vertex #chi^{2} endcap", 200, -100., 100.);
00504 h_lxybs_[1][0] = dbe_->book1D(histname+"All_Ass","vertex #chi^{2} all", 200, -100., 100.);
00505 h_lxybs_[1][1] = dbe_->book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 200, -100., 100.);
00506 h_lxybs_[1][2] = dbe_->book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 200, -100., 100.);
00507 h_lxybs_[2][0] = dbe_->book1D(histname+"All_Fakes","vertex #chi^{2} all", 200, -100., 100.);
00508 h_lxybs_[2][1] = dbe_->book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 200, -100., 100.);
00509 h_lxybs_[2][2] = dbe_->book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 200, -100., 100.);
00510
00511 histname="maxNHitsBeforeVtx";
00512 h_maxNHitsBeforeVtx_[0][0] = dbe_->book1D(histname+"All","vertex #chi^{2} all", 16, -0.5, 15.5);
00513 h_maxNHitsBeforeVtx_[0][1] = dbe_->book1D(histname+"Barrel","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00514 h_maxNHitsBeforeVtx_[0][2] = dbe_->book1D(histname+"Endcap","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00515 h_maxNHitsBeforeVtx_[1][0] = dbe_->book1D(histname+"All_Ass","vertex #chi^{2} all", 16, -0.5, 15.5);
00516 h_maxNHitsBeforeVtx_[1][1] = dbe_->book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00517 h_maxNHitsBeforeVtx_[1][2] = dbe_->book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00518 h_maxNHitsBeforeVtx_[2][0] = dbe_->book1D(histname+"All_Fakes","vertex #chi^{2} all", 16, -0.5, 15.5);
00519 h_maxNHitsBeforeVtx_[2][1] = dbe_->book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00520 h_maxNHitsBeforeVtx_[2][2] = dbe_->book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00521
00522 histname="leadNHitsBeforeVtx";
00523 h_leadNHitsBeforeVtx_[0][0] = dbe_->book1D(histname+"All","vertex #chi^{2} all", 16, -0.5, 15.5);
00524 h_leadNHitsBeforeVtx_[0][1] = dbe_->book1D(histname+"Barrel","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00525 h_leadNHitsBeforeVtx_[0][2] = dbe_->book1D(histname+"Endcap","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00526 h_leadNHitsBeforeVtx_[1][0] = dbe_->book1D(histname+"All_Ass","vertex #chi^{2} all", 16, -0.5, 15.5);
00527 h_leadNHitsBeforeVtx_[1][1] = dbe_->book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00528 h_leadNHitsBeforeVtx_[1][2] = dbe_->book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00529 h_leadNHitsBeforeVtx_[2][0] = dbe_->book1D(histname+"All_Fakes","vertex #chi^{2} all", 16, -0.5, 15.5);
00530 h_leadNHitsBeforeVtx_[2][1] = dbe_->book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00531 h_leadNHitsBeforeVtx_[2][2] = dbe_->book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00532
00533 histname="trailNHitsBeforeVtx";
00534 h_trailNHitsBeforeVtx_[0][0] = dbe_->book1D(histname+"All","vertex #chi^{2} all", 16, -0.5, 15.5);
00535 h_trailNHitsBeforeVtx_[0][1] = dbe_->book1D(histname+"Barrel","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00536 h_trailNHitsBeforeVtx_[0][2] = dbe_->book1D(histname+"Endcap","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00537 h_trailNHitsBeforeVtx_[1][0] = dbe_->book1D(histname+"All_Ass","vertex #chi^{2} all", 16, -0.5, 15.5);
00538 h_trailNHitsBeforeVtx_[1][1] = dbe_->book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00539 h_trailNHitsBeforeVtx_[1][2] = dbe_->book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00540 h_trailNHitsBeforeVtx_[2][0] = dbe_->book1D(histname+"All_Fakes","vertex #chi^{2} all", 16, -0.5, 15.5);
00541 h_trailNHitsBeforeVtx_[2][1] = dbe_->book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00542 h_trailNHitsBeforeVtx_[2][2] = dbe_->book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00543
00544 histname="sumNHitsBeforeVtx";
00545 h_sumNHitsBeforeVtx_[0][0] = dbe_->book1D(histname+"All","vertex #chi^{2} all", 16, -0.5, 15.5);
00546 h_sumNHitsBeforeVtx_[0][1] = dbe_->book1D(histname+"Barrel","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00547 h_sumNHitsBeforeVtx_[0][2] = dbe_->book1D(histname+"Endcap","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00548 h_sumNHitsBeforeVtx_[1][0] = dbe_->book1D(histname+"All_Ass","vertex #chi^{2} all", 16, -0.5, 15.5);
00549 h_sumNHitsBeforeVtx_[1][1] = dbe_->book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00550 h_sumNHitsBeforeVtx_[1][2] = dbe_->book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00551 h_sumNHitsBeforeVtx_[2][0] = dbe_->book1D(histname+"All_Fakes","vertex #chi^{2} all", 16, -0.5, 15.5);
00552 h_sumNHitsBeforeVtx_[2][1] = dbe_->book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00553 h_sumNHitsBeforeVtx_[2][2] = dbe_->book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00554
00555 histname="maxDlClosestHitToVtx";
00556 h_maxDlClosestHitToVtx_[0][0] = dbe_->book1D(histname+"All","vertex #chi^{2} all", 100, -10., 10.);
00557 h_maxDlClosestHitToVtx_[0][1] = dbe_->book1D(histname+"Barrel","vertex #chi^{2} barrel", 100, -10., 10.);
00558 h_maxDlClosestHitToVtx_[0][2] = dbe_->book1D(histname+"Endcap","vertex #chi^{2} endcap", 100, -10., 10.);
00559 h_maxDlClosestHitToVtx_[1][0] = dbe_->book1D(histname+"All_Ass","vertex #chi^{2} all", 100, -10., 10.);
00560 h_maxDlClosestHitToVtx_[1][1] = dbe_->book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 100, -10., 10.);
00561 h_maxDlClosestHitToVtx_[1][2] = dbe_->book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 100, -10., 10.);
00562 h_maxDlClosestHitToVtx_[2][0] = dbe_->book1D(histname+"All_Fakes","vertex #chi^{2} all", 100, -10., 10.);
00563 h_maxDlClosestHitToVtx_[2][1] = dbe_->book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 100, -10., 10.);
00564 h_maxDlClosestHitToVtx_[2][2] = dbe_->book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 100, -10., 10.);
00565
00566 histname="maxDlClosestHitToVtxSig";
00567 h_maxDlClosestHitToVtxSig_[0][0] = dbe_->book1D(histname+"All","vertex #chi^{2} all", 100, -8., 8.);
00568 h_maxDlClosestHitToVtxSig_[0][1] = dbe_->book1D(histname+"Barrel","vertex #chi^{2} barrel", 100, -8., 8.);
00569 h_maxDlClosestHitToVtxSig_[0][2] = dbe_->book1D(histname+"Endcap","vertex #chi^{2} endcap", 100, -8., 8.);
00570 h_maxDlClosestHitToVtxSig_[1][0] = dbe_->book1D(histname+"All_Ass","vertex #chi^{2} all", 100, -8., 8.);
00571 h_maxDlClosestHitToVtxSig_[1][1] = dbe_->book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 100, -8., 8.);
00572 h_maxDlClosestHitToVtxSig_[1][2] = dbe_->book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 100, -8., 8.);
00573 h_maxDlClosestHitToVtxSig_[2][0] = dbe_->book1D(histname+"All_Fakes","vertex #chi^{2} all", 100, -8., 8.);
00574 h_maxDlClosestHitToVtxSig_[2][1] = dbe_->book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 100, -8., 8.);
00575 h_maxDlClosestHitToVtxSig_[2][2] = dbe_->book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 100, -8., 8.);
00576
00577 histname="deltaExpectedHitsInner";
00578 h_deltaExpectedHitsInner_[0][0] = dbe_->book1D(histname+"All","vertex #chi^{2} all", 31, -15.5, 15.5);
00579 h_deltaExpectedHitsInner_[0][1] = dbe_->book1D(histname+"Barrel","vertex #chi^{2} barrel", 31, -15.5, 15.5);
00580 h_deltaExpectedHitsInner_[0][2] = dbe_->book1D(histname+"Endcap","vertex #chi^{2} endcap", 31, -15.5, 15.5);
00581 h_deltaExpectedHitsInner_[1][0] = dbe_->book1D(histname+"All_Ass","vertex #chi^{2} all", 31, -15.5, 15.5);
00582 h_deltaExpectedHitsInner_[1][1] = dbe_->book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 31, -15.5, 15.5);
00583 h_deltaExpectedHitsInner_[1][2] = dbe_->book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 31, -15.5, 15.5);
00584 h_deltaExpectedHitsInner_[2][0] = dbe_->book1D(histname+"All_Fakes","vertex #chi^{2} all", 31, -15.5, 15.5);
00585 h_deltaExpectedHitsInner_[2][1] = dbe_->book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 31, -15.5, 15.5);
00586 h_deltaExpectedHitsInner_[2][2] = dbe_->book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 31, -15.5, 15.5);
00587
00588 histname="leadExpectedHitsInner";
00589 h_leadExpectedHitsInner_[0][0] = dbe_->book1D(histname+"All","vertex #chi^{2} all", 16, -0.5, 15.5);
00590 h_leadExpectedHitsInner_[0][1] = dbe_->book1D(histname+"Barrel","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00591 h_leadExpectedHitsInner_[0][2] = dbe_->book1D(histname+"Endcap","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00592 h_leadExpectedHitsInner_[1][0] = dbe_->book1D(histname+"All_Ass","vertex #chi^{2} all", 16, -0.5, 15.5);
00593 h_leadExpectedHitsInner_[1][1] = dbe_->book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00594 h_leadExpectedHitsInner_[1][2] = dbe_->book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00595 h_leadExpectedHitsInner_[2][0] = dbe_->book1D(histname+"All_Fakes","vertex #chi^{2} all", 16, -0.5, 15.5);
00596 h_leadExpectedHitsInner_[2][1] = dbe_->book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00597 h_leadExpectedHitsInner_[2][2] = dbe_->book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00598
00599 histname="nSharedHits";
00600 h_nSharedHits_[0][0] = dbe_->book1D(histname+"All","vertex #chi^{2} all", 16, -0.5, 15.5);
00601 h_nSharedHits_[0][1] = dbe_->book1D(histname+"Barrel","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00602 h_nSharedHits_[0][2] = dbe_->book1D(histname+"Endcap","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00603 h_nSharedHits_[1][0] = dbe_->book1D(histname+"All_Ass","vertex #chi^{2} all", 16, -0.5, 15.5);
00604 h_nSharedHits_[1][1] = dbe_->book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00605 h_nSharedHits_[1][2] = dbe_->book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00606 h_nSharedHits_[2][0] = dbe_->book1D(histname+"All_Fakes","vertex #chi^{2} all", 16, -0.5, 15.5);
00607 h_nSharedHits_[2][1] = dbe_->book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 16, -0.5, 15.5);
00608 h_nSharedHits_[2][2] = dbe_->book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 16, -0.5, 15.5);
00609
00611 histname="nHits";
00612 nHits_[0] = dbe_->book2D(histname+"AllTracks","Photons:Tracks from conversions: # of hits all tracks",etaBin,etaMin, etaMax,30,0., 30.);
00613 nHits_[1] = dbe_->book2D(histname+"AllTracks_Ass","Photons:Tracks from conversions: # of hits all tracks ass",etaBin,etaMin, etaMax,30,0., 30.);
00614 nHits_[2] = dbe_->book2D(histname+"AllTracks_Fakes","Photons:Tracks from conversions: # of hits all tracks fakes",etaBin,etaMin, etaMax,30,0., 30.);
00615
00616
00617 histname="nHitsVsEta";
00618 nHitsVsEta_[0] = dbe_->book2D(histname+"AllTracks","Photons:Tracks from conversions: # of hits vs #eta all tracks",etaBin,etaMin, etaMax,30,0., 30.);
00619 nHitsVsEta_[1] = dbe_->book2D(histname+"AllTracks_Ass","Photons:Tracks from conversions: # of hits vs #eta all tracks",etaBin,etaMin, etaMax,30,0., 30.);
00620 nHitsVsEta_[2] = dbe_->book2D(histname+"AllTracks_Fakes","Photons:Tracks from conversions: # of hits vs #eta all tracks",etaBin,etaMin, etaMax,30,0., 30.);
00621 histname="h_nHitsVsEta";
00622 p_nHitsVsEta_[0] = dbe_->bookProfile(histname+"AllTracks","Photons:Tracks from conversions: # of hits vs #eta all tracks",etaBin,etaMin, etaMax, 30,-0.5, 29.5,"");
00623 p_nHitsVsEta_[1] = dbe_->bookProfile(histname+"AllTracks_Ass","Photons:Tracks from conversions: # of hits vs #eta all tracks",etaBin,etaMin, etaMax, 30,-0.5, 29.5,"");
00624 p_nHitsVsEta_[2] = dbe_->bookProfile(histname+"AllTracks_Fakes","Photons:Tracks from conversions: # of hits vs #eta all tracks",etaBin,etaMin, etaMax, 30,-0.5, 29.5,"");
00625
00626
00627 histname="nHitsVsR";
00628 nHitsVsR_[0] = dbe_->book2D(histname+"AllTracks","Photons:Tracks from conversions: # of hits vs radius all tracks" ,rBin,rMin, rMax,30,0., 30.);
00629 nHitsVsR_[1] = dbe_->book2D(histname+"AllTracks_Ass","Photons:Tracks from conversions: # of hits vs radius all tracks" ,rBin,rMin, rMax,30,0., 30.);
00630 nHitsVsR_[2] = dbe_->book2D(histname+"AllTracks_Fakes","Photons:Tracks from conversions: # of hits vs radius all tracks" ,rBin,rMin, rMax,30,0., 30.);
00631
00632 histname="h_nHitsVsR";
00633 p_nHitsVsR_[0] = dbe_->bookProfile(histname+"AllTracks","Photons:Tracks from conversions: # of hits vs radius all tracks",rBin,rMin, rMax, 30,-0.5, 29.5,"");
00634 p_nHitsVsR_[1] = dbe_->bookProfile(histname+"AllTracks_Ass","Photons:Tracks from conversions: # of hits vs radius all tracks",rBin,rMin, rMax, 30,-0.5, 29.5,"");
00635 p_nHitsVsR_[2] = dbe_->bookProfile(histname+"AllTracks_Fakes","Photons:Tracks from conversions: # of hits vs radius all tracks",rBin,rMin, rMax, 30,-0.5, 29.5,"");
00636
00637 histname="tkChi2";
00638 h_tkChi2_[0] = dbe_->book1D(histname+"AllTracks","Photons:Tracks from conversions: #chi^{2} of all tracks", 100, chi2Min, chi2Max);
00639 h_tkChi2_[1] = dbe_->book1D(histname+"AllTracks_Ass","Photons:Tracks from conversions: #chi^{2} of all tracks", 100, chi2Min, chi2Max);
00640 h_tkChi2_[2] = dbe_->book1D(histname+"AllTracks_Fakes","Photons:Tracks from conversions: #chi^{2} of all tracks", 100, chi2Min, chi2Max);
00641
00642 histname="tkChi2Large";
00643 h_tkChi2Large_[0] = dbe_->book1D(histname+"AllTracks","Photons:Tracks from conversions: #chi^{2} of all tracks", 1000, 0., 5000.0);
00644 h_tkChi2Large_[1] = dbe_->book1D(histname+"AllTracks_Ass","Photons:Tracks from conversions: #chi^{2} of all tracks", 1000, 0., 5000.0);
00645 h_tkChi2Large_[2] = dbe_->book1D(histname+"AllTracks_Fakes","Photons:Tracks from conversions: #chi^{2} of all tracks", 1000, 0., 5000.0);
00646
00647
00648 histname="h2Chi2VsEta";
00649 h2_Chi2VsEta_[0]=dbe_->book2D(histname+"All"," Reco Track #chi^{2} vs #eta: All ",etaBin2,etaMin, etaMax,100, chi2Min, chi2Max);
00650 h2_Chi2VsEta_[1]=dbe_->book2D(histname+"All_Ass"," Reco Track #chi^{2} vs #eta: All ",etaBin2,etaMin, etaMax,100, chi2Min, chi2Max);
00651 h2_Chi2VsEta_[2]=dbe_->book2D(histname+"All_Fakes"," Reco Track #chi^{2} vs #eta: All ",etaBin2,etaMin, etaMax,100, chi2Min, chi2Max);
00652 histname="pChi2VsEta";
00653 p_Chi2VsEta_[0]=dbe_->bookProfile(histname+"All"," Reco Track #chi^{2} vs #eta : All ",etaBin2,etaMin, etaMax, 100, chi2Min, chi2Max,"");
00654 p_Chi2VsEta_[1]=dbe_->bookProfile(histname+"All_Ass"," Reco Track #chi^{2} vs #eta : All ",etaBin2,etaMin, etaMax, 100, chi2Min, chi2Max,"");
00655 p_Chi2VsEta_[2]=dbe_->bookProfile(histname+"All_Fakes"," Reco Track #chi^{2} vs #eta : All ",etaBin2,etaMin, etaMax, 100, chi2Min, chi2Max,"");
00656
00657 histname="h2Chi2VsR";
00658 h2_Chi2VsR_[0]=dbe_->book2D(histname+"All"," Reco Track #chi^{2} vs R: All ",rBin,rMin, rMax,100,chi2Min, chi2Max);
00659 h2_Chi2VsR_[1]=dbe_->book2D(histname+"All_Ass"," Reco Track #chi^{2} vs R: All ",rBin,rMin, rMax,100,chi2Min, chi2Max);
00660 h2_Chi2VsR_[2]=dbe_->book2D(histname+"All_Fakes"," Reco Track #chi^{2} vs R: All ",rBin,rMin, rMax,100,chi2Min, chi2Max);
00661 histname="pChi2VsR";
00662 p_Chi2VsR_[0]=dbe_->bookProfile(histname+"All"," Reco Track #chi^{2} vas R : All ",rBin,rMin,rMax, 100,chi2Min, chi2Max,"");
00663 p_Chi2VsR_[1]=dbe_->bookProfile(histname+"All_Ass"," Reco Track #chi^{2} vas R : All ",rBin,rMin,rMax, 100,chi2Min, chi2Max,"");
00664 p_Chi2VsR_[2]=dbe_->bookProfile(histname+"All_Fakes"," Reco Track #chi^{2} vas R : All ",rBin,rMin,rMax, 100,chi2Min, chi2Max,"");
00665
00666 histname="hTkD0";
00667 h_TkD0_[0]=dbe_->book1D(histname+"All"," Reco Track D0*q: All ",200,-0.1,60);
00668 h_TkD0_[1]=dbe_->book1D(histname+"All_Ass"," Reco Track D0*q: Barrel ",200,-0.1,60);
00669 h_TkD0_[2]=dbe_->book1D(histname+"All_Fakes"," Reco Track D0*q: Endcap ",200,-0.1,60);
00670
00671
00672
00673 histname="hTkPtPull";
00674 h_TkPtPull_[0]=dbe_->book1D(histname+"All"," Reco Track Pt pull: All ",100, -20., 10.);
00675 histname="hTkPtPull";
00676 h_TkPtPull_[1]=dbe_->book1D(histname+"Barrel"," Reco Track Pt pull: Barrel ",100, -20., 10.);
00677 histname="hTkPtPull";
00678 h_TkPtPull_[2]=dbe_->book1D(histname+"Endcap"," Reco Track Pt pull: Endcap ",100, -20., 10.);
00679
00680 histname="h2TkPtPullEta";
00681 h2_TkPtPull_[0]=dbe_->book2D(histname+"All"," Reco Track Pt pull: All ",etaBin2,etaMin, etaMax,100, -20., 10.);
00682 histname="pTkPtPullEta";
00683 p_TkPtPull_[0]=dbe_->bookProfile(histname+"All"," Reco Track Pt pull: All ",etaBin2,etaMin, etaMax, 100, -20., 10., " ");
00684
00685
00686 histname="PtRecVsPtSim";
00687 h2_PtRecVsPtSim_[0]=dbe_->book2D(histname+"All", "Pt Rec vs Pt sim: All ", etBin,etMin,etMax,etBin,etMin, etMax);
00688 h2_PtRecVsPtSim_[1]=dbe_->book2D(histname+"Barrel", "Pt Rec vs Pt sim: Barrel ", etBin,etMin,etMax,etBin,etMin, etMax);
00689 h2_PtRecVsPtSim_[2]=dbe_->book2D(histname+"Endcap", "Pt Rec vs Pt sim: Endcap ", etBin,etMin,etMax,etBin,etMin, etMax);
00690
00691 histname="photonPtRecVsPtSim";
00692 h2_photonPtRecVsPtSim_=dbe_->book2D(histname+"All", "Pt Rec vs Pt sim: All ", etBin,etMin,etMax,etBin,etMin, etMax);
00693
00694 histname="nHitsBeforeVtx";
00695 h_nHitsBeforeVtx_[0]=dbe_->book1D(histname+"All", "Pt Rec vs Pt sim: All ", 16, -0.5, 15.5);
00696 h_nHitsBeforeVtx_[1]=dbe_->book1D(histname+"Barrel", "Pt Rec vs Pt sim: Barrel ", 16, -0.5, 15.5);
00697 h_nHitsBeforeVtx_[2]=dbe_->book1D(histname+"Endcap", "Pt Rec vs Pt sim: Endcap ", 16, -0.5, 15.5);
00698
00699 histname="dlClosestHitToVtx";
00700 h_dlClosestHitToVtx_[0]=dbe_->book1D(histname+"All", "Pt Rec vs Pt sim: All ", 100, -10., 10.);
00701 h_dlClosestHitToVtx_[1]=dbe_->book1D(histname+"Barrel", "Pt Rec vs Pt sim: Barrel ", 100, -10., 10.);
00702 h_dlClosestHitToVtx_[2]=dbe_->book1D(histname+"Endcap", "Pt Rec vs Pt sim: Endcap ", 100, -10., 10.);
00703
00704 histname="dlClosestHitToVtxSig";
00705 h_dlClosestHitToVtxSig_[0]=dbe_->book1D(histname+"All", "Pt Rec vs Pt sim: All ", 100, -8., 8.);
00706 h_dlClosestHitToVtxSig_[1]=dbe_->book1D(histname+"Barrel", "Pt Rec vs Pt sim: Barrel ", 100, -8., 8.);
00707 h_dlClosestHitToVtxSig_[2]=dbe_->book1D(histname+"Endcap", "Pt Rec vs Pt sim: Endcap ", 100, -8., 8.);
00708
00709 h_match_= dbe_->book1D("h_match"," ", 3, -0.5,2.5);
00710
00711
00712 }
00713
00714
00715
00716 }
00717
00718
00719
00720 void TkConvValidator::beginRun (edm::Run const & r, edm::EventSetup const & theEventSetup) {
00721
00722
00723 edm::LogInfo("ConvertedPhotonProducer") << " get magnetic field" << "\n";
00724 theEventSetup.get<IdealMagneticFieldRecord>().get(theMF_);
00725
00726
00727 edm::ESHandle<TrackAssociatorBase> theHitsAssociator;
00728 theEventSetup.get<TrackAssociatorRecord>().get("trackAssociatorByHitsForConversionValidation",theHitsAssociator);
00729 theTrackAssociator_ = (TrackAssociatorBase *) theHitsAssociator.product();
00730
00731
00732
00733
00734 thePhotonMCTruthFinder_ = new PhotonMCTruthFinder();
00735
00736 }
00737
00738 void TkConvValidator::endRun (edm::Run& r, edm::EventSetup const & theEventSetup) {
00739
00740 delete thePhotonMCTruthFinder_;
00741
00742 }
00743
00744
00745
00746 void TkConvValidator::analyze( const edm::Event& e, const edm::EventSetup& esup ) {
00747
00748 using namespace edm;
00749
00750
00751
00752 const float BARL = 1.4442;
00753
00754 const float END_HI = 2.5;
00755
00756
00757
00758
00759 nEvt_++;
00760 LogInfo("TkConvValidator") << "TkConvValidator Analyzing event number: " << e.id() << " Global Counter " << nEvt_ <<"\n";
00761
00762
00763
00764
00765 esup.get<CaloGeometryRecord>().get(theCaloGeom_);
00766
00767
00768
00769 edm::ESHandle<TransientTrackBuilder> theTTB;
00770 esup.get<TransientTrackRecord>().get("TransientTrackBuilder",theTTB);
00771
00772
00774 Handle<reco::ConversionCollection> convHandle;
00775 e.getByLabel(conversionCollectionProducer_, conversionCollection_ , convHandle);
00776 const reco::ConversionCollection convCollection = *(convHandle.product());
00777 if (!convHandle.isValid()) {
00778 edm::LogError("ConversionsProducer") << "Error! Can't get the collection "<< std::endl;
00779 return;
00780 }
00781
00782
00783 edm::Handle<reco::VertexCollection> vertexHandle;
00784 reco::VertexCollection vertexCollection;
00785 e.getByLabel("offlinePrimaryVertices", vertexHandle);
00786 if (!vertexHandle.isValid()) {
00787 edm::LogError("TrackerOnlyConversionProducer") << "Error! Can't get the product primary Vertex Collection "<< "\n";
00788 } else {
00789 vertexCollection = *(vertexHandle.product());
00790 }
00791 reco::Vertex the_pvtx;
00792 bool valid_pvtx = false;
00793 if (!vertexCollection.empty()){
00794 the_pvtx = *(vertexCollection.begin());
00795
00796 if (the_pvtx.isValid() && fabs(the_pvtx.position().z())<=15 && the_pvtx.position().Rho()<=2){
00797 valid_pvtx = true;
00798 }
00799 }
00800
00801 edm::Handle<reco::BeamSpot> bsHandle;
00802 e.getByLabel("offlineBeamSpot", bsHandle);
00803 if (!bsHandle.isValid()) {
00804 edm::LogError("TrackerOnlyConversionProducer") << "Error! Can't get the product primary Vertex Collection "<< "\n";
00805 return;
00806 }
00807 const reco::BeamSpot &thebs = *bsHandle.product();
00808
00809
00810 edm::ESHandle<TrackerGeometry> tracker;
00811 esup.get<TrackerDigiGeometryRecord>().get(tracker);
00812 const TrackerGeometry* trackerGeom = tracker.product();
00813
00814
00815
00817
00818 std::vector<SimTrack> theSimTracks;
00819 std::vector<SimVertex> theSimVertices;
00820
00821 edm::Handle<SimTrackContainer> SimTk;
00822 edm::Handle<SimVertexContainer> SimVtx;
00823 e.getByLabel("g4SimHits",SimTk);
00824 e.getByLabel("g4SimHits",SimVtx);
00825
00826 bool useTP= parameters_.getParameter<bool>("useTP");
00827 TrackingParticleCollection tpForEfficiency;
00828 TrackingParticleCollection tpForFakeRate;
00829 edm::Handle<TrackingParticleCollection> TPHandleForEff;
00830 edm::Handle<TrackingParticleCollection> TPHandleForFakeRate;
00831 if ( useTP) {
00832 e.getByLabel("tpSelecForEfficiency",TPHandleForEff);
00833 tpForEfficiency = *(TPHandleForEff.product());
00834 e.getByLabel("tpSelecForFakeRate",TPHandleForFakeRate);
00835 tpForFakeRate = *(TPHandleForFakeRate.product());
00836 }
00837
00838
00839
00840 theSimTracks.insert(theSimTracks.end(),SimTk->begin(),SimTk->end());
00841 theSimVertices.insert(theSimVertices.end(),SimVtx->begin(),SimVtx->end());
00842 std::vector<PhotonMCTruth> mcPhotons=thePhotonMCTruthFinder_->find (theSimTracks, theSimVertices);
00843
00844 edm::Handle<edm::HepMCProduct> hepMC;
00845 e.getByLabel("generator",hepMC);
00846
00847
00848
00849
00850 edm::Handle<reco::GenJetCollection> GenJetsHandle ;
00851 e.getByLabel("iterativeCone5GenJets","",GenJetsHandle);
00852 reco::GenJetCollection genJetCollection = *(GenJetsHandle.product());
00853
00854 ConversionHitChecker hitChecker;
00855
00856
00857 std::map<const reco::Track*,TrackingParticleRef> myAss;
00858 std::map<const reco::Track*,TrackingParticleRef>::const_iterator itAss;
00859
00860 for ( std::vector<PhotonMCTruth>::const_iterator mcPho=mcPhotons.begin(); mcPho !=mcPhotons.end(); mcPho++) {
00861
00862 mcConvPt_= (*mcPho).fourMomentum().et();
00863 float mcPhi= (*mcPho).fourMomentum().phi();
00864 mcPhi_= phiNormalization(mcPhi);
00865 mcEta_= (*mcPho).fourMomentum().pseudoRapidity();
00866 mcEta_ = etaTransformation(mcEta_, (*mcPho).primaryVertex().z() );
00867 mcConvR_= (*mcPho).vertex().perp();
00868 mcConvX_= (*mcPho).vertex().x();
00869 mcConvY_= (*mcPho).vertex().y();
00870 mcConvZ_= (*mcPho).vertex().z();
00871 mcConvEta_= (*mcPho).vertex().eta();
00872 mcConvPhi_= (*mcPho).vertex().phi();
00873
00874 if ( fabs(mcEta_) > END_HI ) continue;
00875
00876 if (mcConvPt_<minPhoPtForEffic) continue;
00877 if (fabs(mcEta_)>maxPhoEtaForEffic) continue;
00878 if (fabs(mcConvZ_)>maxPhoZForEffic) continue;
00879 if (mcConvR_>maxPhoRForEffic) continue;
00881
00882 bool goodSimConversion=false;
00883 bool visibleConversion=false;
00884 bool visibleConversionsWithTwoSimTracks=false;
00885 if ( (*mcPho).isAConversion() == 1 ) {
00886 nSimConv_[0]++;
00887 h_AllSimConv_[0]->Fill( mcEta_ ) ;
00888 h_AllSimConv_[1]->Fill( mcPhi_ );
00889 h_AllSimConv_[2]->Fill( mcConvR_ );
00890 h_AllSimConv_[3]->Fill( mcConvZ_ );
00891 h_AllSimConv_[4]->Fill( (*mcPho).fourMomentum().et());
00892
00893 if ( mcConvR_ <15) h_SimConvEtaPix_[0]->Fill( mcEta_ ) ;
00894
00895 if ( ( fabs(mcEta_) <= BARL && mcConvR_ <85 ) ||
00896 ( fabs(mcEta_) > BARL && fabs(mcEta_) <=END_HI && fabs( (*mcPho).vertex().z() ) < 210 ) ) visibleConversion=true;
00897
00898 theConvTP_.clear();
00899
00900
00901 for(size_t i = 0; i < tpForEfficiency.size(); ++i){
00902 TrackingParticleRef tp (TPHandleForEff,i);
00903 if ( fabs( tp->vx() - (*mcPho).vertex().x() ) < 0.0001 &&
00904 fabs( tp->vy() - (*mcPho).vertex().y() ) < 0.0001 &&
00905 fabs( tp->vz() - (*mcPho).vertex().z() ) < 0.0001) {
00906 theConvTP_.push_back( tp );
00907 }
00908 }
00909
00910
00911 if ( theConvTP_.size() == 2 ) visibleConversionsWithTwoSimTracks=true;
00912 goodSimConversion=false;
00913
00914 if ( visibleConversion && visibleConversionsWithTwoSimTracks ) goodSimConversion=true;
00915 if ( goodSimConversion ) {
00916 nSimConv_[1]++;
00917 h_VisSimConv_[0]->Fill( mcEta_ ) ;
00918 h_VisSimConv_[1]->Fill( mcPhi_ );
00919 h_VisSimConv_[2]->Fill( mcConvR_ );
00920 h_VisSimConv_[3]->Fill( mcConvZ_ );
00921 h_VisSimConv_[4]->Fill( (*mcPho).fourMomentum().et());
00922
00923 }
00924
00925 for ( edm::RefVector<TrackingParticleCollection>::iterator iTrk=theConvTP_.begin(); iTrk!=theConvTP_.end(); ++iTrk) {
00926 h_simTkPt_ -> Fill ( (*iTrk)->pt() );
00927 h_simTkEta_ -> Fill ( (*iTrk)->eta() );
00928 }
00929
00930
00931 }
00932
00933 if ( ! (visibleConversion && visibleConversionsWithTwoSimTracks ) ) continue;
00934
00935 h_simConvVtxRvsZ_[0] ->Fill ( fabs (mcConvZ_), mcConvR_ ) ;
00936 if ( fabs(mcEta_) <=1.) {
00937 h_simConvVtxRvsZ_[1] ->Fill ( fabs (mcConvZ_), mcConvR_ ) ;
00938 h_simConvVtxYvsX_ ->Fill ( mcConvX_, mcConvY_ ) ;
00939 }
00940 else
00941 h_simConvVtxRvsZ_[2] ->Fill ( fabs (mcConvZ_), mcConvR_ ) ;
00942
00943
00944 for ( edm::RefVector<TrackingParticleCollection>::iterator iTP= theConvTP_.begin(); iTP!=theConvTP_.end(); iTP++)
00945 {
00946
00947 }
00948
00949 bool recomatch = false;
00950 float chi2Prob = 0.;
00952 for (reco::ConversionCollection::const_iterator conv = convHandle->begin();conv!=convHandle->end();++conv) {
00953
00954 const reco::Conversion aConv = (*conv);
00955 if ( arbitratedMerged_ && !aConv.quality(reco::Conversion::arbitratedMerged) ) continue;
00956 if ( generalTracksOnly_ && !aConv.quality(reco::Conversion::generalTracksOnly) ) continue;
00957 if ( arbitratedEcalSeeded_ && !aConv.quality(reco::Conversion::arbitratedEcalSeeded) ) continue;
00958
00959
00960 if ( highPurity_ && !aConv.quality(reco::Conversion::highPurity) ) continue;
00961
00962
00963 std::vector<edm::RefToBase<reco::Track> > tracks = aConv.tracks();
00964
00965
00966 const reco::Vertex& vtx = aConv.conversionVertex();
00967
00968 if (tracks.size() !=2 || !(vtx.isValid())) continue;
00969
00970
00971 if (ChiSquaredProbability( aConv.conversionVertex().chi2(), aConv.conversionVertex().ndof() ) <= minProb_) continue;
00972 if (aConv.nHitsBeforeVtx().size()>1 && max(aConv.nHitsBeforeVtx().at(0),aConv.nHitsBeforeVtx().at(1)) > maxHitsBeforeVtx_ ) continue;
00973
00974
00975
00976 math::XYZVectorF themom = aConv.refittedPairMomentum();
00977 double dbsx = aConv.conversionVertex().x() - thebs.x0();
00978 double dbsy = aConv.conversionVertex().y() - thebs.y0();
00979 double lxy = (themom.x()*dbsx + themom.y()*dbsy)/themom.rho();
00980
00981 if (lxy<minLxy_) continue;
00982
00983
00984
00985 RefToBase<reco::Track> tfrb1 = aConv.tracks().front();
00986 RefToBase<reco::Track> tfrb2 = aConv.tracks().back();
00987
00988 if ( ecalalgotracks_ && ( !(tfrb1->algo()==15 || tfrb1->algo()==16) || !(tfrb2->algo()==15 || tfrb2->algo()==16) ) ) continue;
00989
00990
00991
00992
00993
00994
00995
00996 RefToBaseVector<reco::Track> tc1, tc2;
00997 tc1.push_back(tfrb1);
00998 tc2.push_back(tfrb2);
00999 bool isAssociated = false;
01000 reco::SimToRecoCollection q1 = theTrackAssociator_->associateSimToReco(tc1,theConvTP_,&e);
01001 reco::SimToRecoCollection q2 = theTrackAssociator_->associateSimToReco(tc2,theConvTP_,&e);
01002
01003 std::vector<std::pair<RefToBase<reco::Track>, double> > trackV1, trackV2;
01004
01005 int tp_1 = 0, tp_2 = 1;
01006 if (q1.find(theConvTP_[0])!=q1.end()){
01007 trackV1 = (std::vector<std::pair<RefToBase<reco::Track>, double> >) q1[theConvTP_[0]];
01008 } else if (q1.find(theConvTP_[1])!=q1.end()){
01009 trackV1 = (std::vector<std::pair<RefToBase<reco::Track>, double> >) q1[theConvTP_[1]];
01010 tp_1 = 1;
01011 }
01012 if (q2.find(theConvTP_[1])!=q2.end()){
01013 trackV2 = (std::vector<std::pair<RefToBase<reco::Track>, double> >) q2[theConvTP_[1]];
01014 } else if (q2.find(theConvTP_[0])!=q2.end()){
01015 trackV2 = (std::vector<std::pair<RefToBase<reco::Track>, double> >) q2[theConvTP_[0]];
01016 tp_2 = 0;
01017 }
01018 if (!(trackV1.size()&&trackV2.size()))
01019 continue;
01020 if (tp_1 == tp_2) continue;
01021
01022 edm::RefToBase<reco::Track> tr1 = trackV1.front().first;
01023 edm::RefToBase<reco::Track> tr2 = trackV2.front().first;
01024
01025
01026 myAss.insert( std::make_pair (tr1.get(),theConvTP_[tp_1] ) );
01027 myAss.insert( std::make_pair (tr2.get(),theConvTP_[tp_2]) );
01028
01029
01030
01031
01032
01033
01034
01035 isAssociated = true;
01036 recomatch = true;
01037 chi2Prob = ChiSquaredProbability( aConv.conversionVertex().chi2(), aConv.conversionVertex().ndof() );
01038
01039 if (isAssociated) {
01040 h_SimRecConvTwoMTracks_[0]->Fill( mcEta_ ) ;
01041 h_SimRecConvTwoMTracks_[1]->Fill( mcPhi_ );
01042 h_SimRecConvTwoMTracks_[2]->Fill( mcConvR_ );
01043 h_SimRecConvTwoMTracks_[3]->Fill( mcConvZ_ );
01044 h_SimRecConvTwoMTracks_[4]->Fill( (*mcPho).fourMomentum().et());
01045 }
01046
01047
01048 }
01049 if (recomatch) {
01051 h_SimConvTwoMTracks_[0]->Fill( mcEta_ ) ;
01052 h_SimConvTwoMTracks_[1]->Fill( mcPhi_ );
01053 h_SimConvTwoMTracks_[2]->Fill( mcConvR_ );
01054 h_SimConvTwoMTracks_[3]->Fill( mcConvZ_ );
01055 h_SimConvTwoMTracks_[4]->Fill( (*mcPho).fourMomentum().et());
01056
01057
01058 if ( chi2Prob > 0) {
01059 h_SimConvTwoMTracksAndVtxPGT0_[0]->Fill( mcEta_ ) ;
01060 h_SimConvTwoMTracksAndVtxPGT0_[1]->Fill( mcPhi_ );
01061 h_SimConvTwoMTracksAndVtxPGT0_[2]->Fill( mcConvR_ );
01062 h_SimConvTwoMTracksAndVtxPGT0_[3]->Fill( mcConvZ_ );
01063 h_SimConvTwoMTracksAndVtxPGT0_[4]->Fill( (*mcPho).fourMomentum().et());
01064 }
01065 if ( chi2Prob > 0.0005) {
01066 h_SimConvTwoMTracksAndVtxPGT0005_[0]->Fill( mcEta_ ) ;
01067 h_SimConvTwoMTracksAndVtxPGT0005_[1]->Fill( mcPhi_ );
01068 h_SimConvTwoMTracksAndVtxPGT0005_[2]->Fill( mcConvR_ );
01069 h_SimConvTwoMTracksAndVtxPGT0005_[3]->Fill( mcConvZ_ );
01070 h_SimConvTwoMTracksAndVtxPGT0005_[4]->Fill( (*mcPho).fourMomentum().et());
01071
01072 }
01073 }
01074
01075 }
01076
01077
01078
01079
01080 for (reco::ConversionCollection::const_iterator conv = convHandle->begin();conv!=convHandle->end();++conv) {
01081 const reco::Conversion aConv = (*conv);
01082 if ( arbitratedMerged_ && !aConv.quality(reco::Conversion::arbitratedMerged) ) continue;
01083 if ( generalTracksOnly_ && !aConv.quality(reco::Conversion::generalTracksOnly) ) continue;
01084 if ( arbitratedEcalSeeded_ && !aConv.quality(reco::Conversion::arbitratedEcalSeeded) ) continue;
01085
01086
01087 if ( highPurity_ && !aConv.quality(reco::Conversion::highPurity) ) continue;
01088
01089
01090 std::vector<edm::RefToBase<reco::Track> > tracks = aConv.tracks();
01091
01092 const reco::Vertex& vtx = aConv.conversionVertex();
01093
01094 if (tracks.size() !=2 || !(vtx.isValid())) continue;
01095
01096
01097
01098 if (ChiSquaredProbability( aConv.conversionVertex().chi2(), aConv.conversionVertex().ndof() ) <= minProb_) continue;
01099 if (aConv.nHitsBeforeVtx().size()>1 && max(aConv.nHitsBeforeVtx().at(0),aConv.nHitsBeforeVtx().at(1)) > maxHitsBeforeVtx_ ) continue;
01100
01101
01102 math::XYZVectorF themom = aConv.refittedPairMomentum();
01103 double dbsx = aConv.conversionVertex().x() - thebs.x0();
01104 double dbsy = aConv.conversionVertex().y() - thebs.y0();
01105 double lxy = (themom.x()*dbsx + themom.y()*dbsy)/themom.rho();
01106
01107 if (lxy<minLxy_) continue;
01108
01109 bool phoIsInBarrel=false;
01110 bool phoIsInEndcap=false;
01111 RefToBase<reco::Track> tk1 = aConv.tracks().front();
01112 RefToBase<reco::Track> tk2 = aConv.tracks().back();
01113 RefToBaseVector<reco::Track> tc1, tc2;
01114 tc1.push_back(tk1);
01115 tc2.push_back(tk2);
01116
01117 if ( ecalalgotracks_ && ( !(tk1->algo()==15 || tk1->algo()==16) || !(tk2->algo()==15 || tk2->algo()==16) ) ) continue;
01118
01119
01120
01121 const reco::Track refTk1 = aConv.conversionVertex().refittedTracks().front();
01122 const reco::Track refTk2 = aConv.conversionVertex().refittedTracks().back();
01123
01124
01125 float dPhiTracksAtVtx = aConv.dPhiTracksAtVtx();
01126
01127 math::XYZVector p1AtVtx= recalculateMomentumAtFittedVertex ( (*theMF_), *trackerGeom, tk1, aConv.conversionVertex() );
01128 math::XYZVector p2AtVtx= recalculateMomentumAtFittedVertex ( (*theMF_), *trackerGeom, tk2, aConv.conversionVertex() );
01129 if ( sqrt(p1AtVtx.perp2()) > sqrt(p2AtVtx.perp2()) )
01130 dPhiTracksAtVtx = p1AtVtx.phi() - p2AtVtx.phi();
01131 else
01132 dPhiTracksAtVtx = p2AtVtx.phi() - p1AtVtx.phi();
01133
01134
01135 math::XYZVector convMom = tk1->momentum() + tk2->momentum();
01136 math::XYZVectorF refittedMom = aConv.refittedPairMomentum();
01137
01138
01139 if (fabs(refittedMom.eta())< 1.479 ) {
01140 phoIsInBarrel=true;
01141 } else {
01142 phoIsInEndcap=true;
01143 }
01144
01145 nRecConv_++;
01146
01148 int match =0;
01149 float invM=aConv.pairInvariantMass();
01150 float chi2Prob = ChiSquaredProbability( aConv.conversionVertex().chi2(), aConv.conversionVertex().ndof() );
01151 uint maxNHitsBeforeVtx = aConv.nHitsBeforeVtx().size()>1 ? max(aConv.nHitsBeforeVtx().at(0),aConv.nHitsBeforeVtx().at(1)) : 0;
01152 uint sumNHitsBeforeVtx = aConv.nHitsBeforeVtx().size()>1 ? aConv.nHitsBeforeVtx().at(0) + aConv.nHitsBeforeVtx().at(1) : 0;
01153 float maxDlClosestHitToVtx = aConv.dlClosestHitToVtx().size()>1 ? max(aConv.dlClosestHitToVtx().at(0).value(),aConv.dlClosestHitToVtx().at(1).value()) : 0;
01154 float maxDlClosestHitToVtxSig = aConv.dlClosestHitToVtx().size()>1 ? max(aConv.dlClosestHitToVtx().at(0).value()/aConv.dlClosestHitToVtx().at(0).error(),aConv.dlClosestHitToVtx().at(1).value()/aConv.dlClosestHitToVtx().at(1).error()) : 0;
01155
01156 int ilead = 0, itrail = 1;
01157 if (tk2->pt() > tk1->pt()) {
01158 ilead = 1;
01159 itrail = 0;
01160 }
01161 RefToBase<reco::Track> tklead = aConv.tracks().at(ilead);
01162 RefToBase<reco::Track> tktrail = aConv.tracks().at(itrail);
01163
01164 int deltaExpectedHitsInner = tklead->trackerExpectedHitsInner().numberOfHits() - tktrail->trackerExpectedHitsInner().numberOfHits();
01165 int leadExpectedHitsInner = tklead->trackerExpectedHitsInner().numberOfHits();
01166 uint leadNHitsBeforeVtx = aConv.nHitsBeforeVtx().size()>1 ? aConv.nHitsBeforeVtx().at(ilead) : 0;
01167 uint trailNHitsBeforeVtx = aConv.nHitsBeforeVtx().size()>1 ? aConv.nHitsBeforeVtx().at(itrail) : 0;
01168
01169
01170 h_convEta_[match][0]->Fill( refittedMom.eta() );
01171 h_convEta2_[match][0]->Fill( refittedMom.eta() );
01172 h_convPhi_[match][0]->Fill( refittedMom.phi() );
01173 h_convR_[match][0]->Fill( sqrt(aConv.conversionVertex().position().perp2()) );
01174 h_convRplot_->Fill( sqrt(aConv.conversionVertex().position().perp2()) );
01175 h_convZ_[match][0]->Fill( aConv.conversionVertex().position().z() );
01176 h_convZplot_->Fill( aConv.conversionVertex().position().z() );
01177 h_convPt_[match][0]->Fill( sqrt(refittedMom.perp2()) );
01178 h_invMass_[match][0] ->Fill( invM);
01179 h_vtxChi2Prob_[match][0] ->Fill (chi2Prob);
01180 h_lxybs_[match][0] ->Fill (lxy);
01181 h_maxNHitsBeforeVtx_[match][0] ->Fill (maxNHitsBeforeVtx);
01182 h_leadNHitsBeforeVtx_[match][0] ->Fill (leadNHitsBeforeVtx);
01183 h_trailNHitsBeforeVtx_[match][0] ->Fill (trailNHitsBeforeVtx);
01184 h_sumNHitsBeforeVtx_[match][0] ->Fill (sumNHitsBeforeVtx);
01185 h_deltaExpectedHitsInner_[match][0] ->Fill (deltaExpectedHitsInner);
01186 h_leadExpectedHitsInner_[match][0] ->Fill (leadExpectedHitsInner);
01187 h_maxDlClosestHitToVtx_[match][0] ->Fill (maxDlClosestHitToVtx);
01188 h_maxDlClosestHitToVtxSig_[match][0] ->Fill (maxDlClosestHitToVtxSig);
01189 h_nSharedHits_[match][0] ->Fill (aConv.nSharedHits());
01190
01191
01192
01193
01194
01195
01196
01197
01198 h_distMinAppTracks_[match][0] ->Fill (aConv.distOfMinimumApproach());
01199 h_DPhiTracksAtVtx_[match][0]->Fill( dPhiTracksAtVtx);
01200 h2_DPhiTracksAtVtxVsEta_->Fill( mcEta_, dPhiTracksAtVtx);
01201 h2_DPhiTracksAtVtxVsR_->Fill( mcConvR_, dPhiTracksAtVtx);
01202 p_DPhiTracksAtVtxVsEta_->Fill( mcEta_, dPhiTracksAtVtx);
01203 p_DPhiTracksAtVtxVsR_->Fill( mcConvR_, dPhiTracksAtVtx);
01204
01205 h_DCotTracks_[match][0] ->Fill ( aConv.pairCotThetaSeparation() );
01206 h2_DCotTracksVsEta_->Fill( mcEta_, aConv.pairCotThetaSeparation() );
01207 h2_DCotTracksVsR_->Fill( mcConvR_, aConv.pairCotThetaSeparation() );
01208 p_DCotTracksVsEta_->Fill( mcEta_, aConv.pairCotThetaSeparation() );
01209 p_DCotTracksVsR_->Fill( mcConvR_, aConv.pairCotThetaSeparation() );
01210
01211 if ( phoIsInBarrel ) {
01212 h_invMass_[match][1] ->Fill(invM);
01213 h_vtxChi2Prob_[match][1] ->Fill (chi2Prob);
01214 h_distMinAppTracks_[match][1] ->Fill (aConv.distOfMinimumApproach());
01215 h_DPhiTracksAtVtx_[match][1]->Fill( dPhiTracksAtVtx);
01216 h_DCotTracks_[match][1] ->Fill ( aConv.pairCotThetaSeparation() );
01217 h_lxybs_[match][1] ->Fill (lxy);
01218 h_maxNHitsBeforeVtx_[match][1] ->Fill (maxNHitsBeforeVtx);
01219 h_leadNHitsBeforeVtx_[match][1] ->Fill (leadNHitsBeforeVtx);
01220 h_trailNHitsBeforeVtx_[match][1] ->Fill (trailNHitsBeforeVtx);
01221 h_sumNHitsBeforeVtx_[match][1] ->Fill (sumNHitsBeforeVtx);
01222 h_deltaExpectedHitsInner_[match][1] ->Fill (deltaExpectedHitsInner);
01223 h_leadExpectedHitsInner_[match][1] ->Fill (leadExpectedHitsInner);
01224 h_maxDlClosestHitToVtx_[match][1] ->Fill (maxDlClosestHitToVtx);
01225 h_maxDlClosestHitToVtxSig_[match][1] ->Fill (maxDlClosestHitToVtxSig);
01226 h_nSharedHits_[match][1] ->Fill (aConv.nSharedHits());
01227
01228 }
01229
01230
01231 if ( phoIsInEndcap ) {
01232 h_invMass_[match][2] ->Fill(invM);
01233 h_vtxChi2Prob_[match][2] ->Fill (chi2Prob);
01234 h_distMinAppTracks_[match][2] ->Fill (aConv.distOfMinimumApproach());
01235 h_DPhiTracksAtVtx_[match][2]->Fill( dPhiTracksAtVtx);
01236 h_DCotTracks_[match][2] ->Fill ( aConv.pairCotThetaSeparation() );
01237 h_lxybs_[match][2] ->Fill (lxy);
01238 h_maxNHitsBeforeVtx_[match][2] ->Fill (maxNHitsBeforeVtx);
01239 h_leadNHitsBeforeVtx_[match][2] ->Fill (leadNHitsBeforeVtx);
01240 h_trailNHitsBeforeVtx_[match][2] ->Fill (trailNHitsBeforeVtx);
01241 h_sumNHitsBeforeVtx_[match][2] ->Fill (sumNHitsBeforeVtx);
01242 h_deltaExpectedHitsInner_[match][2] ->Fill (deltaExpectedHitsInner);
01243 h_leadExpectedHitsInner_[match][2] ->Fill (leadExpectedHitsInner);
01244 h_maxDlClosestHitToVtx_[match][2] ->Fill (maxDlClosestHitToVtx);
01245 h_maxDlClosestHitToVtxSig_[match][2] ->Fill (maxDlClosestHitToVtxSig);
01246 h_nSharedHits_[match][2] ->Fill (aConv.nSharedHits());
01247
01248 }
01249
01250 h_convVtxRvsZ_[0] ->Fill ( fabs (aConv.conversionVertex().position().z() ), sqrt(aConv.conversionVertex().position().perp2()) ) ;
01251 h_convVtxYvsX_ ->Fill ( aConv.conversionVertex().position().x(), aConv.conversionVertex().position().y() );
01252 h_convVtxYvsX_zoom_[0] ->Fill ( aConv.conversionVertex().position().x(), aConv.conversionVertex().position().y() );
01253 h_convVtxYvsX_zoom_[1] ->Fill ( aConv.conversionVertex().position().x(), aConv.conversionVertex().position().y() );
01254
01255
01256
01257 for (unsigned int i=0; i<tracks.size(); i++) {
01258 double d0;
01259 if (valid_pvtx){
01260 d0 = - tracks[i]->dxy(the_pvtx.position());
01261 } else {
01262 d0 = tracks[i]->d0();
01263 }
01264 h_TkD0_[match]->Fill ( d0* tracks[i]->charge() );
01265 h_nHitsBeforeVtx_[match]->Fill ( aConv.nHitsBeforeVtx().size()>1 ? aConv.nHitsBeforeVtx().at(i) : 0 );
01266 h_dlClosestHitToVtx_[match]->Fill ( aConv.dlClosestHitToVtx().size()>1 ? aConv.dlClosestHitToVtx().at(i).value() : 0 );
01267 h_dlClosestHitToVtxSig_[match]->Fill ( aConv.dlClosestHitToVtx().size()>1 ? aConv.dlClosestHitToVtx().at(i).value()/aConv.dlClosestHitToVtx().at(i).error() : 0 );
01268
01269 nHitsVsEta_[match] ->Fill (mcEta_, float(tracks[i]->numberOfValidHits()) );
01270 nHitsVsR_[match] ->Fill (mcConvR_, float(tracks[i]->numberOfValidHits()) );
01271 p_nHitsVsEta_[match] ->Fill (mcEta_, float(tracks[i]->numberOfValidHits()) -0.0001);
01272 p_nHitsVsR_[match] ->Fill (mcConvR_, float(tracks[i]->numberOfValidHits()) -0.0001);
01273 h_tkChi2_[match] ->Fill (tracks[i]->normalizedChi2() );
01274 h_tkChi2Large_[match] ->Fill (tracks[i]->normalizedChi2() );
01275 h2_Chi2VsEta_[match] ->Fill( mcEta_, tracks[i]->normalizedChi2() );
01276 h2_Chi2VsR_[match] ->Fill( mcConvR_, tracks[i]->normalizedChi2() );
01277 p_Chi2VsEta_[match] ->Fill( mcEta_, tracks[i]->normalizedChi2() );
01278 p_Chi2VsR_[match] ->Fill( mcConvR_, tracks[i]->normalizedChi2() );
01279
01280 }
01281
01282 bool associated = false;
01283 float mcConvPt_= -99999999;
01284
01285 float simPV_Z=0;
01286 for ( std::vector<PhotonMCTruth>::const_iterator mcPho=mcPhotons.begin(); mcPho !=mcPhotons.end(); mcPho++) {
01287 mcConvPt_= (*mcPho).fourMomentum().et();
01288 float mcPhi= (*mcPho).fourMomentum().phi();
01289 simPV_Z = (*mcPho).primaryVertex().z();
01290 mcPhi_= phiNormalization(mcPhi);
01291 mcEta_= (*mcPho).fourMomentum().pseudoRapidity();
01292 mcEta_ = etaTransformation(mcEta_, (*mcPho).primaryVertex().z() );
01293 mcConvR_= (*mcPho).vertex().perp();
01294 mcConvX_= (*mcPho).vertex().x();
01295 mcConvY_= (*mcPho).vertex().y();
01296 mcConvZ_= (*mcPho).vertex().z();
01297 mcConvEta_= (*mcPho).vertex().eta();
01298 mcConvPhi_= (*mcPho).vertex().phi();
01299 if ( fabs(mcEta_) > END_HI ) continue;
01300 if (mcConvPt_<minPhoPtForPurity) continue;
01301 if (fabs(mcEta_)>maxPhoEtaForPurity) continue;
01302 if (fabs(mcConvZ_)>maxPhoZForPurity) continue;
01303 if (mcConvR_>maxPhoRForEffic) continue;
01304
01305 if ( (*mcPho).isAConversion() != 1 ) continue;
01306 if (!( ( fabs(mcEta_) <= BARL && mcConvR_ <85 ) ||
01307 ( fabs(mcEta_) > BARL && fabs(mcEta_) <=END_HI && fabs( (*mcPho).vertex().z() ) < 210 ) ) )
01308 continue;
01309
01310
01311 theConvTP_.clear();
01312 for(size_t i = 0; i < tpForFakeRate.size(); ++i){
01313 TrackingParticleRef tp (TPHandleForFakeRate,i);
01314 if ( fabs( tp->vx() - (*mcPho).vertex().x() ) < 0.0001 &&
01315 fabs( tp->vy() - (*mcPho).vertex().y() ) < 0.0001 &&
01316 fabs( tp->vz() - (*mcPho).vertex().z() ) < 0.0001) {
01317 theConvTP_.push_back( tp );
01318
01319
01320 }
01321 }
01322
01323 if ( theConvTP_.size() < 2 ) continue;
01324
01325
01326 reco::RecoToSimCollection p1 = theTrackAssociator_->associateRecoToSim(tc1,theConvTP_,&e);
01327 reco::RecoToSimCollection p2 = theTrackAssociator_->associateRecoToSim(tc2,theConvTP_,&e);
01328 try{
01329 std::vector<std::pair<TrackingParticleRef, double> > tp1 = p1[tk1];
01330 std::vector<std::pair<TrackingParticleRef, double> > tp2 = p2[tk2];
01331 if (!(tp1.size()&&tp2.size())){
01332 tp1 = p1[tk2];
01333 tp2 = p2[tk1];
01334 }
01335 if (tp1.size()&&tp2.size()) {
01336 TrackingParticleRef tpr1 = tp1.front().first;
01337 TrackingParticleRef tpr2 = tp2.front().first;
01338 if (abs(tpr1->pdgId())==11&&abs(tpr2->pdgId())==11&& tpr1->pdgId()*tpr2->pdgId()<0) {
01339 if ( (tpr1->parentVertex()->sourceTracks_end()-tpr1->parentVertex()->sourceTracks_begin()==1) &&
01340 (tpr2->parentVertex()->sourceTracks_end()-tpr2->parentVertex()->sourceTracks_begin()==1)) {
01341 if (tpr1->parentVertex().key()==tpr2->parentVertex().key() && ((*tpr1->parentVertex()->sourceTracks_begin())->pdgId()==22)) {
01342 mcConvR_ = sqrt(tpr1->parentVertex()->position().Perp2());
01343 mcConvZ_ = tpr1->parentVertex()->position().z();
01344 mcConvX_ = tpr1->parentVertex()->position().x();
01345 mcConvY_ = tpr1->parentVertex()->position().y();
01346 mcConvEta_ = tpr1->parentVertex()->position().eta();
01347 mcConvPhi_ = tpr1->parentVertex()->position().phi();
01348 mcConvPt_ = sqrt((*tpr1->parentVertex()->sourceTracks_begin())->momentum().Perp2());
01349
01350
01351
01352 associated = true;
01353 break;
01354 }
01355 }
01356 }
01357 }
01358 } catch (Exception event) {
01359
01360
01361 }
01362
01363 }
01364
01365
01366 if (0) {
01367 theConvTP_.clear();
01368 for(size_t i = 0; i < tpForFakeRate.size(); ++i){
01369 TrackingParticleRef tp (TPHandleForFakeRate,i);
01370 theConvTP_.push_back( tp );
01371 }
01372 reco::RecoToSimCollection p1incl = theTrackAssociator_->associateRecoToSim(tc1,theConvTP_,&e);
01373 reco::RecoToSimCollection p2incl = theTrackAssociator_->associateRecoToSim(tc2,theConvTP_,&e);
01374
01375
01376 for ( std::vector<PhotonMCTruth>::const_iterator mcPho=mcPhotons.begin(); mcPho !=mcPhotons.end(); mcPho++) {
01377 mcConvPt_= (*mcPho).fourMomentum().et();
01378 float mcPhi= (*mcPho).fourMomentum().phi();
01379 simPV_Z = (*mcPho).primaryVertex().z();
01380 mcPhi_= phiNormalization(mcPhi);
01381 mcEta_= (*mcPho).fourMomentum().pseudoRapidity();
01382 mcEta_ = etaTransformation(mcEta_, (*mcPho).primaryVertex().z() );
01383 mcConvR_= (*mcPho).vertex().perp();
01384 mcConvX_= (*mcPho).vertex().x();
01385 mcConvY_= (*mcPho).vertex().y();
01386 mcConvZ_= (*mcPho).vertex().z();
01387 mcConvEta_= (*mcPho).vertex().eta();
01388 mcConvPhi_= (*mcPho).vertex().phi();
01389 if ( fabs(mcEta_) > END_HI ) continue;
01390 if (mcConvPt_<minPhoPtForPurity) continue;
01391 if (fabs(mcEta_)>maxPhoEtaForPurity) continue;
01392 if (fabs(mcConvZ_)>maxPhoZForPurity) continue;
01393 if (mcConvR_>maxPhoRForEffic) continue;
01394
01395 if ( (*mcPho).isAConversion() != 1 ) continue;
01396 if (!( ( fabs(mcEta_) <= BARL && mcConvR_ <85 ) ||
01397 ( fabs(mcEta_) > BARL && fabs(mcEta_) <=END_HI && fabs( (*mcPho).vertex().z() ) < 210 ) ) )
01398 continue;
01399
01400
01401 theConvTP_.clear();
01402 for(size_t i = 0; i < tpForFakeRate.size(); ++i){
01403 TrackingParticleRef tp (TPHandleForFakeRate,i);
01404 if ( fabs( tp->vx() - (*mcPho).vertex().x() ) < 0.0001 &&
01405 fabs( tp->vy() - (*mcPho).vertex().y() ) < 0.0001 &&
01406 fabs( tp->vz() - (*mcPho).vertex().z() ) < 0.0001) {
01407 theConvTP_.push_back( tp );
01408
01409
01410 }
01411 }
01412
01413 if ( theConvTP_.size() < 2 ) continue;
01414
01415
01416 reco::RecoToSimCollection p1 = theTrackAssociator_->associateRecoToSim(tc1,theConvTP_,&e);
01417 reco::RecoToSimCollection p2 = theTrackAssociator_->associateRecoToSim(tc2,theConvTP_,&e);
01418
01419
01420
01421
01422
01423 if ( (p1incl.size() && p2incl.size()) && (p1.size() || p2.size()) ) {
01424 try{
01425 std::vector<std::pair<TrackingParticleRef, double> > tp1 = p1incl[tk1];
01426 std::vector<std::pair<TrackingParticleRef, double> > tp2 = p2incl[tk2];
01427 if (!(tp1.size()&&tp2.size())){
01428 tp1 = p1[tk2];
01429 tp2 = p2[tk1];
01430 }
01431 if (tp1.size()&&tp2.size()) {
01432 TrackingParticleRef tpr1 = tp1.front().first;
01433 TrackingParticleRef tpr2 = tp2.front().first;
01434 if (abs(tpr1->pdgId())==11&&abs(tpr2->pdgId())==11 && tpr1->pdgId()*tpr2->pdgId()<0) {
01435 if ( ((tpr1->parentVertex()->sourceTracks_end()-tpr1->parentVertex()->sourceTracks_begin()>=1) && (*tpr1->parentVertex()->sourceTracks_begin())->pdgId()==22) &&
01436 ((tpr2->parentVertex()->sourceTracks_end()-tpr2->parentVertex()->sourceTracks_begin()>=1) && (*tpr2->parentVertex()->sourceTracks_begin())->pdgId()==22) ) {
01437
01438
01439
01440
01441
01442
01443
01444
01445
01446
01447
01448
01449
01450 associated = true;
01451 break;
01452
01453
01454 }
01455 }
01456 }
01457 } catch (Exception event) {
01458
01459
01460 }
01461
01462 }
01463
01464 }
01465 }
01466
01467 if ( associated ) match=1;
01468 else
01469 match=2;
01470
01471 h_match_->Fill(float(match));
01473 if ( match == 1) nRecConvAss_++;
01474 h_convEta_[match][0]->Fill( refittedMom.eta() );
01475 h_convPhi_[match][0]->Fill( refittedMom.phi() );
01476 h_convR_[match][0]->Fill( sqrt(aConv.conversionVertex().position().perp2()) );
01477 h_convZ_[match][0]->Fill( aConv.conversionVertex().position().z() );
01478 h_convPt_[match][0]->Fill( sqrt(refittedMom.perp2()) );
01479 h_invMass_[match][0] ->Fill( invM);
01480 h_vtxChi2Prob_[match][0] ->Fill (chi2Prob);
01481 h_DPhiTracksAtVtx_[match][0]->Fill( dPhiTracksAtVtx);
01482 h_DCotTracks_[match][0] ->Fill ( aConv.pairCotThetaSeparation() );
01483 h_distMinAppTracks_[match][0] ->Fill (aConv.distOfMinimumApproach());
01484 h_lxybs_[match][0] ->Fill (lxy);
01485 h_maxNHitsBeforeVtx_[match][0] ->Fill (maxNHitsBeforeVtx);
01486 h_leadNHitsBeforeVtx_[match][0] ->Fill (leadNHitsBeforeVtx);
01487 h_trailNHitsBeforeVtx_[match][0] ->Fill (trailNHitsBeforeVtx);
01488 h_sumNHitsBeforeVtx_[match][0] ->Fill (sumNHitsBeforeVtx);
01489 h_deltaExpectedHitsInner_[match][0] ->Fill (deltaExpectedHitsInner);
01490 h_leadExpectedHitsInner_[match][0] ->Fill (leadExpectedHitsInner);
01491 h_maxDlClosestHitToVtx_[match][0] ->Fill (maxDlClosestHitToVtx);
01492 h_maxDlClosestHitToVtxSig_[match][0] ->Fill (maxDlClosestHitToVtxSig);
01493 h_nSharedHits_[match][0] ->Fill (aConv.nSharedHits());
01494
01495
01496 if ( match==1) {
01497 h2_photonPtRecVsPtSim_->Fill ( mcConvPt_, sqrt(refittedMom.perp2()) );
01498 h_convPtRes_[0]->Fill ( sqrt(refittedMom.perp2())/mcConvPt_);
01499 }
01500
01501 if ( phoIsInBarrel ) {
01502 h_invMass_[match][1] ->Fill(invM);
01503 h_vtxChi2Prob_[match][1] ->Fill (chi2Prob);
01504 h_DPhiTracksAtVtx_[match][1]->Fill( dPhiTracksAtVtx);
01505 h_DCotTracks_[match][1] ->Fill ( aConv.pairCotThetaSeparation() );
01506 h_distMinAppTracks_[match][1] ->Fill (aConv.distOfMinimumApproach());
01507 h_lxybs_[match][1] ->Fill (lxy);
01508 h_maxNHitsBeforeVtx_[match][1] ->Fill (maxNHitsBeforeVtx);
01509 h_leadNHitsBeforeVtx_[match][1] ->Fill (leadNHitsBeforeVtx);
01510 h_trailNHitsBeforeVtx_[match][1] ->Fill (trailNHitsBeforeVtx);
01511 h_sumNHitsBeforeVtx_[match][1] ->Fill (sumNHitsBeforeVtx);
01512 h_deltaExpectedHitsInner_[match][1] ->Fill (deltaExpectedHitsInner);
01513 h_leadExpectedHitsInner_[match][1] ->Fill (leadExpectedHitsInner);
01514 h_maxDlClosestHitToVtx_[match][1] ->Fill (maxDlClosestHitToVtx);
01515 h_maxDlClosestHitToVtxSig_[match][1] ->Fill (maxDlClosestHitToVtxSig);
01516 h_nSharedHits_[match][1] ->Fill (aConv.nSharedHits());
01517
01518 if ( match==1) h_convPtRes_[1]->Fill ( sqrt(refittedMom.perp2())/mcConvPt_);
01519 }
01520
01521
01522 if ( phoIsInEndcap ) {
01523 h_invMass_[match][2] ->Fill(invM);
01524 h_vtxChi2Prob_[match][2] ->Fill (chi2Prob);
01525 h_DPhiTracksAtVtx_[match][2]->Fill( dPhiTracksAtVtx);
01526 h_DCotTracks_[match][2] ->Fill ( aConv.pairCotThetaSeparation() );
01527 h_distMinAppTracks_[match][2] ->Fill (aConv.distOfMinimumApproach());
01528 h_lxybs_[match][2] ->Fill (lxy);
01529 h_maxNHitsBeforeVtx_[match][2] ->Fill (maxNHitsBeforeVtx);
01530 h_leadNHitsBeforeVtx_[match][2] ->Fill (leadNHitsBeforeVtx);
01531 h_trailNHitsBeforeVtx_[match][2] ->Fill (trailNHitsBeforeVtx);
01532 h_sumNHitsBeforeVtx_[match][2] ->Fill (sumNHitsBeforeVtx);
01533 h_deltaExpectedHitsInner_[match][2] ->Fill (deltaExpectedHitsInner);
01534 h_leadExpectedHitsInner_[match][2] ->Fill (leadExpectedHitsInner);
01535 h_maxDlClosestHitToVtx_[match][2] ->Fill (maxDlClosestHitToVtx);
01536 h_maxDlClosestHitToVtxSig_[match][2] ->Fill (maxDlClosestHitToVtxSig);
01537 h_nSharedHits_[match][2] ->Fill (aConv.nSharedHits());
01538
01539 if ( match==1) h_convPtRes_[2]->Fill ( sqrt(refittedMom.perp2())/mcConvPt_);
01540 }
01541
01542
01543 if ( match == 1 ) {
01544 h_convVtxdX_ ->Fill ( aConv.conversionVertex().position().x() - mcConvX_);
01545 h_convVtxdY_ ->Fill ( aConv.conversionVertex().position().y() - mcConvY_);
01546 h_convVtxdZ_ ->Fill ( aConv.conversionVertex().position().z() - mcConvZ_);
01547 h_convVtxdR_ ->Fill ( sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_);
01548 h_convVtxdPhi_ ->Fill ( aConv.conversionVertex().position().phi() - mcConvPhi_);
01549 h_convVtxdEta_ ->Fill ( aConv.conversionVertex().position().eta() - mcConvEta_);
01550 h2_convVtxdRVsR_ ->Fill (mcConvR_, sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_ );
01551 h2_convVtxdRVsEta_ ->Fill (mcEta_, sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_ );
01552 p_convVtxdRVsR_ ->Fill (mcConvR_, sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_ );
01553 p_convVtxdRVsEta_ ->Fill (mcEta_, sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_ );
01554 p_convVtxdXVsX_ ->Fill (mcConvX_, aConv.conversionVertex().position().x() - mcConvX_ );
01555 p_convVtxdYVsY_ ->Fill (mcConvY_, aConv.conversionVertex().position().y() - mcConvY_ );
01556 p_convVtxdZVsZ_ ->Fill (mcConvZ_, aConv.conversionVertex().position().z() - mcConvZ_ );
01557 p_convVtxdZVsR_ ->Fill (mcConvR_, aConv.conversionVertex().position().z() - mcConvZ_ );
01558
01559 float dR=sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_;
01560 float dZ=aConv.conversionVertex().position().z() - mcConvZ_;
01561 p2_convVtxdRVsRZ_ ->Fill (mcConvZ_,mcConvR_, dR );
01562 p2_convVtxdZVsRZ_ ->Fill (mcConvZ_,mcConvR_, dZ );
01563
01564
01565
01566
01567 h2_convVtxRrecVsTrue_ -> Fill (mcConvR_, sqrt(aConv.conversionVertex().position().perp2()) );
01568
01569
01570 h_zPVFromTracks_[match]->Fill ( aConv.zOfPrimaryVertexFromTracks() );
01571 h_dzPVFromTracks_[match]->Fill ( aConv.zOfPrimaryVertexFromTracks() - simPV_Z );
01572 h2_dzPVVsR_ ->Fill(mcConvR_, aConv.zOfPrimaryVertexFromTracks() - simPV_Z );
01573 p_dzPVVsR_ ->Fill(mcConvR_, aConv.zOfPrimaryVertexFromTracks() - simPV_Z );
01574
01575 if ( phoIsInBarrel ) {
01576 h_convVtxdX_barrel_ ->Fill ( aConv.conversionVertex().position().x() - mcConvX_);
01577 h_convVtxdY_barrel_ ->Fill ( aConv.conversionVertex().position().y() - mcConvY_);
01578 h_convVtxdZ_barrel_ ->Fill ( aConv.conversionVertex().position().z() - mcConvZ_);
01579 h_convVtxdR_barrel_ ->Fill ( sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_);
01580
01581 }
01582 if ( phoIsInEndcap ) {
01583 h_convVtxdX_endcap_ ->Fill ( aConv.conversionVertex().position().x() - mcConvX_);
01584 h_convVtxdY_endcap_ ->Fill ( aConv.conversionVertex().position().y() - mcConvY_);
01585 h_convVtxdZ_endcap_ ->Fill ( aConv.conversionVertex().position().z() - mcConvZ_);
01586 h_convVtxdR_endcap_ ->Fill ( sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_);
01587
01588 }
01589
01590
01591 }
01592
01594 for (unsigned int i=0; i<tracks.size(); i++) {
01595
01596 RefToBase<reco::Track> tfrb(aConv.tracks()[i] );
01597 itAss= myAss.find( tfrb.get() );
01598
01599 nHitsVsEta_[match] ->Fill (mcEta_, float(tracks[i]->numberOfValidHits()) );
01600 nHitsVsR_[match] ->Fill (mcConvR_, float(tracks[i]->numberOfValidHits()) );
01601 p_nHitsVsEta_[match] ->Fill (mcEta_, float(tracks[i]->numberOfValidHits()) -0.0001);
01602 p_nHitsVsR_[match] ->Fill (mcConvR_, float(tracks[i]->numberOfValidHits()) -0.0001);
01603 h_tkChi2_[match] ->Fill (tracks[i]->normalizedChi2() );
01604 h_tkChi2Large_[match] ->Fill (tracks[i]->normalizedChi2() );
01605 h2_Chi2VsEta_[match] ->Fill( mcEta_, tracks[i]->normalizedChi2() );
01606 h2_Chi2VsR_[match] ->Fill( mcConvR_, tracks[i]->normalizedChi2() );
01607 p_Chi2VsEta_[match] ->Fill( mcEta_, tracks[i]->normalizedChi2() );
01608 p_Chi2VsR_[match] ->Fill( mcConvR_, tracks[i]->normalizedChi2() );
01609 double d0;
01610 if (valid_pvtx){
01611 d0 = - tracks[i]->dxy(the_pvtx.position());
01612 } else {
01613 d0 = tracks[i]->d0();
01614 }
01615 h_TkD0_[match]->Fill (d0* tracks[i]->charge() );
01616 h_nHitsBeforeVtx_[match]->Fill ( aConv.nHitsBeforeVtx().size()>1 ? aConv.nHitsBeforeVtx().at(i) : 0 );
01617 h_dlClosestHitToVtx_[match]->Fill ( aConv.dlClosestHitToVtx().size()>1 ? aConv.dlClosestHitToVtx().at(i).value() : 0 );
01618 h_dlClosestHitToVtxSig_[match]->Fill ( aConv.dlClosestHitToVtx().size()>1 ? aConv.dlClosestHitToVtx().at(i).value()/aConv.dlClosestHitToVtx().at(i).error() : 0 );
01619
01620
01621 if ( itAss == myAss.end() ) continue;
01622 reco::Track refTrack= aConv.conversionVertex().refittedTracks()[i];
01623
01624 float simPt = sqrt( ((*itAss).second)->momentum().perp2() );
01625 float recPt = refTrack.pt();
01626 float ptres= recPt - simPt ;
01627
01628 float pterror = aConv.conversionVertex().refittedTracks()[i].ptError();
01629 h2_PtRecVsPtSim_[0]->Fill ( simPt, recPt);
01630 h_TkPtPull_[0] ->Fill(ptres/pterror);
01631 h2_TkPtPull_[0] ->Fill(mcEta_, ptres/pterror);
01632
01633 if ( phoIsInBarrel ) {
01634 h_TkPtPull_[1] ->Fill(ptres/pterror);
01635 h2_PtRecVsPtSim_[1]->Fill ( simPt, recPt);
01636 }
01637 if ( phoIsInEndcap ) {
01638 h_TkPtPull_[2] ->Fill(ptres/pterror);
01639 h2_PtRecVsPtSim_[2]->Fill ( simPt, recPt);
01640 }
01641 }
01642
01643
01644
01645 }
01646
01647
01648 h_nConv_[0][0]->Fill (float(nRecConv_));
01649 h_nConv_[1][0]->Fill (float(nRecConvAss_));
01650
01651
01652
01653 }
01654
01655
01656
01657
01658
01659 void TkConvValidator::endJob() {
01660
01661
01662 std::string outputFileName = parameters_.getParameter<std::string>("OutputFileName");
01663 if ( ! isRunCentrally_ ) {
01664 dbe_->save(outputFileName);
01665 }
01666
01667 edm::LogInfo("TkConvValidator") << "Analyzed " << nEvt_ << "\n";
01668
01669
01670
01671 return ;
01672 }
01673
01674
01675 math::XYZVector TkConvValidator::recalculateMomentumAtFittedVertex ( const MagneticField& mf, const TrackerGeometry& trackerGeom, const edm::RefToBase<reco::Track>& tk, const reco::Vertex& vtx) {
01676
01677 math::XYZVector result;
01678 Surface::RotationType rot;
01679 ReferenceCountingPointer<BoundCylinder> theBarrel_(new BoundCylinder( Surface::PositionType(0,0,0), rot,
01680 SimpleCylinderBounds( sqrt(vtx.position().perp2())-0.001,
01681 sqrt(vtx.position().perp2())+0.001,
01682 -fabs(vtx.position().z()),
01683 fabs(vtx.position().z()))));
01684
01685 ReferenceCountingPointer<BoundDisk> theDisk_(new BoundDisk( Surface::PositionType( 0, 0, vtx.position().z()), rot,
01686 SimpleDiskBounds( 0, sqrt(vtx.position().perp2()), -0.001, 0.001)));
01687
01688 TrajectoryStateTransform transformer;
01689 const TrajectoryStateOnSurface myTSOS = transformer.innerStateOnSurface(*tk, trackerGeom, &mf);
01690 PropagatorWithMaterial propag( anyDirection, 0.000511, &mf );
01691 TrajectoryStateOnSurface stateAtVtx;
01692 stateAtVtx = propag.propagate(myTSOS, *theBarrel_);
01693 if (!stateAtVtx.isValid() ) {
01694 stateAtVtx = propag.propagate(myTSOS, *theDisk_);
01695 }
01696 if (stateAtVtx.isValid()){
01697 return math::XYZVector ( double(stateAtVtx.globalMomentum().x()), double(stateAtVtx.globalMomentum().y()), double(stateAtVtx.globalMomentum().z()));
01698 } else {
01699 return math::XYZVector(0.,0.,0.);
01700 }
01701
01702
01703
01704 }
01705
01706
01707 float TkConvValidator::phiNormalization(float & phi)
01708 {
01709
01710 const float PI = 3.1415927;
01711 const float TWOPI = 2.0*PI;
01712
01713
01714 if(phi > PI) {phi = phi - TWOPI;}
01715 if(phi < -PI) {phi = phi + TWOPI;}
01716
01717
01718 return phi;
01719
01720 }
01721
01722
01723 float TkConvValidator::etaTransformation( float EtaParticle , float Zvertex) {
01724
01725
01726 const float PI = 3.1415927;
01727
01728
01729 const float R_ECAL = 136.5;
01730 const float Z_Endcap = 328.0;
01731 const float etaBarrelEndcap = 1.479;
01732
01733
01734
01735 float Theta = 0.0 ;
01736 float ZEcal = R_ECAL*sinh(EtaParticle)+Zvertex;
01737
01738 if(ZEcal != 0.0) Theta = atan(R_ECAL/ZEcal);
01739 if(Theta<0.0) Theta = Theta+PI ;
01740 float ETA = - log(tan(0.5*Theta));
01741
01742 if( fabs(ETA) > etaBarrelEndcap )
01743 {
01744 float Zend = Z_Endcap ;
01745 if(EtaParticle<0.0 ) Zend = -Zend ;
01746 float Zlen = Zend - Zvertex ;
01747 float RR = Zlen/sinh(EtaParticle);
01748 Theta = atan(RR/Zend);
01749 if(Theta<0.0) Theta = Theta+PI ;
01750 ETA = - log(tan(0.5*Theta));
01751 }
01752
01753 return ETA;
01754
01755 }
01756
01757