]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/acorde_raw.C
addressing coverity warnings: now checking return value of fscanf
[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
10 TString acorde_module_path(Int_t module);
11
12 Color_t g_acorde_raw_color_on  = kRed;
13 Color_t g_acorde_raw_color_off = kBlue;
14
15 UChar_t g_acorde_raw_transp_on  = 30;
16 UChar_t g_acorde_raw_transp_off = 60;
17
18 void acorde_raw()
19 {
20
21   // From Mario RC
22
23   AliEveEventManager::AssertGeometry();
24
25   AliRawReader       * reader = AliEveEventManager::AssertRawReader();
26   AliACORDERawStream * stream = new AliACORDERawStream(reader);
27
28   stream->Reset();
29   stream->Next();
30
31   UInt_t dy[4];
32   dy[0] = stream->GetWord(0);
33   dy[1] = stream->GetWord(1);
34   dy[2] = stream->GetWord(2);
35   dy[3] = stream->GetWord(3);
36
37   printf ("ACORDE event 0x%08x 0x%08x 0x%08x 0x%08x\n", dy[0], dy[1], dy[2], dy[3]);
38
39   if (acorde_module_path(0).IsNull())
40   {
41     Warning("acorde_raw", "Missing / wrong ACORDE module geometry.");
42     return;
43   }
44
45   TEveElementList* acorde = new TEveElementList("ACORDE_Raw");
46
47   gEve->AddElement(acorde);
48
49   for (Int_t module=0; module < 60; module++)
50   {
51     TString path = acorde_module_path(module);
52
53     if ( ! gGeoManager->cd(path))
54     {
55       Warning("acorde_raw", "Module id=%d, path='%s' not found.", module, path.Data());
56       continue;
57     }
58
59     // From Matevz:
60     // Here check state and assign color, I do it partially for now.
61     Int_t  word_idx = module / 30;
62     Int_t  bit_idx  = module % 30;
63     Bool_t val      = (dy[word_idx] & (1 << bit_idx)) != 0; 
64
65     TEveGeoShape* eg_shape = new TEveGeoShape(TString::Format("Module %d", module),
66                                               TString::Format("Module %d, %s", module, val ? "Fired" : "Not fired"));
67     eg_shape->SetMainColor       (val ? g_acorde_raw_color_on  : g_acorde_raw_color_off);
68     eg_shape->SetMainTransparency(val ? g_acorde_raw_transp_on : g_acorde_raw_transp_off);
69     eg_shape->SetPickable(kTRUE);
70     eg_shape->RefMainTrans().SetFrom(*gGeoManager->GetCurrentMatrix());
71     eg_shape->SetShape((TGeoShape*) gGeoManager->GetCurrentVolume()->GetShape()->Clone());
72
73     acorde->AddElement(eg_shape);
74   }
75
76   delete stream;
77   gEve->Redraw3D();
78 }
79
80 //==============================================================================
81 //==============================================================================
82
83 TString acorde_module_path(Int_t module)
84 {
85   if (module < 0 || module > 59)
86   {
87     Error("acorde_module_path", "module %d out of range.", module);
88     return "";
89   }
90
91   TGeoPNEntry* pne = gGeoManager->GetAlignableEntry(Form("ACORDE/Array%d", module));
92   if (!pne) return "";
93
94   return Form("%s/ACORDESCINTILLATORMODULE_6", pne->GetTitle());
95
96 }