2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
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 **************************************************************************/
10 // Functions to read data from HOMER.
12 // Setup: edit location of HLT configuration in first line of
13 // homer_display(). This is a temporary solution.
15 // Run as: alieve command_queue.C+ hlt_structs.C+ homer_display.C
17 // nextEvent() will get next event from HOMER.
21 #include "TGLViewer.h"
24 #include "TVirtualPad.h"
25 //#include "AliEveHOMERManager.h"
27 class AliRawReaderMemory;
29 class AliEveHOMERManager;
30 class AliHLTHOMERBlockDesc;
37 class AliEveTPCLoader;
39 class AliEveTPCSector2D;
40 class AliEveTPCSector3D;
44 AliEveTPCLoader* loader = 0;
45 AliEveTPCData* tpcdata = 0;
46 TEvePointSet* tpc_cls = 0;
47 TEveTrackList* tpc_trk = 0;
49 AliRawReaderMemory* memreader = 0;
50 AliEveHOMERManager* homerM = 0;
57 TThread* ldthread = 0;
61 TGLViewer::ECameraType camera = TGLViewer::kCameraPerspXOZ;
64 //****************************************************************************
67 //****************************************************************************
68 void process_tpc_clusters(AliHLTHOMERBlockDesc* b);
70 //****************************************************************************
73 homerM = new AliEveHOMERManager("/local/home/hlt/TPC-SCC1-Generate.xml");
74 // homerM = new AliEveHOMERManager("/local/home/hlt/sampleConfig2.xml");
76 gEve->AddToListTree(homerM, kTRUE);
78 homerM->CreateHOMERSourcesList();
79 // homerM->SelectRawTPC();
80 homerM->SelectClusterTPC();
81 homerM->SelectESDTPC();
82 homerM->ConnectHOMER();
84 memreader = new AliRawReaderMemory(0, 0);
85 gStyle->SetPalette(1, 0);
87 loader = new AliEveTPCLoader;
88 loader->SetDoubleSR(kTRUE);
89 loader->SetInitParams(40, 900, 10, 100); // Sector params (mint, maxt, thr, maxval)
90 //loader->SetInitParams(40, 1023, 10); // Sector params (mint, maxt, thr)
91 tpcdata = loader->GetData();
92 tpcdata->SetLoadPedestal(0);
93 tpcdata->SetLoadThreshold(0);
94 // tpcdata->SetAutoPedestal(kTRUE); // For non-zero suppressed data.
95 tpcdata->SetAutoPedestal(kFALSE);
96 gEve->AddElement(loader);
98 tpc_cls = new TEvePointSet("TPC Clusters");
99 tpc_cls->SetMainColor((Color_t)kRed);
100 gEve->AddElement(tpc_cls);
102 tpc_trk = new TEveTrackList("TPC Tracks");
103 gEve->AddElement(tpc_trk);
104 tpc_trk->SetMainColor(Color_t(6));
105 TEveTrackPropagator* rnrStyle = tpc_trk->GetPropagator();
106 rnrStyle->SetMagField( 5 );
112 //****************************************************************************
115 tpcdata->DropAllSectors();
117 tpc_trk->DestroyElements();
120 TIter next(homerM->GetBlockList());
121 AliHLTHOMERBlockDesc* b = 0;
122 while ((b = (AliHLTHOMERBlockDesc*)next())) {
124 // printf("Q - %s\n", b->GetDataType().Data());
126 if (b->GetDataType().CompareTo("CLUSTERS") == 0) {
127 process_tpc_clusters(b);
128 tpc_cls->ElementChanged();
131 else if (b->GetDataType().CompareTo("DDL_RAW") == 0) {
132 Int_t slice = b->GetSubDetector().Atoi();
133 Int_t patch = b->GetSubSubDetector().Atoi();
134 Int_t eqid = 768 + patch;
136 eqid += 4*slice + 70;
140 //printf("%d %d %d -- %p %d\n", slice, patch, eqid, b->GetData(), b->GetSize());
142 memreader->SetMemory(b->GetData(), b->GetSize());
143 memreader->SetEquipmentID(eqid);
146 AliTPCRawStream input(memreader);
147 input.SetOldRCUFormat(kTRUE);
148 //input.SetOldRCUFormat(kFALSE);
149 memreader->Select("TPC"); // ("TPC", firstRCU, lastRCU);
150 tpcdata->LoadRaw(input, kTRUE, kTRUE);
154 loader->UpdateSectors(kTRUE); // true -> delete non present
155 tpc_cls->ResetBBox();
156 tpc_trk->MakeTracks();
158 gEve->Redraw3D(1, 1);
161 //****************************************************************************
162 void process_tpc_clusters(AliHLTHOMERBlockDesc* b)
164 AliHLTTPCClusterData *cd = (AliHLTTPCClusterData*) b->GetData();
165 UChar_t *data = (UChar_t*) cd->fSpacePoints;
167 // printf("XXX %p %d; sizeof=%d, calcsize=%d\n", b->GetData(), cd->fSpacePointCnt,
168 // sizeof(AliHLTTPCSpacePointData), (b->GetSize() - 4)/cd->fSpacePointCnt);
170 Int_t slice = b->GetSubDetector().Atoi();
171 Float_t phi = (slice+0.5)*TMath::Pi()/9.0;
172 Float_t cos = TMath::Cos(phi);
173 Float_t sin = TMath::Sin(phi);
175 for (Int_t i = 0; i < cd->fSpacePointCnt; ++i, data += sizeof(AliHLTTPCSpacePointData)) {
176 AliHLTTPCSpacePointData *sp = (AliHLTTPCSpacePointData *) data;
178 //printf(" %4d %6.2f, %6.2f, %6.2f\n", i, sp->fX, sp->fY, sp->fZ);
179 tpc_cls->SetNextPoint(cos*sp->fX - sin*sp->fY,
180 sin*sp->fX + cos*sp->fY,
185 //****************************************************************************
186 TEveTrack* esd_make_track(TEveTrackPropagator* rnrStyle,
189 AliExternalTrackParam* tp=0)
192 Double_t pbuf[3], vbuf[3];
197 rt.label = at->GetLabel();
199 rt.status = (Int_t) at->GetStatus();
200 rt.sign = tp->GetSign();
205 Double_t ep = at->GetP(), mc = at->GetMass();
206 rt.beta = ep/TMath::Sqrt(ep*ep + mc*mc);
208 TEveTrack* track = new TEveTrack(&rt, rnrStyle);
209 //PH The line below is replaced waiting for a fix in Root
210 //PH which permits to use variable siza arguments in CINT
211 //PH on some platforms (alphalinuxgcc, solariscc5, etc.)
212 //PH track->SetName(Form("ESDTrack %d", rt.label));
213 //PH track->SetTitle(Form("pT=%.3f, pZ=%.3f; V=(%.3f, %.3f, %.3f)",
214 //PH rt.sign*TMath::Hypot(rt.P.x, rt.P.y), rt.P.z,
215 //PH rt.V.x, rt.V.y, rt.V.z));
217 sprintf(form,"TEveTrack %d", rt.index);
218 track->SetName(form);
219 track->SetStdTitle();
223 //****************************************************************************
224 void process_tpc_tracks(AliHLTHOMERBlockDesc* b)
226 AliESDEvent* esd = (AliESDEvent*) b->GetTObject();
228 TEveTrackPropagator* rnrStyle = tpc_trk->GetPropagator();
230 for (Int_t n=0; n<esd->GetNumberOfTracks(); n++)
232 AliESDtrack *at = esd->GetTrack(n);
233 AliExternalTrackParam *tp = at;
235 TEveTrack* track = esd_make_track(rnrStyle, n, at, tp);
236 track->SetAttLineAttMarker(tpc_trk);
237 gEve->AddElement(track, tpc_trk);
242 //****************************************************************************
243 void process_tpc_xxxx(AliESDEvent* esd)
245 TEveTrackPropagator* rnrStyle = tpc_trk->GetPropagator();
247 for (Int_t n=0; n<esd->GetNumberOfTracks(); n++)
249 AliESDtrack *at = esd->GetTrack(n);
250 AliExternalTrackParam *tp = at;
252 TEveTrack* track = esd_make_track(rnrStyle, n, at, tp);
253 track->SetAttLineAttMarker(tpc_trk);
254 gEve->AddElement(track, tpc_trk);
259 //****************************************************************************
263 f=TFile::Open("AliESDs.root")
264 AliESDEvent * esd = new AliESDEvent
265 esd->ReadFromTree(esdTree)
267 esd->GetNumberOfTracks()
270 root [3] AliESDEvent * esd = new AliESDEvent
271 root [4] esd->ReadFromTree(esdTree)
272 W-TStreamerInfo::BuildOld: Cannot convert AliESDCaloCluster::fTracksMatched from type:TArrayS* to type:TArrayI, skip element
273 W-TStreamerInfo::BuildOld: Cannot convert AliESDCaloCluster::fLabels from type:TArrayS* to type:TArrayI, skip element
274 STEER/AliESDEvent.cxx 1040 AliESDEvent::ReadFromTree() TList contains less than the standard contents 21 < 22
275 root [5] esdTree->GetEntry(0)
277 root [6] esd->GetNumberOfTracks()
279 root [7] process_tpc_xxxx(esd)
280 root [8] gEve->Redraw3D(
281 void Redraw3D(Bool_t resetCameras = kFALSE, Bool_t dropLogicals = kFALSE)
282 root [8] gEve->Redraw3D(1,1)
283 root [9] trk_cnt->Elem
284 variable "trk_cnt" not defined.
286 variable "trk_cnt->Elem" not defined.
287 root [9] trk_cnt->Eleme
288 variable "trk_cnt" not defined.
290 variable "trk_cnt->Eleme" not defined.
291 root [9] tpc_trk->ElementChanged(
292 void ElementChanged(Bool_t update_scenes = kTRUE, Bool_t redraw = kFALSE)
293 root [9] tpc_trk->ElementChanged(1,1)
294 root [10] tpc_trk->SelectByP
299 root [10] tpc_trk->SelectByPt(
300 void SelectByPt(Float_t min_pt, Float_t max_pt)
301 void SelectByPt(Float_t min_pt, Float_t max_pt, TEveElement* el)
302 root [10] tpc_trk->SelectByPt(0,1000000000000)
303 root [11] tpc_trk->MakeTracks(
304 void MakeTracks(Bool_t recurse = kTRUE)
305 root [11] tpc_trk->MakeTracks()
315 //****************************************************************************
318 event_timer.SetCommand("nextEvent()");
319 event_timer.Start(60);
322 //****************************************************************************