Manual
The output files of this analysis are organized as follows:
<analysis-dir>/output/<sim-set>/<rn>/SexaquarkResults_<v0-option>_<index>.root
<analysis-dir>/output/<sim-set>/<rn>/AnalysisResults_<v0-option>_<index>.root
where:
<analysis-dir>: main analysis directory,/home/ceres/borquez/work/analysis<sim-set>: could bedata,only_bkg,only_V0s,signal+bkg<rn>: run number<v0-option>:TrueV0s,CustomV0s,OfficialV0s.<index>: 3-digit number
SexaquarkResults.root contain a TTree called "Sexaquarks", which contains the information of the formed anti-sexaquark candidates and both of the V0s that form it, assuming the anti-sexaquark + neutron -> neutral kaon short + anti-lambda reaction channel.
AnalysisResults.root contain a TList called "Trees", which contains a TTree called "Events", which contains the information of every generated event: the MC particles, the reconstructed tracks and the V0s formed with the chosen <v0-option>.
There are certain branches in the "Sexaquarks" tree (within a SexaquarkResults_<v0-option>_<index>.root file) that index to a position in the vectors of the "Events" tree (within the analogous AnalysisResults_<v0-option>_<index>.root).
How to read a SexaquarkResults file
The structure of the Sexaquarks tree is a flat format, i.e., each entry (or row) corresponds to a different anti-sexaquark candidate.
The branches of this tree, that contain the information of the reconstructed candidate, are:
event: event number (entry number in the analogousAnalysisResults_<v0-option>_<index>.rootfile)Idx_V0A: index of first daughter (in the V0s vector atAnalysisResults_<v0-option>_<index>.root)Idx_V0B: index of second daughter (in the V0s vector atAnalysisResults_<v0-option>_<index>.root)E: energyPx: x-component of the momentumPy: y-component of the momentumPz: z-component of the momentumM: inv. mass, reconstructed by assuming nucleon at rest. When kinematics don’t allow the subtraction of the neutron invariant mass in the conservation of energy (resulting in a negative value inside the square root), the mass is arbitrarily set to -1.X: x-coordinate of secondary vertexY: y-coordinate of secondary vertexZ: z-coordinate of secondary vertexDCA: distance of closest approach between the V0s that form the anti-sexaquark, after being propagated to a common vertexisSignal:kTRUEif signal,kFALSEif background
The remaining branches of this tree, that contain the information of the V0s (V0A and V0B) that form the current candidate on that row, are:
V0<A,B>_Idx_Pos: index of positive daughter (in the tracks vector atAnalysisResults_<v0-option>_<index>.root)V0<A,B>_Idx_Neg: index of negative daughter (in the tracks vector atAnalysisResults_<v0-option>_<index>.root)V0<A,B>_Px: x-component of the momentumV0<A,B>_Py: y-component of the momentumV0<A,B>_Pz: z-component of the momentumV0<A,B>_X: x-coordinate of V0V0<A,B>_Y: y-coordinate of V0V0<A,B>_Z: z-coordinate of V0V0<A,B>_Pos_Px: x-component of positive track momentum at V0 positionV0<A,B>_Pos_Py: y-component of positive track momentum at V0 positionV0<A,B>_Pos_Pz: z-component of positive track momentum at V0 positionV0<A,B>_Neg_Px: x-component of negative track momentum at V0 positionV0<A,B>_Neg_Py: y-component of negative track momentum at V0 positionV0<A,B>_Neg_Pz: z-component of negative track momentum at V0 positionV0<A,B>_isSignal:kTRUEif signal,kFALSEif backgroundV0<A,B>_E_asK0: energy of V0, assuming it’s a K0V0<A,B>_E_asAL: energy of V0, assuming it’s an anti-lambdaV0<A,B>_couldBeK0:kTRUEif K0 candidate,kFALSEif notV0<A,B>_couldBeAL:kTRUEif anti-lambda candidate,kFALSEif notV0<A,B>_onFlyStatus:kTRUEif comes from the on-the-fly finder,kFALSEif notV0<A,B>_Chi2: chi2 value from the Kalman Filter (?)V0<A,B>_DCA_Daughters: distance of closest approach between daughtersV0<A,B>_IP_wrtPV: impact parameter w.r.t. Primary VertexV0<A,B>_CPA_wrtPV: cosine of pointing angle w.r.t. Primary VertexV0<A,B>_ArmAlpha: Armenteros-Podolanski variable alphaV0<A,B>_ArmPt: Armenteros-Podolanski variable PtV0<A,B>_DecayLength: distance between PV and V0
You can also access information of the positive and negative daughters of each V0, with the following branches:
V0<A,B>_<Pos,Neg>_isDuplicate:kTRUEif the particle is a duplicate particle,kFALSEif it was the best match with its respective MCV0<A,B>_<Pos,Neg>_Rec_Px: x-component of the reconstructed momentum of the trackV0<A,B>_<Pos,Neg>_Rec_Py: y-component of the reconstructed momentum of the trackV0<A,B>_<Pos,Neg>_Rec_Pz: z-component of the reconstructed momentum of the track
How to read an AnalysisResults file
The structure of the Events tree is in a vector format, which you can load from the TList called Trees.
Variables and vectors with MC particle information:
N_MCGen: (int) number of MC particles, which corresponds to the size of each vector in this paragraphMC_Px: (vector of float) x-component of true momentumMC_Py: (vector of float) y-component of true momentumMC_Pz: (vector of float) z-component of true momentumMC_X: (vector of float) x-coordinate of generation vertexMC_Y: (vector of float) y-coordinate of generation vertexMC_Z: (vector of float) z-coordinate of generation vertexMC_PID: (vector of int) PDG codeMC_Mother: (vector of int) index of mother, 0 if anti-sexaquark, -1 if particle is a primary, -2 if mother not relevantMC_FirstDau: (vector of int) index of first daughter, -1 if no daughters, -2 if daughter is not relevantMC_LastDau: (vector of int) index of last daughter, -1 if no daughters, -2 if daughter is not relevantMC_Gen: (vector of int) generation (to diff. between daughters and grandaughters) (only valid for signal particles)MC_Status: (vector of int) MC status codeMC_isSignal: (vector of bool) kTRUE if it belongs to anti-sexaquark signal, kFALSE if background
Variables and vectors of MC Rec. Tracks:
N_MCRec: (int) number of MC reconstructed tracks, which corresponds to the size of each vector in this paragraphIdx_True: (vector of int) index of true MC particleRec_Px: (vector of float) x-component of reconstructed momentumRec_Py: (vector of float) y-component of reconstructed momentumRec_Pz: (vector of float) z-component of reconstructed momentumRec_Charge: (vector of short) measured chargeRec_NSigmaPion: (vector of float) absolute value of likeness to be a charged pion (closer to 0, the most likely)Rec_NSigmaKaon: (vector of float) absolute value of likeness to be a charged kaonRec_NSigmaProton: (vector of float) absolute value of likeness to be a proton or anti-protonRec_isDuplicate: (vector of bool) kTRUE if track is a duplicate, kFALSE if notRec_isSignal: (vector of bool) kTRUE if it belongs to anti-sexaquark signal, kFALSE if background
Variables and vectors of V0s:
N_V0s: (int) number of formed V0s, which corresponds to the size of each vector in this paragraphIdx_Pos: (vector of int) index of positive daughterIdx_Neg: (vector of int) index of negative daughterV0_Px: (vector of float) x-component of V0 momentumV0_Py: (vector of float) y-component of V0 momentumV0_Pz: (vector of float) z-component of V0 momentumV0_X: (vector of float) x-coordinate of V0V0_Y: (vector of float) y-coordinate of V0V0_Z: (vector of float) z-coordinate of V0Pos_Px: (vector of float) x-component of positive track momentum at V0 positionPos_Py: (vector of float) y-component of positive track momentum at V0 positionPos_Pz: (vector of float) z-component of positive track momentum at V0 positionNeg_Px: (vector of float) x-component of negative track momentum at V0 positionNeg_Py: (vector of float) y-component of negative track momentum at V0 positionNeg_Pz: (vector of float) z-component of negative track momentum at V0 positionV0_isSignal: (vector of bool) kTRUE if signal, kFALSE if backgroundV0_E_asK0: (vector of float) energy of V0, assuming it’s a K0V0_E_asAL: (vector of float) energy of V0, assuming it’s an anti-lambdaV0_couldBeK0: (vector of bool) kTRUE if K0 candidate, kFALSE if notV0_couldBeAL: (vector of bool) kTRUE if anti-lambda candidate, kFALSE if notV0_onFlyStatus: (vector of bool) kTRUE if comes from the on-the-fly finder, kFALSE if notV0_Chi2: (vector of float) chi2 value from the Kalman Filter (?)V0_DCA_Daughters: (vector of float) distance of closest approach between daughtersV0_IP_wrtPV: (vector of float) impact parameter w.r.t. Primary VertexV0_CPA_wrtPV: (vector of float) cosine of pointing angle w.r.t. Primary VertexV0_ArmAlpha: (vector of float) Armenteros-Podolanski variable alphaV0_ArmPt: (vector of float) Armenteros-Podolanski variable PtV0_DecayLength: (vector of float) distance between PV and V0
Using C++ and ROOT, you can follow the example of /home/ceres/borquez/work/analysis/SexaquarkFinder.cxx and /home/ceres/borquez/work/analysis/macros/include/TreeFunctions.hxx on how to read the Events vectors and variables. It would be also possible to read it using Python and Uproot, but that’s work in progress…