ATLAS Offline Software
Loading...
Searching...
No Matches
MdtDeadNoisyUtils.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3 */
4
5#ifndef dqutilsMdtDeadNoisy_h
6#define dqutilsMdtDeadNoisy_h
7
8#include <vector>
9#include <string>
10#include <sstream>
11#include <iostream>
12#include <fstream>
13#include <stdio.h>
14
15#include <TH1F.h>
16#include <TCanvas.h>
17
19 struct TubeRange {
20 TubeRange(int a, int b) {x1 = a; x2 = b;}
21 bool InRange(int x) {
22 if ((x >= x1) && (x <= x2)) return true;
23
24 return false;
25 }
26
27 int x1;
28 int x2;
29 };
30
31 double sqr(double x);
32 void displayList(std::vector<int>& v);
33 void displayList(std::vector<int>& v, std::ofstream& outputfile);
34 void getDeadList(TH1F* h, std::vector<int>& v);
35 bool find(std::vector<int>& v, unsigned int x);
36 void getSurelyDeadList(TH1F* h, std::vector<int>& v, std::vector<int>& betweenlist);
37 void getNotBetweenList(std::vector<int>& v, std::vector<int>& surely_v, std::vector<int>& betweenlist);
38 void getNotMasked(std::vector<int>& v, TH1F* h);
39 void getNotInDeadML(std::vector<int>& v, std::vector<int>& deadML_v, const std::string& hardware_name, int totalTubes);
40 void getNotInDeadLayer(std::vector<int>& v, std::vector<int>& deadLayer_v, const std::string& hardware_name,
41 int totalTubes);
42 void getNotInDeadMezz(std::vector<int>& v, std::vector<int>& deadMezz_v, const std::string& hardware_name,
43 int totalTubes);
44 void getAllBins(TH1F* h, std::vector<int>& v);
45 void getAllBinsInRange(TH1F* h, std::vector<int>& v, int x1, int x2);
46 void getAllBinsInRangeBelowCutoff(TH1F* h, std::vector<int>& v, int crustCutoff, int x1, int x2);
47 void getAllUnmaskedBinsInRangeBelowCrustCutoff(TH1F* h, std::vector<int>& v, int crustCutoff, int x1, int x2);
48 void getBins(TH1F* h, std::vector<int>& indices, std::vector<int>& content);
49 void removeZeros(std::vector<int>& v);
50 void getAllTubes(TH1F* h, std::vector<int>& v);
51 void getNonEmptyBins(TH1F* h, std::vector<int>& v);
52 void getNonEmptyTubes(TH1F* h, std::vector<int>& v);
53 template <class T>
54 double getMean(std::vector<T>& v);
55 double getMean_WithCut(std::vector<int>& v, double cut);
56 void getNoBetweens(TH1F* h, std::vector<int>& no_dead, std::vector<int>& no_betweens, std::vector<int>& betweenlist,
57 float minBinContent);
58 void getNoBetweens_middle(std::vector<int> no_betweens, std::vector<int>& no_betweens_middle);
59 void getNoBetweens_lowmiddle(std::vector<int> no_betweens, std::vector<int>& no_betweens_lowmiddle);
60 void getNoBetweens_middle_aggressive(std::vector<int> no_betweens, std::vector<int>& no_betweens_middle_aggressive);
61 void getNoBetweens_middle_semiaggressive(std::vector<int> no_betweens,
62 std::vector<int>& no_betweens_middle_aggressive);
63 void getNoBetweens_lowmiddle_aggressive(std::vector<int> no_betweens,
64 std::vector<int>& no_betweens_lowmiddle_aggressive);
65 void getNoBetweens_highmiddle_aggressive(std::vector<int> no_betweens,
66 std::vector<int>& no_betweens_lowmiddle_aggressive);
67 double getStandardDevFromMean(std::vector<int>& v, double mean);
68 double getStandardDevFromMean_neg(std::vector<int>& v, double mean);
69 double getStandardDevFromMean_pos(std::vector<int>& v, double mean);
70 void getNoisyList(TH1F* h, std::vector<int>& no_betweens_middle, std::vector<int>& no_betweens_middle_aggressive,
71 double num_std_dev, std::vector<int>& noisylist);
72 void getNoisyList2(TH1F* h, std::vector<int>& no_betweens_middle, std::vector<int>& no_betweens_middle_aggressive,
73 double num_pct, std::vector<int>& noisylist);
74 void getIneffList(TH1F* h, std::vector<int>& no_betweens_middle, std::vector<int>& no_betweens_lowmiddle_aggressive,
75 double num_std_dev, std::vector<int>& inefflist);
76 void getIneffList(TH1F* h, std::vector<int>& no_betweens_middle, std::vector<int>& no_betweens_lowmiddle_aggressive,
77 double num_std_dev_1, double num_std_dev_2, std::vector<int>& inefflist);
78 void getIneffList2(TH1F* h, std::vector<int>& no_betweens_middle, std::vector<int>& no_betweens_lowmiddle_aggressive,
79 double num_pct, std::vector<int>& inefflist);
80 void getIneffList2(TH1F* h, std::vector<int>& no_betweens_middle, std::vector<int>& no_betweens_lowmiddle_aggressive,
81 double num_pct_1, double num_pct_2, std::vector<int>& inefflist);
82 void getIneffList2(std::vector<int>& indices, TH1F* h, std::vector<int>& no_betweens_middle,
83 std::vector<int>& no_betweens_lowmiddle_aggressive, double num_pct, std::vector<int>& inefflist);
84 bool validityCheckDead(std::vector<int>& no_betweens_middle, std::vector<int>& no_betweens_middle_aggressive);
85 bool validityCheckNoise(std::vector<int>& no_betweens_middle,
86 std::vector<int>& no_betweens_middle_aggressive /*, int max*/); //max parameter is not
87 // currently used
88 void getNonEmptyNonNoisyTubes(TH1F* h_tube_fornoise, TH1F* h_tube, std::vector<int>& non_dead_non_noisy);
89 void removeNonContiguous(std::vector<int>& betweenlist, unsigned int sz);
90 void CatalogNoisyEff(TH1F* h_tube_bkd, TH1F* h_tube_fornoise, TH1F* num, TH1F* den, int nTriggers,
91 TH1F* EffVSNoise_num, TH1F* EffVSNoise_den, TH1F* EffVSNoise_ADCCut_num,
92 TH1F* EffVSNoise_ADCCut_den, TH1F* EffVSBkd_num, TH1F* EffVSBkd_den);
93 std::vector<int> GetNoisyTubes(TH1F* h_tube_fornoise, int nTriggers, float frequency);//Simply determine noisy tubes
94 // from freq.
95 std::vector<int> GetNoisyTubes(TH1F* h_tube_fornoise, TH1F* h_tube, const std::string& chamber, int& validity);
96 std::vector<int> GetNoisyTubes_WithoutForNoise(TH1F* h_tube, int& validity, const std::string& chamber);
97 //std::vector<int> GetDeadTubes( TH1F* h_tube_fornoise, TH1F* h_tube, std::string chamber);
98 std::vector<int> GetDeadTubes(TH1F* h_tube, int& validity, std::vector<int>& deadML_v, std::vector<int>& deadLayer_v,
99 std::vector<int>& deadMezz_v);
100 //std::vector<int> GetMaskedTubesForDead( TH1F* h_tube_fornoise, TH1F* h_tube, std::string chamber);
101 std::vector<int> GetMaskedTubesForDead(TH1F* h_tube);
102 //std::vector<int> GetMaskedTubesForNoisy( TH1F* h_tube_fornoise, TH1F* h_tube, std::string chamber);
103 std::vector<int> GetMaskedTubesForNoisy(TH1F* h_tube_fornoise);
104 double GetMeanFromHist(TH1F* h_tube);
105 double GetStandardDevFromHist(TH1F* h_tube, double mean);
106 int getLastTubeInLayer(int& firstTubeInLayer, const std::string& hardware_name, int totalTubes);
107 std::vector<TubeRange> getLayerRanges(const std::string& hardware_name, int totalTubes);
108 int getLastTubeInML(int& firstTubeInML, const std::string& hardware_name, int totalTubes);
109 std::vector<TubeRange> getMLRanges(const std::string& hardware_name, int totalTubes);
110 std::vector<TubeRange> getMezzRanges(const std::string& hardware_name, int totalTubes, int& groupsPerLayer);
111 int Get_ML_of_Mezz(int& mezz, const std::string& hardware_name, int totalTubes);
112 int Get_ML_of_Mezz_degenerate(int& mezz, const std::string& hardware_name, int totalTubes);
113 std::vector<int> /*void*/ FindDeadMezz(TH1F* h_tube, const std::string& hardware_name, std::vector<int>& deadML_v);
114 std::vector<int> /*void*/ FindDeadLayer(TH1F* h_tube, const std::string& hardware_name, std::vector<int>& deadML_v);
115 std::vector<int> /*void*/ FindDeadML(TH1F* h_tube, const std::string& hardware_name);
116 int GetNumML(const std::string& hardware_name);
117 int GetNumLayersPerML(const std::string& hardware_name);
118 int GetNumTubesPerMezz(const std::string& hardware_name, int mezz);//For Getting total tube count
119 //global layer i.e. 5 instead of ML2 layer 2
120 int GetNumTubesPerML(const std::string& hardware_name, int layer, int TotalTubes);//For Getting total tube count
121 int GetNumTubesPerLayer(const std::string& hardware_name, int ML, int TotalTubes);//For Getting total tube count
122 int Get_ML_of_Layer(int& layer, const std::string& hardware_name);
123 int Get_ML_of_Tube(int& tubeID, const std::string& hardware_name, int totalTubes);
124 int Get_Layer_of_Tube(int& tubeID, const std::string& hardware_name, int totalTubes);
125 int Get_Mezz_of_Tube(int& tubeID, const std::string& hardware_name /*, int totalTubes*/,
126 std::vector<TubeRange>& tubeRanges, int groupsPerLayer);
127 int GetNumNonMaskedTubes(TH1F* h_tube);
128 int GetNumMezz(TH1F* h_tube);
129 bool AinB(int A, std::vector<int>& B);
130 bool AinB(int A, const std::vector<int>* B);
131
132 //For dumping pdf
133 void FillPDF(const std::string& inFilename, TH1F* hDead, TH1F* hNoise, TCanvas* c,
134 const std::vector<int>* deadTubes, const std::vector<int>* deadASD, const std::vector<int>* deadMEZZ,
135 const std::vector<int>* deadLayer, const std::vector<int>* deadML,
136 const std::vector<int>* noisyTubes, const std::vector<int>* noisyASD, const std::vector<int>* noisyMEZZ,
137 const std::vector<int>* noisyLayer, const std::vector<int>* noisyML,
138 int deadTubesChamberValidity, int noisyTubesChamberValidity,
139 bool draw_Mezz_L_ML_guidlines, bool draw_mean, bool draw_masked_tubes, bool separate_dead_noisy_histos,
140 bool draw_validity_message, bool draw_histo_if_nothing_to_report);
141} // end namespace
142
143#endif
ofstream outputfile
static Double_t sz
static Double_t a
#define sqr(t)
#define x
Header file for AthHistogramAlgorithm.
void mean(std::vector< double > &bins, std::vector< double > &values, const std::vector< std::string > &files, const std::string &histname, const std::string &tplotname, const std::string &label="")
void getNotInDeadML(std::vector< int > &v, std::vector< int > &deadML_v, const std::string &hardware_name, int totalTubes)
std::vector< TubeRange > getMezzRanges(const std::string &hardware_name, int totalTubes, int &groupsPerLayer)
bool validityCheckNoise(std::vector< int > &no_betweens_middle, std::vector< int > &no_betweens_middle_aggressive)
int Get_ML_of_Layer(int &layer, const std::string &hardware_name)
std::vector< int > FindDeadMezz(TH1F *h_tube, const std::string &hardware_name, std::vector< int > &deadML_v)
void removeZeros(std::vector< int > &v)
double GetMeanFromHist(TH1F *h_tube)
void getNoisyList2(TH1F *h, std::vector< int > &no_betweens_middle, std::vector< int > &no_betweens_middle_aggressive, double num_pct, std::vector< int > &noisylist)
void getNotMasked(std::vector< int > &v, TH1F *h)
double getMean_WithCut(std::vector< int > &v, double cut)
bool AinB(int A, std::vector< int > &B)
void getNoBetweens_highmiddle_aggressive(std::vector< int > no_betweens, std::vector< int > &no_betweens_lowmiddle_aggressive)
bool validityCheckDead(std::vector< int > &no_betweens_middle, std::vector< int > &no_betweens_middle_aggressive)
std::vector< int > GetMaskedTubesForDead(TH1F *h_tube)
void getNoBetweens_middle(std::vector< int > no_betweens, std::vector< int > &no_betweens_middle)
int Get_ML_of_Mezz(int &mezz, const std::string &hardware_name, int totalTubes)
double getStandardDevFromMean_pos(std::vector< int > &v, double mean)
void getAllUnmaskedBinsInRangeBelowCrustCutoff(TH1F *h, std::vector< int > &v, int crustCutoff, int x1, int x2)
void getSurelyDeadList(TH1F *h, std::vector< int > &v, std::vector< int > &betweenlist)
int GetNumNonMaskedTubes(TH1F *h_tube)
int GetNumML(const std::string &hardware_name)
void getNonEmptyTubes(TH1F *h, std::vector< int > &v)
int Get_ML_of_Tube(int &tubeID, const std::string &hardware_name, int totalTubes)
bool find(std::vector< int > &v, unsigned int x)
void getNoBetweens_middle_aggressive(std::vector< int > no_betweens, std::vector< int > &no_betweens_middle_aggressive)
std::vector< int > GetDeadTubes(TH1F *h_tube, int &validity, std::vector< int > &deadML_v, std::vector< int > &deadLayer_v, std::vector< int > &deadMezz_v)
std::vector< int > GetNoisyTubes(TH1F *h_tube_fornoise, int nTriggers, float frequency)
int getLastTubeInLayer(int &firstTubeInLayer, const std::string &hardware_name, int totalTubes)
int GetNumLayersPerML(const std::string &hardware_name)
void getIneffList2(TH1F *h, std::vector< int > &no_betweens_middle, std::vector< int > &no_betweens_lowmiddle_aggressive, double num_pct, std::vector< int > &inefflist)
void getAllBinsInRangeBelowCutoff(TH1F *h, std::vector< int > &v, int crustCutoff, int x1, int x2)
int Get_Layer_of_Tube(int &tubeID, const std::string &hardware_name, int totalTubes)
void getAllTubes(TH1F *h, std::vector< int > &v)
double GetStandardDevFromHist(TH1F *h_tube, double mean)
void getIneffList(TH1F *h, std::vector< int > &no_betweens_middle, std::vector< int > &no_betweens_lowmiddle_aggressive, double num_std_dev, std::vector< int > &inefflist)
void getNoBetweens_middle_semiaggressive(std::vector< int > no_betweens, std::vector< int > &no_betweens_middle_aggressive)
int getLastTubeInML(int &firstTubeInML, const std::string &hardware_name, int totalTubes)
void getNonEmptyNonNoisyTubes(TH1F *h_tube_fornoise, TH1F *h_tube, std::vector< int > &non_dead_non_noisy)
void displayList(std::vector< int > &v)
std::vector< TubeRange > getMLRanges(const std::string &hardware_name, int totalTubes)
int GetNumTubesPerLayer(const std::string &hardware_name, int ML, int TotalTubes)
void getDeadList(TH1F *h, std::vector< int > &v)
void getAllBins(TH1F *h, std::vector< int > &v)
int Get_Mezz_of_Tube(int &tubeID, const std::string &hardware_name, std::vector< TubeRange > &tubeRanges, int groupsPerLayer)
double getStandardDevFromMean_neg(std::vector< int > &v, double mean)
void getNonEmptyBins(TH1F *h, std::vector< int > &v)
std::vector< int > FindDeadLayer(TH1F *h_tube, const std::string &hardware_name, std::vector< int > &deadML_v)
void getNoBetweens_lowmiddle_aggressive(std::vector< int > no_betweens, std::vector< int > &no_betweens_lowmiddle_aggressive)
void CatalogNoisyEff(TH1F *h_tube_bkd, TH1F *h_tube_fornoise, TH1F *num, TH1F *den, int nTriggers, TH1F *EffVSNoise_num, TH1F *EffVSNoise_den, TH1F *EffVSNoise_ADCCut_num, TH1F *EffVSNoise_ADCCut_den, TH1F *EffVSBkd_num, TH1F *EffVSBkd_den)
void getNotInDeadMezz(std::vector< int > &v, std::vector< int > &deadMezz_v, const std::string &hardware_name, int totalTubes)
void getNotBetweenList(std::vector< int > &v, std::vector< int > &surely_v, std::vector< int > &betweenlist)
int GetNumMezz(TH1F *h_tube)
void FillPDF(const std::string &inFilename, TH1F *hDead, TH1F *hNoise, TCanvas *c, const std::vector< int > *deadTubes, const std::vector< int > *deadASD, const std::vector< int > *deadMEZZ, const std::vector< int > *deadLayer, const std::vector< int > *deadML, const std::vector< int > *noisyTubes, const std::vector< int > *noisyASD, const std::vector< int > *noisyMEZZ, const std::vector< int > *noisyLayer, const std::vector< int > *noisyML, int deadTubesChamberValidity, int noisyTubesChamberValidity, bool draw_Mezz_L_ML_guidlines, bool draw_mean, bool draw_masked_tubes, bool separate_dead_noisy_histos, bool draw_validity_message, bool draw_histo_if_nothing_to_report)
void getNoBetweens_lowmiddle(std::vector< int > no_betweens, std::vector< int > &no_betweens_lowmiddle)
std::vector< int > GetMaskedTubesForNoisy(TH1F *h_tube_fornoise)
int GetNumTubesPerMezz(const std::string &hardware_name, int mezz)
std::vector< int > FindDeadML(TH1F *h_tube, const std::string &hardware_name)
std::vector< TubeRange > getLayerRanges(const std::string &hardware_name, int totalTubes)
void getNotInDeadLayer(std::vector< int > &v, std::vector< int > &deadLayer_v, const std::string &hardware_name, int totalTubes)
int Get_ML_of_Mezz_degenerate(int &mezz, const std::string &hardware_name, int totalTubes)
void getAllBinsInRange(TH1F *h, std::vector< int > &v, int x1, int x2)
void getBins(TH1F *h, std::vector< int > &indices, std::vector< int > &content)
void getNoisyList(TH1F *h, std::vector< int > &no_betweens_middle, std::vector< int > &no_betweens_middle_aggressive, double num_std_dev, std::vector< int > &noisylist)
int GetNumTubesPerML(const std::string &hardware_name, int layer, int TotalTubes)
double getMean(std::vector< T > &v)
void removeNonContiguous(std::vector< int > &betweenlist, unsigned int sz)
void getNoBetweens(TH1F *h, std::vector< int > &no_dead, std::vector< int > &no_betweens, std::vector< int > &betweenlist, float minBinContent)
double getStandardDevFromMean(std::vector< int > &v, double mean)
std::vector< int > GetNoisyTubes_WithoutForNoise(TH1F *h_tube, int &validity, const std::string &chamber)
hold the test vectors and ease the comparison