19 OutFileName_(
"Occupancy.root"),
20 UseInputDB_(iConfig.getUntrackedParameter<
bool>(
"UseInputDB",
false)),
26 LogTrace(
"SiStripBadAPVAlgorithmFromClusterOccupancy")
27 <<
"[SiStripBadAPVAlgorithmFromClusterOccupancy::~SiStripBadAPVAlgorithmFromClusterOccupancy] " << std::endl;
33 LogTrace(
"SiStripBadAPVAlgorithmFromClusterOccupancy")
34 <<
"[SiStripBadAPVAlgorithmFromClusterOccupancy::extractBadAPVs] " << std::endl;
40 apvtree =
new TTree(
"moduleOccupancy",
"tree");
61 HistoMap::iterator
it = DM.begin();
62 HistoMap::iterator itEnd = DM.end();
63 std::vector<unsigned int> badStripList;
65 for (;
it != itEnd; ++
it) {
68 for (
int apv = 0; apv < 6; apv++) {
69 APV.apvMedian[apv] = 0;
70 APV.apvabsoluteOccupancy[apv] = 0;
79 phisto.
_th1f =
it->second.get();
90 phisto.
_th1f->GetBinContent((apv * 128) +
strip + 1);
92 APV.apvabsoluteOccupancy[apv] +=
93 phisto.
_th1f->GetBinContent((apv * 128) +
strip + 1);
105 LogTrace(
"SiStripBadAPV") <<
"Analyzing detid " <<
detid << std::endl;
259 std::cout <<
"### Detector does not belong to TIB, TID, TOB or TEC !? ###" << std::endl;
325 badStripList.
clear();
399 LogTrace(
"SiStripBadAPV") <<
ss.str() << std::endl;
403 std::pair<double, double>* MeanRMS,
404 int number_iterations) {
405 Double_t
tot[7], tot2[7];
408 Double_t
Mean[7] = {0};
409 Double_t Rms[7] = {1000, 1000, 1000, 1000, 1000, 1000, 1000};
413 for (
int i = 0;
i < number_iterations;
i++) {
414 for (
int j = 0;
j < 7;
j++) {
420 for (uint32_t
it = 0;
it <
a.size();
it++) {
421 Moduleposition = (
a[
it].modulePosition) - 1;
423 for (
int apv = 0; apv <
a[
it].numberApvs; apv++) {
425 if (
a[
it].apvMedian[apv] < (
Mean[Moduleposition] - 3 * Rms[Moduleposition]) ||
426 (
a[
it].apvMedian[apv] > (
Mean[Moduleposition] + 5 * Rms[Moduleposition]))) {
430 tot[Moduleposition] +=
a[
it].apvMedian[apv];
431 tot2[Moduleposition] += (
a[
it].apvMedian[apv]) * (
a[
it].apvMedian[apv]);
436 for (
int j = 0;
j < 7;
j++) {
439 Rms[
j] = TMath::Sqrt(TMath::Abs(tot2[
j] /
n[
j] -
Mean[
j] *
Mean[
j]));
444 for (
int j = 0;
j < 7;
j++) {
445 MeanRMS[
j] = std::make_pair(
Mean[
j], Rms[
j]);
450 std::vector<Apv>& medianValues,
451 std::pair<double, double>* MeanAndRms,
452 std::vector<unsigned int>& BadStripList,
457 for (uint32_t
it = 0;
it < medianValues.size();
it++) {
458 Moduleposition = (medianValues[
it].modulePosition) - 1;
459 Detid = medianValues[
it].detrawId;
461 for (
int apv = 0; apv < medianValues[
it].numberApvs; apv++) {
463 if (InSiStripQuality->
IsApvBad(Detid, apv)) {
468 if ((medianValues[
it].apvMedian[apv] >
472 }
else if (medianValues[
it].apvMedian[apv] <
474 (MeanAndRms[Moduleposition].first > 2 || medianValues[
it].apvabsoluteOccupancy[apv] == 0)) {
476 std::cout <<
"Dead APV! DetId: " << medianValues[
it].detrawId <<
", APV number: " << apv + 1
477 <<
", APVMedian: " << medianValues[
it].apvMedian[apv]
478 <<
", Mean: " << MeanAndRms[Moduleposition].first <<
", RMS: " << MeanAndRms[Moduleposition].second
480 << (MeanAndRms[Moduleposition].first -
lowoccupancy_ * MeanAndRms[Moduleposition].second)
484 if (BadStripList.begin() != BadStripList.end()) {
485 quality->compact(Detid, BadStripList);
489 BadStripList.clear();
unsigned int tecPetalNumber(const DetId &id) const
std::vector< Apv > medianValues_TECPlus_Disc3
static constexpr auto TEC
unsigned int tobLayer(const DetId &id) const
std::vector< Apv > medianValues_TECPlus_Disc8
bool IsApvBad(uint32_t detid, short apvNb) const
std::vector< Apv > medianValues_TECMinus_Disc4
std::vector< Apv > medianValues_TIDMinus_Disc3
bool tobIsZMinusSide(const DetId &id) const
std::pair< double, double > MeanAndRms_TECMinus_Disc8[7]
for(int i=first, nt=offsets[nh];i< nt;i+=gridDim.x *blockDim.x)
unsigned int tibModule(const DetId &id) const
void CalculateMeanAndRMS(const std::vector< Apv > &, std::pair< double, double > *, int)
bool tibIsExternalString(const DetId &id) const
std::pair< double, double > MeanAndRms_TECPlus_Disc4[7]
unsigned int tidWheel(const DetId &id) const
bool tibIsZMinusSide(const DetId &id) const
unsigned int tecWheel(const DetId &id) const
std::vector< Apv > medianValues_TIDPlus_Disc3
bool tidIsBackRing(const DetId &id) const
SiStripBadAPVAlgorithmFromClusterOccupancy(const edm::ParameterSet &, const TrackerTopology *)
const TrackerGeometry * TkGeom
unsigned int tibString(const DetId &id) const
std::pair< double, double > MeanAndRms_TIDPlus_Disc2[7]
std::pair< double, double > MeanAndRms_TIDMinus_Disc2[7]
bool tecIsZMinusSide(const DetId &id) const
std::pair< double, double > MeanAndRms_TIDMinus_Disc3[7]
unsigned int tecRing(const DetId &id) const
ring id
bool tibIsStereo(const DetId &id) const
std::pair< double, double > MeanAndRms_TIB_Layer1[7]
std::vector< Apv > medianValues_TECPlus_Disc4
bool tidIsZMinusSide(const DetId &id) const
std::pair< double, double > MeanAndRms_TECPlus_Disc8[7]
SiStripQuality * pQuality
std::pair< double, double > MeanAndRms_TECMinus_Disc7[7]
bool tobIsStereo(const DetId &id) const
U second(std::pair< T, U > const &p)
std::vector< Apv > medianValues_TECPlus_Disc1
std::pair< double, double > MeanAndRms_TOB_Layer5[7]
unsigned int tidModule(const DetId &id) const
unsigned int tecModule(const DetId &id) const
std::pair< double, double > MeanAndRms_TIB_Layer4[7]
std::pair< double, double > MeanAndRms_TECPlus_Disc2[7]
std::vector< Apv > medianValues_TIDMinus_Disc2
std::vector< Apv > medianValues_TECMinus_Disc1
std::vector< Apv > medianValues_TIB_Layer1
void extractBadAPVs(SiStripQuality *, HistoMap &, const SiStripQuality *)
std::pair< double, double > MeanAndRms_TECMinus_Disc1[7]
std::pair< double, double > MeanAndRms_TIDPlus_Disc3[7]
std::vector< Apv > medianValues_TECPlus_Disc2
std::vector< Apv > medianValues_TIDPlus_Disc2
std::pair< double, double > MeanAndRms_TECMinus_Disc2[7]
virtual const StripTopology & specificTopology() const
Returns a reference to the strip proxy topology.
std::pair< double, double > MeanAndRms_TECMinus_Disc6[7]
std::pair< double, double > MeanAndRms_TECMinus_Disc3[7]
std::pair< double, double > MeanAndRms_TIB_Layer3[7]
std::vector< Apv > medianValues_TOB_Layer5
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
std::vector< Apv > medianValues_TECPlus_Disc7
void AnalyzeOccupancy(SiStripQuality *, std::vector< Apv > &, std::pair< double, double > *, std::vector< unsigned int > &, const SiStripQuality *)
long double highoccupancy_
std::pair< double, double > MeanAndRms_TECMinus_Disc9[7]
static constexpr auto TOB
std::vector< Apv > medianValues_TIDPlus_Disc1
const TrackerGeomDet * idToDet(DetId) const override
std::pair< double, double > MeanAndRms_TIDMinus_Disc1[7]
std::vector< Apv > medianValues_TECMinus_Disc3
std::pair< double, double > MeanAndRms_TECMinus_Disc4[7]
std::vector< Apv > medianValues_TIDMinus_Disc1
std::vector< Apv > medianValues_TECMinus_Disc9
bool tecIsBackPetal(const DetId &id) const
double stripOccupancy[6][128]
virtual ~SiStripBadAPVAlgorithmFromClusterOccupancy()
std::pair< double, double > MeanAndRms_TIB_Layer2[7]
std::vector< Apv > medianValues_TECMinus_Disc8
static constexpr auto TIB
std::vector< Apv > medianValues_TECPlus_Disc9
std::pair< double, double > MeanAndRms_TECPlus_Disc1[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_TECPlus_Disc7[7]
bool tecIsStereo(const DetId &id) const
std::vector< Apv > medianValues_TOB_Layer4
std::vector< Apv > medianValues_TECPlus_Disc6
unsigned int tobRod(const DetId &id) const
bool tidIsStereo(const DetId &id) const
std::pair< double, double > MeanAndRms_TECPlus_Disc6[7]
std::pair< double, double > MeanAndRms_TOB_Layer1[7]
std::vector< Apv > medianValues_TOB_Layer3
std::pair< double, double > MeanAndRms_TECMinus_Disc5[7]
std::vector< Apv > medianValues_TOB_Layer6
std::pair< ContainerIterator, ContainerIterator > Range
std::pair< double, double > MeanAndRms_TOB_Layer4[7]
std::pair< double, double > MeanAndRms_TECPlus_Disc3[7]
std::vector< Apv > medianValues_TECMinus_Disc5
double apvMedianOccupancy
unsigned int tidRing(const DetId &id) const
virtual LocalPoint localPosition(float strip) const =0
std::vector< Apv > medianValues_TIB_Layer3
unsigned int tibLayer(const DetId &id) const
std::pair< double, double > MeanAndRms_TOB_Layer2[7]
unsigned int tobModule(const DetId &id) const
std::pair< double, double > MeanAndRms_TECPlus_Disc9[7]
std::vector< Apv > medianValues_TOB_Layer2
std::vector< Apv > medianValues_TOB_Layer1
double stripWeight[6][128]
std::pair< double, double > MeanAndRms_TOB_Layer6[7]
std::pair< double, double > MeanAndRms_TECPlus_Disc5[7]
static constexpr auto TID
long double lowoccupancy_
std::pair< double, double > MeanAndRms_TIDPlus_Disc1[7]
unsigned int encode(const unsigned short &first, const unsigned short &NconsecutiveBadStrips, const unsigned short &flag=0)
SiStrip::QualityHistosMap HistoMap
std::pair< double, double > MeanAndRms_TOB_Layer3[7]
std::vector< Apv > medianValues_TIB_Layer2
std::vector< Apv > medianValues_TECMinus_Disc2
std::vector< Apv > medianValues_TECMinus_Disc7