#include "AtlEvtWriterD3PDSgTopThinned.h"

#include <cstddef>

#include <TList.h>
#include <TTree.h>

#include <AtlEvent.h>


AtlEvtWriterD3PDSgTopThinned::AtlEvtWriterD3PDSgTopThinned()
    : AtlEvtWriterBase()
    , fJets(0)
    , fLeptons(0)
    , v_jet_pt(new Float_t(kMaxJets))
    , v_jet_eta(new Float_t(kMaxJets))
    , v_jet_phi(new Float_t(kMaxJets))
    , v_lep_pt(new Float_t(kMaxLeptons))
    , v_lep_eta(new Float_t(kMaxLeptons))
    , v_lep_phi(new Float_t(kMaxLeptons))
    , v_lep_pdgId(new Int_t(kMaxLeptons))
{
}

AtlEvtWriterD3PDSgTopThinned::~AtlEvtWriterD3PDSgTopThinned() {
    delete v_jet_pt;
    delete v_jet_eta;
    delete v_jet_phi;
    delete v_lep_pt;
    delete v_lep_eta;
    delete v_lep_phi;
    delete v_lep_pdgId;
}

void AtlEvtWriterD3PDSgTopThinned::SetJets(TList * jets) {
    fJets = jets;
}

void AtlEvtWriterD3PDSgTopThinned::SetLeptons(TList * leptons) {
    fLeptons = leptons;
}

void AtlEvtWriterD3PDSgTopThinned::BookTree(TTree * tree, AtlEvent * evt) {
    fEvent = evt;
    fTree->Branch("evt_weight", &v_evt_weight, "evt_weight/F");
    fTree->Branch("jet_n", &v_jet_n, "jet_n/I");
    fTree->Branch("jet_pt", v_jet_pt, "jet_pt[jet_n]/F");
    fTree->Branch("jet_eta", v_jet_eta, "jet_eta[jet_n]/F");
    fTree->Branch("jet_phi", v_jet_phi, "jet_phi[jet_n]/F");
    fTree->Branch("lep_n", &v_lep_n, "lep_n/I");
    fTree->Branch("lep_pt", v_lep_pt, "lep_pt[lep_n]/F");
    fTree->Branch("lep_eta", v_lep_eta, "lep_eta[lep_n]/F");
    fTree->Branch("lep_phi", v_lep_phi, "lep_phi[lep_n]/F");
    fTree->Branch("lep_pdgId", v_lep_pdgId, "lep_pdgId[lep_n]/I");
    fTree->Branch("met_pt", &v_met_pt, "met_pt/F");
}

TTree * AtlEvtWriterD3PDSgTopThinned::CreateTree(char const * name, char const * title, TTree * inputTree) {
    fTree = new TTree(name, title);
    fTree->SetAutoSave(0);
    return fTree;
}

void AtlEvtWriterD3PDSgTopThinned::WriteEvent() {

    /* event weight */
    AtlEventHeader const & eventHeader = *fEvent->GetEventHeader();
    if ( eventHeader.GetPileupWeight() == 0. )
        return;
    v_evt_weight = eventHeader.GetPreTagEvtWeight();

    /* jets */
    size_t jet_i = 0;
    for ( TIter next(fJets); HepJet * jet = static_cast<HepJet *>(next()); ) {
        if ( !(jet_i < kMaxJets) )
            break;
        v_jet_pt[jet_i] = jet->Pt();
        v_jet_eta[jet_i] = jet->Eta();
        v_jet_phi[jet_i] = jet->Phi();
        ++jet_i;
    }
    v_jet_n = jet_i;

    /* leptons */
    size_t lep_i = 0;
    for ( TIter next(fLeptons); HepParticle * lep = static_cast<HepParticle *>(next()); ) {
        if ( !(lep_i < kMaxLeptons) )
            break;
        v_lep_pt[lep_i] = lep->Pt();
        v_lep_eta[lep_i] = lep->Eta();
        v_lep_phi[lep_i] = lep->Phi();
        v_lep_pdgId[lep_i] = lep->GetPdgCode();
        ++lep_i;
    }
    v_lep_n = lep_i;

    /* save energy sums */
    v_met_pt = fEvent->GetEnergySum()->MissingEt_Mag();

    /* save! */
    fTree->Fill();
}
 AtlEvtWriterD3PDSgTopThinned.cxx:1
 AtlEvtWriterD3PDSgTopThinned.cxx:2
 AtlEvtWriterD3PDSgTopThinned.cxx:3
 AtlEvtWriterD3PDSgTopThinned.cxx:4
 AtlEvtWriterD3PDSgTopThinned.cxx:5
 AtlEvtWriterD3PDSgTopThinned.cxx:6
 AtlEvtWriterD3PDSgTopThinned.cxx:7
 AtlEvtWriterD3PDSgTopThinned.cxx:8
 AtlEvtWriterD3PDSgTopThinned.cxx:9
 AtlEvtWriterD3PDSgTopThinned.cxx:10
 AtlEvtWriterD3PDSgTopThinned.cxx:11
 AtlEvtWriterD3PDSgTopThinned.cxx:12
 AtlEvtWriterD3PDSgTopThinned.cxx:13
 AtlEvtWriterD3PDSgTopThinned.cxx:14
 AtlEvtWriterD3PDSgTopThinned.cxx:15
 AtlEvtWriterD3PDSgTopThinned.cxx:16
 AtlEvtWriterD3PDSgTopThinned.cxx:17
 AtlEvtWriterD3PDSgTopThinned.cxx:18
 AtlEvtWriterD3PDSgTopThinned.cxx:19
 AtlEvtWriterD3PDSgTopThinned.cxx:20
 AtlEvtWriterD3PDSgTopThinned.cxx:21
 AtlEvtWriterD3PDSgTopThinned.cxx:22
 AtlEvtWriterD3PDSgTopThinned.cxx:23
 AtlEvtWriterD3PDSgTopThinned.cxx:24
 AtlEvtWriterD3PDSgTopThinned.cxx:25
 AtlEvtWriterD3PDSgTopThinned.cxx:26
 AtlEvtWriterD3PDSgTopThinned.cxx:27
 AtlEvtWriterD3PDSgTopThinned.cxx:28
 AtlEvtWriterD3PDSgTopThinned.cxx:29
 AtlEvtWriterD3PDSgTopThinned.cxx:30
 AtlEvtWriterD3PDSgTopThinned.cxx:31
 AtlEvtWriterD3PDSgTopThinned.cxx:32
 AtlEvtWriterD3PDSgTopThinned.cxx:33
 AtlEvtWriterD3PDSgTopThinned.cxx:34
 AtlEvtWriterD3PDSgTopThinned.cxx:35
 AtlEvtWriterD3PDSgTopThinned.cxx:36
 AtlEvtWriterD3PDSgTopThinned.cxx:37
 AtlEvtWriterD3PDSgTopThinned.cxx:38
 AtlEvtWriterD3PDSgTopThinned.cxx:39
 AtlEvtWriterD3PDSgTopThinned.cxx:40
 AtlEvtWriterD3PDSgTopThinned.cxx:41
 AtlEvtWriterD3PDSgTopThinned.cxx:42
 AtlEvtWriterD3PDSgTopThinned.cxx:43
 AtlEvtWriterD3PDSgTopThinned.cxx:44
 AtlEvtWriterD3PDSgTopThinned.cxx:45
 AtlEvtWriterD3PDSgTopThinned.cxx:46
 AtlEvtWriterD3PDSgTopThinned.cxx:47
 AtlEvtWriterD3PDSgTopThinned.cxx:48
 AtlEvtWriterD3PDSgTopThinned.cxx:49
 AtlEvtWriterD3PDSgTopThinned.cxx:50
 AtlEvtWriterD3PDSgTopThinned.cxx:51
 AtlEvtWriterD3PDSgTopThinned.cxx:52
 AtlEvtWriterD3PDSgTopThinned.cxx:53
 AtlEvtWriterD3PDSgTopThinned.cxx:54
 AtlEvtWriterD3PDSgTopThinned.cxx:55
 AtlEvtWriterD3PDSgTopThinned.cxx:56
 AtlEvtWriterD3PDSgTopThinned.cxx:57
 AtlEvtWriterD3PDSgTopThinned.cxx:58
 AtlEvtWriterD3PDSgTopThinned.cxx:59
 AtlEvtWriterD3PDSgTopThinned.cxx:60
 AtlEvtWriterD3PDSgTopThinned.cxx:61
 AtlEvtWriterD3PDSgTopThinned.cxx:62
 AtlEvtWriterD3PDSgTopThinned.cxx:63
 AtlEvtWriterD3PDSgTopThinned.cxx:64
 AtlEvtWriterD3PDSgTopThinned.cxx:65
 AtlEvtWriterD3PDSgTopThinned.cxx:66
 AtlEvtWriterD3PDSgTopThinned.cxx:67
 AtlEvtWriterD3PDSgTopThinned.cxx:68
 AtlEvtWriterD3PDSgTopThinned.cxx:69
 AtlEvtWriterD3PDSgTopThinned.cxx:70
 AtlEvtWriterD3PDSgTopThinned.cxx:71
 AtlEvtWriterD3PDSgTopThinned.cxx:72
 AtlEvtWriterD3PDSgTopThinned.cxx:73
 AtlEvtWriterD3PDSgTopThinned.cxx:74
 AtlEvtWriterD3PDSgTopThinned.cxx:75
 AtlEvtWriterD3PDSgTopThinned.cxx:76
 AtlEvtWriterD3PDSgTopThinned.cxx:77
 AtlEvtWriterD3PDSgTopThinned.cxx:78
 AtlEvtWriterD3PDSgTopThinned.cxx:79
 AtlEvtWriterD3PDSgTopThinned.cxx:80
 AtlEvtWriterD3PDSgTopThinned.cxx:81
 AtlEvtWriterD3PDSgTopThinned.cxx:82
 AtlEvtWriterD3PDSgTopThinned.cxx:83
 AtlEvtWriterD3PDSgTopThinned.cxx:84
 AtlEvtWriterD3PDSgTopThinned.cxx:85
 AtlEvtWriterD3PDSgTopThinned.cxx:86
 AtlEvtWriterD3PDSgTopThinned.cxx:87
 AtlEvtWriterD3PDSgTopThinned.cxx:88
 AtlEvtWriterD3PDSgTopThinned.cxx:89
 AtlEvtWriterD3PDSgTopThinned.cxx:90
 AtlEvtWriterD3PDSgTopThinned.cxx:91
 AtlEvtWriterD3PDSgTopThinned.cxx:92
 AtlEvtWriterD3PDSgTopThinned.cxx:93
 AtlEvtWriterD3PDSgTopThinned.cxx:94
 AtlEvtWriterD3PDSgTopThinned.cxx:95
 AtlEvtWriterD3PDSgTopThinned.cxx:96
 AtlEvtWriterD3PDSgTopThinned.cxx:97
 AtlEvtWriterD3PDSgTopThinned.cxx:98
 AtlEvtWriterD3PDSgTopThinned.cxx:99
 AtlEvtWriterD3PDSgTopThinned.cxx:100
 AtlEvtWriterD3PDSgTopThinned.cxx:101
 AtlEvtWriterD3PDSgTopThinned.cxx:102