//____________________________________________________________________
//
// Single-top FCNC tZ analysis
// 
//  
#include "AtlSgTopFCNC_tZ_Multi.h"

#include <cassert>
#include <cmath>

#include <Rtypes.h>
#include <TList.h>

#include "AtlHistogramTool.h"


//____________________________________________________________________

AtlSgTopFCNC_tZ_Multi::AtlSgTopFCNC_tZ_Multi(const char* OutputFileName) :
    AtlSgTopFCNC_tZ_Base3L(OutputFileName) {
    //
    // Default constructor
    //
    SetCutDefaults();
    fListOfSubselections = new TList();
    fSubselection = 0;
}

//____________________________________________________________________

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

//____________________________________________________________________

void AtlSgTopFCNC_tZ_Multi::SetCutDefaults() {
    //
    // Selection cut defaults
    //
    AtlSgTopFCNC_tZ_Base3L::SetCutDefaults();
    fNLeptons_min = -1;
    fNLeptons_max = -1;
    fNJets_min = -1;
    fNJets_max = -1;
    fNBTags_min = -1;
    fNBTags_max = -1;
    fPt_Lep1_min = NAN;
    fPt_Lep2_min = NAN;
    fPt_Lep3_min = NAN;
    fMET_min = NAN;
    fMET_max = NAN;
    fMtW_min = NAN;
    fMtW_max = NAN;
    fMassZ_min = NAN; // disabling the Z-mass window in the Z reconstruction
    fMassZ_max = NAN;
    fMassTop_min = NAN; // disabling the top-mass window in the top reconstruction
    fMassTop_max = NAN;
    fReconstructTop = kFALSE;
    fRequireZ = kFALSE;
    fRequireTop = kFALSE;
    fVetoZboson = kFALSE; // not supported; use the proper Z veto (fVetoZbosonLate) instead
    fVetoTop = kFALSE; // not supported
    fVetoZbosonLate = kFALSE;
}

//____________________________________________________________________

void AtlSgTopFCNC_tZ_Multi::Print(Option_t *option) const {
    //
    // Print user analysis configuration
    //
    cout << endl
	 << "========================================================" << endl
	 << "  Atlas Single-Top FCNC tZ Selector                     " << endl
	 << "========================================================" << endl
	 << endl;
    AtlSgTopFCNC_tZ_Base3L::Print(option);
    cout << endl
	 << "========================================================"
	 << endl << endl;   
}

//____________________________________________________________________

Bool_t AtlSgTopFCNC_tZ_Multi::ProcessPreCut() {
    return kTRUE;
}

//____________________________________________________________________

Bool_t AtlSgTopFCNC_tZ_Multi::ProcessCut() {
    //
    // Event selection
    //

    bool selected = kFALSE;

    for ( TIter next(fListOfSubselections); Subselection * subsel = static_cast<Subselection *>(next()); ) {
        assert( !fSubselection );
        fSubselection = subsel;

        SetCutDefaults();
        fNLeptons_min = subsel->fNLeptons_min;
        fNLeptons_max = subsel->fNLeptons_max;
        fNJets_min = subsel->fNJets_min;
        fNJets_max = subsel->fNJets_max;
        fNBTags_min = subsel->fNBTags_min;
        fNBTags_max = subsel->fNBTags_max;
        fPt_Lep1_min = subsel->fPt_Lep1_min;
        fPt_Lep2_min = subsel->fPt_Lep2_min;
        fPt_Lep3_min = subsel->fPt_Lep3_min;
        fMET_min = subsel->fMET_min;
        fMET_max = subsel->fMET_max;
        fMtW_min = subsel->fMtW_min;
        fMtW_max = subsel->fMtW_max;
        fReconstructTop = subsel->fReconstructTop;
        fRequireZ = subsel->fRequireZ;
        fRequireTop = subsel->fRequireTop;
        fVetoZboson = kFALSE;
        fVetoTop = kFALSE;
        fVetoZbosonLate = subsel->fVetoZbosonLate;
        assert( fReconstructTop || !fRequireTop );
        assert( fRequireZ || !fRequireTop );

        fHistsAllCuts = subsel->fHistsAllCuts;

        if ( ProcessCurrentSubselection() ) {
            assert( fEvent->GetEventHeader()->TestPreselectionFlagsAny(AtlEventHeader::kLeptonic) );
            selected = kTRUE;
        }

        fHistsAllCuts = 0;

        fSubselection = 0;
    }

    SetCutDefaults();

    return selected;
}

//____________________________________________________________________

Bool_t AtlSgTopFCNC_tZ_Multi::ProcessCurrentSubselection() {

    // Leptons

    double Pt_Lep[3] = { 0., 0., 0. };
    for ( int i = 0; i != min(fLeptons->GetEntries(), 3); ++i ) {
        Pt_Lep[i] = static_cast<HepParticle *>(fLeptons->At(i))->Pt();
    }
    if ( !(Pt_Lep[0] >= fPt_Lep1_min) )
        return kFALSE;
    if ( !(Pt_Lep[1] >= fPt_Lep2_min) )
        return kFALSE;
    if ( !(Pt_Lep[2] >= fPt_Lep3_min) )
        return kFALSE;

    if ( !(fLeptons->GetEntries() >= fNLeptons_min ) )
        return kFALSE;
    if ( !(fLeptons->GetEntries() <= fNLeptons_max ) )
        return kFALSE;

    // Jets

    if ( !(fJets->GetEntries() >= fNJets_min) )
        return kFALSE;

    if ( !(fJets->GetEntries() <= fNJets_max) )
        return kFALSE;

    // Missing Et

    fMET = fEvent->GetEnergySum()->MissingEt_Mag();
    if ( !(fMET >= fMET_min) )
        return kFALSE;
    if ( !(fMET < fMET_max) )
        return kFALSE;

    // B-tagging requirement

    if ( !(fBJets->GetEntries() >= fNBTags_min) )
        return kFALSE;
    if ( !(fBJets->GetEntries() <= fNBTags_max) )
        return kFALSE;

    // Transverse W mass (leading lepton !)
    //
    // Do not cut on this MtW definition but on the proper MtW using
    // the lepton from the top decay (see below)
    fMtW = fEvent->W_Mperp((HepParticle*)fLeptons->At(0));

    // =================
    // tZ reconstruction
    // =================
    ReconstructZ0Top();

    // Require a Z candidate
    // Note: in order for this to work properly, we must use the same notion of "distance" as
    //       HepZ0Decay::Compare does -> use a symmetric cut about the Z mass.
    {
        int NumberOfGoodCandidates = 0;
        for ( TIter next(fEvent->GetZ0Decays()); HepZ0Decay * z = static_cast<HepZ0Decay *>(next()); ) {
            double m = z->P().M() - 91.187; /* use same number as in HepZ0Decay::Compare */
            if (fabs(m) <= 10.) {
                NumberOfGoodCandidates += 1;
            }
        }
        if ( fRequireZ && NumberOfGoodCandidates < 1 )
            return kFALSE;
        if ( fVetoZbosonLate && NumberOfGoodCandidates > 0 )
            return kFALSE;
    }
    
    // Require a top-quark candidate
    if ( fRequireTop && fEvent->GetN_TopDecays() < 1 )
        return kFALSE;

    // Cut on transverse W mass (based on the lepton originating from
    // the reconstrcuted top decay)
    if ( fMtW_min > 0. || fMtW_max < INFINITY ) {
        HepParticle * theLepton = 0;
        if ( fEvent->GetN_TopDecays() > 0 ) {
            // use lepton associated with the top-quark candidate
            HepTopDecay *top = (HepTopDecay*)fEvent->GetTopDecays()->At(0);
            AtlWDecayLNu *Wboson = (AtlWDecayLNu*)top->GetWDecay();
            theLepton = Wboson->GetChargedLeptonOrig();
        }
        else {
            // use hardest lepton not associated with the best Z0 candidate
            HepZ0Decay * Z0 = GetZ0DecayBest();
            TObject * lep1 = (Z0 ? Z0->GetDaughter1() : 0);
            TObject * lep2 = (Z0 ? Z0->GetDaughter2() : 0);
            for (TIter next(fLeptons); TObject * lep = next(); ) {
                if ( lep != lep1 && lep != lep2 ) {
                   theLepton = static_cast<HepParticle *>(lep);
                   break;
                }
            }
        }
        assert( theLepton );
        Float_t MtW = fEvent->W_Mperp(theLepton);
        if ( !(MtW >= fMtW_min && MtW < fMtW_max) )
            return kFALSE;
    }

    // Fill histograms for with all cuts applied
    FillHistogramsCommon(fHistsAllCuts, fEvent->GetTagEvtWeight());
    if ( fSubselection->fPtZ_max < INFINITY ) {
        HepZ0Decay * Z0 = GetZ0DecayBest();
        if ( !Z0 )
            return kFALSE;
        if ( !(Z0->Pt() < fSubselection->fPtZ_max) )
            return kFALSE;
    }
    if ( GetZ0DecayBest() ) {
        FillHistogramsZ0(fHistsAllCuts, fEvent->GetTagEvtWeight(), "Z0_best", GetZ0DecayBest());
    }
    if ( fReconstructTop ) {
        FillHistogramsTop(fHistsAllCuts, fEvent->GetTagEvtWeight());
    }

    // Accept event
    return kTRUE;
}

//____________________________________________________________________

void AtlSgTopFCNC_tZ_Multi::BookHistograms() {
    //
    // Book histograms
    //
    assert( !fHistsNoCuts );
    assert( !fHistsPreSel );
    assert( !fHistsPreTag );
    assert( !fHistsAllCuts );

    for ( TIter next(fListOfSubselections); Subselection * subsel = static_cast<Subselection *>(next()); ) {
        assert( !fSubselection );
        fSubselection = subsel;
        assert( !subsel->fHistsAllCuts );
        assert( *subsel->GetName() );
        AtlHistogramTool * tool = new AtlHistogramTool(subsel->GetName(), "Histograms with all cuts");
        subsel->fHistsAllCuts = tool;
        AddTool(tool);
        BookHistogramsCommon(tool);
        BookHistogramsZ0(tool, "Z0_best");
        if ( subsel->fReconstructTop ) {
            BookHistogramsTop(tool);
        }
        fSubselection = 0;
    }
}

//____________________________________________________________________

void AtlSgTopFCNC_tZ_Multi::FillHistograms() {
}
 AtlSgTopFCNC_tZ_Multi.cxx:1
 AtlSgTopFCNC_tZ_Multi.cxx:2
 AtlSgTopFCNC_tZ_Multi.cxx:3
 AtlSgTopFCNC_tZ_Multi.cxx:4
 AtlSgTopFCNC_tZ_Multi.cxx:5
 AtlSgTopFCNC_tZ_Multi.cxx:6
 AtlSgTopFCNC_tZ_Multi.cxx:7
 AtlSgTopFCNC_tZ_Multi.cxx:8
 AtlSgTopFCNC_tZ_Multi.cxx:9
 AtlSgTopFCNC_tZ_Multi.cxx:10
 AtlSgTopFCNC_tZ_Multi.cxx:11
 AtlSgTopFCNC_tZ_Multi.cxx:12
 AtlSgTopFCNC_tZ_Multi.cxx:13
 AtlSgTopFCNC_tZ_Multi.cxx:14
 AtlSgTopFCNC_tZ_Multi.cxx:15
 AtlSgTopFCNC_tZ_Multi.cxx:16
 AtlSgTopFCNC_tZ_Multi.cxx:17
 AtlSgTopFCNC_tZ_Multi.cxx:18
 AtlSgTopFCNC_tZ_Multi.cxx:19
 AtlSgTopFCNC_tZ_Multi.cxx:20
 AtlSgTopFCNC_tZ_Multi.cxx:21
 AtlSgTopFCNC_tZ_Multi.cxx:22
 AtlSgTopFCNC_tZ_Multi.cxx:23
 AtlSgTopFCNC_tZ_Multi.cxx:24
 AtlSgTopFCNC_tZ_Multi.cxx:25
 AtlSgTopFCNC_tZ_Multi.cxx:26
 AtlSgTopFCNC_tZ_Multi.cxx:27
 AtlSgTopFCNC_tZ_Multi.cxx:28
 AtlSgTopFCNC_tZ_Multi.cxx:29
 AtlSgTopFCNC_tZ_Multi.cxx:30
 AtlSgTopFCNC_tZ_Multi.cxx:31
 AtlSgTopFCNC_tZ_Multi.cxx:32
 AtlSgTopFCNC_tZ_Multi.cxx:33
 AtlSgTopFCNC_tZ_Multi.cxx:34
 AtlSgTopFCNC_tZ_Multi.cxx:35
 AtlSgTopFCNC_tZ_Multi.cxx:36
 AtlSgTopFCNC_tZ_Multi.cxx:37
 AtlSgTopFCNC_tZ_Multi.cxx:38
 AtlSgTopFCNC_tZ_Multi.cxx:39
 AtlSgTopFCNC_tZ_Multi.cxx:40
 AtlSgTopFCNC_tZ_Multi.cxx:41
 AtlSgTopFCNC_tZ_Multi.cxx:42
 AtlSgTopFCNC_tZ_Multi.cxx:43
 AtlSgTopFCNC_tZ_Multi.cxx:44
 AtlSgTopFCNC_tZ_Multi.cxx:45
 AtlSgTopFCNC_tZ_Multi.cxx:46
 AtlSgTopFCNC_tZ_Multi.cxx:47
 AtlSgTopFCNC_tZ_Multi.cxx:48
 AtlSgTopFCNC_tZ_Multi.cxx:49
 AtlSgTopFCNC_tZ_Multi.cxx:50
 AtlSgTopFCNC_tZ_Multi.cxx:51
 AtlSgTopFCNC_tZ_Multi.cxx:52
 AtlSgTopFCNC_tZ_Multi.cxx:53
 AtlSgTopFCNC_tZ_Multi.cxx:54
 AtlSgTopFCNC_tZ_Multi.cxx:55
 AtlSgTopFCNC_tZ_Multi.cxx:56
 AtlSgTopFCNC_tZ_Multi.cxx:57
 AtlSgTopFCNC_tZ_Multi.cxx:58
 AtlSgTopFCNC_tZ_Multi.cxx:59
 AtlSgTopFCNC_tZ_Multi.cxx:60
 AtlSgTopFCNC_tZ_Multi.cxx:61
 AtlSgTopFCNC_tZ_Multi.cxx:62
 AtlSgTopFCNC_tZ_Multi.cxx:63
 AtlSgTopFCNC_tZ_Multi.cxx:64
 AtlSgTopFCNC_tZ_Multi.cxx:65
 AtlSgTopFCNC_tZ_Multi.cxx:66
 AtlSgTopFCNC_tZ_Multi.cxx:67
 AtlSgTopFCNC_tZ_Multi.cxx:68
 AtlSgTopFCNC_tZ_Multi.cxx:69
 AtlSgTopFCNC_tZ_Multi.cxx:70
 AtlSgTopFCNC_tZ_Multi.cxx:71
 AtlSgTopFCNC_tZ_Multi.cxx:72
 AtlSgTopFCNC_tZ_Multi.cxx:73
 AtlSgTopFCNC_tZ_Multi.cxx:74
 AtlSgTopFCNC_tZ_Multi.cxx:75
 AtlSgTopFCNC_tZ_Multi.cxx:76
 AtlSgTopFCNC_tZ_Multi.cxx:77
 AtlSgTopFCNC_tZ_Multi.cxx:78
 AtlSgTopFCNC_tZ_Multi.cxx:79
 AtlSgTopFCNC_tZ_Multi.cxx:80
 AtlSgTopFCNC_tZ_Multi.cxx:81
 AtlSgTopFCNC_tZ_Multi.cxx:82
 AtlSgTopFCNC_tZ_Multi.cxx:83
 AtlSgTopFCNC_tZ_Multi.cxx:84
 AtlSgTopFCNC_tZ_Multi.cxx:85
 AtlSgTopFCNC_tZ_Multi.cxx:86
 AtlSgTopFCNC_tZ_Multi.cxx:87
 AtlSgTopFCNC_tZ_Multi.cxx:88
 AtlSgTopFCNC_tZ_Multi.cxx:89
 AtlSgTopFCNC_tZ_Multi.cxx:90
 AtlSgTopFCNC_tZ_Multi.cxx:91
 AtlSgTopFCNC_tZ_Multi.cxx:92
 AtlSgTopFCNC_tZ_Multi.cxx:93
 AtlSgTopFCNC_tZ_Multi.cxx:94
 AtlSgTopFCNC_tZ_Multi.cxx:95
 AtlSgTopFCNC_tZ_Multi.cxx:96
 AtlSgTopFCNC_tZ_Multi.cxx:97
 AtlSgTopFCNC_tZ_Multi.cxx:98
 AtlSgTopFCNC_tZ_Multi.cxx:99
 AtlSgTopFCNC_tZ_Multi.cxx:100
 AtlSgTopFCNC_tZ_Multi.cxx:101
 AtlSgTopFCNC_tZ_Multi.cxx:102
 AtlSgTopFCNC_tZ_Multi.cxx:103
 AtlSgTopFCNC_tZ_Multi.cxx:104
 AtlSgTopFCNC_tZ_Multi.cxx:105
 AtlSgTopFCNC_tZ_Multi.cxx:106
 AtlSgTopFCNC_tZ_Multi.cxx:107
 AtlSgTopFCNC_tZ_Multi.cxx:108
 AtlSgTopFCNC_tZ_Multi.cxx:109
 AtlSgTopFCNC_tZ_Multi.cxx:110
 AtlSgTopFCNC_tZ_Multi.cxx:111
 AtlSgTopFCNC_tZ_Multi.cxx:112
 AtlSgTopFCNC_tZ_Multi.cxx:113
 AtlSgTopFCNC_tZ_Multi.cxx:114
 AtlSgTopFCNC_tZ_Multi.cxx:115
 AtlSgTopFCNC_tZ_Multi.cxx:116
 AtlSgTopFCNC_tZ_Multi.cxx:117
 AtlSgTopFCNC_tZ_Multi.cxx:118
 AtlSgTopFCNC_tZ_Multi.cxx:119
 AtlSgTopFCNC_tZ_Multi.cxx:120
 AtlSgTopFCNC_tZ_Multi.cxx:121
 AtlSgTopFCNC_tZ_Multi.cxx:122
 AtlSgTopFCNC_tZ_Multi.cxx:123
 AtlSgTopFCNC_tZ_Multi.cxx:124
 AtlSgTopFCNC_tZ_Multi.cxx:125
 AtlSgTopFCNC_tZ_Multi.cxx:126
 AtlSgTopFCNC_tZ_Multi.cxx:127
 AtlSgTopFCNC_tZ_Multi.cxx:128
 AtlSgTopFCNC_tZ_Multi.cxx:129
 AtlSgTopFCNC_tZ_Multi.cxx:130
 AtlSgTopFCNC_tZ_Multi.cxx:131
 AtlSgTopFCNC_tZ_Multi.cxx:132
 AtlSgTopFCNC_tZ_Multi.cxx:133
 AtlSgTopFCNC_tZ_Multi.cxx:134
 AtlSgTopFCNC_tZ_Multi.cxx:135
 AtlSgTopFCNC_tZ_Multi.cxx:136
 AtlSgTopFCNC_tZ_Multi.cxx:137
 AtlSgTopFCNC_tZ_Multi.cxx:138
 AtlSgTopFCNC_tZ_Multi.cxx:139
 AtlSgTopFCNC_tZ_Multi.cxx:140
 AtlSgTopFCNC_tZ_Multi.cxx:141
 AtlSgTopFCNC_tZ_Multi.cxx:142
 AtlSgTopFCNC_tZ_Multi.cxx:143
 AtlSgTopFCNC_tZ_Multi.cxx:144
 AtlSgTopFCNC_tZ_Multi.cxx:145
 AtlSgTopFCNC_tZ_Multi.cxx:146
 AtlSgTopFCNC_tZ_Multi.cxx:147
 AtlSgTopFCNC_tZ_Multi.cxx:148
 AtlSgTopFCNC_tZ_Multi.cxx:149
 AtlSgTopFCNC_tZ_Multi.cxx:150
 AtlSgTopFCNC_tZ_Multi.cxx:151
 AtlSgTopFCNC_tZ_Multi.cxx:152
 AtlSgTopFCNC_tZ_Multi.cxx:153
 AtlSgTopFCNC_tZ_Multi.cxx:154
 AtlSgTopFCNC_tZ_Multi.cxx:155
 AtlSgTopFCNC_tZ_Multi.cxx:156
 AtlSgTopFCNC_tZ_Multi.cxx:157
 AtlSgTopFCNC_tZ_Multi.cxx:158
 AtlSgTopFCNC_tZ_Multi.cxx:159
 AtlSgTopFCNC_tZ_Multi.cxx:160
 AtlSgTopFCNC_tZ_Multi.cxx:161
 AtlSgTopFCNC_tZ_Multi.cxx:162
 AtlSgTopFCNC_tZ_Multi.cxx:163
 AtlSgTopFCNC_tZ_Multi.cxx:164
 AtlSgTopFCNC_tZ_Multi.cxx:165
 AtlSgTopFCNC_tZ_Multi.cxx:166
 AtlSgTopFCNC_tZ_Multi.cxx:167
 AtlSgTopFCNC_tZ_Multi.cxx:168
 AtlSgTopFCNC_tZ_Multi.cxx:169
 AtlSgTopFCNC_tZ_Multi.cxx:170
 AtlSgTopFCNC_tZ_Multi.cxx:171
 AtlSgTopFCNC_tZ_Multi.cxx:172
 AtlSgTopFCNC_tZ_Multi.cxx:173
 AtlSgTopFCNC_tZ_Multi.cxx:174
 AtlSgTopFCNC_tZ_Multi.cxx:175
 AtlSgTopFCNC_tZ_Multi.cxx:176
 AtlSgTopFCNC_tZ_Multi.cxx:177
 AtlSgTopFCNC_tZ_Multi.cxx:178
 AtlSgTopFCNC_tZ_Multi.cxx:179
 AtlSgTopFCNC_tZ_Multi.cxx:180
 AtlSgTopFCNC_tZ_Multi.cxx:181
 AtlSgTopFCNC_tZ_Multi.cxx:182
 AtlSgTopFCNC_tZ_Multi.cxx:183
 AtlSgTopFCNC_tZ_Multi.cxx:184
 AtlSgTopFCNC_tZ_Multi.cxx:185
 AtlSgTopFCNC_tZ_Multi.cxx:186
 AtlSgTopFCNC_tZ_Multi.cxx:187
 AtlSgTopFCNC_tZ_Multi.cxx:188
 AtlSgTopFCNC_tZ_Multi.cxx:189
 AtlSgTopFCNC_tZ_Multi.cxx:190
 AtlSgTopFCNC_tZ_Multi.cxx:191
 AtlSgTopFCNC_tZ_Multi.cxx:192
 AtlSgTopFCNC_tZ_Multi.cxx:193
 AtlSgTopFCNC_tZ_Multi.cxx:194
 AtlSgTopFCNC_tZ_Multi.cxx:195
 AtlSgTopFCNC_tZ_Multi.cxx:196
 AtlSgTopFCNC_tZ_Multi.cxx:197
 AtlSgTopFCNC_tZ_Multi.cxx:198
 AtlSgTopFCNC_tZ_Multi.cxx:199
 AtlSgTopFCNC_tZ_Multi.cxx:200
 AtlSgTopFCNC_tZ_Multi.cxx:201
 AtlSgTopFCNC_tZ_Multi.cxx:202
 AtlSgTopFCNC_tZ_Multi.cxx:203
 AtlSgTopFCNC_tZ_Multi.cxx:204
 AtlSgTopFCNC_tZ_Multi.cxx:205
 AtlSgTopFCNC_tZ_Multi.cxx:206
 AtlSgTopFCNC_tZ_Multi.cxx:207
 AtlSgTopFCNC_tZ_Multi.cxx:208
 AtlSgTopFCNC_tZ_Multi.cxx:209
 AtlSgTopFCNC_tZ_Multi.cxx:210
 AtlSgTopFCNC_tZ_Multi.cxx:211
 AtlSgTopFCNC_tZ_Multi.cxx:212
 AtlSgTopFCNC_tZ_Multi.cxx:213
 AtlSgTopFCNC_tZ_Multi.cxx:214
 AtlSgTopFCNC_tZ_Multi.cxx:215
 AtlSgTopFCNC_tZ_Multi.cxx:216
 AtlSgTopFCNC_tZ_Multi.cxx:217
 AtlSgTopFCNC_tZ_Multi.cxx:218
 AtlSgTopFCNC_tZ_Multi.cxx:219
 AtlSgTopFCNC_tZ_Multi.cxx:220
 AtlSgTopFCNC_tZ_Multi.cxx:221
 AtlSgTopFCNC_tZ_Multi.cxx:222
 AtlSgTopFCNC_tZ_Multi.cxx:223
 AtlSgTopFCNC_tZ_Multi.cxx:224
 AtlSgTopFCNC_tZ_Multi.cxx:225
 AtlSgTopFCNC_tZ_Multi.cxx:226
 AtlSgTopFCNC_tZ_Multi.cxx:227
 AtlSgTopFCNC_tZ_Multi.cxx:228
 AtlSgTopFCNC_tZ_Multi.cxx:229
 AtlSgTopFCNC_tZ_Multi.cxx:230
 AtlSgTopFCNC_tZ_Multi.cxx:231
 AtlSgTopFCNC_tZ_Multi.cxx:232
 AtlSgTopFCNC_tZ_Multi.cxx:233
 AtlSgTopFCNC_tZ_Multi.cxx:234
 AtlSgTopFCNC_tZ_Multi.cxx:235
 AtlSgTopFCNC_tZ_Multi.cxx:236
 AtlSgTopFCNC_tZ_Multi.cxx:237
 AtlSgTopFCNC_tZ_Multi.cxx:238
 AtlSgTopFCNC_tZ_Multi.cxx:239
 AtlSgTopFCNC_tZ_Multi.cxx:240
 AtlSgTopFCNC_tZ_Multi.cxx:241
 AtlSgTopFCNC_tZ_Multi.cxx:242
 AtlSgTopFCNC_tZ_Multi.cxx:243
 AtlSgTopFCNC_tZ_Multi.cxx:244
 AtlSgTopFCNC_tZ_Multi.cxx:245
 AtlSgTopFCNC_tZ_Multi.cxx:246
 AtlSgTopFCNC_tZ_Multi.cxx:247
 AtlSgTopFCNC_tZ_Multi.cxx:248
 AtlSgTopFCNC_tZ_Multi.cxx:249
 AtlSgTopFCNC_tZ_Multi.cxx:250
 AtlSgTopFCNC_tZ_Multi.cxx:251
 AtlSgTopFCNC_tZ_Multi.cxx:252
 AtlSgTopFCNC_tZ_Multi.cxx:253
 AtlSgTopFCNC_tZ_Multi.cxx:254
 AtlSgTopFCNC_tZ_Multi.cxx:255
 AtlSgTopFCNC_tZ_Multi.cxx:256
 AtlSgTopFCNC_tZ_Multi.cxx:257
 AtlSgTopFCNC_tZ_Multi.cxx:258
 AtlSgTopFCNC_tZ_Multi.cxx:259
 AtlSgTopFCNC_tZ_Multi.cxx:260
 AtlSgTopFCNC_tZ_Multi.cxx:261
 AtlSgTopFCNC_tZ_Multi.cxx:262
 AtlSgTopFCNC_tZ_Multi.cxx:263
 AtlSgTopFCNC_tZ_Multi.cxx:264
 AtlSgTopFCNC_tZ_Multi.cxx:265
 AtlSgTopFCNC_tZ_Multi.cxx:266
 AtlSgTopFCNC_tZ_Multi.cxx:267
 AtlSgTopFCNC_tZ_Multi.cxx:268
 AtlSgTopFCNC_tZ_Multi.cxx:269
 AtlSgTopFCNC_tZ_Multi.cxx:270
 AtlSgTopFCNC_tZ_Multi.cxx:271
 AtlSgTopFCNC_tZ_Multi.cxx:272
 AtlSgTopFCNC_tZ_Multi.cxx:273
 AtlSgTopFCNC_tZ_Multi.cxx:274
 AtlSgTopFCNC_tZ_Multi.cxx:275
 AtlSgTopFCNC_tZ_Multi.cxx:276
 AtlSgTopFCNC_tZ_Multi.cxx:277
 AtlSgTopFCNC_tZ_Multi.cxx:278
 AtlSgTopFCNC_tZ_Multi.cxx:279
 AtlSgTopFCNC_tZ_Multi.cxx:280
 AtlSgTopFCNC_tZ_Multi.cxx:281
 AtlSgTopFCNC_tZ_Multi.cxx:282
 AtlSgTopFCNC_tZ_Multi.cxx:283
 AtlSgTopFCNC_tZ_Multi.cxx:284
 AtlSgTopFCNC_tZ_Multi.cxx:285
 AtlSgTopFCNC_tZ_Multi.cxx:286
 AtlSgTopFCNC_tZ_Multi.cxx:287
 AtlSgTopFCNC_tZ_Multi.cxx:288
 AtlSgTopFCNC_tZ_Multi.cxx:289
 AtlSgTopFCNC_tZ_Multi.cxx:290
 AtlSgTopFCNC_tZ_Multi.cxx:291
 AtlSgTopFCNC_tZ_Multi.cxx:292
 AtlSgTopFCNC_tZ_Multi.cxx:293
 AtlSgTopFCNC_tZ_Multi.cxx:294
 AtlSgTopFCNC_tZ_Multi.cxx:295
 AtlSgTopFCNC_tZ_Multi.cxx:296
 AtlSgTopFCNC_tZ_Multi.cxx:297
 AtlSgTopFCNC_tZ_Multi.cxx:298
 AtlSgTopFCNC_tZ_Multi.cxx:299
 AtlSgTopFCNC_tZ_Multi.cxx:300
 AtlSgTopFCNC_tZ_Multi.cxx:301