#!/usr/bin/env python """ L1Cal Pulser Help menu # Introduction Welcome into L1CalPulser world!!! This program is designed for L1Cal trigger diagnotics between stores and during shutdowns. It is a powerful tool to diagnose different classes of trigger problems. It uses a french pulser for its operation instead of beam, so in order to run it, one should start the pulser as well. # Cold start from d0ol83.fnal.gov: cd /home/renkel/last_examine/\N source PulserTool.sh\N # What shifter and what expert are to do? "Shifter:"\N 1. Be sure, that there is no beam in the machine!\N 2. Be absolutely sure, that there is no beam in the mashine!\N Ask the shift captain, if you don't know!\N 3. It is supposed to be done after the pedestal run is taken.\N Be sure, that the pedestal run has been already taken!\N 4. See if L1CalPulser is on. If you are reading this help, it is on.\N 5. If not, then see cold start from d0ol83 section.\N 6. Go to File/Read the run and left click the mouse\N 7. Press 'Ok' just if there is no beam!\N 8. You will see some info in the diagnostics screen. Follow it!\N 9. Save the run by selecting File/Save and providing system with\N the code number, you have taken from the taker.\N 10. Go to File/Analyze and wait while you see line 'Done' in the diagnostics screen.\N 11. Go to phys/emdead. Check red buttons, if some.\N 12. If something red appears, left-click on it and put the info\N into the logbook.\N 13. Repeat same for haddead.\N\N "Expert:"\N You see a diagnostics screen and a menu bar in front of you.\N The diagnostics screen provides you with the necessary information during your diagnostics.\N To make a pulser run for diagnostics, see the shifter instructions (previous paragraph). After your run has been taken or after any change of parameters/settings (see further), you should select File/Analyze to diagnose the trigger. The actual diagnostics screens can be found in phys,bls and preamp items of the main menu. Follow attentively and report any new problems, which you see. # Menu bar There are 5 main items in the main menu, namely: "File","Phys","Bls","Preamp","Pulser" and "Help". We consider each one separately. # File: There are five items there: "Read the Run", "Open", "Analyze" and "Exit".\N The first option "Read the Run" is used, when one wants to make a pulser run between stores with pulser. For that, one should be sure, that there is no beam, press this button (system will start reading), start "taker", download trigger cal-runI-pat-withl1cal_low-1.0, wait for events to come, looking and rampwatcher. When 'Done' is shown, reading is finished.\N A special run is prepared for L1CalPulser. The pulser loops over 32 not overlapping RunI patterns\N and for each puttern it generates 500 events out of which approximately 100 is read by l1CalPulser.\N Then, out of 500 events the mean and the rms are calculated and archivised into pick_of_xx file, where xx is the number of the pattern. This file contatins mean and rms energy for each trigger tower as well as information on which towers are to be fired. Then L1CalPulser reads this info and analyzes it.\N Items "Open" and "Save" are for opening the run, which was already taken and saving the present run into the L1CalPulser data base. Remember, the run number can be read from the taker.\N Item "Analyze" is for analyzing the output file by means of L1cal Pulser \N # Phys: Here, there are 10 windows presented: "emhot","emlow","emnoise","emdead","emcalib","hadhot", "hadlow","hadnoise","haddead" and "hadcalib". For each class of problems("hot","low","noise","dead" and "calib") there are a pair of windows, which give information on it (electromagnetic and hot). The description of such classes of problems can be found below:\N \N 1. hot: the trigger tower is identified as hot if it "was not\N supposed" to be fired, but showed "energy above some threshold"\N (see Settings).\N 2. low: the trigger tower is identified as low if it "was not supposed" to be fired and showed "energy, below some threshold" (see Settings).\N 3. noisy: the trigger tower is identified as noisy if it "was not supposed" to be fired and its "rms exceeds some threshold" (see section Settings).\N 4. dead: the trigger tower is identified as dead if it "was supposed" to be fired, but showed "energy higher, then some threshold" (see Settings).\N 5. uncalibrated: the trigger tower is identified as uncalibrated if it "was supposed" to be fired , showed to "not to be dead" but its "energy exceeds or lower then the EXPECTATION by some percentage of the expectation" (see Settings). \N \N "Expectation": for a given pattern for a given tower,\N is defined as a median of all energies in all trigger towers with "the same phi, same or \N opposite teta and the same depth word" for the same pattern.\N \N Each window represents a map with squares button standing for trigger towers.\N 1. If there is no problem for a specific tower, there is no button for it. \N 2. If a trigger tower failed at least for one pattern, but less, then for 6,\N it is drawn as a blue button. \N 3. If a trigger tower failed for more, then 5 patterns, but not for all, it is drawn as a pink button. \N 4. If a trigger tower failed for all the patterns, then it is drawn as a red button. \N "An example:" \N The trigger tower with teta=11 and tphi=23 showed 5GeV for patterns 4, 4GeV for pattern 7\N It showed 2.5GeV for pattern 8 and it showed 2.7GeV for pattern 11. Moreover, these 4 \N patterns are only patterns for which it was not supposed to be fired.\N If the threshold for the hot class of problems and teta=11 was set to 3 GeV, then the first \N two pattern are supposed to fail and second two are supposed to be Ok.\N Since, there were just two problematic patterns, the blue button will appear at this location.\N \N "Another example:"\N The trigger tower with teta=1 and tphi=12 showed 23.1GeV for pattern 13 \N and it showed 23.6GeV for pattern 25.\N It showed 15GeV for patterns 5, 11.5GeV for pattern 10,\N 8.3GeV for the pattern 3, 13.6GeV for the pattern 1, 7.5GeV for the pattern 2 and \N 40GeV for the pattern 31\N Moreover, these 8 \N patterns are only patterns for which it was supposed to be fired.\N The expectatin fo such this tower is 23.0GeV.\N If the threshold for the uncalibrated class of problems was set to 30%\N then the first two pattern are supposed to be Ok and second 6 are supposed to fail.\N Since, there were 6 problematic patterns, the pink button will appear at this location.\N \N Left click on such trigger towers will create a window for all the information of this\N problematic towers. One will see two columns: Ok patterns column and fail pattern column. \N In each column the detailed information on the "energy" and "rms" for each pattern is\N presented.\N Right click on "any" tower on the screen will create a window with detailed information on\N the patterns, which suppose to fire the trigger tower (including the expectation).\N Moreover, on the top of these windows, the different coordinates of such a tower are given. On the phys menu, the dispayed windows have two coordinates:\N 1. teta(-20:-20)\N 2. phi(1:32)\N # Bls: Same, but in BLS coordinates: (three coordinates are given):\N 1. ADC crate (0:11)\N 2. ADC (0:11)\N 3. BLS (0:7)\N # Preamp: Same, but in preamp coordinates: (two coordinates are given):\N 1. Crate (0:11)\N 2. Board (0:95)\N # Pulser It has two submenus:"Real Patterns" and "Pattern Templates"\N "Real Patterns" menu:\N Allows you to identify which patterns you want to analyze. Default is "all".\N "Pattern Templates" menu:\N Allows you to see the patterns on the windows you select. What does it mean?\N All trigger towers which are supposed to be fired by any of the chosen set\N will be drawn as green buttons. Default is "none".\N "An example:" If one selects "all" pattern tepmlates and "none" real patterns,\N all screens will turn green. Just try it!\N \N This is the powerful tool, which allows one to examine patterns individually.\N It can help you to identify problematic "cells" if the tower was problematic just\N for a set of patterns, all of them fired the same group of cells.\N It can also help you to identify "cable switch", when the trigger tower is dead\N and the neighbouring one is hot.\N It can do much more! \N # Settings This menu has two submenus: # Help: There are two submenus here:"About" and "L1CalPulser"\N "About" menu gives one information on version.\N "L1CalPulser" provides you with the help on the system.\N """ # Standard Imports from Tkinter import * import os import random import string import sys import types import Tkinter import math import thread from time import gmtime,strftime import smtplib import MimeWriter,base64,StringIO import shutil import PyCal from helpD0Dialog import * import Pmw class PulserGui: def __init__(self,master): global v,base,basestring,canv,canvfi,canveta,labeleta,labelfi,labeltitle,sigma,runnumber,output,text,diagnostics,save_elim,elim_elim; global email,patternvar_real,patternvar_templates,directory,labeladc,elim_crosstalk,save_crosstalk,scrollbar_diagnostics,send_email,baseswitchvar # update_phys,get_adc # settings self.init() # other initializations v=0; bls_table=[37,27,7,18,58,48,38,28,8,17,57,47]; directory=[]; directory.append('') runnumber=""; buttonarray=[] base=[] basestring=[] canv=[] canvfi=[] canveta=[] baseswitchvar=[] for i in range(0,30): baseswitchvar.append(IntVar()) baseswitchvar[len(baseswitchvar)-1].set(0) patternvar_real_all=[[]] patternvar_real_none=[[]] patternvar_templates_all=[[]] patternvar_templates_none=[[]] patternvar_real=[] patternvar_templates=[] for i in range(0,32): patternvar_real.append([]) patternvar_templates.append([]) labeleta=[] labeladc=[] labelfi=[] labeltitle=[] # initialising base windows self.create_diagnostics() self.create_base(base,basestring,"emhot",0) # print baseswitchvar[0].get() self.create_base(base,basestring,"emlow",1) self.create_base(base,basestring,"emnoise",2) self.create_base(base,basestring,"emdead",3) self.create_base(base,basestring,"emcalib",4) self.create_base(base,basestring,"hadhot",5) self.create_base(base,basestring,"hadlow",6) self.create_base(base,basestring,"hadnoise",7) self.create_base(base,basestring,"haddead",8) self.create_base(base,basestring,"hadcalib",9) self.create_base(base,basestring,"bls_emhot",10) self.create_base(base,basestring,"bls_emlow",11) self.create_base(base,basestring,"bls_emnoise",12) self.create_base(base,basestring,"bls_emdead",13) self.create_base(base,basestring,"bls_emcalib",14) self.create_base(base,basestring,"bls_hadhot",15) self.create_base(base,basestring,"bls_hadlow",16) self.create_base(base,basestring,"bls_hadnoise",17) self.create_base(base,basestring,"bls_haddead",18) self.create_base(base,basestring,"bls_hadcalib",19) self.create_base(base,basestring,"preamp_emhot",20) self.create_base(base,basestring,"preamp_emlow",21) self.create_base(base,basestring,"preamp_emnoise",22) self.create_base(base,basestring,"preamp_emdead",23) self.create_base(base,basestring,"preamp_emcalib",24) self.create_base(base,basestring,"preamp_hadhot",25) self.create_base(base,basestring,"preamp_hadlow",26) self.create_base(base,basestring,"preamp_hadnoise",27) self.create_base(base,basestring,"preamp_haddead",28) self.create_base(base,basestring,"preamp_hadcalib",29) # initializing canvas for i in range(0,int(len(base)/3)): self.create_canvas(base[i],labeleta,labelfi,labeltitle) # initializing bls canvas for i in range(int(len(base)/3),int(2*len(base)/3)): self.create_canvas_bls(base[i],labeleta,labelfi,labeltitle) # initializing preamp canvas for i in range(2*int(len(base)/3),len(base)): self.create_canvas_preamp(base[i],labeleta,labelfi,labeltitle) # and withdrawing windows for i in range(0,len(base)): base[i].withdraw() # menu menubar=Menu(master) # file submenu menufile=Menu(master) menubar.add_cascade(label="File",menu=menufile) menufile.add_command(label="Read the run",command=self.read) menufile.add_command(label="Open",command=self.openrun) menufile.add_command(label="Save",command=self.saverun) menufile.add_command(label="Analyze",command=self.run) menufile.add_command(label="Exit",command=master.quit) # choice submenu menuchoice_phys=Menu(master) menubar.add_cascade(label="Phys",menu=menuchoice_phys) for i in range(0,int(len(base)/3)): self.choice_check(menuchoice_phys,base[i],basestring[i],i) menuchoice_bls=Menu(master) menubar.add_cascade(label="Bls",menu=menuchoice_bls) for i in range(int(len(base)/3),2*int(len(base)/3)): self.choice_check(menuchoice_bls,base[i],basestring[i],i) menuchoice_preamp=Menu(master) menubar.add_cascade(label="Preamp",menu=menuchoice_preamp) for i in range(2*int(len(base)/3),len(base)): self.choice_check(menuchoice_preamp,base[i],basestring[i],i) # Pulser submenu menupulser=Menu(master) menupattern_templates=Menu(master) menupattern_real=Menu(master) menubar.add_cascade(label="Pulser",menu=menupulser) menupulser.add_cascade(label="Pattern Templates",menu=menupattern_templates) menupulser.add_cascade(label="Real Patterns",menu=menupattern_real) for i in range(1,33): self.pulser_check(menupattern_real,i,patternvar_real) self.pulser_all(menupattern_real,patternvar_real,patternvar_real_all,patternvar_real_none) self.pulser_none(menupattern_real,patternvar_real,patternvar_real_all,patternvar_real_none) for i in range(1,33): self.pulser_check(menupattern_templates,i,patternvar_templates) self.pulser_all(menupattern_templates,patternvar_templates,patternvar_templates_all,patternvar_templates_none) self.pulser_none(menupattern_templates,patternvar_templates,patternvar_templates_all,patternvar_templates_none) patternvar_real_all[0].set(1) for i in range(0,32): patternvar_real[i].set(1) patternvar_templates_all[0].set(0) for i in range(0,32): patternvar_templates[i].set(0) # options submenu menuoptions=Menu(master) menubar.add_cascade(label="Options",menu=menuoptions) menuoptions.add_command(label="Thresholds",command=self.thresholds) menuoptions.add_command(label="Other settings",command=self.other) menuoptions.add_command(label="Save settings",command=self.save) # help submenu menuhelp=Menu(master) menubar.add_cascade(label="Help",menu=menuhelp) def helpak(menuhelp=menuhelp): HelpDialog(menuhelp,__doc__) menuhelp.add_command(label="L1Cal Pulser",command=helpak) menuhelp.add_command(label="About",command=self.about) # configuring master.config(menu=menubar) def computing(self,base,basestring,canv,canvfi,canveta,labeleta,labelfi,labeltitle,sigma,output,text,runnumber,email,patternvar_real,pattervar_templates,directory,elim_crosstalk,save_crosstalk,scrollbar_diagnostics,send_email): # info initialization # print patternvar_real refhex=['0000','0001','0010','0011','0100','0101','0110','0111','1000','1001','1010','1011','1100','1101','1110','1111'] ref=['00','01','02','03','10','11','12','13','20','21','22','23','30','31','32','33'] patterns=0; # diagnostics initialization pattern_crosstalk_emhot=[] pattern_crosstalk_emlow=[] pattern_crosstalk_hadhot=[] pattern_crosstalk_hadlow=[] emdiaghot=[]; emdiagcalib=[]; haddiagcalib=[]; emdiagpat=[]; emdiaghotnot=[] emdiaglow=[]; emdiaglownot=[]; emdiagOk=[]; emdiagcalibdic=[]; haddiagcalibdic=[]; emdiaghotdic=[]; emdiaglowdic=[]; emdiaghotnotdic=[]; emdiaglownotdic=[] emdiagOkdic=[]; haddiaghot=[]; haddiagpat=[]; haddiaghotnot=[]; haddiagOk=[]; haddiaglow=[]; haddiaglownot=[]; haddiaghotdic=[]; haddiaghotnotdic=[]; haddiaglowdic=[]; haddiaglownotdic=[]; haddiagOkdic=[]; emdiagshutOk=[]; emdiagshutdead=[]; emdiagshutdeadnot=[]; emdiagcalibnot=[]; haddiagcalibnot=[]; emdiagcalibnotdic=[]; haddiagcalibnotdic=[]; emdiagshutdeaddic=[]; emdiagshutdeadnotdic=[]; haddiagshutOk=[]; haddiagshutdead=[]; haddiagshutdeadnot=[]; haddiagshutdeaddic=[]; haddiagshutdeadnotdic=[]; emnoise=[]; emnoisedic=[]; emnoisenot=[]; emnoisenotdic=[]; hadnoise=[]; hadnoisedic=[]; hadnoisenot=[]; hadnoisenotdic=[]; RUNIIpatterns=[]; tempnumberofevents=[]; tempstorage=[]; emtruthpatterns=[]; hadtruthpatterns=[]; for counter in range(0,1280): pattern_crosstalk_emhot.append([]) pattern_crosstalk_emlow.append([]) pattern_crosstalk_hadhot.append([]) pattern_crosstalk_hadlow.append([]) emtruthpatterns.append(''); hadtruthpatterns.append(''); emdiagpat.append(0); emdiaghotdic.append([]); emdiagcalibdic.append([]); haddiagcalibdic.append([]); emdiaglowdic.append([]); emdiagOkdic.append([]); emdiaghot.append(0); emdiaglow.append(0); emdiagOk.append(0); emdiagcalib.append(0); haddiagcalib.append(0); emdiagcalibnotdic.append([]); haddiagcalibnotdic.append([]); emdiaghotnotdic.append([]); emdiaglownotdic.append([]); emdiaghotnot.append(0); emdiagcalibnot.append(0); haddiagcalibnot.append(0); emdiaglownot.append(0); haddiagpat.append(0) haddiaghotdic.append([]); haddiaglowdic.append([]); haddiagOkdic.append([]); haddiaghot.append(0); haddiaglow.append(0); haddiagOk.append(0); haddiaghotnotdic.append([]); haddiaglownotdic.append([]); haddiaghotnot.append(0); haddiaglownot.append(0); emdiagshutOk.append(0); emdiagshutdead.append(0); emdiagshutdeaddic.append([]); emdiagshutdeadnot.append(0); emdiagshutdeadnotdic.append([]); haddiagshutOk.append(0); haddiagshutdead.append(0); haddiagshutdeaddic.append([]); haddiagshutdeadnot.append(0); haddiagshutdeadnotdic.append([]); emnoise.append(0); emnoisedic.append([]); emnoisenot.append(0); emnoisenotdic.append([]); hadnoise.append(0); hadnoisedic.append([]); hadnoisenot.append(0); hadnoisenotdic.append([]); date=strftime("_%b%d_%Y_at_%H_%M") fileout=directory[0]+'L1CalDiag'+date+'.out' filepic=directory[0]+'L1CalDiag'+date+'.pic' fileinfo=directory[0]+'L1CalDiag'+date+'.info' finfo=open(fileinfo,'w'); g=open(fileout,'w'); h=open(filepic,'w'); if (save_crosstalk.get() and elim_crosstalk.get()): text.tag_config("curred",foreground="red") text.insert(END,'You are not allowed to dump the crosstalk\n and eliminate it at once!',"curred") text.yview(MOVETO,1.0) output.update() return if (save_crosstalk.get() and not(elim_crosstalk.get())): crosstalk=open('Crosstalk.dat','w') if (not(save_crosstalk.get()) and elim_crosstalk.get()): crosstalk=open('Crosstalk.dat','r') crosstalk_ref=crosstalk.readlines() text.insert(END,'Reading the Crosstalk.dat file\n') text.yview(MOVETO,1.0) for i in range(0,len(crosstalk_ref)): temp=crosstalk_ref[i].split() eta=temp[3] # print temp[3] if int(eta)<0: ieta=20+int(eta) else: ieta=19+int(eta) ifi=int(temp[5])-1 counter=ieta*32+ifi # print temp,counter,ieta,ifi if (temp[-1]=='emhot'): pattern_crosstalk_emhot[counter].append(temp[1]) # if (int(eta)==-19) and (ifi==4): # print 'pat=',temp,temp[1] if (temp[-1]=='emlow'): pattern_crosstalk_emlow[counter].append(temp[1]) if (temp[-1]=='hadhot'): pattern_crosstalk_hadhot[counter].append(temp[1]) if (temp[-1]=='hadlow'): pattern_crosstalk_hadlow[counter].append(temp[1]) # print pattern_crosstalk_emhot[0] finfo.write("Run number "+directory[0]+'\n'); g.write("Run number "+directory[0]+'\n'); h.write("Run number "+directory[0]+'\n'); # Creating a window for the diagnostics output # reading file for pattern in range(0,200): if pattern<10: patternstr='0'+str(pattern); else: patternstr=str(pattern); if (patterns==31): value=directory[0]+'pick_off_last.txt' if (os.path.isfile(value)==0): value=directory[0]+'pick_off_00.txt' elif (patterns<31): value=directory[0]+'pick_off_'+patternstr+'.txt'; print 'file',value else: break # value="run201724/pick_off_last" # print patterns if not(os.path.isfile(value)): text.tag_config("curred",foreground="red") text.insert(END,'Problems with run!\n Not all information is there!!!\n Please rerun!\n',"curred") text.yview(MOVETO,1.0) break f=open(value,'r'); g.write('File opened:'+value+'\n\n') # h.write('File opened:'+value+'.pic'+'\n\n') a=f.readlines(); check=[]; check.extend(a[0].split()); if (check[4]!='EVENT'): currentnumberofevents=float(check[9]); if ((currentnumberofevents<10) or (currentnumberofevents>500)): continue if(currentnumberofevents<95): temp=a[92].split() # print temp if (RUNIIpatterns.count(temp)==0): RUNIIpatterns.append(a[92].split()); tempnumberofevents.append(currentnumberofevents); tempstorage.extend(a[5:45]); tempstorage.extend(a[49:89]); else: indexpattern=RUNIIpatterns.index(temp)/3; # print indexpattern; for i in range(indexpattern*80,indexpattern*80+40): # print tempstorage[i].split(); emlinetemp=tempstorage[i].split(); emlinecurrent=a[i-indexpattern*80+5].split(); emlinewritetemp=""; # print i for j in range(0,33): if((emlinetemp[j].count('+'))!=0): # print emlinetemp[j].split('+')[0]; emtemp=float(emlinetemp[j].split('+')[0]); emtemprms=float(emlinetemp[j].split('+')[1]); emcurrent=float(emlinecurrent[j].split('+')[0]); emcurrentrms=float(emlinecurrent[j].split('+')[1]); emtemp=(emcurrent*currentnumberofevents+emtemp*tempnumberofevents[indexpattern])/(currentnumberofevents+tempnumberofevents[indexpattern]); emtemprms=(emcurrentrms*currentnumberofevents+emtemprms*tempnumberofevents[indexpattern])/(currentnumberofevents+tempnumberofevents[indexpattern]); emcurrent=emtemp; emcurrentrms=emtemprms; emlinewritetemp+=str(emtemp)+'+'+str(emtemprms)+" "; else: emlinewritetemp+=emlinetemp[j]+" "; emlinewritetemp+='\n '; a[i+5]=emlinewritetemp; # print a for i in range(indexpattern*80+40,indexpattern*80+80): # print i hadlinetemp=tempstorage[i].split(); hadlinecurrent=a[i+9-indexpattern*80].split(); hadlinewritetemp=""; # print hadlinecurrent; for j in range(0,33): if((hadlinetemp[j].count('+'))!=0): hadtemp=float(hadlinetemp[j].split('+')[0]); hadtemprms=float(hadlinetemp[j].split('+')[1]); hadcurrent=float(hadlinecurrent[j].split('+')[0]); hadcurrentrms=float(hadlinecurrent[j].split('+')[1]); hadtemp=(hadcurrent*currentnumberofevents+hadtemp*tempnumberofevents[indexpattern])/(currentnumberofevents+tempnumberofevents[indexpattern]); hadtemprms=(hadcurrentrms*currentnumberofevents+hadtemprms*tempnumberofevents[indexpattern])/(currentnumberofevents+tempnumberofevents[indexpattern]); hadcurrent=hadtemp; hadcurrentrms=hadtemprms; hadlinewritetemp+=str(hadtemp)+'+'+str(hadtemprms)+" "; else: hadlinewritetemp+=hadlinetemp[j]+" "; hadlinewritetemp+='\n '; a[i+5]=hadlinewritetemp; tempnumberofevents[indexpattern]+=currentnumberofevents; currentnumberofevents=tempnumberofevents[indexpattern]; # print a; else: # print 'analyzing pattern'+str(pattern)+' TOTAL' continue patterns+=1; if pattern<10: patternstring='0'+str(pattern) else: patternstring=str(pattern) if patterns<10: patternsstring='0'+str(patterns) else: patternsstring=str(patterns) # print 'analyzing pattern'+str(pattern)+' '+str(currentnumberofevents) if(1==1): text.insert(END,'Analyzing File '+patternstring+' Pattern '+patternsstring+' Number of events='+str(currentnumberofevents)[0:-2]+'\n') text.yview(MOVETO,1.0) output.update() # EM section b=[]; em=[]; emrms=[]; for i in range(5,45): b.extend(a[i].split()); for i in range(0,1320): if b[i].count('+')>0: em.append(float(b[i].split('+')[0])+2.0) emrms.append(float(b[i].split('+')[1])) # HAD section b=[]; had=[]; hadrms=[]; for i in range(49,89): b.extend(a[i].split()); for i in range(0,1320): if b[i].count('+')>0: had.append(float(b[i].split('+')[0])+2.0) hadrms.append(float(b[i].split('+')[1])) # print em[0],emrms[0],had[0],hadrms[0],em[1279],emrms[1279],had[1279],hadrms[1279] # truth section + ones section emtruth=[]; hadtruth=[]; for i in range(0,1280): emtruth.append('No') hadtruth.append('No') b=[]; truth=[]; counter=-1; for c in a: counter+=1; d=c.split(); if (c.find('ERROR')>-1): break; if len(d)>0: e=d[0][1:]; if((d[1]==':') and (d[0].isdigit() or e.isdigit() )): eta=int(d[0]) ieta=eta+20 if ieta>19: ieta-=1 for j in range(2,len(d)): fi=int(d[j]) readwordhex=a[counter+2].split()[j] readwordhexcel=a[counter+1].split()[j] # print 'depth',readwordhexcel if len(readwordhexcel)<3: info=1 elif readwordhexcel[-2:]=='00': info=2 else: if readwordhexcel[-2:-1]!=readwordhexcel[-1:]: info=3 if (int(readwordhexcel[-2:-1])>int(readwordhexcel[-2:-1])): odd1=2 else: odd1=1 elif (len(readwordhexcel)>3): info=3 if (readwordhexcel[-4:-3]!=readwordhexcel[-3:-2]): if (int(readwordhexcel[-4:-3])>int(readwordhexcel[-3:-2])): odd1=4 else: odd1=3 else: info=3 odd1=3 readword='' for letter in readwordhex: if letter in ['0','1','2','3','4','5','6','7','8','9']: hexid=int(letter); else: if letter=='a': hexid=10; if letter=='b': hexid=11; if letter=='c': hexid=12; if letter=='d': hexid=13; if letter=='e': hexid=14; if letter=='f': hexid=15; # print letter; readword+=ref[hexid]; odd2=0 for i in range(0,len(readword)): counterodd=0; for j in range(i+1,len(readword)): if (int(readword[i:i+1])==int(readword[i:i+1])): counterodd+=1; if ((counterodd==0) and (odd2==0)): odd2=i break # if (odd2!=0) and (readwordhex=='1200' or readwordhex=='2100'): # readword[-odd2:1-odd2]=str(int(readword[-odd2:1-odd2])-1) if abs(eta)<5: emreadword=readword[-7:] hadreadword=readword[-10:-7] elif abs(eta)==5 and (info==1): emreadword=readword[-7:] hadreadword=readword[-9:-7] elif abs(eta)==5 and (info==2): emreadword=readword[-7:] hadreadword=readword[-8:-7] elif abs(eta)==5 and (info==3): emreadword=readword[-7:] hadreadword=readword[-9:-7] elif abs(eta)==6 and (info==1): emreadword=readword[-7:] hadreadword=readword[-8:-7] elif abs(eta)==6 and (info==2): emreadword=readword[-4:] hadreadword=readword[-6:-4] elif abs(eta)==6 and (info==3): if odd1 in ('1','2'): emreadword=readword[-4:] hadreadword=readword[-6:-4] if (emreadword=='00') and (odd2<8): emreadword='01' if (hadreadword=='00') and (odd2==8): hadreadword='01' else: emreadword=readword[-7:] hadreadword=readword[-8:-7] if (emreadword=='00') and (odd2<5): emreadword='01' if (hadreadword=='00') and ((odd2==5) or (odd2==6)): hadreadword='01' # if abs(eta)==6 and (readwordhex=='1000' or readwordhex=='100'): # emreadword='00' # hadreadword='00' elif abs(eta)==7 and (info==1): emreadword='' hadreadword=readword[-10:-6] elif abs(eta)==7 and (info==2): emreadword=readword[-6:-3] hadreadword=readword[-10:-6] elif abs(eta)==7 and (info==3): emreadword=readword[-6:] hadreadword=readword[-10:-6] elif ((abs(eta)>7) and (abs(eta)<14)): emreadword=readword[-7:] hadreadword=readword[-11:-7] elif ((abs(eta)>13) and (abs(eta)<17)): emreadword=readword[-4:] hadreadword=readword[-11:-7] elif (abs(eta)==17): emreadword=readword[-3:]+readword[-7:-6] hadreadword=readword[-11:-7] elif (abs(eta)==18) and (info==1): emreadword=readword[-3:]+readword[-7:-6] hadreadword=readword[-11:-7] elif (abs(eta)==18) and (info==2): emreadword=readword[-3:]+readword[-7:-6] hadreadword=readword[-12:-8] elif (abs(eta)==18) and (info==3): emreadword=readword[-3:]+readword[-7:-6] hadreadword=readword[-12:-7] elif (abs(eta)>18) and (info==1): emreadword=readword[-8:] hadreadword=readword[-12:-6] elif (abs(eta)>18) and (info==2): emreadword=readword[-8:] hadreadword=readword[-10:-8] if emreadword=='': emreadword='0' if hadreadword=='': hadreadword='0' # print readword,emreadword,hadreadword if int(emreadword)!=0: emtruth[ieta*32+fi-1]='Ok' emtruthpatterns[ieta*32+fi-1]+=str(patterns)+' '+str(readwordhexcel)+' '+str(int(emreadword))+' '+str(em[ieta*32+fi-1])+' ' if int(hadreadword)!=0: hadtruth[ieta*32+fi-1]='Ok' hadtruthpatterns[ieta*32+fi-1]+=str(patterns)+' '+str(readwordhexcel)+' '+str(int(hadreadword))+' '+str(had[ieta*32+fi-1])+' ' # comparison and making conclusions # finfo.write('EM section \n'); g.write('EM section \n'); for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; for ifi in range(0,32): error=0; fi=ifi+1 counter=ieta*32+ifi if ((emtruth[counter]=='Ok') and (patternvar_templates[patterns-1].get()==1)): emdiagpat[counter]=1 if ((emtruth[counter]=='Ok') and (patternvar_real[patterns-1].get()==1)): temptemp=0 refer=emtruthpatterns[counter].split()[-4:-1] temp=[] for ificomp in range(0,32): countercomp=ieta*32+ificomp comp=emtruthpatterns[countercomp].split()[-4:-1] comp1=emtruthpatterns[countercomp].split()[-5:-2] if ((comp==refer) or (comp1==refer)): temp.append(em[countercomp]) countercompneg=(39-ieta)*32+ificomp temp.append(em[countercompneg]) for i in range(0,len(temp)): for j in range(i+1,len(temp)): if temp[i]>temp[j]: temptemp=temp[i] temp[i]=temp[j] temp[j]=temptemp temptemp=(temp[int(len(temp)/2)-1]+temp[int(len(temp)/2)])/2 emtruthpatterns[counter]+=str(temptemp)+' ' if((em[counter]<2+3*sigma[120+ieta]) and (emtruth[counter]=='Ok') and (patternvar_real[patterns-1].get()==1)): emdiagshutdead[counter]+=1; emdiagshutdeaddic[counter].append(str(patterns)+" et="+str(em[counter])+" rms="+str(emrms[counter])) elif (((em[counter]/temptemp)<1-sigma[160+ieta] or (em[counter]/temptemp)>1+sigma[160+ieta]) and (emtruth[counter]=='Ok') and (patternvar_real[patterns-1].get()==1)): g.write("Non Calib TT "+' Pattern='+str(pattern)+' eta='+str(eta)+' fi='+str(fi)+" Etreal="+str(em[counter])+"Etref="+str(temptemp)+'\n') emdiagcalib[counter]+=1; emdiagcalibdic[counter].append(str(patterns)+" Etreal="+str(em[counter])+" rms="+str(emrms[counter])+" Etref="+str(temptemp)) if (((em[counter]/temptemp)>1-sigma[160+ieta] and (em[counter]/temptemp)<1+sigma[160+ieta]) and (emtruth[counter]=='Ok') and (patternvar_real[patterns-1].get()==1)): g.write("Non Calib TT "+' Pattern='+str(pattern)+' eta='+str(eta)+' fi='+str(fi)+" Etreal="+str(em[counter])+"Etref="+str(temptemp)+'\n') emdiagcalibnot[counter]+=1; emdiagcalibnotdic[counter].append(str(patterns)+" Etreal="+str(em[counter])+" rms="+str(emrms[counter])+" Etref="+str(temptemp)) if ((em[counter]>2+3*sigma[ieta]) and (emtruth[counter]=='No') and (patternvar_real[patterns-1].get()==1)): if (elim_crosstalk.get()): if (str(patterns) in pattern_crosstalk_emhot[counter]): pass else: g.write("Hot TT "+' Pattern='+str(pattern)+' eta='+str(eta)+' fi='+str(fi)+" Et="+str(em[counter])+'\n') emdiaghot[counter]+=1; emdiaghotdic[counter].append(str(patterns)+" Et="+str(em[counter])+" rms="+str(emrms[counter])) else: g.write("Hot TT "+' Pattern='+str(pattern)+' eta='+str(eta)+' fi='+str(fi)+" Et="+str(em[counter])+'\n') emdiaghot[counter]+=1; emdiaghotdic[counter].append(str(patterns)+" Et="+str(em[counter])+" rms="+str(emrms[counter])) if (save_crosstalk.get()): crosstalk.write("Pattern " + str(patterns) + " eta= " + str(eta) + " fi= " + str(fi) + " emhot\n") error=1; if ((em[counter]<=2+3*sigma[ieta]) and (emtruth[counter]=='No') and (patternvar_real[patterns-1].get()==1)): g.write("Hot TT "+' Pattern='+str(patterns)+' eta='+str(eta)+' fi='+str(fi)+" Et="+str(em[counter])+'\n') emdiaghotnot[counter]+=1; emdiaghotnotdic[counter].append(str(patterns)+" et="+str(em[counter])+" rms="+str(emrms[counter])) error=1; if ((em[counter]<2-3*sigma[40+ieta]) and (emtruth[counter]=='No') and (patternvar_real[patterns-1].get()==1)): if (elim_crosstalk.get()): if (str(patterns) in pattern_crosstalk_emlow[counter]): pass else: g.write( "Dead TT "+' eta='+str(eta)+' fi='+str(fi)+" Et="+str(em[counter])+'\n') emdiaglow[counter]+=1; emdiaglowdic[counter].append(str(patterns)+" et="+str(em[counter])+" rms="+str(emrms[counter])) else: g.write( "Dead TT "+' eta='+str(eta)+' fi='+str(fi)+" Et="+str(em[counter])+'\n') emdiaglow[counter]+=1; emdiaglowdic[counter].append(str(patterns)+" et="+str(em[counter])+" rms="+str(emrms[counter])) if (save_crosstalk.get()): crosstalk.write("Pattern " + str(patterns) + " eta= " + str(eta) + " fi= " + str(fi) + " emlow\n") error=1; if ((em[counter]>=2-3*sigma[40+ieta]) and (emtruth[counter]=='No') and (patternvar_real[patterns-1].get()==1)): g.write( "Dead TT "+' eta='+str(eta)+' fi='+str(fi)+" Et="+str(em[counter])+'\n') emdiaglownot[counter]+=1; emdiaglownotdic[counter].append(str(patterns)+" et="+str(em[counter])+" rms="+str(emrms[counter])) error=1; if ((error==0) and (emtruth[counter]=='No')): emdiagOk[counter]+=1; if ((emrms[counter]>3*sigma[80+ieta]) and (emtruth[counter]=='No') and (patternvar_real[patterns-1].get()==1)): emnoise[counter]+=1; emnoisedic[counter].append(str(patterns)+" et="+str(em[counter])+" rms="+str(emrms[counter])) error=1; if ((emrms[counter]<=3*sigma[80+ieta]) and (emtruth[counter]=='No') and (patternvar_real[patterns-1].get()==1)): emnoisenot[counter]+=1; emnoisenotdic[counter].append(str(patterns)+" et="+str(em[counter])+" rms="+str(emrms[counter])) error=1; if((em[counter]>=2+3*sigma[120+ieta]) and (emtruth[counter]=='Ok') and (patternvar_real[patterns-1].get()==1)): emdiagshutdeadnot[counter]+=1; emdiagshutdeadnotdic[counter].append(str(patterns)+" et="+str(em[counter])+" rms="+str(emrms[counter])) if((em[counter]>2+3*sigma[120+ieta])): emdiagshutOk[counter]+=1; g.write('\n\n\n HAD section \n'); for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; for ifi in range(0,32): error=0; fi=ifi+1 counter=ieta*32+ifi if ((hadtruth[counter]=='Ok') and (patternvar_templates[patterns-1].get()==1)): haddiagpat[counter]=1 if ((hadtruth[counter]=='Ok') and (patternvar_real[patterns-1].get()==1)): refer=hadtruthpatterns[counter].split()[-4:-1] temp=[] for ificomp in range(0,32): countercomp=ieta*32+ificomp comp=hadtruthpatterns[countercomp].split()[-4:-1] comp1=hadtruthpatterns[countercomp].split()[-5:-2] # if (eta==4) and (fi==23): # print refer,comp,comp1,ificomp if ((comp==refer) or (comp1==refer)): temp.append(had[countercomp]) countercompneg=(39-ieta)*32+ificomp temp.append(had[countercompneg]) for i in range(0,len(temp)): for j in range(i+1,len(temp)): if temp[i]>temp[j]: temptemp=temp[i] temp[i]=temp[j] temp[j]=temptemp # if (patterns==17) and (eta==4) and (fi==23): # print temp temptemp=abs((temp[int(len(temp)/2)-1]+temp[int(len(temp)/2)])/2)+0.001 # if (patterns==17) and (eta==4) and (fi==23): # print temptemp hadtruthpatterns[counter]+=str(temptemp)+' ' if((had[counter]<2+3*sigma[280+ieta]) and (hadtruth[counter]=='Ok') and (patternvar_real[patterns-1].get()==1)): haddiagshutdead[counter]+=1; haddiagshutdeaddic[counter].append(str(patterns)+" et="+str(had[counter])+" rms="+str(hadrms[counter])) elif (((had[counter]/temptemp)<1-sigma[360+ieta] or (had[counter]/temptemp)>1+sigma[160+ieta]) and (hadtruth[counter]=='Ok') and (patternvar_real[patterns-1].get()==1)): g.write("Non Calib TT "+' Pattern='+str(pattern)+' eta='+str(eta)+' fi='+str(fi)+" Etreal="+str(had[counter])+"Etref="+str(temptemp)+'\n') haddiagcalib[counter]+=1; haddiagcalibdic[counter].append(str(patterns)+" Etreal="+str(had[counter])+" rms="+str(hadrms[counter])+" Etref="+str(temptemp)) if (((had[counter]/temptemp)>1-sigma[360+ieta] and (had[counter]/temptemp)<1+sigma[160+ieta]) and (hadtruth[counter]=='Ok') and (patternvar_real[patterns-1].get()==1)): g.write("Non Calib TT "+' Pattern='+str(pattern)+' eta='+str(eta)+' fi='+str(fi)+" Etreal="+str(had[counter])+"Etref="+str(temptemp)+'\n') haddiagcalibnot[counter]+=1; haddiagcalibnotdic[counter].append(str(patterns)+" Etreal="+str(had[counter])+" rms="+str(hadrms[counter])+" Etref="+str(temptemp)) if ((had[counter]>2+3*sigma[200+ieta]) and (hadtruth[counter]=='No') and (patternvar_real[patterns-1].get()==1)): if (elim_crosstalk.get()): if (str(patterns) in pattern_crosstalk_hadhot[counter]): pass else: g.write( "Hot TT "+' eta='+str(eta)+' fi='+str(fi)+ " Et="+str(had[counter])+'\n') haddiaghot[counter]+=1; haddiaghotdic[counter].append(str(patterns)+" et="+str(had[counter])+" rms="+str(hadrms[counter])) else: g.write( "Hot TT "+' eta='+str(eta)+' fi='+str(fi)+ " Et="+str(had[counter])+'\n') haddiaghot[counter]+=1; haddiaghotdic[counter].append(str(patterns)+" et="+str(had[counter])+" rms="+str(hadrms[counter])) if (save_crosstalk.get()): crosstalk.write("Pattern " + str(patterns) + " eta= " + str(eta) + " fi= " + str(fi) + " hadhot\n") error=1; if ((had[counter]<=2+3*sigma[200+ieta]) and (hadtruth[counter]=='No') and (patternvar_real[patterns-1].get()==1)): g.write( "Hot TT "+' eta='+str(eta)+' fi='+str(fi)+ " Et="+str(had[counter])+'\n') # h.write("Hot "); haddiaghotnot[counter]+=1; haddiaghotnotdic[counter].append(str(patterns)+" et="+str(had[counter])+" rms="+str(hadrms[counter])) error=1; if ((had[counter]<2-3*sigma[240+ieta]) and (hadtruth[counter]=='No') and (patternvar_real[patterns-1].get()==1)): if (elim_crosstalk.get()): if (str(patterns) in pattern_crosstalk_hadlow[counter]): pass else: g.write( "Low TT "+' eta='+str(eta)+' fi='+str(fi)+" Et="+str(had[counter])+'\n') # h.write("Dead "); haddiaglow[counter]+=1; haddiaglowdic[counter].append(str(patterns)+" et="+str(had[counter])+" rms="+str(hadrms[counter])) else: g.write( "Low TT "+' eta='+str(eta)+' fi='+str(fi)+" Et="+str(had[counter])+'\n') # h.write("Dead "); haddiaglow[counter]+=1; haddiaglowdic[counter].append(str(patterns)+" et="+str(had[counter])+" rms="+str(hadrms[counter])) if (save_crosstalk.get()): crosstalk.write("Pattern " + str(patterns) + " eta= " + str(eta) + " fi= " + str(fi) + " hadlow\n") error=1; if ((had[counter]>2-3*sigma[240+ieta]) and (hadtruth[counter]=='No') and (patternvar_real[patterns-1].get()==1)): g.write( "Dead TT "+' eta='+str(eta)+' fi='+str(fi)+" Et="+str(had[counter])+'\n') # h.write("Dead "); haddiaglownot[counter]+=1; haddiaglownotdic[counter].append(str(patterns)+" et="+str(had[counter])+" rms="+str(hadrms[counter])) error=1; if ((error==0) and (hadtruth[counter]=='No')): # h.write('Ok '); haddiagOk[counter]+=1; if (hadrms[counter]>3*sigma[280+ieta] and (hadtruth[counter]=='No') and (patternvar_real[patterns-1].get()==1)): hadnoise[counter]+=1; hadnoisedic[counter].append(str(patterns)+" et="+str(had[counter])+" rms="+str(hadrms[counter])) if (hadrms[counter]<=3*sigma[280+ieta] and (hadtruth[counter]=='No') and (patternvar_real[patterns-1].get()==1)): hadnoisenot[counter]+=1; hadnoisenotdic[counter].append(str(patterns)+" et="+str(had[counter])+" rms="+str(hadrms[counter])) if((had[counter]>2+3*sigma[320+ieta]) and (hadtruth[counter]=='Ok') and (patternvar_real[patterns-1].get()==1)): haddiagshutOk[counter]+=1; if((had[counter]>=2+3*sigma[320+ieta]) and (hadtruth[counter]=='Ok') and (patternvar_real[patterns-1].get()==1)): haddiagshutdeadnot[counter]+=1; haddiagshutdeadnotdic[counter].append(str(patterns)+" et="+str(had[counter])+" rms="+str(hadrms[counter])) # printing the output g.write('\n \n \n \n Summary on problematic towers**************************************** \n'); g.write('number of patterns analyzed '+str(patterns)+'\n'); g.write('EM section\n'); h.write('number of patterns analyzed '+str(patterns)+'\n'); h.write('pedestal\n'); h.write('\n\n\n EM section Hot\n'); h.write('eta/fi ') for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; h.write(str(eta)+" ") h.write('\n'); self.showpatterns(canv[0],emtruthpatterns) self.showpatterns(canv[1],emtruthpatterns) self.showpatterns(canv[2],emtruthpatterns) self.showpatterns(canv[3],emtruthpatterns) self.showpatterns(canv[4],emtruthpatterns) self.showpatterns(canv[5],hadtruthpatterns) self.showpatterns(canv[6],hadtruthpatterns) self.showpatterns(canv[7],hadtruthpatterns) self.showpatterns(canv[8],hadtruthpatterns) self.showpatterns(canv[9],hadtruthpatterns) self.showpatterns_bls(canv[10],emtruthpatterns) self.showpatterns_bls(canv[11],emtruthpatterns) self.showpatterns_bls(canv[12],emtruthpatterns) self.showpatterns_bls(canv[13],emtruthpatterns) self.showpatterns_bls(canv[14],emtruthpatterns) self.showpatterns_bls(canv[15],hadtruthpatterns) self.showpatterns_bls(canv[16],hadtruthpatterns) self.showpatterns_bls(canv[17],hadtruthpatterns) self.showpatterns_bls(canv[18],hadtruthpatterns) self.showpatterns_bls(canv[19],hadtruthpatterns) self.showpatterns_preamp(canv[20],emtruthpatterns) self.showpatterns_preamp(canv[21],emtruthpatterns) self.showpatterns_preamp(canv[22],emtruthpatterns) self.showpatterns_preamp(canv[23],emtruthpatterns) self.showpatterns_preamp(canv[24],emtruthpatterns) self.showpatterns_preamp(canv[25],hadtruthpatterns) self.showpatterns_preamp(canv[26],hadtruthpatterns) self.showpatterns_preamp(canv[27],hadtruthpatterns) self.showpatterns_preamp(canv[28],hadtruthpatterns) self.showpatterns_preamp(canv[29],hadtruthpatterns) finfo.write('EM section \n'); h.write('EM section hot \n'); h.write('eta/fi ') for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; h.write(str(eta)+" ") h.write('\n'); for fi in range(1,33): h.write(str(fi)+" "); for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; error=0; counter=ieta*32+fi-1 if (emdiagpat[counter]==1): self.Button_maker(canv[0],canveta[0],canvfi[0],ieta+1,fi,'green',emdiaghotdic[counter],emdiaghotnotdic[counter],"Pattern",0,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[10],canveta[10],canvfi[10],ieta+1,fi,'green',emdiaghotdic[counter],emdiaghotnotdic[counter],"Pattern",0,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[20],canveta[20],canvfi[20],ieta+1,fi,'green',emdiaghotdic[counter],emdiaghotnotdic[counter],"Pattern",0,labeleta,labelfi,labeltitle,emtruthpatterns) if (emdiaghot[counter]!=0): if (emdiaghotnot[counter]==0): self.Button_maker(canv[0],canveta[0],canvfi[0],ieta+1,fi,'red',emdiaghotdic[counter],emdiaghotnotdic[counter],"EM hot",0,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[10],canveta[10],canvfi[10],ieta+1,fi,'red',emdiaghotdic[counter],emdiaghotnotdic[counter],"EM hot",0,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[20],canveta[20],canvfi[20],ieta+1,fi,'red',emdiaghotdic[counter],emdiaghotnotdic[counter],"EM hot",0,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emdiaghot[counter])+'** '); if abs(eta)<19: g.write( "EM: Hot TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emdiaghot[counter])+'**\n') finfo.write('EM hot eta='+str(eta)+' phi='+str(fi)+'\n') elif (emdiaghot[counter]>5): self.Button_maker(canv[0],canveta[0],canvfi[0],ieta+1,fi,'pink',emdiaghotdic[counter],emdiaghotnotdic[counter],"EM hot",0,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[10],canveta[10],canvfi[10],ieta+1,fi,'pink',emdiaghotdic[counter],emdiaghotnotdic[counter],"EM hot",0,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[20],canveta[20],canvfi[20],ieta+1,fi,'pink',emdiaghotdic[counter],emdiaghotnotdic[counter],"EM hot",0,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emdiaghot[counter])+'* '); if abs(eta)<19: g.write( "EM: Hot TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emdiaghot[counter])+'*\n') else: self.Button_maker(canv[0],canveta[0],canvfi[0],ieta+1,fi,'lightblue',emdiaghotdic[counter],emdiaghotnotdic[counter],"EM hot",0,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[10],canveta[10],canvfi[10],ieta+1,fi,'lightblue',emdiaghotdic[counter],emdiaghotnotdic[counter],"EM hot",0,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[20],canveta[20],canvfi[20],ieta+1,fi,'lightblue',emdiaghotdic[counter],emdiaghotnotdic[counter],"EM hot",0,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emdiaghot[counter])+' '); if abs(eta)<19: g.write( "EM: Hot TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emdiaghot[counter])+'\n') # print eta,fi,emdiaghot[counter],emdiaghotdic[counter] else: h.write('0 '); h.write('\n') g.write('\n') h.write('\n\n\n EM section low\n'); h.write('eta/fi ') for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; h.write(str(eta)+" ") h.write('\n'); for fi in range(1,33): h.write(str(fi)+" "); for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; error=0; counter=ieta*32+fi-1 if (emdiagpat[counter]==1): self.Button_maker(canv[1],canveta[1],canvfi[1],ieta+1,fi,'green',emdiaglowdic[counter],emdiaglownotdic[counter],"Pattern ",1,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[11],canveta[11],canvfi[11],ieta+1,fi,'green',emdiaglowdic[counter],emdiaglownotdic[counter],"Pattern",1,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[21],canveta[21],canvfi[21],ieta+1,fi,'green',emdiaglowdic[counter],emdiaglownotdic[counter],"Pattern",1,labeleta,labelfi,labeltitle,emtruthpatterns) if (emdiaglow[counter]!=0): if (emdiaglownot[counter]==0): self.Button_maker(canv[1],canveta[1],canvfi[1],ieta+1,fi,'red',emdiaglowdic[counter],emdiaglownotdic[counter],"EM low",1,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[11],canveta[11],canvfi[11],ieta+1,fi,'red',emdiaglowdic[counter],emdiaglownotdic[counter],"EM low",1,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[21],canveta[21],canvfi[21],ieta+1,fi,'red',emdiaglowdic[counter],emdiaglownotdic[counter],"EM low",1,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emdiaglow[counter])+'** '); if abs(eta)<19: g.write( "EM: Low TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emdiaglow[counter])+'**\n') finfo.write('EM low eta='+str(eta)+' phi='+str(fi)+'\n') elif (emdiaglow[counter]>5): self.Button_maker(canv[1],canveta[1],canvfi[1],ieta+1,fi,'pink',emdiaglowdic[counter],emdiaglownotdic[counter],"EM low",1,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[11],canveta[11],canvfi[11],ieta+1,fi,'pink',emdiaglowdic[counter],emdiaglownotdic[counter],"EM low",1,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[21],canveta[21],canvfi[21],ieta+1,fi,'pink',emdiaglowdic[counter],emdiaglownotdic[counter],"EM low",1,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emdiaglow[counter])+'* '); if abs(eta)<19: g.write( "EM: Low TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emdiaglow[counter])+'*\n') else: self.Button_maker(canv[1],canveta[1],canvfi[1],ieta+1,fi,'lightblue',emdiaglowdic[counter],emdiaglownotdic[counter],"EM low",1,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[11],canveta[11],canvfi[11],ieta+1,fi,'lightblue',emdiaglowdic[counter],emdiaglownotdic[counter],"EM low",1,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[21],canveta[21],canvfi[21],ieta+1,fi,'lightblue',emdiaglowdic[counter],emdiaglownotdic[counter],"EM low",1,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emdiaglow[counter])+' '); if abs(eta)<19: g.write( "EM: Low TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emdiaglow[counter])+'\n') else: h.write('0 ') h.write('\n') g.write('\n') h.write('\n\n\n') h.write('TT which should have to be fired\n'); h.write('\n\n\n EM section dead\n'); h.write('eta/fi ') for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; h.write(str(eta)+" ") h.write('\n'); for fi in range(1,33): h.write(str(fi)+" "); for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; error=0; counter=ieta*32+fi-1 if (emdiagpat[counter]==1): self.Button_maker(canv[3],canveta[3],canvfi[3],ieta+1,fi,'green',emdiagshutdeaddic[counter],emdiagshutdeadnotdic[counter],"Patterns ",3,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[13],canveta[13],canvfi[13],ieta+1,fi,'green',emdiagshutdeaddic[counter],emdiagshutdeadnotdic[counter],"Patterns ",3,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[23],canveta[23],canvfi[23],ieta+1,fi,'green',emdiagshutdeaddic[counter],emdiagshutdeadnotdic[counter],"Patterns ",3,labeleta,labelfi,labeltitle,emtruthpatterns) if (emdiagshutdead[counter]!=0): if (emdiagshutdeadnot[counter]==0): self.Button_maker(canv[3],canveta[3],canvfi[3],ieta+1,fi,'red',emdiagshutdeaddic[counter],emdiagshutdeadnotdic[counter],"EM shutdead",3,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[13],canveta[13],canvfi[13],ieta+1,fi,'red',emdiagshutdeaddic[counter],emdiagshutdeadnotdic[counter],"EM shutdead",3,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[23],canveta[23],canvfi[23],ieta+1,fi,'red',emdiagshutdeaddic[counter],emdiagshutdeadnotdic[counter],"EM shutdead",3,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emdiagshutdead[counter])+'** '); if abs(eta)<19: g.write( "EM: Dead TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emdiagshutdead[counter])+'**\n') finfo.write('EM dead: eta='+str(eta)+' phi='+str(fi)+'\n') elif (emdiagshutdead[counter]>5): self.Button_maker(canv[3],canveta[3],canvfi[3],ieta+1,fi,'pink',emdiagshutdeaddic[counter],emdiagshutdeadnotdic[counter],"EM shutdead",3,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[13],canveta[13],canvfi[13],ieta+1,fi,'pink',emdiagshutdeaddic[counter],emdiagshutdeadnotdic[counter],"EM shutdead",3,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[23],canveta[23],canvfi[23],ieta+1,fi,'pink',emdiagshutdeaddic[counter],emdiagshutdeadnotdic[counter],"EM shutdead",3,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emdiagshutdead[counter])+'* '); if abs(eta)<19: g.write( "EM: Dead TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emdiagshutdead[counter])+'*\n') else: self.Button_maker(canv[3],canveta[3],canvfi[3],ieta+1,fi,'lightblue',emdiagshutdeaddic[counter],emdiagshutdeadnotdic[counter],"EM shutdead",3,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[13],canveta[13],canvfi[13],ieta+1,fi,'lightblue',emdiagshutdeaddic[counter],emdiagshutdeadnotdic[counter],"EM shutdead",3,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[23],canveta[23],canvfi[23],ieta+1,fi,'lightblue',emdiagshutdeaddic[counter],emdiagshutdeadnotdic[counter],"EM shutdead",3,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emdiagshutdead[counter])+' '); if abs(eta)<19: g.write( "EM: Dead TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emdiagshutdead[counter])+'\n') else: h.write('0 '); h.write('\n') g.write('\n') h.write('\n\n\n EM section noise\n'); h.write('eta/fi ') for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; h.write(str(eta)+" ") h.write('\n'); for fi in range(1,33): h.write(str(fi)+" "); for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; error=0; counter=ieta*32+fi-1 if (emdiagpat[counter]==1): self.Button_maker(canv[2],canveta[2],canvfi[2],ieta+1,fi,'green',emnoisedic[counter],emnoisenotdic[counter],"Pattern",2,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[12],canveta[12],canvfi[12],ieta+1,fi,'green',emnoisedic[counter],emnoisenotdic[counter],"Pattern",2,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[22],canveta[12],canvfi[22],ieta+1,fi,'green',emnoisedic[counter],emnoisenotdic[counter],"Pattern",2,labeleta,labelfi,labeltitle,emtruthpatterns) if (emnoise[counter]!=0): if (emnoisenot[counter]==0): self.Button_maker(canv[2],canveta[2],canvfi[2],ieta+1,fi,'red',emnoisedic[counter],emnoisenotdic[counter],"EM noise",2,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[12],canveta[12],canvfi[12],ieta+1,fi,'red',emnoisedic[counter],emnoisenotdic[counter],"EM noise",2,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[22],canveta[22],canvfi[22],ieta+1,fi,'red',emnoisedic[counter],emnoisenotdic[counter],"EM noise",2,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emnoise[counter])+'** '); if abs(eta)<19: g.write( "EM: Noise TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emnoise[counter])+'**\n') finfo.write('EM noise: eta='+str(eta)+' phi='+str(fi)+'\n') elif (emnoise[counter]>5): self.Button_maker(canv[2],canveta[2],canvfi[2],ieta+1,fi,'pink',emnoisedic[counter],emnoisenotdic[counter],"EM noise",2,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[12],canveta[12],canvfi[12],ieta+1,fi,'pink',emnoisedic[counter],emnoisenotdic[counter],"EM noise",2,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[22],canveta[22],canvfi[22],ieta+1,fi,'pink',emnoisedic[counter],emnoisenotdic[counter],"EM noise",2,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emnoise[counter])+'* '); if abs(eta)<19: g.write( "EM: Noise TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emnoise[counter])+'*\n') else: self.Button_maker(canv[2],canveta[2],canvfi[2],ieta+1,fi,'lightblue',emnoisedic[counter],emnoisenotdic[counter],"EM noise",2,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[12],canveta[12],canvfi[12],ieta+1,fi,'lightblue',emnoisedic[counter],emnoisenotdic[counter],"EM noise",2,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[22],canveta[12],canvfi[22],ieta+1,fi,'lightblue',emnoisedic[counter],emnoisenotdic[counter],"EM noise",2,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emnoise[counter])+' '); if abs(eta)<19: g.write( "EM: Noise TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emnoise[counter])+'\n') else: h.write('0 '); h.write('\n') g.write('\n') h.write('\n\n\n EM section calib\n'); h.write('eta/fi ') for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; h.write(str(eta)+" ") h.write('\n'); for fi in range(1,33): h.write(str(fi)+" "); for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; error=0; counter=ieta*32+fi-1 if (emdiagpat[counter]==1): self.Button_maker(canv[4],canveta[4],canvfi[4],ieta+1,fi,'green',emdiagcalibdic[counter],emdiaglownotdic[counter],"Pattern ",4,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[14],canveta[14],canvfi[14],ieta+1,fi,'green',emdiagcalibdic[counter],emdiaglownotdic[counter],"Pattern",4,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[24],canveta[24],canvfi[24],ieta+1,fi,'green',emdiagcalibdic[counter],emdiagcalibnotdic[counter],"Pattern",4,labeleta,labelfi,labeltitle,emtruthpatterns) if ((emdiagcalib[counter]!=0) and (emdiagshutdead[counter]==0)): if (emdiagcalibnot[counter]==0): self.Button_maker(canv[4],canveta[4],canvfi[4],ieta+1,fi,'red',emdiagcalibdic[counter],emdiagcalibnotdic[counter],"EM calib",4,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[14],canveta[14],canvfi[14],ieta+1,fi,'red',emdiagcalibdic[counter],emdiagcalibnotdic[counter],"EM calib",4,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[24],canveta[24],canvfi[24],ieta+1,fi,'red',emdiagcalibdic[counter],emdiagcalibnotdic[counter],"EM calib",4,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emdiagcalib[counter])+'** '); if abs(eta)<19: g.write( "EM: Calib TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emdiagcalib[counter])+'**\n') finfo.write('EM calib: eta='+str(eta)+' phi='+str(fi)+'\n') elif (emdiagcalib[counter]>5): self.Button_maker(canv[4],canveta[4],canvfi[4],ieta+1,fi,'pink',emdiagcalibdic[counter],emdiagcalibnotdic[counter],"EM calib",4,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[14],canveta[14],canvfi[14],ieta+1,fi,'pink',emdiagcalibdic[counter],emdiagcalibnotdic[counter],"EM calib",4,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[24],canveta[24],canvfi[24],ieta+1,fi,'pink',emdiagcalibdic[counter],emdiagcalibnotdic[counter],"EM calib",4,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emdiagcalib[counter])+'* '); if abs(eta)<19: g.write( "EM: Calib TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emdiagcalib[counter])+'*\n') else: self.Button_maker(canv[4],canveta[4],canvfi[4],ieta+1,fi,'lightblue',emdiagcalibdic[counter],emdiagcalibnotdic[counter],"EM calib",4,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_bls(canv[14],canveta[14],canvfi[14],ieta+1,fi,'lightblue',emdiagcalibdic[counter],emdiagcalibnotdic[counter],"EM calib",4,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[24],canveta[24],canvfi[24],ieta+1,fi,'lightblue',emdiagcalibdic[counter],emdiagcalibnotdic[counter],"EM calib",4,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(emdiagcalib[counter])+' '); if abs(eta)<19: g.write( "EM: Calib TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(emdiagcalib[counter])+'\n') else: h.write('0 ') h.write('\n') g.write('\n') finfo.write('HAD section \n'); g.write('HAD section \n'); h.write('\n\n\n HAD section Hot\n'); h.write('eta/fi ') for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; h.write(str(eta)+" ") h.write('\n'); for fi in range(1,33): h.write(str(fi)+" "); for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; error=0; counter=ieta*32+fi-1 if (haddiagpat[counter]==1): self.Button_maker(canv[5],canveta[5],canvfi[5],ieta+1,fi,'green',haddiaghotdic[counter],haddiaghotnotdic[counter],"HAD hot",5,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[15],canveta[15],canvfi[15],ieta+1,fi,'green',haddiaghotdic[counter],haddiaghotnotdic[counter],"Pattern",5,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[25],canveta[25],canvfi[25],ieta+1,fi,'green',haddiaghotdic[counter],haddiaghotnotdic[counter],"Pattern",5,labeleta,labelfi,labeltitle,emtruthpatterns) if (haddiaghot[counter]!=0): if (haddiaghotnot[counter]==0): self.Button_maker(canv[5],canveta[5],canvfi[5],ieta+1,fi,'red',haddiaghotdic[counter],haddiaghotnotdic[counter],"HAD hot",5,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[15],canveta[15],canvfi[15],ieta+1,fi,'red',haddiaghotdic[counter],haddiaghotnotdic[counter],"Pattern",5,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[25],canveta[25],canvfi[25],ieta+1,fi,'red',haddiaghotdic[counter],haddiaghotnotdic[counter],"Pattern",5,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(haddiaghot[counter])+'** '); if (abs(eta)<19): finfo.write('HAD hot eta='+str(eta)+' phi='+str(fi)+'\n') g.write( "HAD: Hot TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(haddiaghot[counter])+'**\n') elif (haddiaghot[counter]>5): self.Button_maker(canv[5],canveta[5],canvfi[5],ieta+1,fi,'pink',haddiaghotdic[counter],haddiaghotnotdic[counter],"HAD hot",5,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[15],canveta[15],canvfi[15],ieta+1,fi,'pink',haddiaghotdic[counter],haddiaghotnotdic[counter],"Pattern",5,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[25],canveta[25],canvfi[25],ieta+1,fi,'pink',haddiaghotdic[counter],haddiaghotnotdic[counter],"Pattern",5,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(haddiaghot[counter])+'* '); if (abs(eta)<19): g.write( "HAD: Hot TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(haddiaghot[counter])+'*\n') else: self.Button_maker(canv[5],canveta[5],canvfi[5],ieta+1,fi,'lightblue',haddiaghotdic[counter],haddiaghotnotdic[counter],"HAD hot",5,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[15],canveta[15],canvfi[15],ieta+1,fi,'lightblue',haddiaghotdic[counter],haddiaghotnotdic[counter],"Pattern",5,labeleta,labelfi,labeltitle,emtruthpatterns) self.Button_maker_preamp(canv[25],canveta[25],canvfi[25],ieta+1,fi,'lightblue',haddiaghotdic[counter],haddiaghotnotdic[counter],"Pattern",5,labeleta,labelfi,labeltitle,emtruthpatterns) h.write(str(haddiaghot[counter])+' '); if (abs(eta)<19): g.write( "HAD: Hot TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(haddiaghot[counter])+'\n') else: h.write('0 '); h.write('\n'); g.write('\n') h.write('\n\n\n HAD section Low\n'); h.write('eta/fi ') for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; h.write(str(eta)+" ") h.write('\n'); for fi in range(1,33): h.write(str(fi)+" "); for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; error=0; counter=ieta*32+fi-1 if (haddiagpat[counter]==1): self.Button_maker(canv[6],canveta[6],canvfi[6],ieta+1,fi,'green',haddiaglowdic[counter],haddiaglownotdic[counter],"Patterns ",6,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[16],canveta[16],canvfi[16],ieta+1,fi,'green',haddiaglowdic[counter],haddiaglownotdic[counter],"Patterns ",6,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[26],canveta[26],canvfi[26],ieta+1,fi,'green',haddiaglowdic[counter],haddiaglownotdic[counter],"Patterns ",6,labeleta,labelfi,labeltitle,hadtruthpatterns) if (haddiaglow[counter]!=0): if (haddiaglownot[counter]==0): self.Button_maker(canv[6],canveta[6],canvfi[6],ieta+1,fi,'red',haddiaglowdic[counter],haddiaglownotdic[counter],"HAD low",6,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[16],canveta[16],canvfi[16],ieta+1,fi,'red',haddiaglowdic[counter],haddiaglownotdic[counter],"HAD low",6,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_preamp(canv[26],canveta[26],canvfi[26],ieta+1,fi,'red',haddiaglowdic[counter],haddiaglownotdic[counter],"HAD low",6,labeleta,labelfi,labeltitle,hadtruthpatterns) h.write(str(haddiaglow[counter])+'** '); if (abs(eta)<19): finfo.write('HAD low eta='+str(eta)+' phi='+str(fi)+'\n') g.write( "HAD: low TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(haddiaglow[counter])+'**\n') elif (haddiaglow[counter]>5): self.Button_maker(canv[6],canveta[6],canvfi[6],ieta+1,fi,'pink',haddiaglowdic[counter],haddiaglownotdic[counter],"HAD low",6,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[16],canveta[16],canvfi[16],ieta+1,fi,'pink',haddiaglowdic[counter],haddiaglownotdic[counter],"HAD low",6,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_preamp(canv[26],canveta[26],canvfi[26],ieta+1,fi,'pink',haddiaglowdic[counter],haddiaglownotdic[counter],"HAD low",6,labeleta,labelfi,labeltitle,hadtruthpatterns) h.write(str(haddiaglow[counter])+'* '); if (abs(eta)<19): g.write( "HAD: low TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(haddiaglow[counter])+'*\n') else: self.Button_maker(canv[6],canveta[6],canvfi[6],ieta+1,fi,'lightblue',haddiaglowdic[counter],haddiaglownotdic[counter],"HAD low",6,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[16],canveta[16],canvfi[16],ieta+1,fi,'lightblue',haddiaglowdic[counter],haddiaglownotdic[counter],"HAD low",6,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_preamp(canv[26],canveta[26],canvfi[26],ieta+1,fi,'lightblue',haddiaglowdic[counter],haddiaglownotdic[counter],"HAD low",6,labeleta,labelfi,labeltitle,hadtruthpatterns) h.write(str(haddiaglow[counter])+' '); if (abs(eta)<19): g.write( "HAD: low TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(haddiaglow[counter])+'\n') else: h.write('0 '); h.write('\n'); g.write('\n') h.write('\n\n\n HAD section DEAD\n'); h.write('eta/fi ') for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; h.write(str(eta)+" ") h.write('\n'); for fi in range(1,33): h.write(str(fi)+" "); for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; error=0; counter=ieta*32+fi-1 if (haddiagpat[counter]==1): self.Button_maker(canv[8],canveta[8],canvfi[8],ieta+1,fi,'green',haddiagshutdeaddic[counter],haddiagshutdeadnotdic[counter],"Patterns ",8,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[18],canveta[18],canvfi[18],ieta+1,fi,'green',haddiagshutdeaddic[counter],haddiagshutdeadnotdic[counter],"Patterns ",8,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[28],canveta[28],canvfi[28],ieta+1,fi,'green',haddiagshutdeaddic[counter],haddiagshutdeadnotdic[counter],"Patterns ",8,labeleta,labelfi,labeltitle,hadtruthpatterns) if (haddiagshutdead[counter]!=0): if (haddiagshutdeadnot[counter]==0): self.Button_maker(canv[8],canveta[8],canvfi[8],ieta+1,fi,'red',haddiagshutdeaddic[counter],haddiagshutdeadnotdic[counter],"HAD diagshutdead",8,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[18],canveta[18],canvfi[18],ieta+1,fi,'red',haddiagshutdeaddic[counter],haddiagshutdeadnotdic[counter],"HAD diagshutdead",8,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_preamp(canv[28],canveta[28],canvfi[28],ieta+1,fi,'red',haddiagshutdeaddic[counter],haddiagshutdeadnotdic[counter],"HAD diagshutdead",8,labeleta,labelfi,labeltitle,hadtruthpatterns) h.write(str(haddiagshutdead[counter])+'* '); if (abs(eta)<19): finfo.write('HAD dead eta='+str(eta)+' phi='+str(fi)+'\n') g.write( "HAD: dead TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(haddiagshutdead[counter])+'**\n') elif (haddiagshutdead[counter]>5): self.Button_maker(canv[8],canveta[8],canvfi[8],ieta+1,fi,'pink',haddiagshutdeaddic[counter],haddiagshutdeadnotdic[counter],"HAD diagshutdead",8,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[18],canveta[18],canvfi[18],ieta+1,fi,'pink',haddiagshutdeaddic[counter],haddiagshutdeadnotdic[counter],"HAD diagshutdead",8,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_preamp(canv[28],canveta[28],canvfi[28],ieta+1,fi,'pink',haddiagshutdeaddic[counter],haddiagshutdeadnotdic[counter],"HAD diagshutdead",8,labeleta,labelfi,labeltitle,hadtruthpatterns) h.write(str(haddiagshutdead[counter])+'* '); if (abs(eta)<19): g.write( "HAD: dead TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(haddiagshutdead[counter])+'*\n') else: self.Button_maker(canv[8],canveta[8],canvfi[8],ieta+1,fi,'lightblue',haddiagshutdeaddic[counter],haddiagshutdeadnotdic[counter],"HAD diagshutdead",8,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[18],canveta[18],canvfi[18],ieta+1,fi,'lightblue',haddiagshutdeaddic[counter],haddiagshutdeadnotdic[counter],"HAD diagshutdead",8,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_preamp(canv[28],canveta[28],canvfi[28],ieta+1,fi,'lightblue',haddiagshutdeaddic[counter],haddiagshutdeadnotdic[counter],"HAD diagshutdead",8,labeleta,labelfi,labeltitle,hadtruthpatterns) h.write(str(haddiagshutdead[counter])+' '); if (abs(eta)<19): g.write( "HAD: dead TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(haddiagshutdead[counter])+'*\n') else: h.write('0 '); h.write('\n'); g.write('\n') h.write('\n\n\n') h.write('TT with noise\n'); h.write('\n\n\n Had section noise\n'); h.write('eta/fi ') for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; h.write(str(eta)+" ") h.write('\n'); for fi in range(1,33): h.write(str(fi)+" "); for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; error=0; counter=ieta*32+fi-1 if (haddiagpat[counter]==1): self.Button_maker(canv[7],canveta[7],canvfi[7],ieta+1,fi,'green',hadnoisedic[counter],hadnoisenotdic[counter],"Patterns ",7,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[17],canveta[17],canvfi[17],ieta+1,fi,'green',hadnoisedic[counter],hadnoisenotdic[counter],"Patterns ",7,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[27],canveta[27],canvfi[27],ieta+1,fi,'green',hadnoisedic[counter],hadnoisenotdic[counter],"Patterns ",7,labeleta,labelfi,labeltitle,hadtruthpatterns) if (hadnoise[counter]!=0): if (hadnoisenot[counter]==0): self.Button_maker(canv[7],canveta[7],canvfi[7],ieta+1,fi,'red',hadnoisedic[counter],hadnoisenotdic[counter],"HAD noise",7,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[17],canveta[17],canvfi[17],ieta+1,fi,'red',hadnoisedic[counter],hadnoisenotdic[counter],"HAD noise",7,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_preamp(canv[27],canveta[27],canvfi[27],ieta+1,fi,'red',hadnoisedic[counter],hadnoisenotdic[counter],"HAD noise",7,labeleta,labelfi,labeltitle,hadtruthpatterns) h.write(str(hadnoise[counter])+'** '); if (abs(eta)<19): finfo.write('HAD noise eta='+str(eta)+' phi='+str(fi)+'\n') g.write( "HAD: noisy TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(hadnoise[counter])+'**\n') elif (hadnoise[counter]>5): self.Button_maker(canv[7],canveta[7],canvfi[7],ieta+1,fi,'pink',hadnoisedic[counter],hadnoisenotdic[counter],"HAD noise",7,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[17],canveta[17],canvfi[17],ieta+1,fi,'pink',hadnoisedic[counter],hadnoisenotdic[counter],"HAD noise",7,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_preamp(canv[27],canveta[27],canvfi[27],ieta+1,fi,'pink',hadnoisedic[counter],hadnoisenotdic[counter],"HAD noise",7,labeleta,labelfi,labeltitle,hadtruthpatterns) h.write(str(hadnoise[counter])+'* '); if (abs(eta)<19): g.write( "HAD: noisy TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(hadnoise[counter])+'*\n') else: self.Button_maker(canv[7],canveta[7],canvfi[7],ieta+1,fi,'lightblue',hadnoisedic[counter],hadnoisenotdic[counter],"HAD noise",7,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[17],canveta[17],canvfi[17],ieta+1,fi,'lightblue',hadnoisedic[counter],hadnoisenotdic[counter],"HAD noise",7,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_preamp(canv[27],canveta[27],canvfi[27],ieta+1,fi,'lightblue',hadnoisedic[counter],hadnoisenotdic[counter],"HAD noise",7,labeleta,labelfi,labeltitle,hadtruthpatterns) h.write(str(hadnoise[counter])+' '); if (abs(eta)<19): g.write( "HAD: noisy TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(hadnoise[counter])+'*\n') else: h.write('0 '); h.write('\n') g.write('\n') h.write('\n\n\n had section calib\n'); h.write('eta/fi ') for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; h.write(str(eta)+" ") h.write('\n'); for fi in range(1,33): h.write(str(fi)+" "); for ieta in range(0,40): eta=ieta-20 if eta>-1: eta+=1; error=0; counter=ieta*32+fi-1 if (haddiagpat[counter]==1): self.Button_maker(canv[9],canveta[9],canvfi[9],ieta+1,fi,'green',haddiaglowdic[counter],haddiaglownotdic[counter],"Pattern ",9,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[19],canveta[19],canvfi[19],ieta+1,fi,'green',haddiaglowdic[counter],haddiaglownotdic[counter],"Pattern",9,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_preamp(canv[29],canveta[29],canvfi[29],ieta+1,fi,'green',haddiagcalibdic[counter],haddiagcalibnotdic[counter],"Pattern",9,labeleta,labelfi,labeltitle,hadtruthpatterns) if ((haddiagcalib[counter]!=0) and (haddiagshutdead[counter]==0)): if (haddiagcalibnot[counter]==0): self.Button_maker(canv[9],canveta[9],canvfi[9],ieta+1,fi,'red',haddiagcalibdic[counter],haddiagcalibnotdic[counter],"HAD calib",9,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[19],canveta[19],canvfi[19],ieta+1,fi,'red',haddiagcalibdic[counter],haddiagcalibnotdic[counter],"HAD calib",9,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_preamp(canv[29],canveta[29],canvfi[29],ieta+1,fi,'red',haddiagcalibdic[counter],haddiagcalibnotdic[counter],"HAD calib",9,labeleta,labelfi,labeltitle,hadtruthpatterns) h.write(str(haddiagcalib[counter])+'** '); if (abs(eta)<19): finfo.write('HAD calib eta='+str(eta)+' phi='+str(fi)+'\n') g.write( "HAD: uncalib TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(hadnoise[counter])+'**\n') elif (haddiagcalib[counter]>5): self.Button_maker(canv[9],canveta[9],canvfi[9],ieta+1,fi,'pink',haddiagcalibdic[counter],haddiagcalibnotdic[counter],"HAD calib",9,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[19],canveta[19],canvfi[19],ieta+1,fi,'pink',haddiagcalibdic[counter],haddiagcalibnotdic[counter],"HAD calib",9,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_preamp(canv[29],canveta[29],canvfi[29],ieta+1,fi,'pink',haddiagcalibdic[counter],haddiagcalibnotdic[counter],"HAD calib",9,labeleta,labelfi,labeltitle,hadtruthpatterns) h.write(str(haddiagcalib[counter])+'* '); if (abs(eta)<19): g.write( "HAD: uncalib TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(hadnoise[counter])+'*\n') else: self.Button_maker(canv[9],canveta[9],canvfi[9],ieta+1,fi,'lightblue',haddiagcalibdic[counter],haddiagcalibnotdic[counter],"HAD calib",9,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_bls(canv[19],canveta[19],canvfi[19],ieta+1,fi,'lightblue',haddiagcalibdic[counter],haddiagcalibnotdic[counter],"HAD calib",9,labeleta,labelfi,labeltitle,hadtruthpatterns) self.Button_maker_preamp(canv[29],canveta[29],canvfi[29],ieta+1,fi,'lightblue',haddiagcalibdic[counter],haddiagcalibnotdic[counter],"HAD calib",9,labeleta,labelfi,labeltitle,hadtruthpatterns) h.write(str(haddiagcalib[counter])+' '); if (abs(eta)<19): g.write( "HAD: uncalib TT "+' eta='+str(eta)+' fi='+str(fi)+' number of patterns failed='+str(hadnoise[counter])+'\n') else: h.write('0 ') h.write('\n') g.write('\n') g.close() h.close() finfo.close() if (elim_crosstalk.get() or save_crosstalk.get()): crosstalk.close() if (send_email.get()): text.insert(END,"Sending e-mail to the big boss!\n") text.yview(MOVETO,1.0) self.email(email,fileout,filepic,fileinfo) text.tag_config("curmagenta",foreground="magenta") text.insert(END,'Done!\n',"curmagenta") text.yview(MOVETO,1.0) def showpatterns(self,canv,truthpatterns): def canvas_act(event,self=self,truthpatterns=truthpatterns): Row=int((event.x-8)/16)+1 Col=int((event.y-6)/12)+1 if(Row<21): Rowtext=Row-21 else: Rowtext=Row-20 counter=(Row-1)*32+Col-1 if ((Row>40) or (Row<1) or (Col<1) or (Col>32)): return info=Toplevel() # info.title("info on "+string) if (abs(Rowtext)==7): PyCal.update_phys(abs(Rowtext)*2-1,Col*2,8) else: PyCal.update_phys(abs(Rowtext)*2-1,Col*2,1) valid,crate_old,adc,bls,tower,depth=PyCal.get_adc() label=Label(info,text="h="+str(Rowtext)+" f="+str(Col),font="symbol",background="green",width=70) label.grid() if(not valid): label=Label(info,text="NOT VALID BLS SELECTION",background='green', foreground='red',width=40) label.grid() else: bls_table=[37,27,7,18,58,48,38,28,8,17,57,47]; crate=bls_table.index(crate_old) label=Label(info,text="Crate="+str(crate)+" ADC="+str(adc)+" BLS="+str(bls),font="Arial",background="green",width=40) label.grid() valid3,box,board,pretower,predepth,pat,oldpat=PyCal.get_preamp() if valid: label=Label(info,text="Box="+str(box)+" Board="+str(board),font="Arial",background="green",width=40) label.grid(); else: label=Label(info,text="NOT VALID PREAMP COORDINATES",background='green',foreground='red',width=40) label.grid() label=Label(info,text="RunI patterns which fire the TT",width=33,borderwidth=2,relief=RIDGE) label.grid() truthlabelpatterns=truthpatterns[counter].split() for i in range(0,int(len(truthlabelpatterns)/5)): label=Label(info,text="Pattern "+truthlabelpatterns[i*5]+' Tower '+truthlabelpatterns[i*5+1]+' Depth '+truthlabelpatterns[i*5+2]+' EM real '+truthlabelpatterns[i*5+3]+ ' EM reference '+truthlabelpatterns[i*5+4]) label.grid(); def kill(event,self=self,info=info): info.destroy() Ok=Button(info,text="Ok",width=25) Ok.grid(row=len(truthlabelpatterns)+4,column=0,columnspan=2) Ok.bind("",kill) canv.bind("",canvas_act) def showpatterns_bls(self,canv,truthpatterns): def canvas_act(event,self=self,truthpatterns=truthpatterns): adc_bls=int((event.x-7.5)/15) crate=int((event.y-6)/12) if ((adc_bls>95) or (crate<0) or (adc_bls<0) or (crate>11)): return info=Toplevel() bls_table=[37,27,7,18,58,48,38,28,8,17,57,47]; PyCal.update_adc(bls_table[crate],int(adc_bls/8),adc_bls-8*int(adc_bls/8),1,1) valid,Row,Col,depth=PyCal.get_phys() # print valid, Row, Col,depth counter=(int(Row/2)-1)*32+int(Col/2)-1 label=Label(info,text="Crate="+str(crate)+" ADC="+str(int(adc_bls/8))+" BLS="+str(adc_bls-8*int(adc_bls/8)),font="Arial",background="green",width=40) label.grid() valid2,box,board,pretower,predepth,pat,oldpat=PyCal.get_preamp() if valid2: label=Label(info,text="Box="+str(box)+" Board="+str(board),font="Arial",background="green",width=40) label.grid(); else: label=Label(info,text="NOT VALID PREAMP COORDINATES",background='green',foreground='red',width=40) label.grid() if valid: label=Label(info,text=" h="+str(int(Row/2))+" f="+str(Col/2),font="symbol",background="green",width=70) else: label=Label(info,text="NOT VALID PHYSICAL COORDINATES",background='green',foreground='red',width=40) label.grid() if valid: label=Label(info,text="RunI patterns which fire the TT",width=33,borderwidth=2,relief=RIDGE) label.grid() truthlabelpatterns=truthpatterns[counter].split() for i in range(0,int(len(truthlabelpatterns)/5)): label=Label(info,text="Pattern "+truthlabelpatterns[i*5]+' Tower '+truthlabelpatterns[i*5+1]+' Depth '+truthlabelpatterns[i*5+2]+' EM real '+truthlabelpatterns[i*5+3]+ ' EM reference '+truthlabelpatterns[i*5+4]) label.grid(); Ok=Button(info,text="Ok",width=25) Ok.grid(row=len(truthlabelpatterns)+4,column=0,columnspan=2) def kill(event,self=self,info=info): info.destroy() Ok.bind("",kill) canv.bind("",canvas_act) def showpatterns_preamp(self,canv,truthpatterns): def canvas_act(event,self=self,truthpatterns=truthpatterns): board=int((event.x-7.5)/15) box=int((event.y-6)/12) if ((board>95) or (box<0) or (board<0) or (box>11)): return info=Toplevel() PyCal.update_preamp(box,board,1,1) bls_table=[37,27,7,18,58,48,38,28,8,17,57,47]; valid1,Row,Col,depth=PyCal.get_phys() counter=(int(Row/2)-1)*32+int(Col/2)-1 valid2,crate,adc,bls,tower,depth=PyCal.get_adc() counter=(int(Row/2)-1)*32+int(Col/2)-1 label=Label(info,text="Box="+str(box)+" Board="+str(board),font="Arial",background="green",width=40) label.grid() if valid2: label=Label(info,text="Crate="+str(bls_table.index(crate))+" ADC="+str(adc)+" BLS="+str(bls),font="Arial",background="green",width=40) else: label=Label(info,text="NOT VALID ADC COORDINATES",background='green',foreground='red',width=40) label.grid() if valid1: label=Label(info,text=" h="+str(int(Row/2))+" f="+str(Col/2),font="symbol",background="green",width=70) label.grid() label=Label(info,text="RunI patterns which fire the TT",width=33,borderwidth=2,relief=RIDGE) label.grid() truthlabelpatterns=truthpatterns[counter].split() truthlabelpatterns=truthpatterns[counter].split() for i in range(0,int(len(truthlabelpatterns)/5)): label=Label(info,text="Pattern "+truthlabelpatterns[i*5]+' Tower '+truthlabelpatterns[i*5+1]+' Depth '+truthlabelpatterns[i*5+2]+' EM real '+truthlabelpatterns[i*5+3]+ ' EM reference '+truthlabelpatterns[i*5+4]) label.grid(); else: label=Label(info,text="NOT VALID PHYSICAL COORDINATES",background='green',foreground='red',width=40) label.grid() def kill(event,self=self,info=info): info.destroy() Ok=Button(info,text="Ok",width=25) Ok.grid(row=len(truthlabelpatterns)+4,column=0,columnspan=2) Ok.bind("",kill) canv.bind("",canvas_act) def Button_maker(self,canv,canvx,canvy,Row,Col,color,data,datanot,string,canvnumber,labeleta,labelfi,labeltitle,truthpatterns): button=[] if(Row<21): Rowtext=Row-21 else: Rowtext=Row-20 counter=(Row-1)*32+Col-1 button.append(Button(canv, padx=0,pady=0,background=color)) def canvas_act_patterns(event,self=self,Row=Row,Col=Col,truthpatterns=truthpatterns): info=Toplevel() # info.title("info on "+string) label=Label(info,text="h="+str(Rowtext)+" f="+str(Col),font="symbol",background="green",width=140) label.grid() if (abs(Rowtext)==7): PyCal.update_phys(abs(Rowtext)*2-1,Col*2,8) else: PyCal.update_phys(abs(Rowtext)*2-1,Col*2,1) valid,crate_old,adc,bls,tower,depth=PyCal.get_adc() if(not valid): label=Label(info,text="NOT VALID BLS SELECTION",background='green', foreground='red',width=80) label.grid() else: bls_table=[37,27,7,18,58,48,38,28,8,17,57,47]; crate=bls_table.index(crate_old) label=Label(info,text="Crate="+str(crate)+" ADC="+str(adc)+" BLS="+str(bls),font="Arial",background="green",width=80) label.grid() valid2,box,board,pretower,predepth,pat,oldpat=PyCal.get_preamp() if valid2: label=Label(info,text="Box="+str(box)+" Board="+str(board),font="Arial",background="green",width=80) label.grid(); else: label=Label(info,text="NOT VALID PREAMP COORDINATES",background='green',foreground='red',width=80) label.grid() label=Label(info,text="RunI patterns which fire the TT",width=33,borderwidth=2,relief=RIDGE) label.grid() truthlabelpatterns=truthpatterns[counter].split() for i in range(0,int(len(truthlabelpatterns)/5)): label=Label(info,text="Pattern "+truthlabelpatterns[i*5]+' Tower '+truthlabelpatterns[i*5+1]+' Depth '+truthlabelpatterns[i*5+2]+' EM real '+truthlabelpatterns[i*5+3]+ ' EM reference '+truthlabelpatterns[i*5+4]) label.grid(); def kill(event,self=self,info=info): info.destroy() Ok=Button(info,text="Ok",width=25) Ok.grid(row=len(truthlabelpatterns)+5,column=0,columnspan=2) Ok.bind("",kill) def canvas_act(event,self=self,Row=Row,Col=Col,canvx=canvx,canvy=canvy,data=data,datanot=datanot,string=string,labeleta=labeleta,labelfi=labelfi,canvnumber=canvnumber): if(Row<21): Rowtext=Row-21 else: Rowtext=Row-20 for eta in range(1,41): if (eta<21): etatext=eta-21 else: etatext=eta-20 labeleta[canvnumber*40+eta-1].destroy(); self.label_maker(canvx,str(etatext),1,eta,'lightblue',labeleta,canvnumber*40+eta-1,3,2) for fi in range(1,33): labelfi[canvnumber*32+fi-1].destroy(); self.label_maker(canvy,str(fi),fi,1,'lightblue',labelfi,canvnumber*32+fi-1,5,1) self.label_maker(canvx,str(Rowtext),1,Row,'green',labeleta,canvnumber*40+Row,3,2) self.label_maker(canvy,str(Col),Col,1,'green',labelfi,canvnumber*32+fi,5,1) info=Toplevel() info.title("info on "+string) label=Label(info,text="h="+str(Rowtext)+" f="+str(Col),font="symbol",background="green",width=140) label.grid(row=1,column=0,columnspan=2); if (abs(Rowtext)==7): PyCal.update_phys(abs(Rowtext)*2-1,Col*2,8) else: PyCal.update_phys(abs(Rowtext)*2-1,Col*2,1) valid,crate_old,adc,bls,tower,depth=PyCal.get_adc() if(not valid): label=Label(info,text="NOT VALID BLS SELECTION",background='green', foreground='red',width=80) label.grid(row=2,column=0,columnspan=2) else: bls_table=[37,27,7,18,58,48,38,28,8,17,57,47]; crate=bls_table.index(crate_old) label=Label(info,text="Crate="+str(crate)+" ADC="+str(adc)+" BLS="+str(bls),font="Arial",background="green",width=80) label.grid(row=2,column=0,columnspan=2) valid2,box,board,pretower,predepth,pat,oldpat=PyCal.get_preamp() if valid2: label=Label(info,text="Box="+str(box)+" Board="+str(board),font="Arial",background="green",width=80) label.grid(row=3,column=0,columnspan=2); else: label=Label(info,text="NOT VALID PREAMP SELECTION",background='green',foreground='red',width=80) label.grid(row=3,column=0,columnspan=2) label=Label(info,text="fail",width=33,borderwidth=2,relief=RIDGE) label.grid(row=4,column=0); label=Label(info,text="Ok",width=33,borderwidth=2,relief=RIDGE) label.grid(row=4,column=1); for i in range(0,len(data)): # print len,data[i] label=Label(info,text="Pattern "+data[i]) label.grid(row=i+5,column=0); for i in range(0,len(datanot)): label=Label(info,text="Pattern "+datanot[i]) label.grid(row=i+5,column=1); def kill(event,self=self,info=info): info.destroy() Ok=Button(info,text="Ok",width=50) Ok.grid(row=max(len(data),len(datanot))+5,column=0,columnspan=2) Ok.bind("",kill) button[0].bind("",canvas_act) button[0].bind("",canvas_act_patterns) canv.create_window(Row*16,Col*12,window=button[0],height=14,width=14); def Button_maker_bls(self,canv,canvx,canvy,Row,Col,color,data,datanot,string,canvnumber,labeleta,labelfi,labeltitle,truthpatterns): if(Row<21): Rowtext=Row-21 else: Rowtext=Row-20 if (abs(Rowtext)==7): PyCal.update_phys(Rowtext*2,Col*2,8) else: PyCal.update_phys(Rowtext*2,Col*2,1) valid,crate_old,adc,bls,tower,depth=PyCal.get_adc() bls_table=[37,27,7,18,58,48,38,28,8,17,57,47]; if (valid): crate=bls_table.index(crate_old) button=Button(canv, padx=0,pady=0,background=color) def canvas_act_patterns(event,self=self,Row=Row,Col=Col,truthpatterns=truthpatterns): if(Row<21): Rowtext=Row-21 else: Rowtext=Row-20 counter=(Row-1)*32+Col-1 info=Toplevel() label=Label(info,text="Crate="+str(crate)+" ADC="+str(adc)+" BLS="+str(bls),font="Arial",background="green",width=80) label.grid() if (abs(Rowtext)==7): PyCal.update_phys(Rowtext*2,Col*2,8) else: PyCal.update_phys(Rowtext*2,Col*2,1) valid2,box,board,pretower,predepth,pat,oldpat=PyCal.get_preamp() if valid2: label=Label(info,text="Box="+str(box)+" Board="+str(board),font="Arial",background="green",width=80) label.grid(); else: label=Label(info,text="NOT VALID PREAMP SELECTION",background='green',foregraound='red',width=80) label.grid() label=Label(info,text="h="+str(Rowtext)+" f="+str(Col),font="symbol",background="green",width=140) label.grid() label=Label(info,text="RunI patterns which fire the TT",width=33,borderwidth=2,relief=RIDGE) label.grid() truthlabelpatterns=truthpatterns[counter].split() for i in range(0,int(len(truthlabelpatterns)/5)): label=Label(info,text="Pattern "+truthlabelpatterns[i*5]+' Tower '+truthlabelpatterns[i*5+1]+' Depth '+truthlabelpatterns[i*5+2]+' EM real '+truthlabelpatterns[i*5+3]+ ' EM reference '+truthlabelpatterns[i*5+4]) label.grid(); def kill(event,self=self,info=info): info.destroy() Ok=Button(info,text="Ok",width=25) Ok.grid(row=len(truthlabelpatterns)+4,column=0,columnspan=2) Ok.bind("",kill) def canvas_act(event,self=self,Row=Row,Rowtext=Rowtext,Col=Col,canvx=canvx,canvy=canvy,data=data,datanot=datanot,string=string,labeleta=labeleta,labelfi=labelfi,canvnumber=canvnumber): for adc in range(0,12): labeladc[canvnumber*8+adc].destroy(); self.label_maker_adc(canvx,str(adc),1,adc,'magenta',labeladc,canvnumber*12+adc,22,2,12) for bls in range(0,8): labeleta[10*40+canvnumber*96+adc*8+bls].destroy() self.label_maker_dif(canvx,str(bls),3,adc*8+bls+1,'lightblue',labeleta,10*40+canvnumber*96+adc*8+bls,3,2) for fi in range(0,12): labelfi[10*32+canvnumber*12+fi].destroy(); self.label_maker_dif(canvy,str(fi),fi+1,1,'lightblue',labelfi,10*32+canvnumber*12+fi,5,1) if (abs(Rowtext)==7): PyCal.update_phys(Rowtext*2,Col*2,8) else: PyCal.update_phys(Rowtext*2,Col*2,1) valid,crate_old,adc,bls,tower,depth=PyCal.get_adc() # print valid,crate_old,Rowtext,Col bls_table=[37,27,7,18,58,48,38,28,8,17,57,47]; crate=bls_table.index(crate_old) self.label_maker_dif(canvy,str(crate),crate+1,1,'green',labelfi,10*32+canvnumber*12+fi,5,1) self.label_maker_adc(canvx,str(adc),1,adc,'green',labeladc,canvnumber*12+adc,22,2,12) self.label_maker_dif(canvx,str(bls),3,adc*8+bls+1,'green',labeleta,10*40+canvnumber*96+Row,3,2) # print Rowtext,Col,valid,crate_old,adc,bls info=Toplevel() info.title("info on "+string) label=Label(info,text="Crate="+str(crate)+" ADC="+str(adc)+" BLS="+str(bls),font="Arial",background="green",width=80) label.grid(row=0,column=0,columnspan=2) valid2,box,board,pretower,predepth,pat,oldpat=PyCal.get_preamp() if valid: label=Label(info,text="Box="+str(box)+" Board="+str(board),font="Arial",background="green",width=80) label.grid(row=1,column=0,columnspan=2); else: label=Label(info,text="NOT VALID PREAMP COORDINATES",background='green',foregraound='red',width=80) label.grid(row=1,column=0,columnspan=2) label=Label(info,text="h="+str(Rowtext)+" f="+str(Col),font="symbol",background="green",width=140) label.grid(row=2,column=0,columnspan=2); label=Label(info,text="fail",width=33,borderwidth=2,relief=RIDGE) label.grid(row=3,column=0); label=Label(info,text="Ok",width=33,borderwidth=2,relief=RIDGE) label.grid(row=3,column=1); for i in range(0,len(data)): # pr5;5~int len,data[i] label=Label(info,text="Pattern "+data[i]) label.grid(row=i+4,column=0); for i in range(0,len(datanot)): label=Label(info,text="Pattern "+datanot[i]) label.grid(row=i+4,column=1); def kill(event,self=self,info=info): info.destroy() Ok=Button(info,text="Ok",width=50) Ok.grid(row=max(len(data),len(datanot))+6,column=0,columnspan=2) Ok.bind("",kill) button.bind("",canvas_act) button.bind("",canvas_act_patterns) canv.create_window((adc*8+bls)*15+15,crate*12+12,window=button,height=14,width=14); # print "created" def Button_maker_preamp(self,canv,canvx,canvy,Row,Col,color,data,datanot,string,canvnumber,labeleta,labelfi,labeltitle,truthpatterns): if(Row<21): Rowtext=Row-21 else: Rowtext=Row-20 if (abs(Rowtext)==7): PyCal.update_phys(abs(Rowtext)*2-1,Col*2,8) else: PyCal.update_phys(abs(Rowtext)*2-1,Col*2,1) valid1,crate_old,adc,bls,tower,depth=PyCal.get_adc() bls_table=[37,27,7,18,58,48,38,28,8,17,57,47]; valid2,box,board,pretower,predepth,pat,oldpat=PyCal.get_preamp() if (valid2): # print valid,adc,bls,crate_old button=[] button.append(Button(canv, padx=0,pady=0,background=color)) def canvas_act_patterns(event,self=self,Row=Row,Col=Col,truthpatterns=truthpatterns): if(Row<21): Rowtext=Row-21 else: Rowtext=Row-20 counter=(Row-1)*32+Col-1 info=Toplevel() # info.title("info on "+string) label=Label(info,text="Box="+str(box)+" Board="+str(board),font="Arial",background="green",width=80) label.grid() if valid1: crate=bls_table.index(crate_old) label=Label(info,text="Crate="+str(crate)+" ADC="+str(adc)+" BLS="+str(bls),font="Arial",background="green",width=80) label.grid() else: label=Label(info,text="NOT VALID PREAMP COORDINATES",background='green',foreground='red',width=80) label.grid() label=Label(info,text="h="+str(Rowtext)+" f="+str(Col),font="symbol",background="green",width=140) label.grid() label=Label(info,text="RunI patterns which fire the TT",width=33,borderwidth=2,relief=RIDGE) label.grid() truthlabelpatterns=truthpatterns[counter].split() for i in range(0,int(len(truthlabelpatterns)/5)): label=Label(info,text="Pattern "+truthlabelpatterns[i*5]+' Tower '+truthlabelpatterns[i*5+1]+' Depth '+truthlabelpatterns[i*5+2]+' EM real '+truthlabelpatterns[i*5+3]+ ' EM reference '+truthlabelpatterns[i*5+4]) label.grid(); def kill(event,self=self,info=info): info.destroy() Ok=Button(info,text="Ok",width=25) Ok.grid(row=len(truthlabelpatterns)+4,column=0,columnspan=2) Ok.bind("",kill) def canvas_act(event,self=self,Row=Row,Rowtext=Rowtext,Col=Col,canvx=canvx,canvy=canvy,data=data,datanot=datanot,string=string,labeleta=labeleta,labelfi=labelfi,canvnumber=canvnumber): for eta in range(0,96): # print canvnumber labeleta[10*40+10*96+canvnumber*96+eta].destroy(); self.label_maker_dif(canvx,str(eta),1,eta+1,'lightblue',labeleta,canvnumber*96+10*40+10*96+eta,3,2) for fi in range(0,12): labelfi[10*32+10*12+canvnumber*12+fi].destroy(); self.label_maker_dif(canvy,str(fi),fi+1,1,'lightblue',labelfi,10*32+10*12+canvnumber*12+fi,5,1) if (abs(Rowtext)==7): PyCal.update_phys(abs(Rowtext)*2-1,Col*2,8) else: PyCal.update_phys(abs(Rowtext)*2-1,Col*2,1) valid1,crate_old,adc,bls,tower,depth=PyCal.get_adc() bls_table=[37,27,7,18,58,48,38,28,8,17,57,47]; crate=bls_table.index(crate_old) valid2,box,board,pretower,predepth,pat,oldpat=PyCal.get_preamp() self.label_maker_dif(canvx,str(board),1,board+1,'green',labeleta,10*40+10*96+canvnumber*96+Row,3,2) self.label_maker_dif(canvy,str(box),box+1,1,'green',labelfi,10*32+10*12+canvnumber*12+fi,5,1) # print Rowtext,Col,valid,crate_old,adc,bls info=Toplevel() info.title("info on "+string) label=Label(info,text="Box="+str(box)+" Board="+str(board),font="Arial",background="green",width=80) label.grid(row=2,column=0,columnspan=2) if valid1: label=Label(info,text="Crate="+str(crate)+" ADC="+str(adc)+" BLS="+str(bls),font="Arial",background="green",width=80) label.grid(row=3,column=0,columnspan=2) else: label=Label(info,text="NOT VALID PREAMP COORDINATES",background='green',foregraound='red') label.grid(row=3,column=0,columnspan=2) label=Label(info,text="h="+str(Rowtext)+" f="+str(Col),font="symbol",background="green",width=140) label.grid(row=4,column=0,columnspan=2); label=Label(info,text="fail",width=33,borderwidth=2,relief=RIDGE) label.grid(row=5,column=0); label=Label(info,text="Ok",width=33,borderwidth=2,relief=RIDGE) label.grid(row=5,column=1); for i in range(0,len(data)): # print len,data[i] label=Label(info,text="Pattern "+data[i]) label.grid(row=i+6,column=0); for i in range(0,len(datanot)): label=Label(info,text="Pattern "+datanot[i]) label.grid(row=i+6,column=1); def kill(event,self=self,info=info): info.destroy() Ok=Button(info,text="Ok",width=50) Ok.grid(row=max(len(data),len(datanot))+6,column=0,columnspan=2) Ok.bind("",kill) button[0].bind("",canvas_act) button[0].bind("",canvas_act_patterns) canv.create_window(board*15+15,box*12+12,window=button[0],height=14,width=14); # print "created" def initsigmadefaultelim(self): global sigma sigma=[] # emhot for i in range(0,40): sigma.append(1.0/3) # emlow for i in range(0,40): sigma.append(0.5/3) # emnoise for i in range(0,2): sigma.append(0.3/3) sigma.append(0.09/2) sigma.append(0.09/2) sigma.append(0.09/2) sigma.append(0.11/2) sigma.append(0.13/2) sigma.append(0.15/2) sigma.append(0.17/2) sigma.append(0.19/2) sigma.append(0.20/2) sigma.append(0.21/2) sigma.append(0.22/2) sigma.append(0.23/2) sigma.append(0.24/2) sigma.append(0.25/2) sigma.append(0.26/2) sigma.append(0.27/2) sigma.append(0.28/2) sigma.append(0.29/2) lentemp=len(sigma) for i in range(0,18): sigma.append(sigma[lentemp-i-1]) for i in range(0,2): sigma.append(0.3/3) # emdead for i in range(0,40): sigma.append(0.5/3) # emcalib for i in range(0,40): sigma.append(0.3) # hadhot for i in range(0,40): sigma.append(1.0/3) # hadlow for i in range(0,40): sigma.append(0.5/3) # hadnoise for i in range(0,2): sigma.append(0.3/3) sigma.append(0.09) sigma.append(0.09) sigma.append(0.09) sigma.append(0.11) sigma.append(0.13) sigma.append(0.15) sigma.append(0.16) sigma.append(0.17) sigma.append(0.18) sigma.append(0.19) sigma.append(0.20) sigma.append(0.21) sigma.append(0.22) sigma.append(0.22) sigma.append(0.23) sigma.append(0.23) sigma.append(0.24) sigma.append(0.24) lentemp=len(sigma) for i in range(0,18): sigma.append(sigma[lentemp-i-1]) for i in range(0,2): sigma.append(0.3/3) # haddead for i in range(0,40): sigma.append(0.5/3) # hadcalib for i in range(0,40): sigma.append(0.45) def initsigmadefaultsave(self): global sigma sigma=[] # emhot for i in range(0,40): sigma.append(0.9/3) # emlow for i in range(0,40): sigma.append(0.4/3) # emnoise for i in range(0,2): sigma.append(0.3/3) sigma.append(0.09/2) sigma.append(0.09/2) sigma.append(0.09/2) sigma.append(0.11/2) sigma.append(0.13/2) sigma.append(0.15/2) sigma.append(0.17/2) sigma.append(0.19/2) sigma.append(0.20/2) sigma.append(0.21/2) sigma.append(0.22/2) sigma.append(0.23/2) sigma.append(0.24/2) sigma.append(0.25/2) sigma.append(0.26/2) sigma.append(0.27/2) sigma.append(0.28/2) sigma.append(0.29/2) lentemp=len(sigma) for i in range(0,18): sigma.append(sigma[lentemp-i-1]) for i in range(0,2): sigma.append(0.3/3) # emdead for i in range(0,40): sigma.append(0.5/3) # emcalib for i in range(0,40): sigma.append(0.3) # hadhot for i in range(0,40): sigma.append(0.9/3) # hadlow for i in range(0,40): sigma.append(0.4/3) # hadnoise for i in range(0,2): sigma.append(0.3/3) sigma.append(0.09) sigma.append(0.09) sigma.append(0.09) sigma.append(0.11) sigma.append(0.13) sigma.append(0.15) sigma.append(0.16) sigma.append(0.17) sigma.append(0.18) sigma.append(0.19) sigma.append(0.20) sigma.append(0.21) sigma.append(0.22) sigma.append(0.22) sigma.append(0.23) sigma.append(0.23) sigma.append(0.24) sigma.append(0.24) lentemp=len(sigma) for i in range(0,18): sigma.append(sigma[lentemp-i-1]) for i in range(0,2): sigma.append(0.3/3) # haddead for i in range(0,40): sigma.append(0.5/3) # hadcalib for i in range(0,40): sigma.append(0.3) def label_maker(self,canv,LabelName,Row,Col,color,label,number_of_label,w,h): label[number_of_label]=Label(canv) label[number_of_label]=Label(canv,font=("Times",8),width=w,height=h,text=LabelName,background=color) canv.create_window(Col*16,Row*12,window=label[number_of_label]); def label_maker_dif(self,canv,LabelName,Row,Col,color,label,number_of_label,w,h): label[number_of_label]=Label(canv) label[number_of_label]=Label(canv,font=("Times",8),width=w,height=h,text=LabelName,background=color) canv.create_window(Col*15,Row*12,window=label[number_of_label]); def label_maker_adc(self,canv,LabelName,Row,Col,color,label,number_of_label,w,h,span): label[number_of_label]=Label(canv) label[number_of_label]=Label(canv,font=("Times",8),width=w,height=h,anchor='center',text=LabelName,background=color,relief=RIDGE) canv.create_window(68+Col*120,Row*12,window=label[number_of_label]); def create_base(self,base,basestring,string,i): global baseswitchvar base.append(Toplevel()) basestring.append(string) base[len(base)-1].title(string) def withdraw(self=self,base=base,baseswitchvar=baseswitchvar,index=i): base[index].withdraw() # print baseswitchvar[0].get() baseswitchvar[index].set(1-baseswitchvar[index].get()) base[len(base)-1].protocol('WM_DELETE_WINDOW',withdraw) def create_canvas(self,onebase,labeleta,labelfi,labeltitle): global canv,canvfi,canveta canv.append(Canvas(onebase,width=650,height=390,background='lightgrey')) canvfi.append(Canvas(onebase,width=30,height=390,background='lightblue')) canveta.append(Canvas(onebase,width=650,height=20,background='lightblue')) canv[len(canv)-1].grid(row=2,column=2,rowspan=40,columnspan=32); canvfi[len(canv)-1].grid(row=2,column=1,rowspan=32); canveta[len(canv)-1].grid(row=1,column=2,columnspan=40); number_of_canvas=int(len(labeleta)/40) for fi in range(1,33): labelfi.append([]) self.label_maker(canvfi[len(canvfi)-1],str(fi),fi,1,'lightblue',labelfi,number_of_canvas*32+fi-1,5,1) for eta in range(-20,20): if eta<0: labeleta.append([]) self.label_maker(canveta[len(canveta)-1],str(eta),1,eta+21,'lightblue',labeleta,number_of_canvas*40+eta+20,3,2) else: labeleta.append([]) self.label_maker(canveta[len(canveta)-1],str(eta+1),1,eta+21,'lightblue',labeleta,number_of_canvas*40+eta+20,3,2) labeltitle.append(Label(onebase,text="f,h",font=("symbol",16))); labeltitle[len(labeltitle)-1].grid(row=1,column=1); def create_canvas_bls(self,onebase,labeleta,labelfi,labeltitle): global canv,canvfi,canveta canvfi.append(Canvas(onebase,width=85,height=150,background='lightblue')) canveta.append(Canvas(onebase,width=1445,height=50,background='lightblue')) canv.append(Canvas(onebase,width=1445,height=150,background='lightgrey')) canv[len(canv)-1].grid(row=3,column=2,rowspan=12,columnspan=96); canvfi[len(canv)-1].grid(row=3,column=1,rowspan=12); canveta[len(canv)-1].grid(row=1,column=2,columnspan=96,rowspan=2); number_of_canvas=int((len(labeleta)-40*10)/96) for fi in range(0,12): labelfi.append([]) self.label_maker_dif(canvfi[len(canvfi)-1],str(fi),fi+1,1,'lightblue',labelfi,10*32+number_of_canvas*12+fi,5,1) for adc in range(0,12): labeladc.append([]) self.label_maker_adc(canveta[len(canveta)-1],str(adc),1,adc,'magenta',labeladc,number_of_canvas*8+adc,22,2,12) for bls in range(0,8): labeleta.append([]) self.label_maker_dif(canveta[len(canveta)-1],str(bls),3,adc*8+bls+1,'lightblue',labeleta,10*40+number_of_canvas*96+adc*8+bls,3,2) labeltitle.append(Label(onebase,text="Adc",font=("Arial",16))); labeltitle[len(labeltitle)-1].grid(row=1,column=1); labeltitle.append(Label(onebase,text="Crate/Bls",font=("Arial",16))); labeltitle[len(labeltitle)-1].grid(row=2,column=1); def create_canvas_preamp(self,onebase,labeleta,labelfi,labeltitle): global canv,canveta,canvetatemp,canvtemp # self.scrollbar=Scrollbar(onebase,orient=HORIZONTAL) canvfi.append(Canvas(onebase,width=85,height=150,background='lightblue')) canvetatemp=Canvas(onebase,width=1445,height=20,background='lightblue') canveta.append(canvetatemp) canvtemp=Canvas(onebase,width=1445,height=150,background='lightgrey') canv.append(canvtemp) # if len(args)==1: # canveta[len(canveta)-1].xview(MOVETO,args) # else: # canveta[len(canveta)-1].xview(SCROLL,args) # canveta[len(canv)-1].config(scrollregion=(0,0,8750,150)) # canv[len(canv)-1].config(scrollregion=(0,0,8750,150)) canv[len(canv)-1].grid(row=2,column=2,rowspan=12,columnspan=96); canvfi[len(canv)-1].grid(row=2,column=1,rowspan=12); canveta[len(canv)-1].grid(row=1,column=2,columnspan=96); number_of_canvas=int((len(labeleta)-40*10)/96) for fi in range(0,12): labelfi.append([]) # print len(labelfi) # print "kakaka" self.label_maker_dif(canvfi[len(canvfi)-1],str(fi),fi+1,1,'lightblue',labelfi,10*32+number_of_canvas*12+fi,5,1) for eta in range(0,96): labeleta.append([]) self.label_maker_dif(canveta[len(canveta)-1],str(eta),1,eta+1,'lightblue',labeleta,10*40+number_of_canvas*96+eta,3,2) # print len(labelfi),len(labeleta) labeltitle.append(Label(onebase,text="box;board",font=("arial",16))); labeltitle[len(labeltitle)-1].grid(row=1,column=1); # self.scrollbar.grid(row=14,col=4,ipadx=100) # self.scrollbar['command']=self.link # canveta[len(canveta)-1].xview(MOVETO,0.5) # self.canvetatemp['xscrollcommand']=self.scrollbar.set # self.canvtemp['xscrollcommand']=self.scrollbar.set # self.scrollbar.grid(row=15,col=4,ipadx=100) # canveta[len(canveta)-1].xview(MOVETO,0.5) # self.canvetatemp['xscrollcommand']=self.scrollbar.set # canvtemp['xscrollcommand']=self.scrollbar.set def choice_check(self,menuchoice,onebase,string,i): global canvetatemp,canvtemp,baseswitchvar def switch(self=self,onebase=onebase,baseswitchvartemp=baseswitchvar[i]): if (baseswitchvartemp.get()==0): onebase.withdraw() else: onebase.deiconify() menuchoice.add_checkbutton(label=string,variable=baseswitchvar[i],command=switch) def pulser_check(self,menupulser,pattern,patternvar): patternvar[pattern-1]=IntVar() menupulser.add_checkbutton(label="Pattern Run I "+str(pattern),variable=patternvar[pattern-1],font=("Times",9)) def pulser_all(self,menupulser,patternvar,allpatternvar,nonepatternvar): allpatternvar[0]=IntVar() def switch(self=self,patternvar=patternvar,allpatternvar=allpatternvar,nonepatternvar=nonepatternvar): if (allpatternvar[0].get()==1): nonepatternvar[0].set(0) for pattern in range(0,32): patternvar[pattern].set(1) menupulser.add_checkbutton(label="All Run I Patterns",variable=allpatternvar[0],font=("Times",9),command=switch) def pulser_none(self,menupulser,patternvar,allpatternvar,nonepatternvar): nonepatternvar[0]=IntVar() def switch(self=self,patternvar=patternvar,allpatternvar=allpatternvar,nonepatternvar=nonepatternvar): if (nonepatternvar[0].get()==1): allpatternvar[0].set(0) for pattern in range(0,32): patternvar[pattern].set(0) menupulser.add_checkbutton(label="None Run I Patterns",variable=nonepatternvar[0],font=("Times",9),command=switch) def filesaving(self): saving=Toplevel(); saving.title("Saving files") savinglabel=Label(saving,text="Files output.out and output.pic have been saved") savinglabel.grid() Ok=Button(run,text="Ok") Ok.grid(row=1,column=0) def kill(event,self=self,saving=saving): saving.destroy() Ok.bind("",kill) def filerun(self,dealing,runnumber,directory): run=Toplevel(); run.title("Run number"); if (dealing=='Save'): comment=Label(run,text="Input the run number:") comment.grid() v=StringVar(); fileentry=Entry(run,textvariable=v) fileentry.grid(row=0,col=1) Ok=Button(run,text="Ok") Ok.grid(row=1,column=0,columnspan=2) def kill(event,self=self,run=run,dealing=dealing,directory=directory,fileentry=fileentry,runnumber=runnumber): runnumber=fileentry.get() directory[0]='Run'+runnumber+'/' run.destroy() # print directory[0] if (os.path.exists(directory[0])): text.tag_config("curred",foreground="red") text.insert(END,'Run exists!!! No access!!! Setting to default!!!\n',"curred") text.yview(MOVETO,1.0) directory[0]='' else: text.insert(END,"Saving run "+runnumber+'\n') text.yview(MOVETO,1.0) directory[0]='Run'+runnumber+'/' os.mkdir(directory[0]) for i in range(0,100): if (i<10): itext='0'+str(i); else: itext=str(i) if (os.path.exists('pick_off_'+itext+'.txt')): shutil.copy('pick_off_'+itext+'.txt',directory[0]) shutil.copy('precision_'+itext+'.txt',directory[0]) if(os.path.exists('pick_off_last.txt')): shutil.copy('pick_off_last.txt',directory[0]) shutil.copy('pick_off_last.txt',directory[0]) text.tag_config("curmagenta",foreground="magenta") text.insert(END,'Done!\n',"curmagenta") text.yview(MOVETO,1.0) Ok.bind("",kill) else: label=Label(run,text="The list of available runs") label.grid(columnspan=2) a=os.listdir('.') scrollbar=Scrollbar(run,orient=VERTICAL) listbox=Listbox(run,yscrollcommand=scrollbar.set) scrollbar.config(command=listbox.yview) scrollbar.grid(row=1,col=1,ipady=30) for i in range(0,len(a)): if (a[i][0:3]=='Run') and (a[i]!='Runme.sh'): listbox.insert(END,a[i]) listbox.grid(row=1,col=0,columnspan=2) def select(event,self=self,run=run,listbox=listbox,runnumber=runnumber,text=text,directory=directory): if len(listbox.curselection())!=0: directory[0]=listbox.get(int(listbox.curselection()[0]))+'/' run.destroy() text.insert(END,'Opening the Run... Now you can analyze it. \n For that, select File/Analyze.\n') text.yview(MOVETO,1.0) else: warning=Toplevel() warning.title("Warning") label=Label(warning,text="Run not selected") label.grid() # print directory[0] # if (os.path.exists(directory[0])!='True'): # text.tag_config("curred",foreground="red") # text.insert(END,'Wrong Run Number!!!\n',"curred") # directory[0]='' # else: def cancel(event,self=self): run.destroy() Ok=Button(run,text='Ok') Ok.grid(row=len(a),col=0) Ok.bind("",select) listbox.bind("",select) Cancel=Button(run,text='Cancel') Cancel.grid(row=len(a),col=1) Cancel.bind("",cancel) def thresholds(self): global sigma thresholds_button=[] thresholds_var=[] thresholdsentry=[] thresholds_wind=Toplevel() thresholds_wind.title("Thresholds") scrollbar_thresholds=Scrollbar(thresholds_wind,orient=VERTICAL) thresholds_canvas=Canvas(thresholds_wind,yscrollcommand=scrollbar_thresholds.set,width=1000,height=500) thresholds_canvas.config(scrollregion=(0,0,2000,1030)) thresholds_canvas.grid(row=1,col=0,columnspan=20,sticky='W') scrollbar_thresholds.config(command=thresholds_canvas.yview) scrollbar_thresholds.grid(row=1,col=22,ipady=100) label_emhot=Label(thresholds_wind,text="EM hot",font=("Arial",15),relief=RIDGE,width=9) label_emlow=Label(thresholds_wind,text="EM low",font=("Arial",15),relief=RIDGE,width=9) label_emnoise=Label(thresholds_wind,text="EM noise",font=("Arial",15),relief=RIDGE,width=9) label_emdead=Label(thresholds_wind,text="EM dead",font=("Arial",15),relief=RIDGE,width=9) label_emcalib=Label(thresholds_wind,text="EM calib",font=("Arial",15),relief=RIDGE,width=9) label_hadhot=Label(thresholds_wind,text="HAD hot",font=("Arial",15),relief=RIDGE,width=9) label_hadlow=Label(thresholds_wind,text="HAD low",font=("Arial",15),relief=RIDGE,width=9) label_hadnoise=Label(thresholds_wind,text="HAD noise",font=("Arial",15),relief=RIDGE,width=9) label_haddead=Label(thresholds_wind,text="HAD dead",font=("Arial",15),relief=RIDGE,width=9) label_hadcalib=Label(thresholds_wind,text="HAD calib",font=("Arial",15),relief=RIDGE,width=9) label_emhot.grid(col=0,row=0,columnspan=2) label_emlow.grid(col=2,row=0,columnspan=2) label_emnoise.grid(col=4,row=0,columnspan=2) label_emdead.grid(col=6,row=0,columnspan=2) label_emcalib.grid(col=8,row=0,columnspan=2) label_hadhot.grid(col=10,row=0,columnspan=2) label_hadlow.grid(col=12,row=0,columnspan=2) label_hadnoise.grid(col=14,row=0,columnspan=2) label_haddead.grid(col=16,row=0,columnspan=2) label_hadcalib.grid(col=18,row=0,columnspan=2) for i in range(0,400): Col=2*int(i/40) Row=i-Col*20+1 if(Row<21): Rowtext=Row-21 else: Rowtext=Row-20 thresholds_button.append(Label(thresholds_canvas,text="h="+str(Rowtext),font=("Symbol",8))) thresholds_canvas.create_window(25+Col*50,25+(Row-1)*25,window=thresholds_button[i],anchor="c") # thresholds_button[i].grid(row=Row,col=Col) thresholds_var.append(StringVar()); Entry(thresholds_canvas) thresholdsentry.append(Entry(thresholds_canvas,textvariable=thresholds_var[i],font=("Arial",8),width=5)) thresholdsentry[i].delete(0,END) thresholdsentry[i].insert(END,sigma[i]) thresholds_canvas.create_window(25+(Col+1)*50,25+(Row-1)*25,window=thresholdsentry[i],anchor="c") # thresholdsentry[i].grid(row=Row,col=Col+1) Ok=Button(thresholds_wind,text="Ok") # thresholds_canvas.create_window(200,1050,window=Ok) Ok.grid(column=0,columnspan=8,row=2) def kill(event,self=self,thresholds_button=thresholds_button,thresholds_wind=thresholds_wind,thresholdsentry=thresholdsentry): global sigma for i in range(0,400): sigma[i]=float(thresholdsentry[i].get()) thresholds_wind.destroy() Ok.bind("",kill) Cancel=Button(thresholds_wind,text="Cancel") Cancel.grid(column=8,columnspan=8,row=2) # thresholds_canvas.create_window(500,1050,window=Cancel) def CancelNoKill(event,self=self,thresholds_button=thresholds_button,thresholds_wind=thresholds_wind): thresholds_wind.destroy() Cancel.bind("",CancelNoKill) def other(self): global email,elim_crosstalk,save_crosstalk,send_email,save_elim,elim_elim,sigma other_wind=Toplevel(); other_wind.title("Other settings") email_button=Label(other_wind,text="Input the email address of the big boss:") email_button.grid() email_var=StringVar(); emailentry=Entry(other_wind,textvariable=v) emailentry.delete(0,END) emailentry.insert(END,email) emailentry.grid(row=0,col=1) button_send_email=Checkbutton(other_wind,text="Send e-mails:",variable=send_email) button_send_email.grid(row=1,column=0,columnspan=2) button_elim_crosstalk=Checkbutton(other_wind,text="Eliminate crosstalk",variable=elim_crosstalk) button_elim_crosstalk.grid(row=2,column=0,columnspan=2) button_save_crosstalk=Checkbutton(other_wind,text="Save crosstalk",variable=save_crosstalk) button_save_crosstalk.grid(row=3,column=0,columnspan=2) button_save_elim=Checkbutton(other_wind,text="Default save-crosstalk thresholds",variable=save_elim) button_save_elim.grid(row=4,column=0,columnspan=2) button_elim_elim=Checkbutton(other_wind,text="Default eliminating thresholds",variable=elim_elim) button_elim_elim.grid(row=5,column=0,columnspan=2) Ok=Button(other_wind,text="Ok") Ok.grid(row=6,column=0,columnspan=2) def kill(event,self=self,email_button=email_button,other_wind=other_wind,emailentry=emailentry,save_elim=save_elim,elim_elim=elim_elim): global email,sigma other_wind.withdraw() email=emailentry.get() if (send_email.get()): text.insert(END,"E-mail will be sent!\n") text.insert(END,'E-mail of big boss is ') text.insert(END,email+'\n') else: text.insert(END,"Attention: e-mail won't be sent!\n") if (elim_crosstalk.get() and not save_crosstalk.get()): text.insert(END,"Cross-talk will be eliminated!\n") if (not elim_crosstalk.get() and save_crosstalk.get()): text.insert(END,"Cross-talk file will be created!\n") if (elim_crosstalk.get() and save_crosstalk.get()): text.tag_config("curred",foreground="red") text.insert(END,"Don't choose 'save' and 'eliminate' crosstalk at the same time!\n","curred") if (not elim_crosstalk.get() and not save_crosstalk.get()): text.insert(END,"Cross-talk: no elimination, no dumping!\n") if(save_elim.get() and not elim_elim.get()): self.initsigmadefaultsave() text.insert(END,"Crosstalk saving default settings have been chosen!\n") if(not save_elim.get() and elim_elim.get()): self.initsigmadefaultelim() text.insert(END,"Crosstalk eliminating default settings have been chosen!\n") if(save_elim.get() and elim_elim.get()): text.tag_config("curred",foreground="red") text.insert(END,"Don't choose 'save' and 'eliminate' threshold settings at the same time!\n","curred") if(not save_elim.get() and not elim_elim.get()): text.insert(END,"User settings have been chosen!\n") text.yview(MOVETO,1.0) Ok.bind("",kill) def run(self): global canv,canveta,canvfi,directory,base,elim_crosstalk,save_crosstalk,scrollbar_diagnostics,send_email,labeltitle # checking if directory==['']: text.tag_config("curred",foreground="red") text.insert(END,'Run not chosen! Please choose the run!!! For that File/Open.\n',"curred") text.yview(MOVETO,1.0) return # destroying the canvas from last run for i in range(0,len(canv)): canv[i].destroy(); canveta[i].destroy(); canvfi[i].destroy(); labeltitle[i].destroy(); # initializing the new ones canv=[] canveta=[] canvfi=[] labeleta=[] labelfi=[] labeltitle=[] # initializing canvas text.tag_config("curmagenta",foreground="magenta") text.insert(END,'Analyzing Run ...'+directory[0][3:-1]+'\n',"curmagenta") text.insert(END,' Wait for 40 seconds!\n') text.yview(MOVETO,1.0) for i in range(0,int(len(base)/3)): self.create_canvas(base[i],labeleta,labelfi,labeltitle) # initializing bls canvas for i in range(int(len(base)/3),2*int(len(base)/3)): self.create_canvas_bls(base[i],labeleta,labelfi,labeltitle) # initializing preamp canvas for i in range(2*int(len(base)/3),len(base)): self.create_canvas_preamp(base[i],labeleta,labelfi,labeltitle) # print len(base),len(canv),len(canveta),len(canvfi),len(labeleta),len(labelfi) # for i in range(0,int(len(base)/2)): # canv.append(Canvas(base[i],width=610,height=390,background='lightblue')) # canv[len(canv)-1].grid(row=2,column=2,rowspan=40,columnspan=32); # for i in range(int(len(base)/2),len(base)): # canv.append(Canvas(base[i],width=8000,height=140,background='lightblue')) # canv[len(canv)-1].grid(row=2,column=2,rowspan=12,columnspan=96); # analyzing self.computing(base,basestring,canv,canvfi,canveta,labeleta,labelfi,labeltitle,sigma,output,text,runnumber,email,patternvar_real,patternvar_templates,directory,elim_crosstalk,save_crosstalk,scrollbar_diagnostics,send_email); def openrun(self): global runnumber,directory dealing='Open' self.filerun(dealing,runnumber,directory) def saverun(self): global runnumber,directory dealing='Save' self.filerun(dealing,runnumber,directory) def create_diagnostics(self): global output,text,scrollbar_diagnostics output=Toplevel() output.maxsize(600,600) output.title("Diagnostics output") scrollbar_diagnostics=Scrollbar(output,orient=VERTICAL) legendblue=Text(output,foreground='blue',background='white',height=1) legendpink=Text(output,foreground='pink',background='white',height=1) legendred=Text(output,foreground='red',background='white',height=1) legendblue.insert(END,"blue: failed for at least one, but less, than 6 patterns") legendpink.insert(END,"pink: failed for at least 6, but not all patterns") legendred.insert(END,"red: failed for all patterns") textmain=Text(output,foreground='red',background='lightgreen',height=16) textmain.insert(END,"\n Welcome to L1Cal Pulser Diagnostics Tool!!!\n\n Please, be sure, then there is no beam and the pedestals are taken!!!\n") textmain.insert(END,"\n Select 'File/Read the run' and follow instructions\n") textmain.insert(END," Save the run (File/Save). \n You will be asked to enter the run number \n Read it from the taker. \n Then run the tool by selecting File/Analyze.\n") textmain.insert(END," After you are set, wait for 40 seconds until\n you get the 'Done!' message in this window.\n") textmain.insert(END," Meanwhile the analysis will be carried out \n and an e-mail to administrator will be\n") textmain.insert(END," sent. \n\n See the legend downstairs to understand better!") textmain.grid(row=0,col=0,columnspan=2) legendblue.grid(row=1,col=0,columnspan=2) legendpink.grid(row=2,col=0,columnspan=2) legendred.grid(row=3,col=0,columnspan=2) text=Text(output,foreground='black',yscrollcommand=scrollbar_diagnostics.set,height=17) text.grid(row=4,col=1) scrollbar_diagnostics.grid(row=4,col=0,ipady=100) scrollbar_diagnostics.configure(command=text.yview) def email(self,email,fileout,filepic,fileinfo): message=StringIO() writer=MimeWriter.MimeWriter(message) writer.addheader('Subject','New L1Cal Diagnostics files!') writer.addheader('To',email) writer.startmultipartbody('mixed') # print fileout,filepic,fileinfo part=writer.nextpart() body=part.startbody('text/plain') part=writer.nextpart() part.addheader('Content-Transfer-Encoding','base64') body=part.startbody('text/plain;name =' + fileout) base64.encode(open(fileout,'rb'),body) part=writer.nextpart() part.addheader('Content-Transfer-Encoding','base64') body=part.startbody('text/plain;name =' + filepic) base64.encode(open(filepic,'rb'),body) part=writer.nextpart() part.addheader('Content-Transfer-Encoding','base64') body=part.startbody('text/plain;name =' + fileinfo) base64.encode(open(fileinfo,'rb'),body) writer.lastpart() smtp=smtplib.SMTP('smtp.fnal.gov') smtp.sendmail(email,email,message.getvalue()) smtp.quit() def init(self): global email,sigma,elim_crosstalk,save_crosstalk,send_email,save_elim,elim_elim elim_crosstalk=IntVar() elim_crosstalk.set(1) save_crosstalk=IntVar() save_crosstalk.set(0) save_elim=IntVar() save_elim.set(0) elim_elim=IntVar() elim_elim.set(1) send_email=IntVar() send_email.set(1) sigma=[] settings=open('L1CalSetDiag.dat','r') set=settings.readlines(); email=set[0].split()[1] for i in range(0,400): sigma.append(float(set[i+1].split()[1])) def save(self): global email,sigma settings=open('L1CalSetDiag.dat','w') settings.write('email '+str(email)+'\n') for i in range(0,400): settings.write('sigma'+str(i)+' '+str(sigma[i])+'\n') settings.close() text.insert(END,"Settings are saved in L1CalSetDiag.dat\n") text.yview(MOVETO,1.0) # saving=Toplevel(); # savinglabel=Label(saving,text="Settings are saved in L1CalSetDiag.dat") # savinglabel.grid() # Ok=Button(saving,text="Ok") # Ok.grid(row=1,column=0) # def kill(event,self=self,saving=saving): # saving.destroy() # Ok.bind("",kill) def about(self): about=Toplevel() about.title("L1Cal Pulser Tool") abouttitle=Label(about,text="L1Cal Pulser Tool") aboutversion=Label(about,text="Version 2.0") aboutcontact=Label(about,text="Authors: Peter Renkel (renkel@fnal.gov), Rahmi Unalan (unalan@fnal.gov)") aboutlabel=Label(about,text="i",font=("Arial",60),width=2) def kill(): about.destroy() Ok=Button(about,text='Ok',command=kill) abouttitle.grid(row=10,column=100,sticky='nsew') aboutlabel.grid(row=1,column=50,rowspan=30,columnspan=20) aboutversion.grid(row=20,column=100,sticky='nsew') aboutcontact.grid(row=30,column=100,sticky='nsew') Ok.grid(row=45,column=100,sticky='nsew') # __doc__='L1CalPulser' # aboutstring=HelpDialog(PulserGui,__doc__) def read(self): reading=Toplevel() warning1=Label(reading,text="Do you really want to start running? Ask the captain if there is no beam!",foreground='red') warning2=Label(reading,text="If the beam is on, don't do it!!!",foreground='red') def Cancel_act(self=self,reading=reading): reading.destroy(); def Ok_act(self=self,reading=reading): reading.destroy() self.Runme() Ok=Button(reading,text="Ok",command=Ok_act) Cancel=Button(reading,text="Cancel",command=Cancel_act) warning1.grid(row=1,col=0,columnspan=2) warning2.grid(row=2,col=0,columnspan=2) Ok.grid(row=3,column=0) Cancel.grid(row=3,column=1) def Runme(self): text.insert(END,'Reading the run started!\n') text.insert(END,'Now, please go to program "taker": Modify/ChangeTrigger.\n') text.insert(END,'Choose ... Then, press "start" and write any comments you wish\n') text.insert(END,'Find the program "rampwatcher" (left screen) and "coor" (big screen on top) \n') text.insert(END,'The "coor" should show nice patterns\n') text.insert(END,'The pulsing is finished when the "ramp watcher"\n') text.insert(END,'shows 32 patterns and at least 500 events\n') text.insert(END,'return to the menu from which this program was called. Press Control C') text.insert(END,'You will see the message "done" in this window\n') text.yview(MOVETO,1.0) output.update(); os.system('./Runme.sh') dealing='Save' a=open('pick_off_00.txt','r'); a_line=a.readlines() runnumber=float(a_line[0].split()[2]) directory='Run'+str(runnumber) text.insert(END,'Saving the run '+str(runnumber)+'\n') text.insert(END,'Done!\n') self.filerun(dealing,runnumber,directory) text.yview(MOVETO,1.0) class Second: root=Tk(); root.title("The L1Cal Pulser Diagnostics Main Menu") root.minsize(350,35) root.maxsize(100000,35) # gui=D0Gui("L1CalPulser",__doc__) # root.size(350.25) app=PulserGui(root) root.mainloop();