Go to the documentation of this file.00001 #include "DQM/SiPixelMonitorClient/interface/SiPixelDaqInfo.h"
00002 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
00003 #include "DataFormats/FEDRawData/interface/FEDRawData.h"
00004 #include "DataFormats/FEDRawData/interface/FEDNumbering.h"
00005 #include "CondFormats/RunInfo/interface/RunInfo.h"
00006 #include "CondFormats/RunInfo/interface/RunSummary.h"
00007 #include "CondFormats/DataRecord/interface/RunSummaryRcd.h"
00008
00009 using namespace std;
00010 using namespace edm;
00011 SiPixelDaqInfo::SiPixelDaqInfo(const edm::ParameterSet& ps) {
00012
00013 FEDRange_.first = ps.getUntrackedParameter<unsigned int>("MinimumPixelFEDId", 0);
00014 FEDRange_.second = ps.getUntrackedParameter<unsigned int>("MaximumPixelFEDId", 39);
00015 daqSource_ = ps.getUntrackedParameter<string>("daqSource", "source");
00016
00017 NumberOfFeds_ =FEDRange_.second - FEDRange_.first +1;
00018
00019 NEvents_ = 0;
00020 for(int i=0; i!=40; i++) FEDs_[i] = 0;
00021
00022 }
00023
00024 SiPixelDaqInfo::~SiPixelDaqInfo(){}
00025
00026 void SiPixelDaqInfo::beginLuminosityBlock(const LuminosityBlock& lumiBlock, const EventSetup& iSetup){}
00027
00028
00029 void SiPixelDaqInfo::endLuminosityBlock(const edm::LuminosityBlock& lumiBlock, const edm::EventSetup& iSetup){
00030 edm::eventsetup::EventSetupRecordKey recordKey(edm::eventsetup::EventSetupRecordKey::TypeTag::findType("RunInfoRcd"));
00031 if(0 != iSetup.find( recordKey ) ) {
00032
00033
00034 ESHandle<RunInfo> sumFED;
00035 iSetup.get<RunInfoRcd>().get(sumFED);
00036 vector<int> FedsInIds= sumFED->m_fed_in;
00037
00038 int FedCount=0;
00039 int FedCountBarrel=0;
00040 int FedCountEndcap=0;
00041
00042
00043 for(unsigned int fedItr=0;fedItr<FedsInIds.size(); ++fedItr) {
00044 int fedID=FedsInIds[fedItr];
00045
00046
00047 if(fedID>=FEDRange_.first && fedID<=FEDRange_.second){
00048 ++FedCount;
00049 if(fedID>=0 && fedID<=31) ++FedCountBarrel;
00050 else if(fedID>=32 && fedID<=39) ++FedCountEndcap;
00051 }
00052 }
00053
00054
00055 if(FedCountBarrel<=32){
00056 FedCountBarrel = 0; FedCountEndcap = 0; FedCount = 0; NumberOfFeds_ = 40;
00057 for(int i=0; i!=40; i++){
00058 if(i<=31 && FEDs_[i]>0) FedCountBarrel++;
00059 if(i>=32 && FEDs_[i]>0) FedCountEndcap++;
00060 if(FEDs_[i]>0) FedCount++;
00061 }
00062 }
00063 if(NumberOfFeds_>0){
00064
00065 Fraction_->Fill( FedCount/NumberOfFeds_);
00066
00067 FractionBarrel_->Fill( FedCountBarrel/32.);
00068
00069 FractionEndcap_->Fill( FedCountEndcap/8.);
00070 }else{
00071 Fraction_->Fill(-1);
00072 FractionBarrel_->Fill(-1);
00073 FractionEndcap_->Fill(-1);
00074 }
00075
00076 }else{
00077 Fraction_->Fill(-1);
00078 FractionBarrel_->Fill(-1);
00079 FractionEndcap_->Fill(-1);
00080 return;
00081 }
00082 }
00083
00084 void SiPixelDaqInfo::endRun(const edm::Run& r, const edm::EventSetup& iSetup){
00085 edm::eventsetup::EventSetupRecordKey recordKey(edm::eventsetup::EventSetupRecordKey::TypeTag::findType("RunInfoRcd"));
00086 if(0 != iSetup.find( recordKey ) ) {
00087
00088
00089 ESHandle<RunInfo> sumFED;
00090 iSetup.get<RunInfoRcd>().get(sumFED);
00091 vector<int> FedsInIds= sumFED->m_fed_in;
00092
00093 int FedCount=0;
00094 int FedCountBarrel=0;
00095 int FedCountEndcap=0;
00096
00097
00098 for(unsigned int fedItr=0;fedItr<FedsInIds.size(); ++fedItr) {
00099 int fedID=FedsInIds[fedItr];
00100
00101
00102 if(fedID>=FEDRange_.first && fedID<=FEDRange_.second){
00103 ++FedCount;
00104 if(fedID>=0 && fedID<=31) ++FedCountBarrel;
00105 else if(fedID>=32 && fedID<=39) ++FedCountEndcap;
00106 }
00107 }
00108
00109 if(FedCountBarrel>32){
00110 FedCountBarrel = nFEDsBarrel_;
00111 FedCountEndcap = nFEDsEndcap_;
00112 FedCount = FedCountBarrel + FedCountEndcap;
00113 NumberOfFeds_ = 40;
00114 }
00115
00116
00117 if(FedCountBarrel<=32){
00118 FedCountBarrel = 0; FedCountEndcap = 0; FedCount = 0; NumberOfFeds_ = 40;
00119 for(int i=0; i!=40; i++){
00120 if(i<=31 && FEDs_[i]>0) FedCountBarrel++;
00121 if(i>=32 && FEDs_[i]>0) FedCountEndcap++;
00122 if(FEDs_[i]>0) FedCount++;
00123 }
00124 }
00125 if(NumberOfFeds_>0){
00126
00127 Fraction_->Fill( FedCount/NumberOfFeds_);
00128
00129 FractionBarrel_->Fill( FedCountBarrel/32.);
00130
00131 FractionEndcap_->Fill( FedCountEndcap/8.);
00132 }else{
00133 Fraction_->Fill(-1);
00134 FractionBarrel_->Fill(-1);
00135 FractionEndcap_->Fill(-1);
00136 }
00137
00138 }else{
00139 Fraction_->Fill(-1);
00140 FractionBarrel_->Fill(-1);
00141 FractionEndcap_->Fill(-1);
00142 return;
00143 }
00144 }
00145
00146
00147 void SiPixelDaqInfo::beginJob(){
00148
00149 dbe_ = 0;
00150 dbe_ = Service<DQMStore>().operator->();
00151
00152
00153 dbe_->setCurrentFolder("Pixel/EventInfo");
00154 Fraction_= dbe_->bookFloat("DAQSummary");
00155 dbe_->setCurrentFolder("Pixel/EventInfo/DAQContents");
00156 FractionBarrel_= dbe_->bookFloat("PixelBarrelFraction");
00157 FractionEndcap_= dbe_->bookFloat("PixelEndcapFraction");
00158 }
00159
00160
00161 void SiPixelDaqInfo::endJob() {}
00162
00163
00164
00165 void SiPixelDaqInfo::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup){
00166 NEvents_++;
00167
00168 if(NEvents_>=1 && NEvents_<=100){
00169
00170 edm::Handle<FEDRawDataCollection> rawDataHandle;
00171 iEvent.getByLabel(daqSource_, rawDataHandle);
00172 if(!rawDataHandle.isValid()){
00173 edm::LogInfo("SiPixelDaqInfo") << daqSource_ << " is empty!";
00174 return;
00175 }
00176 const FEDRawDataCollection& rawDataCollection = *rawDataHandle;
00177 nFEDsBarrel_ = 0; nFEDsEndcap_ = 0;
00178 for(int i = 0; i != 40; i++){
00179 if(rawDataCollection.FEDData(i).size() > 208 ) FEDs_[i]++;
00180 }
00181 }
00182
00183 }
00184