ROOT logo
#ifdef BUILD
#include "AliAnalysisTaskSE.h"
#include "AliAnalysisManager.h"
#include "AliAnalysisDataContainer.h"
#include "AliMCEvent.h"
#include "AliESDEvent.h"
#include "AliStack.h"
#include "AliMultiplicity.h"
#include "AliFMDMCEventInspector.h"
#include "AliAODForwardMult.h"
#include "AliLog.h"
#include <TH1I.h>
#include <TH2D.h>
#include <TAxis.h>
#include <TList.h>
#include <TObjArray.h>
#include <TParameter.h>
#include <TStopwatch.h>
#include <TROOT.h>
#include <THStack.h>
#include <TStyle.h>

//====================================================================
/**
 * Task to evaluate trigger bias in pp 
 * 
 */
class EvaluateTrigger : public AliAnalysisTaskSE
{
public:
  enum { 
    kNone = 0x0, 
    kESD  = 0x1, 
    kMC   = 0x2
  };
  enum { 
    kMaxN = 9
  };
  /** 
   * Constructor
   */
  EvaluateTrigger() 
    : AliAnalysisTaskSE(),
      fInel(),
      fInelGt0(),
      fNSD(),
      fNClusterGt0(),
      fInspector(), 
      fFirstEvent(true),
      fData(0), 
      fTriggers(0), 
      fTrackletRequirement(kESD),
      fVertexRequirement(kESD), 
      fVertexAxis(0, 0, 0), 
      fVertexESD(0),
      fVertexMC(0), 
      fM(0)
  {}
  /** 
   * Constructor 
   */
  EvaluateTrigger(const char* /*name*/) 
    : AliAnalysisTaskSE("evaluateTrigger"),
      fInel(AliAODForwardMult::kInel),
      fInelGt0(AliAODForwardMult::kInelGt0),
      fNSD(AliAODForwardMult::kNSD),
      fNClusterGt0(AliAODForwardMult::kNClusterGt0),
      fInspector("eventInspector"), 
      fFirstEvent(true), 
      fData(0), 
      fTriggers(0),
      fTrackletRequirement(kESD),
      fVertexRequirement(kESD), 
      fVertexAxis(10, -10, 10), 
      fVertexESD(0),
      fVertexMC(0), 
      fM(0)
  {
    DefineOutput(1, TList::Class());
    DefineOutput(2, TList::Class());
  }
  void SetVertexRequirement(UShort_t m) { fVertexRequirement = m; }
  void SetTrackletRequirement(UShort_t m) { fTrackletRequirement = m; }
  void SetVertexAxis(Int_t nBins, Double_t low, Double_t high) 
  {
    fVertexAxis.Set(nBins, low, high);
  }
  /** 
   * Intialize 
   */
  void Init() {}
  /** 
   * Create output objects 
   */
  void UserCreateOutputObjects()
  {
    fList = new TList;
    fList->SetOwner();
    fList->SetName("triggerSums");

    // Double_t mb[] = { 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11 };
    // Int_t    nM   = 10;
    TAxis eAxis(200, -4, 6);
    TAxis pAxis(40, 0, 2*TMath::Pi());

    fData = new TH2D("data", "Cache", 
		     eAxis.GetNbins(), eAxis.GetXmin(), eAxis.GetXmax(), 
		     pAxis.GetNbins(), pAxis.GetXmin(), pAxis.GetXmax());
    fData->SetDirectory(0);
    fData->SetXTitle("#eta");
    fData->SetYTitle("#varphi [radians]");
    fData->SetZTitle("N_{ch}(#eta,#varphi)");
    fData->Sumw2();
    
    fM = new TH1D("m", "Distribution of N_{ch}|_{|#eta|<1}", kMaxN+1,0,kMaxN+1);
    fM->SetXTitle("N_{ch}|_{|#eta|<1}");
    fM->SetYTitle("Events");
    fM->SetFillColor(kRed+1);
    fM->SetFillStyle(3001);
    fM->SetDirectory(0);
    fList->Add(fM);

    for (Int_t i = 0; i <= kMaxN; i++) { 
      TString lbl;
      if (i == 0)          lbl = "all";
      else if (i == kMaxN) lbl = Form("%d+",i-1);
      else                 lbl = Form("<%d",i);
      fM->GetXaxis()->SetBinLabel(i+1, lbl);
    }

    fTriggers = new TH1I("triggers", "Triggers", 8, -.5, 7.5);
    fTriggers->SetDirectory(0);
    fTriggers->GetXaxis()->SetBinLabel(1, "INEL (MC)");
    fTriggers->GetXaxis()->SetBinLabel(2, "INEL (ESD)");
    fTriggers->GetXaxis()->SetBinLabel(3, "INEL & N_{cluster}>0 (MC)");
    fTriggers->GetXaxis()->SetBinLabel(4, "INEL & N_{cluster}>0 (ESD)");
    fTriggers->GetXaxis()->SetBinLabel(5, "INEL>0 (MC)");
    fTriggers->GetXaxis()->SetBinLabel(6, "INEL>0 (ESD)");
    fTriggers->GetXaxis()->SetBinLabel(7, "NSD (MC)");
    fTriggers->GetXaxis()->SetBinLabel(8, "NSD (ESD)");
    fTriggers->SetFillColor(kYellow+1);
    fTriggers->SetFillStyle(3001);
    fList->Add(fTriggers);

    fVertexESD = new TH1D("vertexESD", "ESD vertex distribution", 
			  fVertexAxis.GetNbins(), 
			  fVertexAxis.GetXmin(), 
			  fVertexAxis.GetXmax());
    fVertexESD->SetDirectory(0);
    fVertexESD->SetFillColor(kRed+1);
    fVertexESD->SetFillStyle(3001);
    fVertexESD->SetXTitle("v_{z} [cm]");
    fVertexESD->SetYTitle("P(v_{z})");
    fList->Add(fVertexESD);

    fVertexMC = new TH1D("vertexMC", "MC vertex distribution", 
			  fVertexAxis.GetNbins(), 
			  fVertexAxis.GetXmin(), 
			  fVertexAxis.GetXmax());
    fVertexMC->SetDirectory(0);
    fVertexMC->SetFillColor(kBlue+1);
    fVertexMC->SetFillStyle(3001);
    fVertexMC->SetXTitle("v_{z} [cm]");
    fVertexMC->SetYTitle("P(v_{z})");
    fList->Add(fVertexMC);

    fInel.CreateObjects(fList, fM, fData);
    fInelGt0.CreateObjects(fList, fM, fData);
    fNSD.CreateObjects(fList, fM, fData);
    fNClusterGt0.CreateObjects(fList, fM, fData);


    fInspector.DefineOutput(fList);
    fInspector.Init(fVertexAxis);

    PostData(1, fList);
  }
  /** 
   * Event processing 
   */
  void UserExec(Option_t*) 
  {
    // Get the input data - MC event
    AliMCEvent*  mcEvent = MCEvent();
    if (!mcEvent) { 
      AliWarning("No MC event found");
      return;
    }
    
    // Get the input data - ESD event
    AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
    if (!esd) { 
      AliWarning("No ESD event found for input event");
      return;
    }

    if (fFirstEvent && esd->GetESDRun()) {
      fInspector.ReadRunDetails(esd);

      AliInfo(Form("Initializing with parameters from the ESD:\n"
		   "         AliESDEvent::GetBeamEnergy()   ->%f\n"
		   "         AliESDEvent::GetBeamType()     ->%s\n"
		   "         AliESDEvent::GetCurrentL3()    ->%f\n"
		   "         AliESDEvent::GetMagneticField()->%f\n"
		   "         AliESDEvent::GetRunNumber()    ->%d\n",
		   esd->GetBeamEnergy(),
		   esd->GetBeamType(),
		   esd->GetCurrentL3(),
		   esd->GetMagneticField(),
		   esd->GetRunNumber()));
      
      fFirstEvent = false;
    }

    // Get the particle stack 
    AliStack* stack = mcEvent->Stack();

    // Some variables 
    UInt_t   triggers; // Trigger bits
    Bool_t   lowFlux;  // Low flux flag
    UShort_t iVz;      // Vertex bin from ESD
    Double_t vZ;       // Z coordinate from ESD
    Double_t cent;     // Centrality 
    UShort_t iVzMc;    // Vertex bin from MC
    Double_t vZMc;     // Z coordinate of IP vertex from MC
    Double_t b;        // Impact parameter
    Int_t    nPart;    // Number of participants 
    Int_t    nBin;     // Number of binary collisions 
    Double_t phiR;     // Reaction plane from MC
    UShort_t nClusters;// Number of clisters 
    // Process the data 
    Int_t retESD = fInspector.Process(esd, triggers, lowFlux, iVz, vZ, cent,
				      nClusters);
    Int_t retMC  = fInspector.ProcessMC(mcEvent, triggers, iVzMc, 
					vZMc, b, nPart, nBin, phiR);

    Bool_t hasESDVtx = retESD == AliFMDEventInspector::kOk;
    Bool_t hasMCVtx  = retMC  == AliFMDEventInspector::kOk;
    if (hasESDVtx) fVertexESD->Fill(vZ);
    if (hasMCVtx)  fVertexMC->Fill(vZMc);

    Bool_t isMcInel = true; // (triggers & AliAODForwardMult::kB);
    Bool_t isMcNSD  = (triggers & AliAODForwardMult::kMCNSD);

    Int_t mESD = 0;
    const AliMultiplicity* spdmult = esd->GetMultiplicity();
    if (!spdmult) {
      AliWarning("No SPD multiplicity");
    }
    else { 
      // Check if we have one or more tracklets 
      // in the range -1 < eta < 1 to set the INEL>0 
      // trigger flag. 
      Int_t n = spdmult->GetNumberOfTracklets();
      for (Int_t j = 0; j < n; j++) 
	if(TMath::Abs(spdmult->GetEta(j)) < 1) mESD++;
    }

    // Reset cache 
    fData->Reset();
    Int_t mMC = 0; // Number of particles in |eta|<1

    // Loop over all tracks 
    Int_t nTracks = mcEvent->GetNumberOfTracks();
    for (Int_t iTr = 0; iTr < nTracks; iTr++) { 
      AliMCParticle* particle = 
	static_cast<AliMCParticle*>(mcEvent->GetTrack(iTr));
    
      // Check the returned particle 
      if (!particle) continue;

      // Check if this charged and a primary 
      Bool_t isCharged = particle->Charge() != 0;
      Bool_t isPrimary = stack->IsPhysicalPrimary(iTr);

      if (!isCharged || !isPrimary) continue;

      
      // Fill (eta,phi) of the particle into histograsm for b
      Double_t eta = particle->Eta();
      Double_t phi = particle->Phi();
      
      fData->Fill(eta, phi);
      if (TMath::Abs(eta) <= 1) mMC++;
    }
    Int_t m = mESD;
    if (fTrackletRequirement == kMC) m = mMC;
    fM->Fill(m);

    bool isMcInelGt0 = isMcInel && (mMC > 0);
    
    bool hasVertex   = true;
    if (fVertexRequirement & kMC)  hasVertex = hasVertex && hasMCVtx;
    if (fVertexRequirement & kESD) hasVertex = hasVertex && hasESDVtx;

    if (isMcInel) {
      fTriggers->Fill(0);
      bool triggered = (triggers & AliAODForwardMult::kInel);
      if (triggered) fTriggers->Fill(1);
      fInel.AddEvent(triggered, hasVertex, m, fData);
    }
    if (isMcInel) { // && nClusters > 0) {
      fTriggers->Fill(2);
      bool triggered = (triggers & AliAODForwardMult::kNClusterGt0);
      if (triggered) fTriggers->Fill(3);
      fNClusterGt0.AddEvent(triggered, hasVertex, m, fData);
    }
    if (isMcInelGt0) {
      fTriggers->Fill(4);
      bool triggered = (triggers & AliAODForwardMult::kInelGt0);
      if (triggered) fTriggers->Fill(5);
      fInelGt0.AddEvent(triggered, hasVertex, m, fData);
    }
    if (isMcNSD) {
      fTriggers->Fill(6);
      bool triggered = (triggers & AliAODForwardMult::kNSD);
      if (triggered) fTriggers->Fill(7);
      fNSD.AddEvent(triggered, hasVertex, m, fData);
    }
    PostData(1, fList);
  }
  /** 
   * End of job processing 
   */
  void Terminate(Option_t*)
  {
    fList = dynamic_cast<TList*>(GetOutputData(1));
    if (!fList) {
      AliError(Form("No output list defined (%p)", GetOutputData(1)));
      if (GetOutputData(1)) GetOutputData(1)->Print();
      return;
    }


    TList* output = new TList;
    output->SetName("triggerResults");
    output->SetOwner();

    fVertexMC = static_cast<TH1D*>(fList->FindObject("vertexMC"));
    fVertexESD = static_cast<TH1D*>(fList->FindObject("vertexESD"));
    fM         = static_cast<TH1D*>(fList->FindObject("m"));
    if (fVertexMC) { 
      TH1D* vtxMC = static_cast<TH1D*>(fVertexMC->Clone("vertexMC"));
      vtxMC->SetDirectory(0);
      if (vtxMC->GetEntries() > 0)
	vtxMC->Scale(1. / vtxMC->GetEntries());
      else 
	vtxMC->Scale(0);
      output->Add(vtxMC);
    }
    if (fVertexESD) { 
      TH1D* vtxESD = static_cast<TH1D*>(fVertexESD->Clone("vertexESD"));
      vtxESD->SetDirectory(0);
      if (vtxESD->GetEntries() > 0)
	vtxESD->Scale(1. / vtxESD->GetEntries());
      else 
	vtxESD->Scale(0);
      output->Add(vtxESD);
    }
    if (fM) { 
      TH1D* m = static_cast<TH1D*>(fM->Clone("m"));
      m->SetDirectory(0);
      m->SetYTitle("P(N_{ch}|_{|#eta|<1} < X)");
      if (m->GetBinContent(1) > 0)
	m->Scale(1. / m->GetBinContent(1));
      else 
	m->Scale(0);
      output->Add(m);
    }      

    TString vtxReq;
    if (fVertexRequirement & kMC)  vtxReq.Append("MC ");
    if (fVertexRequirement & kESD) vtxReq.Append("ESD ");
    output->Add(new TNamed("vtxReq", vtxReq.Data()));
    output->Add(new TNamed("trkReq",
			   fTrackletRequirement == kMC ? "MC" : "ESD"));

    fInel.Finish(fList, output);
    fInelGt0.Finish(fList, output);
    fNSD.Finish(fList, output);
    fNClusterGt0.Finish(fList, output);

    PostData(2, output);
  }
    
protected:
  //__________________________________________________________________
  /** 
   * Structure to hold per trigger type information 
   */
  struct TriggerType : public TNamed
  {
    //________________________________________________________________
    /** 
     * Structure to hold per multiplicity bin information 
     */
    struct MBin : public TNamed
    {
      TH2D*     fTruth;
      TH2D*     fTriggered; 
      TH2D*     fAccepted;
      TH1I*     fCounts;
      UShort_t  fLow;
      UShort_t  fHigh;
      Bool_t IsAll() const { return fLow > fHigh; }
      Bool_t IsLast() const { return fHigh >= kMaxN; }
      /** 
       * Constructor 
       */
      MBin() 
	: fTruth(0), fTriggered(0), fAccepted(0), 
	  fCounts(0), fLow(0), fHigh(1000) {}
      /** 
       * Constructor 
       * 
       * @param p      Parent list 
       * @param low    Low cut 
       * @param high   High cut 
       * @param eAxis  Eta axis 
       * @param pAxis  Phi axis 
       */
      MBin(TList* p, UShort_t low, UShort_t high, const TH2D* dHist) 
	: fTruth(0), 
	  fTriggered(0), 
	  fAccepted(0),
	  fCounts(0), 
	  fLow(low), 
	  fHigh(high)
      {
	if (IsAll()) {
	  SetName("all");
	  SetTitle("All");
	}
	else if (IsLast()) { 
	  SetName(Form("m%03dplus", fLow));
	  SetTitle(Form("%d #leq N_{tracklets}|_{|#eta|<1}", fLow));
	}
	else {
	  SetName(Form("m%03d_%03d", fLow, fHigh));
	  SetTitle(Form("%d #leq N_{tracklets}|_{|#eta|<1} < %d", fLow,fHigh));
	}

	TList* l = new TList;
	l->SetOwner();
	l->SetName(GetName());
	p->Add(l);

	fTruth = static_cast<TH2D*>(dHist->Clone(("truth")));
	fTruth->SetTitle("MC truth");
	fTruth->SetDirectory(0);
	fTruth->SetZTitle("#sum_i^{N_X} N_{ch}(#eta,#varphi)");
	// fTruth->Sumw2();
	fTruth->Reset();
	l->Add(fTruth);

	fTriggered = static_cast<TH2D*>(fTruth->Clone(("triggered")));
	fTriggered->SetTitle("Triggered");
	fTriggered->SetDirectory(0);
	fTriggered->SetZTitle("#sum_i^{N_T} N_{ch}(#eta,#varphi)");
	// fTriggered->Sumw2();
	fTriggered->Reset();
	l->Add(fTriggered);

	fAccepted = static_cast<TH2D*>(fTruth->Clone(("accepted")));
	fAccepted->SetTitle("Accepted");
	fAccepted->SetDirectory(0);
	fAccepted->SetZTitle("#sum_i^{N_T} N_{ch}(#eta,#varphi)");
	// fAccepted->Sumw2();
	fAccepted->Reset();
	l->Add(fAccepted);
	
	fCounts = new TH1I("counts", "Event counts", 3, -.5, 2.5);
	fCounts->SetDirectory(0);
	fCounts->GetXaxis()->SetBinLabel(1, "Truth");
	fCounts->GetXaxis()->SetBinLabel(2, "Triggered");
	fCounts->GetXaxis()->SetBinLabel(3, "Accepted");
	fCounts->SetYTitle("# events");
	l->Add(fCounts);
      }
      /** 
       * Add event observation
       * 
       * @param triggered Whether the event was triggered
       * @param event     Data for this event 
       */
      void AddEvent(Bool_t triggered, Bool_t hasVtx, const TH2D* event) 
      {
	fCounts->Fill(0);
	fTruth->Add(event);
	if (triggered) { 
	  fCounts->Fill(1);
	  fTriggered->Add(event);
	  if (hasVtx) {
	    fCounts->Fill(2);
	    fAccepted->Add(event);
	  }
	}
      }
      /** 
       * End of job processing 
       * 
       * @param p      Parent list
       * @param o      Output parent list
       * @param stack  Stack of histograms
       * 
       * @return Trigger efficiency
       */ 
     Double_t Finish(const TList* p, TList* o, THStack* stack) 
      {
	TList* l = dynamic_cast<TList*>(p->FindObject(GetName()));
	if (!l) { 
	  Warning("Finish", "Cannot find %s in %s", GetName(), p->GetName());
	  return 0;
	}
	fTruth     = static_cast<TH2D*>(l->FindObject("truth"));
	fTriggered = static_cast<TH2D*>(l->FindObject("triggered"));
	fAccepted  = static_cast<TH2D*>(l->FindObject("accepted"));
	fCounts    = static_cast<TH1I*>(l->FindObject("counts"));
	
	Int_t    nTruth     = fCounts->GetBinContent(1);
	Int_t    nTriggered = fCounts->GetBinContent(2);
	Int_t    nAccepted  = fCounts->GetBinContent(3);
	Double_t eff        = 0;
	if (nTruth > 0) eff = double(nTriggered) / nTruth;
	else if (nTriggered == nTruth) eff = 1;

	if (nTruth > 0)     fTruth->Scale(1. / nTruth);
	if (nTriggered > 0) fTriggered->Scale(1. / nTriggered);
	if (nAccepted > 0)  fAccepted->Scale(1. / nAccepted);

	if (IsAll()) 
	  Info("Finish", "%-12s  [all]  E_X=N_T/N_X=%9d/%-9d=%f "
	       "E_V=N_A/N_T=%9d/%-9d=%f", 
	       p->GetName(), nTriggered, nTruth, eff, nAccepted, nTriggered, 
	       (nTriggered > 0 ? double(nAccepted) / nTriggered: 0));
	else if (IsLast()) 
	  Info("Finish", "%-12s  [%2d+]  E_X=N_T/N_X=%9d/%-9d=%f "
	       "E_V=N_A/N_T=%9d/%-9d=%f", 
	       p->GetName(), fLow, nTriggered, nTruth, eff, 
	       nAccepted, nTriggered, 
	       (nTriggered > 0 ? double(nAccepted) / nTriggered: 0));
	else
	  Info("Finish", "%-12s [%2d-%2d] E_X=N_T/N_X=%9d/%-9d=%f "
	       "E_V=N_A/N_T=%9d/%-9d=%f", 
	       p->GetName(), fLow, fHigh, nTriggered, nTruth, eff, 
	       nAccepted, nTriggered, 
	       (nTriggered > 0 ? double(nAccepted) / nTriggered: 0));
	
	TList* out = new TList;
	out->SetName(GetName());
	out->SetOwner();
	o->Add(out);
	
	out->Add(fTruth);
	out->Add(fTriggered);
	out->Add(new TParameter<double>("eff", eff));
	
	TH2D* bias = static_cast<TH2D*>(fAccepted->Clone("bias"));
	bias->Divide(fTruth);
	bias->SetDirectory(0);
	bias->SetZTitle("Trigger bias (accepted/truth)");
	out->Add(bias);

	TString title = GetTitle();
	TH1D* truth_px = static_cast<TH1D*>(fTruth->ProjectionX("truth_eta"));
	truth_px->SetTitle(title);
	truth_px->Scale(1. / fTruth->GetNbinsY());
	truth_px->SetDirectory(0);
	truth_px->SetLineColor(kRed+1);
	truth_px->SetMarkerColor(kRed+1);
	truth_px->SetFillColor(kRed+1);
	truth_px->SetFillStyle(0);
	out->Add(truth_px);

	TH1D* triggered_px = 
	  static_cast<TH1D*>(fTriggered->ProjectionX("triggered_eta"));
	triggered_px->SetTitle(title);
	triggered_px->Scale(1. / fTriggered->GetNbinsY());
	triggered_px->SetDirectory(0);
 	triggered_px->SetLineColor(kGreen+1);
	triggered_px->SetMarkerColor(kGreen+1);
	triggered_px->SetFillColor(kGreen+1);
	triggered_px->SetFillStyle(0);
	out->Add(triggered_px);

	TH1D* accepted_px = 
	  static_cast<TH1D*>(fAccepted->ProjectionX("accepted_eta"));
	accepted_px->SetTitle(title);
	accepted_px->Scale(1. / fAccepted->GetNbinsY());
 	accepted_px->SetLineColor(kBlue+1);
	accepted_px->SetMarkerColor(kBlue+1);
	accepted_px->SetFillColor(kBlue+1);
	accepted_px->SetDirectory(0);
	out->Add(accepted_px);

	THStack* data = new THStack("data", "Data distributions");
	data->Add(truth_px);
	data->Add(triggered_px);
	data->Add(accepted_px);
	out->Add(data);

#if 0
	TH1D* bias_px = static_cast<TH1D*>(bias->ProjectionX("bias_eta"));
	bias_px->SetTitle(title);
	bias_px->Scale(1. / bias->GetNbinsY());
#else
	TH1D* bias_px = static_cast<TH1D*>(accepted_px->Clone("bias_px"));
	bias_px->Divide(truth_px);
	bias_px->SetYTitle("Trigger bias (triggered/truth)");
#endif
	bias_px->SetDirectory(0);
	bias_px->SetMarkerStyle(20);
	bias_px->SetFillStyle(0);
	bias_px->SetMinimum(0);
	out->Add(bias_px);

	stack->Add(bias_px);

	return eff;
      }	
      ClassDef(MBin,1);
    };

    /** 
     * Constructor 
     */
    TriggerType() 
      : TNamed(), 
	fMask(0),
	fM(0),
	fBins(0)
    {}
    //--- Constructor ------------------------------------------------
    /** 
     * Constructor 
     * 
     * @param mask  Trigger mask
     */
    TriggerType(UShort_t mask) 
      : TNamed(AliAODForwardMult::GetTriggerString(mask), ""),
	fMask(mask), 
	fM(0), 
	fBins(0)
    {
      TString n(GetName());
      n = n.Strip(TString::kBoth);
      SetName(n);
    }
    /** 
     * Create objects 
     * 
     * @param list   PArent list
     * @param mAxis  Multiplicity axis 
     * @param eAxis  Eta axis
     * @param pAxis  Phi axis
     */
    void CreateObjects(TList* list, 
		       const TH1D* mHist, 
		       const TH2D* dHist)
    {
      TList* ours  = new TList;
      ours->SetName(GetName());
      ours->SetOwner();
      list->Add(ours);

      fM = static_cast<TH1D*>(mHist->Clone("m"));
      fM->SetDirectory(0);
      ours->Add(fM);
      
      fBins = new TObjArray;
      fBins->AddAt(new MBin(ours, 1000, 0, dHist), 0);
      for (Int_t i = 1; i < fM->GetNbinsX(); i++) { 
	Double_t low  = fM->GetXaxis()->GetBinLowEdge(i);
	Double_t high = fM->GetXaxis()->GetBinUpEdge(i);
	Info("CreatePbjects", "Adding bin [%3d,%3d] @ %d", 
	     int(low), int(high), i);
	fBins->AddAt(new MBin(ours, UShort_t(low), UShort_t(high), dHist), i);
      }
    }
    /** 
     * Find bin corresponding to m
     * 
     * @param m Multiplicity 
     * 
     * @return Bin. 
     */
    MBin* FindBin(UShort_t m) 
    { 
#if 0
      for (Int_t i = 1; i < fBins->GetEntries(); i++) {
	MBin* b = static_cast<MBin*>(fBins->At(i));
	if (m >= b->fLow && m < b->fHigh) return b;
      }
      Warning("FindBin", "Found no bin for m=%d", m);
      return 0;
#else
      Int_t b = fM->GetXaxis()->FindBin(m);
      if (b <= 0) return 0;
      if (b >= fM->GetNbinsX()+1) b = fM->GetNbinsX();
      MBin* bin = static_cast<MBin*>(fBins->At(b));
      return bin;
#endif
    }
    /** 
     * Add event observation 
     * 
     * @param triggered  IF this is triggered
     * @param m          Multiplicity 
     * @param data       Observation 
     */
    void AddEvent(Bool_t triggered, Bool_t hasVtx, UShort_t m, const TH2D* data)
    {
      fM->AddBinContent(1);
      fM->AddBinContent(TMath::Min(fM->GetNbinsX(), m+2));

      MBin* all = static_cast<MBin*>(fBins->At(0));
      all->AddEvent(triggered, hasVtx, data);
      
      MBin* bin = FindBin(m);
      if (!bin) return;
      bin->AddEvent(triggered, hasVtx, data);      
    }      
    /** 
     * End of job processing 
     * 
     * @param p Parent list 
     * @param o Parent output list 
     */
    void Finish(const TList* p, TList* o)
    {
      TList* l = dynamic_cast<TList*>(p->FindObject(GetName()));
      if (!l) { 
	Warning("Finish", "Cannot find %s in %s", GetName(), p->GetName());
	return;
      }
      
      TList* ours  = new TList;
      ours->SetName(GetName());
      ours->SetOwner();
      o->Add(ours);

      fM = static_cast<TH1D*>(l->FindObject("m"));
      if (!fM) { 
	Warning("Finish", "Didn't find object 'm' in %s", l->GetName());
	return;
      }
      TH1D* m = static_cast<TH1D*>(fM->Clone("m"));
      m->SetDirectory(0);
      m->SetYTitle("P(N_{ch}|_{|#eta|<1} < X)");
      if (m->GetBinContent(1) > 0) 
	m->Scale(1. / m->GetBinContent(1));
      ours->Add(m);

      Int_t nBin = fM->GetNbinsX();
      TH1D* effs = static_cast<TH1D*>(fM->Clone("effs"));
      effs->SetYTitle("#epsilon_{X}");
      effs->SetFillColor(kRed+1);
      effs->SetDirectory(0);
      effs->SetMinimum(0);

      gStyle->SetPalette(1);
      Int_t   nCol = gStyle->GetNumberOfColors();
      THStack* stack = new THStack("biases", "Trigger biases");
      for (Int_t i = 0; i < nBin; i++) { 
	MBin* bin = static_cast<MBin*>(fBins->At(i));
	effs->SetBinContent(i+1, bin->Finish(l, ours, stack));
	TH1* h = static_cast<TH1*>(stack->GetHists()->At(i));
	Int_t col = kBlack;
	if (i != 0) { 
	  Int_t icol = TMath::Min(nCol-1,int(double(i)/nBin * nCol + .5));
	  col        = gStyle->GetColorPalette(icol);
	}
	h->SetMarkerColor(col);
	h->SetFillColor(col);
	h->SetLineColor(col);
      }

      ours->Add(stack);
      ours->Add(effs);
    } 
    UShort_t   fMask;
    TH1D*      fM;
    TObjArray* fBins;
    ClassDef(TriggerType,1);
  };
  TriggerType            fInel;
  TriggerType            fInelGt0;
  TriggerType            fNSD;
  TriggerType            fNClusterGt0;
  AliFMDMCEventInspector fInspector;
  TList*                 fList;
  Bool_t                 fFirstEvent;
  TH2D*                  fData;
  TH1I*                  fTriggers;
  UInt_t                 fTrackletRequirement;
  UInt_t                 fVertexRequirement;
  TAxis                  fVertexAxis;
  TH1D*                  fVertexESD;
  TH1D*                  fVertexMC;
  TH1D*                  fM;
  ClassDef(EvaluateTrigger,1);
};
#else 
//====================================================================
void MakeEvaluateTriggers(const char* esddir, 
			  Int_t       nEvents    = -1, 
			  UInt_t      vtx        = 0x2,
			  UInt_t      trk        = 0x1,
			  Int_t       vz         = 10,
			  Int_t       proof      = 0)
{
  // --- Libraries to load -------------------------------------------
  gROOT->Macro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/scripts/LoadLibs.C");

  // --- Check for proof mode, and possibly upload pars --------------
  if (proof> 0) { 
    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/scripts/LoadPars.C");
    if (!LoadPars(proof)) { 
      Error("MakeAOD", "Failed to load PARs");
      return;
    }
  }
  
  // --- Our data chain ----------------------------------------------
  gROOT->LoadMacro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/scripts/MakeChain.C");
  TChain* chain = MakeChain("ESD", esddir,true);
  // If 0 or less events is select, choose all 
  if (nEvents <= 0) nEvents = chain->GetEntries();
  
  // --- Set the macro path ------------------------------------------
  gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/PWGLF/FORWARD/analysis2:"
			   "$ALICE_ROOT/ANALYSIS/macros",
			   gROOT->GetMacroPath()));

  // --- Creating the manager and handlers ---------------------------
  AliAnalysisManager *mgr  = new AliAnalysisManager("Triggers", 
						    "Forward multiplicity");
  AliAnalysisManager::SetCommonFileName("triggers.root");

  // --- ESD input handler -------------------------------------------
  AliESDInputHandler *esdHandler = new AliESDInputHandler();
  mgr->SetInputEventHandler(esdHandler);      
       
  // --- Monte Carlo handler -----------------------------------------
  AliMCEventHandler* mcHandler = new AliMCEventHandler();
  mgr->SetMCtruthEventHandler(mcHandler);
  mcHandler->SetReadTR(true);    

  // --- Add tasks ---------------------------------------------------
  // Physics selection 
  gROOT->Macro(Form("AddTaskPhysicsSelection.C(1,1,0)"));

#if 0
  // --- Fix up physics selection to give proper A,C, and E triggers -
  AliInputEventHandler* ih =
    static_cast<AliInputEventHandler*>(mgr->GetInputEventHandler());
  AliPhysicsSelection* ps = 
    static_cast<AliPhysicsSelection*>(ih->GetEventSelection());
  // Ignore trigger class when selecting events.  This mean that we
  // get offline+(A,C,E) events too
  ps->SetSkipTriggerClassSelection(true);
#endif

  // --- compile our code --------------------------------------------
  gSystem->AddIncludePath("-I${ALICE_ROOT}/PWGLF/FORWARD/analysis2 "
			  "-I${ALICE_ROOT}/ANALYSIS "
			  "-I${ALICE_ROOT}/include -DBUILD=1");
  gROOT->LoadMacro("${ALICE_ROOT}/PWGLF/FORWARD/analysis2/MakeEvaluateTriggers.C++g");
  
  // --- Make our object ---------------------------------------------
  EvaluateTrigger* task = new EvaluateTrigger("triggers");
  mgr->AddTask(task);
  task->SetVertexRequirement(vtx);
  task->SetTrackletRequirement(trk);
  task->SetVertexAxis(10, -vz, vz);

  // --- create containers for input/output --------------------------
  AliAnalysisDataContainer *sums = 
    mgr->CreateContainer("triggerSums", TList::Class(), 
			 AliAnalysisManager::kOutputContainer, 
			 AliAnalysisManager::GetCommonFileName());
  AliAnalysisDataContainer *output = 
    mgr->CreateContainer("triggerResults", TList::Class(), 
			 AliAnalysisManager::kParamContainer, 
			 AliAnalysisManager::GetCommonFileName());
  
  // --- connect input/output ----------------------------------------
  mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
  mgr->ConnectOutput(task, 1, sums);
  mgr->ConnectOutput(task, 2, output);
  
  // --- Run the analysis --------------------------------------------
  TStopwatch t;
  if (!mgr->InitAnalysis()) {
    Error("MakeAOD", "Failed to initialize analysis train!");
    return;
  }
  // Skip terminate if we're so requested and not in Proof or full mode
  mgr->SetSkipTerminate(false);
  // Some informative output 
  mgr->PrintStatus();
  if (proof) mgr->SetDebugLevel(3);
  if (mgr->GetDebugLevel() < 1 && !proof) 
    mgr->SetUseProgressBar(kTRUE,100);

  // Run the train 
  t.Start();
  Printf("=== RUNNING ANALYSIS on %9d events ==========================",
	 nEvents);
  mgr->StartAnalysis(proof ? "proof" : "local", chain, nEvents);
  t.Stop();
  t.Print();
}
//====================================================================
void DrawEvaluateTriggers(const char* filename="triggers.root")
{
  TFile* file = TFile::Open(filename, "READ");
  if (!file) { 
    Error("DrawEvaluteTriggers", "Failed to open %s", filename);
    return;
  }

  TList* list = static_cast<TList*>(file->Get("triggerResults"));
  if (!list) { 
    Error("DrawEvaluateTriggers", "Faield to get triggerResults from %s", 
	  list->GetName());
    return;
  }

  TCanvas* c = new TCanvas("c", "c", 1200, 900);
  c->SetFillColor(0);
  c->SetBorderSize(0);
  c->SetBorderMode(0);

  TPad* p = new TPad("top", "Top", 0, .9, 1, 1, 0, 0, 0); 
  p->SetFillColor(0);
  p->SetFillStyle(0);
  p->SetBorderSize(0);
  p->SetBorderMode(0);
  c->cd();
  p->Draw();
  p->cd();
  TObject* vtxReq = list->FindObject("vtxReq");
  TObject* trkReq = list->FindObject("trkReq");
  if (!vtxReq) vtxReq = new TNamed("vtxReq", "Unknown");
  if (!trkReq) trkReq = new TNamed("trkReq", "Unknown");
  TLatex* ltx = new TLatex(0.5, 0.5, 
			   Form("Trigger bias and efficiency. " 
				"Vertex requirement: %s, "
				"Tracklet requirement %s",
				vtxReq->GetTitle(), trkReq->GetTitle()));
  ltx->Draw();
  ltx->SetTextAlign(22);
  ltx->SetTextSize(0.4);

  const char*  trigs[] = { "INEL", "NCluster>0", "INEL>0", "NSD", 0 };
  const char** trig    = trigs;
  Int_t n = 4;
  Int_t i = 0;
  while (*trig) { 
    TList* lt = static_cast<TList*>(list->FindObject(*trig));
    if (!lt) { 
      Warning("DrawEvaluteTriggers", "No list for '%s' in '%s'", 
	      *trig, list->GetName());
      // list->ls();
      TIter next(triggerResults);
      TObject* o ;
      while ((o = next())) Printf("'%s'", o->GetName());
      trig++;
      i++;
      continue;
    }

    Double_t y1 = 1-double(i+1)/n;
    Double_t y2 = 1-double(i)/n;
    Double_t x1 = double(i)/n;
    Double_t x2 = double(i+1)/n;
    p = new TPad(Form("p%d", 2*i), Form("%s biases", *trig), 
		 x1, .3, x2, .9, 0, 0);
    p->SetFillColor(0);
    p->SetFillStyle(0);
    p->SetBorderSize(0);
    p->SetBorderMode(0);
    p->SetTopMargin(0.01);
    p->SetBottomMargin(0.05);
    p->SetRightMargin(0.01);
    c->cd();
    p->Draw();
    p->cd();
    
    THStack* biases = static_cast<THStack*>(lt->FindObject("biases"));
    biases->SetTitle(*trig);
    TLegend* l = new TLegend(.1, .15, .95, .35, 
			     Form("1/N_{T}#sum N_{ch}}/"
				  "1/N_{X}#sum N_{ch} - %s", *trig));
    l->SetFillColor(0);
    l->SetFillStyle(0);
    l->SetBorderSize(0);
    l->SetNColumns(2);
    
    gStyle->SetOptTitle(0);
    TIter next(biases->GetHists());
    TH1*  frame = 0;
    TH1*  hist = 0;
    Int_t j = 1;
    while ((hist = static_cast<TH1*>(next()))) { 
      if (!frame) { 
	
	frame = new TH2D("frame", "", 
			 hist->GetXaxis()->GetNbins(),
			 hist->GetXaxis()->GetXmin(),
			 hist->GetXaxis()->GetXmax(),
			 100, 0, 4);
	frame->SetDirectory(0);
	frame->SetXTitle(hist->GetXaxis()->GetTitle());
	frame->SetYTitle(hist->GetYaxis()->GetTitle());
	frame->SetStats(0);
	frame->Draw();
      }
      // hist->Scale(j);
      // hist->Draw("same p hist");
      // if (j == 1) hist->SetTitle("all");
      l->AddEntry(hist, hist->GetTitle(), "p");
      j++;
    }
    // biases->SetMaximum(3.5);
    biases->Draw("p hist nostack");
    l->Draw();
    
    p = new TPad(Form("p%d", 2*i+1), Form("%s efficiencies", *trig), 
		 x1, 0, x2, .3, 0, 0, 0);
    p->SetFillColor(0);
    p->SetFillStyle(0);
    p->SetBorderSize(0);
    p->SetBorderMode(0);
    p->SetTopMargin(0.01);
    p->SetRightMargin(0.01);
    c->cd();
    p->Draw();
    p->cd();
    
    TH1* effs = static_cast<TH1*>(lt->FindObject("effs"));
    effs->SetTitle(*trig);
    effs->SetStats(0);
    effs->SetMinimum(0);
    effs->SetMaximum(1.4);
    effs->SetMarkerSize(2.5);
    effs->Draw("hist text");


    i++;
    trig++;
  }
  c->cd();

  c->SaveAs("triggers.png");
}

#endif
 MakeEvaluateTriggers.C:1
 MakeEvaluateTriggers.C:2
 MakeEvaluateTriggers.C:3
 MakeEvaluateTriggers.C:4
 MakeEvaluateTriggers.C:5
 MakeEvaluateTriggers.C:6
 MakeEvaluateTriggers.C:7
 MakeEvaluateTriggers.C:8
 MakeEvaluateTriggers.C:9
 MakeEvaluateTriggers.C:10
 MakeEvaluateTriggers.C:11
 MakeEvaluateTriggers.C:12
 MakeEvaluateTriggers.C:13
 MakeEvaluateTriggers.C:14
 MakeEvaluateTriggers.C:15
 MakeEvaluateTriggers.C:16
 MakeEvaluateTriggers.C:17
 MakeEvaluateTriggers.C:18
 MakeEvaluateTriggers.C:19
 MakeEvaluateTriggers.C:20
 MakeEvaluateTriggers.C:21
 MakeEvaluateTriggers.C:22
 MakeEvaluateTriggers.C:23
 MakeEvaluateTriggers.C:24
 MakeEvaluateTriggers.C:25
 MakeEvaluateTriggers.C:26
 MakeEvaluateTriggers.C:27
 MakeEvaluateTriggers.C:28
 MakeEvaluateTriggers.C:29
 MakeEvaluateTriggers.C:30
 MakeEvaluateTriggers.C:31
 MakeEvaluateTriggers.C:32
 MakeEvaluateTriggers.C:33
 MakeEvaluateTriggers.C:34
 MakeEvaluateTriggers.C:35
 MakeEvaluateTriggers.C:36
 MakeEvaluateTriggers.C:37
 MakeEvaluateTriggers.C:38
 MakeEvaluateTriggers.C:39
 MakeEvaluateTriggers.C:40
 MakeEvaluateTriggers.C:41
 MakeEvaluateTriggers.C:42
 MakeEvaluateTriggers.C:43
 MakeEvaluateTriggers.C:44
 MakeEvaluateTriggers.C:45
 MakeEvaluateTriggers.C:46
 MakeEvaluateTriggers.C:47
 MakeEvaluateTriggers.C:48
 MakeEvaluateTriggers.C:49
 MakeEvaluateTriggers.C:50
 MakeEvaluateTriggers.C:51
 MakeEvaluateTriggers.C:52
 MakeEvaluateTriggers.C:53
 MakeEvaluateTriggers.C:54
 MakeEvaluateTriggers.C:55
 MakeEvaluateTriggers.C:56
 MakeEvaluateTriggers.C:57
 MakeEvaluateTriggers.C:58
 MakeEvaluateTriggers.C:59
 MakeEvaluateTriggers.C:60
 MakeEvaluateTriggers.C:61
 MakeEvaluateTriggers.C:62
 MakeEvaluateTriggers.C:63
 MakeEvaluateTriggers.C:64
 MakeEvaluateTriggers.C:65
 MakeEvaluateTriggers.C:66
 MakeEvaluateTriggers.C:67
 MakeEvaluateTriggers.C:68
 MakeEvaluateTriggers.C:69
 MakeEvaluateTriggers.C:70
 MakeEvaluateTriggers.C:71
 MakeEvaluateTriggers.C:72
 MakeEvaluateTriggers.C:73
 MakeEvaluateTriggers.C:74
 MakeEvaluateTriggers.C:75
 MakeEvaluateTriggers.C:76
 MakeEvaluateTriggers.C:77
 MakeEvaluateTriggers.C:78
 MakeEvaluateTriggers.C:79
 MakeEvaluateTriggers.C:80
 MakeEvaluateTriggers.C:81
 MakeEvaluateTriggers.C:82
 MakeEvaluateTriggers.C:83
 MakeEvaluateTriggers.C:84
 MakeEvaluateTriggers.C:85
 MakeEvaluateTriggers.C:86
 MakeEvaluateTriggers.C:87
 MakeEvaluateTriggers.C:88
 MakeEvaluateTriggers.C:89
 MakeEvaluateTriggers.C:90
 MakeEvaluateTriggers.C:91
 MakeEvaluateTriggers.C:92
 MakeEvaluateTriggers.C:93
 MakeEvaluateTriggers.C:94
 MakeEvaluateTriggers.C:95
 MakeEvaluateTriggers.C:96
 MakeEvaluateTriggers.C:97
 MakeEvaluateTriggers.C:98
 MakeEvaluateTriggers.C:99
 MakeEvaluateTriggers.C:100
 MakeEvaluateTriggers.C:101
 MakeEvaluateTriggers.C:102
 MakeEvaluateTriggers.C:103
 MakeEvaluateTriggers.C:104
 MakeEvaluateTriggers.C:105
 MakeEvaluateTriggers.C:106
 MakeEvaluateTriggers.C:107
 MakeEvaluateTriggers.C:108
 MakeEvaluateTriggers.C:109
 MakeEvaluateTriggers.C:110
 MakeEvaluateTriggers.C:111
 MakeEvaluateTriggers.C:112
 MakeEvaluateTriggers.C:113
 MakeEvaluateTriggers.C:114
 MakeEvaluateTriggers.C:115
 MakeEvaluateTriggers.C:116
 MakeEvaluateTriggers.C:117
 MakeEvaluateTriggers.C:118
 MakeEvaluateTriggers.C:119
 MakeEvaluateTriggers.C:120
 MakeEvaluateTriggers.C:121
 MakeEvaluateTriggers.C:122
 MakeEvaluateTriggers.C:123
 MakeEvaluateTriggers.C:124
 MakeEvaluateTriggers.C:125
 MakeEvaluateTriggers.C:126
 MakeEvaluateTriggers.C:127
 MakeEvaluateTriggers.C:128
 MakeEvaluateTriggers.C:129
 MakeEvaluateTriggers.C:130
 MakeEvaluateTriggers.C:131
 MakeEvaluateTriggers.C:132
 MakeEvaluateTriggers.C:133
 MakeEvaluateTriggers.C:134
 MakeEvaluateTriggers.C:135
 MakeEvaluateTriggers.C:136
 MakeEvaluateTriggers.C:137
 MakeEvaluateTriggers.C:138
 MakeEvaluateTriggers.C:139
 MakeEvaluateTriggers.C:140
 MakeEvaluateTriggers.C:141
 MakeEvaluateTriggers.C:142
 MakeEvaluateTriggers.C:143
 MakeEvaluateTriggers.C:144
 MakeEvaluateTriggers.C:145
 MakeEvaluateTriggers.C:146
 MakeEvaluateTriggers.C:147
 MakeEvaluateTriggers.C:148
 MakeEvaluateTriggers.C:149
 MakeEvaluateTriggers.C:150
 MakeEvaluateTriggers.C:151
 MakeEvaluateTriggers.C:152
 MakeEvaluateTriggers.C:153
 MakeEvaluateTriggers.C:154
 MakeEvaluateTriggers.C:155
 MakeEvaluateTriggers.C:156
 MakeEvaluateTriggers.C:157
 MakeEvaluateTriggers.C:158
 MakeEvaluateTriggers.C:159
 MakeEvaluateTriggers.C:160
 MakeEvaluateTriggers.C:161
 MakeEvaluateTriggers.C:162
 MakeEvaluateTriggers.C:163
 MakeEvaluateTriggers.C:164
 MakeEvaluateTriggers.C:165
 MakeEvaluateTriggers.C:166
 MakeEvaluateTriggers.C:167
 MakeEvaluateTriggers.C:168
 MakeEvaluateTriggers.C:169
 MakeEvaluateTriggers.C:170
 MakeEvaluateTriggers.C:171
 MakeEvaluateTriggers.C:172
 MakeEvaluateTriggers.C:173
 MakeEvaluateTriggers.C:174
 MakeEvaluateTriggers.C:175
 MakeEvaluateTriggers.C:176
 MakeEvaluateTriggers.C:177
 MakeEvaluateTriggers.C:178
 MakeEvaluateTriggers.C:179
 MakeEvaluateTriggers.C:180
 MakeEvaluateTriggers.C:181
 MakeEvaluateTriggers.C:182
 MakeEvaluateTriggers.C:183
 MakeEvaluateTriggers.C:184
 MakeEvaluateTriggers.C:185
 MakeEvaluateTriggers.C:186
 MakeEvaluateTriggers.C:187
 MakeEvaluateTriggers.C:188
 MakeEvaluateTriggers.C:189
 MakeEvaluateTriggers.C:190
 MakeEvaluateTriggers.C:191
 MakeEvaluateTriggers.C:192
 MakeEvaluateTriggers.C:193
 MakeEvaluateTriggers.C:194
 MakeEvaluateTriggers.C:195
 MakeEvaluateTriggers.C:196
 MakeEvaluateTriggers.C:197
 MakeEvaluateTriggers.C:198
 MakeEvaluateTriggers.C:199
 MakeEvaluateTriggers.C:200
 MakeEvaluateTriggers.C:201
 MakeEvaluateTriggers.C:202
 MakeEvaluateTriggers.C:203
 MakeEvaluateTriggers.C:204
 MakeEvaluateTriggers.C:205
 MakeEvaluateTriggers.C:206
 MakeEvaluateTriggers.C:207
 MakeEvaluateTriggers.C:208
 MakeEvaluateTriggers.C:209
 MakeEvaluateTriggers.C:210
 MakeEvaluateTriggers.C:211
 MakeEvaluateTriggers.C:212
 MakeEvaluateTriggers.C:213
 MakeEvaluateTriggers.C:214
 MakeEvaluateTriggers.C:215
 MakeEvaluateTriggers.C:216
 MakeEvaluateTriggers.C:217
 MakeEvaluateTriggers.C:218
 MakeEvaluateTriggers.C:219
 MakeEvaluateTriggers.C:220
 MakeEvaluateTriggers.C:221
 MakeEvaluateTriggers.C:222
 MakeEvaluateTriggers.C:223
 MakeEvaluateTriggers.C:224
 MakeEvaluateTriggers.C:225
 MakeEvaluateTriggers.C:226
 MakeEvaluateTriggers.C:227
 MakeEvaluateTriggers.C:228
 MakeEvaluateTriggers.C:229
 MakeEvaluateTriggers.C:230
 MakeEvaluateTriggers.C:231
 MakeEvaluateTriggers.C:232
 MakeEvaluateTriggers.C:233
 MakeEvaluateTriggers.C:234
 MakeEvaluateTriggers.C:235
 MakeEvaluateTriggers.C:236
 MakeEvaluateTriggers.C:237
 MakeEvaluateTriggers.C:238
 MakeEvaluateTriggers.C:239
 MakeEvaluateTriggers.C:240
 MakeEvaluateTriggers.C:241
 MakeEvaluateTriggers.C:242
 MakeEvaluateTriggers.C:243
 MakeEvaluateTriggers.C:244
 MakeEvaluateTriggers.C:245
 MakeEvaluateTriggers.C:246
 MakeEvaluateTriggers.C:247
 MakeEvaluateTriggers.C:248
 MakeEvaluateTriggers.C:249
 MakeEvaluateTriggers.C:250
 MakeEvaluateTriggers.C:251
 MakeEvaluateTriggers.C:252
 MakeEvaluateTriggers.C:253
 MakeEvaluateTriggers.C:254
 MakeEvaluateTriggers.C:255
 MakeEvaluateTriggers.C:256
 MakeEvaluateTriggers.C:257
 MakeEvaluateTriggers.C:258
 MakeEvaluateTriggers.C:259
 MakeEvaluateTriggers.C:260
 MakeEvaluateTriggers.C:261
 MakeEvaluateTriggers.C:262
 MakeEvaluateTriggers.C:263
 MakeEvaluateTriggers.C:264
 MakeEvaluateTriggers.C:265
 MakeEvaluateTriggers.C:266
 MakeEvaluateTriggers.C:267
 MakeEvaluateTriggers.C:268
 MakeEvaluateTriggers.C:269
 MakeEvaluateTriggers.C:270
 MakeEvaluateTriggers.C:271
 MakeEvaluateTriggers.C:272
 MakeEvaluateTriggers.C:273
 MakeEvaluateTriggers.C:274
 MakeEvaluateTriggers.C:275
 MakeEvaluateTriggers.C:276
 MakeEvaluateTriggers.C:277
 MakeEvaluateTriggers.C:278
 MakeEvaluateTriggers.C:279
 MakeEvaluateTriggers.C:280
 MakeEvaluateTriggers.C:281
 MakeEvaluateTriggers.C:282
 MakeEvaluateTriggers.C:283
 MakeEvaluateTriggers.C:284
 MakeEvaluateTriggers.C:285
 MakeEvaluateTriggers.C:286
 MakeEvaluateTriggers.C:287
 MakeEvaluateTriggers.C:288
 MakeEvaluateTriggers.C:289
 MakeEvaluateTriggers.C:290
 MakeEvaluateTriggers.C:291
 MakeEvaluateTriggers.C:292
 MakeEvaluateTriggers.C:293
 MakeEvaluateTriggers.C:294
 MakeEvaluateTriggers.C:295
 MakeEvaluateTriggers.C:296
 MakeEvaluateTriggers.C:297
 MakeEvaluateTriggers.C:298
 MakeEvaluateTriggers.C:299
 MakeEvaluateTriggers.C:300
 MakeEvaluateTriggers.C:301
 MakeEvaluateTriggers.C:302
 MakeEvaluateTriggers.C:303
 MakeEvaluateTriggers.C:304
 MakeEvaluateTriggers.C:305
 MakeEvaluateTriggers.C:306
 MakeEvaluateTriggers.C:307
 MakeEvaluateTriggers.C:308
 MakeEvaluateTriggers.C:309
 MakeEvaluateTriggers.C:310
 MakeEvaluateTriggers.C:311
 MakeEvaluateTriggers.C:312
 MakeEvaluateTriggers.C:313
 MakeEvaluateTriggers.C:314
 MakeEvaluateTriggers.C:315
 MakeEvaluateTriggers.C:316
 MakeEvaluateTriggers.C:317
 MakeEvaluateTriggers.C:318
 MakeEvaluateTriggers.C:319
 MakeEvaluateTriggers.C:320
 MakeEvaluateTriggers.C:321
 MakeEvaluateTriggers.C:322
 MakeEvaluateTriggers.C:323
 MakeEvaluateTriggers.C:324
 MakeEvaluateTriggers.C:325
 MakeEvaluateTriggers.C:326
 MakeEvaluateTriggers.C:327
 MakeEvaluateTriggers.C:328
 MakeEvaluateTriggers.C:329
 MakeEvaluateTriggers.C:330
 MakeEvaluateTriggers.C:331
 MakeEvaluateTriggers.C:332
 MakeEvaluateTriggers.C:333
 MakeEvaluateTriggers.C:334
 MakeEvaluateTriggers.C:335
 MakeEvaluateTriggers.C:336
 MakeEvaluateTriggers.C:337
 MakeEvaluateTriggers.C:338
 MakeEvaluateTriggers.C:339
 MakeEvaluateTriggers.C:340
 MakeEvaluateTriggers.C:341
 MakeEvaluateTriggers.C:342
 MakeEvaluateTriggers.C:343
 MakeEvaluateTriggers.C:344
 MakeEvaluateTriggers.C:345
 MakeEvaluateTriggers.C:346
 MakeEvaluateTriggers.C:347
 MakeEvaluateTriggers.C:348
 MakeEvaluateTriggers.C:349
 MakeEvaluateTriggers.C:350
 MakeEvaluateTriggers.C:351
 MakeEvaluateTriggers.C:352
 MakeEvaluateTriggers.C:353
 MakeEvaluateTriggers.C:354
 MakeEvaluateTriggers.C:355
 MakeEvaluateTriggers.C:356
 MakeEvaluateTriggers.C:357
 MakeEvaluateTriggers.C:358
 MakeEvaluateTriggers.C:359
 MakeEvaluateTriggers.C:360
 MakeEvaluateTriggers.C:361
 MakeEvaluateTriggers.C:362
 MakeEvaluateTriggers.C:363
 MakeEvaluateTriggers.C:364
 MakeEvaluateTriggers.C:365
 MakeEvaluateTriggers.C:366
 MakeEvaluateTriggers.C:367
 MakeEvaluateTriggers.C:368
 MakeEvaluateTriggers.C:369
 MakeEvaluateTriggers.C:370
 MakeEvaluateTriggers.C:371
 MakeEvaluateTriggers.C:372
 MakeEvaluateTriggers.C:373
 MakeEvaluateTriggers.C:374
 MakeEvaluateTriggers.C:375
 MakeEvaluateTriggers.C:376
 MakeEvaluateTriggers.C:377
 MakeEvaluateTriggers.C:378
 MakeEvaluateTriggers.C:379
 MakeEvaluateTriggers.C:380
 MakeEvaluateTriggers.C:381
 MakeEvaluateTriggers.C:382
 MakeEvaluateTriggers.C:383
 MakeEvaluateTriggers.C:384
 MakeEvaluateTriggers.C:385
 MakeEvaluateTriggers.C:386
 MakeEvaluateTriggers.C:387
 MakeEvaluateTriggers.C:388
 MakeEvaluateTriggers.C:389
 MakeEvaluateTriggers.C:390
 MakeEvaluateTriggers.C:391
 MakeEvaluateTriggers.C:392
 MakeEvaluateTriggers.C:393
 MakeEvaluateTriggers.C:394
 MakeEvaluateTriggers.C:395
 MakeEvaluateTriggers.C:396
 MakeEvaluateTriggers.C:397
 MakeEvaluateTriggers.C:398
 MakeEvaluateTriggers.C:399
 MakeEvaluateTriggers.C:400
 MakeEvaluateTriggers.C:401
 MakeEvaluateTriggers.C:402
 MakeEvaluateTriggers.C:403
 MakeEvaluateTriggers.C:404
 MakeEvaluateTriggers.C:405
 MakeEvaluateTriggers.C:406
 MakeEvaluateTriggers.C:407
 MakeEvaluateTriggers.C:408
 MakeEvaluateTriggers.C:409
 MakeEvaluateTriggers.C:410
 MakeEvaluateTriggers.C:411
 MakeEvaluateTriggers.C:412
 MakeEvaluateTriggers.C:413
 MakeEvaluateTriggers.C:414
 MakeEvaluateTriggers.C:415
 MakeEvaluateTriggers.C:416
 MakeEvaluateTriggers.C:417
 MakeEvaluateTriggers.C:418
 MakeEvaluateTriggers.C:419
 MakeEvaluateTriggers.C:420
 MakeEvaluateTriggers.C:421
 MakeEvaluateTriggers.C:422
 MakeEvaluateTriggers.C:423
 MakeEvaluateTriggers.C:424
 MakeEvaluateTriggers.C:425
 MakeEvaluateTriggers.C:426
 MakeEvaluateTriggers.C:427
 MakeEvaluateTriggers.C:428
 MakeEvaluateTriggers.C:429
 MakeEvaluateTriggers.C:430
 MakeEvaluateTriggers.C:431
 MakeEvaluateTriggers.C:432
 MakeEvaluateTriggers.C:433
 MakeEvaluateTriggers.C:434
 MakeEvaluateTriggers.C:435
 MakeEvaluateTriggers.C:436
 MakeEvaluateTriggers.C:437
 MakeEvaluateTriggers.C:438
 MakeEvaluateTriggers.C:439
 MakeEvaluateTriggers.C:440
 MakeEvaluateTriggers.C:441
 MakeEvaluateTriggers.C:442
 MakeEvaluateTriggers.C:443
 MakeEvaluateTriggers.C:444
 MakeEvaluateTriggers.C:445
 MakeEvaluateTriggers.C:446
 MakeEvaluateTriggers.C:447
 MakeEvaluateTriggers.C:448
 MakeEvaluateTriggers.C:449
 MakeEvaluateTriggers.C:450
 MakeEvaluateTriggers.C:451
 MakeEvaluateTriggers.C:452
 MakeEvaluateTriggers.C:453
 MakeEvaluateTriggers.C:454
 MakeEvaluateTriggers.C:455
 MakeEvaluateTriggers.C:456
 MakeEvaluateTriggers.C:457
 MakeEvaluateTriggers.C:458
 MakeEvaluateTriggers.C:459
 MakeEvaluateTriggers.C:460
 MakeEvaluateTriggers.C:461
 MakeEvaluateTriggers.C:462
 MakeEvaluateTriggers.C:463
 MakeEvaluateTriggers.C:464
 MakeEvaluateTriggers.C:465
 MakeEvaluateTriggers.C:466
 MakeEvaluateTriggers.C:467
 MakeEvaluateTriggers.C:468
 MakeEvaluateTriggers.C:469
 MakeEvaluateTriggers.C:470
 MakeEvaluateTriggers.C:471
 MakeEvaluateTriggers.C:472
 MakeEvaluateTriggers.C:473
 MakeEvaluateTriggers.C:474
 MakeEvaluateTriggers.C:475
 MakeEvaluateTriggers.C:476
 MakeEvaluateTriggers.C:477
 MakeEvaluateTriggers.C:478
 MakeEvaluateTriggers.C:479
 MakeEvaluateTriggers.C:480
 MakeEvaluateTriggers.C:481
 MakeEvaluateTriggers.C:482
 MakeEvaluateTriggers.C:483
 MakeEvaluateTriggers.C:484
 MakeEvaluateTriggers.C:485
 MakeEvaluateTriggers.C:486
 MakeEvaluateTriggers.C:487
 MakeEvaluateTriggers.C:488
 MakeEvaluateTriggers.C:489
 MakeEvaluateTriggers.C:490
 MakeEvaluateTriggers.C:491
 MakeEvaluateTriggers.C:492
 MakeEvaluateTriggers.C:493
 MakeEvaluateTriggers.C:494
 MakeEvaluateTriggers.C:495
 MakeEvaluateTriggers.C:496
 MakeEvaluateTriggers.C:497
 MakeEvaluateTriggers.C:498
 MakeEvaluateTriggers.C:499
 MakeEvaluateTriggers.C:500
 MakeEvaluateTriggers.C:501
 MakeEvaluateTriggers.C:502
 MakeEvaluateTriggers.C:503
 MakeEvaluateTriggers.C:504
 MakeEvaluateTriggers.C:505
 MakeEvaluateTriggers.C:506
 MakeEvaluateTriggers.C:507
 MakeEvaluateTriggers.C:508
 MakeEvaluateTriggers.C:509
 MakeEvaluateTriggers.C:510
 MakeEvaluateTriggers.C:511
 MakeEvaluateTriggers.C:512
 MakeEvaluateTriggers.C:513
 MakeEvaluateTriggers.C:514
 MakeEvaluateTriggers.C:515
 MakeEvaluateTriggers.C:516
 MakeEvaluateTriggers.C:517
 MakeEvaluateTriggers.C:518
 MakeEvaluateTriggers.C:519
 MakeEvaluateTriggers.C:520
 MakeEvaluateTriggers.C:521
 MakeEvaluateTriggers.C:522
 MakeEvaluateTriggers.C:523
 MakeEvaluateTriggers.C:524
 MakeEvaluateTriggers.C:525
 MakeEvaluateTriggers.C:526
 MakeEvaluateTriggers.C:527
 MakeEvaluateTriggers.C:528
 MakeEvaluateTriggers.C:529
 MakeEvaluateTriggers.C:530
 MakeEvaluateTriggers.C:531
 MakeEvaluateTriggers.C:532
 MakeEvaluateTriggers.C:533
 MakeEvaluateTriggers.C:534
 MakeEvaluateTriggers.C:535
 MakeEvaluateTriggers.C:536
 MakeEvaluateTriggers.C:537
 MakeEvaluateTriggers.C:538
 MakeEvaluateTriggers.C:539
 MakeEvaluateTriggers.C:540
 MakeEvaluateTriggers.C:541
 MakeEvaluateTriggers.C:542
 MakeEvaluateTriggers.C:543
 MakeEvaluateTriggers.C:544
 MakeEvaluateTriggers.C:545
 MakeEvaluateTriggers.C:546
 MakeEvaluateTriggers.C:547
 MakeEvaluateTriggers.C:548
 MakeEvaluateTriggers.C:549
 MakeEvaluateTriggers.C:550
 MakeEvaluateTriggers.C:551
 MakeEvaluateTriggers.C:552
 MakeEvaluateTriggers.C:553
 MakeEvaluateTriggers.C:554
 MakeEvaluateTriggers.C:555
 MakeEvaluateTriggers.C:556
 MakeEvaluateTriggers.C:557
 MakeEvaluateTriggers.C:558
 MakeEvaluateTriggers.C:559
 MakeEvaluateTriggers.C:560
 MakeEvaluateTriggers.C:561
 MakeEvaluateTriggers.C:562
 MakeEvaluateTriggers.C:563
 MakeEvaluateTriggers.C:564
 MakeEvaluateTriggers.C:565
 MakeEvaluateTriggers.C:566
 MakeEvaluateTriggers.C:567
 MakeEvaluateTriggers.C:568
 MakeEvaluateTriggers.C:569
 MakeEvaluateTriggers.C:570
 MakeEvaluateTriggers.C:571
 MakeEvaluateTriggers.C:572
 MakeEvaluateTriggers.C:573
 MakeEvaluateTriggers.C:574
 MakeEvaluateTriggers.C:575
 MakeEvaluateTriggers.C:576
 MakeEvaluateTriggers.C:577
 MakeEvaluateTriggers.C:578
 MakeEvaluateTriggers.C:579
 MakeEvaluateTriggers.C:580
 MakeEvaluateTriggers.C:581
 MakeEvaluateTriggers.C:582
 MakeEvaluateTriggers.C:583
 MakeEvaluateTriggers.C:584
 MakeEvaluateTriggers.C:585
 MakeEvaluateTriggers.C:586
 MakeEvaluateTriggers.C:587
 MakeEvaluateTriggers.C:588
 MakeEvaluateTriggers.C:589
 MakeEvaluateTriggers.C:590
 MakeEvaluateTriggers.C:591
 MakeEvaluateTriggers.C:592
 MakeEvaluateTriggers.C:593
 MakeEvaluateTriggers.C:594
 MakeEvaluateTriggers.C:595
 MakeEvaluateTriggers.C:596
 MakeEvaluateTriggers.C:597
 MakeEvaluateTriggers.C:598
 MakeEvaluateTriggers.C:599
 MakeEvaluateTriggers.C:600
 MakeEvaluateTriggers.C:601
 MakeEvaluateTriggers.C:602
 MakeEvaluateTriggers.C:603
 MakeEvaluateTriggers.C:604
 MakeEvaluateTriggers.C:605
 MakeEvaluateTriggers.C:606
 MakeEvaluateTriggers.C:607
 MakeEvaluateTriggers.C:608
 MakeEvaluateTriggers.C:609
 MakeEvaluateTriggers.C:610
 MakeEvaluateTriggers.C:611
 MakeEvaluateTriggers.C:612
 MakeEvaluateTriggers.C:613
 MakeEvaluateTriggers.C:614
 MakeEvaluateTriggers.C:615
 MakeEvaluateTriggers.C:616
 MakeEvaluateTriggers.C:617
 MakeEvaluateTriggers.C:618
 MakeEvaluateTriggers.C:619
 MakeEvaluateTriggers.C:620
 MakeEvaluateTriggers.C:621
 MakeEvaluateTriggers.C:622
 MakeEvaluateTriggers.C:623
 MakeEvaluateTriggers.C:624
 MakeEvaluateTriggers.C:625
 MakeEvaluateTriggers.C:626
 MakeEvaluateTriggers.C:627
 MakeEvaluateTriggers.C:628
 MakeEvaluateTriggers.C:629
 MakeEvaluateTriggers.C:630
 MakeEvaluateTriggers.C:631
 MakeEvaluateTriggers.C:632
 MakeEvaluateTriggers.C:633
 MakeEvaluateTriggers.C:634
 MakeEvaluateTriggers.C:635
 MakeEvaluateTriggers.C:636
 MakeEvaluateTriggers.C:637
 MakeEvaluateTriggers.C:638
 MakeEvaluateTriggers.C:639
 MakeEvaluateTriggers.C:640
 MakeEvaluateTriggers.C:641
 MakeEvaluateTriggers.C:642
 MakeEvaluateTriggers.C:643
 MakeEvaluateTriggers.C:644
 MakeEvaluateTriggers.C:645
 MakeEvaluateTriggers.C:646
 MakeEvaluateTriggers.C:647
 MakeEvaluateTriggers.C:648
 MakeEvaluateTriggers.C:649
 MakeEvaluateTriggers.C:650
 MakeEvaluateTriggers.C:651
 MakeEvaluateTriggers.C:652
 MakeEvaluateTriggers.C:653
 MakeEvaluateTriggers.C:654
 MakeEvaluateTriggers.C:655
 MakeEvaluateTriggers.C:656
 MakeEvaluateTriggers.C:657
 MakeEvaluateTriggers.C:658
 MakeEvaluateTriggers.C:659
 MakeEvaluateTriggers.C:660
 MakeEvaluateTriggers.C:661
 MakeEvaluateTriggers.C:662
 MakeEvaluateTriggers.C:663
 MakeEvaluateTriggers.C:664
 MakeEvaluateTriggers.C:665
 MakeEvaluateTriggers.C:666
 MakeEvaluateTriggers.C:667
 MakeEvaluateTriggers.C:668
 MakeEvaluateTriggers.C:669
 MakeEvaluateTriggers.C:670
 MakeEvaluateTriggers.C:671
 MakeEvaluateTriggers.C:672
 MakeEvaluateTriggers.C:673
 MakeEvaluateTriggers.C:674
 MakeEvaluateTriggers.C:675
 MakeEvaluateTriggers.C:676
 MakeEvaluateTriggers.C:677
 MakeEvaluateTriggers.C:678
 MakeEvaluateTriggers.C:679
 MakeEvaluateTriggers.C:680
 MakeEvaluateTriggers.C:681
 MakeEvaluateTriggers.C:682
 MakeEvaluateTriggers.C:683
 MakeEvaluateTriggers.C:684
 MakeEvaluateTriggers.C:685
 MakeEvaluateTriggers.C:686
 MakeEvaluateTriggers.C:687
 MakeEvaluateTriggers.C:688
 MakeEvaluateTriggers.C:689
 MakeEvaluateTriggers.C:690
 MakeEvaluateTriggers.C:691
 MakeEvaluateTriggers.C:692
 MakeEvaluateTriggers.C:693
 MakeEvaluateTriggers.C:694
 MakeEvaluateTriggers.C:695
 MakeEvaluateTriggers.C:696
 MakeEvaluateTriggers.C:697
 MakeEvaluateTriggers.C:698
 MakeEvaluateTriggers.C:699
 MakeEvaluateTriggers.C:700
 MakeEvaluateTriggers.C:701
 MakeEvaluateTriggers.C:702
 MakeEvaluateTriggers.C:703
 MakeEvaluateTriggers.C:704
 MakeEvaluateTriggers.C:705
 MakeEvaluateTriggers.C:706
 MakeEvaluateTriggers.C:707
 MakeEvaluateTriggers.C:708
 MakeEvaluateTriggers.C:709
 MakeEvaluateTriggers.C:710
 MakeEvaluateTriggers.C:711
 MakeEvaluateTriggers.C:712
 MakeEvaluateTriggers.C:713
 MakeEvaluateTriggers.C:714
 MakeEvaluateTriggers.C:715
 MakeEvaluateTriggers.C:716
 MakeEvaluateTriggers.C:717
 MakeEvaluateTriggers.C:718
 MakeEvaluateTriggers.C:719
 MakeEvaluateTriggers.C:720
 MakeEvaluateTriggers.C:721
 MakeEvaluateTriggers.C:722
 MakeEvaluateTriggers.C:723
 MakeEvaluateTriggers.C:724
 MakeEvaluateTriggers.C:725
 MakeEvaluateTriggers.C:726
 MakeEvaluateTriggers.C:727
 MakeEvaluateTriggers.C:728
 MakeEvaluateTriggers.C:729
 MakeEvaluateTriggers.C:730
 MakeEvaluateTriggers.C:731
 MakeEvaluateTriggers.C:732
 MakeEvaluateTriggers.C:733
 MakeEvaluateTriggers.C:734
 MakeEvaluateTriggers.C:735
 MakeEvaluateTriggers.C:736
 MakeEvaluateTriggers.C:737
 MakeEvaluateTriggers.C:738
 MakeEvaluateTriggers.C:739
 MakeEvaluateTriggers.C:740
 MakeEvaluateTriggers.C:741
 MakeEvaluateTriggers.C:742
 MakeEvaluateTriggers.C:743
 MakeEvaluateTriggers.C:744
 MakeEvaluateTriggers.C:745
 MakeEvaluateTriggers.C:746
 MakeEvaluateTriggers.C:747
 MakeEvaluateTriggers.C:748
 MakeEvaluateTriggers.C:749
 MakeEvaluateTriggers.C:750
 MakeEvaluateTriggers.C:751
 MakeEvaluateTriggers.C:752
 MakeEvaluateTriggers.C:753
 MakeEvaluateTriggers.C:754
 MakeEvaluateTriggers.C:755
 MakeEvaluateTriggers.C:756
 MakeEvaluateTriggers.C:757
 MakeEvaluateTriggers.C:758
 MakeEvaluateTriggers.C:759
 MakeEvaluateTriggers.C:760
 MakeEvaluateTriggers.C:761
 MakeEvaluateTriggers.C:762
 MakeEvaluateTriggers.C:763
 MakeEvaluateTriggers.C:764
 MakeEvaluateTriggers.C:765
 MakeEvaluateTriggers.C:766
 MakeEvaluateTriggers.C:767
 MakeEvaluateTriggers.C:768
 MakeEvaluateTriggers.C:769
 MakeEvaluateTriggers.C:770
 MakeEvaluateTriggers.C:771
 MakeEvaluateTriggers.C:772
 MakeEvaluateTriggers.C:773
 MakeEvaluateTriggers.C:774
 MakeEvaluateTriggers.C:775
 MakeEvaluateTriggers.C:776
 MakeEvaluateTriggers.C:777
 MakeEvaluateTriggers.C:778
 MakeEvaluateTriggers.C:779
 MakeEvaluateTriggers.C:780
 MakeEvaluateTriggers.C:781
 MakeEvaluateTriggers.C:782
 MakeEvaluateTriggers.C:783
 MakeEvaluateTriggers.C:784
 MakeEvaluateTriggers.C:785
 MakeEvaluateTriggers.C:786
 MakeEvaluateTriggers.C:787
 MakeEvaluateTriggers.C:788
 MakeEvaluateTriggers.C:789
 MakeEvaluateTriggers.C:790
 MakeEvaluateTriggers.C:791
 MakeEvaluateTriggers.C:792
 MakeEvaluateTriggers.C:793
 MakeEvaluateTriggers.C:794
 MakeEvaluateTriggers.C:795
 MakeEvaluateTriggers.C:796
 MakeEvaluateTriggers.C:797
 MakeEvaluateTriggers.C:798
 MakeEvaluateTriggers.C:799
 MakeEvaluateTriggers.C:800
 MakeEvaluateTriggers.C:801
 MakeEvaluateTriggers.C:802
 MakeEvaluateTriggers.C:803
 MakeEvaluateTriggers.C:804
 MakeEvaluateTriggers.C:805
 MakeEvaluateTriggers.C:806
 MakeEvaluateTriggers.C:807
 MakeEvaluateTriggers.C:808
 MakeEvaluateTriggers.C:809
 MakeEvaluateTriggers.C:810
 MakeEvaluateTriggers.C:811
 MakeEvaluateTriggers.C:812
 MakeEvaluateTriggers.C:813
 MakeEvaluateTriggers.C:814
 MakeEvaluateTriggers.C:815
 MakeEvaluateTriggers.C:816
 MakeEvaluateTriggers.C:817
 MakeEvaluateTriggers.C:818
 MakeEvaluateTriggers.C:819
 MakeEvaluateTriggers.C:820
 MakeEvaluateTriggers.C:821
 MakeEvaluateTriggers.C:822
 MakeEvaluateTriggers.C:823
 MakeEvaluateTriggers.C:824
 MakeEvaluateTriggers.C:825
 MakeEvaluateTriggers.C:826
 MakeEvaluateTriggers.C:827
 MakeEvaluateTriggers.C:828
 MakeEvaluateTriggers.C:829
 MakeEvaluateTriggers.C:830
 MakeEvaluateTriggers.C:831
 MakeEvaluateTriggers.C:832
 MakeEvaluateTriggers.C:833
 MakeEvaluateTriggers.C:834
 MakeEvaluateTriggers.C:835
 MakeEvaluateTriggers.C:836
 MakeEvaluateTriggers.C:837
 MakeEvaluateTriggers.C:838
 MakeEvaluateTriggers.C:839
 MakeEvaluateTriggers.C:840
 MakeEvaluateTriggers.C:841
 MakeEvaluateTriggers.C:842
 MakeEvaluateTriggers.C:843
 MakeEvaluateTriggers.C:844
 MakeEvaluateTriggers.C:845
 MakeEvaluateTriggers.C:846
 MakeEvaluateTriggers.C:847
 MakeEvaluateTriggers.C:848
 MakeEvaluateTriggers.C:849
 MakeEvaluateTriggers.C:850
 MakeEvaluateTriggers.C:851
 MakeEvaluateTriggers.C:852
 MakeEvaluateTriggers.C:853
 MakeEvaluateTriggers.C:854
 MakeEvaluateTriggers.C:855
 MakeEvaluateTriggers.C:856
 MakeEvaluateTriggers.C:857
 MakeEvaluateTriggers.C:858
 MakeEvaluateTriggers.C:859
 MakeEvaluateTriggers.C:860
 MakeEvaluateTriggers.C:861
 MakeEvaluateTriggers.C:862
 MakeEvaluateTriggers.C:863
 MakeEvaluateTriggers.C:864
 MakeEvaluateTriggers.C:865
 MakeEvaluateTriggers.C:866
 MakeEvaluateTriggers.C:867
 MakeEvaluateTriggers.C:868
 MakeEvaluateTriggers.C:869
 MakeEvaluateTriggers.C:870
 MakeEvaluateTriggers.C:871
 MakeEvaluateTriggers.C:872
 MakeEvaluateTriggers.C:873
 MakeEvaluateTriggers.C:874
 MakeEvaluateTriggers.C:875
 MakeEvaluateTriggers.C:876
 MakeEvaluateTriggers.C:877
 MakeEvaluateTriggers.C:878
 MakeEvaluateTriggers.C:879
 MakeEvaluateTriggers.C:880
 MakeEvaluateTriggers.C:881
 MakeEvaluateTriggers.C:882
 MakeEvaluateTriggers.C:883
 MakeEvaluateTriggers.C:884
 MakeEvaluateTriggers.C:885
 MakeEvaluateTriggers.C:886
 MakeEvaluateTriggers.C:887
 MakeEvaluateTriggers.C:888
 MakeEvaluateTriggers.C:889
 MakeEvaluateTriggers.C:890
 MakeEvaluateTriggers.C:891
 MakeEvaluateTriggers.C:892
 MakeEvaluateTriggers.C:893
 MakeEvaluateTriggers.C:894
 MakeEvaluateTriggers.C:895
 MakeEvaluateTriggers.C:896
 MakeEvaluateTriggers.C:897
 MakeEvaluateTriggers.C:898
 MakeEvaluateTriggers.C:899
 MakeEvaluateTriggers.C:900
 MakeEvaluateTriggers.C:901
 MakeEvaluateTriggers.C:902
 MakeEvaluateTriggers.C:903
 MakeEvaluateTriggers.C:904
 MakeEvaluateTriggers.C:905
 MakeEvaluateTriggers.C:906
 MakeEvaluateTriggers.C:907
 MakeEvaluateTriggers.C:908
 MakeEvaluateTriggers.C:909
 MakeEvaluateTriggers.C:910
 MakeEvaluateTriggers.C:911
 MakeEvaluateTriggers.C:912
 MakeEvaluateTriggers.C:913
 MakeEvaluateTriggers.C:914
 MakeEvaluateTriggers.C:915
 MakeEvaluateTriggers.C:916
 MakeEvaluateTriggers.C:917
 MakeEvaluateTriggers.C:918
 MakeEvaluateTriggers.C:919
 MakeEvaluateTriggers.C:920
 MakeEvaluateTriggers.C:921
 MakeEvaluateTriggers.C:922
 MakeEvaluateTriggers.C:923
 MakeEvaluateTriggers.C:924
 MakeEvaluateTriggers.C:925
 MakeEvaluateTriggers.C:926
 MakeEvaluateTriggers.C:927
 MakeEvaluateTriggers.C:928
 MakeEvaluateTriggers.C:929
 MakeEvaluateTriggers.C:930
 MakeEvaluateTriggers.C:931
 MakeEvaluateTriggers.C:932
 MakeEvaluateTriggers.C:933
 MakeEvaluateTriggers.C:934
 MakeEvaluateTriggers.C:935
 MakeEvaluateTriggers.C:936
 MakeEvaluateTriggers.C:937
 MakeEvaluateTriggers.C:938
 MakeEvaluateTriggers.C:939
 MakeEvaluateTriggers.C:940
 MakeEvaluateTriggers.C:941
 MakeEvaluateTriggers.C:942
 MakeEvaluateTriggers.C:943
 MakeEvaluateTriggers.C:944
 MakeEvaluateTriggers.C:945
 MakeEvaluateTriggers.C:946
 MakeEvaluateTriggers.C:947
 MakeEvaluateTriggers.C:948
 MakeEvaluateTriggers.C:949
 MakeEvaluateTriggers.C:950
 MakeEvaluateTriggers.C:951
 MakeEvaluateTriggers.C:952
 MakeEvaluateTriggers.C:953
 MakeEvaluateTriggers.C:954
 MakeEvaluateTriggers.C:955
 MakeEvaluateTriggers.C:956
 MakeEvaluateTriggers.C:957
 MakeEvaluateTriggers.C:958
 MakeEvaluateTriggers.C:959
 MakeEvaluateTriggers.C:960
 MakeEvaluateTriggers.C:961
 MakeEvaluateTriggers.C:962
 MakeEvaluateTriggers.C:963
 MakeEvaluateTriggers.C:964
 MakeEvaluateTriggers.C:965
 MakeEvaluateTriggers.C:966
 MakeEvaluateTriggers.C:967
 MakeEvaluateTriggers.C:968
 MakeEvaluateTriggers.C:969
 MakeEvaluateTriggers.C:970
 MakeEvaluateTriggers.C:971
 MakeEvaluateTriggers.C:972
 MakeEvaluateTriggers.C:973
 MakeEvaluateTriggers.C:974
 MakeEvaluateTriggers.C:975
 MakeEvaluateTriggers.C:976
 MakeEvaluateTriggers.C:977
 MakeEvaluateTriggers.C:978
 MakeEvaluateTriggers.C:979
 MakeEvaluateTriggers.C:980
 MakeEvaluateTriggers.C:981
 MakeEvaluateTriggers.C:982
 MakeEvaluateTriggers.C:983
 MakeEvaluateTriggers.C:984
 MakeEvaluateTriggers.C:985
 MakeEvaluateTriggers.C:986
 MakeEvaluateTriggers.C:987
 MakeEvaluateTriggers.C:988
 MakeEvaluateTriggers.C:989
 MakeEvaluateTriggers.C:990
 MakeEvaluateTriggers.C:991
 MakeEvaluateTriggers.C:992
 MakeEvaluateTriggers.C:993
 MakeEvaluateTriggers.C:994
 MakeEvaluateTriggers.C:995
 MakeEvaluateTriggers.C:996
 MakeEvaluateTriggers.C:997
 MakeEvaluateTriggers.C:998
 MakeEvaluateTriggers.C:999
 MakeEvaluateTriggers.C:1000
 MakeEvaluateTriggers.C:1001
 MakeEvaluateTriggers.C:1002
 MakeEvaluateTriggers.C:1003
 MakeEvaluateTriggers.C:1004
 MakeEvaluateTriggers.C:1005
 MakeEvaluateTriggers.C:1006
 MakeEvaluateTriggers.C:1007
 MakeEvaluateTriggers.C:1008
 MakeEvaluateTriggers.C:1009
 MakeEvaluateTriggers.C:1010
 MakeEvaluateTriggers.C:1011
 MakeEvaluateTriggers.C:1012
 MakeEvaluateTriggers.C:1013
 MakeEvaluateTriggers.C:1014
 MakeEvaluateTriggers.C:1015
 MakeEvaluateTriggers.C:1016
 MakeEvaluateTriggers.C:1017
 MakeEvaluateTriggers.C:1018
 MakeEvaluateTriggers.C:1019
 MakeEvaluateTriggers.C:1020
 MakeEvaluateTriggers.C:1021
 MakeEvaluateTriggers.C:1022
 MakeEvaluateTriggers.C:1023
 MakeEvaluateTriggers.C:1024
 MakeEvaluateTriggers.C:1025
 MakeEvaluateTriggers.C:1026
 MakeEvaluateTriggers.C:1027
 MakeEvaluateTriggers.C:1028
 MakeEvaluateTriggers.C:1029
 MakeEvaluateTriggers.C:1030
 MakeEvaluateTriggers.C:1031
 MakeEvaluateTriggers.C:1032
 MakeEvaluateTriggers.C:1033
 MakeEvaluateTriggers.C:1034
 MakeEvaluateTriggers.C:1035
 MakeEvaluateTriggers.C:1036
 MakeEvaluateTriggers.C:1037
 MakeEvaluateTriggers.C:1038
 MakeEvaluateTriggers.C:1039
 MakeEvaluateTriggers.C:1040
 MakeEvaluateTriggers.C:1041
 MakeEvaluateTriggers.C:1042
 MakeEvaluateTriggers.C:1043
 MakeEvaluateTriggers.C:1044
 MakeEvaluateTriggers.C:1045
 MakeEvaluateTriggers.C:1046
 MakeEvaluateTriggers.C:1047
 MakeEvaluateTriggers.C:1048
 MakeEvaluateTriggers.C:1049
 MakeEvaluateTriggers.C:1050
 MakeEvaluateTriggers.C:1051
 MakeEvaluateTriggers.C:1052
 MakeEvaluateTriggers.C:1053
 MakeEvaluateTriggers.C:1054
 MakeEvaluateTriggers.C:1055
 MakeEvaluateTriggers.C:1056
 MakeEvaluateTriggers.C:1057
 MakeEvaluateTriggers.C:1058
 MakeEvaluateTriggers.C:1059
 MakeEvaluateTriggers.C:1060