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
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
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
00106
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
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