00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <iostream>
00011 #include <fstream>
00012 #include <vector>
00013
00014 #include "FWCore/ServiceRegistry/interface/Service.h"
00015 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00016
00017 #include "DQMServices/Core/interface/MonitorElement.h"
00018
00019 #include "DQMServices/Core/interface/DQMStore.h"
00020
00021 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00022 #include "DataFormats/EcalDigi/interface/EEDataFrame.h"
00023 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
00024
00025 #include <DQM/EcalCommon/interface/Numbers.h>
00026
00027 #include <DQM/EcalEndcapMonitorTasks/interface/EEPedestalOnlineTask.h>
00028
00029 using namespace cms;
00030 using namespace edm;
00031 using namespace std;
00032
00033 EEPedestalOnlineTask::EEPedestalOnlineTask(const ParameterSet& ps){
00034
00035 init_ = false;
00036
00037 dqmStore_ = Service<DQMStore>().operator->();
00038
00039 prefixME_ = ps.getUntrackedParameter<string>("prefixME", "");
00040
00041 enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00042
00043 mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns", false);
00044
00045 EEDigiCollection_ = ps.getParameter<edm::InputTag>("EEDigiCollection");
00046
00047 for (int i = 0; i < 18; i++) {
00048 mePedMapG12_[i] = 0;
00049 }
00050
00051 }
00052
00053 EEPedestalOnlineTask::~EEPedestalOnlineTask(){
00054
00055 }
00056
00057 void EEPedestalOnlineTask::beginJob(const EventSetup& c){
00058
00059 ievt_ = 0;
00060
00061 if ( dqmStore_ ) {
00062 dqmStore_->setCurrentFolder(prefixME_ + "/EEPedestalOnlineTask");
00063 dqmStore_->rmdir(prefixME_ + "/EEPedestalOnlineTask");
00064 }
00065
00066 Numbers::initGeometry(c, false);
00067
00068 }
00069
00070 void EEPedestalOnlineTask::beginRun(const Run& r, const EventSetup& c) {
00071
00072 if ( ! mergeRuns_ ) this->reset();
00073
00074 }
00075
00076 void EEPedestalOnlineTask::endRun(const Run& r, const EventSetup& c) {
00077
00078 }
00079
00080 void EEPedestalOnlineTask::reset(void) {
00081
00082 for (int i = 0; i < 18; i++) {
00083 if ( mePedMapG12_[i] ) mePedMapG12_[i]->Reset();
00084 }
00085
00086 }
00087
00088 void EEPedestalOnlineTask::setup(void){
00089
00090 init_ = true;
00091
00092 char histo[200];
00093
00094 if ( dqmStore_ ) {
00095 dqmStore_->setCurrentFolder(prefixME_ + "/EEPedestalOnlineTask");
00096
00097 dqmStore_->setCurrentFolder(prefixME_ + "/EEPedestalOnlineTask/Gain12");
00098 for (int i = 0; i < 18; i++) {
00099 sprintf(histo, "EEPOT pedestal %s G12", Numbers::sEE(i+1).c_str());
00100 mePedMapG12_[i] = dqmStore_->bookProfile2D(histo, histo, 50, Numbers::ix0EE(i+1)+0., Numbers::ix0EE(i+1)+50., 50, Numbers::iy0EE(i+1)+0., Numbers::iy0EE(i+1)+50., 4096, 0., 4096., "s");
00101 mePedMapG12_[i]->setAxisTitle("jx", 1);
00102 mePedMapG12_[i]->setAxisTitle("jy", 2);
00103 dqmStore_->tag(mePedMapG12_[i], i+1);
00104 }
00105
00106 }
00107
00108 }
00109
00110 void EEPedestalOnlineTask::cleanup(void){
00111
00112 if ( ! init_ ) return;
00113
00114 if ( dqmStore_ ) {
00115 dqmStore_->setCurrentFolder(prefixME_ + "/EEPedestalOnlineTask");
00116
00117 dqmStore_->setCurrentFolder(prefixME_ + "/EEPedestalOnlineTask/Gain12");
00118 for ( int i = 0; i < 18; i++ ) {
00119 if ( mePedMapG12_[i] ) dqmStore_->removeElement( mePedMapG12_[i]->getName() );
00120 mePedMapG12_[i] = 0;
00121 }
00122
00123 }
00124
00125 init_ = false;
00126
00127 }
00128
00129 void EEPedestalOnlineTask::endJob(void){
00130
00131 LogInfo("EEPedestalOnlineTask") << "analyzed " << ievt_ << " events";
00132
00133 if ( enableCleanup_ ) this->cleanup();
00134
00135 }
00136
00137 void EEPedestalOnlineTask::analyze(const Event& e, const EventSetup& c){
00138
00139 if ( ! init_ ) this->setup();
00140
00141 ievt_++;
00142
00143 Handle<EEDigiCollection> digis;
00144
00145 if ( e.getByLabel(EEDigiCollection_, digis) ) {
00146
00147 int need = digis->size();
00148 LogDebug("EEPedestalOnlineTask") << "event " << ievt_ << " digi collection size " << need;
00149
00150 for ( EEDigiCollection::const_iterator digiItr = digis->begin(); digiItr != digis->end(); ++digiItr ) {
00151
00152 EEDetId id = digiItr->id();
00153
00154 int ix = id.ix();
00155 int iy = id.iy();
00156
00157 int ism = Numbers::iSM( id );
00158
00159 if ( ism >= 1 && ism <= 9 ) ix = 101 - ix;
00160
00161 float xix = ix - 0.5;
00162 float xiy = iy - 0.5;
00163
00164 LogDebug("EEPedestalOnlineTask") << " det id = " << id;
00165 LogDebug("EEPedestalOnlineTask") << " sm, ix, iy " << ism << " " << ix << " " << iy;
00166
00167 EEDataFrame dataframe = (*digiItr);
00168
00169 for (int i = 0; i < 3; i++) {
00170
00171 int adc = dataframe.sample(i).adc();
00172
00173 MonitorElement* mePedMap = 0;
00174
00175 if ( dataframe.sample(i).gainId() == 1 ) mePedMap = mePedMapG12_[ism-1];
00176 if ( dataframe.sample(i).gainId() == 2 ) mePedMap = 0;
00177 if ( dataframe.sample(i).gainId() == 3 ) mePedMap = 0;
00178
00179 float xval = float(adc);
00180
00181 if ( mePedMap ) mePedMap->Fill(xix, xiy, xval);
00182
00183 }
00184
00185 }
00186
00187 } else {
00188
00189 LogWarning("EEPedestalOnlineTask") << EEDigiCollection_ << " not available";
00190
00191 }
00192
00193 }
00194