Skip to content

Commit

Permalink
Updating Hot Strip algorithms in CaliTracker/SiStripQuality putting e…
Browse files Browse the repository at this point in the history
…xtra requirement on the strip Digi wrt APV median as developed by Mario Galanti + Message logger ourput made more logical in DQMOffline/CalibTracker/plugins/SiStripQualityHotStripIdentifierRoot.cc
  • Loading branch information
Suchandra authored and Suchandra committed Jul 1, 2015
1 parent 1ddf8ad commit a9aad99
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 11 deletions.
Expand Up @@ -93,6 +93,7 @@ class SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy{
void fillStripDQMHistograms();

long double prob_;
long double ratio_;
unsigned short MinNumEntries_;
unsigned short MinNumEntriesPerStrip_;
long double lowoccupancy_;
Expand Down Expand Up @@ -193,6 +194,8 @@ class SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy{
int hotStripsPerModule;
double singleStripOccupancy;
int stripHits;
double medianAPVHits;
double avgAPVHits;
double poissonProb;

int ishot[128];
Expand All @@ -201,6 +204,8 @@ class SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy{
double stripoccupancy[128];
int striphits[128];
double poissonprob[128];
double medianapvhits[6];
double avgapvhits[6];

std::stringstream ss;

Expand Down
Expand Up @@ -88,6 +88,7 @@ class SiStripHotStripAlgorithmFromClusterOccupancy{
void evaluatePoissonian(std::vector<long double>& , long double& meanVal);

long double prob_;
long double ratio_;
unsigned short MinNumEntries_;
unsigned short MinNumEntriesPerStrip_;
double Nevents_;
Expand Down Expand Up @@ -126,6 +127,8 @@ class SiStripHotStripAlgorithmFromClusterOccupancy{
int hotStripsPerModule;
double stripOccupancy;
int stripHits;
double medianAPVHits;
double avgAPVHits;
double poissonProb;

int ishot[768];
Expand All @@ -134,6 +137,8 @@ class SiStripHotStripAlgorithmFromClusterOccupancy{
double stripoccupancy[768];
int striphits[768];
double poissonprob[768];
double medianapvhits[6];
double avgapvhits[6];


std::stringstream ss;
Expand Down
Expand Up @@ -11,6 +11,7 @@


SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy::SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy(const edm::ParameterSet& iConfig, const TrackerTopology* theTopo):
ratio_(1.5),
lowoccupancy_(0),
highoccupancy_(100),
absolutelow_(0),
Expand Down Expand Up @@ -83,6 +84,8 @@ void SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy::extractBadAPVSandStr
striptree->Branch("StripOccupancy", &singleStripOccupancy, "StripOccupancy/D");
striptree->Branch("StripHits", &stripHits, "StripHits/I");
striptree->Branch("PoissonProb", &poissonProb, "PoissonProb/D");
striptree->Branch("MedianAPVHits", &medianAPVHits, "MedianAPVHits/D");
striptree->Branch("AvgAPVHits", &avgAPVHits, "AvgAPVHits/D");
}

HistoMap::iterator it=DM.begin();
Expand Down Expand Up @@ -659,17 +662,29 @@ void SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy::iterativeSearch(Apv&
long double meanVal=1.*histo.NEntries[apv]/(1.*Nbins-histo.NEmptyBins[apv]);
evaluatePoissonian(vPoissonProbs,meanVal);

// Find median occupancy, taking into account only good strips
unsigned int goodstripentries[128];
int nGoodStrips = 0;
for (size_t i=ibinStart; i<ibinStop; ++i){
if (ishot[(apv*128)+i-1]==0){
goodstripentries[nGoodStrips] = (unsigned int)histo.th1f[apv]->GetBinContent(i);
nGoodStrips++;
}
}
double median = TMath::Median(nGoodStrips,goodstripentries);

for (size_t i=ibinStart; i<ibinStop; ++i){
unsigned int entries= (unsigned int)histo.th1f[apv]->GetBinContent(i);

if (ishot[i-1]==0){
stripoccupancy[i-1] = entries/(double) Nevents_;
striphits[i-1] = entries;
poissonprob[i-1] = 1-vPoissonProbs[entries];
medianapvhits[apv] = median;
avgapvhits[apv] = meanVal;
}

if (entries<=MinNumEntriesPerStrip_ || entries <= minNevents_)
continue;
if (entries<=MinNumEntriesPerStrip_ || entries <= minNevents_ || entries / median < ratio_) continue;

if(diff<vPoissonProbs[entries]){
ishot[i-1] = 1;
Expand Down
Expand Up @@ -7,6 +7,7 @@

SiStripHotStripAlgorithmFromClusterOccupancy::SiStripHotStripAlgorithmFromClusterOccupancy(const edm::ParameterSet& iConfig, const TrackerTopology* theTopo):
prob_(1.E-7),
ratio_(1.5),
MinNumEntries_(0),
MinNumEntriesPerStrip_(0),
Nevents_(0),
Expand Down Expand Up @@ -57,7 +58,9 @@ void SiStripHotStripAlgorithmFromClusterOccupancy::extractBadStrips(SiStripQuali
striptree->Branch("StripOccupancy", &stripOccupancy, "StripOccupancy/D");
striptree->Branch("StripHits", &stripHits, "StripHits/I");
striptree->Branch("PoissonProb", &poissonProb, "PoissonProb/D");
}
striptree->Branch("MedianAPVHits", &medianAPVHits, "MedianAPVHits/D");
striptree->Branch("AvgAPVHits", &avgAPVHits, "AvgAPVHits/D");
}


HistoMap::iterator it=DM.begin();
Expand Down Expand Up @@ -198,6 +201,8 @@ void SiStripHotStripAlgorithmFromClusterOccupancy::extractBadStrips(SiStripQuali
stripOccupancy = stripoccupancy[strip];
stripHits = striphits[strip];
poissonProb = poissonprob[strip];
medianAPVHits = medianapvhits[strip/128];
avgAPVHits = avgapvhits[strip/128];

hotStripsPerModule = hotstripspermodule;
hotStripsPerAPV = hotstripsperapv[strip/128];
Expand Down Expand Up @@ -249,17 +254,28 @@ void SiStripHotStripAlgorithmFromClusterOccupancy::iterativeSearch(pHisto& histo
long double meanVal=1.*histo._NEntries/(1.*Nbins-histo._NEmptyBins);
evaluatePoissonian(vPoissonProbs,meanVal);

// Find median occupancy, taking into account only good strips
unsigned int goodstripentries[128];
int nGoodStrips = 0;
for (size_t i=ibinStart; i<ibinStop; ++i){
if (ishot[(apv*128)+i-1]==0){
goodstripentries[nGoodStrips] = (unsigned int)histo._th1f->GetBinContent(i);
nGoodStrips++;
}
}
double median = TMath::Median(nGoodStrips,goodstripentries);

for (size_t i=ibinStart; i<ibinStop; ++i){
unsigned int entries= (unsigned int)histo._th1f->GetBinContent(i);

if (ishot[(apv*128)+i-1]==0){
stripoccupancy[(apv*128)+i-1] = entries/(double) Nevents_;
striphits[(apv*128)+i-1] = entries;
poissonprob[(apv*128)+i-1] = 1-vPoissonProbs[entries];
medianapvhits[apv] = median;
avgapvhits[apv] = meanVal;
}

if (entries<=MinNumEntriesPerStrip_ || entries <= minNevents_)
continue;
if (entries<=MinNumEntriesPerStrip_ || entries <= minNevents_ || entries / median < ratio_) continue;

if(diff<vPoissonProbs[entries]){
ishot[(apv*128)+i-1] = 1;
Expand Down
Expand Up @@ -227,6 +227,7 @@ void SiStripQualityHotStripIdentifierRoot::algoEndJob(){

void SiStripQualityHotStripIdentifierRoot::bookHistos(){
edm::LogInfo("SiStripQualityHotStripIdentifierRoot") <<" [SiStripQualityHotStripIdentifierRoot::bookHistos] " << dirpath << std::endl;

std::vector<MonitorElement*> MEs = dqmStore_->getAllContents(dirpath);
//"DQMData/Run 50908/SiStrip/MechanicalView");
// "/DQMData/Run 50908/SiStrip/Run summary/MechanicalView/TID/side_2/wheel_3/ring_2/mono_modules/module_402676874");
Expand All @@ -243,7 +244,8 @@ void SiStripQualityHotStripIdentifierRoot::bookHistos(){
<< " number of " << parameters.getUntrackedParameter<uint32_t>("NumberOfEvents",0)
<< " occup " << parameters.getUntrackedParameter<double>("OccupancyThreshold",0)
<< " OccupancyHisto" << parameters.getUntrackedParameter<std::string>("OccupancyHisto") << std::endl;


// Check Number of Events
for (; iter!=iterEnd;++iter) {
std::string me_name = (*iter)->getName();

Expand All @@ -255,10 +257,16 @@ void SiStripQualityHotStripIdentifierRoot::bookHistos(){

gotNentries=true;
edm::LogInfo("SiStripQualityHotStripIdentifierRoot")<< "[SiStripQualityHotStripIdentifierRoot::bookHistos] gotNentries flag " << gotNentries << std::endl;
} else {
edm::LogWarning("SiStripQualityHotStripIdentifierRoot") <<" [SiStripQualityHotStripIdentifierRoot::bookHistos] :: Histogram with to check # of evemnts missing" <<std::endl;
break;
}

}
if (!gotNentries) {
edm::LogWarning("SiStripQualityHotStripIdentifierRoot") <<" [SiStripQualityHotStripIdentifierRoot::bookHistos] :: Histogram with to check # of evemnts missing" <<std::endl;
}

for (; iter!=iterEnd;++iter) {
std::string me_name = (*iter)->getName();

if (strstr(me_name.c_str(),(parameters.getUntrackedParameter<std::string>("OccupancyHisto")).c_str())==NULL)
continue;

Expand All @@ -280,7 +288,6 @@ void SiStripQualityHotStripIdentifierRoot::bookHistos(){
ClusterPositionHistoMap[detid]=boost::shared_ptr<TH1F>(new TH1F(*(*iter)->getTH1F()));

}
if(!gotNentries) edm::LogWarning("MissingNumberOfEvents") <<"Missing histogram to get the number of events";

}

0 comments on commit a9aad99

Please sign in to comment.