9#include "Identifier/Identifier.h"
12#include "CaloGeoHelpers/CaloSampling.h"
20#include "CLHEP/Units/SystemOfUnits.h"
31 ,
m_ntsvc(
"THistSvc/THistSvc", name)
36 ATH_MSG_INFO (
"(EventReader) Initializing conditions...");
73 ATH_MSG_ERROR(
" Unable to retrieve CaloIdManager from DetectoreStore");
74 return StatusCode::FAILURE;
84 m_Tree =
new TTree(
"dumpedData",
"dumpedData");
85 m_secondTree =
new TTree(
"lumiblockData",
"lumiblockData");
93 return StatusCode::FAILURE;
97 return StatusCode::FAILURE;
104 return StatusCode::FAILURE;
107 return StatusCode::SUCCESS;
120 const coral::Blob& blob = (**EneRescalerHdl)[
"CaloCondBlob16M"].data<coral::Blob>();
121 if (blob.size()<3)
ATH_MSG_WARNING(
"Found empty blob, no correction needed");
173 return StatusCode::SUCCESS;
196 return StatusCode::FAILURE;
200 ATH_MSG_DEBUG (
"Cluster "<<
m_c_clusterIndexCounter <<
", Total size: " << cl->numberCells() <<
"/ "<< cl->clusterSize() <<
", etaBE: " << cl->etaBE(2) <<
", numberCellsInSampling: " << cl->numberCellsInSampling(CaloSampling::EMB2) <<
", eta size: " << cl->etasize(CaloSampling::EMB2) <<
", phi size: " << cl->phisize(CaloSampling::EMB2) );
213 std::string eSelectionText =
"";
217 else eSelectionText =
"Number of myElectronsSelection tagAndProbe Zee candidates: ";
222 ATH_MSG_INFO(
"This event has no selected electrons! Cleanning event variables and skipping writing to NTuple...");
224 return StatusCode::SUCCESS;
242 return StatusCode::SUCCESS;
249 int electronIndex = 0;
252 const auto& clusLinks = elec->caloClusterLinks();
255 for (
const auto& clusLink : clusLinks){
261 for (
auto assocCl : assocCls){
262 ATH_MSG_DEBUG (
"AssociatedTopoCluster " <<
m_c_clusterIndexCounter <<
": e: "<< assocCl->e() <<
", eta: " << assocCl->eta() <<
", phi: " << assocCl->phi() <<
". Total size: " << assocCl->numberCells() <<
"/ "<< assocCl->clusterSize() <<
", etaBE: " << assocCl->etaBE(2) <<
", numberCellsInSampling: " << assocCl->numberCellsInSampling(CaloSampling::EMB2) <<
", eta size: " << assocCl->etasize(CaloSampling::EMB2) <<
", phi size: " << assocCl->phisize(CaloSampling::EMB2) );
285 return StatusCode::SUCCESS;
303 return StatusCode::SUCCESS;
307 float electronEt = electron->e()/(cosh(electron->trackParticle()->eta()));
308 float track_p = (electron->trackParticle())->pt()*std::cosh((electron->trackParticle())->eta());
309 float eoverp = (electron->caloCluster())->e()/track_p;
311 m_el_Pt->push_back(electron->pt());
312 m_el_et->push_back(electronEt);
313 m_el_Eta->push_back(electron->eta());
314 m_el_Phi->push_back(electron->phi());
315 m_el_m->push_back(electron->m());
317 return StatusCode::SUCCESS;
327 float bestDeltaZ0Sin = 9999.0, bestZfromVertex = 9999.0, bestXFromVertex = 9999.0, bestYFromVertex = 9999.0, bestDeltaZ0 = 9999.0;
328 double bestD0Sig = 9999.0;
330 bool isAnyClosestVtx =
false;
334 float zFromVertex = vxIter->z();
335 float delta_z0 = fabs(trackElectron->
z0() + trackElectron->
vz() - zFromVertex);
336 float delta_z0_sin = delta_z0 * sin(trackElectron->
theta());
341 isAnyClosestVtx =
true;
343 ATH_MSG_DEBUG (
"(dumpPrimVertexAssocToElectron) Vertex "<< vtxCounter <<
": This is a primary vertex. |delta_z0_sin| < 0.5 mm ("<< delta_z0_sin <<
"). |d0sig| < 5 (" << d0sig <<
")");
344 if ( (fabs(delta_z0_sin) < fabs(bestDeltaZ0Sin) ) && (fabs(d0sig) < fabs(bestD0Sig)) )
347 ATH_MSG_DEBUG (
"(dumpPrimVertexAssocToElectron) New best associated Vertex. Vertex "<< vtxCounter <<
": |delta_z0_sin| < 0.5 mm ("<< delta_z0_sin <<
"). |d0sig| < 5 (" << d0sig <<
")");
349 bestDeltaZ0Sin = delta_z0_sin;
352 bestXFromVertex = vxIter->x();
353 bestYFromVertex = vxIter->y();
354 bestZfromVertex = zFromVertex;
355 bestDeltaZ0 = delta_z0;
361 if (isAnyClosestVtx){
362 m_vtx_x->push_back(bestXFromVertex);
363 m_vtx_y->push_back(bestYFromVertex);
364 m_vtx_z->push_back(bestZfromVertex);
370 ATH_MSG_ERROR(
"A pre-selected electron track has no closest vertex to dump! (weird?)");
375 return StatusCode::SUCCESS;
382 ATH_MSG_INFO (
"LB_data: lbLuminosityPerBCIDVector stored into ntuple." );
385 ATH_MSG_INFO (
"LB_data: Lumiblock "<< ei->lumiBlock() <<
" stored into ntuple." );
387 return StatusCode::SUCCESS;
400 return StatusCode::SUCCESS;
406 auto electronSelectionCnt = std::make_unique<ConstDataVector<xAOD::ElectronContainer>> (
SG::VIEW_ELEMENTS);
407 auto TagAndProbeElectronSelectionCnt = std::make_unique<ConstDataVector<xAOD::ElectronContainer>> (
SG::VIEW_ELEMENTS);
411 if (!electronsCnt.isValid()) {
413 return StatusCode::FAILURE;
417 for (
auto el : *electronsCnt){
423 electronSelectionCnt->push_back( el );
430 ATH_CHECK (
evtStore()->record( electronSelectionCnt.release(),
"MySelectedElectrons"));
431 return StatusCode::SUCCESS;
434 if (electronSelectionCnt->size() < 2){
435 ATH_MSG_DEBUG(
"(TagAndProbe) Not enough Electrons for T&P (nElectrons="<<electronSelectionCnt->size() <<
"). Storing "<<electronSelectionCnt->size()<<
" electron on MyTagAndProbeElectrons container. This will not be dumped!");
436 ATH_CHECK (
evtStore()->record( TagAndProbeElectronSelectionCnt.release(),
"MyTagAndProbeElectrons"));
437 return StatusCode::SUCCESS;
447 if (elTag==elProbe)
continue;
450 if ( elTag->charge() == elProbe->charge() )
continue;
451 ATH_MSG_DEBUG (
"(TagAndProbe) Electron Pair Charges are opposite! Good.");
456 el1.SetPtEtaPhiE(elTag->pt(), elTag->trackParticle()->eta(), elTag->trackParticle()->phi(), elTag->e());
457 el2.SetPtEtaPhiE(elProbe->pt(), elProbe->trackParticle()->eta(), elProbe->trackParticle()->phi(), elProbe->e());
459 float tpPairMass = (el1 + el2).M();
462 ATH_MSG_DEBUG (
"(TagAndProbe) Electron pair not in Z mass window.");
466 ATH_MSG_INFO (
"(TagAndProbe) Electron-positron pair are in Z mass window.");
469 ATH_MSG_DEBUG (
" Probe electron not passed in Goodnes of Probe test.");
472 ATH_MSG_INFO(
"(TagAndProbe) Electron is a good probe.");
475 ATH_MSG_INFO (
"TAG: pt="<< elTag->pt() <<
" e="<< elTag->e());
476 ATH_MSG_INFO (
"PRO: pt="<< elProbe->pt() <<
" e="<< elProbe->e());
477 ATH_MSG_INFO (
"Zee: M="<< tpPairMass <<
" E="<< (el1 + el2).E());
478 m_zee_M->push_back((el1 + el2).M());
479 m_zee_E->push_back((el1 + el2).E());
480 m_zee_pt->push_back((el1 + el2).Pt());
481 m_zee_px->push_back((el1 + el2).Px());
482 m_zee_py->push_back((el1 + el2).Py());
483 m_zee_pz->push_back((el1 + el2).Pz());
484 m_zee_T->push_back((el1 + el2).T());
489 TagAndProbeElectronSelectionCnt->push_back( (elTag) );
495 ATH_CHECK (
evtStore()->record( TagAndProbeElectronSelectionCnt.release(),
"MyTagAndProbeElectrons"));
496 return StatusCode::SUCCESS;
502 auto elecCandidates = std::make_unique<ConstDataVector<xAOD::TruthParticleContainer>> (
SG::VIEW_ELEMENTS);
504 if (truthParticleCnt->size() == 0)
ATH_MSG_INFO(
"truthParticleCnt is empty!");
509 elecCandidates->push_back( truth );
511 ATH_MSG_INFO(
"(TruthParticle) Reco pt="<< recElectron->pt()<<
" , Truth pt= "<< truth->
pt());
515 if (elecCandidates->size() > 0)
ATH_MSG_INFO(
"(TruthParticle) Size of elecCandidates is "<< elecCandidates->size()<<
" !");
520 TLorentzVector elecCandidateLorentz;
521 elecCandidateLorentz.SetPtEtaPhiE(elecSelected->pt(),elecSelected->eta(),elecSelected->phi(),elecSelected->e());
540 ATH_CHECK (
evtStore()->record( elecCandidates.release(),
"MyMatchedTruthElectrons"));
541 return StatusCode::SUCCESS;
553 std::bitset<200000> larClusteredDigits;
554 std::vector<size_t> caloHashMap;
555 std::vector<HWIdentifier> channelHwidInClusterMap;
556 std::vector<int> cellIndexMap;
557 std::vector<float> channelIndexMap;
558 std::vector<int> cellLayerMap;
560 std::vector<double> clusCellEtaMap;
561 std::vector<double> clusCellPhiMap;
563 std::vector<double> channelEnergyInClusterMap;
564 std::vector<double> channelTimeInClusterMap;
565 std::vector<double> channelEtaInClusterMap;
566 std::vector<double> channelPhiInClusterMap;
567 std::vector<float> channelEffectiveSigmaClusterMap;
568 std::vector<float> channelNoiseClusterMap;
570 std::vector<int> channelCaloRegionMap;
571 std::vector<bool> badChannelMap;
574 double clusEta = cl->eta();
575 double clusPhi = cl->phi();
576 double clusEt = cl->et();
577 double clusPt = cl->pt();
578 double clusTime = cl->time();
580 ATH_MSG_DEBUG (
" (Cluster) Cluster: "<< clusIndex <<
", numberCells: " << cl->numberCells() <<
", e = " << cl->e() <<
", time = "<< clusTime <<
", pt = " << cl->pt() <<
" , eta = " << cl->eta() <<
" , phi = " << cl->phi());
583 auto itrCellsBegin = cl->cell_begin();
584 auto itrCellsEnd = cl->cell_end();
587 for (
auto itCells=itrCellsBegin; itCells != itrCellsEnd; ++itCells){
594 double eneCell = cell->energy();
595 double timeCell = cell->time();
596 double etaCell = cell->eta();
597 double phiCell = cell->phi();
598 int gainCell = cell->gain();
600 bool badCell = cell->badcell();
601 bool isTile = cell->caloDDE()->is_tile();
602 bool isLAr = cell->caloDDE()->is_lar_em();
603 bool isLArFwd = cell->caloDDE()->is_lar_fcal();
604 bool isLArHEC = cell->caloDDE()->is_lar_hec();
605 double detaCell = cell->caloDDE()->deta();
606 double dphiCell = cell->caloDDE()->dphi();
607 float effSigma =
m_noiseCDO->getEffectiveSigma(cell->ID(), cell->gain(), cell->energy());
608 float cellNoise =
m_noiseCDO->getNoise(cell->ID(), cell->gain());
615 if (isTile)
continue;
618 else if ((isLAr) || (isLArFwd) || (isLArHEC)) {
621 index = (size_t) (chidHash);
623 if (larClusteredDigits.test(
index)) {
624 ATH_MSG_ERROR (
" ##### (Cluster) Error LAr: Conflict index position in Channel map. Position was already filled in this event. Skipping the cell of index: " <<
index <<
" and hwid: " << chhwid <<
". Cell_E/t="<<cell->energy() <<
"/"<< cell->time() <<
". Eta/Phi: "<< cell->eta() <<
"/" << cell->phi());
628 ATH_MSG_INFO (
" (Cluster)(LAr) Cell "<< cellNum <<
" in cluster is a bad LAr channel! Skipping the cell.");
631 larClusteredDigits.set(
index);
632 caloHashMap.push_back(
index);
634 clusCellEtaMap.push_back(etaCell);
635 clusCellPhiMap.push_back(phiCell);
636 cellLayerMap.push_back(layerCell);
638 channelHwidInClusterMap.push_back(chhwid);
639 channelTimeInClusterMap.push_back(timeCell);
640 channelEnergyInClusterMap.push_back(eneCell);
641 channelCaloRegionMap.push_back(caloRegionIndex);
642 channelEffectiveSigmaClusterMap.push_back(effSigma);
643 channelNoiseClusterMap.push_back(cellNoise);
647 ATH_MSG_INFO (
" (Cluster) in IsLAr: Cell (layer) "<< cellNum <<
" (" << layerCell <<
") ID: " << cellId <<
"). HwId (B_EC/P_N/FeedTr/slot/ch) " << chhwid <<
" (" <<
m_onlineLArID->barrel_ec(chhwid) <<
"/" <<
m_onlineLArID->pos_neg(chhwid) <<
"/"<<
m_onlineLArID->feedthrough(chhwid) <<
"/" <<
m_onlineLArID->slot(chhwid) <<
"/" <<
m_onlineLArID->channel(chhwid) <<
") . Index: " <<
index <<
". ene " << eneCell <<
". time " << timeCell <<
". D_eta: " << detaCell <<
". D_phi: " << dphiCell <<
" ):" <<
". Eta/Phi: "<< cell->eta() <<
"/" << cell->phi());
652 ATH_MSG_ERROR (
" ####### (Cluster) ERROR ! No CaloCell region was found!");
659 const double clusterDphiRaw = clusPhi - phiCell;
660 double cluster_dphi = 0.;
662 if (clusterDphiRaw < -
pi) {
663 cluster_dphi =
twopi + clusterDphiRaw;
665 else if (clusterDphiRaw >
pi) {
666 cluster_dphi = clusterDphiRaw -
twopi;
669 cluster_dphi = clusterDphiRaw;
708 if (larClusteredDigits.any()){
718 for (
unsigned int k=0 ; k < channelHwidInClusterMap.size() ; k++){
719 double cell_total_ene = 0.0;
720 double cell_total_eneCalib = 0.0;
721 double cell_hit_tof = -999.0;
723 double hit_time = 0.;
724 float hit_fSampCalib = 1.;
725 int hit_sampling = 0;
726 size_t hit_index1 = 0;
727 bool thereIsOneHitToDump =
false;
728 std::vector<double> hitEnergiesFromMap;
729 std::vector<double> hitTimesFromMap ;
731 for (
const LArHit* hit : *larHitCnt){
735 hit_index1 = (size_t) (hit_idHash);
737 if (larClusteredDigits.test(hit_index1)){
738 if (channelHwidInClusterMap[k]==hit_hwid){
740 hit_ene = hit->energy();
741 hit_time = hit->time();
744 if (hit_index1 <
m_ncell && fabs(hit_time) < 25.){
745 hitEnergiesFromMap.push_back(hit_ene);
746 hitTimesFromMap.push_back(hit_time);
747 hit_fSampCalib =
m_fSampl->FSAMPL(hit_cellID);
748 thereIsOneHitToDump =
true;
750 ATH_MSG_DEBUG (
"(HITS) Match in "<< k <<
"/"<< channelHwidInClusterMap.size() <<
"! Sampling "<< hit_sampling <<
", Cell (clus): "<< channelIndexMap[k] <<
" ("<< clusIndex <<
"), ID (mapHwid / hwid / hash ): "<< hit_cellID <<
" ("<< channelHwidInClusterMap[k] <<
" / "<< hit_hwid <<
" / "<< hit_index1 <<
"), hitEne: "<< hit_ene <<
", hitTime: "<< hit_time <<
", m_fSampl: "<< hit_fSampCalib <<
". eta="<< clusCellEtaMap[k]<<
", phi="<<clusCellPhiMap[k]<<
".");
757 if (thereIsOneHitToDump){
758 for (
auto hitE : hitEnergiesFromMap){
759 cell_total_ene += hitE;
760 cell_total_eneCalib += hitE / hit_fSampCalib;
762 cell_hit_tof = *std::min_element(hitTimesFromMap.begin(), hitTimesFromMap.end());
776 ATH_MSG_DEBUG(
"(HITS) Hit from cell "<< k <<
"/"<< channelHwidInClusterMap.size() <<
" not found! Sampling "<< hit_sampling <<
", Cell (clus): "<< channelIndexMap[k] <<
" ("<< clusIndex <<
"), mapHwid: "<< channelHwidInClusterMap[k]<<
". eta="<< clusCellEtaMap[k]<<
", phi="<<clusCellPhiMap[k]<<
".");
778 hitEnergiesFromMap.clear();
779 hitTimesFromMap.clear();
788 for (
const LArDigit* dig : *LarDigCnt) {
791 size_t index = (size_t) (idHash);
793 if (larClusteredDigits.test(
index)) {
794 for (
unsigned int k=0 ; k < channelHwidInClusterMap.size() ; k++){
795 if (channelHwidInClusterMap[k]==channelID){
798 std::vector<short> larDigitShort = dig->samples();
799 std::vector<float> larDigit( larDigitShort.begin(), larDigitShort.end() );
803 const int digGain = dig->gain();
804 auto ofc_a =
m_ofcs->OFC_a(digId, digGain);
805 auto ofc_b =
m_ofcs->OFC_b(digId, digGain);
807 std::vector<double> ofca, ofcb, shape, shapeDer;
809 for (
size_t k=0; k < ofc_a.size(); k++) ofca.push_back((
double) ofc_a[k]);
810 for (
size_t k=0; k < ofc_b.size(); k++) ofcb.push_back((
double) ofc_b[k]);
812 const auto& adc2mev =
m_adc2MeVs->ADC2MEV(digId, digGain);
813 const float pedLAr =
m_peds->pedestal(digId, digGain);
814 const auto& minBiasLAr =
m_minBiasAvgs->minBiasAverage(digId);
818 auto sig_shape =
m_shapes->Shape(digId, digGain);
819 auto sig_shapeDer =
m_shapes->ShapeDer(digId, digGain);
820 for (
size_t k=0; k < sig_shape.size(); k++) shape.push_back((
double) sig_shape[k]);
821 for (
size_t k=0; k < sig_shapeDer.size(); k++) shapeDer.push_back((
double) sig_shapeDer[k]);
823 float offl_EneRescaler = 1.0;
824 const auto& offl_hv =
m_oflHVCorr->HVScaleCorr(digId);
825 if (dig_cell_hashId < m_EneRescaler->getNChans()){
826 offl_EneRescaler =
m_EneRescaler->getData(dig_cell_hashId,0,0);
856 std::vector<int> chInfo {barrelEc, posNeg, feedThr, slot, chn } ;
868 ATH_MSG_INFO (
"(Cluster) In DumpLAr Digits: ReadOutIndex "<< channelIndexMap[k] <<
". HwId " << channelID);
869 ATH_MSG_INFO (
"(Cluster) In DumpLAr Digits: ReadOutIndex "<< channelIndexMap[k] <<
" HwId.get_compact() " << channelID.
get_compact());
872 ATH_MSG_INFO(
"(Cluster) LAr OFC timeOffset: "<<
m_ofcs->timeOffset(digId, digGain) <<
", dig->hardwareID: " << digId <<
", dig->channelID: "<< channelID);
873 ATH_MSG_INFO(
"\tOFCa ("<< ofca.size()<<
"): ["<< ofca[0] <<
", " << ofca[1] <<
", " << ofca[2]<<
", " << ofca[3] <<
"]");
874 ATH_MSG_INFO(
"\tOFCb ("<< ofcb.size()<<
"): ["<< ofcb[0] <<
", " << ofcb[1] <<
", " << ofcb[2]<<
", " << ofcb[3] <<
"]");
876 ATH_MSG_DEBUG (
"(Cluster) In DumpLAr Digits: ReadOutIndex "<< channelIndexMap[k] <<
". HwId (B_EC/P_N/FeedTr/slot/ch) " << channelID <<
" (" << barrelEc <<
"/" << posNeg <<
"/"<< feedThr <<
"/" << slot <<
"/" << chn <<
". Dig (float): " << larDigit);
890 if (larClusteredDigits.any()) {
898 size_t index =
static_cast<size_t>(chHwidHash);
900 if (larClusteredDigits.test(
index)){
901 for (
unsigned int k=0 ; k < channelHwidInClusterMap.size() ; k++){
902 if (channelHwidInClusterMap[k] == channelID){
905 int rawEnergy = LArChannel.energy();
906 int rawTime = LArChannel.time();
907 uint16_t rawQuality = LArChannel.quality();
908 int provenance =
static_cast<int>(LArChannel.provenance());
909 float rawEnergyConv =
static_cast<float>(rawEnergy);
910 float rawTimeConv =
static_cast<float>(rawTime);
911 float rawQualityConv =
static_cast<float>(rawQuality);
919 std::vector<int> chInfo {barrelEc, posNeg, feedThr, slot, chn } ;
922 if ( (rawEnergy != rawEnergyConv) || (rawTime != rawTimeConv) || (rawQuality != rawQualityConv) ){
923 ATH_MSG_ERROR (
" ###### (Cluster) LAR RAW CHANNEL: Value conversion from int to float of amplitude, time or quality (uint16_t) had changed its actual value !!!");
945 ATH_MSG_INFO (
"(Cluster) In DumpLAr Raw "<< channelIndexMap[k] <<
": hardwareID (B_EC/P_N/feedThr/slot/chn): " << hardwareID <<
"(" << barrelEc <<
"/" << posNeg <<
"/" << feedThr <<
"/" << slot <<
"/" << chn <<
")" <<
". Energy: " << rawEnergyConv <<
". Time: " << rawTimeConv <<
". Provenance: " << provenance <<
". Quality: " << rawQualityConv <<
" ecut (DSPThr) = " <<
m_run2DSPThresh->tQThr(channelID));
948 ATH_MSG_INFO (
"(Cluster) In DumpLAr Raw "<< channelIndexMap[k] <<
": hardwareID (B_EC/P_N/feedThr/slot/chn): " << hardwareID <<
"(" << barrelEc <<
"/" << posNeg <<
"/" << feedThr <<
"/" << slot <<
"/" << chn <<
")" <<
". Energy: " << rawEnergyConv <<
". Time: " << rawTimeConv <<
". Provenance: " << provenance <<
". Quality: " << rawQualityConv);
958 larClusteredDigits.reset();
962 channelHwidInClusterMap.clear();
963 cellIndexMap.clear();
964 cellLayerMap.clear();
965 clusCellEtaMap.clear();
966 clusCellPhiMap.clear();
967 channelIndexMap.clear();
968 channelEnergyInClusterMap.clear();
969 channelTimeInClusterMap.clear();
970 channelEtaInClusterMap.clear();
971 channelPhiInClusterMap.clear();
972 channelEffectiveSigmaClusterMap.clear();
973 channelNoiseClusterMap.clear();
974 channelCaloRegionMap.clear();
980 ATH_MSG_INFO (
" (Cluster) ALL Digits from the cluster were dumped successfully!");}
985 return StatusCode::SUCCESS;
993 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
ServiceHandle< StoreGateSvc > & evtStore()
const ServiceHandle< StoreGateSvc > & detStore() const
Data object for each calorimeter readout cell.
static CaloCondBlobFlt * getInstance(coral::Blob &blob)
Returns a pointer to a non-const CaloCondBlobFlt.
const ILArMinBiasAverage * m_minBiasAvgs
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoSgKey
SG::ReadHandleKey< LArDigitContainer > m_larDigitCntSgKey
virtual StatusCode finalize() override
SG::ReadHandleKey< xAOD::VertexContainer > m_primVertSgKey
Gaudi::Property< bool > m_skipEmptyEvents
SG::ReadCondHandleKey< LArOnOffIdMapping > m_larCablingKey
const LArEM_ID * m_larem_id
Gaudi::Property< bool > m_getAssociatedTopoCluster
SG::ReadCondHandleKey< ILArMinBiasAverage > m_minBiasAvgKey
SG::ReadCondHandleKey< LArADC2MeV > m_adc2MeVKey
const LArADC2MeV * m_adc2MeVs
virtual StatusCode dumpOfflineSS(const xAOD::Electron *electron)
virtual StatusCode dumpTruthParticle(SG::ReadHandle< xAOD::ElectronContainer > &electronSelectionCnt, SG::ReadHandle< xAOD::TruthParticleContainer > &truthParticleCnt)
const CaloCondBlobFlt * m_EneRescaler
SG::ReadHandleKey< xAOD::ElectronContainer > m_myElecSelectionSgKey
SG::ReadCondHandleKey< LuminosityCondData > m_lumiDataKey
Gaudi::Property< bool > m_printCellsClus
Gaudi::Property< float > m_minZeeMassTP
virtual StatusCode FillNTupleWithSelectedElectrons(SG::ReadHandle< xAOD::EventInfo > &ei, SG::ReadHandle< xAOD::VertexContainer > &primVertexCnt, SG::ReadHandle< xAOD::ElectronContainer > &electronSelectionCnt, std::string &eSelectionText, const EventContext &ctx)
const ILArShape * m_shapes
virtual StatusCode dumpLumiblockInfo(SG::ReadHandle< xAOD::EventInfo > &ei)
EventReaderAlg(const std::string &name, ISvcLocator *pSvcLocator)
const ILArPedestal * m_peds
virtual StatusCode dumpClusterCells(const xAOD::CaloCluster *cl, int clusIndex, const EventContext &ctx)
SG::ReadHandleKey< xAOD::TruthEventContainer > m_truthEventCntSgKey
const LArFCAL_ID * m_larfcal_id
const LArOnlineID * m_onlineLArID
const LArHEC_ID * m_larhec_id
const CaloIdManager * m_caloIdMgr
SG::ReadHandleKey< CaloCellContainer > m_allCaloCellCntSgKey
const ILArfSampl * m_fSampl
SG::ReadCondHandleKey< AthenaAttributeList > m_run2DSPThresholdsKey
virtual StatusCode initialize() override
SG::ReadHandleKey< LArRawChannelContainer > m_larRawChCntSgKey
const CaloNoise * m_noiseCDO
virtual StatusCode dumpEventInfo(SG::ReadHandle< xAOD::EventInfo > &ei)
virtual StatusCode dumpPrimVertexAssocToElectron(const xAOD::Electron *el, SG::ReadHandle< xAOD::VertexContainer > &primVertexCnt, SG::ReadHandle< xAOD::EventInfo > &evtInfo)
SG::ReadCondHandleKey< ILArfSampl > m_fSamplKey
virtual StatusCode dumpZeeCut(SG::ReadHandle< xAOD::EventInfo > &ei, SG::ReadHandle< xAOD::VertexContainer > &primVertexCnt, const EventContext &ctx)
SG::ReadHandleKey< LArHitContainer > m_larEMBHitCntSgKey
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthParticleCntSgKey
SG::ReadCondHandleKey< ILArShape > m_shapeKey
SG::ReadHandleKey< xAOD::ElectronContainer > m_electronCntSgKey
virtual StatusCode execute(const EventContext &ctx) override
Execute method.
SG::ReadCondHandleKey< ILArOFC > m_ofcKey
SG::ReadCondHandleKey< ILArPedestal > m_pedestalKey
Gaudi::Property< float > m_maxZeeMassTP
std::unique_ptr< LArDSPThresholdsFlat > m_run2DSPThresh
virtual StatusCode dumpElectrons(const xAOD::Electron *electron)
const LuminosityCondData * m_lumis
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_caloClusSgKey
const LArOnOffIdMapping * m_larCabling
Gaudi::Property< bool > m_doClusterDump
SG::ReadCondHandleKey< CaloNoise > m_noiseCDOKey
const CaloCell_ID * m_calocell_id
const LArHVCorr * m_oflHVCorr
SG::ReadCondHandleKey< LArHVCorr > m_offlineHVScaleCorrKey
SG::ReadCondHandleKey< AthenaAttributeList > m_EneRescalerFldr
ServiceHandle< ITHistSvc > m_ntsvc
std::vector< float > * m_vtx_x
std::vector< std::vector< double > > * m_c_channelShape
std::vector< float > * m_el_deltae
std::vector< float > * m_c_channelPed
std::vector< int > * m_c_clusterIndex_rawChLvl
Gaudi::Property< float > m_d0TagSig
std::vector< double > * m_c_clusterEnergy
unsigned long long m_e_eventNumber
std::vector< float > * m_c_rawChannelQuality
std::vector< float > * m_el_fracs1
std::vector< int > * m_c_cellRegion
std::vector< unsigned int > * m_c_channelChannelIdMap
std::vector< double > * m_zee_py
std::vector< float > * m_el_wtots1
std::vector< double > * m_hits_cellPhi
std::vector< float > * m_el_Phi
std::vector< std::vector< double > > * m_c_channelShapeDer
Gaudi::Property< bool > m_doLArEMBHitsDump
float m_e_outOfTimePileUp
std::vector< int > * m_c_clusterChannelIndex
Gaudi::Property< float > m_z0Tag
void bookDatabaseBranches(TTree *tree)
std::vector< double > * m_zee_px
std::vector< double > * m_zee_deltaR
std::vector< std::vector< float > > * m_lb_bcidLuminosity
std::vector< bool > * m_c_channelBad
std::vector< double > * m_hits_energyConv
std::vector< double > * m_c_cellTime
std::vector< float > * m_c_rawChannelProv
std::vector< float > * m_el_e277
std::vector< float > * m_el_rhad
std::vector< double > * m_vtx_d0sig
std::vector< int > * m_mc_vert_status
std::vector< std::vector< double > > * m_c_channelOFCb
std::vector< float > * m_mc_vert_phi
int m_c_clusterIndexCounter
std::vector< std::vector< double > > * m_c_channelOFCa
std::vector< int > * m_mc_part_pdgId
std::vector< float > * m_c_rawChannelAmplitude
std::vector< float > * m_mc_vert_z
std::vector< double > * m_c_cellPhi
std::vector< float > * m_vtx_delta_z0_sin
std::vector< double > * m_c_cellEnergy
int getCaloRegionIndex(const CaloCell *cell)
std::vector< int > * m_c_clusterIndex_chLvl
std::vector< float > * m_mc_vert_y
std::vector< double > * m_zee_pt
std::vector< float > * m_hits_sampFrac
std::vector< int > * m_c_cellLayer
std::vector< double > * m_c_clusterPt
bool isGoodProbeElectron(const xAOD::Electron *el)
std::vector< float > * m_c_rawChannelPed
std::vector< float > * m_mc_part_pt
std::vector< int > * m_c_clusterIndex
std::vector< double > * m_c_cellToClusterDPhi
std::vector< float > * m_c_channelNoise
std::vector< int > * m_hits_clusterChannelIndex
std::vector< float > * m_el_f1
std::vector< float > * m_c_clusterRawChannelIndex
std::vector< float > * m_el_Pt
std::vector< int > * m_c_clusterCellIndex
bool isTagElectron(const xAOD::Electron *electron)
std::vector< float > * m_c_channelEffectiveSigma
std::vector< unsigned int > * m_c_channelHashMap
bool trackSelectionElectrons(const xAOD::Electron *electron, SG::ReadHandle< xAOD::VertexContainer > &primVertexCnt, SG::ReadHandle< xAOD::EventInfo > &ei)
std::vector< int > * m_c_rawChannelLayer
std::vector< std::vector< float > > * m_c_channelDigits
std::vector< double > * m_c_cellEta
std::vector< double > * m_c_cellDEta
std::vector< double > * m_hits_cellEta
Gaudi::Property< bool > m_doTruthPartDump
std::vector< float > * m_c_channelOfflEneRescaler
std::vector< double > * m_zee_M
std::vector< double > * m_zee_pz
std::vector< double > * m_c_cellDPhi
std::vector< float > * m_el_rhad1
std::vector< float > * m_el_weta1
unsigned int m_e_runNumber
EventReaderBaseAlg(const std::string &name, ISvcLocator *pSvcLocator)
std::vector< float > * m_el_et
std::vector< float > * m_vtx_z
std::vector< int > * m_lb_lumiblock
std::vector< int > * m_c_channelLayer
std::vector< double > * m_zee_T
std::vector< double > * m_c_clusterPhi
std::vector< int > * m_el_index
std::vector< std::vector< int > > * m_c_rawChannelChInfo
Gaudi::Property< bool > m_doTagAndProbe
Gaudi::Property< bool > m_isMC
std::vector< int > * m_mc_vert_uniqueID
std::vector< double > * m_hits_energy
std::vector< float > * m_c_channelADC2MEV1
std::vector< float > * m_mc_part_eta
std::vector< float > * m_mc_part_energy
std::vector< float > * m_el_Eta
std::vector< float > * m_c_channelOfflHVScale
std::vector< double > * m_c_channelTime
std::vector< int > * m_c_clusterIndex_cellLvl
std::vector< double > * m_c_clusterTime
void bookBranches(TTree *tree)
std::vector< float > * m_c_channelMinBiasAvg
std::vector< float > * m_mc_vert_time
std::vector< float > * m_c_channelDSPThreshold
std::vector< double > * m_c_clusterEta
std::vector< int > * m_c_cellGain
std::vector< float > * m_mc_part_phi
std::vector< float > * m_c_channelADC2MEV0
std::vector< int > * m_c_electronIndex_clusterLvl
std::vector< float > * m_mc_part_m
std::vector< double > * m_zee_E
std::vector< float > * m_mc_vert_x
Gaudi::Property< float > m_elecEtaCut
std::vector< float > * m_vtx_deltaZ0
std::vector< int > * m_hits_sampling
std::vector< std::vector< int > > * m_c_channelChInfo
std::vector< float > * m_c_rawChannelDSPThreshold
std::vector< float > * m_vtx_y
std::vector< double > * m_c_channelEnergy
std::vector< float > * m_el_rphi
Gaudi::Property< bool > m_doElecSelectByTrackOnly
std::vector< double > * m_c_channelOFCTimeOffset
std::vector< float > * m_el_eratio
std::vector< unsigned int > * m_hits_hash
std::vector< float > * m_c_rawChannelTime
Gaudi::Property< bool > m_noBadCells
std::vector< float > * m_mc_vert_eta
std::vector< float > * m_el_f3
std::vector< float > * m_el_reta
std::vector< int > * m_hits_clusterIndex_chLvl
std::vector< float > * m_mc_vert_perp
bool eOverPElectron(const xAOD::Electron *electron)
std::vector< float > * m_el_weta2
std::vector< float > * m_el_eoverp
std::vector< float > * m_el_m
std::vector< double > * m_c_cellToClusterDEta
std::vector< unsigned int > * m_c_rawChannelIdMap
std::vector< double > * m_hits_time
value_type get_compact() const
Get the compact id.
This is a "hash" representation of an Identifier.
value_type get_compact() const
Get the compact id.
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
Liquid Argon digit base class.
Class to store hit energy and time in LAr cell from G4 simulation.
Liquid Argon ROD output object base class.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
@ LAr
The LAr calorimeter.
@ Error
The sub-detector issued an error.
float z0() const
Returns the parameter.
float theta() const
Returns the parameter, which has range 0 to .
float vz() const
The z origin for the parameters.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
std::vector< const xAOD::CaloCluster * > getAssociatedTopoClusters(const xAOD::CaloCluster *cluster)
Return a vector of all the topo clusters associated with the egamma cluster.
@ wtots1
shower width is determined in a window detaxdphi = 0,0625 ×~0,2, corresponding typically to 20 strips...
@ e277
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 7x7
@ f3
fraction of energy reconstructed in 3rd sampling
@ f1
E1/E = fraction of energy reconstructed in the first sampling, where E1 is energy in all strips belon...
@ Eratio
(emaxs1-e2tsts1)/(emaxs1+e2tsts1)
@ fracs1
shower shape in the shower core : [E(+/-3)-E(+/-1)]/E(+/-1), where E(+/-n) is the energy in ± n strip...
@ weta2
the lateral width is calculated with a window of 3x5 cells using the energy weighted sum over all cel...
@ weta1
shower width using +/-3 strips around the one with the maximal energy deposit: w3 strips = sqrt{sum(E...
double d0significance(const xAOD::TrackParticle *tp, double d0_uncert_beam_spot_2)
const xAOD::TruthParticle * getTruthParticle(const xAOD::IParticle &p)
Return the truthParticle associated to the given IParticle (if any).
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
TruthVertex_v1 TruthVertex
Typedef to implementation.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
TruthParticle_v1 TruthParticle
Typedef to implementation.
Electron_v1 Electron
Definition of the current "egamma version".