Results from pp analysis with the minimized code.
Input: HTrackCandidate, simple user track selection, track cleaner (based on dst gen2).
Efficiency Matrix reconstructor.
To avoid the inconveniences of ROOT TNtuple I have developed HNtuple. First, the user can book an ntuple as usual, but then, instead of filling Float_t* array and taking care of the proper order, one fills variables simply like myNtuple["mom"] = 2.0; The other option is that the list of variables in ntuple is not defined and just after first filling procedure it is fixed. The output is however a native NTuple that the user can open / read files without loading any additional library.
Intermediate tool for data analysis from DST (DSTSim) level up to any combination of single
tracks. Common event data as well as particle (track) data are conveniently propagated and stored to the output file. User defined cuts (selections) can be applied (i.e. track selection, time reconstruction, particle identification).
FILTERING of VARIOUS SOURCES
Here you can download the source code: filtering.tar.gz
(version from 6 July 2007)
Makefile in the code is ugly and requires
HADDIR to be set in order to read
HYDRA libraries (this is only because of HGeantKine)
- I will replace it soon!
If you like my "tool" keep an eye on upcoming updates and bug fixes ;-)
Create your own directory. The code will be unpacked to your present directory.
Unpack: tar xvfz filtering.tar.gz
- it is a standalone program.
Clean code: make clean
Motivation and description
- It is very often that people are told to filter some simulations with some matrices. Our matrices have various range (1 sector, 6 sectors), various units (deg, rad) and various number of dimensions (2, 3). It is a technical and not necessary knowledge how to retrieve the proper value from a given matrix. This I want to hide in HMatrix class, which after proper definition (orded of axes, units) will work.
- In principle there are two basic sources. Native PLUTO with "info" and "data" branches (and inside "data" we get PParticle objects). On the other hand we have HGEANT output, HGeantKine branch coming either from PLUTO or from UrQMD simulation (with slightly different information stored). I want to make the filtering program independent of the source format. The user will show only which files he/she wants to read.
- There are a few algorithms of momentum (+anglular) smearing. For example "Schicker's" and "Geidar's" or perhaps something else. This will be provided also as a possibility to choose.
- Ultimately we want to filter: single particles and to build some more objects from them, like invariant mass of something or missing mass of something. Therefore I have developed HParticle (a class for a single particle) and HNPartcile for complex composites. They are components of a class HParticlePool. Now, I can for example define the beam and the target (necessary for missing mass calculations or boosting). I can then define any number of objects called "invariant" or "missing". If I define "invariant" of a given name like "invEpEm" and I add "ep" and "em" then in each event it will be created out of all e+ / e- combinations. Note that for composite objects the common vertex flag and the opening angle flag between tracks will be available for an easy selection. The content of HParticlePool objects will be dumped to NTuple.
Learn by example
- First, download some files produced in simulation. I suggest i.e. PLUTO simulation for p+p and creation of Delta+ resonance. You can copy
- The source code is very fresh. Please, be aware that some bugs may occur and first of all I will change
Makefile to something reasonable and not dependent on
sourceFile.open("DeltaP_PPi0.root"); // add as many source files as you want
HOutputFile outputFile("test.root", "recreate");
HFilter matrixFilter( matrixFile, "Test filter 2007" );
matrixFilter.smear( "ideal" ); // define smearing you want to use
matrixFilter.openingangle( 9.0 ); // define opening angle to filter
matrixFilter.add( 2, "EPlusAcc" ); // add all ACC and EFF matrices you want to filter with
matrixFilter.add( 3, "EMinusAcc" );
matrixFilter.add( 14, "ProtonAcc" );
matrixFilter.add( 2, "EPlusEff" );
matrixFilter.add( 3, "EMinusEff" );
matrixFilter.add( 14, "ProtonEff" );
cout << matrixFilter.getName() << endl;
HParticlePool particlePool( sourceFile, outputFile, matrixFilter );
particlePool.target("p", 0., 0., 0.);
particlePool.beam("p", 0., 0., 2.0);
particlePool.add("invEpEm", "ep", "em");
particlePool.add("invPEpEm", "ep", "em", "p");
// particlePool.add("missPPEpEm", "ep", "em", "p", "p");
// do not use it today since HMissingFactory is not fully debugged ;-)
- UML diagram: