Example #1
0
class TestResult(AbstractClasses.GeneralTestResult.GeneralTestResult):
    def CustomInit(self):
        self.NameSingle='GainMap'
        self.Name='CMSPixel_QualificationGroup_Fulltest_Chips_Chip_%s_TestResult'%self.NameSingle
        self.Attributes['TestedObjectType'] = 'CMSPixel_Module'

    def PopulateResultData(self):
        ROOT.gPad.SetLogy(0)
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(Name=self.GetUniqueID(), nChips=self.ParentObject.Attributes['NumberOfChips'], StartChip=self.ParentObject.Attributes['StartChip'])

        # fill plot
        for i in self.ParentObject.ResultData['SubTestResults']['Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData['SubTestResults']['Chips'].ResultData['SubTestResults'][i]
            histo = ChipTestResultObject.ResultData['SubTestResults']['PHCalibrationGainMap'].ResultData['Plot']['ROOTObject']
            if not histo:
                print 'cannot get NoiseMap histo for chip ',ChipTestResultObject.Attributes['ChipNo']
                continue
            chipNo = ChipTestResultObject.Attributes['ChipNo']
            for col in range(self.nCols):
                for row in range(self.nRows):
                    result = histo.GetBinContent(col + 1, row + 1)
                    self.ModuleMap.UpdatePlot(chipNo, col, row, result)

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot']['ROOTObject'] = self.ModuleMap.GetHistogram()
            self.ModuleMap.Draw(self.Canvas)

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'Gain Map'
        self.SaveCanvas()
    def PopulateResultData(self):
        ROOT.gPad.SetLogy(0)
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(Name=self.GetUniqueID(), nChips=self.ParentObject.Attributes['NumberOfChips'], StartChip=self.ParentObject.Attributes['StartChip'])
        DisplayOptionsShow = True

        for i in self.ParentObject.ResultData['SubTestResults']['Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData['SubTestResults']['Chips'].ResultData['SubTestResults'][i]
            histo = ChipTestResultObject.ResultData['SubTestResults']['HotPixelRetrimming_{Rate}'.format(Rate=self.Attributes['Rate'])].ResultData['Plot']['ROOTObject']
            chipNo = ChipTestResultObject.Attributes['ChipNo']

            if histo:
                for col in range(self.nCols): 
                    for row in range(self.nRows):
                        result = histo.GetBinContent(col + 1, row + 1)
                        self.ModuleMap.UpdatePlot(chipNo, col, row, result)
            DisplayOptionsShow = DisplayOptionsShow and (ChipTestResultObject.ResultData['SubTestResults']['HotPixelRetrimming_{Rate}'.format(Rate=self.Attributes['Rate'])].DisplayOptions['Show'] if ChipTestResultObject.ResultData['SubTestResults']['HotPixelRetrimming_{Rate}'.format(Rate=self.Attributes['Rate'])].DisplayOptions.has_key('Show') else True)

        self.DisplayOptions['Show'] = DisplayOptionsShow

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot']['ROOTObject'] = self.ModuleMap.GetHistogram()
            self.ModuleMap.Draw(Canvas=self.Canvas, TitleZ="Δ trimbit")

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'Retrimmed Hot Pixels {Rate}'.format(Rate=self.Attributes['Rate'])
        self.SaveCanvas()
Example #3
0
class TestResult(AbstractClasses.GeneralTestResult.GeneralTestResult):
    def CustomInit(self):
        self.Name='CMSPixel_QualificationGroup_Fulltest_VcalThreshold_TestResult'
        self.NameSingle='VcalThreshold'
        self.Attributes['TestedObjectType'] = 'CMSPixel_Module'
        self.Title = 'Vcal Threshold'


    def PopulateResultData(self):
        ROOT.gStyle.SetOptStat(0)
        self.ResultData['Plot']['ROOTObject'] = None

        # initialize module map
        self.ModuleMap = ModuleMap(Name=self.GetUniqueID(), nChips=self.ParentObject.Attributes['NumberOfChips'], StartChip=self.ParentObject.Attributes['StartChip'])

        # loop over all chips
        ValueList = []
        for i in self.ParentObject.ResultData['SubTestResults']['Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData['SubTestResults']['Chips'].ResultData['SubTestResults'][i]
            histo = ChipTestResultObject.ResultData['SubTestResults']['VcalThresholdUntrimmed'].ResultData['Plot']['ROOTObject']
            if not histo:
                print 'cannot get VcalThresholdUntrimmed histo for chip ',ChipTestResultObject.Attributes['ChipNo']
                continue
            
            for col in range(self.nCols):
                for row in range(self.nRows):
                    Value = histo.GetBinContent(col + 1, row + 1)
                    ValueList.append(Value)
                    self.ModuleMap.UpdatePlot(ChipTestResultObject.Attributes['ChipNo'], col, row, Value)

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot']['ROOTObject'] = self.ModuleMap.GetHistogram()
            self.ModuleMap.Draw(self.Canvas)

        # get minimum and maximum threshold
        if self.ResultData['Plot']['ROOTObject']:
            mThresholdMin = 0.
            mThresholdMax = 255.

            if self.ResultData['Plot']['ROOTObject'].GetMaximum() < mThresholdMax:
                mThresholdMax = self.ResultData['Plot']['ROOTObject'].GetMaximum()

            if self.ResultData['Plot']['ROOTObject'].GetMinimum() > mThresholdMin:
                mThresholdMin = self.ResultData['Plot']['ROOTObject'].GetMinimum()
            if len(ValueList) > 0:
                SortedValueList = sorted(ValueList)
                LowerIndex = int(math.floor(len(SortedValueList)*0.05))
                UpperIndex = int(math.floor(len(SortedValueList)*0.95))
                LowerValueList = SortedValueList[0:LowerIndex-1]
                UpperValueList = SortedValueList[UpperIndex:]
                if SortedValueList[LowerIndex] > 5.*sum(LowerValueList)/float(len(LowerValueList)):
                    mThresholdMin = SortedValueList[LowerIndex]*0.1
                if SortedValueList[UpperIndex]*5. < sum(UpperValueList)/float(len(UpperValueList)):
                    mThresholdMax = SortedValueList[UpperIndex]*1.1

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.ResultData['Plot']['Caption'] = 'Vcal Threshold'
        self.SaveCanvas()        
Example #4
0
    def PopulateResultData(self):
        ROOT.gPad.SetLogy(0)
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(Name=self.GetUniqueID(), nChips=self.ParentObject.Attributes['NumberOfChips'], StartChip=self.ParentObject.Attributes['StartChip'])

        # fill plot
        for i in self.ParentObject.ResultData['SubTestResults']['Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData['SubTestResults']['Chips'].ResultData['SubTestResults'][i]
            histo = ChipTestResultObject.ResultData['SubTestResults']['PixelMap'].ResultData['Plot']['ROOTObject']

            if not histo:
                continue

            chipNo = ChipTestResultObject.Attributes['ChipNo']
            for col in range(self.nCols):
                for row in range(self.nRows):
                    result = histo.GetBinContent(col + 1, row + 1)
                    self.ModuleMap.UpdatePlot(chipNo, col, row, result)

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot']['ROOTObject'] = self.ModuleMap.GetHistogram()
            self.ModuleMap.Draw(self.Canvas)

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'Pixel Alive Map'
        self.SaveCanvas()
class TestResult(AbstractClasses.GeneralTestResult.GeneralTestResult):
    def CustomInit(self):
        self.Name = 'CMSPixel_QualificationGroup_Reception_Chips_Chip_BumpBondingMap_TestResult'
        self.NameSingle = 'BumpBondingMap'
        self.Attributes['TestedObjectType'] = 'CMSPixel_Module'

    def PopulateResultData(self):
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(
            Name=self.GetUniqueID(),
            nChips=self.ParentObject.Attributes['NumberOfChips'],
            StartChip=self.ParentObject.Attributes['StartChip'])

        # fill plot
        for i in self.ParentObject.ResultData['SubTestResults'][
                'Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData[
                'SubTestResults']['Chips'].ResultData['SubTestResults'][i]
            histo = ChipTestResultObject.ResultData['SubTestResults'][
                'BumpBondingProblems'].ResultData['Plot']['ROOTObject']

            if not histo:
                print 'cannot get BumpBondingProblems histo for chip ', ChipTestResultObject.Attributes[
                    'ChipNo']
                continue

            chipNo = ChipTestResultObject.Attributes['ChipNo']
            for col in range(self.nCols):
                for row in range(self.nRows):
                    result = histo.GetBinContent(col + 1, row + 1)
                    self.ModuleMap.UpdatePlot(chipNo, col, row, result)

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot'][
                'ROOTObject'] = self.ModuleMap.GetHistogram()
            self.ModuleMap.Draw(self.Canvas)

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'Bump Bonding Thrmap'
        self.SaveCanvas()

    def UpdatePlot(self, chipNo, col, row, value):
        result = value
        if chipNo < 8:
            tmpCol = 8 * self.nCols - 1 - chipNo * self.nCols - col
            tmpRow = 2 * self.nRows - 1 - row
        else:
            tmpCol = (chipNo % 8 * self.nCols + col)
            tmpRow = row
        # Get the data from the chip sub test result bump bonding

        if result and self.verbose:
            print chipNo, col, row, '--->', tmpCol, tmpRow, result
#         self.ResultData['Plot']['ROOTObject'].SetBinContent(tmpCol + 1, tmpRow + 1, result)
        self.ResultData['Plot']['ROOTObject'].Fill(tmpCol, tmpRow, result)
Example #6
0
    def GenerateOverview(self):
        Rows = self.FetchData()
        ModuleIDsList = self.GetModuleIDsList(Rows)
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(Name=self.GetUniqueID(),
                                   nChips=16,
                                   StartChip=0)
        self.ModuleMap.SetContour(100)

        NModules = 0
        TotalMaximum = 0
        for RowTuple in Rows:
            if RowTuple['ModuleID'] in ModuleIDsList:
                ModuleID = RowTuple['ModuleID']

                TestType = 'XrayCalibration_Spectrum'
                if RowTuple['TestType'].startswith(TestType):

                    Path = '/'.join([
                        self.GlobalOverviewPath,
                        RowTuple['RelativeModuleFinalResultsPath'],
                        RowTuple['FulltestSubfolder'],
                        "HitmapOverview_" + self.Attributes["Target"], '*.root'
                    ])
                    print Path
                    RootFiles = glob.glob(Path)
                    ROOTObject = self.GetHistFromROOTFile(RootFiles, "Map")

                    if ROOTObject:
                        self.ModuleMap.AddTH2D(ROOTObject=ROOTObject)
                        TotalMaximum += ROOTObject.GetMaximum()
                        NModules += 1
                    else:
                        self.ProblematicModulesList.append(ModuleID)
                        print "warning: xray map not found for module: '%s'" % ModuleID
                else:
                    print RowTuple['TestType']
        self.ModuleMap.Map2D.GetZaxis().SetRangeUser(0, TotalMaximum)

        # draw module map
        if self.ModuleMap:
            self.ModuleMap.Draw(self.Canvas)

        title = ROOT.TText()
        title.SetNDC()
        title.SetTextAlign(12)
        Subtitle = self.Attributes["Target"] + " modules: %d" % NModules
        title.DrawText(0.15, 0.965, Subtitle)

        self.SaveCanvas('png')
        HTML = self.Image(self.Attributes['ImageFile'])

        AbstractClasses.GeneralProductionOverview.GeneralProductionOverview.GenerateOverview(
            self)

        self.DisplayErrorsList()
        return self.Boxed(HTML)
Example #7
0
class TestResult(AbstractClasses.GeneralTestResult.GeneralTestResult):
    def CustomInit(self):
        self.Name = 'CMSPixel_QualificationGroup_XRayHRQualification_HotPixelOverview_TestResult'
        self.NameSingle = 'HotPixelOverview'
        self.Attributes['TestedObjectType'] = 'CMSPixel_Module'

    def PopulateResultData(self):
        ROOT.gPad.SetLogy(0)
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(
            Name=self.GetUniqueID(),
            nChips=self.ParentObject.Attributes['NumberOfChips'],
            StartChip=self.ParentObject.Attributes['StartChip'])

        for i in self.ParentObject.ResultData['SubTestResults'][
                'Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData[
                'SubTestResults']['Chips'].ResultData['SubTestResults'][i]
            histo = ChipTestResultObject.ResultData['SubTestResults'][
                'HotPixelMap_{Rate}'.format(Rate=self.Attributes['Rate']
                                            )].ResultData['Plot']['ROOTObject']
            chipNo = ChipTestResultObject.Attributes['ChipNo']

            if histo:
                for col in range(self.nCols):
                    for row in range(self.nRows):
                        result = histo.GetBinContent(col + 1, row + 1)
                        self.ModuleMap.UpdatePlot(chipNo, col, row, result)

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot'][
                'ROOTObject'] = self.ModuleMap.GetHistogram()
            self.ModuleMap.Draw(self.Canvas)

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'Masked Hot Pixels {Rate}'.format(
            Rate=self.Attributes['Rate'])
        self.SaveCanvas()

    def UpdatePlot(self, chipNo, col, row, value):
        result = value
        if chipNo < 8:
            tmpCol = 8 * self.nCols - 1 - chipNo * self.nCols - col
            tmpRow = 2 * self.nRows - 1 - row
        else:
            tmpCol = (chipNo % 8 * self.nCols + col)
            tmpRow = row
        # Get the data from the chip sub test result hitmap

        if result and self.verbose:
            print chipNo, col, row, '--->', tmpCol, tmpRow, result
        self.ResultData['Plot']['ROOTObject'].Fill(tmpCol, tmpRow, result)
Example #8
0
class TestResult(AbstractClasses.GeneralTestResult.GeneralTestResult):
    def CustomInit(self):
        self.NameSingle = 'ThresholdOverview'
        self.Name = 'CMSPixel_QualificationGroup_XRayHRQualification_%s_TestResult' % self.NameSingle
        self.Attributes['TestedObjectType'] = 'CMSPixel_Module'

    def PopulateResultData(self):
        ROOT.gPad.SetLogy(0)
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(
            Name=self.GetUniqueID(),
            nChips=self.ParentObject.Attributes['NumberOfChips'],
            StartChip=self.ParentObject.Attributes['StartChip'])
        Directory = self.ParentObject.Attributes['SCurvePaths'][
            'HRSCurves_{Rate}'.format(Rate=self.Attributes['Rate'])]

        for i in self.ParentObject.ResultData['SubTestResults'][
                'Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData[
                'SubTestResults']['Chips'].ResultData['SubTestResults'][i]
            ChipNo = ChipTestResultObject.Attributes['ChipNo']

            SCurveFileName = Directory + '/' + self.ParentObject.ParentObject.HistoDict.get(
                'HighRate', 'SCurveFileName').format(ChipNo=ChipNo)
            SCurveFile = open(SCurveFileName, "r")

            if not SCurveFile:
                raise Exception('Cannot find SCurveFile "%s"' % SCurveFileName)
            else:
                Line = SCurveFile.readline()
                Line = SCurveFile.readline()

                for column in range(self.nCols):  #Columns
                    for row in range(self.nRows):  #Rows
                        Line = SCurveFile.readline()
                        if Line:
                            LineArray = Line.strip().split()
                            Threshold = float(LineArray[0])
                            if 0 < Threshold < 10000:
                                self.ModuleMap.UpdatePlot(
                                    ChipNo, column, row, Threshold)
            SCurveFile.close()

        # draw module map
        if self.ModuleMap:
            self.ModuleMap.SetContour(100)
            self.ResultData['Plot'][
                'ROOTObject'] = self.ModuleMap.GetHistogram()
            self.ModuleMap.Draw(Canvas=self.Canvas, TitleZ="electrons")

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'Threshold {Rate}'.format(Rate=self.Attributes['Rate'])
        self.SaveCanvas()
Example #9
0
class TestResult(AbstractClasses.GeneralTestResult.GeneralTestResult):
    def CustomInit(self):
        self.Name='CMSPixel_QualificationGroup_XRayHRQualification_HitOverview_TestResult'
        self.NameSingle='HitOverview'
        self.Attributes['TestedObjectType'] = 'CMSPixel_Module'

    def PopulateResultData(self):
        ROOT.gStyle.SetOptStat(0)
        self.Canvas.Clear()

        # initialize module map
        self.ModuleMap = ModuleMap(Name=self.GetUniqueID(), nChips=self.ParentObject.Attributes['NumberOfChips'], StartChip=self.ParentObject.Attributes['StartChip'])

        try:
            Rate = self.Attributes['Rate']
        except:
            Rate = ''

        # copy ROC data to module data
        for i in self.ParentObject.ResultData['SubTestResults']['Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData['SubTestResults']['Chips'].ResultData['SubTestResults'][i]
            histo = ChipTestResultObject.ResultData['SubTestResults']['HitMap_{Rate}'.format(Rate=Rate) if Rate else 'HitMap'].ResultData['Plot']['ROOTObject']
            chipNo = ChipTestResultObject.Attributes['ChipNo']

            for col in range(self.nCols): 
                for row in range(self.nRows):
                    result = histo.GetBinContent(col + 1, row + 1)
                    self.ModuleMap.UpdatePlot(chipNo, col, row, result)

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot']['ROOTObject'] = self.ModuleMap.GetHistogram()
            self.ModuleMap.SetContour(100)

            self.ResultData['Plot']['ROOTObject'].GetZaxis().SetRangeUser(0, self.ResultData['Plot']['ROOTObject'].GetMaximum())

            try:
                XProjection = self.ResultData['Plot']['ROOTObject'].ProjectionX('hproj_{Rate}_{id}'.format(Rate=Rate, id=self.GetUniqueID()), 50, 50)
                XProjectionList = []
                for col in range(XProjection.GetXaxis().GetFirst(), XProjection.GetXaxis().GetLast()+1):
                    XProjectionList.append(XProjection.GetBinContent(col))
                XProjectionList.sort()
                Median = XProjectionList[int(len(XProjectionList)/2)]

                if self.ResultData['Plot']['ROOTObject'].GetMaximum() > Median*3:
                    self.ResultData['Plot']['ROOTObject'].GetZaxis().SetRangeUser(0, Median*3)
            except:
                pass

            self.ModuleMap.Draw(Canvas=self.Canvas, TitleZ="# hits")

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'Hit Map {Rate}'.format(Rate=Rate)
        self.SaveCanvas()
Example #10
0
    def GenerateOverview(self):
        Rows = self.FetchData()
        ModuleIDsList = self.GetModuleIDsList(Rows)

        # initialize module map
        self.ModuleMap = ModuleMap(Name=self.GetUniqueID(), nChips=16, StartChip=0)

        NModules = 0
        trimThr = float(self.TestResultEnvironmentObject.GradingParameters['trimThr'])
        tthrTol = float(self.TestResultEnvironmentObject.GradingParameters['tthrTol'])
        pixelThrMin = int(trimThr) - int(tthrTol)
        pixelThrMax = int(trimThr) + int(tthrTol)

        for RowTuple in Rows:
            if RowTuple['ModuleID'] in ModuleIDsList:
                ModuleID = RowTuple['ModuleID']
                TestType = RowTuple['TestType']
                if TestType == self.Attributes['Test'] and (RowTuple['Grade'] == self.Attributes['Grade'] or self.Attributes['Grade'] == 'All'):
                    for Chip in range(0,16):
                        Path = '/'.join([self.GlobalOverviewPath, RowTuple['RelativeModuleFinalResultsPath'], RowTuple['FulltestSubfolder'], 'Chips' ,'Chip%s'%Chip, 'VcalThresholdTrimmedMap', '*.root'])
                        RootFiles = glob.glob(Path)
                        if self.Verbose:
                            print "glob:", Path
                            print "looking in .root files:", RootFiles
                        ROOTObject = self.GetHistFromROOTFile(RootFiles, "VcalThresholdTrimmedMap")
                        if ROOTObject:
                            if ROOTObject.GetEntries() > 0:
                                for x in range(ROOTObject.GetNbinsX()):
                                    for y in range(ROOTObject.GetNbinsY()):
                                        BinContent = ROOTObject.GetBinContent(1 + x, 1 + y)
                                        if BinContent < pixelThrMin or BinContent > pixelThrMax:
                                            self.ModuleMap.UpdatePlot(Chip, x, y, 1)
                            ROOTObject.Delete()
                        else:
                            self.ProblematicModulesList.append(ModuleID)
                            if self.Verbose:
                                print " Threshold map not found for module '%s' Chip '%d'"%(ModuleID, Chip)

                    NModules += 1

        self.CloseFileHandles()

        # draw module map
        if self.ModuleMap:
            self.ModuleMap.Draw(self.Canvas)

        self.ModuleMap.DrawCaption({'Test': self.Attributes['Test'], 'NModules': NModules, 'Grades': self.Attributes['Grade']})

        self.SaveCanvas('png')
        HTML = self.Image(self.Attributes['ImageFile']) + self.BoxFooter("Number of modules: %d"%NModules)

        AbstractClasses.GeneralProductionOverview.GeneralProductionOverview.GenerateOverview(self)
        self.DisplayErrorsList()
        return self.Boxed(HTML)
Example #11
0
    def PopulateResultData(self):
        ROOT.gStyle.SetOptStat(0)
        SpecialBumpBondingTestName = ''

        # initialize module map
        self.ModuleMap = ModuleMap(
            Name=self.GetUniqueID(),
            nChips=self.ParentObject.Attributes['NumberOfChips'],
            StartChip=self.ParentObject.Attributes['StartChip'])

        # fill plot
        for i in self.ParentObject.ResultData['SubTestResults'][
                'Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData[
                'SubTestResults']['Chips'].ResultData['SubTestResults'][i]
            histo = ChipTestResultObject.ResultData['SubTestResults'][
                'BumpBonding'].ResultData['Plot']['ROOTObject']
            try:
                histoBB2 = ChipTestResultObject.ResultData['SubTestResults'][
                    'BB2Map'].ResultData['Plot']['ROOTObject']
                if histoBB2:
                    SpecialBumpBondingTestName = 'BB2'
            except:
                histoBB2 = None

            if not histo:
                print 'cannot get BumpBondingProblems histo for chip ', ChipTestResultObject.Attributes[
                    'ChipNo']
                continue

            chipNo = ChipTestResultObject.Attributes['ChipNo']
            if histoBB2:
                for col in range(self.nCols):
                    for row in range(self.nRows):
                        result = histo.GetBinContent(col + 1, row + 1)
                        if result == 2:
                            self.ModuleMap.UpdatePlot(chipNo, col, row, 1)
            else:
                for col in range(self.nCols):
                    for row in range(self.nRows):
                        result = histo.GetBinContent(col + 1, row + 1)
                        self.ModuleMap.UpdatePlot(chipNo, col, row, result)

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot'][
                'ROOTObject'] = self.ModuleMap.GetHistogram()
            self.ModuleMap.Draw(self.Canvas)

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'Bump Bonding Defects ' + SpecialBumpBondingTestName
        self.SaveCanvas()
Example #12
0
class TestResult(AbstractClasses.GeneralTestResult.GeneralTestResult):
    def CustomInit(self):
        self.Name = 'CMSPixel_QualificationGroup_XRayHRQualification_EfficiencyOverview_TestResult'
        self.NameSingle = 'EfficiencyOverview'
        self.Attributes['TestedObjectType'] = 'CMSPixel_Module'

    def PopulateResultData(self):
        ROOT.gPad.SetLogy(0)
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(
            Name=self.GetUniqueID(),
            nChips=self.ParentObject.Attributes['NumberOfChips'],
            StartChip=self.ParentObject.Attributes['StartChip'])

        for i in self.ParentObject.ResultData['SubTestResults'][
                'Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData[
                'SubTestResults']['Chips'].ResultData['SubTestResults'][i]
            histo = ChipTestResultObject.ResultData['SubTestResults'][
                'EfficiencyMap_{Rate}'.format(
                    Rate=self.Attributes['Rate']
                )].ResultData['Plot']['ROOTObject']
            chipNo = ChipTestResultObject.Attributes['ChipNo']

            if histo:
                for col in range(self.nCols):
                    for row in range(self.nRows):
                        result = histo.GetBinContent(col + 1, row + 1)
                        self.ModuleMap.UpdatePlot(chipNo, col, row, result)

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot'][
                'ROOTObject'] = self.ModuleMap.GetHistogram()
            Ntrig = self.ParentObject.Attributes['Ntrig'][
                'HREfficiency_{Rate}'.format(Rate=self.Attributes['Rate'])]
            self.ModuleMap.SetRangeUser(0, Ntrig)
            self.ModuleMap.Draw(self.Canvas)

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'HR Efficiency Map {Rate}'.format(
            Rate=self.Attributes['Rate'])
        self.SaveCanvas()
Example #13
0
class TestResult(AbstractClasses.GeneralTestResult.GeneralTestResult):
    def CustomInit(self):
        self.Name = 'CMSPixel_QualificationGroup_XRayHRQualification_BumpBondingProblems_TestResult'
        self.NameSingle = 'BumpBondingProblems'
        self.Attributes['TestedObjectType'] = 'CMSPixel_Module'
        self.ResultData['KeyValueDictPairs'] = {}

    def PopulateResultData(self):
        ROOT.gPad.SetLogx(0)
        ROOT.gPad.SetLogy(0)
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(
            Name=self.GetUniqueID(),
            nChips=self.ParentObject.Attributes['NumberOfChips'],
            StartChip=self.ParentObject.Attributes['StartChip'])

        # copy ROC data to module data
        for i in self.ParentObject.ResultData['SubTestResults'][
                'Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData[
                'SubTestResults']['Chips'].ResultData['SubTestResults'][i]
            histo = ChipTestResultObject.ResultData['SubTestResults'][
                'BumpBondingDefects_{Rate}'.format(
                    Rate=self.Attributes['Rate']
                )].ResultData['Plot']['ROOTObject']
            chipNo = ChipTestResultObject.Attributes['ChipNo']

            for col in range(self.nCols):
                for row in range(self.nRows):
                    result = histo.GetBinContent(col + 1, row + 1)
                    self.ModuleMap.UpdatePlot(chipNo, col, row, result)

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot'][
                'ROOTObject'] = self.ModuleMap.GetHistogram()
            self.ModuleMap.Draw(self.Canvas)

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'Bump Bonding Defects {Rate}'.format(
            Rate=self.Attributes['Rate'])
        self.SaveCanvas()
Example #14
0
    def PopulateResultData(self):
        ROOT.gPad.SetLogy(0)
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(Name=self.GetUniqueID(), nChips=self.ParentObject.Attributes['NumberOfChips'], StartChip=self.ParentObject.Attributes['StartChip'])

        for i in self.ParentObject.ResultData['SubTestResults']['Chips_Xray'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData['SubTestResults']['Chips_Xray'].ResultData['SubTestResults'][i]
            chipNo = ChipTestResultObject.Attributes['ChipNo']
            SubTestKey = 'Xray_HitMap_{Method}_{Target}_Chip{Chip}'.format(Method=self.Attributes['Method'], Target=self.Attributes['Target'], Chip=chipNo)
            histo = ChipTestResultObject.ResultData['SubTestResults'][SubTestKey].ResultData['Plot']['ROOTObject']

            for col in range(self.nCols):
                for row in range(self.nRows):
                    result = histo.GetBinContent(col + 1, row + 1)
                    self.ModuleMap .UpdatePlot(chipNo, col, row, result)

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot']['ROOTObject'] = self.ModuleMap.GetHistogram()
            self.ModuleMap.SetContour(100)

            self.ResultData['Plot']['ROOTObject'].GetZaxis().SetRangeUser(0, self.ResultData['Plot']['ROOTObject'].GetMaximum())

            try:
                XProjection = self.ResultData['Plot']['ROOTObject'].ProjectionX('hproj_{Target}_{id}'.format(Target=self.Attributes['Target'], id=self.GetUniqueID()), 50, 50)
                XProjectionList = []
                for col in range(XProjection.GetXaxis().GetFirst(), XProjection.GetXaxis().GetLast()+1):
                    XProjectionList.append(XProjection.GetBinContent(col))
                XProjectionList.sort()
                Median = XProjectionList[int(len(XProjectionList)/2)]

                if self.ResultData['Plot']['ROOTObject'].GetMaximum() > Median*3:
                    self.ResultData['Plot']['ROOTObject'].GetZaxis().SetRangeUser(0, Median*3)
            except:
                pass

            self.ModuleMap.Draw(Canvas=self.Canvas, TitleZ="# hits")

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'Hit Map {Target}'.format(Target=self.Attributes['Target'])
        self.SaveCanvas()
Example #15
0
    def PopulateResultData(self):
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(Name=self.GetUniqueID(), nChips=self.ParentObject.Attributes['NumberOfChips'], StartChip=self.ParentObject.Attributes['StartChip'])
        Directory = self.ParentObject.Attributes['SCurvePaths']['HRSCurves_{Rate}'.format(Rate=self.Attributes['Rate'])]

        for i in self.ParentObject.ResultData['SubTestResults']['Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData['SubTestResults']['Chips'].ResultData['SubTestResults'][i]
            ChipNo = ChipTestResultObject.Attributes['ChipNo']

            SCurveFileName = Directory + '/' + self.ParentObject.ParentObject.HistoDict.get('HighRate', 'SCurveFileName').format(ChipNo=ChipNo)
            SCurveFile = open(SCurveFileName, "r")

            if not SCurveFile:
                raise Exception('Cannot find SCurveFile "%s"'%SCurveFileName)
            else:
                Line = SCurveFile.readline()
                Line = SCurveFile.readline()

                for column in range(self.nCols): #Columns
                    for row in range(self.nRows): #Rows
                        Line = SCurveFile.readline()
                        if Line:
                            LineArray = Line.strip().split()
                            Noise = float(LineArray[1])
                            if 0 < Noise < 2000:
                                self.ModuleMap.UpdatePlot(ChipNo, column, row, Noise)
            SCurveFile.close()

        # draw module map
        if self.ModuleMap:
            self.ModuleMap.SetContour(100)
            self.ResultData['Plot']['ROOTObject'] = self.ModuleMap.GetHistogram()
            if self.ResultData['Plot']['ROOTObject'] and self.ResultData['Plot']['ROOTObject'].GetMaximum() < 600:
                self.ResultData['Plot']['ROOTObject'].GetZaxis().SetRangeUser(0, 600)

            self.ModuleMap.Draw(Canvas=self.Canvas, TitleZ="electrons")

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'Noise {Rate}'.format(Rate=self.Attributes['Rate'])
        self.SaveCanvas()
Example #16
0
    def PopulateResultData(self):
        ROOT.gPad.SetLogy(0)
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(
            Name=self.GetUniqueID(),
            nChips=self.ParentObject.Attributes['NumberOfChips'],
            StartChip=self.ParentObject.Attributes['StartChip'])

        for i in self.ParentObject.ResultData['SubTestResults'][
                'Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData[
                'SubTestResults']['Chips'].ResultData['SubTestResults'][i]
            histo = ChipTestResultObject.ResultData['SubTestResults'][
                'EfficiencyMap_{Rate}'.format(
                    Rate=self.Attributes['Rate']
                )].ResultData['Plot']['ROOTObject']
            chipNo = ChipTestResultObject.Attributes['ChipNo']

            if histo:
                for col in range(self.nCols):
                    for row in range(self.nRows):
                        result = histo.GetBinContent(col + 1, row + 1)
                        self.ModuleMap.UpdatePlot(chipNo, col, row, result)

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot'][
                'ROOTObject'] = self.ModuleMap.GetHistogram()
            Ntrig = self.ParentObject.Attributes['Ntrig'][
                'HREfficiency_{Rate}'.format(Rate=self.Attributes['Rate'])]
            self.ModuleMap.SetRangeUser(0, Ntrig)
            self.ModuleMap.Draw(self.Canvas)

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'HR Efficiency Map {Rate}'.format(
            Rate=self.Attributes['Rate'])
        self.SaveCanvas()
Example #17
0
    def PopulateResultData(self):
        ROOT.gPad.SetLogy(0)
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(
            Name=self.GetUniqueID(),
            nChips=self.ParentObject.Attributes['NumberOfChips'],
            StartChip=self.ParentObject.Attributes['StartChip'])

        # fill plot
        SpecialBumpBondingTestNamesROC = []
        for i in self.ParentObject.ResultData['SubTestResults'][
                'Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData[
                'SubTestResults']['Chips'].ResultData['SubTestResults'][i]

            # take the same bb map that has been used in the grading
            try:
                SpecialBumpBondingTestName = ChipTestResultObject.ResultData[
                    'SubTestResults']['Grading'].ResultData['HiddenData'][
                        'SpecialBumpBondingTestName']
            except:
                SpecialBumpBondingTestName = ''

            if SpecialBumpBondingTestName == 'BB4':
                histo = ChipTestResultObject.ResultData['SubTestResults'][
                    'BB4'].ResultData['Plot']['ROOTObject']
                self.ResultData['HiddenData'][
                    'SpecialBumpBondingTestName'] = 'BB4'
            elif SpecialBumpBondingTestName == 'BB2':
                histo = ChipTestResultObject.ResultData['SubTestResults'][
                    'BB2Map'].ResultData['Plot']['ROOTObject']
                self.ResultData['HiddenData'][
                    'SpecialBumpBondingTestName'] = 'BB2'
            else:
                histo = ChipTestResultObject.ResultData['SubTestResults'][
                    'BumpBondingMap'].ResultData['Plot']['ROOTObject']

            SpecialBumpBondingTestNamesROC.append(SpecialBumpBondingTestName)

            if not histo:
                print 'cannot get BumpBondingProblems histo for chip ', ChipTestResultObject.Attributes[
                    'ChipNo']
                continue
            chipNo = ChipTestResultObject.Attributes['ChipNo']
            for col in range(self.nCols):
                for row in range(self.nRows):
                    result = histo.GetBinContent(col + 1, row + 1)
                    self.ModuleMap.UpdatePlot(chipNo, col, row, result)

        UniqueBBTestNames = list(set(SpecialBumpBondingTestNamesROC))
        if len(UniqueBBTestNames) == 1:
            self.ResultData['HiddenData'][
                'SpecialBumpBondingTestName'] = UniqueBBTestNames[0]
        elif len(UniqueBBTestNames) > 1:
            self.ResultData['HiddenData'][
                'SpecialBumpBondingTestName'] = '/'.join(UniqueBBTestNames)
        else:
            self.ResultData['HiddenData']['SpecialBumpBondingTestName'] = ''

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot'][
                'ROOTObject'] = self.ModuleMap.GetHistogram()
            self.ModuleMap.Draw(self.Canvas)

        self.ResultData['Plot']['Format'] = 'png'

        self.Title = 'Bump Bonding Defects' + (
            ' (%s)' %
            self.ResultData['HiddenData']['SpecialBumpBondingTestName']
        ) if 'SpecialBumpBondingTestName' in self.ResultData[
            'HiddenData'] and len(self.ResultData['HiddenData']
                                  ['SpecialBumpBondingTestName']) > 0 else ''
        self.SaveCanvas()
Example #18
0
class ProductionOverview(
        AbstractClasses.GeneralProductionOverview.GeneralProductionOverview):
    def CustomInit(self):
        self.NameSingle = 'DeadPixelClusters'
        self.Name = 'CMSPixel_ProductionOverview_%s' % self.NameSingle
        self.Title = 'Dead Pixel Clusters, Test: %s' % (
            self.Attributes['Test'])
        self.DisplayOptions = {
            'Width': 2.7,
        }
        self.SubPages = []
        self.SavePlotFile = True
        self.Canvas.SetCanvasSize(1330, 430)
        self.Canvas.Update()

    def GenerateOverview(self):
        Rows = self.FetchData()
        ModuleIDsList = self.GetModuleIDsList(Rows)

        # initialize module map
        self.ModuleMap = ModuleMap(Name=self.GetUniqueID(),
                                   nChips=16,
                                   StartChip=0)

        NModules = 0

        for RowTuple in Rows:
            if RowTuple['ModuleID'] in ModuleIDsList:
                ModuleID = RowTuple['ModuleID']
                TestType = RowTuple['TestType']

                if TestType == self.Attributes['Test']:
                    nClusteredPixelsPerModule = 0
                    for Chip in range(0, 16):
                        Path = '/'.join([
                            self.GlobalOverviewPath,
                            RowTuple['RelativeModuleFinalResultsPath'],
                            RowTuple['FulltestSubfolder'], 'Chips',
                            'Chip%s' % Chip, 'PixelMap', '*.root'
                        ])
                        RootFiles = glob.glob(Path)
                        ROOTObject = self.GetHistFromROOTFile(
                            RootFiles, "PixelMap")
                        if ROOTObject:
                            for x in range(1, ROOTObject.GetNbinsX() + 1):
                                for y in range(1, ROOTObject.GetNbinsY() + 1):
                                    BinContent = ROOTObject.GetBinContent(x, y)
                                    if BinContent < 1:
                                        Clustered = False
                                        if (x > 1 and ROOTObject.GetBinContent(
                                                x - 1, y) < 1):
                                            Clustered = True
                                        if (x < 52
                                                and ROOTObject.GetBinContent(
                                                    x + 1, y) < 1):
                                            Clustered = True
                                        if (y > 1 and ROOTObject.GetBinContent(
                                                x, y - 1) < 1):
                                            Clustered = True
                                        if (y < 80
                                                and ROOTObject.GetBinContent(
                                                    x, y + 1) < 1):
                                            Clustered = True

                                        if Clustered:
                                            #print "C",Chip," ",x,y
                                            self.ModuleMap.UpdatePlot(
                                                Chip, x, y, 1)
                                            nClusteredPixelsPerModule += 1

                            ROOTObject.Delete()
                        else:
                            self.ProblematicModulesList.append(ModuleID)
                            if self.Verbose:
                                print "      Dead Pixel map not found for module '%s' Chip '%d'" % (
                                    ModuleID, Chip)
                    Value = self.GetJSONValue([
                        RowTuple['RelativeModuleFinalResultsPath'],
                        RowTuple['FulltestSubfolder'], 'IVCurve',
                        'KeyValueDictPairs.json', 'CurrentAtVoltage150V',
                        'Value'
                    ])
                    try:
                        Value = float(Value)
                    except:
                        Value = None
                    print "%s: %d, %f" % (ModuleID, nClusteredPixelsPerModule,
                                          Value if Value else 0.0)
                    NModules += 1

            self.CloseFileHandles()

        # draw module map
        if self.ModuleMap:
            ROOT.gStyle.SetOptStat(0)
            self.ModuleMap.Draw(self.Canvas)

        self.ModuleMap.DrawCaption({
            'Test': self.Attributes['Test'],
            'NModules': NModules
        })

        self.SaveCanvas('png')
        HTML = self.Image(self.Attributes['ImageFile']) + self.BoxFooter(
            "Number of modules: %d" % NModules)

        AbstractClasses.GeneralProductionOverview.GeneralProductionOverview.GenerateOverview(
            self)
        self.DisplayErrorsList()
        return self.Boxed(HTML)
Example #19
0
class ProductionOverview(
        AbstractClasses.GeneralProductionOverview.GeneralProductionOverview):
    def CustomInit(self):
        self.NameSingle = 'DeadPixelOverlay'
        self.Name = 'CMSPixel_ProductionOverview_%s' % self.NameSingle
        self.Title = 'Dead Pixel Overlay, Test: %s Grade: %s' % (
            self.Attributes['Test'], self.Attributes['Grade'])
        self.DisplayOptions = {
            'Width': 2.7,
        }
        self.SubPages = []
        self.SavePlotFile = True
        self.Canvas.SetCanvasSize(1330, 430)
        self.Canvas.Update()

    def GenerateOverview(self):
        Rows = self.FetchData()
        ModuleIDsList = self.GetModuleIDsList(Rows)

        # initialize module map
        self.ModuleMap = ModuleMap(Name=self.GetUniqueID(),
                                   nChips=16,
                                   StartChip=0)

        NModules = 0

        for RowTuple in Rows:
            if RowTuple['ModuleID'] in ModuleIDsList:
                ModuleID = RowTuple['ModuleID']
                TestType = RowTuple['TestType']
                if TestType == self.Attributes['Test'] and (
                        RowTuple['Grade'] == self.Attributes['Grade']
                        or self.Attributes['Grade'] == 'All'):
                    for Chip in range(0, 16):
                        Path = '/'.join([
                            self.GlobalOverviewPath,
                            RowTuple['RelativeModuleFinalResultsPath'],
                            RowTuple['FulltestSubfolder'], 'Chips',
                            'Chip%s' % Chip, 'PixelMap', '*.root'
                        ])
                        RootFiles = glob.glob(Path)
                        ROOTObject = self.GetHistFromROOTFile(
                            RootFiles, "PixelMap")
                        if ROOTObject:
                            if ROOTObject.GetEntries() > 0:
                                for x in range(ROOTObject.GetNbinsX()):
                                    for y in range(ROOTObject.GetNbinsY()):
                                        BinContent = ROOTObject.GetBinContent(
                                            1 + x, 1 + y)
                                        if BinContent < 1:
                                            self.ModuleMap.UpdatePlot(
                                                Chip, x, y, 1)
                            ROOTObject.Delete()
                        else:
                            self.ProblematicModulesList.append(ModuleID)
                            if self.Verbose:
                                print "      Dead Pixel map not found for module '%s' Chip '%d'" % (
                                    ModuleID, Chip)
                    NModules += 1

            self.CloseFileHandles()

        # draw module map
        if self.ModuleMap:
            ROOT.gStyle.SetOptStat(0)
            self.ModuleMap.Draw(self.Canvas)

        self.ModuleMap.DrawCaption({
            'Test': self.Attributes['Test'],
            'NModules': NModules,
            'Grades': self.Attributes['Grade']
        })

        self.SaveCanvas('png')
        HTML = self.Image(self.Attributes['ImageFile']) + self.BoxFooter(
            "Number of modules: %d" % NModules)

        AbstractClasses.GeneralProductionOverview.GeneralProductionOverview.GenerateOverview(
            self)
        self.DisplayErrorsList()
        return self.Boxed(HTML)
Example #20
0
class TestResult(AbstractClasses.GeneralTestResult.GeneralTestResult):
    def CustomInit(self):
        self.Name = 'CMSPixel_QualificationGroup_Reception_Chips_Chip_BumpBondingMap_TestResult'
        self.NameSingle = 'BumpBondingMap'
        self.Attributes['TestedObjectType'] = 'CMSPixel_Module'

    def PopulateResultData(self):
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(
            Name=self.GetUniqueID(),
            nChips=self.ParentObject.Attributes['NumberOfChips'],
            StartChip=self.ParentObject.Attributes['StartChip'])

        # fill plot
        SpecialBumpBondingTestNamesROC = []
        for i in self.ParentObject.ResultData['SubTestResults'][
                'Chips'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData[
                'SubTestResults']['Chips'].ResultData['SubTestResults'][i]

            # take the same bb map that has been used in the grading
            SpecialBumpBondingTestName = ChipTestResultObject.ResultData[
                'SubTestResults']['Grading'].ResultData['HiddenData'][
                    'SpecialBumpBondingTestName']
            if SpecialBumpBondingTestName == 'BB4':
                histo = ChipTestResultObject.ResultData['SubTestResults'][
                    'BB4'].ResultData['Plot']['ROOTObject']
                self.ResultData['HiddenData'][
                    'SpecialBumpBondingTestName'] = 'BB4'
            elif SpecialBumpBondingTestName == 'BB2':
                histo = ChipTestResultObject.ResultData['SubTestResults'][
                    'BB2Map'].ResultData['Plot']['ROOTObject']
                self.ResultData['HiddenData'][
                    'SpecialBumpBondingTestName'] = 'BB2'
            else:
                histo = ChipTestResultObject.ResultData['SubTestResults'][
                    'BumpBondingMap'].ResultData['Plot']['ROOTObject']

            SpecialBumpBondingTestNamesROC.append(SpecialBumpBondingTestName)

            if not histo:
                print 'cannot get BumpBondingProblems histo for chip ', ChipTestResultObject.Attributes[
                    'ChipNo']
                continue
            chipNo = ChipTestResultObject.Attributes['ChipNo']
            for col in range(self.nCols):
                for row in range(self.nRows):
                    result = histo.GetBinContent(col + 1, row + 1)
                    self.ModuleMap.UpdatePlot(chipNo, col, row, result)

        UniqueBBTestNames = list(set(SpecialBumpBondingTestNamesROC))
        if len(UniqueBBTestNames) == 1:
            self.ResultData['HiddenData'][
                'SpecialBumpBondingTestName'] = UniqueBBTestNames[0]
        elif len(UniqueBBTestNames) > 1:
            self.ResultData['HiddenData'][
                'SpecialBumpBondingTestName'] = '/'.join(UniqueBBTestNames)
        else:
            self.ResultData['HiddenData']['SpecialBumpBondingTestName'] = ''

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot'][
                'ROOTObject'] = self.ModuleMap.GetHistogram()
            self.ModuleMap.Draw(self.Canvas)

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'Bump Bonding Defects Map %s' % (
            "(" + self.ResultData['HiddenData']['SpecialBumpBondingTestName'] +
            ")" if len(self.ResultData['HiddenData']
                       ['SpecialBumpBondingTestName']) > 0 else "")
        self.SaveCanvas()
Example #21
0
class TestResult(AbstractClasses.GeneralTestResult.GeneralTestResult):
    def CustomInit(self):
        self.Name='CMSPixel_QualificationGroup_XrayCalibrationSpectrum_HitmapOverview_TestResult'
        self.NameSingle='HitmapOverview'
        self.Attributes['TestedObjectType'] = 'CMSPixel_Module'

    def PopulateResultData(self):
        ROOT.gPad.SetLogy(0)
        ROOT.gStyle.SetOptStat(0)

        # initialize module map
        self.ModuleMap = ModuleMap(Name=self.GetUniqueID(), nChips=self.ParentObject.Attributes['NumberOfChips'], StartChip=self.ParentObject.Attributes['StartChip'])

        for i in self.ParentObject.ResultData['SubTestResults']['Chips_Xray'].ResultData['SubTestResults']:
            ChipTestResultObject = self.ParentObject.ResultData['SubTestResults']['Chips_Xray'].ResultData['SubTestResults'][i]
            chipNo = ChipTestResultObject.Attributes['ChipNo']
            SubTestKey = 'Xray_HitMap_{Method}_{Target}_Chip{Chip}'.format(Method=self.Attributes['Method'], Target=self.Attributes['Target'], Chip=chipNo)
            histo = ChipTestResultObject.ResultData['SubTestResults'][SubTestKey].ResultData['Plot']['ROOTObject']

            for col in range(self.nCols):
                for row in range(self.nRows):
                    result = histo.GetBinContent(col + 1, row + 1)
                    self.ModuleMap .UpdatePlot(chipNo, col, row, result)

        # draw module map
        if self.ModuleMap:
            self.ResultData['Plot']['ROOTObject'] = self.ModuleMap.GetHistogram()
            self.ModuleMap.SetContour(100)

            self.ResultData['Plot']['ROOTObject'].GetZaxis().SetRangeUser(0, self.ResultData['Plot']['ROOTObject'].GetMaximum())

            try:
                XProjection = self.ResultData['Plot']['ROOTObject'].ProjectionX('hproj_{Target}_{id}'.format(Target=self.Attributes['Target'], id=self.GetUniqueID()), 50, 50)
                XProjectionList = []
                for col in range(XProjection.GetXaxis().GetFirst(), XProjection.GetXaxis().GetLast()+1):
                    XProjectionList.append(XProjection.GetBinContent(col))
                XProjectionList.sort()
                Median = XProjectionList[int(len(XProjectionList)/2)]

                if self.ResultData['Plot']['ROOTObject'].GetMaximum() > Median*3:
                    self.ResultData['Plot']['ROOTObject'].GetZaxis().SetRangeUser(0, Median*3)
            except:
                pass

            self.ModuleMap.Draw(Canvas=self.Canvas, TitleZ="# hits")

        # save canvas
        self.ResultData['Plot']['Format'] = 'png'
        self.Title = 'Hit Map {Target}'.format(Target=self.Attributes['Target'])
        self.SaveCanvas()

    def UpdatePlot(self, chipNo, col, row, value):
        result = value
        if chipNo < 8:
            tmpCol = 8 * self.nCols - 1 - chipNo * self.nCols - col
            tmpRow = 2 * self.nRows - 1 - row
        else:
            tmpCol = (chipNo % 8 * self.nCols + col)
            tmpRow = row
        # Get the data from the chip sub test result hitmap

        if result and self.verbose:
            print chipNo, col, row, '--->', tmpCol, tmpRow, result
        self.ResultData['Plot']['ROOTObject'].Fill(tmpCol, tmpRow, result)
Example #22
0
class ProductionOverview(
        AbstractClasses.GeneralProductionOverview.GeneralProductionOverview):
    def CustomInit(self):
        self.Name = 'CMSPixel_ProductionOverview_BumpBondingOverlay'
        self.NameSingle = 'BumpBondingOverlay'
        self.Xray = False
        if 'Xray' in self.Attributes and self.Attributes['Xray']:
            self.Xray = True
            self.Title = 'BB Defects X-ray, Grade: %s' % self.Attributes[
                'Grade']
        else:
            self.Title = 'BB Defects FT, Grade: %s' % self.Attributes['Grade']

        self.DisplayOptions = {
            'Width': 2.7 * 2,
        }
        self.SubPages = []
        self.SavePlotFile = True
        self.Canvas.SetCanvasSize(1330, 430)
        self.Canvas.Update()

    def GenerateOverview(self):
        Rows = self.FetchData()
        ModuleIDsList = self.GetModuleIDsList(Rows)

        # initialize module map
        self.ModuleMap = ModuleMap(Name=self.GetUniqueID(),
                                   nChips=16,
                                   StartChip=0)

        NModules = 0
        for RowTuple in Rows:
            if RowTuple['ModuleID'] in ModuleIDsList:
                ModuleID = RowTuple['ModuleID']

                if RowTuple['Grade'] == self.Attributes[
                        'Grade'] or self.Attributes['Grade'] == 'All':

                    if self.Xray:
                        TestType = 'XRayHRQualification'
                    else:
                        TestType = 'p17'

                    if RowTuple['TestType'].startswith(TestType):

                        if self.Xray:
                            Path = '/'.join([
                                self.GlobalOverviewPath,
                                RowTuple['RelativeModuleFinalResultsPath'],
                                RowTuple['FulltestSubfolder'],
                                "BumpBondingProblems_150", '*.root'
                            ])
                        else:
                            Path = '/'.join([
                                self.GlobalOverviewPath,
                                RowTuple['RelativeModuleFinalResultsPath'],
                                RowTuple['FulltestSubfolder'],
                                "BumpBondingMap", '*.root'
                            ])

                        RootFiles = glob.glob(Path)
                        ROOTObject = self.GetHistFromROOTFile(
                            RootFiles, "BumpBonding")

                        try:
                            SpecialBBTestName = self.GetJSONValue([
                                RowTuple['RelativeModuleFinalResultsPath'],
                                RowTuple['FulltestSubfolder'],
                                'BumpBondingMap', 'HiddenData.json',
                                'SpecialBumpBondingTestName', 'Value'
                            ])
                            if ROOTObject and SpecialBBTestName.strip().upper(
                            ) == 'BB2':
                                # BB2 reprocessing
                                for x in range(1, ROOTObject.GetNbinsX() + 1):
                                    for y in range(1,
                                                   ROOTObject.GetNbinsY() + 1):
                                        Value = ROOTObject.GetBinContent(x, y)
                                        if Value > 1:
                                            ROOTObject.SetBinContent(x, y, 1)
                                        else:
                                            ROOTObject.SetBinContent(x, y, 0)

                        except:
                            pass

                        if ROOTObject:
                            self.ModuleMap.AddTH2D(ROOTObject=ROOTObject)
                            NModules += 1
                        else:
                            self.ProblematicModulesList.append(ModuleID)
                            if self.Verbose:
                                print "warning: BumpBonding map not found for module: '%s'" % ModuleID

        # draw module map
        if self.ModuleMap:
            self.ModuleMap.Draw(self.Canvas)

        title = ROOT.TText()
        title.SetNDC()
        title.SetTextAlign(12)
        Subtitle = "modules: %d, Grades: %s" % (NModules,
                                                self.Attributes['Grade'])
        title.DrawText(0.15, 0.965, Subtitle)

        self.SaveCanvas('png')
        HTML = self.Image(self.Attributes['ImageFile']) + self.BoxFooter(
            "Number of modules: %d" % NModules)

        AbstractClasses.GeneralProductionOverview.GeneralProductionOverview.GenerateOverview(
            self)

        self.DisplayErrorsList()
        return self.Boxed(HTML)
Example #23
0
    def GenerateOverview(self):

        TableData = []
        Rows = self.FetchData()

        ModuleIDsList = []
        for RowTuple in Rows:
            if not RowTuple['ModuleID'] in ModuleIDsList:
                ModuleIDsList.append(RowTuple['ModuleID'])
        ModuleIDsList.sort(reverse=True)

        TableData.append([
            {
                'Class': 'Header',
                'Value': 'Module'
            },
            {
                'Class': 'Header',
                'Value': 'Grade'
            },
            {
                'Class': 'Header',
                'Value': 'I_leak ratio'
            },
            {
                'Class': 'Header',
                'Value': 'Total'
            },
            {
                'Class': 'Header',
                'Value': 'Bump'
            },
            {
                'Class': 'Header',
                'Value': 'Dead'
            },
            {
                'Class': 'Header',
                'Value': 'WorstROC'
            },
            {
                'Class': 'Header',
                'Value': 'Map'
            },
        ])

        try:
            IgnoreModules = [
                x.strip() for x in self.TestResultEnvironmentObject.
                Configuration['IgnoreInSelectionList'].split(',')
            ]
            print "ignore modules:", IgnoreModules
        except:
            IgnoreModules = []

        # n defects -> category = floor(n/10)
        defectCategories = []
        nCategories = 20
        for i in range(nCategories):
            defectCategories.append([])

        nMod = 0
        for ModuleID in ModuleIDsList:

            matchRows = [
                x for x in Rows if x['ModuleID'] == ModuleID
                and x['TestType'] == self.Attributes['Test']
            ]

            FinalGrade = self.GetFinalGrade(ModuleID, Rows)
            if FinalGrade == 'B':
                FinalGradeFormatted = "<span style='color:#f70;font-weight:bold;'>%s</span>" % FinalGrade
            elif FinalGrade == 'C':
                FinalGradeFormatted = "<span style='color:red;font-weight:bold;'>%s</span>" % FinalGrade
            elif FinalGrade == 'None':
                FinalGradeFormatted = "<span style='color:#777;font-weight:bold;'>%s</span>" % FinalGrade
            else:
                FinalGradeFormatted = FinalGrade

            if FinalGrade in self.IncludeGrades and ModuleID not in IgnoreModules:
                if len(matchRows) == 1:
                    RowTuple = matchRows[0]

                    countBBTotal = 0
                    countDeadTotal = 0
                    countBBROC = [0] * self.nROCs
                    countDeadROC = [0] * self.nROCs

                    # initialize module map
                    self.DefectsMap = ModuleMap(Name=self.GetUniqueID(),
                                                nChips=self.nROCs,
                                                StartChip=0)

                    # add threshold defects pixels
                    for iRoc in range(self.nROCs):
                        Path = '/'.join([
                            self.GlobalOverviewPath,
                            RowTuple['RelativeModuleFinalResultsPath'],
                            RowTuple['FulltestSubfolder'], "Chips",
                            "Chip%d" % iRoc, "VcalThresholdTrimmedMap",
                            'VcalThresholdTrimmedMap.root'
                        ])
                        RootFiles = glob.glob(Path)
                        PixelMapROOTObject = self.GetHistFromROOTFile(
                            RootFiles, "VcalThresholdTrimmedMap")

                        for x in range(PixelMapROOTObject.GetNbinsX()):
                            for y in range(PixelMapROOTObject.GetNbinsY()):
                                BinContent = PixelMapROOTObject.GetBinContent(
                                    1 + x, 1 + y)
                                if BinContent < 25 or BinContent > 45:
                                    self.DefectsMap.UpdatePlot(iRoc, x, y, 0.5)

                    # add bump defects pixels
                    for iRoc in range(self.nROCs):
                        Path = '/'.join([
                            self.GlobalOverviewPath,
                            RowTuple['RelativeModuleFinalResultsPath'],
                            RowTuple['FulltestSubfolder'], "Chips",
                            "Chip%d" % iRoc, "BumpBondingMap",
                            'BumpBondingMap.root'
                        ])
                        RootFiles = glob.glob(Path)
                        PixelMapROOTObject = self.GetHistFromROOTFile(
                            RootFiles, "BumpBondingMap")

                        for x in range(PixelMapROOTObject.GetNbinsX()):
                            for y in range(PixelMapROOTObject.GetNbinsY()):
                                BinContent = PixelMapROOTObject.GetBinContent(
                                    1 + x, 1 + y)
                                if BinContent > 0:
                                    self.DefectsMap.UpdatePlot(iRoc, x, y, 1)
                                    countBBTotal += 1
                                    countBBROC[iRoc] += 1

                    # add dead pixels
                    for iRoc in range(self.nROCs):
                        Path = '/'.join([
                            self.GlobalOverviewPath,
                            RowTuple['RelativeModuleFinalResultsPath'],
                            RowTuple['FulltestSubfolder'], "Chips",
                            "Chip%d" % iRoc, "PixelMap", 'PixelMap.root'
                        ])
                        RootFiles = glob.glob(Path)
                        PixelMapROOTObject = self.GetHistFromROOTFile(
                            RootFiles, "PixelMap")

                        for x in range(PixelMapROOTObject.GetNbinsX()):
                            for y in range(PixelMapROOTObject.GetNbinsY()):
                                BinContent = PixelMapROOTObject.GetBinContent(
                                    1 + x, 1 + y)
                                if BinContent < 1:
                                    self.DefectsMap.UpdatePlot(
                                        iRoc, x, y, 0.123)
                                    countDeadTotal += 1
                                    countDeadROC[iRoc] += 1

                    # combine maps, 0.12 means blue
                    self.DefectsMap.Map2D.GetZaxis().SetRangeUser(0.0, 1.0)
                    self.DefectsMap.Map2D.SetStats(ROOT.kFALSE)

                    self.Canvas.Clear()
                    self.DefectsMap.Draw(self.Canvas)
                    saveAsFileName = self.GlobalOverviewPath + '/' + self.Attributes[
                        'BasePath'] + 'defects_map_%s.png' % ModuleID
                    self.Canvas.SaveAs(saveAsFileName)

                    imgFile = self.GetStorageKey(
                    ) + '/defects_map_%s.png' % ModuleID  # '/'.join(['..','..',RowTuple['RelativeModuleFinalResultsPath'], RowTuple['FulltestSubfolder'], "BumpBondingMap", 'BumpBondingMap.png'])
                    imgHTMLData = (
                        "<a href='%s'><img src='%s' alt='Bump Bonding defects map' width=600></a>"
                        % (imgFile, imgFile))

                    maxRocDefects = [
                        countDeadROC[i] + countBBROC[i]
                        for i in range(self.nROCs)
                    ]
                    if max(maxRocDefects) < 42:
                        MaxROC = "%d" % max(maxRocDefects)
                    elif max(maxRocDefects) < 167:
                        MaxROC = "<span style='color:#f70;font-weight:bold;'>%d</span>" % max(
                            maxRocDefects)
                    else:
                        MaxROC = "<span style='color:red;font-weight:bold;'>%d</span>" % max(
                            maxRocDefects)

                    totalDefects = countBBTotal + countDeadTotal

                    defectCategory = int(totalDefects / 10)
                    if defectCategory > len(defectCategories) - 1:
                        defectCategory = len(defectCategories) - 1
                    defectCategories[defectCategory].append(ModuleID)

                    # LEAKAGE CURRENT RATIO
                    try:
                        lcRationNumber = float(
                            self.GetJSONValue([
                                RowTuple['RelativeModuleFinalResultsPath'],
                                RowTuple['FulltestSubfolder'], 'IVCurve',
                                'KeyValueDictPairs.json', 'CurrentRatio150V',
                                'Value'
                            ]))
                        lcRatio = (
                            "%1.2f" %
                            lcRationNumber) if lcRationNumber > 0 else 'N/A'
                    except:
                        lcRatio = 'N/A'

                    TableData.append([
                        "<b>%s</b>" % ModuleID, FinalGradeFormatted, lcRatio,
                        "%d" % totalDefects,
                        "%d" % countBBTotal,
                        "%d" % countDeadTotal, MaxROC, imgHTMLData
                    ])
                elif len(matchRows) < 1:
                    TableData.append([
                        "<b>%s</b>" % ModuleID, FinalGradeFormatted, 'N/A', '',
                        '', '', '', '-'
                    ])
                else:
                    TableData.append([
                        "<b>%s</b>" % ModuleID, FinalGradeFormatted, '?', '',
                        '', '', '', '-'
                    ])
                    print "multiple rows found!:", matchRows
                nMod += 1

        RowLimit = 500
        HTMLInfo = ""
        HTMLInfo += "<b>colors:</b> red = missing bump, blue = dead pixel, green = trimmed threshold<br>"
        #HTMLInfo += "<b>definitions:</b> corners are pixels with col less or equal than " + "%d"%self.marginX + " pix and row less or equal than " + "%d"%self.marginY + " pix away from edge. Borders include pixels with col less or equal than " + "%d"%self.marginX + " pix or row less or equal than " + "%d"%self.marginY + " pix away from edge, thus include corners.<br>"
        HTMLInfo += "<b>test:</b> " + self.Attributes['Test'] + "<br>"
        HTMLInfo += "<b>grades:</b> %s<br>" % (', '.join(self.IncludeGrades))
        HTMLInfo += "<b>ignored modules:</b> %s<br>" % (
            ', '.join(IgnoreModules))
        HTMLInfo += "<b>features:</b> click on table header to sort table<br>"

        HTML = HTMLInfo + self.Table(TableData,
                                     RowLimit,
                                     TableClass='sortable',
                                     TableStyle='text-align:center;')

        TableData = []
        # second table
        TableData.append([
            {
                'Class': 'Header',
                'Value': '# defects'
            },
            {
                'Class': 'Header',
                'Value': '# cumulative'
            },
            {
                'Class': 'Header',
                'Value': '# modules'
            },
            {
                'Class': 'Header',
                'Value': 'ModuleIDs'
            },
        ])

        catDefects = 0
        nModulesCumulative = 0
        for moduleIDs in defectCategories:
            catDefects += 10
            nModulesInCategory = len(moduleIDs)
            nModulesCumulative += nModulesInCategory
            categoryName = "<%d" % catDefects if catDefects < nCategories * 10 else ">=%d" % (
                catDefects - 10)

            TableData.append([
                categoryName,
                "%d" % nModulesCumulative,
                "%d" % nModulesInCategory, ", ".join(moduleIDs)
            ])
        HTML += "<br><h4>List of modules less than n defects</h4>"
        HTML += "<b>ignored modules:</b> %s<br>" % (', '.join(IgnoreModules))
        HTML += "<br>" + self.Table(
            TableData, RowLimit, TableClass='', TableStyle='')

        return self.Boxed(HTML)
Example #24
0
    def GenerateOverview(self):

        # initialize module map
        self.ModuleMap = ModuleMap(Name=self.GetUniqueID(),
                                   nChips=16,
                                   StartChip=0)

        Rows = self.FetchData()
        ModuleIDsList = self.GetModuleIDsList(Rows)

        gainMin = float(
            self.TestResultEnvironmentObject.GradingParameters['gainMin'])
        gainMax = float(
            self.TestResultEnvironmentObject.GradingParameters['gainMax'])

        NModules = 0
        ROOT.gStyle.SetOptStat(0)

        for RowTuple in Rows:
            if RowTuple['ModuleID'] in ModuleIDsList:
                ModuleID = RowTuple['ModuleID']
                TestType = RowTuple['TestType']
                if TestType == self.Attributes['Test'] and (
                        RowTuple['Grade'] == self.Attributes['Grade']
                        or self.Attributes['Grade'] == 'All'):
                    ModuleOk = True
                    for Chip in range(0, 16):
                        Path = '/'.join([
                            self.GlobalOverviewPath,
                            RowTuple['RelativeModuleFinalResultsPath'],
                            RowTuple['FulltestSubfolder'], 'Chips',
                            'Chip%s' % Chip, 'PHCalibrationGainMap', '*.root'
                        ])
                        RootFiles = glob.glob(Path)
                        ROOTObject = self.GetHistFromROOTFile(
                            RootFiles, "PHCalibrationGainMap")
                        if ROOTObject:
                            if ROOTObject.GetEntries() > 0:
                                for x in range(ROOTObject.GetNbinsX()):
                                    for y in range(ROOTObject.GetNbinsY()):
                                        BinContent = ROOTObject.GetBinContent(
                                            1 + x, 1 + y)
                                        if BinContent < gainMin or BinContent > gainMax:
                                            self.ModuleMap.UpdatePlot(
                                                Chip, x, y, 1)
                            ROOTObject.Delete()
                        else:
                            self.ProblematicModulesList.append(ModuleID)
                            ModuleOk = False
                            if self.Verbose:
                                print "      Gain map not found for module '%s' Chip '%d'" % (
                                    ModuleID, Chip)

                    if ModuleOk:
                        NModules += 1

        self.CloseFileHandles()

        # draw module map
        if self.ModuleMap:
            self.ModuleMap.Draw(self.Canvas)

        self.ModuleMap.DrawCaption({
            'Test': self.Attributes['Test'],
            'NModules': NModules,
            'Grades': self.Attributes['Grade']
        })

        self.SaveCanvas('png')
        HTML = self.Image(self.Attributes['ImageFile']) + self.BoxFooter(
            "Number of modules: %d" % NModules)

        AbstractClasses.GeneralProductionOverview.GeneralProductionOverview.GenerateOverview(
            self)
        self.DisplayErrorsList()
        return self.Boxed(HTML)