ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

class TEveProjectionManager;
class TEveGeoShape;
class TEveUtil;
class AliTriggerAnalysis;
class AliSysInfo;

TH2D* V0StateHistogram;

Bool_t gCenterProjectionsAtPrimaryVertex = kFALSE;

bool gBlackBackground = true;

void alieve_p2()
{
    printf("alieve_online_init() ...\n");
    
    if (gSystem->Getenv("ALICE_ROOT") != 0)
    {
        gInterpreter->AddIncludePath(Form("%s/MUON", gSystem->Getenv("ALICE_ROOT")));
        gInterpreter->AddIncludePath(Form("%s/MUON/mapping", gSystem->Getenv("ALICE_ROOT")));
    }
    
    AliEveEventManager::SetCdbUri("local://$ALICE_ROOT/OCDB");
    
    Info("alieve_init", "Adding standard macros.");
    TString  hack = gSystem->pwd(); // Problem with TGFileBrowser cding
    alieve_init_import_macros();
    gSystem->cd(hack);
    
    new AliEveEventManager("online", -1);
    gEve->AddEvent(AliEveEventManager::GetMaster());
    
    TEveUtil::AssertMacro("VizDB_scan_p2.C");
//    gSystem->ProcessEvents();
    
    AliEveMacroExecutor *exec  = AliEveEventManager::GetMaster()->GetExecutor();
    TEveBrowser         *browser = gEve->GetBrowser();
    browser->ShowCloseTab(kFALSE);
    
    // Gentle-geom loading changes gGeoManager.
    AliEveMultiView *multiView = new AliEveMultiView(kTRUE);
    
    TEveUtil::LoadMacro("geom_gentle.C");
    multiView->InitGeomGentle(geom_gentle(),
                              geom_gentle_rphi(),
                              geom_gentle_rhoz(),
                              geom_gentle_rhoz());
    
    
    
    //These macros crashes on mac os. To be checked
    
    TEveUtil::LoadMacro("geom_gentle_trd.C");
//    multiView->InitGeomGentleTrd(geom_gentle_trd());
    
    TEveUtil::LoadMacro("geom_gentle_muon.C");
    //multiView->InitGeomGentleMuon(geom_gentle_muon(), kFALSE, kFALSE, kTRUE);
    
    //============================================================================
    // Standard macros to execute -- not all are enabled by default.
    //============================================================================
    
    printf("============ Setting macro executor\n");
    
    AliEveMacroExecutor *exec = AliEveEventManager::GetMaster()->GetExecutor();
    
    exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX",         "primary_vertex.C", "primary_vertex",             "",                kTRUE));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse",     "",                kTRUE));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box",     "primary_vertex.C", "primary_vertex_box",         "kFALSE, 3, 3, 3", kFALSE));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX",         "primary_vertex.C", "primary_vertex_spd",         "",                kTRUE));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse_spd", "",                kTRUE));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box",     "primary_vertex.C", "primary_vertex_box_spd",     "kFALSE, 3, 3, 3", kFALSE));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX",         "primary_vertex.C", "primary_vertex_tpc",         "",                kFALSE));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse_tpc", "",                kFALSE));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box",     "primary_vertex.C", "primary_vertex_box_tpc",     "kFALSE, 3, 3, 3", kFALSE));
    
    exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus ITS",   "its_clusters.C",   "its_clusters"));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TPC",   "tpc_clusters.C",   "tpc_clusters"));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TRD",   "trd_clusters.C",   "trd_clusters"));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TOF",   "tof_clusters.C",   "tof_clusters"));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus HMPID", "hmpid_clusters.C", "hmpid_clusters"));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus MUON",  "muon_clusters.C",  "muon_clusters"));
    
    
    exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "DIG EMCAL",   "emcal_digits.C",   "emcal_digits"));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW ITS",     "its_raw.C",     "its_raw"));
    //  exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW TPC",     "tpc_raw.C",     "tpc_raw"));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW TOF",     "tof_raw.C",     "tof_raw"));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW VZERO",   "vzero_raw.C",   "vzero_raw", "", kFALSE));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW ACORDE",  "acorde_raw.C",  "acorde_raw", "", kFALSE));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW MUON",    "muon_raw.C",  "muon_raw"));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW FMD",     "fmd_raw.C",     "fmd_raw"));
    
    
    exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track",      "esd_tracks.C",        "esd_tracks",             "", kFALSE));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track",      "esd_tracks.C",        "esd_tracks_MI",          "", kFALSE));
    exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track MUON", "esd_muon_tracks.C", "esd_muon_tracks",        "kTRUE,kFALSE", kTRUE));
    
    
    // these macros were leaking:
    exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track",      "esd_tracks.C",        "esd_tracks_by_category", "", kTRUE));// just a little
    exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC FMD",        "fmd_esd.C",           "fmd_esd",                "", kTRUE));//huge leak
    //
    
    
    
    // ???
    // exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC TRD", "trd_detectors.C", "trd_detectors",         "", kFALSE));
    // trd_tracks disabled due to memory leaks
    
    //----------------------------------------------------------------------------
    
    slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
    slot->StartEmbedding();
    AliEveMacroExecutorWindow* exewin = new AliEveMacroExecutorWindow(exec);
    slot->StopEmbedding("DataSelection");
    exewin->PopulateMacros();
    
    //============================================================================
    // Final GUI setup
    //============================================================================
    
    browser->GetTabRight()->SetTab(1);
    browser->StartEmbedding(TRootBrowser::kBottom);
    new AliEveEventManagerWindow(AliEveEventManager::GetMaster());
    browser->StopEmbedding("EventCtrl");
    
    browser->MoveResize(0, 0, gClient->GetDisplayWidth(),gClient->GetDisplayHeight() - 32);
    
    if(!gBlackBackground) gEve->GetViewers()->SwitchColorSet();
    
//    browser->HideFrame(browser->GetTabLeft());
//    browser->HideFrame(browser->GetTabRight());
//    browser->HideFrame(TRootBrowser::kBottom);
//    browser->GetMainFrame()->HideFrame(browser->GetTabRight());
    
    gEve->FullRedraw3D(kTRUE);
//    gSystem->ProcessEvents();
    
    TGLViewer *glv1 = multiView->Get3DView()->GetGLViewer();
    TGLViewer *glv2 = multiView->GetRPhiView()->GetGLViewer();
    TGLViewer *glv3 = multiView->GetRhoZView()->GetGLViewer();
    
    glv1->CurrentCamera().RotateRad(-0.4, -1.8);
    glv2->CurrentCamera().Dolly(450, kFALSE, kFALSE);
    glv3->CurrentCamera().Dolly(1500, kFALSE, kFALSE);
    
    AliEveEventManager::GetMaster()->AddNewEventCommand("alieve_online_on_new_event();");
    
//    gEve->FullRedraw3D();
    gSystem->ProcessEvents();
    gEve->Redraw3D(kTRUE);
    
    gEve->GetBrowser()->RaiseWindow();
    gEve->FullRedraw3D();
    gSystem->ProcessEvents();

/*
 
    printf("\n\nfound:%p\n\n",gEve->GetViewers()->FindChild("Multi View"));
    
    TEveViewer *multiViewer = dynamic_cast<TEveViewer*>(gEve->GetViewers()->FindChild("3D View"));
    
    if(multiViewer)
    {
        printf("\n\nMulti view:%p\n\n",multiViewer);
        multiViewer->UndockWindow();
    }
    else
    {
        printf("\n\nMulti view not found\n\n");
    }
  */
    // add some margins for the borders and the WM decorations/title
//    multiView->MoveResize(0, 0, gClient->GetDisplayWidth(), gClient->GetDisplayHeight());
    
    AliEveEventManager::GetMaster()->SetAutoLoad(true);
}

Int_t      g_pic_id  = 0;
Int_t      g_pic_max = 100;
TTimeStamp g_pic_prev(0, 0);

void alieve_online_on_new_event()
{
    AliSysInfo::AddStamp("on_new_event_start");
    
    Double_t x[3] = { 0, 0, 0 };
    
    if (AliEveEventManager::HasESD())
    {
        AliESDEvent* esd = AliEveEventManager::AssertESD();
        esd->GetPrimaryVertex()->GetXYZ(x);
        
        TTimeStamp ts(esd->GetTimeStamp());
        TString win_title("Eve Main Window -- Timestamp: ");
        win_title += ts.AsString("s");
        win_title += "; Event # in ESD file: ";
        win_title += esd->GetEventNumberInFile();
        gEve->GetBrowser()->SetWindowName(win_title);
    }
    
    TEveElement* top = gEve->GetCurrentEvent();
    
    AliEveMultiView *mv = AliEveMultiView::Instance();
    
    //mv->DestroyEventRPhi();
    if (gCenterProjectionsAtPrimaryVertex)
        mv->SetCenterRPhi(x[0], x[1], x[2]);
    mv->ImportEventRPhi(top);
    
    //mv->DestroyEventRhoZ();
    if (gCenterProjectionsAtPrimaryVertex)
        mv->SetCenterRhoZ(x[0], x[1], x[2]);
    mv->ImportEventRhoZ(top);
    
    if (gCenterProjectionsAtPrimaryVertex)
        mv->SetCenterMuon(x[0], x[1], x[2]);
    mv->ImportEventMuon(top);
    
    AliSysInfo::AddStamp("on_new_event_end");
}

void alieve_init_import_macros()
{
    // Put macros in the list of browsables, add a macro browser to
    // top-level GUI.
    
    TString macdir("$(ALICE_ROOT)/EVE/alice-macros");
    gSystem->ExpandPathName(macdir);
    
    TFolder* f = gEve->GetMacroFolder();
    void* dirhandle = gSystem->OpenDirectory(macdir.Data());
    if (dirhandle != 0)
    {
        char* filename;
        TPMERegexp re("\\.C$");
        TObjArray names;
        while ((filename = gSystem->GetDirEntry(dirhandle)) != 0)
        {
            if (re.Match(filename))
                names.AddLast(new TObjString(filename));
        }
        names.Sort();
        
        for (Int_t ii=0; ii<names.GetEntries(); ++ii)
        {
            TObjString * si = (TObjString*) names.At(ii);
            f->Add(new TEveMacro(Form("%s/%s", macdir.Data(), (si->GetString()).Data())));
        }
    }
    gSystem->FreeDirectory(dirhandle);
    
    gROOT->GetListOfBrowsables()->Add(new TSystemDirectory(macdir.Data(), macdir.Data()));
    
    {
        TEveBrowser   *br = gEve->GetBrowser();
        TGFileBrowser *fb = 0;
        fb = br->GetFileBrowser();
        fb->GotoDir(macdir);
        {
            br->StartEmbedding(0);
            fb = br->MakeFileBrowser();
            fb->BrowseObj(f);
            fb->Show();
            br->StopEmbedding();
            br->SetTabTitle("Macros", 0);
            br->SetTab(0, 0);
        }
    }
}
 alieve_p2.C:1
 alieve_p2.C:2
 alieve_p2.C:3
 alieve_p2.C:4
 alieve_p2.C:5
 alieve_p2.C:6
 alieve_p2.C:7
 alieve_p2.C:8
 alieve_p2.C:9
 alieve_p2.C:10
 alieve_p2.C:11
 alieve_p2.C:12
 alieve_p2.C:13
 alieve_p2.C:14
 alieve_p2.C:15
 alieve_p2.C:16
 alieve_p2.C:17
 alieve_p2.C:18
 alieve_p2.C:19
 alieve_p2.C:20
 alieve_p2.C:21
 alieve_p2.C:22
 alieve_p2.C:23
 alieve_p2.C:24
 alieve_p2.C:25
 alieve_p2.C:26
 alieve_p2.C:27
 alieve_p2.C:28
 alieve_p2.C:29
 alieve_p2.C:30
 alieve_p2.C:31
 alieve_p2.C:32
 alieve_p2.C:33
 alieve_p2.C:34
 alieve_p2.C:35
 alieve_p2.C:36
 alieve_p2.C:37
 alieve_p2.C:38
 alieve_p2.C:39
 alieve_p2.C:40
 alieve_p2.C:41
 alieve_p2.C:42
 alieve_p2.C:43
 alieve_p2.C:44
 alieve_p2.C:45
 alieve_p2.C:46
 alieve_p2.C:47
 alieve_p2.C:48
 alieve_p2.C:49
 alieve_p2.C:50
 alieve_p2.C:51
 alieve_p2.C:52
 alieve_p2.C:53
 alieve_p2.C:54
 alieve_p2.C:55
 alieve_p2.C:56
 alieve_p2.C:57
 alieve_p2.C:58
 alieve_p2.C:59
 alieve_p2.C:60
 alieve_p2.C:61
 alieve_p2.C:62
 alieve_p2.C:63
 alieve_p2.C:64
 alieve_p2.C:65
 alieve_p2.C:66
 alieve_p2.C:67
 alieve_p2.C:68
 alieve_p2.C:69
 alieve_p2.C:70
 alieve_p2.C:71
 alieve_p2.C:72
 alieve_p2.C:73
 alieve_p2.C:74
 alieve_p2.C:75
 alieve_p2.C:76
 alieve_p2.C:77
 alieve_p2.C:78
 alieve_p2.C:79
 alieve_p2.C:80
 alieve_p2.C:81
 alieve_p2.C:82
 alieve_p2.C:83
 alieve_p2.C:84
 alieve_p2.C:85
 alieve_p2.C:86
 alieve_p2.C:87
 alieve_p2.C:88
 alieve_p2.C:89
 alieve_p2.C:90
 alieve_p2.C:91
 alieve_p2.C:92
 alieve_p2.C:93
 alieve_p2.C:94
 alieve_p2.C:95
 alieve_p2.C:96
 alieve_p2.C:97
 alieve_p2.C:98
 alieve_p2.C:99
 alieve_p2.C:100
 alieve_p2.C:101
 alieve_p2.C:102
 alieve_p2.C:103
 alieve_p2.C:104
 alieve_p2.C:105
 alieve_p2.C:106
 alieve_p2.C:107
 alieve_p2.C:108
 alieve_p2.C:109
 alieve_p2.C:110
 alieve_p2.C:111
 alieve_p2.C:112
 alieve_p2.C:113
 alieve_p2.C:114
 alieve_p2.C:115
 alieve_p2.C:116
 alieve_p2.C:117
 alieve_p2.C:118
 alieve_p2.C:119
 alieve_p2.C:120
 alieve_p2.C:121
 alieve_p2.C:122
 alieve_p2.C:123
 alieve_p2.C:124
 alieve_p2.C:125
 alieve_p2.C:126
 alieve_p2.C:127
 alieve_p2.C:128
 alieve_p2.C:129
 alieve_p2.C:130
 alieve_p2.C:131
 alieve_p2.C:132
 alieve_p2.C:133
 alieve_p2.C:134
 alieve_p2.C:135
 alieve_p2.C:136
 alieve_p2.C:137
 alieve_p2.C:138
 alieve_p2.C:139
 alieve_p2.C:140
 alieve_p2.C:141
 alieve_p2.C:142
 alieve_p2.C:143
 alieve_p2.C:144
 alieve_p2.C:145
 alieve_p2.C:146
 alieve_p2.C:147
 alieve_p2.C:148
 alieve_p2.C:149
 alieve_p2.C:150
 alieve_p2.C:151
 alieve_p2.C:152
 alieve_p2.C:153
 alieve_p2.C:154
 alieve_p2.C:155
 alieve_p2.C:156
 alieve_p2.C:157
 alieve_p2.C:158
 alieve_p2.C:159
 alieve_p2.C:160
 alieve_p2.C:161
 alieve_p2.C:162
 alieve_p2.C:163
 alieve_p2.C:164
 alieve_p2.C:165
 alieve_p2.C:166
 alieve_p2.C:167
 alieve_p2.C:168
 alieve_p2.C:169
 alieve_p2.C:170
 alieve_p2.C:171
 alieve_p2.C:172
 alieve_p2.C:173
 alieve_p2.C:174
 alieve_p2.C:175
 alieve_p2.C:176
 alieve_p2.C:177
 alieve_p2.C:178
 alieve_p2.C:179
 alieve_p2.C:180
 alieve_p2.C:181
 alieve_p2.C:182
 alieve_p2.C:183
 alieve_p2.C:184
 alieve_p2.C:185
 alieve_p2.C:186
 alieve_p2.C:187
 alieve_p2.C:188
 alieve_p2.C:189
 alieve_p2.C:190
 alieve_p2.C:191
 alieve_p2.C:192
 alieve_p2.C:193
 alieve_p2.C:194
 alieve_p2.C:195
 alieve_p2.C:196
 alieve_p2.C:197
 alieve_p2.C:198
 alieve_p2.C:199
 alieve_p2.C:200
 alieve_p2.C:201
 alieve_p2.C:202
 alieve_p2.C:203
 alieve_p2.C:204
 alieve_p2.C:205
 alieve_p2.C:206
 alieve_p2.C:207
 alieve_p2.C:208
 alieve_p2.C:209
 alieve_p2.C:210
 alieve_p2.C:211
 alieve_p2.C:212
 alieve_p2.C:213
 alieve_p2.C:214
 alieve_p2.C:215
 alieve_p2.C:216
 alieve_p2.C:217
 alieve_p2.C:218
 alieve_p2.C:219
 alieve_p2.C:220
 alieve_p2.C:221
 alieve_p2.C:222
 alieve_p2.C:223
 alieve_p2.C:224
 alieve_p2.C:225
 alieve_p2.C:226
 alieve_p2.C:227
 alieve_p2.C:228
 alieve_p2.C:229
 alieve_p2.C:230
 alieve_p2.C:231
 alieve_p2.C:232
 alieve_p2.C:233
 alieve_p2.C:234
 alieve_p2.C:235
 alieve_p2.C:236
 alieve_p2.C:237
 alieve_p2.C:238
 alieve_p2.C:239
 alieve_p2.C:240
 alieve_p2.C:241
 alieve_p2.C:242
 alieve_p2.C:243
 alieve_p2.C:244
 alieve_p2.C:245
 alieve_p2.C:246
 alieve_p2.C:247
 alieve_p2.C:248
 alieve_p2.C:249
 alieve_p2.C:250
 alieve_p2.C:251
 alieve_p2.C:252
 alieve_p2.C:253
 alieve_p2.C:254
 alieve_p2.C:255
 alieve_p2.C:256
 alieve_p2.C:257
 alieve_p2.C:258
 alieve_p2.C:259
 alieve_p2.C:260
 alieve_p2.C:261
 alieve_p2.C:262
 alieve_p2.C:263
 alieve_p2.C:264
 alieve_p2.C:265
 alieve_p2.C:266
 alieve_p2.C:267
 alieve_p2.C:268
 alieve_p2.C:269
 alieve_p2.C:270
 alieve_p2.C:271
 alieve_p2.C:272
 alieve_p2.C:273
 alieve_p2.C:274
 alieve_p2.C:275
 alieve_p2.C:276
 alieve_p2.C:277
 alieve_p2.C:278