//____________________________________________________________________
//
// Atlas detector level jet
//
// One get the truth flavour (Ligth, Charm, Beauty or Tau) of the jet by
// GetTruthFlavour(), wich is filled by Athena. If it's not filled, one
// can get the flavour from fTruthParticles, wich is a reference to HepMCTruth
// particles in jet cone, sorted by Pt in descending order by Athena. The
// first particle in the list, should be the leading particle of the jet.
//
// NOTE:
// The refined quality definitions are tested only for jets of type
// AntiKt4Topo or AntiKt6Topo and ARE NOT SET for the "Tower" and "Cone" jets!
// 
// 
// Author: Oliver Maria Kind <mailto: kind@mail.desy.de>
// Update: $Id: AtlJet.cxx,v 1.52 2014/04/29 16:34:28 schris Exp $
// Copyright: 2009 (C) Oliver Maria Kind
//
#ifndef ATLAS_AtlJet
#include <AtlJet.h>
#endif
#ifndef HEP_Jet
#include <HepJet.h>
#endif
#ifndef HEP_Particle
#include <HepParticle.h>
#endif
#include <iostream>

using namespace std;

static const char* fgTypeNames[AtlJet::kNumTypes+1] = {
    "InvalidJet",
    "Cone4H1Tower", "Cone7H1Tower", "Cone4H1Topo", "Cone7H1Topo", 
    "MCCone4Hadron", "MCCone7Hadron", 
    "MCAntiKt4Hadron", "MCAntiKt6Hadron", "MCAntiKt4HadronPileup",
    "AntiKt4H1Topo", "AntiKt4H1Tower", "AntiKt6H1Tower",
    "AntiKt4TopoEM", "AntiKt4TopoEMJES", "AntiKt4LCTopo",
    "AntiKt4Tower",  "AntiKt6TopoEM", "AntiKt4Topo", "AntiKt6Tower",
    "AntiKt6LCTopo","AntiKt6Topo",
    "AtlFast"
};

static const char* fgFlavourNames[AtlJet::kNumFlavours] = {
    "Unknown", "Light", "Charm", "Beauty", "Tau"
};


#ifndef __CINT__
ClassImp(AtlJet);
#endif

//____________________________________________________________________

AtlJet::AtlJet() {
    //
    // Default constructor
    //
    fFakeCandidate = new TRef;
    fTruthParticles = new TRefArray;
    fTracks = new TRefArray;
    fK0sCanditates = new TRefArray;
}

//____________________________________________________________________

AtlJet::AtlJet(Int_t Id, Float_t E, Float_t Px, Float_t Py, Float_t Pz,
	       EJetQuality jetquality,
	       TLorentzVector P_EMSCALE, TLorentzVector P_JESCorrSCALE,
	       Double_t EMJES_EtaCorr, 
	       Double_t BCH_CORR_CELL, Double_t BCH_CORR_JET,
	       Float_t eta_offsetJES):
    HepJet(Id, E, Px, Py, Pz), fJetQuality(jetquality),
    fP_EMSCALE(P_EMSCALE), fP_JESCorrSCALE(P_JESCorrSCALE), 
    fEMJES_EtaCorr(EMJES_EtaCorr),
    fBCH_CORR_CELL(BCH_CORR_CELL), fBCH_CORR_JET(BCH_CORR_JET),
    fEta_offsetJES(eta_offsetJES) {
    //
    // Normal constructor
    //
    fFakeCandidate = new TRef;
    fTruthParticles = new TRefArray;
    fTracks = new TRefArray;
    fK0sCanditates = new TRefArray;
    fTruthFlavour = kUnknownFlavour;
    
    // Refined jet quality variables
    fLArQuality      = 0;          
    fHecQuality      = 0;          
    fNegEnergy       = 0;           
    fN90             = 0;                 
    fEMFraction      = 0;          
    fHecF            = 0;                
    fTiming          = 0;              
    fSamplingMax     = 0;         
    fFracSamplingMax = 0;     
    fSumPtTrk        = 0;    

    // Truth DeltaRmin
    fTruthDeltaRminBeauty = 10.e10;
    fTruthDeltaRminCharm  = 10.e10;
    fTruthDeltaRminTau    = 10.e10;
}

//____________________________________________________________________

AtlJet::~AtlJet() {
  //
  // Default destructor
  //
  delete fFakeCandidate;  fFakeCandidate = 0;
  delete fTruthParticles; fTruthParticles = 0;
  delete fTracks;         fTracks = 0;
  delete fK0sCanditates;  fK0sCanditates = 0;
  
}

//____________________________________________________________________

void AtlJet::Clear(Option_t *option) {
    //
    // Clear this object
    //
    HepJet::Clear(option);
    AtlTriggerMatch::Clear(option);
    AtlMETWeights::Clear(option);

    fTruthFlavour = kUnknownFlavour;
    for ( Int_t i = 0; i < AtlBTag::kNumTaggers; i++) {
	fTaggers[i].Clear(option);
    }
    delete fFakeCandidate; fFakeCandidate = 0;
    delete fTruthParticles; fTruthParticles = 0;
    delete fTracks; fTracks = 0;
    delete fK0sCanditates; fK0sCanditates = 0;
    
    fJetQuality = kInvalid;
    
    fLArQuality      = 0;          
    fHecQuality      = 0;          
    fNegEnergy       = 0;           
    fN90             = 0;                 
    fEMFraction      = 0;          
    fHecF            = 0;                
    fTiming          = 0;              
    fSamplingMax     = 0;         
    fFracSamplingMax = 0;     
    fSumPtTrk        = 0;            
    fEMJES_EtaCorr   = 0;

    fTruthDeltaRminBeauty = 10.e10;
    fTruthDeltaRminCharm  = 10.e10;
    fTruthDeltaRminTau    = 10.e10;
}

//____________________________________________________________________

const AtlBTag* AtlJet::GetTag(AtlBTag::ETagger tagger) {
    //
    // Return B-tag object
    //
    return &fTaggers[tagger];
}

//____________________________________________________________________

AtlBTag* AtlJet::AddTag(AtlBTag::ETagger tagger, Double_t weight,
			Bool_t IsValid) {
    //
    // Add B-tag object
    //
    fTaggers[tagger] = AtlBTag(tagger, weight, IsValid);
    return &fTaggers[tagger];
}

//____________________________________________________________________

const char* AtlJet::NameOfType(EType type) {
    //
    // Return name of given jet type
    //
    if (type > kInvalidType && type < kNumTypes)
        return fgTypeNames[type + 1];

    return fgTypeNames[kInvalidType + 1];
}

//____________________________________________________________________

Float_t AtlJet::EMScaleDeltaR(AtlElectron *el, const char* option) {
    //
    // Compute distance in eta-phi plane between this jet and the given
    // electron.
    // Optionally, using the detector position of the jet
    // (eta_EMScale+EMJES_EtaCorr and phi_EMSCALE) and/or the
    // track information of the electron.
    //
    //  "trk"    - Use track information of electron for comparison
    //  "em"     - Use EMSCALE jet position
    //
    TString opt(option);
    opt.ToLower();

    Float_t jet_eta = Eta();
    Float_t el_eta  = el->Eta();
    
    Float_t jet_eta_em = EMScaleEta()+EMJES_EtaCorr();
    Float_t el_eta_trk = el->GetIDTrack()->Eta();

    Float_t dEta = 0;
    Float_t dPhi = 0;
    
    if ( opt.Contains("trk") && opt.Contains("em") ) {
	dEta = jet_eta_em - el_eta_trk;
	dPhi = ( P_EMSCALE().Vect() ).DeltaPhi( el->GetIDTrack()->P() );
    } else if ( opt.Contains("trk") ) {
	dEta = jet_eta    - el_eta_trk;
	dPhi = ( P().Vect() ).DeltaPhi( el->GetIDTrack()->P() );
    } else if ( opt.Contains("em") ) {
	dEta = jet_eta_em - el_eta;
	dPhi = ( P_EMSCALE().Vect() ).DeltaPhi( el->P3() ); 
    } else {
	dEta = jet_eta    - el_eta;
	dPhi = ( P().Vect() ).DeltaPhi( el->P3() );
    }

    return TMath::Sqrt(dEta*dEta + dPhi*dPhi);
}

//____________________________________________________________________

Float_t AtlJet::EMScaleDeltaR(AtlMuon *mu, const char* option) {
    //
    // Compute distance in eta-phi plane between this jet and the given
    // muon using the detector position of the jet
    // (eta_EMScale+EMJES_EtaCorr and phi_EMSCALE) and optionally the
    // track information of the muon
    //
    //  "trk"    - Use track information of muon for comparison
    //
    TString opt(option);
    opt.ToLower();

    Float_t dEta = 0;
    Float_t dPhi = 0;
 
    if ( opt.Contains("trk") ) {
	dEta = EMScaleEta()+EMJES_EtaCorr() - mu->GetIDTrack()->Eta();
	dPhi = ( P_EMSCALE().Vect() ).DeltaPhi( mu->GetIDTrack()->P() );
    } else {
	dEta = EMScaleEta()+EMJES_EtaCorr() - mu->Eta();
	dPhi = P_EMSCALE().DeltaPhi( mu->P() );
    }

    return TMath::Sqrt(dEta*dEta + dPhi*dPhi);
}

//____________________________________________________________________

void AtlJet::SetQualityVars(Double_t LArQuality,
			    Double_t HecQuality,
			    Double_t NegEnergy,
			    Double_t N90,
			    Double_t EMFraction,
			    Double_t HecF,
			    Double_t Timing,
			    Int_t    SamplingMax,
			    Double_t FracSamplingMax,
			    Double_t SumPtTrk) {
    //
    // Set the jet quality variables
    //
    fLArQuality      = LArQuality;          
    fHecQuality      = HecQuality;          
    fNegEnergy       = NegEnergy;           
    fN90             = N90;            
    fEMFraction      = EMFraction;          
    fHecF            = HecF;                
    fTiming          = Timing;              
    fSamplingMax     = SamplingMax;    
    fFracSamplingMax = FracSamplingMax;     
    fSumPtTrk        = SumPtTrk;

    SetRefinedQualityFlag();
}

//____________________________________________________________________

void AtlJet::SetRefinedQualityFlag() {
    //
    // Computes and sets the refined jet quality flag
    //

    //
    // Compute the criteria
    //
    Bool_t IsLooseBad  = kFALSE;
    Bool_t IsMediumBad = kFALSE;
    Bool_t IsTightBad  = kFALSE;
    Double_t chargeFrac = fSumPtTrk / JES_Pt();

    // Non-collision background & cosmics
    if ( ( TMath::Abs(fTiming) > 25 )
	 || ( fEMFraction < 0.05
	      && chargeFrac < 0.05
	      && TMath::Abs(EMScaleEta()) < 2 )
	 || ( fEMFraction < 0.05
	      && TMath::Abs(EMScaleEta()) >= 2 )
	 || ( fFracSamplingMax > 0.99
	      && TMath::Abs(EMScaleEta()) < 2 )
	) {
	IsLooseBad  = kTRUE;
	IsMediumBad = kTRUE;
	IsTightBad  = kTRUE;
    }

    if ( ( TMath::Abs(fTiming) > 10 )
	 || ( fEMFraction < 0.05
	      && chargeFrac < 0.1
	      && TMath::Abs(EMScaleEta()) < 2 )
	 || ( fEMFraction > 0.95
	      && chargeFrac < 0.05
	      && TMath::Abs(EMScaleEta()) < 2 )
	) {
	IsMediumBad = kTRUE;
	IsTightBad  = kTRUE;
    }

    if ( ( fEMFraction < 0.1
	   && chargeFrac < 0.2
	   && TMath::Abs(EMScaleEta()) < 2 )
	 || ( fEMFraction < 0.1
	      && TMath::Abs(EMScaleEta()) >= 2 )
	 || ( fEMFraction > 0.9
	      && chargeFrac < 0.02
	      && TMath::Abs(EMScaleEta()) < 2 )
	) {
	IsTightBad  = kTRUE;
    }

    // HEC spikes
    if ( ( TMath::Abs(fNegEnergy) > 60 )
	 || ( fHecF > 0.5
	      && TMath::Abs(fHecQuality) > 0.5 )
	) {
	IsLooseBad  = kTRUE;
	IsMediumBad = kTRUE;
	IsTightBad  = kTRUE;
    }

    if ( fHecF > ( 1 - TMath::Abs(fHecQuality) ) ) {
	IsMediumBad = kTRUE;
	IsTightBad  = kTRUE;
    }

    // EM coherent noise
    if ( ( fEMFraction > 0.95 )
	 && ( TMath::Abs(fLArQuality) > 0.8 )
	 && ( TMath::Abs(EMScaleEta()) < 2.8 )
	) {
	IsLooseBad  = kTRUE;
	IsMediumBad = kTRUE;
	IsTightBad  = kTRUE;
    }   
    
    if ( ( fEMFraction > 0.9 )
	 && ( TMath::Abs(fLArQuality) > 0.8 )
	 && ( TMath::Abs(EMScaleEta()) < 2.8 )
	) {
	IsMediumBad = kTRUE;
	IsTightBad  = kTRUE;
    }

    if ( ( TMath::Abs(fLArQuality) > 0.95 )
	 || ( fEMFraction > 0.98
	      && TMath::Abs(fLArQuality) > 0.05 )
	) {
	IsTightBad  = kTRUE;
    }

    //
    // Set the refined flag criteria
    //
    if ( IsLooseBad )
	fJetQuality = AtlJet::EJetQuality(fJetQuality | AtlJet::kIsLooseBad);
    if ( IsMediumBad )
	fJetQuality = AtlJet::EJetQuality(fJetQuality | AtlJet::kIsMediumBad);
    if ( IsTightBad )
	fJetQuality = AtlJet::EJetQuality(fJetQuality | AtlJet::kIsTightBad);
}

//____________________________________________________________________

void AtlJet::Print(Option_t *option) {
    //
    // Print jet information
    //
    //   "nohead" - No header containing the variable names is
    //              displayed. Useful when printing a whole table
    //              for a list of jets
    //   "btag"   - Print b-tagger results for this jet
    //   "prt"    - Print list of associated MC truth particles
    //   "trk"    - Print list of tracks inside the jet
    //   "emscale"- Print kinematic variables at EMScale
    //
    TString opt = option;
    opt.ToLower();

    // =======
    // General
    // =======

    // Print header
    if ( !opt.Contains("nohead") ) PrintHeader();
    
    // Print
    cout.setf(ios::showpoint | ios::fixed, ios::floatfield);
    cout.precision(3);
    cout.width(4);  cout << fId;
    if ( opt.Contains("emscale") ) {
	cout.width(12); cout << EMScaleEt();
	cout.width(12); cout << EMScaleM();
	cout.width(12); cout << EMScaleTheta()*180/TMath::Pi();
	cout.width(12); cout << EMScalePhi()*180/TMath::Pi();
	cout.width(12); cout << EMScaleEta();
    } else {
	cout.width(12); cout << Et();
	cout.width(12); cout << M();
	cout.width(12); cout << Theta()*180/TMath::Pi();
	cout.width(12); cout << Phi()*180/TMath::Pi();
	cout.width(12); cout << Eta();
    }
    HepParticle *fake = GetFakeCandidate();
    if ( fake == 0 )  {
	cout << "          --    ";
    } else {
	cout.width(10); cout << fake->GetPdgName()
			     << ",Id=" << fake->GetId();
    }
    cout.width(11); cout << fgFlavourNames[fTruthFlavour];
    cout.width(3);
    if ( IsUglyJet() ) {
	cout << "u";
    } else {
	cout << "-";
    }
    if ( IsBadJet() ) {
	cout << "b";
    } else {
	cout << "-";
    }
    if ( IsGoodJet() ) {
	cout << "g";
    } else {
	cout << "-";
    }
    if ( IsLooseBadJet() ) {
	cout << "l";
    } else {
	cout << "-";
    }
    if ( IsMediumBadJet() ) {
	cout << "m";
    } else {
	cout << "-";
    }
    if ( IsTightBadJet() ) {
	cout << "t";
    } else {
	cout << "-";
    }
    cout << "    ";
    cout << endl;

    // Print footer
    if ( !opt.Contains("nohead") ) PrintFooter();

    // ==========================
    // Print B-tagger information
    // ==========================
    if ( opt.Contains("btag") ) {

        // Print header
        cout << endl;
        AtlBTag::PrintHeader();

        // Loop over all taggers and call their Print() function
        for ( Int_t i = 0; i < AtlBTag::kNumTaggers; i++ ) {
	    GetTag((AtlBTag::ETagger)i)->Print("nohead");
	}
	
        // Print footer
        AtlBTag::PrintFooter();
    }

    // ================================
    // Print list of MC truth particles
    // ================================
    if ( opt.Contains("prt") ) {

	// Print header
	cout << endl;
	HepMCParticle::PrintHeader();

	// Print list
	TIter next_prt(fTruthParticles);
	HepMCParticle *prt = 0;
	while ( (prt = (HepMCParticle*)next_prt()) ) {
	    prt->Print("nohead");
	}

	// Print footer
	HepMCParticle::PrintFooter();
    }

    // ====================
    // Print list of tracks
    // ====================
    if ( opt.Contains("trk") ) {

	// Print header
	cout << endl;
	AtlIDTrack::PrintHeader();

	// Print list
	TIter next_trk(fTracks);
	AtlIDTrack *trk = 0;
	while ( (trk = (AtlIDTrack*)next_trk()) ) {
	    trk->Print("nohead");
	}

	// Print footer
 	AtlIDTrack::PrintFooter();
    }
}

//____________________________________________________________________

void AtlJet::PrintHeader() {
    //
    // Print information header
    //
    cout
	<< "---------------------------------------------------------------------------------------------------------"
	<< endl
	<< " Id         Et          M         Theta         Phi         Eta        FakedBy      MC Flav   Quality   "
	<< endl
	<< "---------------------------------------------------------------------------------------------------------"
	<< endl;
}

//____________________________________________________________________

void AtlJet::PrintFooter() {
    //
    // Print footer
    //
    cout
	<< "---------------------------------------------------------------------------------------------------------"
	<< endl;
}

//____________________________________________________________________

AtlJet::EFlavour AtlJet::GetTruthFlavourByDeltaRmin(Float_t DeltaRmax) const {
    //
    // Return truth flavour by DeltaR information of next hadrons/taus
    // within a search cone of DeltaRmax. The flavour of the next
    // hadron/tau will be returned.
    //
    // NOTE: This method requires the data members fTruthDeltaRminBeauty,
    // fTruthDelatRminCharm and fTruthDeltaRminTau to be filled.
    //
    if ( fTruthDeltaRminBeauty <= DeltaRmax &&
	 fTruthDeltaRminBeauty < fTruthDeltaRminCharm &&
	 fTruthDeltaRminBeauty < fTruthDeltaRminTau ) return kBeauty;
    if ( fTruthDeltaRminCharm <= DeltaRmax &&
	 fTruthDeltaRminCharm < fTruthDeltaRminTau ) return kCharm;
    if ( fTruthDeltaRminTau <= DeltaRmax ) return kTau;
    return kLightFlavoured;
}


//____________________________________________________________________

void AtlJet::AddTrack(AtlIDTrack *trk, Float_t deltaR_max) {
//
//   Add track to jet if deltaR < deltaR_max 
//   
 
    Double_t dEta = Eta() - trk->Eta();
    Double_t dPhi = TVector2::Phi_mpi_pi(Phi() - trk->Phi());
    
    if(  sqrt( dEta*dEta+dPhi*dPhi ) < deltaR_max){
      this->AddTrack(trk);//this entspricht dann jet, da dieses Objekt die AddTrack Funktion aufruft
    }

  
}
 AtlJet.cxx:1
 AtlJet.cxx:2
 AtlJet.cxx:3
 AtlJet.cxx:4
 AtlJet.cxx:5
 AtlJet.cxx:6
 AtlJet.cxx:7
 AtlJet.cxx:8
 AtlJet.cxx:9
 AtlJet.cxx:10
 AtlJet.cxx:11
 AtlJet.cxx:12
 AtlJet.cxx:13
 AtlJet.cxx:14
 AtlJet.cxx:15
 AtlJet.cxx:16
 AtlJet.cxx:17
 AtlJet.cxx:18
 AtlJet.cxx:19
 AtlJet.cxx:20
 AtlJet.cxx:21
 AtlJet.cxx:22
 AtlJet.cxx:23
 AtlJet.cxx:24
 AtlJet.cxx:25
 AtlJet.cxx:26
 AtlJet.cxx:27
 AtlJet.cxx:28
 AtlJet.cxx:29
 AtlJet.cxx:30
 AtlJet.cxx:31
 AtlJet.cxx:32
 AtlJet.cxx:33
 AtlJet.cxx:34
 AtlJet.cxx:35
 AtlJet.cxx:36
 AtlJet.cxx:37
 AtlJet.cxx:38
 AtlJet.cxx:39
 AtlJet.cxx:40
 AtlJet.cxx:41
 AtlJet.cxx:42
 AtlJet.cxx:43
 AtlJet.cxx:44
 AtlJet.cxx:45
 AtlJet.cxx:46
 AtlJet.cxx:47
 AtlJet.cxx:48
 AtlJet.cxx:49
 AtlJet.cxx:50
 AtlJet.cxx:51
 AtlJet.cxx:52
 AtlJet.cxx:53
 AtlJet.cxx:54
 AtlJet.cxx:55
 AtlJet.cxx:56
 AtlJet.cxx:57
 AtlJet.cxx:58
 AtlJet.cxx:59
 AtlJet.cxx:60
 AtlJet.cxx:61
 AtlJet.cxx:62
 AtlJet.cxx:63
 AtlJet.cxx:64
 AtlJet.cxx:65
 AtlJet.cxx:66
 AtlJet.cxx:67
 AtlJet.cxx:68
 AtlJet.cxx:69
 AtlJet.cxx:70
 AtlJet.cxx:71
 AtlJet.cxx:72
 AtlJet.cxx:73
 AtlJet.cxx:74
 AtlJet.cxx:75
 AtlJet.cxx:76
 AtlJet.cxx:77
 AtlJet.cxx:78
 AtlJet.cxx:79
 AtlJet.cxx:80
 AtlJet.cxx:81
 AtlJet.cxx:82
 AtlJet.cxx:83
 AtlJet.cxx:84
 AtlJet.cxx:85
 AtlJet.cxx:86
 AtlJet.cxx:87
 AtlJet.cxx:88
 AtlJet.cxx:89
 AtlJet.cxx:90
 AtlJet.cxx:91
 AtlJet.cxx:92
 AtlJet.cxx:93
 AtlJet.cxx:94
 AtlJet.cxx:95
 AtlJet.cxx:96
 AtlJet.cxx:97
 AtlJet.cxx:98
 AtlJet.cxx:99
 AtlJet.cxx:100
 AtlJet.cxx:101
 AtlJet.cxx:102
 AtlJet.cxx:103
 AtlJet.cxx:104
 AtlJet.cxx:105
 AtlJet.cxx:106
 AtlJet.cxx:107
 AtlJet.cxx:108
 AtlJet.cxx:109
 AtlJet.cxx:110
 AtlJet.cxx:111
 AtlJet.cxx:112
 AtlJet.cxx:113
 AtlJet.cxx:114
 AtlJet.cxx:115
 AtlJet.cxx:116
 AtlJet.cxx:117
 AtlJet.cxx:118
 AtlJet.cxx:119
 AtlJet.cxx:120
 AtlJet.cxx:121
 AtlJet.cxx:122
 AtlJet.cxx:123
 AtlJet.cxx:124
 AtlJet.cxx:125
 AtlJet.cxx:126
 AtlJet.cxx:127
 AtlJet.cxx:128
 AtlJet.cxx:129
 AtlJet.cxx:130
 AtlJet.cxx:131
 AtlJet.cxx:132
 AtlJet.cxx:133
 AtlJet.cxx:134
 AtlJet.cxx:135
 AtlJet.cxx:136
 AtlJet.cxx:137
 AtlJet.cxx:138
 AtlJet.cxx:139
 AtlJet.cxx:140
 AtlJet.cxx:141
 AtlJet.cxx:142
 AtlJet.cxx:143
 AtlJet.cxx:144
 AtlJet.cxx:145
 AtlJet.cxx:146
 AtlJet.cxx:147
 AtlJet.cxx:148
 AtlJet.cxx:149
 AtlJet.cxx:150
 AtlJet.cxx:151
 AtlJet.cxx:152
 AtlJet.cxx:153
 AtlJet.cxx:154
 AtlJet.cxx:155
 AtlJet.cxx:156
 AtlJet.cxx:157
 AtlJet.cxx:158
 AtlJet.cxx:159
 AtlJet.cxx:160
 AtlJet.cxx:161
 AtlJet.cxx:162
 AtlJet.cxx:163
 AtlJet.cxx:164
 AtlJet.cxx:165
 AtlJet.cxx:166
 AtlJet.cxx:167
 AtlJet.cxx:168
 AtlJet.cxx:169
 AtlJet.cxx:170
 AtlJet.cxx:171
 AtlJet.cxx:172
 AtlJet.cxx:173
 AtlJet.cxx:174
 AtlJet.cxx:175
 AtlJet.cxx:176
 AtlJet.cxx:177
 AtlJet.cxx:178
 AtlJet.cxx:179
 AtlJet.cxx:180
 AtlJet.cxx:181
 AtlJet.cxx:182
 AtlJet.cxx:183
 AtlJet.cxx:184
 AtlJet.cxx:185
 AtlJet.cxx:186
 AtlJet.cxx:187
 AtlJet.cxx:188
 AtlJet.cxx:189
 AtlJet.cxx:190
 AtlJet.cxx:191
 AtlJet.cxx:192
 AtlJet.cxx:193
 AtlJet.cxx:194
 AtlJet.cxx:195
 AtlJet.cxx:196
 AtlJet.cxx:197
 AtlJet.cxx:198
 AtlJet.cxx:199
 AtlJet.cxx:200
 AtlJet.cxx:201
 AtlJet.cxx:202
 AtlJet.cxx:203
 AtlJet.cxx:204
 AtlJet.cxx:205
 AtlJet.cxx:206
 AtlJet.cxx:207
 AtlJet.cxx:208
 AtlJet.cxx:209
 AtlJet.cxx:210
 AtlJet.cxx:211
 AtlJet.cxx:212
 AtlJet.cxx:213
 AtlJet.cxx:214
 AtlJet.cxx:215
 AtlJet.cxx:216
 AtlJet.cxx:217
 AtlJet.cxx:218
 AtlJet.cxx:219
 AtlJet.cxx:220
 AtlJet.cxx:221
 AtlJet.cxx:222
 AtlJet.cxx:223
 AtlJet.cxx:224
 AtlJet.cxx:225
 AtlJet.cxx:226
 AtlJet.cxx:227
 AtlJet.cxx:228
 AtlJet.cxx:229
 AtlJet.cxx:230
 AtlJet.cxx:231
 AtlJet.cxx:232
 AtlJet.cxx:233
 AtlJet.cxx:234
 AtlJet.cxx:235
 AtlJet.cxx:236
 AtlJet.cxx:237
 AtlJet.cxx:238
 AtlJet.cxx:239
 AtlJet.cxx:240
 AtlJet.cxx:241
 AtlJet.cxx:242
 AtlJet.cxx:243
 AtlJet.cxx:244
 AtlJet.cxx:245
 AtlJet.cxx:246
 AtlJet.cxx:247
 AtlJet.cxx:248
 AtlJet.cxx:249
 AtlJet.cxx:250
 AtlJet.cxx:251
 AtlJet.cxx:252
 AtlJet.cxx:253
 AtlJet.cxx:254
 AtlJet.cxx:255
 AtlJet.cxx:256
 AtlJet.cxx:257
 AtlJet.cxx:258
 AtlJet.cxx:259
 AtlJet.cxx:260
 AtlJet.cxx:261
 AtlJet.cxx:262
 AtlJet.cxx:263
 AtlJet.cxx:264
 AtlJet.cxx:265
 AtlJet.cxx:266
 AtlJet.cxx:267
 AtlJet.cxx:268
 AtlJet.cxx:269
 AtlJet.cxx:270
 AtlJet.cxx:271
 AtlJet.cxx:272
 AtlJet.cxx:273
 AtlJet.cxx:274
 AtlJet.cxx:275
 AtlJet.cxx:276
 AtlJet.cxx:277
 AtlJet.cxx:278
 AtlJet.cxx:279
 AtlJet.cxx:280
 AtlJet.cxx:281
 AtlJet.cxx:282
 AtlJet.cxx:283
 AtlJet.cxx:284
 AtlJet.cxx:285
 AtlJet.cxx:286
 AtlJet.cxx:287
 AtlJet.cxx:288
 AtlJet.cxx:289
 AtlJet.cxx:290
 AtlJet.cxx:291
 AtlJet.cxx:292
 AtlJet.cxx:293
 AtlJet.cxx:294
 AtlJet.cxx:295
 AtlJet.cxx:296
 AtlJet.cxx:297
 AtlJet.cxx:298
 AtlJet.cxx:299
 AtlJet.cxx:300
 AtlJet.cxx:301
 AtlJet.cxx:302
 AtlJet.cxx:303
 AtlJet.cxx:304
 AtlJet.cxx:305
 AtlJet.cxx:306
 AtlJet.cxx:307
 AtlJet.cxx:308
 AtlJet.cxx:309
 AtlJet.cxx:310
 AtlJet.cxx:311
 AtlJet.cxx:312
 AtlJet.cxx:313
 AtlJet.cxx:314
 AtlJet.cxx:315
 AtlJet.cxx:316
 AtlJet.cxx:317
 AtlJet.cxx:318
 AtlJet.cxx:319
 AtlJet.cxx:320
 AtlJet.cxx:321
 AtlJet.cxx:322
 AtlJet.cxx:323
 AtlJet.cxx:324
 AtlJet.cxx:325
 AtlJet.cxx:326
 AtlJet.cxx:327
 AtlJet.cxx:328
 AtlJet.cxx:329
 AtlJet.cxx:330
 AtlJet.cxx:331
 AtlJet.cxx:332
 AtlJet.cxx:333
 AtlJet.cxx:334
 AtlJet.cxx:335
 AtlJet.cxx:336
 AtlJet.cxx:337
 AtlJet.cxx:338
 AtlJet.cxx:339
 AtlJet.cxx:340
 AtlJet.cxx:341
 AtlJet.cxx:342
 AtlJet.cxx:343
 AtlJet.cxx:344
 AtlJet.cxx:345
 AtlJet.cxx:346
 AtlJet.cxx:347
 AtlJet.cxx:348
 AtlJet.cxx:349
 AtlJet.cxx:350
 AtlJet.cxx:351
 AtlJet.cxx:352
 AtlJet.cxx:353
 AtlJet.cxx:354
 AtlJet.cxx:355
 AtlJet.cxx:356
 AtlJet.cxx:357
 AtlJet.cxx:358
 AtlJet.cxx:359
 AtlJet.cxx:360
 AtlJet.cxx:361
 AtlJet.cxx:362
 AtlJet.cxx:363
 AtlJet.cxx:364
 AtlJet.cxx:365
 AtlJet.cxx:366
 AtlJet.cxx:367
 AtlJet.cxx:368
 AtlJet.cxx:369
 AtlJet.cxx:370
 AtlJet.cxx:371
 AtlJet.cxx:372
 AtlJet.cxx:373
 AtlJet.cxx:374
 AtlJet.cxx:375
 AtlJet.cxx:376
 AtlJet.cxx:377
 AtlJet.cxx:378
 AtlJet.cxx:379
 AtlJet.cxx:380
 AtlJet.cxx:381
 AtlJet.cxx:382
 AtlJet.cxx:383
 AtlJet.cxx:384
 AtlJet.cxx:385
 AtlJet.cxx:386
 AtlJet.cxx:387
 AtlJet.cxx:388
 AtlJet.cxx:389
 AtlJet.cxx:390
 AtlJet.cxx:391
 AtlJet.cxx:392
 AtlJet.cxx:393
 AtlJet.cxx:394
 AtlJet.cxx:395
 AtlJet.cxx:396
 AtlJet.cxx:397
 AtlJet.cxx:398
 AtlJet.cxx:399
 AtlJet.cxx:400
 AtlJet.cxx:401
 AtlJet.cxx:402
 AtlJet.cxx:403
 AtlJet.cxx:404
 AtlJet.cxx:405
 AtlJet.cxx:406
 AtlJet.cxx:407
 AtlJet.cxx:408
 AtlJet.cxx:409
 AtlJet.cxx:410
 AtlJet.cxx:411
 AtlJet.cxx:412
 AtlJet.cxx:413
 AtlJet.cxx:414
 AtlJet.cxx:415
 AtlJet.cxx:416
 AtlJet.cxx:417
 AtlJet.cxx:418
 AtlJet.cxx:419
 AtlJet.cxx:420
 AtlJet.cxx:421
 AtlJet.cxx:422
 AtlJet.cxx:423
 AtlJet.cxx:424
 AtlJet.cxx:425
 AtlJet.cxx:426
 AtlJet.cxx:427
 AtlJet.cxx:428
 AtlJet.cxx:429
 AtlJet.cxx:430
 AtlJet.cxx:431
 AtlJet.cxx:432
 AtlJet.cxx:433
 AtlJet.cxx:434
 AtlJet.cxx:435
 AtlJet.cxx:436
 AtlJet.cxx:437
 AtlJet.cxx:438
 AtlJet.cxx:439
 AtlJet.cxx:440
 AtlJet.cxx:441
 AtlJet.cxx:442
 AtlJet.cxx:443
 AtlJet.cxx:444
 AtlJet.cxx:445
 AtlJet.cxx:446
 AtlJet.cxx:447
 AtlJet.cxx:448
 AtlJet.cxx:449
 AtlJet.cxx:450
 AtlJet.cxx:451
 AtlJet.cxx:452
 AtlJet.cxx:453
 AtlJet.cxx:454
 AtlJet.cxx:455
 AtlJet.cxx:456
 AtlJet.cxx:457
 AtlJet.cxx:458
 AtlJet.cxx:459
 AtlJet.cxx:460
 AtlJet.cxx:461
 AtlJet.cxx:462
 AtlJet.cxx:463
 AtlJet.cxx:464
 AtlJet.cxx:465
 AtlJet.cxx:466
 AtlJet.cxx:467
 AtlJet.cxx:468
 AtlJet.cxx:469
 AtlJet.cxx:470
 AtlJet.cxx:471
 AtlJet.cxx:472
 AtlJet.cxx:473
 AtlJet.cxx:474
 AtlJet.cxx:475
 AtlJet.cxx:476
 AtlJet.cxx:477
 AtlJet.cxx:478
 AtlJet.cxx:479
 AtlJet.cxx:480
 AtlJet.cxx:481
 AtlJet.cxx:482
 AtlJet.cxx:483
 AtlJet.cxx:484
 AtlJet.cxx:485
 AtlJet.cxx:486
 AtlJet.cxx:487
 AtlJet.cxx:488
 AtlJet.cxx:489
 AtlJet.cxx:490
 AtlJet.cxx:491
 AtlJet.cxx:492
 AtlJet.cxx:493
 AtlJet.cxx:494
 AtlJet.cxx:495
 AtlJet.cxx:496
 AtlJet.cxx:497
 AtlJet.cxx:498
 AtlJet.cxx:499
 AtlJet.cxx:500
 AtlJet.cxx:501
 AtlJet.cxx:502
 AtlJet.cxx:503
 AtlJet.cxx:504
 AtlJet.cxx:505
 AtlJet.cxx:506
 AtlJet.cxx:507
 AtlJet.cxx:508
 AtlJet.cxx:509
 AtlJet.cxx:510
 AtlJet.cxx:511
 AtlJet.cxx:512
 AtlJet.cxx:513
 AtlJet.cxx:514
 AtlJet.cxx:515
 AtlJet.cxx:516
 AtlJet.cxx:517
 AtlJet.cxx:518
 AtlJet.cxx:519
 AtlJet.cxx:520
 AtlJet.cxx:521
 AtlJet.cxx:522
 AtlJet.cxx:523
 AtlJet.cxx:524
 AtlJet.cxx:525
 AtlJet.cxx:526
 AtlJet.cxx:527
 AtlJet.cxx:528
 AtlJet.cxx:529
 AtlJet.cxx:530
 AtlJet.cxx:531
 AtlJet.cxx:532
 AtlJet.cxx:533
 AtlJet.cxx:534
 AtlJet.cxx:535
 AtlJet.cxx:536
 AtlJet.cxx:537
 AtlJet.cxx:538
 AtlJet.cxx:539
 AtlJet.cxx:540
 AtlJet.cxx:541
 AtlJet.cxx:542
 AtlJet.cxx:543
 AtlJet.cxx:544
 AtlJet.cxx:545
 AtlJet.cxx:546
 AtlJet.cxx:547
 AtlJet.cxx:548
 AtlJet.cxx:549
 AtlJet.cxx:550
 AtlJet.cxx:551
 AtlJet.cxx:552
 AtlJet.cxx:553
 AtlJet.cxx:554
 AtlJet.cxx:555
 AtlJet.cxx:556
 AtlJet.cxx:557
 AtlJet.cxx:558
 AtlJet.cxx:559
 AtlJet.cxx:560
 AtlJet.cxx:561
 AtlJet.cxx:562
 AtlJet.cxx:563
 AtlJet.cxx:564
 AtlJet.cxx:565
 AtlJet.cxx:566
 AtlJet.cxx:567
 AtlJet.cxx:568
 AtlJet.cxx:569
 AtlJet.cxx:570
 AtlJet.cxx:571
 AtlJet.cxx:572
 AtlJet.cxx:573
 AtlJet.cxx:574
 AtlJet.cxx:575
 AtlJet.cxx:576
 AtlJet.cxx:577
 AtlJet.cxx:578
 AtlJet.cxx:579
 AtlJet.cxx:580
 AtlJet.cxx:581
 AtlJet.cxx:582
 AtlJet.cxx:583
 AtlJet.cxx:584
 AtlJet.cxx:585
 AtlJet.cxx:586
 AtlJet.cxx:587
 AtlJet.cxx:588
 AtlJet.cxx:589
 AtlJet.cxx:590
 AtlJet.cxx:591
 AtlJet.cxx:592
 AtlJet.cxx:593
 AtlJet.cxx:594
 AtlJet.cxx:595
 AtlJet.cxx:596
 AtlJet.cxx:597
 AtlJet.cxx:598
 AtlJet.cxx:599
 AtlJet.cxx:600