Download - NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

Transcript
Page 1: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

NuGen IIIK.Hoshina

May. 10 2013IceCube spring collaboration meeting in Madison

Page 2: 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

Page 3: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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...

Page 4: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

Why NuGen III ?

I want to use CORSIKA as neutrino source and want to simulate muon - neutrino coincidence events!

I want to compare effect of In-Earth propagation with various EarthModel or neutrino cross section, while keeping near-detector simulation unchanged!

Well... yes, I can implement them, but future NuGen maintainers will cry... :((NuGen is complicated enough already!)

I need only near-detector simulation because I use my own (oscillation) calculation for in Earth propagation !

I want to use Genie at detector!

Page 5: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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”

Page 6: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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

Page 7: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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 I3MCWeightDict in frame

Page 8: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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)

Page 9: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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

Page 10: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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)

Page 11: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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!

Page 12: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

Genie Integration to NuGen

• 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

Good bye genie::GMCJDriver !

Such core codes will be relatively stable, then we don’t have to worry about version dependence of Genie too much (hopefully).

Page 13: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.
Page 14: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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!

Page 15: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

100000 events simulation results

(no weight applied)

Low statistics at Low E

Blue : GMCJDriver with weight opt (ice)Green : GMCJDriver default (ice)Red : Genie-NuG driver (ice)Violet : Genie-NuG driver (ice + rock)

Page 16: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

100000 events simulation results

(no weight applied)

• Secondary = secondary lepton(Muon for CC, Neutrino for NC)

Page 17: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

100000 events simulation results (weighted)

Page 18: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

100000 events simulation results (weighted)

Page 19: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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)

Page 20: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

Comparison : NuGen and NuGGenie

Page 21: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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

Page 22: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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 !

Page 23: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

Backup

Page 24: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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 primary)

Page 25: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

Benchmark Mode

Page 26: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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);

Page 27: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

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.)

Page 28: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

Weight difference

• IntWeight : 1 - exp (- n*X*sigma)

• IntWeight_lowE : n*X*sigma

IceOnly IceRock

Page 29: NuGen III K.Hoshina May. 10 2013 IceCube spring collaboration meeting in Madison.

Vertex positions (weighted)