20 OutFileName_(
"Occupancy.root"),
21 UseInputDB_(iConfig.getUntrackedParameter<bool>(
"UseInputDB",
false)),
28 LogTrace(
"SiStripBadAPVAlgorithmFromClusterOccupancy")<<
"[SiStripBadAPVAlgorithmFromClusterOccupancy::~SiStripBadAPVAlgorithmFromClusterOccupancy] "<<std::endl;
33 LogTrace(
"SiStripBadAPVAlgorithmFromClusterOccupancy")<<
"[SiStripBadAPVAlgorithmFromClusterOccupancy::extractBadAPVs] "<<std::endl;
39 apvtree =
new TTree(
"moduleOccupancy",
"tree");
60 HistoMap::iterator it=DM.begin();
61 HistoMap::iterator itEnd=DM.end();
62 std::vector<unsigned int> badStripList;
64 for (;it!=itEnd;++it){
68 for (
int apv=0; apv<6; apv++)
73 for (
int strip=0; strip<128; strip++)
81 phisto.
_th1f = it->second.get();
91 for (
int strip=0; strip<128; strip++)
108 LogTrace(
"SiStripBadAPV") <<
"Analyzing detid " << detid<< std::endl;
219 std::cout <<
"### Detector does not belong to TIB, TID, TOB or TEC !? ###" << std::endl;
285 badStripList.clear();
327 siStripQuality->fillBadComponents();
335 LogTrace(
"SiStripBadAPV") <<
ss.str() << std::endl;
341 Double_t tot[7], tot2[7];
344 Double_t
Mean[7] = {0};
345 Double_t Rms[7] = {1000,1000,1000,1000,1000,1000,1000};
349 for (
int i=0;
i<number_iterations;
i++)
351 for (
int j=0;
j<7;
j++)
358 for (uint32_t it=0; it<a.size(); it++)
360 Moduleposition = (a[it].modulePosition)-1;
362 for (
int apv=0; apv<a[it].numberApvs; apv++)
366 if (a[it].apvMedian[apv]<(Mean[Moduleposition]-3*Rms[Moduleposition]) || (a[it].apvMedian[apv]>(Mean[Moduleposition]+5*Rms[Moduleposition])))
371 tot[Moduleposition] += a[it].apvMedian[apv];
372 tot2[Moduleposition] += (a[it].apvMedian[apv])*(a[it].apvMedian[apv]);
377 for (
int j=0;
j<7;
j++)
381 Mean[
j] = tot[
j]/n[
j];
382 Rms[
j] = TMath::Sqrt(TMath::Abs(tot2[
j]/n[
j] -Mean[
j]*Mean[
j]));
387 for (
int j=0;
j<7;
j++)
389 MeanRMS[
j] = std::make_pair(Mean[
j],Rms[j]);
399 for (uint32_t it=0; it<medianValues.size(); it++)
401 Moduleposition = (medianValues[it].modulePosition)-1;
402 Detid = medianValues[it].detrawId;
404 for (
int apv=0; apv<medianValues[it].numberApvs; apv++)
408 if(InSiStripQuality->IsApvBad(Detid,apv) )
416 BadStripList.push_back(
pQuality->encode((apv*128),128,0));
418 else if (medianValues[it].apvMedian[apv]<(MeanAndRms[Moduleposition].
first-
lowoccupancy_*MeanAndRms[Moduleposition].
second) && (MeanAndRms[Moduleposition].first>2 || medianValues[it].apvabsoluteOccupancy[apv]==0))
420 BadStripList.push_back(
pQuality->encode((apv*128),128,0));
421 std::cout <<
"Dead APV! DetId: " << medianValues[it].detrawId <<
", APV number: " << apv+1 <<
", APVMedian: " << medianValues[it].apvMedian[apv] <<
", Mean: " << MeanAndRms[Moduleposition].first <<
", RMS: " << MeanAndRms[Moduleposition].second <<
", LowThreshold: " <<
lowoccupancy_ <<
", Mean-Low*RMS: " << (MeanAndRms[Moduleposition].first-
lowoccupancy_*MeanAndRms[Moduleposition].second) << std::endl;
424 if (BadStripList.begin()!=BadStripList.end())
426 quality->compact(Detid,BadStripList);
428 quality->put(Detid,range);
430 BadStripList.clear();
std::vector< Apv > medianValues_TECPlus_Disc3
std::pair< double, double > MeanAndRms_TECMinus_Disc4[7]
std::vector< Apv > medianValues_TECPlus_Disc8
std::vector< Apv > medianValues_TECMinus_Disc4
std::vector< Apv > medianValues_TIDMinus_Disc3
unsigned int tibLayer(const DetId &id) const
unsigned int tibString(const DetId &id) const
unsigned int tidRing(const DetId &id) const
std::pair< double, double > MeanAndRms_TIB_Layer1[7]
std::pair< double, double > MeanAndRms_TIB_Layer4[7]
void AnalyzeOccupancy(SiStripQuality *, std::vector< Apv > &, std::pair< double, double > *, std::vector< unsigned int > &, edm::ESHandle< SiStripQuality > &)
std::pair< double, double > MeanAndRms_TECMinus_Disc8[7]
void CalculateMeanAndRMS(const std::vector< Apv > &, std::pair< double, double > *, int)
unsigned int tecRing(const DetId &id) const
ring id
std::vector< Apv > medianValues_TIDPlus_Disc3
SiStripBadAPVAlgorithmFromClusterOccupancy(const edm::ParameterSet &, const TrackerTopology *)
const TrackerGeometry * TkGeom
std::pair< double, double > MeanAndRms_TECMinus_Disc9[7]
unsigned int tidWheel(const DetId &id) const
std::pair< double, double > MeanAndRms_TECMinus_Disc3[7]
std::pair< double, double > MeanAndRms_TIDPlus_Disc3[7]
virtual const StripTopology & specificTopology() const
Returns a reference to the strip proxy topology.
std::pair< double, double > MeanAndRms_TIDMinus_Disc2[7]
std::pair< double, double > MeanAndRms_TIB_Layer2[7]
std::pair< double, double > MeanAndRms_TECMinus_Disc2[7]
std::pair< double, double > MeanAndRms_TIDMinus_Disc1[7]
bool tecIsZMinusSide(const DetId &id) const
std::vector< Apv > medianValues_TECPlus_Disc4
bool tidIsZMinusSide(const DetId &id) const
SiStripQuality * pQuality
U second(std::pair< T, U > const &p)
std::vector< Apv > medianValues_TECPlus_Disc1
bool tibIsExternalString(const DetId &id) const
std::pair< double, double > MeanAndRms_TOB_Layer6[7]
bool tibIsZMinusSide(const DetId &id) const
std::vector< Apv > medianValues_TIDMinus_Disc2
std::vector< Apv > medianValues_TECMinus_Disc1
std::vector< Apv > medianValues_TIB_Layer1
unsigned int tidModule(const DetId &id) const
bool tidIsBackRing(const DetId &id) const
std::pair< double, double > MeanAndRms_TECPlus_Disc6[7]
std::vector< Apv > medianValues_TECPlus_Disc2
bool tobIsZMinusSide(const DetId &id) const
double apvabsoluteOccupancy[6]
std::vector< Apv > medianValues_TIDPlus_Disc2
std::vector< Apv > medianValues_TOB_Layer5
std::pair< double, double > MeanAndRms_TIDMinus_Disc3[7]
std::pair< double, double > MeanAndRms_TOB_Layer5[7]
std::pair< double, double > MeanAndRms_TOB_Layer4[7]
std::vector< Apv > medianValues_TECPlus_Disc7
long double highoccupancy_
std::pair< double, double > MeanAndRms_TECPlus_Disc2[7]
std::pair< double, double > MeanAndRms_TECMinus_Disc6[7]
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
std::pair< double, double > MeanAndRms_TOB_Layer2[7]
std::vector< Apv > medianValues_TIDPlus_Disc1
virtual const GeomDet * idToDet(DetId) const
std::vector< Apv > medianValues_TECMinus_Disc3
unsigned int tibModule(const DetId &id) const
std::vector< Apv > medianValues_TIDMinus_Disc1
unsigned int tecModule(const DetId &id) const
std::vector< Apv > medianValues_TECMinus_Disc9
std::pair< double, double > MeanAndRms_TIB_Layer3[7]
Detector identifier class for the strip tracker.
std::pair< double, double > MeanAndRms_TIDPlus_Disc2[7]
std::pair< double, double > MeanAndRms_TECPlus_Disc8[7]
bool tecIsBackPetal(const DetId &id) const
double stripOccupancy[6][128]
virtual ~SiStripBadAPVAlgorithmFromClusterOccupancy()
PixelRecoRange< float > Range
std::vector< Apv > medianValues_TECMinus_Disc8
std::pair< double, double > MeanAndRms_TECMinus_Disc7[7]
std::pair< double, double > MeanAndRms_TECPlus_Disc9[7]
std::vector< Apv > medianValues_TECPlus_Disc9
std::pair< double, double > MeanAndRms_TOB_Layer3[7]
std::vector< Apv > medianValues_TECPlus_Disc5
std::vector< Apv > medianValues_TECMinus_Disc6
std::vector< Apv > medianValues_TIB_Layer4
const TrackerTopology * tTopo
double apvAbsoluteOccupancy
std::pair< double, double > MeanAndRms_TECMinus_Disc5[7]
std::vector< Apv > medianValues_TOB_Layer4
std::vector< Apv > medianValues_TECPlus_Disc6
std::pair< double, double > MeanAndRms_TECPlus_Disc7[7]
unsigned int tobModule(const DetId &id) const
std::pair< double, double > MeanAndRms_TIDPlus_Disc1[7]
std::vector< Apv > medianValues_TOB_Layer3
std::vector< Apv > medianValues_TOB_Layer6
std::vector< Apv > medianValues_TECMinus_Disc5
void extractBadAPVs(SiStripQuality *, HistoMap &, edm::ESHandle< SiStripQuality > &)
double apvMedianOccupancy
virtual LocalPoint localPosition(float strip) const =0
unsigned int tecPetalNumber(const DetId &id) const
std::vector< Apv > medianValues_TIB_Layer3
std::pair< double, double > MeanAndRms_TOB_Layer1[7]
volatile std::atomic< bool > shutdown_flag false
std::pair< double, double > MeanAndRms_TECPlus_Disc4[7]
std::vector< Apv > medianValues_TOB_Layer2
unsigned int tobRod(const DetId &id) const
std::pair< double, double > MeanAndRms_TECPlus_Disc5[7]
std::vector< Apv > medianValues_TOB_Layer1
for(const auto &isodef:isoDefs)
double stripWeight[6][128]
unsigned int tecWheel(const DetId &id) const
long double lowoccupancy_
std::pair< double, double > MeanAndRms_TECMinus_Disc1[7]
SiStrip::QualityHistosMap HistoMap
std::pair< double, double > MeanAndRms_TECPlus_Disc1[7]
unsigned int tobLayer(const DetId &id) const
std::vector< Apv > medianValues_TIB_Layer2
std::pair< double, double > MeanAndRms_TECPlus_Disc3[7]
std::vector< Apv > medianValues_TECMinus_Disc2
std::vector< Apv > medianValues_TECMinus_Disc7