//____________________________________________________________________
//
// ATLAS trigger configuration database + interface singleton
//
// This class provides an interface to the trigger configuration
// database which is stored inside a Root tree of its own. This tree
// is stored together with its corresponding A++ event tree in one
// .root file.
//
// The trigger configuration tree contains multiple configurations
// valid for certain run ranges. Each configuration consists of two
// run numbers indicating the valid run range of the configuration,
// and three maps (level 1, level 2 and event filter). These maps are
// lists of pair-wise information, the association between a trigger
// item name (note that in this context 'item' means 'chain' as well)
// and its corresponding trigger bit number. The bit numbers are
// needed for accessing the actual trigger information in an A++
// event.
//
//
//    A++ .root file
//   +--------------------------+
//   | +------------------+     |           +-----------------------------+
//   | | TriggerConf Tree |---------------->| Trigger Configuration (RAM) |
//   | +------------------+     |           +-----------------------------+
//   |                          |                          |<------------------ Run Number
//   | +------------------+     |               +----------V----------+
//   | | A++ Event Tree   |-------------------->| Bit No. / Item Name |<------- Trigger Item
//   | +------------------+     |               +--------x------------+
//   +-------------|------------+                     |
//                 |                                  |
//                 |                                  V
//                 |                             +-----------+
//                 +---------------------------->| A++ Event |----------------> Trigger Decision
//                                               +-----------+
//
//
// For fast access, copies of the maps (which are of type TClonesArray
// inside the tree) are being kept in form of hash tables (THashTable)
// in RAM.
//
//
// Usage examples:
// ===============
//
// (1) Create a new configuration dbase:
//
//    AtlTriggerConf *conf = new AtlTriggerConf;
//    TTree *t_conf = conf->CreateTree();
//
// (2) Build a configuration (in memory)
//
//    conf->Clear();
//    conf->AddTriggerItem(); // Item 1
//    conf->AddTriggerItem(); // Item 2
//    ...
//    conf->Rehash();
//
// (3) Write the current configuration (RAM) to the tree
//     for the run range RunStart -> RunEnd
//
//    conf->WriteConfiguration(RunStart, RunEnd);
//
//
//  
// Author: Oliver Maria Kind <mailto: kind@mail.desy.de>
// Update: $Id: AtlTriggerConf.cxx,v 1.16 2011/03/12 17:39:50 kind Exp $
// Copyright: 2008 (C) Oliver Maria Kind
//
#ifndef ATLAS_AtlTriggerConf
#include <AtlTriggerConf.h>
#endif
#include <THashTable.h>
#include <TDirectory.h>
#include <TClonesArray.h>
#include <iostream>

using namespace std;

#ifndef __CINT__
ClassImp(AtlTriggerConf);
#endif

AtlTriggerConf *AtlTriggerConf::fgInstance = 0;
const Int_t AtlTriggerConf::fgL1MaxBits  = 256;
const Int_t AtlTriggerConf::fgHLTMaxBits = 512;
const char* AtlTriggerConf::fgTreeName  = "t_trig_config";
const char* AtlTriggerConf::fgTreeTitle = "Trigger Configuration Dbase";

//____________________________________________________________________

AtlTriggerConf::AtlTriggerConf() {
    //
    // Default constructor
    //

    // Protect against multiple instances
    if ( fgInstance != 0 ) {
	Error("AtlTriggerConf", "Multiple instances of this object not allowed. Use AtlTriggerConf::Instance() instead!");
	gSystem->Abort(0);
    }
    fgInstance = this;
    
    // Defaults
    fL1TriggerItemsCA  = new TClonesArray("AtlTriggerConfItem", fgL1MaxBits);
    fHLTTriggerItemsCA = new TClonesArray("AtlTriggerConfItem", fgHLTMaxBits);
    fL1TriggerItemsHT  = new THashTable(fgL1MaxBits);
    fHLTTriggerItemsHT = new THashTable(fgHLTMaxBits);
    fRunStart = 0;
    fRunEnd   = 0;
    fConfigTree = 0;
    fN_L1TriggerItems  = 0;
    fN_HLTTriggerItems = 0;
}

//____________________________________________________________________

AtlTriggerConf::~AtlTriggerConf() {
    //
    // Default destructor
    //
    if ( fL1TriggerItemsCA != 0 ) {
	fL1TriggerItemsCA->Delete();
	delete fL1TriggerItemsCA;
    }
    if ( fHLTTriggerItemsCA != 0 ) {
	fHLTTriggerItemsCA->Delete();
	delete fHLTTriggerItemsCA;
    }
    if ( fL1TriggerItemsHT != 0 ) {
	fL1TriggerItemsHT->Delete();
	delete fL1TriggerItemsHT;
    }
    if ( fHLTTriggerItemsHT != 0 ) {
	fHLTTriggerItemsHT->Delete();
	delete fHLTTriggerItemsHT;
    }
    if ( fConfigTree != 0 ) delete fConfigTree;
    
    fgInstance = 0;
}

//____________________________________________________________________

AtlTriggerConf* AtlTriggerConf::Instance() {
    //
    // Create trigger db singleton
    //
    return ( fgInstance != 0 ) ? fgInstance : new AtlTriggerConf();
}

//____________________________________________________________________

void AtlTriggerConf::Clear(Option_t *option) {
    //
    // Clear the current configuration
    //
    // Clear the clone arrays and the hash tables and remove their
    // contents.
    //
    fL1TriggerItemsHT->Clear();
    fHLTTriggerItemsHT->Clear();
    fL1TriggerItemsCA->Clear("C");
    fHLTTriggerItemsCA->Clear("C");
    fN_L1TriggerItems = 0;
    fN_HLTTriggerItems = 0;
}
    
//____________________________________________________________________

AtlTriggerConf* AtlTriggerConf::LoadTree(TDirectory *dir) {
    //
    // Load configuration tree from given directory
    //
    fConfigTree = (TTree*)dir->Get(fgTreeName);
    if ( fConfigTree == 0 ) {
	Error("LoadTree",
	      "Trigger configuration tree \"%s\" not found in directory \"%s\".",
	      fgTreeName, dir->GetName());
	return 0;
    }
    
    // Set branches
    fConfigTree->SetBranchAddress("L1TriggerItems",    &fL1TriggerItemsCA);
    fConfigTree->SetBranchAddress("HLTTriggerItems",   &fHLTTriggerItemsCA);
    fConfigTree->SetBranchAddress("N_L1TriggerItems",  &fN_L1TriggerItems);
    fConfigTree->SetBranchAddress("N_HLTTriggerItems", &fN_HLTTriggerItems);
    fConfigTree->SetBranchAddress("RunRangeStart",     &fRunStart);
    fConfigTree->SetBranchAddress("RunRangeEnd",       &fRunEnd);

    // Initialize
    fRunStart = 0; fRunEnd = 0;
    
    // Print info
    Info("LoadTree",
	 "Trigger configuration tree \"%s\" successfully loaded from directory \"%s\".",
	 fgTreeName, dir->GetName());
    fgInstance->Print("LIST");

    // Load first entry
    fConfigTree->GetEntry(0);
    ReadConfiguration(fRunStart);
    
    return fgInstance;
}

//____________________________________________________________________

TTree* AtlTriggerConf::CreateTree() {
    //
    // Create the configuration tree and its branches
    // 
    fConfigTree = new TTree(fgTreeName, fgTreeTitle);

    // Create branches
    fConfigTree->Branch("L1TriggerItems",  "TClonesArray", &fL1TriggerItemsCA);
    fConfigTree->Branch("HLTTriggerItems", "TClonesArray", &fHLTTriggerItemsCA);
    fConfigTree->Branch("N_L1TriggerItems",  &fN_L1TriggerItems, "N_L1TriggerItems/I");
    fConfigTree->Branch("N_HLTTriggerItems", &fN_HLTTriggerItems, "N_HLTTriggerItems/I");
    fConfigTree->Branch("RunRangeStart", &fRunStart, "RunRangeStart/I");
    fConfigTree->Branch("RunRangeEnd",   &fRunEnd,  "RunRangeEnd/I");
    
    return fConfigTree;
}

//____________________________________________________________________

AtlTriggerConfItem* AtlTriggerConf::GetTriggerItem(ETrigger trigger,
						   const char* name,
						   Int_t RunNr) {
    //
    // Find trigger item by name for given run nmber
    //
    // Check if current configuration is still valid
    // Load new configuration otherwise.
    //
    if ( RunNr < fRunStart || RunNr > fRunEnd )
	ReadConfiguration(RunNr);
    return GetTriggerItem(trigger, name);
}
    
//____________________________________________________________________
    
AtlTriggerConfItem* AtlTriggerConf::GetTriggerItem(ETrigger trigger,
						   const char* name,
						   Bool_t CheckValidity) {
    //
    // Find trigger item by name using the currently loaded
    // configuration.
    //
    // If CheckValidity == true the program is aborted in case the
    // item is not found (default is false).
    //
    AtlTriggerConfItem *item = (AtlTriggerConfItem*)GetTriggerItemsHT(trigger)
	->FindObject(name);
    if ( CheckValidity && item == 0 ) {
	if ( trigger == kL1 ) {
	    Error("GetTriggerItem", "Trigger item %s not found in L1 list", name);
	} else if ( trigger == kHLT ) {
	    Error("GetTriggerItem", "Trigger item %s not found in HLT list", name);
	}
	gSystem->Abort(0);
    }
    return item;
}

//____________________________________________________________________

AtlTriggerConfItem* AtlTriggerConf::AddTriggerItem(ETrigger trigger,
						   const char* name,
						   const char* title,
						   Int_t bit) {
    //
    // Add item to the clone arrays of the current configuration for
    // the given trigger.
    //
    // Before adding the first item, the Clear() function has to be
    // called in order to clean the arrays and tablles from the
    // previous configuration.
    //
    // Note that the hash tables are NOT updated. This is done with
    // the help Rehash() member function, which needs to be called
    // when all trigger items are added
    //
    TClonesArray &items = *GetTriggerItemsCA(trigger);
    Int_t NItems = GetN_TriggerItems(trigger);
    AtlTriggerConfItem *item = new(items[NItems])
	AtlTriggerConfItem(name, title, bit);
    SetN_TriggerItems(trigger, NItems+1);
    return item;
}

//____________________________________________________________________

void AtlTriggerConf::ReadConfiguration(Int_t RunNr) {
    //
    // Read configuration for the given run number from the tree and
    // update the hash tables. Any previous configuration is removed
    // from memory
    //

    // Clear current configuration
    Clear();
    
    // Config tree already loaded ?
    if ( fConfigTree == 0 ) {
	Error("ReadConfiguration", "No configuration tree loaded. Abort!");
	gSystem->Abort(0);
    }

    // Search the tree for the configuration needed
    for ( Int_t i = 0; i < fConfigTree->GetEntries(); i++ ) {
	fConfigTree->GetEntry(i);
	if ( (RunNr >= fRunStart) && (RunNr <= fRunEnd) ) {
	    
	    // Fill hash tables with the information from the clone arrays.
	    // Re-hashing is done by THashTable::AddAll()
	    fL1TriggerItemsHT->AddAll(fL1TriggerItemsCA);
	    fHLTTriggerItemsHT->AddAll(fHLTTriggerItemsCA);
	    cout << "<AtlTriggerConf::ReadConfiguration> Read trigger config for run range "
		 << fRunStart << " -> " << fRunEnd << " from dbase." << endl;
	    
	    return;
	}
    }

    // No valid configuration found ?
    Error("ReadConfiguration",
	  "Could not find a valid configuration for run %d. Abort!",
	  RunNr);
    gSystem->Abort(0);
}

//____________________________________________________________________

void AtlTriggerConf::WriteConfiguration() {
    //
    // Fill the current configuration of trigger items stored in the
    // clone arrays into the configuration tree for the given run
    // period.
    //
    Info("WriteConfiguration", "Write trigger config to dbase for run range %d -> %d .",
	 fRunStart, fRunEnd);
    fConfigTree->Fill();
}

//____________________________________________________________________

void AtlTriggerConf::Rehash() {
    //
    // Clear hash tables (without deleting its contents) and fill them
    // with the information from the clone arrays.
    //
    fL1TriggerItemsHT->Clear();
    fHLTTriggerItemsHT->Clear();

    // Re-hashing is done by THashTable::AddAll()
    fL1TriggerItemsHT->AddAll(fL1TriggerItemsCA);
    fHLTTriggerItemsHT->AddAll(fHLTTriggerItemsCA);
}

//____________________________________________________________________

void AtlTriggerConf::Print(Option_t *option) {
    //
    // Print current configuration
    //
    // Options available:
    //    "CUR"  - Print current configuration
    //    "LIST" - Print list of all configurations
    //    "ALL"  - Print all (default)
    //
    TString opt = option;
    opt.ToUpper();

    // Print current config
    if ( opt.Contains("ALL") || opt.Contains("CUR") ) {
	cout << endl
	     << "====================================================" << endl
	     << "          Trigger Configuration (current)" << endl
	     << "====================================================" << endl
	     << "Valid run range:   Run " << fRunStart << " -> Run " << fRunEnd
	     << endl
	     << endl
	     << "Level 1 Trigger   (" << fN_L1TriggerItems << " items)" << endl
	     << "-----------------------------------------------------" << endl;
	for ( Int_t i = 0; i < fN_L1TriggerItems; i++ ) 
	    ((AtlTriggerConfItem*)fL1TriggerItemsCA->At(i))->Print();
	cout << "-----------------------------------------------------" << endl
	     << endl
	     << "Higher Level Trigger   (" << fN_HLTTriggerItems << " items)" << endl
	     << "-----------------------------------------------------" << endl;
	for ( Int_t i = 0; i < fN_HLTTriggerItems; i++ ) 
	    ((AtlTriggerConfItem*)fHLTTriggerItemsCA->At(i))->Print();
	cout << "-----------------------------------------------------" << endl
	     << "End of trigger configuration for run range "
	     << fRunStart << " -> " << fRunEnd << endl
	     << endl;
    }

    // Print list
    if ( opt.Contains("ALL") || opt.Contains("LIST") ) {

	// Config tree already loaded ?
	if ( fConfigTree == 0 ) {
	    Error("Print", "No configuration tree loaded. Abort!");
	    gSystem->Abort(0);
	}

	// Loop over all tree entries and write out run range and no. of items
	Int_t RunStart = fRunStart;
	cout << endl
	     << "==============================================" << endl
	     << "        List of Trigger Configurations" << endl
	     << "==============================================" << endl
	     << endl
	     << "   # Run Range            #L1_Items #HLT_Items" << endl
	     << "----------------------------------------------" << endl;
	for ( Int_t i = 0; i < fConfigTree->GetEntries(); i++ ) {
	    fConfigTree->GetEntry(i);
	    cout.width(4); cout << i+1;
	    cout << " ";
	    cout.width(6); cout << fRunStart;
	    cout << " -> ";
	    cout.width(6); cout << fRunEnd;
	    cout << "     ";
	    cout.width(9); cout << fN_L1TriggerItems; cout << " ";
	    cout.width(9); cout << fN_HLTTriggerItems; cout << endl;
	}
	cout << "----------------------------------------------"
	     << endl << endl;

	// Re-load current configuration
	if ( RunStart != 0 ) ReadConfiguration(RunStart);
    }
}

//____________________________________________________________________

TClonesArray* AtlTriggerConf::GetTriggerItemsCA(ETrigger trigger) const {
    //
    // Get trigger items clone array
    //
    switch ( trigger ) {
	case kL1:
	    return fL1TriggerItemsCA;
	case kHLT:
	    return fHLTTriggerItemsCA;
    }
    return 0;
}

//____________________________________________________________________

THashTable* AtlTriggerConf::GetTriggerItemsHT(ETrigger trigger) const {
    //
    // Get trigger items hash table
    //
    switch ( trigger ) {
	case kL1:
	    return fL1TriggerItemsHT;
	case kHLT:
	    return fHLTTriggerItemsHT;
    }
    return 0;
}

//____________________________________________________________________

Int_t AtlTriggerConf::GetN_TriggerItems(ETrigger trigger, Int_t RunNr) {
    //
    // Get no. of trigger items in clones array for given run number
    //

    // Check if current configuration is still valid
    // Load new configuration otherwise
    if ( RunNr < fRunStart || RunNr > fRunEnd )
	ReadConfiguration(RunNr);

    // Return no. of items
    return GetN_TriggerItems(trigger);
}

//____________________________________________________________________

Int_t AtlTriggerConf::GetN_TriggerItems(ETrigger trigger) const {
    //
    // Get no. of trigger items in clones array for given run number
    // for current configuration
    //
    switch ( trigger ) {
	case kL1:
	    return fN_L1TriggerItems;
	case kHLT:
	    return fN_HLTTriggerItems;
    }
    return 0;
}

//____________________________________________________________________

void AtlTriggerConf::SetN_TriggerItems(ETrigger trigger,
				       Int_t NItems) {
    //
    // Set no. of trigger items in clones array
    //
    switch ( trigger ) {
	case kL1:
	    fN_L1TriggerItems = NItems; break;
	case kHLT:
	    fN_HLTTriggerItems = NItems; break;
    }
}

//____________________________________________________________________

const char* AtlTriggerConf::GetL1ItemName(Int_t Bit, Int_t RunNr) {
    //
    // Get name of the L1 item associated to the given bit.
    //
    // Check if the current configuration is still valid for the given
    // run. Load new configuration otherwise
    //
    if ( RunNr < fRunStart || RunNr > fRunEnd )
	ReadConfiguration(RunNr);
    return GetL1ItemName(Bit);
}

//____________________________________________________________________

const char* AtlTriggerConf::GetHLTItemName(Int_t Bit, Int_t RunNr) {
    //
    // Get name of the HLT item associated to the given bit.
    //
    // Check if the current configuration is still valid for the given
    // run. Load new configuration otherwise.
    //
    if ( RunNr < fRunStart || RunNr > fRunEnd )
	ReadConfiguration(RunNr);
    return GetHLTItemName(Bit);
}

//____________________________________________________________________

const char* AtlTriggerConf::GetL1ItemName(Int_t Bit) {
    //
    // Get name of the L1 item associated to the given bit
    // from the currently loaded configuration
    //
    return ((AtlTriggerConfItem*)fL1TriggerItemsCA->At(Bit))->GetName();
}

//____________________________________________________________________

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