Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "DQM/L1TMonitor/interface/L1TFED.h"
00011 #include "DQMServices/Core/interface/DQMStore.h"
00012 #include "DQMServices/Core/interface/MonitorElement.h"
00013 #include "DataFormats/FEDRawData/interface/FEDHeader.h"
00014 #include "DataFormats/FEDRawData/interface/FEDTrailer.h"
00015
00016 using namespace std;
00017 using namespace edm;
00018
00019 L1TFED::L1TFED(const ParameterSet& ps)
00020 {
00021
00022
00023 verbose_ = ps.getUntrackedParameter<bool>("verbose", false);
00024 rawl_ = ps.getParameter< InputTag >("rawTag");
00025 if(verbose_) cout << "L1TFED: constructor...." << endl;
00026
00027
00028 dbe = NULL;
00029 if ( ps.getUntrackedParameter<bool>("DQMStore", false) )
00030 {
00031 dbe = Service<DQMStore>().operator->();
00032 dbe->setVerbose(0);
00033 }
00034
00035 outputFile_ = ps.getUntrackedParameter<string>("outputFile", "");
00036 if ( outputFile_.size() != 0 ) {
00037 cout << "L1T Monitoring histograms will be saved to " << outputFile_.c_str() << endl;
00038 }
00039
00040 bool disable = ps.getUntrackedParameter<bool>("disableROOToutput", false);
00041 if(disable){
00042 outputFile_="";
00043 }
00044
00045 l1feds_ = ps.getParameter<std::vector<int> >("L1FEDS");
00046
00047 directory_ = ps.getUntrackedParameter<std::string>("FEDDirName","L1T/FEDIntegrity");
00048
00049
00050 if ( dbe !=NULL ) {
00051 dbe->setCurrentFolder(directory_);
00052 }
00053
00054 stableROConfig_ = ps.getUntrackedParameter<bool>("stableROConfig", true);
00055 }
00056
00057 L1TFED::~L1TFED()
00058 {
00059 }
00060
00061 void L1TFED::beginJob(void)
00062 {
00063
00064 nev_ = 0;
00065
00066
00067 DQMStore* dbe = 0;
00068 dbe = Service<DQMStore>().operator->();
00069
00070 if ( dbe ) {
00071 dbe->setCurrentFolder(directory_);
00072 dbe->rmdir(directory_);
00073 }
00074
00075
00076 if ( dbe )
00077 {
00078 dbe->setCurrentFolder(directory_);
00079
00080 fedentries = dbe->book1D("FEDEntries", "Fed ID occupancy", l1feds_.size(), 0.,l1feds_.size() );
00081 fedfatal = dbe->book1D("FEDFatal", "Fed ID non present ", l1feds_.size(), 0., l1feds_.size());
00082 fednonfatal = dbe->book1D("FEDNonFatal", "Fed corrupted data ", l1feds_.size(), 0.,l1feds_.size() );
00083 hfedprof = dbe->bookProfile("fedprofile","FED Size by ID", l1feds_.size(), 0., l1feds_.size(),0,0.,5000.);
00084 for(unsigned int i=0;i<l1feds_.size();i++){
00085 ostringstream sfed;
00086 sfed << l1feds_[i];
00087 fedentries->setBinLabel(i+1,"FED "+ sfed.str());
00088 fedfatal->setBinLabel(i+1,"FED "+ sfed.str());
00089 fednonfatal->setBinLabel(i+1,"FED "+ sfed.str());
00090
00091
00092 }
00093
00094 hfedsize = dbe->book1D("fedsize","FED Size Distribution",100,0.,10000.);
00095
00096 }
00097 }
00098
00099
00100 void L1TFED::endJob(void)
00101 {
00102
00103 if(verbose_) std::cout << "L1T FED Integrity: end job...." << std::endl;
00104 LogInfo("EndJob") << "analyzed " << nev_ << " events";
00105
00106 if ( outputFile_.size() != 0 && dbe ) dbe->save(outputFile_);
00107
00108 return;
00109 }
00110
00111 void L1TFED::analyze(const Event& e, const EventSetup& c)
00112 {
00113 nev_++;
00114 if(verbose_) cout << "L1T FED Integrity: analyze...." << endl;
00115
00116 edm::Handle<FEDRawDataCollection> rawdata;
00117 bool t = e.getByLabel(rawl_,rawdata);
00118
00119 if ( ! t ) {
00120 if(verbose_) cout << "can't find FEDRawDataCollection "<< endl;
00121 }
00122
00123 else {
00124
00125 if(verbose_) cout << "fedlist size = " << l1feds_.size() << endl;
00126
00127 for (unsigned int i = 0; i<l1feds_.size(); i++){
00128 int fedId = l1feds_[i];
00129 if(verbose_) cout << "fedId = " << fedId << endl;
00130
00131 const FEDRawData & data = rawdata->FEDData(fedId);
00132
00133 if(size_t size=data.size()){
00134
00135 fedentries->Fill(i);
00136 hfedsize->Fill(float(size));
00137 hfedprof->Fill(float(i),float(size));
00138 if(verbose_) cout << "header check = " << FEDHeader(data.data()).check() << endl;
00139 if(verbose_) cout << "trailer check = " << FEDTrailer(data.data()).check() << endl;
00140
00141 if(!FEDHeader(data.data()).check()) fedfatal->Fill(i);
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158 } else {
00159
00160 if(verbose_) cout << "empty fed " << i << endl;
00161 if(stableROConfig_) fedfatal->Fill(i);
00162
00163 }
00164 }
00165
00166 }
00167
00168 }
00169
00170