3 // Functions to read data from HOMER.
5 // Setup: edit location of HLT configuration in first line of
6 // homer_display(). This is a temporary solution.
8 // Run as: alieve command_queue.C+ hlt_structs.C+ homer_display.C
10 // nextEvent() will get next event from HOMER.
14 #include "TGLViewer.h"
17 #include "TVirtualPad.h"
18 //#include "AliEVEHOMERManager.h"
20 class AliRawReaderMemory;
22 class AliEVEHOMERManager;
23 class AliHLTHOMERBlockDesc;
39 using namespace Alieve;
41 TPCLoader* loader = 0;
43 PointSet* tpc_cls = 0;
44 TrackList* tpc_trk = 0;
46 AliRawReaderMemory* memreader = 0;
47 AliEVEHOMERManager* homerM = 0;
54 TThread* ldthread = 0;
58 TGLViewer::ECameraType camera = TGLViewer::kCameraPerspXOZ;
61 //****************************************************************************
64 //****************************************************************************
65 void process_tpc_clusters(AliHLTHOMERBlockDesc* b);
67 //****************************************************************************
70 homerM = new AliEVEHOMERManager("/local/home/hlt/TPC-SCC1-Generate.xml");
71 // homerM = new AliEVEHOMERManager("/local/home/hlt/sampleConfig2.xml");
73 gReve->AddToListTree(homerM, kTRUE);
75 homerM->CreateHOMERSourcesList();
76 // homerM->SelectRawTPC();
77 homerM->SelectClusterTPC();
78 homerM->SelectESDTPC();
79 homerM->ConnectHOMER();
81 memreader = new AliRawReaderMemory(0, 0);
82 gStyle->SetPalette(1, 0);
84 loader = new TPCLoader;
85 loader->SetDoubleSR(kTRUE);
86 loader->SetInitParams(40, 900, 10, 100); // Sector params (mint, maxt, thr, maxval)
87 //loader->SetInitParams(40, 1023, 10); // Sector params (mint, maxt, thr)
88 tpcdata = loader->GetData();
89 tpcdata->SetLoadPedestal(0);
90 tpcdata->SetLoadThreshold(0);
91 // tpcdata->SetAutoPedestal(kTRUE); // For non-zero suppressed data.
92 tpcdata->SetAutoPedestal(kFALSE);
93 gReve->AddRenderElement(loader);
95 tpc_cls = new Reve::PointSet("TPC Clusters");
96 tpc_cls->SetMainColor((Color_t)kRed);
97 gReve->AddRenderElement(tpc_cls);
99 tpc_trk = new TrackList("TPC Tracks");
100 gReve->AddRenderElement(tpc_trk);
101 tpc_trk->SetMainColor(Color_t(6));
102 Reve::TrackRnrStyle* rnrStyle = tpc_trk->GetRnrStyle();
103 rnrStyle->SetMagField( 5 );
109 //****************************************************************************
112 tpcdata->DropAllSectors();
114 tpc_trk->DestroyElements();
117 TIter next(homerM->GetBlockList());
118 AliHLTHOMERBlockDesc* b = 0;
119 while ((b = (AliHLTHOMERBlockDesc*)next())) {
121 // printf("Q - %s\n", b->GetDataType().Data());
123 if (b->GetDataType().CompareTo("CLUSTERS") == 0) {
124 process_tpc_clusters(b);
125 tpc_cls->ElementChanged();
128 else if (b->GetDataType().CompareTo("DDL_RAW") == 0) {
129 Int_t slice = b->GetSubDetector().Atoi();
130 Int_t patch = b->GetSubSubDetector().Atoi();
131 Int_t eqid = 768 + patch;
133 eqid += 4*slice + 70;
137 //printf("%d %d %d -- %p %d\n", slice, patch, eqid, b->GetData(), b->GetSize());
139 memreader->SetMemory(b->GetData(), b->GetSize());
140 memreader->SetEquipmentID(eqid);
143 AliTPCRawStream input(memreader);
144 input.SetOldRCUFormat(kTRUE);
145 //input.SetOldRCUFormat(kFALSE);
146 memreader->Select("TPC"); // ("TPC", firstRCU, lastRCU);
147 tpcdata->LoadRaw(input, kTRUE, kTRUE);
151 loader->UpdateSectors(kTRUE); // true -> delete non present
152 tpc_cls->ResetBBox();
153 tpc_trk->MakeTracks();
155 gReve->Redraw3D(1, 1);
158 //****************************************************************************
159 void process_tpc_clusters(AliHLTHOMERBlockDesc* b)
161 AliHLTTPCClusterData *cd = (AliHLTTPCClusterData*) b->GetData();
162 UChar_t *data = (UChar_t*) cd->fSpacePoints;
164 // printf("XXX %p %d; sizeof=%d, calcsize=%d\n", b->GetData(), cd->fSpacePointCnt,
165 // sizeof(AliHLTTPCSpacePointData), (b->GetSize() - 4)/cd->fSpacePointCnt);
167 Int_t slice = b->GetSubDetector().Atoi();
168 Float_t phi = (slice+0.5)*TMath::Pi()/9.0;
169 Float_t cos = TMath::Cos(phi);
170 Float_t sin = TMath::Sin(phi);
172 for (Int_t i = 0; i < cd->fSpacePointCnt; ++i, data += sizeof(AliHLTTPCSpacePointData)) {
173 AliHLTTPCSpacePointData *sp = (AliHLTTPCSpacePointData *) data;
175 //printf(" %4d %6.2f, %6.2f, %6.2f\n", i, sp->fX, sp->fY, sp->fZ);
176 tpc_cls->SetNextPoint(cos*sp->fX - sin*sp->fY,
177 sin*sp->fX + cos*sp->fY,
182 //****************************************************************************
183 Reve::Track* esd_make_track(Reve::TrackRnrStyle* rnrStyle,
186 AliExternalTrackParam* tp=0)
189 Double_t pbuf[3], vbuf[3];
194 rt.label = at->GetLabel();
196 rt.status = (Int_t) at->GetStatus();
197 rt.sign = tp->GetSign();
202 Double_t ep = at->GetP(), mc = at->GetMass();
203 rt.beta = ep/TMath::Sqrt(ep*ep + mc*mc);
205 Reve::Track* track = new Reve::Track(&rt, rnrStyle);
206 //PH The line below is replaced waiting for a fix in Root
207 //PH which permits to use variable siza arguments in CINT
208 //PH on some platforms (alphalinuxgcc, solariscc5, etc.)
209 //PH track->SetName(Form("ESDTrack %d", rt.label));
210 //PH track->SetTitle(Form("pT=%.3f, pZ=%.3f; V=(%.3f, %.3f, %.3f)",
211 //PH rt.sign*TMath::Hypot(rt.P.x, rt.P.y), rt.P.z,
212 //PH rt.V.x, rt.V.y, rt.V.z));
214 sprintf(form,"Track %d", rt.index);
215 track->SetName(form);
216 track->SetStdTitle();
220 //****************************************************************************
221 void process_tpc_tracks(AliHLTHOMERBlockDesc* b)
223 AliESDEvent* esd = (AliESDEvent*) b->GetTObject();
225 Reve::TrackRnrStyle* rnrStyle = tpc_trk->GetRnrStyle();
227 for (Int_t n=0; n<esd->GetNumberOfTracks(); n++)
229 AliESDtrack *at = esd->GetTrack(n);
230 AliExternalTrackParam *tp = at;
232 Reve::Track* track = esd_make_track(rnrStyle, n, at, tp);
233 track->SetAttLineAttMarker(tpc_trk);
234 gReve->AddRenderElement(track, tpc_trk);
239 //****************************************************************************
240 void process_tpc_xxxx(AliESDEvent* esd)
242 Reve::TrackRnrStyle* rnrStyle = tpc_trk->GetRnrStyle();
244 for (Int_t n=0; n<esd->GetNumberOfTracks(); n++)
246 AliESDtrack *at = esd->GetTrack(n);
247 AliExternalTrackParam *tp = at;
249 Reve::Track* track = esd_make_track(rnrStyle, n, at, tp);
250 track->SetAttLineAttMarker(tpc_trk);
251 gReve->AddRenderElement(track, tpc_trk);
256 //****************************************************************************
260 f=TFile::Open("AliESDs.root")
261 AliESDEvent * esd = new AliESDEvent
262 esd->ReadFromTree(esdTree)
264 esd->GetNumberOfTracks()
267 root [3] AliESDEvent * esd = new AliESDEvent
268 root [4] esd->ReadFromTree(esdTree)
269 W-TStreamerInfo::BuildOld: Cannot convert AliESDCaloCluster::fTracksMatched from type:TArrayS* to type:TArrayI, skip element
270 W-TStreamerInfo::BuildOld: Cannot convert AliESDCaloCluster::fLabels from type:TArrayS* to type:TArrayI, skip element
271 STEER/AliESDEvent.cxx 1040 AliESDEvent::ReadFromTree() TList contains less than the standard contents 21 < 22
272 root [5] esdTree->GetEntry(0)
274 root [6] esd->GetNumberOfTracks()
276 root [7] process_tpc_xxxx(esd)
277 root [8] gReve->Redraw3D(
278 void Redraw3D(Bool_t resetCameras = kFALSE, Bool_t dropLogicals = kFALSE)
279 root [8] gReve->Redraw3D(1,1)
280 root [9] trk_cnt->Elem
281 variable "trk_cnt" not defined.
283 variable "trk_cnt->Elem" not defined.
284 root [9] trk_cnt->Eleme
285 variable "trk_cnt" not defined.
287 variable "trk_cnt->Eleme" not defined.
288 root [9] tpc_trk->ElementChanged(
289 void ElementChanged(Bool_t update_scenes = kTRUE, Bool_t redraw = kFALSE)
290 root [9] tpc_trk->ElementChanged(1,1)
291 root [10] tpc_trk->SelectByP
296 root [10] tpc_trk->SelectByPt(
297 void SelectByPt(Float_t min_pt, Float_t max_pt)
298 void SelectByPt(Float_t min_pt, Float_t max_pt, Reve::RenderElement* el)
299 root [10] tpc_trk->SelectByPt(0,1000000000000)
300 root [11] tpc_trk->MakeTracks(
301 void MakeTracks(Bool_t recurse = kTRUE)
302 root [11] tpc_trk->MakeTracks()
312 //****************************************************************************
315 event_timer.SetCommand("nextEvent()");
316 event_timer.Start(60);
319 //****************************************************************************