ROOT logo
/**
 * @file 
 * 
 * Scripts to draw energy loss fits from correction object file 
 *
 * @ingroup pwglf_forward_scripts_corr
 */
/** 
 * Clear canvas 
 * 
 * @param c Canvas to clear 
 *
 * @ingroup pwglf_forward_scripts_corr
 */
void
ClearCanvas(TCanvas* c)
{
  c->SetLeftMargin(.1);
  c->SetRightMargin(.05);
  c->SetBottomMargin(.1);
  c->SetTopMargin(.05);
  c->Clear();
}

/** 
 * Draw energy loss fits to a multi-page PDF. 
 *
 * @par Input: 
 * The input file is expected to contain a AliFMDCorrELossFit object
 * named @c elossfits in the top level directory.
 * 
 * @par Output: 
 * A multi-page PDF.  Note, that the PDF generated by ROOT in this way
 * is broken (cannot be read by Acrobat Reader on Windows and MacOSX)
 * and one should pass it through a filter to correct these problems.
 * 
 * @param fname   File name 
 * @param option  Drawing options 
 *
 * @ingroup pwglf_forward_scripts_corr
 */
void
DrawCorrSecMap2(const char* fname, const char* option="colz")
{
  //__________________________________________________________________
  // Load libraries and object 
  gROOT->Macro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/scripts/LoadLibs.C");

  TFile* file = TFile::Open(fname, "READ");
  if (!file) { 
    Error("DrawCorrSecMap", "Failed to open %s", fname);
    return;
  }
  TString pname(fname);
  pname.ReplaceAll(".root", ".png");
  pname = gSystem->BaseName(pname);

  const char* objName = 
    AliForwardCorrectionManager::Instance()
    .GetObjectName(AliForwardCorrectionManager::kSecondaryMap);
  AliFMDCorrSecondaryMap* corr = 
    static_cast<AliFMDCorrSecondaryMap*>(file->Get(objName));
  if (!corr) { 
    Error("DrawCorrSecMap", "Object '%s' not found in %s", objName, fname);
    return;
  }

  //__________________________________________________________________
  // Create a canvas
  TCanvas* c = new TCanvas("c", "c", 800, 800 / TMath::Sqrt(2));
  c->SetFillColor(0);
  c->SetBorderSize(0);
  c->SetBorderMode(0);
  // c->Print(Form("%s[", pname.Data()));
  
  gStyle->SetOptStat(0);
  gStyle->SetTitleColor(0);
  gStyle->SetTitleStyle(0);
  gStyle->SetTitleBorderSize(0);
  gStyle->SetTitleX(.1);
  gStyle->SetTitleY(1);
  gStyle->SetTitleW(.8);
  gStyle->SetTitleH(.09);
  gStyle->SetFrameFillColor(kWhite);
  gStyle->SetFrameBorderSize(1);
  gStyle->SetFrameBorderMode(1);
  gStyle->SetPalette(1);

  ClearCanvas(c);
  //__________________________________________________________________
  // Draw all corrections
  const TAxis& vtxAxis = corr->GetVertexAxis();
  Int_t        nVtx    = vtxAxis.GetNbins();
  c->Divide((nVtx+2)/3, 3, 0, 0);
  Int_t ipad = 0;
  for (UShort_t v=1; v <= nVtx; v++) { 
    ipad++;
    if (ipad == 1 || ipad == 12) ipad++;
    
    TVirtualPad* p = c->cd(ipad);
    p->SetFillColor(kWhite);
    THStack* stack = new THStack(Form("vtxBin%02d", v), 
				 Form("%-4.1f<v_{z}<%4.1f", 
				      vtxAxis.GetBinLowEdge(v), 
				      vtxAxis.GetBinUpEdge(v))); 

    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*   h1 = corr->GetCorrection(d, r, v);
	if (!h1) { 
	  Warning("DrawCorrSecMap", "No correction for r=%c, v=%d", r, v);
	  continue;
	}

	// Info("DrawCorrSecMap2", "Getting FMD%d%c vtxbin %d", d, r, v);
	TH1D*  pr = h1->ProjectionX(Form("FMD%d%c", d, r), -1, -1, "e");
	pr->SetDirectory(0);
	pr->SetTitle(Form("FMD%d%c", d, r));
	pr->Scale(1. / (q == 0 ? 20 : 40));
	pr->SetMarkerColor(AliForwardUtil::RingColor(d, r));
	
	stack->Add(pr);
      }
    }
    stack->SetMaximum(3.2);
    stack->Draw("nostack");
  }
  
  //__________________________________________________________________
  // Close output file 
  c->SaveAs(pname.Data());
  
}
//
// EOF
//
 DrawCorrSecMap2.C:1
 DrawCorrSecMap2.C:2
 DrawCorrSecMap2.C:3
 DrawCorrSecMap2.C:4
 DrawCorrSecMap2.C:5
 DrawCorrSecMap2.C:6
 DrawCorrSecMap2.C:7
 DrawCorrSecMap2.C:8
 DrawCorrSecMap2.C:9
 DrawCorrSecMap2.C:10
 DrawCorrSecMap2.C:11
 DrawCorrSecMap2.C:12
 DrawCorrSecMap2.C:13
 DrawCorrSecMap2.C:14
 DrawCorrSecMap2.C:15
 DrawCorrSecMap2.C:16
 DrawCorrSecMap2.C:17
 DrawCorrSecMap2.C:18
 DrawCorrSecMap2.C:19
 DrawCorrSecMap2.C:20
 DrawCorrSecMap2.C:21
 DrawCorrSecMap2.C:22
 DrawCorrSecMap2.C:23
 DrawCorrSecMap2.C:24
 DrawCorrSecMap2.C:25
 DrawCorrSecMap2.C:26
 DrawCorrSecMap2.C:27
 DrawCorrSecMap2.C:28
 DrawCorrSecMap2.C:29
 DrawCorrSecMap2.C:30
 DrawCorrSecMap2.C:31
 DrawCorrSecMap2.C:32
 DrawCorrSecMap2.C:33
 DrawCorrSecMap2.C:34
 DrawCorrSecMap2.C:35
 DrawCorrSecMap2.C:36
 DrawCorrSecMap2.C:37
 DrawCorrSecMap2.C:38
 DrawCorrSecMap2.C:39
 DrawCorrSecMap2.C:40
 DrawCorrSecMap2.C:41
 DrawCorrSecMap2.C:42
 DrawCorrSecMap2.C:43
 DrawCorrSecMap2.C:44
 DrawCorrSecMap2.C:45
 DrawCorrSecMap2.C:46
 DrawCorrSecMap2.C:47
 DrawCorrSecMap2.C:48
 DrawCorrSecMap2.C:49
 DrawCorrSecMap2.C:50
 DrawCorrSecMap2.C:51
 DrawCorrSecMap2.C:52
 DrawCorrSecMap2.C:53
 DrawCorrSecMap2.C:54
 DrawCorrSecMap2.C:55
 DrawCorrSecMap2.C:56
 DrawCorrSecMap2.C:57
 DrawCorrSecMap2.C:58
 DrawCorrSecMap2.C:59
 DrawCorrSecMap2.C:60
 DrawCorrSecMap2.C:61
 DrawCorrSecMap2.C:62
 DrawCorrSecMap2.C:63
 DrawCorrSecMap2.C:64
 DrawCorrSecMap2.C:65
 DrawCorrSecMap2.C:66
 DrawCorrSecMap2.C:67
 DrawCorrSecMap2.C:68
 DrawCorrSecMap2.C:69
 DrawCorrSecMap2.C:70
 DrawCorrSecMap2.C:71
 DrawCorrSecMap2.C:72
 DrawCorrSecMap2.C:73
 DrawCorrSecMap2.C:74
 DrawCorrSecMap2.C:75
 DrawCorrSecMap2.C:76
 DrawCorrSecMap2.C:77
 DrawCorrSecMap2.C:78
 DrawCorrSecMap2.C:79
 DrawCorrSecMap2.C:80
 DrawCorrSecMap2.C:81
 DrawCorrSecMap2.C:82
 DrawCorrSecMap2.C:83
 DrawCorrSecMap2.C:84
 DrawCorrSecMap2.C:85
 DrawCorrSecMap2.C:86
 DrawCorrSecMap2.C:87
 DrawCorrSecMap2.C:88
 DrawCorrSecMap2.C:89
 DrawCorrSecMap2.C:90
 DrawCorrSecMap2.C:91
 DrawCorrSecMap2.C:92
 DrawCorrSecMap2.C:93
 DrawCorrSecMap2.C:94
 DrawCorrSecMap2.C:95
 DrawCorrSecMap2.C:96
 DrawCorrSecMap2.C:97
 DrawCorrSecMap2.C:98
 DrawCorrSecMap2.C:99
 DrawCorrSecMap2.C:100
 DrawCorrSecMap2.C:101
 DrawCorrSecMap2.C:102
 DrawCorrSecMap2.C:103
 DrawCorrSecMap2.C:104
 DrawCorrSecMap2.C:105
 DrawCorrSecMap2.C:106
 DrawCorrSecMap2.C:107
 DrawCorrSecMap2.C:108
 DrawCorrSecMap2.C:109
 DrawCorrSecMap2.C:110
 DrawCorrSecMap2.C:111
 DrawCorrSecMap2.C:112
 DrawCorrSecMap2.C:113
 DrawCorrSecMap2.C:114
 DrawCorrSecMap2.C:115
 DrawCorrSecMap2.C:116
 DrawCorrSecMap2.C:117
 DrawCorrSecMap2.C:118
 DrawCorrSecMap2.C:119
 DrawCorrSecMap2.C:120
 DrawCorrSecMap2.C:121
 DrawCorrSecMap2.C:122
 DrawCorrSecMap2.C:123
 DrawCorrSecMap2.C:124
 DrawCorrSecMap2.C:125
 DrawCorrSecMap2.C:126
 DrawCorrSecMap2.C:127
 DrawCorrSecMap2.C:128
 DrawCorrSecMap2.C:129
 DrawCorrSecMap2.C:130
 DrawCorrSecMap2.C:131
 DrawCorrSecMap2.C:132
 DrawCorrSecMap2.C:133
 DrawCorrSecMap2.C:134
 DrawCorrSecMap2.C:135
 DrawCorrSecMap2.C:136
 DrawCorrSecMap2.C:137
 DrawCorrSecMap2.C:138
 DrawCorrSecMap2.C:139
 DrawCorrSecMap2.C:140