ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
using namespace std;
#include "iostream"

#include <TStopwatch.h>
#include <TStyle.h>
#include <TFile.h>
#include <TH1F.h>
#include <TH2F.h>
#include <TString.h>
#include <TCanvas.h>
#include <TSystem.h>
#include <TGrid.h>
#include <TMath.h>

#include "AliRawReader.h"
#include "AliCaloRawStreamV3.h"
#include "AliLog.h"
#include "AliCentralTrigger.h"
#include "AliTriggerConfiguration.h"
#include "AliTriggerClass.h"
#include "AliCDBManager.h"

#endif

//-----------------------------------------------------------------------------
static Bool_t              firstEvent = kTRUE;
static Int_t               runNum;
static UInt_t              period;
static UInt_t              orbitID;
static UInt_t              bcID;
static AliRawReader       *reader;
TString GetTriggerClass(ULong64_t);

//-----------------------------------------------------------------------------
void Pedestals(const TString rawFile= "", const char *selectTrigger="CPHI")
{
  // Read raw data, decode it to samples,
  // calculate pedestals from presamples, 
  // evaluate the signal amplitude as a maximum sample, 
  // and fill histograms with pedestals and amplitudes
  // This script should be compiled to speed up the data processing:
  // .L Pedestals.C++
  //___
  // Yuri Kharlov. 6 September 2007

  TStopwatch stopwatch;
  stopwatch.Start();
  
  if (rawFile.BeginsWith("alien://")) {
    TGrid::Connect("alien://");
  }

  AliCDBManager *man = AliCDBManager::Instance();
  man->SetDefaultStorage("raw://");

  reader = AliRawReader::Create(rawFile);
  reader->Reset();

  TStopwatch timer;
  timer.Start();

  AliCaloRawStreamV3 *stream = new AliCaloRawStreamV3(reader,"PHOS");

  TString baseNamePed ="hPed";
  TString baseTitlePed="Ped in cell (";
  const char* sgain[3]={"LG","HG", "TRU"};

  const Int_t caloFlagMax=2,modMax=5,cellXMax=64,cellZMax=56;
  Int_t module,caloFlag,cellX,cellZ;
  TH1F *hPed[5][2][64][56];
  for (module=0; module<modMax; module++) {
    for (caloFlag=0; caloFlag<caloFlagMax; caloFlag++) {
      for (cellX=0; cellX<cellXMax; cellX++) {
	for (cellZ=0; cellZ<cellZMax; cellZ++) {
	  hPed[module][caloFlag][cellX][cellZ] = 0;
	}
      }
    }
  }
  TH1F *hPedHiMean1m2 = new TH1F("hPedHiMean1m2","Mean pedestals in module 2, high gain" ,100,0.,100.);
  TH1F *hPedHiRMS1m2  = new TH1F("hPedHiRMS1m2" ,"RMS pedestals in module 2, high gain"  ,100,0.,50.);
  TH1F *hPedLoMean1m2 = new TH1F("hPedLoMean1m2","Mean pedestals in module 2, low gain"  ,100,0.,100.);
  TH1F *hPedLoRMS1m2  = new TH1F("hPedLoRMS1m2" ,"RMS pedestals in module 2, low gain"   ,100,0.,50.);
  TH1F *hPedTRUMean1m2 = new TH1F("hPedTRUMean1m2","Mean pedestals in module 2, TRU"     ,1000,0.,1000.);
  TH1F *hPedTRURMS1m2  = new TH1F("hPedTRURMS1m2" ,"RMS pedestals in module 2, TRU"      ,100,0.,50.);

  TH1F *hPedHiMean1m3 = new TH1F("hPedHiMean1m3","Mean pedestals in module 3, high gain" ,100,0.,100.);
  TH1F *hPedHiRMS1m3  = new TH1F("hPedHiRMS1m3" ,"RMS pedestals in module 3, high gain"  ,100,0.,50.);
  TH1F *hPedLoMean1m3 = new TH1F("hPedLoMean1m3","Mean pedestals in module 3, low gain"  ,100,0.,100.);
  TH1F *hPedLoRMS1m3  = new TH1F("hPedLoRMS1m3" ,"RMS pedestals in module 3, low gain"   ,100,0.,50.);
  TH1F *hPedTRUMean1m3 = new TH1F("hPedTRUMean1m3","Mean pedestals in module 3, TRU"     ,1000,0.,1000.);
  TH1F *hPedTRURMS1m3  = new TH1F("hPedTRURMS1m3" ,"RMS pedestals in module 3, TRU"      ,100,0.,50.);

  TH1F *hPedHiMean1m4 = new TH1F("hPedHiMean1m4","Mean pedestals in module 4, high gain" ,100,0.,100.);
  TH1F *hPedHiRMS1m4  = new TH1F("hPedHiRMS1m4" ,"RMS pedestals in module 4, high gain"  ,100,0.,50.);
  TH1F *hPedLoMean1m4 = new TH1F("hPedLoMean1m4","Mean pedestals in module 4, low gain"  ,100,0.,100.);
  TH1F *hPedLoRMS1m4  = new TH1F("hPedLoRMS1m4" ,"RMS pedestals in module 4, low gain"   ,100,0.,50.);
  TH1F *hPedTRUMean1m4 = new TH1F("hPedTRUMean1m4","Mean pedestals in module 4, TRU"     ,1000,0.,1000.);
  TH1F *hPedTRURMS1m4  = new TH1F("hPedTRURMS1m4" ,"RMS pedestals in module 4, TRU"      ,100,0.,50.);

  hPedHiMean1m2->Sumw2();
  hPedHiRMS1m2 ->Sumw2();
  hPedLoMean1m2->Sumw2();
  hPedLoRMS1m2 ->Sumw2();
  hPedTRUMean1m2->Sumw2();
  hPedTRURMS1m2 ->Sumw2();
  hPedHiMean1m3->Sumw2();
  hPedHiRMS1m3 ->Sumw2();
  hPedLoMean1m3->Sumw2();
  hPedLoRMS1m3 ->Sumw2();
  hPedTRUMean1m3->Sumw2();
  hPedTRURMS1m3 ->Sumw2();
  hPedHiMean1m4->Sumw2();
  hPedHiRMS1m4 ->Sumw2();
  hPedLoMean1m4->Sumw2();
  hPedLoRMS1m4 ->Sumw2();
  hPedTRUMean1m4->Sumw2();
  hPedTRURMS1m4 ->Sumw2();

  TH2F *hPedHiMeanm2  = new TH2F("hPedHiMeanm2","Mean pedestals in module 2, high gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedHiRMSm2   = new TH2F("hPedHiRMSm2" ,"R.M.S. of pedestals in module 2, high gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedHiNumm2   = new TH2F("hPedHiNumm2" ,"Number of pedestals in module 2, high gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedLoMeanm2  = new TH2F("hPedLoMeanm2","Mean pedestals in module 2, low gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedLoRMSm2   = new TH2F("hPedLoRMSm2" ,"R.M.S. of pedestals in module 2, low gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedLoNumm2   = new TH2F("hPedLoNumm2" ,"Number of pedestals in module 2, low gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);

  TH2F *hPedHiMeanm3  = new TH2F("hPedHiMeanm3","Mean pedestals in module 3, high gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedHiRMSm3   = new TH2F("hPedHiRMSm3" ,"R.M.S. of pedestals in module 3, high gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedHiNumm3   = new TH2F("hPedHiNumm3" ,"Number of pedestals in module 3, high gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedLoMeanm3  = new TH2F("hPedLoMeanm3","Mean pedestals in module 3, low gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedLoRMSm3   = new TH2F("hPedLoRMSm3" ,"R.M.S. of pedestals in module 3, low gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedLoNumm3   = new TH2F("hPedLoNumm3" ,"Number of pedestals in module 3, low gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);

  TH2F *hPedHiMeanm4  = new TH2F("hPedHiMeanm4","Mean pedestals in module 4, high gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedHiRMSm4   = new TH2F("hPedHiRMSm4" ,"R.M.S. of pedestals in module 4, high gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedHiNumm4   = new TH2F("hPedHiNumm4" ,"Number of pedestals in module 4, high gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedLoMeanm4  = new TH2F("hPedLoMeanm4","Mean pedestals in module 4, low gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedLoRMSm4   = new TH2F("hPedLoRMSm4" ,"R.M.S. of pedestals in module 4, low gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
  TH2F *hPedLoNumm4   = new TH2F("hPedLoNumm4" ,"Number of pedestals in module 4, low gain",
			       cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);

  TH1I *hNBunches = new TH1I("hNBunches","Number of bunches",10,0,10);
  TH2I *hHWaddr   = new TH2I("hHWaddr","DDL is vs HW addr",216,0,216,4096,0,4096);
  TH1I *hModule   = new TH1I("hModule" ,"Module number", 5,0.,5);

  Int_t iEvent=0;
  runNum=0;

  while (reader->NextEvent()) {
    if (firstEvent) {
      firstEvent = kFALSE;
      runNum = reader->GetRunNumber();
      man = AliCDBManager::Instance();
      man ->SetRun(runNum);
    }
    ULong64_t triggerMask  = reader->GetClassMask();
    TString trclasses = GetTriggerClass(triggerMask);
    
    period  = reader->GetPeriod();
    orbitID = reader->GetOrbitID();
    bcID    = reader->GetBCID();
    iEvent++;
    if (!trclasses.Contains(selectTrigger)) continue;
    AliInfoGeneral("",Form("Reading event %d of type %d, time %d, trig.class \"%s\"",
			   iEvent,reader->GetType(), reader->GetTimestamp(), trclasses.Data()));
    while (stream->NextDDL()) {
      while (stream->NextChannel()) {
	module   =   stream->GetModule();   // [0-4]
	cellX    =   stream->GetCellX();    // [0-63]
	cellZ    =   stream->GetCellZ();    // [0-55]
	caloFlag =   stream->GetCaloFlag(); // [0-3]
 	if (caloFlag!=0 && caloFlag!=1) continue;
	if (module<0 || module>=modMax  || 
	    cellX<0  || cellX>=cellXMax || 
	    cellZ<0  || cellZ>=cellZMax) {
	  AliInfoGeneral("",Form("Wrong cell ID (m,x,z)=(%d,%d,%d)",module,cellX,cellZ));
	  break;
	}

	hHWaddr->Fill(stream->GetDDLNumber(),stream->GetHWAddress());
	hModule->Fill(module);
	if (hPed[module][caloFlag][cellX][cellZ] == 0) {
	  TString name  = baseNamePed;
	  TString title = baseTitlePed;
	  name +="_g"; name +=caloFlag;
	  name +="_m"; name +=module;
	  name +="_x"; name +=cellX;
	  name +="_z"; name +=cellZ;

	  title +=module; title +=",";
	  title +=cellX ; title +=",";
	  title +=cellZ ; title +="), ";
	  title +=sgain[caloFlag];

	  Int_t nx,xmin,xmax;
	  if (caloFlag==0 || caloFlag==1) {
	    nx=100;
	    xmin=0.;
	    xmax=100.;
	  }
	  else {
	    nx=1000;
	    xmin=0.;
	    xmax=1000.;
	  }
	  hPed[module][caloFlag][cellX][cellZ] = new TH1F(name,title,100,0.,100.);
	  hPed[module][caloFlag][cellX][cellZ]->Sumw2();
	  hPed[module][caloFlag][cellX][cellZ]->SetMarkerStyle(20);
	  hPed[module][caloFlag][cellX][cellZ]->SetOption("eph");
	}

	Int_t nBunches = 0;
	while (stream->NextBunch()) {
	  nBunches++;
	  const UShort_t *sig = stream->GetSignals();
	  Int_t sigLength = stream->GetBunchLength();
// 	  for (Int_t i = sigLength-70; i < sigLength; i++) {
	  for (Int_t i = 0; i < sigLength; i++) {
	    hPed[module][caloFlag][cellX][cellZ]->Fill(sig[i]);
	  }
	}
	hNBunches->Fill(nBunches);
      } // end of NextChannel()

    } // end of NextDDL()
  } // end of nextEvent()

  // Fill 2-dim histograms for mean, rms and n pedestals

  for (module=0; module<modMax; module++) {
    for (caloFlag=0; caloFlag<2; caloFlag++) {
      for (cellX=0; cellX<cellXMax; cellX++) {
	for (cellZ=0; cellZ<cellZMax; cellZ++) {
	  if (hPed[module][caloFlag][cellX][cellZ] != 0) {
	    if      (caloFlag == 0) {
	      if (module==2) {
		hPedLoMean1m2->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
		hPedLoRMS1m2 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
		hPedLoMeanm2 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetMean()    );
		hPedLoRMSm2  ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetRMS()     );
		hPedLoNumm2  ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetEntries() );
	      }
	      else if (module==3) {
		hPedLoMean1m3->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
		hPedLoRMS1m3 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
		hPedLoMeanm3 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetMean()    );
		hPedLoRMSm3  ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetRMS()     );
		hPedLoNumm3  ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetEntries() );
	      }
	      else if (module==4) {
		hPedLoMean1m4->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
		hPedLoRMS1m4 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
		hPedLoMeanm4 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetMean()    );
		hPedLoRMSm4  ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetRMS()     );
		hPedLoNumm4  ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetEntries() );
	      }
	    }
	    else if (caloFlag == 1) {
	      if (module==2) {
		hPedHiMean1m2->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
		hPedHiRMS1m2 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
		hPedHiMeanm2 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetMean()    );
		hPedHiRMSm2  ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetRMS()     );
		hPedHiNumm2  ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetEntries() );
	      }
	      if (module==3) {
		hPedHiMean1m3->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
		hPedHiRMS1m3 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
		hPedHiMeanm3 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetMean()    );
		hPedHiRMSm3  ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetRMS()     );
		hPedHiNumm3  ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetEntries() );
	      }
	      if (module==4) {
		hPedHiMean1m4->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
		hPedHiRMS1m4 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
		hPedHiMeanm4 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetMean()    );
		hPedHiRMSm4  ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetRMS()     );
		hPedHiNumm4  ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetEntries() );
	      }
	    }
	    else if (caloFlag == 2) {
	      if (module==2) {
		hPedTRUMean1m2->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
		hPedTRURMS1m2 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
	      }
	      if (module==3) {
		hPedTRUMean1m3->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
		hPedTRURMS1m3 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
	      }
	      if (module==4) {
		hPedTRUMean1m4->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
		hPedTRURMS1m4 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
	      }
	    }
	  }
	}
      }
    }
  }

  // Write existing histograms to a root file

  TString fileName = "ped";
  fileName += runNum;
  fileName += ".root";
  TFile *file = new TFile(fileName,"RECREATE");

  for (module=0; module<modMax; module++) {
    for (caloFlag=0; caloFlag<caloFlagMax; caloFlag++) {
      for (cellX=0; cellX<cellXMax; cellX++) {
	for (cellZ=0; cellZ<cellZMax; cellZ++) {
	  if (hPed[module][caloFlag][cellX][cellZ] != 0)
	    hPed[module][caloFlag][cellX][cellZ]->Write();
	}
      }
    }
  }

  hPedHiMean1m2->Write();
  hPedHiRMS1m2 ->Write();
  hPedLoMean1m2->Write();
  hPedLoRMS1m2 ->Write();
  hPedHiMeanm2 ->Write();
  hPedHiRMSm2  ->Write();
  hPedHiNumm2  ->Write();
  hPedLoMeanm2 ->Write();
  hPedLoRMSm2  ->Write();
  hPedLoNumm2  ->Write();
  hPedTRUMean1m2->Write();
  hPedTRURMS1m2 ->Write();
  
  hPedHiMean1m3->Write();
  hPedHiRMS1m3 ->Write();
  hPedLoMean1m3->Write();
  hPedLoRMS1m3 ->Write();
  hPedHiMeanm3 ->Write();
  hPedHiRMSm3  ->Write();
  hPedHiNumm3  ->Write();
  hPedLoMeanm3 ->Write();
  hPedLoRMSm3  ->Write();
  hPedLoNumm3  ->Write();
  hPedTRUMean1m3->Write();
  hPedTRURMS1m3 ->Write();

  hPedHiMean1m4->Write();
  hPedHiRMS1m4 ->Write();
  hPedLoMean1m4->Write();
  hPedLoRMS1m4 ->Write();
  hPedHiMeanm4 ->Write();
  hPedHiRMSm4  ->Write();
  hPedHiNumm4  ->Write();
  hPedLoMeanm4 ->Write();
  hPedLoRMSm4  ->Write();
  hPedLoNumm4  ->Write();
  hPedTRUMean1m4->Write();
  hPedTRURMS1m4 ->Write();

  hNBunches  ->Write();
  hHWaddr    ->Write();
  hModule    ->Write();
  
  file->Close();
  stopwatch.Print();
}
//-----------------------------------------------------------------------------

TString GetTriggerClass(ULong64_t triggerMask)
{
  // Convert a trigger mask to a trigger class
  
  AliCentralTrigger aCTP;
  TString configstr("");
  TString trclasses;
  if (!aCTP.LoadConfiguration(configstr)) { // Load CTP config from OCDB
    AliInfoGeneral("","No trigger configuration found in OCDB! The trigger configuration information will not be used!");
    return trclasses;
  }
  aCTP.SetClassMask(triggerMask);
  AliTriggerConfiguration *config = aCTP.GetConfiguration();
  const TObjArray& classesArray = config->GetClasses();
  Int_t nclasses = classesArray.GetEntriesFast();
  for( Int_t iclass=0; iclass < nclasses; iclass++ ) {
    AliTriggerClass* trclass = (AliTriggerClass*)classesArray.At(iclass);
    if (trclass && trclass->GetMask()>0) {
      Int_t trindex = TMath::Nint(TMath::Log2(trclass->GetMask()));
      reader->LoadTriggerClass(trclass->GetName(),trindex);
      if (triggerMask & (1ull << trindex)) {
	trclasses += " ";
	trclasses += trclass->GetName();
	trclasses += " ";
      }
    }
  }
  return trclasses;
}
 Pedestals.C:1
 Pedestals.C:2
 Pedestals.C:3
 Pedestals.C:4
 Pedestals.C:5
 Pedestals.C:6
 Pedestals.C:7
 Pedestals.C:8
 Pedestals.C:9
 Pedestals.C:10
 Pedestals.C:11
 Pedestals.C:12
 Pedestals.C:13
 Pedestals.C:14
 Pedestals.C:15
 Pedestals.C:16
 Pedestals.C:17
 Pedestals.C:18
 Pedestals.C:19
 Pedestals.C:20
 Pedestals.C:21
 Pedestals.C:22
 Pedestals.C:23
 Pedestals.C:24
 Pedestals.C:25
 Pedestals.C:26
 Pedestals.C:27
 Pedestals.C:28
 Pedestals.C:29
 Pedestals.C:30
 Pedestals.C:31
 Pedestals.C:32
 Pedestals.C:33
 Pedestals.C:34
 Pedestals.C:35
 Pedestals.C:36
 Pedestals.C:37
 Pedestals.C:38
 Pedestals.C:39
 Pedestals.C:40
 Pedestals.C:41
 Pedestals.C:42
 Pedestals.C:43
 Pedestals.C:44
 Pedestals.C:45
 Pedestals.C:46
 Pedestals.C:47
 Pedestals.C:48
 Pedestals.C:49
 Pedestals.C:50
 Pedestals.C:51
 Pedestals.C:52
 Pedestals.C:53
 Pedestals.C:54
 Pedestals.C:55
 Pedestals.C:56
 Pedestals.C:57
 Pedestals.C:58
 Pedestals.C:59
 Pedestals.C:60
 Pedestals.C:61
 Pedestals.C:62
 Pedestals.C:63
 Pedestals.C:64
 Pedestals.C:65
 Pedestals.C:66
 Pedestals.C:67
 Pedestals.C:68
 Pedestals.C:69
 Pedestals.C:70
 Pedestals.C:71
 Pedestals.C:72
 Pedestals.C:73
 Pedestals.C:74
 Pedestals.C:75
 Pedestals.C:76
 Pedestals.C:77
 Pedestals.C:78
 Pedestals.C:79
 Pedestals.C:80
 Pedestals.C:81
 Pedestals.C:82
 Pedestals.C:83
 Pedestals.C:84
 Pedestals.C:85
 Pedestals.C:86
 Pedestals.C:87
 Pedestals.C:88
 Pedestals.C:89
 Pedestals.C:90
 Pedestals.C:91
 Pedestals.C:92
 Pedestals.C:93
 Pedestals.C:94
 Pedestals.C:95
 Pedestals.C:96
 Pedestals.C:97
 Pedestals.C:98
 Pedestals.C:99
 Pedestals.C:100
 Pedestals.C:101
 Pedestals.C:102
 Pedestals.C:103
 Pedestals.C:104
 Pedestals.C:105
 Pedestals.C:106
 Pedestals.C:107
 Pedestals.C:108
 Pedestals.C:109
 Pedestals.C:110
 Pedestals.C:111
 Pedestals.C:112
 Pedestals.C:113
 Pedestals.C:114
 Pedestals.C:115
 Pedestals.C:116
 Pedestals.C:117
 Pedestals.C:118
 Pedestals.C:119
 Pedestals.C:120
 Pedestals.C:121
 Pedestals.C:122
 Pedestals.C:123
 Pedestals.C:124
 Pedestals.C:125
 Pedestals.C:126
 Pedestals.C:127
 Pedestals.C:128
 Pedestals.C:129
 Pedestals.C:130
 Pedestals.C:131
 Pedestals.C:132
 Pedestals.C:133
 Pedestals.C:134
 Pedestals.C:135
 Pedestals.C:136
 Pedestals.C:137
 Pedestals.C:138
 Pedestals.C:139
 Pedestals.C:140
 Pedestals.C:141
 Pedestals.C:142
 Pedestals.C:143
 Pedestals.C:144
 Pedestals.C:145
 Pedestals.C:146
 Pedestals.C:147
 Pedestals.C:148
 Pedestals.C:149
 Pedestals.C:150
 Pedestals.C:151
 Pedestals.C:152
 Pedestals.C:153
 Pedestals.C:154
 Pedestals.C:155
 Pedestals.C:156
 Pedestals.C:157
 Pedestals.C:158
 Pedestals.C:159
 Pedestals.C:160
 Pedestals.C:161
 Pedestals.C:162
 Pedestals.C:163
 Pedestals.C:164
 Pedestals.C:165
 Pedestals.C:166
 Pedestals.C:167
 Pedestals.C:168
 Pedestals.C:169
 Pedestals.C:170
 Pedestals.C:171
 Pedestals.C:172
 Pedestals.C:173
 Pedestals.C:174
 Pedestals.C:175
 Pedestals.C:176
 Pedestals.C:177
 Pedestals.C:178
 Pedestals.C:179
 Pedestals.C:180
 Pedestals.C:181
 Pedestals.C:182
 Pedestals.C:183
 Pedestals.C:184
 Pedestals.C:185
 Pedestals.C:186
 Pedestals.C:187
 Pedestals.C:188
 Pedestals.C:189
 Pedestals.C:190
 Pedestals.C:191
 Pedestals.C:192
 Pedestals.C:193
 Pedestals.C:194
 Pedestals.C:195
 Pedestals.C:196
 Pedestals.C:197
 Pedestals.C:198
 Pedestals.C:199
 Pedestals.C:200
 Pedestals.C:201
 Pedestals.C:202
 Pedestals.C:203
 Pedestals.C:204
 Pedestals.C:205
 Pedestals.C:206
 Pedestals.C:207
 Pedestals.C:208
 Pedestals.C:209
 Pedestals.C:210
 Pedestals.C:211
 Pedestals.C:212
 Pedestals.C:213
 Pedestals.C:214
 Pedestals.C:215
 Pedestals.C:216
 Pedestals.C:217
 Pedestals.C:218
 Pedestals.C:219
 Pedestals.C:220
 Pedestals.C:221
 Pedestals.C:222
 Pedestals.C:223
 Pedestals.C:224
 Pedestals.C:225
 Pedestals.C:226
 Pedestals.C:227
 Pedestals.C:228
 Pedestals.C:229
 Pedestals.C:230
 Pedestals.C:231
 Pedestals.C:232
 Pedestals.C:233
 Pedestals.C:234
 Pedestals.C:235
 Pedestals.C:236
 Pedestals.C:237
 Pedestals.C:238
 Pedestals.C:239
 Pedestals.C:240
 Pedestals.C:241
 Pedestals.C:242
 Pedestals.C:243
 Pedestals.C:244
 Pedestals.C:245
 Pedestals.C:246
 Pedestals.C:247
 Pedestals.C:248
 Pedestals.C:249
 Pedestals.C:250
 Pedestals.C:251
 Pedestals.C:252
 Pedestals.C:253
 Pedestals.C:254
 Pedestals.C:255
 Pedestals.C:256
 Pedestals.C:257
 Pedestals.C:258
 Pedestals.C:259
 Pedestals.C:260
 Pedestals.C:261
 Pedestals.C:262
 Pedestals.C:263
 Pedestals.C:264
 Pedestals.C:265
 Pedestals.C:266
 Pedestals.C:267
 Pedestals.C:268
 Pedestals.C:269
 Pedestals.C:270
 Pedestals.C:271
 Pedestals.C:272
 Pedestals.C:273
 Pedestals.C:274
 Pedestals.C:275
 Pedestals.C:276
 Pedestals.C:277
 Pedestals.C:278
 Pedestals.C:279
 Pedestals.C:280
 Pedestals.C:281
 Pedestals.C:282
 Pedestals.C:283
 Pedestals.C:284
 Pedestals.C:285
 Pedestals.C:286
 Pedestals.C:287
 Pedestals.C:288
 Pedestals.C:289
 Pedestals.C:290
 Pedestals.C:291
 Pedestals.C:292
 Pedestals.C:293
 Pedestals.C:294
 Pedestals.C:295
 Pedestals.C:296
 Pedestals.C:297
 Pedestals.C:298
 Pedestals.C:299
 Pedestals.C:300
 Pedestals.C:301
 Pedestals.C:302
 Pedestals.C:303
 Pedestals.C:304
 Pedestals.C:305
 Pedestals.C:306
 Pedestals.C:307
 Pedestals.C:308
 Pedestals.C:309
 Pedestals.C:310
 Pedestals.C:311
 Pedestals.C:312
 Pedestals.C:313
 Pedestals.C:314
 Pedestals.C:315
 Pedestals.C:316
 Pedestals.C:317
 Pedestals.C:318
 Pedestals.C:319
 Pedestals.C:320
 Pedestals.C:321
 Pedestals.C:322
 Pedestals.C:323
 Pedestals.C:324
 Pedestals.C:325
 Pedestals.C:326
 Pedestals.C:327
 Pedestals.C:328
 Pedestals.C:329
 Pedestals.C:330
 Pedestals.C:331
 Pedestals.C:332
 Pedestals.C:333
 Pedestals.C:334
 Pedestals.C:335
 Pedestals.C:336
 Pedestals.C:337
 Pedestals.C:338
 Pedestals.C:339
 Pedestals.C:340
 Pedestals.C:341
 Pedestals.C:342
 Pedestals.C:343
 Pedestals.C:344
 Pedestals.C:345
 Pedestals.C:346
 Pedestals.C:347
 Pedestals.C:348
 Pedestals.C:349
 Pedestals.C:350
 Pedestals.C:351
 Pedestals.C:352
 Pedestals.C:353
 Pedestals.C:354
 Pedestals.C:355
 Pedestals.C:356
 Pedestals.C:357
 Pedestals.C:358
 Pedestals.C:359
 Pedestals.C:360
 Pedestals.C:361
 Pedestals.C:362
 Pedestals.C:363
 Pedestals.C:364
 Pedestals.C:365
 Pedestals.C:366
 Pedestals.C:367
 Pedestals.C:368
 Pedestals.C:369
 Pedestals.C:370
 Pedestals.C:371
 Pedestals.C:372
 Pedestals.C:373
 Pedestals.C:374
 Pedestals.C:375
 Pedestals.C:376
 Pedestals.C:377
 Pedestals.C:378
 Pedestals.C:379
 Pedestals.C:380
 Pedestals.C:381
 Pedestals.C:382
 Pedestals.C:383
 Pedestals.C:384
 Pedestals.C:385
 Pedestals.C:386
 Pedestals.C:387
 Pedestals.C:388
 Pedestals.C:389
 Pedestals.C:390
 Pedestals.C:391
 Pedestals.C:392
 Pedestals.C:393
 Pedestals.C:394
 Pedestals.C:395
 Pedestals.C:396
 Pedestals.C:397
 Pedestals.C:398
 Pedestals.C:399
 Pedestals.C:400
 Pedestals.C:401
 Pedestals.C:402
 Pedestals.C:403
 Pedestals.C:404
 Pedestals.C:405
 Pedestals.C:406
 Pedestals.C:407
 Pedestals.C:408
 Pedestals.C:409
 Pedestals.C:410
 Pedestals.C:411
 Pedestals.C:412
 Pedestals.C:413
 Pedestals.C:414