File indexing completed on 2023-03-17 10:56:40
0001
0002 from __future__ import print_function
0003 from ROOT import TFile, gStyle,gPad ,TObject, TCanvas, TH1, TH1F, TH2F, TLegend, TPaletteAxis, TList, TLine, TAttLine, TF1,TAxis
0004 import re
0005 import sys, string
0006
0007 def getRunNumber(filename):
0008 global runNumber
0009 pos=filename.find("__")
0010 runNumber=int(filename[pos-6:pos])
0011
0012
0013
0014 def countBadROCBarrel(fin, layerNo, os):
0015 global bpix_tot_deadROC
0016 global bpix_tot_ineffROC
0017 global bpix_tot_Nrocspopulated
0018 global bpix_tot_totalentries
0019
0020 barrelPath = commonPath + "PXBarrel/";
0021 histoname = ["digi_occupancy_per_SignedModuleCoord_per_SignedLadderCoord_PXLayer_1", "digi_occupancy_per_SignedModuleCoord_per_SignedLadderCoord_PXLayer_2",
0022 "digi_occupancy_per_SignedModuleCoord_per_SignedLadderCoord_PXLayer_3", "digi_occupancy_per_SignedModuleCoord_per_SignedLadderCoord_PXLayer_4"]
0023 digi2D = fin.Get(barrelPath + histoname[layerNo-1])
0024
0025 if digi2D.GetEntries() == 0 :
0026 return 1;
0027 Nrocspopulated = 0
0028 totalEntries = 0
0029 NexpectedROC = [1536, 3584, 5632, 8192]
0030 nLadders_bpx = [6, 14, 22, 32]
0031 nx = digi2D.GetNbinsX()
0032 ny = digi2D.GetNbinsY()
0033 for xbin in range(1,nx+1):
0034 if xbin >= 33 and xbin <= 40: continue;
0035 for ybin in range(1,ny+1):
0036 if (ybin == 2*nLadders_bpx[layerNo-1] + 1) or (ybin == 2*nLadders_bpx[layerNo-1] + 2): continue;
0037 bentries = digi2D.GetBinContent(xbin,ybin)
0038 if(bentries > 0):
0039 Nrocspopulated+=1
0040 totalEntries += bentries
0041 meanEntries = float(totalEntries)/Nrocspopulated
0042 NineffROC = 0
0043
0044 for xbin in range(1,nx+1):
0045 if xbin >= 33 and xbin <= 40:
0046 continue;
0047 for ybin in range(1,ny+1):
0048 if (ybin == 2*nLadders_bpx[layerNo-1] + 1) or (ybin == 2*nLadders_bpx[layerNo-1] + 2): continue;
0049 bentries = digi2D.GetBinContent(xbin,ybin);
0050 if(bentries > 0 and bentries < meanEntries/4. ):
0051 NineffROC+=1;
0052
0053 tmpstr = "BPix L" + str(layerNo)
0054 print(tmpstr, '{0:4d} {1:4d} {2:4.1f}'.format(NexpectedROC[layerNo-1] - Nrocspopulated, NineffROC, round(meanEntries,1)), file=os)
0055 bpix_tot_deadROC += NexpectedROC[layerNo-1] - Nrocspopulated
0056 bpix_tot_ineffROC += NineffROC
0057 bpix_tot_Nrocspopulated += Nrocspopulated
0058 bpix_tot_totalentries += float(totalEntries)
0059 return 0;
0060
0061 def countBadROCForward(fin, ringNo, os):
0062 global fpix_tot_deadROC
0063 global fpix_tot_ineffROC
0064 global fpix_tot_Nrocspopulated
0065 global fpix_tot_totalentries
0066
0067 forwardPath = commonPath + "PXForward/";
0068 histoname = ["digi_occupancy_per_SignedDiskCoord_per_SignedBladePanelCoord_PXRing_1",
0069 "digi_occupancy_per_SignedDiskCoord_per_SignedBladePanelCoord_PXRing_2"]
0070 digi2D = fin.Get(forwardPath + histoname[ringNo-1])
0071
0072 if digi2D.GetEntries() == 0 :
0073 return 1;
0074 nblades_perRing_fpx = [22, 34]
0075 NexpectedROC_perRing = [704, 1088]
0076 Nrocspopulated = [0] * 6
0077 totalEntries = [0] * 6
0078 dcounter = 0
0079 nx = digi2D.GetNbinsX()
0080 ny = digi2D.GetNbinsY()
0081 for xbin in range(1,nx+1):
0082 if xbin >= 25 and xbin <= 32: continue;
0083 if xbin > 1 and (xbin-1)%8 == 0: dcounter += 1;
0084 for ybin in range(1,ny+1):
0085 if (ybin >= 2*nblades_perRing_fpx[ringNo-1] + 1) and (ybin <= 2*nblades_perRing_fpx[ringNo-1] + 4):
0086 continue;
0087 bentries = digi2D.GetBinContent(xbin,ybin)
0088 if(bentries > 0):
0089 Nrocspopulated[dcounter] += 1
0090 totalEntries[dcounter] += bentries
0091
0092 meanEntries = [6] * 6
0093 for d in range(0,6):
0094 meanEntries[d] = float(totalEntries[d])/Nrocspopulated[d]
0095 NineffROC = [6] * 6
0096
0097 dcounter = 0;
0098 for xbin in range(1,nx+1):
0099 if xbin >= 25 and xbin <= 32: continue;
0100 if xbin > 1 and (xbin-1)%8 == 0: dcounter += 1
0101 for ybin in range(1,ny+1):
0102 if (ybin >= 2*nblades_perRing_fpx[ringNo-1] + 1) and (ybin <= 2*nblades_perRing_fpx[ringNo-1] + 4):
0103 continue;
0104 bentries = digi2D.GetBinContent(xbin,ybin)
0105 if(bentries > 0):
0106 if bentries > 0 and bentries < meanEntries[dcounter]/4.:
0107 NineffROC[dcounter] += 1
0108
0109 print("#Summary for FPix Ring", ringNo, file=os)
0110 for d in range(0,6):
0111 disc = 0
0112 if d < 3: disc = "M" + str(3 - d)
0113 else: disc = "P" + str(d - 2)
0114
0115 tmpstr = "FPix R" + str(ringNo) + "D" + str(disc)
0116 print('{0:10s} {1:4d} {2:4d} {3:4.1f}'.format(tmpstr, NexpectedROC_perRing[ringNo-1] - Nrocspopulated[d], NineffROC[d], round(meanEntries[d],1)), file=os)
0117 fpix_tot_deadROC += NexpectedROC_perRing[ringNo-1] - Nrocspopulated[d]
0118 fpix_tot_ineffROC += NineffROC[d]
0119 fpix_tot_Nrocspopulated += Nrocspopulated[d]
0120 fpix_tot_totalentries += float(totalEntries[d])
0121
0122 return 0;
0123
0124 fname=sys.argv[1]
0125 getRunNumber(fname)
0126 fin= TFile(fname)
0127 outname="PixZeroOccROCs_run" + str(runNumber) + ".txt"
0128 bpix_tot_deadROC = 0
0129 bpix_tot_ineffROC = 0
0130 bpix_tot_Nrocspopulated = 0
0131 bpix_tot_totalentries = 0
0132
0133 fpix_tot_deadROC = 0
0134 fpix_tot_ineffROC = 0
0135 fpix_tot_Nrocspopulated = 0
0136 fpix_tot_totalentries = 0
0137
0138 global commonPath
0139 commonPath = "DQMData/Run " + str(runNumber) + "/PixelPhase1/Run summary/Phase1_MechanicalView/"
0140
0141 hnpixclus_bpix = fin.Get(commonPath + "charge_PXBarrel")
0142 hnpixclus_fpix = fin.Get(commonPath + "charge_PXForward")
0143
0144 out_file = open(outname, "w")
0145 print("#Layer/Disc KEY NDeadROC NineffROC MeanOccupacy", file=out_file)
0146 print("#Pixel Barrel Summary", file=out_file)
0147 for l in range(1,5):
0148 if countBadROCBarrel(fin, l, out_file) == 1:
0149 print("DQM histogram for Layer", str(l), " is empty!", file=out_file)
0150 print("BPix tot", '{0:4d} {1:4d} {2:4.1f}'.format(bpix_tot_deadROC, bpix_tot_ineffROC, round(float(bpix_tot_totalentries)/bpix_tot_Nrocspopulated,1)), file=out_file)
0151 print("#Pixel Forward Summary", file=out_file)
0152 for ring in range(1,3):
0153 if countBadROCForward(fin, ring, out_file) == 1:
0154 print("DQM histogram for Ring", str(ring), " is empty!", file=out_file)
0155 print("FPix tot", '{0:4d} {1:4d} {2:4.1f}'.format(fpix_tot_deadROC, fpix_tot_ineffROC, round(float(fpix_tot_totalentries)/fpix_tot_Nrocspopulated,1)), file=out_file)
0156 print("Number of clusters=", int(hnpixclus_bpix.GetEntries() + hnpixclus_fpix.GetEntries()), file=out_file)
0157 out_file.close()