SND@LHC Software
Loading...
Searching...
No Matches
checkMagFields.py
Go to the documentation of this file.
1from __future__ import division
2import ROOT,sys
3import rootUtils as ut
4import shipunit as u
5
6def run():
7 fGeo = ROOT.gGeoManager
8 run = sys.modules['__main__'].run
9 if hasattr(sys.modules['__main__'],'h'): h = sys.modules['__main__'].h
10 else: h={}
11 grid = 120,100,1500
12 xmin,ymin,zmin = -4*u.m,-5*u.m,-100*u.m
13 xmax,ymax,zmax = 4*u.m,5*u.m,50*u.m
14 dx,dy,dz = (xmax-xmin)/grid[0],(ymax-ymin)/grid[1],(zmax-zmin)/grid[2]
15 ut.bookHist(h,'Bx-','Bx- component ;z [cm];x [cm];y [cm]',grid[2],zmin,zmax,grid[0],xmin,xmax,grid[1],ymin,ymax)
16 ut.bookHist(h,'By-','By- component ;z [cm];x [cm];y [cm]',grid[2],zmin,zmax,grid[0],xmin,xmax,grid[1],ymin,ymax)
17 ut.bookHist(h,'Bz-','Bz- component ;z [cm];x [cm];y [cm]',grid[2],zmin,zmax,grid[0],xmin,xmax,grid[1],ymin,ymax)
18 ut.bookHist(h,'Bx+','Bx+ component ;z [cm];x [cm];y [cm]',grid[2],zmin,zmax,grid[0],xmin,xmax,grid[1],ymin,ymax)
19 ut.bookHist(h,'By+','By+ component ;z [cm];x [cm];y [cm]',grid[2],zmin,zmax,grid[0],xmin,xmax,grid[1],ymin,ymax)
20 ut.bookHist(h,'Bz+','Bz+ component ;z [cm];x [cm];y [cm]',grid[2],zmin,zmax,grid[0],xmin,xmax,grid[1],ymin,ymax)
21 h['Bx-'].SetMarkerColor(ROOT.kGreen-3)
22 h['Bx+'].SetMarkerColor(ROOT.kGreen+3)
23 h['By-'].SetMarkerColor(ROOT.kBlue-3)
24 h['By+'].SetMarkerColor(ROOT.kBlue+3)
25 h['Bz-'].SetMarkerColor(ROOT.kCyan-2)
26 h['Bz+'].SetMarkerColor(ROOT.kCyan+2)
27 for ix in range(grid[0]):
28 for iy in range(grid[1]):
29 for iz in range(grid[2]):
30 x,y,z = xmin + ix*dx,ymin + iy*dy,zmin + iz*dz
31 n = fGeo.FindNode(x,y,z)
32 f = n.GetVolume().GetField()
33 if f:
34 if f.GetFieldValue()[0]<0: rc=h['Bx-'].Fill(z,x,y,-f.GetFieldValue()[0]/u.tesla)
35 if f.GetFieldValue()[0]>0: rc=h['Bx+'].Fill(z,x,y,f.GetFieldValue()[0]/u.tesla)
36 if f.GetFieldValue()[1]<0: rc=h['By-'].Fill(z,x,y,-f.GetFieldValue()[1]/u.tesla)
37 if f.GetFieldValue()[1]>0: rc=h['By+'].Fill(z,x,y,f.GetFieldValue()[1]/u.tesla)
38 if f.GetFieldValue()[2]<0: rc=h['Bz-'].Fill(z,x,y,-f.GetFieldValue()[2]/u.tesla)
39 if f.GetFieldValue()[2]>0: rc=h['Bz+'].Fill(z,x,y,f.GetFieldValue()[2]/u.tesla)
40 f = run.GetField()
41 if f.GetBx(x,y,z)<0: rc=h['Bx-'].Fill(z,x,y,-f.GetBx(x,y,z)/u.tesla)
42 if f.GetBx(x,y,z)>0: rc=h['Bx+'].Fill(z,x,y,f.GetBx(x,y,z)/u.tesla)
43 if f.GetBy(x,y,z)<0: rc=h['By-'].Fill(z,x,y,-f.GetBy(x,y,z)/u.tesla)
44 if f.GetBy(x,y,z)>0: rc=h['By+'].Fill(z,x,y,f.GetBy(x,y,z)/u.tesla)
45 for x in h.keys():
46 hi = h[x]
47 if hi.ClassName()=='TH3F':
48 h[x+'_xz']=h[x].Project3D('xy')
49 h[x+'_xz'].SetTitle(hi.GetTitle()+' top view')
50 h[x+'_yz']=h[x].Project3D('xz')
51 h[x+'_yz'].SetTitle(hi.GetTitle()+' side view')
52 for x in h:
53 h[x].SetStats(0)
54 h[x].SetMarkerSize(3)
55 txt = {'y':[' Up',' Down'],'x':[' Right',' Left']}
56 for pol in ['y','x']:
57 for p in ['_xz','_yz']:
58 cn = 'c'+pol+p
59 ut.bookCanvas(h,key=cn,title='field check',nx=1600,ny=1200,cx=1,cy=1)
60 h[cn].cd(1)
61 h['B'+pol+'+'+p].Draw()
62 h['B'+pol+'-'+p].Draw('same')
63 h['B'+pol+'L'+p] = ROOT.TLegend(0.79,0.72,0.91,0.87)
64 h['B'+pol+'L'+p].AddEntry(h['B'+pol+'+'],'B'+pol+txt[pol][0],'PM')
65 h['B'+pol+'L'+p].AddEntry(h['B'+pol+'-'],'B'+pol+txt[pol][1],'PM')
66 h['B'+pol+'L'+p].Draw()
67 h[cn].Update()
68 h[cn].Print('FieldB'+pol+'Proj'+p+'.png')