Go to the documentation of this file.00001 #include "CalibTracker/SiStripCommon/interface/SiStripDCSStatus.h"
00002 #include "FWCore/Framework/interface/Event.h"
00003 #include "FWCore/Framework/interface/EventSetup.h"
00004 #include "FWCore/Framework/interface/ESHandle.h"
00005
00006 #include "DataFormats/Common/interface/Handle.h"
00007 #include "DataFormats/Scalers/interface/DcsStatus.h"
00008
00009 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
00010 #include "DataFormats/FEDRawData/interface/FEDRawData.h"
00011 #include "DataFormats/FEDRawData/interface/FEDNumbering.h"
00012
00013
00014 #include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h"
00015 #include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h"
00016
00017 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
00018 #include "DataFormats/SiStripDetId/interface/TECDetId.h"
00019 #include "DataFormats/SiStripDetId/interface/TIBDetId.h"
00020 #include "DataFormats/SiStripDetId/interface/TOBDetId.h"
00021 #include "DataFormats/SiStripDetId/interface/TIDDetId.h"
00022
00023 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00024 #include <iostream>
00025
00026
00027
00028
00029 SiStripDCSStatus::SiStripDCSStatus() :
00030 TIBTIDinDAQ(false),
00031 TOBinDAQ(false),
00032 TECFinDAQ(false),
00033 TECBinDAQ(false),
00034 trackerAbsent(false),
00035 rawdataAbsent(true),
00036 initialised(false) {
00037 }
00038
00039
00040
00041 SiStripDCSStatus::~SiStripDCSStatus() {
00042 }
00043
00044
00045
00046 bool SiStripDCSStatus::getStatus(edm::Event const& e, edm::EventSetup const& eSetup){
00047
00048 bool retVal = true;
00049 if (!initialised) initialise(e, eSetup);
00050
00051 edm::Handle<DcsStatusCollection> dcsStatus;
00052 e.getByLabel("scalersRawToDigi", dcsStatus);
00053 if ( trackerAbsent || !dcsStatus.isValid()) return retVal;
00054 if ((*dcsStatus).size() == 0) return retVal;
00055
00056 statusTIBTID = true;
00057 statusTOB = true;
00058 statusTECF = true;
00059 statusTECB = true;
00060
00061 bool dcsTIBTID = ((*dcsStatus)[0].ready(DcsStatus::TIBTID));
00062 bool dcsTOB = ((*dcsStatus)[0].ready(DcsStatus::TOB));
00063 bool dcsTECF = ((*dcsStatus)[0].ready(DcsStatus::TECp));
00064 bool dcsTECB = ((*dcsStatus)[0].ready(DcsStatus::TECm));
00065 if (rawdataAbsent) {
00066 statusTIBTID = dcsTIBTID;
00067 statusTOB = dcsTOB;
00068 statusTECF = dcsTECF;
00069 statusTECB = dcsTECB;
00070 } else {
00071 if ( TIBTIDinDAQ && !dcsTIBTID ) statusTIBTID = false;
00072 if ( TOBinDAQ && !dcsTOB ) statusTOB = false;
00073 if ( TECFinDAQ && !dcsTECF ) statusTECF = false;
00074 if ( TECBinDAQ && !dcsTECB ) statusTECB = false;
00075 }
00076
00077 LogDebug("SiStripDCSStatus") << " SiStripDCSStatus :: Detectors in DAQ (TIBTID, TOB, TEC+ TEC-)"
00078 << TIBTIDinDAQ << " "
00079 << TOBinDAQ << " "
00080 << TECFinDAQ << " "
00081 << TECBinDAQ << std::endl;
00082 LogDebug("SiStripDCSStatus") << " SiStripDCSStatus :: Detectors in ON (TIBTID, TOB, TEC+ TEC-)"
00083 << dcsTIBTID << " "
00084 << dcsTOB << " "
00085 << dcsTECF << " "
00086 << dcsTECB << std::endl;
00087
00088 LogDebug("SiStripDCSStatus") << " SiStripDCSStatus :: Final Flags (TIBTID, TOB, TEC+ TEC-)"
00089 << statusTIBTID << " "
00090 << statusTOB << " "
00091 << statusTECF << " "
00092 << statusTECB << std::endl;
00093 if (statusTIBTID && statusTOB && statusTECF && statusTECB) retVal = true;
00094 else retVal = false;
00095 LogDebug("SiStripDCSStatus") << " Return Value " << retVal ;
00096 return retVal;
00097 }
00098
00099
00100
00101 void SiStripDCSStatus::initialise(edm::Event const& e, edm::EventSetup const& eSetup) {
00102
00103 edm::ESHandle< SiStripFedCabling > fedCabling_;
00104 eSetup.get<SiStripFedCablingRcd>().get(fedCabling_);
00105 const std::vector<uint16_t>& connectedFEDs = fedCabling_->feds();
00106
00107 edm::Handle<FEDRawDataCollection> rawDataHandle;
00108 e.getByLabel("source", rawDataHandle);
00109
00110 if ( !rawDataHandle.isValid() ) {
00111 rawdataAbsent = true;
00112 return;
00113 }
00114
00115 rawdataAbsent = false;
00116 const FEDRawDataCollection& rawDataCollection = *rawDataHandle;
00117 for(std::vector<unsigned short>::const_iterator ifed = connectedFEDs.begin(); ifed != connectedFEDs.end(); ifed++){
00118 const std::vector<FedChannelConnection> fedChannels = fedCabling_->connections( *ifed );
00119 if (!(rawDataCollection.FEDData(*ifed).size()) || !(rawDataCollection.FEDData(*ifed).data()) ) continue;
00120
00121 for (std::vector<FedChannelConnection>::const_iterator iconn = fedChannels.begin();
00122 iconn < fedChannels.end(); iconn++){
00123 if (!iconn->isConnected()) continue;
00124 uint32_t detId = iconn->detId();
00125 StripSubdetector subdet(detId);
00126 if ( (subdet.subdetId() == StripSubdetector::TIB) || (subdet.subdetId() == StripSubdetector::TID)) {
00127 TIBTIDinDAQ = true;
00128 break;
00129 } else if (subdet.subdetId() == StripSubdetector::TOB) {
00130 TOBinDAQ = true;
00131 break;
00132 } else if (subdet.subdetId() == StripSubdetector::TEC) {
00133 if (TECDetId(detId).side() == 2) TECFinDAQ = true;
00134 else if (TECDetId(detId).side() == 1) TECBinDAQ = true;
00135 break;
00136 }
00137 }
00138 if (TIBTIDinDAQ && TOBinDAQ && TECFinDAQ && TECBinDAQ) break;
00139 }
00140 initialised = true;
00141 if (!TIBTIDinDAQ && !TOBinDAQ && !TECFinDAQ && !TECBinDAQ) trackerAbsent = true;
00142 }