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 ocdbStorage = ocdbStorage; // to avoid warnings
190 if(!AliCDBManager::Instance()->GetDefaultStorage()){
191 std::cout << "AliTRDCalibViewerGUI::CreateDetailsTree(): Default Storage not set. Cannot create Calibration Tree!" << std::endl;
194 TString storage = AliCDBManager::Instance()->GetDefaultStorage()->GetURI();
195 return ((AliTRDCalibViewer*)fViewer)->DumpOCDBtoTreeDetails("", outFile, run, run, storage.Data());
198 //________________________________________________________________________________________________
199 void AliTRDCalibViewerGUI::DrawGUI(const TGWindow *p, UInt_t w, UInt_t h) {
204 // draw most of the GUI (all common stuff)
205 AliBaseCalibViewerGUI::DrawGUI(p, w, h);
207 // remove some frames from the virtual class
208 fTabRight1->RemoveFrame(fContExport);
209 fTabRight1->RemoveFrame(fContTree);
210 fTabRight1->RemoveFrame(fContFit);
212 // draw and connect slots specific to TRD
213 // **************************** content of tabLeft0 *******************************
214 // layer options container
215 fContLayer = new TGCompositeFrame(fContCuts, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
216 fContCuts->AddFrame(fContLayer, new TGLayoutHints(kLHintsExpandX, 5, 0, 0, 0));
218 // layer number label
219 fLblLayer = new TGLabel(fContLayer, "Layer");
220 fLblLayer->SetTextJustify(kTextLeft);
221 fContLayer->AddFrame(fLblLayer, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 5, 0, 0, 0));
222 // layer number entry
223 fNmbLayer = new TGNumberEntry(fContLayer, 0, 1, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMinMax, 0, 5);
224 fContLayer->AddFrame(fNmbLayer, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
225 fNmbLayer->SetNumber(0);
226 fNmbLayer->Connect("ValueSet(Long_t)", "AliTRDCalibViewerGUI", this, "DoNewSelection()");
228 // sector options container
229 fContSector = new TGCompositeFrame(fContCuts, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
230 fContCuts->AddFrame(fContSector, new TGLayoutHints(kLHintsExpandX, 5, 0, 0, 0));
232 // sector number label
233 fLblSector = new TGLabel(fContSector, "SM");
234 fLblSector->SetTextJustify(kTextLeft);
235 fContSector->AddFrame(fLblSector, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 5, 0, 0, 0));
236 // sector number entry
237 fNmbSector = new TGNumberEntry(fContSector, 0, 1, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMinMax, -1, 17);
238 fContSector->AddFrame(fNmbSector, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
239 fNmbSector->SetNumber(-1);
240 fNmbSector->Connect("ValueSet(Long_t)", "AliTRDCalibViewerGUI", this, "DoNewSelection()");
242 // stack options container
243 fContStack = new TGCompositeFrame(fContCuts, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
244 fContCuts->AddFrame(fContStack, new TGLayoutHints(kLHintsExpandX, 5, 0, 0, 0));
246 // stack number label
247 fLblStack = new TGLabel(fContStack, "Stack");
248 fLblStack->SetTextJustify(kTextLeft);
249 fContStack->AddFrame(fLblStack, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 5, 0, 0, 0));
250 // stack number entry
251 fNmbStack = new TGNumberEntry(fContStack, 0, 1, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMinMax, -1, 4);
252 fContStack->AddFrame(fNmbStack, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
253 fNmbStack->SetNumber(-1);
254 fNmbStack->Connect("ValueSet(Long_t)", "AliTRDCalibViewerGUI", this, "DoNewSelection()");
257 fContLoad = new TGGroupFrame(fTabRight1, "Load run", kVerticalFrame | kFitWidth | kFitHeight);
258 fTabRight1->AddFrame(fContLoad, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
260 fContStorage = new TGCompositeFrame(fContLoad, 400, 200, kHorizontalFrame | kFitWidth | kFitHeight);
261 fContLoad->AddFrame(fContStorage, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
263 fLblStorage = new TGLabel(fContStorage, "OCDB:");
264 fLblStorage->SetTextJustify(kTextLeft);
265 fContStorage->AddFrame(fLblStorage, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
267 fTxtStorage = new TGTextEntry(fContStorage, "alien://folder=/alice/data/2010/OCDB/", 111);
268 fContStorage->AddFrame(fTxtStorage, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
269 // fTxtStorage->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtons1D(=111)");
270 fTxtStorage->SetToolTipText("Enter the OCDB storage location");
272 fContRun = new TGCompositeFrame(fContLoad, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
273 fContLoad->AddFrame(fContRun, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
275 fLblRun = new TGLabel(fContRun, "Run:");
276 fLblRun->SetTextJustify(kTextLeft);
277 fContRun->AddFrame(fLblRun, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
279 fNmbRun = new TGNumberEntry(fContRun, 0, 1, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELNoLimits);
280 fContRun->AddFrame(fNmbRun, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
281 fNmbRun->SetNumber(-1);
282 //fNmbRun->SetToolTipText("Enter the run number");
284 fContVersion = new TGCompositeFrame(fContLoad, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
285 fContLoad->AddFrame(fContVersion, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
287 fLblVersion = new TGLabel(fContVersion, "Version:");
288 fLblVersion->SetTextJustify(kTextLeft);
289 fContVersion->AddFrame(fLblVersion, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
291 fNmbVersion = new TGNumberEntry(fContVersion, 0, 1, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELNoLimits);
292 fContVersion->AddFrame(fNmbVersion, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
293 fNmbVersion->SetNumber(-1);
295 fContSubVersion = new TGCompositeFrame(fContLoad, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
296 fContLoad->AddFrame(fContSubVersion, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
298 fLblSubVersion = new TGLabel(fContSubVersion, "SubVersion:");
299 fLblSubVersion->SetTextJustify(kTextLeft);
300 fContSubVersion->AddFrame(fLblSubVersion, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
302 fNmbSubVersion = new TGNumberEntry(fContSubVersion, 0, 1, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELNoLimits);
303 fContSubVersion->AddFrame(fNmbSubVersion, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
304 fNmbSubVersion->SetNumber(-1);
306 // Calib & DCS & Align check boxes frame
307 fContChecks = new TGCompositeFrame(fContLoad, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
308 fContLoad->AddFrame(fContChecks, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
310 fChkCalibs = new TGCheckButton(fContChecks, "Calib");
311 fContChecks->AddFrame(fChkCalibs, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
312 fChkCalibs->SetToolTipText("Get calibration info (gain, pedestal, vdrift, T0 and status)");
313 fChkCalibs->SetState(kButtonDown);
315 fChkDCS = new TGCheckButton(fContChecks, "DCS");
316 fContChecks->AddFrame(fChkDCS, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
317 fChkDCS->SetToolTipText("Get DCS info");
318 fChkDCS->SetState(kButtonDown);
320 fChkAlign = new TGCheckButton(fContChecks, "Align");
321 fContChecks->AddFrame(fChkAlign, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
322 fChkAlign->SetToolTipText("Get alingment info");
323 fChkAlign->SetState(kButtonDown);
325 fBtnLoad = new TGTextButton(fContLoad, "&Load run");
326 fBtnLoad->SetName("loadOCDB");
327 fContLoad->AddFrame(fBtnLoad, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
328 fBtnLoad->SetToolTipText("Load run from OCDB");
329 fBtnLoad->Connect("Clicked()", "AliTRDCalibViewerGUI", this, "SetTree()");
331 // Load a file with AliTRDCalPad objects
333 fContLoadCalibObjects = new TGGroupFrame(fTabRight1, "Load CalPad from file", kVerticalFrame | kFitWidth | kFitHeight);
334 fTabRight1->AddFrame(fContLoadCalibObjects, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
335 // container for the input file
336 fContCalibInput = new TGCompositeFrame(fContLoadCalibObjects, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
337 fContLoadCalibObjects->AddFrame(fContCalibInput, new TGLayoutHints(kLHintsExpandX, 0, 0, 2, 0));
339 fLblCalibInputFilename = new TGLabel(fContCalibInput, "Input:");
340 fLblCalibInputFilename->SetTextJustify(kTextLeft);
341 fContCalibInput->AddFrame(fLblCalibInputFilename, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
343 fTxtCalibInputFilename = new TGTextEntry(fContCalibInput, "Input file", 200);
344 fContCalibInput->AddFrame(fTxtCalibInputFilename, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
345 fTxtCalibInputFilename->Connect("DoubleClicked()", "AliTRDCalibViewerGUI", this, "HandleFilesystem()");
346 // container for the output file
347 fContCalibOutput = new TGCompositeFrame(fContLoadCalibObjects, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
348 fContLoadCalibObjects->AddFrame(fContCalibOutput, new TGLayoutHints(kLHintsExpandX, 0, 0, 2, 0));
350 fLblCalibOutputFilename = new TGLabel(fContCalibOutput, "Output:");
351 fLblCalibOutputFilename->SetTextJustify(kTextLeft);
352 fContCalibOutput->AddFrame(fLblCalibOutputFilename, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
354 fTxtCalibOutputFilename = new TGTextEntry(fContCalibOutput, "/tmp/output.root", 201);
355 fContCalibOutput->AddFrame(fTxtCalibOutputFilename, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
356 fTxtCalibOutputFilename->Connect("DoubleClicked()", "AliTRDCalibViewerGUI", this, "HandleFilesystem()");
358 fBtnLoadCalibObjects = new TGTextButton(fContLoadCalibObjects, "L&oad calib");
359 fBtnLoadCalibObjects->SetName("loadCalPad");
360 fContLoadCalibObjects->AddFrame(fBtnLoadCalibObjects, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
361 fBtnLoadCalibObjects->SetToolTipText("Extract a tree from an array of AliTRDCalPad objects,\nand load it into this application");
362 fBtnLoadCalibObjects->Connect("Clicked()", "AliTRDCalibViewerGUI", this, "SetTree()");
364 SetWindowName("AliTRDCalibViewer GUI");
366 Resize(GetDefaultSize());
370 //___________________________________________________________________________________
371 void AliTRDCalibViewerGUI::SetTree() {
373 // handles the loading of a new tree and updates the GUI
376 TGTextButton *button = ((TGTextButton*)gTQSender);
377 TString name=button->GetName();
378 if(name.Contains("OCDB")) {
379 Int_t run = (Int_t)fNmbRun->GetNumber();
380 TString storage(fTxtStorage->GetText());
381 Bool_t getCalibs = (fChkCalibs->GetState()==kButtonDown ? kTRUE : kFALSE);
382 Bool_t getDCS = (fChkDCS->GetState()==kButtonDown ? kTRUE : kFALSE);
383 Bool_t getAlign = (fChkAlign->GetState()==kButtonDown ? kTRUE : kFALSE);
384 Int_t version = (Int_t)fNmbVersion->GetNumber();
385 Int_t subVersion = (Int_t)fNmbSubVersion->GetNumber();
387 fileName = Form("trdOCDBDetails_run%d.root", run);
389 load=((AliTRDCalibViewer*)fViewer)->DumpOCDBtoTreeDetails("", fileName.Data(), run, run, storage.Data(),
390 version, subVersion, getCalibs, getDCS, getAlign);
396 if(name.Contains("CalPad")) {
397 ((AliTRDCalibViewer*)fViewer)->DumpCalibToTree(fTxtCalibInputFilename->GetText(),
398 fTxtCalibOutputFilename->GetText());
399 fileName = fTxtCalibOutputFilename->GetText();
401 Initialize(fileName.Data(), "TRDcalibDetails");
406 //________________________________________________________________________________________________
407 void AliTRDCalibViewerGUI::HandleFilesystem() {
409 // Slot used by the text buttons to trigger the file system dialog
411 Int_t id = ((TGTextEntry*)gTQSender)->WidgetId();
412 const char *kTypes[] = {
417 fi.fFileTypes = kTypes;
418 fi.fOverwrite = kFALSE;
419 new TGFileDialog(gClient->GetRoot(), gClient->GetRoot(), kFDOpen, &fi);
420 if(fi.fFilename && strlen(fi.fFilename)) {
422 fTxtCalibInputFilename->SetText(fi.fFilename);
424 fTxtCalibOutputFilename->SetText(fi.fFilename);
429 //________________________________________________________________________________________________
430 void AliTRDCalibViewerGUI::Initialize(const char* fileName, const char* treeName) {
432 // initialize the GUI with a calibrationTree from fileName
434 // create AliTRDCalibViewer object, which will be used for generating all drawings
435 if (fViewer) delete fViewer;
436 fViewer = new AliTRDCalibViewer(fileName, treeName);
440 //________________________________________________________________________________________________
441 void AliTRDCalibViewerGUI::Initialize(AliBaseCalibViewer *viewer) {
443 // initializes the GUI with default settings and opens tree for drawing
446 TString selectedVariable("");
447 TString selectedNormalization("");
448 Int_t variableId = -1;
449 Int_t normalizationId = -1;
451 // remember the selected entry
452 if (fListVariables->GetSelectedEntry()) selectedVariable = fListVariables->GetSelectedEntry()->GetTitle();
453 if (fListNormalization->GetSelectedEntry()) selectedNormalization = fListNormalization->GetSelectedEntry()->GetTitle();
456 // fill fListVariables, list of drawable variables:
457 TObjArray* arr = ((AliTRDCalibViewer*)fViewer)->GetListOfVariables(1);
461 TIterator* iter = arr->MakeIterator();
463 TObjString* currentStr = 0;
465 fListVariables->RemoveAll();
466 while ((currentStr = (TObjString*)(iter->Next()))) {
467 fListVariables->AddEntry(currentStr->GetString().Data(), id);
468 if (fInitialized && currentStr->GetString() == selectedVariable) variableId = id;
472 // fill fListNorm, list of normalization variables:
473 TObjArray *arrNorm = ((AliTRDCalibViewer*)fViewer)->GetListOfNormalizationVariables();
474 TIterator *iterNorm = arrNorm->MakeIterator();
478 fListNormalization->RemoveAll();
479 while ((currentStr = (TObjString*)(iterNorm->Next()))) {
480 fListNormalization->AddEntry(currentStr->GetString().Data(), id);
481 if (fInitialized && currentStr->GetString() == selectedNormalization) normalizationId = id;
486 //Add draw variables to the list of normalisation
487 while ((currentStr = (TObjString*)(iter->Next()))) {
488 if (currentStr->GetString().BeginsWith("Map")) continue; //don't add mapping information
489 fListNormalization->AddEntry(currentStr->GetString().Data(), id);
490 if (fInitialized && currentStr->GetString() == selectedNormalization) normalizationId = id;
502 // trick do display the entries corectly after reinitialization
503 // otherwise all the entries would appear as one kryptic entry
504 // resizing the listbox somehow fixes the problem...
505 if (fInitialized) fListVariables->Resize(fListVariables->GetWidth()-1, fListVariables->GetHeight());
506 if (fInitialized) fListVariables->Resize(fListVariables->GetWidth()+1, fListVariables->GetHeight());
507 if (fInitialized) fListNormalization->Resize(fListNormalization->GetWidth()-1, fListNormalization->GetHeight());
508 if (fInitialized) fListNormalization->Resize(fListNormalization->GetWidth()+1, fListNormalization->GetHeight());
510 // select the last selected variable and normalization
511 if (fInitialized && variableId != -1) fListVariables->Select(variableId);
512 if (fInitialized && normalizationId != -1)fListVariables->Select(normalizationId);
514 if (fInitialized) Info("Initialize", "AliTRDCalibViewerGUI new initialized.");
515 fInitialized = kTRUE;
518 //________________________________________________________________________________________________
519 void AliTRDCalibViewerGUI::Reset(){
521 // reset variables, delete calib viewer
523 if (fViewer) delete fViewer;
524 fListVariables->RemoveAll();
525 fListNormalization->RemoveAll();
526 fInitialized = kFALSE;
529 //________________________________________________________________________________________________
530 TString* AliTRDCalibViewerGUI::GetDrawString() {
532 // create the draw string out of selection
535 // specify data to plot
536 TString desiredData("");
537 if (!fListVariables->GetSelectedEntry()) return 0;
538 desiredData += ((TGTextLBEntry*)(fListVariables->GetSelectedEntry()))->GetTitle();
539 desiredData += fViewer->GetAbbreviation();
541 // specify normalization
542 if (fRadioPredefined->GetState() == kButtonDown && fRadioNormalized->GetState() == kButtonDown) {
544 switch (fComboMethod->GetSelected()) {
545 case 0: // subtraction
552 TString normalizationData("");
553 if (!fListNormalization->GetSelectedEntry()) return 0;
554 normalizationData += ((TGTextLBEntry*)(fListNormalization->GetSelectedEntry()))->GetTitle();
557 if (! (TString(((TGTextLBEntry*)(fListNormalization->GetSelectedEntry()))->GetTitle())).BeginsWith("Fit"))
558 if ( normalizationData.BeginsWith("_") ) desiredData += ((TGTextLBEntry*)(fListVariables->GetSelectedEntry()))->GetTitle();
559 if ( fListVariables->FindEntry(normalizationData.Data()) )
560 normalizationData+="~";
561 desiredData += normalizationData;
563 else if (fRadioCustom->GetState() == kButtonDown) {
564 desiredData = fComboCustom->GetTextEntry()->GetText();
565 if (desiredData == "") return 0;
566 ReplacePlaceHolders(desiredData);
569 // try to add forgotten '~'
570 if (fChkAutoAppend->GetState() == kButtonDown)
571 desiredData = TString(((AliTRDCalibViewer*)fViewer)->AddAbbreviations((char*)desiredData.Data()));
572 return new TString(desiredData.Data());
575 //________________________________________________________________________________________________
576 TString* AliTRDCalibViewerGUI::GetCutString() {
578 // create the cut string out of selection
583 // try to add forgotten '~'
584 if(fChkAutoAppend->GetState() == kButtonDown)
585 cutsStr = TString(((AliTRDCalibViewer*)fViewer)->AddAbbreviations((char*)cutsStr.Data()));
586 return new TString(cutsStr.Data());
589 //________________________________________________________________________________________________
590 TString* AliTRDCalibViewerGUI::GetSectorString() {
592 // create the sector string out of selection
595 Int_t layerNo = (Int_t)(fNmbLayer->GetNumber());
596 Int_t sectorNo = (Int_t)(fNmbSector->GetNumber());
597 Int_t stackNo = (Int_t)(fNmbStack->GetNumber());
599 TString sectorStr("");
600 sectorStr = Form("Layer%dSector%dStack%d", layerNo, sectorNo, stackNo);
602 return new TString(sectorStr.Data());
605 //________________________________________________________________________________________________
606 void AliTRDCalibViewerGUI::DoDraw() {
608 // main method for drawing according to user selection
611 // specify data to plot:
612 if (!GetDrawString()) return;
613 TString desiredData(GetDrawString()->Data());
615 TString sectorStr(GetSectorString()->Data());
617 TString cutsStr(GetCutString()->Data());
619 TString addDrawOpt("");
620 if (fChkAddDrawOpt->GetState() == kButtonDown)
621 addDrawOpt += fComboAddDrawOpt->GetTextEntry()->GetText();
623 // remove last picture
624 if (!addDrawOpt.Contains("same"))
625 for (Int_t i = 0; i < fCanvMain->GetCanvas()->GetListOfPrimitives()->GetEntries(); i++) {
626 if (strcmp(fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->ClassName(), "TFrame") != 0)
627 fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->Delete();
629 //fCanvMain->GetCanvas()->Clear();
630 fCanvMain->GetCanvas()->cd();
633 if (fRadio1D->GetState() == kButtonDown){
635 TString strSigmaMax(fTxtSigmaMax->GetText()); // get sigmaMax from text enty
636 Double_t sigmaMax = (strSigmaMax.IsFloat()) ? strSigmaMax.Atof() : 5; // convert to double, if not convertable, set to 5
637 Bool_t plotMean = fChkMean->GetState() == kButtonDown;
638 Bool_t plotMedian = fChkMedian->GetState() == kButtonDown;
639 Bool_t plotLTM = fChkLTM->GetState() == kButtonDown;
640 if (fRadioNorm->GetState() == kButtonDown) // normal 1D drawing
641 entries = ((AliTRDCalibViewer*)fViewer)->EasyDraw1D(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), addDrawOpt.Data());
642 if (fRadioSigma->GetState() == kButtonDown) // sigma 1D drawing
643 entries = fViewer->DrawHisto1D(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), //
644 fTxtSigmas->GetText(), plotMean, plotMedian, plotLTM);
645 if (fRadioCumulative->GetState() == kButtonDown) // cumulative 1D drawing
646 entries = fViewer->SigmaCut(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), //
647 sigmaMax, plotMean, plotMedian, plotLTM, //
648 fCheckCumulativePM->GetState() == kButtonDown, fTxtSigmas->GetText(), /* Float_t sigmaStep =*/ -1);
649 if (fRadioIntegrate->GetState() == kButtonDown) // integral 1D drawing
650 entries = fViewer->Integrate(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), //
651 sigmaMax, plotMean, plotMedian, plotLTM, //
652 fTxtSigmas->GetText(), /* Float_t sigmaStep =*/ -1);
654 else if (fRadio2D->GetState() == kButtonDown) {
656 entries = ((AliTRDCalibViewer*)fViewer)->EasyDraw(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), addDrawOpt.Data());
658 if (entries == -1) return; // nothing was drawn, there is no histogram to get min and max
661 fCanvMain->GetCanvas()->Update();
664 //________________________________________________________________________________________________
665 void AliTRDCalibViewerGUI::MouseMove(Int_t event, Int_t x, Int_t y, TObject *selectedObject) {
668 // zoom to chamber works ONLY in 2D mode
670 if(event != kButton1Double )
672 if(!selectedObject->InheritsFrom("TH2")) return;
674 //Int_t layerNo = (Int_t)(fNmbLayer->GetNumber());
675 Int_t sectorNo = (Int_t)(fNmbSector->GetNumber());
676 Int_t stackNo = (Int_t)(fNmbStack->GetNumber());
678 // zoom out to the current layer if a chamber is viewed now
679 if(sectorNo!=-1 && stackNo!=-1) {
680 fNmbSector->SetNumber(-1);
681 fNmbStack->SetNumber(-1);
686 // check what kind of parameter we visualize
687 TString drawStr(GetDrawString()->Data());
688 Int_t viewedParamClass = -1; // -1 nothing, 0 calibration, 1 FEE params
689 if(drawStr.Contains("Status") || drawStr.Contains("Gain") || drawStr.Contains("Noise") ||
690 drawStr.Contains("Vdrift") || drawStr.Contains("T0") ||
691 drawStr.Contains("gain") || drawStr.Contains("chiSquare"))
692 viewedParamClass = 0;
693 if(drawStr.Contains("SORandEOR") ||
694 drawStr.Contains("gsmSOR") || drawStr.Contains("gsmDelta") ||
695 drawStr.Contains("nimSOR") || drawStr.Contains("nimDelta") ||
696 drawStr.Contains("nevSOR") || drawStr.Contains("nevDelta") ||
697 drawStr.Contains("nptSOR") || drawStr.Contains("nptDelta")) {
698 viewedParamClass = 1;
700 if(viewedParamClass==-1) return;
702 // some constants refering to the TRD geometry
703 const Int_t gkNRows[ 5] = {16, 16, 12, 16, 16}; // number of pad rows in the chambers from each of the 5 stacks
704 const Int_t gkNCols = 144; // number of pad cols per chamber
706 // get the coordinate of the clicked point in physical coordinates
707 Float_t upy = gPad->AbsPixeltoY(y);
708 Float_t upx = gPad->AbsPixeltoX(x);
709 Float_t gy = gPad->PadtoY(upy);
710 Float_t gx = gPad->PadtoX(upx);
711 Int_t selectedStack = -1;
712 Int_t selectedSector = -1;
714 // retrieve the double-clicked chamber
715 if(sectorNo==-1 && stackNo==-1) {
716 // get the selected stack
717 Float_t rowLowBound = -0.5;
718 Float_t rowHighBound = -0.5;
719 for(Int_t i=0; i<5; i++) {
720 if(i>0) rowLowBound += gkNRows[i-1];
721 rowHighBound += gkNRows[i];
722 if(gx>=rowLowBound && gx<=rowHighBound)
725 // get the selected sector
726 if(viewedParamClass==0) { // calibration params
727 selectedSector = (Int_t)TMath::Floor((gy+0.5)/Float_t(gkNCols));
729 if(viewedParamClass==1) { // FEE params
730 selectedSector = (Int_t)TMath::Floor((gy+0.5)/8.0); // 8 MCMs per chamber in pad cols direction
733 if(sectorNo!=-1 && stackNo==-1) {
734 // get the selected stack
735 Float_t rowLowBound = -0.5;
736 Float_t rowHighBound = -0.5;
737 for(Int_t i=0; i<5; i++) {
738 if(i>0) rowLowBound += gkNRows[i-1];
739 rowHighBound += gkNRows[i];
740 if(gx>=rowLowBound && gx<=rowHighBound)
743 // get the selected sector
744 selectedSector = sectorNo;
746 if(sectorNo==-1 && stackNo!=-1) {
747 // get the selected stack
748 selectedStack = stackNo;
749 // get the selected sector
750 if(viewedParamClass==0) { // calibration params
751 selectedSector = (Int_t)TMath::Floor((gy+0.5)/144.0);
753 if(viewedParamClass==1) { // FEE params
754 selectedSector = (Int_t)TMath::Floor((gy+0.5)/8.0);
758 fNmbSector->SetNumber(selectedSector);
759 fNmbStack->SetNumber(selectedStack);
764 //___________________________________________________________________________
765 void AliTRDCalibViewerGUI::ShowGUI() {
767 // Draw the graphical user interface
769 TGMainFrame* mainWindow = new TGMainFrame(gClient->GetRoot(), 1000, 700);
770 mainWindow->SetWindowName("Run OCDB details");
771 mainWindow->SetCleanup(kDeepCleanup);
772 AliTRDCalibViewerGUI *calibViewer = new AliTRDCalibViewerGUI(mainWindow, 1000, 650, 0);
773 mainWindow->AddFrame(calibViewer, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
774 mainWindow->MapSubwindows();
775 mainWindow->Resize();
776 mainWindow->MapWindow();
779 //___________________________________________________________________________
780 void AliTRDCalibViewerGUI::ShowGUI(const Char_t* treeFile, const Char_t* treeName) {
782 // Draw the graphical user interface
784 TGMainFrame* mainWindow = new TGMainFrame(gClient->GetRoot(), 1000, 700);
785 mainWindow->SetWindowName("Run OCDB details");
786 mainWindow->SetCleanup(kDeepCleanup);
787 AliBaseCalibViewerGUI *calibViewer = new AliTRDCalibViewerGUI(mainWindow, 1000, 650, 0);
788 mainWindow->AddFrame(calibViewer, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
790 calibViewer->Initialize(treeFile, treeName);
791 calibViewer->Reload();
792 calibViewer->DoDraw();
794 mainWindow->MapSubwindows();
795 mainWindow->Resize();
796 mainWindow->MapWindow();
799 //___________________________________________________________________________
800 void AliTRDCalibViewerGUI::ShowGUIwithTrending() {
802 // Draw a GUI application containing 2 tabs:
803 // -- tab for time/run trending
804 // -- tab for run details
805 TGMainFrame* frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 700);
806 frmMain->SetCleanup(kDeepCleanup);
808 TGTab* tabMain = new TGTab(frmMain, 1000, 700);
809 frmMain->AddFrame(tabMain, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
810 TGCompositeFrame* tabCont1 = tabMain->AddTab("Time");
811 TGCompositeFrame* tabCont2 = tabMain->AddTab("Detail - XXXXX");
813 AliCalibViewerGUItime* calibViewerTime = new AliCalibViewerGUItime(tabCont1, 1000, 650, "TRD");
814 tabCont1->AddFrame(calibViewerTime, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
816 AliTRDCalibViewerGUI *calibViewer = new AliTRDCalibViewerGUI(tabCont2, 1000, 700, 0);
817 tabCont2->AddFrame(calibViewer, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
818 calibViewerTime->SetCalibViewerGUI(calibViewer);
819 calibViewerTime->SetCalibViewerGUItab(tabMain->GetTabTab(1));
821 frmMain->MapSubwindows();
823 frmMain->MapWindow();