ROOT logo
#ifndef __CINT__
# include "SummaryDrawer.C"
# include "AliFMDCorrAcceptance.h"
# include "AliFMDCorrSecondaryMap.h"
# include "AliFMDCorrELossFit.h"
# include "AliFMDCorrNoiseGain.h"
# include "AliForwardUtil.h"
# include "AliForwardCorrectionManager.h"
# include "AliLog.h"
# include <TString.h>
# include <TError.h>
#else
class SummaryDrawer;
class TObject;
// class TAxis;
class AliFMDCorrAcceptance;
class AliFMDCorrSecondaryMap;
class AliFMDCorrELossFit;
class AliFMDCorrNoiseGain;
#include <TString.h>
#endif

class CorrDrawer : public SummaryDrawer
{
public:
  TString  fELossExtra;
  UShort_t fMinQuality;
  /** 
   * Constructor 
   */
  CorrDrawer() 
  {
    fELossExtra = ""; // forward_eloss.root";
    fMinQuality = 8;
  }
  /** 
   * Destructor.  Closes the PDF 
   */
  ~CorrDrawer() 
  {
    CloseCanvas();
  }
  /** 
   * Create output file name 
   * 
   * @param out    Output file name on return 
   * @param prefix Prefix of the file name 
   */
  static void MakeFileName(TString&        out,
			   const TString&  prefix)
  {
    out = TString::Format("forward_%s.pdf", prefix.Data());
  }

  /** 
   * Run the correction drawer, fetching information from extra file
   * 
   * @param what     What to draw
   * @param extra    Extra file 
   * @param options  Options
   * @param local    Local DB
   */
  void Run(const Char_t* what, 
	   const Char_t* extra, 
	   Option_t*     options="",
	   const Char_t* local="") 
  { 
    Run(AliForwardCorrectionManager::ParseFields(what), 
	extra, options, local);
  }
  /** 
   * Run the correction drawer, fetching information from extra file
   * 
   * @param what     What to draw
   * @param extra    Extra file 
   * @param options  Options
   * @param local    Local DB
   */
  void Run(UShort_t      what, 
	   const Char_t* extra, 
	   Option_t*     options="",
	   const Char_t* local="") 
  { 
    fELossExtra    = extra;
    ULong_t  runNo = 0;
    UShort_t sys   = 0;
    UShort_t sNN   = 0;
    Short_t  fld   = 0;
    Bool_t   mc    = false;
    Bool_t   sat   = false;
    if (!GetInformation(runNo, sys, sNN, fld, mc, sat)) return;
    
    Run(what, runNo, sys, sNN, fld, mc, sat, options, local);
  }

  /** 
   * Draw corrections using the correction manager to get them 
   *  
   * @param what    What to draw 
   * @param runNo   Run Number
   * @param sys     Collision system 
   * @param sNN     Center of mass energy 
   * @param field   L3 Field 
   * @param mc      Simulations or not
   * @param sat     Satellite interactions or not 
   * @param options Options
   * @param local   Local database file 
   */
  void Run(const Char_t* what, 
	   ULong_t       runNo, 
	   const Char_t* sys, 
	   UShort_t      sNN, 
	   UShort_t      field,
	   Bool_t        mc=false, 
	   Bool_t        sat=false,
	   Option_t*     options="",
	   const char*   local="")	   
  {
    Run(AliForwardCorrectionManager::ParseFields(what), 
	runNo, AliForwardUtil::ParseCollisionSystem(sys), 
	sNN, field, mc, sat, options, local);
  }
  /** 
   * Draw corrections using the correction manager to get them 
   *  
   * @param what    What to draw 
   * @param runNo   Run Number
   * @param sys     Collision system 
   * @param sNN     Center of mass energy 
   * @param field   L3 Field 
   * @param mc      Simulations or not
   * @param sat     Satellite interactions or not 
   * @param local   Local database file 
   */
  void Run(UShort_t    what, 
	   ULong_t     runNo, 
	   UShort_t    sys, 
	   UShort_t    sNN, 
	   UShort_t    field,
	   Bool_t      mc=false, 
	   Bool_t      sat=false,
	   Option_t*   options="",
	   const char* local="")
  {
    AliForwardCorrectionManager& mgr = AliForwardCorrectionManager::Instance();
    mgr.SetDebug(true);

    // Set local prefix 
    if (local) mgr.SetPrefix(gSystem->DirName(local));

    // Get output file name 
    TString  name;
    if (what & AliForwardCorrectionManager::kSecondaryMap)
      AppendName(name, AliForwardCorrectionManager::kSecondaryMap);
    if (what & AliForwardCorrectionManager::kAcceptance) 
      AppendName(name, AliForwardCorrectionManager::kAcceptance);
    if (what & AliForwardCorrectionManager::kELossFits) 
      AppendName(name, AliForwardCorrectionManager::kELossFits);
    if (what & AliForwardCorrectionManager::kNoiseGain) 
      AppendName(name, AliForwardCorrectionManager::kNoiseGain);
    if (what & AliForwardCorrectionManager::kVertexBias) 
      Warning("CorrDrawer","Vertex bias not implemented yet");
    if (what & AliForwardCorrectionManager::kDoubleHit) 
      Warning("CorrDrawer","Double hit not implemented yet");    
    if (what & AliForwardCorrectionManager::kMergingEfficiency) 
      Warning("CorrDrawer","Merging efficiency not implemented yet");

    // Filter the ones we can handle 
    UShort_t flags = what & (AliForwardCorrectionManager::kELossFits|
			     AliForwardCorrectionManager::kAcceptance|
			     AliForwardCorrectionManager::kSecondaryMap|
			     AliForwardCorrectionManager::kNoiseGain);
    if (!mgr.Init(runNo, sys, sNN, field, mc, sat, flags, true)) {
      Error("CorrDrawer", "Failed to initialize for flags=0x%02x"
		"run=%lu, sys=%hu, sNN=%hu, field=%hd, mc=%d, sat=%d",
		flags, runNo, sys, sNN, field, mc, sat);
      return;
    }

    TString out;
    MakeFileName(out, name); // , runNo, sys, sNN, field, mc, sat);

    TString opts(options);
    opts.ToUpper();
    Bool_t landscape = opts.Contains("LANDSCAPE");
    Bool_t few       = opts.Contains("FEW");
    Bool_t details   = !opts.Contains("SINGLE");
    if (opts.Contains("PORTRAIT")) landscape = false;
    CreateCanvas(out, landscape);
    

    fBody->cd();
    if (details) {
      Double_t y = .8;
      DrawParameter(y, "Run #", Form("%lu", runNo));
      DrawParameter(y, "System", AliForwardUtil::CollisionSystemString(sys));
      DrawParameter(y, "#sqrt{s_{NN}}", 
		    AliForwardUtil::CenterOfMassEnergyString(sNN));
      DrawParameter(y, "L3 field", AliForwardUtil::MagneticFieldString(field));
      DrawParameter(y, "Simulation", Form("%s", mc ? "yes" : "no"));
      DrawParameter(y, "Satellite", Form("%s", sat ? "yes" : "no"));
      PrintCanvas("Title");
    }
      
    if (what & AliForwardCorrectionManager::kSecondaryMap) 
      DrawIt(mgr.GetSecondaryMap(), details);
    if (what & AliForwardCorrectionManager::kAcceptance) 
      DrawIt(mgr.GetAcceptance(), details);
    if (what & AliForwardCorrectionManager::kELossFits)
      DrawIt(mgr.GetELossFit(), details, few);
    if (what & AliForwardCorrectionManager::kNoiseGain)
      DrawIt(mgr.GetNoiseGain(), details);

    // Done
    CloseCanvas();
  }
  /** 
   * Fall-back method
   * 
   * @param o Object to draw
   */
  virtual void Draw(const TObject* o) 
  {
    if (!o) return;
    Warning("CorrDrawer", "Don't know how to draw a %s object", 
	    o->ClassName());
  }
  /** 
   * Draw a single plot of the mean acceptance correction
   * 
   * @param acc Acceptance correction
   */
  virtual void Draw(const AliFMDCorrAcceptance* acc) { Summarize(acc, false); }
  /** 
   * Draw a single plot of the mean secondary correction 
   * 
   * @param sec Secondary correction
   */
  virtual void Draw(const AliFMDCorrSecondaryMap* sec) { Summarize(sec, false);}
  /** 
   * Draw a single plot summarizing the energy loss fits
   * 
   * @param fits Energy loss fits
   */
  virtual void Draw(const AliFMDCorrELossFit* fits) { Summarize(fits, false); }
  /** 
   * A generalized entry to the summarization functions
   * 
   * @param what    What to show - only one field
   * @param runNo   Run number
   * @param sys     System 
   * @param sNN     Center of mass energy in GeV
   * @param field   L3 magnetic field
   * @param mc      Simulation flag
   * @param sat     Satellite interaction flag
   * @param options Options 
   * @param local   Local storage
   *
   * @deprecated See Run instead 
   */
  virtual void Summarize(const TString& what, 
			 ULong_t        runNo, 
			 const Char_t*  sys, 
			 UShort_t       sNN, 
			 Short_t        field,
			 Bool_t         mc=false, 
			 Bool_t         sat=false,
			 Option_t*      options="",
			 const char*    local="")
  {
    Summarize(AliForwardCorrectionManager::ParseFields(what), 
	      runNo, AliForwardUtil::ParseCollisionSystem(sys), 
	      sNN, field, mc, sat, options, local);
  }
  /** 
   * A generalized entry to the summarization functions
   * 
   * @param what    What to show - only one field
   * @param runNo   Run number
   * @param sys     System 
   * @param sNN     Center of mass energy in GeV
   * @param field   L3 magnetic field
   * @param mc      Simulation flag
   * @param sat     Satellite interaction flag
   * @param local   Local storage
   *
   * @deprecated See Run instead 
   */
  virtual void Summarize(UShort_t    what, 
			 ULong_t     runNo, 
			 UShort_t    sys, 
			 UShort_t    sNN, 
			 Short_t     field,
			 Bool_t      mc=false, 
			 Bool_t      sat=false,
			 Option_t*   options="",
			 const char* local="")
  {
    Run(what, runNo, sys, sNN, field, mc, sat, options, local);
  }
  /** 
   * Fall-back method
   * 
   * @param o Object to draw
   * @param pdf Not used
   */
  virtual void Summarize(const TObject* o, Bool_t pdf=true) 
  {
    if (!o) return;
    Warning("CorrDrawer", "Don't know how to draw a %s object (PDF: %s)", 
	    o->ClassName(), pdf ? "yes" : "no");
  }
  /** 
   * Draw a single summary plot or multiple plots of the acceptance
   * correction. A new Canvas is created for this.
   * 
   * @param acc Acceptance correction
   * @param pdf If true, do multiple plots. Otherwise a single summary plot
   */
  virtual void Summarize(const AliFMDCorrAcceptance* acc, Bool_t pdf=true) 
  { 
    CreateCanvas(CanvasName("acceptance.pdf"), false, pdf);
    DrawIt(acc, pdf); 
    if (pdf) CloseCanvas();
  }
  /** 
   * Draw a single summary plot multiple plots of the secondary
   * correction. A new canvas is created for this.
   * 
   * @param sec Secondary correction
   * @param pdf If true, do multiple plots. Otherwise a single summary plot
   */
  virtual void Summarize(const AliFMDCorrSecondaryMap* sec, Bool_t pdf=true) 
  { 
    CreateCanvas(CanvasName("secondarymap.pdf"), false, pdf);
    DrawIt(sec, pdf); 
    if (pdf) CloseCanvas();
  }
  /** 
   * Draw a single summary plot multiple plots of the energy loss
   * fits.  A new canvas is created for this.
   * 
   * @param fits Energy loss fits
   * @param pdf  If true, do multiple plots. Otherwise a single summary plot
   */
  virtual void Summarize(const AliFMDCorrNoiseGain* corr, Bool_t pdf=true) 
  { 
    CreateCanvas(CanvasName("noisegain.pdf"), true, pdf);
    DrawIt(corr, pdf); 
    if (pdf) CloseCanvas();
  }
  /** 
   * Draw a single summary plot multiple plots of the energy loss
   * fits.  A new canvas is created for this.
   * 
   * @param fits Energy loss fits
   * @param pdf  If true, do multiple plots. Otherwise a single summary plot
   */
  virtual void Summarize(const AliFMDCorrELossFit* fits, Bool_t pdf=true) 
  { 
    CreateCanvas(CanvasName("elossfits.pdf"), true, pdf);
    DrawIt(fits, pdf); 
    if (pdf) CloseCanvas();
  }
  /** 
   * Draw a single summary plot/multiple plots of the correction.
   * A new canvas is created for this.
   * 
   * @param what     What to plot
   * @param mc       MC input or not
   * @param output   Output of correction pass (must exist)
   * @param local    Local storage of correction
   * @param options  Various options
   *
   * @deprecated Use Run instead 
   */
  static void Summarize(const TString& what   = "", 
			Bool_t         /*mc*/ = false,
			const TString& output = "",
			const TString& local  = "fmd_corrections.root",
			Option_t*      options= "")
  {
    CorrDrawer* drawer = new CorrDrawer;
    drawer->Run(AliForwardCorrectionManager::ParseFields(what), 
		output, local, options);
  }
  /** 
   * Draw a single summary plot/multiple plots of the correction.
   * A new canvas is created for this.
   * 
   * @param what     What to plot
   * @param mc       MC input or not
   * @param output   Output of correction pass (must exist)
   * @param local    Local storage of correction
   * @param options  Various options
   *
   * @deprecated Use Run instead 
   */
  static void Summarize(UShort_t       what, 
			Bool_t         /*mc*/ = false,
			const TString& output = "",
			const TString& local  = "fmd_corrections.root",
			Option_t*      options= "")
  {
    CorrDrawer* drawer = new CorrDrawer;
    drawer->Run(what, output, options, local);
  }
protected:
  /** 
   * Append a name to output prefix 
   * 
   * @param what  What to append to 
   * @param which Which string to append
   */
  void AppendName(TString& what, UShort_t which)
  {
    if (!what.IsNull()) what.Append("_");
    switch (which) {
    case AliForwardCorrectionManager::kSecondaryMap:
      what.Append("secondary"); break;
    case AliForwardCorrectionManager::kAcceptance:
      what.Append("acceptance"); break;
    case AliForwardCorrectionManager::kELossFits:		  
      what.Append("elossfits"); break;
    case AliForwardCorrectionManager::kNoiseGain:		  
      what.Append("noisegain"); break;
    default:
      what.Append("unknown"); break;
    }
  }

  /** 
   * Get information from auxillary file 
   * 
   * @param runNo  On return, the run number
   * @param sys    On return, the collision system
   * @param sNN    On return, the collision energy 
   * @param fld    On return, the L3 magnetic field   
   * @param mc     On return, true for MC input 
   * @param sat    On return, true for satellite input enabled
   * 
   * @return true on success, false otherwise 
   */
  virtual Bool_t GetInformation(ULong_t&  runNo,
				UShort_t& sys,
				UShort_t& sNN,
				Short_t&  fld, 
				Bool_t&   mc, 
				Bool_t&   sat)
  { 
    TFile* fout = TFile::Open(fELossExtra, "READ");
    if (!fout) { 
      Warning("SummarizeELoss", "Correction task output \"%s\" not found",
	      fELossExtra.Data());
      return false;
    }
    Bool_t ret = false;
    try {
      TCollection* forward = GetCollection(fout, "ForwardELossSums");
      if (!forward) throw false;
      
      TCollection* eventInsp = GetCollection(forward, "fmdEventInspector");
      if (!eventInsp) throw false;

      if (!GetParameter(eventInsp, "sys",       sys))   throw false;
      if (!GetParameter(eventInsp, "sNN",       sNN))   throw false;
      if (!GetParameter(eventInsp, "field",     fld))   throw false;
      if (!GetParameter(eventInsp, "satellite", sat))   throw false;
      if (!GetParameter(eventInsp, "runNo",     runNo)) throw false;
      if (!GetParameter(eventInsp, "mc",        mc))    throw false;

      ret = true;
    }
    catch (bool e) {
      ret = e;
    }
    if (fout) fout->Close();
    return ret;
  }
  /** 
   * Get the canvas name.  If the auxillary file has been set, use
   * that as the base of the canvas name.  Otherwise use @a def.
   * 
   * @param def Default value 
   * 
   * @return Canvas name 
   */
  virtual TString CanvasName(const char* def) 
  { 
    TString canName(def);
    if (!fELossExtra.IsNull()) { 
      canName = gSystem->BaseName(fELossExtra.Data());
      canName.ReplaceAll(".root", ".pdf");
    }
    return canName;
  }
  /** 
   * Fall-back method
   * 
   * @param o Object to summarize
   */
  virtual void DrawIt(const TObject* o) 
  {
    if (!o) return;
    Warning("CorrDrawer", "Don't know how to summarize a %s object", 
	    o->ClassName());
  }
  /** 
   * Draw the acceptance correction 
   * 
   * @param corr    Correction
   * @param details If true, make a multipage PDF, otherwise plot the mean. 
   */
  virtual void DrawIt(const AliFMDCorrAcceptance* corr, Bool_t details=true)
  {
    if (!corr) {
      Warning("CorrDrawer","No acceptance available");
      return;
    }

    if (!fCanvas) {
      Warning("CorrDrawer", "No canvas");
      return;
    }

    // --- Get vertex axis ---------------------------------------------
    const TAxis& vtxAxis = corr->GetVertexAxis();
    Int_t        nVtx    = vtxAxis.GetNbins();

    // --- Create stacks for summaries ---------------------------------
    TObjArray* stacks  = CreateVtxStacks(vtxAxis);
    TObjArray* stacks2 = (corr->HasOverflow() && details 
			  ? CreateVtxStacks(vtxAxis) : 0);
    
    //__________________________________________________________________
    // Create a title page 
    if (details) {
      fBody->cd();
      TLatex* ll = new TLatex(.5,.8, fCanvas->GetTitle());
      ll->SetTextAlign(22);
      ll->SetTextSize(0.03);
      ll->SetNDC();
      ll->Draw();
      
      TLatex* l = new TLatex(.5,.8, "");
      l->SetNDC();
      l->SetTextSize(0.03);
      l->SetTextFont(132);
      l->SetTextAlign(12);
      l->DrawLatex(0.2, 0.70, "Acceptance due to dead channels");
      l->SetTextAlign(22);
      l->DrawLatex(0.5, 0.55, "c_{v,r}(#eta,#phi) = #frac{"
		   "#sum active strips #in (#eta,#phi)}{"
		 "#sum strips #in (#eta,#phi)}");
      
      PrintCanvas("Acceptance");
    }
    
    // --- Loop over vertex ------------------------------------------
    for (UShort_t v=1; v <= nVtx; v++) { 
      Double_t vzMin = vtxAxis.GetBinLowEdge(v);
      Double_t vzMax = vtxAxis.GetBinUpEdge(v);

      if (details) DivideForRings(true, true);

      // --- Loop over detectors -------------------------------------
      for (UShort_t d = 1; d <= 3; d++) {
	UShort_t     nQ = (d == 1 ? 1 : 2);
	for (UShort_t q = 0; q < nQ; q++) { 
	  Char_t r = (q == 0 ? 'I' : 'O');
	  
	  TH2* h2 = corr->GetCorrection(d, r, v);
	  if (!h2) { 
	    Warning("DrawCorrAcc", "No correction for FMD%d%c, v=%d", d, r, v);
	    corr->ls();
	    continue;
	  }
	  
	  if (details) DrawInRingPad(d, r, h2, "colz");

	  Int_t nY = h2->GetNbinsY();
	  TH1* hh = h2->ProjectionX(Form("FMD%d%c", d, r), 1, nY);
	  hh->Scale(1. / nY);
	  hh->SetDirectory(0);
	  hh->SetMarkerColor(AliForwardUtil::RingColor(d, r));
	  hh->SetLineColor(AliForwardUtil::RingColor(d, r));
	  hh->SetFillColor(AliForwardUtil::RingColor(d, r));
	  hh->SetFillStyle(3001);
	  
	  THStack* stack = static_cast<THStack*>(stacks->At(v-1));
	  if (!stack) { 
	    Error("", "No stack at v=%d", v-1);
	    continue;
	  }
	  stack->Add(hh);

	  if (!stacks2) {
	    Warning("", "No phi acceptance defined");
	    continue;
	  }
	  stack = static_cast<THStack*>(stacks2->At(v-1));
	  if (!stack) { 
	    Error("", "No stack at v=%d", v-1);
	    continue;
	  }
	  TH1* hp = corr->GetPhiAcceptance(d, r, v);
	  if (!hp) { 
	    Error("", "No phi acceptance at v=%d", v-1);
	    continue;
	  }
	  hp->SetDirectory(0);
	  hp->SetMarkerColor(AliForwardUtil::RingColor(d, r));
	  hp->SetLineColor(AliForwardUtil::RingColor(d, r));
	  hp->SetFillColor(AliForwardUtil::RingColor(d, r));
	  hp->SetFillStyle(3001);
	  // Info("", "Adding phi acceptance plot %d", Int_t(hp->GetEntries()));
	  stack->Add(hp);

	}
      }
      if (details) 
	PrintCanvas(Form("%+5.1fcm<IP_{z}<%+5.1fcm", vzMin, vzMax));
    }
    if (DrawVtxStacks(stacks2, 1.2)) {
      PrintCanvas("#phi acceptance");
    }
    if (DrawVtxStacks(stacks, 1.2)) {
      PrintCanvas("#LTacceptance#GT");
    }
  }
  /** 
   * Draw the secondary correction 
   * 
   * @param corr       Correction
   * @param details If true, make a multipage PDF, otherwise plot the mean. 
   */
  virtual void DrawIt(const AliFMDCorrSecondaryMap* corr, bool details) 
  {
    if (!corr) {
      Warning("CorrDrawer","No secondary map available");
      return;
    }

    if (!fCanvas) {
      Warning("CorrDrawer", "No canvas");
      return;
    }
    
    const TAxis& vtxAxis = corr->GetVertexAxis();
    Int_t        nVtx    = vtxAxis.GetNbins();
    TObjArray*   stacks  = CreateVtxStacks(vtxAxis);
    
    //__________________________________________________________________
    // Create a title page 
    if (details) {
      fBody->cd();
      TLatex* ll = new TLatex(.5,.8, fCanvas->GetTitle());
      ll->SetTextAlign(22);
      ll->SetTextSize(0.03);
      ll->SetNDC();
      ll->Draw();
      
      TLatex* l = new TLatex(.5,.8, "");
      l->SetNDC();
      l->SetTextSize(0.03);
      l->SetTextFont(132);
      l->SetTextAlign(12);
      l->DrawLatex(0.2, 0.70, "Secondary map");
      l->SetTextAlign(22);
      l->DrawLatex(0.5, 0.60, "c_{v,r}(#eta,#phi)=#frac{"
		   "#sum N_{ch,primary,i}(#eta,#phi)}{"
		   "#sum N_{ch,FMD,i}(#eta,#phi)}");
      l->SetTextAlign(12);
      l->DrawLatex(0.2, 0.50, "N: Number of events");
      l->DrawLatex(0.2, 0.45, "N_{ch,primary,i}(#eta,#phi): Number of charged, "
		   "primary particles in (#eta,#phi) bin");
      l->DrawLatex(0.2, 0.40, "N_{ch,primary,i}(#eta,#phi): Number of charged, "
		   "particles that hit the FMD in (#eta,#phi) bin");
      l->DrawLatex(0.2, 0.35, "All quantities determined in MC");
      
      PrintCanvas("Secondary maps");
    }
    
    // --- Loop over vertex ------------------------------------------
    for (UShort_t v=1; v <= nVtx; v++) { 
      Double_t vzMin = vtxAxis.GetBinLowEdge(v);
      Double_t vzMax = vtxAxis.GetBinUpEdge(v);

      if (details) DivideForRings(true, true);

      // --- Loop over detectors -------------------------------------
      for (UShort_t d = 1; d <= 3; d++) {
	UShort_t     nQ = (d == 1 ? 1 : 2);
	for (UShort_t q = 0; q < nQ; q++) { 
	  Char_t r = (q == 0 ? 'I' : 'O');
	  
	  TH2* h2 = corr->GetCorrection(d, r, v);
	  if (!h2) { 
	    Warning("DrawCorrSec", "No correction for FMD%d%c, v=%d", d, r, v);
	    continue;
	  }
	  
	  if (details) DrawInRingPad(d, r, h2, "colz");

	  Int_t nY = h2->GetNbinsY();
	  TH1* hh = h2->ProjectionX(Form("FMD%d%c", d, r), 1, nY);
	  hh->Scale(1. / nY);
	  hh->SetDirectory(0);
	  hh->SetMarkerColor(AliForwardUtil::RingColor(d, r));
	  hh->SetLineColor(AliForwardUtil::RingColor(d, r));
	  hh->SetFillColor(AliForwardUtil::RingColor(d, r));
	  hh->SetFillStyle(3001);
	  
	  THStack* stack = static_cast<THStack*>(stacks->At(v-1));
	  if (!stack) { 
	    Error("", "No stack at v=%d", v-1);
	    continue;
	  }
	  stack->Add(hh);
	}
      }
      if (details) 
	PrintCanvas(Form("%+5.1fcm<IP_{z}<%+5.1fcm", vzMin, vzMax));
    }
    if (DrawVtxStacks(stacks, 3.5)) {
      PrintCanvas("#LTsecondary map#GT");
    }
  }
  virtual void DrawIt(const AliFMDCorrNoiseGain* corr, bool /*details*/) 
  {
    if (!corr) {
      Warning("CorrDrawer","No noise-gain correction available");
      return;
    }

    if (!fCanvas) {
      Warning("CorrDrawer", "No canvas");
      return;
    }

    DivideForRings(false,false);
    
    for (UShort_t d = 1; d <= 3; d++) { 
      UShort_t nQ = d == 1 ? 1 : 2;
      for (UShort_t q = 0; q < nQ; q++) { 
	Char_t   r  = q == 0 ? 'I' : 'O';
	UShort_t nS = q == 0 ?  20 :  40;
	UShort_t nT = q == 0 ? 512 : 256;
	
	TH2* h = new TH2D(Form("fmd%d%c", d, r),
			  Form("FMD%d%c", d, r), 
			  nT, -.5, nT-.5,  nS, -.5, nS-.5);
	h->SetDirectory(0);
	h->SetXTitle("Strip");
	h->SetYTitle("Sector");

	for (UShort_t s = 0; s < nS; s++) { 
	  for (UShort_t t = 0; t < nT; t++) { 
	    Float_t c = corr->Get(d,r,s,t);
	    h->Fill(t,s,c);
	  }
	}
	h->GetZaxis()->SetRangeUser(0,0.05);
	DrawInRingPad(d,r,h,"COLZ");
      }
    }
    PrintCanvas("Noise correction");
  }
  /** 
   * Draw the energy loss fits correction 
   * 
   * @param corr       Correction
   * @param details If true, make a multipage PDF, 
   *                   otherwise plot the parameters. 
   */
  virtual void DrawIt(const AliFMDCorrELossFit* corr, bool details,
		      bool few=true) 
  {
    if (!corr) {
      Warning("CorrDrawer","No energy loss fits available");
      return;
    }

    if (!fCanvas) {
      Warning("CorrDrawer", "No canvas");
      return;
    }

    AliFMDCorrELossFit* fits = const_cast<AliFMDCorrELossFit*>(corr);
    fits->CacheBins(8);
    fits->Print("C");
    TList* fitter = 0;
    if (details) { 
      TFile* hists = 0;
      TDirectory* savDir = gDirectory;
      if (!gSystem->AccessPathName(fELossExtra.Data())) {
	hists = TFile::Open(fELossExtra, "READ");
	Info("", "Opened forward_eloss.root -> %p", hists);
      }
      else 
	Warning("", "Couldn't open %s", fELossExtra.Data());
      if (hists) {
	TList* fr = static_cast<TList*>(hists->Get("ForwardELossResults"));
	// Info("", "Got forward results -> %p", fr);
	if (fr) { 
	  fitter = static_cast<TList*>(fr->FindObject("fmdEnergyFitter"));
	  // Info("", "Got fitter -> %p", fitter);
	}
	hists->Close();
	savDir->cd();
      }
      fBody->cd();
      TLatex* ll = new TLatex(.5,.9, "ESD #rightarrow #Delta-fits"
			      /* fCanvas->GetTitle() */);
      ll->SetTextAlign(22);
      ll->SetTextSize(0.05);
      ll->SetNDC();
      ll->Draw();

      const Double_t fontSize = 0.03;
#define DL(X,Y,T) do { l->DrawLatex(X,Y,T); Y -= fontSize; } while (false)
      TLatex* l = new TLatex(.5,.8, "");
      l->SetNDC();
      l->SetTextSize(fontSize);
      l->SetTextFont(132);
      l->SetTextAlign(12);
      Double_t y = 0.80;
      Double_t x = 0.20;
      Double_t z = 0.30;
      DL(x,y,"1^{st} page is a summary of fit parameters");
      DL(x,y,"2^{nd} page is a summary of relative errors");
      DL(x,y,"Subsequent pages shows the fitted functions");
      y -= 0.01;
      DL(z,y,"Black line is the full fitted function");
      DL(z,y,"Coloured lines are the individual N-mip comp.");
      DL(x,y,"Each component has the form");
      y -= 0.02;
      DL(z,y,"f_{n}(x; #Delta, #xi, #sigma') = "
	 "#int_{-#infty}^{+#infty}dx' "
	 "landau(x'; #Delta, #xi)gaus(x'; x, #sigma')");
      y -= 0.02;
      DL(x,y,"The full function is given by");
      y -= 0.02;
      DL(z,y,"f_{N}(x; #Delta, #xi, #sigma', #bf{a}) = "
	 "C #sum_{i=1}^{N} a_{i} "
	 "f_{i}(x; #Delta_{i}, #xi_{i}, #sigma_{i}')");
      y -= 0.03;
      DL(z,y,"#Delta_{i} = i (#Delta_{1} + #xi_{1} log(i)) +#delta_{i}");
      DL(z,y,"#xi_{i} = i #xi_{1}");
      DL(z,y,"#sigma_{i} = #sqrt{i} #sigma_{1}");
      DL(z,y,"#sigma_{n} #dot{=} 0");
      DL(z,y,"#sigma_{i}'^{2} = #sigma^{2}_{n} + #sigma_{i}^{2}");
      DL(z,y,"#delta_{i} = c#sigmau/(1+1/i)^{pu#sqrt{u}}");
      DL(z,y,"u = #sigma/#xi");
      DL(z,y,"a_{1} #dot{=} 1");
      y -= 0.02;
      DL(z,y,Form("Least quality: %d", fMinQuality));
      y -= 0.02;
      if (fitter) {
	TObject* refit = fitter->FindObject("refitted");
	if (refit) DL(z,y, "Refitted distributions");//.10
      }
      PrintCanvas("Energy loss fits");
    }
    
    if (details && fitter) { 
      // Draw parameter from the fitter 
      fBody->cd();
      Double_t y = 0.90;
      Double_t s = fParName->GetTextSize();
      Double_t t = fParVal->GetTextSize();
      fParName->SetTextSize(0.04);
      fParVal->SetTextSize(0.04);
      DrawTParameter<double>(y, fitter, "lowCut");
      DrawTParameter<int>   (y, fitter, "nParticles");
      DrawTParameter<int>   (y, fitter, "minEntries");
      DrawTParameter<int>   (y, fitter, "subtractBins");
      DrawTParameter<bool>  (y, fitter, "doFits");
      DrawTParameter<double>(y, fitter, "maxE");
      DrawTParameter<int>   (y, fitter, "nEbins");
      DrawTParameter<bool>  (y, fitter, "increasingBins");
      DrawTParameter<double>(y, fitter, "maxRelPerError");
      DrawTParameter<double>(y, fitter, "maxChi2PerNDF");
      DrawTParameter<double>(y, fitter, "minWeight");
      DrawTParameter<double>(y, fitter, "regCut");
      DrawParameter(y,"Use #delta#Delta(#sigma/#xi)",
		    Form("%s", 
			 fits->TestBit(AliFMDCorrELossFit::kHasShift) 
			 ? "yes" : "no"));
      PrintCanvas("Fitter settings");
      fParName->SetTextSize(s);
      fParVal->SetTextSize(t);
    }

    fBody->cd();
    fits->Draw("error good");
    PrintCanvas("Fit overview");
    if (!details) return;

    //__________________________________________________________________
    // Draw relative parameter errors 
    fBody->cd();
    fits->Draw("relative good");
    PrintCanvas("Relative parameter errors");

    //__________________________________________________________________
    // Draw all fits individually
    for (UShort_t d=1; d<=3; d++) { 
      UShort_t nQ = (d == 1 ? 1 : 2);
      for (UShort_t q = 0; q < nQ; q++) { 
	Char_t r = (q == 0 ? 'I' : 'O');
	TList* dists = 0;
	TList* resis = 0;
	if (fitter) { 
	  // Info("", "Fitter: %s", fitter->GetName());
	  TList* dl = 
	    static_cast<TList*>(fitter->FindObject(Form("FMD%d%c",d,r)));
	  // Info("", "Got detector list -> %p", dl);
	  if (dl) { 
	    // Info("", "Detector list: %s", dl->GetName());
	    dists = static_cast<TList*>(dl->FindObject("elossDists"));
	    // Info("", "Got distributions -> %p", dists);
	    resis = static_cast<TList*>(dl->FindObject("elossResiduals"));
	    // Info("", "Got residuals -> %p", resis);
	  }
	}
	
	printf("FMD%d%c ", d, r);
	ClearCanvas();
	TObjArray*  ra = fits->GetRingArray(d, r);
	if (!ra) continue;
	DrawELossFits(d, r, ra, dists, resis, few);
      }
    }
  }
  /** 
   * CINT does too much when optimizing on a loop, so we take this out
   * to force CINT to not optimize the third nested loop.
   * 
   * @param d     Detector
   * @param r     Ring 
   * @param ra    Ring array 
   * @param dists Distributions (optional)
   * @param resis Residuals (optional)   
   */
  void DrawELossFits(UShort_t d, Char_t r, TObjArray* ra, 
		     TList* dists, TList* resis, bool few)
  {
    Int_t nRow = 3;
    Int_t nCol = (few ? 1 : 2);
    Int_t nPad = nRow * nCol;
    AliFMDCorrELossFit::ELossFit* fit = 0;
    TIter next(ra);
    Int_t i = 0;
    Int_t j = 0;
    DividedPad divided(fBody, fLandscape, nCol, nRow);
    while ((fit = static_cast<AliFMDCorrELossFit::ELossFit*>(next()))) {
      j           = i % nPad;
      Bool_t last = j == nPad-1;
      if (j == 0) divided.Divide(true, true);

      Bool_t        same    = false;
      TVirtualPad*  drawPad = divided.GetPad(j); // fBody->GetPad(j+1);
      Int_t         subPad  = 0;
      // fBody->ls();
      // Info("", "Now in sub-pad %d of %d: %p", j, nPad, drawPad);
      // Info("", "Pad %s", drawPad->GetName());
      if (dists) { 
	// Info("", "Distributions: %s", dists->GetName());
	TString hName(Form("FMD%d%c_etabin%03d", d,r,fit->GetBin()));
	TH1* dist = static_cast<TH1*>(dists->FindObject(hName));
	TH1* resi = 0;
	if (resis) resi = static_cast<TH1*>(resis->FindObject(hName));
	// Info("", "Got histogram -> %p", dist);
	if (resi) { 
	  Bool_t err = resi->GetUniqueID() <= 1;
	  drawPad->SetGridx();
	  if (err) {
	    resi->SetYTitle("#chi^{2}_{bin}=(h-f)^{2}/#delta^{2}h");
	    for (Int_t k=1; k<=resi->GetNbinsX(); k++) { 
	      Double_t c = resi->GetBinContent(k);
	      Double_t e = resi->GetBinError(k);
	      if (e <= 0) continue;
	      c          *= c;
	      c          /= (e*e);
	      resi->SetBinContent(k, c);
	      resi->SetBinError(k, 0);
	    }
	  }
	  drawPad->Divide(1,2,0,0);
	  DrawInPad(drawPad, 2, resi, "HIST", kGridx);
	  subPad = 1;
	  Double_t red = fit->GetNu() > 0 ? fit->GetChi2() / fit->GetNu() : 0;
	  if (red > 0) {
	    drawPad->cd(2);
	    TLine* l = new TLine(resi->GetXaxis()->GetXmin(), red,
				 resi->GetXaxis()->GetXmax(), red);
	    l->SetLineWidth(2);
	    l->SetLineStyle(2);
	    l->Draw();
	    TLatex* cltx = new TLatex(0.5, 0.5,
				      Form("#chi^{2}/#nu=%6.2f", red));
	    cltx->SetNDC();
	    cltx->SetTextAlign(22);
	    cltx->SetTextFont(42);
	    cltx->SetTextSize(0.07);
	    cltx->Draw();
	    cltx->DrawLatex(0.5,0.4,Form("%g", dist->GetEntries()));
	  }
	}
	if (dist) { 
	  // Info("", "Histogram: %s", dist->GetName());
	  dist->SetFillStyle(3001);
	  dist->SetMarkerStyle(0);
	  DrawInPad(drawPad, subPad, dist, "HIST E", (subPad * kGridx) + kLogy);
	  same = true;	  
	}
      }
      // if (same)
      DrawInPad(drawPad, subPad, fit, 
		Form("comp good values legend peak %s", (same ? "same" : "")),
		kLogy);
      if (fit->GetQuality() < fMinQuality) { 
	TLatex* ltx = new TLatex(.2, .2, "NOT USED");
	ltx->SetNDC();
	ltx->SetTextFont(62);
	ltx->SetTextColor(kRed+1);
	ltx->SetTextAngle(30);
	ltx->SetTextSize(0.2);
	DrawInPad(fBody, j+1, ltx, "", 0);
	// ltx->Draw();
      }

      // else 
      // DrawInPad(fBody, j+1, fit, "comp good values legend", kLogy);
      printf(".");
      
      if (last) 
	PrintCanvas(Form("FMD%d%c page %d", d, r, (i/nPad)+1));
      i++;
    }
    j = i % nPad;
    if (j != 0) 
      PrintCanvas(Form("FMD%d%c page %d", d, r, (i/nPad)+1));
    printf(" done\n");
  }

  /** 
   * Create an array of per-vertex bin stacks 
   * 
   * @param vtxAxis Vertex axis 
   * 
   * @return Array of stacks 
   */
  TObjArray* CreateVtxStacks(const TAxis& vtxAxis)
  {
    // --- Create stacks for summaries ---------------------------------
    Int_t      nVtx    = vtxAxis.GetNbins();
    TObjArray* stacks  = new TObjArray(nVtx);
    for (UShort_t v = 1; v <= nVtx; v++) { 
      THStack* stack = new THStack(Form("vtx%02d", v),
				   Form("%+5.1f<v_{z}<%+5.1f",
					vtxAxis.GetBinLowEdge(v),
					vtxAxis.GetBinUpEdge(v)));
      stacks->AddAt(stack, v-1);
    }
    return stacks;
  }
  /** 
   * Draw the vertex stacks in the canvas 
   * 
   * @param stacks Stacks to draw
   * @param max    Possible maximum of the stacks 
   * 
   * @return true on success 
   */
  Bool_t DrawVtxStacks(TObjArray* stacks, Double_t max=-1)
  {
    if (!stacks) return false;
    // --- Make summary page -------------------------------------------
    Int_t nVtx = 10; // stacks->GetEntries();

    fBody->Divide(3, (nVtx+2)/3, 0, 0);
    Int_t ipad = 0;
    for (UShort_t v = 1; v <= nVtx; v++) {
      ipad++;
    
      if (ipad == 1 || ipad == 12) ipad++;

      THStack*     stack = static_cast<THStack*>(stacks->At(v-1));
      if (!stack) { 
	Error("", "No stack at v=%d", v-1);
	continue;
      }
      TVirtualPad* pad   = fBody->cd(ipad);
      if (!pad) { 
	Error("", "No pad at %d", ipad);
	continue;
      }
      pad->SetFillColor(kWhite);
    
      if (max > 0) stack->SetMaximum(max);
      stack->Draw("nostack hist");
    }
    return true;
  }

};


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