1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 /* $Id: AliTRDCalibViewerGUI.cxx 40390 2010-04-14 09:43:23Z cblume $ */
18 ///////////////////////////////////////////////////////////////////////////////
20 // GUI for the AliTRDCalibViewerGUI //
21 // used for the calibration monitor //
22 // All functionalities of the AliTRDCalibViewer are here available //
24 // Authors: Marian Ivanov (Marian.Ivanov@cern.ch) //
25 // Jens Wiechula (Jens.Wiechula@cern.ch) //
26 // Ionut Arsene (iarsene@cern.ch) //
31 AliTRDCalibViewerGUI::ShowGUI()
36 ///////////////////////////////////////////////////////////////////////////////
39 #include "AliTRDCalibViewerGUI.h"
45 #include <TVirtualPad.h>
48 #include <TObjArray.h>
49 #include <TObjString.h>
54 #include <TGFileDialog.h>
55 #include <TGInputDialog.h>
56 #include "AliBaseCalibViewer.h"
57 #include "AliCalibViewerGUItime.h"
58 #include "AliTRDCalibViewer.h"
59 #include "AliCDBManager.h"
60 #include "AliCDBStorage.h"
62 ClassImp(AliTRDCalibViewerGUI)
64 //________________________________________________________________________________________________
65 AliTRDCalibViewerGUI::AliTRDCalibViewerGUI(const TGWindow *p, UInt_t w, UInt_t h, char* fileName)
66 : AliBaseCalibViewerGUI(p, w, h),
94 fContLoadCalibObjects(0),
96 fLblCalibInputFilename(0),
97 fTxtCalibInputFilename(0),
99 fLblCalibOutputFilename(0),
100 fTxtCalibOutputFilename(0),
101 fBtnLoadCalibObjects(0)
104 // AliTRDCalibViewerGUI constructor; fileName specifies the ROOT tree used for drawing
109 if (fileName) Initialize(fileName, "TRDcalibDetails");
110 // set default button states:
113 if (fileName) DoDraw();
116 //________________________________________________________________________________________________
117 AliTRDCalibViewerGUI::AliTRDCalibViewerGUI(const AliTRDCalibViewerGUI &c)
118 :AliBaseCalibViewerGUI(c),
146 fContLoadCalibObjects(0),
148 fLblCalibInputFilename(0),
149 fTxtCalibInputFilename(0),
151 fLblCalibOutputFilename(0),
152 fTxtCalibOutputFilename(0),
153 fBtnLoadCalibObjects(0)
156 // dummy AliTPCCalibViewerGUI_new copy constructor
160 //________________________________________________________________________________________________
161 AliTRDCalibViewerGUI & AliTRDCalibViewerGUI::operator =(const AliTRDCalibViewerGUI & /*param*/) {
163 // dummy assignment operator
168 //________________________________________________________________________________________________
169 AliTRDCalibViewerGUI::~AliTRDCalibViewerGUI() {
174 if (fCanvMain && fCanvMain->GetCanvas()) {
175 for (Int_t i = 0; i < fCanvMain->GetCanvas()->GetListOfPrimitives()->GetEntries(); i++) {
176 if (strcmp(fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->ClassName(), "TFrame") != 0)
177 fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->Delete();
181 if (fViewer) fViewer->Delete();
184 //________________________________________________________________________________________________
185 Bool_t AliTRDCalibViewerGUI::CreateDetailsTree(Int_t run, const Char_t* outFile, const Char_t* /*ocdbStorage*/) {
187 // Get pad level info from OCDB for a given run and dump it into a tree
189 if(!AliCDBManager::Instance()->GetDefaultStorage()){
190 std::cout << "AliTRDCalibViewerGUI::CreateDetailsTree(): Default Storage not set. Cannot create Calibration Tree!" << std::endl;
193 TString storage = AliCDBManager::Instance()->GetDefaultStorage()->GetURI();
194 return ((AliTRDCalibViewer*)fViewer)->DumpOCDBtoTreeDetails("", outFile, run, run, storage.Data());
197 //________________________________________________________________________________________________
198 void AliTRDCalibViewerGUI::DrawGUI(const TGWindow *p, UInt_t w, UInt_t h) {
203 // draw most of the GUI (all common stuff)
204 AliBaseCalibViewerGUI::DrawGUI(p, w, h);
206 // remove some frames from the virtual class
207 fTabRight1->RemoveFrame(fContExport);
208 fTabRight1->RemoveFrame(fContTree);
209 fTabRight1->RemoveFrame(fContFit);
211 // draw and connect slots specific to TRD
212 // **************************** content of tabLeft0 *******************************
213 // layer options container
214 fContLayer = new TGCompositeFrame(fContCuts, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
215 fContCuts->AddFrame(fContLayer, new TGLayoutHints(kLHintsExpandX, 5, 0, 0, 0));
217 // layer number label
218 fLblLayer = new TGLabel(fContLayer, "Layer");
219 fLblLayer->SetTextJustify(kTextLeft);
220 fContLayer->AddFrame(fLblLayer, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 5, 0, 0, 0));
221 // layer number entry
222 fNmbLayer = new TGNumberEntry(fContLayer, 0, 1, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMinMax, 0, 5);
223 fContLayer->AddFrame(fNmbLayer, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
224 fNmbLayer->SetNumber(0);
225 fNmbLayer->Connect("ValueSet(Long_t)", "AliTRDCalibViewerGUI", this, "DoNewSelection()");
227 // sector options container
228 fContSector = new TGCompositeFrame(fContCuts, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
229 fContCuts->AddFrame(fContSector, new TGLayoutHints(kLHintsExpandX, 5, 0, 0, 0));
231 // sector number label
232 fLblSector = new TGLabel(fContSector, "SM");
233 fLblSector->SetTextJustify(kTextLeft);
234 fContSector->AddFrame(fLblSector, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 5, 0, 0, 0));
235 // sector number entry
236 fNmbSector = new TGNumberEntry(fContSector, 0, 1, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMinMax, -1, 17);
237 fContSector->AddFrame(fNmbSector, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
238 fNmbSector->SetNumber(-1);
239 fNmbSector->Connect("ValueSet(Long_t)", "AliTRDCalibViewerGUI", this, "DoNewSelection()");
241 // stack options container
242 fContStack = new TGCompositeFrame(fContCuts, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
243 fContCuts->AddFrame(fContStack, new TGLayoutHints(kLHintsExpandX, 5, 0, 0, 0));
245 // stack number label
246 fLblStack = new TGLabel(fContStack, "Stack");
247 fLblStack->SetTextJustify(kTextLeft);
248 fContStack->AddFrame(fLblStack, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 5, 0, 0, 0));
249 // stack number entry
250 fNmbStack = new TGNumberEntry(fContStack, 0, 1, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMinMax, -1, 4);
251 fContStack->AddFrame(fNmbStack, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
252 fNmbStack->SetNumber(-1);
253 fNmbStack->Connect("ValueSet(Long_t)", "AliTRDCalibViewerGUI", this, "DoNewSelection()");
256 fContLoad = new TGGroupFrame(fTabRight1, "Load run", kVerticalFrame | kFitWidth | kFitHeight);
257 fTabRight1->AddFrame(fContLoad, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
259 fContStorage = new TGCompositeFrame(fContLoad, 400, 200, kHorizontalFrame | kFitWidth | kFitHeight);
260 fContLoad->AddFrame(fContStorage, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
262 fLblStorage = new TGLabel(fContStorage, "OCDB:");
263 fLblStorage->SetTextJustify(kTextLeft);
264 fContStorage->AddFrame(fLblStorage, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
266 fTxtStorage = new TGTextEntry(fContStorage, "alien://folder=/alice/data/2010/OCDB/", 111);
267 fContStorage->AddFrame(fTxtStorage, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
268 // fTxtStorage->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtons1D(=111)");
269 fTxtStorage->SetToolTipText("Enter the OCDB storage location");
271 fContRun = new TGCompositeFrame(fContLoad, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
272 fContLoad->AddFrame(fContRun, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
274 fLblRun = new TGLabel(fContRun, "Run:");
275 fLblRun->SetTextJustify(kTextLeft);
276 fContRun->AddFrame(fLblRun, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
278 fNmbRun = new TGNumberEntry(fContRun, 0, 1, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELNoLimits);
279 fContRun->AddFrame(fNmbRun, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
280 fNmbRun->SetNumber(-1);
281 //fNmbRun->SetToolTipText("Enter the run number");
283 fContVersion = new TGCompositeFrame(fContLoad, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
284 fContLoad->AddFrame(fContVersion, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
286 fLblVersion = new TGLabel(fContVersion, "Version:");
287 fLblVersion->SetTextJustify(kTextLeft);
288 fContVersion->AddFrame(fLblVersion, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
290 fNmbVersion = new TGNumberEntry(fContVersion, 0, 1, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELNoLimits);
291 fContVersion->AddFrame(fNmbVersion, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
292 fNmbVersion->SetNumber(-1);
294 fContSubVersion = new TGCompositeFrame(fContLoad, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
295 fContLoad->AddFrame(fContSubVersion, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
297 fLblSubVersion = new TGLabel(fContSubVersion, "SubVersion:");
298 fLblSubVersion->SetTextJustify(kTextLeft);
299 fContSubVersion->AddFrame(fLblSubVersion, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
301 fNmbSubVersion = new TGNumberEntry(fContSubVersion, 0, 1, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELNoLimits);
302 fContSubVersion->AddFrame(fNmbSubVersion, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
303 fNmbSubVersion->SetNumber(-1);
305 // Calib & DCS & Align check boxes frame
306 fContChecks = new TGCompositeFrame(fContLoad, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
307 fContLoad->AddFrame(fContChecks, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
309 fChkCalibs = new TGCheckButton(fContChecks, "Calib");
310 fContChecks->AddFrame(fChkCalibs, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
311 fChkCalibs->SetToolTipText("Get calibration info (gain, pedestal, vdrift, T0 and status)");
312 fChkCalibs->SetState(kButtonDown);
314 fChkDCS = new TGCheckButton(fContChecks, "DCS");
315 fContChecks->AddFrame(fChkDCS, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
316 fChkDCS->SetToolTipText("Get DCS info");
317 fChkDCS->SetState(kButtonDown);
319 fChkAlign = new TGCheckButton(fContChecks, "Align");
320 fContChecks->AddFrame(fChkAlign, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
321 fChkAlign->SetToolTipText("Get alingment info");
322 fChkAlign->SetState(kButtonDown);
324 fBtnLoad = new TGTextButton(fContLoad, "&Load run");
325 fBtnLoad->SetName("loadOCDB");
326 fContLoad->AddFrame(fBtnLoad, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
327 fBtnLoad->SetToolTipText("Load run from OCDB");
328 fBtnLoad->Connect("Clicked()", "AliTRDCalibViewerGUI", this, "SetTree()");
330 // Load a file with AliTRDCalPad objects
332 fContLoadCalibObjects = new TGGroupFrame(fTabRight1, "Load CalPad from file", kVerticalFrame | kFitWidth | kFitHeight);
333 fTabRight1->AddFrame(fContLoadCalibObjects, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
334 // container for the input file
335 fContCalibInput = new TGCompositeFrame(fContLoadCalibObjects, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
336 fContLoadCalibObjects->AddFrame(fContCalibInput, new TGLayoutHints(kLHintsExpandX, 0, 0, 2, 0));
338 fLblCalibInputFilename = new TGLabel(fContCalibInput, "Input:");
339 fLblCalibInputFilename->SetTextJustify(kTextLeft);
340 fContCalibInput->AddFrame(fLblCalibInputFilename, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
342 fTxtCalibInputFilename = new TGTextEntry(fContCalibInput, "Input file", 200);
343 fContCalibInput->AddFrame(fTxtCalibInputFilename, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
344 fTxtCalibInputFilename->Connect("DoubleClicked()", "AliTRDCalibViewerGUI", this, "HandleFilesystem()");
345 // container for the output file
346 fContCalibOutput = new TGCompositeFrame(fContLoadCalibObjects, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
347 fContLoadCalibObjects->AddFrame(fContCalibOutput, new TGLayoutHints(kLHintsExpandX, 0, 0, 2, 0));
349 fLblCalibOutputFilename = new TGLabel(fContCalibOutput, "Output:");
350 fLblCalibOutputFilename->SetTextJustify(kTextLeft);
351 fContCalibOutput->AddFrame(fLblCalibOutputFilename, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
353 fTxtCalibOutputFilename = new TGTextEntry(fContCalibOutput, "/tmp/output.root", 201);
354 fContCalibOutput->AddFrame(fTxtCalibOutputFilename, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
355 fTxtCalibOutputFilename->Connect("DoubleClicked()", "AliTRDCalibViewerGUI", this, "HandleFilesystem()");
357 fBtnLoadCalibObjects = new TGTextButton(fContLoadCalibObjects, "L&oad calib");
358 fBtnLoadCalibObjects->SetName("loadCalPad");
359 fContLoadCalibObjects->AddFrame(fBtnLoadCalibObjects, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
360 fBtnLoadCalibObjects->SetToolTipText("Extract a tree from an array of AliTRDCalPad objects,\nand load it into this application");
361 fBtnLoadCalibObjects->Connect("Clicked()", "AliTRDCalibViewerGUI", this, "SetTree()");
363 SetWindowName("AliTRDCalibViewer GUI");
365 Resize(GetDefaultSize());
369 //___________________________________________________________________________________
370 void AliTRDCalibViewerGUI::SetTree() {
372 // handles the loading of a new tree and updates the GUI
375 TGTextButton *button = ((TGTextButton*)gTQSender);
376 TString name=button->GetName();
377 if(name.Contains("OCDB")) {
378 Int_t run = (Int_t)fNmbRun->GetNumber();
379 TString storage(fTxtStorage->GetText());
380 Bool_t getCalibs = (fChkCalibs->GetState()==kButtonDown ? kTRUE : kFALSE);
381 Bool_t getDCS = (fChkDCS->GetState()==kButtonDown ? kTRUE : kFALSE);
382 Bool_t getAlign = (fChkAlign->GetState()==kButtonDown ? kTRUE : kFALSE);
383 Int_t version = (Int_t)fNmbVersion->GetNumber();
384 Int_t subVersion = (Int_t)fNmbSubVersion->GetNumber();
386 fileName = Form("trdOCDBDetails_run%d.root", run);
388 load=((AliTRDCalibViewer*)fViewer)->DumpOCDBtoTreeDetails("", fileName.Data(), run, run, storage.Data(),
389 version, subVersion, getCalibs, getDCS, getAlign);
395 if(name.Contains("CalPad")) {
396 ((AliTRDCalibViewer*)fViewer)->DumpCalibToTree(fTxtCalibInputFilename->GetText(),
397 fTxtCalibOutputFilename->GetText());
398 fileName = fTxtCalibOutputFilename->GetText();
400 Initialize(fileName.Data(), "TRDcalibDetails");
405 //________________________________________________________________________________________________
406 void AliTRDCalibViewerGUI::HandleFilesystem() {
408 // Slot used by the text buttons to trigger the file system dialog
410 Int_t id = ((TGTextEntry*)gTQSender)->WidgetId();
411 const char *kTypes[] = {
416 fi.fFileTypes = kTypes;
417 fi.fOverwrite = kFALSE;
418 new TGFileDialog(gClient->GetRoot(), gClient->GetRoot(), kFDOpen, &fi);
419 if(fi.fFilename && strlen(fi.fFilename)) {
421 fTxtCalibInputFilename->SetText(fi.fFilename);
423 fTxtCalibOutputFilename->SetText(fi.fFilename);
428 //________________________________________________________________________________________________
429 void AliTRDCalibViewerGUI::Initialize(const char* fileName, const char* treeName) {
431 // initialize the GUI with a calibrationTree from fileName
433 // create AliTRDCalibViewer object, which will be used for generating all drawings
434 if (fViewer) delete fViewer;
435 fViewer = new AliTRDCalibViewer(fileName, treeName);
439 //________________________________________________________________________________________________
440 void AliTRDCalibViewerGUI::Initialize(AliBaseCalibViewer *viewer) {
442 // initializes the GUI with default settings and opens tree for drawing
445 TString selectedVariable("");
446 TString selectedNormalization("");
447 Int_t variableId = -1;
448 Int_t normalizationId = -1;
450 // remember the selected entry
451 if (fListVariables->GetSelectedEntry()) selectedVariable = fListVariables->GetSelectedEntry()->GetTitle();
452 if (fListNormalization->GetSelectedEntry()) selectedNormalization = fListNormalization->GetSelectedEntry()->GetTitle();
455 // fill fListVariables, list of drawable variables:
456 TObjArray* arr = ((AliTRDCalibViewer*)fViewer)->GetListOfVariables(1);
460 TIterator* iter = arr->MakeIterator();
462 TObjString* currentStr = 0;
464 fListVariables->RemoveAll();
465 while ((currentStr = (TObjString*)(iter->Next()))) {
466 fListVariables->AddEntry(currentStr->GetString().Data(), id);
467 if (fInitialized && currentStr->GetString() == selectedVariable) variableId = id;
471 // fill fListNorm, list of normalization variables:
472 TObjArray *arrNorm = ((AliTRDCalibViewer*)fViewer)->GetListOfNormalizationVariables();
473 TIterator *iterNorm = arrNorm->MakeIterator();
477 fListNormalization->RemoveAll();
478 while ((currentStr = (TObjString*)(iterNorm->Next()))) {
479 fListNormalization->AddEntry(currentStr->GetString().Data(), id);
480 if (fInitialized && currentStr->GetString() == selectedNormalization) normalizationId = id;
485 //Add draw variables to the list of normalisation
486 while ((currentStr = (TObjString*)(iter->Next()))) {
487 if (currentStr->GetString().BeginsWith("Map")) continue; //don't add mapping information
488 fListNormalization->AddEntry(currentStr->GetString().Data(), id);
489 if (fInitialized && currentStr->GetString() == selectedNormalization) normalizationId = id;
501 // trick do display the entries corectly after reinitialization
502 // otherwise all the entries would appear as one kryptic entry
503 // resizing the listbox somehow fixes the problem...
504 if (fInitialized) fListVariables->Resize(fListVariables->GetWidth()-1, fListVariables->GetHeight());
505 if (fInitialized) fListVariables->Resize(fListVariables->GetWidth()+1, fListVariables->GetHeight());
506 if (fInitialized) fListNormalization->Resize(fListNormalization->GetWidth()-1, fListNormalization->GetHeight());
507 if (fInitialized) fListNormalization->Resize(fListNormalization->GetWidth()+1, fListNormalization->GetHeight());
509 // select the last selected variable and normalization
510 if (fInitialized && variableId != -1) fListVariables->Select(variableId);
511 if (fInitialized && normalizationId != -1)fListVariables->Select(normalizationId);
513 if (fInitialized) Info("Initialize", "AliTRDCalibViewerGUI new initialized.");
514 fInitialized = kTRUE;
517 //________________________________________________________________________________________________
518 void AliTRDCalibViewerGUI::Reset(){
520 // reset variables, delete calib viewer
522 if (fViewer) delete fViewer;
523 fListVariables->RemoveAll();
524 fListNormalization->RemoveAll();
525 fInitialized = kFALSE;
528 //________________________________________________________________________________________________
529 TString* AliTRDCalibViewerGUI::GetDrawString() {
531 // create the draw string out of selection
534 // specify data to plot
535 TString desiredData("");
536 if (!fListVariables->GetSelectedEntry()) return 0;
537 desiredData += ((TGTextLBEntry*)(fListVariables->GetSelectedEntry()))->GetTitle();
538 desiredData += fViewer->GetAbbreviation();
540 // specify normalization
541 if (fRadioPredefined->GetState() == kButtonDown && fRadioNormalized->GetState() == kButtonDown) {
543 switch (fComboMethod->GetSelected()) {
544 case 0: // subtraction
551 TString normalizationData("");
552 if (!fListNormalization->GetSelectedEntry()) return 0;
553 normalizationData += ((TGTextLBEntry*)(fListNormalization->GetSelectedEntry()))->GetTitle();
556 if (! (TString(((TGTextLBEntry*)(fListNormalization->GetSelectedEntry()))->GetTitle())).BeginsWith("Fit"))
557 if ( normalizationData.BeginsWith("_") ) desiredData += ((TGTextLBEntry*)(fListVariables->GetSelectedEntry()))->GetTitle();
558 if ( fListVariables->FindEntry(normalizationData.Data()) )
559 normalizationData+="~";
560 desiredData += normalizationData;
562 else if (fRadioCustom->GetState() == kButtonDown) {
563 desiredData = fComboCustom->GetTextEntry()->GetText();
564 if (desiredData == "") return 0;
565 ReplacePlaceHolders(desiredData);
568 // try to add forgotten '~'
569 if (fChkAutoAppend->GetState() == kButtonDown)
570 desiredData = TString(((AliTRDCalibViewer*)fViewer)->AddAbbreviations((char*)desiredData.Data()));
571 return new TString(desiredData.Data());
574 //________________________________________________________________________________________________
575 TString* AliTRDCalibViewerGUI::GetCutString() {
577 // create the cut string out of selection
582 // try to add forgotten '~'
583 if(fChkAutoAppend->GetState() == kButtonDown)
584 cutsStr = TString(((AliTRDCalibViewer*)fViewer)->AddAbbreviations((char*)cutsStr.Data()));
585 return new TString(cutsStr.Data());
588 //________________________________________________________________________________________________
589 TString* AliTRDCalibViewerGUI::GetSectorString() {
591 // create the sector string out of selection
594 Int_t layerNo = (Int_t)(fNmbLayer->GetNumber());
595 Int_t sectorNo = (Int_t)(fNmbSector->GetNumber());
596 Int_t stackNo = (Int_t)(fNmbStack->GetNumber());
598 TString sectorStr("");
599 sectorStr = Form("Layer%dSector%dStack%d", layerNo, sectorNo, stackNo);
601 return new TString(sectorStr.Data());
604 //________________________________________________________________________________________________
605 void AliTRDCalibViewerGUI::DoDraw() {
607 // main method for drawing according to user selection
610 // specify data to plot:
611 if (!GetDrawString()) return;
612 TString desiredData(GetDrawString()->Data());
614 TString sectorStr(GetSectorString()->Data());
616 TString cutsStr(GetCutString()->Data());
618 TString addDrawOpt("");
619 if (fChkAddDrawOpt->GetState() == kButtonDown)
620 addDrawOpt += fComboAddDrawOpt->GetTextEntry()->GetText();
622 // remove last picture
623 if (!addDrawOpt.Contains("same"))
624 for (Int_t i = 0; i < fCanvMain->GetCanvas()->GetListOfPrimitives()->GetEntries(); i++) {
625 if (strcmp(fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->ClassName(), "TFrame") != 0)
626 fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->Delete();
628 //fCanvMain->GetCanvas()->Clear();
629 fCanvMain->GetCanvas()->cd();
632 if (fRadio1D->GetState() == kButtonDown){
634 TString strSigmaMax(fTxtSigmaMax->GetText()); // get sigmaMax from text enty
635 Double_t sigmaMax = (strSigmaMax.IsFloat()) ? strSigmaMax.Atof() : 5; // convert to double, if not convertable, set to 5
636 Bool_t plotMean = fChkMean->GetState() == kButtonDown;
637 Bool_t plotMedian = fChkMedian->GetState() == kButtonDown;
638 Bool_t plotLTM = fChkLTM->GetState() == kButtonDown;
639 if (fRadioNorm->GetState() == kButtonDown) // normal 1D drawing
640 entries = ((AliTRDCalibViewer*)fViewer)->EasyDraw1D(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), addDrawOpt.Data());
641 if (fRadioSigma->GetState() == kButtonDown) // sigma 1D drawing
642 entries = fViewer->DrawHisto1D(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), //
643 fTxtSigmas->GetText(), plotMean, plotMedian, plotLTM);
644 if (fRadioCumulative->GetState() == kButtonDown) // cumulative 1D drawing
645 entries = fViewer->SigmaCut(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), //
646 sigmaMax, plotMean, plotMedian, plotLTM, //
647 fCheckCumulativePM->GetState() == kButtonDown, fTxtSigmas->GetText(), /* Float_t sigmaStep =*/ -1);
648 if (fRadioIntegrate->GetState() == kButtonDown) // integral 1D drawing
649 entries = fViewer->Integrate(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), //
650 sigmaMax, plotMean, plotMedian, plotLTM, //
651 fTxtSigmas->GetText(), /* Float_t sigmaStep =*/ -1);
653 else if (fRadio2D->GetState() == kButtonDown) {
655 entries = ((AliTRDCalibViewer*)fViewer)->EasyDraw(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), addDrawOpt.Data());
657 if (entries == -1) return; // nothing was drawn, there is no histogram to get min and max
660 fCanvMain->GetCanvas()->Update();
663 //________________________________________________________________________________________________
664 void AliTRDCalibViewerGUI::MouseMove(Int_t event, Int_t x, Int_t y, TObject *selectedObject) {
667 // zoom to chamber works ONLY in 2D mode
669 if(event != kButton1Double )
671 if(!selectedObject->InheritsFrom("TH2")) return;
673 //Int_t layerNo = (Int_t)(fNmbLayer->GetNumber());
674 Int_t sectorNo = (Int_t)(fNmbSector->GetNumber());
675 Int_t stackNo = (Int_t)(fNmbStack->GetNumber());
677 // zoom out to the current layer if a chamber is viewed now
678 if(sectorNo!=-1 && stackNo!=-1) {
679 fNmbSector->SetNumber(-1);
680 fNmbStack->SetNumber(-1);
685 // check what kind of parameter we visualize
686 TString drawStr(GetDrawString()->Data());
687 Int_t viewedParamClass = -1; // -1 nothing, 0 calibration, 1 FEE params
688 if(drawStr.Contains("Status") || drawStr.Contains("Gain") || drawStr.Contains("Noise") ||
689 drawStr.Contains("Vdrift") || drawStr.Contains("T0") ||
690 drawStr.Contains("gain") || drawStr.Contains("chiSquare"))
691 viewedParamClass = 0;
692 if(drawStr.Contains("SORandEOR") ||
693 drawStr.Contains("gsmSOR") || drawStr.Contains("gsmDelta") ||
694 drawStr.Contains("nimSOR") || drawStr.Contains("nimDelta") ||
695 drawStr.Contains("nevSOR") || drawStr.Contains("nevDelta") ||
696 drawStr.Contains("nptSOR") || drawStr.Contains("nptDelta")) {
697 viewedParamClass = 1;
699 if(viewedParamClass==-1) return;
701 // some constants refering to the TRD geometry
702 const Int_t gkNRows[ 5] = {16, 16, 12, 16, 16}; // number of pad rows in the chambers from each of the 5 stacks
703 const Int_t gkNCols = 144; // number of pad cols per chamber
705 // get the coordinate of the clicked point in physical coordinates
706 Float_t upy = gPad->AbsPixeltoY(y);
707 Float_t upx = gPad->AbsPixeltoX(x);
708 Float_t gy = gPad->PadtoY(upy);
709 Float_t gx = gPad->PadtoX(upx);
710 Int_t selectedStack = -1;
711 Int_t selectedSector = -1;
713 // retrieve the double-clicked chamber
714 if(sectorNo==-1 && stackNo==-1) {
715 // get the selected stack
716 Float_t rowLowBound = -0.5;
717 Float_t rowHighBound = -0.5;
718 for(Int_t i=0; i<5; i++) {
719 if(i>0) rowLowBound += gkNRows[i-1];
720 rowHighBound += gkNRows[i];
721 if(gx>=rowLowBound && gx<=rowHighBound)
724 // get the selected sector
725 if(viewedParamClass==0) { // calibration params
726 selectedSector = (Int_t)TMath::Floor((gy+0.5)/Float_t(gkNCols));
728 if(viewedParamClass==1) { // FEE params
729 selectedSector = (Int_t)TMath::Floor((gy+0.5)/8.0); // 8 MCMs per chamber in pad cols direction
732 if(sectorNo!=-1 && stackNo==-1) {
733 // get the selected stack
734 Float_t rowLowBound = -0.5;
735 Float_t rowHighBound = -0.5;
736 for(Int_t i=0; i<5; i++) {
737 if(i>0) rowLowBound += gkNRows[i-1];
738 rowHighBound += gkNRows[i];
739 if(gx>=rowLowBound && gx<=rowHighBound)
742 // get the selected sector
743 selectedSector = sectorNo;
745 if(sectorNo==-1 && stackNo!=-1) {
746 // get the selected stack
747 selectedStack = stackNo;
748 // get the selected sector
749 if(viewedParamClass==0) { // calibration params
750 selectedSector = (Int_t)TMath::Floor((gy+0.5)/144.0);
752 if(viewedParamClass==1) { // FEE params
753 selectedSector = (Int_t)TMath::Floor((gy+0.5)/8.0);
757 fNmbSector->SetNumber(selectedSector);
758 fNmbStack->SetNumber(selectedStack);
763 //___________________________________________________________________________
764 void AliTRDCalibViewerGUI::ShowGUI() {
766 // Draw the graphical user interface
768 TGMainFrame* mainWindow = new TGMainFrame(gClient->GetRoot(), 1000, 700);
769 mainWindow->SetWindowName("Run OCDB details");
770 mainWindow->SetCleanup(kDeepCleanup);
771 AliTRDCalibViewerGUI *calibViewer = new AliTRDCalibViewerGUI(mainWindow, 1000, 650, 0);
772 mainWindow->AddFrame(calibViewer, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
773 mainWindow->MapSubwindows();
774 mainWindow->Resize();
775 mainWindow->MapWindow();
778 //___________________________________________________________________________
779 void AliTRDCalibViewerGUI::ShowGUI(const Char_t* treeFile, const Char_t* treeName) {
781 // Draw the graphical user interface
783 TGMainFrame* mainWindow = new TGMainFrame(gClient->GetRoot(), 1000, 700);
784 mainWindow->SetWindowName("Run OCDB details");
785 mainWindow->SetCleanup(kDeepCleanup);
786 AliBaseCalibViewerGUI *calibViewer = new AliTRDCalibViewerGUI(mainWindow, 1000, 650, 0);
787 mainWindow->AddFrame(calibViewer, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
789 calibViewer->Initialize(treeFile, treeName);
790 calibViewer->Reload();
791 calibViewer->DoDraw();
793 mainWindow->MapSubwindows();
794 mainWindow->Resize();
795 mainWindow->MapWindow();
798 //___________________________________________________________________________
799 void AliTRDCalibViewerGUI::ShowGUIwithTrending() {
801 // Draw a GUI application containing 2 tabs:
802 // -- tab for time/run trending
803 // -- tab for run details
804 TGMainFrame* frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 700);
805 frmMain->SetCleanup(kDeepCleanup);
807 TGTab* tabMain = new TGTab(frmMain, 1000, 700);
808 frmMain->AddFrame(tabMain, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
809 TGCompositeFrame* tabCont1 = tabMain->AddTab("Time");
810 TGCompositeFrame* tabCont2 = tabMain->AddTab("Detail - XXXXX");
812 AliCalibViewerGUItime* calibViewerTime = new AliCalibViewerGUItime(tabCont1, 1000, 650, "TRD");
813 tabCont1->AddFrame(calibViewerTime, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
815 AliTRDCalibViewerGUI *calibViewer = new AliTRDCalibViewerGUI(tabCont2, 1000, 700, 0);
816 tabCont2->AddFrame(calibViewer, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
817 calibViewerTime->SetCalibViewerGUI(calibViewer);
818 calibViewerTime->SetCalibViewerGUItab(tabMain->GetTabTab(1));
820 frmMain->MapSubwindows();
822 frmMain->MapWindow();