CMS 3D CMS Logo

SiStripQualityHotStripIdentifierRoot.cc

Go to the documentation of this file.
00001 #include "DQMOffline/CalibTracker/plugins/SiStripQualityHotStripIdentifierRoot.h"
00002 
00003 #include "CalibFormats/SiStripObjects/interface/SiStripQuality.h"
00004 
00005 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h"
00006 #include "DataFormats/TrackerRecHit2D/interface/ProjectedSiStripRecHit2D.h"
00007 #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2D.h"
00008 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00009 #include "DataFormats/TrackReco/interface/Track.h"
00010 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
00011 #include <iostream>
00012 #include <fstream>
00013 #include <sstream>
00014 
00015 //Insert here the include to the algos
00016 #include "CalibTracker/SiStripQuality/interface/SiStripHotStripAlgorithmFromClusterOccupancy.h"
00017 
00018 
00019 SiStripQualityHotStripIdentifierRoot::SiStripQualityHotStripIdentifierRoot(const edm::ParameterSet& iConfig) : 
00020   ConditionDBWriter<SiStripBadStrip>::ConditionDBWriter<SiStripBadStrip>(iConfig),
00021   conf_(iConfig), 
00022   fp_(iConfig.getUntrackedParameter<edm::FileInPath>("file",edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"))),
00023   Cluster_src_(iConfig.getParameter<edm::InputTag>( "Cluster_src" )),
00024   Track_src_(iConfig.getUntrackedParameter<edm::InputTag>( "Track_src" )),
00025   tracksCollection_in_EventTree(iConfig.getUntrackedParameter<bool>("RemoveTrackClusters",false)),
00026   filename(iConfig.getUntrackedParameter<std::string>("rootFilename","CondDB_TKCC_20X_v3_hlt_50822.root")),
00027   dirpath(iConfig.getUntrackedParameter<std::string>("rootDirPath",""))
00028 {
00029   edm::LogInfo("SiStripQualityHotStripIdentifierRoot") << " ctor ";  
00030   reader = new SiStripDetInfoFileReader(fp_.fullPath());  
00031 
00032   edm::ParameterSet pset=iConfig.getUntrackedParameter< edm::ParameterSet > ("ClusterSelection",edm::ParameterSet());
00033   MinClusterWidth_=pset.getUntrackedParameter<uint32_t>("minWidth",1);
00034   MaxClusterWidth_=pset.getUntrackedParameter<uint32_t>("maxWidth",1000);
00035 
00036   edm::LogInfo("SiStripQualityHotStripIdentifierRoot") << " before opening file " << filename.c_str();  
00037   dqmStore_ = edm::Service<DQMStore>().operator->(); 
00038   dqmStore_->setVerbose(iConfig.getUntrackedParameter<uint32_t>("verbosity",0)); 
00039 
00040   dqmStore_->open(filename.c_str(), false, dirpath); 
00041   edm::LogInfo("SiStripQualityHotStripIdentifierRoot") << " after opening file ";  
00042 
00043   bookHistos();
00044 }
00045 
00046 
00047 SiStripQualityHotStripIdentifierRoot::~SiStripQualityHotStripIdentifierRoot(){
00048   edm::LogInfo("SiStripQualityHotStripIdentifierRoot") << " dtor";
00049 }
00050 
00051 SiStripBadStrip* SiStripQualityHotStripIdentifierRoot::getNewObject(){
00052 
00053   edm::LogInfo("SiStripQualityHotStripIdentifierRoot") <<"SiStripQualityHotStripIdentifierRoot::getNewObject called"<<std::endl;
00054 
00055   SiStripBadStrip* obj=new SiStripBadStrip();
00056   
00057   edm::ParameterSet parameters=conf_.getParameter<edm::ParameterSet>("AlgoParameters");
00058   std::string AlgoName = parameters.getParameter<std::string>("AlgoName");
00059   if (AlgoName=="SiStripHotStripAlgorithmFromClusterOccupancy"){
00060     
00061     edm::LogInfo("SiStripQualityHotStripIdentifierRoot") <<" [SiStripQualityHotStripIdentifierRoot::getNewObject] call to SiStripHotStripAlgorithmFromClusterOccupancy"<<std::endl;
00062 
00063     SiStripHotStripAlgorithmFromClusterOccupancy theIdentifier;
00064     theIdentifier.setProbabilityThreshold(parameters.getUntrackedParameter<double>("ProbabilityThreshold",1.E-7));
00065     theIdentifier.setMinNumEntries(parameters.getUntrackedParameter<uint32_t>("MinNumEntries",100));
00066     theIdentifier.setMinNumEntriesPerStrip(parameters.getUntrackedParameter<uint32_t>("MinNumEntriesPerStrip",5));
00067 
00068     SiStripQuality* qobj = new SiStripQuality();
00069     theIdentifier.extractBadStrips(qobj,ClusterPositionHistoMap);
00070 
00071     edm::LogInfo("SiStripQualityHotStripIdentifierRoot") <<" [SiStripQualityHotStripIdentifierRoot::getNewObject] copy SiStripObject in SiStripBadStrip"<<std::endl;
00072 
00073     std::stringstream ss;  
00074   
00075     SiStripBadStrip::RegistryIterator rIter=qobj->getRegistryVectorBegin();
00076     SiStripBadStrip::RegistryIterator rIterEnd=qobj->getRegistryVectorEnd();
00077     for(;rIter!=rIterEnd;++rIter){
00078       SiStripBadStrip::Range range(qobj->getDataVectorBegin()+rIter->ibegin,qobj->getDataVectorBegin()+rIter->iend);
00079       if ( ! obj->put(rIter->detid,range) )
00080         edm::LogError("SiStripQualityHotStripIdentifierRoot")<<"[SiStripQualityHotStripIdentifierRoot::getNewObject] detid already exists"<<std::endl;
00081     }
00082     edm::LogInfo("SiStripQualityHotStripIdentifierRoot") <<" [SiStripQualityHotStripIdentifierRoot::getNewObject] " << ss.str() << std::endl;
00083 
00084   } else {
00085     edm::LogError("SiStripQualityHotStripIdentifierRoot") <<" [SiStripQualityHotStripIdentifierRoot::getNewObject] call for a unknow HotStrip identification algoritm"<<std::endl;
00086 
00087     std::vector<uint32_t> a;
00088     SiStripBadStrip::Range range(a.begin(),a.end());
00089     if ( ! obj->put(0xFFFFFFFF,range) )
00090       edm::LogError("SiStripQualityHotStripIdentifierRoot")<<"[SiStripQualityHotStripIdentifierRoot::getNewObject] detid already exists"<<std::endl;
00091   }
00092   
00093   return obj;
00094 }
00095 
00096 void SiStripQualityHotStripIdentifierRoot::algoEndJob(){
00097   //Clear map
00098   ClusterPositionHistoMap.clear();
00099 }
00100 
00101 
00102 void SiStripQualityHotStripIdentifierRoot::bookHistos(){
00103   edm::LogInfo("SiStripQualityHotStripIdentifierRoot") <<" [SiStripQualityHotStripIdentifierRoot::bookHistos] " << dirpath << std::endl;
00104   std::vector<MonitorElement*> MEs = dqmStore_->getAllContents(dirpath);
00105                                                                //"DQMData/Run 50908/SiStrip/MechanicalView");
00106     //                                                         "/DQMData/Run 50908/SiStrip/Run summary/MechanicalView/TID/side_2/wheel_3/ring_2/mono_modules/module_402676874");
00107   edm::LogInfo("SiStripQualityHotStripIdentifierRoot") <<" [SiStripQualityHotStripIdentifierRoot::bookHistos] vector size " << MEs.size()<< std::endl;
00108 
00109   std::vector<MonitorElement*>::const_iterator iter=MEs.begin();
00110   std::vector<MonitorElement*>::const_iterator iterEnd=MEs.end();
00111 
00112   for (; iter!=iterEnd;++iter) {
00113     std::string me_name = (*iter)->getName();
00114 
00115     //edm::LogInfo("SiStripQualityHotStripIdentifierRoot") <<" [SiStripQualityHotStripIdentifierRoot::bookHistos] histo " << me_name << std::endl;
00116 
00117     if (strstr(me_name.c_str(),"ClusterPosition__det__")==NULL)
00118       continue;
00119     
00120     unsigned int detid;
00121     char title[128];
00122     sprintf(title,"%s",me_name.c_str());
00123     char *ptr=strtok(title,"__");
00124     int c=0;
00125     while (ptr!=NULL){
00126       if (c==2){
00127         detid=atol(ptr);
00128         break;
00129       }
00130       ptr=strtok(NULL,"_");
00131       c++;
00132     }
00133     LogDebug("SiStripQualityHotStripIdentifierRoot") <<" [SiStripQualityHotStripIdentifierRoot::bookHistos] detid " << detid<< std::endl;
00134 
00135     ClusterPositionHistoMap[detid]=boost::shared_ptr<TH1F>(new TH1F(*(*iter)->getTH1F()));
00136     
00137   }
00138   
00139 }
00140 

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