Spin PWG

This is a feed of Drupal items targeting the "Spin" Audience.

DNP 2007 Inclusive Hadron Talk

Here are the powerpoint and pdf versions of my slides for DNP.

2006 Neutral Pion Update (9/27/07)

Click on the link to download my slides for the PWG meeting.


Average Partonic Pt Carried by Charged Pions

Here's a fragmentation study looking at the ratio of reconstructed charged pion p_{T} and the event partonic p_{T} in PYTHIA.  Cuts are

  • fabs(mcVertexZ()) < 60
  • fabs(vertexZ()) < 60
  • geantId() == 8 or 9 (charged pions)
  • fabs(etaPr()) < 1
  • fabs(dcaGl()) < 1
  • fitPts() > 25


Error bars are just the errors on the mean partonic p_{T} in each reconstructed pion p_{T} bin.  Next step is to look at the jet simulations to come up with a plot that is more directly comparable to a real data measurement.

Effect of Triggers on Relative Subprocess Contributions

These histograms plot the fraction of reconstructed charged pions in each pion pT bin arising from gg, qg, and qq scattering.  I use the following cuts:

  • fabs(mcVertexZ()) < 60
  • fabs(vertexZ()) < 60
  • geantId() == 8 or 9 (charged pions)
  • fabs(etaPr()) < 1
  • fabs(dcaGl()) < 1
  • fitPts() > 25

I analyzed Pythia samples from the P05ih production in partonic pT bins 3_4 through 55_65 (excluded minbias and 2_3).  The samples were weighted according to partonic x-sections and numbers of events seen and then combined.  StEmcTriggerMaker provided simulations of the HT1 (96201), HT2 (96211), JP1 (96221), and JP2 (96233) triggers.  Here are the results.  The solid lines are MB and are identical in each plot, while the dashed lines are the yields from events passing a particular software trigger.  Each image is linked to a full-resolution copy:



  1. Imposing an EMC trigger suppresses gg events and enhances qq, particularly for transverse momenta < 6 GeV/c.  The effect on qg events changes with pT.  The explanation is that the ratio (pion pT / partonic pT) is lower for EMC triggered events than for minimum bias.
  2. High threshold triggers change the subprocess composition more than low-threshold triggers.
  3. JP1 is the least-biased trigger according to this metric.  There aren't many JP1 triggers in the real data, though, as it was typically prescaled by ~30 during the 2005 pp run.  Most of the stats in the real data are in JP2.

Run 6 Relative Luminosity (Tai Sakuma)

Along with the spin sorted yields and the polarization, the relative luminosity is important piece of the spin asymmetries and is measured by BBC and ZDC.

Run 6 Inclusive Jet Cross Section (Tai Sakuma)

Inclusive Jet Cross Sections in Proton-proton collisions at √s = 200 GeV

Tai Sakuma

How to run the patched PYTHIA 6 in starsim

The most of the MC production jobs that the spin PWG requested for the di-jet analysis didn't finish successfully
Patch for a bug in PYTHIA6
This page explains how to run the patched PYHIA 6 as the event generator for starsim. The starsim has a mechanism where a user can choose a specific version of Pythia to use at run time.This feature will be used.

Pions in Jets study

Jet Pion Study


Patch for a bug in PYTHIA6

This patch is included in PYTHIA from PYTHIA 6.412. You don't need to apply this patch if you are using PYTHIA 6.412 or newer.

Download Patch

pythia-6.4.11-t.diff : patch for PYTHIA-6.4.11
pythia-6205-6205t.diff : patch for PYTHIA-6.205

If you need the patch for a different version of PYTHIA, email sakuma@bnl.gov.

Single-Spin Asymmetries

Here’s a quick summary of various single-spin asymmetry sanity checks (yellow, blue, like-sign, unlike-sign) calculated for both types of charged pions in the Run 6 data.


Pi Minus elb Fill Pi Minus elb pt Pi Minus els Fill Pi Minus els pt Pi Minus eus Fill Pi Minus eus pt


pi<em>plus</em>ely<em>fillpi</em>plus<em>ely</em>pt Pi Plus elb FillPi Plus elb pt Pi Plus els Fill Pi Plus els pt Pi Plus eus Fill Pi Plus eus pt Every measurement is absolutely consistent with zero, and I don't see a single problematic fill in this list.

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)

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://deltag5.lns.mit.edu//Volumes/scratch/common/run6/spinTree/spinAnalyses_runnumber.tree.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(&quot;root://deltag5.lns.mit.edu//Volumes/scratch/common/run6/spinTree/spinAnalyses_7156028.tree.root&quot;); root [2] .ls TXNetFile** root://deltag5.lns.mit.edu//Volumes/scratch/common/run6/spinTree/spinAnalyses_7156028.tree.root TXNetFile* root://deltag5.lns.mit.edu//Volumes/scratch/common/run6/spinTree/spinAnalyses_7156028.tree.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-&gt;AddFriend(&quot;ConeJets&quot;); root [4] spinTree-&gt;AddFriend(&quot;chargedPions&quot;); root [5] spinTree-&gt;Draw(&quot;chargedPions.fE / ConeJets.fE&quot;,&quot;chargedPions.fE&gt;0&quot;) If you have the class definitions loaded you can also access member functions directly in the interpreter:

root [6] spinTree-&gt;Draw(&quot;chargedPions.Pt() / ConeJets.Pt()&quot;,&quot;chargedPions.Pt()&gt;0&quot;)

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-&gt;selectDataset(&quot;$STAR/StRoot/StSpinPool/StSpinTree/datasets/run6_rcf.dataset&quot;); //reader-&gt;selectFile(&quot;./spinAnalyses_6119039.tree.root&quot;); 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-&gt;connectJets = true; reader-&gt;connectNeutralJets = false; reader-&gt;connectChargedPions = true; reader-&gt;connectBemcPions = true; reader-&gt;connectEemcPions = false; reader-&gt;connectBemcElectrons = false; //optionally filter events by run and trigger //reader-&gt;selectRunList(&quot;$STAR/StRoot/StSpinPool/StSpinTree/filters/run6_jets.runlist&quot;); reader-&gt;selectRun(7143025); //select events that passed hardware OR software trigger for any trigger in list reader-&gt;selectTrigger(137221); reader-&gt;selectTrigger(137222); reader-&gt;selectTrigger(137611); reader-&gt;selectTrigger(137622); reader-&gt;selectTrigger(5); //we can change the OR to AND by doing reader-&gt;requireDidFire = true; reader-&gt;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-&gt;event(); TClonesArray *jets = reader-&gt;jets(); TClonesArray *chargedPions = reader-&gt;chargedPions(); TClonesArray *bemcPions = reader-&gt;bemcPions(); long entries = reader-&gt;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.

Basic QA Plots

Select a trigger and charge combination to view QA summary plots.  Each point on a plot is a mean value of that quantity for the given run, while the error is sqrt(nentries).

The runs selected are those that passed jet QA, so it's not surprising that things generally look good.  Exceptions:
  • dE/dx, nSigmaPion, and nHitsFit are all out of whack around day 170.  I'll take a closer look to see if I can figure out what went wrong, but it's a small group of runs so in the end I expect to simply drop them.

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.

Pion Yields

currently not in use



Electron Analysis

Speaker : Priscilla Kurnadi ( UCLA )

Talk time : 16:10, Duration : 00:30

Basic QA Plots

Select a trigger and charge combination to view QA summary plots.  Each point on a plot is a mean value of that quantity for the given run, while the error is sqrt(nentries).

Data Collection

Runlist query:

get_file_list.pl -distinct -keys 'orda(runnumber)' -cond 'production=P06ie,trgsetupname=ppProductionLong,sanity=1,tpc=1' -limit 0

Tower By Tower Pion Peaks