File indexing completed on 2024-04-06 11:57:33
0001
0002 from __future__ import print_function
0003 import string,time,thread,random,math,sys
0004
0005
0006 MINRES=0.04
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 miscalibecal(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
0030 if endcap != 1:
0031 gauss_smear=0.014+(etaindex-1)*(0.022-0.014)/(85.-1.)
0032 else:
0033 gauss_smear=MINRES
0034 return random.gauss(1,gauss_smear)
0035
0036 else:
0037 return MINRES
0038 if endcap != 1:
0039
0040
0041
0042
0043
0044 etacur=(etaindex-0.5)*0.0174
0045 eta_ev.append(300./5*lumi)
0046 eta_ev.append(270./5*lumi)
0047 eta_ev.append(170./5*lumi)
0048 res.append(math.sqrt(6.19**2/eta_ev[0]+0.12**2))
0049 res.append(math.sqrt(10.7**2/eta_ev[1]+0.27**2))
0050 res.append(math.sqrt(15**2/eta_ev[2]+0.42**2))
0051
0052
0053 for ieta in range(0,NPOINT):
0054 if eta[ieta]> etacur:
0055 break
0056 indexmin=ieta-1
0057 indexmax=ieta
0058
0059 if(indexmin<0):
0060 indexmin=indexmin+1
0061 indexmax=indexmax+1
0062
0063 real_res=res[indexmin]+(etacur-eta[indexmin])*(res[indexmax]-res[indexmin])/(eta[indexmax]-eta[indexmin])
0064 real_res=real_res/100
0065 if real_res>MINRES:
0066 real_res=MINRES
0067 if randval==1:
0068 return random.gauss(1,real_res)
0069 else:
0070 return real_res
0071 if endcap:
0072 if ENDCAPSINGLE==0:
0073
0074 ENDCAPSINGLE=miscalibecal(lumi,0,1,85,1,0)
0075 if randval==1:
0076 return random.gauss(1,ENDCAPSINGLE)
0077 else:
0078 return ENDCAPSINGLE
0079
0080
0081 def miscalibhcal(lumi,det,etaindex,phiindex,depth,randval):
0082 global MINRES,NPOINT
0083
0084 if lumi==0:
0085 if randval==1:
0086 return random.gauss(1.1,MINRES)
0087
0088 else:
0089 return MINRES
0090 elif lumi==1:
0091 if abs(etaindex)<=11:
0092 if randval==1:
0093 return random.gauss(1,0.04)
0094 else:
0095 return 0.04
0096 elif abs(etaindex)<=16:
0097 if randval==1:
0098 return random.gauss(1,0.03)
0099 else:
0100 return 0.03
0101 else:
0102 if randval==1:
0103 return random.gauss(1,0.02)
0104 else:
0105 return 0.02
0106 elif lumi==10:
0107 if abs(etaindex)<=5:
0108 if randval==1:
0109 return random.gauss(1,0.03)
0110 else:
0111 return 0.03
0112 if abs(etaindex)<=11:
0113 if randval==1:
0114 return random.gauss(1,0.025)
0115 else:
0116 return 0.025
0117 elif abs(etaindex)<=16:
0118 if randval==1:
0119 return random.gauss(1,0.014)
0120 else:
0121 return 0.014
0122 elif abs(etaindex)<=20:
0123 if randval==1:
0124 return random.gauss(1,0.01)
0125 else:
0126 return 0.01
0127 else:
0128 if randval==1:
0129 return random.gauss(1,0.02)
0130 else:
0131 return 0.02
0132 else:
0133 print('lumi must be 0, 1 or 10')
0134
0135
0136
0137 if len(sys.argv)==1:
0138 print('Usage: '+sys.argv[0]+' <ecalbarrel|ecalendcap|HCAL> <lumi> <filename> <validcell for hcal> [MINRES=0.02] [SEED=random]')
0139 print(' put lumi=0 for precalibration values (CSA07)')
0140 sys.exit(1)
0141
0142 ecalbarrel=0
0143 ecalendcap=0
0144 hcal=0
0145
0146 if sys.argv[1]=='ecalbarrel':
0147
0148 ecalbarrel=1
0149 elif sys.argv[1]=='ecalendcap':
0150
0151 ecalendcap=1
0152 elif sys.argv[1]=='HCAL':
0153 hcal=1
0154 else:
0155 print('please specify one of <barrel|endcap|HCAL>')
0156 sys.exit(1)
0157
0158 lumi=string.atof(sys.argv[2])
0159
0160 if lumi<0:
0161 print('lumi = '+str(lumi)+' not valid')
0162 sys.exit(1)
0163
0164 fileout=sys.argv[3]
0165
0166 if len(sys.argv)>=5:
0167 validcell=sys.argv[4]
0168
0169
0170
0171
0172
0173
0174
0175 if hcal==1:
0176
0177
0178 hcalcell=open(validcell,'r')
0179 hcal_det=[]
0180 hcal_eta=[]
0181 hcal_phi=[]
0182 hcal_depth=[]
0183 hcalcells=0
0184
0185 for line in hcalcell:
0186 curr_list=line.split()
0187 if curr_list[0]=="#":
0188
0189 continue
0190 hcal_eta.append(string.atoi(curr_list[0]))
0191 hcal_phi.append(string.atoi(curr_list[1]))
0192 hcal_depth.append(string.atoi(curr_list[2]))
0193 hcal_det.append(curr_list[3])
0194 hcalcells=hcalcells+1
0195
0196 hcalcell.close()
0197 print('Read ',hcalcells,' valid cells for hcal')
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213 if len(sys.argv)>=6:
0214 MINRES=string.atof(sys.argv[5])
0215
0216 if (hcal==0) or (lumi==0):
0217 print('Using minimal resolution: '+str(MINRES))
0218
0219 if len(sys.argv)>=7:
0220 SEED=string.atoi(sys.argv[6])
0221 print('Using fixed seed for random generation: '+str(SEED))
0222 random.seed(SEED)
0223
0224
0225 txtfile=open(fileout+'.txt','w')
0226 xmlfile=open(fileout+'.xml','w')
0227 xmlfileinv=open('inv_'+fileout+'.xml','w')
0228
0229 xmlfile.write('<?xml version="1.0" ?>\n')
0230 xmlfile.write('\n')
0231 xmlfile.write('<CalibrationConstants>\n')
0232
0233 xmlfileinv.write('<?xml version="1.0" ?>\n')
0234 xmlfileinv.write('\n')
0235 xmlfileinv.write('<CalibrationConstants>\n')
0236
0237 if ecalbarrel==1:
0238 xmlfile.write(' <EcalBarrel>\n')
0239 xmlfileinv.write(' <EcalBarrel>\n')
0240 elif ecalendcap==1:
0241 xmlfile.write(' <EcalEndcap>\n')
0242 xmlfileinv.write(' <EcalEndcap>\n')
0243 elif hcal==1:
0244 xmlfile.write(' <Hcal>\n')
0245 xmlfileinv.write(' <Hcal>\n')
0246
0247
0248 count=0
0249 if ecalbarrel==1 or ecalendcap==1:
0250
0251
0252 mineta=1
0253 minphi=1
0254 if ecalbarrel==1:
0255 maxeta=85
0256 maxphi=360
0257 else:
0258 maxeta=100
0259 maxphi=100
0260
0261 for zindex in (-1,1):
0262 for etaindex in range(mineta,maxeta+1):
0263 for phiindex in range(minphi,maxphi+1):
0264 miscal_fac=miscalibecal(lumi,ecalendcap,zindex,etaindex,phiindex,1)
0265
0266 if ecalbarrel==1:
0267 if zindex==-1:
0268 line=' <Cell eta_index="'+str(-etaindex)+'" phi_index="'+str(phiindex)+'" scale_factor="'+str(miscal_fac)+'"/>\n'
0269 lineinv=' <Cell eta_index="'+str(-etaindex)+'" phi_index="'+str(phiindex)+'" scale_factor="'+str(1./miscal_fac)+'"/>\n'
0270 txtline=str(etaindex)+' '+str(phiindex)+' '+str(miscal_fac)+'\n'
0271 xmlfile.write(line)
0272 xmlfileinv.write(lineinv)
0273 txtfile.write(txtline)
0274 count=count+1
0275 else:
0276 line=' <Cell eta_index="'+str(+etaindex)+'" phi_index="'+str(phiindex)+'" scale_factor="'+str(miscal_fac)+'"/>\n'
0277 lineinv=' <Cell eta_index="'+str(+etaindex)+'" phi_index="'+str(phiindex)+'" scale_factor="'+str(1./miscal_fac)+'"/>\n'
0278 txtline=str(-etaindex)+' '+str(phiindex)+' '+str(miscal_fac)+'\n'
0279 xmlfile.write(line)
0280 xmlfileinv.write(lineinv)
0281 txtfile.write(txtline)
0282 count=count+1
0283 else:
0284 goodxtal=1
0285 line=' <Cell x_index="'+str(etaindex)+'" y_index="'+str(phiindex)+'" z_index="'+str(zindex)+'" scale_factor="'+str(miscal_fac)+'"/>\n'
0286 lineinv=' <Cell x_index="'+str(etaindex)+'" y_index="'+str(phiindex)+'" z_index="'+str(zindex)+'" scale_factor="'+str(1./miscal_fac)+'"/>\n'
0287 txtline=str(etaindex)+' '+str(phiindex)+' '+str(zindex)+' '+str(miscal_fac)+'\n'
0288 xmlfile.write(line)
0289 xmlfileinv.write(lineinv)
0290 txtfile.write(txtline)
0291 count=count+1
0292
0293
0294 if hcal==1:
0295
0296
0297
0298
0299
0300
0301
0302
0303 txtline='# eta phi dep det value \n'
0304 txtfile.write(txtline)
0305 for cell in range(0,hcalcells):
0306 etaindex=hcal_eta[cell]
0307 phiindex=hcal_phi[cell]
0308 depthindex=hcal_depth[cell]
0309 detindex=-1
0310 if(hcal_det[cell]=="HB"):
0311 detindex=1;
0312 if(hcal_det[cell]=="HE"):
0313 detindex=2;
0314 if(hcal_det[cell]=="HO"):
0315 detindex=3;
0316 if(hcal_det[cell]=="HF"):
0317 detindex=4;
0318
0319 if(detindex>0):
0320
0321
0322
0323
0324 miscal_fac=miscalibhcal(lumi,detindex,etaindex,phiindex,depthindex,1)
0325 line=' <Cell det_index="'+str(detindex)+'" eta_index="'+str(etaindex)+'" phi_index="'+str(phiindex)+'" depth_index="'+str(depthindex)+'" scale_factor="'+str(miscal_fac)+'"/>\n'
0326 lineinv=' <Cell det_index="'+str(detindex)+'" eta_index="'+str(etaindex)+'" phi_index="'+str(phiindex)+'" depth_index="'+str(depthindex)+'" scale_factor="'+str(1./miscal_fac)+'"/>\n'
0327 xmlfile.write(line)
0328 xmlfileinv.write(lineinv)
0329 txtline=" "+str(etaindex)+" "+str(phiindex)+" "+str(depthindex)+" "+hcal_det[cell]+" "+str(miscal_fac)+"\n"
0330 txtfile.write(txtline)
0331 count=count+1
0332 else:
0333 txtline=" "+str(etaindex)+" "+str(phiindex)+" "+str(depthindex)+" "+hcal_det[cell]+" 1.0\n"
0334 txtfile.write(txtline)
0335
0336
0337
0338
0339 if ecalbarrel==1:
0340 xmlfile.write(' </EcalBarrel>\n')
0341 xmlfileinv.write(' </EcalBarrel>\n')
0342 elif ecalendcap==1:
0343 xmlfile.write(' </EcalEndcap>\n')
0344 xmlfileinv.write(' </EcalEndcap>\n')
0345 elif hcal==1:
0346 xmlfile.write(' </Hcal>\n')
0347 xmlfileinv.write(' </Hcal>\n')
0348
0349 xmlfile.write('</CalibrationConstants>\n')
0350 xmlfileinv.write('</CalibrationConstants>\n')
0351 xmlfile.close()
0352 xmlfileinv.close()
0353 txtfile.close()
0354 print('File '+fileout+'.xml'+' written with '+str(count)+' lines')
0355 print('File inv_'+fileout+'.xml'+' written with '+str(count)+' lines')
0356 print('File '+fileout+'.txt'+' written with '+str(count)+' lines')
0357
0358
0359
0360