CMS 3D CMS Logo

SiStripQualityHotStripIdentifier Class Reference

#include <CalibTracker/SiStripQuality/plugins/SiStripQualityHotStripIdentifier.h>

Inheritance diagram for SiStripQualityHotStripIdentifier:

ConditionDBWriter< SiStripBadStrip > edm::EDAnalyzer

List of all members.

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)
SiStripBadStripgetNewObject ()
void resetHistos ()

Private Attributes

edm::InputTag Cluster_src_
SiStrip::QualityHistosMap ClusterPositionHistoMap
const edm::ParameterSet conf_
edm::FileInPath fp_
unsigned short MaxClusterWidth_
unsigned short MinClusterWidth_
SiStripDetInfoFileReaderreader
edm::InputTag Track_src_
bool tracksCollection_in_EventTree


Detailed Description

Definition at line 18 of file SiStripQualityHotStripIdentifier.h.


Constructor & Destructor Documentation

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 }


Member Function Documentation

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 }


Member Data Documentation

edm::InputTag SiStripQualityHotStripIdentifier::Cluster_src_ [private]

Definition at line 51 of file SiStripQualityHotStripIdentifier.h.

Referenced by algoAnalyze().

SiStrip::QualityHistosMap SiStripQualityHotStripIdentifier::ClusterPositionHistoMap [private]

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 48 of file SiStripQualityHotStripIdentifier.h.

Referenced by getNewObject().

edm::FileInPath SiStripQualityHotStripIdentifier::fp_ [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().

SiStripDetInfoFileReader* SiStripQualityHotStripIdentifier::reader [private]

Definition at line 50 of file SiStripQualityHotStripIdentifier.h.

Referenced by bookHistos(), and SiStripQualityHotStripIdentifier().

edm::InputTag SiStripQualityHotStripIdentifier::Track_src_ [private]

Definition at line 52 of file SiStripQualityHotStripIdentifier.h.

Referenced by algoAnalyze().

bool SiStripQualityHotStripIdentifier::tracksCollection_in_EventTree [private]

Definition at line 53 of file SiStripQualityHotStripIdentifier.h.

Referenced by algoAnalyze().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:32:30 2009 for CMSSW by  doxygen 1.5.4