Skip to content
Snippets Groups Projects
Commit 18e38547 authored by John Derek Chapman's avatar John Derek Chapman Committed by Vakhtang Tsulaia
Browse files

Remove more obsolete Simulation code

Remove more obsolete Simulation code
parent a59151c4
No related branches found
No related tags found
No related merge requests found
Showing
with 1 addition and 495 deletions
......@@ -330,7 +330,6 @@
+ Simulation/ISF/ISF_Core/ISF_Interfaces
+ Simulation/ISF/ISF_Core/ISF_Services
+ Simulation/ISF/ISF_Core/ISF_Tools
+ Simulation/ISF/ISF_Example
+ Simulation/ISF/ISF_Geant4/ISF_Geant4CommonServices
+ Simulation/ISF/ISF_Geant4/ISF_Geant4CommonTools
+ Simulation/ISF/ISF_Geant4/ISF_Geant4Event
......@@ -345,7 +344,6 @@
+ Simulation/RunDependentSim/RunDependentSimComps
+ Simulation/SimuJobTransforms
+ Simulation/SimulationConfig
+ Simulation/SimulationJobOptions
+ Simulation/Tests/ISF_Validation
+ Simulation/Tests/ISF_ValidationMT
+ Simulation/Tests/SimCoreTests
......
# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
# Declare the package name:
atlas_subdir( G4AtlasTests )
......@@ -18,6 +18,5 @@ atlas_add_library( G4AtlasTests
# Install files from the package:
atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} )
atlas_install_joboptions( share/*.py )
atlas_install_scripts( scripts/sim_*.py )
# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
from AthenaCommon.Logging import logging
from AthenaConfiguration.ComponentFactory import CompFactory
from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
from G4AtlasTests.G4AtlasTestsConfig import (
SiHitsTestToolCfg, TrtHitsTestToolCfg, LArHitsTestToolCfg,
TileHitsTestToolCfg, CaloCalibrationHitsTestToolCfg, MDTHitsTestToolCfg,
RPCHitsTestToolCfg, CSCHitsTestToolCfg, TGCHitsTestToolCfg,
LucidHitsTestToolCfg, ALFASimHitsTestToolCfg, ZDCHitsTestToolCfg,
LayerTestToolCfg, TruthTestToolCfg
)
def G4TestAlgCfg(toolList, flags, name="g4TestAlg", **kwargs):
mlog = logging.getLogger(name)
mlog.debug('Start configuration')
result = ComponentAccumulator()
kwargs.setdefault("SimTestTools", toolList)
G4TestAlg = CompFactory.G4TestAlg('G4TestAlg')
result.addEventAlgo(G4TestAlg)
return result
def FCPileUpCfg(flags, name='FCPilUup', **kwargs):
mlog = logging.getLogger('FCPileUpCfg')
mlog.debug('Start configuration')
result = ComponentAccumulator()
histSvc = CompFactory.THistSvc(Output=["truth DATAFILE='truth.root', OPT='RECREATE'"])
toolList = []
TruthTestTool = result.popToolsAndMerge(TruthTestToolCfg("TruthEvent", name="TruthTestTool", **kwargs))
toolList.append(TruthTestTool)
EvgenTruthTestTool = result.popToolsAndMerge(TruthTestToolCfg("GEN_EVENT", name="EvgenTruthTestTool", **kwargs))
toolList.append(EvgenTruthTestTool)
PileupTruthTestTool = result.popToolsAndMerge(TruthTestToolCfg("TruthEvent_PU", name="PileupTruthTestTool", **kwargs))
toolList.append(PileupTruthTestTool)
PileupEvgenTruthTestTool = result.popToolsAndMerge(TruthTestToolCfg("GEN_EVENT_PU", name="PileupEvgenTruthTestTool", **kwargs))
toolList.append(PileupEvgenTruthTestTool)
if flags.Detector.EnablePixel:
PixelHitsTestTool = result.popToolsAndMerge(SiHitsTestToolCfg("PixelHits", name, **kwargs))
toolList.append(PixelHitsTestTool)
PileupPixelHitsTestTool = result.popToolsAndMerge(SiHitsTestToolCfg("PileupPixelHits", name, **kwargs))
toolList.append(PileupPixelHitsTestTool)
if flags.Detector.EnableSCT:
SCT_HitsTestTool = result.popToolsAndMerge(SiHitsTestToolCfg("SCT_Hits", name, **kwargs))
toolList.append(SCT_HitsTestTool)
PileupSCT_HitsTestTool = result.popToolsAndMerge(SiHitsTestToolCfg("PileupSCT_HitsTestTool", name, **kwargs))
toolList.append(PileupSCT_HitsTestTool)
if flags.Detector.EnableTRT:
TrtHitsTestTool = result.popToolsAndMerge(TrtHitsTestToolCfg("TRTUncompressedHits", name, **kwargs))
toolList.append(TrtHitsTestTool)
PileupTrtHitsTestTool = result.popToolsAndMerge(TrtHitsTestToolCfg("PileupTRTUncompressedHits", name, **kwargs))
toolList.append(PileupTrtHitsTestTool)
if flags.Detector.EnableTile:
TileHitsTestTool = result.popToolsAndMerge(TileHitsTestToolCfg(flags.Sim.UsingGeant4, name, **kwargs))
toolList.append(TileHitsTestTool)
if flags.Detector.EnableLAr:
LArHitsTestToolEMB = result.popToolsAndMerge(LArHitsTestToolCfg("EMB", name, **kwargs))
toolList.append(LArHitsTestToolEMB)
LArHitsTestToolEMEC = result.popToolsAndMerge(LArHitsTestToolCfg("EMEC", name, **kwargs))
toolList.append(LArHitsTestToolEMEC)
LArHitsTestToolHEC = result.popToolsAndMerge(LArHitsTestToolCfg("HEC", name, **kwargs))
toolList.append(LArHitsTestToolHEC)
LArHitsTestToolFCAL = result.popToolsAndMerge(LArHitsTestToolCfg("FCAL", name, **kwargs))
toolList.append(LArHitsTestToolFCAL)
if flags.Detector.EnableTile:
CaloCalibHitsTestTool_LArAct = result.popToolsAndMerge(CaloCalibrationHitsTestToolCfg("LArActiveCaloCalibHitsTestTool", name, **kwargs))
toolList.append(CaloCalibHitsTestTool_LArAct)
CaloCalibHitsTestTool_LArInac = result.popToolsAndMerge(CaloCalibrationHitsTestToolCfg("LArInactiveCaloCalibHitsTestTool", name, **kwargs))
toolList.append(CaloCalibHitsTestTool_LArInac)
# CaloCalibHitsTestTool_LArDeadMat = result.popToolsAndMerge(CaloCalibrationHitsTestToolCfg("LArDeadMaterialCaloCalibHitsTestTool", name, **kwargs))
# toolList.append(CaloCalibHitsTestTool_LArDeadMat)
CaloCalibHitsTestTool_TileAct = result.popToolsAndMerge(CaloCalibrationHitsTestToolCfg("TileActiveCellCaloCalibHitsTestTool", name, **kwargs))
toolList.append(CaloCalibHitsTestTool_TileAct)
CaloCalibHitsTestTool_TileInac = result.popToolsAndMerge(CaloCalibrationHitsTestToolCfg("TileInactiveCellCaloCalibHitsTestTool", name, **kwargs))
toolList.append(CaloCalibHitsTestTool_TileInac)
# CaloCalibHitsTestTool_TileDeadMat = result.popToolsAndMerge(CaloCalibrationHitsTestToolCfg("TileDeadMaterialCaloCalibHitsTestTool", name, **kwargs))
# toolList.append(CaloCalibHitsTestTool_TileDeadMat)
CaloEntryLayerTestTool = result.popToolsAndMerge(LayerTestToolCfg("CaloEntry", name="CaloEntry", **kwargs))
toolList.append(CaloEntryLayerTestTool)
if flags.Detector.EnableMuon:
MDTHitsTestTool = result.popToolsAndMerge(MDTHitsTestToolCfg("MDT", name, **kwargs))
toolList.append(MDTHitsTestTool)
RPCHitsTestTool = result.popToolsAndMerge(RPCHitsTestToolCfg("RPC", name, **kwargs))
toolList.append(RPCHitsTestTool)
CSCHitsTestTool = result.popToolsAndMerge(CSCHitsTestToolCfg("CSC", name, **kwargs))
toolList.append(CSCHitsTestTool)
TGCHitsTestTool = result.popToolsAndMerge(TGCHitsTestToolCfg("TGC", name, **kwargs))
toolList.append(TGCHitsTestTool)
MuonEntryLayerTestTool = result.popToolsAndMerge(LayerTestToolCfg("MuonEntry", name="MuonEntry", **kwargs))
toolList.append(MuonEntryLayerTestTool)
MuonExitLayerTestTool = result.popToolsAndMerge(LayerTestToolCfg("MuonExit", name="MuonExit", **kwargs))
toolList.append(MuonExitLayerTestTool)
if flags.Detector.EnableLucid:
LucidHitsTestTool = result.popToolsAndMerge(LucidHitsTestToolCfg(name, **kwargs))
toolList.append(LucidHitsTestTool)
if flags.Detector.EnableALFA:
ALFASimHitsTestTool = result.popToolsAndMerge(ALFASimHitsTestToolCfg(name, **kwargs))
toolList.append(ALFASimHitsTestTool)
if flags.Detector.EnableZDC:
ZDCHitsTestTool = result.popToolsAndMerge(ZDCHitsTestToolCfg(name, **kwargs))
toolList.append(ZDCHitsTestTool)
result.merge(G4TestAlgCfg(toolList, flags, name, **kwargs))
result.addService(histSvc)
return result
if __name__ == "__main__":
from AthenaConfiguration.AllConfigFlags import initConfigFlags
from AthenaCommon.Logging import log
from AthenaCommon.Constants import DEBUG
from AthenaConfiguration.TestDefaults import defaultTestFiles
log.setLevel(DEBUG)
flags = initConfigFlags()
flags.Input.isMC = True
flags.Input.Files = defaultTestFiles.HITS_RUN2
flags.Exec.MaxEvents = 3
flags.fillFromArgs()
flags.lock()
from AthenaConfiguration.MainServicesConfig import MainServicesCfg
acc = MainServicesCfg(flags)
acc.popToolsAndMerge(FCPileUpCfg(flags))
print("INFO_FCPileUpCfg: Dumping config flags")
flags.dump()
print("INFO_FCPileUpCfg: Print config details")
acc.printConfig(withDetails=True, summariseProps=True)
acc.store(open('fcpileup.pkl', 'wb'))
......@@ -22,7 +22,3 @@ atlas_add_library( MCTruthAlgsLib
atlas_add_component( MCTruthAlgs
src/components/*.cxx
LINK_LIBRARIES MCTruthAlgsLib )
# Install files from the package:
atlas_install_joboptions( share/*.py )
theApp.Dlls += [ "MCTruthAlgs"]
theApp.TopAlg += ["TrackRecordFilter"]
try:
from AthenaCommon.GlobalFlags import globalflags
ddv=globalflags.DetDescrVersion()
except Exception:
# fall back use DetDescrVersion
print "WAR"+"NING globalflags.DetDescrVersion undefined. using DetDescrVersion instead"
ddv=DetDescrVersion
if (ddv[0:3]=="DC1" or ddv[0:3]=="DC2" or ddv[0:4]=="Rome" or ddv=="ATLAS-DC3-01" or ddv=="ATLAS-DC3-02" ):
TrackRecordFilter = Algorithm("TrackRecordFilter")
TrackRecordFilter.inputName="MuonEntryRecord"
del ddv
include( "AthenaPoolCnvSvc/ReadAthenaPool_jobOptions.py" )
include( "G4SimAthenaPOOL/G4SimAthenaPOOL_joboptions.py" )
include( "PartPropSvc/PartPropSvc.py" )
EventSelector = Service( "EventSelector" )
EventSelector.InputCollection = "rfio:/castor/cern.ch/user/c/costanzo/T1/rome.004100.digit.T1_McAtNLO_top._05002.pool.root.1"; #CHANGEME!!
theApp.Dlls += [ "MCTruthAlgs"]
theApp.TopAlg = ["TrackRecordFilter"]
MessageSvc = Service( "MessageSvc" )
MessageSvc.OutputLevel = 2
EvtMax=10
MessageSvc.defaultLimit = 9999999 # all messages
################################################################################
# Package: ISF_Example
################################################################################
# Declare the package name:
atlas_subdir( ISF_Example )
# Install files from the package:
atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} )
# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
################################################################################
# Package: SimulationJobOptions
################################################################################
# Declare the package name:
atlas_subdir( SimulationJobOptions )
# Install files from the package:
atlas_install_joboptions( share/*.py share/hive/*.py share/atlfast2/*.py share/heavyIons/*.py share/cosmics/*.py share/digitization/*.py share/subdetectors/*.py share/g4/*.py share/cavern/*.py share/pileup/*.py share/susy/*.py share/specialConfig/*.py )
##
## postInclude.FullTruth.py
##
from AthenaCommon.AlgSequence import AlgSequence
topSequence = AlgSequence()
for alg in topSequence:
if 'PileUpToolsAlg' in alg.name():
alg.PileUpTools["MergeMcEventCollTool"].DoSlimming = False
break
if 'MergeMcEventCollection' == alg.name():
alg.MergeMcEventCollTool.DoSlimming = False
break
##EOF
#########################################################
#
# SimulationJobOptions/postOptions.RelaxLArDigitThinnerCutsToZero.py
# Guillaume Unal
#
# Switches off LArDigitThinner cuts.
#
# This job option should be added via the postInclude
# command line argument.
#
#########################################################
from AthenaCommon.AlgSequence import AlgSequence
job = AlgSequence()
if hasattr(job,'LArDigitThinner'):
job.LArDigitThinner.EnergyCuts_Barrel = [ 0, 0, 0, 0 ]
job.LArDigitThinner.EnergyCuts_EndCap = [ 0, 0, 0, 0 ]
job.LArDigitThinner.EnergyCuts_HEC = 0
job.LArDigitThinner.EnergyCuts_FCAL = 0
######################################
#
# Requested by Dinos Bachas
# Purpose: switches on the new
# RT_Relation_DB_DigiTool in the
# MDT Digitization code replacing the
# current MDT_Response_DigiTool.
#
######################################
MDT_DIGI_DEBUG=1
#
# SimulationJobOptions/preInclude.noLArDigitThinnerConfig.py
#
#
from LArROD.LArDigits import DefaultLArDigitThinner
LArDigitThinner = DefaultLArDigitThinner('LArDigitThinner', addToAlgSeq = False)
#########################################################
#
# SimulationJobOptions/postOptions.Calo_InTimeOnlyPileUp.py
# John Chapman
#
# Only do pile-up in BC0 for the LAr and Tile sub-detectors.
#
# This job option should be added via the postInclude
# command line argument.
#
#########################################################
if DetFlags.digitize.LAr_on():
if DetFlags.pileup.LAr_on():
#changing the range of the LAr EM
from AthenaCommon.AppMgr import ServiceMgr
from PileUpComps.PileUpCompsConf import PileUpXingFolder
laremxingFolder = ServiceMgr.PileUpMergeSvc.Intervals['LArRangeEM']
laremxingFolder.FirstXing = 0
laremxingFolder.LastXing = 0
#changing the range of the LAr HEC
from AthenaCommon.AppMgr import ServiceMgr
from PileUpComps.PileUpCompsConf import PileUpXingFolder
larhecxingFolder = ServiceMgr.PileUpMergeSvc.Intervals['LArRangeHEC']
larhecxingFolder.FirstXing = 0
larhecxingFolder.LastXing = 0
#changing the range of the LAr FCAL
from AthenaCommon.AppMgr import ServiceMgr
from PileUpComps.PileUpCompsConf import PileUpXingFolder
larfcalxingFolder = ServiceMgr.PileUpMergeSvc.Intervals['LArRangeFCAL']
larfcalxingFolder.FirstXing = 0
larfcalxingFolder.LastXing = 0
if DetFlags.digitize.Tile_on():
if DetFlags.pileup.Tile_on():
#changing the range of the Tile
from AthenaCommon.AppMgr import ServiceMgr
from PileUpComps.PileUpCompsConf import PileUpXingFolder
tilexingFolder = ServiceMgr.PileUpMergeSvc.Intervals['TileRange']
tilexingFolder.FirstXing = 0
tilexingFolder.LastXing = 0
#########################################################
#
# SimulationJobOptions/postInclude.CavernBackgroundPostBeamDump.py
# Valeria Bartsch
# John Chapman
#
# Allow the central bunch crossing to be fixed at an empty
# BCID.
#
# Increase the time-window for pile-up to [-800,+800]ns for
# all MuonSpectrometer sub-detectors.
#
# This job option should be added via the postInclude
# command line argument.
#
#########################################################
from AthenaCommon.AppMgr import ServiceMgr
if hasattr(ServiceMgr, 'FixedArrayBM'):
ServiceMgr.FixedArrayBM.AllowEmptyT0BunchCrossing = True
else:
raise AttributeError("This fragment should only be used in jobs using FixeArrayBM!")
if DetFlags.digitize.CSC_on():
if DetFlags.pileup.CSC_on():
#changing the range of the CSC
from AthenaCommon.AppMgr import ServiceMgr
from PileUpComps.PileUpCompsConf import PileUpXingFolder
cscxingFolder = ServiceMgr.PileUpMergeSvc.Intervals['CscRange']
cscxingFolder.FirstXing = -800
cscxingFolder.LastXing = 800
if DetFlags.digitize.MDT_on():
if DetFlags.pileup.MDT_on():
#changing the range of the MDT
from AthenaCommon.AppMgr import ServiceMgr
from PileUpComps.PileUpCompsConf import PileUpXingFolder
MDTxingFolder = ServiceMgr.PileUpMergeSvc.Intervals['MdtRange']
MDTxingFolder.FirstXing = -800
MDTxingFolder.LastXing = 800
if DetFlags.digitize.RPC_on():
if DetFlags.pileup.RPC_on():
#changing the range of the RPC
from AthenaCommon.AppMgr import ServiceMgr
from PileUpComps.PileUpCompsConf import PileUpXingFolder
rpcxingFolder = ServiceMgr.PileUpMergeSvc.Intervals['RpcRange']
rpcxingFolder.FirstXing = -800
rpcxingFolder.LastXing = 800
if DetFlags.digitize.TGC_on():
if DetFlags.pileup.TGC_on():
#changing the range of the TGC
from AthenaCommon.AppMgr import ServiceMgr
from PileUpComps.PileUpCompsConf import PileUpXingFolder
tgcxingFolder = ServiceMgr.PileUpMergeSvc.Intervals['TgcRange']
tgcxingFolder.FirstXing = -800
tgcxingFolder.LastXing = 800
#svcMgr.MessageSvc.OutputLevel=VERBOSE
#########################################################
#
# SimulationJobOptions/postOptions.InDet_InTimeOnlyPileUp.py
# John Chapman
#
# Only do pile-up in BC0 for the CSC, MDT, RPC and TGC
# sub-detectors.
#
# This job option should be added via the postInclude
# command line argument.
#
#########################################################
if DetFlags.digitize.CSC_on():
if DetFlags.pileup.CSC_on():
#changing the range of the CSC
from AthenaCommon.AppMgr import ServiceMgr
from PileUpComps.PileUpCompsConf import PileUpXingFolder
cscxingFolder = ServiceMgr.PileUpMergeSvc.Intervals['CscRange']
cscxingFolder.FirstXing = 0
cscxingFolder.LastXing = 0
if DetFlags.digitize.MDT_on():
if DetFlags.pileup.MDT_on():
#changing the range of the MDT
from AthenaCommon.AppMgr import ServiceMgr
from PileUpComps.PileUpCompsConf import PileUpXingFolder
MDTxingFolder = ServiceMgr.PileUpMergeSvc.Intervals['MdtRange']
MDTxingFolder.FirstXing = 0
MDTxingFolder.LastXing = 0
if DetFlags.digitize.RPC_on():
if DetFlags.pileup.RPC_on():
#changing the range of the RPC
from AthenaCommon.AppMgr import ServiceMgr
from PileUpComps.PileUpCompsConf import PileUpXingFolder
rpcxingFolder = ServiceMgr.PileUpMergeSvc.Intervals['RpcRange']
rpcxingFolder.FirstXing = 0
rpcxingFolder.LastXing = 0
if DetFlags.digitize.TGC_on():
if DetFlags.pileup.TGC_on():
#changing the range of the TGC
from AthenaCommon.AppMgr import ServiceMgr
from PileUpComps.PileUpCompsConf import PileUpXingFolder
tgcxingFolder = ServiceMgr.PileUpMergeSvc.Intervals['TgcRange']
tgcxingFolder.FirstXing = 0
tgcxingFolder.LastXing = 0
#########################################################
#
# SimulationJobOptions/postOptions.PileUpTruth_BC0_OnlyConfig.py
#
# John Chapman
#
# Only keep truth information for BC0 (for non-truth-filtered
# background samples only).
#
# This job option should be added via the postInclude command line
# argument.
#
#########################################################
from AthenaCommon.AlgSequence import AlgSequence
topSequence = AlgSequence()
for alg in topSequence:
if 'PileUpToolsAlg' in alg.name():
alg.PileUpTools["MergeMcEventCollTool"].SaveOutOfTimeMinBias = False
alg.PileUpTools["MergeMcEventCollTool"].LowTimeToKeep = 0.0
alg.PileUpTools["MergeMcEventCollTool"].HighTimeToKeep = 25.0
break
if 'MergeMcEventCollection' == alg.name():
alg.MergeMcEventCollTool.SaveOutOfTimeMinBias = False
alg.MergeMcEventCollTool.LowTimeToKeep = 0.0
alg.MergeMcEventCollTool.HighTimeToKeep = 25.0
break
#########################################################
#
# SimulationJobOptions/postOptions.PileUpTruth_BC0_PT.GT.5GeV_OnlyConfig.py
# John Chapman
#
# Only keep truth information in BC0 and with PT>5GeV (for
# non-truth-filtered background samples only).
#
# This job option should be added via the postInclude
# command line argument.
#
#########################################################
from AthenaCommon.CfgGetter import getPublicTool
mergemceventcoll = getPublicTool("MergeMcEventCollTool")
mergemceventcoll.SaveOutOfTimeMinBias = False
mergemceventcoll.LowTimeToKeep = 0.0
mergemceventcoll.HighTimeToKeep = 25.0
mergemceventcoll.ptMin = 5000.0
#########################################################
#
# SimulationJobOptions/postOptions.PileUp_Minbias_Requested20100428_DigitConfig.py
# John Chapman
#
# Increase the cache refresh rate to 100% for minbias and
# cavern background samples.
# Correct the amount of minbias pile-up in BC0 to account for
# the fact that there is already a minbias event (the
# signal event) in that bunch crossing.
#
# This job option should be added via the postInclude
# command line argument.
#
# FIXME: DEPRECATED Use
# postInclude=SimulationJobOptions/postOptions.AlwaysReplaceUsedMinBiasAndCavernDigitConfig.py,SimulationJobOptions/postOptions.MinbiasPileUpOnMinbiasSignal.py
# instead DELETE THIS FILE
#
#########################################################
include("SimulationJobOptions/postOptions.AlwaysReplaceUsedMinBiasAndCavernDigitConfig.py")
include("SimulationJobOptions/postOptions.MinbiasPileUpOnMinbiasSignal.py")
#########################################################
#
# SimulationJobOptions/postInclude.Save7GeVpTPileUpTruthJets.py
# John Chapman
#
# Reconfigure MergeTruthJetsTool to save Truth Jets with pT > 7 GeV
# both in-time and out-of-time.
#
# This job option should be added via the postInclude
# command line argument.
#
#########################################################
from AthenaCommon.SystemOfUnits import GeV
from AthenaCommon.AlgSequence import AlgSequence
topSequence = AlgSequence()
for alg in topSequence:
if 'PileUpToolsAlg' in alg.name():
alg.PileUpTools["MergeTruthJetsTool"].InTimePtCut = 7.0 * GeV
alg.PileUpTools["MergeTruthJetsTool"].OutOfTimePtCut = 7.0 * GeV
break
if 'MergeTruthJets' == alg.name():
alg.MergeTruthJetsTool.InTimePtCut = 7.0 * GeV
alg.MergeTruthJetsTool.OutOfTimePtCut = 7.0 * GeV
break
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment