//----------------------------------------------------------------- // Simplified version of plan view of Hall A beam dump. // Script based on David's DrawGlueXBoundaries script // //----------------------------------------------------------------- void Draw_HallA_BeamDump() { char string[132]; Double_t zmin = -600; Double_t zmax=3200; Double_t xmin= -600; Double_t xmax=1500; Double_t fudge=0.95; Double_t scale = fudge*(zmax-zmin)/(xmax-xmin); printf ("Scale factor =%d\n",scale); TCanvas *c1 = new TCanvas("c1","Draw_HallA_BeamDump",200,10,500*scale,500); TH2D *boundaries = new TH2D("boundaries", "Hall A Beam Dump / Vertical Shaft",zmax-zmin, zmin, zmax, xmax-xmin, xmin, xmax); boundaries->SetStats(0); boundaries->SetXTitle("Z (cm)"); boundaries->SetYTitle("Y (cm)"); boundaries->Draw(); TLine *beamline = new TLine (zmin,0,zmax,0); beamline->SetLineStyle(4); beamline->Draw(); Double_t xgrade=762; // 25' grade above beamline TLine *grade = new TLine (zmin,xgrade,zmax,xgrade); grade->SetLineStyle(1); grade->Draw(); Double_t dz=914; // Double_t dz1=457; // Double_t dz2=488; Double_t dz1=548; Double_t dz2=564; Double_t dr=213/2; Double_t dc=91; Double_t dmuon=1000; /// 10 m of Fe to range out muons from dump Double_t xmuon=136; // half width of Fe dump Double_t fe_density = 7.8; // take Fe as cr shield Double_t dirt_density = 1.7; // take dirt for overburden Double_t concrete_density = 2.7; // concrete bunker Double_t dwall=30; Double_t dspace=30; Double_t zdump=600; Double_t Ldump=150; Double_t xdump=30; Double_t Lmuon_fe = dmuon - dz1*concrete_density/fe_density; // Double_t Lmuon_weight = Lmuon_fe*(2*xmuon)*(2*xmuon)*fe_density/1e6; printf ("Assume: Muon dump = %.1f cm Fe, Need = %.1f cm additional\n",dmuon,Lmuon_fe); Double_t zmuon = dz + dz1; Double_t zbdx=zmuon + Lmuon_fe + dc; Double_t Lbdx=250; // Double_t xbdx=110./2; // note that in this confusing historical notation x is vertical, y is horizontal. // Double_t ybdx=205./2; // note that in this confusing historical notation x is vertical, y is horizontal. Double_t xbdx=70./2; // note that in this confusing historical notation x is vertical, y is horizontal. Double_t ybdx=165./2; // note that in this confusing historical notation x is vertical, y is horizontal. // Double_t overburden_mwe=20*100; // mwe converted to cm Double_t overburden_mwe=10*100; // mwe converted to cm Double_t tshield= overburden_mwe/fe_density; Double_t zcrshield=zbdx-dspace; Double_t Lcrshield=Lbdx+2*dspace; Double_t xcrshield=2*xbdx+2*dspace; Double_t xcrshield1=xgrade; Double_t xcrshield2=xgrade-tshield; Double_t weight_crshield = tshield*Lcrshield*xcrshield*fe_density/1.e6; // weight in metric tons printf ("Fe CR Shield Length=%.1f, thick = %.1f, depth =%.1f, weight=%.1f\n",Lcrshield,tshield,xcrshield,weight_crshield); Double_t xover2 = overburden_mwe/dirt_density + xbdx; Double_t arg = (xgrade-xbdx-dspace)/xover2 < 1 ? (xgrade-xbdx-dspace)/xover2 : 1; Double_t angle_over = acos(arg); Double_t zover = arg < 1 ? (zbdx+Lbdx/2) - sin(angle_over)*xover2 : 0; printf ("Assume: dirt density=%f, overburden=%f cm, angle=%f, zover = %f\n",dirt_density,xover2,angle_over*180/3.14159,zover); sprintf (string,"Vertical overburden = %.1f mwe\n",overburden_mwe/100); printf("string=%s",string); t1 = new TLatex(0.12,0.85,string); t1->SetNDC(); t1->SetTextSize(0.03); t1->Draw(); sprintf (string,"Dirt density = %.1f g/cm^{3}\n",dirt_density); printf("string=%s",string); t1 = new TLatex(0.12,0.81,string); t1->SetNDC(); t1->SetTextSize(0.03); t1->Draw(); sprintf (string,"Concrete density = %.1f g/cm^{3}\n",concrete_density); printf("string=%s",string); t1 = new TLatex(0.12,0.77,string); t1->SetNDC(); t1->SetTextSize(0.03); t1->Draw(); sprintf (string,"BDX dimensions = %.0f x %.0f x %.0f cm^{3}\n",2*xbdx,2*ybdx,Lbdx); printf("string=%s",string); t1 = new TLatex(0.12,0.73,string); t1->SetNDC(); t1->SetTextSize(0.03); t1->Draw(); sprintf (string,"Iron = %.0f cm, total = %.0f cm Fe equiv, Weight=%.0f t\n",Lmuon_fe,dmuon,Lmuon_weight); printf("string=%s",string); t1 = new TLatex(0.12,0.69,string); t1->SetNDC(); t1->SetTextSize(0.03); t1->Draw(); printf ("Fe CR Shield Length=%.1f, thick = %.1f, depth =%.1f, weight=%.1f\n",Lcrshield,tshield,xcrshield,weight_crshield); sprintf (string,"Size of CR Fe = %.0f x %.0f x %.0f cm^{3}\n",Lcrshield,tshield,xcrshield); printf("string=%s",string); t1 = new TLatex(0.12,0.65,string); t1->SetNDC(); t1->SetTextSize(0.03); t1->Draw(); sprintf (string,"Weight of CR Fe= %.0f metric tons\n",weight_crshield); printf("string=%s",string); t1 = new TLatex(0.12,0.61,string); t1->SetNDC(); t1->SetTextSize(0.03); t1->Draw(); sprintf (string,"Grade level = %.0f cm above beamline\n",xgrade); printf("string=%s",string); t1 = new TLatex(0.12,0.57,string); t1->SetNDC(); t1->SetTextSize(0.03); t1->Draw(); sprintf (string,"beam line\n"); printf("string=%s",string); t1 = new TLatex(-500,30,string); t1->SetTextSize(0.03); t1->Draw(); sprintf (string,"grade level\n"); printf("string=%s",string); t1 = new TLatex(1000,xgrade+30,string); t1->SetTextSize(0.03); t1->Draw(); // concrete surrounding const int Npoints=11; float xc[]={dr,dz2,dz2,dr+dc,-(dr+dc),-dz2,-dz2,-dr,-dr,dr,dr}; float zc[]={0,0,dz+dz1-(dz2-(dr+dc)),dz+dz1,dz+dz1,dz+dz1-(dz2-(dr+dc)),0,0,dz,dz,0}; TPolyLine *concrete = new TPolyLine(Npoints, zc, xc); concrete->SetLineWidth(2.0); concrete->SetLineColor(kBlack); concrete->Draw("l"); concrete->SetFillStyle(3012); concrete->SetFillColor(kBlack); concrete->Draw("f"); // muon iron: first border, then fill const int Npoints=6; float xc[]={0,xmuon,xmuon,-xmuon,-xmuon,0}; float zc[]={zmuon,zmuon,zmuon+Lmuon_fe,zmuon+Lmuon_fe,zmuon,zmuon}; TPolyLine *dsteel = new TPolyLine(Npoints, zc, xc); dsteel->SetLineWidth(2.0); dsteel->SetFillStyle(3012); dsteel->SetLineColor(kBlack); dsteel->Draw("l"); dsteel->SetFillStyle(3545); dsteel->SetFillColor(kBlack); dsteel->Draw("f"); // dump proper const int Npoints=6; float xc[]={0,xdump,xdump,-xdump,-xdump,0}; float zc[]={zdump,zdump,zdump+Ldump,zdump+Ldump,zdump,zdump}; TPolyLine *dump = new TPolyLine(Npoints, zc, xc); dump->SetLineWidth(2.0); dump->SetLineColor(kBlack); dump->Draw("l"); dump->SetFillColor(590); dump->Draw("f"); // BDX experiment const int Npoints=6; float xc[]={0,xbdx,xbdx,-xbdx,-xbdx,0}; float zc[]={zbdx,zbdx,zbdx+Lbdx,zbdx+Lbdx,zbdx,zbdx}; TPolyLine *bdx = new TPolyLine(Npoints, zc, xc); bdx->SetLineWidth(2.0); bdx->SetLineColor(kBlack); bdx->Draw("l"); bdx->SetFillColor(390); bdx->Draw("f"); // BDX walls const int Npoints=9; float xc[]={xgrade,-xbdx-dspace-dwall,-xbdx-dspace-dwall,xgrade,xgrade,-xbdx-dspace,-xbdx-dspace,xgrade,xgrade}; float zc[]={zbdx-dspace-dwall,zbdx-dspace-dwall,zbdx+Lbdx+dspace+dwall,zbdx+Lbdx+dspace+dwall,zbdx+Lbdx+dspace,zbdx+Lbdx+dspace,zbdx-dspace,zbdx-dspace,zbdx-dspace-dwall}; TPolyLine *bdxwall = new TPolyLine(Npoints, zc, xc); bdxwall->SetLineWidth(2.0); bdxwall->SetLineColor(kBlack); bdxwall->Draw("l"); bdxwall->SetFillStyle(3012); bdxwall->SetFillColor(kBlack); bdxwall->Draw("f"); // Fe shield const int Npoints=5; float xc[]={xcrshield1,xcrshield2,xcrshield2,xcrshield1,xcrshield1}; float zc[]={zcrshield,zcrshield,zcrshield+Lcrshield,zcrshield+Lcrshield,zcrshield}; TPolyLine *crshield = new TPolyLine(Npoints, zc, xc); crshield->SetLineWidth(2.0); crshield->SetLineColor(kBlack); crshield->Draw("l"); crshield->SetFillStyle(3545); crshield->SetFillColor(kBlack); crshield->Draw("f"); // dirt overburden: draw only if greater than grade if (zover > 0 ) { const int Npoints=4; float xc[]={xgrade,xover2,xover2,xgrade,xgrade}; float zc[]={zover,zbdx-dspace,zbdx+Lbdx+dspace,zbdx+Lbdx/2 + (zbdx+Lbdx/2-zover),zover}; TPolyLine *crover = new TPolyLine(Npoints, zc, xc); crover->SetLineWidth(2.0); crover->SetLineColor(kBlack); crover->Draw("l"); crover->SetFillColor(kBlack); crover->SetFillStyle(3003); crover->Draw("f"); } sprintf (string,"Draw_HallA_BeamDump.pdf"); c1->SaveAs(string); sprintf (string,"Draw_HallA_BeamDump.png"); c1->SaveAs(string); }