#include <CalibTracker/SiStripQuality/plugins/SiStripQualityHotStripIdentifier.h>
Public Member Functions | |
SiStripQualityHotStripIdentifier (const edm::ParameterSet &) | |
~SiStripQualityHotStripIdentifier () | |
Private Member Functions | |
void | algoAnalyze (const edm::Event &, const edm::EventSetup &) |
void | algoBeginJob (const edm::EventSetup &) |
void | algoBeginLuminosityBlock (const edm::LuminosityBlock &, const edm::EventSetup &) |
void | algoBeginRun (const edm::Run &, const edm::EventSetup &) |
void | algoEndJob () |
void | bookHistos () |
void | fillHisto (uint32_t detid, float value) |
SiStripBadStrip * | getNewObject () |
void | resetHistos () |
Private Attributes | |
edm::InputTag | Cluster_src_ |
SiStrip::QualityHistosMap | ClusterPositionHistoMap |
const edm::ParameterSet | conf_ |
edm::FileInPath | fp_ |
unsigned short | MaxClusterWidth_ |
unsigned short | MinClusterWidth_ |
SiStripDetInfoFileReader * | reader |
edm::InputTag | Track_src_ |
bool | tracksCollection_in_EventTree |
Definition at line 18 of file SiStripQualityHotStripIdentifier.h.
SiStripQualityHotStripIdentifier::SiStripQualityHotStripIdentifier | ( | const edm::ParameterSet & | iConfig | ) | [explicit] |
Definition at line 20 of file SiStripQualityHotStripIdentifier.cc.
References bookHistos(), fp_, edm::FileInPath::fullPath(), edm::ParameterSet::getUntrackedParameter(), MaxClusterWidth_, MinClusterWidth_, python::EventAnalyzer_cfg::pset, and reader.
00020 : 00021 ConditionDBWriter<SiStripBadStrip>::ConditionDBWriter<SiStripBadStrip>(iConfig), 00022 conf_(iConfig), 00023 fp_(iConfig.getUntrackedParameter<edm::FileInPath>("file",edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"))), 00024 Cluster_src_(iConfig.getParameter<edm::InputTag>( "Cluster_src" )), 00025 Track_src_(iConfig.getUntrackedParameter<edm::InputTag>( "Track_src" )), 00026 tracksCollection_in_EventTree(iConfig.getUntrackedParameter<bool>("RemoveTrackClusters",false)) 00027 { 00028 edm::LogInfo("SiStripQualityHotStripIdentifier") << " ctor "; 00029 reader = new SiStripDetInfoFileReader(fp_.fullPath()); 00030 00031 edm::ParameterSet pset=iConfig.getUntrackedParameter< edm::ParameterSet > ("ClusterSelection",edm::ParameterSet()); 00032 MinClusterWidth_=pset.getUntrackedParameter<uint32_t>("minWidth",1); 00033 MaxClusterWidth_=pset.getUntrackedParameter<uint32_t>("maxWidth",1000); 00034 00035 bookHistos(); 00036 }
SiStripQualityHotStripIdentifier::~SiStripQualityHotStripIdentifier | ( | ) |
Definition at line 39 of file SiStripQualityHotStripIdentifier.cc.
00039 { 00040 edm::LogInfo("SiStripQualityHotStripIdentifier") << " dtor"; 00041 }
void SiStripQualityHotStripIdentifier::algoAnalyze | ( | const edm::Event & | e, | |
const edm::EventSetup & | eSetup | |||
) | [private, virtual] |
Reimplemented from ConditionDBWriter< SiStripBadStrip >.
Definition at line 128 of file SiStripQualityHotStripIdentifier.cc.
References edm::DetSetVector< T >::begin(), SiStripRecHit2D::cluster(), Cluster_src_, edm::DetSetVector< T >::end(), lat::endl(), fillHisto(), find(), edm::Event::getByLabel(), i, edm::isDebugEnabled(), TrackingRecHit::isValid(), edm::Handle< T >::isValid(), it, LogTrace, MaxClusterWidth_, SiStripMatchedRecHit2D::monoHit(), ProjectedSiStripRecHit2D::originalHit(), edm::Handle< T >::product(), size, edm::DetSet< T >::size(), ss, SiStripMatchedRecHit2D::stereoHit(), track, Track_src_, and tracksCollection_in_EventTree.
00128 { 00129 00130 edm::Handle< edm::DetSetVector<SiStripCluster> > dsv_SiStripCluster; 00131 e.getByLabel( Cluster_src_, dsv_SiStripCluster); 00132 00133 edm::Handle<reco::TrackCollection> trackCollection; 00134 if(tracksCollection_in_EventTree){ 00135 e.getByLabel(Track_src_, trackCollection); 00136 if(!trackCollection.isValid()){ 00137 edm::LogError("SiStripQualityHotStripIdentifier")<<" [SiStripQualityHotStripIdentifier::algoAnalyze] missing trackCollection with label " << Track_src_ <<std::endl; 00138 } 00139 } 00140 00141 std::set<const void*> vPSiStripCluster; 00142 //Perform track study 00143 if (tracksCollection_in_EventTree){ 00144 00145 const reco::TrackCollection tC = *(trackCollection.product()); 00146 int i=0; 00147 for (reco::TrackCollection::const_iterator track=tC.begin(); track!=tC.end(); track++){ 00148 LogTrace("SiStripQualityHotStripIdentifier") 00149 << "Track number "<< i+1 00150 << "\n\tmomentum: " << track->momentum() 00151 << "\n\tPT: " << track->pt() 00152 << "\n\tvertex: " << track->vertex() 00153 << "\n\timpact parameter: " << track->d0() 00154 << "\n\tcharge: " << track->charge() 00155 << "\n\tnormalizedChi2: " << track->normalizedChi2() 00156 <<"\n\tFrom EXTRA : " 00157 <<"\n\t\touter PT "<< track->outerPt()<<std::endl; 00158 00159 //Loop on rechits 00160 for (trackingRecHit_iterator it = track->recHitsBegin(); it != track->recHitsEnd(); ++it){ 00161 const TrackingRecHit* recHit = &(**it); 00162 00163 if (!recHit->isValid()){ 00164 LogTrace("SiStripQualityHotStripIdentifier") <<"\t\t Invalid Hit "<<std::endl; 00165 continue; 00166 } 00167 00168 const SiStripRecHit2D* singleHit=dynamic_cast<const SiStripRecHit2D*>(recHit); 00169 const SiStripMatchedRecHit2D* matchedHit=dynamic_cast<const SiStripMatchedRecHit2D*>(recHit); 00170 const ProjectedSiStripRecHit2D* projectedHit=dynamic_cast<const ProjectedSiStripRecHit2D*>(recHit); 00171 00172 if(matchedHit){ 00173 vPSiStripCluster.insert((void *)&*(matchedHit->monoHit()->cluster())); 00174 vPSiStripCluster.insert((void *)&*(matchedHit->stereoHit()->cluster())); 00175 } else if(projectedHit){ 00176 vPSiStripCluster.insert((void *)&*(projectedHit->originalHit().cluster())); 00177 } else if(singleHit){ 00178 vPSiStripCluster.insert((void*)&*(singleHit->cluster())); 00179 }else{ 00180 LogTrace("SiStripQualityHotStripIdentifier") << "NULL hit" << std::endl; 00181 } 00182 } 00183 } 00184 } 00185 00186 std::stringstream ss; 00187 //Loop on Det Clusters 00188 edm::DetSetVector<SiStripCluster>::const_iterator DSViter=dsv_SiStripCluster->begin(); 00189 for (; DSViter!=dsv_SiStripCluster->end();DSViter++){ 00190 edm::DetSet<SiStripCluster>::const_iterator ClusIter = DSViter->data.begin(); 00191 edm::DetSet<SiStripCluster>::const_iterator ClusIterEnd = DSViter->data.end(); 00192 for(; ClusIter!=ClusIterEnd; ++ClusIter) { 00193 if (MinClusterWidth_<=ClusIter->amplitudes().size() && ClusIter->amplitudes().size()<=MaxClusterWidth_) { 00194 if (std::find(vPSiStripCluster.begin(),vPSiStripCluster.end(),(void*) &*ClusIter) == vPSiStripCluster.end()){ 00195 if ( edm::isDebugEnabled() ) 00196 ss << " adding cluster to histo for detid " << DSViter->id << " with barycenter "<< ClusIter->barycenter() << std::endl; 00197 fillHisto(DSViter->id,ClusIter->barycenter()); 00198 } 00199 } 00200 } 00201 } 00202 LogTrace("SiStripQualityHotStripIdentifier") << ss.str(); 00203 }
void SiStripQualityHotStripIdentifier::algoBeginJob | ( | const edm::EventSetup & | ) | [inline, private, virtual] |
Reimplemented from ConditionDBWriter< SiStripBadStrip >.
Definition at line 28 of file SiStripQualityHotStripIdentifier.h.
References resetHistos().
00028 { resetHistos(); }
void SiStripQualityHotStripIdentifier::algoBeginLuminosityBlock | ( | const edm::LuminosityBlock & | , | |
const edm::EventSetup & | ||||
) | [inline, private, virtual] |
Reimplemented from ConditionDBWriter< SiStripBadStrip >.
Definition at line 32 of file SiStripQualityHotStripIdentifier.h.
References resetHistos().
00032 { resetHistos(); }
void SiStripQualityHotStripIdentifier::algoBeginRun | ( | const edm::Run & | , | |
const edm::EventSetup & | ||||
) | [inline, private, virtual] |
Reimplemented from ConditionDBWriter< SiStripBadStrip >.
Definition at line 30 of file SiStripQualityHotStripIdentifier.h.
References resetHistos().
00030 { resetHistos(); }
void SiStripQualityHotStripIdentifier::algoEndJob | ( | ) | [private, virtual] |
Reimplemented from ConditionDBWriter< SiStripBadStrip >.
Definition at line 88 of file SiStripQualityHotStripIdentifier.cc.
References ClusterPositionHistoMap.
00088 { 00089 //Clear map 00090 ClusterPositionHistoMap.clear(); 00091 }
void SiStripQualityHotStripIdentifier::bookHistos | ( | ) | [private] |
Definition at line 102 of file SiStripQualityHotStripIdentifier.cc.
References ClusterPositionHistoMap, lat::endl(), SiStripDetInfoFileReader::getAllData(), it, and reader.
Referenced by SiStripQualityHotStripIdentifier().
00102 { 00103 edm::LogInfo("SiStripQualityHotStripIdentifier") <<" [SiStripQualityHotStripIdentifier::bookHistos] " << std::endl; 00104 char hname[1024]; 00105 std::map<uint32_t, SiStripDetInfoFileReader::DetInfo >::const_iterator it =reader->getAllData().begin(); 00106 std::map<uint32_t, SiStripDetInfoFileReader::DetInfo >::const_iterator iEnd =reader->getAllData().end(); 00107 for(; it!=iEnd; ++it){ 00108 sprintf(hname,"h_%d",it->first); 00109 SiStrip::QualityHistosMap::iterator ref=ClusterPositionHistoMap.find(it->first); 00110 if (ref==ClusterPositionHistoMap.end()){ 00111 ClusterPositionHistoMap[it->first]=boost::shared_ptr<TH1F>(new TH1F(hname,hname,it->second.nApvs*128,-0.5,it->second.nApvs*128-0.5)); 00112 } 00113 else 00114 edm::LogError("SiStripQualityHotStripIdentifier") <<" [SiStripQualityHotStripIdentifier::bookHistos] DetId " << it->first << " already found in map. Ignoring new data"<<std::endl; 00115 } 00116 }
void SiStripQualityHotStripIdentifier::fillHisto | ( | uint32_t | detid, | |
float | value | |||
) | [private] |
Definition at line 118 of file SiStripQualityHotStripIdentifier.cc.
References ClusterPositionHistoMap, and lat::endl().
Referenced by algoAnalyze().
00118 { 00119 00120 SiStrip::QualityHistosMap::iterator ref=ClusterPositionHistoMap.find(detid); 00121 if (ref!=ClusterPositionHistoMap.end()) 00122 ref->second->Fill(value); 00123 else 00124 edm::LogError("SiStripQualityHotStripIdentifier") <<" [SiStripQualityHotStripIdentifier::fillHisto] Histogram not found in the list for DetId " << detid << " Ignoring data value "<< value <<std::endl; 00125 }
SiStripBadStrip * SiStripQualityHotStripIdentifier::getNewObject | ( | ) | [private, virtual] |
Implements ConditionDBWriter< SiStripBadStrip >.
Definition at line 43 of file SiStripQualityHotStripIdentifier.cc.
References a, ClusterPositionHistoMap, conf_, lat::endl(), SiStripHotStripAlgorithmFromClusterOccupancy::extractBadStrips(), SiStripBadStrip::getDataVectorBegin(), edm::ParameterSet::getParameter(), SiStripBadStrip::getRegistryVectorBegin(), SiStripBadStrip::getRegistryVectorEnd(), edm::ParameterSet::getUntrackedParameter(), VarParsing::obj, python::trackProbabilityAnalysis_cff::parameters, SiStripBadStrip::put(), range, SiStripHotStripAlgorithmFromClusterOccupancy::setMinNumEntries(), SiStripHotStripAlgorithmFromClusterOccupancy::setMinNumEntriesPerStrip(), SiStripHotStripAlgorithmFromClusterOccupancy::setProbabilityThreshold(), and ss.
00043 { 00044 00045 edm::LogInfo("SiStripQualityHotStripIdentifier") <<"SiStripQualityHotStripIdentifier::getNewObject called"<<std::endl; 00046 00047 SiStripBadStrip* obj=new SiStripBadStrip(); 00048 00049 edm::ParameterSet parameters=conf_.getParameter<edm::ParameterSet>("AlgoParameters"); 00050 std::string AlgoName = parameters.getParameter<std::string>("AlgoName"); 00051 if (AlgoName=="SiStripHotStripAlgorithmFromClusterOccupancy"){ 00052 00053 edm::LogInfo("SiStripQualityHotStripIdentifier") <<" [SiStripQualityHotStripIdentifier::getNewObject] call to SiStripHotStripAlgorithmFromClusterOccupancy"<<std::endl; 00054 00055 SiStripHotStripAlgorithmFromClusterOccupancy theIdentifier; 00056 theIdentifier.setProbabilityThreshold(parameters.getUntrackedParameter<double>("ProbabilityThreshold",1.E-7)); 00057 theIdentifier.setMinNumEntries(parameters.getUntrackedParameter<uint32_t>("MinNumEntries",100)); 00058 theIdentifier.setMinNumEntriesPerStrip(parameters.getUntrackedParameter<uint32_t>("MinNumEntriesPerStrip",5)); 00059 00060 SiStripQuality* qobj = new SiStripQuality(); 00061 theIdentifier.extractBadStrips(qobj,ClusterPositionHistoMap); 00062 00063 edm::LogInfo("SiStripQualityHotStripIdentifier") <<" [SiStripQualityHotStripIdentifier::getNewObject] copy SiStripObject in SiStripBadStrip"<<std::endl; 00064 00065 std::stringstream ss; 00066 00067 SiStripBadStrip::RegistryIterator rIter=qobj->getRegistryVectorBegin(); 00068 SiStripBadStrip::RegistryIterator rIterEnd=qobj->getRegistryVectorEnd(); 00069 for(;rIter!=rIterEnd;++rIter){ 00070 SiStripBadStrip::Range range(qobj->getDataVectorBegin()+rIter->ibegin,qobj->getDataVectorBegin()+rIter->iend); 00071 if ( ! obj->put(rIter->detid,range) ) 00072 edm::LogError("SiStripQualityHotStripIdentifier")<<"[SiStripQualityHotStripIdentifier::getNewObject] detid already exists"<<std::endl; 00073 } 00074 edm::LogInfo("SiStripQualityHotStripIdentifier") <<" [SiStripQualityHotStripIdentifier::getNewObject] " << ss.str() << std::endl; 00075 00076 } else { 00077 edm::LogError("SiStripQualityHotStripIdentifier") <<" [SiStripQualityHotStripIdentifier::getNewObject] call for a unknow HotStrip identification algoritm"<<std::endl; 00078 00079 std::vector<uint32_t> a; 00080 SiStripBadStrip::Range range(a.begin(),a.end()); 00081 if ( ! obj->put(0xFFFFFFFF,range) ) 00082 edm::LogError("SiStripQualityHotStripIdentifier")<<"[SiStripQualityHotStripIdentifier::getNewObject] detid already exists"<<std::endl; 00083 } 00084 00085 return obj; 00086 }
void SiStripQualityHotStripIdentifier::resetHistos | ( | ) | [private] |
Definition at line 93 of file SiStripQualityHotStripIdentifier.cc.
References ClusterPositionHistoMap, lat::endl(), and it.
Referenced by algoBeginJob(), algoBeginLuminosityBlock(), and algoBeginRun().
00093 { 00094 edm::LogInfo("SiStripQualityHotStripIdentifier") <<" [SiStripQualityHotStripIdentifier::resetHistos] " << std::endl; 00095 SiStrip::QualityHistosMap::iterator it=ClusterPositionHistoMap.begin(); 00096 SiStrip::QualityHistosMap::iterator iEnd=ClusterPositionHistoMap.end(); 00097 for (;it!=iEnd;++it){ 00098 it->second->Reset(); 00099 } 00100 }
Definition at line 57 of file SiStripQualityHotStripIdentifier.h.
Referenced by algoEndJob(), bookHistos(), fillHisto(), getNewObject(), and resetHistos().
const edm::ParameterSet SiStripQualityHotStripIdentifier::conf_ [private] |
Definition at line 49 of file SiStripQualityHotStripIdentifier.h.
Referenced by SiStripQualityHotStripIdentifier().
unsigned short SiStripQualityHotStripIdentifier::MaxClusterWidth_ [private] |
Definition at line 55 of file SiStripQualityHotStripIdentifier.h.
Referenced by algoAnalyze(), and SiStripQualityHotStripIdentifier().
unsigned short SiStripQualityHotStripIdentifier::MinClusterWidth_ [private] |
Definition at line 55 of file SiStripQualityHotStripIdentifier.h.
Referenced by SiStripQualityHotStripIdentifier().
Definition at line 50 of file SiStripQualityHotStripIdentifier.h.
Referenced by bookHistos(), and SiStripQualityHotStripIdentifier().