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;
113 const EventContext& ctx = getContext();
121 const coral::Blob& blob = (**EneRescalerHdl)[
"CaloCondBlob16M"].data<coral::Blob>();
122 if (blob.size()<3)
ATH_MSG_WARNING(
"Found empty blob, no correction needed");
174 return StatusCode::SUCCESS;
197 return StatusCode::FAILURE;
201 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) );
214 std::string eSelectionText =
"";
218 else eSelectionText =
"Number of myElectronsSelection tagAndProbe Zee candidates: ";
223 ATH_MSG_INFO(
"This event has no selected electrons! Cleanning event variables and skipping writing to NTuple...");
225 return StatusCode::SUCCESS;
243 return StatusCode::SUCCESS;
250 int electronIndex = 0;
253 const auto& clusLinks = elec->caloClusterLinks();
256 for (
const auto& clusLink : clusLinks){
262 for (
auto assocCl : assocCls){
263 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) );
286 return StatusCode::SUCCESS;
304 return StatusCode::SUCCESS;
308 float electronEt = electron->e()/(cosh(electron->trackParticle()->eta()));
309 float track_p = (electron->trackParticle())->pt()*std::cosh((electron->trackParticle())->eta());
310 float eoverp = (electron->caloCluster())->e()/track_p;
312 m_el_Pt->push_back(electron->pt());
313 m_el_et->push_back(electronEt);
314 m_el_Eta->push_back(electron->eta());
315 m_el_Phi->push_back(electron->phi());
316 m_el_m->push_back(electron->m());
318 return StatusCode::SUCCESS;
328 float bestDeltaZ0Sin = 9999.0, bestZfromVertex = 9999.0, bestXFromVertex = 9999.0, bestYFromVertex = 9999.0, bestDeltaZ0 = 9999.0;
329 double bestD0Sig = 9999.0;
331 bool isAnyClosestVtx =
false;
335 float zFromVertex = vxIter->z();
336 float delta_z0 = fabs(trackElectron->
z0() + trackElectron->
vz() - zFromVertex);
337 float delta_z0_sin = delta_z0 * sin(trackElectron->
theta());
342 isAnyClosestVtx =
true;
344 ATH_MSG_DEBUG (
"(dumpPrimVertexAssocToElectron) Vertex "<< vtxCounter <<
": This is a primary vertex. |delta_z0_sin| < 0.5 mm ("<< delta_z0_sin <<
"). |d0sig| < 5 (" << d0sig <<
")");
345 if ( (fabs(delta_z0_sin) < fabs(bestDeltaZ0Sin) ) && (fabs(d0sig) < fabs(bestD0Sig)) )
348 ATH_MSG_DEBUG (
"(dumpPrimVertexAssocToElectron) New best associated Vertex. Vertex "<< vtxCounter <<
": |delta_z0_sin| < 0.5 mm ("<< delta_z0_sin <<
"). |d0sig| < 5 (" << d0sig <<
")");
350 bestDeltaZ0Sin = delta_z0_sin;
353 bestXFromVertex = vxIter->x();
354 bestYFromVertex = vxIter->y();
355 bestZfromVertex = zFromVertex;
356 bestDeltaZ0 = delta_z0;
362 if (isAnyClosestVtx){
363 m_vtx_x->push_back(bestXFromVertex);
364 m_vtx_y->push_back(bestYFromVertex);
365 m_vtx_z->push_back(bestZfromVertex);
371 ATH_MSG_ERROR(
"A pre-selected electron track has no closest vertex to dump! (weird?)");
376 return StatusCode::SUCCESS;
383 ATH_MSG_INFO (
"LB_data: lbLuminosityPerBCIDVector stored into ntuple." );
386 ATH_MSG_INFO (
"LB_data: Lumiblock "<< ei->lumiBlock() <<
" stored into ntuple." );
388 return StatusCode::SUCCESS;
401 return StatusCode::SUCCESS;
407 auto electronSelectionCnt = std::make_unique<ConstDataVector<xAOD::ElectronContainer>> (
SG::VIEW_ELEMENTS);
408 auto TagAndProbeElectronSelectionCnt = std::make_unique<ConstDataVector<xAOD::ElectronContainer>> (
SG::VIEW_ELEMENTS);
412 if (!electronsCnt.isValid()) {
414 return StatusCode::FAILURE;
418 for (
auto el : *electronsCnt){
424 electronSelectionCnt->push_back( el );
431 ATH_CHECK (
evtStore()->record( electronSelectionCnt.release(),
"MySelectedElectrons"));
432 return StatusCode::SUCCESS;
435 if (electronSelectionCnt->size() < 2){
436 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!");
437 ATH_CHECK (
evtStore()->record( TagAndProbeElectronSelectionCnt.release(),
"MyTagAndProbeElectrons"));
438 return StatusCode::SUCCESS;
448 if (elTag==elProbe)
continue;
451 if ( elTag->charge() == elProbe->charge() )
continue;
452 ATH_MSG_DEBUG (
"(TagAndProbe) Electron Pair Charges are opposite! Good.");
457 el1.SetPtEtaPhiE(elTag->pt(), elTag->trackParticle()->eta(), elTag->trackParticle()->phi(), elTag->e());
458 el2.SetPtEtaPhiE(elProbe->pt(), elProbe->trackParticle()->eta(), elProbe->trackParticle()->phi(), elProbe->e());
460 float tpPairMass = (el1 + el2).M();
463 ATH_MSG_DEBUG (
"(TagAndProbe) Electron pair not in Z mass window.");
467 ATH_MSG_INFO (
"(TagAndProbe) Electron-positron pair are in Z mass window.");
470 ATH_MSG_DEBUG (
" Probe electron not passed in Goodnes of Probe test.");
473 ATH_MSG_INFO(
"(TagAndProbe) Electron is a good probe.");
476 ATH_MSG_INFO (
"TAG: pt="<< elTag->pt() <<
" e="<< elTag->e());
477 ATH_MSG_INFO (
"PRO: pt="<< elProbe->pt() <<
" e="<< elProbe->e());
478 ATH_MSG_INFO (
"Zee: M="<< tpPairMass <<
" E="<< (el1 + el2).E());
479 m_zee_M->push_back((el1 + el2).M());
480 m_zee_E->push_back((el1 + el2).E());
481 m_zee_pt->push_back((el1 + el2).Pt());
482 m_zee_px->push_back((el1 + el2).Px());
483 m_zee_py->push_back((el1 + el2).Py());
484 m_zee_pz->push_back((el1 + el2).Pz());
485 m_zee_T->push_back((el1 + el2).T());
490 TagAndProbeElectronSelectionCnt->push_back( (elTag) );
496 ATH_CHECK (
evtStore()->record( TagAndProbeElectronSelectionCnt.release(),
"MyTagAndProbeElectrons"));
497 return StatusCode::SUCCESS;
503 auto elecCandidates = std::make_unique<ConstDataVector<xAOD::TruthParticleContainer>> (
SG::VIEW_ELEMENTS);
505 if (truthParticleCnt->size() == 0)
ATH_MSG_INFO(
"truthParticleCnt is empty!");
510 elecCandidates->push_back( truth );
512 ATH_MSG_INFO(
"(TruthParticle) Reco pt="<< recElectron->pt()<<
" , Truth pt= "<< truth->
pt());
516 if (elecCandidates->size() > 0)
ATH_MSG_INFO(
"(TruthParticle) Size of elecCandidates is "<< elecCandidates->size()<<
" !");
521 TLorentzVector elecCandidateLorentz;
522 elecCandidateLorentz.SetPtEtaPhiE(elecSelected->pt(),elecSelected->eta(),elecSelected->phi(),elecSelected->e());
541 ATH_CHECK (
evtStore()->record( elecCandidates.release(),
"MyMatchedTruthElectrons"));
542 return StatusCode::SUCCESS;
554 std::bitset<200000> larClusteredDigits;
555 std::vector<size_t> caloHashMap;
556 std::vector<HWIdentifier> channelHwidInClusterMap;
557 std::vector<int> cellIndexMap;
558 std::vector<float> channelIndexMap;
559 std::vector<int> cellLayerMap;
561 std::vector<double> clusCellEtaMap;
562 std::vector<double> clusCellPhiMap;
564 std::vector<double> channelEnergyInClusterMap;
565 std::vector<double> channelTimeInClusterMap;
566 std::vector<double> channelEtaInClusterMap;
567 std::vector<double> channelPhiInClusterMap;
568 std::vector<float> channelEffectiveSigmaClusterMap;
569 std::vector<float> channelNoiseClusterMap;
571 std::vector<int> channelCaloRegionMap;
572 std::vector<bool> badChannelMap;
575 double clusEta = cl->eta();
576 double clusPhi = cl->phi();
577 double clusEt = cl->et();
578 double clusPt = cl->pt();
579 double clusTime = cl->time();
581 ATH_MSG_DEBUG (
" (Cluster) Cluster: "<< clusIndex <<
", numberCells: " << cl->numberCells() <<
", e = " << cl->e() <<
", time = "<< clusTime <<
", pt = " << cl->pt() <<
" , eta = " << cl->eta() <<
" , phi = " << cl->phi());
584 auto itrCellsBegin = cl->cell_begin();
585 auto itrCellsEnd = cl->cell_end();
588 for (
auto itCells=itrCellsBegin; itCells != itrCellsEnd; ++itCells){
595 double eneCell = cell->energy();
596 double timeCell = cell->time();
597 double etaCell = cell->eta();
598 double phiCell = cell->phi();
599 int gainCell = cell->gain();
601 bool badCell = cell->badcell();
602 bool isTile = cell->caloDDE()->is_tile();
603 bool isLAr = cell->caloDDE()->is_lar_em();
604 bool isLArFwd = cell->caloDDE()->is_lar_fcal();
605 bool isLArHEC = cell->caloDDE()->is_lar_hec();
606 double detaCell = cell->caloDDE()->deta();
607 double dphiCell = cell->caloDDE()->dphi();
608 float effSigma =
m_noiseCDO->getEffectiveSigma(cell->ID(), cell->gain(), cell->energy());
609 float cellNoise =
m_noiseCDO->getNoise(cell->ID(), cell->gain());
616 if (isTile)
continue;
619 else if ((isLAr) || (isLArFwd) || (isLArHEC)) {
622 index = (size_t) (chidHash);
624 if (larClusteredDigits.test(
index)) {
625 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());
629 ATH_MSG_INFO (
" (Cluster)(LAr) Cell "<< cellNum <<
" in cluster is a bad LAr channel! Skipping the cell.");
632 larClusteredDigits.set(
index);
633 caloHashMap.push_back(
index);
635 clusCellEtaMap.push_back(etaCell);
636 clusCellPhiMap.push_back(phiCell);
637 cellLayerMap.push_back(layerCell);
639 channelHwidInClusterMap.push_back(chhwid);
640 channelTimeInClusterMap.push_back(timeCell);
641 channelEnergyInClusterMap.push_back(eneCell);
642 channelCaloRegionMap.push_back(caloRegionIndex);
643 channelEffectiveSigmaClusterMap.push_back(effSigma);
644 channelNoiseClusterMap.push_back(cellNoise);
648 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());
653 ATH_MSG_ERROR (
" ####### (Cluster) ERROR ! No CaloCell region was found!");
660 const double clusterDphiRaw = clusPhi - phiCell;
661 double cluster_dphi = 0.;
663 if (clusterDphiRaw < -
pi) {
664 cluster_dphi =
twopi + clusterDphiRaw;
666 else if (clusterDphiRaw >
pi) {
667 cluster_dphi = clusterDphiRaw -
twopi;
670 cluster_dphi = clusterDphiRaw;
709 if (larClusteredDigits.any()){
719 for (
unsigned int k=0 ; k < channelHwidInClusterMap.size() ; k++){
720 double cell_total_ene = 0.0;
721 double cell_total_eneCalib = 0.0;
722 double cell_hit_tof = -999.0;
724 double hit_time = 0.;
725 float hit_fSampCalib = 1.;
726 int hit_sampling = 0;
727 size_t hit_index1 = 0;
728 bool thereIsOneHitToDump =
false;
729 std::vector<double> hitEnergiesFromMap;
730 std::vector<double> hitTimesFromMap ;
732 for (
const LArHit* hit : *larHitCnt){
736 hit_index1 = (size_t) (hit_idHash);
738 if (larClusteredDigits.test(hit_index1)){
739 if (channelHwidInClusterMap[k]==hit_hwid){
741 hit_ene = hit->energy();
742 hit_time = hit->time();
745 if (hit_index1 <
m_ncell && fabs(hit_time) < 25.){
746 hitEnergiesFromMap.push_back(hit_ene);
747 hitTimesFromMap.push_back(hit_time);
748 hit_fSampCalib =
m_fSampl->FSAMPL(hit_cellID);
749 thereIsOneHitToDump =
true;
751 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]<<
".");
758 if (thereIsOneHitToDump){
759 for (
auto hitE : hitEnergiesFromMap){
760 cell_total_ene += hitE;
761 cell_total_eneCalib += hitE / hit_fSampCalib;
763 cell_hit_tof = *std::min_element(hitTimesFromMap.begin(), hitTimesFromMap.end());
777 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]<<
".");
779 hitEnergiesFromMap.clear();
780 hitTimesFromMap.clear();
789 for (
const LArDigit* dig : *LarDigCnt) {
792 size_t index = (size_t) (idHash);
794 if (larClusteredDigits.test(
index)) {
795 for (
unsigned int k=0 ; k < channelHwidInClusterMap.size() ; k++){
796 if (channelHwidInClusterMap[k]==channelID){
799 std::vector<short> larDigitShort = dig->samples();
800 std::vector<float> larDigit( larDigitShort.begin(), larDigitShort.end() );
804 const int digGain = dig->gain();
805 auto ofc_a =
m_ofcs->OFC_a(digId, digGain);
806 auto ofc_b =
m_ofcs->OFC_b(digId, digGain);
808 std::vector<double> ofca, ofcb, shape, shapeDer;
810 for (
size_t k=0; k < ofc_a.size(); k++) ofca.push_back((
double) ofc_a[k]);
811 for (
size_t k=0; k < ofc_b.size(); k++) ofcb.push_back((
double) ofc_b[k]);
813 const auto& adc2mev =
m_adc2MeVs->ADC2MEV(digId, digGain);
814 const float pedLAr =
m_peds->pedestal(digId, digGain);
815 const auto& minBiasLAr =
m_minBiasAvgs->minBiasAverage(digId);
819 auto sig_shape =
m_shapes->Shape(digId, digGain);
820 auto sig_shapeDer =
m_shapes->ShapeDer(digId, digGain);
821 for (
size_t k=0; k < sig_shape.size(); k++) shape.push_back((
double) sig_shape[k]);
822 for (
size_t k=0; k < sig_shapeDer.size(); k++) shapeDer.push_back((
double) sig_shapeDer[k]);
824 float offl_EneRescaler = 1.0;
825 const auto& offl_hv =
m_oflHVCorr->HVScaleCorr(digId);
826 if (dig_cell_hashId < m_EneRescaler->getNChans()){
827 offl_EneRescaler =
m_EneRescaler->getData(dig_cell_hashId,0,0);
857 std::vector<int> chInfo {barrelEc, posNeg, feedThr, slot, chn } ;
869 ATH_MSG_INFO (
"(Cluster) In DumpLAr Digits: ReadOutIndex "<< channelIndexMap[k] <<
". HwId " << channelID);
870 ATH_MSG_INFO (
"(Cluster) In DumpLAr Digits: ReadOutIndex "<< channelIndexMap[k] <<
" HwId.get_compact() " << channelID.
get_compact());
873 ATH_MSG_INFO(
"(Cluster) LAr OFC timeOffset: "<<
m_ofcs->timeOffset(digId, digGain) <<
", dig->hardwareID: " << digId <<
", dig->channelID: "<< channelID);
874 ATH_MSG_INFO(
"\tOFCa ("<< ofca.size()<<
"): ["<< ofca[0] <<
", " << ofca[1] <<
", " << ofca[2]<<
", " << ofca[3] <<
"]");
875 ATH_MSG_INFO(
"\tOFCb ("<< ofcb.size()<<
"): ["<< ofcb[0] <<
", " << ofcb[1] <<
", " << ofcb[2]<<
", " << ofcb[3] <<
"]");
877 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);
891 if (larClusteredDigits.any()) {
899 size_t index =
static_cast<size_t>(chHwidHash);
901 if (larClusteredDigits.test(
index)){
902 for (
unsigned int k=0 ; k < channelHwidInClusterMap.size() ; k++){
903 if (channelHwidInClusterMap[k] == channelID){
906 int rawEnergy = LArChannel.energy();
907 int rawTime = LArChannel.time();
908 uint16_t rawQuality = LArChannel.quality();
909 int provenance =
static_cast<int>(LArChannel.provenance());
910 float rawEnergyConv =
static_cast<float>(rawEnergy);
911 float rawTimeConv =
static_cast<float>(rawTime);
912 float rawQualityConv =
static_cast<float>(rawQuality);
920 std::vector<int> chInfo {barrelEc, posNeg, feedThr, slot, chn } ;
923 if ( (rawEnergy != rawEnergyConv) || (rawTime != rawTimeConv) || (rawQuality != rawQualityConv) ){
924 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 !!!");
946 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));
949 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);
959 larClusteredDigits.reset();
963 channelHwidInClusterMap.clear();
964 cellIndexMap.clear();
965 cellLayerMap.clear();
966 clusCellEtaMap.clear();
967 clusCellPhiMap.clear();
968 channelIndexMap.clear();
969 channelEnergyInClusterMap.clear();
970 channelTimeInClusterMap.clear();
971 channelEtaInClusterMap.clear();
972 channelPhiInClusterMap.clear();
973 channelEffectiveSigmaClusterMap.clear();
974 channelNoiseClusterMap.clear();
975 channelCaloRegionMap.clear();
981 ATH_MSG_INFO (
" (Cluster) ALL Digits from the cluster were dumped successfully!");}
986 return StatusCode::SUCCESS;
994 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
SG::ReadCondHandleKey< ILArOFC > m_ofcKey
SG::ReadCondHandleKey< ILArPedestal > m_pedestalKey
virtual StatusCode execute() override
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".