diff --git a/TileCalorimeter/TileMonitoring/TileMonitoring/ITileStuckBitsProbsTool.h b/TileCalorimeter/TileMonitoring/TileMonitoring/ITileStuckBitsProbsTool.h new file mode 100644 index 0000000000000000000000000000000000000000..cc1975e8736c0dd346452d198495e1d9ff624a71 --- /dev/null +++ b/TileCalorimeter/TileMonitoring/TileMonitoring/ITileStuckBitsProbsTool.h @@ -0,0 +1,25 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef TILEMONITORING_ITILESTUCKBITSPROBSTOOL_H +#define TILEMONITORING_ITILESTUCKBITSPROBSTOOL_H + +class TTree; + +class ITileStuckBitsProbsTool: virtual public IAlgTool { + public: + + virtual ~ITileStuckBitsProbsTool() {} + + static const InterfaceID& interfaceID() { + static const InterfaceID IID_ITileStuckBitsProbsTool("ITileStuckBitsProbsTool", 1, 0); + return IID_ITileStuckBitsProbsTool; + } + + virtual const uint8_t* stuckBitProb (int ros, int module, int channel, int gain) const = 0; + virtual void saveStuckBitsProbabilities(TTree* tree) = 0; +}; + + +#endif diff --git a/TileCalorimeter/TileMonitoring/TileMonitoring/TileDigitsMonTool.h b/TileCalorimeter/TileMonitoring/TileMonitoring/TileDigitsMonTool.h index 989793063d959538897a27c75072cca65478cab6..7a1d1a5698b785984fc628779628f7c4b0f8b02e 100755 --- a/TileCalorimeter/TileMonitoring/TileMonitoring/TileDigitsMonTool.h +++ b/TileCalorimeter/TileMonitoring/TileMonitoring/TileDigitsMonTool.h @@ -11,19 +11,22 @@ // // // ******************************************************************** -#ifndef TILEDIGITSMONTOOL_H -#define TILEDIGITSMONTOOL_H +#ifndef TILEMONITORING_TILEDIGITSMONTOOL_H +#define TILEMONITORING_TILEDIGITSMONTOOL_H #include "TileMonitoring/TilePaterMonTool.h" +#include "TileMonitoring/ITileStuckBitsProbsTool.h" class TileBeamInfoProvider; class TileCondToolNoiseSample; + /** @class TileDigitsMonTool * @brief Class for TileCal monitoring at digits level */ -class TileDigitsMonTool: public TilePaterMonTool { +class TileDigitsMonTool: public TilePaterMonTool + , virtual public ITileStuckBitsProbsTool { public: @@ -42,7 +45,8 @@ class TileDigitsMonTool: public TilePaterMonTool { void bookHists(int ros, int drawer); void drawHists(int ros, int drawer, std::string moduleName); - const signed char * stuckBitProb (int ros=0, int module=0, int channel=0, int gain=0); + const uint8_t* stuckBitProb (int ros, int module, int channel, int gain) const; + void saveStuckBitsProbabilities(TTree* tree); private: @@ -53,7 +57,7 @@ class TileDigitsMonTool: public TilePaterMonTool { /** A crude method to check Read-Out ADC channel stuckbits. */ int stuckBits_Amp(TH1S *hist, int adc); - int stuckBits_Amp2(TH1S *hist, int adc, TH2C *outhist = NULL, int ch = 0, signed char *stuck_probs = NULL); + int stuckBits_Amp2(TH1S *hist, int adc, TH2C *outhist = NULL, int ch = 0, uint8_t *stuck_probs = NULL); /** Method to check global CRC and DMU CRC. */ void CRCcheck(uint32_t crc32, uint32_t crcMask, int headsize, int ros, int drawer); @@ -80,8 +84,7 @@ class TileDigitsMonTool: public TilePaterMonTool { return false; // no error else return true; //error - } - ; + }; /// Function to check that the DMU header parity is correct /// Parity of the DMU header should be odd @@ -126,7 +129,7 @@ class TileDigitsMonTool: public TilePaterMonTool { double m_meanAmp[5][64][2][48]; double m_meanAmp_ij[5][64][2][48][48]; double m_cov_ratio[5][64][2]; //covariance ratio printed in covariance plots - signed char m_stuck_probs[5][64][48][2][10]; + uint8_t m_stuck_probs[5][64][48][2][10]; bool m_allHistsFilled; //vector to hold data corruption information diff --git a/TileCalorimeter/TileMonitoring/TileMonitoring/TileJetMonTool.h b/TileCalorimeter/TileMonitoring/TileMonitoring/TileJetMonTool.h index c4fc146c15451b719c417651bb4ffe24d2bd7953..4604ea914cb0cd6ea6f30a4fc5bb63edeb550ea5 100644 --- a/TileCalorimeter/TileMonitoring/TileMonitoring/TileJetMonTool.h +++ b/TileCalorimeter/TileMonitoring/TileMonitoring/TileJetMonTool.h @@ -20,7 +20,10 @@ // to use JVT #include "AsgTools/ToolHandle.h" //#include "JetMomentTools/JetVertexTaggerTool.h" +#define JVT +#ifdef JVT #include "JetInterface/IJetUpdateJvt.h" +#endif // Jet cleaning #include "JetInterface/IJetSelector.h" //#include "JetSelectorTools/JetCleaningTool.h" @@ -122,9 +125,11 @@ class TileJetMonTool: public TileFatherMonTool { bool m_do_event_cleaning, m_do_jet_cleaning; float m_jet_tracking_eta_limit; float m_jet_jvt_threshold; + bool m_first_event; // JVT - // JetVertexTaggerTool* pjvtag; +#ifdef JVT ToolHandle<IJetUpdateJvt> m_jvt; +#endif // event/jet cleaning ToolHandle<IJetSelector> m_cleaningTool; // JetCleaningTool* m_cleaningTool; diff --git a/TileCalorimeter/TileMonitoring/TileMonitoring/TileTBCellMonTool.h b/TileCalorimeter/TileMonitoring/TileMonitoring/TileTBCellMonTool.h new file mode 100755 index 0000000000000000000000000000000000000000..3e534f1ba7dcc3210fb6f7891ed9e781aedabf80 --- /dev/null +++ b/TileCalorimeter/TileMonitoring/TileMonitoring/TileTBCellMonTool.h @@ -0,0 +1,388 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// ******************************************************************** +// +// NAME: TileTBCellMonTool.h +// PACKAGE: TileMonitoring +// +// AUTHORS: Alexander Solodkov +// Luca Fiorini (Luca.Fiorini@cern.ch) +// +// ******************************************************************** +#ifndef TILETBMONTOOL_H +#define TILETBMONTOOL_H + +#include "TileMonitoring/TileFatherMonTool.h" + +class ITileBadChanTool; +class TileCell; + +/** @class TileTBCellMonTool + * @brief Class for TileCal monitoring at cell level + */ + +class TileTBCellMonTool: public TileFatherMonTool { + + public: + + TileTBCellMonTool(const std::string & type, const std::string & name, const IInterface* parent); + + ~TileTBCellMonTool(); + + StatusCode initialize(); + + //pure virtual methods + StatusCode bookHistograms(); + StatusCode fillHistograms(); + StatusCode procHistograms(); + StatusCode checkHists(bool fromFinalize); + + StatusCode bookHistTrig(int trig); + StatusCode bookHistTrigPart(int trig, int part); + + void cleanHistVec(); + bool m_isFirstEv; + private: + + void calculateSynch(); + short isCellBad(const TileCell* tile_cell); + short isAdcBad(int partition, int module, int channel, int gain); + short nAdcBad(int partition); + void FirstEvInit(); + void ShiftLumiHist(TProfile2D*, int32_t); + void fillHitMap(TH2F *hHitMap,int cellHitMap[],double energy); + //Double_t langaufun(Double_t *x, Double_t *par); + TF1 *langaufit(TH1F *his, Double_t *fitrange, Double_t *startvalues, Double_t *parlimitslo, Double_t *parlimitshi, Double_t *fitparams, Double_t *fiterrors, Double_t *ChiSqr, Int_t *NDF); + //Double_t langaufun(Double_t *x, Double_t *par); + Int_t langaupro(Double_t *params, Double_t &maxx, Double_t &FWHM); + + + ToolHandle<ITileBadChanTool> m_tileBadChanTool; //!< Tile Bad Channel tool + + bool m_doOnline; + double m_Threshold; + double m_NegThreshold; + double m_energyThresholdForTime; + double m_EneBalThreshold; + double m_TimBalThreshold; + int32_t m_TileCellTrig; + int32_t m_old_lumiblock; + int32_t m_delta_lumiblock; + int32_t m_OldLumiArray1[4][64][4]; + int32_t m_OldLumiArray2[4][64][4]; + int m_nEventsProcessed[9]; // number of processed events per trigger + std::string m_cellsContName; + + TH1F* m_tileChannelTimeLBC01[48]; + TH1F* m_tileChannelTimeEBC02[48]; + TH1F* m_tileChannelEnergyLBC01[48]; + TH1F* m_tileChannelEnergyEBC02[48]; + TH2F* m_tileChannelEnergyVsTimeLBC01[48]; + TH2F* m_tileChannelEnergyVsTimeEBC02[48]; + // TH2D* m_test; + + int m_cellsInPartition[5] = {1151, 1472, 1408, 1151, 5182}; // EBA, LBA, LBC, EBC, ALL + bool m_fillTimeHistograms; + + TH1F* m_TileTBTotalEnergyEBA; + TH2F* m_TileTBHitMapEBA; + TH1F* m_TileTBCellEneSumEBA[14]; + TH1F* m_TileTBCellEneDiffEBA[14]; + TH1F* m_TileTBCellTimeSumEBA[14]; + TH1F* m_TileTBCellTimeDiffEBA[14]; + + TH1F* m_TileTBTotalEnergyEBC; + TH2F* m_TileTBHitMapEBC; + TH1F* m_TileTBCellEneSumEBC[14]; + TH1F* m_TileTBCellEneDiffEBC[14]; + TH1F* m_TileTBCellTimeSumEBC[14]; + TH1F* m_TileTBCellTimeDiffEBC[14]; + + TH1F* m_TileTBTotalEnergyLBA; + TH2F* m_TileTBHitMapLBA; + TH1F* m_TileTBCellEneSumLBAD0; + TH1F* m_TileTBCellEneSumLBA[22]; + TH1F* m_TileTBCellEneDiffLBA[22]; + TH1F* m_TileTBCellTimeSumLBAD0; + TH1F* m_TileTBCellTimeSumLBA[22]; + TH1F* m_TileTBCellTimeDiffLBA[22]; + + TH1F* m_TileTBTotalEnergyLBC; + TH2F* m_TileTBHitMapLBC; + TH1F* m_TileTBCellEneSumLBCD0; + TH1F* m_TileTBCellEneSumLBC[22]; + TH1F* m_TileTBCellEneDiffLBC[22]; + TH1F* m_TileTBCellTimeSumLBCD0; + TH1F* m_TileTBCellTimeSumLBC[22]; + TH1F* m_TileTBCellTimeDiffLBC[22]; + //this currently only works for extended barrel + /*cellHitMap[channel][bins] + * bins=0 is the lower x bin + * bins=1 is the lower y bin + * bins=2 is the upper x bin + * bins=3 is the upper y bin + * bins=4 corresponding name in cellHitMap + * bins=5 whether or not there is C cell for long barrel + */ + int cellHitMapEB[48][5]; + int cellHitMapLB[48][6]; + int cellHitMapLB_C[8][4]; + std::string cellHitMapNameEB[14]; + std::string cellHitMapNameLB[22]; +/* + //E3 + cellHitMapEB[0][0]=-1; + cellHitMapEB[0][1]=-1; + cellHitMapEB[0][2]=-1; + cellHitMapEB[0][3]=-1; + //E4 + cellHitMapEB[1][0]=-1; + cellHitMapEB[1][1]=-1; + cellHitMapEB[1][2]=-1; + cellHitMapEB[1][3]=-1; + //D4 + cellHitMapEB[2][0]=1; + cellHitMapEB[2][1]=5; + cellHitMapEB[2][2]=3; + cellHitMapEB[2][3]=5; + //D4 + cellHitMapEB[3][0]=1; + cellHitMapEB[3][1]=5; + cellHitMapEB[3][2]=3; + cellHitMapEB[3][3]=5; + //C10 + cellHitMapEB[4][0]=3; + cellHitMapEB[4][1]=3; + cellHitMapEB[4][2]=3; + cellHitMapEB[4][3]=4; + //C10 + cellHitMapEB[5][0]=3; + cellHitMapEB[5][1]=3; + cellHitMapEB[5][2]=3; + cellHitMapEB[5][3]=4; + //A12 + cellHitMapEB[6][0]=4; + cellHitMapEB[6][1]=1; + cellHitMapEB[6][2]=5; + cellHitMapEB[6][3]=1; + //A12 + cellHitMapEB[7][0]=4; + cellHitMapEB[7][1]=1; + cellHitMapEB[7][2]=5; + cellHitMapEB[7][3]=1; + //B11 + cellHitMapEB[8][0]=4; + cellHitMapEB[8][1]=2; + cellHitMapEB[8][2]=6; + cellHitMapEB[8][3]=3; + //B11 + cellHitMapEB[9][0]=4; + cellHitMapEB[9][1]=2; + cellHitMapEB[9][2]=6; + cellHitMapEB[9][3]=3; + //A13 + cellHitMapEB[10][0]=6; + cellHitMapEB[10][1]=1; + cellHitMapEB[10][2]=8; + cellHitMapEB[10][3]=1; + //A13 + cellHitMapEB[11][0]=6; + cellHitMapEB[11][1]=1; + cellHitMapEB[11][2]=8; + cellHitMapEB[11][3]=1; + //E1 + cellHitMapEB[12][0]=-1; + cellHitMapEB[12][1]=-1; + cellHitMapEB[12][2]=-1; + cellHitMapEB[12][3]=-1; + //E2 + cellHitMapEB[13][0]=-1; + cellHitMapEB[13][1]=-1; + cellHitMapEB[13][2]=-1; + cellHitMapEB[13][3]=-1; + //B12 + cellHitMapEB[14][0]=7; + cellHitMapEB[14][1]=2; + cellHitMapEB[14][2]=9; + cellHitMapEB[14][3]=3; + //B12 + cellHitMapEB[15][0]=7; + cellHitMapEB[15][1]=2; + cellHitMapEB[15][2]=9; + cellHitMapEB[15][3]=3; + //D5 + cellHitMapEB[16][0]=4; + cellHitMapEB[16][1]=4; + cellHitMapEB[16][2]=11; + cellHitMapEB[16][3]=5; + //D5 + cellHitMapEB[17][0]=4; + cellHitMapEB[17][1]=4; + cellHitMapEB[17][2]=11; + cellHitMapEB[17][3]=5; + //E3* + cellHitMapEB[18][0]=-1; + cellHitMapEB[18][1]=-1; + cellHitMapEB[18][2]=-1; + cellHitMapEB[18][3]=-1; + //E4* + cellHitMapEB[19][0]=-1; + cellHitMapEB[19][1]=-1; + cellHitMapEB[19][2]=-1; + cellHitMapEB[19][3]=-1; + //A14 + cellHitMapEB[20][0]=9; + cellHitMapEB[20][1]=1; + cellHitMapEB[20][2]=11; + cellHitMapEB[20][3]=1; + //A14 + cellHitMapEB[21][0]=9; + cellHitMapEB[21][1]=1; + cellHitMapEB[21][2]=11; + cellHitMapEB[21][3]=1; + //B13 + cellHitMapEB[22][0]=10; + cellHitMapEB[22][1]=2; + cellHitMapEB[22][2]=12; + cellHitMapEB[22][3]=3; + //B13 + cellHitMapEB[23][0]=10; + cellHitMapEB[23][1]=2; + cellHitMapEB[23][2]=12; + cellHitMapEB[23][3]=3; + //NOTHINg + cellHitMapEB[24][0]=-1; + cellHitMapEB[24][1]=-1; + cellHitMapEB[24][2]=-1; + cellHitMapEB[24][3]=-1; + //NOTHINg + cellHitMapEB[25][0]=-1; + cellHitMapEB[25][1]=-1; + cellHitMapEB[25][2]=-1; + cellHitMapEB[25][3]=-1; + //NOTHINg + cellHitMapEB[26][0]=-1; + cellHitMapEB[26][1]=-1; + cellHitMapEB[26][2]=-1; + cellHitMapEB[26][3]=-1; + //NOTHINg + cellHitMapEB[27][0]=-1; + cellHitMapEB[27][1]=-1; + cellHitMapEB[27][2]=-1; + cellHitMapEB[27][3]=-1; + //NOTHINg + cellHitMapEB[28][0]=-1; + cellHitMapEB[28][1]=-1; + cellHitMapEB[28][2]=-1; + cellHitMapEB[28][3]=-1; + //NOTHINg + cellHitMapEB[29][0]=-1; + cellHitMapEB[29][1]=-1; + cellHitMapEB[29][2]=-1; + cellHitMapEB[29][3]=-1; + //B14 + cellHitMapEB[30][0]=13; + cellHitMapEB[30][1]=2; + cellHitMapEB[30][2]=15; + cellHitMapEB[30][3]=3; + //A15 + cellHitMapEB[31][0]=12; + cellHitMapEB[31][1]=1; + cellHitMapEB[31][2]=14; + cellHitMapEB[31][3]=1; + //A15 + cellHitMapEB[32][0]=12; + cellHitMapEB[32][1]=1; + cellHitMapEB[32][2]=14; + cellHitMapEB[32][3]=1; + //NOTHINg + cellHitMapEB[33][0]=-1; + cellHitMapEB[33][1]=-1; + cellHitMapEB[33][2]=-1; + cellHitMapEB[33][3]=-1; + //NOTHINg + cellHitMapEB[34][0]=-1; + cellHitMapEB[34][1]=-1; + cellHitMapEB[34][2]=-1; + cellHitMapEB[34][3]=-1; + //B14 + cellHitMapEB[35][0]=13; + cellHitMapEB[35][1]=2; + cellHitMapEB[35][2]=15; + cellHitMapEB[35][3]=3; + //B15 + cellHitMapEB[36][0]=16; + cellHitMapEB[36][1]=2; + cellHitMapEB[36][2]=18; + cellHitMapEB[36][3]=3; + //D6 + cellHitMapEB[37][0]=12; + cellHitMapEB[37][1]=4; + cellHitMapEB[37][2]=18; + cellHitMapEB[37][3]=5; + //D6 + cellHitMapEB[38][0]=12; + cellHitMapEB[38][1]=4; + cellHitMapEB[38][2]=18; + cellHitMapEB[38][3]=5; + //B15 + cellHitMapEB[39][0]=16; + cellHitMapEB[39][1]=2; + cellHitMapEB[39][2]=18; + cellHitMapEB[39][3]=3; + //A16 + cellHitMapEB[40][0]=15; + cellHitMapEB[40][1]=1; + cellHitMapEB[40][2]=18; + cellHitMapEB[40][3]=1; + //A16 + cellHitMapEB[41][0]=15; + cellHitMapEB[41][1]=1; + cellHitMapEB[41][2]=18; + cellHitMapEB[41][3]=1; + //NOTHINg + cellHitMapEB[42][0]=-1; + cellHitMapEB[42][1]=-1; + cellHitMapEB[42][2]=-1; + cellHitMapEB[42][3]=-1; + //NOTHINg + cellHitMapEB[43][0]=-1; + cellHitMapEB[43][1]=-1; + cellHitMapEB[43][2]=-1; + cellHitMapEB[43][3]=-1; + //NOTHINg + cellHitMapEB[44][0]=-1; + cellHitMapEB[44][1]=-1; + cellHitMapEB[44][2]=-1; + cellHitMapEB[44][3]=-1; + //NOTHINg + cellHitMapEB[45][0]=-1; + cellHitMapEB[45][1]=-1; + cellHitMapEB[45][2]=-1; + cellHitMapEB[45][3]=-1; + //NOTHINg + cellHitMapEB[46][0]=-1; + cellHitMapEB[46][1]=-1; + cellHitMapEB[46][2]=-1; + cellHitMapEB[46][3]=-1; + //NOTHINg + cellHitMapEB[47][0]=-1; + cellHitMapEB[47][1]=-1; + cellHitMapEB[47][2]=-1; + cellHitMapEB[47][3]=-1;*/ +/* +std::string m_EBcellName[48] = { "E3", "E4", "D4", "D4", "C10", "C10", "A12", "A12", "B11", "B11", "A13", "A13" + , "E1", "E2", "B12", "B12", "D5", "D5", "E3*", "E4*", "A14", "A14", "B13", "B13" + , "", "", "", "", "", "", "B14", "A15", "A15", "", "", "B14" + , "B15", "D6", "D6", "B15", "A16", "A16", "", "", "", "", "", "" }; + +std::string m_LBcellName[48] = { "D0", "A1", "B1", "B1", "A1", "A2", "B2", "B2", "A2", "A3", "A3", "B3" + , "B3", "D1", "D1", "A4", "B4", "B4", "A4", "A5", "A5", "B5", "B5", "A6" + , "D2", "D2", "A6", "B6", "B6", "A7", "", "", "A7", "B7", "B7", "A8" + , "A9", "A9", "A8", "B8", "B8", "D3", "B9", "", "D3", "A10", "A10", "B9" }; +*/ +}; + +#endif diff --git a/TileCalorimeter/TileMonitoring/cmt/requirements b/TileCalorimeter/TileMonitoring/cmt/requirements index 17590fb5538394b1b0a463bcc67369b5884944f5..1b2207465dd3df46afcf5ee3c9b5a7e3f52b7c58 100755 --- a/TileCalorimeter/TileMonitoring/cmt/requirements +++ b/TileCalorimeter/TileMonitoring/cmt/requirements @@ -52,11 +52,13 @@ apply_pattern declare_joboptions files="*.py" library TileMonitoring *.cxx components/*.cxx apply_pattern component_library -macro_append TileMonitoring_shlibflags " -L$(ROOT_home)/lib -lSpectrum" +#apply_pattern installed_library + private apply_tag ROOTGraphicsLibs +macro_append TileMonitoring_shlibflags " -L$(ROOT_home)/lib -lSpectrum" # to compile debug version in opt release # should be commented out normally diff --git a/TileCalorimeter/TileMonitoring/share/TileMon_jobOptions.py b/TileCalorimeter/TileMonitoring/share/TileMon_jobOptions.py index 61b927f58f12ce1c083f899154c840928183b7ac..139d73280d6fc8deca5480d7a0c7333904a735f2 100755 --- a/TileCalorimeter/TileMonitoring/share/TileMon_jobOptions.py +++ b/TileCalorimeter/TileMonitoring/share/TileMon_jobOptions.py @@ -122,6 +122,9 @@ if tileESDMon: , jet_JVT_threshold = 0.64 , histoPathBase = "/Tile/Jet") + if DQMonFlags.monManDataType == 'heavyioncollisions': + ToolSvc.TileJetMonTool.jetCollectionName = 'AntiKt4HIJets' + ManagedAthenaTileMon.AthenaMonTools += [ ToolSvc.TileJetMonTool ] diff --git a/TileCalorimeter/TileMonitoring/src/TileDigitsMonTool.cxx b/TileCalorimeter/TileMonitoring/src/TileDigitsMonTool.cxx index 48cddf123410464228b10173c581483ce0a4ce32..c9f8fb5bfd52ef91fda3acfc3cffa9576e2a57b0 100755 --- a/TileCalorimeter/TileMonitoring/src/TileDigitsMonTool.cxx +++ b/TileCalorimeter/TileMonitoring/src/TileDigitsMonTool.cxx @@ -37,6 +37,7 @@ #include "TColor.h" #include "TPaletteAxis.h" #include "TList.h" +#include "TTree.h" #include <iostream> #include <sstream> @@ -44,6 +45,7 @@ #include <cmath> + /*---------------------------------------------------------*/ TileDigitsMonTool::TileDigitsMonTool(const std::string & type, const std::string & name, const IInterface* parent) : TilePaterMonTool(type, name, parent) @@ -57,6 +59,7 @@ TileDigitsMonTool::TileDigitsMonTool(const std::string & type, const std::string /*---------------------------------------------------------*/ { declareInterface<IMonitorToolBase>(this); + declareInterface<ITileStuckBitsProbsTool>(this); declareProperty("bookAllDrawers", m_bookAll = false); declareProperty("book2D", m_book2D = false); @@ -841,11 +844,12 @@ StatusCode TileDigitsMonTool::finalHists() } //loop over drawer } //loop over ros + return StatusCode::SUCCESS; } /*---------------------------------------------------------*/ -const signed char * TileDigitsMonTool::stuckBitProb (int ros, int module, int channel, int gain) +const uint8_t * TileDigitsMonTool::stuckBitProb (int ros, int module, int channel, int gain) const /*---------------------------------------------------------*/ { return m_stuck_probs[ros][module][channel][gain]; @@ -1339,7 +1343,7 @@ int TileDigitsMonTool::stuckBits_Amp(TH1S * hist, int /*adc*/) { } /* version 2. */ -int TileDigitsMonTool::stuckBits_Amp2(TH1S * hist, int /*adc*/, TH2C *outhist, int ch, signed char *stuck_probs) { +int TileDigitsMonTool::stuckBits_Amp2(TH1S * hist, int /*adc*/, TH2C *outhist, int ch, uint8_t *stuck_probs) { if (hist->GetEntries() < 1000) return 0; /* too few events (1000 / N_samples) in histogram, ignore */ @@ -1433,7 +1437,7 @@ int TileDigitsMonTool::stuckBits_Amp2(TH1S * hist, int /*adc*/, TH2C *outhist, i sb_prob[sb_map[b]] = 100.; } if (stuck_probs != NULL) - stuck_probs[b] = ba0[b] == 0 ? -100 : 100; + stuck_probs[b] = ba0[b] == 0 ? 100u : 200u; continue; } double bs1 = std::fabs(bs[b]) - sqrt(std::fabs(bs[b])); @@ -1443,13 +1447,21 @@ int TileDigitsMonTool::stuckBits_Amp2(TH1S * hist, int /*adc*/, TH2C *outhist, i if (sb_prob[sb_map[b]] < 100. * bs1 / bc[b]) sb_prob[sb_map[b]] = 100. * bs1 / bc[b]; } if (stuck_probs != NULL) - stuck_probs[b] = (bs[b] < 0 ? -100. : 100.) * bs1 / bc[b]; + { + stuck_probs[b] = (uint8_t) (100. * bs1 / bc[b]); + if (bs[b] > 0) + { + stuck_probs[b] += 100u; + if (stuck_probs[b] == 100u) + stuck_probs[b] = 0u; + } + } } if ((first_non0 >= 512 && first_non0 < 1023) || (last_non0 == 511 && hist->GetBinContent(last_non0) > 3)) { is_stack = 1; sb_prob[3] = 100.; if (stuck_probs != NULL) - stuck_probs[9] = first_non0 >= 512 ? 100 : -100; + stuck_probs[9] = first_non0 >= 512 ? 200u : 100u; } if (outhist != NULL) { outhist->Fill((double) ch, 0., sb_prob[0]); @@ -1762,3 +1774,9 @@ void TileDigitsMonTool::statTestHistos(int ros, int drawer, int gain) delete ref1; } + + +void TileDigitsMonTool::saveStuckBitsProbabilities(TTree* tree) { + + tree->Branch("StuckBitsProb", m_stuck_probs, "StuckBitsProb[5][64][48][2][10]/b"); +} diff --git a/TileCalorimeter/TileMonitoring/src/TileJetMonTool.cxx b/TileCalorimeter/TileMonitoring/src/TileJetMonTool.cxx index cd4641924370511f9834d8d64f13ef0aad200a06..f08b3ba3ffc34d5875fd734586d4763617dff83d 100644 --- a/TileCalorimeter/TileMonitoring/src/TileJetMonTool.cxx +++ b/TileCalorimeter/TileMonitoring/src/TileJetMonTool.cxx @@ -55,11 +55,17 @@ using xAOD::EventInfo; /*---------------------------------------------------------*/ +#ifdef JVT TileJetMonTool::TileJetMonTool(const std::string & type, const std::string & name, const IInterface* parent) : TileFatherMonTool(type, name, parent) , m_tileBadChanTool("TileBadChanTool") , m_jvt("JVT") , m_cleaningTool("MyCleaningTool") +#else +TileJetMonTool::TileJetMonTool(const std::string & type, const std::string & name, const IInterface* parent) + : TileFatherMonTool(type, name, parent) + , m_tileBadChanTool("TileBadChanTool") +#endif /*---------------------------------------------------------*/ { declareInterface<IMonitorToolBase>(this); @@ -76,8 +82,10 @@ TileJetMonTool::TileJetMonTool(const std::string & type, const std::string & nam declareProperty("enediff_threshold", m_enediff_threshold = 2000); declareProperty("do_event_cleaning",m_do_event_cleaning = true); declareProperty("do_jet_cleaning",m_do_jet_cleaning = true); +#ifdef JVT declareProperty("useJVTTool",m_jvt); declareProperty("useJetCleaning",m_cleaningTool); +#endif declareProperty("jet_tracking_eta_limit",m_jet_tracking_eta_limit = 2.4); declareProperty("jet_JVT_threshold",m_jet_jvt_threshold = 0.64); m_path = "/Tile/Jet"; @@ -86,6 +94,9 @@ TileJetMonTool::TileJetMonTool(const std::string & type, const std::string & nam m_partname[1] = "LBC"; m_partname[2] = "EBA"; m_partname[3] = "EBC"; + + m_first_event = true; + } /*---------------------------------------------------------*/ @@ -116,26 +127,11 @@ StatusCode TileJetMonTool::initialize() { ATH_MSG_ERROR("Unable to retrieve ToolSvc"); return StatusCode::FAILURE; } +#ifdef JVT if (m_jvt.retrieve().isFailure() ) { ATH_MSG_ERROR("Unable to retrieve JVT"); return StatusCode::FAILURE; } - - /* - pjvtag = 0; - const std::string jmeno = "jvtag"; - pjvtag = new JetVertexTaggerTool(jmeno); - */ - // m_jvt = ToolHandle<IJetUpdateJvt>; - /* - bool fail = false; - fail |= pjvtag->setProperty("JVTFileName","JetMomentTools/share/JVTlikelihood_20140805.root").isFailure(); - fail |= pjvtag->initialize().isFailure(); - if ( fail ) { - ATH_MSG_ERROR("Tool initialialization failed!"); - return 1; - } - */ ATH_MSG_DEBUG("TileJetMonTool: initialized JVT updater"); ATH_MSG_DEBUG("TileJetMonTool: initializing JetCleaningTool"); @@ -150,6 +146,7 @@ StatusCode TileJetMonTool::initialize() { return StatusCode::FAILURE; } ATH_MSG_DEBUG("TileJetMonTool: initialized JetCleaningTool"); +#endif } return TileFatherMonTool::initialize(); } @@ -159,7 +156,7 @@ StatusCode TileJetMonTool::initialize() { StatusCode TileJetMonTool::bookHistograms() { /*---------------------------------------------------------*/ - return bookTimeHistograms(); + return StatusCode::SUCCESS; } @@ -180,6 +177,12 @@ StatusCode TileJetMonTool::fillHistograms() { if (!jetContainer) return StatusCode::SUCCESS; fillEvtInfo(); + if (m_first_event) { + m_first_event = false; + if (bookTimeHistograms() != StatusCode::SUCCESS) { + ATH_MSG_ERROR("Something wrong when booking histograms."); + } + } uint32_t LumiBlock = getLumiBlock(); ATH_MSG_VERBOSE("TileJetMonTool::fillHistograms(), lumiblock " << LumiBlock); @@ -248,8 +251,30 @@ StatusCode TileJetMonTool::bookTimeHistograms() { /*---------------------------------------------------------*/ ATH_MSG_INFO( "in TileJetMonTool::bookTimeHistograms()" ); - - + + // Input for axis labels as in TileCellMonTool.cxx + std::vector<std::string> cellchLabel[NPART]; + std::vector<std::string> moduleLabel[NPART]; + for (int part = 0; part < NPART; ++part) { + for (unsigned int drawer = 0; drawer < TileCalibUtils::MAX_DRAWER; ++drawer) { + if (drawer % 2 == 1) { + moduleLabel[part].push_back(" "); + } else { + moduleLabel[part].push_back(TileCalibUtils::getDrawerString(part + 1, + drawer)); + } + } + + for (unsigned int channel = 0; channel < TileCalibUtils::MAX_CHAN; ++channel) { + std::string cell_name = getCellName(part + 1, channel); + if (cell_name.empty()) cell_name += "ch"; + else cell_name += "_ch"; + cellchLabel[part].push_back(cell_name + std::to_string(channel)); + } + + } + + // book histograms for all channels, even if some of them remain empty // in the end std::string runNumStr = getRunNumStr(); @@ -364,14 +389,18 @@ StatusCode TileJetMonTool::bookTimeHistograms() { 100,-1,1)); } } - } - // average time DQ plots, per partition + } // end-of-loop over modules + // average time DQ "temperature" plots, per partition m_TilePartTimeDQ.push_back( bookProfile2D( "DQ/", - m_partname[p], - "Average_time_"+m_partname[p], + "tileJetChanTime"+m_partname[p], + "Run " + runNumStr + " Partition " + + m_partname[p] + ": Average time with jets", 64, 0.5, 64.5, 48, -0.5, 47.5, -80,80)); - + SetBinLabel(m_TilePartTimeDQ[p]->GetXaxis(), moduleLabel[p]); + SetBinLabel(m_TilePartTimeDQ[p]->GetYaxis(), cellchLabel[p]); + m_TilePartTimeDQ[p]->SetZTitle("Average Channel Time (ns)"); + m_TilePartTimeDQ[p]->SetOption("COLZ"); } // end-of-loop over partitions ATH_MSG_INFO( "All histograms booked " ); @@ -534,7 +563,7 @@ StatusCode TileJetMonTool::fillTimeHistograms(const xAOD::Jet& jet, uint32_t Lum m_TileChanTime[part1 - 1][TileCalibUtils::MAX_CHAN * module + chan1]->Fill(sLumiBlock, tilecell->time1(), 1); } // info for DQ histograms - m_TilePartTimeDQ[part1 - 1]->Fill(module+1,chan1,tilecell->time2()); + m_TilePartTimeDQ[part1 - 1]->Fill(module+1,chan1,tilecell->time1()); // general histograms, only require non-affected channels if (bad1 < 2) { m_TilePartTime[part1 - 1]->Fill(tilecell->time1()); @@ -673,6 +702,7 @@ bool TileJetMonTool::isGoodEvent() { for (const xAOD::Jet* jet : *jetContainer) { ATH_MSG_DEBUG("Jet " << ijet << ", pT " << jet->pt()/1000.0 << " GeV, eta " << jet->eta()); +#ifdef JVT if (jet->pt() > 50000) { if (m_cleaningTool->keep(*jet) == 0) return false; } else if ((jet->pt() > 20000) && (fabs(jet->eta()) < m_jet_tracking_eta_limit)) { @@ -680,6 +710,7 @@ bool TileJetMonTool::isGoodEvent() { ATH_MSG_DEBUG("... jvt = " << jvt); if ((jvt > m_jet_jvt_threshold) && (m_cleaningTool->keep(*jet) == 0)) return false; } +#endif ATH_MSG_DEBUG("... done with jet " << ijet); ijet++; } @@ -708,6 +739,7 @@ bool TileJetMonTool::isGoodJet(const xAOD::Jet& jet) { bool isBadJet = isBad(MediumBad, quality, NegE, emf, hecf, time, fmax, em_eta, chf, HecQ); return (!isBadJet); */ +#ifdef JVT if (! m_do_jet_cleaning) return true; double pt = jet.pt(); if (pt > 50000) { @@ -722,6 +754,9 @@ bool TileJetMonTool::isGoodJet(const xAOD::Jet& jet) { } else { return(true); } +#else + return(true); +#endif } /* diff --git a/TileCalorimeter/TileMonitoring/src/TileTBCellMonTool.cxx b/TileCalorimeter/TileMonitoring/src/TileTBCellMonTool.cxx new file mode 100755 index 0000000000000000000000000000000000000000..5e0700980dee3799a528fc80d16a844a3ab1beca --- /dev/null +++ b/TileCalorimeter/TileMonitoring/src/TileTBCellMonTool.cxx @@ -0,0 +1,1488 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +/// ******************************************************************** +// +// NAME: TileTBCellMonTool.cxx +// PACKAGE: TileMonitoring +// +// AUTHORS: Alexander Solodkov +// Luca Fiorini (Luca.Fiorini@cern.ch) +// +// ******************************************************************** + +#include "TileMonitoring/TileTBCellMonTool.h" +#include "TileMonitoring/PairBuilder.h" + +#include "xAODEventInfo/EventInfo.h" + +#include "CaloEvent/CaloCellContainer.h" + +#include "TileCalibBlobObjs/TileCalibUtils.h" +#include "TileIdentifier/TileHWID.h" +#include "TileConditions/TileCablingService.h" +#include "TileConditions/ITileBadChanTool.h" +#include "TileEvent/TileCell.h" + +#include "TH1F.h" +#include "TH2F.h" +#include "TProfile.h" +#include "TProfile2D.h" +#include "TString.h" +#include "TMath.h" +#include "TROOT.h" +#include "TF1.h" + +#include "CLHEP/Units/SystemOfUnits.h" + +#include <sstream> +#include <iomanip> +#include <map> + +//#include "langaufun.C" + +using CLHEP::GeV; +using CLHEP::ns; + + +// Make a TileCell namespace so this doesn't cause problems else where. +namespace TB{ +template<class T> +std::string to_string(T in){ + std::ostringstream strm; + strm << in; + return strm.str(); +} +} + +/*---------------------------------------------------------*/ +TileTBCellMonTool::TileTBCellMonTool(const std::string & type, const std::string & name, const IInterface* parent) + : TileFatherMonTool(type, name, parent) + +/*---------------------------------------------------------*/ +{ + declareInterface<IMonitorToolBase>(this); + + declareProperty("energyThreshold" , m_Threshold = 300.); //Threshold in MeV + declareProperty("energyThresholdForTime" , m_energyThresholdForTime = 0.1); //Threshold in MeV + declareProperty("negEnergyThreshold" , m_NegThreshold = -2000.); //Threshold in MeV + declareProperty("cellsContainerName" , m_cellsContName = "AllCalo"); //SG Cell Container + declareProperty("energyBalanceThreshold" , m_EneBalThreshold = 3.); //Threshold is in the energy ratio + declareProperty("TimeBalanceThreshold" , m_TimBalThreshold = 25.); //Threshold in ns + declareProperty("doOnline" , m_doOnline = false); //online mode + declareProperty("TileBadChanTool" , m_tileBadChanTool); + declareProperty("FillTimeHistograms" , m_fillTimeHistograms = false); + + //declareProperty("FillTimeHistograms" , m_fillTimeHistograms = false); + + + + + m_isFirstEv = true; + +} + +/*---------------------------------------------------------*/ +TileTBCellMonTool::~TileTBCellMonTool() { +/*---------------------------------------------------------*/ + +} + +/*---------------------------------------------------------*/ +StatusCode TileTBCellMonTool:: initialize() { +/*---------------------------------------------------------*/ + + ATH_MSG_INFO( "in initialize()" ); + //=== get TileBadChanTool + //E3 + cellHitMapEB[0][0]=-1; + cellHitMapEB[0][1]=-1; + cellHitMapEB[0][2]=-1; + cellHitMapEB[0][3]=-1; + cellHitMapEB[0][4]=-1; + //E4 + cellHitMapEB[1][0]=-1; + cellHitMapEB[1][1]=-1; + cellHitMapEB[1][2]=-1; + cellHitMapEB[1][3]=-1; + cellHitMapEB[1][4]=-1; + //D4 + cellHitMapEB[2][0]=1; + cellHitMapEB[2][1]=5; + cellHitMapEB[2][2]=3; + cellHitMapEB[2][3]=5; + cellHitMapEB[2][4]=0; + cellHitMapNameEB[0]="D4"; + //D4 + cellHitMapEB[3][0]=1; + cellHitMapEB[3][1]=5; + cellHitMapEB[3][2]=3; + cellHitMapEB[3][3]=5; + cellHitMapEB[3][4]=0; + //C10 + cellHitMapEB[4][0]=3; + cellHitMapEB[4][1]=3; + cellHitMapEB[4][2]=3; + cellHitMapEB[4][3]=4; + cellHitMapEB[4][4]=1; + cellHitMapNameEB[1]="C10"; + //C10 + cellHitMapEB[5][0]=3; + cellHitMapEB[5][1]=3; + cellHitMapEB[5][2]=3; + cellHitMapEB[5][3]=4; + cellHitMapEB[5][4]=1; + //A12 + cellHitMapEB[6][0]=4; + cellHitMapEB[6][1]=1; + cellHitMapEB[6][2]=5; + cellHitMapEB[6][3]=1; + cellHitMapEB[6][4]=2; + cellHitMapNameEB[2]="A12"; + //A12 + cellHitMapEB[7][0]=4; + cellHitMapEB[7][1]=1; + cellHitMapEB[7][2]=5; + cellHitMapEB[7][3]=1; + cellHitMapEB[7][4]=2; + //B11 + cellHitMapEB[8][0]=4; + cellHitMapEB[8][1]=2; + cellHitMapEB[8][2]=6; + cellHitMapEB[8][3]=3; + cellHitMapEB[8][4]=3; + cellHitMapNameEB[3]="B11"; + //B11 + cellHitMapEB[9][0]=4; + cellHitMapEB[9][1]=2; + cellHitMapEB[9][2]=6; + cellHitMapEB[9][3]=3; + cellHitMapEB[9][4]=3; + //A13 + cellHitMapEB[10][0]=6; + cellHitMapEB[10][1]=1; + cellHitMapEB[10][2]=8; + cellHitMapEB[10][3]=1; + cellHitMapEB[10][4]=4; + cellHitMapNameEB[4]="A13"; + //A13 + cellHitMapEB[11][0]=6; + cellHitMapEB[11][1]=1; + cellHitMapEB[11][2]=8; + cellHitMapEB[11][3]=1; + cellHitMapEB[11][4]=4; + //E1 + cellHitMapEB[12][0]=-1; + cellHitMapEB[12][1]=-1; + cellHitMapEB[12][2]=-1; + cellHitMapEB[12][3]=-1; + cellHitMapEB[12][4]=-1; + //E2 + cellHitMapEB[13][0]=-1; + cellHitMapEB[13][1]=-1; + cellHitMapEB[13][2]=-1; + cellHitMapEB[13][3]=-1; + cellHitMapEB[13][4]=-1; + //B12 + cellHitMapEB[14][0]=7; + cellHitMapEB[14][1]=2; + cellHitMapEB[14][2]=9; + cellHitMapEB[14][3]=3; + cellHitMapEB[14][4]=5; + cellHitMapNameEB[5]="B12"; + //B12 + cellHitMapEB[15][0]=7; + cellHitMapEB[15][1]=2; + cellHitMapEB[15][2]=9; + cellHitMapEB[15][3]=3; + cellHitMapEB[15][4]=5; + //D5 + cellHitMapEB[16][0]=4; + cellHitMapEB[16][1]=4; + cellHitMapEB[16][2]=11; + cellHitMapEB[16][3]=5; + cellHitMapEB[16][4]=6; + cellHitMapNameEB[6]="D5"; + //D5 + cellHitMapEB[17][0]=4; + cellHitMapEB[17][1]=4; + cellHitMapEB[17][2]=11; + cellHitMapEB[17][3]=5; + cellHitMapEB[17][4]=6; + //E3* + cellHitMapEB[18][0]=-1; + cellHitMapEB[18][1]=-1; + cellHitMapEB[18][2]=-1; + cellHitMapEB[18][3]=-1; + cellHitMapEB[18][4]=-1; + //E4* + cellHitMapEB[19][0]=-1; + cellHitMapEB[19][1]=-1; + cellHitMapEB[19][2]=-1; + cellHitMapEB[19][3]=-1; + cellHitMapEB[19][4]=-1; + //A14 + cellHitMapEB[20][0]=9; + cellHitMapEB[20][1]=1; + cellHitMapEB[20][2]=11; + cellHitMapEB[20][3]=1; + cellHitMapEB[20][4]=7; + cellHitMapNameEB[7]="A14"; + //A14 + cellHitMapEB[21][0]=9; + cellHitMapEB[21][1]=1; + cellHitMapEB[21][2]=11; + cellHitMapEB[21][3]=1; + cellHitMapEB[21][4]=7; + //B13 + cellHitMapEB[22][0]=10; + cellHitMapEB[22][1]=2; + cellHitMapEB[22][2]=12; + cellHitMapEB[22][3]=3; + cellHitMapEB[22][4]=8; + cellHitMapNameEB[8]="B13"; + //B13 + cellHitMapEB[23][0]=10; + cellHitMapEB[23][1]=2; + cellHitMapEB[23][2]=12; + cellHitMapEB[23][3]=3; + cellHitMapEB[23][4]=8; + //NOTHINg + cellHitMapEB[24][0]=-1; + cellHitMapEB[24][1]=-1; + cellHitMapEB[24][2]=-1; + cellHitMapEB[24][3]=-1; + cellHitMapEB[24][4]=-1; + //NOTHINg + cellHitMapEB[25][0]=-1; + cellHitMapEB[25][1]=-1; + cellHitMapEB[25][2]=-1; + cellHitMapEB[25][3]=-1; + cellHitMapEB[25][4]=-1; + //NOTHINg + cellHitMapEB[26][0]=-1; + cellHitMapEB[26][1]=-1; + cellHitMapEB[26][2]=-1; + cellHitMapEB[26][3]=-1; + cellHitMapEB[26][4]=-1; + //NOTHINg + cellHitMapEB[27][0]=-1; + cellHitMapEB[27][1]=-1; + cellHitMapEB[27][2]=-1; + cellHitMapEB[27][3]=-1; + cellHitMapEB[27][4]=-1; + //NOTHINg + cellHitMapEB[28][0]=-1; + cellHitMapEB[28][1]=-1; + cellHitMapEB[28][2]=-1; + cellHitMapEB[28][3]=-1; + cellHitMapEB[28][4]=-1; + //NOTHINg + cellHitMapEB[29][0]=-1; + cellHitMapEB[29][1]=-1; + cellHitMapEB[29][2]=-1; + cellHitMapEB[29][3]=-1; + cellHitMapEB[29][4]=-1; + //B14 + cellHitMapEB[30][0]=13; + cellHitMapEB[30][1]=2; + cellHitMapEB[30][2]=15; + cellHitMapEB[30][3]=3; + cellHitMapEB[30][4]=9; + cellHitMapNameEB[9]="B14"; + //A15 + cellHitMapEB[31][0]=12; + cellHitMapEB[31][1]=1; + cellHitMapEB[31][2]=14; + cellHitMapEB[31][3]=1; + cellHitMapEB[31][4]=10; + cellHitMapNameEB[10]="A15"; + //A15 + cellHitMapEB[32][0]=12; + cellHitMapEB[32][1]=1; + cellHitMapEB[32][2]=14; + cellHitMapEB[32][3]=1; + cellHitMapEB[32][4]=10; + //NOTHINg + cellHitMapEB[33][0]=-1; + cellHitMapEB[33][1]=-1; + cellHitMapEB[33][2]=-1; + cellHitMapEB[33][3]=-1; + cellHitMapEB[33][4]=-1; + //NOTHINg + cellHitMapEB[34][0]=-1; + cellHitMapEB[34][1]=-1; + cellHitMapEB[34][2]=-1; + cellHitMapEB[34][3]=-1; + cellHitMapEB[34][4]=-1; + //B14 + cellHitMapEB[35][0]=13; + cellHitMapEB[35][1]=2; + cellHitMapEB[35][2]=15; + cellHitMapEB[35][3]=3; + cellHitMapEB[35][4]=9; + //B15 + cellHitMapEB[36][0]=16; + cellHitMapEB[36][1]=2; + cellHitMapEB[36][2]=18; + cellHitMapEB[36][3]=3; + cellHitMapEB[36][4]=11; + cellHitMapNameEB[11]="B15"; + //D6 + cellHitMapEB[37][0]=12; + cellHitMapEB[37][1]=4; + cellHitMapEB[37][2]=18; + cellHitMapEB[37][3]=5; + cellHitMapEB[37][4]=12; + cellHitMapNameEB[12]="D6"; + //D6 + cellHitMapEB[38][0]=12; + cellHitMapEB[38][1]=4; + cellHitMapEB[38][2]=18; + cellHitMapEB[38][3]=5; + cellHitMapEB[38][4]=12; + //B15 + cellHitMapEB[39][0]=16; + cellHitMapEB[39][1]=2; + cellHitMapEB[39][2]=18; + cellHitMapEB[39][3]=3; + cellHitMapEB[39][4]=11; + //A16 + cellHitMapEB[40][0]=15; + cellHitMapEB[40][1]=1; + cellHitMapEB[40][2]=18; + cellHitMapEB[40][3]=1; + cellHitMapEB[40][4]=13; + cellHitMapNameEB[13]="A16"; + //A16 + cellHitMapEB[41][0]=15; + cellHitMapEB[41][1]=1; + cellHitMapEB[41][2]=18; + cellHitMapEB[41][3]=1; + cellHitMapEB[41][4]=13; + //NOTHINg + cellHitMapEB[42][0]=-1; + cellHitMapEB[42][1]=-1; + cellHitMapEB[42][2]=-1; + cellHitMapEB[42][3]=-1; + cellHitMapEB[42][4]=-1; + //NOTHINg + cellHitMapEB[43][0]=-1; + cellHitMapEB[43][1]=-1; + cellHitMapEB[43][2]=-1; + cellHitMapEB[43][3]=-1; + cellHitMapEB[43][4]=-1; + //NOTHINg + cellHitMapEB[44][0]=-1; + cellHitMapEB[44][1]=-1; + cellHitMapEB[44][2]=-1; + cellHitMapEB[44][3]=-1; + cellHitMapEB[44][4]=-1; + //NOTHINg + cellHitMapEB[45][0]=-1; + cellHitMapEB[45][1]=-1; + cellHitMapEB[45][2]=-1; + cellHitMapEB[45][3]=-1; + cellHitMapEB[45][4]=-1; + //NOTHINg + cellHitMapEB[46][0]=-1; + cellHitMapEB[46][1]=-1; + cellHitMapEB[46][2]=-1; + cellHitMapEB[46][3]=-1; + cellHitMapEB[46][4]=-1; + //NOTHINg + cellHitMapEB[47][0]=-1; + cellHitMapEB[47][1]=-1; + cellHitMapEB[47][2]=-1; + cellHitMapEB[47][3]=-1; + cellHitMapEB[47][4]=-1; + + + + //D0 + cellHitMapLB[0][0]=1; + cellHitMapLB[0][1]=35; + cellHitMapLB[0][2]=10; + cellHitMapLB[0][3]=44; + cellHitMapLB[0][4]=-1; + cellHitMapLB[0][5]=-1; + //A1 + cellHitMapLB[1][0]=1; + cellHitMapLB[1][1]=1; + cellHitMapLB[1][2]=7; + cellHitMapLB[1][3]=9; + cellHitMapLB[1][4]=0; + cellHitMapLB[1][5]=-1; + cellHitMapNameLB[0]="A1"; + //B1 + cellHitMapLB[2][0]=1; + cellHitMapLB[2][1]=10; + cellHitMapLB[2][2]=8; + cellHitMapLB[2][3]=20; + cellHitMapLB[2][4]=1; + cellHitMapLB[2][5]=0; + //C1 + cellHitMapLB_C[0][0]=1; + cellHitMapLB_C[0][1]=21; + cellHitMapLB_C[0][2]=9; + cellHitMapLB_C[0][3]=34; + cellHitMapNameLB[1]="BC1"; + //B1 + cellHitMapLB[3][0]=1; + cellHitMapLB[3][1]=10; + cellHitMapLB[3][2]=8; + cellHitMapLB[3][3]=20; + cellHitMapLB[3][4]=1; + cellHitMapLB[3][5]=0; + //A1 + cellHitMapLB[4][0]=1; + cellHitMapLB[4][1]=1; + cellHitMapLB[4][2]=7; + cellHitMapLB[4][3]=9; + cellHitMapLB[4][4]=0; + cellHitMapLB[4][5]=-1; + //A2 + cellHitMapLB[5][0]=8; + cellHitMapLB[5][1]=1; + cellHitMapLB[5][2]=14; + cellHitMapLB[5][3]=9; + cellHitMapLB[5][4]=2; + cellHitMapLB[5][5]=-1; + cellHitMapNameLB[2]="A2"; + //B2 + cellHitMapLB[6][0]=9; + cellHitMapLB[6][1]=10; + cellHitMapLB[6][2]=16; + cellHitMapLB[6][3]=20; + cellHitMapLB[6][4]=3; + cellHitMapLB[6][5]=1; + cellHitMapNameLB[3]="BC2"; + //C2 + cellHitMapLB_C[1][0]=10; + cellHitMapLB_C[1][1]=21; + cellHitMapLB_C[1][2]=18; + cellHitMapLB_C[1][3]=34; + + //B2 + cellHitMapLB[7][0]=9; + cellHitMapLB[7][1]=10; + cellHitMapLB[7][2]=16; + cellHitMapLB[7][3]=20; + cellHitMapLB[7][4]=3; + cellHitMapLB[7][5]=1; + //A2 + cellHitMapLB[8][0]=8; + cellHitMapLB[8][1]=1; + cellHitMapLB[8][2]=14; + cellHitMapLB[8][3]=9; + cellHitMapLB[8][4]=2; + cellHitMapLB[8][5]=-1; + //A3 + cellHitMapLB[9][0]=15; + cellHitMapLB[9][1]=1; + cellHitMapLB[9][2]=21; + cellHitMapLB[9][3]=9; + cellHitMapLB[9][4]=4; + cellHitMapLB[9][5]=-1; + cellHitMapNameLB[4]="A3"; + //A3 + cellHitMapLB[10][0]=15; + cellHitMapLB[10][1]=1; + cellHitMapLB[10][2]=21; + cellHitMapLB[10][3]=9; + cellHitMapLB[10][4]=4; + cellHitMapLB[10][5]=-1; + //B3 + cellHitMapLB[11][0]=17; + cellHitMapLB[11][1]=10; + cellHitMapLB[11][2]=23; + cellHitMapLB[11][3]=20; + cellHitMapLB[11][4]=5; + cellHitMapLB[11][5]=2; + cellHitMapNameLB[5]="BC3"; + //C3 + cellHitMapLB_C[2][0]=19; + cellHitMapLB_C[2][1]=21; + cellHitMapLB_C[2][2]=27; + cellHitMapLB_C[2][3]=34; + //B3 + cellHitMapLB[12][0]=17; + cellHitMapLB[12][1]=10; + cellHitMapLB[12][2]=23; + cellHitMapLB[12][3]=20; + cellHitMapLB[12][4]=5; + cellHitMapLB[12][5]=2; + //D1 + cellHitMapLB[13][0]=11; + cellHitMapLB[13][1]=35; + cellHitMapLB[13][2]=30; + cellHitMapLB[13][3]=44; + cellHitMapLB[13][4]=6; + cellHitMapLB[13][5]=-1; + cellHitMapNameLB[6]="D1"; + //D1 + cellHitMapLB[14][0]=11; + cellHitMapLB[14][1]=35; + cellHitMapLB[14][2]=30; + cellHitMapLB[14][3]=44; + cellHitMapLB[14][4]=6; + cellHitMapLB[14][5]=-1; + //A4 + cellHitMapLB[15][0]=22; + cellHitMapLB[15][1]=1; + cellHitMapLB[15][2]=28; + cellHitMapLB[15][3]=9; + cellHitMapLB[15][4]=7; + cellHitMapLB[15][5]=-1; + cellHitMapNameLB[7]="A4"; + //B4 + cellHitMapLB[16][0]=24; + cellHitMapLB[16][1]=10; + cellHitMapLB[16][2]=31; + cellHitMapLB[16][3]=20; + cellHitMapLB[16][4]=8; + cellHitMapLB[16][5]=3; + cellHitMapNameLB[8]="BC4"; + //C4 + cellHitMapLB_C[3][0]=28; + cellHitMapLB_C[3][1]=21; + cellHitMapLB_C[3][2]=36; + cellHitMapLB_C[3][3]=34; + //B4 + cellHitMapLB[17][0]=24; + cellHitMapLB[17][1]=10; + cellHitMapLB[17][2]=31; + cellHitMapLB[17][3]=20; + cellHitMapLB[17][4]=8; + cellHitMapLB[17][5]=3; + //A4 + cellHitMapLB[18][0]=22; + cellHitMapLB[18][1]=1; + cellHitMapLB[18][2]=28; + cellHitMapLB[18][3]=9; + cellHitMapLB[18][4]=7; + cellHitMapLB[18][5]=-1; + //A5 + cellHitMapLB[19][0]=29; + cellHitMapLB[19][1]=1; + cellHitMapLB[19][2]=35; + cellHitMapLB[19][3]=9; + cellHitMapLB[19][4]=9; + cellHitMapLB[19][5]=-1; + cellHitMapNameLB[9]="A5"; + //A5 + cellHitMapLB[20][0]=29; + cellHitMapLB[20][1]=1; + cellHitMapLB[20][2]=35; + cellHitMapLB[20][3]=9; + cellHitMapLB[20][4]=9; + cellHitMapLB[20][5]=-1; + //B5 + cellHitMapLB[21][0]=32; + cellHitMapLB[21][1]=10; + cellHitMapLB[21][2]=39; + cellHitMapLB[21][3]=20; + cellHitMapLB[21][4]=10; + cellHitMapLB[21][5]=4; + cellHitMapNameLB[10]="BC5"; + //C5 + cellHitMapLB_C[4][0]=37; + cellHitMapLB_C[4][1]=21; + cellHitMapLB_C[4][2]=46; + cellHitMapLB_C[4][3]=34; + //B5 + cellHitMapLB[22][0]=32; + cellHitMapLB[22][1]=10; + cellHitMapLB[22][2]=39; + cellHitMapLB[22][3]=20; + cellHitMapLB[22][4]=10; + cellHitMapLB[22][5]=4; + //A6 + cellHitMapLB[23][0]=36; + cellHitMapLB[23][1]=1; + cellHitMapLB[23][2]=42; + cellHitMapLB[23][3]=9; + cellHitMapLB[23][4]=11; + cellHitMapLB[23][5]=-1; + cellHitMapNameLB[11]="A6"; + //D2 + cellHitMapLB[24][0]=31; + cellHitMapLB[24][1]=35; + cellHitMapLB[24][2]=52; + cellHitMapLB[24][3]=44; + cellHitMapLB[24][4]=12; + cellHitMapLB[24][5]=-1; + cellHitMapNameLB[12]="D2"; + //D2 + cellHitMapLB[25][0]=31; + cellHitMapLB[25][1]=35; + cellHitMapLB[25][2]=52; + cellHitMapLB[25][3]=44; + cellHitMapLB[25][4]=12; + cellHitMapLB[25][5]=-1; + //A6 + cellHitMapLB[26][0]=36; + cellHitMapLB[26][1]=1; + cellHitMapLB[26][2]=42; + cellHitMapLB[26][3]=9; + cellHitMapLB[26][4]=11; + cellHitMapLB[26][5]=-1; + //B6 + cellHitMapLB[27][0]=40; + cellHitMapLB[27][1]=10; + cellHitMapLB[27][2]=48; + cellHitMapLB[27][3]=20; + cellHitMapLB[27][4]=13; + cellHitMapLB[27][5]=5; + cellHitMapNameLB[13]="BC6"; + //C6 + cellHitMapLB_C[5][0]=47; + cellHitMapLB_C[5][1]=21; + cellHitMapLB_C[5][2]=56; + cellHitMapLB_C[5][3]=34; + //B6 + cellHitMapLB[28][0]=40; + cellHitMapLB[28][1]=10; + cellHitMapLB[28][2]=48; + cellHitMapLB[28][3]=20; + cellHitMapLB[28][4]=13; + cellHitMapLB[28][5]=5; + //A7 + cellHitMapLB[29][0]=43; + cellHitMapLB[29][1]=1; + cellHitMapLB[29][2]=50; + cellHitMapLB[29][3]=9; + cellHitMapLB[29][4]=14; + cellHitMapLB[29][5]=-1; + cellHitMapNameLB[14]="A7"; + //Nothing + cellHitMapLB[30][0]=-1; + cellHitMapLB[30][1]=-1; + cellHitMapLB[30][2]=-1; + cellHitMapLB[30][3]=-1; + cellHitMapLB[30][4]=-1; + cellHitMapLB[30][5]=-1; + //Nothing + cellHitMapLB[31][0]=-1; + cellHitMapLB[31][1]=-1; + cellHitMapLB[31][2]=-1; + cellHitMapLB[31][3]=-1; + cellHitMapLB[31][4]=-1; + cellHitMapLB[31][5]=-1; + //A7 + cellHitMapLB[32][0]=43; + cellHitMapLB[32][1]=1; + cellHitMapLB[32][2]=50; + cellHitMapLB[32][3]=9; + cellHitMapLB[32][4]=14; + cellHitMapLB[32][5]=-1; + //B7 + cellHitMapLB[33][0]=49; + cellHitMapLB[33][1]=10; + cellHitMapLB[33][2]=57; + cellHitMapLB[33][3]=20; + cellHitMapLB[33][4]=15; + cellHitMapLB[33][5]=6; + cellHitMapNameLB[15]="BC7"; + //C7 + cellHitMapLB_C[6][0]=57; + cellHitMapLB_C[6][1]=21; + cellHitMapLB_C[6][2]=66; + cellHitMapLB_C[6][3]=34; + //B7 + cellHitMapLB[34][0]=49; + cellHitMapLB[34][1]=10; + cellHitMapLB[34][2]=57; + cellHitMapLB[34][3]=20; + cellHitMapLB[34][4]=15; + cellHitMapLB[34][5]=6; + //A8 + cellHitMapLB[35][0]=51; + cellHitMapLB[35][1]=1; + cellHitMapLB[35][2]=59; + cellHitMapLB[35][3]=9; + cellHitMapLB[35][4]=16; + cellHitMapLB[35][5]=-1; + cellHitMapNameLB[16]="A8"; + //A9 + cellHitMapLB[36][0]=60; + cellHitMapLB[36][1]=1; + cellHitMapLB[36][2]=68; + cellHitMapLB[36][3]=9; + cellHitMapLB[36][4]=17; + cellHitMapLB[36][5]=-1; + cellHitMapNameLB[17]="A9"; + //A9 + cellHitMapLB[37][0]=60; + cellHitMapLB[37][1]=1; + cellHitMapLB[37][2]=68; + cellHitMapLB[37][3]=9; + cellHitMapLB[37][4]=17; + cellHitMapLB[37][5]=-1; + //A8 + cellHitMapLB[38][0]=51; + cellHitMapLB[38][1]=1; + cellHitMapLB[38][2]=59; + cellHitMapLB[38][3]=9; + cellHitMapLB[38][4]=16; + cellHitMapLB[38][5]=-1; + //B8 + cellHitMapLB[39][0]=58; + cellHitMapLB[39][1]=10; + cellHitMapLB[39][2]=67; + cellHitMapLB[39][3]=20; + cellHitMapLB[39][4]=18; + cellHitMapLB[39][5]=7; + cellHitMapNameLB[18]="BC8"; + //C8 + cellHitMapLB_C[7][0]=67; + cellHitMapLB_C[7][1]=21; + cellHitMapLB_C[7][2]=76; + cellHitMapLB_C[7][3]=34; + //B8 + cellHitMapLB[40][0]=58; + cellHitMapLB[40][1]=10; + cellHitMapLB[40][2]=67; + cellHitMapLB[40][3]=20; + cellHitMapLB[40][4]=18; + cellHitMapLB[40][5]=7; + //D3 + cellHitMapLB[41][0]=53; + cellHitMapLB[41][1]=35; + cellHitMapLB[41][2]=76; + cellHitMapLB[41][3]=44; + cellHitMapLB[41][4]=19; + cellHitMapLB[41][5]=-1; + cellHitMapNameLB[19]="D3"; + //B9 + cellHitMapLB[42][0]=68; + cellHitMapLB[42][1]=10; + cellHitMapLB[42][2]=76; + cellHitMapLB[42][3]=20; + cellHitMapLB[42][4]=20; + cellHitMapLB[42][5]=-1; + cellHitMapNameLB[20]="B9"; + //NOTHINg + cellHitMapLB[43][0]=-1; + cellHitMapLB[43][1]=-1; + cellHitMapLB[43][2]=-1; + cellHitMapLB[43][3]=-1; + cellHitMapLB[43][4]=-1; + cellHitMapLB[43][5]=-1; + //D3 + cellHitMapLB[44][0]=53; + cellHitMapLB[44][1]=35; + cellHitMapLB[44][2]=76; + cellHitMapLB[44][3]=44; + cellHitMapLB[44][4]=19; + cellHitMapLB[44][5]=-1; + //A10 + cellHitMapLB[45][0]=69; + cellHitMapLB[45][1]=1; + cellHitMapLB[45][2]=76; + cellHitMapLB[45][3]=9; + cellHitMapLB[45][4]=21; + cellHitMapLB[45][5]=-1; + cellHitMapNameLB[21]="A10"; + //A10 + cellHitMapLB[46][0]=69; + cellHitMapLB[46][1]=1; + cellHitMapLB[46][2]=76; + cellHitMapLB[46][3]=9; + cellHitMapLB[46][4]=21; + cellHitMapLB[46][5]=-1; + //B9 + cellHitMapLB[47][0]=68; + cellHitMapLB[47][1]=10; + cellHitMapLB[47][2]=76; + cellHitMapLB[47][3]=20; + cellHitMapLB[47][4]=20; + cellHitMapLB[47][5]=-1; + + return TileFatherMonTool::initialize(); +} + + + +/// BookHistogram method is called at every event block ,lumi block and run. +/// At the moment we need to book only every run +/// It calls bookHistTrig for the 'AnyTrig' trigger type +/// All concrete trigger type histograms will only be booked when needed +/*---------------------------------------------------------*/ +StatusCode TileTBCellMonTool::bookHistograms() { +/*---------------------------------------------------------*/ + + ATH_MSG_INFO( "in bookHistograms()" ); + ATH_MSG_INFO( "Using base path " << m_path ); + + + + if (m_fillTimeHistograms) { + + std::string module_name; + std::string cell_name; + std::string channel_name; + + for (unsigned int channel = 0; channel < TileCalibUtils::MAX_CHAN; ++channel) { + module_name = "LBC01"; + cell_name = getCellName(2, channel); + + m_tileChannelEnergyVsTimeLBC01[channel] = book2F("ChannelEnergyVsTime/" + module_name, "ChannelEnergyVsTime_" + module_name + "_" + cell_name + "_ch" + std::to_string(channel) + , "Tile channel energy vs time " + module_name + " " + cell_name + " ch" + std::to_string(channel), 121, -60.5, 60.5, 400,0,200); + m_tileChannelEnergyLBC01[channel] = book1F("ChannelEnergy/" + module_name, "ChannelEnergy_" + module_name + "_" + cell_name + "_ch" + std::to_string(channel) + , "Tile channel energy " + module_name + " " + cell_name + " ch" + std::to_string(channel), 400,0,200); + m_tileChannelTimeLBC01[channel] = book1F("ChannelTime/" + module_name, "ChannelTime_" + module_name + "_" + cell_name + "_ch" + std::to_string(channel) + , "Tile channel time " + module_name + " " + cell_name + " ch" + std::to_string(channel), 121, -60.5, 60.5); + + } + + for (unsigned int channel = 0; channel < TileCalibUtils::MAX_CHAN; ++channel) { + module_name = "EBC02"; + cell_name = getCellName(4, channel); + + m_tileChannelEnergyVsTimeEBC02[channel] = book2F("ChannelEnergyVsTime/" + module_name, "ChannelEnergyVsTime_" + module_name + "_" + cell_name + "_ch" + std::to_string(channel) + , "Tile channel energy vs time " + module_name + " " + cell_name + " ch" + std::to_string(channel), 121, -60.5, 60.5, 400,0,200); + m_tileChannelEnergyEBC02[channel] = book1F("ChannelEnergy/" + module_name, "ChannelEnergy_" + module_name + "_" + cell_name + "_ch" + std::to_string(channel) + , "Tile channel energy " + module_name + " " + cell_name + " ch" + std::to_string(channel), 400,0,200); + m_tileChannelTimeEBC02[channel] = book1F("ChannelTime/" + module_name, "ChannelTime_" + module_name + "_" + cell_name + "_ch" + std::to_string(channel) + , "Tile channel time " + module_name + " " + cell_name + " ch" + std::to_string(channel), 121, -60.5, 60.5); + } + + } + + + + m_TileTBHitMapEBA= book2F("EBA","CellMap","CellMap",18,1,19,5,1,6) ; + m_TileTBHitMapEBA->SetOption("COLZ"); + m_TileTBHitMapEBA->SetStats(0); + m_TileTBHitMapEBA->SetZTitle("Charge[pC]"); + + m_TileTBTotalEnergyEBA=book1F("EBA","EnergyTotalEBA","EnergyTotalEBA",400,0,200); + m_TileTBTotalEnergyEBA->SetXTitle("Charge[pC]"); + m_TileTBTotalEnergyEBA->SetYTitle("Entries"); + + m_TileTBHitMapEBC= book2F("EBC","CellMap","CellMap",18,1,19,5,1,6) ; + m_TileTBHitMapEBC->SetOption("COLZ"); + m_TileTBHitMapEBC->SetStats(0); + m_TileTBHitMapEBC->SetZTitle("Charge[pC]"); + + m_TileTBTotalEnergyEBC=book1F("EBC","EnergyTotalEBC","EnergyTotalEBC",400,0,200); + m_TileTBTotalEnergyEBC->SetXTitle("Charge[pC]"); + m_TileTBTotalEnergyEBC->SetYTitle("Entries"); + + m_TileTBHitMapLBA= book2F("LBA","CellMap","CellMap",76,1,77,44,1,45) ; + m_TileTBHitMapLBA->SetOption("COLZ"); + m_TileTBHitMapLBA->SetStats(0); + m_TileTBHitMapLBA->SetZTitle("Charge[pC]"); + + m_TileTBTotalEnergyLBA=book1F("LBA","EnergyTotalLBA","EnergyTotalLBA",400,0,200); + m_TileTBTotalEnergyLBA->SetXTitle("Charge[pC]"); + m_TileTBTotalEnergyLBA->SetYTitle("Entries"); + + m_TileTBHitMapLBC= book2F("LBC","CellMap","CellMap",76,1,77,44,1,45) ; + m_TileTBHitMapLBC->SetOption("COLZ"); + m_TileTBHitMapLBC->SetStats(0); + m_TileTBHitMapLBC->SetZTitle("Charge[pC]"); + + m_TileTBTotalEnergyLBC=book1F("LBC","EnergyTotalLBC","EnergyTotalLBC",400,0,200); + m_TileTBTotalEnergyLBC->SetXTitle("Charge[pC]"); + m_TileTBTotalEnergyLBC->SetYTitle("Entries"); + + for (int x=0;x<14;x++) { + m_TileTBCellEneSumEBA[x]=book1F("EBA","CellEnergy"+cellHitMapNameEB[x],"CellEnergy"+cellHitMapNameEB[x],400,0,200); + m_TileTBCellEneSumEBA[x]->SetXTitle("Charge[pC]"); + m_TileTBCellEneDiffEBA[x]=book1F("EBA","CellEnergyDiff"+cellHitMapNameEB[x],"CellEnergyDiff"+cellHitMapNameEB[x],50,-20,20); + m_TileTBCellEneDiffEBA[x]->SetXTitle("Charge[pC]"); + + m_TileTBCellTimeSumEBA[x]=book1F("EBA","CellTime"+cellHitMapNameEB[x],"CellTime"+cellHitMapNameEB[x],100,-75,75); + m_TileTBCellTimeSumEBA[x]->SetXTitle("Time"); + m_TileTBCellTimeDiffEBA[x]=book1F("EBA","CellTimeDiff"+cellHitMapNameEB[x],"CellTimeDiff"+cellHitMapNameEB[x],100,-75,75); + m_TileTBCellTimeDiffEBA[x]->SetXTitle("Time"); + + m_TileTBCellEneSumEBC[x]=book1F("EBC","CellEnergy"+cellHitMapNameEB[x],"CellEnergy"+cellHitMapNameEB[x],400,0,200); + m_TileTBCellEneSumEBC[x]->SetXTitle("Charge[pC]"); + m_TileTBCellEneDiffEBC[x]=book1F("EBC","CellEnergyDiff"+cellHitMapNameEB[x],"CellEnergyDiff"+cellHitMapNameEB[x],50,-20,20); + m_TileTBCellEneDiffEBC[x]->SetXTitle("Charge[pC]"); + + m_TileTBCellTimeSumEBC[x]=book1F("EBC","CellTime"+cellHitMapNameEB[x],"CellTime"+cellHitMapNameEB[x],100,-75,75); + m_TileTBCellTimeSumEBC[x]->SetXTitle("Time"); + m_TileTBCellTimeDiffEBC[x]=book1F("EBC","CellTimeDiff"+cellHitMapNameEB[x],"CellTimeDiff"+cellHitMapNameEB[x],100,-75,75); + m_TileTBCellTimeDiffEBC[x]->SetXTitle("Time"); + } + + for (int x=0;x<22;x++) { + m_TileTBCellEneSumLBA[x]=book1F("LBA","CellEnergy"+cellHitMapNameLB[x],"CellEnergy"+cellHitMapNameLB[x],400,0,200); + m_TileTBCellEneSumLBA[x]->SetXTitle("Charge[pC]"); + m_TileTBCellEneDiffLBA[x]=book1F("LBA","CellEnergyDiff"+cellHitMapNameLB[x],"CellEnergyDiff"+cellHitMapNameLB[x],50,-20,20); + m_TileTBCellEneDiffLBA[x]->SetXTitle("Charge[pC]"); + + m_TileTBCellTimeSumLBA[x]=book1F("LBA","CellTime"+cellHitMapNameLB[x],"CellTime"+cellHitMapNameLB[x],100,-75,75); + m_TileTBCellTimeSumLBA[x]->SetXTitle("Time"); + m_TileTBCellTimeDiffLBA[x]=book1F("LBA","CellTimeDiff"+cellHitMapNameLB[x],"CellTimeDiff"+cellHitMapNameLB[x],100,-75,75); + m_TileTBCellTimeDiffLBA[x]->SetXTitle("Time"); + + m_TileTBCellEneSumLBC[x]=book1F("LBC","CellEnergy"+cellHitMapNameLB[x],"CellEnergy"+cellHitMapNameLB[x],400,0,200); + m_TileTBCellEneSumLBC[x]->SetXTitle("Charge[pC]"); + m_TileTBCellEneDiffLBC[x]=book1F("LBC","CellEnergyDiff"+cellHitMapNameLB[x],"CellEnergyDiff"+cellHitMapNameLB[x],50,-20,20); + m_TileTBCellEneDiffLBC[x]->SetXTitle("Charge[pC]"); + + m_TileTBCellTimeSumLBC[x]=book1F("LBC","CellTime"+cellHitMapNameLB[x],"CellTime"+cellHitMapNameLB[x],100,-75,75); + m_TileTBCellTimeSumLBC[x]->SetXTitle("Time"); + m_TileTBCellTimeDiffLBC[x]=book1F("LBC","CellTimeDiff"+cellHitMapNameLB[x],"CellTimeDiff"+cellHitMapNameLB[x],100,-75,75); + m_TileTBCellTimeDiffLBC[x]->SetXTitle("Time"); + } + //cell D0 for long barrel. + m_TileTBCellEneSumLBAD0=book1F("LBA","CellEnergyD0","CellEnergyD0",400,0,200); + m_TileTBCellEneSumLBCD0=book1F("LBC","CellEnergyD0","CellEnergyD0",400,0,200); + m_TileTBCellTimeSumLBAD0=book1F("LBA","CellTimeD0","CellTimeD0",100,-75,75); + m_TileTBCellTimeSumLBCD0=book1F("LBC","CellTimeD0","CellTimeD0",100,-75,75); + return StatusCode::SUCCESS; +} + + +/*---------------------------------------------------------*/ +StatusCode TileTBCellMonTool::fillHistograms() { +/*---------------------------------------------------------*/ + + + + // Pointer to a Tile cell container + const CaloCellContainer* cell_container; + + //Retrieve Cell collection from SG + CHECK( evtStore()->retrieve(cell_container, m_cellsContName) ); + + CaloCellContainer::const_iterator iCell = cell_container->begin(); + CaloCellContainer::const_iterator lastCell = cell_container->end(); + + double totalEnergyEBA=0.0; + double totalEnergyEBC=0.0; + double totalEnergyLBA=0.0; + double totalEnergyLBC=0.0; + + for (const CaloCell* cell : *cell_container) { + + Identifier id = cell->ID(); + + + if ( m_tileID->is_tile(id) ) { + + const TileCell* tile_cell = dynamic_cast<const TileCell*>(cell); + if (tile_cell == 0) continue; + + // int drw = 0; // drawer number, range 0-63, the same for both channels + short ch1 = -1, ch2 = -1; // channel number, range 0-47 or -1 for unknown + int ros1(-1); + int ros2(-1); + + const CaloDetDescrElement * caloDDE = tile_cell->caloDDE(); + + IdentifierHash hash1 = caloDDE->onl1(); + if (hash1 != TileHWID::NOT_VALID_HASH) { + HWIdentifier hw1 = m_tileHWID->channel_id(hash1); + ch1 = m_tileHWID->channel(hw1); + // drw = m_tileHWID->drawer(hw1); + ros1 = m_tileHWID->ros(hw1); + } + + IdentifierHash hash2 = caloDDE->onl2(); + if (hash2 != TileHWID::NOT_VALID_HASH) { + HWIdentifier hw2 = m_tileHWID->channel_id(hash2); + ch2 = m_tileHWID->channel(hw2); + // drw = m_tileHWID->drawer(hw2); + ros2 = m_tileHWID->ros(hw2); + } + //ATH_MSG_INFO( "id="<<id <<" ros1="<<ros1); + + + + + + // note that drawer from HWID and module from ID are different for E3 cells near MBTS + // double drawer = (double)drw + 1.0; // range from 1-64 + // double module = (double)m_tileID->module(id) + 1.0; // range from 1-64 + + int samp = m_tileID->sample(id); + + bool single_PMT_scin = (samp == TileID::SAMP_E); + bool single_PMT_C10 = (m_tileID->section(id) == TileID::GAPDET + && samp == TileID::SAMP_C + && (! m_cabling->C10_connected(m_tileID->module(id))) ); + + // distinguish cells with one or two PMTs + bool single_PMT = single_PMT_C10 || single_PMT_scin; + + // distinguish normal cells and fantoms (e.g. non-existing D4 in EBA15, EBC18 + // or non-existing E3/E4 - they might appear in CaloCellContainer) + bool real_cell = single_PMT_C10 || m_cabling->TileGap_connected(id); + + // int gn1 = tile_cell->gain1(); // gain of first PMT + // int gn2 = tile_cell->gain2(); // gain of second PMT + + + + + // get the cell energy, time and position info + double energy = cell->energy(); + double time = cell->time(); + // double quality = cell->quality(); + // double eta = cell->eta(); + // double phi = cell->phi(); + double ene1 = tile_cell->ene1(); + double ene2 = tile_cell->ene2(); + double ediff = (single_PMT) ? 0.0 : tile_cell->eneDiff(); + // double eratio = (energy!=0.0) ? ediff/energy : 0.0; + double t1 = tile_cell->time1(); + double t2 = tile_cell->time2(); + double tdiff = (single_PMT) ? 0.0 : 2.*tile_cell->timeDiff(); // attention! factor of 2 is needed here + + + + + + + energy=energy/1000.;//units of pC + ediff=ediff/1000.; + + + + if (real_cell) { + + if (m_fillTimeHistograms) { + + if (ros2 == 2 && ch2 == 0 && ene2 > m_energyThresholdForTime) { + m_tileChannelTimeLBC01[ch2]->Fill(t2, 1.0); + } else if (ros1 == 2) { + if (ch1 > 0 && ene1 > m_energyThresholdForTime) m_tileChannelTimeLBC01[ch1]->Fill(t1, 1.0); + if (ch2 > 0 && ene2 > m_energyThresholdForTime) m_tileChannelTimeLBC01[ch2]->Fill(t2, 1.0); + if (ch1>0) { + m_tileChannelEnergyLBC01[ch1]->Fill(ene1, 1.0); + m_tileChannelEnergyVsTimeLBC01[ch1]->Fill(t1,ene1); + } + if (ch2>0) { + m_tileChannelEnergyLBC01[ch2]->Fill(ene2, 1.0); + m_tileChannelEnergyVsTimeLBC01[ch2]->Fill(t2,ene2); + } + } if (ros1 == 4) { + if (ch1 > 0 && ene1 > m_energyThresholdForTime) m_tileChannelTimeEBC02[ch1]->Fill(t1, 1.0); + if (ch2 > 0 && ene2 > m_energyThresholdForTime) m_tileChannelTimeEBC02[ch2]->Fill(t2, 1.0); + if (ch1>0) { + m_tileChannelEnergyEBC02[ch1]->Fill(ene1, 1.0); + m_tileChannelEnergyVsTimeEBC02[ch1]->Fill(t1,ene1); + } + if (ch2>0) { + m_tileChannelEnergyEBC02[ch2]->Fill(ene2, 1.0); + m_tileChannelEnergyVsTimeEBC02[ch2]->Fill(t2,ene2); + } + } + } + + + + + // masking on the fly: check if channel is bad in event, while it is good in DB + + // when only one channel is bad, it might be that gain of masked channel is not correct + // if two qualities are not identical, then gains are not the same (new feature introduced in rel 17.2) + //int qual1 = (int)tile_cell->qual1(); + //int qual2 = (int)tile_cell->qual2(); + + + //ATH_MSG_INFO( "ch1="<<ch1 ); + // check that both PMTs are good and that it is cell with 2 PMTs and it is an end barrel + + if (ros2==2&&ch2==0) { + + } + if (ros1==1){ + totalEnergyLBA+=energy; + fillHitMap(m_TileTBHitMapLBA,cellHitMapLB[ch1],energy); + //count channel D0 as energy in LBC + if (ch1==0) { + totalEnergyLBC+=energy; + fillHitMap(m_TileTBHitMapLBC,cellHitMapLB[ch1],energy); + } + + //check if it is a B Cell with a correspond C cell; + if (cellHitMapLB[ch1][5]!=-1) { + fillHitMap(m_TileTBHitMapLBA,cellHitMapLB_C[cellHitMapLB[ch1][5]],energy); + } + + } + if (!single_PMT&&ch1>-1&&ch2>-1&&ros1==1) { + //fillHitMap(m_TileTBHitMapEBC,cellHitMapEB[ch1],energy); + if (cellHitMapLB[ch1][4]!=-1) { + m_TileTBCellEneSumLBA[cellHitMapLB[ch1][4]]->Fill(energy); + m_TileTBCellEneDiffLBA[cellHitMapLB[ch1][4]]->Fill(ediff); + if (energy>m_energyThresholdForTime) { + m_TileTBCellTimeSumLBA[cellHitMapLB[ch1][4]]->Fill(time); + m_TileTBCellTimeDiffLBA[cellHitMapLB[ch1][4]]->Fill(tdiff); + } + } + //If it is cell D0; + /*if (ch1==0) { + m_TileTBCellEneSumLBAD0->Fill(energy); + if (energy>m_energyThresholdForTime) { + m_TileTBCellTimeSumLBAD0->Fill(time); + } + }*/ + } + if (ros1==2){ + totalEnergyLBC+=energy; + fillHitMap(m_TileTBHitMapLBC,cellHitMapLB[ch1],energy); + //ATH_MSG_INFO( "cellHitMapLB["<<ch1<<"]="<<cellHitMapLB[ch1] ); + + //check if it is a B Cell with a correspond C cell; + if (cellHitMapLB[ch1][5]!=-1) { + //ATH_MSG_INFO( "cellHitMapLB["<<ch1<<"][5]="<<cellHitMapLB[ch1][5]<<" "<<cellHitMapLB_C[cellHitMapLB[ch1][5]] ); + fillHitMap(m_TileTBHitMapLBC,cellHitMapLB_C[cellHitMapLB[ch1][5]],energy); + } + } + if (!single_PMT&&ch1>-1&&ch2>-1&&ros1==2) { + //fillHitMap(m_TileTBHitMapEBC,cellHitMapEB[ch1],energy); + if (cellHitMapLB[ch1][4]!=-1) { + m_TileTBCellEneSumLBC[cellHitMapLB[ch1][4]]->Fill(energy); + m_TileTBCellEneDiffLBC[cellHitMapLB[ch1][4]]->Fill(ediff); + if (energy>m_energyThresholdForTime) { + m_TileTBCellTimeSumLBC[cellHitMapLB[ch1][4]]->Fill(time); + m_TileTBCellTimeDiffLBC[cellHitMapLB[ch1][4]]->Fill(tdiff); + } + } + //If it is cell D0; + /*if (ch2==0) { + m_TileTBCellEneSumLBCD0->Fill(energy); + if (energy>m_energyThresholdForTime) { + m_TileTBCellTimeSumLBCD0->Fill(time); + } + }*/ + } + if (ros1==3){ + totalEnergyEBA+=energy; + } + if (!single_PMT&&ch1>-1&&ch2>-1&&ros1==3) { + if (cellHitMapEB[ch1][4]!=-1) { + fillHitMap(m_TileTBHitMapEBA,cellHitMapEB[ch1],energy); + m_TileTBCellEneSumEBA[cellHitMapEB[ch1][4]]->Fill(energy); + m_TileTBCellEneDiffEBA[cellHitMapEB[ch1][4]]->Fill(ediff); + if (energy>m_energyThresholdForTime) { + m_TileTBCellTimeSumEBA[cellHitMapEB[ch1][4]]->Fill(time); + m_TileTBCellTimeDiffEBA[cellHitMapEB[ch1][4]]->Fill(tdiff); + } + } + } + if (ros1==4){ + totalEnergyEBC+=energy; + } + if (!single_PMT&&ch1>-1&&ch2>-1&&ros1==4) { + if (cellHitMapEB[ch1][4]!=-1) { + fillHitMap(m_TileTBHitMapEBC,cellHitMapEB[ch1],energy); + m_TileTBCellEneSumEBC[cellHitMapEB[ch1][4]]->Fill(energy); + m_TileTBCellEneDiffEBC[cellHitMapEB[ch1][4]]->Fill(ediff); + if (energy>m_energyThresholdForTime) { + m_TileTBCellTimeSumEBC[cellHitMapEB[ch1][4]]->Fill(time); + m_TileTBCellTimeDiffEBC[cellHitMapEB[ch1][4]]->Fill(tdiff); + } + } + } + + + + + + } //end if real cell + + } // end if tile_cell + } // end of loop over the Cells + m_TileTBTotalEnergyEBA->Fill(totalEnergyEBA); + m_TileTBTotalEnergyEBC->Fill(totalEnergyEBC); + m_TileTBTotalEnergyLBA->Fill(totalEnergyLBA); + m_TileTBTotalEnergyLBC->Fill(totalEnergyLBC); + + + + + + return StatusCode::SUCCESS; +} + +void TileTBCellMonTool::fillHitMap(TH2F *hHitMap,int cellHitMap2[],double energy) { + for (int x=cellHitMap2[0];x<=cellHitMap2[2];x++) { + for (int y=cellHitMap2[1];y<=cellHitMap2[3];y++) { + //ATH_MSG_INFO( "x="<<x<<" y="<<y ); + hHitMap->Fill(x,y,energy); + } + } +} + + +/*---------------------------------------------------------*/ +StatusCode TileTBCellMonTool::procHistograms() { +/*---------------------------------------------------------*/ + + + if (endOfRun) { + ATH_MSG_INFO( "in procHistograms()" ); + ATH_MSG_INFO( "Doing fits" ); + Double_t fr[2]; + Double_t sv[4], pllo[4], plhi[4], fp[4], fpe[4]; + fr[0]=.5; + fr[1]=800; + + pllo[0]=0.5; pllo[1]=40; pllo[2]=1.0; pllo[3]=0.4; + plhi[0]=100; plhi[1]=120.0; plhi[2]=1000000000.0; plhi[3]=100; + sv[0]=1.8; sv[1]=80.0; sv[2]=m_TileTBTotalEnergyLBC->GetEntries(); sv[3]=3.0; + + Double_t chisqr; + Int_t ndf; + langaufit(m_TileTBTotalEnergyLBC,fr,sv,pllo,plhi,fp,fpe,&chisqr,&ndf); + + pllo[0]=0.5; pllo[1]=40; pllo[2]=1.0; pllo[3]=0.4; + plhi[0]=100; plhi[1]=120.0; plhi[2]=1000000000.0; plhi[3]=100; + sv[0]=1.8; sv[1]=80.0; sv[2]=m_TileTBTotalEnergyLBA->GetEntries(); sv[3]=3.0; + + langaufit(m_TileTBTotalEnergyLBA,fr,sv,pllo,plhi,fp,fpe,&chisqr,&ndf); + + pllo[0]=0.5; pllo[1]=40; pllo[2]=1.0; pllo[3]=0.4; + plhi[0]=100; plhi[1]=120.0; plhi[2]=1000000000.0; plhi[3]=100; + sv[0]=1.8; sv[1]=80.0; sv[2]=m_TileTBTotalEnergyEBA->GetEntries(); sv[3]=3.0; + + langaufit(m_TileTBTotalEnergyEBA,fr,sv,pllo,plhi,fp,fpe,&chisqr,&ndf); + + pllo[0]=0.5; pllo[1]=40; pllo[2]=1.0; pllo[3]=0.4; + plhi[0]=100; plhi[1]=120.0; plhi[2]=1000000000.0; plhi[3]=100; + sv[0]=1.8; sv[1]=80.0; sv[2]=m_TileTBTotalEnergyEBC->GetEntries(); sv[3]=3.0; + + langaufit(m_TileTBTotalEnergyEBC,fr,sv,pllo,plhi,fp,fpe,&chisqr,&ndf); + } + + + return StatusCode::SUCCESS; +} + +/*---------------------------------------------------------*/ +StatusCode TileTBCellMonTool::checkHists(bool /* fromFinalize */) { +/*---------------------------------------------------------*/ + + + ATH_MSG_INFO( "in checkHists()" ); + + return StatusCode::SUCCESS; +} + + + + +// Operations to be done only once at the first event +/*---------------------------------------------------------*/ +void TileTBCellMonTool::FirstEvInit() { +/*---------------------------------------------------------*/ + + + + +} + +Double_t langaufun(Double_t *x, Double_t *par) { + + //Fit parameters: + //par[0]=Width (scale) parameter of Landau density + //par[1]=Most Probable (MP, location) parameter of Landau density + //par[2]=Total area (integral -inf to inf, normalization constant) + //par[3]=Width (sigma) of convoluted Gaussian function + // + //In the Landau distribution (represented by the CERNLIB approximation), + //the maximum is located at x=-0.22278298 with the location parameter=0. + //This shift is corrected within this function, so that the actual + //maximum is identical to the MP parameter. + + // Numeric constants + Double_t invsq2pi = 0.3989422804014; // (2 pi)^(-1/2) + Double_t mpshift = -0.22278298; // Landau maximum location + + // Control constants + Double_t np = 100.0; // number of convolution steps + Double_t sc = 5.0; // convolution extends to +-sc Gaussian sigmas + + // Variables + Double_t xx; + Double_t mpc; + Double_t fland; + Double_t sum = 0.0; + Double_t xlow,xupp; + Double_t step; + Double_t i; + + + // MP shift correction + mpc = par[1] - mpshift * par[0]; + + // Range of convolution integral + xlow = x[0] - sc * par[3]; + xupp = x[0] + sc * par[3]; + + step = (xupp-xlow) / np; + + // Convolution integral of Landau and Gaussian by sum + for(i=1.0; i<=np/2; i++) { + xx = xlow + (i-.5) * step; + fland = TMath::Landau(xx,mpc,par[0]) / par[0]; + sum += fland * TMath::Gaus(x[0],xx,par[3]); + + xx = xupp - (i-.5) * step; + fland = TMath::Landau(xx,mpc,par[0]) / par[0]; + sum += fland * TMath::Gaus(x[0],xx,par[3]); + } + + return (par[2] * step * sum * invsq2pi / par[3]); +} + + + +TF1 *TileTBCellMonTool::langaufit(TH1F *his, Double_t *fitrange, Double_t *startvalues, Double_t *parlimitslo, Double_t *parlimitshi, Double_t *fitparams, Double_t *fiterrors, Double_t *ChiSqr, Int_t *NDF) +{ + // Once again, here are the Landau * Gaussian parameters: + // par[0]=Width (scale) parameter of Landau density + // par[1]=Most Probable (MP, location) parameter of Landau density + // par[2]=Total area (integral -inf to inf, normalization constant) + // par[3]=Width (sigma) of convoluted Gaussian function + // + // Variables for langaufit call: + // his histogram to fit + // fitrange[2] lo and hi boundaries of fit range + // startvalues[4] reasonable start values for the fit + // parlimitslo[4] lower parameter limits + // parlimitshi[4] upper parameter limits + // fitparams[4] returns the final fit parameters + // fiterrors[4] returns the final fit errors + // ChiSqr returns the chi square + // NDF returns ndf + + Int_t i; + Char_t FunName[100]; + + sprintf(FunName,"Fitfcn_%s",his->GetName()); + + + TF1 *ffit = new TF1(FunName,langaufun,fitrange[0],fitrange[1],4); + ffit->SetParameters(startvalues); + ffit->SetParNames("Width","MP","Area","GSigma"); + + for (i=0; i<4; i++) { + ffit->SetParLimits(i, parlimitslo[i], parlimitshi[i]); + } + + his->Fit(FunName,"RB"); // fit within specified range, use ParLimits, do not plot + + ffit->GetParameters(fitparams); // obtain fit parameters + for (i=0; i<4; i++) { + fiterrors[i] = ffit->GetParError(i); // obtain fit parameter errors + } + ChiSqr[0] = ffit->GetChisquare(); // obtain chi^2 + NDF[0] = ffit->GetNDF(); // obtain ndf + + return (ffit); // return fit function + +} + +Int_t TileTBCellMonTool::langaupro(Double_t *params, Double_t &maxx, Double_t &FWHM) { + + // Seaches for the location (x value) at the maximum of the + // Landau-Gaussian convolute and its full width at half-maximum. + // + // The search is probably not very efficient, but it's a first try. + + Double_t p,x,fy,fxr,fxl; + Double_t step; + Double_t l,lold; + Int_t i = 0; + Int_t MAXCALLS = 10000; + + + // Search for maximum + + p = params[1] - 0.1 * params[0]; + step = 0.05 * params[0]; + lold = -2.0; + l = -1.0; + + + while ( (l != lold) && (i < MAXCALLS) ) { + i++; + + lold = l; + x = p + step; + l = langaufun(&x,params); + + if (l < lold) + step = -step/10; + + p += step; + } + + if (i == MAXCALLS) + return (-1); + + maxx = x; + + fy = l/2; + + + // Search for right x location of fy + + p = maxx + params[0]; + step = params[0]; + lold = -2.0; + l = -1e300; + i = 0; + + + while ( (l != lold) && (i < MAXCALLS) ) { + i++; + + lold = l; + x = p + step; + l = TMath::Abs(langaufun(&x,params) - fy); + + if (l > lold) + step = -step/10; + + p += step; + } + + if (i == MAXCALLS) + return (-2); + + fxr = x; + + + // Search for left x location of fy + + p = maxx - 0.5 * params[0]; + step = -params[0]; + lold = -2.0; + l = -1e300; + i = 0; + + while ( (l != lold) && (i < MAXCALLS) ) { + i++; + + lold = l; + x = p + step; + l = TMath::Abs(langaufun(&x,params) - fy); + + if (l > lold) + step = -step/10; + + p += step; + } + + if (i == MAXCALLS) + return (-3); + + + fxl = x; + + FWHM = fxr - fxl; + return (0); +} diff --git a/TileCalorimeter/TileMonitoring/src/components/TileMonitoring_entries.cxx b/TileCalorimeter/TileMonitoring/src/components/TileMonitoring_entries.cxx index 2dc7900091f38a3128fa1b926998049874421186..ac5ba9bf4909650348203cf729076ad4579c90d6 100755 --- a/TileCalorimeter/TileMonitoring/src/components/TileMonitoring_entries.cxx +++ b/TileCalorimeter/TileMonitoring/src/components/TileMonitoring_entries.cxx @@ -21,6 +21,7 @@ #include "TileMonitoring/TileRawChannelNoiseMonTool.h" #include "TileMonitoring/TileTBBeamMonTool.h" #include "TileMonitoring/TileTBMonTool.h" +#include "TileMonitoring/TileTBCellMonTool.h" DECLARE_TOOL_FACTORY(TileFatherMonTool ) DECLARE_TOOL_FACTORY(TilePaterMonTool ) @@ -44,6 +45,7 @@ DECLARE_TOOL_FACTORY(TileRawChannelTimeMonTool ) DECLARE_TOOL_FACTORY(TileRawChannelNoiseMonTool ) DECLARE_TOOL_FACTORY(TileTBBeamMonTool ) DECLARE_TOOL_FACTORY(TileTBMonTool ) +DECLARE_TOOL_FACTORY(TileTBCellMonTool ) DECLARE_FACTORY_ENTRIES(TileMonitoring) { DECLARE_ALGTOOL(TileFatherMonTool )