//____________________________________________________________________
//
// A++ Example Analysis Task
//
// This example demonstrates how to setup an A++ analysis job by
// inheritance from the AtlSelector class. It is shown how the
// routines SetBranchStatus(), BookHistograms(), FillHistograms() and
// ProcessCut(), which have to be defined by the user, should look.
//
// Note that the ProcessCut() routine, which is used for an event
// selection, is optional. The default, which is defined already in
// AtlSelector::ProcessCut(), is to take every event.
//
// For more details see the AtlSelector class.
//
//
// Input: some A++ tree or chain
//
// Ouput: .root file containing some example histograms
//
// Usage:
// 
// {
//   TChain *ch = new TChain("MyInputTree");
//   ch->Add("MyInputFiles*.root");
//   AtlExampleAnalysis *sel = new AtlExampleAnalysis("MyOutputFile.root");
//   ch->Process(sel, "CTRL");
// }
//
//  
// Author: Oliver Maria Kind <mailto: kind@mail.desy.de>
// Update: $Id: AtlExampleAnalysis.cxx,v 1.14 2013/08/22 13:10:20 stamm Exp $
// Copyright: 2009 (C) Oliver Maria Kind
//
#ifndef ATLAS_AtlExampleAnalysis
#include <AtlExampleAnalysis.h>
#endif
#include <TString.h>
#include <TH1F.h>
#include <TH2F.h>
#include <iostream>

using namespace std;

#ifndef __CINT__
ClassImp(AtlExampleAnalysis);
#endif

//____________________________________________________________________

AtlExampleAnalysis::AtlExampleAnalysis(const char* OutputFile) :
  AtlSelector(OutputFile) {
  //
  // Default constructor
  //
}

//____________________________________________________________________

AtlExampleAnalysis::~AtlExampleAnalysis() {
  //
  // Default destructor
  //
}

//____________________________________________________________________

void AtlExampleAnalysis::SetBranchStatus() {
    //
    // Switch on/off branches in order to gain speed
    //
    
    // Switch off all branches by default
    fTree->SetBranchStatus("*", kFALSE);
    
    // Switch on only branches we are going to use
    // This will speed up the analysis process considerably
    fTree->SetBranchStatus("fEventHeader*",   kTRUE);
    fTree->SetBranchStatus("fEnergySum*",     kTRUE);
    fTree->SetBranchStatus("fN_AtlFastJets*", kTRUE);
    fTree->SetBranchStatus("fAtlFastJets*",   kTRUE);
    fTree->SetBranchStatus("fN_MCParticles*", kTRUE);
    fTree->SetBranchStatus("fMCParticles*",   kTRUE);
    fTree->SetBranchStatus("fN_Muons*",       kTRUE);
    fTree->SetBranchStatus("fMuons*",         kTRUE);
}

//____________________________________________________________________

void AtlExampleAnalysis::BookHistograms() {
    //
    // Book histograms
    //
    // This example shows also how to create sub-folders inside a
    // .root file in order to group the large amount of histograms one
    // usually has
    //
    
    // Save present working directory
    // (only relevant when creating sub-directories)
    TDirectory *savdir = gDirectory;
    
    // No. of AtlFast jets
    fHistAtlFastNJets = new TH1F("h_atlfast_njets", "No. of AtlFast Jets",
				 10, 0, 10);
    fHistAtlFastNJets->SetXTitle("N_{Jets}");
    fHistAtlFastNJets->SetYTitle("Number of Entries");
    
    // Create folder for MC truth information
    fOutputFile->cd();
    gDirectory->mkdir("mc_truth", "Monte Carlo Truth info");
    gDirectory->cd("mc_truth");
    
    // MC particle's Pt
    fHistMCPrtPt = new TH1F("h_mcprt_pt", "MC Particle Transverse Momentum",
			    200, 0, 200);
    fHistMCPrtPt->SetXTitle("P_{t} (GeV)");
    fHistMCPrtPt->SetYTitle("Number of Entries");
    
    // MC particle's Eta-Phi plane
    fHistMCPrtEtaPhi = new TH2F("h_mcprt_etaphi", "MC Particle Eta-Phi",
				100, -5, 5, 128, -3.2, 3.2);
    fHistMCPrtEtaPhi->SetXTitle("#eta");
    fHistMCPrtEtaPhi->SetYTitle("#phi (rad)");
    fHistMCPrtEtaPhi->SetZTitle("Number of Entries");
    
    // Create folder for muon information
    fOutputFile->cd();
    gDirectory->mkdir("muon", "Staco Muons");
    gDirectory->cd("muon");

    // No. of muons
    fHistNMuons = new TH1F("h_nmuons", "No. of Muons per Event", 10, 0, 10);
    fHistNMuons->SetXTitle("N_{#mu}");
    fHistNMuons->SetYTitle("Number of Entries");

    // Muon Pt
    fHistMuonPt = new TH1F("h_muon_pt", "Muon Transverse Momentum",
			   100, 0, 100);
    fHistMuonPt->SetXTitle("P_{t} (GeV)");
    fHistMuonPt->SetYTitle("Number of Entries");
    
    // Restore pwd
    savdir->cd();
}

//____________________________________________________________________

void AtlExampleAnalysis::FillHistograms() {
    //
    // Fill histograms
    //
    // This method will be called only for events surviving the
    // ProcessCut() routine
    //

    // No. of AtlFast jets
    fHistAtlFastNJets->Fill(fEvent->GetN_AtlFastJets());
    
    // Loop over all MC particles
    HepMCParticle *prt = 0;
    for ( Int_t i = 0; i < fEvent->GetN_MCParticles(); i++ ) {
	prt = (HepMCParticle*)fEvent->GetMCParticles()->At(i);
	Float_t Pt = prt->Pt();
	fHistMCPrtPt->Fill(Pt, GetPreTagEvtWeight());
	
	// Fill eta-phi plane only for particles with Pt>0 to prevent from
	// annoying Root warnings when computing eta
	if ( Pt != 0. )
	    fHistMCPrtEtaPhi->Fill(prt->Eta(), prt->Phi(), GetPreTagEvtWeight());
    }

    // Fill muon histograms
    fHistNMuons->Fill(fEvent->GetN_Muons());
    for ( Int_t i = 0; i < fEvent->GetN_Muons(); i++ ) {
	fHistMuonPt->Fill(((AtlMuon*)fEvent->GetMuons()->At(i))->Pt(),
			  GetPreTagEvtWeight());
    }
}

//____________________________________________________________________

Bool_t AtlExampleAnalysis::ProcessCut() {
    //
    // Event selection
    //
    // All events are chosen
    //

    return kTRUE;
}

    

 AtlExampleAnalysis.cxx:1
 AtlExampleAnalysis.cxx:2
 AtlExampleAnalysis.cxx:3
 AtlExampleAnalysis.cxx:4
 AtlExampleAnalysis.cxx:5
 AtlExampleAnalysis.cxx:6
 AtlExampleAnalysis.cxx:7
 AtlExampleAnalysis.cxx:8
 AtlExampleAnalysis.cxx:9
 AtlExampleAnalysis.cxx:10
 AtlExampleAnalysis.cxx:11
 AtlExampleAnalysis.cxx:12
 AtlExampleAnalysis.cxx:13
 AtlExampleAnalysis.cxx:14
 AtlExampleAnalysis.cxx:15
 AtlExampleAnalysis.cxx:16
 AtlExampleAnalysis.cxx:17
 AtlExampleAnalysis.cxx:18
 AtlExampleAnalysis.cxx:19
 AtlExampleAnalysis.cxx:20
 AtlExampleAnalysis.cxx:21
 AtlExampleAnalysis.cxx:22
 AtlExampleAnalysis.cxx:23
 AtlExampleAnalysis.cxx:24
 AtlExampleAnalysis.cxx:25
 AtlExampleAnalysis.cxx:26
 AtlExampleAnalysis.cxx:27
 AtlExampleAnalysis.cxx:28
 AtlExampleAnalysis.cxx:29
 AtlExampleAnalysis.cxx:30
 AtlExampleAnalysis.cxx:31
 AtlExampleAnalysis.cxx:32
 AtlExampleAnalysis.cxx:33
 AtlExampleAnalysis.cxx:34
 AtlExampleAnalysis.cxx:35
 AtlExampleAnalysis.cxx:36
 AtlExampleAnalysis.cxx:37
 AtlExampleAnalysis.cxx:38
 AtlExampleAnalysis.cxx:39
 AtlExampleAnalysis.cxx:40
 AtlExampleAnalysis.cxx:41
 AtlExampleAnalysis.cxx:42
 AtlExampleAnalysis.cxx:43
 AtlExampleAnalysis.cxx:44
 AtlExampleAnalysis.cxx:45
 AtlExampleAnalysis.cxx:46
 AtlExampleAnalysis.cxx:47
 AtlExampleAnalysis.cxx:48
 AtlExampleAnalysis.cxx:49
 AtlExampleAnalysis.cxx:50
 AtlExampleAnalysis.cxx:51
 AtlExampleAnalysis.cxx:52
 AtlExampleAnalysis.cxx:53
 AtlExampleAnalysis.cxx:54
 AtlExampleAnalysis.cxx:55
 AtlExampleAnalysis.cxx:56
 AtlExampleAnalysis.cxx:57
 AtlExampleAnalysis.cxx:58
 AtlExampleAnalysis.cxx:59
 AtlExampleAnalysis.cxx:60
 AtlExampleAnalysis.cxx:61
 AtlExampleAnalysis.cxx:62
 AtlExampleAnalysis.cxx:63
 AtlExampleAnalysis.cxx:64
 AtlExampleAnalysis.cxx:65
 AtlExampleAnalysis.cxx:66
 AtlExampleAnalysis.cxx:67
 AtlExampleAnalysis.cxx:68
 AtlExampleAnalysis.cxx:69
 AtlExampleAnalysis.cxx:70
 AtlExampleAnalysis.cxx:71
 AtlExampleAnalysis.cxx:72
 AtlExampleAnalysis.cxx:73
 AtlExampleAnalysis.cxx:74
 AtlExampleAnalysis.cxx:75
 AtlExampleAnalysis.cxx:76
 AtlExampleAnalysis.cxx:77
 AtlExampleAnalysis.cxx:78
 AtlExampleAnalysis.cxx:79
 AtlExampleAnalysis.cxx:80
 AtlExampleAnalysis.cxx:81
 AtlExampleAnalysis.cxx:82
 AtlExampleAnalysis.cxx:83
 AtlExampleAnalysis.cxx:84
 AtlExampleAnalysis.cxx:85
 AtlExampleAnalysis.cxx:86
 AtlExampleAnalysis.cxx:87
 AtlExampleAnalysis.cxx:88
 AtlExampleAnalysis.cxx:89
 AtlExampleAnalysis.cxx:90
 AtlExampleAnalysis.cxx:91
 AtlExampleAnalysis.cxx:92
 AtlExampleAnalysis.cxx:93
 AtlExampleAnalysis.cxx:94
 AtlExampleAnalysis.cxx:95
 AtlExampleAnalysis.cxx:96
 AtlExampleAnalysis.cxx:97
 AtlExampleAnalysis.cxx:98
 AtlExampleAnalysis.cxx:99
 AtlExampleAnalysis.cxx:100
 AtlExampleAnalysis.cxx:101
 AtlExampleAnalysis.cxx:102
 AtlExampleAnalysis.cxx:103
 AtlExampleAnalysis.cxx:104
 AtlExampleAnalysis.cxx:105
 AtlExampleAnalysis.cxx:106
 AtlExampleAnalysis.cxx:107
 AtlExampleAnalysis.cxx:108
 AtlExampleAnalysis.cxx:109
 AtlExampleAnalysis.cxx:110
 AtlExampleAnalysis.cxx:111
 AtlExampleAnalysis.cxx:112
 AtlExampleAnalysis.cxx:113
 AtlExampleAnalysis.cxx:114
 AtlExampleAnalysis.cxx:115
 AtlExampleAnalysis.cxx:116
 AtlExampleAnalysis.cxx:117
 AtlExampleAnalysis.cxx:118
 AtlExampleAnalysis.cxx:119
 AtlExampleAnalysis.cxx:120
 AtlExampleAnalysis.cxx:121
 AtlExampleAnalysis.cxx:122
 AtlExampleAnalysis.cxx:123
 AtlExampleAnalysis.cxx:124
 AtlExampleAnalysis.cxx:125
 AtlExampleAnalysis.cxx:126
 AtlExampleAnalysis.cxx:127
 AtlExampleAnalysis.cxx:128
 AtlExampleAnalysis.cxx:129
 AtlExampleAnalysis.cxx:130
 AtlExampleAnalysis.cxx:131
 AtlExampleAnalysis.cxx:132
 AtlExampleAnalysis.cxx:133
 AtlExampleAnalysis.cxx:134
 AtlExampleAnalysis.cxx:135
 AtlExampleAnalysis.cxx:136
 AtlExampleAnalysis.cxx:137
 AtlExampleAnalysis.cxx:138
 AtlExampleAnalysis.cxx:139
 AtlExampleAnalysis.cxx:140
 AtlExampleAnalysis.cxx:141
 AtlExampleAnalysis.cxx:142
 AtlExampleAnalysis.cxx:143
 AtlExampleAnalysis.cxx:144
 AtlExampleAnalysis.cxx:145
 AtlExampleAnalysis.cxx:146
 AtlExampleAnalysis.cxx:147
 AtlExampleAnalysis.cxx:148
 AtlExampleAnalysis.cxx:149
 AtlExampleAnalysis.cxx:150
 AtlExampleAnalysis.cxx:151
 AtlExampleAnalysis.cxx:152
 AtlExampleAnalysis.cxx:153
 AtlExampleAnalysis.cxx:154
 AtlExampleAnalysis.cxx:155
 AtlExampleAnalysis.cxx:156
 AtlExampleAnalysis.cxx:157
 AtlExampleAnalysis.cxx:158
 AtlExampleAnalysis.cxx:159
 AtlExampleAnalysis.cxx:160
 AtlExampleAnalysis.cxx:161
 AtlExampleAnalysis.cxx:162
 AtlExampleAnalysis.cxx:163
 AtlExampleAnalysis.cxx:164
 AtlExampleAnalysis.cxx:165
 AtlExampleAnalysis.cxx:166
 AtlExampleAnalysis.cxx:167
 AtlExampleAnalysis.cxx:168
 AtlExampleAnalysis.cxx:169
 AtlExampleAnalysis.cxx:170
 AtlExampleAnalysis.cxx:171
 AtlExampleAnalysis.cxx:172
 AtlExampleAnalysis.cxx:173
 AtlExampleAnalysis.cxx:174
 AtlExampleAnalysis.cxx:175
 AtlExampleAnalysis.cxx:176
 AtlExampleAnalysis.cxx:177
 AtlExampleAnalysis.cxx:178
 AtlExampleAnalysis.cxx:179
 AtlExampleAnalysis.cxx:180
 AtlExampleAnalysis.cxx:181
 AtlExampleAnalysis.cxx:182
 AtlExampleAnalysis.cxx:183
 AtlExampleAnalysis.cxx:184
 AtlExampleAnalysis.cxx:185
 AtlExampleAnalysis.cxx:186
 AtlExampleAnalysis.cxx:187
 AtlExampleAnalysis.cxx:188
 AtlExampleAnalysis.cxx:189
 AtlExampleAnalysis.cxx:190
 AtlExampleAnalysis.cxx:191
 AtlExampleAnalysis.cxx:192
 AtlExampleAnalysis.cxx:193
 AtlExampleAnalysis.cxx:194