The primary objective of these codes was to analyze
This project expects input root file processed by QQbarAnalysis project. List of parameters used by this analysis can be found in TreeStructures.hh.
Contirbution to this project is always welcome, one just needs to follow the contribution rules. (Or if you're my successor, you can taken on the initiative by forking this repository and use it as main repo.)
We use CMake to build the project. Minimum of requirements are:
Version | |
---|---|
CMake | V3.0 |
ROOT | V6.24/00 |
In order to build this project, you only need to execute following line.
./build.sh
If this gives an error, this may be caused by the version incompatibility from the building of ROOT.
Try changing the CMAKE_CXX_STANDARD
version in the CMakeLists.txt.
After the build, execution file main.exe
should be created.
Configuration file determines the cut parameters for this analysis. These are:
- [Legacy] Types of generated particles. (currently use all types so don't care about this)
- JET_btag_max, JET_ctag_max: b-tagging and c-tagging
- JET_nvtx_max: Maximum number of jet vertex
- PFO_TPCHits_min: Minimum number of TPC hits for a PFO
- PFO_offset_max: Maximum offset distance for a PFO
- PFO_p_min, PFO_p_max: Minimum and Maximum momentum for a PFO
- LPFO_p_min, LPFO_p_max: Minimum and Maximum momentum for a PFO
Then you need to change the of SSbarAnalysisConfig_example.ini
to SSbarAnalysisConfig_default.ini
.
As a matter of fact, you can change the input file name in the main.cc
.
In such case, you need to build the project again. (see above)
One can execute this file by:
./main.exe [input_root_file]
replacing [input_root_file]
by the path to the input root file from QQbarAnalysis project.
The analysis code follows the basic workflow defined in TSelector class of ROOT.
Main programs reside in NtupleProcessor
directory.
After executing the main.exe
, main.cc
will call for NtupleProcessor class.
NtupleProcessor
will then open an input file and attach its TTree to TSelector, along with predefined class, which is EventAnalyzer
for our case. (see here)
For TSelector (see TreeIterator.cc
) will execute its methods to the attached TTree in following order:
Init
SlaveBegin
Begin
Notify
Process
SlaveTerminate
Terminate
See TSelector class documentation for more info.
Main analysis process happens here. Output of this analysis will be a ROOT file with set of histograms for each qqbar process (all flavors). Structure of ROOT file looks as following.
The code is split into two parts: Generated and Reconstructed. The analysis flow as follow:
- Generated part will check the particle type of qqbar with
EventAnalyzer::isSignal()
- Check whether generated event satisfies the preselection (qqbar being back-to-back etc.) with
EventAnalyzer::Select()
. - Main analysis for generated event happens in
EventAnalyzer::AnalyzeGen()
.- Check for cuts described in
EventAnalyzer::TriggerMap()
. - Fills histogram defined in
HistManager.cc
.
- Check for cuts described in
- Reconstructed part takes place after the generated event analysis.
- Preselection identical to the generated one will be applied to the reconstructed event analysis with
EventAnalyzer::Select()
method. - Main analysis for reconstructed event happens in
EventAnalyzer::AnalyzeReco()
.- Use jet and its associated PFO information to check for the cuts in
EventAnalyzer::TriggerMap()
. EventAnalyzer::ProcessDoubleTagEfficiency()
will fill polar angle histogram after individual cut so that one can compute the selection efficiency later in our macros.EventAnalyzer::ProcessDoubleTag()
fills various histograms after going through all the cuts.EventAnalyzer::ResolutionAnalysis()
fills histograms related to resolution analysis (Stability and purity)
- Use jet and its associated PFO information to check for the cuts in
Note
Historgam and boolean management is done using std::unordered_map
in c++ standard library. See the documentation for detail.
Finally after all these parts, one needs to clear the struct with EventAnalyzer::ClearStructs()
to avoid segmentation fault upon looping over the events.
In generated event analysis, "cheated PID" will be used for PID. For reconstructed event analysis, dE/dx method is being used.
This is implemented in PFOTools.cc
. (Commented out line suggest some different methods on PID criteria we've tested in the past)
These macros here are example codes for plotting histograms based on the ROOT file outputted from the NtupleProcessor.
The latest working codes are store within directory.
The most important results are the polar angle distribution, stored under macros/polar
.
pq_method_K(Pi)LPFO_add.cc
: Polar angle distribution for single flavor.pq_method_K(Pi)LPFO_total.cc
: Polar angle distribution with all background processes being stacked.pq_method_K(Pi)LPFO_BG_sub.cc
: Polar angle distribution for single flavor with all other backgrounds being subtracted to estimate the systematic uncertainty.