File indexing completed on 2024-09-07 04:35:11
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #ifndef CalibTracker_SiStripQuality_SiStripHotStripAlgorithmFromClusterOccupancy_H
0020 #define CalibTracker_SiStripQuality_SiStripHotStripAlgorithmFromClusterOccupancy_H
0021
0022
0023 #include <memory>
0024 #include <vector>
0025 #include <sstream>
0026 #include <iostream>
0027
0028 #include "TMath.h"
0029 #include "TTree.h"
0030 #include "TFile.h"
0031
0032 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0033 #include "DataFormats/DetId/interface/DetId.h"
0034 #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h"
0035 #include "Geometry/CommonTopologies/interface/StripTopology.h"
0036 #include "CalibFormats/SiStripObjects/interface/SiStripQuality.h"
0037
0038 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0039 #include "CalibTracker/SiStripQuality/interface/SiStripQualityHistos.h"
0040 #include "FWCore/ParameterSet/interface/FileInPath.h"
0041 #include "FWCore/Framework/interface/EventSetup.h"
0042 #include "CalibTracker/Records/interface/SiStripQualityRcd.h"
0043 #include "FWCore/ServiceRegistry/interface/Service.h"
0044 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0045 #include "CommonTools/TrackerMap/interface/TrackerMap.h"
0046
0047 class SiStripQuality;
0048 class TrackerTopology;
0049
0050 class SiStripHotStripAlgorithmFromClusterOccupancy {
0051 public:
0052 typedef SiStrip::QualityHistosMap HistoMap;
0053
0054 SiStripHotStripAlgorithmFromClusterOccupancy(const edm::ParameterSet&, const TrackerTopology*);
0055
0056 virtual ~SiStripHotStripAlgorithmFromClusterOccupancy();
0057
0058 void setProbabilityThreshold(long double prob) { prob_ = prob; }
0059 void setMinNumEntries(unsigned short m) { MinNumEntries_ = m; }
0060 void setMinNumEntriesPerStrip(unsigned short m) { MinNumEntriesPerStrip_ = m; }
0061 void setOccupancyThreshold(long double occupancy) {
0062 occupancy_ = occupancy;
0063 minNevents_ = occupancy_ * Nevents_;
0064 }
0065 void setNumberOfEvents(double Nevents);
0066 void setOutputFileName(std::string OutputFileName, bool WriteOutputFile) {
0067 OutFileName_ = OutputFileName;
0068 WriteOutputFile_ = WriteOutputFile;
0069 }
0070 void setTrackerGeometry(const TrackerGeometry* tkgeom) { TkGeom = tkgeom; }
0071 void extractBadStrips(SiStripQuality*, HistoMap&, const SiStripQuality*);
0072
0073 private:
0074 struct pHisto {
0075 pHisto() : _NEntries(0), _NEmptyBins(0), _SubdetId(0) {}
0076 TH1F* _th1f;
0077 int _NEntries;
0078 int _NEmptyBins;
0079 int _SubdetId;
0080 };
0081
0082 void iterativeSearch(pHisto&, std::vector<unsigned int>&, int);
0083 void evaluatePoissonian(std::vector<long double>&, long double& meanVal);
0084
0085 long double prob_;
0086 long double ratio_;
0087 unsigned short MinNumEntries_;
0088 unsigned short MinNumEntriesPerStrip_;
0089 double Nevents_;
0090 double minNevents_;
0091 long double occupancy_;
0092 std::string OutFileName_;
0093 bool WriteOutputFile_;
0094 const TrackerGeometry* TkGeom;
0095 const TrackerTopology* tTopo;
0096
0097 SiStripQuality* pQuality;
0098
0099 TFile* f;
0100 TTree* striptree;
0101 bool UseInputDB_;
0102 int detrawid;
0103 int subdetid;
0104 int layer_ring;
0105 int disc;
0106 int isback;
0107 int isexternalstring;
0108 int iszminusside;
0109 int rodstringpetal;
0110 int isstereo;
0111 int module_position;
0112 int number_strips;
0113 int strip_number;
0114 int apv_channel;
0115
0116 float global_position_x;
0117 float global_position_y;
0118 float global_position_z;
0119
0120 int isHot;
0121 int hotStripsPerAPV;
0122 int hotStripsPerModule;
0123 double stripOccupancy;
0124 int stripHits;
0125 double medianAPVHits;
0126 double avgAPVHits;
0127 double poissonProb;
0128
0129 int ishot[768];
0130 int hotstripsperapv[6];
0131 int hotstripspermodule;
0132 double stripoccupancy[768];
0133 int striphits[768];
0134 double poissonprob[768];
0135 double medianapvhits[6];
0136 double avgapvhits[6];
0137
0138 std::stringstream ss;
0139 };
0140 #endif