#ifndef ATLAS_AtlEvtWriterMem
#include <AtlEvtWriterMem.h>
#endif
#include <AtlBTag.h>
#ifndef __CINT__
ClassImp(AtlEvtWriterMem);
#endif
AtlEvtWriterMem::AtlEvtWriterMem() {
fElectrons = 0;
fMuons = 0;
fJets = 0;;
fBJets = 0;;
}
AtlEvtWriterMem::~AtlEvtWriterMem() {
}
void AtlEvtWriterMem::BookTree(TTree *tree, AtlEvent *evt) {
fTree = tree;
fEvent = evt;
fTree->Branch("run_nr", &fRunNr, "run_nr/I");
fTree->Branch("evt_nr", &fEventNr, "evt_nr/I");
fTree->Branch("evt_weight", &fEventWeight, "evt_weight/F");
fTree->Branch("met_et", &fMET_Et, "met_et/F");
fTree->Branch("met_phi", &fMET_Phi, "met_phi/F");
fTree->Branch("el_n", &fElectronN, "el_n/I");
fTree->Branch("el_e", fElectronE, "el_e[el_n]/F");
fTree->Branch("el_pt", fElectronPt, "el_pt[el_n]/F");
fTree->Branch("el_eta", fElectronEta, "el_eta[el_n]/F");
fTree->Branch("el_phi", fElectronPhi, "el_phi[el_n]/F");
fTree->Branch("el_chg", fElectronChg, "el_chg[el_n]/I");
fTree->Branch("mu_n", &fMuonN, "mu_n/I");
fTree->Branch("mu_e", fMuonE, "mu_e[mu_n]/F");
fTree->Branch("mu_pt", fMuonPt, "mu_pt[mu_n]/F");
fTree->Branch("mu_eta", fMuonEta, "mu_eta[mu_n]/F");
fTree->Branch("mu_phi", fMuonPhi, "mu_phi[mu_n]/F");
fTree->Branch("mu_chg", fMuonChg, "mu_chg[mu_n]/I");
fTree->Branch("jet_n", &fJetN, "jet_n/I");
fTree->Branch("jet_e", fJetE, "jet_e[jet_n]/F");
fTree->Branch("jet_pt", fJetPt, "jet_pt[jet_n]/F");
fTree->Branch("jet_eta", fJetEta, "jet_eta[jet_n]/F");
fTree->Branch("jet_phi", fJetPhi, "jet_phi[jet_n]/F");
fTree->Branch("jet_btagged", fJetBTagged, "jet_btagged[jet_n]/O");
fTree->Branch("jet_btagw", fJetBTagWeight, "jet_btagw[jet_n]/F");
fTree->Branch("jet_flav", fJetFlav, "jet_flav[jet_n]/B");
}
void AtlEvtWriterMem::WriteEvent() {
fRunNr = fEvent->RunNr();
fEventNr = fEvent->EventNr();
fEventWeight = fEvent->GetTagEvtWeight();
TIter next_el(fElectrons);
AtlElectron *el = 0;
fElectronN = 0;
while ( (el = (AtlElectron*)next_el()) ) {
fElectronE[fElectronN] = el->E();
fElectronPt[fElectronN] = el->Pt();
fElectronEta[fElectronN] = el->Eta();
fElectronPhi[fElectronN] = el->Phi();
fElectronChg[fElectronN] = ( el->IsPositive() ) ? 1 : -1;
fElectronN++;
}
TIter next_mu(fMuons);
AtlMuon *mu = 0;
fMuonN = 0;
while ( (mu = (AtlMuon*)next_mu()) ) {
fMuonE[fMuonN] = mu->E();
fMuonPt[fMuonN] = mu->Pt();
fMuonEta[fMuonN] = mu->Eta();
fMuonPhi[fMuonN] = mu->Phi();
fMuonChg[fMuonN] = ( mu->IsPositive() ) ? 1 : -1;
fMuonN++;
}
TIter next_jet(fJets);
AtlJet *jet = 0;
AtlJet::EFlavour flavour = AtlJet::kUnknownFlavour;
fJetN = 0;
while ( (jet = (AtlJet*)next_jet()) ) {
fJetE[fJetN] = jet->E();
fJetPt[fJetN] = jet->Pt();
fJetEta[fJetN] = jet->Eta();
fJetPhi[fJetN] = jet->Phi();
fJetBTagWeight[fJetN] = jet->GetTag(fBTagger)->GetWeight();
fJetBTagged[fJetN] = ( fBJets->Contains(jet) );
flavour = jet->GetTruthFlavour();
switch ( flavour ) {
case AtlJet::kUnknownFlavour:
fJetFlav[fJetN] = 'u';
break;
case AtlJet::kLightFlavoured:
fJetFlav[fJetN] = 'l';
break;
case AtlJet::kCharm:
fJetFlav[fJetN] = 'c';
break;
case AtlJet::kBeauty:
fJetFlav[fJetN] = 'b';
break;
case AtlJet::kTau:
fJetFlav[fJetN] = 't';
break;
default:
Error("WriteEvent", "Unknown jet truth flavour. Abort!");
gSystem->Abort(1);
}
fJetN++;
}
fMET_Et = fEvent->GetEnergySum()->MissingEt_Mag();
fMET_Phi = fEvent->GetEnergySum()->MissingEt_Phi();
fTree->Fill();
}
void AtlEvtWriterMem::SetElectrons(TList *electrons) {
fElectrons = electrons;
}
void AtlEvtWriterMem::SetMuons(TList *muons) {
fMuons = muons;
}
void AtlEvtWriterMem::SetJets(TList *jets, TList *bjets) {
fJets = jets;
fBJets = bjets;
}
void AtlEvtWriterMem::SetBTagger(AtlBTag::ETagger BTagger) {
fBTagger = BTagger;
}