Heavy Ion Event Plane Reconstruction

Complete: 5

Goal of this page

The aim of this page is to document the physics object for determination of the azimuthal angle of the reaction plane used in heavy-ion events; where the code lives, how to run it, the input and output, and details of the implementation.

Code and tags

The code to calculate the azimuthal angle of the reaction plane in heavy-ion collisions lives in the package RecoHI/HiEvtPlaneAlgos

The EvtPlane data format lives in DataFormats/HeavyIonEvent

Both these packages are included in CMSSW from release 3_3_0_pre3

Configuration files

The settings to run the event plane module are found in the file RecoHI/HiEvtPlaneAlgos/python/HiEvtPlane_cfi.py

How to run the event plane reconstruction

Do you need to run the event plane reconstruction?

If your events already have a EvtPlaneCollection called hiEvtPlane, then the event plane has already been calculated, and you do not need to do it yourself. You can check this by either
  • opening the file in ROOT, opening a TBrowser, clicking on the Root file, then Events, and looking for a branch called something like recoEvtPlaneCollection_hiEvtPlane__RECO., or
  • typing edmDumpEventContent filename.root at the command line, and searching for vector<reco::EvtPlane>     "hiEvtPlane"    ""    "RECO." in the output.

Running the event plane reconstruction only

If however your events don't contain this collection (e.g. you are generating your own Monte Carlo events) or you want to re-calculate the event plane with different settings, follow the instructions below.

  • In your configuration file, include the line process.load("RecoHI.HiEvtPlaneAlgos.HiEvtPlane_cfi")

  • Then in the path in configuration file, include the module hiEvtPlane, e.g. process.p = cms.Path(process.hiEvtPlane)

  • In order to retain the EvtPlane objects in your output file, you should ensure that they are kept by the OutputModule. If your existing drop or keep statements don't cover this case , add the line process.output.outputCommands.append('keep *_hiEvtPlane_*_*') to your configuration file, somewhere after the cms.OutputModule.

Running the full heavy ion reconstruction

If you are reconstructing the event plane, it is likely you will need to reconstruct the other objects in the event. The event plane producer is included in the default heavy ions reconstruction sequence. To use this, instead of following the instructions above, add the following to your configuration file:

  • Include the lines
process.load("Configuration.StandardSequences.ReconstructionHeavyIons_cff")
process.load("Configuration.EventContent.EventContentHeavyIons_cff")
  • Add the sequence process.reconstruct_CMS.PbPb to your path
  • Add the appropriate parameter set to your OutputModule e.g. process.RECODEBUGEventContent

For an example of how this works in practice, see RecoHI/Configuration/test/reconstruct_CMS.PbPb_cfg.py

Input

Currently EvtPlaneProducer uses CaloTower from the CaloTowerCollection with label towerMaker. (specifically the variables phi_tower, eta_tower, E_tower from ECAL and HCAL towers).

From release 3_3_0_pre3 EvtPlaneProducer can also calculate the event plane using Tracker information. It uses the reco::Tracks from the TrackCollection with the label hiSelectedTracks.

Options

The event plane can be calculated using information from different parts of the detector, and using either calorimetry information or tracks. All methods are used, and by default all the different values are saved in the output EvtPlaneCollection. The parameters relating to the different methods are specified in the configuration file RecoHI/HiEvtPlaneAlgos/python/HiEvtPlane_cfi.py:
hiEvtPlane = cms.EDProducer("EvtPlaneProducer",
                            useECAL = cms.untracked.bool(True),
                            useHCAL = cms.untracked.bool(True),
                            useTrackMidEta = cms.untracked.bool(True),
                            useTrackPosEta = cms.untracked.bool(True),
                            useTrackNegEta = cms.untracked.bool(True)
                       )
If you don't want to save some of these values, set the corresponding parameters to False. By default all parameters are True.

If both useECAL and useHCAL are True the event plane will also be calculated using the combined ECAL and HCAL information. This currently gives the best resolution of the reaction plane. Information from the calorimeter and the tracker is not combined.

Output

The output of EvtPlaneProducer is an EvtPlaneCollection, i.e. a std::vector<reco::EvtPlane>, with the label hiEvtPlane. Each EvtPlane object in the vector corresponds to a different method of calculating the event plane, as explained in the previous section, and has a member function label() which returns a std::string identifying the method. These labels are

Label Input
Ecal Ecal energy from towers with |η| < 3.0
Hcal Hcal energy from towers with |η| < 3.0
Calo Ecal+Hcal energy from towers with |η| < 3.0
HF HF energy from towers with 3.0 < |η| < 5.2
CaloHF Ecal+Hcal+HF energy from towers with |η| < 5.2
HF1 HF energy from towers with 3.0 < |η| < 5.2 (first harmonic)

etEcal Ecal transverse energy from towers with |η| < 3.0
etHcal Hcal transverse energy from towers with |η| < 3.0
etCalo Ecal+Hcal transverse energy from towers with |η| < 3.0
etHF HF transverse energy from towers with 3.0 < |η| < 5.2
etCaloHF Ecal+Hcal+HF transverse energy from towers with |η| < 5.2
etHF1 HF transverse energy from towers with 3.0 < |η| < 5.2 (first harmonic)

EcalP Ecal energy from towers with 0.25 < η < 3.0
EcalM Ecal energy from towers with -3.0 < η < -0.25
HcalP Hcal energy from towers with 0.25 < η < 3.0
HcalM Hcal energy from towers with -3.0 < η < -0.25
CaloP Ecal+Hcal energy from towers with 0.25 < η < 3.0
CaloM Ecal+Hcal energy from towers with -3.0 < η < -0.25
HFp HF energy from towers with 3.0 < η < 5.2
HFm HF energy from towers with -5.2 < η < -3.0
CaloHFP Ecal+Hcal+HF energy from towers with 0.25 < η < 5.2
CaloHFM Ecal+Hcal+HF energy from towers with -5.2 < η < -0.25
HFp1 HF energy from towers with 3.0 < η < 5.2 (first harmonic)
HFm1 HF energy from towers with -5.2 < η < 3.0 (first harmonic)

etEcalP Ecal transverse energy from towers with 0.25 < η < 3.0
etEcalM Ecal transverse energy from towers with -3.0 < η < -0.25
etHcalP Hcal transverse energy from towers with 0.25 < η < 3.0
etHcalM Hcal transverse energy from towers with -3.0 < η < -0.25
etCaloP Ecal+Hcal transverse energy from towers with 0.25 < η < 3.0
etCaloM Ecal+Hcal transverse energy from towers with -3.0 < η < -0.25
etHFp HF transverse energy from towers with 3.0 < η < 5.2
etHFm HF transverse energy from towers with -5.2 < η < -3.0
etCaloHFP Ecal+Hcal+HF transverse energy from towers with 0.25 < η < 5.2
etCaloHFM Ecal+Hcal+HF transverse energy from towers with -5.2 < η < -0.25
etHFp1 HF transverse energy from towers with 3.0 < η < 5.2 (first harmonic)
etHFm1 HF transverse energy from towers with -5.2 < η < 3.0 (first harmonic)

EvtPlaneFromTracksMidEta Tracks with |η| < 0.75
EvtPlaneFromTracksPosEta Tracks with 0.75 ≤ |η| < 2.0
EvtPlaneFromTracksNegEta Tracks with -2.0 ≤ |η| < -0.75
EvtPlaneFromTracksEta Tracks with
EvtPlaneFromTracksOdd Tracks with
EvtPlaneFromTracksEven Tracks with
EvtPTracksPosEtaGap Tracks with
EvtPTracksNegEtaGap Tracks with

Example of usage

CMSSW

Below is a short code fragment that indicates which header files (*.h) need to be included, and demonstrates how to access the contents of the EvtPlaneCollection from within the analyze function of an EDAnalyzer. You can find a tutorial about how to create an EDAnalyzer at WorkBookWriteFrameworkModule.

#include "FWCore/Framework/interface/Event.h"
#include "DataFormats/Common/interface/Handle.h"

#include "DataFormats/HeavyIonEvent/interface/EvtPlane.h"

...

void DemoAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup){
   using namespace edm;
   using namespace std;
   using namespace reco;

   //Get a handle ("pointer") to the EvtPlaneCollection within the event

   using reco::EvtPlaneCollection;
   Handle<reco::EvtPlaneCollection> evtPlaneCollectionHandle;
   iEvent.getByLabel("hiEvtPlane", "recoLevel", evtPlaneCollectionHandle);

  //Check if there was a problem accessing the EvtPlaneCollection

   if( !evtPlaneCollectionHandle.isValid() ){
     cout << "Error! Can't get hiEvtPlane!" << endl;
     return ;
   }


   //Loop over EvtPlane objects within collection
   for(reco::EvtPlaneCollection::const_iterator ep = evtPlaneCollectionHandle->begin(); ep != evtPlaneCollectionHandle->end(); ep++){

     double angle = ep->angle();
     double sum_sin = ep->sumSin();
     double sum_cos = ep->sumCos();
     string label  = ep->label();
     cout << "event plane method: " << label << " angle = " << angle 
          << " sum of sines of components " << sum_sin << " " << " sum of cosines of components " << sum_cos << endl;

   }

 }

FWLite

 fwlite::Handle<reco::EvtPlaneCollection> evtPlanes;
 evtPlanes.getByLabel(event, "hiEvtPlane","recoLevel");

 if( !evtPlanes.isValid() ){
 cout << "Error! Can't get hiEvtPlane!" << endl;
 return ;
 }

 for (reco::EvtPlaneCollection::const_iterator ep = evtPlanes->begin();
 ep != evtPlanes->end(); ep++) {

 string name = ep->label();
 if (name.compare("EvtPlaneFromTracksEta") != 0) continue;
 double psi = ep->angle();
 cout <<" event plane determined with " << name.data()
 << ", Psi = " << psi << endl;
 }

Implementation details

The event plane angle is calculated from the second harmonic, i.e. for the calorimeter-based determinations, the event plane angle is

while for the track-based determinations, the event plane angle is

In all cases the event plane angle is in the range −π/2 < Ψ < π/2 radians.

The code which performs the calculation is found in RecoHI/HiEvtPlaneAlgos/src/EvtPlaneProducer.cc

Flattening of the event planes

See SWGuideHeavyIonFlatEvtPlane.

Further information

Contact

Review status

Reviewer/Editor and Date Comments
SergeyPetrushanko 2009-08-22 creation of the page
SergeyPetrushanko 2009-09-02 rearrangement and update
PhilipAllfrey 2009-09-11 expanded and updated with tracker-based EvtPlane
PhilipAllfrey 2009-10-22 added implementation details

Responsible: SergeyPetrushanko

Edit | Attach | Watch | Print version | History: r9 < r8 < r7 < r6 < r5 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r9 - 2011-11-03 - YetkinYilmaz
 
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    CMSPublic All webs login

This site is powered by the TWiki collaboration platform Powered by PerlCopyright & 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback