if (nEvents <= 0) nEvents = chain->GetEntries();
// --- Creating the manager and handlers ---------------------------
- AliAnalysisManager *mgr = new AliAnalysisManager("Analysis Train",
- "FMD analysis train");
+ AliAnalysisManager *mgr = new AliAnalysisManager("Forward Train",
+ "Forward multiplicity");
+ AliAnalysisManager::SetCommonFileName("forward.root");
// --- ESD input handler -------------------------------------------
AliESDInputHandler *esdHandler = new AliESDInputHandler();
Info("MakeELossFits", "Will analyse %d events", nEvents);
// --- Creating the manager and handlers ---------------------------
- AliAnalysisManager *mgr = new AliAnalysisManager("Analysis Train",
- "FMD analysis train");
+ AliAnalysisManager *mgr = new AliAnalysisManager("Forward ELoss Train",
+ "Forward energy loss");
+ AliAnalysisManager::SetCommonFileName("forward_eloss.root");
AliESDInputHandler *esdHandler = new AliESDInputHandler();
esdHandler->SetInactiveBranches("AliESDACORDE "
mgr->AddTask(task);
// --- Make the output container and connect it --------------------
- TString outputfile = "energyFits.root";
+ TString outputfile = AliAnalysisManager::GetCommonFileName();
AliAnalysisDataContainer* histOut =
mgr->CreateContainer("Forward", TList::Class(),
AliAnalysisManager::kOutputContainer,outputfile);
--- /dev/null
+/**
+ * @file CompareCorrs.C
+ * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
+ * @date Fri Jan 28 23:01:59 2011
+ *
+ * @brief Utilities for comparing correction objects
+ *
+ *
+ */
+#ifndef __CINT__
+#include <TCanvas.h>
+#include <TFile.h>
+#include <TLatex.h>
+#include <TStyle.h>
+#include <TMath.h>
+#include "AliForwardCorrectionManager.h"
+#endif
+
+
+//======================================================================
+struct Canvas
+{
+ //____________________________________________________________________
+ Canvas(const char* name, const char* title,
+ const char* n1, const char* n2)
+ : fName(name),
+ fTitle(title),
+ fN1(n1),
+ fN2(n2),
+ fCanvas(0),
+ fBody(0)
+ {
+ gStyle->SetPalette(1);
+ gStyle->SetTitleX(.10);
+ gStyle->SetTitleY(.99);
+ gStyle->SetTitleW(.85);
+ gStyle->SetTitleH(.085);
+ gStyle->SetTitleFillColor(0);
+ gStyle->SetTitleBorderSize(0);
+ }
+ //____________________________________________________________________
+ void Open()
+ {
+ fCanvas = new TCanvas(fName, fTitle, 800, TMath::Sqrt(2)*800);
+ fCanvas->SetFillColor(0);
+
+ fCanvas->Print("comparison.pdf[", "pdf");
+ }
+ //____________________________________________________________________
+ TPad*
+ Clear(UShort_t nPad, UShort_t d, Char_t r)
+ {
+ fCanvas->Clear();
+ TPad* top = new TPad("top", "Top", 0, .95, 1, 1, 0, 0);
+ top->Draw();
+ top->cd();
+
+ TLatex* l = new TLatex(.5, .5, Form("%s for FMD%d%c (%s / %s)",
+ fTitle, d, r, fN1, fN2));
+ l->SetNDC();
+ l->SetTextAlign(22);
+ l->SetTextSize(0.3);
+ l->Draw();
+
+ fCanvas->cd();
+ fBody = new TPad("body", "Body", 0, 0, 1, .95, 0, 0);
+ fBody->SetTopMargin(0.05);
+ fBody->SetRightMargin(0.05);
+ fBody->Divide(2, (nPad+1)/2, 0.001, 0.001);
+ fBody->Draw();
+
+ return fBody;
+ }
+ //____________________________________________________________________
+ TVirtualPad* cd(Int_t i)
+ {
+ if (!fBody) return 0;
+
+ return fBody->cd(i);
+ }
+ //____________________________________________________________________
+ void Print(UShort_t d, Char_t r, const char* extra="")
+ {
+ fCanvas->Print("comparison.pdf",
+ Form("Title:FMD%d%c %s", d, r, extra));
+ }
+ //____________________________________________________________________
+ void Close()
+ {
+ fCanvas->Print("comparison.pdf]", "pdf");
+ }
+ //____________________________________________________________________
+ const char* fName;
+ const char* fTitle;
+ const char* fN1;
+ const char* fN2;
+ TCanvas* fCanvas;
+ TPad* fBody;
+};
+
+//======================================================================
+void
+GetObjects(UShort_t what,
+ const char* fn1, const char* fn2,
+ TObject*& o1, TObject*& o2)
+{
+ // --- Open files --------------------------------------------------
+ TFile* file1 = TFile::Open(fn1, "READ");
+ TFile* file2 = TFile::Open(fn2, "READ");
+
+ if (!file1) {
+ Error("CompareSecMaps", "File %s cannot be opened", fn1);
+ return;
+ }
+
+ if (!file2) {
+ Error("CompareSecMaps", "File %s cannot be opened", fn2);
+ return;
+ }
+
+ // --- Find Objects ------------------------------------------------
+ AliForwardCorrectionManager::ECorrection ewhat = what;
+ // (AliForwardCorrectionManager::ECorrection)what;
+ const char* objName =
+ AliForwardCorrectionManager::Instance().GetObjectName(ewhat);
+
+ o1 = file1->Get(objName);
+ o2 = file2->Get(objName);
+
+ if (!o1) {
+ Error("CompareSecMaps", "File %s does not contain an object named %s",
+ fn1, objName);
+ return;
+ }
+ if (!o2) {
+ Error("CompareSecMaps", "File %s does not contain an object named %s",
+ fn2, objName);
+ return;
+ }
+};
+
+
+
*
* @return Ratio of the two, or null
*/
-TH2*
-Compare2Maps(UShort_t d, Char_t r, UShort_t v,
- const AliFMDCorrSecondaryMap& first,
- const AliFMDCorrSecondaryMap& second)
-{
- TH2* h1 = first.GetCorrection(d, r, v);
- TH2* h2 = second.GetCorrection(d, r, v);
-
- if (!h1) {
- Error("Compare2Maps", "Map for FMD%d%c, vtxbin %3d not found in first",
- d, r, v);
- return 0;
- }
- if (!h1) {
- Error("Compare2Maps", "Map for FMD%d%c, vtxbin %3d not found in second",
- d, r, v);
- return 0;
- }
-
- Double_t vl = first.GetVertexAxis().GetBinLowEdge(v);
- Double_t vh = first.GetVertexAxis().GetBinUpEdge(v);
- TH2* ratio = static_cast<TH2*>(h1->Clone(Form("tmpFMD%d%c_%3d",d,r,v)));
- ratio->SetName(Form("FMD%d%c_vtx%03d_ratio", d, r, v));
- ratio->SetTitle(Form("%+5.1f<v_{z}<%-+5.1f", vl, vh));
- ratio->Divide(h2);
- ratio->SetStats(0);
- ratio->SetDirectory(0);
- ratio->SetZTitle("ratio");
- // ratio->SetMinimum(0.9);
- // ratio->SetMaximum(1.5);
-
- return ratio;
-}
-
-//____________________________________________________________________
-TPad*
-ClearCanvas(TCanvas* c, UShort_t nVtx, UShort_t d, Char_t r,
- const char* n1, const char* n2)
-{
- c->Clear();
- TPad* p1 = new TPad("top", "Top", 0, .95, 1, 1, 0, 0);
- p1->Draw();
- p1->cd();
-
- TLatex* l = new TLatex(.5, .5, Form("Ratio of secondary maps for "
- "FMD%d%c (%s / %s)", d, r, n1, n2));
- l->SetNDC();
- l->SetTextAlign(22);
- l->SetTextSize(0.3);
- l->Draw();
-
- c->cd();
- TPad* body = new TPad("body", "Body", 0, 0, 1, .95, 0, 0);
- body->SetTopMargin(0.05);
- body->SetRightMargin(0.05);
- body->Divide(2, (nVtx+1)/2, 0.001, 0.001);
- body->Draw();
-
- return body;
-}
//____________________________________________________________________
void
CompareSecMaps(const char* fn1, const char* fn2,
- const char* n1=0, const char* n2=0)
+ const char* n1=0, const char* n2=0,
+ bool load=true)
{
- // --- Load libraries ----------------------------------------------
- // gROOT->Macro("$ALICE_ROOT/PWG2/FORWARD/analysis2/scripts/LoadLibs.C");
-
- // --- Open files --------------------------------------------------
- const char* nam1 = n1;
- const char* nam2 = n2;
- if (!n1) nam1 = fn1;
- if (!n2) nam2 = fn2;
-
- TFile* file1 = TFile::Open(fn1, "READ");
- TFile* file2 = TFile::Open(fn2, "READ");
-
- if (!file1) {
- Error("CompareSecMaps", "File %s cannot be opened for %s", fn1, n1);
- return;
+ // --- Load Utilities ----------------------------------------------
+ if (load) {
+ gROOT->Macro("$ALICE_ROOT/PWG2/FORWARD/analysis2/scripts/LoadLibs.C");
+ gROOT->LoadMacro("$ALICE_ROOT/PWG2/FORWARD/analysis2/scripts/CompareCorrs.C");
}
- if (!file2) {
- Error("CompareSecMaps", "File %s cannot be opened for %s", fn2, n2);
- return;
- }
-
- // --- Find Objects ------------------------------------------------
- const char* objName = AliForwardCorrectionManager::Instance()
- .GetObjectName(AliForwardCorrectionManager::kSecondaryMap);
-
- AliFMDCorrSecondaryMap* obj1 =
- static_cast<AliFMDCorrSecondaryMap*>(file1->Get(objName));
- AliFMDCorrSecondaryMap* obj2 =
- static_cast<AliFMDCorrSecondaryMap*>(file2->Get(objName));
-
- if (!obj1) {
- Error("CompareSecMaps", "File %s does not contain an object named %s",
- fn1, objName);
- return;
- }
- if (!obj2) {
- Error("CompareSecMaps", "File %s does not contain an object named %s",
- fn2, objName);
- return;
- }
+ // --- Get Objects -------------------------------------------------
+ TObject* o1 = 0;
+ TObject* o2 = 0;
+ GetObjects(AliForwardCorrectionManager::kSecondaryMap, fn1, fn2, o1, o2);
+ if (!o1 || !o2) return;
+ AliFMDCorrSecondaryMap* obj1 = static_cast<AliFMDCorrSecondaryMap*>(o1);
+ AliFMDCorrSecondaryMap* obj2 = static_cast<AliFMDCorrSecondaryMap*>(o2);
UShort_t nVtx = obj1->GetVertexAxis().GetNbins();
// --- Make canvas -------------------------------------------------
- const char* pdfName = "secMapComparison.pdf";
- gStyle->SetPalette(1);
- gStyle->SetTitleX(.10);
- gStyle->SetTitleY(.99);
- gStyle->SetTitleW(.85);
- gStyle->SetTitleH(.085);
- gStyle->SetTitleFillColor(0);
- gStyle->SetTitleBorderSize(0);
-
- TCanvas* c = new TCanvas("c", "c", 800, TMath::Sqrt(2)*800);
- c->SetFillColor(0);
-
- c->Print(Form("%s[", pdfName), "pdf");
+ Canvas* c = new Canvas("secMapComparison", "Ratio of secondary maps", n1, n2);
+ c->Open();
+ // --- Loop over the data ------------------------------------------
for (UShort_t d = 1; d <= 3; d++) {
UShort_t nR = (d == 1 ? 1 : 2);
for (UShort_t q = 0; q < nR; q++) {
Char_t r = (q == 0 ? 'I' : 'O');
UShort_t nS = (q == 0 ? 20 : 40);
- TPad* body = ClearCanvas(c, nVtx, d, r, nam1, nam2);
+ // --- Make 2D ratios ------------------------------------------
+ c->Clear(nVtx, d, r);
TList hists;
for (UShort_t v=1; v <= nVtx; v++) {
- TVirtualPad* p = body->cd(v);
- // p->SetTopMargin(0.1);
- // p->SetBottomMargin(0.05);
- // p->SetRightMargin(0.05);
+ TVirtualPad* p = c->cd(v);
- TH2* ratio = Compare2Maps(d, r, v, *obj1, *obj2);
+ TH2* h1 = obj1->GetCorrection(d, r, v);
+ TH2* h2 = obj1->GetCorrection(d, r, v);
+
+ if (!h1) {
+ Error("CompareSecMaps",
+ "Map for FMD%d%c, vtxbin %3d not found in first",
+ d, r, v);
+ continue;
+ }
+ if (!h2) {
+ Error("CompareSecMaps",
+ "Map for FMD%d%c, vtxbin %3d not found in second",
+ d, r, v);
+ continue;
+ }
+
+ Double_t vl = obj1->GetVertexAxis().GetBinLowEdge(v);
+ Double_t vh = obj1->GetVertexAxis().GetBinUpEdge(v);
+ TH2* ratio =
+ static_cast<TH2*>(h1->Clone(Form("tmpFMD%d%c_%3d",d,r,v)));
+ ratio->SetName(Form("FMD%d%c_vtx%03d_ratio", d, r, v));
+ ratio->SetTitle(Form("%+5.1f<v_{z}<%-+5.1f", vl, vh));
+ ratio->Divide(h2);
+ ratio->SetStats(0);
+ ratio->SetDirectory(0);
+ ratio->SetZTitle("ratio");
+
if (ratio->GetMaximum()-ratio->GetMinimum() > 10)
p->SetLogz();
ratio->Draw("colz");
hists.AddAt(ratio, v-1);
}
- c->Print(pdfName, Form("Title:FMD%d%c", d, r));
+ c->Print(d, r);
- body = ClearCanvas(c, nVtx, d, r, nam1, nam2);
-
+ // --- Make 1D profiles ----------------------------------------
+ c->Clear(nVtx, d, r);
for (UShort_t v=1; v <= nVtx; v++) {
- TVirtualPad* p = body->cd(v);
- TH2* hist = static_cast<TH2*>(hists.At(v-1));
- TH1* prof = hist->ProjectionX();
+ c->cd(v);
+ TH2* hist = static_cast<TH2*>(hists.At(v-1));
+ TH1* prof = hist->ProjectionX();
prof->Scale(1. / nS);
prof->SetStats(0);
prof->SetMinimum(0.8);
prof->SetMaximum(1.2);
- // prof->Draw("hist");
- // prof->DrawCopy("e same");
prof->Draw();
prof->Fit("pol0","Q");
l1->Draw();
}
- c->Print(pdfName, Form("Title:FMD%d%c profiles", d, r));
+ c->Print(d, r, "profiles");
}
}
- c->Print(Form("%s]", pdfName), "pdf");
- file1->Close();
- file2->Close();
+ // --- Close stuff -------------------------------------------------
+ c->Close();
+ // file1->Close();
+ // file2->Close();
}
+//____________________________________________________________________
+//
+// EOF
+//
--- /dev/null
+/**
+ * Make ratio of two specific maps
+ *
+ * @param d Detector
+ * @param r Ring
+ * @param v Vertex bin (1 based)
+ * @param first First correction
+ * @param second Second correction
+ *
+ * @return Ratio of the two, or null
+ */
+
+//____________________________________________________________________
+void
+CompareVtxBias(const char* fn1, const char* fn2,
+ const char* n1=0, const char* n2=0,
+ bool load=true)
+{
+
+ // --- Load Utilities ----------------------------------------------
+ if (load) {
+ gROOT->Macro("$ALICE_ROOT/PWG2/FORWARD/analysis2/scripts/LoadLibs.C");
+ gROOT->LoadMacro("$ALICE_ROOT/PWG2/FORWARD/analysis2/scripts/CompareCorrs.C");
+ }
+
+ // --- Get Objects -------------------------------------------------
+ TObject* o1 = 0;
+ TObject* o2 = 0;
+ GetObjects(AliForwardCorrectionManager::kVertexBias, fn1, fn2, o1, o2);
+ if (!o1 || !o2) return;
+ AliFMDCorrVertexBias* obj1 = static_cast<AliFMDCorrVertexBias*>(o1);
+ AliFMDCorrVertexBias* obj2 = static_cast<AliFMDCorrVertexBias*>(o2);
+ UShort_t nVtx = obj1->GetVertexAxis().GetNbins();
+
+ // --- Make canvas -------------------------------------------------
+ Canvas* c = new Canvas("vtxBiasComparison", "Ratio of vertex bias", n1, n2);
+ c->Open();
+
+ // --- Loop over the data ------------------------------------------
+ UShort_t d = 0;
+ UShort_t nR = 2;
+ for (UShort_t q = 0; q < nR; q++) {
+ Char_t r = (q == 0 ? 'I' : 'O');
+ UShort_t nS = (q == 0 ? 20 : 40);
+
+ // --- Make 2D ratios ------------------------------------------
+ c->Clear(nVtx, d, r);
+ TList hists;
+ for (UShort_t v=1; v <= nVtx; v++) {
+ TVirtualPad* p = c->cd(v);
+
+ TH2* h1 = obj1->GetCorrection(r, v);
+ TH2* h2 = obj2->GetCorrection(r, v);
+
+ if (!h1) {
+ Error("CompareVtxBias",
+ "Bias for FMD%d%c, vtxbin %3d not found in first",
+ d, r, v);
+ continue;
+ }
+ if (!h2) {
+ Error("CompareVtxBias",
+ "Bias for FMD%d%c, vtxbin %3d not found in second",
+ d, r, v);
+ continue;
+ }
+
+ Double_t vl = obj1->GetVertexAxis().GetBinLowEdge(v);
+ Double_t vh = obj1->GetVertexAxis().GetBinUpEdge(v);
+ TH2* ratio =
+ static_cast<TH2*>(h1->Clone(Form("tmpFMD%d%c_%3d",d,r,v)));
+ ratio->SetName(Form("FMD%d%c_vtx%03d_ratio", d, r, v));
+ ratio->SetTitle(Form("%+5.1f<v_{z}<%-+5.1f", vl, vh));
+ ratio->Divide(h2);
+ ratio->SetStats(0);
+ ratio->SetDirectory(0);
+ ratio->SetZTitle("ratio");
+
+ if (ratio->GetMaximum()-ratio->GetMinimum() > 10)
+ p->SetLogz();
+
+ ratio->Draw("colz");
+ // h2->Draw("colz");
+ hists.AddAt(ratio, v-1);
+ }
+ c->Print(d, r);
+
+ // --- Make 1D profiles ----------------------------------------
+ c->Clear(nVtx, d, r);
+ for (UShort_t v=1; v <= nVtx; v++) {
+ c->cd(v);
+ TH2* hist = static_cast<TH2*>(hists.At(v-1));
+ TH1* prof = hist->ProjectionX();
+ prof->Scale(1. / nS);
+ prof->SetStats(0);
+ prof->SetMinimum(0.8);
+ prof->SetMaximum(1.2);
+
+ prof->Draw();
+ prof->Fit("pol0","Q");
+
+ TF1* f = prof->GetFunction("pol0");
+
+ TLatex* l = new TLatex(0.5, 0.4, Form("A = %f #pm %f",
+ f->GetParameter(0),
+ f->GetParError(0)));
+ l->SetTextAlign(22);
+ l->SetNDC();
+ l->Draw();
+ l->DrawLatex(0.5, 0.3, Form("#chi^2/NDF = %f / %d = %f",
+ f->GetChisquare(),
+ f->GetNDF(),
+ f->GetChisquare() / f->GetNDF()));
+ Double_t dist = TMath::Abs(1 - f->GetParameter(0));
+ l->DrawLatex(0.5, 0.35, Form("|1 - A| = %f %s #deltaA",
+ dist, dist <= f->GetParError(0) ?
+ "#leq" : ">"));
+
+ TLine* l1 = new TLine(-4, 1, 6, 1);
+ l1->SetLineColor(kRed);
+ l1->SetLineStyle(2);
+ l1->Draw();
+ }
+
+ c->Print(d, r, "profiles");
+ }
+
+ // --- Close stuff -------------------------------------------------
+ c->Close();
+ // file1->Close();
+ // file2->Close();
+}
+
+
+//____________________________________________________________________
+//
+// EOF
+//
*
* @ingroup pwg2_forward_analysis_scripts
*/
-void DrawSummary(const char* fname="AnalysisResults.root")
+void DrawSummary(const char* fname="forward_eloss.root")
{
if (!CheckFitter(fname)) {
Error("DrawFits", "File not opened");
* @ingroup pwg2_forward_analysis_scripts
*/
void
-DrawFits(const char* fname="AnalysisResults.root")
+DrawAnaFits(const char* fname="forward_eloss.root")
{
if (!CheckCanvas()) {
Error("DrawFits", "No canvas");
*
* @par Input:
* The input file is expected to contain a AliFMDCorrELossFit object
- * named @i elossfits in the top level directory
+ * named @i elossfits in the top level directory.
*
* @para Output:
* A multi-page PDF. Note, that the PDF generated by ROOT in this way
* @ingroup pwg2_forward_analysis_scripts
*/
void
-DrawELossFits(const char* fname, const char* option="err")
+DrawCorrELoss(const char* fname, const char* option="err")
{
//__________________________________________________________________
// Load libraries and object
* @ingroup pwg2_forward_analysis_scripts
*/
void
-ExtractELoss(const char* fname="energyFits.root",
+ExtractELoss(const char* fname="forward_eloss.root",
UShort_t sys=1, UShort_t sNN=900, Short_t field=5, Bool_t mc=false)
{
#ifdef __CINT__
*
* @ingroup pwg2_forward_analysis_scripts
*/
-void FitELoss(Int_t n, UShort_t d, Char_t r, Float_t eta)
+void TestFitELoss(Int_t n, UShort_t d, Char_t r, Float_t eta)
{
TList* ef1 = CheckEF();
TCanvas* c1 = CheckC();
UShort_t cms,
Short_t field,
Bool_t mc,
- const char* filename="AnalysisResults.root")
+ const char* filename="forward_eloss.root")
: fFitter(0),
fAxis(0),
fFits("AliFMDCorrELossFit::ELossFit"),
*
*/
void
-RunMakeELossFit(UShort_t sys,
- UShort_t cms,
- Short_t field,
- Bool_t mc=false,
- const char* filename="AnalysisResults.root")
+TestRunMakeELossFit(UShort_t sys,
+ UShort_t cms,
+ Short_t field,
+ Bool_t mc=false,
+ const char* filename="forward_eloss.root")
{
std::cout << "Loading libraries ..." << std::endl;
gROOT->Macro("$ALICE_ROOT/PWG2/FORWARD/analysis2/scripts/LoadLibs.C");
gROOT->LoadMacro("$ALICE_ROOT/PWG2/FORWARD/analysis2/scripts/Compile.C");
std::cout << "Compiling MakeELossFit.C script ..." << std::endl;
- Compile("$ALICE_ROOT/PWG2/FORWARD/analysis2/scripts/MakeELossFit.C");
+ Compile("$ALICE_ROOT/PWG2/FORWARD/analysis2/scripts/TestMakeELossFit.C");
std::cout << "Making MakeELossFit object (sys=" << sys
<< ", cms=" << cms << ", field=" << field << ", mc=" << mc
<< ")" << std::endl;
- MakeELossFit mef(sys, cms, field, mc, "AnalysisResults.root");
+ MakeELossFit mef(sys, cms, field, mc, filename);
- std::cout << "Runing maker ..." << std::endl;
+ std::cout << "Running maker ..." << std::endl;
mef.Run();
}
//