Skip to content

Commit

Permalink
Format files with black
Browse files Browse the repository at this point in the history
  • Loading branch information
tmadlener committed Sep 25, 2024
1 parent d7cddc0 commit ddee4c5
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 38 deletions.
127 changes: 98 additions & 29 deletions utils/material_plots_2D.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,57 @@
import argparse
import math

import sys,os
import sys, os

sys.path.append(os.path.expandvars("$FCCSW") + "/Examples/scripts")
from plotstyle import FCCStyle
import ROOT


def main():
parser = argparse.ArgumentParser(description='Material Plotter')
parser.add_argument('--fname', "-f", dest='fname', type=str, help="name of file to read")
parser.add_argument('--angleMin', dest='angleMin', default=6, type=float, help="minimum eta/theta/cosTheta")
parser.add_argument('--angleMax', dest='angleMax', default=6, type=float, help="maximum eta/theta/cosTheta")
parser.add_argument('--angleDef', dest='angleDef', default="eta", type=str, help="angle definition to use: eta, theta or cosTheta, default: eta")
parser.add_argument('--angleBinning', "-b", dest='angleBinning', default=0.05, type=float, help="eta/theta/cosTheta bin width")
parser.add_argument('--nPhiBins', dest='nPhiBins', default=100, type=int, help="number of bins in phi")
parser.add_argument('--x0max', "-x", dest='x0max', default=0.0, type=float, help="Max of x0")
parser = argparse.ArgumentParser(description="Material Plotter")
parser.add_argument(
"--fname", "-f", dest="fname", type=str, help="name of file to read"
)
parser.add_argument(
"--angleMin",
dest="angleMin",
default=6,
type=float,
help="minimum eta/theta/cosTheta",
)
parser.add_argument(
"--angleMax",
dest="angleMax",
default=6,
type=float,
help="maximum eta/theta/cosTheta",
)
parser.add_argument(
"--angleDef",
dest="angleDef",
default="eta",
type=str,
help="angle definition to use: eta, theta or cosTheta, default: eta",
)
parser.add_argument(
"--angleBinning",
"-b",
dest="angleBinning",
default=0.05,
type=float,
help="eta/theta/cosTheta bin width",
)
parser.add_argument(
"--nPhiBins",
dest="nPhiBins",
default=100,
type=int,
help="number of bins in phi",
)
parser.add_argument(
"--x0max", "-x", dest="x0max", default=0.0, type=float, help="Max of x0"
)
args = parser.parse_args()

ROOT.gStyle.SetNumberContours(100)
Expand All @@ -27,46 +63,78 @@ def main():

ROOT.gROOT.SetBatch(1)

h_x0 = ROOT.TH2F("h_x0","h_x0", int((args.angleMax-args.angleMin)/args.angleBinning),args.angleMin,args.angleMax,args.nPhiBins,-math.pi,math.pi)
h_lambda = ROOT.TH2F("h_lambda","h_lambda", int((args.angleMax-args.angleMin)/args.angleBinning),args.angleMin,args.angleMax,args.nPhiBins,-math.pi,math.pi)
h_depth = ROOT.TH2F("h_depth","h_depth", int((args.angleMax-args.angleMin)/args.angleBinning),args.angleMin,args.angleMax,args.nPhiBins,-math.pi,math.pi)
h_x0 = ROOT.TH2F(
"h_x0",
"h_x0",
int((args.angleMax - args.angleMin) / args.angleBinning),
args.angleMin,
args.angleMax,
args.nPhiBins,
-math.pi,
math.pi,
)
h_lambda = ROOT.TH2F(
"h_lambda",
"h_lambda",
int((args.angleMax - args.angleMin) / args.angleBinning),
args.angleMin,
args.angleMax,
args.nPhiBins,
-math.pi,
math.pi,
)
h_depth = ROOT.TH2F(
"h_depth",
"h_depth",
int((args.angleMax - args.angleMin) / args.angleBinning),
args.angleMin,
args.angleMax,
args.nPhiBins,
-math.pi,
math.pi,
)

for angleBinning, entry in enumerate(tree):
nMat = entry.nMaterials

entry_x0, entry_lambda, entry_depth = 0.0, 0.0, 0.0
for i in range(nMat):
if entry.material.at(i) == "Air": continue
if entry.material.at(i) == "Air":
continue

entry_x0 += entry.nX0.at(i)*100.0
entry_lambda += entry.nLambda.at(i)
entry_depth += entry.matDepth.at(i)
entry_x0 += entry.nX0.at(i) * 100.0
entry_lambda += entry.nLambda.at(i)
entry_depth += entry.matDepth.at(i)

h_x0.Fill(tree.angle,tree.phi,entry_x0)
h_lambda.Fill(tree.angle,tree.phi,entry_lambda)
h_depth.Fill(tree.angle,tree.phi,entry_depth)
h_x0.Fill(tree.angle, tree.phi, entry_x0)
h_lambda.Fill(tree.angle, tree.phi, entry_lambda)
h_depth.Fill(tree.angle, tree.phi, entry_depth)

# go through the
# go through the
plots = ["x0", "lambda", "depth"]
histograms = [h_x0, h_lambda, h_depth]
axis_titles = ["Material budget x/X_{0} [%]", "Number of #lambda", "Material depth [cm]"]
axis_titles = [
"Material budget x/X_{0} [%]",
"Number of #lambda",
"Material depth [cm]",
]
for i in range(len(plots)):
cv = ROOT.TCanvas("","",800,600)
cv = ROOT.TCanvas("", "", 800, 600)
cv.SetRightMargin(0.18)
histograms[i].Draw("COLZ")

if args.angleDef=="eta":
title="#eta"
elif args.angleDef=="theta":
title="#theta [#circ]"
elif args.angleDef=="cosTheta":
title="cos(#theta)"
if args.angleDef == "eta":
title = "#eta"
elif args.angleDef == "theta":
title = "#theta [#circ]"
elif args.angleDef == "cosTheta":
title = "cos(#theta)"
histograms[i].GetXaxis().SetTitle(title)
histograms[i].GetYaxis().SetTitle("#phi")

histograms[i].GetZaxis().SetTitle(axis_titles[i])

if args.x0max != 0.0 and plots[i]=="x0":
if args.x0max != 0.0 and plots[i] == "x0":
histograms[i].SetMaximum(args.x0max)

histograms[i].GetXaxis().SetRangeUser(args.angleMin, args.angleMax)
Expand All @@ -76,6 +144,7 @@ def main():
cv.Print(plots[i] + ".png")
cv.SaveAs(plots[i] + ".root")


if __name__ == "__main__":
FCCStyle.initialize()
main()
17 changes: 8 additions & 9 deletions utils/material_scan_2D.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,34 @@
from Gaudi.Configuration import *

from Configurables import ApplicationMgr
ApplicationMgr().EvtSel = 'None'

ApplicationMgr().EvtSel = "None"
ApplicationMgr().EvtMax = 1
ApplicationMgr().OutputLevel = INFO

# DD4hep geometry service
from Configurables import GeoSvc

## parse the given xml file
geoservice = GeoSvc("GeoSvc")
geoservice.detectors = [
'IDEA_o1_v02.xml'
]
geoservice.OutputLevel = INFO
geoservice.detectors = ["IDEA_o1_v02.xml"]
geoservice.OutputLevel = INFO
ApplicationMgr().ExtSvc += [geoservice]

# Using material scan from k4SimGeant4: https://github.com/HEP-FCC/k4SimGeant4/tree/main/Detector/DetComponents/src
from Configurables import MaterialScan_2D_genericAngle

# Material scan is done from the interaction point to the end of world volume.
# In order to use other end boundary, please provide the name of a thin, e.g. cylindrical volume.
# For instance adding envelopeName="BoundaryPostCalorimetry" will perform the scan only till the end of calorimetry.
# BoundaryPostCalorimetry is defined in Detector/DetFCChhECalInclined/compact/envelopePreCalo.xml
materialservice = MaterialScan_2D_genericAngle("GeoDump")
materialservice.filename = "out_material_scan.root"

materialservice.angleDef = 'eta' # eta, theta, cosTheta or thetaRad
materialservice.angleDef = "eta" # eta, theta, cosTheta or thetaRad
materialservice.angleBinning = 0.05
materialservice.angleMax = 3.0
materialservice.angleMin = -3.0
materialservice.nPhi = 100 # number of bins in phi
materialservice.nPhi = 100 # number of bins in phi

ApplicationMgr().ExtSvc += [materialservice]


0 comments on commit ddee4c5

Please sign in to comment.