ROOT logo
#ifndef __CINT__
#include <AliCDBManager.h>
#include <AliCDBStorage.h>
#include <AliFMDCalibDrawer.h>
#include <TSystem.h>
#include <TGFrame.h>
#include <TGButton.h>
#include <TGLayout.h>
#include <TGButtonGroup.h>
#include <TGNumberEntry.h>
#include <TGTextEntry.h>
#include <TCanvas.h>
#include <TError.h>
#include <TGLabel.h>
#else
class TGMainFrame;
class TGNumberEntry;
class TGTextEntry;
class TGHButtonGroup;
class TGVButtonGroup;
class TGCheckButton;
class TGTextButton;
class TGLayoutHints;
class TCanvas;
class TGLabel;
class TGHorizontalFrame;
class AliFMDCalibDrawer;
class TGGroupFrame;

#endif


class Menu 
{
public:
  TGMainFrame       fMain;
  TGGroupFrame      fSetup;
  TGLabel           fLRun;
  TGNumberEntry     fRun;  
  TGLabel           fLOCDB;
  TGTextEntry       fOCDB; 
  TGTextButton      fInit;
  TGHorizontalFrame fBottom;
  TGGroupFrame      fWhere;
  TGHorizontalFrame fFDet;
  TGLabel           fLDet;
  TGNumberEntry     fDet;
  TGHorizontalFrame fFRing;
  TGLabel           fLRing;
  TGTextEntry       fRing;
  TGHorizontalFrame fFSec;
  TGLabel           fLSec;
  TGNumberEntry     fSec;
  TGHorizontalFrame fFStr;
  TGLabel           fLStr;
  TGNumberEntry     fStr;
  TGVButtonGroup    fSelection;
  TGCheckButton     fPedestal;
  TGCheckButton     fNoise;
  TGCheckButton     fGain;
  TGCheckButton     fDead;
  TGCheckButton     fRate;
  TGCheckButton     fRange;
  TGCheckButton     fThreshold;
  TGTextButton      fDraw;
  TGLayoutHints     fLayout;

  AliFMDCalibDrawer fCD;
  TCanvas*          fCPedestal;
  TCanvas*          fCNoise;
  TCanvas*          fCGain;
  TCanvas*          fCDead;
  TCanvas*          fCRate;
  TCanvas*          fCRange;
  TCanvas*          fCThreshold;

  Menu(const Menu&)
    : fMain(gClient->GetRoot()), 
      fSetup(&fMain, "Setup", kHorizontalFrame), 
      fLRun(&fSetup, "Run: "),
      fRun(&fSetup, 0, 8, -1, TGNumberFormat::kNESInteger,
	   TGNumberFormat::kNEAAnyNumber), 
      fLOCDB(&fSetup, "OCDB:"),
      fOCDB(&fSetup, "run"),       
      fInit(&fSetup, "Init"),
      fBottom(&fMain),
      fWhere(&fBottom, "From where", kVerticalFrame),
      fFDet(&fWhere), 
      fLDet(&fFDet, "Detector:"),
      fDet(&fFDet, -1, 1, -1, TGNumberFormat::kNESInteger,
	   TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMinMax,
	   -1, 3), 
      fFRing(&fWhere),
      fLRing(&fFRing,"Ring:"),
      fRing(&fFRing, ""), 
      fFSec(&fWhere),
      fLSec(&fFSec,"Sector:"),
      fSec(&fFSec, -1, 1, -1, TGNumberFormat::kNESInteger,
	   TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMinMax,
	   -1, 39), 
      fFStr(&fWhere),
      fLStr(&fFStr,"Strip:"),
      fStr(&fFStr, -1, 1, -1, TGNumberFormat::kNESInteger,
	   TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMinMax,
	   -1, 511), 
      fSelection(&fBottom, "what"),
      fPedestal(&fSelection, "Pedestal"), 
      fNoise(&fSelection, "Noise"), 
      fGain(&fSelection, "Gain"), 
      fDead(&fSelection, "Dead"), 
      fRate(&fSelection, "Rate"), 
      fRange(&fSelection, "Range"), 
      fThreshold(&fSelection, "Threshold"),
      fDraw(&fMain, "Draw"),
      fLayout(kLHintsExpandX, 2, 2, 2, 2),
      fCPedestal(0),
      fCNoise(0),
      fCGain(0),
      fCDead(0),
      fCRate(0),
      fCRange(0),
      fCThreshold(0)
  {}
  Menu& operator=(const Menu&) { return *this; }
  

  Menu(Int_t runNo=0)
    : fMain(gClient->GetRoot()), 
      fSetup(&fMain, "Setup", kHorizontalFrame), 
      fLRun(&fSetup, "Run: "),
      fRun(&fSetup, runNo, 8, -1, TGNumberFormat::kNESInteger,
	   TGNumberFormat::kNEAAnyNumber), 
      fLOCDB(&fSetup, "OCDB:"),
      fOCDB(&fSetup, "run"),       
      fInit(&fSetup, "Init"),
      fBottom(&fMain),
      fWhere(&fBottom, "From where", kVerticalFrame),
      fFDet(&fWhere), 
      fLDet(&fFDet, "Detector:"),
      fDet(&fFDet, -1, 1, -1, TGNumberFormat::kNESInteger,
	   TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMinMax,
	   -1, 3), 
      fFRing(&fWhere),
      fLRing(&fFRing,"Ring:"),
      fRing(&fFRing, ""), 
      fFSec(&fWhere),
      fLSec(&fFSec,"Sector:"),
      fSec(&fFSec, -1, 1, -1, TGNumberFormat::kNESInteger,
	   TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMinMax,
	   -1, 39), 
      fFStr(&fWhere),
      fLStr(&fFStr,"Strip:"),
      fStr(&fFStr, -1, 1, -1, TGNumberFormat::kNESInteger,
	   TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMinMax,
	   -1, 511), 
      fSelection(&fBottom, "what"),
      fPedestal(&fSelection, "Pedestal"), 
      fNoise(&fSelection, "Noise"), 
      fGain(&fSelection, "Gain"), 
      fDead(&fSelection, "Dead"), 
      fRate(&fSelection, "Rate"), 
      fRange(&fSelection, "Range"), 
      fThreshold(&fSelection, "Threshold"),
      fDraw(&fMain, "Draw"),
      fLayout(kLHintsExpandX, 2, 2, 2, 2),
      fCPedestal(0),
      fCNoise(0),
      fCGain(0),
      fCDead(0),
      fCRate(0),
      fCRange(0),
      fCThreshold(0)
  {
    fSetup.AddFrame(&fLRun,  &fLayout);
    fSetup.AddFrame(&fRun,   &fLayout);
    fSetup.AddFrame(&fLOCDB, &fLayout);
    fSetup.AddFrame(&fOCDB,  &fLayout);
    fSetup.AddFrame(&fInit,  &fLayout);

    fFDet.AddFrame(&fLDet,  &fLayout);
    fFDet.AddFrame(&fDet,   &fLayout);
    fFRing.AddFrame(&fLRing,&fLayout);
    fFRing.AddFrame(&fRing, &fLayout);
    fFSec.AddFrame(&fLSec,  &fLayout);
    fFSec.AddFrame(&fSec,   &fLayout);
    fFStr.AddFrame(&fLStr,  &fLayout);
    fFStr.AddFrame(&fStr,   &fLayout);

    fWhere.AddFrame(&fFDet,       &fLayout);
    fWhere.AddFrame(&fFRing,      &fLayout);
    fWhere.AddFrame(&fFSec,       &fLayout);
    fWhere.AddFrame(&fFStr,       &fLayout);
    
    fBottom.AddFrame(&fWhere,     &fLayout);
    fBottom.AddFrame(&fSelection, &fLayout);

    fMain.AddFrame(&fSetup,      &fLayout);
    fMain.AddFrame(&fBottom,     &fLayout);
    fMain.AddFrame(&fDraw,       &fLayout);

    fRing.SetAlignment(kTextRight);
    fRing.SetInsertMode(TGTextEntry::kReplace);
    fRing.SetMaxLength(1);

    fMain.MapSubwindows();
    fMain.Resize(fMain.GetDefaultSize());
    fMain.MapWindow();
    
    fDraw.Connect("Clicked()", "Menu", this, "Handle()");
    fInit.Connect("Clicked()", "Menu", this, "Init()");

    AliCDBManager* cdb = AliCDBManager::Instance();
    if (cdb->GetDefaultStorage())
      fOCDB.SetText(cdb->GetDefaultStorage()->GetURI().Data());
    fCD.Init(runNo);
  }
  TCanvas* MakeCanvas(const char* name, const char* title)
  {
    TCanvas* ret = new TCanvas(name, title, 1200, 900);
    ret->SetFillColor(0);
    ret->SetFillStyle(0);
    ret->SetBorderMode(0);
    ret->SetBorderSize(0);
    return ret;
  }
  void ClearCanvas(TCanvas* c)
  {
    c->Clear();
    c->SetTopMargin(0.02);
    c->SetRightMargin(0.02);
    c->SetBottomMargin(0.10);
    c->SetLeftMargin(0.10);
    c->cd();
  }
  void Init()
  {
    const Char_t* ocdb = fOCDB.GetText();
    Int_t         run  = fRun.GetIntNumber();
    Info("Init", "Initialising for run %d, OCDB @ %s", run, ocdb);
    fCD.Init(run, ocdb);
  }
  void Handle()
  {
    // static Short_t oD;
    // static Char_t  oR;
    // static Short_t oS;
    // static Short_t oT;
    Short_t d = fDet.GetIntNumber();
    Char_t  r = fRing.GetText()[0];
    Short_t s = fSec.GetIntNumber();
    Short_t t = fStr.GetIntNumber();
    Info("Handle", "D=%d, R=%c, S=%d, T=%d", d, (r == '\0' ? '-' : r), s, t);
    if (fPedestal.IsOn()) { 
      Info("Handle", "Will draw pedestals");
      if (!fCPedestal) fCPedestal = MakeCanvas("peds", "Pedestals");
      ClearCanvas(fCPedestal);
      fCD.DrawPedestals(d, r, s, t);
    }
    if (fNoise.IsOn()) { 
      Info("Handle", "Will draw noises");
      if (!fCNoise) fCNoise = MakeCanvas("noises", "Noises");
      ClearCanvas(fCNoise);
      fCD.DrawNoise(d, r, s, t);
    }
    if (fGain.IsOn()) { 
      Info("Handle", "Will draw gains");
      if (!fCGain) fCGain = MakeCanvas("gains", "Gains");
      ClearCanvas(fCGain);
      fCD.DrawGains(d, r, s, t);
    }
    if (fDead.IsOn()) { 
      Info("Handle", "Will draw deads");
      if (!fCDead) fCDead = MakeCanvas("deads", "Deads");
      ClearCanvas(fCDead);
      fCD.DrawDead(d, r, s, t);
    }
    if (fRate.IsOn()) { 
      Info("Handle", "Will draw rates");
      if (!fCRate) fCRate = MakeCanvas("rates", "Rates");
      fCRate->Clear();
      fCRate->cd();
      fCD.DrawRates(d, r, s, t);
    }
    if (fRange.IsOn()) { 
      Info("Handle", "Will draw ranges");
      if (!fCRange) fCRange = MakeCanvas("ranges", "Ranges");
      fCRange->Clear();
      fCRange->cd();
      fCD.DrawRanges(d, r, s, t);
    }
    if (fThreshold.IsOn()) { 
      Info("Handle", "Will draw thresholds");
      if (!fCThreshold) fCThreshold = MakeCanvas("thresholds", "Thresholds");
      fCThreshold->Clear();
      fCThreshold->cd();
      fCD.DrawThresholds(d, r, s, t);
    }
  }
};

      
void
DrawCalib(Long_t runNo=145167, const char* store=0)
{
#ifdef __CINT__
  gSystem->Load("libFMDutil");
#endif

  AliCDBManager* cdb = AliCDBManager::Instance();
  if (!store || store[0] == '\0') cdb->SetDefaultStorageFromRun(runNo);
  else cdb->SetDefaultStorage(store);
  cdb->SetRun(runNo);

  Menu* m = new Menu(runNo);
  // cd->DrawPedestals(d,r,s,t);
}  
#ifdef __MAKECINT__
#pragma link C++ class Menu;
#endif

#ifndef __CINT__
#include <TApplication.h>
#include <cstdlib>
/*
  To compile: 

  g++ -c `root-config --cflags --glibs` -L$ALICE_ROOT/lib/tgt_${ALICE_TARGET} \
    -I${ALICE_ROOT}/include -I../ -lGeom -lMinuit -lPhysics -lVMC -lXMLParser \
    -lProofPlayer -lSTEERBase -lSTEER -lCDB -lESD -lRAWDatabase -lRAWDatarec \
    -lANALYSIS -lFMDbase -lFMDrec -lFMDutil DrawCalib.C 
*/

int main(int argc, char** argv) { 
  int runNo = 145167;
  if (argc > 1) runNo = atoi(argv[1]);
  
  TApplication app("app", 0, 0);

  DrawCalib(runNo);

  app.Run();

  return 0;
}
#endif

  
 DrawCalib.C:1
 DrawCalib.C:2
 DrawCalib.C:3
 DrawCalib.C:4
 DrawCalib.C:5
 DrawCalib.C:6
 DrawCalib.C:7
 DrawCalib.C:8
 DrawCalib.C:9
 DrawCalib.C:10
 DrawCalib.C:11
 DrawCalib.C:12
 DrawCalib.C:13
 DrawCalib.C:14
 DrawCalib.C:15
 DrawCalib.C:16
 DrawCalib.C:17
 DrawCalib.C:18
 DrawCalib.C:19
 DrawCalib.C:20
 DrawCalib.C:21
 DrawCalib.C:22
 DrawCalib.C:23
 DrawCalib.C:24
 DrawCalib.C:25
 DrawCalib.C:26
 DrawCalib.C:27
 DrawCalib.C:28
 DrawCalib.C:29
 DrawCalib.C:30
 DrawCalib.C:31
 DrawCalib.C:32
 DrawCalib.C:33
 DrawCalib.C:34
 DrawCalib.C:35
 DrawCalib.C:36
 DrawCalib.C:37
 DrawCalib.C:38
 DrawCalib.C:39
 DrawCalib.C:40
 DrawCalib.C:41
 DrawCalib.C:42
 DrawCalib.C:43
 DrawCalib.C:44
 DrawCalib.C:45
 DrawCalib.C:46
 DrawCalib.C:47
 DrawCalib.C:48
 DrawCalib.C:49
 DrawCalib.C:50
 DrawCalib.C:51
 DrawCalib.C:52
 DrawCalib.C:53
 DrawCalib.C:54
 DrawCalib.C:55
 DrawCalib.C:56
 DrawCalib.C:57
 DrawCalib.C:58
 DrawCalib.C:59
 DrawCalib.C:60
 DrawCalib.C:61
 DrawCalib.C:62
 DrawCalib.C:63
 DrawCalib.C:64
 DrawCalib.C:65
 DrawCalib.C:66
 DrawCalib.C:67
 DrawCalib.C:68
 DrawCalib.C:69
 DrawCalib.C:70
 DrawCalib.C:71
 DrawCalib.C:72
 DrawCalib.C:73
 DrawCalib.C:74
 DrawCalib.C:75
 DrawCalib.C:76
 DrawCalib.C:77
 DrawCalib.C:78
 DrawCalib.C:79
 DrawCalib.C:80
 DrawCalib.C:81
 DrawCalib.C:82
 DrawCalib.C:83
 DrawCalib.C:84
 DrawCalib.C:85
 DrawCalib.C:86
 DrawCalib.C:87
 DrawCalib.C:88
 DrawCalib.C:89
 DrawCalib.C:90
 DrawCalib.C:91
 DrawCalib.C:92
 DrawCalib.C:93
 DrawCalib.C:94
 DrawCalib.C:95
 DrawCalib.C:96
 DrawCalib.C:97
 DrawCalib.C:98
 DrawCalib.C:99
 DrawCalib.C:100
 DrawCalib.C:101
 DrawCalib.C:102
 DrawCalib.C:103
 DrawCalib.C:104
 DrawCalib.C:105
 DrawCalib.C:106
 DrawCalib.C:107
 DrawCalib.C:108
 DrawCalib.C:109
 DrawCalib.C:110
 DrawCalib.C:111
 DrawCalib.C:112
 DrawCalib.C:113
 DrawCalib.C:114
 DrawCalib.C:115
 DrawCalib.C:116
 DrawCalib.C:117
 DrawCalib.C:118
 DrawCalib.C:119
 DrawCalib.C:120
 DrawCalib.C:121
 DrawCalib.C:122
 DrawCalib.C:123
 DrawCalib.C:124
 DrawCalib.C:125
 DrawCalib.C:126
 DrawCalib.C:127
 DrawCalib.C:128
 DrawCalib.C:129
 DrawCalib.C:130
 DrawCalib.C:131
 DrawCalib.C:132
 DrawCalib.C:133
 DrawCalib.C:134
 DrawCalib.C:135
 DrawCalib.C:136
 DrawCalib.C:137
 DrawCalib.C:138
 DrawCalib.C:139
 DrawCalib.C:140
 DrawCalib.C:141
 DrawCalib.C:142
 DrawCalib.C:143
 DrawCalib.C:144
 DrawCalib.C:145
 DrawCalib.C:146
 DrawCalib.C:147
 DrawCalib.C:148
 DrawCalib.C:149
 DrawCalib.C:150
 DrawCalib.C:151
 DrawCalib.C:152
 DrawCalib.C:153
 DrawCalib.C:154
 DrawCalib.C:155
 DrawCalib.C:156
 DrawCalib.C:157
 DrawCalib.C:158
 DrawCalib.C:159
 DrawCalib.C:160
 DrawCalib.C:161
 DrawCalib.C:162
 DrawCalib.C:163
 DrawCalib.C:164
 DrawCalib.C:165
 DrawCalib.C:166
 DrawCalib.C:167
 DrawCalib.C:168
 DrawCalib.C:169
 DrawCalib.C:170
 DrawCalib.C:171
 DrawCalib.C:172
 DrawCalib.C:173
 DrawCalib.C:174
 DrawCalib.C:175
 DrawCalib.C:176
 DrawCalib.C:177
 DrawCalib.C:178
 DrawCalib.C:179
 DrawCalib.C:180
 DrawCalib.C:181
 DrawCalib.C:182
 DrawCalib.C:183
 DrawCalib.C:184
 DrawCalib.C:185
 DrawCalib.C:186
 DrawCalib.C:187
 DrawCalib.C:188
 DrawCalib.C:189
 DrawCalib.C:190
 DrawCalib.C:191
 DrawCalib.C:192
 DrawCalib.C:193
 DrawCalib.C:194
 DrawCalib.C:195
 DrawCalib.C:196
 DrawCalib.C:197
 DrawCalib.C:198
 DrawCalib.C:199
 DrawCalib.C:200
 DrawCalib.C:201
 DrawCalib.C:202
 DrawCalib.C:203
 DrawCalib.C:204
 DrawCalib.C:205
 DrawCalib.C:206
 DrawCalib.C:207
 DrawCalib.C:208
 DrawCalib.C:209
 DrawCalib.C:210
 DrawCalib.C:211
 DrawCalib.C:212
 DrawCalib.C:213
 DrawCalib.C:214
 DrawCalib.C:215
 DrawCalib.C:216
 DrawCalib.C:217
 DrawCalib.C:218
 DrawCalib.C:219
 DrawCalib.C:220
 DrawCalib.C:221
 DrawCalib.C:222
 DrawCalib.C:223
 DrawCalib.C:224
 DrawCalib.C:225
 DrawCalib.C:226
 DrawCalib.C:227
 DrawCalib.C:228
 DrawCalib.C:229
 DrawCalib.C:230
 DrawCalib.C:231
 DrawCalib.C:232
 DrawCalib.C:233
 DrawCalib.C:234
 DrawCalib.C:235
 DrawCalib.C:236
 DrawCalib.C:237
 DrawCalib.C:238
 DrawCalib.C:239
 DrawCalib.C:240
 DrawCalib.C:241
 DrawCalib.C:242
 DrawCalib.C:243
 DrawCalib.C:244
 DrawCalib.C:245
 DrawCalib.C:246
 DrawCalib.C:247
 DrawCalib.C:248
 DrawCalib.C:249
 DrawCalib.C:250
 DrawCalib.C:251
 DrawCalib.C:252
 DrawCalib.C:253
 DrawCalib.C:254
 DrawCalib.C:255
 DrawCalib.C:256
 DrawCalib.C:257
 DrawCalib.C:258
 DrawCalib.C:259
 DrawCalib.C:260
 DrawCalib.C:261
 DrawCalib.C:262
 DrawCalib.C:263
 DrawCalib.C:264
 DrawCalib.C:265
 DrawCalib.C:266
 DrawCalib.C:267
 DrawCalib.C:268
 DrawCalib.C:269
 DrawCalib.C:270
 DrawCalib.C:271
 DrawCalib.C:272
 DrawCalib.C:273
 DrawCalib.C:274
 DrawCalib.C:275
 DrawCalib.C:276
 DrawCalib.C:277
 DrawCalib.C:278
 DrawCalib.C:279
 DrawCalib.C:280
 DrawCalib.C:281
 DrawCalib.C:282
 DrawCalib.C:283
 DrawCalib.C:284
 DrawCalib.C:285
 DrawCalib.C:286
 DrawCalib.C:287
 DrawCalib.C:288
 DrawCalib.C:289
 DrawCalib.C:290
 DrawCalib.C:291
 DrawCalib.C:292
 DrawCalib.C:293
 DrawCalib.C:294
 DrawCalib.C:295
 DrawCalib.C:296
 DrawCalib.C:297
 DrawCalib.C:298
 DrawCalib.C:299
 DrawCalib.C:300
 DrawCalib.C:301
 DrawCalib.C:302
 DrawCalib.C:303
 DrawCalib.C:304
 DrawCalib.C:305
 DrawCalib.C:306
 DrawCalib.C:307
 DrawCalib.C:308
 DrawCalib.C:309
 DrawCalib.C:310
 DrawCalib.C:311
 DrawCalib.C:312
 DrawCalib.C:313
 DrawCalib.C:314
 DrawCalib.C:315
 DrawCalib.C:316
 DrawCalib.C:317
 DrawCalib.C:318
 DrawCalib.C:319
 DrawCalib.C:320
 DrawCalib.C:321
 DrawCalib.C:322
 DrawCalib.C:323
 DrawCalib.C:324
 DrawCalib.C:325
 DrawCalib.C:326
 DrawCalib.C:327
 DrawCalib.C:328
 DrawCalib.C:329
 DrawCalib.C:330
 DrawCalib.C:331
 DrawCalib.C:332
 DrawCalib.C:333
 DrawCalib.C:334
 DrawCalib.C:335
 DrawCalib.C:336
 DrawCalib.C:337
 DrawCalib.C:338
 DrawCalib.C:339
 DrawCalib.C:340
 DrawCalib.C:341
 DrawCalib.C:342
 DrawCalib.C:343
 DrawCalib.C:344
 DrawCalib.C:345
 DrawCalib.C:346
 DrawCalib.C:347
 DrawCalib.C:348