ROOT logo
//-*- Mode: C++ -*-

// ** USED macros :
// ***************************************************
// - hlt_alieve_init.C
// - VizDB_scan.C
// - geom_gentle_hlt.C
// - geom_gentle_muon.C
// ***************************************************

#if !defined(__CINT__) || defined(__MAKECINT__)

//****************** ROOT ******************************************
#include "TRandom.h"
#include "TVirtualPad.h"
#include "TGLViewer.h"
#include "TThread.h"
#include "TGFileBrowser.h"
#include "TStyle.h"
#include "TList.h"
#include "TDirectory.h"
#include "TFile.h"
#include "TH2.h"
#include "TCanvas.h"
#include "TColor.h"
#include "TVector3.h"

//****************** ROOT/EVE **************************************
#include "TEveManager.h"

#include "AliEveHOMERManager.h"
#include "AliEveHLTEventManager.h"
#include "geom_gentle_hlt.C"

//***************************************************************
#include "HLT/rec/AliHLTReconstructor.h"



#endif



// -----------------------------------------------------------------
// --                       Geometry / Scenes                     --
// -----------------------------------------------------------------

TEveGeoShape *gGeomGentle     = 0;
TEveGeoShape *gGeomGentleRPhi = 0;
TEveGeoShape *gGeomGentleRhoZ = 0;
TEveGeoShape *gGeomGentleTRD  = 0;
TEveGeoShape *gGeomGentleMUON = 0;

TEveScene *gRPhiGeomScene  = 0;
TEveScene *gRhoZGeomScene  = 0;
TEveScene *gRPhiEventScene = 0;
TEveScene *gRhoZEventScene = 0;

TEveProjectionManager *gRPhiMgr = 0;
TEveProjectionManager *gRhoZMgr = 0;

TEveViewer *g3DView   = 0;
TEveViewer *gRPhiView = 0;
TEveViewer *gRhoZView = 0;

// -----------------------------------------------------------------
// --                Geometry / Scenes Parameters                 --
// -----------------------------------------------------------------

// -- Parameters to show different geometries
Bool_t gShowMUON     = kTRUE;
Bool_t gShowMUONRPhi = kFALSE;
Bool_t gShowMUONRhoZ = kTRUE;
Bool_t gShowTRD      = kFALSE;


// -- HOMERManager
AliEveHOMERManager*                       gHomerManager      = 0;
AliEveHLTEventManager*                       geventManager      = 0;

// -- Geometry Manager 
TGeoManager*                              gGeoManager        = 0;


//Container for gGeoManager till it is broken
TGeoManager *fGeoManager = 0;
// -----------------------------------------------------------------
// --                          Methods                            --
// -----------------------------------------------------------------

Int_t initializeEveViewer( Bool_t showBarrel, Bool_t showMuon );

void writeToFile();


// #################################################################
// #################################################################
// #################################################################

// -----------------------------------------------------------------
void od ( Bool_t showBarrel = kTRUE, Bool_t showMuon = kFALSE ) {

  // -- Loading Geometry
  // ---------------------
  Int_t run = 0;
  AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  AliCDBManager::Instance()->SetRun(run);
  AliGeomManager::LoadGeometry();
  // The default in the simulation is the following line
  // TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", -1., -1, AliMagF::k5kG));
  // However for the current setting of +ve L3 and +ve Dipole magnetic field
  // the following setting creates the field close to real field with currect polarity
  if(showMuon)
    TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", -1., -1, AliMagF::k5kG));

  // Get the pointer to gGeoManager before it's broken (bug in alieve)
  fGeoManager = gGeoManager;

    // -- Initialize pointsets and add macros
  // ----------------------------------------
  //TEveUtil::LoadMacro("hlt_alieve_init.C");
  //hlt_alieve_init(".", -1);

  // -- Initialize Eve
  // -------------------
  cout << "Initializing the EVE viewer"<<endl;
  initializeEveViewer( showBarrel, showMuon, fGeoManager );

  // -- Reset gGeoManager to the original pointer
  // ----------------------------------------------

  // -- Finalize Eve
  // -----------------
  gSystem->ProcessEvents();
  gEve->Redraw3D(kTRUE);

  // -- Create new hM object
  // -------------------------

  cout << "Creating the Event Manager"<<endl;
  gEventManager = new AliEveHLTEventManagerHomer();
  gEventManager->SetShowMuon(showMuon);
  gEventManager->SetEveManager(gEve);
  gEventManager->SetGeoManager(gGeoManager);
  gEventManager->SetRPhiManager(gRPhiMgr);
  gEventManager->SetRPhiEventScene(gRPhiEventScene);
  gEventManager->SetRPhiViewer(gRPhiView);
  gEventManager->SetRhoZManager(gRhoZMgr);
  gEventManager->SetRhoZEventScene(gRhoZEventScene);
  gEventManager->SetRhoZViewer(gRhoZView);
 
  //gEventManager->SetBarrelFlag(showBarrel);
  //gEventManager->SetMuonFlag(showMuon);

  // Int_t iResult = gHomerManager->Initialize();
  // if (iResult) { 
  //   printf("Error Initializing AliHLTHOMERManager, quitting");
  //   return; 
  // }
  
  // gEventManager->SetHomerManager(gHomerManager);

  // -- Add hM to EveTree
  // ----------------------
  //gEve->AddToListTree(gHomerManager, kTRUE);
  gEve->AddToListTree(gEventManager, kTRUE);

  // -- Create SourceList
  // ----------------------
  // iResult = gHomerManager->CreateEveSourcesListLoop();
  // if (iResult) {
  //   printf ("Couldn't find active services. Giving up. \n");
  //   return;
  // } 


  // if ( showBarrel ) {
  //   gHomerManager->ConnectEVEtoHOMER("TPC" );
  // } else if ( MUONMode ) {
  //   gHomerManager->ConnectEVEtoHOMER("MUON");
  // } else if( TRDMode ) {
  //   gHomerManager->ConnectEVEtoHOMER("TRD");  
  // } else {
  //   cout<<" No detectors selected, nothing will be displayed"<<endl;
  // }	
  // THIS LINE DOES NOT WORK. PLEASE USE ANOTHER LINE!


  gGeoManager = fGeoManager;
  

}

// -------------------------------------------------------------------------
Int_t initializeEveViewer( Bool_t showBarrel, Bool_t showMuon, TGeoManager * manager ) {
  
  //=============================================================================
  // Visualization database
  //============================================================================

  TEveUtil::AssertMacro("VizDB_scan.C");
  
  //  alieve_vizdb();
  


  //==============================================================================
  // -- Geometry, scenes, projections and viewers
  //==============================================================================

  TEveBrowser         *browser = gEve->GetBrowser();
  browser->ShowCloseTab(kFALSE);
  
  // -- Disable extra geometry
  // ---------------------------
  if (!showMuon)
    gShowMUON = gShowMUONRPhi = gShowMUONRhoZ = kFALSE;
  
  // -- Load Geometry
  // ------------------
  TEveUtil::LoadMacro("geom_gentle_hlt.C");
  gGeomGentle = geom_gentle_hlt();
  gGeomGentleRPhi = geom_gentle_rphi(); gGeomGentleRPhi->IncDenyDestroy();
  gGeomGentleRhoZ = geom_gentle_rhoz(); gGeomGentleRhoZ->IncDenyDestroy();
  gGeomGentleTRD  = geom_gentle_trd();

  gGeoManager = fGeoManager;

  gEMCALNode = gGeoManager->GetTopVolume()->FindNode("XEN1_1");

  TEveGeoTopNode* emcal_re = new TEveGeoTopNode(gGeoManager, gEMCALNode);
  emcal_re->SetVisLevel(1);
  //  emcal_re->FirstChild()->Dump();

  // for(Int_t i = 4; i < 11; i++) {
  //   emcal_re->FindChild(Form("SMOD_%d", i))->SetRnrState(kFALSE);
  // }
  // emcal_re->FindChild("SM10_1")->SetRnrState(kFALSE);
  // emcal_re->FindChild("SM10_2")->SetRnrState(kFALSE);



  gEve->AddGlobalElement(emcal_re);
  gEve->Redraw3D();

  if (gShowMUON) 
    gGeomGentleMUON = geom_gentle_muon(kFALSE);
  
  // -- Scenes
  // -----------
  gRPhiGeomScene  = gEve->SpawnNewScene("RPhi Geometry",
                    "Scene holding projected geometry for the RPhi view.");
  gRhoZGeomScene  = gEve->SpawnNewScene("RhoZ Geometry",
		    "Scene holding projected geometry for the RhoZ view.");
  gRPhiEventScene = gEve->SpawnNewScene("RPhi Event Data",
		    "Scene holding projected geometry for the RPhi view.");
  gRhoZEventScene = gEve->SpawnNewScene("RhoZ Event Data",
		    "Scene holding projected geometry for the RhoZ view.");

  // -- Projection managers
  // ------------------------

  gRPhiMgr = new TEveProjectionManager();
  gRPhiMgr->SetProjection(TEveProjection::kPT_RPhi);
  gEve->AddToListTree(gRPhiMgr, kFALSE);
  {
    TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr);
    a->SetMainColor(kWhite);
    a->SetTitle("R-Phi");
    a->SetTitleSize(0.05);
    a->SetTitleFont(102);
    a->SetLabelSize(0.025);
    a->SetLabelFont(102);
    gRPhiGeomScene->AddElement(a);
  }
  gRPhiMgr->SetCurrentDepth(-10);
  gRPhiMgr->ImportElements(gGeomGentleRPhi, gRPhiGeomScene);
  gRPhiMgr->SetCurrentDepth(0);
  gRPhiMgr->ImportElements(gGeomGentleTRD, gRPhiGeomScene);
  if (gShowMUONRPhi) gRPhiMgr->ImportElements(gGeomGentleMUON, gRPhiGeomScene);

  gRhoZMgr = new TEveProjectionManager();
  gRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ);
  gEve->AddToListTree(gRhoZMgr, kFALSE);
  {
    TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr);
    a->SetMainColor(kWhite);
    a->SetTitle("Rho-Z");
    a->SetTitleSize(0.05);
    a->SetTitleFont(102);
    a->SetLabelSize(0.025);
    a->SetLabelFont(102);
    gRhoZGeomScene->AddElement(a);
  }
  gRhoZMgr->SetCurrentDepth(-10);
  gRhoZMgr->ImportElements(gGeomGentleRhoZ, gRhoZGeomScene);
  gRhoZMgr->SetCurrentDepth(0);
  gRhoZMgr->ImportElements(gGeomGentleTRD, gRhoZGeomScene);
  
  if (gShowMUONRhoZ) gRhoZMgr->ImportElements(gGeomGentleMUON, gRhoZGeomScene);

  // -- Viewers
  // ------------

  TEveWindowSlot *slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
  TEveWindowPack *pack = slot->MakePack();
  pack->SetElementName("Multi View");
  pack->SetHorizontal();
  pack->SetShowTitleBar(kFALSE);
  pack->NewSlot()->MakeCurrent();
  g3DView = gEve->SpawnNewViewer("3D View", "");
  g3DView->AddScene(gEve->GetGlobalScene());
  g3DView->AddScene(gEve->GetEventScene());


  pack = pack->NewSlot()->MakePack();
  pack->SetShowTitleBar(kFALSE);
  pack->NewSlot()->MakeCurrent();
  gRPhiView = gEve->SpawnNewViewer("RPhi View", "");
  gRPhiView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
  gRPhiView->AddScene(gRPhiGeomScene);
  gRPhiView->AddScene(gRPhiEventScene);

  pack->NewSlot()->MakeCurrent();
  gRhoZView = gEve->SpawnNewViewer("RhoZ View", "");
  gRhoZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
  gRhoZView->AddScene(gRhoZGeomScene);
  gRhoZView->AddScene(gRhoZEventScene);


   
  //Add HLT Text to windows
 
  TGLOverlayButton *ob1 = new TGLOverlayButton(g3DView->GetGLViewer(),  "HLT", 0, 20, 110, 60);
  ob1->SetAlphaValues(0.8, 0.8);
  //  cout << "color" << ob1->GetBackColor() << endl;
  //ob1->SetBackColor(8421631);
  //ob1->SetBackColor(10492431);
  TGLOverlayButton *ob2 = new TGLOverlayButton(g3DView->GetGLViewer(),  "ALICE", 0, 0, 110, 20);
  ob2->SetAlphaValues(0.8, 0.8);
  //ob2->SetBackColor(0.2);
  TGLOverlayButton *ob3 = new TGLOverlayButton(gEve->GetDefaultGLViewer(),  "HLT", 0, 20, 110, 60);
  ob3->SetAlphaValues(0.8, 0.8);
  TGLOverlayButton *ob4 = new TGLOverlayButton(gEve->GetDefaultGLViewer(),  "ALICE", 0, 0, 110, 20);
  ob4->SetAlphaValues(0.8, 0.8);


  TGLOverlayButton *ne = new TGLOverlayButton(gEve->GetDefaultGLViewer(),  "Next Event", 110, 0, 210, 20);
  ne->SetAlphaValues(0.0, 0.8);

  // -- List of Viewers
  // --------------------

  TEveViewerList *viewerlist = new TEveViewerList();
  viewerlist->AddElement(gEve->GetDefaultViewer());
  
  viewerlist->AddElement(g3DView);
  viewerlist->AddElement(gRhoZView);
  viewerlist->AddElement(gRPhiView);
  viewerlist->SwitchColorSet();

  //==============================================================================
  // -- Macros / QA histograms
  //==============================================================================

  // -- Registration of per-event macros
  // -------------------------------------

  AliEveMacroExecutor *exec    = new AliEveMacroExecutor();



  gStyle->SetPalette(1, 0);
  gStyle->SetOptFit(1);


  
  return 0;
}

//****************************************************************************
void writeToFile(){

  TList * bList = gHomerManager->GetBlockList();
  if(bList){
    TFile * file = TFile::Open(Form("Event_0x%016X_ITS.root", gHomerManager->GetEventID()), "RECREATE"); 
    bList->Write("blockList", TObject::kSingleKey);
    file->Close();
  }
  
  bList = gHomerManager->GetAsyncBlockList();
  if(bList){
    TFile * afile = TFile::Open(Form("Event_0x%016X_Async.root", gHomerManager->GetEventID()), "RECREATE"); 
    bList->Write("blockList", TObject::kSingleKey);
    afile->Close();
  }
}



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