00001
00002 #include "StjMCParticleListWriter.h"
00003
00004 #include <TDirectory.h>
00005 #include <TTree.h>
00006
00007 #include <iostream>
00008
00009 ClassImp(StjMCParticleListWriter)
00010
00011 using namespace std;
00012
00013 StjMCParticleListWriter::StjMCParticleListWriter(const char* treeName, TDirectory* file)
00014 : _file(file)
00015 {
00016 _file->cd();
00017 _tree = new TTree(treeName, treeName);
00018 _tree->SetAutoSave(kMaxLong64);
00019 _tree->SetMaxTreeSize(kMaxLong64);
00020
00021 _tree->Branch("eventId" , &_eventId , "eventId/I" );
00022 _tree->Branch("nMCParticles" , &_nMCParticles , "nMCParticles/I" );
00023 _tree->Branch("mcparticleId" , _mcparticleId , "mcparticleId[nMCParticles]/I" );
00024 _tree->Branch("status" , _status , "status[nMCParticles]/I" );
00025 _tree->Branch("pdg" , _pdg , "pdg[nMCParticles]/I" );
00026 _tree->Branch("pt" , _pt , "pt[nMCParticles]/D" );
00027 _tree->Branch("eta" , _eta , "eta[nMCParticles]/D" );
00028 _tree->Branch("phi" , _phi , "phi[nMCParticles]/D" );
00029 _tree->Branch("m" , _m , "m[nMCParticles]/D" );
00030 _tree->Branch("e" , _e , "e[nMCParticles]/D" );
00031 _tree->Branch("firstMotherId" , _firstMotherId , "firstMotherId[nMCParticles]/I" );
00032 _tree->Branch("lastMotherId" , _lastMotherId , "lastMotherId[nMCParticles]/I" );
00033 _tree->Branch("firstDaughterId" , _firstDaughterId , "firstDaughterId[nMCParticles]/I" );
00034 _tree->Branch("lastDaughterId" , _lastDaughterId , "lastDaughterId[nMCParticles]/I" );
00035 _tree->Branch("vertexZ" , &_vertexZ , "vertexZ/D" );
00036 _tree->Branch("runNumber" , &_runNumber , "runNumber/I" );
00037 }
00038
00039 void StjMCParticleListWriter::Fill(const StjMCParticleList& theList)
00040 {
00041 if(theList.empty()) return;
00042
00043 _runNumber = theList[0].runNumber;
00044 _eventId = theList[0].eventId;
00045 _vertexZ = theList[0].vertexZ;
00046
00047 _nMCParticles = theList.size();
00048 for(int i = 0; i < _nMCParticles; ++i) {
00049 const StjMCParticle& particle = theList[i];
00050 _mcparticleId[i] = particle.mcparticleId;
00051 _pdg[i] = particle.pdg;
00052 _firstMotherId[i] = particle.firstMotherId;
00053 _lastMotherId[i] = particle.lastMotherId;
00054 _firstDaughterId[i] = particle.firstDaughterId;
00055 _lastDaughterId[i] = particle.lastDaughterId;
00056 _pt[i] = particle.pt;
00057 _eta[i] = particle.eta;
00058 _phi[i] = particle.phi;
00059 _m[i] = particle.m;
00060 _e[i] = particle.e;
00061 _status[i] = particle.status;
00062 }
00063
00064 _tree->Fill();
00065 }
00066
00067 void StjMCParticleListWriter::Finish()
00068 {
00069 _tree->BuildIndex("runNumber", "eventId");
00070 }