Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
hepsim:jas4pp [2020/05/22 02:38] hepsim17 |
hepsim:jas4pp [2021/02/17 16:15] (current) hepsim17 [Reading ROOT files] |
||
---|---|---|---|
Line 41: | Line 41: | ||
* Downloading and searching HepSim data | * Downloading and searching HepSim data | ||
* Processing ProMC files from HepSim | * Processing ProMC files from HepSim | ||
+ | * Processing ROOT files created by the Delphes program for fast simulation | ||
* Running over SLCIO files with Geant4 simulated / reconstructed events. | * Running over SLCIO files with Geant4 simulated / reconstructed events. | ||
* Data analysis (jets, physics vectors, histogram packages) | * Data analysis (jets, physics vectors, histogram packages) | ||
- | * Visualisation | + | * Visualization |
- | You can find more details in [[https:// | + | You can find more details in [[https:// |
Line 195: | Line 196: | ||
Also, look at concrete example of how to analyze single particles in [[: | Also, look at concrete example of how to analyze single particles in [[: | ||
+ | |||
+ | ====== | ||
+ | |||
+ | Jas4pp natively reads commonly used objects and data structures from [[https:// | ||
+ | ROOT files can be loaded using the Jas4pp menu [File]-[Open data source]-[Root file] (*.root). | ||
+ | |||
+ | In addition, one can work with ROOT files using Python/ | ||
+ | One can find some examples in the directory " | ||
+ | |||
+ | <hidden Show example of a Python code here> | ||
+ | <code python> | ||
+ | from hep.io.root.interfaces import TTree | ||
+ | from hep.io.root import RootFileReader | ||
+ | |||
+ | reader = RootFileReader(" | ||
+ | |||
+ | tree = reader.get(" | ||
+ | maxevents=tree.getEntries() | ||
+ | |||
+ | leaves = tree.getLeaves() | ||
+ | nrleaves=leaves.size() | ||
+ | |||
+ | print "Nr of events=", | ||
+ | print "Nr of leaves=", | ||
+ | |||
+ | print " | ||
+ | for l in xrange( nrleaves ): | ||
+ | print " | ||
+ | |||
+ | print "Run over events" | ||
+ | f0=leaves.get(0); | ||
+ | f1=leaves.get(1); | ||
+ | f2=leaves.get(2); | ||
+ | for i in xrange(tree.getEntries()): | ||
+ | print f0.getValue(i), | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | The example directory also shows how to read histograms. | ||
+ | Similar examples can be made using Java or Groovy scripting. | ||
+ | |||
+ | The supported ROOT interfaces are: | ||
+ | |||
+ | <hidden show more details on ROOT interfaces here> | ||
+ | TArrayC | ||
+ | TArrayD | ||
+ | TArrayF | ||
+ | TArrayI | ||
+ | TArray | ||
+ | TArrayL | ||
+ | TAttAxis | ||
+ | TAttFill | ||
+ | TAttLine | ||
+ | TAttMarker | ||
+ | TAxis | ||
+ | TBasket | ||
+ | TBranchClones | ||
+ | TBranchElement | ||
+ | TBranch | ||
+ | TBranchObject | ||
+ | TClonesArray | ||
+ | TCollection | ||
+ | TDatime | ||
+ | TDirectory | ||
+ | TFile | ||
+ | TGraph | ||
+ | TH1D | ||
+ | TH1F | ||
+ | TH1 | ||
+ | TH2D | ||
+ | TH2F | ||
+ | TH2 | ||
+ | TKey | ||
+ | TLeafB | ||
+ | TLeafC | ||
+ | TLeafD | ||
+ | TLeafElement | ||
+ | TLeafF | ||
+ | TLeafI | ||
+ | TLeaf | ||
+ | TLeafL | ||
+ | TLeafObject | ||
+ | TLeafO | ||
+ | TLeafS | ||
+ | TList | ||
+ | TMap | ||
+ | TNamed | ||
+ | TObjArray | ||
+ | TObject | ||
+ | TProfile | ||
+ | TSeqCollection | ||
+ | TStreamerBase | ||
+ | TStreamerBasicPointer | ||
+ | TStreamerBasicType | ||
+ | TStreamerElement | ||
+ | TStreamerInfo | ||
+ | TStreamerLoop | ||
+ | TStreamerObjectAny | ||
+ | TStreamerObject | ||
+ | TStreamerObjectPointer | ||
+ | TStreamerString | ||
+ | TString | ||
+ | TTree | ||
+ | </ | ||
+ | |||
+ | One can browser histogram (or ROOT objects) using this: | ||
+ | |||
+ | <code python> | ||
+ | import rootio | ||
+ | rootio.HBrowser(" | ||
+ | rootio.Browser(" | ||
+ | </ | ||
+ | |||
+ | You will see the browsers: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | The script that call these browsers | ||
+ | |||
+ | |||
+ | To read ROOT files from Delphes simulations, | ||
+ | [[https:// | ||
+ | getFloat, getDouble, getInt, and getBool. But first, explore the Delphes ROOT file using the browser shown above. | ||
+ | |||
+ | Here is an example that uses high-level classes to read transverse momentum (PT) and pseudorapidity (ETA) of Monte Carlo particles: | ||
+ | |||
+ | |||
+ | <hidden Click here to show a Python code to read Delphes files> | ||
+ | <code python> | ||
+ | from hep.io.root import RootFileReader | ||
+ | from rootio import * | ||
+ | |||
+ | reader = RootFileReader(" | ||
+ | tree = reader.get(" | ||
+ | maxevents=tree.getEntries() | ||
+ | branches=tree.getBranches() | ||
+ | print "Nr of events=", | ||
+ | print "Nr of branches=", | ||
+ | print " | ||
+ | for l in xrange( branches.size() | ||
+ | print " | ||
+ | |||
+ | particles=tree.getBranch(" | ||
+ | |||
+ | ptEvents=Delphes.getFloat(particles," | ||
+ | etaEvents=Delphes.getFloat(particles," | ||
+ | |||
+ | from jhplot import * | ||
+ | h1 = H1D(" | ||
+ | h2 = H1D(" | ||
+ | for i in xrange(tree.getEntries()): | ||
+ | | ||
+ | for j in xrange(len(pt)): | ||
+ | | ||
+ | | ||
+ | c=HPlot(" | ||
+ | c.visible() | ||
+ | c.setAutoRange() | ||
+ | c.draw(h1) | ||
+ | |||
+ | c.cd(2,1) | ||
+ | c.setAutoRange() | ||
+ | c.draw(h2) | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | <note warning> | ||
====== Using GUI mode ====== | ====== Using GUI mode ====== | ||
Line 339: | Line 512: | ||
* S.Chekanov (ANL, main developer) | * S.Chekanov (ANL, main developer) | ||
* E.May (ANL, debugging, Wired4) | * E.May (ANL, debugging, Wired4) | ||
+ | * Gagik Gavalian (JLab) | ||