Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include <DQM/DTMonitorModule/src/DTDCSByLumiTask.h>
00014
00015
00016 #include <FWCore/Framework/interface/EventSetup.h>
00017
00018
00019 #include "Geometry/Records/interface/MuonGeometryRecord.h"
00020 #include "Geometry/DTGeometry/interface/DTGeometry.h"
00021 #include "Geometry/DTGeometry/interface/DTLayer.h"
00022 #include "Geometry/DTGeometry/interface/DTTopology.h"
00023
00024 #include "CondFormats/DataRecord/interface/DTHVStatusRcd.h"
00025 #include "CondFormats/DTObjects/interface/DTHVStatus.h"
00026
00027 #include "DQMServices/Core/interface/DQMStore.h"
00028 #include "DQMServices/Core/interface/MonitorElement.h"
00029 #include "FWCore/ServiceRegistry/interface/Service.h"
00030 #include <FWCore/Framework/interface/EventSetupRecord.h>
00031 #include <FWCore/Framework/interface/EventSetupRecordKey.h>
00032 #include <iostream>
00033
00034
00035 using namespace edm;
00036 using namespace std;
00037
00038
00039 DTDCSByLumiTask::DTDCSByLumiTask(const edm::ParameterSet& ps) : theEvents(0) , theLumis(0) {
00040
00041 theDQMStore = Service<DQMStore>().operator->();
00042 LogTrace("DTDQM|DTMonitorModule|DTDCSByLumiTask")
00043 << "[DTDCSByLumiTask]: Constructor" << endl;
00044
00045
00046
00047
00048 }
00049
00050
00051 DTDCSByLumiTask::~DTDCSByLumiTask(){
00052
00053 LogTrace("DTDQM|DTMonitorModule|DTDCSByLumiTask")
00054 << "DTDCSByLumiTask: processed " << theEvents <<
00055 " events in " << theLumis << " lumi sections" << endl;
00056
00057 }
00058
00059
00060 void DTDCSByLumiTask::endJob(){
00061
00062 LogTrace("DTDQM|DTMonitorModule|DTDCSByLumiTask")
00063 <<"[DTDCSByLumiTask] endjob called!"<<endl;
00064
00065 }
00066
00067
00068 void DTDCSByLumiTask::beginJob(){
00069
00070 LogTrace("DTDQM|DTMonitorModule|DTDCSByLumiTask")
00071 <<"[DTDCSByLumiTask]: BeginJob"<<endl;
00072
00073 }
00074
00075 void DTDCSByLumiTask::beginRun(const edm::Run& run, const edm::EventSetup& context) {
00076
00077 LogTrace("DTDQM|DTMonitorModule|DTDCSByLumiTask")
00078 << "[DTDCSByLumiTask]: begin run" << endl;
00079
00080 bookHistos();
00081
00082 context.get<MuonGeometryRecord>().get(theDTGeom);
00083
00084 DTHVRecordFound=true;
00085
00086 eventsetup::EventSetupRecordKey recordKey(eventsetup::EventSetupRecordKey::TypeTag::findType("DTHVStatusRcd"));
00087
00088 std::vector<eventsetup::EventSetupRecordKey> recordKeys;
00089 context.fillAvailableRecordKeys(recordKeys);
00090 vector<eventsetup::EventSetupRecordKey>::iterator it = find(recordKeys.begin(),recordKeys.end(),recordKey);
00091
00092 if( it == recordKeys.end() ) {
00093
00094 LogTrace("DTDQM|DTMonitorModule|DTDCSByLumiTask")<<"Record DTHVStatusRcd does not exist "<<std::endl;
00095
00096 DTHVRecordFound=false;
00097 }
00098
00099 }
00100
00101
00102 void DTDCSByLumiTask::beginLuminosityBlock(LuminosityBlock const& lumiSeg, EventSetup const& context) {
00103
00104 theLumis++;
00105
00106 LogTrace("DTDQM|DTMonitorModule|DTDCSByLumiTask")
00107 << "[DTDCSByLumiTask]: Begin of processed lumi # " << lumiSeg.id().luminosityBlock()
00108 << " " << theLumis << " lumi processed by this job" << endl;
00109
00110 for(int wheel=0; wheel <5; wheel++) {
00111 hActiveUnits[wheel]->Reset();
00112 }
00113
00114 }
00115
00116
00117 void DTDCSByLumiTask::endLuminosityBlock(const edm::LuminosityBlock& lumiSeg, const edm::EventSetup& context) {
00118
00119
00120 if(DTHVRecordFound) context.get<DTHVStatusRcd>().get(hvStatus);
00121
00122 vector<DTLayer*>::const_iterator layersIt = theDTGeom->layers().begin();
00123 vector<DTLayer*>::const_iterator layersEnd = theDTGeom->layers().end();
00124
00125 for(; layersIt!=layersEnd; ++layersIt) {
00126
00127 int wheel = (*layersIt)->id().wheel();
00128
00129 int nWiresLayer = (*layersIt)->specificTopology().channels();
00130
00131 hActiveUnits[wheel+2]->Fill(1,nWiresLayer);
00132 int nActiveWires = nWiresLayer;
00133
00134 int flagA = -100;
00135 int flagC = -100;
00136 int flagS = -100;
00137 int first = -100;
00138 int last = -100;
00139
00140
00141
00142
00143
00144 if( DTHVRecordFound ) {
00145 if ( !hvStatus->get((*layersIt)->id(),0,first,last,flagA,flagC,flagS)
00146 && (flagA || flagC || flagS) ) {
00147 nActiveWires -= (last - first + 1);
00148 }
00149
00150 if ( !hvStatus->get((*layersIt)->id(),1,first,last,flagA,flagC,flagS)
00151 && (flagA || flagC || flagS) ) {
00152 nActiveWires -= (last - first + 1);
00153 }
00154 } else {
00155 nActiveWires=-1.;
00156 }
00157
00158 hActiveUnits[wheel+2]->Fill(2,nActiveWires);
00159
00160 }
00161
00162
00163
00164
00165
00166
00167
00168 }
00169
00170
00171 void DTDCSByLumiTask::bookHistos() {
00172
00173
00174 theDQMStore->setCurrentFolder(topFolder());
00175
00176 for(int wheel=-2; wheel <=2; wheel++) {
00177
00178 stringstream wheel_str; wheel_str << wheel;
00179
00180 MonitorElement* ME = theDQMStore->book1D("hActiveUnits"+wheel_str.str(),"Active Untis x LS Wh"+wheel_str.str(),2,0.5,2.5);
00181 ME->setLumiFlag();
00182
00183 hActiveUnits.push_back(ME);
00184 }
00185
00186 }
00187
00188 void DTDCSByLumiTask::analyze(const edm::Event& event, const edm::EventSetup& c) {
00189
00190 theEvents++;
00191
00192 }
00193
00194
00195 string DTDCSByLumiTask::topFolder() const {
00196
00197 return string("DT/EventInfo/DCSContents");
00198
00199 }