CMS 3D CMS Logo

CalibrationHistograms.cc

Go to the documentation of this file.
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   // Clear map holding analysis objects
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   // Iterate through map containing vectors of profile histograms
00108   HistosMap::const_iterator iter = histos().begin();
00109   for ( ; iter != histos().end(); iter++ ) {
00110     // Check vector of histos is not empty (should be 1 histo)
00111     if ( iter->second.empty() ) {
00112       edm::LogWarning(mlDqmClient_)
00113            << "[CalibrationHistograms::" << __func__ << "]"
00114            << " Zero collation histograms found!";
00115       continue;
00116     }
00117     
00118     // Retrieve pointers to 1D histos for this FED channel 
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     // Perform histo analysis 
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 

Generated on Tue Jun 9 17:33:27 2009 for CMSSW by  doxygen 1.5.4