00001
00002 #include "StjJetListWriter.h"
00003
00004 #include <TFile.h>
00005 #include <TTree.h>
00006
00007 #include <iostream>
00008
00009 ClassImp(StjJetListWriter)
00010
00011 using namespace std;
00012
00013 StjJetListWriter::StjJetListWriter(const char* jetTreeName, const char* jetFourVecTreeName, TDirectory* file)
00014 : _file(file)
00015 {
00016 _file->cd();
00017
00018 _jetTree = new TTree(jetTreeName, jetTreeName);
00019 _jetTree->SetAutoSave(kMaxLong64);
00020 _jetTree->SetMaxTreeSize(kMaxLong64);
00021
00022 _jetTree->Branch("eventId" , &_jet_eventId , "eventId/I" );
00023 _jetTree->Branch("nJets" , &_jet_nJets , "nJets/I" );
00024 _jetTree->Branch("jetId" , _jet_jetId , "jetId[nJets]/I" );
00025 _jetTree->Branch("pt" , _jet_pt , "pt[nJets]/D" );
00026 _jetTree->Branch("eta" , _jet_eta , "eta[nJets]/D" );
00027 _jetTree->Branch("detectorEta", _jet_detectorEta , "detectorEta[nJets]/D");
00028 _jetTree->Branch("phi" , _jet_phi , "phi[nJets]/D" );
00029 _jetTree->Branch("m" , _jet_m , "m[nJets]/D" );
00030 _jetTree->Branch("neuRt" , _jet_neuRt , "neuRt[nJets]/D" );
00031 _jetTree->Branch("vertexZ" , &_jet_vertexZ , "vertexZ/D");
00032 _jetTree->Branch("runNumber" , &_jet_runNumber , "runNumber/I" );
00033
00034 _jetFourVecTree = new TTree(jetFourVecTreeName, jetFourVecTreeName);
00035 _jetFourVecTree->SetAutoSave(kMaxLong64);
00036 _jetFourVecTree->SetMaxTreeSize(kMaxLong64);
00037
00038 _jetFourVecTree->Branch("eventId" , &_four_eventId , "eventId/I" );
00039 _jetFourVecTree->Branch("nFourVecs" , &_four_nFourVecs , "nFourVecs/I" );
00040 _jetFourVecTree->Branch("jetId" , _four_jetId , "jetId[nFourVecs]/I" );
00041 _jetFourVecTree->Branch("pt" , _four_pt , "pt[nFourVecs]/D" );
00042 _jetFourVecTree->Branch("eta" , _four_eta , "eta[nFourVecs]/D" );
00043 _jetFourVecTree->Branch("phi" , _four_phi , "phi[nFourVecs]/D" );
00044 _jetFourVecTree->Branch("towerId" , _four_towerId , "towerId[nFourVecs]/I" );
00045 _jetFourVecTree->Branch("trackId" , _four_trackId , "trackId[nFourVecs]/S" );
00046 _jetFourVecTree->Branch("mcparticleId", _four_mcparticleId , "mcparticleId[nFourVecs]/I");
00047 _jetFourVecTree->Branch("m" , _four_m , "m[nFourVecs]/D" );
00048 _jetFourVecTree->Branch("type" , _four_type , "type[nFourVecs]/I" );
00049 _jetFourVecTree->Branch("detectorId" , _four_detectorId , "detectorId[nFourVecs]/I" );
00050 _jetFourVecTree->Branch("fourvecId" , _four_fourvecId , "fourvecId[nFourVecs]/I" );
00051 _jetFourVecTree->Branch("runNumber" , &_four_runNumber , "runNumber/I" );
00052 _jetFourVecTree->Branch("vertexZ" , &_four_vertexZ , "vertexZ/D" );
00053 }
00054
00055 void StjJetListWriter::Fill(const StjJetList& jetList)
00056 {
00057 if(jetList.empty()) return;
00058
00059 _jet_runNumber = jetList[0].runNumber;
00060 _jet_eventId = jetList[0].eventId;
00061 _jet_vertexZ = jetList[0].vertexZ;
00062
00063 _four_nFourVecs = 0;
00064
00065 _jet_nJets = jetList.size();
00066 for(int i = 0; i < _jet_nJets; ++i) {
00067 const StjJet& jet = jetList[i];
00068 _jet_jetId[i] = jet.jetId;
00069 _jet_pt[i] = jet.pt;
00070 _jet_eta[i] = jet.eta;
00071 _jet_phi[i] = jet.phi;
00072 _jet_m[i] = jet.m;
00073 _jet_neuRt[i] = jet.neuRt;
00074 _jet_detectorEta[i] = jet.detectorEta;
00075 fillFourVecTree(jet.jetId, jet.fourVecList);
00076 }
00077
00078 _jetTree->Fill();
00079 _jetFourVecTree->Fill();
00080 }
00081
00082 void StjJetListWriter::fillFourVecTree(int jetId, const StjFourVecList& fourVecList)
00083 {
00084 if(fourVecList.empty()) return;
00085
00086 _four_runNumber = fourVecList[0].runNumber;
00087 _four_eventId = fourVecList[0].eventId;
00088 _four_vertexZ = fourVecList[0].vertexZ;
00089
00090 for(size_t i = 0; i < fourVecList.size(); ++i) {
00091 const StjFourVec& four = fourVecList[i];
00092 _four_fourvecId[_four_nFourVecs] = four.fourvecId;
00093 _four_jetId[_four_nFourVecs] = jetId;
00094 _four_type[_four_nFourVecs] = four.type;
00095 _four_detectorId[_four_nFourVecs] = four.detectorId;
00096 _four_trackId[_four_nFourVecs] = four.trackId;
00097 _four_towerId[_four_nFourVecs] = four.towerId;
00098 _four_mcparticleId[_four_nFourVecs] = four.mcparticleId;
00099 _four_pt[_four_nFourVecs] = four.pt;
00100 _four_eta[_four_nFourVecs] = four.eta;
00101 _four_phi[_four_nFourVecs] = four.phi;
00102 _four_m[_four_nFourVecs] = four.m;
00103 _four_nFourVecs++;
00104 }
00105 }
00106
00107 void StjJetListWriter::Finish()
00108 {
00109 _jetTree->BuildIndex("runNumber", "eventId");
00110 _jetFourVecTree->BuildIndex("runNumber", "eventId");
00111 }