File indexing completed on 2023-03-17 10:40:56
0001
0002 from __future__ import print_function
0003 import string,time,thread,random,math,sys
0004
0005
0006 MINRES=0.02
0007 SEED=-1
0008 ENDCAPSINGLE=0
0009 NPOINT=3
0010 eta=[]
0011 eta_ev=[]
0012 res=[]
0013
0014 eta.append((0.+0.261)/2)
0015 eta.append((0.957+0.783)/2)
0016 eta.append((1.479+1.305)/2)
0017
0018
0019
0020
0021 def miscalib(lumi,endcap,z,etaindex,phiindex,randval):
0022 global MINRES,ENDCAPSINGLE,NPOINT
0023 if endcap:
0024 modindex=etaindex
0025 crysindex=phiindex
0026
0027 if lumi==0:
0028 if randval==1:
0029 return random.gauss(1,MINRES)
0030
0031 else:
0032 return MINRES
0033 if endcap != 1:
0034
0035
0036
0037
0038
0039 etacur=(etaindex-0.5)*0.0174
0040 eta_ev.append(300./5*lumi)
0041 eta_ev.append(270./5*lumi)
0042 eta_ev.append(170./5*lumi)
0043 res.append(math.sqrt(6.19**2/eta_ev[0]+0.12**2))
0044 res.append(math.sqrt(10.7**2/eta_ev[1]+0.27**2))
0045 res.append(math.sqrt(15**2/eta_ev[2]+0.42**2))
0046
0047
0048 for ieta in range(0,NPOINT):
0049 if eta[ieta]> etacur:
0050 break
0051 indexmin=ieta-1
0052 indexmax=ieta
0053
0054 if(indexmin<0):
0055 indexmin=indexmin+1
0056 indexmax=indexmax+1
0057
0058 real_res=res[indexmin]+(etacur-eta[indexmin])*(res[indexmax]-res[indexmin])/(eta[indexmax]-eta[indexmin])
0059 real_res=real_res/100
0060 if real_res>MINRES:
0061 real_res=MINRES
0062 if randval==1:
0063 return random.gauss(1,real_res)
0064 else:
0065 return real_res
0066 if endcap:
0067 if ENDCAPSINGLE==0:
0068
0069 ENDCAPSINGLE=miscalib(lumi,0,1,85,1,0)
0070 if randval==1:
0071 return random.gauss(1,ENDCAPSINGLE)
0072 else:
0073 return ENDCAPSINGLE
0074
0075
0076
0077
0078 if len(sys.argv)==1:
0079 print('Usage: '+sys.argv[0]+' <barrel|endcap> <lumi> <filename> [MINRES=0.02] [SEED=random]')
0080 print(' put lumi=0 for precalibration values (random at MINRES)')
0081 sys.exit(1)
0082
0083 if sys.argv[1]=='barrel':
0084 endcap=0
0085 elif sys.argv[1]=='endcap':
0086 endcap=1
0087 else:
0088 print('please specify one of <barrel|endcap>')
0089 sys.exit(1)
0090
0091 if endcap==1:
0092
0093 ne_z=[]
0094 ne_mod=[]
0095 ne_xtal=[]
0096 necells=0
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110 lumi=string.atof(sys.argv[2])
0111
0112 if lumi<0:
0113 print('lumi = '+str(lumi)+' not valid')
0114 sys.exit(1)
0115
0116 fileout=sys.argv[3]
0117
0118 if len(sys.argv)>=5:
0119 MINRES=string.atof(sys.argv[4])
0120
0121 print('Using minimal resolution: '+str(MINRES))
0122
0123 if len(sys.argv)>=6:
0124 SEED=string.atoi(sys.argv[5])
0125 print('Using fixed seed for random generation: '+str(SEED))
0126 random.seed(SEED)
0127
0128
0129 xmlfile=open(fileout,'w')
0130
0131 xmlfile.write('<?xml version="1.0" ?>\n')
0132 xmlfile.write('\n')
0133 xmlfile.write('<CalibrationConstants>\n')
0134 if endcap==0:
0135 xmlfile.write(' <EcalBarrel>\n')
0136 else:
0137 xmlfile.write(' <EcalEndcap>\n')
0138
0139 mineta=1
0140 minphi=1
0141 if endcap==0:
0142 maxeta=85
0143 maxphi=360
0144 else:
0145 maxeta=100
0146 maxphi=100
0147
0148 count=0
0149 for zindex in (-1,1):
0150 for etaindex in range(mineta,maxeta+1):
0151 for phiindex in range(minphi,maxphi+1):
0152 miscal_fac=miscalib(lumi,endcap,zindex,etaindex,phiindex,1)
0153
0154 if endcap==0:
0155 if zindex==-1:
0156 line=' <Cell eta_index="'+str(-etaindex)+'" phi_index="'+str(phiindex)+'" scale_factor="'+str(miscal_fac)+'"/>\n'
0157 xmlfile.write(line)
0158 count=count+1
0159 else:
0160 line=' <Cell eta_index="'+str(+etaindex)+'" phi_index="'+str(phiindex)+'" scale_factor="'+str(miscal_fac)+'"/>\n'
0161 xmlfile.write(line)
0162 count=count+1
0163 else:
0164 goodxtal=1
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176 line=' <Cell x_index="'+str(etaindex)+'" y_index="'+str(phiindex)+'" z_index="'+str(zindex)+'" scale_factor="'+str(miscal_fac)+'"/>\n'
0177
0178 xmlfile.write(line)
0179 count=count+1
0180
0181
0182
0183
0184
0185
0186 if endcap==0:
0187 xmlfile.write(' </EcalBarrel>\n')
0188 else:
0189 xmlfile.write(' </EcalEndcap>\n')
0190 xmlfile.write('</CalibrationConstants>\n')
0191 xmlfile.close()
0192 print('File '+fileout+' written with '+str(count)+' lines')
0193
0194
0195
0196