Added support to display the HLT ESD Tree. See the comment in visscan_local.C for How
[u/mrichter/AliRoot.git] / EVE / alice-macros / acorde_raw.C
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4 /**************************************************************************
5  * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6  * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9 #if !defined(__CINT__) || defined(__MAKECINT__)
10 #include <TTree.h>
11 #include <TString.h>
12 #include <TGeoManager.h>
13 #include <TGeoPhysicalNode.h>
14 #include <TGeoMatrix.h>
15 #include <TEveManager.h>
16 #include <TEveElement.h>
17 #include <TEveTrans.h>
18 #include <TEveGeoShape.h>
19
20 #include <AliEveEventManager.h>
21 #include <AliRawReader.h>
22 #include <AliACORDERawStream.h>
23 #endif
24
25 TString acorde_module_path(Int_t module);
26
27 Color_t g_acorde_raw_color_on  = kRed;
28 Color_t g_acorde_raw_color_off = kBlue;
29
30 UChar_t g_acorde_raw_transp_on  = 30;
31 UChar_t g_acorde_raw_transp_off = 60;
32
33 void acorde_raw()
34 {
35
36   // From Mario RC
37
38   AliEveEventManager::AssertGeometry();
39
40   AliRawReader       * reader = AliEveEventManager::AssertRawReader();
41   AliACORDERawStream * stream = new AliACORDERawStream(reader);
42
43   stream->Reset();
44   stream->Next();
45
46   UInt_t dy[4];
47   dy[0] = stream->GetWord(0);
48   dy[1] = stream->GetWord(1);
49   dy[2] = stream->GetWord(2);
50   dy[3] = stream->GetWord(3);
51
52   printf ("ACORDE event 0x%08x 0x%08x 0x%08x 0x%08x\n", dy[0], dy[1], dy[2], dy[3]);
53
54   if (acorde_module_path(0).IsNull())
55   {
56     Warning("acorde_raw", "Missing / wrong ACORDE module geometry.");
57     return;
58   }
59
60   TEveElementList* acorde = new TEveElementList("ACORDE_Raw");
61
62   gEve->AddElement(acorde);
63
64   for (Int_t module=0; module < 60; module++)
65   {
66     TString path = acorde_module_path(module);
67
68     if ( ! gGeoManager->cd(path))
69     {
70       Warning("acorde_raw", "Module id=%d, path='%s' not found.", module, path.Data());
71       continue;
72     }
73
74     // From Matevz:
75     // Here check state and assign color, I do it partially for now.
76     Int_t  word_idx = module / 30;
77     Int_t  bit_idx  = module % 30;
78     Bool_t val      = (dy[word_idx] & (1 << bit_idx)) != 0; 
79
80     TEveGeoShape* eg_shape = new TEveGeoShape(TString::Format("Module %d", module),
81                                               TString::Format("Module %d, %s", module, val ? "Fired" : "Not fired"));
82     eg_shape->SetMainColor       (val ? g_acorde_raw_color_on  : g_acorde_raw_color_off);
83     eg_shape->SetMainTransparency(val ? g_acorde_raw_transp_on : g_acorde_raw_transp_off);
84     eg_shape->SetPickable(kTRUE);
85     eg_shape->RefMainTrans().SetFrom(*gGeoManager->GetCurrentMatrix());
86     eg_shape->SetShape((TGeoShape*) gGeoManager->GetCurrentVolume()->GetShape()->Clone());
87
88     acorde->AddElement(eg_shape);
89   }
90
91   delete stream;
92   gEve->Redraw3D();
93 }
94
95 //==============================================================================
96 //==============================================================================
97
98 TString acorde_module_path(Int_t module)
99 {
100   if (module < 0 || module > 59)
101   {
102     Error("acorde_module_path", "module %d out of range.", module);
103     return "";
104   }
105
106   TGeoPNEntry* pne = gGeoManager->GetAlignableEntry(Form("ACORDE/Array%d", module));
107   if (!pne) return "";
108
109   return Form("%s/ACORDESCINTILLATORMODULE_6", pne->GetTitle());
110
111 }