00001
00002 #include "StjTrackListWriter.h"
00003
00004 #include <TDirectory.h>
00005 #include <TTree.h>
00006
00007 #include <iostream>
00008
00009 ClassImp(StjTrackListWriter)
00010
00011 using namespace std;
00012
00013 StjTrackListWriter::StjTrackListWriter(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("nTracks" , &_nTracks , "nTracks/I" );
00023 _tree->Branch("pt" , _pt , "pt[nTracks]/D" );
00024 _tree->Branch("eta" , _eta , "eta[nTracks]/D" );
00025 _tree->Branch("phi" , _phi , "phi[nTracks]/D" );
00026 _tree->Branch("exitEta" , _exitEta , "exitEta[nTracks]/D" );
00027 _tree->Branch("exitPhi" , _exitPhi , "exitPhi[nTracks]/D" );
00028 _tree->Branch("trackId" , _trackId , "trackId[nTracks]/S" );
00029 _tree->Branch("flag" , _flag , "flag[nTracks]/S" );
00030 _tree->Branch("nHits" , _nHits , "nHits[nTracks]/s" );
00031 _tree->Branch("charge" , _charge , "charge[nTracks]/S" );
00032 _tree->Branch("nHitsPoss" , _nHitsPoss , "nHitsPoss[nTracks]/s" );
00033 _tree->Branch("nHitsDedx" , _nHitsDedx , "nHitsDedx[nTracks]/s" );
00034 _tree->Branch("nHitsFit" , _nHitsFit , "nHitsFit[nTracks]/s" );
00035 _tree->Branch("nSigmaPion" , _nSigmaPion , "nSigmaPion[nTracks]/D" );
00036 _tree->Branch("Tdca" , _Tdca , "Tdca[nTracks]/D" );
00037 _tree->Branch("dcaZ" , _dcaZ , "dcaZ[nTracks]/D" );
00038 _tree->Branch("dcaD" , _dcaD , "dcaD[nTracks]/D" );
00039 _tree->Branch("BField" , &_BField , "BField/D" );
00040 _tree->Branch("bemcRadius" , &_bemcRadius , "bemcRadius/D" );
00041 _tree->Branch("dEdx" , _dEdx , "dEdx[nTracks]/D" );
00042 _tree->Branch("trackIndex" , _trackIndex , "trackIndex[nTracks]/I" );
00043 _tree->Branch("exitDetectorId", _exitDetectorId , "exitDetectorId[nTracks]/I");
00044 _tree->Branch("exitTowerId" , _exitTowerId , "exitTowerId[nTracks]/I" );
00045 _tree->Branch("vertexZ" , &_vertexZ , "vertexZ/D" );
00046 _tree->Branch("detectorId" , &_detectorId , "detectorId/I" );
00047 _tree->Branch("runNumber" , &_runNumber , "runNumber/I" );
00048 }
00049
00050 void StjTrackListWriter::Fill(const StjTrackList& trackList)
00051 {
00052 if(trackList.empty()) return;
00053
00054 _runNumber = trackList[0].runNumber;
00055 _eventId = trackList[0].eventId;
00056 _detectorId = trackList[0].detectorId;
00057 _vertexZ = trackList[0].vertexZ;
00058
00059 _BField = trackList[0].BField;
00060 _bemcRadius = trackList[0].bemcRadius;
00061
00062 _nTracks = trackList.size();
00063 for(int i = 0; i < _nTracks; ++i) {
00064 const StjTrack& track = trackList[i];
00065 _pt[i] = track.pt;
00066 _eta[i] = track.eta;
00067 _phi[i] = track.phi;
00068 _flag[i] = track.flag;
00069 _nHits[i] = track.nHits;
00070 _charge[i] = track.charge;
00071 _nHitsPoss[i] = track.nHitsPoss;
00072 _nHitsDedx[i] = track.nHitsDedx;
00073 _nHitsFit[i] = track.nHitsFit;
00074 _nSigmaPion[i] = track.nSigmaPion;
00075 _Tdca[i] = track.Tdca;
00076 _dcaZ[i] = track.dcaZ;
00077 _dcaD[i] = track.dcaD;
00078 _exitDetectorId[i] = track.exitDetectorId;
00079 _exitTowerId[i] = track.exitTowerId;
00080 _exitEta[i] = track.exitEta;
00081 _exitPhi[i] = track.exitPhi;
00082 _dEdx[i] = track.dEdx;
00083 _trackIndex[i] = track.trackIndex;
00084 _trackId[i] = track.id;
00085 }
00086
00087 _tree->Fill();
00088 }
00089
00090 void StjTrackListWriter::Finish()
00091 {
00092 _tree->BuildIndex("runNumber", "eventId");
00093 }