189 |
|
if(eSeedOverPin<fCuts[4][cat+4*eb]) |
190 |
|
return kFALSE; |
191 |
|
|
192 |
+ |
// Apply detector isolation at high pt only |
193 |
|
Bool_t isoCut = kTRUE; |
194 |
|
if(idType == kVBTFWorkingPointFakeableId){ |
195 |
|
double isoEcal = ele->EcalRecHitIsoDr03(); |
355 |
|
} |
356 |
|
|
357 |
|
//-------------------------------------------------------------------------------------------------- |
358 |
+ |
Bool_t ElectronTools::PassConversionFilterPFAOD(const Electron *ele, |
359 |
+ |
const DecayParticleCol *conversions, |
360 |
+ |
const BaseVertex *vtx, |
361 |
+ |
UInt_t nWrongHitsMax, |
362 |
+ |
Double_t probMin, |
363 |
+ |
Double_t lxyMin, |
364 |
+ |
Bool_t matchCkf, |
365 |
+ |
Bool_t requireArbitratedMerged, |
366 |
+ |
Double_t trkptMin) |
367 |
+ |
{ |
368 |
+ |
|
369 |
+ |
Bool_t isGoodConversion = kFALSE; |
370 |
+ |
|
371 |
+ |
for (UInt_t ifc=0; ifc<conversions->GetEntries(); ifc++) { |
372 |
+ |
if(!(conversions->At(ifc)->Prob() > probMin) && (!requireArbitratedMerged || conversions->At(ifc)->Quality().Quality(ConversionQuality::arbitratedMerged)) && (conversions->At(ifc)->LxyCorrected((BaseVertex*)vtx) > lxyMin)) continue; |
373 |
+ |
Bool_t ConversionMatchFound = kFALSE; |
374 |
+ |
for (UInt_t d=0; d<conversions->At(ifc)->NDaughters(); d++) { |
375 |
+ |
const ChargedParticle *pParticle = 0; |
376 |
+ |
pParticle = dynamic_cast<const ChargedParticle*>(conversions->At(ifc)->Daughter(d)); |
377 |
+ |
if(pParticle == 0) continue; |
378 |
+ |
const Track* trk = 0; |
379 |
+ |
trk = pParticle->Trk(); |
380 |
+ |
if(trk == 0) continue; |
381 |
+ |
if (ele->GsfTrk() == trk || (matchCkf && ele->TrackerTrk()==trk) ) { |
382 |
+ |
ConversionMatchFound = kTRUE; |
383 |
+ |
break; |
384 |
+ |
} |
385 |
+ |
} |
386 |
+ |
|
387 |
+ |
// if match between the e-track and one of the conversion legs |
388 |
+ |
if (ConversionMatchFound == kTRUE){ |
389 |
+ |
isGoodConversion = (conversions->At(ifc)->Prob() > probMin) && |
390 |
+ |
(!requireArbitratedMerged || conversions->At(ifc)->Quality().Quality(ConversionQuality::arbitratedMerged)) && |
391 |
+ |
(conversions->At(ifc)->LxyCorrected(vtx) > lxyMin); |
392 |
+ |
|
393 |
+ |
if (isGoodConversion == kTRUE) { |
394 |
+ |
for (UInt_t d=0; d<conversions->At(ifc)->NDaughters(); d++) { |
395 |
+ |
const ChargedParticle *pParticle = 0; |
396 |
+ |
pParticle = dynamic_cast<const ChargedParticle*>(conversions->At(ifc)->Daughter(d)); |
397 |
+ |
if(pParticle == 0) continue; |
398 |
+ |
const Track* trk = 0; |
399 |
+ |
trk = pParticle->Trk(); |
400 |
+ |
if(trk == 0) continue; |
401 |
+ |
if (trk) { |
402 |
+ |
if (trk->Pt()<trkptMin) isGoodConversion = kFALSE; |
403 |
+ |
const StableData *sd = dynamic_cast<const StableData*> |
404 |
+ |
(conversions->At(ifc)->DaughterDat(d)); |
405 |
+ |
if (sd->NWrongHits() > nWrongHitsMax) |
406 |
+ |
isGoodConversion = kFALSE; |
407 |
+ |
} else { |
408 |
+ |
isGoodConversion = kFALSE; |
409 |
+ |
} |
410 |
+ |
} |
411 |
+ |
} |
412 |
+ |
} |
413 |
+ |
|
414 |
+ |
if (isGoodConversion == kTRUE) break; |
415 |
+ |
|
416 |
+ |
} // loop over all conversions |
417 |
+ |
|
418 |
+ |
return !isGoodConversion; |
419 |
+ |
} |
420 |
+ |
//-------------------------------------------------------------------------------------------------- |
421 |
|
Bool_t ElectronTools::PassD0Cut(const Electron *ele, const VertexCol *vertices, Double_t fD0Cut, Int_t nVertex) |
422 |
|
{ |
423 |
|
Bool_t d0cut = kFALSE; |
424 |
< |
|
424 |
> |
|
425 |
|
Double_t d0_real = 1e30; |
426 |
+ |
Double_t dz_real = 1e30; |
427 |
+ |
Int_t closestVtx = 0; |
428 |
|
|
429 |
|
if( nVertex >= (int) vertices->GetEntries() ) |
430 |
|
nVertex = vertices->GetEntries() - 1; |
432 |
|
if(nVertex >= 0) d0_real = TMath::Abs(ele->GsfTrk()->D0Corrected(*vertices->At(nVertex))); |
433 |
|
else { |
434 |
|
Double_t distVtx = 999.0; |
369 |
– |
Int_t closestVtx = 0; |
435 |
|
for(UInt_t nv=0; nv<vertices->GetEntries(); nv++){ |
436 |
|
double dz = TMath::Abs(ele->GsfTrk()->DzCorrected(*vertices->At(nv))); |
437 |
|
if(dz < distVtx) { |
438 |
|
distVtx = dz; |
439 |
|
closestVtx = nv; |
440 |
|
} |
441 |
+ |
d0_real = TMath::Abs(ele->GsfTrk()->D0Corrected(*vertices->At(nv))); |
442 |
+ |
//printf("ming sync check nv:%d dz:%f d0:%f\n",nv,dz,d0_real); |
443 |
|
} |
444 |
|
d0_real = TMath::Abs(ele->GsfTrk()->D0Corrected(*vertices->At(closestVtx))); |
445 |
+ |
dz_real = TMath::Abs(ele->GsfTrk()->DzCorrected(*vertices->At(closestVtx))); |
446 |
|
} |
447 |
+ |
|
448 |
+ |
//printf("ming sync check electonidmod vtxind:%d vtx_x:%f vtx_y:%f vtx_z:%f dz:%f d0:%f\n",closestVtx,vertices->At(closestVtx)->X(),vertices->At(closestVtx)->Y(),vertices->At(closestVtx)->Z(),dz_real,d0_real); |
449 |
+ |
|
450 |
|
if(d0_real < fD0Cut) d0cut = kTRUE; |
451 |
|
|
452 |
|
return d0cut; |
1153 |
|
Double_t EffectiveArea = 0; |
1154 |
|
|
1155 |
|
if(type == ElectronTools::kEleNeutralIso04){ |
1156 |
< |
if (fabs(SCEta) < 1.0 ) EffectiveArea = 0.19; |
1157 |
< |
else if(fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.25; |
1158 |
< |
else if(fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.000 ) EffectiveArea = 0.12; |
1159 |
< |
else if(fabs(SCEta) >= 2.000 && fabs(SCEta) < 2.200 ) EffectiveArea = 0.21; |
1160 |
< |
else if(fabs(SCEta) >= 2.200 && fabs(SCEta) < 2.300 ) EffectiveArea = 0.27; |
1161 |
< |
else if(fabs(SCEta) >= 2.300 && fabs(SCEta) < 2.400 ) EffectiveArea = 0.44; |
1162 |
< |
else EffectiveArea = 0.52; |
1156 |
> |
if (fabs(SCEta) < 1.0 ) EffectiveArea = 0.208; |
1157 |
> |
else if(fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.209; |
1158 |
> |
else if(fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.000 ) EffectiveArea = 0.115; |
1159 |
> |
else if(fabs(SCEta) >= 2.000 && fabs(SCEta) < 2.200 ) EffectiveArea = 0.143; |
1160 |
> |
else if(fabs(SCEta) >= 2.200 && fabs(SCEta) < 2.300 ) EffectiveArea = 0.183; |
1161 |
> |
else if(fabs(SCEta) >= 2.300 && fabs(SCEta) < 2.400 ) EffectiveArea = 0.194; |
1162 |
> |
else EffectiveArea = 0.261; |
1163 |
|
return EffectiveArea; |
1164 |
|
} |
1165 |
|
|
1234 |
|
if (EffectiveAreaTarget == kEleEANoCorr) { |
1235 |
|
return 0.0; |
1236 |
|
} |
1237 |
< |
else if (EffectiveAreaTarget == kEleEAData2012) { |
1237 |
> |
else if (EffectiveAreaTarget == kEleEAData2012) { |
1238 |
> |
if (type == kEleGammaIso03) { |
1239 |
> |
if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.122; |
1240 |
> |
if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.147; |
1241 |
> |
if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.055; |
1242 |
> |
if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.106; |
1243 |
> |
if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.138; |
1244 |
> |
if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.221; |
1245 |
> |
if (fabs(SCEta) >= 2.4 ) EffectiveArea = 0.211; |
1246 |
> |
} |
1247 |
> |
if (type == kEleGammaIso04) { |
1248 |
> |
if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.176; |
1249 |
> |
if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.206; |
1250 |
> |
if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.094; |
1251 |
> |
if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.172; |
1252 |
> |
if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.244; |
1253 |
> |
if (fabs(SCEta) >= 2.4 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.333; |
1254 |
> |
if (fabs(SCEta) >= 2.4 ) EffectiveArea = 0.348; |
1255 |
> |
} |
1256 |
> |
if (type == kEleNeutralHadronIso03) { |
1257 |
> |
if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.013; |
1258 |
> |
if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.021; |
1259 |
> |
if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.013; |
1260 |
> |
if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.010; |
1261 |
> |
if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.024; |
1262 |
> |
if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.020; |
1263 |
> |
if (fabs(SCEta) >= 2.4 ) EffectiveArea = 0.019; |
1264 |
> |
} |
1265 |
> |
if (type == kEleNeutralHadronIso04) { |
1266 |
> |
if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.022; |
1267 |
> |
if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.036; |
1268 |
> |
if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.027; |
1269 |
> |
if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.028; |
1270 |
> |
if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.052; |
1271 |
> |
if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.063; |
1272 |
> |
if (fabs(SCEta) >= 2.4 ) EffectiveArea = 0.028; |
1273 |
> |
} |
1274 |
> |
if (type == kEleGammaAndNeutralHadronIso04) { |
1275 |
> |
if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.208; |
1276 |
> |
if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.209; |
1277 |
> |
if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.115; |
1278 |
> |
if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.143; |
1279 |
> |
if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.183; |
1280 |
> |
if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.194; |
1281 |
> |
if (fabs(SCEta) >= 2.4) EffectiveArea = 0.261; |
1282 |
> |
} |
1283 |
|
if (type == kEleGammaIsoDR0p0To0p1) { |
1284 |
|
if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.051; |
1285 |
|
if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.032; |
1374 |
|
|
1375 |
|
//2011 Data Effective Areas |
1376 |
|
else if (EffectiveAreaTarget == kEleEAData2011) { |
1377 |
+ |
if (type == kEleGammaAndNeutralHadronIso03) { |
1378 |
+ |
if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.100; |
1379 |
+ |
if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.120; |
1380 |
+ |
if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.085; |
1381 |
+ |
if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.110; |
1382 |
+ |
if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.120; |
1383 |
+ |
if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.120; |
1384 |
+ |
if (fabs(SCEta) >= 2.4) EffectiveArea = 0.130; |
1385 |
+ |
} |
1386 |
+ |
if (type == kEleGammaAndNeutralHadronIso04) { |
1387 |
+ |
if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.180; |
1388 |
+ |
if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.200; |
1389 |
+ |
if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.150; |
1390 |
+ |
if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.190; |
1391 |
+ |
if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.210; |
1392 |
+ |
if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.220; |
1393 |
+ |
if (fabs(SCEta) >= 2.4) EffectiveArea = 0.290; |
1394 |
+ |
} |
1395 |
|
if (type == kEleGammaIsoDR0p0To0p1) { |
1396 |
|
if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.017; |
1397 |
|
if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.033; |
1683 |
|
|
1684 |
|
if (dist < 0.02) return false; |
1685 |
|
if (dcot < 0.02) return false; |
1686 |
< |
|
1686 |
> |
|
1687 |
|
int numInnerHits = ele->Trk()->NExpectedHitsInner(); |
1688 |
< |
if( numInnerHits > 0 ) return false; |
1688 |
> |
if( numInnerHits > 1 ) return false; |
1689 |
|
|
1690 |
|
float coviEtaiEta = ele->CoviEtaiEta(); |
1691 |
|
if( ele->SCluster()->AbsEta() < 1.5 && coviEtaiEta > 0.01 ) return false; |
1699 |
|
|
1700 |
|
return true; |
1701 |
|
} |
1702 |
+ |
|
1703 |
+ |
Bool_t ElectronTools::PassHggLeptonTagID2012(const Electron* ele) { |
1704 |
+ |
|
1705 |
+ |
if (TMath::Abs(1./ele->E()-1./ele->Pt())>0.05) return false; |
1706 |
+ |
|
1707 |
+ |
int numInnerHits = ele->Trk()->NExpectedHitsInner(); |
1708 |
+ |
if( numInnerHits > 1 ) return false; |
1709 |
+ |
|
1710 |
+ |
float coviEtaiEta = ele->CoviEtaiEta(); |
1711 |
+ |
if( ele->SCluster()->AbsEta() < 1.5 && coviEtaiEta > 0.01 ) return false; |
1712 |
+ |
else if( ele->SCluster()->AbsEta() > 1.5 && coviEtaiEta > 0.03 ) return false; // h |
1713 |
+ |
|
1714 |
+ |
Double_t deltaPhiIn = TMath::Abs(ele->DeltaPhiSuperClusterTrackAtVtx()); |
1715 |
+ |
Double_t deltaEtaIn = TMath::Abs(ele->DeltaEtaSuperClusterTrackAtVtx()); |
1716 |
+ |
|
1717 |
+ |
if( ele->SCluster()->AbsEta() < 1.5 && ( deltaPhiIn > 0.15 || deltaEtaIn > 0.007 || ele->HadronicOverEm()>0.12) ) return false; // h |
1718 |
+ |
else if ( ele->SCluster()->AbsEta() > 1.5 && ( deltaPhiIn > 0.10 || deltaEtaIn > 0.009 || ele->HadronicOverEm()>0.10 ) ) return false; // h |
1719 |
+ |
|
1720 |
+ |
return true; |
1721 |
+ |
} |
1722 |
+ |
|
1723 |
+ |
std::pair<Double_t,Double_t> ElectronTools::ComputeEPCombination( const Electron * ele, const float regression_energy, |
1724 |
+ |
const float regression_energy_error) { |
1725 |
+ |
|
1726 |
+ |
enum Classification { GSF_ELECTRON_UNKNOWN=-1, |
1727 |
+ |
GSF_ELECTRON_GOLDEN=0, |
1728 |
+ |
GSF_ELECTRON_BIGBREM=1, |
1729 |
+ |
GSF_ELECTRON_BADTRACK=2, |
1730 |
+ |
GSF_ELECTRON_SHOWERING=3, |
1731 |
+ |
GSF_ELECTRON_GAP=4 } ; |
1732 |
+ |
|
1733 |
+ |
float newEnergyError_ = regression_energy_error; |
1734 |
+ |
float scEnergy = regression_energy; |
1735 |
+ |
|
1736 |
+ |
int elClass = ele->Classification(); |
1737 |
+ |
|
1738 |
+ |
float trackMomentum = ele->PIn() ; |
1739 |
+ |
float errorTrackMomentum_ = 999. ; |
1740 |
+ |
|
1741 |
+ |
// the electron's track momentum error was not available in bambu versions less than 029 |
1742 |
+ |
if(ele->TrackMomentumError() > 0) |
1743 |
+ |
errorTrackMomentum_ = ele->TrackMomentumError(); |
1744 |
+ |
else if ( ele->GsfTrk()->PtErr() > 0) |
1745 |
+ |
errorTrackMomentum_ = ele->GsfTrk()->PtErr()*cosh(ele->GsfTrk()->Eta()); |
1746 |
+ |
else |
1747 |
+ |
assert(0); |
1748 |
+ |
|
1749 |
+ |
float finalMomentum = ele->E(); // initial |
1750 |
+ |
float finalMomentumError = 999.; |
1751 |
+ |
|
1752 |
+ |
// first check for large errors |
1753 |
+ |
|
1754 |
+ |
if (errorTrackMomentum_/trackMomentum > 0.5 && regression_energy_error/regression_energy <= 0.5) { |
1755 |
+ |
finalMomentum = regression_energy; finalMomentumError = regression_energy_error; |
1756 |
+ |
} |
1757 |
+ |
else if (errorTrackMomentum_/trackMomentum <= 0.5 && regression_energy_error/regression_energy > 0.5){ |
1758 |
+ |
finalMomentum = trackMomentum; finalMomentumError = errorTrackMomentum_; |
1759 |
+ |
} |
1760 |
+ |
else if (errorTrackMomentum_/trackMomentum > 0.5 && regression_energy_error/regression_energy > 0.5){ |
1761 |
+ |
if (errorTrackMomentum_/trackMomentum < regression_energy_error/regression_energy) { |
1762 |
+ |
finalMomentum = trackMomentum; finalMomentumError = errorTrackMomentum_; |
1763 |
+ |
} |
1764 |
+ |
else{ |
1765 |
+ |
finalMomentum = regression_energy; finalMomentumError = regression_energy_error; |
1766 |
+ |
} |
1767 |
+ |
} |
1768 |
+ |
// then apply the combination algorithm |
1769 |
+ |
else { |
1770 |
+ |
// calculate E/p and corresponding error |
1771 |
+ |
float eOverP = regression_energy / trackMomentum; |
1772 |
+ |
float errorEOverP = sqrt( |
1773 |
+ |
(regression_energy_error/trackMomentum)*(regression_energy_error/trackMomentum) + |
1774 |
+ |
(regression_energy*errorTrackMomentum_/trackMomentum/trackMomentum)* |
1775 |
+ |
(regression_energy*errorTrackMomentum_/trackMomentum/trackMomentum)); |
1776 |
+ |
|
1777 |
+ |
|
1778 |
+ |
bool eleIsNotInCombination = false ; |
1779 |
+ |
if ( (eOverP > 1 + 2.5*errorEOverP) || (eOverP < 1 - 2.5*errorEOverP) || (eOverP < 0.8) || (eOverP > 1.3) ) |
1780 |
+ |
{ eleIsNotInCombination = true ; } |
1781 |
+ |
if (eleIsNotInCombination) |
1782 |
+ |
{ |
1783 |
+ |
if (eOverP > 1) |
1784 |
+ |
{ finalMomentum = regression_energy ; finalMomentumError = regression_energy_error ; } |
1785 |
+ |
else |
1786 |
+ |
{ |
1787 |
+ |
if (elClass == GSF_ELECTRON_GOLDEN) |
1788 |
+ |
{ finalMomentum = regression_energy; finalMomentumError = regression_energy_error; } |
1789 |
+ |
if (elClass == GSF_ELECTRON_BIGBREM) |
1790 |
+ |
{ |
1791 |
+ |
if (regression_energy<36) |
1792 |
+ |
{ finalMomentum = trackMomentum ; finalMomentumError = errorTrackMomentum_ ; } |
1793 |
+ |
else |
1794 |
+ |
{ finalMomentum = regression_energy ; finalMomentumError = regression_energy_error ; } |
1795 |
+ |
} |
1796 |
+ |
if (elClass == GSF_ELECTRON_BADTRACK) |
1797 |
+ |
{ finalMomentum = regression_energy; finalMomentumError = regression_energy_error ; } |
1798 |
+ |
if (elClass == GSF_ELECTRON_SHOWERING) |
1799 |
+ |
{ |
1800 |
+ |
if (regression_energy<30) |
1801 |
+ |
{ finalMomentum = trackMomentum ; finalMomentumError = errorTrackMomentum_; } |
1802 |
+ |
else |
1803 |
+ |
{ finalMomentum = regression_energy; finalMomentumError = regression_energy_error;} |
1804 |
+ |
} |
1805 |
+ |
if (elClass == GSF_ELECTRON_GAP) |
1806 |
+ |
{ |
1807 |
+ |
if (regression_energy<60) |
1808 |
+ |
{ finalMomentum = trackMomentum ; finalMomentumError = errorTrackMomentum_ ; } |
1809 |
+ |
else |
1810 |
+ |
{ finalMomentum = regression_energy; finalMomentumError = regression_energy_error ; } |
1811 |
+ |
} |
1812 |
+ |
} |
1813 |
+ |
} |
1814 |
+ |
else |
1815 |
+ |
{ |
1816 |
+ |
// combination |
1817 |
+ |
finalMomentum = (regression_energy/regression_energy_error/regression_energy_error + trackMomentum/errorTrackMomentum_/errorTrackMomentum_) / |
1818 |
+ |
(1/regression_energy_error/regression_energy_error + 1/errorTrackMomentum_/errorTrackMomentum_); |
1819 |
+ |
float finalMomentumVariance = 1 / (1/regression_energy_error/regression_energy_error + 1/errorTrackMomentum_/errorTrackMomentum_); |
1820 |
+ |
finalMomentumError = sqrt(finalMomentumVariance); |
1821 |
+ |
} |
1822 |
+ |
} |
1823 |
+ |
|
1824 |
+ |
std::pair<Double_t,Double_t> value; |
1825 |
+ |
value.first = finalMomentum; |
1826 |
+ |
value.second = finalMomentumError; |
1827 |
+ |
return value; |
1828 |
+ |
|
1829 |
+ |
} |