//----------------------------------------------------------------- // Simplified version of plan view of Hall A beam dump. // Script based on David's DrawGlueXBoundaries script // Updated to conform to most recent Root norms 3/24/2016. Also modified to use C1 concept // //----------------------------------------------------------------- void Draw_C1_HallA_BeamDump() { char string[132]; // float zmin = -600; float zmin = 0; float zmax=3200; float xmin= -600; float xmax=1500; float fudge=0.95; float scale = fudge*(zmax-zmin)/(xmax-xmin); printf ("Scale factor =%f\n",scale); TCanvas *c1 = new TCanvas("c1","Draw_C1_HallA_BeamDump",200,10,500*scale,500); TH2D *boundaries = new TH2D("boundaries", "Hall A Beam Dump / C1",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(); float xgrade=762; // 25' grade above beamline TLine *grade = new TLine (zmin,xgrade,zmax,xgrade); grade->SetLineStyle(1); grade->Draw(); float dwall=30; float dspace=30; float dz=914; // float dz1=457; // float dz2=488; float dz1=548; float dz2=564; float dr=213/2; float dc=91; float dmuon=1000; /// 10 m of Fe to range out muons from dump float xmuon=136; // half width of Fe dump float fe_density = 7.8; // take Fe as cr shield float dirt_density = 1.7; // take dirt for overburden float concrete_density = 2.7; // concrete bunker // float zdump=600; // float Ldump=150; float zdump=315; float Ldump=315; float xdump=40; float Lconcrete1 = 40; float Lconcrete2 = 110; //float Lmuon_fe = dmuon - dz1*concrete_density/fe_density -dwall; // correct iron length by wall thickness float Lmuon_fe = 660; float 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); float zmuon = dz + dz1; float zbdx=zmuon + Lmuon_fe + Lconcrete1 + Lconcrete2 + dc + dwall; // adjust length by wall thickness float Lbdx=250; // float ybdx=110./2; // float xbdx=205./2; float ybdx=70./2; float xbdx=165./2; float zShower = zdump + 17.8; // take 6 r.l. to peak of cascade in 1/2 density Al float dShowerDetector = zbdx - zShower; // float zbldg = zbdx - Lbdx/3 -dc-dwall; float zbldg = zbdx - Lbdx/2 -dwall; float Lbldg = 900; float Dx1bldg = -xbdx - dc - dwall; float Dx2bldg = 900 + Dx1bldg; float DxLbldg = Dx2bldg - Dx1bldg; float Dy1bldg = xgrade; float Dy2bldg = xgrade + 427; float Dx1bldgU = -xbdx - dc - dwall; float Dx2bldgU = 900 + Dx1bldgU; float DxLbldgU = Dx2bldgU - Dx1bldgU; float Dy2bldgU = xgrade; float Dy1bldgU = -ybdx - dc - dwall; float zshaft = zbldg+dwall; float Lshaft = 450; float Dx2shaft = Dx2bldgU - dwall; float Dx1shaft = Dx2bldgU - 300; float DxLshaft = Dx2bldgU - Dx1bldgU; float Dy2shaft = xgrade; float Dy1shaft = Dy1bldgU + dwall; float Dy3shaft = Dy1shaft + 305; float zstairs= zbldg+ Lbldg - dwall; float Lstairs= 380; float Dx2stairs= Dx2bldg - dwall; float Dx1stairs = Dx2bldg - dwall - 688; float Dy2stairs= xgrade; float Dy1stairs = Dy1bldgU; float zstairs1 = zstairs - Lstairs; float Lstairs1 = Lstairs/2 - dwall/2; float Dx1stairs1 = Dx1stairs + 130; float Dx2stairs1 = Dx1stairs1 + 417; float Dy1stairs1 = Dy1bldgU; float Dy2stairs1 = Dy2bldgU; Int_t nstairs = 12; float Dstep = (Dx2stairs1 - Dx1stairs1)/nstairs; // float overburden_mwe=20*100; // mwe converted to cm float overburden_mwe=10*100; // mwe converted to cm float tshield= overburden_mwe/fe_density; float zcrshield=zbdx-dspace; float Lcrshield=Lbdx+2*dspace; float ycrshield=2*xbdx+2*dspace; float ycrshield1=xgrade; float ycrshield2=xgrade-tshield; float weight_crshield = tshield*Lcrshield*ycrshield*fe_density/1.e6; // weight in metric tons printf ("Fe CR Shield Length=%.1f, thick = %.1f, depth =%.1f, weight=%.1f\n",Lcrshield,tshield,ycrshield,weight_crshield); float xover2 = overburden_mwe/dirt_density + xbdx; float arg = (xgrade-ybdx-dspace)/xover2 < 1 ? (xgrade-ybdx-dspace)/xover2 : 1; float angle_over = acos(arg); float 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->DrawLatex(0.12,0.85,string); sprintf (string,"Dirt density = %.1f g/cm^{3}\n",dirt_density); printf("string=%s",string); t1->DrawLatex(0.12,0.81,string); sprintf (string,"Concrete density = %.1f g/cm^{3}\n",concrete_density); printf("string=%s",string); t1->DrawLatex(0.12,0.77,string); sprintf (string,"BDX dimensions = %.0f x %.0f x %.0f cm^{3}\n",2*ybdx,2*xbdx,Lbdx); printf("string=%s",string); t1->DrawLatex(0.12,0.73,string); sprintf (string,"Iron = %.0f cm, Weight=%.0f t\n",Lmuon_fe,Lmuon_weight); printf("string=%s",string); t1->DrawLatex(0.12,0.69,string); printf ("Fe CR Shield Length=%.1f, thick = %.1f, depth =%.1f, weight=%.1f\n",Lcrshield,tshield,ycrshield,weight_crshield); sprintf (string,"Size of CR Fe = %.0f x %.0f x %.0f cm^{3}\n",Lcrshield,tshield,ycrshield); printf("string=%s",string); // t1->DrawLatex(0.12,0.65,string); sprintf (string,"Weight of CR Fe= %.0f metric tons\n",weight_crshield); printf("string=%s",string); // t1->DrawLatex(0.12,0.61,string); sprintf (string,"Grade level = %.0f cm above beamline\n",xgrade); printf("string=%s",string); // t1->DrawLatex(0.12,0.57,string); t1->DrawLatex(0.12,0.65,string); sprintf (string,"beam line\n"); printf("string=%s",string); t2 = new TLatex(20,30,string); t2->SetTextSize(0.022); t2->Draw(); sprintf (string,"grade level\n"); printf("string=%s",string); t2->DrawLatex(1500,xgrade+30,string); sprintf (string,"Dump to detector = %.0f cm\n",dShowerDetector); printf("string=%s",string); t1->DrawLatex(0.12,0.57,string); // concrete surrounding Npoints=11; float yc[]={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, yc); 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 Npoints=6; #define yc yc1 #define zc zc1 float yc[]={0,xmuon,xmuon,-xmuon,-xmuon,0}; float zc[]={zmuon+Lconcrete1,zmuon+Lconcrete1,zmuon+Lmuon_fe+Lconcrete1,zmuon+Lmuon_fe+Lconcrete1,zmuon+Lconcrete1,zmuon+Lconcrete1}; TPolyLine *dsteel = new TPolyLine(Npoints, zc, yc); dsteel->SetLineWidth(2.0); dsteel->SetLineColor(kBlack); dsteel->Draw("l"); dsteel->SetFillStyle(3545); dsteel->SetFillColor(kBlack); dsteel->Draw("f"); // end of concrete: first border, then fill Npoints=6; #undef yc #undef zc #define yc yc1a #define zc zc1a float yc[]={0,xmuon,xmuon,-xmuon,-xmuon,0}; float zc[]={zmuon,zmuon,zmuon+Lconcrete1,zmuon+Lconcrete1,zmuon,zmuon}; TPolyLine *dconcrete1 = new TPolyLine(Npoints, zc, yc); dconcrete1->SetLineWidth(2.0); dconcrete1->SetLineColor(kBlack); dconcrete1->Draw("l"); dconcrete1->SetFillStyle(3012); dconcrete1->SetFillColor(kBlack); dconcrete1->Draw("f"); Npoints=6; #undef yc #undef zc #define yc yc1b #define zc zc1b float yc[]={0,xmuon,xmuon,-xmuon,-xmuon,0}; float zc[]={zmuon+Lconcrete1+Lmuon_fe,zmuon+Lconcrete1+Lmuon_fe,zmuon+Lconcrete1+Lmuon_fe+Lconcrete2,zmuon+Lconcrete1+Lmuon_fe+Lconcrete2, zmuon+Lconcrete1+Lmuon_fe,zmuon+Lconcrete1+Lmuon_fe}; TPolyLine *dconcrete2 = new TPolyLine(Npoints, zc, yc); dconcrete2->SetLineWidth(2.0); dconcrete2->SetLineColor(kBlack); dconcrete2->Draw("l"); dconcrete2->SetFillStyle(3012); dconcrete2->SetFillColor(kBlack); dconcrete2->Draw("f"); // dump proper Npoints=6; #undef yc #undef zc #define yc yc2 #define zc zc2 float yc[]={0,xdump,xdump,-xdump,-xdump,0}; float zc[]={zdump,zdump,zdump+Ldump,zdump+Ldump,zdump,zdump}; TPolyLine *dump = new TPolyLine(Npoints, zc, yc); dump->SetLineWidth(2.0); dump->SetLineColor(kBlack); dump->Draw("l"); dump->SetFillColor(590); dump->Draw("f"); TMarker *MarkShower = new TMarker(zShower,0,2); MarkShower->SetMarkerColor(1); MarkShower->SetMarkerSize(1); MarkShower->Draw(); // BDX experiment Npoints=6; #undef yc #undef zc #define yc yc3 #define zc zc3 float yc[]={0,ybdx,ybdx,-ybdx,-ybdx,0}; float zc[]={zbdx,zbdx,zbdx+Lbdx,zbdx+Lbdx,zbdx,zbdx}; TPolyLine *bdx = new TPolyLine(Npoints, zc, yc); bdx->SetLineWidth(2.0); bdx->SetLineColor(kBlack); bdx->Draw("l"); bdx->SetFillColor(390); bdx->Draw("f"); // BDX building #undef yc #undef zc #define yc yc4 #define zc zc4 // Npoints=13; // float yc[]={Dy1bldg,Dy1bldg+dwall,Dy1bldg+dwall,Dy2bldg-dwall,Dy2bldg-dwall,Dy1bldg+dwall,Dy1bldg+dwall,Dy1bldg,Dy1bldg,Dy2bldg,Dy2bldg,Dy1bldg,Dy1bldg}; // float zc[]={zbldg+Lbldg/2,zbldg+Lbldg/2,zbldg+Lbldg-dwall,zbldg+Lbldg-dwall,zbldg+dwall,zbldg+dwall,zbldg+Lbldg/2,zbldg+Lbldg/2,zbldg,zbldg,zbldg+Lbldg,zbldg+Lbldg,zbldg+Lbldg/2}; Npoints=5; float yc[]={Dy1bldg,Dy2bldg-dwall,Dy2bldg-dwall,Dy1bldg,Dy1bldg}; float zc[]={zbldg+dwall,zbldg+dwall,zbldg+Lbldg-dwall,zbldg+Lbldg-dwall,zbldg+dwall}; TPolyLine *bdxwall = new TPolyLine(Npoints, zc, yc); bdxwall->SetLineWidth(2.0); bdxwall->SetLineColor(kBlack); bdxwall->Draw("l"); bdxwall->SetFillStyle(3012); bdxwall->SetFillColor(kBlack); // bdxwall->Draw("f"); // Vertical Shaft #undef yc #undef zc #define yc yc5 #define zc zc5 Npoints=5; float yc[]={Dy1shaft,Dy1shaft,Dy2shaft,Dy2shaft,Dy1shaft}; float zc[]={zshaft,zshaft+Lshaft,zshaft+Lshaft,zshaft,zshaft}; TPolyLine *shaft = new TPolyLine(Npoints, zc, yc); shaft->SetLineWidth(2.0); shaft->SetLineColor(kBlack); shaft->Draw("l"); shaft->SetFillColor(422); // shaft->Draw("f"); // Stair area #undef yc #undef zc #define yc yc6 #define zc zc6 Npoints=5; float yc[]={Dy1stairs+dwall,Dy1stairs+dwall,Dy2stairs,Dy2stairs,Dy1stairs+dwall}; float zc[]={zstairs,zstairs-Lstairs,zstairs-Lstairs,zstairs,zstairs}; TPolyLine *gstairs = new TPolyLine(Npoints, zc, yc); gstairs->SetLineWidth(2.0); gstairs->SetLineColor(kBlack); gstairs->Draw("l"); // gstairs->SetFillColor(422); // gstairs->Draw("f"); /* // BDX walls Npoints=9; #undef yc #undef zc #define yc yc4 #define zc zc4 float yc[]={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, yc); bdxwall->SetLineWidth(2.0); bdxwall->SetLineColor(kBlack); bdxwall->Draw("l"); bdxwall->SetFillStyle(3012); bdxwall->SetFillColor(kBlack); bdxwall->Draw("f"); // Fe shield Npoints=5; #undef yc #undef zc #define yc yc5 #define zc zc5 float yc[]={ycrshield1,ycrshield2,ycrshield2,ycrshield1,ycrshield1}; float zc[]={zcrshield,zcrshield,zcrshield+Lcrshield,zcrshield+Lcrshield,zcrshield}; TPolyLine *crshield = new TPolyLine(Npoints, zc, yc); 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 ) { Npoints=4; float yc[]={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, yc); crover->SetLineWidth(2.0); crover->SetLineColor(kBlack); crover->Draw("l"); crover->SetFillColor(kBlack); crover->SetFillStyle(3003); crover->Draw("f"); } */ sprintf (string,"Draw_C1_HallA_BeamDump.pdf"); c1->SaveAs(string); sprintf (string,"Draw_C1_HallA_BeamDump.png"); c1->SaveAs(string); }