]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Simple GUI for the spectra OADB
authormfloris <mfloris@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Apr 2011 14:59:18 +0000 (14:59 +0000)
committermfloris <mfloris@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Apr 2011 14:59:18 +0000 (14:59 +0000)
OADB/macros/spectraOADBGUI.C [new file with mode: 0644]

diff --git a/OADB/macros/spectraOADBGUI.C b/OADB/macros/spectraOADBGUI.C
new file mode 100644 (file)
index 0000000..5b18850
--- /dev/null
@@ -0,0 +1,389 @@
+//
+// Author: Michele Floris APR2011
+// Derived by root's the statusBar.C tutorial
+// This macro allows to browse the OADB of the spectra
+
+
+#include <TApplication.h>
+#include <TGClient.h>
+#include <TGButton.h>
+#include <TGFrame.h>
+#include <TFrame.h>
+#include <TRootEmbeddedCanvas.h>
+#include <TGStatusBar.h>
+#include <TGComboBox.h>
+#include <TCanvas.h>
+#include <TF1.h>
+#include <TRandom.h>
+#include <TGraph.h>
+#include <TAxis.h>
+#include <AliOADBPWG2Spectra.h>
+#include "TSystem.h"
+#include "AliOADBContainer.h"
+#include <TGTextEntry.h>
+#include "TFile.h"
+#include <iostream>
+#include "TH1D.h"
+#include "TInterpreter.h"
+
+using namespace std;
+
+
+class MyMainFrame : public TGMainFrame {
+
+private:
+  TRootEmbeddedCanvas  *fEcan; // embedded canvas
+  TGStatusBar          *fStatusBar;// status bar
+  TGComboBox           *fComboDetector;//detectors
+  TGComboBox           *fComboParticle;//particle
+  TGComboBox           *fComboCharge;//charge
+  TGComboBox           *fComboPID;//PID
+  TGComboBox           *fComboContainer;//container
+  TGTextEntry          *fRunNumber; // run number 
+  TGComboBox           *fComboCentr; // centr tag
+  TGTextEntry          *fTextCentrBin; // centrality bin
+  TGTextEntry          *fTextDrawOpt; // draw opt
+  TGTextEntry          *fTextSaveName; // save name
+  AliOADBPWG2Spectra   *fOADBSpectra; // spectra OADB
+  AliOADBContainer     *fOADBContainer; // OADB container
+   
+  static const char * fkContainers[];
+  static const Int_t fkNContainers ;
+  static const char * fkCentrTags[];
+  static const Int_t fkNCentrTags ;
+
+public:
+  MyMainFrame(const TGWindow *p, UInt_t w, UInt_t h);
+  virtual ~MyMainFrame();
+  void DoExit();
+  void DoDraw();
+  void DoRatio();
+  void DoLegend();
+  void DoLoad();
+  void DoClear();
+  void DoPrint();
+  void DoSelectedDetector(Int_t id);
+  void SetStatusText(const char *txt, Int_t pi);
+  void EventInfo(Int_t event, Int_t px, Int_t py, TObject *selected);
+   
+  ClassDef(MyMainFrame, 0)
+};
+
+const char * MyMainFrame::fkContainers[] = {"Corrected", "Raw"};
+const Int_t MyMainFrame::fkNContainers = 2;
+const char * MyMainFrame::fkCentrTags[] = {"MB", "Ntracks", "SPD2"};
+const Int_t MyMainFrame::fkNCentrTags = 3;
+
+void MyMainFrame::DoSelectedDetector(Int_t id) {
+  // Change the analysis type based on the detector
+  cout << "ID " << id << endl;
+  if (id == AliOADBPWG2Spectra::kTOFTPC) {
+    fComboPID->Select(AliOADBPWG2Spectra::kNSigma);
+  }
+  else {
+    fComboPID->Select(AliOADBPWG2Spectra::kGaussFit);
+  }
+
+}
+
+void MyMainFrame::DoPrint()
+{
+  // print to file
+  TCanvas *c1 = fEcan->GetCanvas();
+  c1->Print(fTextSaveName->GetText());
+}
+void MyMainFrame::DoClear()
+{
+  // clear canvas
+  TCanvas *c1 = fEcan->GetCanvas();
+  c1->Clear();
+  c1->Update();
+  c1->Modified();
+  c1->Update(); 
+
+}
+
+void MyMainFrame::DoLoad()
+{
+  // Load file
+  cout << "Getting " << fkContainers[fComboContainer->GetSelected()] << endl;
+  cout << fRunNumber->GetText() << endl;
+  
+  TString fileName = AliOADBPWG2Spectra::GetOADBPWG2SpectraFileName();
+  TFile * f = new TFile (fileName);
+  fOADBContainer = (AliOADBContainer*) f->Get(fkContainers[fComboContainer->GetSelected()]);
+  f->Close();
+  fOADBSpectra = (AliOADBPWG2Spectra*) fOADBContainer->GetObject(atoi(fRunNumber->GetText() ));
+  if(!fOADBSpectra) fOADBContainer->List();
+  fOADBSpectra->Print();
+}
+
+void MyMainFrame::DoLegend()
+{
+  // legend
+  gInterpreter->ProcessLine("NewLegend(\"\", \"lpf\",0,1,0);");
+  TCanvas *c1 = fEcan->GetCanvas();
+  c1->Update();
+  c1->Modified();
+  c1->Update(); 
+}
+void MyMainFrame::DoRatio() {
+  // Divide 2 histos on canvas
+  gInterpreter->ProcessLine("Divide2HistosOnCanvas();");
+}
+
+
+void MyMainFrame::DoDraw()
+{
+   // Draw something in the canvas
+
+   Printf("Slot DoDraw()");
+   cout << "DET " << fComboDetector->GetSelected() << endl;
+   if(!fOADBSpectra) {
+     cout << "spectra not loaded" << endl;
+     DoLoad();
+     if(!fOADBSpectra)      {
+       cout << "ERROR: Cannot load spectra" << endl;       
+       return;
+     }
+   }
+
+   TCanvas *c1 = fEcan->GetCanvas();
+   c1->cd();
+   TH1D * h = 0;
+   if(strcmp(fkCentrTags[fComboCentr->GetSelected()],"")){
+       h = fOADBSpectra->GetHisto(fComboDetector->GetSelected(), 
+                                 fComboPID->GetSelected(), 
+                                 fComboParticle->GetSelected(), 
+                                 fComboCharge->GetSelected(), 
+                                 fkCentrTags[fComboCentr->GetSelected()],
+                                 atoi(fTextCentrBin->GetText()));
+
+     }
+     else {
+       h = fOADBSpectra->GetHisto(fComboDetector->GetSelected(), 
+                                 fComboPID->GetSelected(), 
+                                 fComboParticle->GetSelected(), 
+                                 fComboCharge->GetSelected());
+
+     }
+   // Draw the selected histogram
+
+   if(!h) {
+     cout << "Cannot get pointer to histo" << endl;
+     
+     cout << fkCentrTags[fComboCentr->GetSelected()] << " " << 
+   
+     fOADBSpectra->GetHistoName(fComboDetector->GetSelected(), 
+                               fComboPID->GetSelected(), 
+                               fComboParticle->GetSelected(), 
+                               fComboCharge->GetSelected(), 
+                               fkCentrTags[fComboCentr->GetSelected()],
+                               atoi(fTextCentrBin->GetText()))
+       << endl;
+
+     return;
+   }
+   TString opt = fTextDrawOpt->GetText();
+   if(opt=="auto") {
+     c1->GetListOfPrimitives()->Print();
+     if (c1->GetListOfPrimitives()->GetEntries()>0) opt = "same";
+     else opt = "";
+   }
+   
+   h->SetXTitle("p_{T} (GeV/c)");
+   //   h->SetXTitle("dN/dp_{T}");
+   h->Draw(opt);
+   
+   // TCanvas::Update() draws the frame, after which it can be changed
+   c1->Update();
+   c1->Modified();
+   c1->Update();
+}
+
+void MyMainFrame::DoExit()
+{
+   printf("Exit application...");
+   gApplication->Terminate(0);
+}
+
+void MyMainFrame::SetStatusText(const char *txt, Int_t pi)
+{
+   // Set text in status bar.
+   fStatusBar->SetText(txt,pi);
+}
+
+void MyMainFrame::EventInfo(Int_t event, Int_t px, Int_t py, TObject *selected)
+{
+//  Writes the event status in the status bar parts
+
+   const char *text0, *text1, *text3;
+   char text2[50];
+   text0 = selected->GetTitle();
+   SetStatusText(text0,0);
+   text1 = selected->GetName();
+   SetStatusText(text1,1);
+   if (event == kKeyPress)
+      sprintf(text2, "%c", (char) px);
+   else
+      sprintf(text2, "%d,%d", px, py);
+   SetStatusText(text2,2);
+   text3 = selected->GetObjectInfo(px,py);
+   SetStatusText(text3,3);
+}
+
+MyMainFrame::MyMainFrame(const TGWindow *p, UInt_t w, UInt_t h) :
+  TGMainFrame(p, w, h), fOADBContainer(0), fOADBSpectra(0)
+{
+  // Create a horizontal frame (canvas and status bar on the left, buttons on the right)
+   TGHorizontalFrame *hframeMain = new TGHorizontalFrame(this, 200, 40);
+
+   // Create a vertical frame for the canvas and for the status bar
+   TGVerticalFrame *vframeCanvas = new TGVerticalFrame(this, 200, 40);
+
+   // Create the embedded canvas
+   fEcan = new TRootEmbeddedCanvas(0,this,500,400);
+   Int_t wid = fEcan->GetCanvasWindowId();
+   TCanvas *myc = new TCanvas("MyCanvas", 10,10,wid);
+   cout << myc << endl;
+   
+   fEcan->AdoptCanvas(myc);
+   myc->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)","MyMainFrame",this, 
+               "EventInfo(Int_t,Int_t,Int_t,TObject*)");
+
+   vframeCanvas->AddFrame(fEcan, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX  | kLHintsExpandY,0,0,1,1));
+   // status bar
+   Int_t parts[] = {45, 15, 10, 30};
+   fStatusBar = new TGStatusBar(this, 50, 10, kVerticalFrame);
+   fStatusBar->SetParts(parts, 4);
+   fStatusBar->Draw3DCorner(kFALSE);
+   vframeCanvas->AddFrame(fStatusBar, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
+   
+   hframeMain->AddFrame(vframeCanvas, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX  | kLHintsExpandY, 2, 2, 2, 2));
+
+   // Create a vertical frame containing  buttons and controls
+   TGVerticalFrame *vframeButtons = new TGVerticalFrame(this, 200, 40);
+  
+   // Container
+   fComboContainer = new TGComboBox(vframeButtons);
+   vframeButtons->AddFrame(fComboContainer, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
+   for(Int_t icont = 0; icont < fkNContainers; icont++){
+     fComboContainer->AddEntry(fkContainers[icont],icont);
+   }
+   fComboContainer->Select(0);
+   fComboContainer->Resize(120,20);
+   fRunNumber = new TGTextEntry (vframeButtons, "116562");
+   vframeButtons->AddFrame(fRunNumber, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
+   
+
+   TGTextButton *load = new TGTextButton(vframeButtons, "&Load");
+   load->Connect("Clicked()", "MyMainFrame", this, "DoLoad()");
+   vframeButtons->AddFrame(load, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
+
+   // Combos
+   fComboDetector = new TGComboBox(vframeButtons);
+   vframeButtons->AddFrame(fComboDetector, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));   
+   for(Int_t idet = 0; idet < AliOADBPWG2Spectra::kNDetectors; idet++){
+     fComboDetector->AddEntry(AliOADBPWG2Spectra::GetDetectorName(idet),idet);
+   }
+   fComboDetector->Resize(120,20);
+   fComboDetector->Select(1);
+   fComboDetector->Connect("Selected(Int_t)", "MyMainFrame", this, "DoSelectedDetector(Int_t)");
+
+   fComboPID = new TGComboBox(vframeButtons);
+   vframeButtons->AddFrame(fComboPID, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));   
+   for(Int_t idet = 0; idet < AliOADBPWG2Spectra::kNPIDTypes; idet++){
+     fComboPID->AddEntry(AliOADBPWG2Spectra::GetPIDName(idet),idet);
+   }
+   fComboPID->Resize(120,20);
+   fComboPID->Select(0);
+
+   fComboCharge = new TGComboBox(vframeButtons);
+   vframeButtons->AddFrame(fComboCharge, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));   
+   for(Int_t idet = 0; idet < AliOADBPWG2Spectra::kNCharge; idet++){
+     fComboCharge->AddEntry(AliOADBPWG2Spectra::GetChargeName(idet),idet);
+   }
+   fComboCharge->Resize(120,20);
+   fComboCharge->Select(0);
+
+   fComboParticle = new TGComboBox(vframeButtons);
+   vframeButtons->AddFrame(fComboParticle, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));   
+   for(Int_t idet = 0; idet < AliOADBPWG2Spectra::kNParticle; idet++){
+     fComboParticle->AddEntry(AliOADBPWG2Spectra::GetParticleName(idet),idet);
+   }
+   fComboParticle->Resize(120,20);
+   fComboParticle->Select(0);
+
+   fComboCentr = new TGComboBox(vframeButtons);
+   vframeButtons->AddFrame(fComboCentr, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));   
+   for(Int_t icentr = 0; icentr < fkNCentrTags; icentr++){
+     fComboCentr->AddEntry(fkCentrTags[icentr],icentr);
+   }
+   fComboCentr->Resize(120,20);
+   fComboCentr->Select(0);
+
+   // Text fields
+   fRunNumber; // run number 
+   fTextCentrBin = new TGTextEntry (vframeButtons, "1");
+   fTextCentrBin->Resize(120,20);
+   vframeButtons->AddFrame(fTextCentrBin, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));   
+   fTextDrawOpt = new TGTextEntry (vframeButtons, "auto");
+   vframeButtons->AddFrame(fTextDrawOpt, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));   
+   fTextDrawOpt->Resize(120,20);
+   fTextSaveName = new TGTextEntry (vframeButtons, "spectra.png");
+   vframeButtons->AddFrame(fTextSaveName, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));   
+   fTextSaveName->Resize(120,20);
+
+   // buttons
+   TGTextButton *draw = new TGTextButton(vframeButtons, "&Draw");
+   draw->Connect("Clicked()", "MyMainFrame", this, "DoDraw()");
+   vframeButtons->AddFrame(draw, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
+   TGTextButton *legend = new TGTextButton(vframeButtons, "&Legend");
+   legend->Connect("Clicked()", "MyMainFrame", this, "DoLegend()");
+   vframeButtons->AddFrame(legend, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
+   TGTextButton *ratio = new TGTextButton(vframeButtons, "&Ratio");
+   ratio->Connect("Clicked()", "MyMainFrame", this, "DoRatio()");
+   vframeButtons->AddFrame(ratio, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
+   TGTextButton *clear = new TGTextButton(vframeButtons, "&Clear");
+   clear->Connect("Clicked()", "MyMainFrame", this, "DoClear()");
+   vframeButtons->AddFrame(clear, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
+   TGTextButton *print = new TGTextButton(vframeButtons, "&Print");
+   print->Connect("Clicked()", "MyMainFrame", this, "DoPrint()");
+   vframeButtons->AddFrame(print, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
+   TGTextButton *exit = new TGTextButton(vframeButtons, "&Exit ");
+   exit->Connect("Pressed()", "MyMainFrame", this, "DoExit()");
+   vframeButtons->AddFrame(exit, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
+
+
+
+
+   hframeMain->AddFrame(vframeButtons, new TGLayoutHints(kLHintsRight, 2, 2, 2, 2));
+
+   AddFrame(hframeMain,new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX  | kLHintsExpandY, 2, 2, 2, 2));
+
+   // Set a name to the main frame   
+   SetWindowName("Spectra OADB Browser");
+   MapSubwindows();
+
+   // Initialize the layout algorithm via Resize()
+   Resize(GetDefaultSize());
+
+   // Map main frame
+   MapWindow();
+}
+
+
+MyMainFrame::~MyMainFrame()
+{
+   // Clean up main frame...
+   Cleanup();
+   delete fEcan;
+}
+
+
+void spectraOADBGUI()
+{
+  // Popup the GUI...
+  
+  new MyMainFrame(gClient->GetRoot(), 200, 200);
+}