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

struct MultCutDrawer : public SummaryDrawer
{
  UShort_t fMinQuality;
  TList    fCuts;
  TList    fStacks;
  Bool_t   fMC;
  //__________________________________________________________________
  /** 
   * Constructor
   */
  MultCutDrawer() 
    : fMinQuality(8),
      fCuts(),
      fStacks(),
      fMC(false)
  {
    // Rough equvilance: 
    // 
    //   Cut name  |           Parameter values   
    //  -----------+----------------------------------------
    //    mpv      | 0.85     0.7      0.4     0.15
    //    xi       | 1        2.5      4.5     6.8
    //    sig      | .5       1        2       2.9
    //    prob     | 1e-1     2.5e-2   5e-4    2.5e-6
    //  -----------+----------------------------------------
    //   Cut name  |           Mean values   
    //  -----------+----------------------------------------
    //   mpv       | 0.43    0.36      0.20    0.08
    //   xi        | 0.49    0.36      0.23    0.09
    //   sig       | 0.44    0.37      0.22    0.10
    //   prob      | 0.43    0.35      0.21    0.09
    // 
    fCuts.Add(new TNamed("mpv",  "0.85  0.7    0.4  0.15"));
    fCuts.Add(new TNamed("xi",   "1     2.5    4.5  6.8"));
    fCuts.Add(new TNamed("sig",  ".5    1      2    2.9"));
    fCuts.Add(new TNamed("prob", "1e-1  2.5e-2 5e-4 2.5e-6"));
    // fCuts.Add(new TNamed("prob", "1e-2 1e-3 1e-5 1e-7"));
  }
  //__________________________________________________________________
  /** 
   * Copy constructor 
   * 
   * @param o Object to copy from 
   */
  MultCutDrawer(const MultCutDrawer& o) 
    : fMinQuality(o.fMinQuality),
      fCuts(),
      fStacks(),
      fMC(false)
  {}
  //__________________________________________________________________
  /** 
   * Assignment operator 
   * 
   * @param o Obejct to assign from
   * 
   * @return Reference to this 
   */
  MultCutDrawer& operator=(const MultCutDrawer& o) 
  {
    if (&o == this) return *this;
    fMinQuality = o.fMinQuality;
    fCuts.AddAll(&o.fCuts);
    fStacks.AddAll(&o.fStacks);
    return *this;
  }
  //__________________________________________________________________
  /** 
   * Destructor
   */
  ~MultCutDrawer()
  {
    CloseCanvas();
  }
  //__________________________________________________________________
  /** 
   * Run the class
   * 
   * @param runNo   Run number (or 999 for don't care)
   * @param sys     System (or 0 for don't care)
   * @param sNN     Collision energy in GeV (or 0 for don't care)
   * @param field   L3 Field in kG (or 999 for don't care)
   * @param mc      True of MC
   * @param local   Possible local database 
   */  
  void Run(ULong_t       runNo=999, 
	   UShort_t      sys=0, 
	   UShort_t      sNN=0, 
	   Short_t       field=999, 
	   Bool_t        mc=false, 
	   const Char_t* local=0)
  {
    Bool_t sat = false;
    if (!Init(runNo, sys, sNN, field, mc, sat, local)) return;

    Double_t savX = fParVal->GetX();
    Double_t savY = fParVal->GetY();
    fParVal->SetX(.4);
    fParVal->SetY(.4);
    // fPause = true;

    TIter    iCut(&fCuts);
    TObject* pCut = 0;
    while ((pCut = iCut())) { 
      TString                 method(pCut->GetName());
      TString                 sP(pCut->GetTitle());
      TObjArray*              aP = sP.Tokenize(" ");
      TIter                   iP(aP);
      TObjString*             pP = 0;
      TString                 tM;
      fBody->SetBottomMargin(0.20);
      fBody->SetLeftMargin(0.06);
      fBody->Divide(1, aP->GetEntries(), 0, 0);
      Int_t iPad = 1;
      while ((pP = static_cast<TObjString*>(iP()))) {
	THStack* all   = AllStack(iPad-1);
	Double_t p     = pP->String().Atof();
	Double_t vP[]  = { p, p, p, p, p };
	THStack* stack = CutStack(method, vP, all);
	if (tM.IsNull()) tM = stack->GetTitle();
	// Kill title on all but first sub-panel
	stack->SetTitle("");
	DrawInPad(fBody, iPad, stack, "nostack p");
	stack->GetYaxis()->SetTitleSize(0.12);
	stack->GetYaxis()->SetTitleOffset(0.2);
	stack->GetYaxis()->SetLabelSize(0.07);
	if (iPad == 1) stack->GetYaxis()->SetTitle(tM);
	stack->GetXaxis()->SetTitle("#eta");
	stack->GetXaxis()->SetTitleSize(0.12);
	stack->GetXaxis()->SetTitleOffset(0.6);
	stack->GetXaxis()->SetTitleColor(kBlack);
	stack->GetXaxis()->SetLabelSize(0.07);
	stack->GetXaxis()->Dump();


	if (iPad == 1) {
	  Color_t    col   = kBlack;
	  Double_t   hLtx  = 0.07;
	  Double_t   yLtx  = 7*(hLtx+.005)+0.01;
	  TLatex*    nLtx  = new TLatex(-0.75, yLtx, "Ring");
	  TLatex*    pLtx  = new TLatex(-0.7,  yLtx, "Param");
	  TLatex*    vLtx  = new TLatex(+0, yLtx, "Mean#pmVar_{min}^{max}");
	  nLtx->SetTextAlign(31);pLtx->SetTextAlign(11);
	  nLtx->SetTextSize(hLtx);
	  pLtx->SetTextSize(hLtx);
	  vLtx->SetTextSize(hLtx);
	  nLtx->SetTextColor(col);
	  pLtx->SetTextColor(col);
	  vLtx->SetTextColor(col);
	  nLtx->Draw();
	  pLtx->Draw();
	  vLtx->Draw();
	}
	// if (iPad == 1) { 
	//   fBody->cd(1);
	//   DrawRingLegend(0.4, 0.4, 0.7, 0.9);
	// }
	iPad++;
      }
      PrintCanvas(Form("%s   X={%s}", tM.Data(), sP.Data()));
    }

    Int_t nAll = fStacks.GetEntries();
    fBody->SetBottomMargin(0.20);
    fBody->SetLeftMargin(0.06);
    fBody->Divide(1, nAll, 0, 0);
    for (Int_t iAll = 0; iAll < nAll; iAll++) {
      THStack* all = AllStack(iAll);
      DrawInPad(fBody, iAll+1, all, "nostack hist p");
      all->GetYaxis()->SetTitleSize(0.12);
      all->GetYaxis()->SetTitleOffset(0.2);
      all->GetYaxis()->SetLabelSize(0.07);
      if (iAll == 0) all->GetYaxis()->SetTitle("c");
      all->GetXaxis()->SetTitle("#eta");
      all->GetXaxis()->SetTitleSize(0.12);
      all->GetXaxis()->SetTitleOffset(0.6);
      all->GetXaxis()->SetTitleColor(kBlack);
      all->GetXaxis()->SetLabelSize(0.07);
      
      TVirtualPad* p = fBody->GetPad(iAll+1);
      p->cd();
      Double_t yT = 1-p->GetTopMargin();
      if      (iAll == 0) DrawRingLegend(p, kNorth|kCenter); 
      else if (iAll == 1) DrawMethodLegend(0.35, 0.4, 0.55,yT);
      
      Double_t y1 = ((iAll + 2 >= nAll) ? yT - .3 : p->GetBottomMargin());
      Double_t y2 = ((iAll + 2 >= nAll) ? yT      : 0.3);
      DrawValueLegend(all, 0.2, y1, 0.9, y2);
       
    }
    PrintCanvas("Comparisons");

    fParVal->SetX(savX);
    fParVal->SetY(savY);
    
    CloseCanvas();
  }
  //__________________________________________________________________
  /** 
   * Draw legend of methods 
   * 
   * @param x1    Left x
   * @param y1    Lower y
   * @param x2    Right x
   * @param y2    Upper y
   */
  void DrawMethodLegend(Double_t x1, Double_t y1, 
			Double_t x2, Double_t y2) 
  {
    TLegend* l = new TLegend(x1,y1,x2,y2);
    l->SetBorderSize(0);
    l->SetFillColor(0);
    l->SetFillStyle(0);

    TIter    iCut(&fCuts);
    TObject* pCut = 0;
    while ((pCut = iCut())) { 
      TString                 method(pCut->GetName());
      AliFMDMultCuts::EMethod m = AliFMDMultCuts::String2Method(method);
      TString                 title(AliFMDMultCuts::Method2String(m,true));
      Style_t                 style = CutStyle(m);
      TLegendEntry*           e = l->AddEntry("dummy", title, "p");
      e->SetMarkerStyle(style);
      e->SetMarkerColor(kBlack);
    }
    l->Draw();
  }
  //__________________________________________________________________
  /** 
   * Draw a value legend 
   * 
   * @param stack Stack to take values from 
   * @param x1    Left x
   * @param y1    Lower y
   * @param x2    Right x
   * @param y2    Upper y
   */
  void DrawValueLegend(THStack* stack, 
		       Double_t x1, Double_t y1, 
		       Double_t x2, Double_t y2) 
  {
    TLegend* l = new TLegend(x1,y1,x2,y2);
    l->SetBorderSize(0);
    l->SetFillColor(0);
    l->SetFillStyle(0);

    TString seen;
    TIter   iHist(stack->GetHists());
    TH1*    pHist = 0;
    Int_t   nHist = 0;
    while ((pHist = static_cast<TH1*>(iHist()))) {
      TString name(pHist->GetName());
      if (seen.Contains(name)) continue; 
      seen.Append(Form(" %s", name.Data()));
      nHist++;
      
      AliFMDMultCuts::EMethod m = AliFMDMultCuts::String2Method(name);
      Style_t                 s = CutStyle(m);
      TLegendEntry*           e = l->AddEntry("dummy", pHist->GetTitle(), "p");
      e->SetMarkerStyle(s);
      e->SetMarkerColor(kBlack);
    }
    if (nHist < 5) l->SetNColumns(nHist);
    else           l->SetNColumns(nHist/2);

    l->Draw();
  }
  //__________________________________________________________________
  /** 
   * Get stack at @a i.  If the stack doesn't exist, make it
   * 
   * @param i Location (0-based)
   * 
   * @return Stack 
   */
  THStack* AllStack(Int_t i) 
  {
    TObject* o = fStacks.At(i);
    if (o) return static_cast<THStack*>(o);
    THStack* s = new THStack(Form("all%02d", i), "");
    fStacks.AddAt(s, i);
    return s;
  }
  //__________________________________________________________________
  /** 
   * Get the marker styoe associated with a cut
   * 
   * @param m Cut identifier 
   * 
   * @return Marker style 
   */
  static Style_t CutStyle(UShort_t m) 
  {
    switch (m) { 
    case AliFMDMultCuts::kFixed:            return kFullStar;
    case AliFMDMultCuts::kMPVFraction:      return kOpenCircle;
    case AliFMDMultCuts::kFitRange:         return 33; // Diamond
    case AliFMDMultCuts::kLandauWidth:      return 34; // Cross
    case AliFMDMultCuts::kLandauSigmaWidth: return kOpenSquare;
    case AliFMDMultCuts::kProbability:      return kFullTriangleDown;
    }
    return kFullDotMedium;
  }
  //__________________________________________________________________
  /** 
   * Update statistics
   * 
   * @param y     Current value 
   * @param cnt   Current count
   * @param mean  Current mean
   * @param var   Current variance 
   */
  static void Statistics(Double_t  y,
			 Int_t&    cnt,
			 Double_t& mean, 
			 Double_t& var) 
  {
    cnt        += 1;
    mean       += (y - mean) / cnt;
    var        += (cnt > 1 ? (TMath::Power(y-mean,2)/(cnt-1)-var/cnt) : 0);
  }
  //__________________________________________________________________
  /** 
   * Calculate statistics for a histogram
   * 
   * @param h     Histogram
   * @param mean  On return, the mean of y
   * @param var   On return, the variance in y
   * @param min   On return, the least y
   * @param max   On return, the largest y
   * @param rCnt  In/out: Current count
   * @param rMean In/out: Current mean 
   * @param rVar  In/out: Current variance 
   */
  static void HistStatistics(const TH1* h, 
			     Double_t& mean, 
			     Double_t& var, 
			     Double_t& min, 
			     Double_t& max,
			     Int_t&    rCnt,
			     Double_t& rMean,
			     Double_t& rVar)
  {
    mean      = 0;
    var       = 0;
    min       = +100000;
    max       = -100000;
    Int_t cnt = 0;
    for (Int_t i = 1; i <= h->GetNbinsX(); i++) { 
      Double_t y = h->GetBinContent(i);
      if (TMath::Abs(y) <= 1e-9) continue;
      min        =  TMath::Min(min, y);
      max        =  TMath::Max(max, y);
      Statistics(y, cnt, mean, var);
      Statistics(y, rCnt, rMean, rVar);
    }
    // Info("", "Stats for %s:  mean=%f +/- %f [%f,%f]",
    //      h->GetTitle(), mean, var, min, max);
  }
  //__________________________________________________________________
  /** 
   * Create a stack from cuts
   * 
   * @param method Method to use 
   * @param param  Parameters 
   * @param all    Stack to add for this set of parameters
   * 
   * @return Newly created stack 
   */    
  THStack* CutStack(const TString& method, Double_t* param, THStack* all)
  {
    AliFMDMultCuts::EMethod m = AliFMDMultCuts::String2Method(method);
    Info("CutStack", "Method %s -> %d", method.Data(), m);
    AliFMDMultCuts* cut = new AliFMDMultCuts(m, 
					     param[0],
					     param[1], 
					     param[2],
					     param[3],
					     param[4]);
    // cut->Print();
    
    TH2* hist = new TH2D("cut", cut->GetMethodString(true),
			 200, -4, 6, 5, 0.5, 5.5);
    hist->GetYaxis()->SetBinLabel(1, "FMD1i");
    hist->GetYaxis()->SetBinLabel(2, "FMD2i");
    hist->GetYaxis()->SetBinLabel(3, "FMD2o");
    hist->GetYaxis()->SetBinLabel(4, "FMD3o");
    hist->GetYaxis()->SetBinLabel(5, "FMD3i");
    
    // Info("DrawMultCuts", "Filling histogram");
    cut->FillHistogram(hist);
    // Info("DrawMultCuts", "Done filling");

    Style_t  style = CutStyle(m);
    THStack* stack = new THStack(hist, "x");
    TList*   hists = stack->GetHists();
    Double_t rMin  = +1000000;
    Double_t rMax  = -1000000;
    Double_t rAvg  = 0;
    Double_t rVar  = 0;
    Int_t    rCnt  = 0;
    printf(" %6s %7.4f | ", method.Data(), param[0]);
    TH1*     first = 0;
    for (Int_t i = 1; i <= 5; i++) { 
      TH1*     h = static_cast<TH1*>(hists->At(i-1));
      TString  n(hist->GetYaxis()->GetBinLabel(i)); 
      TString  nn(n); nn.Remove(0,3);
      UShort_t det = nn.Atoi();
      Char_t   rng = nn[1];
      Color_t  col = AliForwardUtil::RingColor(det, rng);
      if (!first) first = h;
      h->SetName(method);
      h->SetTitle(Form("%f", param[i-1]));
      h->SetYTitle(cut->GetMethodString(true));
      h->SetXTitle("#eta");
      h->SetMarkerColor(col);
      h->SetFillColor(col);
      h->SetLineColor(col);
      h->SetMarkerStyle(style);
      h->SetFillStyle(0);
      Double_t avg, var, min, max;
      
      HistStatistics(h, avg, var, min, max, rCnt, rAvg, rVar);
      rMin = TMath::Min(min, rMin);
      rMax = TMath::Max(max, rMax);
      all->Add(h);
      Double_t   hLtx  = 0.07;
      Double_t   yLtx  = i*(hLtx+.005)+0.01;
      TObjArray* lines = new TObjArray(3);
      TLatex*    nLtx  = new TLatex(-0.75, yLtx, n);
      TLatex*    pLtx  = new TLatex(-0.7,  yLtx, Form("X=%g", param[i-1]));
      TLatex*    vLtx  = new TLatex(+0, yLtx, 
				    Form("%5.3f#pm%6.4f_{%6.4f}^{%6.4f}",
					 avg, var, max-avg, avg-min));
      nLtx->SetTextAlign(31);pLtx->SetTextAlign(11);
      nLtx->SetTextSize(hLtx);pLtx->SetTextSize(hLtx),vLtx->SetTextSize(hLtx);
      nLtx->SetTextColor(col);pLtx->SetTextColor(col);vLtx->SetTextColor(col);
      lines->Add(nLtx);lines->Add(pLtx);lines->Add(vLtx);
      h->GetListOfFunctions()->Add(lines);
      printf("%5.3f+/-%6.4f ", avg, var);
    }
    TLatex* rLtx = new TLatex(6, fMC ? 0.65 : 0.55, 
			      Form("All: %5.3f#pm%6.4f_{%6.4f}^{%6.4f}",
				   rAvg, rVar, rMin, rMax));
    rLtx->SetTextSize(0.05);
    rLtx->SetTextAlign(31);
    first->GetListOfFunctions()->Add(rLtx);
    Printf("-> %5.3f+/-%6.4f", rAvg, rVar);
    stack->SetTitle(cut->GetMethodString(true)); // hist->GetTitle());
    stack->SetMinimum(0); // 0.98*min);
    stack->SetMaximum(fMC ? 0.7 : 0.6); // 1.02*max);
    all->SetMinimum(0);
    all->SetMaximum(fMC ? 0.7 : 0.6);

    delete hist;
    return stack;
  }
  //__________________________________________________________________
  /** 
   * Initialize 
   * 
   * @param runNo   Run number (or 999 for don't care)
   * @param sys     System (or 0 for don't care)
   * @param sNN     Collision energy in GeV (or 0 for don't care)
   * @param field   L3 Field in kG (or 999 for don't care)
   * @param mc      True of MC
   * @param sat     True for including satellite collisions 
   * @param local   Possible local database 
   * 
   * @return true on sucess 
   */
  Bool_t Init(ULong_t       runNo=999, 
	      UShort_t      sys=0, 
	      UShort_t      sNN=0, 
	      Short_t       field=999, 
	      Bool_t        mc=false, 
	      Bool_t        sat=false,
	      const Char_t* local=0)
  {
    fMC = mc;
    AliForwardCorrectionManager& mgr = AliForwardCorrectionManager::Instance();
    mgr.SetDebug(true);
    UShort_t flags = AliForwardCorrectionManager::kELossFits;
  
    if (local && local[0] != '\0') mgr.SetELossFitsPath(local);
  
    if (!mgr.Init(runNo, sys, sNN, field, mc, false, flags, true)) {
      Error("DrawMultCuts", "Failed to initialize for flags=0x%02x, "
	    "run=%lu, sys=%hu, sNN=%hu, field=%hd, mc=%s, sat=%s",
	    flags, runNo, sys, sNN, field, mc ? "true" : "false", "false");
      return false;
    }
    const AliFMDCorrELossFit* cFit = mgr.GetELossFit();
    AliFMDCorrELossFit*       fit  = const_cast<AliFMDCorrELossFit*>(cFit);
    fit->CacheBins(8);

    CreateCanvas("multCuts.pdf", true);

    fBody->cd();
    
    Double_t y = .85;
    TLatex* title = new TLatex(.5, y, "#Delta Cuts");
    title->SetTextAlign(23);
    title->SetTextFont(42);
    title->SetTextSize(0.1);
    title->Draw();
    
    y -= 0.11;
    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("Delta cuts");

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