NuGen3_Madison

Download Report

Transcript NuGen3_Madison

NuGen III
K.Hoshina
May. 10 2013
IceCube spring collaboration meeting in Madison
History of neutrino simulation
•
•
•
NUSIM (Gary)
•
Gary’s fast neutrino simulation for AMANDA
ANIS (Marek)
•
•
Next generation of AMANDA neutrino simulation
Cross section tables, final interaction tables are
provided (used in NuGen too)
NeutrinoGenerator (Aya)
•
originally it was I3 version of ANIS, but renamed
when Aya implemented neutrino re-generation in
NuTau CC channel
Now NuGen is the third generation !
•
•
•
Before release V00-06-01 ( NuGen 1)
•
•
Used up to IC40 standard production
Contains bugs in weight calculation
From V00-06-01 to now ( NuGen II)
•
•
•
Weight bug fixed, added weighted calculation for
propagation inside the Earth
Code maintainer is changed from Aya to Kotoyo
Will be included in the first release of IceSim V4
Coming soon ! (NuGen III)
Older versions are still available with new IceSim, and will be
maintained as long as I’m the maintainer...
Why NuGen III
?
I want to use Genie
at detector!
I want to compare
effect of In-Earth
propagation with
various EarthModel
or neutrino cross
section, while
keeping neardetector simulation
unchanged!
Well... yes, I can implement them,
but future NuGen maintainers will cry... :(
(NuGen is complicated enough already!)
I want to use
CORSIKA as
neutrino source and
want to simulate
muon - neutrino
coincidence events!
I need only neardetector simulation
because I use my
own (oscillation)
calculation for in
Earth propagation !
How structures of code is changed?
v3 internal classes are in namespace “nugen”
(some of them are renamed from v2)
v1, v2 classes are in “legacy” directory
Source modules put one primary neutrino into
frame with the name of “NuGPrimary”
NuGen III consist of three modules
Source module
put a primary
neutrino
Propagator module
propagates the
neutrino up to
detection volume
VTXGenerator
module makes
secondaries within
detection volume
You may skip Propagator if you want
NuGen Sources
•
Three modules exist now and easy
to add more
•
•
•
I3NuGDiffuseSource
I3NuGPointSource
I3NuGSourceSelector
•
•
•
selects a neutrino from
I3MCTree
(use Nathan’s Corsika-reader)
Currently select a neutrino
randomly from all candidate
Stores “NuGPrimary” and
generation weight as
Added new option for Injection area
•
•
•
Current setting of
Injection Radius :
1200m
for straight downgoing
(upgoing) tracks,
more than 80% of
injection area is outside
of the detector
Some tracks are even
out of range of
photonics table (radius
680m)
NUSIM style injection area
•
•
Define cylindrical detector area outside of IceCube
Inject neutrinos which pass through the detector area
the injection area varies with injection zenith angle
Injection area (r14 in Nusim) is recorded in
MCWeightDict
OneWeight will compensate the effect
•
•
•
Propagation inside the Earth
•
I3NuGPropagator
•
•
•
•
Take a primary neutrino “NuGPrimary” from
frame
Propagate it up to near by the detector
Store one final-candidate neutrino in frame as
“NuGInIceNeutrino” and add propagation
weight to I3MCWeightDict
Will support table output in near future
(Similar as JULIeT table but contains only
neutrinos)
Vertex Generator Module
•
•
•
Take a particle “NuGInIceNeutrino”(if the neutrino
does not exist take NuGPrimary instead) and
calculate detection volume
Then make interaction vertex inside the detection
volume
Three interaction modes will be available
•
•
•
using NuGen’s final interaction tables
using Genie’s cross sections and vertex generator
Hybrid (use Genie for low energy, NuGen for high
energy)
Coding is not finished yet, but first integration
of Genie to NuGen is done!
Genie Integration to NuGen
Good bye genie::GMCJDriver !
•
•
GMCJDriver is a large program
•
Not easy to understand, IceCube-type experiment is
not supposed by developers, thus may contain
problematic change in any update
All we need is
1. Cross Section and
2. Functions to make Final State Particles
Such core codes will be relatively stable, then we don’t have to
worry about version dependence of Genie too much (hopefully).
Step 1 : Genie Stand-alone test
•
Make an stand-alone genie program that follows
exactly same procedure as NuGen
1. Define detection cylinder volume, and inject a
neutrino from the forward cap of the cylinder
2. Calculate total cross section for the injected
neutrino and volume material
3. Calculate survival probability Psurv then get
interaction probability Pint = 1.0 - Psurv
4. Select a vertex randomly, and calculate position
weight
5. Make a vertex and generate secondaries
•
Then compare it to standard Genie!
100000 events simulation results
(no weight applied)
Blue : GMCJDriver with weight opt (ice)
Green : GMCJDriver default (ice)
Red : Genie-NuG driver (ice)
Violet : Genie-NuG driver (ice + rock)Low statistics at Low E
100000 events simulation results
(no weight applied)
•
Secondary = secondary lepton
(Muon for CC, Neutrino for NC)
100000 events simulation results
(weighted)
100000 events simulation results
(weighted)
Step 2 : I3NuGGenie (interaction
module)
1. Port stand-alone Genie-NuG program to nugen as
an interaction module (I3NuGGenie)
•
•
with correct geometry (Ice + Rock)
PrimarySource : I3NuGDiffuseSource
•
•
Energy range : 1GeV ~ 200GeV
Zenith range : 0deg ~ 180deg
2. Compare the result with current NuGen II
simulation (with InjectOnCylinder option)
Comparison : NuGen and NuGGenie
Step 3 : Make a unified module
•
Thinking about Hybrid option, a unified
VertexGenerator will be easier to manage
•
Core functions like genie::GetXsec (get cross
section) and genie::GenerateEvent (making
secondary particles) could be implemented as a
service in genie-icetray project
But for now, we may use I3NuGGenie (with Ice +
Bedrock) as a substitute of genie-icetray,
especially for HE muon background study
Plan towards next release
•
•
•
•
•
Send request to genie-icetray maintainer (Ken?
Claudio?) to move following headers to public
directory
•
•
ConvertToGST.h
ConvertPDGEncodingToI3ParticleType.h
If LowEnergy group want to use or check
I3NuGGenie very soon, make new release as
NuGen 2.5 after cleaning source codes
Add table writer for propagator
Add unified vertex generator
Then release NuGen 3 !
Backup
Benchmark mode
•
New event class dedicated for generating benchmark
dataset
•
•
•
may be useful to get muon / cascade effective area
skips InEarth propagation, interaction weight is always
1.0
currently three options are supported
1. generate charged lepton at front edge of the
detector area, with primary’s energy and direction
2. generate charged lepton inside the detector area,
with primary’s energy and direction
3. generate charged leptons (and hadron cascades)
inside the detector area with standard process
(energy of secondary particles are smaller than
Benchmark Mode
gevgen_simpledriver
RandomGen * rnd = RandomGen::Instance(); while (ievent < gOptNevents) { // 1. get neutrino energy,
direction and position Particle injected_nu = InjectANeutrino(particles, rnd); // 2. calculate total column depth,
surviving probability etc. and fill stepping info CalcSteppingInfo(injected_nu, gevg_drivers, matratiomap,
stepmap)
// 3. find interaction position in uniform distribution
double cdep = total_cdep * rnd->RndGen().Rndm();
// 4. select target material at the column depth and get proper GEVGDriver SteppingMap::iterator iter1=
stepmap.lower_bound(cdep); StepInfo theStep = iter1->second;
// choose a target! double total_nsigma = theStep.fTotalNsigma_; double nsigma = total_nsigma * rnd>RndGen().Rndm();
map<double, GEVGDriver*>::iterator iter2 = theStep.fDriverMap_.lower_bound(random2 * nsigma);
GEVGDriver * driver = iter2->second;
// 5. Generate an event! TLorentzVector nup4 = injected_nu.GetMomentum(); EventRecord * event =
driver->GenerateEvent(nup4);
gevgen_i3
•
Basically same as gevgen (with GMCJDriver) :
•
•
•
•
Primary flux is always E-1
Interaction vertex is uniformly distributed in
detection volume (no position weight)
Should perform exactly same as genie-icetray
Weighted option is available
(Word “Weight” used in Genie is a little different
from what we usually use : it’s the interaction
weight but doesn’t mean 1 - Psurv.)
Weight difference
•
•
IntWeight : 1 - exp (- n*X*sigma)
IntWeight_lowE : n*X*sigma
IceOnly
IceRock
Vertex positions (weighted)