diff --git a/LArCalorimeter/LArMonTools/LArMonTools/LArNoiseCorrelationMon.h b/LArCalorimeter/LArMonTools/LArMonTools/LArNoiseCorrelationMon.h deleted file mode 100755 index a5e8c89b7540812fede10c6b07ac5787e6e928f4..0000000000000000000000000000000000000000 --- a/LArCalorimeter/LArMonTools/LArMonTools/LArNoiseCorrelationMon.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration -*/ - -/** - * TBD: update - * @class LArNoiseCorrelationMon - * @author Louis Helary - * - */ - -#ifndef LARCORRMON_H -#define LARCORRMON_H - -//inheritance: -#include "AthenaMonitoring/ManagedMonitorToolBase.h" - - -//LAr services: -#include "LArElecCalib/ILArPedestal.h" -#include "LArRecConditions/ILArBadChannelMasker.h" - - - -//STL: -#include <string> - - - -class LArOnlineID; -class HWIdentifier; -class LArOnlineIDStrHelper; -class LArCablingService; -class TProfile2D_LW; -class TProfile_LW; -class TH2F_LW; - -class LArNoiseCorrelationMon: public ManagedMonitorToolBase -{ - - -public: - LArNoiseCorrelationMon(const std::string& type, - const std::string& name, - const IInterface* parent); - - /** @brief Default destructor */ - virtual ~LArNoiseCorrelationMon(); - - - - virtual StatusCode initialize() override; - virtual StatusCode finalize() override; - virtual StatusCode bookHistograms() override; - virtual StatusCode fillHistograms() override; - virtual StatusCode procHistograms() override; - -protected: - - - /** services */ - LArOnlineIDStrHelper* m_strHelper; - const LArOnlineID* m_LArOnlineIDHelper; - - /** Handle to LArCablingService */ - ToolHandle<LArCablingService> m_LArCablingService; - - /** Handle to bad-channel mask */ - ToolHandle<ILArBadChannelMasker> m_badChannelMask; - - /** Handle to pedestal */ - const DataHandle<ILArPedestal> m_larPedestal; - - -private: - - /**correlation histograms*/ - int Nchan; - double chan_low,chan_up; - std::string hist_name; - std::string hist_title; - - /** The FEB map*/ - std::map<HWIdentifier,std::pair<TH2F_LW*,std::pair<TH2F_LW*,TProfile_LW*> > > m_FEBhistograms; - std::pair<TH2F_LW*,std::pair<TH2F_LW*,TProfile_LW*> > m_histos; //for handling histograms - - /** list of FEBs to monitor. FEB names are expected to be of the type LARONLINEID defined in the package atlas/LArCalorimeter/LArMonTools/LArMonTools/LArOnlineIDStrHelper.h e.g. 'BarrelCFT00Slot02' */ - std::vector<std::string> m_FEBsToMonitor; - - /** to avoid publishing tons of histograms online, in case it's a problem*/ - bool m_publishAllFebsOnline; - - /** to avoid asking for triggers in case of a calibration run*/ - bool m_isCalibrationRun; - - /**declare identifier*/ - HWIdentifier m_febID; - int m_ch1,m_ch2; - - /**declaration variables used in joboptions*/ - bool m_IsOnline; - bool m_ignoreKnownBadChannels; - - std::string m_LArDigitContainerKey; - std::string m_larPedestalKey; - - /** Private members*/ - int m_evtId; - std::vector<std::string> m_triggers; - - /** Declare methods used*/ - bool isGoodChannel(const HWIdentifier id,const float ped) const; - void bookSelectedFEBs(MonGroup& grEMBA,MonGroup& grEMBC,MonGroup& grEMECA,MonGroup& grEMECC,MonGroup& grHECA,MonGroup& grHECC,MonGroup& grFCALA,MonGroup& grFCALC); - void bookAllFEBs(MonGroup& grEMBA,MonGroup& grEMBC,MonGroup& grEMECA,MonGroup& grEMECC,MonGroup& grHECA,MonGroup& grHECC,MonGroup& grFCALA,MonGroup& grFCALC); - void bookThisFEB(HWIdentifier id,MonGroup& grEMBA,MonGroup& grEMBC,MonGroup& grEMECA,MonGroup& grEMECC,MonGroup& grHECA,MonGroup& grHECC,MonGroup& grFCALA,MonGroup& grFCALC); - -}; - -#endif diff --git a/LArCalorimeter/LArMonTools/python/LArMonFlags.py b/LArCalorimeter/LArMonTools/python/LArMonFlags.py index 618b528ce7a955274c10e4e632344f0fb8761f13..9b6b81e31a5f6db8b5f7f972b2e875ba0cec3f64 100644 --- a/LArCalorimeter/LArMonTools/python/LArMonFlags.py +++ b/LArCalorimeter/LArMonTools/python/LArMonFlags.py @@ -122,13 +122,6 @@ class doLArDigitMon(JobProperty): StoredValue=True list+=[doLArDigitMon] -class doLArNoiseCorrelationMon(JobProperty): - """ Global switch for doLArNoiseCorrelationMon """ - statusOn=True - allowedTypes=['bool'] - StoredValue=True -list+=[doLArNoiseCorrelationMon] - class doLArNoisyROMon(JobProperty): """ Global switch for doLArNoisyROMon """ statusOn=True diff --git a/LArCalorimeter/LArMonTools/share/LArAllMonitoring_jobOptions.py b/LArCalorimeter/LArMonTools/share/LArAllMonitoring_jobOptions.py index d6b62b58e7c4a90cb61483c69de1e0ea67a4fc62..5e0d5a7a9fb1080a36f8090a93e6601d7fbd1ce6 100755 --- a/LArCalorimeter/LArMonTools/share/LArAllMonitoring_jobOptions.py +++ b/LArCalorimeter/LArMonTools/share/LArAllMonitoring_jobOptions.py @@ -51,8 +51,6 @@ else: if 'LArDigitKey' in dir() : LArMonFlags.LArDigitKey=LArDigitKey - - # This is the main block choosing what monitoring to run. # There is some repetition, but I think maintenance is easier (Rob). @@ -76,8 +74,6 @@ if jobproperties.Beam.beamType() == 'cosmics': include ("LArMonTools/LArCoverage_jobOptions.py") if LArMonFlags.doLArDigitMon(): include ("LArMonTools/LArDigitMon_jobOptions.py") - if LArMonFlags.doLArNoiseCorrelationMon(): - include ("LArMonTools/LArNoiseCorrelationMon_jobOptions.py") if LArMonFlags.doLArNoisyROMon(): include ("LArMonTools/LArNoisyROMon_jobOptions.py") if LArMonFlags.doLArRawChannelMon(): @@ -85,7 +81,6 @@ if jobproperties.Beam.beamType() == 'cosmics': if LArMonFlags.doLArCollisionTimeMon(): include("LArMonTools/LArCollisionTimeMonTool_jobOptions.py") - elif jobproperties.Beam.beamType() == 'singlebeam': if larESDMon and not athenaCommonFlags.isOnline(): if LArMonFlags.doLArAffectedRegions(): @@ -104,8 +99,6 @@ elif jobproperties.Beam.beamType() == 'singlebeam': include ("LArMonTools/LArCoverage_jobOptions.py") if LArMonFlags.doLArDigitMon(): include ("LArMonTools/LArDigitMon_jobOptions.py") - if LArMonFlags.doLArNoiseCorrelationMon(): - include ("LArMonTools/LArNoiseCorrelationMon_jobOptions.py") if LArMonFlags.doLArNoisyROMon(): include ("LArMonTools/LArNoisyROMon_jobOptions.py") if LArMonFlags.doLArRawChannelMon(): @@ -130,8 +123,6 @@ else: # should be jobproperties.Beam.beamType() =='collisions' include ("LArMonTools/LArCoverage_jobOptions.py") if LArMonFlags.doLArDigitMon(): include ("LArMonTools/LArDigitMon_jobOptions.py") - if LArMonFlags.doLArNoiseCorrelationMon(): - include ("LArMonTools/LArNoiseCorrelationMon_jobOptions.py") if LArMonFlags.doLArNoisyROMon(): include ("LArMonTools/LArNoisyROMon_jobOptions.py") if LArMonFlags.doLArRawChannelMon(): diff --git a/LArCalorimeter/LArMonTools/share/LArNoiseCorrelationMon_jobOptions.py b/LArCalorimeter/LArMonTools/share/LArNoiseCorrelationMon_jobOptions.py deleted file mode 100644 index ca2a76a166e8fb59c9aa14c1325de4d359fb9324..0000000000000000000000000000000000000000 --- a/LArCalorimeter/LArMonTools/share/LArNoiseCorrelationMon_jobOptions.py +++ /dev/null @@ -1,44 +0,0 @@ -#from LArCellRec.LArNoisyROFlags import larNoisyROFlags - -# --- for athena online running --- -if 'EventBlockSize' not in dir(): - EventBlockSize=0 - - -#Run is Online or Offline: -OnlineMode=athenaCommonFlags.isOnline() - - -#some FEBs to be monitored (updated 04 may 2018) -MiniNoiseBurstFlagging_FEBs = ["barrelAft09slot02","barrelAft09slot14","barrelAft10slot10","barrelAft10slot14","barrelAft31slot14","barrelCft08slot14","barrelCft22slot07","barrelCft27slot05","barrelCft27slot14"] -NewlyNoisy_FEBs = ["barrelCft02slot14","barrelCft01slot14","barrelCft07slot09","barrelCft07slot11","barrelCft06slot14"] -NoisyRegionsInOuterWheel_FEBs = ["endcapCft21slot04","endcapCft21slot02","endcapCft02slot04","endcapCft02slot02","endcapCft09slot02","endcapCft09slot03","endcapAft21slot04","endcapAft21slot02","endcapAft21slot03"] -NotNoisyRegionForComparison_FEBs = ["endcapAft02slot04"] - - - -###### LArNoiseCorrelationMon Configuration ############### -from LArMonTools.LArMonToolsConf import LArNoiseCorrelationMon -theLArNoiseCorrelationMon = LArNoiseCorrelationMon(name="LArNoiseCorrelationMon", - LArDigitContainerKey = LArMonFlags.LArDigitKey(), - IsOnline = OnlineMode, - IgnoreBadChannels = True, - LArBadChannelMask = theLArBadChannelsMasker, - ProcessNEvents = EventBlockSize, - TriggerChain = "HLT_noalg_zb_L1ZB, HLT_noalg_cosmiccalo_L1RD1_EMPTY", - TrigDecisionTool = "Trig::TrigDecisionTool/TrigDecisionTool", - FEBsToMonitor = NotNoisyRegionForComparison_FEBs+NoisyRegionsInOuterWheel_FEBs+NewlyNoisy_FEBs+MiniNoiseBurstFlagging_FEBs, - IsCalibrationRun = False - ) - -from AthenaCommon.BeamFlags import jobproperties -if jobproperties.Global.DataSource.get_Value() == 'data': - theLArNoiseCorrelationMon.LArPedestalKey='Pedestal' -else: - theLArNoiseCorrelationMon.LArPedestalKey='LArPedestal' - - -ToolSvc += theLArNoiseCorrelationMon -LArMon.AthenaMonTools+=[ theLArNoiseCorrelationMon ] - - diff --git a/LArCalorimeter/LArMonTools/src/LArNoiseCorrelationMon.cxx b/LArCalorimeter/LArMonTools/src/LArNoiseCorrelationMon.cxx deleted file mode 100755 index da639e8c1f7f7d2179c23e8e06a2db0fa7373d27..0000000000000000000000000000000000000000 --- a/LArCalorimeter/LArMonTools/src/LArNoiseCorrelationMon.cxx +++ /dev/null @@ -1,478 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - - -// ******************************************************************** -// NAME: LArNoiseCorrelationMon.cxx -// PACKAGE: LArMonTools -// -// AUTHOR: Margherita Spalla (margherita.spalla@cern.ch) -// Based on structure of LArDigitMon by Helary Louis (helary@lapp.in2p3.fr) -// -// Computes and plots the correlation between single channels to monitor coherent noise. -// The correlation is computed as: -// corr(i,j) = Cov(i,j)/sqrt(Var(i)*Var(j)) where 'Cov(i,j)' is the sample covariance of channels i and j and 'Var(i)' is the sample variance of channel i. -// Variance and covariance are computed summing over all samples and all events for each channel: Cov(i,j)=[sum(x_i*x_j)-N*mean_i*mean_j]/(N-1) , where x_i is the single sample minus the pedestal. -// -// Correlation histograms are computed per FEB. The FEBs to be monitored are set in the JO. -// -// Available parameters in the jo file: -// 1) List of FEBs to be monitored: should be passed as a list of strings of the form 'BarrelCFT00Slot02', case insensitive (corresponding to type LARONLINEID defined in the package atlas/LArCalorimeter/LArMonTools/LArMonTools/LArOnlineIDStrHelper.h). If the list is empty, all FEBs are monitored. -// 2) control PublishAllFebsOnline: if it is set to true, switched off the monitoring in case the FEB list (1) is empty and the algorithm is running online. -// 3) list of triggers to be used ('TriggerChain'): to be passed as a single string "trigger_chain_1, trigger_chain_2". The default is "HLT_noalg_zb_L1ZB, HLT_noalg_cosmiccalo_L1RD1_EMPTY", for the latter, only events in the abort gap are used, selection done by hand. -// 4) control IsCalibrationRun: to be set to true when running on calibration, it switches off the trigger selection. -// -// ******************************************************************** - -//Histograms -#include "GaudiKernel/ITHistSvc.h" -#include "LWHists/TProfile_LW.h" -#include "LWHists/TH2F_LW.h" - -//STL: -#include <sstream> -#include <iomanip> -#include <cmath> -#include <vector> -#include <algorithm> - -//LAr infos: -#include "Identifier/HWIdentifier.h" -#include "LArMonTools/LArOnlineIDStrHelper.h" -#include "LArTools/LArCablingService.h" -#include "LArIdentifier/LArOnlineID.h" -#include "LArRawEvent/LArDigit.h" -#include "LArRawEvent/LArDigitContainer.h" -#include "LArRecEvent/LArNoisyROSummary.h" -#include "TrigDecisionTool/TrigDecisionTool.h" - -//Events infos: -#include "xAODEventInfo/EventInfo.h" - -//for looping on FEBs -#include "LArRawEvent/LArFebHeaderContainer.h" - -//Header: -#include "LArMonTools/LArNoiseCorrelationMon.h" - - -// BCIDs of the abort gap -const int ABORT_GAP_START = 3446; -const int ABORT_GAP_END = 3563; - - - - -/*---------------------------------------------------------*/ -LArNoiseCorrelationMon::LArNoiseCorrelationMon(const std::string& type, - const std::string& name, - const IInterface* parent) - : ManagedMonitorToolBase(type, name, parent), - m_strHelper(nullptr), - m_LArOnlineIDHelper(nullptr), - m_badChannelMask("BadLArRawChannelMask")//, -{ - /** FEBs to be monitored. If empty, all FEBs will be monitored*/ - std::vector<std::string> empty_vector(0); - declareProperty("FEBsToMonitor",m_FEBsToMonitor=empty_vector); - - /** If false, blocks the histogram booking in case it's running online and the 'm_FEBsToMonitor' list is empty. i.e. prevents the algorithm from publishing one histogram per FEB for all FEBs in online environnement */ - declareProperty("PublishAllFebsOnline",m_publishAllFebsOnline=true); - - /** To be set to true when running on calibration run. It swithces off trigger selection*/ - declareProperty("IsCalibrationRun",m_isCalibrationRun=false); - - /**bool use to mask the bad channels*/ - declareProperty("IgnoreBadChannels", m_ignoreKnownBadChannels=false); - declareProperty("LArBadChannelMask",m_badChannelMask); - declareProperty("LArPedestalKey", m_larPedestalKey="Pedestal"); - declareProperty("LArDigitContainerKey", m_LArDigitContainerKey = "FREE"); - declareProperty("IsOnline", m_IsOnline=false); -} - -/*---------------------------------------------------------*/ -LArNoiseCorrelationMon::~LArNoiseCorrelationMon() -{ -} - -StatusCode -LArNoiseCorrelationMon::finalize() -{ - ATH_MSG_INFO( "finalHists LArNoiseCorrelationMon" ); - - /** delete local histograms. */ - if(m_IsOnline) - { - for (auto const& feb_entry : m_FEBhistograms) - { - m_histos=feb_entry.second; - if(m_histos.second.first) - { - LWHist::safeDelete(m_histos.second.first); - m_histos.second.first=nullptr; - } - if(m_histos.second.second) - { - LWHist::safeDelete(m_histos.second.second); - m_histos.second.second=nullptr; - } - } - } - return StatusCode::SUCCESS; - -} - -/*---------------------------------------------------------*/ -StatusCode -LArNoiseCorrelationMon::initialize() -{ - - ATH_MSG_INFO( "Initialize LArNoiseCorrelationMon" ); - - StatusCode sc; - - /** Get LAr Online Id Helper*/ - ATH_CHECK(detStore()->retrieve( m_LArOnlineIDHelper, "LArOnlineID" )); - - - /** Get LAr Calbling Service*/ - ATH_CHECK(m_LArCablingService.retrieve()); - - - /** Get bad-channel mask (only if jO IgnoreBadChannels is true)*/ - if (m_ignoreKnownBadChannels) { - ATH_CHECK(m_badChannelMask.retrieve()); - } - - /** Retrieve pedestals container*/ - sc = detStore()->regHandle(m_larPedestal,m_larPedestalKey); - if (sc.isFailure()) { - ATH_MSG_ERROR( "could not register handle for pedestal " ); - return StatusCode::FAILURE; - } - - - /** get the trigger list from the 'm_triggerChainProp'*/ - m_triggers.clear(); - if(m_isCalibrationRun) { - ATH_MSG_INFO( "Running as 'calibration run'. No trigger selection will be applied."); - } - else { - ATH_MSG_DEBUG( "Parsing trigger chain list" ); - sc=ManagedMonitorToolBase::parseList(m_triggerChainProp, m_triggers); - if(sc.isFailure()) { - ATH_MSG_ERROR( "Error parsing the trigger chain list, exiting." ); - return StatusCode::FAILURE; - } - } - - return ManagedMonitorToolBase::initialize(); -} - -/*---------------------------------------------------------*/ -StatusCode -LArNoiseCorrelationMon::bookHistograms() -{ - /** lar noise correlation */ - Nchan=128; - chan_low=-0.5; - chan_up=127.5; - - MonGroup GroupEMBA( this, "/LAr/NoiseCorrelation/EMBA", run, ATTRIB_MANAGED ); - MonGroup GroupEMBC( this, "/LAr/NoiseCorrelation/EMBC", run, ATTRIB_MANAGED ); - MonGroup GroupEMECA( this, "/LAr/NoiseCorrelation/EMECA", run, ATTRIB_MANAGED ); - MonGroup GroupEMECC( this, "/LAr/NoiseCorrelation/EMECC", run, ATTRIB_MANAGED ); - MonGroup GroupHECA( this, "/LAr/NoiseCorrelation/HECA", run, ATTRIB_MANAGED ); - MonGroup GroupHECC( this, "/LAr/NoiseCorrelation/HECC", run, ATTRIB_MANAGED ); - MonGroup GroupFCALA( this, "/LAr/NoiseCorrelation/FCALA", run, ATTRIB_MANAGED ); - MonGroup GroupFCALC( this, "/LAr/NoiseCorrelation/FCALC", run, ATTRIB_MANAGED ); - - /**declare strings for histograms title*/ - hist_name = "NoiseCorr_"; - hist_title = "LAr Noise Correlation"; - m_strHelper = new LArOnlineIDStrHelper(m_LArOnlineIDHelper); - m_strHelper->setDefaultNameType(LArOnlineIDStrHelper::LARONLINEID); - - /** Check which (if any) FEBs we want to monitor*/ - if(m_FEBsToMonitor.size()==0) { - if(!m_publishAllFebsOnline && m_IsOnline) { - ATH_MSG_INFO("'m_publishAllFebsOnline' set to false: cannot publish all FEBs in online run. Do nothing."); - return StatusCode::SUCCESS; - } - bookAllFEBs(GroupEMBA,GroupEMBC,GroupEMECA,GroupEMECC,GroupHECA,GroupHECC,GroupFCALA,GroupFCALC); - } - else bookSelectedFEBs(GroupEMBA,GroupEMBC,GroupEMECA,GroupEMECC,GroupHECA,GroupHECC,GroupFCALA,GroupFCALC); - - return StatusCode::SUCCESS; -} - - -/*---------------------------------------------------------*/ -StatusCode -LArNoiseCorrelationMon::fillHistograms() -{ - /** if publishing all FEBs has been forbidden and m_FEBsToMonitor is empty, then no histogram will be published anyway: no need to loop over channels */ - if(!m_publishAllFebsOnline && m_IsOnline && m_FEBsToMonitor.size()==0) { - ATH_MSG_DEBUG("'m_publishAllFebsOnline' set to false and empty FEB list in online run. No FEB will be monitored."); - return StatusCode::SUCCESS; - } - - ATH_MSG_DEBUG("in fillHists()" ); - - - /**EventID is a part of EventInfo, search event informations:*/ - const xAOD::EventInfo* thisEvent; - ATH_CHECK(evtStore()->retrieve(thisEvent)); - - m_evtId = thisEvent->eventNumber(); - ATH_MSG_DEBUG("Event nb " << m_evtId ); - - /** check trigger */ - bool passTrig = m_isCalibrationRun; - if(!m_isCalibrationRun) { - bool passBCID; - if(!m_trigDecTool.empty()) { - for(auto trig_chain : m_triggers) { - passBCID = ((trig_chain == "HLT_noalg_cosmiccalo_L1RD1_EMPTY")?(thisEvent->bcid() >= ABORT_GAP_START && thisEvent->bcid() <= ABORT_GAP_END):true); - passTrig=(passTrig || (passBCID && m_trigDecTool->isPassed(trig_chain))); - } - } - if (!passTrig) { - ATH_MSG_DEBUG ( " Failed trigger selection " ); - return StatusCode::SUCCESS; - } - else { - ATH_MSG_DEBUG ( " Pass trigger selection " ); - } - } - - - - /** retrieve LArDigitContainer*/ - const LArDigitContainer* pLArDigitContainer=nullptr; - ATH_CHECK(evtStore()->retrieve(pLArDigitContainer, m_LArDigitContainerKey)); - - - /** Define iterators to loop over Digits containers*/ - LArDigitContainer::const_iterator itDig = pLArDigitContainer->begin(); - LArDigitContainer::const_iterator itDig_2; - LArDigitContainer::const_iterator itDig_e= pLArDigitContainer->end(); - - /** Loop over digits*/ - for ( ; itDig!=itDig_e;++itDig) { - const LArDigit* pLArDigit = *itDig; - - /** Retrieve pedestals */ - HWIdentifier id = pLArDigit->hardwareID(); - CaloGain::CaloGain gain = pLArDigit->gain(); - float pedestal = m_larPedestal->pedestal(id,gain); - - if(!isGoodChannel(id,pedestal)) - continue; - - /** Retrieve samples*/ - const std::vector<short>* digito = &pLArDigit->samples(); - - /** Retrieve once, all the cell info:*/ - m_febID = m_LArOnlineIDHelper->feb_Id(id); - m_ch1 = m_LArOnlineIDHelper->channel(id); - - try { - m_histos=m_FEBhistograms.at(m_febID); - } - catch (const std::out_of_range& oor) { - continue; - } - - /** Second loop over digit */ - bool av_set=false; - for(itDig_2 = itDig; itDig_2!=itDig_e;++itDig_2) - { - const LArDigit* pLArDigit2 = *itDig_2; - HWIdentifier id2 = pLArDigit2->hardwareID(); - if(m_LArOnlineIDHelper->feb_Id(id2)!=m_febID) continue; - - /** get the pedestal */ - CaloGain::CaloGain gain2 = pLArDigit2->gain(); - float pedestal2 = m_larPedestal->pedestal(id2,gain2); - - if(!isGoodChannel(id2,pedestal2)) continue; - - /** get the channel number */ - m_ch2 = m_LArOnlineIDHelper->channel(id2); - - /** get the samples */ - const std::vector<short>* digito2 = &pLArDigit2->samples(); - std::vector<short>::const_iterator iterSam2= digito2->begin(); - std::vector<short>::const_iterator iterSam= digito->begin(); - - double part_sum=0; - int Nsam=pLArDigit->nsamples(); - if(pLArDigit2->nsamples()!=Nsam) - { - ATH_MSG_WARNING( Form("Different number of samples between channels %d vs %d: skipping these two",Nsam,pLArDigit2->nsamples()) ); - continue; - } - - /** Loop over the samples and compute average and sum of squares*/ - for(int i=0;i<Nsam;i++,iterSam++,iterSam2++) - { - if(!av_set) { /** fill the mean only once per ch1. This code is here to avoid one additional loop over samples before the second loop. */ - m_histos.second.second->Fill(m_ch1,(*iterSam-pedestal)); - } - /** now compute sum of squares */ - part_sum+=((*iterSam-pedestal)*(*iterSam2-pedestal2)); - } - av_set=true; /** now the average is set and I won't do this again in next ch2 loop*/ - m_histos.second.first->Fill(m_ch1,m_ch2,part_sum); - m_histos.second.first->Fill(m_ch2,m_ch1,part_sum); - }/** End of second loop on LArDigit*/ - }/** End of loop on LArDigit*/ - - - /** compute correlation and update the published plot once per LB */ - if(endOfLumiBlockFlag() || endOfEventsBlockFlag()) - { - double mean1,mean2; - double sumVar1,sumVar2; - double N; - double cor; - for (auto const& feb_entry : m_FEBhistograms) - { - m_histos=feb_entry.second; - for(int i=1;i<=Nchan;i++) - { - mean1=m_histos.second.second->GetBinContent(i); - sumVar1=m_histos.second.first->GetBinContent(i,i); - N=m_histos.second.second->GetBinEntries(i); - if(N==0) - { - ATH_MSG_DEBUG( "Bin " << i << " has 0 entries" ); - continue; - } - for(int j=i+1;j<=Nchan;j++) - { - mean2=m_histos.second.second->GetBinContent(j); - sumVar2=m_histos.second.first->GetBinContent(j,j); - if((sumVar1-N*mean1*mean1)*(sumVar2-N*mean2*mean2)==0) { - ATH_MSG_DEBUG( "sigma_i*sigma_j is zero for bin (" << i << "," << j << "). Correlation cannot be computed." ); - continue; - } - cor=(m_histos.second.first->GetBinContent(i,j)-N*mean1*mean2)/TMath::Sqrt((sumVar1-N*mean1*mean1)*(sumVar2-N*mean2*mean2)); - m_histos.first->SetBinContent(i,j,cor); - m_histos.first->SetBinContent(j,i,cor); - } - } - } - } - - return StatusCode::SUCCESS; -} - -/*---------------------------------------------------------*/ -StatusCode LArNoiseCorrelationMon::procHistograms() -{ - if(endOfRunFlag()) - { - if(m_IsOnline) - { - for (auto const& feb_entry : m_FEBhistograms) - { - m_histos=feb_entry.second; - if(m_histos.second.first) m_histos.second.first->Reset(); - if(m_histos.second.second) m_histos.second.second->Reset(); - } - } - } - return StatusCode::SUCCESS; -} - - -/*---------------------------------------------------------*/ -/** check if channel is ok for monitoring */ - bool LArNoiseCorrelationMon::isGoodChannel(const HWIdentifier ID,const float ped) const - { - /** Remove problematic channels*/ - if (m_ignoreKnownBadChannels && m_badChannelMask->cellShouldBeMasked(ID)) - return false; - - /**skip cells with no pedestals reference in db.*/ - if(ped <= (1.0+LArElecCalib::ERRORCODE)) - return false; - - /**skip disconnected channels:*/ - if(!m_LArCablingService->isOnlineConnected(ID)) - return false; - - return true; - } - - -/*---------------------------------------------------------*/ -/**Loops on selected FEBS to book and define histograms.*/ -void LArNoiseCorrelationMon::bookSelectedFEBs(MonGroup& grEMBA,MonGroup& grEMBC,MonGroup& grEMECA,MonGroup& grEMECC,MonGroup& grHECA,MonGroup& grHECC,MonGroup& grFCALA,MonGroup& grFCALC) -{ - ATH_MSG_INFO( "Booking selected FEBs: " << m_FEBsToMonitor.size() << " provided." ); - std::string aFEB; /**aFEB is the feb to monitor*/ - HWIdentifier febid; - for(uint feb_i=0;feb_i<m_FEBsToMonitor.size();feb_i++) { - aFEB=m_FEBsToMonitor[feb_i]; - febid=m_strHelper->feb_id(aFEB); - if(!febid.is_valid()) { - ATH_MSG_WARNING( "FEB id " << aFEB << " not valid. It will not be monitored." ); - continue; - } - bookThisFEB(febid,grEMBA,grEMBC,grEMECA,grEMECC,grHECA,grHECC,grFCALA,grFCALC); - } -} - - -/*---------------------------------------------------------*/ -/**Loops on all FEBS to book and define histograms.*/ -void LArNoiseCorrelationMon::bookAllFEBs(MonGroup& grEMBA,MonGroup& grEMBC,MonGroup& grEMECA,MonGroup& grEMECC,MonGroup& grHECA,MonGroup& grHECC,MonGroup& grFCALA,MonGroup& grFCALC) -{ - ATH_MSG_INFO( "No selected FEBs provided: booking all FEBs."); - - /** loop on FEBs to init histograms */ - std::vector<HWIdentifier>::const_iterator feb_it = m_LArOnlineIDHelper->feb_begin(); - std::vector<HWIdentifier>::const_iterator feb_it_e = m_LArOnlineIDHelper->feb_end(); - for ( ; feb_it!=feb_it_e;++feb_it) { - bookThisFEB((*feb_it),grEMBA,grEMBC,grEMECA,grEMECC,grHECA,grHECC,grFCALA,grFCALC); - } -} - -/*---------------------------------------------------------*/ -/**Book and defines histogramms for a given FEB.*/ -void LArNoiseCorrelationMon::bookThisFEB(HWIdentifier id,MonGroup& grEMBA,MonGroup& grEMBC,MonGroup& grEMECA,MonGroup& grEMECC,MonGroup& grHECA,MonGroup& grHECC,MonGroup& grFCALA,MonGroup& grFCALC) -{ - std::string this_name=m_strHelper->feb_str(id); - TH2F_LW* h_corr = TH2F_LW::create((hist_name+this_name).c_str(), hist_title.c_str(),Nchan,chan_low,chan_up,Nchan,chan_low,chan_up); - TH2F_LW* h_TMP_sums = TH2F_LW::create((hist_name+this_name+"_TMP_sum").c_str(),(hist_title+" TMP sum").c_str(),Nchan,chan_low,chan_up,Nchan,chan_low,chan_up); - TProfile_LW* h_av = TProfile_LW::create((hist_name+this_name+"_TMP_av").c_str(),(hist_title+" TMP av").c_str(),Nchan,chan_low,chan_up,"s"); - m_FEBhistograms[id]=std::make_pair(h_corr,std::make_pair(h_TMP_sums,h_av)); - - if(m_LArOnlineIDHelper->isEMBchannel(id)) { - if(m_LArOnlineIDHelper->pos_neg(id)==1) grEMBA.regHist(h_corr).ignore(); - else grEMBC.regHist(h_corr).ignore(); - } - else - if(m_LArOnlineIDHelper->isEMECchannel(id)) { - if(m_LArOnlineIDHelper->pos_neg(id)==1) grEMECA.regHist(h_corr).ignore(); - else grEMECC.regHist(h_corr).ignore(); - } - else - if(m_LArOnlineIDHelper->isHECchannel(id)) { - if(m_LArOnlineIDHelper->pos_neg(id)==1) grHECA.regHist(h_corr).ignore(); - else grHECC.regHist(h_corr).ignore(); - } - else - if(m_LArOnlineIDHelper->isFCALchannel(id)) { - if(m_LArOnlineIDHelper->pos_neg(id)==1) grFCALA.regHist(h_corr).ignore(); - else grFCALC.regHist(h_corr).ignore(); - } -} - - - - diff --git a/LArCalorimeter/LArMonTools/src/components/LArMonTools_entries.cxx b/LArCalorimeter/LArMonTools/src/components/LArMonTools_entries.cxx index 4b37f1e7cb36a575f3dfe4fd913823902e145952..99b2388f95aae1e38897ded9fd0cb9aba26f317b 100755 --- a/LArCalorimeter/LArMonTools/src/components/LArMonTools_entries.cxx +++ b/LArCalorimeter/LArMonTools/src/components/LArMonTools_entries.cxx @@ -8,7 +8,6 @@ #include "LArMonTools/LArAffectedRegions.h" #include "LArMonTools/LArHVCorrectionMonTool.h" #include "LArMonTools/LArNoisyROMon.h" -#include "LArMonTools/LArNoiseCorrelationMon.h" #include "GaudiKernel/DeclareFactoryEntries.h" @@ -18,7 +17,6 @@ DECLARE_TOOL_FACTORY(LArCollisionTimeMonTool) DECLARE_TOOL_FACTORY(LArCosmicsMonTool) DECLARE_TOOL_FACTORY(LArCoverage) DECLARE_TOOL_FACTORY(LArDigitMon) -DECLARE_TOOL_FACTORY(LArNoiseCorrelationMon) DECLARE_TOOL_FACTORY(LArRODMonTool) DECLARE_TOOL_FACTORY(LArAffectedRegions) DECLARE_TOOL_FACTORY(LArHVCorrectionMonTool) @@ -32,7 +30,6 @@ DECLARE_FACTORY_ENTRIES(LArMonTools) { DECLARE_ALGTOOL(LArCosmicsMonTool) DECLARE_ALGTOOL(LArCoverage) DECLARE_ALGTOOL(LArDigitMon) - DECLARE_ALGTOOL(LArNoiseCorrelationMon) DECLARE_ALGTOOL(LArRODMonTool) DECLARE_ALGTOOL(LArAffectedRegions) DECLARE_ALGTOOL(LArHVCorrectionMonTool)