CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_14/src/DQM/DTMonitorClient/src/DTLocalTriggerBaseTest.cc

Go to the documentation of this file.
00001 /*
00002  *  See header file for a description of this class.
00003  *
00004  *  $Date: 2011/06/10 13:50:12 $
00005  *  $Revision: 1.17 $
00006  *  \author C. Battilana S. Marcellini - INFN Bologna
00007  */
00008 
00009 
00010 // This class header
00011 #include "DQM/DTMonitorClient/src/DTLocalTriggerBaseTest.h"
00012 
00013 // Framework headers
00014 #include "FWCore/Framework/interface/EventSetup.h"
00015 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00016 #include "DQMServices/Core/interface/MonitorElement.h"
00017 #include "DQMServices/Core/interface/DQMStore.h"
00018 
00019 // Geometry
00020 #include "Geometry/Records/interface/MuonGeometryRecord.h"
00021 #include "Geometry/DTGeometry/interface/DTGeometry.h"
00022 
00023 // Root
00024 #include "TF1.h"
00025 #include "TProfile.h"
00026 
00027 
00028 //C++ headers
00029 #include <iostream>
00030 #include <sstream>
00031 
00032 using namespace edm;
00033 using namespace std;
00034 
00035 
00036 DTLocalTriggerBaseTest::~DTLocalTriggerBaseTest(){
00037 
00038   LogVerbatim(category()) << "[" << testName << "Test]: analyzed " << nevents << " events";
00039 
00040 }
00041 
00042 void DTLocalTriggerBaseTest::beginJob(){
00043 
00044   LogVerbatim(category()) << "[" << testName << "Test]: BeginJob";
00045   nevents = 0;
00046   nLumiSegs = 0;
00047   
00048 }
00049 
00050 void DTLocalTriggerBaseTest::beginRun(Run const& run, EventSetup const& context) {
00051 
00052   LogVerbatim(category()) << "[" << testName << "Test]: BeginRun";
00053   context.get<MuonGeometryRecord>().get(muonGeom);
00054 
00055 }
00056 
00057 void DTLocalTriggerBaseTest::beginLuminosityBlock(LuminosityBlock const& lumiSeg, EventSetup const& context) {
00058 
00059   LogTrace(category()) <<"[" << testName << "Test]: Begin of LS transition";
00060 
00061   // Get the run number
00062   run = lumiSeg.run();
00063 
00064 }
00065 
00066 
00067 void DTLocalTriggerBaseTest::analyze(const edm::Event& e, const edm::EventSetup& context){
00068 
00069   nevents++;
00070   LogTrace(category()) << "[" << testName << "Test]: "<<nevents<<" events";
00071 
00072 }
00073 
00074 
00075 void DTLocalTriggerBaseTest::endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& context) {
00076   
00077   if (!runOnline) return;
00078 
00079   LogVerbatim("DTDQM|DTMonitorClient|DTLocalTriggerTest") <<"[" << testName << "Test]: End of LS transition, performing the DQM client operation";
00080 
00081   // counts number of lumiSegs and prescale
00082   nLumiSegs++;
00083   if ( nLumiSegs%prescaleFactor != 0 ) return;
00084 
00085   LogVerbatim("DTDQM|DTMonitorClient|DTLocalTriggerTest") <<"[" << testName << "Test]: "<<nLumiSegs<<" updates";  
00086   runClientDiagnostic();
00087 
00088 }
00089 
00090 
00091 void DTLocalTriggerBaseTest::endJob(){
00092   
00093     LogTrace(category()) << "[" << testName << "Test] endJob called!";
00094 
00095 }
00096 
00097 
00098 void DTLocalTriggerBaseTest::endRun(Run const& run, EventSetup const& context) {
00099   
00100   LogTrace(category()) << "[" << testName << "Test] endRun called!";
00101 
00102   if (!runOnline) {
00103     LogVerbatim(category()) << "[" << testName << "Test] Client called in offline mode, performing client operations";
00104     runClientDiagnostic();
00105   }
00106 
00107 }
00108 
00109 
00110 void DTLocalTriggerBaseTest::setConfig(const edm::ParameterSet& ps, string name){
00111 
00112   testName=name;
00113 
00114   LogTrace(category()) << "[" << testName << "Test]: Constructor";
00115 
00116   sourceFolder = ps.getUntrackedParameter<string>("folderRoot", ""); 
00117   runOnline = ps.getUntrackedParameter<bool>("runOnline",true);
00118   hwSources = ps.getUntrackedParameter<vector<string> >("hwSources");
00119 
00120   if (ps.getUntrackedParameter<bool>("localrun",true)) {
00121     trigSources.push_back("");
00122   }
00123   else {
00124     trigSources = ps.getUntrackedParameter<vector<string> >("trigSources");
00125   }
00126 
00127   parameters = ps;
00128   nevents = 0;
00129   dbe = edm::Service<DQMStore>().operator->();
00130 
00131   prescaleFactor = parameters.getUntrackedParameter<int>("diagnosticPrescale", 1);
00132 
00133 }
00134 
00135 
00136 string DTLocalTriggerBaseTest::fullName (string htype) {
00137 
00138   return hwSource + "_" + htype + trigSource;
00139 
00140 }
00141 
00142 string DTLocalTriggerBaseTest::getMEName(string histoTag, string subfolder, const DTChamberId & chambid) {
00143  
00144   stringstream wheel; wheel << chambid.wheel();
00145   stringstream station; station << chambid.station();
00146   stringstream sector; sector << chambid.sector();
00147 
00148   string folderName = topFolder(hwSource=="DCC") + "Wheel" +  wheel.str() +
00149     "/Sector" + sector.str() + "/Station" + station.str() + "/" ; 
00150   if (subfolder!="") { folderName += subfolder + "/"; }
00151 
00152   string histoname = sourceFolder + folderName 
00153     + fullName(histoTag) 
00154     + "_W" + wheel.str()  
00155     + "_Sec" + sector.str()
00156     + "_St" + station.str();
00157   
00158   return histoname;
00159   
00160 }
00161 
00162 string DTLocalTriggerBaseTest::getMEName(string histoTag, string subfolder, int wh) {
00163 
00164   stringstream wheel; wheel << wh;
00165 
00166   string folderName =  topFolder(hwSource=="DCC") + "Wheel" + wheel.str() + "/";
00167   if (subfolder!="") { folderName += subfolder + "/"; }  
00168 
00169   string histoname = sourceFolder + folderName 
00170     + fullName(histoTag) + "_W" + wheel.str();
00171   
00172   return histoname;
00173   
00174 }
00175 
00176 
00177 // void DTLocalTriggerBaseTest::setLabelPh(MonitorElement* me){
00178 
00179 //   for (int i=0; i<48; ++i){
00180 //     stringstream label;
00181 //     int stat = (i%4) +1;
00182 //     if (stat==1) label << "Sec " << i/4 +1 << " ";
00183 //     me->setBinLabel(i+1,label.str().c_str());
00184 //   }
00185 
00186 // }
00187 
00188 // void DTLocalTriggerBaseTest::setLabelTh(MonitorElement* me){
00189 
00190 //   for (int i=0; i<36; ++i){
00191 //     stringstream label;
00192 //     int stat = (i%3) +1;
00193 //     if (stat==1) label << "Sec " << i/3 +1 << " ";
00194 //     me->setBinLabel(i+1,label.str().c_str());
00195 //   }
00196 
00197 // }
00198 
00199 
00200 void DTLocalTriggerBaseTest::bookSectorHistos(int wheel,int sector,string hTag,string folder) {
00201   
00202   stringstream wh; wh << wheel;
00203   stringstream sc; sc << sector;
00204   int sectorid = (wheel+3) + (sector-1)*5;
00205   bool isDCC = hwSource=="DCC" ;
00206   string basedir = topFolder(isDCC)+"Wheel"+wh.str()+"/Sector"+sc.str()+"/";
00207   if (folder!="") {
00208     basedir += folder +"/";
00209   }
00210   dbe->setCurrentFolder(basedir);
00211 
00212   string fullTag = fullName(hTag);
00213   string hname    = fullTag + "_W" + wh.str()+"_Sec" +sc.str();
00214   LogTrace(category()) << "[" << testName << "Test]: booking " << basedir << hname;
00215   if (hTag.find("BXDistribPhi") != string::npos){    
00216     MonitorElement* me = dbe->book2D(hname.c_str(),hname.c_str(),25,-4.5,20.5,4,0.5,4.5);
00217     me->setBinLabel(1,"MB1",2);
00218     me->setBinLabel(2,"MB2",2);
00219     me->setBinLabel(3,"MB3",2);
00220     me->setBinLabel(4,"MB4",2);
00221     secME[sectorid][fullTag] = me;
00222     return;
00223   }
00224   else if (hTag.find("QualDistribPhi") != string::npos){    
00225     MonitorElement* me = dbe->book2D(hname.c_str(),hname.c_str(),7,-0.5,6.5,4,0.5,4.5);
00226     me->setBinLabel(1,"MB1",2);
00227     me->setBinLabel(2,"MB2",2);
00228     me->setBinLabel(3,"MB3",2);
00229     me->setBinLabel(4,"MB4",2);
00230     me->setBinLabel(1,"LI",1);
00231     me->setBinLabel(2,"LO",1);
00232     me->setBinLabel(3,"HI",1);
00233     me->setBinLabel(4,"HO",1);
00234     me->setBinLabel(5,"LL",1);
00235     me->setBinLabel(6,"HL",1);
00236     me->setBinLabel(7,"HH",1);
00237     secME[sectorid][fullTag] = me;
00238     return;
00239   }
00240   else if (hTag.find("Phi") != string::npos || 
00241       hTag.find("TkvsTrig") != string::npos ){    
00242     MonitorElement* me = dbe->book1D(hname.c_str(),hname.c_str(),4,0.5,4.5);
00243     me->setBinLabel(1,"MB1",1);
00244     me->setBinLabel(2,"MB2",1);
00245     me->setBinLabel(3,"MB3",1);
00246     me->setBinLabel(4,"MB4",1);
00247     secME[sectorid][fullTag] = me;
00248     return;
00249   }
00250   
00251   if (hTag.find("Theta") != string::npos){
00252     MonitorElement* me =dbe->book1D(hname.c_str(),hname.c_str(),3,0.5,3.5);
00253     me->setBinLabel(1,"MB1",1);
00254     me->setBinLabel(2,"MB2",1);
00255     me->setBinLabel(3,"MB3",1);
00256     secME[sectorid][fullTag] = me;
00257     return;
00258   }
00259   
00260 }
00261 
00262 void DTLocalTriggerBaseTest::bookCmsHistos(string hTag, string folder, bool isGlb) {
00263 
00264   bool isDCC = hwSource == "DCC"; 
00265   string basedir = topFolder(isDCC);
00266   if (folder != "") {
00267     basedir += folder +"/" ;
00268   }
00269   dbe->setCurrentFolder(basedir);
00270 
00271   string hname = isGlb ? hTag : fullName(hTag);
00272   LogTrace(category()) << "[" << testName << "Test]: booking " << basedir << hname;
00273 
00274 
00275   MonitorElement* me = dbe->book2D(hname.c_str(),hname.c_str(),12,1,13,5,-2,3);
00276   me->setAxisTitle("Sector",1);
00277   me->setAxisTitle("Wheel",2);
00278   cmsME[hname] = me;
00279 
00280 }
00281 
00282 void DTLocalTriggerBaseTest::bookWheelHistos(int wheel,string hTag,string folder) {
00283   
00284   stringstream wh; wh << wheel;
00285   string basedir;  
00286   bool isDCC = hwSource=="DCC" ;  
00287   if (hTag.find("Summary") != string::npos) {
00288     basedir = topFolder(isDCC);   //Book summary histo outside wheel directories
00289   } else {
00290     basedir = topFolder(isDCC) + "Wheel" + wh.str() + "/" ;
00291     
00292   }
00293   if (folder != "") {
00294     basedir += folder +"/" ;
00295   }
00296   dbe->setCurrentFolder(basedir);
00297 
00298   string fullTag = fullName(hTag);
00299   string hname    = fullTag+ "_W" + wh.str();
00300 
00301   LogTrace(category()) << "[" << testName << "Test]: booking "<< basedir << hname;
00302   
00303   if (hTag.find("Phi")!= string::npos ||
00304       hTag.find("Summary") != string::npos ){    
00305     MonitorElement* me = dbe->book2D(hname.c_str(),hname.c_str(),12,1,13,4,1,5);
00306 
00307 //     setLabelPh(me);
00308     me->setBinLabel(1,"MB1",2);
00309     me->setBinLabel(2,"MB2",2);
00310     me->setBinLabel(3,"MB3",2);
00311     me->setBinLabel(4,"MB4",2);
00312     me->setAxisTitle("Sector",1);
00313     
00314     whME[wheel][fullTag] = me;
00315     return;
00316   }
00317   
00318   if (hTag.find("Theta") != string::npos){
00319     MonitorElement* me =dbe->book2D(hname.c_str(),hname.c_str(),12,1,13,3,1,4);
00320 
00321 //     setLabelTh(me);
00322     me->setBinLabel(1,"MB1",2);
00323     me->setBinLabel(2,"MB2",2);
00324     me->setBinLabel(3,"MB3",2);
00325     me->setAxisTitle("Sector",1);
00326 
00327     whME[wheel][fullTag] = me;
00328     return;
00329   }
00330   
00331 }
00332 
00333 pair<float,float> DTLocalTriggerBaseTest::phiRange(const DTChamberId& id){
00334 
00335   float min,max;
00336   int station = id.station();
00337   int sector  = id.sector(); 
00338   int wheel   = id.wheel();
00339   
00340   const DTLayer  *layer = muonGeom->layer(DTLayerId(id,1,1));
00341   DTTopology topo = layer->specificTopology();
00342   min = topo.wirePosition(topo.firstChannel());
00343   max = topo.wirePosition(topo.lastChannel());
00344 
00345   if (station == 4){
00346     
00347     const DTLayer *layer2;
00348     float lposx;
00349     
00350     if (sector == 4){
00351       layer2  = muonGeom->layer(DTLayerId(wheel,station,13,1,1));
00352       lposx = layer->toLocal(layer2->position()).x();
00353     }
00354     else if (sector == 10){
00355       layer2 = muonGeom->layer(DTLayerId(wheel,station,14,1,1));
00356       lposx = layer->toLocal(layer2->position()).x();
00357     }
00358     else
00359       return make_pair(min,max);
00360     
00361     DTTopology topo2 = layer2->specificTopology();
00362 
00363     if (lposx>0){
00364       max = lposx*.5+topo2.wirePosition(topo2.lastChannel());
00365       min -= lposx*.5;
00366     }
00367     else{
00368       min = lposx*.5+topo2.wirePosition(topo2.firstChannel());
00369       max -= lposx*.5;
00370     }
00371       
00372   }
00373   
00374   return make_pair(min,max);
00375 
00376 }