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