TrkAnaTutorial: Difference between revisions
No edit summary |
No edit summary |
||
Line 13: | Line 13: | ||
Before starting this tutorial you should: | Before starting this tutorial you should: | ||
* know about the physics of Mu2e | * know about the physics of Mu2e; | ||
* have the appropriate docker container set up | * have the appropriate docker container set up; and, | ||
* know how to run the Mu2e Offline software and ROOT | * know how to run the Mu2e Offline software and ROOT | ||
== Basic Exercises == | == Basic Exercises == | ||
Line 29: | Line 21: | ||
<ol style="list-style-type:lower-alpha"> | <ol style="list-style-type:lower-alpha"> | ||
<li>First, let's create a simple TrkAna tree by running the first example on a CeEndpoint-mix file:</li> | <li>First, let's create a simple TrkAna tree by running the first example on a CeEndpoint-mix file:</li> | ||
<nowiki> > mu2e -c | <nowiki> > mu2e -c $TUTORIAL_BASE/TrkAna/fcl/TrkAnaTutEx01.fcl -S $TUTORIAL_BASE/TrkAna/filelists/mcs.lst </nowiki> | ||
<li> Now let's have a look at the TrkAna tree with the ROOT command line</li> | <li> Now let's have a look at the TrkAna tree with the ROOT command line</li> | ||
<nowiki> > root -l trkana-ex01.root | <nowiki> > root -l trkana-ex01.root | ||
Line 42: | Line 34: | ||
<li> If you look in the fcl file you ran, there are few important lines: </li> | <li> If you look in the fcl file you ran, there are few important lines: </li> | ||
<ol style="list-style-type:lower-roman"> | <ol style="list-style-type:lower-roman"> | ||
<li>This imports an example TrkAna module configuration (you can find it in TrkDiag/fcl/prolog.fcl) </li> | <li>This imports an example TrkAna module configuration (you can find it in $MU2E_BASE_RELEASE/TrkDiag/fcl/prolog.fcl) </li> | ||
<nowiki> TrkAnaEx01 : { @table::TrackAnalysisReco } </nowiki> | <nowiki> TrkAnaEx01 : { @table::TrackAnalysisReco } </nowiki> | ||
<li>This is where we set the input KalSeedCollection (KFFDeM = '''K'''al'''F'''inal'''F'''it '''D'''ownstream '''eM'''inus)</li> | <li>This is where we set the input KalSeedCollection (KFFDeM = '''K'''al'''F'''inal'''F'''it '''D'''ownstream '''eM'''inus)</li> | ||
Line 131: | Line 123: | ||
* Use this place to add links to reference materials. | * Use this place to add links to reference materials. | ||
* [[TrkAna]] wiki page | * [[TrkAna]] wiki page | ||
=== A Useful Glossary === | |||
; ROOT : data analysis framework developed at CERN | |||
; KalSeed : data product that represents a track | |||
; CeEndpoint-mix : dataset name for CeEndpoint (i.e. mono-energetic electrons) with background frames mixed in | |||
; KalFinalFit : the module name for the final stage of the Kalman filter fit for the track | |||
; TrkQual : an artificial neural network (ANN) that takes parameters from the track and outputs a value between 0 (poorly reconstructed) and 1 (well-reconstructed) |
Revision as of 18:40, 29 May 2019
Under Construction!
This tutorial is currently being written
Tutorial Session Goal
A TrkAna tree is a ROOT TTree where each entry in the tree represents a single track. The TrkAna tree is created by the TrackAnalysisReco module of Mu2e Offline which runs over a KalSeedCollection.
In this tutorial you will:
- create TrkAna trees using the Mu2e Offline software; and,
- analyze them using the ROOT command line and ROOT macros.
Session Prerequisites
This tutorial should be useful for anyone starting out with TrkAna tree analysis
Before starting this tutorial you should:
- know about the physics of Mu2e;
- have the appropriate docker container set up; and,
- know how to run the Mu2e Offline software and ROOT
Basic Exercises
Exercise 1: Creating a simple TrkAna tree
- First, let's create a simple TrkAna tree by running the first example on a CeEndpoint-mix file: > mu2e -c $TUTORIAL_BASE/TrkAna/fcl/TrkAnaTutEx01.fcl -S $TUTORIAL_BASE/TrkAna/filelists/mcs.lst
- Now let's have a look at the TrkAna tree with the ROOT command line > root -l trkana-ex01.root root[n]: TrkAnaEx01->cd() root[n]: trkana->Print() You will see the full TrkAna tree structure. The description of all the branches can be found here (TODO)
- We can plot the track momentum, calorimeter cluster energy of an associated cluster (ent = entrance, tch = TrkCaloHit) root[n]: trkana->Draw("trkent.mom") root[n]: trkana->Draw("trktch.edep")
- With this last command you will see some entries at -1000. This means that there is no associated calorimeter cluster for this track. To exclude these we want to want to add a cut: root[n]: trkana->Draw("trktch.edep", "trktch.active==1")
- If you look in the fcl file you ran, there are few important lines:
- This imports an example TrkAna module configuration (you can find it in $MU2E_BASE_RELEASE/TrkDiag/fcl/prolog.fcl) TrkAnaEx01 : { @table::TrackAnalysisReco }
- This is where we set the input KalSeedCollection (KFFDeM = KalFinalFit Downstream eMinus) physics.analyzers.TrkAnaEx01.candidate.input : "KFFDeM"
- This is where we set the output branch name physics.analyzers.TrkAnaEx01.candidate.branch : "trk"
- Set the lowest diagnostic level (0 = simple list of tracks) physics.analyzers.TrkAnaEx01.diagLevel : 0
- Here we make sure we are not touching the MC truth physics.analyzers.TrkAnaEx01.FillMCInfo : false
- (Optional): Run on a CeplusEndpoint-mix file and get a list of positively-charged tracks. What is the momentum of these tracks?
- (Optional): Create a second instance of the TrackAnalysisReco module. Have one set to look for negatively-charged tracks and the other set to look at positively charged tracks. Run on muplusgamma-mix? How many
Exercise 2: Calculating the Ce efficiency
Now that you can create a trkana tree, let's calculate something! (Will need to explain PBI weight)
- Create a TrkAna tree with CeEndpoint-mix and add PBI weight mu2e -c TrkDiag/fcl/TrkAnaTutEx02.fcl -S mcs.mu2e.CeEndpoint-mix.lst This fcl file has added the following line: physics.TrkAnaTrigPath : [ @sequence::TrkAnaReco.TrigSequence ] You can search for that parameter in TrkDiag/fcl/prolog.fcl but simply it adds the PBIEventWeight module (PBI = ProtonBunchIntensity) and TrkQual outputs
- here is an example ROOT macro that plots the track momentum onto a histogram with 0.5 MeV wide bins root -l TrkDiag/test/TrkAnaTutEx02.C
- Add the following signal cuts to the Draw function
- the fit is successful (trk.status > 0)
- the track is in the time window of 700 ns -- 1695 ns (trk.t0)
- the tan-dip of the track is consistent with coming from the target 0.577350 -- 1.000 (trkent.td)
- the impact parameters of the track is consistent with coming from the target -80 mm -- 105 mm (trkent.d0)
- the maximum radius of the track is OK 450 mm -- 680 mm (trkent.d0 + 2./trkent.om)
- the track is of good quality (trk.trkqual > 0.8)
- Because we simulated each event with a different proton bunch intensity, each track should be weighted by the PBIWeight. To do this you will want to modify the cut command to add the event weighting: evtwt.PBIWeight*(cuts)
- Now we can count the number of tracks that pass all these cuts hRecoMom->Integral()
- We can also integrate in the momentum signal region. Be careful TH1F::Integral takes bin numbers as its arguments and not x-values. You can find a bin for a given x-value with hist->GetXaxis()->FindBin(x-value). Be sure to make sure you don't go one bin too high!
- To calculate the efficiency you need to know the number of events generated for this simulation: genCountLogger
- calculate the Ce efficiency
- An example solution macro can be found in TrkDiag/test/TrkAnaTutEx02Soln.C
- (Optional): plot results and TLines on momentum plot, can you change cut and lines follow
- (Optional): run two instances of TrackAnalysisReco for positive and negative tracks and plot the momentum distribution of both on the same set of axes with different colours
- (Optional): make a cut flow plot with a TrkAna loop
Exercise 3: Adding MC truth
Because we are running on simulated data, we know the truth of what happened. How well is our detector doing?
- run TrkAnaReco.fcl to add MC truth
- plot reco - truth for momentum or something
- do a double-sided crystal ball fit
Exercise 4: Following genealogy
Can also see the important steps in the genealogy(run on a different MDC2018 sample?). Explain difference between primary and gen branches
- something
For any other intermediate steps in the genealogy, you will need to run Offline.
Exercise 5: Adding supplemental tracks
There might be other tracks that are important to your analysis (e.g. upstream going tracks)
- run with supplemental tracks
- look for reflected tracks? compare DeM to DmuM?
- check for CRV coincidence?
Conclusion
This last exercise created a TrkAna tree that is the same the one created in TrkAnaReco.fcl
Advanced Exercises
Exercise 1: Hit level diagnostics?
Exercise 2: TrkQual?
Exercise 3: Event weighting?
Run on flateminus-mix with DIO weights and plot that
Exercise 4: Running reconstruction?
Exercise 5: Retraining TrkQual?
Reference Materials
- Use this place to add links to reference materials.
- TrkAna wiki page
A Useful Glossary
- ROOT
- data analysis framework developed at CERN
- KalSeed
- data product that represents a track
- CeEndpoint-mix
- dataset name for CeEndpoint (i.e. mono-energetic electrons) with background frames mixed in
- KalFinalFit
- the module name for the final stage of the Kalman filter fit for the track
- TrkQual
- an artificial neural network (ANN) that takes parameters from the track and outputs a value between 0 (poorly reconstructed) and 1 (well-reconstructed)