GENIE: Event Record

  • I have updated the package to access GENIE Event Record
  • GENIE Event Record gives very detailed information about the neutrino interaction
  • Using Event Record, I am able to do the following things
    • Access particles inside nucleus
    • Saving information for
      • Pi0
      • Pi0 Mother
      • Pi0 GrandMother
    • Creating a Final State Particle Table to see what is really going on
  • However, I am NOT using GENIE: Event Record to tag my signal.
  • Signal is defined on Final State Particles as out of Nucleus.

 

Kinematics Calculations

Event Kinematics Calculations

  • Equations Used

ss

  • Kinematics Calculations Requires:
    • Muon 4-Momentum
    • Proton Kinetic Energy
    • Pi0  Total Energy
  • Two Different Signal Categories
    • Gold: Long Proton
    • Silver1: Short Proton

Task: Select Leading Proton

Different scenarios for Proton Candidates in the Event

  • No Proton Candidate:
    • Leading Proton = Proton at Rest
  • Single Proton Candidate:
    • Leading Proton
  • Multiple Proton Candidate:
    • Leading Proton = Highest Proton Scored Candidate
  • PROBLEM: In case of 1 or more Proton Candidates
    • We can have a proton candidate with a very low score
    • I think we need a selection for selecting Leading Proton

truthIsPlausible() Update

  • truthIsPlausible() is one of the mandatory functions for MINERvA Framework
  • Recently it was updated. Here is the summary of the update:

truthIsPlausible() is now a pure virtual function of MinervaAnalysisTool, so you must implement it. It is called automatically by PhysicsEventAnalysisAlg AFTER reconstructEvent() and interpretEvent() are run. If it returns false, the event is not included in the analysis ntuple

  • I am using muonIsPlausible() which checks whether the muon prong consist of MC Hits
  • In my package, truthIsPlausible() is NOT doing anything for now
  • In future I may implement truthIsPlausible() to check proton or pi0 hits in addition to muon
  • There is no longer “Cut_Event_Not_Plausible”

v1_06

  • Modularity Improved
  • New Analysis Parameter nProngs
    • min_nProngs = 2
    • max_nProngs = 2,3, etc… (Can be varied)
  • Options File Modified for the nProngs Parameters
  • Signal Definition is Changed!
    • Signal_Gold
      • Long Proton (KE > 120 MeV)
      • 1 Pi0 or 2x Gamma
      • No Other
    • Signal_Silver1
      • Short Proton (KE < 120 MeV)
      • 1 Pi0 or 2x Gamma
      • No Other
  • Documentation Removed: ProcessAna_Scripts.txt

Signal Definition Revised

  • tagTruth() Function uses truth information to tag an event as Signal or not
  • Information for Signal Selection
    • All information is coming from truth
    • All Final State particles are the particles coming out of nucleus.
      • 2x Gamma = 1Pi0 Decayed inside Nucleus
  • Requirements for Signal
    • Vertex in Fiducial Volume
    • CC – Neutrino Interaction
  • After the requirements we have 2 Branches
    • Signal: Gold
      • 1 Pi0 or 2xGamma
      • Long Proton (KE > 120MeV)
      • No Other Particle (neutrons and muon does not counted)
    • Signal: Silver1
      • 1 Pi0 or 2x Gamma
      • Short Proton (KE < 120 MeV)
      • No Other Particle (neutrons and muon does not counted)
  • If either of the Gold or Silver1 is TRUE, event marked as SIGNAL

nProngs Study

Sample 1

  • Data Folder: CCProtonPi0/MC/v1_06
  • min_nProngs = 2
  • max_nProngs = 2
  • Efficiency wrt Fiducial Events = 1.89
  • Purity = 21.88

Sample 2

  • Data Folder: CCProtonPi0/MC/v1_06/nProngs3
  • min_nProngs = 2
  • max_nProngs = 3
  • Efficiency wrt Fiducial Events = 2.46
  • Purity = 18.59

Comments:

  • Purity is very low in both cases – I was expecting an increase in Purity especially in nProngs = 2 Case
  • Signal Definition, needs to be investigated

Delta Resonance Study

  • Average Momentum Required to get out of Iron Nucleus  = 263 MeV
  • Q2 Distribution for All protons and Protons with Momentum  higher than 263 MeV
  •  q_sq_Imposed
  • MINERvA Threshold for successful identification of a proton is 480 MeV 
  • See Presentation in Group Meeting: 2014_10_24_DeltaResonance

v10r9p1 Job Submission

  • Job Submission uses SL6 Machines
  • Use minervagpvm01 and build every package on there
  • ./ProcessAna.py --mc --run 13200 --subrun 5 --usecat --ana_tool CCProtonPi0 --os=SL6 --inv resurrection --outdir /minerva/data/users/oaltinok/CCProtonPi0/MC/v1_06/test --opts /minerva/app/users/oaltinok/cmtuser/Minerva_v10r9p1/Tools/SystemTests/options/MCFullChain/MCAna_CCProtonPi0_Debug.opts
  • Using minervagpvm02 DOES NOT WORK

v1_05

  • Options file Ana_CCProtonPi0.opts Improved
    • More Control for CCProtonPi0 Flow
  • Debugging Messages from older versions removed
  • New NTuple Data Added to track all of the CUTs
  • New Function: setVertexData()
  • Class: AngleScan
    • Styling Modified to match Package Styling
    • Comments Added
  • Class: ClusterVectorInfo
    • Styling Modified to match Package Styling
    • Comments Added
  • Prong Colors Added for Scanning Sessions
  • New Documentation: ProcessAna_Scripts.txt

Status Update: Fake Pi0 Reconstruction

  • First we suspected it is due to proton hits
  • I did some tests on Cluster History at different stages of reconstruction
    • Before Everything
    • Before Muon
    • Before Michel
    • Before Proton
    • Before Pi0 Reconstruction
    • etc…
  • Find out that Pi0 Reconstruction DOES NOT touch proton prongs.
    • This is good. We are not having extra hits from proton/pion hits
    • However, this means that our first assumption is wrong! There is some other problem!
  • Prof. Mann and I decided that the best way to figure out what is going on is a scanning session of two sample of events
    • Signal with FAILED Reconstruction
    • Background with SUCCESSFUL Reconstruction

Cluster History Test

Test 1: Proton Prong Cluster History

  • Checking Cluster History of a single prong
    • Before: Used
    • After: Used

Test 2: Cluster History in Different Stages

  • Got all clusters and checked their history before each stage
    • Example Result:
    • N(Unused) N(Used)
    • Before Reco 41 120
    • Before Muon 41 120
    • Before Michel 41 120
    • Before Proton 41 120
    • Before Pi0 41 120
    • After Reco 0 161
  • Findings
    • Prong Clusters are already USED
    • There are additional clusters which are unused are used in Pi0 Reconstruction
    • In 2 sample Michel Stage also changed cluster History – See full list: NClusters Sheet1

v4_7

  • Modified for CCProtonPi0 v1_04 Output
  • All Histograms Types Changed
    • Float to Double
    • TH1F to TH1D
    • TH2F to TH2D
  • Cut Table Statistics
    • Cut_Other: Represents all other cuts which are not tracked by CCProtonPi0 Package
  • Stacked Histogram for Pi0 Invariant Mass

v1_04

  • Revised Pi0 Reconstruction
    • Global Variables Used in all functions
    • Removed unused functions and variables
    • ConeBlobs()
      • Variable Naming Match
      • Return type changed: StatusCode to bool
        • Returns false if setPi0ParticleData() fails
      • ConeBlobs() main function that controls Pi0 Reconstruction.
        • If it fails, the reconstructEvent() for that event stops.
    • VtxBlob()
      • Return type changed: StatusCode to bool
        • Always returns true (return type reserved for future implementation)
    • processBlobs()
      • Removed unused variables
      • Return type changed: StatusCode to void
  • Options File Modifications
    • New Options files for DEBUG
    • Original options file set to INFO

v1_03

  • correctProtonProngEnergy()
    • Fixed a bug causing P4(Proton) = (nan,nan,nan,nan)
    • returns bool if Energy Correction Fails
  • setProtonParticleData()
    • double vertexZ no longer input parameter
    • Using Global Variable m_PrimaryVertex

Bug: correctProtonProngEnergy()

Problem:

  • For some events 4-Momentum is zero
  • two fail modes observed:
    1. kinked tracks – if kinked track has 0 energy
    2. If particle already has 0 energy

Attempts

  1. kinked tracks
    • Currently correctProtonProngEnergy() returns the final tracks energy as prong energy
    • Total Energy should be used
    • Summing 4-Momentum for each track in a prong
  2. If particle already has 0 energy
    • Check Particle energy before correctProtonProngEnergy()
    • if(E == 0) proton_isRecoGood = -1
    • else proton_isRecoGood = 1
  3. correctProtonProngEnergy() returns bool
    • returns false incase function fails
    • in this case use default particle 4-Momentum

v1_02

  • TG4Trajectory Map Removed
  • Muon Reconstruction
    • Using Global Variables
      • m_MuonTrack
      • m_MuonProng
      • m_MuonParticle
    • SetMuonParticleData() Improved
  • Proton Reconstruction
    • Fixed a bug causing empty NTuple Branches even with a successful proton reconstruction
    • Using Global Variables
      • m_ProtonProngs
      • m_ProtonParticles
    • Stop Algorithm if CreateTrackedParticles() fails
    • New Variable Cut_Particle_None
    • Removed Proton Score Cut
    • getProtonProng() Improved
    • SetProtonParticleData() Improved
    • Branches initialized to SENTINEL = -9.9
  • Global Variable: m_PrimaryVertex
    • Still need to pass the variable to CCPi0 Functions – Some of the functions outside the Global Scope
  • Found a new bug in correctProtonProngEnergy()
    • If the function changes proton energy, NTuple Branches for Momentum and Energy does not filled correctly
    • Will fix this with v1_03

Debugging for Proton Reconstruction

Problem and Reason

  • Although recontructEvent() returns with a successful proton reconstruction; in some cases the NTuple branches for proton are empty.
  • Possible Reason:
    • getProtonProng() and setProtonParticleData() functions are not correctly working!
  • Using Global Variables making sure that getProtonProng() and setProtonParticleData() functions access SAME proton prong information.
  • This fix will be included under v1_2

Test Details

Test 1:

  • Global Variable:
    • testDouble
  • Function Used:
    • getProtonProng()
  • Did not passed variables to function
  • Assigned Value:
    • Before = 1987
    • Inside = 1986
  • Observed Value:
    • Before Call = 1987
    • Inside, Before Assignment = 1987
    • Inside, After Assignment = 1986
    • After Call = 1986
  • Test Results:
    • Do not PASS Global Variables to the Functions

Test 2:

  • Class Private Member:
    • testDouble
  • Test Results:
    • DOES NOT Compile
    • const functions CANNOT modify member variables

Test 3:

  • Global Variable:
    • testDouble
  • Functions Used:
    • getProtonProng() and setProtonParticleData()
  • Did not passed variables to function
  • Assigned Values and Observed Values were matched
  • Test Results:
    • getProtonProng() and setProtonParticleData() can access and modify the testDouble

Test 4:

  • Global Variables:
    • Minerva::ProngVect m_protonProngs;
    • Minerva::ParticleVect m_protonParticles;
  • Function Used: getProtonProng()
    • Before Call, m_protonProngs.size() = 0
    • After Call, m_protonProngs.size() = 1
  • Did not passed variables to functions
  • Test Results:
    • getProtonProng() can access and modify m_protonProngs;

Test 5:

  • Global Variables:
    • Minerva::ProngVect m_protonProngs;
    • Minerva::ParticleVect m_protonParticles;
  • Function Used:
    • getProtonProng() and setProtonParticleData()
  • Did not passed variables to functions
  • Test Results:
    • getProtonProng() and setProtonParticleData() can access and modify m_protonProngs;
    • PROBLEM: Need to clear m_protonProngs vector before each iteration.

Test 6:

  • Global Variables:
    • Minerva::ProngVect m_protonProngs;
    • Minerva::ParticleVect m_protonParticles;
  • Function Used:
    • getProtonProng() and setProtonParticleData()
  • Did not passed variables to functions
  • Testing for actual data analysis
  • Test Results:
    • Successful! – Works as expected!

v4_6

  • New Histograms for preFilter() Results
  • Pi0 invariant mass histogram moved under Pion Class
  • Studies integrated with package
    • Studies folder removed
  • Proton Reconstruction fails even foundProton triggerred as true.
    • I will investigate it on Monday

v1_01

  • PreFilterPi0()
    • Getting Vertex as input
    • Return Value Changed: StatusCode -> bool
    • Debug Messages and Comments
    • New Variables:
      • Rejected Energy
      • Status
        • preFilter_Result     
        • 0 = Passes Filter     
        • 1 = Rejected by Target Filter     
        • 2 = Rejected by Max Other     
        • 3 = Rejected by Min Other
  • tagTruth()
  • Final State Particle Table as INFO
    • m_writeFSParticle_Table controls execution
  • Using reverse_iterator
  • setParticleData Functions
    • Return Value Changed: StatusCode -> bool