Common Analysis Trees

The Spin PWG maintains a set of trees connecting datasets from the various inclusive measurements in a way that allows for easy particle correlation studies. This page describes how to access the data in those trees.


RCF:    /star/institutions/mit/common/run6/spinTree/
PDSF:   /auto/pdsfdv34/starspin/common/run6/spinTree/
Anywhere:   root://

The last option uses xrootd to access read-only files stored on an MIT server from any computer with ROOT installed.  If you have an Intel Mac note that ROOT versions 5.13.06 - 5.14.00 have a bug (patched in 5.14.00/b) that prevents you from opening xrootd files.

Interactive Mode

The basic trees are readable in a simple interactive ROOT session.  Each particle type is stored in a separate tree, so you need to use TTree::AddFriend to connect things together before you draw.  For example:

root [1] TFile::Open("root://"); root [2] .ls TXNetFile** root:// TXNetFile* root:// KEY: TProcessID ProcessID0;1 00013b6e-72c3-1640-a0e8-e5243780beef KEY: TTree spinTree;1 Spin PWG common analysis tree KEY: TTree ConeJets;1 this can be a friend KEY: TTree ConeJetsEMC;1 this can be a friend KEY: TTree chargedPions;1 this can be a friend KEY: TTree bemcPions;1 this can be a friend root [3] spinTree->AddFriend("ConeJets"); root [4] spinTree->AddFriend("chargedPions"); root [5] spinTree->Draw("chargedPions.fE / ConeJets.fE","chargedPions.fE>0") If you have the class definitions loaded you can also access member functions directly in the interpreter:

root [6] spinTree->Draw("chargedPions.Pt() / ConeJets.Pt()","chargedPions.Pt()>0")

Batch Mode

The StSpinTreeReader class takes care of all the details of setting branch addresses for the various particles behind the scenes.  It also allows you to supply a runlist and a set of triggers you're interested in, and it will only read in the events that you care about.  The code lives in


and in the macros directory is an example showing how to configure it.  Let's look at the macro step-by-step:

//create a new reader StSpinTreeReader *reader = new StSpinTreeReader(); //add some files to analyze, one at a time or in a text file reader->selectDataset("$STAR/StRoot/StSpinPool/StSpinTree/datasets/run6_rcf.dataset"); //reader->selectFile("./spinAnalyses_6119039.tree.root"); Ok, so we created a new reader and told it we'd be using the files from Run 6 stored on RCF.  You can also give it specfic filenames if you'd prefer, but there's really no reason to do so.

//configure the branches you're interested in (default = true) reader->connectJets = true; reader->connectNeutralJets = false; reader->connectChargedPions = true; reader->connectBemcPions = true; reader->connectEemcPions = false; reader->connectBemcElectrons = false; //optionally filter events by run and trigger //reader->selectRunList("$STAR/StRoot/StSpinPool/StSpinTree/filters/run6_jets.runlist"); reader->selectRun(7143025); //select events that passed hardware OR software trigger for any trigger in list reader->selectTrigger(137221); reader->selectTrigger(137222); reader->selectTrigger(137611); reader->selectTrigger(137622); reader->selectTrigger(5); //we can change the OR to AND by doing reader->requireDidFire = true; reader->requireShouldFire = true; In this block we configured the reader to pick up the jets, chargedPions and BEMC pi0s from the files. We also told it that we only wanted to analyze run 7132001, and that we only cared about events triggered by BJP1, L2jet, or L2gamma in the second longitudinal running period.  Finally, we required that one of those trigIds passed both the hardware and the software triggers.

After that, the reader behaves pretty much like a regular TChain.  The first time you call GetEntries() will be very slow (few minutes for the full dataset) as that's when the reader chains together the files and applies the TEventList with your trigger selection.  Each of the particles is stored in a TClonesArray, and the StJetSkimEvent is accessible via reader->event().

StJetSkimEvent *ev = reader->event(); TClonesArray *jets = reader->jets(); TClonesArray *chargedPions = reader->chargedPions(); TClonesArray *bemcPions = reader->bemcPions(); long entries = reader->GetEntries(); for(int i=0; i

What's Included?

Common trees are produced for both Run 5 and the 2nd longitudinal period of Run 6. Here's what available:

Run 5
  1. skimEvent
  2. ConeJets
  3. chargedPions
  4. bemcPions
Run 6
  1. skimEvent
  2. ConeJets12
  3. ConeJetsEMC
  4. chargedPions -- see (Data Collection)
  5. bemcPions
  6. bemcElectrons

Known Issues

The first time you read a charged pion (batch or interactive) you may see some messages like

Error in <tclass::new>: cannot create object of class StHelix</tclass::new>

These are harmless (somehow related to custom Streamers in the StarClassLibrary) but I haven't yet figured out how to shut them up.

42 runs need to be reprocessed for chargedPions in Run 5.  Will do once Andrew gives the OK at PDSF.

40 runs need to be reprocessed for Run 6 because of MuDst problems.  Murad has also mentioned some problems with missing statistics in the skimEvents and jet trees that we'll revisit at a later date.

Future Plans

Including EEMC pi0s and StGammaCandidates remains on my TO-DO list.  I've also added into StJet a vector of trigger IDs fired by that jet.  Of course we also need to get L2 trigger emulation into the skimEvent.  As always, if you have questions or problems please feel free to contact me.  

Cuts Summary

Here's a list of the cuts applied to the data in the common spin trees.

Run 5

  • standard spinDB requirements
  • production triggers only
  • 0.2 < detEta < 0.8
  • 0.1 < E_neu / E_tot < 0.9
  • pt > 2
  • -1 < eta < 1
  • nFitPoints > 25
  • |DCA_global| < 1
  • -1 < nSigmaPion < 2
  • pt > 3.0
  • photon energies > 0.1
  • asymmetry < 0.8
  • 0.08 < mass < 0.25
  • charged track veto
  • BBC timebin in {7,8,9}

Run 6

  • standard spinDB requirements
  • production triggers + trigId 5 (L2gamma early runs)
ConeJets, ConeJetEMC -- no cuts applied

  • pt > 2
  • -1 < eta < 1
  • nFitPoints > 25
  • |DCA_global| < 1
  • -1 < nSigmaPion < 2
  • pt > 5.2
  • photon energies > 0.1
  • asymmetry < 0.8
  • 0.08 < mass < 0.25
  • charged track veto
  • BBC timebin in {7,8,9} update:  timebin 6 added in 2007-07-18 production
  • both SMD planes good
bemcElectrons added as of 2007-07-18 production
  • hardware or software trigger in (117001, 137213, 137221, 5, 137222, 137585, 137611, 137622)
  • Global dE/dx cut changing with momentum
  • nFitPoints >= 15
  • nDedxPoints >= 10
  • nHits / nPoss >= 0.52
  • track Chi2 < 4
  • DCAGlobal < 2
  • NEtaStrips > 1 && NPhiStrips > 1
  • Primary dE/dx cut changing with momentum
  • 0.3 < P/E < 1.5
  • -0.01287 < PhiDist < 0.01345
  • ZDist in [-5.47,1.796] (West) or [-2.706,5.322] (East)

Introduction at Spin PWG meeting - 5/10/07

I've been working on a project to make the datasets from the various longitudinal spin analyses underway at STAR available in a common set of trees.  These trees would improve our ability to do the kind of correlation studies that are becoming increasingly important as we move beyond inclusive analyses in the coming years.

In our current workflow, each identified particle analysis has one or more experts responsible for deciding just which reconstruction parameters and cuts are used to determine a good final dataset.  I don't envision changing that.  Rather, I am taking the trees produced by those analyzers as inputs, picking off the essential information, and feeding it into a single common tree for each run.  I am also providing a reader class in StSpinPool that takes care of connecting the various branches and does event selection given a run list and/or trigger list.


  • Readable without the STAR framework
  • Condenses data from several analyses down to the most essential ~10 GB (Run 6)
  • Takes advantage of new capabilities in ROOT allowing fast fill/run/trigger selection

Included Analyses

  • Event information using StJetSkimEvent
  • ConeJets12 jets (StJet only)
  • ConeJetsEMC jets (StJet only)
  • charged pions (StChargedPionTrack)
  • BEMC neutral pions (TPi0Candidate)
  • EEMC neutral pions (StEEmcPair?) -- TODO
  • electrons * -- TODO
  • ...

Current Status

I'm waiting on the skimEvent reproduction to finish before releasing.  I've got the codes to combine jets, charged pions, and BEMC pions, and I'm working with Jason and Priscilla on EEMC pions and BEMC electrons.