00001 #include "DQM/SiStripCommissioningClients/interface/CalibrationHistograms.h"
00002 #include "CondFormats/SiStripObjects/interface/CalibrationAnalysis.h"
00003 #include "DQM/SiStripCommissioningAnalysis/interface/CalibrationAlgorithm.h"
00004 #include "DQM/SiStripCommissioningSummary/interface/CalibrationSummaryFactory.h"
00005 #include "DataFormats/SiStripCommon/interface/SiStripConstants.h"
00006 #include "DQM/SiStripCommon/interface/ExtractTObject.h"
00007 #include "DQMServices/Core/interface/DQMStore.h"
00008 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00009 #include <iostream>
00010 #include <sstream>
00011 #include <iomanip>
00012 #include "TH1F.h"
00013
00014 using namespace std;
00015 using namespace sistrip;
00016
00017
00019 CalibrationHistograms::CalibrationHistograms( DQMStore* bei,const sistrip::RunType& task )
00020 : CommissioningHistograms( bei, task ),
00021 calchan_(0),
00022 isha_(-1),
00023 vfs_(-1)
00024 {
00025 LogTrace(mlDqmClient_)
00026 << "[CalibrationHistograms::" << __func__ << "]"
00027 << " Constructing object...";
00028 std::string pwd = bei->pwd();
00029 std::string calchanPath = pwd.substr(0,pwd.find(sistrip::root_ + "/")+sistrip::root_.size()+1);
00030 calchanPath += "/calchan";
00031 MonitorElement* calchanElement = bei->get(calchanPath);
00032 if(calchanElement) {
00033 calchan_ = calchanElement->getIntValue();
00034 edm::LogVerbatim(mlDqmClient_)
00035 << "[CalibrationHistograms::" << __func__ << "]"
00036 << "CalChan value is " << calchan_;
00037 } else {
00038 edm::LogWarning(mlDqmClient_)
00039 << "[CalibrationHistograms::" << __func__ << "]"
00040 << "CalChan value not found at " << calchanPath
00041 << ". Using " << calchan_;
00042 }
00043 std::string ishaPath = pwd.substr(0,pwd.find(sistrip::root_ + "/")+sistrip::root_.size()+1);
00044 ishaPath += "/isha";
00045 MonitorElement* ishaElement = bei->get(ishaPath);
00046 if(ishaElement) isha_ = ishaElement->getIntValue() ;
00047 std::string vfsPath = pwd.substr(0,pwd.find(sistrip::root_ + "/")+sistrip::root_.size()+1);
00048 vfsPath += "/vfs";
00049 MonitorElement* vfsElement = bei->get(vfsPath);
00050 if(vfsElement) vfs_ = vfsElement->getIntValue() ;
00051 }
00052
00053 CalibrationHistograms::CalibrationHistograms( DQMOldReceiver* mui,const sistrip::RunType& task )
00054 : CommissioningHistograms( mui, task ),
00055 calchan_(0),
00056 isha_(-1),
00057 vfs_(-1)
00058 {
00059 LogTrace(mlDqmClient_)
00060 << "[CalibrationHistograms::" << __func__ << "]"
00061 << " Constructing object...";
00062 factory_ = auto_ptr<CalibrationSummaryFactory>( new CalibrationSummaryFactory );
00063 std::string pwd = bei()->pwd();
00064 std::string calchanPath = pwd.substr(0,pwd.find(sistrip::root_ + "/")+sistrip::root_.size()+1);
00065 calchanPath += "/calchan";
00066 MonitorElement* calchanElement = bei()->get(calchanPath);
00067 if(calchanElement) {
00068 calchan_ = calchanElement->getIntValue() ;
00069 edm::LogVerbatim(mlDqmClient_)
00070 << "[CalibrationHistograms::" << __func__ << "]"
00071 << "CalChan value is " << calchan_;
00072 } else {
00073 edm::LogWarning(mlDqmClient_)
00074 << "[CalibrationHistograms::" << __func__ << "]"
00075 << "CalChan value not found at " << calchanPath
00076 << ". Using " << calchan_;
00077 }
00078 std::string ishaPath = pwd.substr(0,pwd.find(sistrip::root_ + "/")+sistrip::root_.size()+1);
00079 ishaPath += "/isha";
00080 MonitorElement* ishaElement = bei()->get(ishaPath);
00081 if(ishaElement) isha_ = ishaElement->getIntValue() ;
00082 std::string vfsPath = pwd.substr(0,pwd.find(sistrip::root_ + "/")+sistrip::root_.size()+1);
00083 vfsPath += "/vfs";
00084 MonitorElement* vfsElement = bei()->get(vfsPath);
00085 if(vfsElement) vfs_ = vfsElement->getIntValue() ;
00086 }
00087
00088
00090 CalibrationHistograms::~CalibrationHistograms() {
00091 LogTrace(mlDqmClient_)
00092 << "[CalibrationHistograms::" << __func__ << "]"
00093 << " Deleting object...";
00094 }
00095
00096
00098 void CalibrationHistograms::histoAnalysis( bool debug ) {
00099
00100
00101 Analyses::iterator ianal;
00102 for ( ianal = data().begin(); ianal != data().end(); ianal++ ) {
00103 if ( ianal->second ) { delete ianal->second; }
00104 }
00105 data().clear();
00106
00107
00108 HistosMap::const_iterator iter = histos().begin();
00109 for ( ; iter != histos().end(); iter++ ) {
00110
00111 if ( iter->second.empty() ) {
00112 edm::LogWarning(mlDqmClient_)
00113 << "[CalibrationHistograms::" << __func__ << "]"
00114 << " Zero collation histograms found!";
00115 continue;
00116 }
00117
00118
00119 vector<TH1*> profs;
00120 Histos::const_iterator ihis = iter->second.begin();
00121 for ( ; ihis != iter->second.end(); ihis++ ) {
00122 TH1F* prof = ExtractTObject<TH1F>().extract( (*ihis)->me_ );
00123 if ( prof ) { profs.push_back(prof); }
00124 }
00125
00126 CalibrationAnalysis* anal = new CalibrationAnalysis( iter->first, (task()==sistrip::CALIBRATION_DECO), calchan_ );
00127 CalibrationAlgorithm algo( anal );
00128 algo.analysis( profs );
00129 data()[iter->first] = anal;
00130
00131 }
00132
00133 }
00134
00135
00137 void CalibrationHistograms::printAnalyses() {
00138 Analyses::iterator ianal = data().begin();
00139 Analyses::iterator janal = data().end();
00140 for ( ; ianal != janal; ++ianal ) {
00141 if ( ianal->second ) {
00142 std::stringstream ss;
00143 ianal->second->print( ss,0 );
00144 ianal->second->print( ss,1 );
00145 if ( ianal->second->isValid() ) { LogTrace(mlDqmClient_) << ss.str();
00146 } else { edm::LogWarning(mlDqmClient_) << ss.str(); }
00147 }
00148 }
00149 }
00150