00001 #ifndef _SiPixelActionExecutor_h_
00002 #define _SiPixelActionExecutor_h_
00003
00004 #include "DQMServices/Core/interface/MonitorElement.h"
00005 #include "DQMServices/Core/interface/DQMStore.h"
00006 #include "DQM/SiPixelMonitorClient/interface/SiPixelConfigParser.h"
00007 #include "DQM/SiPixelMonitorClient/interface/SiPixelConfigWriter.h"
00008 #include "DQMServices/ClientConfig/interface/QTestHandle.h"
00009 #include "FWCore/Framework/interface/Event.h"
00010 #include "FWCore/Framework/interface/EventSetup.h"
00011 #include "FWCore/Framework/interface/ESHandle.h"
00012 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00013 #include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h"
00014 #include "CondFormats/SiPixelObjects/interface/DetectorIndex.h"
00015 #include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h"
00016 #include "CondFormats/SiPixelObjects/interface/SiPixelFrameConverter.h"
00017 #include <fstream>
00018 #include <map>
00019 #include <vector>
00020 #include <string>
00021
00022
00023 enum funcType {EachBinContent, Entries, Mean, Sum, WeightedSum};
00024 #define PI_12 0.261799
00025 #define PI 3.141592
00026 #define PI_2 1.570796
00027
00028 #define NLev1 4 // Number of HalfCylinders in Endcap or number of Shells in Barrel, which is bigger
00029 #define NLev2 3 // Number of Disks in Endcap or number of Layers in Barrel, which is bigger
00030 #define NLev3 22 // Number of Blades in Endcap or number of Ladders in Barrel, which is bigger
00031 #define NLev4 7 // Number of Modules - different for Endcap and Barrel, which is bigger
00032
00033 #define NCyl 4
00034 #define NDisk 2
00035 #define NBlade 12
00036 #define NModuleE 7
00037
00038 #define NShell 4
00039 #define NLayer 3
00040
00041 #define NModuleB 4
00042
00043 #define NPoints 5
00044
00045
00046
00047 class SiPixelActionExecutor {
00048
00049 public:
00050
00051 SiPixelActionExecutor( bool offlineXMLfile,
00052 bool Tier0Flag);
00053 ~SiPixelActionExecutor();
00054
00055 void createSummary( DQMStore * bei);
00056 void bookDeviations( DQMStore * bei);
00057 void bookEfficiency( DQMStore * bei);
00058 void createEfficiency( DQMStore * bei);
00059 void fillEfficiency( DQMStore * bei,
00060 bool isbarrel);
00061 void bookOccupancyPlots( DQMStore * bei,
00062 bool hiRes,
00063 bool isbarrel);
00064 void bookOccupancyPlots( DQMStore * bei,
00065 bool hiRes);
00066 void createOccupancy( DQMStore * bei);
00067 void setupQTests( DQMStore * bei);
00068 void checkQTestResults( DQMStore * bei);
00069 void createTkMap( DQMStore * bei,
00070 std::string mEName,
00071 std::string theTKType);
00072 bool readConfiguration( int & tkmap_freq,
00073 int & sum_barrel_freq,
00074 int & sum_endcap_freq,
00075 int & sum_grandbarrel_freq,
00076 int & sum_grandendcap_freq,
00077 int & message_limit,
00078 int & source_type,
00079 int & calib_type);
00080 bool readConfiguration( int & tkmap_freq,
00081 int & summary_freq);
00082 void readConfiguration( );
00083 void createLayout( DQMStore * bei);
00084 void fillLayout( DQMStore * bei);
00085 int getTkMapMENames( std::vector<std::string> & names);
00086 void dumpModIds( DQMStore * bei,
00087 edm::EventSetup const & eSetup);
00088 void dumpBarrelModIds( DQMStore * bei,
00089 edm::EventSetup const & eSetup);
00090 void dumpEndcapModIds( DQMStore * bei,
00091 edm::EventSetup const & eSetup);
00092 void dumpRefValues( DQMStore * bei,
00093 edm::EventSetup const & eSetup);
00094 void dumpBarrelRefValues( DQMStore * bei,
00095 edm::EventSetup const & eSetup);
00096 void dumpEndcapRefValues( DQMStore * bei,
00097 edm::EventSetup const & eSetup);
00098 void createMaps(DQMStore* bei, std::string type, std::string name, funcType ff);
00099 void bookTrackerMaps(DQMStore* bei, std::string name);
00100
00101
00102 private:
00103
00104
00105 MonitorElement* getSummaryME( DQMStore * bei,
00106 std::string me_name);
00107 MonitorElement* getFEDSummaryME( DQMStore * bei,
00108 std::string me_name);
00109 void GetBladeSubdirs(DQMStore* bei, std::vector<std::string>& blade_subdirs);
00110 void fillSummary( DQMStore * bei,
00111 std::string dir_name,
00112 std::vector<std::string> & me_names,
00113 bool isbarrel);
00114 void fillDeviations( DQMStore * bei);
00115 void fillFEDErrorSummary( DQMStore * bei,
00116 std::string dir_name,
00117 std::vector<std::string> & me_names);
00118 void fillGrandBarrelSummaryHistos(DQMStore * bei,
00119 std::vector<std::string> & me_names);
00120 void fillGrandEndcapSummaryHistos(DQMStore * bei,
00121 std::vector<std::string> & me_names);
00122 void getGrandSummaryME( DQMStore * bei,
00123 int nbin,
00124 std::string & me_name,
00125 std::vector<MonitorElement*> & mes);
00126
00127 void fillOccupancy( DQMStore * bei,
00128 bool isbarrel);
00129
00130 SiPixelConfigParser* configParser_;
00131 SiPixelConfigWriter* configWriter_;
00132 edm::ESHandle<SiPixelFedCablingMap> theCablingMap;
00133
00134 std::vector<std::string> summaryMENames;
00135 std::vector<std::string> tkMapMENames;
00136
00137 int message_limit_;
00138 int source_type_;
00139 int calib_type_;
00140 int ndet_;
00141 bool offlineXMLfile_;
00142 bool Tier0Flag_;
00143
00144 QTestHandle* qtHandler_;
00145
00146 MonitorElement * OccupancyMap;
00147 MonitorElement * PixelOccupancyMap;
00148 MonitorElement * HitEfficiency_L1;
00149 MonitorElement * HitEfficiency_L2;
00150 MonitorElement * HitEfficiency_L3;
00151 MonitorElement * HitEfficiency_Dp1;
00152 MonitorElement * HitEfficiency_Dp2;
00153 MonitorElement * HitEfficiency_Dm1;
00154 MonitorElement * HitEfficiency_Dm2;
00155 MonitorElement * DEV_adc_Barrel;
00156 MonitorElement * DEV_ndigis_Barrel;
00157 MonitorElement * DEV_charge_Barrel;
00158 MonitorElement * DEV_nclusters_Barrel;
00159 MonitorElement * DEV_size_Barrel;
00160 MonitorElement * DEV_adc_Endcap;
00161 MonitorElement * DEV_ndigis_Endcap;
00162 MonitorElement * DEV_charge_Endcap;
00163 MonitorElement * DEV_nclusters_Endcap;
00164 MonitorElement * DEV_size_Endcap;
00165
00166
00167 int createMap(Double_t map[][NLev2][NLev3][NLev4], std::string type, DQMStore* bei, funcType ff, bool isBarrel);
00168 void getData(Double_t map[][NLev2][NLev3][NLev4], std::string type, DQMStore* bei, funcType ff, Int_t i, Int_t j, Int_t k, Int_t l);
00169 void prephistosB(MonitorElement* me[NCyl], DQMStore *bei, const Double_t map[][NLev2][NLev3][NLev4], std::string name, Double_t min, Double_t max);
00170 void prephistosE(MonitorElement* me[NCyl], DQMStore *bei, const Double_t map[][NLev2][NLev3][NLev4], std::string name, Double_t min, Double_t max);
00171 Double_t mapMax(const Double_t map[][NLev2][NLev3][NLev4], bool isBarrel);
00172 Double_t mapMin(const Double_t map[][NLev2][NLev3][NLev4], bool isBarrel);
00173
00174 TH2F * temp_H;
00175 TH2F * temp_1x2;
00176 TH2F * temp_1x5;
00177 TH2F * temp_2x3;
00178 TH2F * temp_2x4;
00179 TH2F * temp_2x5;
00180
00181 };
00182 #endif