ATLAS Offline Software
Public Member Functions | List of all members
python.html.AtlRunQueryDQSummary.DQSummary Class Reference
Collaboration diagram for python.html.AtlRunQueryDQSummary.DQSummary:

Public Member Functions

def makeHTML (cls, dic, dicsum, doPickle=True, doDQSummary=True, doDQPlots=True, dqsumGRL="PHYS_StandardGRL_All_Good_25ns", dbbTag=("HEAD", "HEAD"))
 

Detailed Description

Definition at line 549 of file AtlRunQueryDQSummary.py.

Member Function Documentation

◆ makeHTML()

def python.html.AtlRunQueryDQSummary.DQSummary.makeHTML (   cls,
  dic,
  dicsum,
  doPickle = True,
  doDQSummary = True,
  doDQPlots = True,
  dqsumGRL = "PHYS_StandardGRL_All_Good_25ns",
  dbbTag = ("HEAD", "HEAD") 
)
method returns a string (unicode is fine) of html code, with out tag <div>...</div> 

Definition at line 552 of file AtlRunQueryDQSummary.py.

552  def makeHTML(cls, dic, dicsum, doPickle=True, doDQSummary=True, doDQPlots=True, dqsumGRL="PHYS_StandardGRL_All_Good_25ns", dbbTag=("HEAD", "HEAD")):
553  """ method returns a string (unicode is fine) of html code, with out tag <div>...</div> """
554 
555 
559 
560 
561  warning = ''
562 
563 
564  with timer("DQSummary"):
565 
566 
567  global usenb
568  usenb = False
569  global livetrigger
570  livetrigger ='L1_EM30'
571  for r,run in enumerate(dic[DataKey('Run')]):
572  ptag = dic[DataKey('Project tag')][r][0].value
573  if 'data13' in ptag:
574  usenb = True
575  livetrigger = 'L1_EM5'
576  elif 'data16_hip5TeV' in ptag or 'data16_hip8TeV' in ptag:
577  usenb = True
578  livetrigger = 'L1_EM12'
579  elif 'data15' in ptag or 'data16' in ptag or 'data17' in ptag or 'data18' in ptag:
580  usenb = False
581  livetrigger = 'L1_EM12'
582 
583 
585  if len(dbbTag) != 2:
586  warning += '<font color="red"> WARNING (DQSummary): The defect database tag "%s" must be a 2-element sequence. Will use "HEAD" tag instead!</font><br>' %(dbbTag)
587  dbbTag = ("HEAD", "HEAD")
588  #Create dbb dummy with HEAD tag
589  ddb = DefectsDB()
590  #check if defect tag is defined in defect database
591  if dbbTag[0] not in ['HEAD'] + ddb.defects_tags:
592  warning += '<font color="red"> WARNING (DQSummary): The defined defect tag "%s" is not defined in defect database. Will use "HEAD" tag instead!</font><br>' %(dbbTag[0])
593  dbbTag = ("HEAD", dbbTag[1])
594  #check if defect and logic tag is defined in defect database
595  if dbbTag[1] not in ['HEAD'] + ddb.logics_tags:
596  warning += '<font color="red"> WARNING (DQSummary): The defined logic tag "%s" is not defined in defect database. Will use "HEAD" tag instead!</font><br>' %(dbbTag[1])
597  dbbTag = (dbbTag[0], "HEAD")
598  #Now set tags
599  ddb = DefectsDB(tag=(dbbTag[0], dbbTag[1]))
600  #Check if virtual defect is defined in logic
601  if dqsumGRL in ddb.virtual_defect_logics.keys():
602  defects_primary_grl = ddb.resolve_primary_defects(ddb._resolve_evaluation_order([dqsumGRL]))
603  else:
604  warning += '<font color="red"> WARNING (DQSummary): The defined virtual defect or GRL "%s" is not defined in logic. Will use no GRL for calculation!</font><br>' %(dqsumGRL)
605  dqsumGRL = 'no'
606 
607  #Check if cosmic run
608  cosmics = False
609  if 'Cosmics' in dqsumGRL:
610  cosmics = True
611 
612  global unit
613  unit = 'pb^{-1}'
614  if usenb:
615  unit ='nb^{-1}'
616  if cosmics:
617  unit = '%'
618 
619 
620  dicsum[DataKey('TotalLumi')] = [0.,0.]
621 
622 
623  dicsum[DataKey('TotalNotReady')] = 0.
624  dicsum[DataKey('TotalBusy')] = 0.
625 
626 
627  detectors = ['ALFA','LCD','ZDC','BCM','PIXEL','SCT','TRT','LAR','TILE',
628  'MS_CSC','MS_RPC','MS_TGC','MS_MDT','MBTS','TRIG','GLOBAL']
629  detectors_color = {'ALFA':kYellow-9,'LCD':kYellow-7,'ZDC':kYellow-4,
630  'BCM':kOrange+1,'PIXEL':kOrange-3,'SCT':kOrange+7,'TRT':kRed-3,
631  'LAR':kRed+2,'TILE':kPink-7,
632  'MS_CSC':kBlue+4,'MS_RPC':kBlue-2,'MS_MDT':kAzure+3,'MS_TGC':kBlue-9,'MBTS':kBlue-6,
633  'TRIG':kGreen-3,'GLOBAL':kGreen+3,'_TOTAL':TColor.GetColor("#585858")}
634  detectors_lumiloss = {}
635  detectors_affectedLBs = {}
636 
637  for d in detectors:
638  detectors_lumiloss[d]={}
639  detectors_affectedLBs[d]={}
640 
641 
642  detectors_lumiloss['_TOTAL']={}
643  detectors_affectedLBs['_TOTAL']={}
644 
645 
646  performances = ['LUMI','ID','CALO','TAU','EGAMMA','JET','MET','MCP','BTAG']
647  performances_color = {'LUMI':kYellow-9,'ID':kOrange+7,'CALO':kRed+2,'TAU':kBlue+2,
648  'EGAMMA':kGreen-3,'JET':kAzure+3,'MET':kGreen-6,'MCP':kBlue-3,
649  'BTAG':kPink,'_TOTAL':TColor.GetColor("#585858")}
650  performances_lumiloss = {}
651  performances_affectedLBs = {}
652 
653  for p in performances:
654  performances_lumiloss[p]={}
655  performances_affectedLBs[p]={}
656 
657 
658  performances_lumiloss['_TOTAL']={}
659  performances_affectedLBs['_TOTAL']={}
660 
661 
662  columns = []
663  global_systems = []
664  columns = ['Run Info','ES1','BLK']
665  global_systems = ['Calo','Tracking','Muon','Trigger & Lumi']
666  columns += global_systems
667 
668 
669  with timer('Create summary results table'):
670 
671  summarytable = '<div><table id="resulttable" class="resulttable" style="margin-left: 13px; margin-right: 13px;" >'
672 
673  summarytable += '<tr>'
674  summarytable += '<th colspan="1"></th>' # run info column
675 
676  #summarytable += '<th colspan="2">Tier0 Reco Status</th>'
677  summarytable += '<th colspan="2">Missing Sign-Off</th>'
678 
679  summarytable += '<th colspan="%i">Defects in ATLAS Ready<br>'%len(global_systems)
680  summarytable += '<div style="font-size: xx-small; cursor: pointer;" onclick="toggle_dq(this)">[show tolerable]</div></th>'
681  summarytable += '</tr>'
682 
683 
684  summarytable += '<tr>'
685  #for item in columns: summarytable += '<th>%s</th>'%item.split(":")[0]
686  for item in columns:
687  summarytable += '<th>%s</th>'%item
688  summarytable += '</tr>'
689 
690  totalNumberOfReadyLB = 0
691 
692  tot_nlb = 0
693  #determine total number of lbs in case of cosmics
694  if cosmics:
695  for r,run in enumerate(dic[DataKey('Run')]):
696  tot_nlb += dic[DataKey('#LB')][r][0]
697 
698  runsWithoutReadyForPhysics = []
699  runsWithoutOfflineLumiInfo = []
700 
701 
702  for r,run in enumerate(dic[DataKey('Run')]):
703 
704 
705  global readylb
706  #ignore ATLAS not ready for Cosmics
707  nlb = dic[DataKey('#LB')][r][0]
708 
709  if cosmics:
710  readylb = range(1,nlb+1)
711  else:
712  readylb = GetLBReady(dic,r)
713 
714  totalNumberOfReadyLB += len(readylb)
715 
716 
717  if len(readylb) == 0:
718  runsWithoutReadyForPhysics += [ str(run) ]
719  continue
720 
721 
723  if cosmics:
724  lumiperlb = dict(zip(readylb, [100./tot_nlb] * nlb))
725  livefrac = dict(zip(readylb, [1] * nlb))
726  else:
727  lumiperlb = GetLBLumi(dic,r)
728  livefrac = GetLBLiveFraction(dic,r)
729 
730  if len(lumiperlb) == 0:
731  runsWithoutOfflineLumiInfo += [ str(run) ]
732  continue
733 
734 
736  for lbl in lumiperlb:
737  # IF statement used when len(lumiperlb)!= len(livefrac)
738  if lbl not in readylb:
739  continue
740  if lbl not in livefrac:
741  pass # in run 3 we don't have trigger rates yet, as they are no longer in COOL
742  # print ("--> Warning: live fraction not available for LB %i. Setting live fraction to 1." % lbl)
743  else:
744  lumiperlb[lbl]*=livefrac[lbl]
745 
746 
747 
748  content = {}
749  for i,item in enumerate(columns):
750  content[item]=''
751 
752 
753  dp = '?'
754  ptag = dic[DataKey('Project tag')][r][0].value
755  year = '20'+ptag.split('_')[0][4:]
756  DP = ARQ_COMA.get_periods_for_run(run)
757  if len(DP)>0:
758  dp=DP[0]
759  content['Run Info'] = '<b>%s</b>&nbsp;<font style="font-size:10px;">data period <b>%s</b></font><br>'%(str(run),dp)
760 
761 
762  tobeignored = ['ALFA','ZDC','LCD']
763  import re
764  if re.match('data1[3-9]', ptag[0:6]):
765  tobeignored = []
766 
767 
768  target='target="blank"'
769  somelinks = '<font style="font-size:10px;color:#0000FF">'
770  somelinks += '<a href="https://atlas-tagservices.cern.ch/tagservices/RunBrowser/runBrowserReport/runBrowserReport.php?runs=%s&pn=%s&fnt=%s" %s>COMA</a>'%(run,dp,ptag,target)
771  somelinks += ', <a href="https://atlasdqm.web.cern.ch/atlasdqm/DQBrowser/makeMatrix.php?selection=All&run=%s&runup=&dbinstance=CONDBR2_DCS&tag=DEFAULT" %s>DCS</a>'%(run,target)
772  somelinks += ', <a href="https://atlas.web.cern.ch/Atlas/GROUPS/DATAPREPARATION/DataSummary/%s/run.py?run=%s" %s>DS</a>'%(year,run,target)
773  somelinks += ', <a href="https://atlasdqm.cern.ch/defectentry/?run=%s" %s>defects</a>'%(run,target)
774  somelinks += '<br><a href="https://atlasdqm.cern.ch/dqsignoff/%s/" %s>DQlogbook</a>'%(run,target)
775  somelinks += ', <a href="https://atlasdqm.cern.ch/webdisplay/tier0?lowrun=%s&highrun=%s&show_all=on" %s>DQWebDisplay</a>'%(run,run,target)
776  somelinks += '</font><br>'
777 
778  content['Run Info'] += somelinks
779 
780 
781  rundate = dic[DataKey('Start and endtime')][r].split(",")
782  tstart = time.strftime("%a, %d %b %Y %H:%M:%S",time.localtime(float(rundate[0])))
783  tend = time.strftime("%a, %d %b %Y %H:%M:%S",time.localtime(float(rundate[1])))
784  content['Run Info'] += '<font style="font-size:10px;">'
785  content['Run Info'] += '<br>Start:&nbsp;<font style="color:#4C7D7E;">%s</font>'%tstart
786  content['Run Info'] += '<br>End:&nbsp;<font style="color:#4C7D7E;">%s</font>'%tend
787  content['Run Info'] += '</font>'
788 
789  #nevents = str(dic[DataKey('#Events')][r][0].value)
790  #content['Run Info'] += 'Recorded events: '+nevents+'<br>'
791  #content['Run Info'] += 'Number of LBs : '+dic[DataKey('#LB')][r][0]+'<br>'
792  #content['Run Info'] += 'LHC Fill : %s<br>'%(dic[DataKey('lhc:fillnumber')][r][0].value)+'<br>'
793 
794 
795  lhctable = '<br><font style="font-size:10px;">'
796  lhctable += '<table><tr><td>'
797  lhctable += '<b>Stable&nbsp;Beam</b><br>%s'%'<br>'.join([ '%s-%s:&nbsp<font style="color:#4C7D7E">%s</font>'%(b.startlb,b.endlb,b.value) for b in dic[DataKey('lhc:stablebeams')][r]])
798  lhctable += '</td><td>'
799  lhctable += '<b>ATLAS&nbsp;Ready</b><br>%s'% '<br>'.join([ '%s-%s:&nbsp<font style="color:#4C7D7E">%s</font>'%(b.startlb,b.endlb,b.value) for b in dic[DataKey('Ready for physics')][r]])
800  lhctable += '</td></tr></table>'
801  lhctable += '</font>'
802  content['Run Info'] += lhctable
803 
804 
805  lumitot = ComputeRunLumi(dic,r,lumiperlb)
806  dicsum[DataKey('TotalLumi')][0]+= lumitot
807  content['Run Info'] += '<font style="font-size:10px;">'
808  content['Run Info'] += 'Ready Recorded: <b>%.2f</b> %s'%(lumitot,unit)
809  content['Run Info'] += '</font><br>'
810 
811 
812  defects = dic[DataKey('DQ')][r]
813 
814  defects_primary = [d for d in defects if d.value.primary]
815 
816 
818  for d in detectors:
819  detectors_lumiloss[d][run]= 0.
820  detectors_affectedLBs[d][run]=[]
821  for p in performances:
822  performances_lumiloss[p][run]=0.
823  performances_affectedLBs[p][run]=[]
824 
825  # Total per run
826  detectors_lumiloss['_TOTAL'][run]= 0.
827  detectors_affectedLBs['_TOTAL'][run]=[]
828  performances_lumiloss['_TOTAL'][run]= 0.
829  performances_affectedLBs['_TOTAL'][run]=[]
830 
831  # And the big sums
832  total_affectedLBs = []
833  GlobalNotReady = []
834  GlobalBusy = []
835 
836 
837  ListOfIntolerableDefects = {}
838  ListOfTolerableDefects = {}
839  ListOfIgnoredDefects = {}
840 
841 
842  for item in defects_primary:
843  defect = item.value.defect
844  comment = item.value.comment
845  user = item.value.user
846  startlb = item.startlb
847  endlb = item.endlb
848  tolerable = item.value.tolerable
849  system = MapToSystem(defect)
850  grl_ignored = False
851 
852  #Make it relative to GRL
853  if not dqsumGRL == 'no' and not tolerable:
854  if defect not in defects_primary_grl:
855  grl_ignored = True
856 
857 
858  if 'GLOBAL_NOTREADY' in defect:
859  GlobalNotReady += [ lb for lb in range(startlb,endlb)]
860 
861  if 'GLOBAL_BUSY' in defect:
862  GlobalBusy += [ lb for lb in range(startlb,endlb) if lb in readylb]
863 
864 
865 
866 
867  if 'UNCHECKED_FINAL' in defect:
868  continue
869 
870 
871  if 'BULK_UNCHECKED' in defect:
872  short = defect.split('_UNCHECKED')[0]
873  content['BLK']+='<font style="font-size:8px;font-weight:bold;">%s</font><br>'%short
874  continue
875 
876  if 'UNCHECKED' in defect:
877  short = defect.split('_UNCHECKED')[0]
878  content['ES1']+='<font style="font-size:8px;font-weight:bold;">%s</font><br>'%short
879  continue
880 
881 
882  if system =='':
883  print ('run %s: this defect is fishy %s '%(run,defect))
884  continue
885 
886 
887  word = defect.split('_')
888  cpdet = word[0]
889  if word[0]=='MS':
890  cpdet += "_"+word[1] # MS systems
891  if cpdet not in detectors and cpdet not in performances:
892  print ('This system is not included: %s (%s)'%(cpdet,defect))
893  continue
894 
895 
896  if not tolerable:
897  RangeDefect = [ lb for lb in range(startlb,endlb) if lb in readylb ]
898  if len(RangeDefect)>0:
899  if not grl_ignored:
900  if defect not in ListOfIntolerableDefects:
901  ListOfIntolerableDefects[defect]= [[],'']
902  ListOfIntolerableDefects[defect][0] = RangeDefect
903  ListOfIntolerableDefects[defect][1] = user+':'+comment
904  else:
905  ListOfIntolerableDefects[defect][0]+= RangeDefect
906  if comment not in ListOfIntolerableDefects[defect][1]:
907  ListOfIntolerableDefects[defect][1]+= ' '+user+':'+comment
908  # This is used to compute lumilosses
909  # Here, we do not include systems "to be ignored"
910  if cpdet in tobeignored:
911  continue
912  # Store list of affected LBs per detector/cp group
913  # we can have a double counting of LBs if defects overlap - fixed later
914  if cpdet in detectors:
915  detectors_affectedLBs[cpdet][run]+=RangeDefect
916  if cpdet in performances:
917  performances_affectedLBs[cpdet][run]+=RangeDefect
918  total_affectedLBs += RangeDefect
919  #treat differently if ignored by GRL although intolerable
920  elif grl_ignored:
921  if defect not in ListOfIgnoredDefects:
922  ListOfIgnoredDefects[defect]= [[],'']
923  ListOfIgnoredDefects[defect][0]= RangeDefect
924  ListOfIgnoredDefects[defect][1]= '[%s]:%s '%(user,comment)
925  else:
926  ListOfIgnoredDefects[defect][0]+= RangeDefect
927  if comment not in ListOfIgnoredDefects[defect][1]:
928  ListOfIgnoredDefects[defect][1] += '[%s]:%s '%(user,comment)
929 
930  else:
931  RangeDefect = [ lb for lb in range(startlb,endlb) if lb in readylb]
932  if len(RangeDefect)>0:
933  if defect not in ListOfTolerableDefects:
934  ListOfTolerableDefects[defect]= [[],'']
935  ListOfTolerableDefects[defect][0]= RangeDefect
936  ListOfTolerableDefects[defect][1]= '[%s]:%s '%(user,comment)
937  else:
938  ListOfTolerableDefects[defect][0]+= RangeDefect
939  if comment not in ListOfTolerableDefects[defect][1]:
940  ListOfTolerableDefects[defect][1] += '[%s]:%s '%(user,comment)
941 
942 
943 
944  for item in global_systems:
945  content[item]='<table class="dqdefects">'
946 
947  for item in ListOfIntolerableDefects:
948  system = MapToSystem(item)
949  if system not in global_systems:
950  continue
951  lbs = listify(ListOfIntolerableDefects[item][0])
952  tip = ListOfIntolerableDefects[item][1]
953  tipkey = "dqcomment_int_%s_%s"%(item,run)
954  Run.addGlobalToolTip(tipkey,tip)
955  content[system]+='<tr class="showTip %s" >'%(tipkey)
956  content[system]+='<td class="intolerable">%s</td>'%(item)
957  content[system]+='<td class="lb">%s</td>'%(lbs)
958  content[system]+='</tr>'
959 
960  for item in ListOfIgnoredDefects:
961  system = MapToSystem(item)
962  if system not in global_systems:
963  continue
964  lbs = listify(ListOfIgnoredDefects[item][0])
965  tip = ListOfIgnoredDefects[item][1]
966  tipkey = "dqcomment_ign_%s_%s"%(item,run)
967  Run.addGlobalToolTip(tipkey,tip)
968  content[system]+='<tr class="showTip %s" >'%(tipkey)
969  content[system]+='<td class="ignored">%s</td>'%(item)
970  content[system]+='<td class="lb">%s</td>'%(lbs)
971  content[system]+='</tr>'
972 
973  for item in ListOfTolerableDefects:
974  system = MapToSystem(item)
975  if system not in global_systems:
976  continue
977  lbs = listify(ListOfTolerableDefects[item][0])
978  tip = ListOfTolerableDefects[item][1]
979  tipkey = "dqcomment_tol_%s_%s"%(item,run)
980  Run.addGlobalToolTip(tipkey,tip)
981  content[system]+='<tr class="showTip %s tolerable" style="visibility:collapse;">'%(tipkey)
982  content[system]+='<td>%s</td>'%(item)
983  content[system]+='<td class="lb">%s</td>'%(lbs)
984  content[system]+='</tr>'
985 
986 
987  for item in global_systems:
988  content[item]+='</table><br>'
989 
990 
991  thumbsize = 70
992  imgsize = 600
993  for gsys in global_systems:
994  tol = {}
995  int = {}
996  ign = {}
997  for defect in ListOfTolerableDefects:
998  # remove systems to be ignored from the plots
999  word = defect.split('_')
1000  cpdet = word[0]
1001  if word[0]=='MS':
1002  cpdet += "_"+word[1] # MS systems
1003  if cpdet in tobeignored:
1004  continue
1005  if gsys==MapToSystem(defect):
1006  tol[defect]=ListOfTolerableDefects[defect][0]
1007  for defect in ListOfIntolerableDefects:
1008  # remove systems to be ignored from the plots
1009  word = defect.split('_')
1010  cpdet = word[0]
1011  if word[0]=='MS':
1012  cpdet += "_"+word[1] # MS systems
1013  if cpdet in tobeignored:
1014  continue
1015  if gsys==MapToSystem(defect):
1016  int[defect]=ListOfIntolerableDefects[defect][0]
1017  for defect in ListOfIgnoredDefects:
1018  # remove systems to be ignored from the plots
1019  word = defect.split('_')
1020  cpdet = word[0]
1021  if word[0]=='MS':
1022  cpdet += "_"+word[1] # MS systems
1023  if cpdet in tobeignored:
1024  continue
1025  if gsys==MapToSystem(defect):
1026  ign[defect]=ListOfIgnoredDefects[defect][0]
1027 
1028  hname = MakePlot_DefectsPerSystem(gsys,int,tol,ign,dic,r)
1029  for h in hname:
1030  if len(h)== 0:
1031  continue
1032  title = "Click to zoom"
1033  wincontent = "<img src=&quot;%s&quot; height=%s/>"%(h,imgsize)
1034  openwin = "javascript:openLargeWindow('Print1','"
1035  openwin += "<!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;>"
1036  openwin += "<html xmlns:&quot;my&quot;><head><title>Defects for run %s</title></head>"%run
1037  openwin += "<body style=&quot;background-color:#ffffff&quot;>%s</body></html>"%wincontent
1038  openwin += "')"
1039  content[gsys]+='<a title="%s" href="%s" ><img src="%s" height=%s/></a>'%(title,openwin,h,thumbsize)
1040 
1041 
1042  _lblumi = 0.
1043  if not GlobalNotReady:
1044  for lb in GlobalNotReady:
1045  _lblumi += lumiperlb[lb]
1046  dicsum[DataKey('TotalNotReady')] += _lblumi
1047  content['Run Info'] += '<font style="font-size:10px;">'
1048  content['Run Info'] += 'Global Not Ready: <b>%.2f</b> %s'%(_lblumi,unit)
1049  content['Run Info'] += '</font><br>'
1050 
1051 
1052  _lblumi = 0.
1053  for lb in GlobalBusy:
1054  _lblumi += lumiperlb[lb]
1055  dicsum[DataKey('TotalBusy')]+= _lblumi
1056  content['Run Info'] += '<font style="font-size:10px;">'
1057  content['Run Info'] += 'Global Busy: <b>%.2f</b> %s'%(_lblumi,unit)
1058  content['Run Info'] += '</font><br>'
1059 
1060 
1061  for d in detectors:
1062  if len(detectors_affectedLBs[d][run]) == 0:
1063  continue
1064  # Remove double counting (defects overlap)
1065  dll = list(set(detectors_affectedLBs[d][run]))
1066  detectors_affectedLBs['_TOTAL'][run]+= dll
1067  for lb in dll:
1068  detectors_lumiloss[d][run]+= lumiperlb[lb]
1069  for p in performances:
1070  if len(performances_affectedLBs[p][run]) == 0:
1071  continue
1072  # Remove double counting (defects overlap)
1073  pll = list(set(performances_affectedLBs[p][run]))
1074  performances_affectedLBs['_TOTAL'][run]+= pll
1075  for lb in pll:
1076  performances_lumiloss[p][run]+= lumiperlb[lb]
1077 
1078 
1080  detectors_affectedLBs['_TOTAL'][run]=list(set(detectors_affectedLBs['_TOTAL'][run]))
1081  performances_affectedLBs['_TOTAL'][run]=list(set(performances_affectedLBs['_TOTAL'][run]))
1082  total_affectedLBs = list(set(total_affectedLBs))
1083  totallossperrun = 0.
1084  # Store the values
1085  for lb in total_affectedLBs:
1086  totallossperrun += lumiperlb[lb]
1087  dicsum[DataKey('TotalLumi')][1] += totallossperrun
1088  # Store the values
1089  for lb in detectors_affectedLBs['_TOTAL'][run]:
1090  detectors_lumiloss['_TOTAL'][run] += lumiperlb[lb]
1091  # Store the values
1092  for lb in performances_affectedLBs['_TOTAL'][run]:
1093  performances_lumiloss['_TOTAL'][run] += lumiperlb[lb]
1094 
1095 
1096  content['Run Info'] += '<font style="font-size:10px;">'
1097  content['Run Info'] += 'DQ Lumi Loss: <b>%.2f</b> %s'%(totallossperrun,unit)
1098  content['Run Info'] += '</font><br>'
1099 
1100 
1101  summarytable+='<tr class="out2">'
1102  for item in columns:
1103  summarytable+='<td>%s</td>'%content[item]
1104  summarytable+='</tr>'
1105 
1106 
1107  summarytable += '</table></div><br>'
1108 
1109  if runsWithoutReadyForPhysics:
1110  warning += '<div style="margin-left: 13px; color: darkred; width: 90%%;">WARNING! The following runs have no lumi block with ATLAS Ready: %s</div><br>' % ", ".join(runsWithoutReadyForPhysics)
1111  if runsWithoutOfflineLumiInfo:
1112  warning += '<div style="margin-left: 13px; color: darkred; width: 90%%;">WARNING! The following runs have no offline lumi info: %s</div><br>' % ", ".join(runsWithoutOfflineLumiInfo)
1113 
1114 
1115 
1116 
1119 
1120  summaryplot = ''
1121  plots = []
1122  if totalNumberOfReadyLB > 0:
1123  plots.append(MakePlot_SummaryLumiLoss(detectors_lumiloss,detectors_color,dicsum,'detectors'))
1124  plots.append(MakePlot_SummaryLumiLoss(performances_lumiloss,performances_color,dicsum,'performances'))
1125  plots.append(MakePlot_PerRunLumiLoss(detectors_lumiloss,detectors_color,dicsum,'detectors'))
1126  plots.append(MakePlot_PerRunLumiLoss(performances_lumiloss,performances_color,dicsum,'performances'))
1127 
1128  imgsize=500
1129  thumbsize=300
1130  title = "Click to zoom"
1131 
1132 
1133  summaryplot += '<table align="center" width="90%">'
1134  summaryplot += '<th>'
1135 
1136  for p in plots:
1137 
1138  wincontent = "<img src=&quot;%s&quot; width=%s/>"%(p,imgsize)
1139 
1140  #openwincmd = "javascript:openLargeWindow('Print%i','"%(r)
1141  openwincmd = "javascript:openWindow('Print%i','"%(run)
1142  openwincmd += "<!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;>"
1143  openwincmd += "<html xmlns:&quot;my&quot;><head><title>DQ Summary Plot - Run %s</title></head>"%(run)
1144  openwincmd += "<body style=&quot;background-color:#ffffff&quot;>%s</body></html>"%wincontent
1145  openwincmd += "')"
1146 
1147  summaryplot+='<td><a title="%s" href="%s" ><img src="%s" height=%s/></a></td>'%(title,openwincmd,p,thumbsize)
1148 
1149 
1150  summaryplot += '</th></table>'
1151 
1152 
1156 
1157 
1160 
1161  totalLumiRecorded = dicsum[DataKey('TotalLumi')][0]
1162  totalLumiLoss = dicsum[DataKey('TotalLumi')][1]
1163  lumiLossFraction = (100. * totalLumiLoss / totalLumiRecorded) if totalLumiRecorded > 0 else 0
1164 
1165 
1166  print ('+++++++++++++++++++++++++ Summary +++++++++++++++++++')
1167  print (' Total Ready Recorded Luminosity: %.2f %s-1' % ( totalLumiRecorded, unit ))
1168  print (' Total Luminosity Loss (ATLAS Ready) : %.2f %s-1' % ( totalLumiLoss, unit ))
1169  print (' Total Global Not Ready (Stable Beams): %.2f %s-1'%(dicsum[DataKey('TotalNotReady')],unit))
1170  print (' Total Global Busy (Stable Beams): %.2f %s-1'%(dicsum[DataKey('TotalBusy')],unit))
1171  print ('+++++++++++++++++++++++++++++++++++++++++++++++++++++')
1172 
1173  global lumifolder
1174 
1175  if totalNumberOfReadyLB>0:
1176  summaryinfo = '<table align="center" style="font-size:80%;"><tr>'
1177  summaryinfo += '<td> Total Luminosity Loss: <b>%.2f %s</b> (%.2f%%)' % ( totalLumiLoss, unit, lumiLossFraction )
1178  summaryinfo += '<br>Excluded Systems: %s</td></tr>' % tobeignored
1179  if not cosmics:
1180  summaryinfo += '<tr><td style="font-size:70%%">using %s // %s</td></tr>'%(lumifolder.split(':')[2],livetrigger)
1181  summaryinfo += '</table>'
1182  else:
1183  summaryinfo = '<table align="center" style="font-size:80%;"><tr>'
1184  summaryinfo += '<td> No ready lumi block </td>'
1185  summaryinfo += '</tr></table>'
1186 
1187 
1190 
1191  pagecontent = summaryplot +'<br>'
1192  pagecontent += summaryinfo +'<br>'
1193  if doDQSummary:
1194  pagecontent += summarytable
1195  pagecontent += warning
1196  return pagecontent
1197 
1198 
1199 
1200 

The documentation for this class was generated from the following file:
python.html.AtlRunQueryDQSummary.MakePlot_SummaryLumiLoss
def MakePlot_SummaryLumiLoss(loss, colors, dicsum, name)
Definition: AtlRunQueryDQSummary.py:124
python.html.AtlRunQueryDQSummary.listify
def listify(lbl)
Definition: AtlRunQueryDQSummary.py:530
python.utils.AtlRunQueryTimer.timer
def timer(name, disabled=False)
Definition: AtlRunQueryTimer.py:86
python.html.AtlRunQueryDQSummary.ComputeRunLumi
def ComputeRunLumi(dic, run, lumiperlb)
Definition: AtlRunQueryDQSummary.py:55
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
python.html.AtlRunQueryDQSummary.MapToSystem
def MapToSystem(defect)
Definition: AtlRunQueryDQSummary.py:33
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:224
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.html.AtlRunQueryDQSummary.MakePlot_PerRunLumiLoss
def MakePlot_PerRunLumiLoss(loss, colors, dicsum, name)
Definition: AtlRunQueryDQSummary.py:229
python.html.AtlRunQueryDQSummary.GetLBLiveFraction
def GetLBLiveFraction(dic, run)
Definition: AtlRunQueryDQSummary.py:97
python.html.AtlRunQueryDQSummary.GetLBReady
def GetLBReady(dic, run)
Definition: AtlRunQueryDQSummary.py:114
python.html.AtlRunQueryDQSummary.GetLBLumi
def GetLBLumi(dic, run)
Definition: AtlRunQueryDQSummary.py:66
str
Definition: BTagTrackIpAccessor.cxx:11
python.html.AtlRunQueryDQSummary.MakePlot_DefectsPerSystem
def MakePlot_DefectsPerSystem(sys, intolerable, tolerable, ignored, dic, run)
Definition: AtlRunQueryDQSummary.py:368
readCCLHist.float
float
Definition: readCCLHist.py:83
Trk::split
@ split
Definition: LayerMaterialProperties.h:38