00001 #include <iostream>
00002 #include <sstream>
00003 #include <istream>
00004 #include <fstream>
00005 #include <iomanip>
00006 #include <string>
00007 #include <cmath>
00008 #include <functional>
00009 #include <cstdlib>
00010 #include <cstring>
00011
00012 #include "DataFormats/EgammaReco/interface/ElectronSeed.h"
00013 #include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h"
00014 #include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
00015 #include "HLTrigger/HLTanalyzers/interface/HLTEgamma.h"
00016
00017
00018
00019 #include "RecoEgamma/EgammaTools/interface/ECALPositionCalculator.h"
00020
00021 #include "FWCore/Framework/interface/EventSetup.h"
00022 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00023 #include "MagneticField/Engine/interface/MagneticField.h"
00024
00025 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00026
00027 #include "HLTMessages.h"
00028
00029 static const size_t kMaxEl = 10000;
00030 static const size_t kMaxPhot = 10000;
00031 static const size_t kMaxhPhot = 500;
00032 static const size_t kMaxhEle = 500;
00033
00034 HLTEgamma::HLTEgamma() {
00035 }
00036
00037
00038 void HLTEgamma::setup(const edm::ParameterSet& pSet, TTree* HltTree)
00039 {
00040 elpt = new float[kMaxEl];
00041 elphi = new float[kMaxEl];
00042 eleta = new float[kMaxEl];
00043 elet = new float[kMaxEl];
00044 ele = new float[kMaxEl];
00045 eleId = new int[kMaxEl];
00046 elIP = new float[kMaxEl];
00047 elNLostHits = new int[kMaxEl];
00048 elTrkChi2NDF = new float[kMaxEl];
00049 elTrkIsoR03 = new float[kMaxEl];
00050 elECaloIsoR03 = new float[kMaxEl];
00051 elHCaloIsoR03 = new float[kMaxEl];
00052 elIsEcalDriven = new bool[kMaxEl];
00053 elFbrem = new float[kMaxEl];
00054 elmishits = new int[kMaxEl];
00055 eldist = new float[kMaxEl];
00056 eldcot = new float[kMaxEl];
00057 eltrkiso = new float[kMaxEl];
00058 elecaliso = new float[kMaxEl];
00059 elhcaliso = new float[kMaxEl];
00060 elsigmaietaieta = new float[kMaxEl];
00061 eldeltaPhiIn = new float[kMaxEl];
00062 eldeltaEtaIn = new float[kMaxEl];
00063 elhOverE = new float[kMaxEl];
00064 elscEt = new float[kMaxEl];
00065 eld0corr = new float[kMaxEl];
00066 elqGsfCtfScPixConsistent = new bool[kMaxEl];
00067
00068 photonpt = new float[kMaxPhot];
00069 photonphi = new float[kMaxPhot];
00070 photoneta = new float[kMaxPhot];
00071 photonet = new float[kMaxPhot];
00072 photone = new float[kMaxPhot];
00073
00074 hphotet = new float[kMaxhPhot];
00075 hphoteta = new float[kMaxhPhot];
00076 hphotphi = new float[kMaxhPhot];
00077 hphoteiso = new float[kMaxhPhot];
00078 hphothiso = new float[kMaxhPhot];
00079 hphottiso = new float[kMaxhPhot];
00080 hphotl1iso = new int[kMaxhPhot];
00081 hphotClusShap = new float[kMaxhPhot];
00082 hphotR9 = new float[kMaxhPhot];
00083 hphothovereh = new float[kMaxhPhot];
00084 hphotR9ID = new float[kMaxhPhot];
00085
00086 heleet = new float[kMaxhEle];
00087 heleeta = new float[kMaxhEle];
00088 helephi = new float[kMaxhEle];
00089 heleE = new float[kMaxhEle];
00090 helep = new float[kMaxhEle];
00091 helehiso = new float[kMaxhEle];
00092 heleeiso = new float[kMaxhEle];
00093 heletiso = new float[kMaxhEle];
00094 helel1iso = new int[kMaxhEle];
00095 helePixelSeeds = new int[kMaxhEle];
00096 heleNewSC = new int[kMaxhEle];
00097 heleClusShap = new float[kMaxhEle];
00098 heleDeta = new float[kMaxhEle];
00099 heleDphi = new float[kMaxhEle];
00100 heleR9 = new float[kMaxhEle];
00101 helehovereh = new float[kMaxhEle];
00102 heleR9ID = new float[kMaxhEle];
00103
00104 hhfelept = new float[kMaxhEle];
00105 hhfeleeta = new float[kMaxhEle];
00106 hhfclustere9e25 = new float[kMaxhEle];
00107 hhfcluster2Dcut = new float[kMaxhEle];
00108
00109 nele = 0;
00110 nphoton = 0;
00111 nhltgam = 0;
00112 nhltele = 0;
00113 nhlthfele = 0;
00114 nhlthfeclus = 0;
00115
00116
00117 HltTree->Branch("NrecoElec", & nele, "NrecoElec/I");
00118 HltTree->Branch("recoElecPt", elpt, "recoElecPt[NrecoElec]/F");
00119 HltTree->Branch("recoElecPhi", elphi, "recoElecPhi[NrecoElec]/F");
00120 HltTree->Branch("recoElecEta", eleta, "recoElecEta[NrecoElec]/F");
00121 HltTree->Branch("recoElecEt", elet, "recoElecEt[NrecoElec]/F");
00122 HltTree->Branch("recoElecE", ele, "recoElecE[NrecoElec]/F");
00123 HltTree->Branch("recoElecEleID", eleId, "recoElecEleID[NrecoElec]/I");
00124 HltTree->Branch("recoElecIP", elIP, "recoElecIP[NrecoElec]/F");
00125 HltTree->Branch("recoElecNLostHits", elNLostHits, "recoElecNLostHits[NrecoElec]/I");
00126 HltTree->Branch("recoElecChi2NDF", elTrkChi2NDF, "recoElecChi2NDF[NrecoElec]/F");
00127 HltTree->Branch("recoElecTrkIsoR03", elTrkIsoR03, "recoElecTrkIsoR03[NrecoElec]/F");
00128 HltTree->Branch("recoElecECaloIsoR03", elECaloIsoR03, "recoElecECaloIsoR03[NrecoElec]/F");
00129 HltTree->Branch("recoElecHCaloIsoR03", elHCaloIsoR03, "recoElecHCaloIsoR03[NrecoElec]/F");
00130 HltTree->Branch("recoElecIsEcalDriven", elIsEcalDriven, "recoElecIsEcalDriven[NrecoElec]/O");
00131 HltTree->Branch("recoElecFbrem", elFbrem, "recoElecFbrem[NrecoElec]/F");
00132 HltTree->Branch("recoElecmishits", elmishits, "recoElecmishits[NrecoElec]/I");
00133 HltTree->Branch("recoElecdist", eldist, "recoElecdist[NrecoElec]/F");
00134 HltTree->Branch("recoElecdcot", eldcot, "recoElecdcot[NrecoElec]/F");
00135 HltTree->Branch("recoElectrkiso", eltrkiso, "recoElectrkiso[NrecoElec]/F");
00136 HltTree->Branch("recoElececaliso", elecaliso, "recoElececaliso[NrecoElec]/F");
00137 HltTree->Branch("recoElechcaliso", elhcaliso, "recoElechcaliso[NrecoElec]/F");
00138 HltTree->Branch("recoElecsigmaietaieta", elsigmaietaieta, "recoElecsigmaietaieta[NrecoElec]/F");
00139 HltTree->Branch("recoElecdeltaPhiIn", eldeltaPhiIn, "recoElecdeltaPhiIn[NrecoElec]/F");
00140 HltTree->Branch("recoElecdeltaEtaIn", eldeltaEtaIn, "recoElecdeltaEtaIn[NrecoElec]/F");
00141 HltTree->Branch("recoElechOverE", elhOverE, "recoElechOverE[NrecoElec]/F");
00142 HltTree->Branch("recoElecscEt", elscEt, "recoElecscEt[NrecoElec]/F");
00143 HltTree->Branch("recoElecd0corr", eld0corr, "recoElecd0corr[NrecoElec]/F");
00144 HltTree->Branch("recoElecqGsfCtfScPixConsistent", elqGsfCtfScPixConsistent, "recoElecqGsfCtfScPixConsistent[NrecoElec]/O");
00145
00146 HltTree->Branch("NrecoPhot", &nphoton, "NrecoPhot/I");
00147 HltTree->Branch("recoPhotPt", photonpt, "recoPhotPt[NrecoPhot]/F");
00148 HltTree->Branch("recoPhotPhi", photonphi, "recoPhotPhi[NrecoPhot]/F");
00149 HltTree->Branch("recoPhotEta", photoneta, "recoPhotEta[NrecoPhot]/F");
00150 HltTree->Branch("recoPhotEt", photonet, "recoPhotEt[NrecoPhot]/F");
00151 HltTree->Branch("recoPhotE", photone, "recoPhotE[NrecoPhot]/F");
00152
00153 HltTree->Branch("NohPhot", & nhltgam, "NohPhot/I");
00154 HltTree->Branch("ohPhotEt", hphotet, "ohPhotEt[NohPhot]/F");
00155 HltTree->Branch("ohPhotEta", hphoteta, "ohPhotEta[NohPhot]/F");
00156 HltTree->Branch("ohPhotPhi", hphotphi, "ohPhotPhi[NohPhot]/F");
00157 HltTree->Branch("ohPhotEiso", hphoteiso, "ohPhotEiso[NohPhot]/F");
00158 HltTree->Branch("ohPhotHiso", hphothiso, "ohPhotHiso[NohPhot]/F");
00159 HltTree->Branch("ohPhotTiso", hphottiso, "ohPhotTiso[NohPhot]/F");
00160 HltTree->Branch("ohPhotL1iso", hphotl1iso, "ohPhotL1iso[NohPhot]/I");
00161 HltTree->Branch("ohPhotClusShap", hphotClusShap, "ohPhotClusShap[NohPhot]/F");
00162 HltTree->Branch("ohPhotR9", hphotR9, "ohPhotR9[NohPhot]/F");
00163 HltTree->Branch("ohPhotHforHoverE", hphothovereh, "ohPhotHforHoverE[NohPhot]/F");
00164 HltTree->Branch("ohPhotR9ID", hphotR9ID, "ohPhotR9ID[NohPhot]/F");
00165
00166 HltTree->Branch("NohEle", & nhltele, "NohEle/I");
00167 HltTree->Branch("ohEleEt", heleet, "ohEleEt[NohEle]/F");
00168 HltTree->Branch("ohEleEta", heleeta, "ohEleEta[NohEle]/F");
00169 HltTree->Branch("ohElePhi", helephi, "ohElePhi[NohEle]/F");
00170 HltTree->Branch("ohEleE", heleE, "ohEleE[NohEle]/F");
00171 HltTree->Branch("ohEleP", helep, "ohEleP[NohEle]/F");
00172 HltTree->Branch("ohEleHiso", helehiso, "ohEleHiso[NohEle]/F");
00173 HltTree->Branch("ohEleTiso", heletiso, "ohEleTiso[NohEle]/F");
00174 HltTree->Branch("ohEleEiso", heleeiso, "ohEleEiso[NohEle]/F");
00175 HltTree->Branch("ohEleL1iso", helel1iso, "ohEleLiso[NohEle]/I");
00176 HltTree->Branch("ohElePixelSeeds", helePixelSeeds, "ohElePixelSeeds[NohEle]/I");
00177 HltTree->Branch("ohEleNewSC", heleNewSC, "ohEleNewSC[NohEle]/I");
00178 HltTree->Branch("ohEleClusShap", heleClusShap, "ohEleClusShap[NohEle]/F");
00179 HltTree->Branch("ohEleDeta", heleDeta, "ohEleDeta[NohEle]/F");
00180 HltTree->Branch("ohEleDphi", heleDphi, "ohEleDphi[NohEle]/F");
00181 HltTree->Branch("ohEleR9", heleR9, "ohEleR9[NohEle]/F");
00182 HltTree->Branch("ohEleHforHoverE", helehovereh, "ohEleHforHoverE[NohEle]/F");
00183 HltTree->Branch("ohEleR9ID", heleR9ID, "ohEleR9ID[NohEle]/F");
00184 HltTree->Branch("NohHFEle", &nhlthfele , "NohHFEle/I");
00185 HltTree->Branch("ohHFElePt", hhfelept, "ohHFElePt[NohHFEle]/F");
00186 HltTree->Branch("ohHFEleEta", hhfeleeta, "ohHFElePt[NohHFEle]/F");
00187 HltTree->Branch("NohHFECALClus", &nhlthfeclus, "NohHFECALClus/I");
00188 HltTree->Branch("ohHFElee9e25", hhfclustere9e25, "ohHFElePt[NohHFECALClus]/F");
00189 HltTree->Branch("ohHFEle2Dcut", hhfcluster2Dcut, "ohHFElePt[NohHFECALClus]/F");
00190
00191 }
00192
00193 void HLTEgamma::clear(void)
00194 {
00195 std::memset(elpt, '\0', kMaxEl * sizeof(float));
00196 std::memset(elphi, '\0', kMaxEl * sizeof(float));
00197 std::memset(eleta, '\0', kMaxEl * sizeof(float));
00198 std::memset(elet, '\0', kMaxEl * sizeof(float));
00199 std::memset(ele, '\0', kMaxEl * sizeof(float));
00200 std::memset(ele, '\0', kMaxEl * sizeof(int));
00201 std::memset(elIP, '\0', kMaxEl * sizeof(float));
00202 std::memset(elNLostHits, '\0', kMaxEl * sizeof(int));
00203 std::memset(elTrkChi2NDF, '\0', kMaxEl * sizeof(float));
00204 std::memset(elTrkIsoR03, '\0', kMaxEl * sizeof(float));
00205 std::memset(elECaloIsoR03, '\0', kMaxEl * sizeof(float));
00206 std::memset(elHCaloIsoR03, '\0', kMaxEl * sizeof(float));
00207 std::memset(elIsEcalDriven, '\0', kMaxEl * sizeof(bool));
00208 std::memset(elFbrem, '\0', kMaxEl * sizeof(float));
00209
00210 std::memset(photonpt, '\0', kMaxPhot * sizeof(float));
00211 std::memset(photonphi, '\0', kMaxPhot * sizeof(float));
00212 std::memset(photoneta, '\0', kMaxPhot * sizeof(float));
00213 std::memset(photonet, '\0', kMaxPhot * sizeof(float));
00214 std::memset(photone, '\0', kMaxPhot * sizeof(float));
00215
00216 std::memset(hphotet, '\0', kMaxhPhot * sizeof(float));
00217 std::memset(hphoteta, '\0', kMaxhPhot * sizeof(float));
00218 std::memset(hphotphi, '\0', kMaxhPhot * sizeof(float));
00219 std::memset(hphoteiso, '\0', kMaxhPhot * sizeof(float));
00220 std::memset(hphothiso, '\0', kMaxhPhot * sizeof(float));
00221 std::memset(hphottiso, '\0', kMaxhPhot * sizeof(float));
00222 std::memset(hphotl1iso, '\0', kMaxhPhot * sizeof(int));
00223 std::memset(hphotClusShap, '\0', kMaxhPhot * sizeof(float));
00224
00225 std::memset(heleet, '\0', kMaxhEle * sizeof(float));
00226 std::memset(heleeta, '\0', kMaxhEle * sizeof(float));
00227 std::memset(helephi, '\0', kMaxhEle * sizeof(float));
00228 std::memset(heleE, '\0', kMaxhEle * sizeof(float));
00229 std::memset(helep, '\0', kMaxhEle * sizeof(float));
00230 std::memset(helehiso, '\0', kMaxhEle * sizeof(float));
00231 std::memset(heletiso, '\0', kMaxhEle * sizeof(float));
00232 std::memset(heleeiso, '\0', kMaxhEle * sizeof(float));
00233 std::memset(helehovereh, '\0', kMaxhEle * sizeof(float));
00234 std::memset(helel1iso, '\0', kMaxhEle * sizeof(int));
00235 std::memset(helePixelSeeds, '\0', kMaxhEle * sizeof(int));
00236 std::memset(heleNewSC, '\0', kMaxhEle * sizeof(int));
00237 std::memset(heleClusShap, '\0', kMaxhEle * sizeof(float));
00238 std::memset(heleDeta, '\0', kMaxhEle * sizeof(float));
00239 std::memset(heleDphi, '\0', kMaxhEle * sizeof(float));
00240
00241 std::memset(hhfelept, '\0', kMaxhEle * sizeof(float));
00242 std::memset(hhfeleeta, '\0', kMaxhEle * sizeof(float));
00243 std::memset(hhfclustere9e25, '\0', kMaxhEle * sizeof(float));
00244 std::memset(hhfcluster2Dcut, '\0', kMaxhEle * sizeof(float));
00245
00246
00247 nele = 0;
00248 nphoton = 0;
00249 nhltgam = 0;
00250 nhltele = 0;
00251 nhlthfele = 0;
00252 nhlthfeclus = 0;
00253 }
00254
00255
00256 void HLTEgamma::analyze(const edm::Handle<reco::GsfElectronCollection> & electrons,
00257 const edm::Handle<reco::PhotonCollection> & photons,
00258 const edm::Handle<reco::ElectronCollection> & electronIsoHandle,
00259 const edm::Handle<reco::ElectronCollection> & electronNonIsoHandle,
00260 const edm::Handle<reco::ElectronIsolationMap> & NonIsoTrackEleIsolMap,
00261 const edm::Handle<reco::ElectronIsolationMap> & TrackEleIsolMap,
00262 const edm::Handle<reco::ElectronSeedCollection> & L1IsoPixelSeedsMap,
00263 const edm::Handle<reco::ElectronSeedCollection> & L1NonIsoPixelSeedsMap,
00264 const edm::Handle<reco::RecoEcalCandidateCollection> & recoIsolecalcands,
00265 const edm::Handle<reco::RecoEcalCandidateCollection> & recoNonIsolecalcands,
00266 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & EcalIsolMap,
00267 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & EcalNonIsolMap,
00268 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & HcalEleIsolMap,
00269 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & HcalEleNonIsolMap,
00270 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & HcalIsolMap,
00271 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & HcalNonIsolMap,
00272 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & TrackIsolMap,
00273 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & TrackNonIsolMap,
00274 EcalClusterLazyTools& lazyTools,
00275 const edm::ESHandle<MagneticField>& theMagField,
00276 reco::BeamSpot::Point & BSPosition,
00277 std::vector<edm::Handle<edm::ValueMap<float> > > & eIDValueMap,
00278 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & photonR9IsoMap,
00279 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & photonR9NonIsoMap,
00280 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & electronR9IsoMap,
00281 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & electronR9NonIsoMap,
00282 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & photonHoverEHIsoMap,
00283 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & photonHoverEHNonIsoMap,
00284 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & photonR9IDIsoMap,
00285 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & photonR9IDNonIsoMap,
00286 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & electronR9IDIsoMap,
00287 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & electronR9IDNonIsoMap,
00288 const edm::Handle<reco::SuperClusterCollection> & electronHFECALClusters,
00289 const edm::Handle<reco::RecoEcalCandidateCollection> & electronHFElectrons,
00290 TTree* HltTree)
00291 {
00292
00293 clear();
00294
00295 if (electrons.isValid()) {
00296 reco::GsfElectronCollection myelectrons( electrons->begin(), electrons->end() );
00297 nele = myelectrons.size();
00298 std::sort(myelectrons.begin(), myelectrons.end(), EtGreater());
00299 int iel = 0;
00300 for (reco::GsfElectronCollection::const_iterator i = myelectrons.begin(); i != myelectrons.end(); i++) {
00301 elpt[iel] = i->pt();
00302 elphi[iel] = i->phi();
00303 eleta[iel] = i->eta();
00304 elet[iel] = i->et();
00305 ele[iel] = i->energy();
00306
00307 if(i->gsfTrack().isNonnull()){
00308 elNLostHits[iel] = i->gsfTrack()->trackerExpectedHitsInner().numberOfLostHits();
00309 elIP[iel] = i->gsfTrack()->dxy(BSPosition);
00310 elTrkChi2NDF[iel] = i->gsfTrack()->normalizedChi2();
00311 }
00312 else {
00313 elNLostHits[iel] = -99.;
00314 elIP[iel] = -99.;
00315 elTrkChi2NDF[iel] = -99.;
00316 }
00317
00318 elTrkIsoR03[iel] = i->dr03TkSumPt();
00319 elECaloIsoR03[iel] = i->dr03EcalRecHitSumEt();
00320 elHCaloIsoR03[iel] = i->dr03HcalTowerSumEt();
00321 elIsEcalDriven[iel] = i->ecalDrivenSeed();
00322 elFbrem[iel] = i->fbrem();
00323 elscEt[iel] = i->superCluster()->energy()*sin((2*atan(exp(-i->superCluster()->eta()))));
00324 elhOverE[iel] = i->hadronicOverEm();
00325 elsigmaietaieta[iel] = i->sigmaIetaIeta();
00326 eldeltaPhiIn[iel] = i->deltaPhiSuperClusterTrackAtVtx();
00327 eldeltaEtaIn[iel] = i->deltaEtaSuperClusterTrackAtVtx();
00328 elmishits[iel] = i->gsfTrack()->trackerExpectedHitsInner().numberOfHits();
00329 eltrkiso[iel] = i->dr03TkSumPt();
00330 elecaliso[iel] = i->dr03EcalRecHitSumEt();
00331 elhcaliso[iel] = i->dr03HcalTowerSumEt();
00332 eld0corr[iel]= - (i->gsfTrack()->dxy(BSPosition));
00333 elqGsfCtfScPixConsistent[iel]=i->isGsfCtfScPixChargeConsistent();;
00334
00335
00336 eldist[iel] = 0;
00337 eldcot[iel] = 0;
00338
00339 iel++;
00340 }
00341 } else {
00342 nele = 0;
00343 }
00344
00345 if (photons.isValid()) {
00346 reco::PhotonCollection myphotons(* photons);
00347 nphoton = myphotons.size();
00348 std::sort(myphotons.begin(), myphotons.end(), EtGreater());
00349 int ipho = 0;
00350 for (reco::PhotonCollection::const_iterator i = myphotons.begin(); i!= myphotons.end(); i++) {
00351 photonpt[ipho] = i->pt();
00352 photonphi[ipho] = i->phi();
00353 photoneta[ipho] = i->eta();
00354 photonet[ipho] = i->et();
00355 photone[ipho] = i->energy();
00356 ipho++;
00357 }
00358 } else {
00359 nphoton = 0;
00360 }
00361
00363
00365 std::vector<OpenHLTPhoton> theHLTPhotons;
00366 MakeL1IsolatedPhotons(
00367 theHLTPhotons,
00368 recoIsolecalcands,
00369 EcalIsolMap,
00370 HcalIsolMap,
00371 TrackIsolMap,
00372 photonR9IsoMap,
00373 photonHoverEHIsoMap,
00374 photonR9IDIsoMap,
00375 lazyTools);
00376 MakeL1NonIsolatedPhotons(
00377 theHLTPhotons,
00378 recoNonIsolecalcands,
00379 EcalNonIsolMap,
00380 HcalNonIsolMap,
00381 TrackNonIsolMap,
00382 photonR9NonIsoMap,
00383 photonHoverEHNonIsoMap,
00384 photonR9IDNonIsoMap,
00385 lazyTools);
00386
00387 std::sort(theHLTPhotons.begin(), theHLTPhotons.end(), EtGreater());
00388 nhltgam = theHLTPhotons.size();
00389
00390 for (int u = 0; u < nhltgam; u++) {
00391 hphotet[u] = theHLTPhotons[u].Et;
00392 hphoteta[u] = theHLTPhotons[u].eta;
00393 hphotphi[u] = theHLTPhotons[u].phi;
00394 hphoteiso[u] = theHLTPhotons[u].ecalIsol;
00395 hphothiso[u] = theHLTPhotons[u].hcalIsol;
00396 hphottiso[u] = theHLTPhotons[u].trackIsol;
00397 hphotl1iso[u] = theHLTPhotons[u].L1Isolated;
00398 hphotClusShap[u] = theHLTPhotons[u].clusterShape;
00399 hphothovereh[u] = theHLTPhotons[u].hovereh;
00400 hphotR9[u] = theHLTPhotons[u].r9;
00401 hphotR9ID[u] = theHLTPhotons[u].r9ID;
00402 }
00403
00405 std::vector<OpenHLTElectron> theHLTElectrons;
00406 MakeL1IsolatedElectrons(
00407 theHLTElectrons,
00408 electronIsoHandle,
00409 recoIsolecalcands,
00410 HcalEleIsolMap,
00411 L1IsoPixelSeedsMap,
00412 TrackEleIsolMap,
00413 electronR9IsoMap,
00414 photonHoverEHIsoMap,
00415 EcalIsolMap,
00416 electronR9IDIsoMap,
00417 lazyTools,
00418 theMagField,
00419 BSPosition);
00420 MakeL1NonIsolatedElectrons(
00421 theHLTElectrons,
00422 electronNonIsoHandle,
00423 recoNonIsolecalcands,
00424 HcalEleNonIsolMap,
00425 L1NonIsoPixelSeedsMap,
00426 NonIsoTrackEleIsolMap,
00427 electronR9NonIsoMap,
00428 photonHoverEHNonIsoMap,
00429 EcalNonIsolMap,
00430 electronR9IDNonIsoMap,
00431 lazyTools,
00432 theMagField,
00433 BSPosition);
00434
00435 std::sort(theHLTElectrons.begin(), theHLTElectrons.end(), EtGreater());
00436 nhltele = theHLTElectrons.size();
00437
00438 for (int u = 0; u < nhltele; u++) {
00439 heleet[u] = theHLTElectrons[u].Et;
00440 heleeta[u] = theHLTElectrons[u].eta;
00441 helephi[u] = theHLTElectrons[u].phi;
00442 heleE[u] = theHLTElectrons[u].E;
00443 helep[u] = theHLTElectrons[u].p;
00444 helehiso[u] = theHLTElectrons[u].hcalIsol;
00445 helePixelSeeds[u] = theHLTElectrons[u].pixelSeeds;
00446 heletiso[u] = theHLTElectrons[u].trackIsol;
00447 heleeiso[u] = theHLTElectrons[u].ecalIsol;
00448 helel1iso[u] = theHLTElectrons[u].L1Isolated;
00449 heleNewSC[u] = theHLTElectrons[u].newSC;
00450 heleClusShap[u] = theHLTElectrons[u].clusterShape;
00451 heleDeta[u] = theHLTElectrons[u].Deta;
00452 heleDphi[u] = theHLTElectrons[u].Dphi;
00453 heleR9[u] = theHLTElectrons[u].r9;
00454 helehovereh[u] = theHLTElectrons[u].hovereh;
00455 heleR9ID[u] = theHLTElectrons[u].r9ID;
00456 }
00457
00458 if(electronHFElectrons.isValid()) {
00459 for (reco::RecoEcalCandidateCollection::const_iterator hfelecand = electronHFElectrons->begin();
00460 hfelecand!= electronHFElectrons->end(); hfelecand++) {
00461 hhfelept[nhlthfele] = hfelecand->pt();
00462 hhfeleeta[nhlthfele] = hfelecand->eta();
00463 nhlthfele++;
00464 }
00465 }
00466 if(electronHFECALClusters.isValid()) {
00467 for(reco::SuperClusterCollection::const_iterator hfeleclus = electronHFECALClusters->begin();
00468 hfeleclus!= electronHFECALClusters->end(); hfeleclus++) {
00469 hhfclustere9e25[nhlthfeclus] = -999.;
00470 hhfcluster2Dcut[nhlthfeclus] = -999.;
00471 nhlthfeclus++;
00472 }
00473 }
00474 }
00475
00476 void HLTEgamma::MakeL1IsolatedPhotons(
00477 std::vector<OpenHLTPhoton> & theHLTPhotons,
00478 const edm::Handle<reco::RecoEcalCandidateCollection> & recoIsolecalcands,
00479 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & EcalIsolMap,
00480 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & HcalIsolMap,
00481 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & TrackIsolMap,
00482 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & photonR9IsoMap,
00483 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & photonHoverEHIsoMap,
00484 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & photonR9IDIsoMap,
00485 EcalClusterLazyTools& lazyTools )
00486 {
00487
00488 reco::RecoEcalCandidateIsolationMap::const_iterator mapi;
00489
00490 if (recoIsolecalcands.isValid()) {
00491
00492
00493
00494 for (reco::RecoEcalCandidateCollection::const_iterator recoecalcand = recoIsolecalcands->begin();
00495 recoecalcand!= recoIsolecalcands->end(); recoecalcand++) {
00496
00497 OpenHLTPhoton pho;
00498 pho.ecalIsol = -999;
00499 pho.hcalIsol = -999;
00500 pho.trackIsol = -999;
00501 pho.clusterShape = -999;
00502 pho.L1Isolated = true;
00503 pho.Et = recoecalcand->et();
00504 pho.eta = recoecalcand->eta();
00505 pho.phi = recoecalcand->phi();
00506 pho.r9 = -999.;
00507 pho.hovereh = -999.;
00508 pho.r9ID = -999.;
00509
00510
00511
00512 std::vector<float> vCov = lazyTools.localCovariances( *(recoecalcand->superCluster()->seed()) );
00513 double sigmaee = sqrt(vCov[0]);
00514
00515
00516
00517
00518 pho.clusterShape = sigmaee;
00519
00520
00521 reco::RecoEcalCandidateRef ref = reco::RecoEcalCandidateRef(recoIsolecalcands, distance(recoIsolecalcands->begin(), recoecalcand));
00522
00523
00524
00525 if (EcalIsolMap.isValid()) {
00526 mapi = (*EcalIsolMap).find(ref);
00527 if (mapi !=(*EcalIsolMap).end()) { pho.ecalIsol = mapi->val;}
00528 }
00529
00530 if (HcalIsolMap.isValid()) {
00531 mapi = (*HcalIsolMap).find(ref);
00532 if (mapi !=(*HcalIsolMap).end()) { pho.hcalIsol = mapi->val;}
00533 }
00534
00535 if (TrackIsolMap.isValid()) {
00536 mapi = (*TrackIsolMap).find(ref);
00537 if (mapi !=(*TrackIsolMap).end()) { pho.trackIsol = mapi->val;}
00538 }
00539
00540 if (photonR9IsoMap.isValid()) {
00541 mapi = (*photonR9IsoMap).find(ref);
00542 if (mapi !=(*photonR9IsoMap).end()) { pho.r9 = mapi->val;}
00543 }
00544
00545 if (photonHoverEHIsoMap.isValid()) {
00546 mapi = (*photonHoverEHIsoMap).find(ref);
00547 if (mapi !=(*photonHoverEHIsoMap).end()) { pho.hovereh = mapi->val;}
00548 }
00549
00550 if (photonR9IDIsoMap.isValid()) {
00551 mapi = (*photonR9IDIsoMap).find(ref);
00552 if (mapi !=(*photonR9IDIsoMap).end()) { pho.r9ID = mapi->val;}
00553 }
00554
00555
00556 theHLTPhotons.push_back(pho);
00557 }
00558 }
00559 }
00560
00561 void HLTEgamma::MakeL1NonIsolatedPhotons(
00562 std::vector<OpenHLTPhoton> & theHLTPhotons,
00563 const edm::Handle<reco::RecoEcalCandidateCollection> & recoNonIsolecalcands,
00564 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & EcalNonIsolMap,
00565 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & HcalNonIsolMap,
00566 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & TrackNonIsolMap,
00567 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & photonR9NonIsoMap,
00568 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & photonHoverEHNonIsoMap,
00569 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & photonR9IDNonIsoMap,
00570 EcalClusterLazyTools& lazyTools )
00571 {
00572 reco::RecoEcalCandidateIsolationMap::const_iterator mapi;
00573
00574 if (recoNonIsolecalcands.isValid()) {
00575 for (reco::RecoEcalCandidateCollection::const_iterator recoecalcand = recoNonIsolecalcands->begin();
00576 recoecalcand!= recoNonIsolecalcands->end(); recoecalcand++) {
00577
00578 OpenHLTPhoton pho;
00579 pho.ecalIsol = -999;
00580 pho.hcalIsol = -999;
00581 pho.trackIsol = -999;
00582 pho.clusterShape = -999;
00583 pho.L1Isolated = false;
00584 pho.Et = recoecalcand->et();
00585 pho.eta = recoecalcand->eta();
00586 pho.phi = recoecalcand->phi();
00587 pho.r9 = -999;
00588 pho.hovereh = -999.;
00589 pho.r9ID = -999.;
00590
00591
00592
00593 std::vector<float> vCov = lazyTools.localCovariances( *(recoecalcand->superCluster()->seed()) );
00594 double sigmaee = sqrt(vCov[0]);
00595
00596
00597
00598
00599 pho.clusterShape = sigmaee;
00600
00601 reco::RecoEcalCandidateRef ref = reco::RecoEcalCandidateRef(recoNonIsolecalcands, distance(recoNonIsolecalcands->begin(), recoecalcand));
00602
00603
00604 if (EcalNonIsolMap.isValid()) {
00605 mapi = (*EcalNonIsolMap).find(ref);
00606 if (mapi !=(*EcalNonIsolMap).end()) { pho.ecalIsol = mapi->val;}
00607 }
00608
00609 if (HcalNonIsolMap.isValid()) {
00610 mapi = (*HcalNonIsolMap).find(ref);
00611 if (mapi !=(*HcalNonIsolMap).end()) { pho.hcalIsol = mapi->val;}
00612 }
00613
00614 if (TrackNonIsolMap.isValid()) {
00615 mapi = (*TrackNonIsolMap).find(ref);
00616 if (mapi !=(*TrackNonIsolMap).end()) { pho.trackIsol = mapi->val;}
00617 }
00618
00619 if (photonR9NonIsoMap.isValid()) {
00620 mapi = (*photonR9NonIsoMap).find(ref);
00621 if (mapi !=(*photonR9NonIsoMap).end()) { pho.r9 = mapi->val;}
00622 }
00623
00624 if (photonHoverEHNonIsoMap.isValid()) {
00625 mapi = (*photonHoverEHNonIsoMap).find(ref);
00626 if (mapi !=(*photonHoverEHNonIsoMap).end()) { pho.hovereh = mapi->val;}
00627 }
00628
00629 if (photonR9IDNonIsoMap.isValid()) {
00630 mapi = (*photonR9IDNonIsoMap).find(ref);
00631 if (mapi !=(*photonR9IDNonIsoMap).end()) { pho.r9ID = mapi->val;}
00632 }
00633
00634
00635 theHLTPhotons.push_back(pho);
00636 }
00637 }
00638 }
00639
00640 void HLTEgamma::MakeL1IsolatedElectrons(
00641 std::vector<OpenHLTElectron> & theHLTElectrons,
00642 const edm::Handle<reco::ElectronCollection> & electronIsoHandle,
00643 const edm::Handle<reco::RecoEcalCandidateCollection> & recoIsolecalcands,
00644 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & HcalEleIsolMap,
00645 const edm::Handle<reco::ElectronSeedCollection> & L1IsoPixelSeedsMap,
00646 const edm::Handle<reco::ElectronIsolationMap> & TrackEleIsolMap,
00647 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & electronR9IsoMap,
00648 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & photonHoverEHIsoMap,
00649 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & EcalIsolMap,
00650 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & electronR9IDIsoMap,
00651 EcalClusterLazyTools& lazyTools,
00652 const edm::ESHandle<MagneticField>& theMagField,
00653 reco::BeamSpot::Point & BSPosition )
00654 {
00655
00656 if (recoIsolecalcands.isValid()) {
00657 for (reco::RecoEcalCandidateCollection::const_iterator recoecalcand = recoIsolecalcands->begin();
00658 recoecalcand!= recoIsolecalcands->end(); recoecalcand++) {
00659
00660 reco::RecoEcalCandidateRef ref = reco::RecoEcalCandidateRef(recoIsolecalcands, distance(recoIsolecalcands->begin(), recoecalcand));
00661 reco::SuperClusterRef recrSC = ref->superCluster();
00662
00663
00664 OpenHLTElectron ele;
00665 ele.hcalIsol = -999;
00666 ele.trackIsol = -999;
00667 ele.ecalIsol = -999;
00668 ele.L1Isolated = true;
00669 ele.p = -999;
00670 ele.pixelSeeds = -999;
00671 ele.newSC = true;
00672 ele.clusterShape = -999;
00673 ele.Dphi = 700;
00674 ele.Deta = 700;
00675 ele.hovereh = -999;
00676 ele.Et = recoecalcand->et();
00677 ele.eta = recoecalcand->eta();
00678 ele.phi = recoecalcand->phi();
00679 ele.E = recrSC->energy();
00680
00681
00682 std::vector<float> vCov = lazyTools.localCovariances( *(recrSC->seed()) );
00683 double sigmaee = sqrt(vCov[0]);
00684
00685
00686
00687
00688 ele.clusterShape = sigmaee;
00689 ele.r9 = -999.;
00690 ele.r9ID = -999.;
00691
00692
00693 if (EcalIsolMap.isValid()) {
00694 reco::RecoEcalCandidateIsolationMap::const_iterator mapi = (*EcalIsolMap).find(ref);
00695 if (mapi !=(*EcalIsolMap).end()) { ele.ecalIsol = mapi->val;}
00696 }
00697
00698 if (HcalEleIsolMap.isValid()) {
00699
00700 reco::RecoEcalCandidateIsolationMap::const_iterator mapi = (*HcalEleIsolMap).find( ref );
00701 if (mapi !=(*HcalEleIsolMap).end()) { ele.hcalIsol = mapi->val; }
00702 }
00703
00704 if (electronR9IsoMap.isValid()) {
00705 reco::RecoEcalCandidateIsolationMap::const_iterator mapi = (*electronR9IsoMap).find( ref );
00706 if (mapi !=(*electronR9IsoMap).end()) { ele.r9 = mapi->val; }
00707 }
00708
00709 if (photonHoverEHIsoMap.isValid()) {
00710 reco::RecoEcalCandidateIsolationMap::const_iterator mapi = (*photonHoverEHIsoMap).find(ref);
00711 if (mapi !=(*photonHoverEHIsoMap).end()) { ele.hovereh = mapi->val;}
00712 }
00713
00714 if (electronR9IDIsoMap.isValid()) {
00715 reco::RecoEcalCandidateIsolationMap::const_iterator mapi = (*electronR9IDIsoMap).find( ref );
00716 if (mapi !=(*electronR9IDIsoMap).end()) { ele.r9ID = mapi->val; }
00717 }
00718
00719
00720 int nmatch = 0;
00721
00722 if (L1IsoPixelSeedsMap.isValid()) {
00723 for (reco::ElectronSeedCollection::const_iterator it = L1IsoPixelSeedsMap->begin();
00724 it != L1IsoPixelSeedsMap->end(); it++) {
00725 edm::RefToBase<reco::CaloCluster> caloCluster = it->caloCluster() ;
00726 reco::SuperClusterRef scRef = caloCluster.castTo<reco::SuperClusterRef>() ;
00727 if (&(*recrSC) == &(*scRef)) { nmatch++; }
00728 }
00729 }
00730
00731 ele.pixelSeeds = nmatch;
00732
00733
00734 if (electronIsoHandle.isValid()) {
00735 bool FirstElectron = true;
00736 reco::ElectronRef electronref;
00737 for (reco::ElectronCollection::const_iterator iElectron = electronIsoHandle->begin();
00738 iElectron != electronIsoHandle->end(); iElectron++) {
00739
00740 electronref = reco::ElectronRef(electronIsoHandle, iElectron - electronIsoHandle->begin());
00741 const reco::SuperClusterRef theClus = electronref->superCluster();
00742 if (&(*recrSC) == &(*theClus)) {
00743 if (FirstElectron) {
00744 FirstElectron = false;
00745 ele.p = electronref->track()->momentum().R();
00746 float deta=-100, dphi=-100;
00747 CalculateDetaDphi(theMagField,BSPosition , electronref , deta, dphi, false);
00748 ele.Dphi=dphi; ele.Deta=deta;
00749
00750 if (TrackEleIsolMap.isValid()) {
00751 reco::ElectronIsolationMap::const_iterator mapTr = (*TrackEleIsolMap).find(electronref);
00752 if (mapTr != (*TrackEleIsolMap).end()) { ele.trackIsol = mapTr->val; }
00753 }
00754 }
00755 else {
00756
00757
00758 OpenHLTElectron ele2;
00759 ele2.hcalIsol = ele.hcalIsol;
00760 ele2.trackIsol = -999;
00761 ele2.Dphi = 700;
00762 ele2.Deta = 700;
00763 ele2.Et = ele.Et;
00764 ele2.eta = ele.eta;
00765 ele2.phi = ele.phi;
00766 ele2.E = ele.E;
00767 ele2.L1Isolated = ele.L1Isolated;
00768 ele2.pixelSeeds = ele.pixelSeeds;
00769 ele2.clusterShape = ele.clusterShape;
00770 ele2.newSC = false;
00771 ele2.p = electronref->track()->momentum().R();
00772 ele2.r9 = ele.r9;
00773 ele2.hovereh = ele.hovereh;
00774 ele2.ecalIsol = ele.ecalIsol;
00775 ele2.r9ID = ele.r9ID;
00776 float deta=-100, dphi=-100;
00777 CalculateDetaDphi(theMagField,BSPosition , electronref , deta, dphi, false);
00778 ele2.Dphi=dphi; ele2.Deta=deta;
00779
00780 if (TrackEleIsolMap.isValid()) {
00781 reco::ElectronIsolationMap::const_iterator mapTr = (*TrackEleIsolMap).find( electronref);
00782 if (mapTr !=(*TrackEleIsolMap).end()) { ele2.trackIsol = mapTr->val;}
00783 }
00784 theHLTElectrons.push_back(ele2);
00785 }
00786 }
00787 }
00788 }
00789
00790
00791 theHLTElectrons.push_back(ele);
00792 }
00793 }
00794 }
00795
00796
00797 void HLTEgamma::MakeL1NonIsolatedElectrons(
00798 std::vector<OpenHLTElectron> & theHLTElectrons,
00799 const edm::Handle<reco::ElectronCollection> & electronNonIsoHandle,
00800 const edm::Handle<reco::RecoEcalCandidateCollection> & recoNonIsolecalcands,
00801 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & HcalEleIsolMap,
00802 const edm::Handle<reco::ElectronSeedCollection> & L1NonIsoPixelSeedsMap,
00803 const edm::Handle<reco::ElectronIsolationMap> & TrackEleIsolMap,
00804 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & electronR9NonIsoMap,
00805 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & photonHoverEHNonIsoMap,
00806 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & EcalNonIsolMap,
00807 const edm::Handle<reco::RecoEcalCandidateIsolationMap> & electronR9IDNonIsoMap,
00808 EcalClusterLazyTools& lazyTools,
00809 const edm::ESHandle<MagneticField>& theMagField,
00810 reco::BeamSpot::Point & BSPosition )
00811 {
00812
00813 if (recoNonIsolecalcands.isValid()) {
00814 for (reco::RecoEcalCandidateCollection::const_iterator recoecalcand = recoNonIsolecalcands->begin();
00815 recoecalcand!= recoNonIsolecalcands->end(); recoecalcand++) {
00816
00817 reco::RecoEcalCandidateRef ref = reco::RecoEcalCandidateRef(recoNonIsolecalcands, distance(recoNonIsolecalcands->begin(), recoecalcand));
00818 reco::SuperClusterRef recrSC = ref->superCluster();
00819
00820
00821 OpenHLTElectron ele;
00822 ele.hcalIsol = -999;
00823 ele.trackIsol = -999;
00824 ele.ecalIsol = -999;
00825 ele.L1Isolated = false;
00826 ele.p = -999;
00827 ele.pixelSeeds = -999;
00828 ele.newSC = true;
00829 ele.clusterShape = -999;
00830 ele.Dphi = 700;
00831 ele.Deta = 700;
00832 ele.r9 = -999.;
00833 ele.r9ID = -999.;
00834 ele.hovereh = -999;
00835 ele.Et = recoecalcand->et();
00836 ele.eta = recoecalcand->eta();
00837 ele.phi = recoecalcand->phi();
00838 ele.E = recrSC->energy();
00839
00840
00841 std::vector<float> vCov = lazyTools.localCovariances( *(recrSC->seed()) );
00842 double sigmaee = sqrt(vCov[0]);
00843
00844
00845
00846
00847 ele.clusterShape = sigmaee;
00848
00849
00850 if (EcalNonIsolMap.isValid()) {
00851 reco::RecoEcalCandidateIsolationMap::const_iterator mapi = (*EcalNonIsolMap).find(ref);
00852 if (mapi !=(*EcalNonIsolMap).end()) { ele.ecalIsol = mapi->val;}
00853 }
00854
00855 if (HcalEleIsolMap.isValid()) {
00856
00857 reco::RecoEcalCandidateIsolationMap::const_iterator mapi = (*HcalEleIsolMap).find( ref );
00858 if (mapi !=(*HcalEleIsolMap).end()) {ele.hcalIsol = mapi->val;}
00859 }
00860
00861 if (electronR9NonIsoMap.isValid()) {
00862 reco::RecoEcalCandidateIsolationMap::const_iterator mapi = (*electronR9NonIsoMap).find( ref );
00863 if (mapi !=(*electronR9NonIsoMap).end()) { ele.r9 = mapi->val; }
00864 }
00865
00866 if (photonHoverEHNonIsoMap.isValid()) {
00867 reco::RecoEcalCandidateIsolationMap::const_iterator mapi = (*photonHoverEHNonIsoMap).find(ref);
00868 if (mapi !=(*photonHoverEHNonIsoMap).end()) { ele.hovereh = mapi->val;}
00869 }
00870
00871 if (electronR9IDNonIsoMap.isValid()) {
00872 reco::RecoEcalCandidateIsolationMap::const_iterator mapi = (*electronR9IDNonIsoMap).find( ref );
00873 if (mapi !=(*electronR9IDNonIsoMap).end()) { ele.r9ID = mapi->val; }
00874 }
00875
00876
00877 int nmatch = 0;
00878
00879 if (L1NonIsoPixelSeedsMap.isValid()) {
00880 for (reco::ElectronSeedCollection::const_iterator it = L1NonIsoPixelSeedsMap->begin();
00881 it != L1NonIsoPixelSeedsMap->end(); it++) {
00882 edm::RefToBase<reco::CaloCluster> caloCluster = it->caloCluster() ;
00883 reco::SuperClusterRef scRef = caloCluster.castTo<reco::SuperClusterRef>() ;
00884 if (&(*recrSC) == &(*scRef)) { nmatch++;}
00885 }
00886 }
00887
00888 ele.pixelSeeds = nmatch;
00889
00890
00891 if (electronNonIsoHandle.isValid()) {
00892 bool FirstElectron = true;
00893 reco::ElectronRef electronref;
00894 for (reco::ElectronCollection::const_iterator iElectron = electronNonIsoHandle->begin();
00895 iElectron != electronNonIsoHandle->end();iElectron++) {
00896
00897 electronref = reco::ElectronRef(electronNonIsoHandle, iElectron - electronNonIsoHandle->begin());
00898 const reco::SuperClusterRef theClus = electronref->superCluster();
00899 if (&(*recrSC) == &(*theClus)) {
00900 if (FirstElectron) {
00901 FirstElectron = false;
00902 ele.p = electronref->track()->momentum().R();
00903 float deta=-100, dphi=-100;
00904 CalculateDetaDphi(theMagField,BSPosition , electronref , deta, dphi, false);
00905 ele.Dphi=dphi; ele.Deta=deta;
00906
00907
00908 if (TrackEleIsolMap.isValid()) {
00909 reco::ElectronIsolationMap::const_iterator mapTr = (*TrackEleIsolMap).find( electronref);
00910 if (mapTr !=(*TrackEleIsolMap).end()) { ele.trackIsol = mapTr->val;}
00911 }
00912 } else {
00913
00914
00915 OpenHLTElectron ele2;
00916 ele2.hcalIsol = ele.hcalIsol;
00917 ele2.trackIsol =-999;
00918 ele2.ecalIsol = ele.ecalIsol;
00919 ele2.Dphi = 700;
00920 ele2.Deta = 700;
00921 ele2.Et = ele.Et;
00922 ele2.eta = ele.eta;
00923 ele2.phi = ele.phi;
00924 ele2.E = ele.E;
00925 ele2.L1Isolated = ele.L1Isolated;
00926 ele2.pixelSeeds = ele.pixelSeeds;
00927 ele2.clusterShape = ele.clusterShape;
00928 ele2.newSC = false;
00929 ele2.p = electronref->track()->momentum().R();
00930 ele2.r9 = ele.r9;
00931 ele2.hovereh = ele.hovereh;
00932 ele2.r9ID = ele.r9ID;
00933 float deta=-100, dphi=-100;
00934 CalculateDetaDphi(theMagField,BSPosition , electronref , deta, dphi, false);
00935 ele2.Dphi=dphi; ele2.Deta=deta;
00936
00937
00938 if (TrackEleIsolMap.isValid()) {
00939 reco::ElectronIsolationMap::const_iterator mapTr = (*TrackEleIsolMap).find( electronref);
00940 if (mapTr !=(*TrackEleIsolMap).end()) { ele2.trackIsol = mapTr->val;}
00941 }
00942 theHLTElectrons.push_back(ele2);
00943 }
00944 }
00945 }
00946 }
00947
00948
00949 theHLTElectrons.push_back(ele);
00950 }
00951 }
00952 }
00953
00954 void HLTEgamma::CalculateDetaDphi(const edm::ESHandle<MagneticField>& theMagField,
00955 reco::BeamSpot::Point & BSPosition,
00956 const reco::ElectronRef eleref,
00957 float& deltaeta,
00958 float& deltaphi, bool useTrackProjectionToEcal )
00959 {
00960
00961 const reco::SuperClusterRef theClus = eleref->superCluster();
00962 math::XYZVector scv(theClus->x(), theClus->y(), theClus->z());
00963
00964 const math::XYZVector trackMom = eleref->track()->momentum();
00965
00966 math::XYZPoint SCcorrPosition(theClus->x()-BSPosition.x(), theClus->y()-BSPosition.y() , theClus->z()-eleref->track()->vz() );
00967 deltaeta = SCcorrPosition.eta()-eleref->track()->eta();
00968
00969 if(useTrackProjectionToEcal){
00970 ECALPositionCalculator posCalc;
00971 const math::XYZPoint vertex(BSPosition.x(),BSPosition.y(),eleref->track()->vz());
00972
00973 float phi1= posCalc.ecalPhi(theMagField.product(),trackMom,vertex,1);
00974 float phi2= posCalc.ecalPhi(theMagField.product(),trackMom,vertex,-1);
00975
00976 float deltaphi1=fabs( phi1 - theClus->position().phi() );
00977 if(deltaphi1>6.283185308) deltaphi1 -= 6.283185308;
00978 if(deltaphi1>3.141592654) deltaphi1 = 6.283185308-deltaphi1;
00979
00980 float deltaphi2=fabs( phi2 - theClus->position().phi() );
00981 if(deltaphi2>6.283185308) deltaphi2 -= 6.283185308;
00982 if(deltaphi2>3.141592654) deltaphi2 = 6.283185308-deltaphi2;
00983
00984 deltaphi = deltaphi1;
00985 if(deltaphi2<deltaphi1){ deltaphi = deltaphi2;}
00986 }
00987 else {
00988 deltaphi=fabs(eleref->track()->outerPosition().phi()-theClus->phi());
00989 if(deltaphi>6.283185308) deltaphi -= 6.283185308;
00990 if(deltaphi>3.141592654) deltaphi = 6.283185308-deltaphi;
00991 }
00992
00993 }