CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/Validation/RecoEgamma/src/TkConvValidator.cc

Go to the documentation of this file.
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     // conversionTrackProducer_ = pset.getParameter<std::string>("trackProducer");
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   //  double dEtaTracksMin = parameters_.getParameter<double>("dEtaTracksMin");  // unused
00187   //  double dEtaTracksMax = parameters_.getParameter<double>("dEtaTracksMax"); // unused
00188   //  int    dEtaTracksBin = parameters_.getParameter<int>("dEtaTracksBin");  // unused
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     // SC from reco photons
00220 
00221     //TString simfolder = TString(
00222     std::string simpath = dqmpath_ + "SimulationInfo";
00223     dbe_->setCurrentFolder(simpath);
00224     //
00225     // simulation information about conversions
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   } // if DQM 
00713 
00714 
00715 
00716 }
00717 
00718 
00719 
00720  void  TkConvValidator::beginRun (edm::Run const & r, edm::EventSetup const & theEventSetup) {
00721    
00722    //get magnetic field
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   //  const float etaPhiDistance=0.01;
00750   // Fiducial region
00751   // const float TRK_BARL =0.9;
00752   const float BARL = 1.4442; // DAQ TDR p.290
00753   //  const float END_LO = 1.566; // unused
00754   const float END_HI = 2.5;
00755   // Electron mass
00756   //  const Float_t mElec= 0.000511; // unused
00757 
00758 
00759   nEvt_++;  
00760   LogInfo("TkConvValidator") << "TkConvValidator Analyzing event number: " << e.id() << " Global Counter " << nEvt_ <<"\n";
00761   //  std::cout << "TkConvValidator Analyzing event number: "  << e.id() << " Global Counter " << nEvt_ <<"\n";
00762 
00763 
00764   // get the geometry from the event setup:
00765   esup.get<CaloGeometryRecord>().get(theCaloGeom_);
00766 
00767 
00768   // Transform Track into TransientTrack (needed by the Vertex fitter)
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   // offline  Primary vertex
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       //asking for one good vertex
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  //get tracker geometry for hits positions
00810   edm::ESHandle<TrackerGeometry> tracker;
00811   esup.get<TrackerDigiGeometryRecord>().get(tracker);
00812   const TrackerGeometry* trackerGeom = tracker.product();
00813 
00814 
00815 
00817   //get simtrack info
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   //  const HepMC::GenEvent *myGenEvent = hepMC->GetEvent(); // unused
00847 
00848 
00849   // get generated jets
00850   edm::Handle<reco::GenJetCollection> GenJetsHandle ;
00851   e.getByLabel("iterativeCone5GenJets","",GenJetsHandle);
00852   reco::GenJetCollection genJetCollection = *(GenJetsHandle.product());
00853 
00854   ConversionHitChecker hitChecker;
00855   
00856   // ################  SIM to RECO ######################### //
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       //      std::cout << " TkConvValidator TrackingParticles   TrackingParticleCollection size "<<  trackingParticles.size() <<  "\n";
00900       //duplicated TP collections for two associations
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       //std::cout << " TkConvValidator  theConvTP_ size " <<   theConvTP_.size() << std::endl;  
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       //std::cout << " TkConvValidator  theConvTP_ size " <<   theConvTP_.size() << std::endl;  
00944       for ( edm::RefVector<TrackingParticleCollection>::iterator iTP= theConvTP_.begin(); iTP!=theConvTP_.end(); iTP++)
00945         {
00946           //  std::cout << " SIM to RECO TP vertex " << (*iTP)->vx() << " " <<  (*iTP)->vy() << " " << (*iTP)->vz() << " pt " << (*iTP)->pt() << std::endl;
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         //problematic?
00963         std::vector<edm::RefToBase<reco::Track> > tracks = aConv.tracks();
00964 
00965 
00966         const reco::Vertex& vtx = aConv.conversionVertex();
00967         //requires two tracks and a valid vertex
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         //compute transverse decay length with respect to beamspot
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         //      bool  phoIsInBarrel=false; // unused
00984         //      bool  phoIsInEndcap=false; // unused
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         //reco::TrackRef tk1 = aConv.tracks().front();
00992         //reco::TrackRef tk2 = aConv.tracks().back();
00993         //std::cout << "SIM to RECO  conversion track pt " << tk1->pt() << " " << tk2->pt() << endl;
00994         //
00995         //Use two RefToBaseVector and do two association actions to avoid that if two tracks from different collection
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         //try { 
01003           std::vector<std::pair<RefToBase<reco::Track>, double> > trackV1, trackV2;
01004 
01005           int tp_1 = 0, tp_2 = 1;//the index of associated tp in theConvTP_ for two tracks
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           //std::cout << "associated tp1 " <<theConvTP_[0]->pt() << " to track with  pT=" << tr1->pt() << " " << (tr1.get())->pt() << endl;
01025           //std::cout << "associated tp2 " <<theConvTP_[1]->pt() << " to track with  pT=" << tr2->pt() << " " << (tr2.get())->pt() << endl;
01026           myAss.insert( std::make_pair (tr1.get(),theConvTP_[tp_1] ) );
01027           myAss.insert( std::make_pair (tr2.get(),theConvTP_[tp_2]) );
01028 
01029         //} catch (Exception event) {
01030           //cout << "continue: " << event.what()  << endl;
01031         //  continue;
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        // break;
01048       } // loop over reco conversions
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   } //End loop over simulated conversions 
01076 
01077 
01078   // ########################### RECO to SIM ############################## //
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     //problematic?
01090     std::vector<edm::RefToBase<reco::Track> > tracks = aConv.tracks();
01091 
01092     const reco::Vertex& vtx = aConv.conversionVertex();
01093     //requires two tracks and a valid vertex
01094     if (tracks.size() !=2 || !(vtx.isValid())) continue;
01095     //if (tracks.size() !=2) continue;
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     //compute transverse decay length with respect to beamspot
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     //std::cout << " RECO to SIM conversion track pt " << tk1->pt() << " " << tk2->pt() << endl;
01121     const reco::Track refTk1 = aConv.conversionVertex().refittedTracks().front();
01122     const reco::Track refTk2 = aConv.conversionVertex().refittedTracks().back();
01123 
01124     //TODO replace it with phi at vertex
01125     float  dPhiTracksAtVtx =  aConv.dPhiTracksAtVtx();
01126     // override with the phi calculated at the vertex    
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     // quantities per track: all conversions
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     //    float mcPhi= 0; // unused
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       //associated = false;
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                 //std::cout << " Reco to Sim mcconvpt " << mcConvPt_ << std::endl;
01350                 //cout << "associated track1 to " << tpr1->pdgId() << " with p=" << tpr1->p4() << " with pT=" << tpr1->pt() << endl;
01351                 //cout << "associated track2 to " << tpr2->pdgId() << " with p=" << tpr2->p4() << " with pT=" << tpr2->pt() << endl;
01352                 associated = true;
01353                 break;
01354               }
01355             }
01356           }
01357         }
01358       } catch (Exception event) {
01359         //cout << "do not continue: " << event.what()  << endl;
01360         //continue;
01361       }
01362 
01363     }// end loop on sim photons
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         //associated = false;
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()) ) { // associated = true;
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                    // if ( fabs(tpr1->vx() - tpr2->vx()) < 0.1 && fabs(tpr1->vy() - tpr2->vy()) < 0.1 && fabs(tpr1->vz() - tpr2->vz()) < 0.1) {
01439                     //if (((*tpr1->parentVertex()->sourceTracks_begin())->pdgId()==22) || ((*tpr2->parentVertex()->sourceTracks_begin())->pdgId()==22)) {
01440 //                       mcConvR_ = sqrt(tpr1->parentVertex()->position().Perp2());
01441 //                       mcConvZ_ = tpr1->parentVertex()->position().z();
01442 //                       mcConvX_ = tpr1->parentVertex()->position().x();
01443 //                       mcConvY_ = tpr1->parentVertex()->position().y();
01444 //                       mcConvEta_ = tpr1->parentVertex()->position().eta();
01445 //                       mcConvPhi_ = tpr1->parentVertex()->position().phi();
01446 //                       mcConvPt_ = sqrt((*tpr1->parentVertex()->sourceTracks_begin())->momentum().Perp2());
01447                       //std::cout << " Reco to Sim mcconvpt " << mcConvPt_ << std::endl;
01448                       //cout << "associated track1 to " << tpr1->pdgId() << " with p=" << tpr1->p4() << " with pT=" << tpr1->pt() << endl;
01449                       //cout << "associated track2 to " << tpr2->pdgId() << " with p=" << tpr2->p4() << " with pT=" << tpr2->pt() << endl;
01450                       associated = true;
01451                       break;
01452                     //}
01453                     //}
01454                   }
01455                 }
01456               }
01457             } catch (Exception event) {
01458               //cout << "do not continue: " << event.what()  << endl;
01459               //continue;
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       //std::cout << " Loop over tracks  pt " << tracks[i]->pt() << std::endl;
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       //float pterror = aConv.tracks()[i]->ptError();
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     } // end loop over track
01642       
01643    
01644 
01645   } // loop over reco conversions
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   // std::cout  << "::endJob Analyzed " << nEvt_ << " events " << " with total " << nPho_ << " Photons " << "\n";
01669   //  std::cout  << "TkConvValidator::endJob Analyzed " << nEvt_ << " events " << "\n";
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   //---Definitions
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   //  cout << " Float_t PHInormalization out " << PHI << endl;
01718   return phi;
01719 
01720 }
01721 
01722 
01723 float TkConvValidator::etaTransformation(  float EtaParticle , float Zvertex)  {
01724 
01725   //---Definitions
01726   const float PI    = 3.1415927;
01727 
01728   //---Definitions for ECAL
01729   const float R_ECAL           = 136.5;
01730   const float Z_Endcap         = 328.0;
01731   const float etaBarrelEndcap  = 1.479; 
01732    
01733   //---ETA correction
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   //---Return the result
01753   return ETA;
01754   //---end
01755 }
01756 
01757