diff --git a/Trigger/TrigMonitoring/TrigBjetMonitoring/src/HLTBjetMonTool.cxx b/Trigger/TrigMonitoring/TrigBjetMonitoring/src/HLTBjetMonTool.cxx index 76c4c184f65b473d39641ed102394c510f7fbc60..54bb43d4b5a9c569d9a16f9df67321ec4efa68b4 100755 --- a/Trigger/TrigMonitoring/TrigBjetMonitoring/src/HLTBjetMonTool.cxx +++ b/Trigger/TrigMonitoring/TrigBjetMonitoring/src/HLTBjetMonTool.cxx @@ -644,6 +644,8 @@ StatusCode HLTBjetMonTool::book(){ } // MCflag */ + ATH_MSG_DEBUG(" ========= Start retrival of Offline histograms ========== "); + std::string HistDir = "/Offline"; std::string HistExt = ""; // Get offline PV - non FTK @@ -652,7 +654,7 @@ StatusCode HLTBjetMonTool::book(){ const xAOD::VertexContainer* offlinepv = 0; if ( evtStore()->contains<xAOD::VertexContainer>("PrimaryVertices") ) { ATH_CHECK( evtStore()->retrieve(offlinepv, "PrimaryVertices") ); - ATH_MSG_DEBUG("RETRIEVED OFFLINE PV - size: " << offlinepv->size()); + ATH_MSG_DEBUG("RETRIEVED OFFLINE standard PV - size: " << offlinepv->size()); if ( offlinepv->size() ) { Eofflinepv = true; offlinepvz = offlinepv->front()->z(); @@ -677,7 +679,7 @@ StatusCode HLTBjetMonTool::book(){ EofflinepvFTK = true; offlinepvzFTK = offlinepvFTK->front()->z(); if (EofflinepvFTK) ATH_MSG_DEBUG(" 1st zPV FTK a la Carlo: " << offlinepvzFTK); - /* + /* for the moment FTK offline vertices are not moniored hist("nPV"+HistExt,"HLT/BjetMon/Shifter"+HistDir)->Fill(offlinepvFTK->size()); for (unsigned int j = 0; j<offlinepvFTK->size(); j++){ hist("PVxFTK"+HistExt,"HLT/BjetMon/Shifter"+HistDir)->Fill((*(offlinepvFTK))[j]->x()); @@ -689,13 +691,12 @@ StatusCode HLTBjetMonTool::book(){ } // evtStore // - - - ATH_MSG_DEBUG(" Offline histograms are stored successfully !"); + ATH_MSG_DEBUG(" ======== Offline histograms are retrieved successfully ! ==== Start online histograms to retrieve ====== "); // Get online combinations bool SplitKey; + bool FTKchain; // unsigned int ichain = 0; // Loop on trigger items @@ -728,9 +729,12 @@ StatusCode HLTBjetMonTool::book(){ m_trackKey = "InDetTrigTrackingxAODCnv_Bjet_IDTrig"; } // FTK input chains: John Baines and Julie Hart + FTKchain = false; std::size_t found1 = trigItem.find("FTK"); if (found1!=std::string::npos) { - m_priVtxKey = "HLT_PrimVertexFTK"; + FTKchain = true; + // m_priVtxKey = "HLT_PrimVertexFTK"; + m_priVtxKey = "PrimVertexFTK"; // Mark Sutton 17.09.17 m_trackKey = "InDetTrigTrackingxAODCnv_Bjet_FTK_IDTrig"; std::size_t found2 = trigItem.find("FTKRefit"); if (found2!=std::string::npos) { @@ -747,7 +751,7 @@ StatusCode HLTBjetMonTool::book(){ m_jetKey = "GSCJet"; } // if found4 ATH_MSG_DEBUG( " Trigger chain name: " << trigItem << " m_jetKey: " << m_jetKey << " m_priVtxKey: " << m_priVtxKey - << " m_trackKey: " << m_trackKey << " SplitKey: " << SplitKey ); + << " m_trackKey: " << m_trackKey << " SplitKey: " << SplitKey << " FTKchain: " << FTKchain); ATH_MSG_DEBUG("PROCESSING TRIGITEM - " << trigItem); // Set flag MuJet bool MuJet = false; @@ -760,6 +764,31 @@ StatusCode HLTBjetMonTool::book(){ bool HistTrack = !MuJet; bool HistBjet = !MuJet; + float m_zPrmVtx = 0.; // used for muon-jets + + // Temporary work-around to retrieve online PV for FTK chains suggested by John Baines 2017/09/12 + // Dummy vertices not treated here for the moment + + if (FTKchain) { + const xAOD::VertexContainer * onlinepvFTK = 0; + if ( evtStore()->contains<xAOD::VertexContainer>("HLT_xAOD__VertexContainer_PrimVertexFTK") ) { + ATH_CHECK( evtStore()->retrieve(onlinepvFTK, "HLT_xAOD__VertexContainer_PrimVertexFTK") ); + ATH_MSG_DEBUG("RETRIEVED FTK PV from evtStore - size: " << onlinepvFTK->size()); + if( not onlinepvFTK->empty()) { + int iVsize = onlinepvFTK->size(); + for (int iV = 0; iV < iVsize; iV++){ + ATH_MSG_DEBUG(" FTK evtStore Online PV - iV: " << iV << " z[iV]: " << (*(onlinepvFTK))[iV]->z() << " type: " << (*(onlinepvFTK))[iV]->vertexType() ); + } // for iV + if(HistPV) hist("PVx_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepvFTK))[0]->x()); + if(HistPV) hist("PVy_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepvFTK))[0]->y()); + if(HistPV) hist("PVz_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepvFTK))[0]->z()); + if(HistPV) hist("nPV_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(onlinepvFTK->size()); + m_zPrmVtx = (*(onlinepvFTK))[0]->z(); + if (EofflinepvFTK && HistPV) hist("diffzPV0offPVon"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepvFTK))[0]->z()-offlinepvzFTK); + } // not onlinepvFTK->empty() + } // if contains + } // FTK chain + Trig::FeatureContainer fc = m_trigDec->features(trigItem); const std::vector< Trig::Combination >& bjetCombs = fc.getCombinations(); ATH_MSG_DEBUG("RETRIEVED " << bjetCombs.size() << " COMBINATIONS FOR " << trigItem); @@ -769,58 +798,62 @@ StatusCode HLTBjetMonTool::book(){ for( bjetComb = bjetCombs.begin(); bjetComb != bjetCombs.end(); ++bjetComb ) { const Trig::Combination& comb = *bjetComb; ATH_MSG_DEBUG("------------ NEW COMBINATION ------------"); - float m_zPrmVtx = 0.; // used for muon-jets - - // Get online PV - bool DummyVtx = false; - const std::vector< Trig::Feature<xAOD::VertexContainer> > onlinepvs = comb.get<xAOD::VertexContainer>(m_priVtxKey); - ATH_MSG_DEBUG("RETRIEVED PV - size: " << onlinepvs.size()); - if ( not onlinepvs.empty() ) { - const xAOD::VertexContainer* onlinepv = onlinepvs[0].cptr(); - ATH_MSG_DEBUG(" for VertexContainer: " << m_priVtxKey << " nVert: " << onlinepv->size()); - if( not onlinepv->empty()) { - if ( (*(onlinepv))[0]->vertexType() == xAOD::VxType::VertexType:: PriVtx ) { // test that PriVtx is not dummy (JA) - if(HistPV) hist("PVx_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->x()); - if(HistPV) hist("PVy_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->y()); - if(HistPV) hist("PVz_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->z()); - m_zPrmVtx = (*(onlinepv))[0]->z(); - if (Eofflinepv && HistPV) hist("diffzPV0offPVon"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->z()-offlinepvz); - ATH_MSG_DEBUG(" Online PV - z[0]: " << (*(onlinepv))[0]->z()); - } // if PV not dummy - else { - DummyVtx = true; - ATH_MSG_DEBUG(" Dummy Vertex found: DummyVtx = " << DummyVtx << " m_jetKey = " << m_jetKey << " HistExt = " << HistExt << " m_priVtxKey " << m_priVtxKey ); - ATH_MSG_DEBUG(" Online dummy PV - type: " << (*(onlinepv))[0]->vertexType() << " x[0]: " << (*(onlinepv))[0]->x() - << " y[0]: " << (*(onlinepv))[0]->y() << " z[0]: " << (*(onlinepv))[0]->z() ); - int dummyflag = -1; - if(HistPV) hist("nPV_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(dummyflag); - // continue; // if vertex is dummy skip reading out the other quntities for this trigger combination (EN) - } // else - if (!DummyVtx && HistPV) hist("nPV_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(onlinepv->size()); - } // if onlinepv not empty - } // if onlinepvs not empty - if ( SplitKey && DummyVtx ) { - // for SplitJets and DummyVtx monitor Vtx with Histogram algorithm - const std::vector< Trig::Feature<xAOD::VertexContainer> >onlinepvsd = comb.get<xAOD::VertexContainer>("EFHistoPrmVtx"); - ATH_MSG_DEBUG("RETRIEVED PV with Histo algo for Split chains when Dummy vtx found with xPrimVx algo- size: " << onlinepvsd.size()); - if ( not onlinepvsd.empty() ) { - const xAOD::VertexContainer* onlinepv = onlinepvsd[0].cptr(); - ATH_MSG_DEBUG(" for VertexContainer EFHistoPrmVtx - nVert: " << onlinepv->size()); + m_zPrmVtx = 0.; // used for muon-jets + + if (!FTKchain) { + + // Get online PV + bool DummyVtx = false; + const std::vector< Trig::Feature<xAOD::VertexContainer> > onlinepvs = comb.get<xAOD::VertexContainer>(m_priVtxKey); + ATH_MSG_DEBUG("RETRIEVED PV - size: " << onlinepvs.size()); + if ( not onlinepvs.empty() ) { + const xAOD::VertexContainer* onlinepv = onlinepvs[0].cptr(); + ATH_MSG_DEBUG(" for VertexContainer: " << m_priVtxKey << " nVert: " << onlinepv->size()); if( not onlinepv->empty()) { if ( (*(onlinepv))[0]->vertexType() == xAOD::VxType::VertexType:: PriVtx ) { // test that PriVtx is not dummy (JA) - if(HistPV) hist("PVx_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->x()); - if(HistPV) hist("PVy_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->y()); - if(HistPV) hist("PVz_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->z()); - if(HistPV) hist("nPV_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(onlinepv->size()); - ATH_MSG_DEBUG(" Dummy PV using Histogram algorithm - type: " << (*(onlinepv))[0]->vertexType() << " x[0]: " << (*(onlinepv))[0]->x() + if(HistPV) hist("PVx_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->x()); + if(HistPV) hist("PVy_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->y()); + if(HistPV) hist("PVz_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->z()); + m_zPrmVtx = (*(onlinepv))[0]->z(); + if (Eofflinepv && HistPV) hist("diffzPV0offPVon"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->z()-offlinepvz); + ATH_MSG_DEBUG(" Online PV - z[0]: " << (*(onlinepv))[0]->z()); + } // if PV not dummy + else { + DummyVtx = true; + ATH_MSG_DEBUG(" Dummy Vertex found: DummyVtx = " << DummyVtx << " m_jetKey = " << m_jetKey << " HistExt = " << HistExt << " m_priVtxKey " << m_priVtxKey ); + ATH_MSG_DEBUG(" Online dummy PV - type: " << (*(onlinepv))[0]->vertexType() << " x[0]: " << (*(onlinepv))[0]->x() << " y[0]: " << (*(onlinepv))[0]->y() << " z[0]: " << (*(onlinepv))[0]->z() ); - } // if VertexType - } // if not onlinepv - } // if not onlinepvs - continue; // if vertex is dummy skip reading out the other quntities for this trigger combination (EN) - } // if DummyVtx - - ATH_MSG_DEBUG(" PV histograms are investigated "); + int dummyflag = -1; + if(HistPV) hist("nPV_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(dummyflag); + // continue; // if vertex is dummy skip reading out the other quntities for this trigger combination (EN) + } // else + if (!DummyVtx && HistPV) hist("nPV_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(onlinepv->size()); + } // if onlinepv not empty + } // if onlinepvs not empty + if ( SplitKey && DummyVtx ) { + // for SplitJets and DummyVtx monitor Vtx with Histogram algorithm + const std::vector< Trig::Feature<xAOD::VertexContainer> >onlinepvsd = comb.get<xAOD::VertexContainer>("EFHistoPrmVtx"); + ATH_MSG_DEBUG("RETRIEVED PV with Histo algo for Split chains when Dummy vtx found with xPrimVx algo- size: " << onlinepvsd.size()); + if ( not onlinepvsd.empty() ) { + const xAOD::VertexContainer* onlinepv = onlinepvsd[0].cptr(); + ATH_MSG_DEBUG(" for VertexContainer EFHistoPrmVtx - nVert: " << onlinepv->size()); + if( not onlinepv->empty()) { + if ( (*(onlinepv))[0]->vertexType() == xAOD::VxType::VertexType:: PriVtx ) { // test that PriVtx is not dummy (JA) + if(HistPV) hist("PVx_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->x()); + if(HistPV) hist("PVy_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->y()); + if(HistPV) hist("PVz_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->z()); + if(HistPV) hist("nPV_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(onlinepv->size()); + ATH_MSG_DEBUG(" Dummy PV using Histogram algorithm - type: " << (*(onlinepv))[0]->vertexType() << " x[0]: " << (*(onlinepv))[0]->x() + << " y[0]: " << (*(onlinepv))[0]->y() << " z[0]: " << (*(onlinepv))[0]->z() ); + } // if VertexType + } // if not onlinepv + } // if not onlinepvs + continue; // if vertex is dummy skip reading out the other quntities for this trigger combination (EN) + } // if DummyVtx + + } // if (!FTKchain) + + ATH_MSG_DEBUG(" ======== End of retrival of PV histograms ============== "); // Get online jet const std::vector< Trig::Feature<xAOD::JetContainer> > onlinejets = comb.get<xAOD::JetContainer>(m_jetKey); @@ -901,16 +934,22 @@ StatusCode HLTBjetMonTool::book(){ if (HistTrack) hist("nTrack"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(nTrack); for(const auto* trk : *onlinetrack) { ATH_MSG_DEBUG(" pT: " << (trk->pt())*1.e-3 << " Eta: " << trk->eta() << " Phi: " << trk->phi() << " d0: " << trk->d0() ); - if (Eofflinepv) ATH_MSG_DEBUG(" z0 - zPVoffl: " << trk->z0()+trk->vz()-offlinepvz ); // John A if (HistTrack) hist("d0"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(trk->d0()); if (HistTrack) hist("z0"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(trk->z0()); if (HistTrack) hist("ed0"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(Amg::error(trk->definingParametersCovMatrix(), 0)); if (HistTrack) hist("ez0"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(Amg::error(trk->definingParametersCovMatrix(), 1)); - if (Eofflinepv && HistTrack) hist("diffz0PV0"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(trk->z0()+trk->vz()-offlinepvz); // John Alison - float errz0 = Amg::error(trk->definingParametersCovMatrix(), 1); - if ( errz0 >0. && Eofflinepv && HistTrack) hist("sigz0PV"+HistExt,"HLT/BjetMon/"+HistDir)->Fill( (trk->z0()+trk->vz()-offlinepvz)/errz0 ); // John Alison if (HistTrack) hist("trkPt"+HistExt,"HLT/BjetMon/"+HistDir)->Fill( (trk->pt())*1.e-3 ); if (HistTrack) hist2("trkEtaPhi"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(trk->eta(),trk->phi()); + float errz0 = Amg::error(trk->definingParametersCovMatrix(), 1); + if (FTKchain) { + if (EofflinepvFTK) ATH_MSG_DEBUG(" z0 - zPVoffl: " << trk->z0()+trk->vz()-offlinepvzFTK ); // John A + if (EofflinepvFTK && HistTrack) hist("diffz0PV0"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(trk->z0()+trk->vz()-offlinepvzFTK); // John Alison + if ( errz0 >0. && EofflinepvFTK && HistTrack) hist("sigz0PV"+HistExt,"HLT/BjetMon/"+HistDir)->Fill( (trk->z0()+trk->vz()-offlinepvzFTK)/errz0 ); // John Alison + } else { // if FTKchain + if (Eofflinepv) ATH_MSG_DEBUG(" z0 - zPVoffl: " << trk->z0()+trk->vz()-offlinepvz ); // John A + if (Eofflinepv && HistTrack) hist("diffz0PV0"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(trk->z0()+trk->vz()-offlinepvz); // John Alison + if ( errz0 >0. && Eofflinepv && HistTrack) hist("sigz0PV"+HistExt,"HLT/BjetMon/"+HistDir)->Fill( (trk->z0()+trk->vz()-offlinepvz)/errz0 ); // John Alison + } // else } // for online track particles } // onlinetracks.size