-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * *
- * Author: The ALICE Off-line Project. *
- * Contributors are mentioned in the code where appropriate. *
- * *
- * Permission to use, copy, modify and distribute this software and its *
- * documentation strictly for non-commercial purposes is hereby granted *
- * without fee, provided that the above copyright notice appears in all *
- * copies and that both the copyright notice and this permission notice *
- * appear in the supporting documentation. The authors make no claims *
- * about the suitability of this software for any purpose. It is *
- * provided "as is" without express or implied warranty. *
- **************************************************************************/
-
-/* $Id$ */
-
-//-----------------------------------------------------------------
-// AliTagAnalysisFrame class
-// The class that deals with the event tag tab of the GUI
-// Origin: Panos Christakoglou, UOA-CERN, Panos.Christakoglou@cern.ch
-//-----------------------------------------------------------------
-
-#include "TGTextEntry.h"
-#include "TGLabel.h"
-#include "TGMsgBox.h"
-#include "TGListBox.h"
-#include "TGComboBox.h"
-
-#include "TSystem.h"
-#include "TChain.h"
-#include "TGrid.h"
-#include "TGridResult.h"
-#include "TEventList.h"
-
-#include "AliRunTagCuts.h"
-#include "AliLHCTagCuts.h"
-#include "AliDetectorTagCuts.h"
-#include "AliEventTagCuts.h"
-#include "AliTagAnalysis.h"
-
-#include "AliAnalysisGUI.h"
-#include "AliAlienBrowser.h"
-#include "AliTagFrame.h"
-#include "AliTagAnalysisFrame.h"
-
-ClassImp(AliTagAnalysisFrame)
-
-//___________________________________________________________________________
-AliTagAnalysisFrame::AliTagAnalysisFrame(const TGWindow *main, UInt_t w, UInt_t h, AliAnalysisGUI* aliAnalysisGUI):
- TGMainFrame(main, w, h, kHorizontalFrame),
- fkNumberOfTags(3),
- fVFrame1(0), fVFrame2(0),
- fGroup1(0), fGroup2(0), fGroup3(0),
- fAliAnalysisGUI(aliAnalysisGUI),
- fTagFrame(0), fAliEnBrowser(0),
- fLocalLabel1(0), fLocalPath(0),
- fLocalButton(0), fButtonInsert(0), fButtonRun(0),
- fComboEventTagCut(0), fGridLabel1(0),
- fGridPath(0), fGridButton(0), fButtonInsert2(0), fButtonRun2(0),
- fComboEventTagCut2(0), fTagResult(0),
- fAnalysisChain(0), fListBox(0),
- fBrowser(NULL), fBrowserButton(NULL),
- fAliTagAnalysis(0), fAliRunCuts(0), fAliLHCCuts(0),
- fAliDetectorCuts(0), fAliEventCuts(0), fEventTagCutsName(0) {
- // Constructor.
-
-/*
- // lazy initialization to fEventTagCutsName
- const char *tmp[] ={ "Vx", "Vy", "Vz", "Participants", "Impact parameter", "Primary vertex",
- "ZDC - neutron 1", "ZDC - proton 1", "ZDC - neutron 2", "ZDC - proton 2",
- "ZDC EM", "TO VertexZ",
- "Multiplicity", "Positive Multiplicity", "Negative Multiplicity",
- "Neutral Multiplicity", "VO", "Cascades", "Kinks",
- "Jet Energy", "Hard Photons Candidates", "Neutral Energy",
- "Charged above 1 GeV", "Charged above 3 GeV", "Charged above 10 GeV",
- "Muons above 1 GeV", "Muons above 3 GeV", "Muons above 10 GeV",
- "Electron above 1 GeV", "Electron above 3 GeV", "Electron above 10 GeV",
- "Electrons range", "Muons range", "Pions range", "Kaons range",
- "Protons range", "Lambda range", "Photons range", "PiOs range",
- "Neutrons range", "KaonOs range"
- };
- */
-
- const char *tmp[] = {"MultiplicityRange","VOsRange", "NPionRange" };
- fEventTagCutsName = tmp;
-
- // fEventTagCutsName = new TList();
-
- // fEventTagCutsName[0] = "NegMultiplicityRange";
- // fEventTagCutsName[1] = "VOsRange";
- // fEventTagCutsName[2] = "NPionRange";
-
- fVFrame1 = new TGVerticalFrame(this, 200, 150);
- this->AddFrame(fVFrame1, new TGLayoutHints(kLHintsLeft, 5,5,5,5));
-
- // Local Group
- fGroup1 = new TGGroupFrame(fVFrame1, "Local", kVerticalFrame);
- fGroup1->SetTitlePos(TGGroupFrame::kLeft); // left aligned
- fVFrame1->AddFrame(fGroup1, new TGLayoutHints(kLHintsTop, 5,5,5,5));
-
- BuildLocalGroup(fGroup1);
-
- // Grid Group
- fGroup2 = new TGGroupFrame(fVFrame1, "Grid", kVerticalFrame);
- fGroup2->SetTitlePos(TGGroupFrame::kLeft); // left aligned
- fVFrame1->AddFrame(fGroup2, new TGLayoutHints(kLHintsBottom, 5,5,5,5));
-
- BuildGridGroup(fGroup2);
-
- // Vertical Frame 2
-
- fVFrame2 = new TGVerticalFrame(this, 200, 200);
- AddFrame(fVFrame2, new TGLayoutHints(kLHintsRight| kLHintsExpandX
- | kLHintsExpandY, 5,5,5,5));
-
- fGroup3 = new TGGroupFrame(fVFrame2, "Results",
- kVerticalFrame | kFitWidth | kFitHeight);
- fGroup3->SetTitlePos(TGGroupFrame::kLeft); // left aligned
- fVFrame2->AddFrame(fGroup3,
- new TGLayoutHints(kLHintsTop | kLHintsExpandX
- | kLHintsExpandY, 5,5,5,5));
-
- fListBox = new TGListBox(fGroup3);
- fGroup3->AddFrame(fListBox,
- new TGLayoutHints(kLHintsTop | kLHintsExpandX |
- kLHintsExpandY, 5,5,5,5));
-
- fAliTagAnalysis = new AliTagAnalysis();
- fAliRunCuts = new AliRunTagCuts();
- fAliLHCCuts = new AliLHCTagCuts();
- fAliDetectorCuts = new AliDetectorTagCuts();
- fAliEventCuts = new AliEventTagCuts();
-
- MapSubwindows();
- Resize();
- MapWindow();
-}
-
-//___________________________________________________________________________
-AliTagAnalysisFrame::~AliTagAnalysisFrame() {
- // AliTagAnalysisFrame dctor.
-
- delete fGroup1;
- delete fLocalLabel1;
- delete fLocalPath;
- delete fLocalButton;
- delete fGroup2;
- delete fGridLabel1;
- delete fGridPath;
- delete fGridButton;
-
- delete fAliTagAnalysis;
- delete fAliRunCuts;
- delete fAliLHCCuts;
- delete fAliDetectorCuts;
- delete fAliEventCuts;
- delete fTagResult;
- delete fAnalysisChain;
-
- delete fTagFrame;
-}
-
-//___________________________________________________________________________
-void AliTagAnalysisFrame::AddResult (const char* line) {
- // Add a new line in the result group box.
-
- // fGroup3->AddFrame(new TGLabel(fGroup3, new TGString(line)),
- // new TGLayoutHints(kLHintsTop, 5,5,5,5));
-
- fListBox->AddEntry(line, fListBox->GetNumberOfEntries());
-
- MapSubwindows();
- Resize();
- MapWindow();
-}
-
-//___________________________________________________________________________
-void AliTagAnalysisFrame::BuildLocalGroup (TGCompositeFrame* frame) {
- // The Local Group Frame
- fLocalLabel1 = new TGLabel(frame, new TGString("Chain Local Tag Path"));
- frame->AddFrame(fLocalLabel1, new TGLayoutHints(kLHintsTop, 5,5,5,5));
-
- fLocalPath = new TGTextEntry(frame, new TGTextBuffer(40));
- fLocalPath->SetEnabled(false);
- frame->AddFrame(fLocalPath, new TGLayoutHints(kLHintsTop, 5,5,5,5));
-
- fLocalButton = new TGTextButton(frame, "Browse...", 0);
- frame->AddFrame(fLocalButton, new TGLayoutHints(kLHintsLeft, 5,5,5,5));
-
- fLocalButton->Connect("Clicked()", "AliTagAnalysisFrame", this, "LocalBrowse()");
-
- fComboEventTagCut = new TGComboBox(frame, "Select Tag Cuts...", 1);
- frame->AddFrame(fComboEventTagCut,
- new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 5,5,5,5));
-
- for(int i=0; i!=fkNumberOfTags; i++)
- fComboEventTagCut->AddEntry(fEventTagCutsName[i],i);
-
- fComboEventTagCut->Resize(150, 20);
-
- fButtonInsert = new TGTextButton(frame, "Insert Tag Cuts Range", 2);
- frame->AddFrame(fButtonInsert,
- new TGLayoutHints(kLHintsLeft | kLHintsTop, 5,5,5,5));
-
- fButtonInsert->Connect("Clicked()", "AliTagAnalysisFrame", this,
- "InsertTagCutsRangeLocal()");
-
- fButtonRun = new TGTextButton(frame, " Run ", 3);
- frame->AddFrame(fButtonRun,
- new TGLayoutHints(kLHintsTop | kLHintsRight, 5,5,5,5));
-
- fButtonRun->Connect("Clicked()", "AliTagAnalysisFrame", this, "RunLocal()");
-}
-
-//___________________________________________________________________________
-void AliTagAnalysisFrame::BuildGridGroup (TGCompositeFrame* frame) {
- // The Grid Group Frame
-
- fGridLabel1 = new TGLabel(frame, new TGString("Chain Grid Tag Path"));
- frame->AddFrame(fGridLabel1, new TGLayoutHints(kLHintsTop, 5,5,5,5));
-
- fGridPath = new TGTextEntry(frame, new TGTextBuffer(40));
- fGridPath->SetEnabled(false);
- // fGridPath->SetText("/alice/cern.ch/user/p/pchrista/PDC06/Tags/pp/1");
- frame->AddFrame(fGridPath, new TGLayoutHints(kLHintsTop, 5,5,5,5));
-
- fGridButton = new TGTextButton(frame, "Browse...", 0);
- frame->AddFrame(fGridButton, new TGLayoutHints(kLHintsLeft, 5,5,5,5));
-
- fGridButton->Connect("Clicked()", "AliTagAnalysisFrame", this, "GridBrowse()");
-
- fComboEventTagCut2 = new TGComboBox(frame, "Select Tag Cuts...", 1);
- frame->AddFrame(fComboEventTagCut2,
- new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 5,5,5,5));
-
- for(int i=0; i!=fkNumberOfTags; i++)
- fComboEventTagCut2->AddEntry(fEventTagCutsName[i],i);
-
- fComboEventTagCut2->Resize(150, 20);
-
- fButtonInsert2 = new TGTextButton(frame, "Insert Tag Cuts Range", 2);
- frame->AddFrame(fButtonInsert2,
- new TGLayoutHints(kLHintsLeft, 5,5,5,5));
-
- fButtonInsert2->Connect("Clicked()", "AliTagAnalysisFrame", this,
- "InsertTagCutsRangeGrid()");
-
- fButtonRun2 = new TGTextButton(frame," Run " , 2);
- frame->AddFrame(fButtonRun2,
- new TGLayoutHints(kLHintsRight, 5,5,5,5));
-
- fButtonRun2->Connect("Clicked()", "AliTagAnalysisFrame", this, "RunGrid()");
-
-}
-
-//___________________________________________________________________________
-void AliTagAnalysisFrame::LocalBrowse() {
- // Browse local directories.
-
- fBrowser = new TGTransientFrame(gClient->GetRoot(), fAliAnalysisGUI, 450, 200);
- fAliEnBrowser = new AliAlienBrowser(fBrowser, 300, 200, this,
- "AliTagAnalysisFrame", kLocalBrowse);
- fBrowser->AddFrame(fAliEnBrowser, new TGLayoutHints(kLHintsTop, 5,5,5,5));
- fBrowserButton = new TGTextButton(fBrowser, " OK ", 0);
- fBrowser->AddFrame(fBrowserButton, new TGLayoutHints(kLHintsRight, 5,5,5,5));
- fBrowserButton->Connect("Clicked()", "AliTagAnalysisFrame", this, "OnOKButton()");
-
- fAliEnBrowser->AddItem(0, "/");
-
- fAliEnBrowser->GotoDir(gSystem->pwd());
-
- fBrowser->MapSubwindows();
- fBrowser->Resize();
- fBrowser->MapWindow();
-}
-
-//___________________________________________________________________________
-void AliTagAnalysisFrame::GridBrowse() {
- // Opens a browser for grid directories.
-
- if (!fAliAnalysisGUI->IsConnected()){
- new TGMsgBox(gClient->GetRoot(), this, "Connect",
- "Please connect to AliEn", 0, kMBOk);
- return;
- }
-
- fBrowser = new TGTransientFrame(gClient->GetRoot(), fAliAnalysisGUI, 450, 200);
-
- fAliEnBrowser = new AliAlienBrowser(fBrowser, 300, 200, this,
- "AliTagAnalysisFrame", kGridBrowse);
- fBrowser->AddFrame(fAliEnBrowser, new TGLayoutHints(kLHintsTop, 5,5,5,5));
-
- fBrowserButton = new TGTextButton(fBrowser, " OK ", 0);
- fBrowser->AddFrame(fBrowserButton, new TGLayoutHints(kLHintsRight, 5,5,5,5));
-
- fBrowserButton->Connect("Clicked()", "AliTagAnalysisFrame", this, "OnOKButton()");
-
- fAliEnBrowser->AddItem(0, "/");
-
- fAliEnBrowser->GotoDir(gGrid->GetHomeDirectory());
-
- fBrowser->MapSubwindows();
- fBrowser->Resize();
- fBrowser->MapWindow();
-}
-
-//___________________________________________________________________________
-void AliTagAnalysisFrame::InsertTagCutsRangeLocal() {
- // slot
- InsertTagCutsRange(fComboEventTagCut->GetSelected());
-}
-
-
-//___________________________________________________________________________
-void AliTagAnalysisFrame::InsertTagCutsRangeGrid() {
- // slot
- InsertTagCutsRange(fComboEventTagCut2->GetSelected());
-}
-
-//___________________________________________________________________________
-void AliTagAnalysisFrame::InsertTagCutsRange(Int_t id) {
- // insert the event tag range
-
- // if nth is selected
- if(id == -1)
- return;
-
-
- switch(id){
- case 0: // SetMultiplicity Range
-
- fTagFrame = new AliTagFrame(gClient->GetRoot(), this, 400, 200, kHorizontalFrame, fComboEventTagCut->GetTextEntry()->GetText(), fComboEventTagCut->GetSelected(), kRangeMinMax);
-
- Int_t min = fTagFrame->GetRangeMin();
- Int_t max = fTagFrame->GetRangeMax();
-
- fAliEventCuts->SetMultiplicityRange(min, max);
-
- TString res = TString("Multiplicity Range Min: ");
- res += min;
- res += " Max: ";
- res += max;
-
- AddResult(res.Data());
-
- break;
- }
-}
-
-//___________________________________________________________________________
-void AliTagAnalysisFrame::RunLocal() {
- // Run local query
-#ifdef GUIDEBUG
- printf("*******************************\n");
- printf("*** Querying the tags ***\n");
- printf("*******************************\n");
-#endif
-
- //local tags
- fAliTagAnalysis->ChainLocalTags(fLocalPath->GetText());
-
-#ifdef GUIDEBUG
- printf("*******************************\n");
- printf("*** Getting the Chain ***\n");
- printf("*******************************\n");
-#endif
-
- fAnalysisChain = new TChain("esdTree");
- fAnalysisChain = fAliTagAnalysis->QueryTags(fAliRunCuts,fAliLHCCuts,fAliDetectorCuts,fAliEventCuts);
-
- TString res = TString("Number of Accepted Events: ");
- res += fAnalysisChain->GetEventList()->GetN();
-
- AddResult(res.Data());
-}
-
-//___________________________________________________________________________
-void AliTagAnalysisFrame::RunGrid() {
- // Run Grid query
-
-
- // fGroup3->SetCleanup(kDeepCleanup);
-
- if (!fAliAnalysisGUI->IsConnected()){
- new TGMsgBox(gClient->GetRoot(), this, "Connect",
- "Please connect to AliEn", 0, kMBOk);
- return;
- }
-
-
-#ifdef GUIDEBUG
- printf("*******************************\n");
- printf("*** Querying the tags ***\n");
- printf("*******************************\n");
-#endif
-
-
- // TGridResult* TagResult = gGrid->Query("/alice/cern.ch/user/p/pchrista/PDC06/Tags/pp/1","*tag.root","","");
- fTagResult = gGrid->Query(fGridPath->GetText(), "*tag.root", "", "");
-
- // fAliTagAnalysis->ChainLocalTags("../tags");
-
- fAliTagAnalysis->ChainGridTags(fTagResult);
-
- //////////////////////////////////////////////////////////////////
- //Get the chain
-#ifdef GUIDEBUG
- printf("*******************************\n");
- printf("*** Getting the Chain ***\n");
- printf("*******************************\n");
-#endif
-
- fAnalysisChain = new TChain("esdTree");
- fAnalysisChain = fAliTagAnalysis->QueryTags(fAliRunCuts,fAliLHCCuts,fAliDetectorCuts,fAliEventCuts);
-
- TString res = TString("Number of Accepted Events: ");
- res += fAnalysisChain->GetEventList()->GetN();
-
- AddResult(res.Data());
-}
-
-//___________________________________________________________________________
-void AliTagAnalysisFrame::ProcessSelector(const char* selectorfile) {
- // Process selector
-
-#ifdef GUIDEBUG
- printf("*******************************\n");
- printf("*** Run Analysis Selector %s\n",selectorfile);
- printf("*******************************\n");
-
-#endif
-
- fAnalysisChain->Process(selectorfile);
-}
-
-
-//___________________________________________________________________________
-void AliTagAnalysisFrame::OnDoubleClick(TGListTreeItem* item, Int_t btn) {
- // Slot for double clicking.
-
- fAliEnBrowser->OnDoubleClick(item, btn);
-
- //"/alice/cern.ch/user/p/pchrista/PDC06/Tags/pp/1");
-
-}
-
-//___________________________________________________________________________
-void AliTagAnalysisFrame::OnOKButton() {
- // Slot for OK button in the Transient Frame.
-
- if(fAliEnBrowser->GetBrowseType() == kLocalBrowse)
- fLocalPath->SetText(fAliEnBrowser->GetPath());
- else if(fAliEnBrowser->GetBrowseType() == kGridBrowse)
- fGridPath->SetText(fAliEnBrowser->GetPath());
-
- TTimer::SingleShot(150, "AliTagAnalysisFrame", fBrowser, "CloseWindow()");
-}