8 Alieve::MUONData* g_muon_data = 0;
9 Alieve::Event* g_muon_last_event = 0;
11 Int_t g_currentEvent = -1;
12 Bool_t g_fromRaw = kFALSE;
14 void MUON_digits(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE)
19 if (Alieve::gEvent == 0) {
20 printf("No alieve event: use alieve_init(...) \n");
24 if (g_currentEvent == Alieve::gEvent->GetEventId()) {
25 if (g_fromRaw == fromRaw) {
26 printf("Same event... \n");
30 printf("Same event with digits.\n");
31 Alieve::gEvent->GotoEvent(g_currentEvent);
33 printf("Same event with raw.\n");
34 Alieve::gEvent->GotoEvent(g_currentEvent);
41 AliRunLoader* rl = Alieve::Event::AssertRunLoader();
42 TString fileName = rl->GetFileName();
43 Int_t length = fileName.Length();
44 fileName.Resize(length-11);
45 fileName.Append("raw.root");
47 g_muon_data = new Alieve::MUONData;
50 rl->LoadDigits("MUON");
51 dt = rl->GetTreeD("MUON", false);
53 cout << "No digits produced!" << endl;
55 cout << "Display aliroot digits!" << endl;
56 g_muon_data->LoadDigits(dt);
59 if (gSystem->AccessPathName(fileName.Data(),kFileExists)) {
60 cout << "No raw data produced!" << endl;
62 cout << "Display raw digits!" << endl;
63 g_muon_data->LoadRaw(fileName.Data());
67 g_muon_last_event = Alieve::gEvent;
69 g_currentEvent = g_muon_last_event->GetEventId();
71 gStyle->SetPalette(1, 0);
73 gReve->DisableRedraw();
75 Reve::RenderElementList* l = new Reve::RenderElementList("MUONChambers");
76 l->SetTitle("MUON chambers");
77 l->SetMainColor(Color_t(2));
78 gReve->AddRenderElement(l);
80 for (Int_t ic = 0; ic < 14; ic++) {
82 Alieve::MUONChamber* mucha = new Alieve::MUONChamber();
84 mucha->SetFrameColor(2);
85 mucha->SetChamberID(ic);
86 mucha->SetDataSource(g_muon_data);
88 gReve->AddRenderElement(l,mucha);
92 if (showTracks) MUON_tracks();
94 gReve->EnableRedraw();
96 TGLViewer* view = dynamic_cast<TGLViewer*>(gReve->GetGLCanvas()->GetViewer3D());
97 view->ResetCamerasAfterNextUpdate();
98 gReve->GetGLCanvas()->Modified();
99 gReve->GetGLCanvas()->Update();
103 //_____________________________________________________________________________
106 AliRunLoader* rl = Alieve::Event::AssertRunLoader();
107 rl->LoadTracks("MUON");
108 TTree* tt = rl->GetTreeT("MUON", false);
110 TClonesArray *tracks = 0;
111 tt->SetBranchAddress("MUONTrack",&tracks);
114 Int_t ntracks = tracks->GetEntriesFast();
115 //printf("Found %d tracks. \n",ntracks);
117 Reve::TrackList* lt = new Reve::TrackList("M-Tracks");
118 lt->SetMainColor(Color_t(6));
120 gReve->AddRenderElement(lt);
122 TMatrixD smatrix(2,2);
130 Float_t zg[4] = { -1603.5, -1620.5, -1703.5, -1720.5 };
135 for (Int_t n = 0; n < ntracks; n++) {
139 mt = (AliMUONTrack*) tracks->At(n);
141 //printf("Match trigger %d \n",mt->GetMatchTrigger());
145 Reve::Track* track = new Reve::Track(&rt, lt->GetRnrStyle());
147 //PH The line below is replaced waiting for a fix in Root
148 //PH which permits to use variable siza arguments in CINT
149 //PH on some platforms (alphalinuxgcc, solariscc5, etc.)
151 if (mt->GetMatchTrigger()) {
152 //PH track->SetName(Form("MUONTrack %2d (MT)", rt.label));
153 sprintf(form,"MUONTrack %2d (MT)", rt.label);
154 track->SetName(form);
155 track->SetLineColor(7);
157 //PH track->SetName(Form("MUONTrack %2d ", rt.label));
158 sprintf(form,"MUONTrack %2d ", rt.label);
159 track->SetName(form);
160 track->SetLineColor(6);
163 AliMUONTrackParam *trackParam = mt->GetTrackParamAtVertex();
164 xRec0 = trackParam->GetNonBendingCoor();
165 yRec0 = trackParam->GetBendingCoor();
166 zRec0 = trackParam->GetZ();
168 track->SetPoint(count,xRec0,yRec0,zRec0);
171 Float_t xr[20], yr[20], zr[20];
172 for (Int_t i = 0; i < 10; i++) xr[i]=yr[i]=zr[i]=0.0;
174 Int_t nTrackHits = mt->GetNTrackHits();
175 //printf("Nhits = %d \n",nTrackHits);
176 TClonesArray* trackParamAtHit;
177 for (Int_t iHit = 0; iHit < nTrackHits; iHit++){
178 trackParamAtHit = mt->GetTrackParamAtHit();
179 trackParam = (AliMUONTrackParam*) trackParamAtHit->At(iHit);
180 xRec = trackParam->GetNonBendingCoor();
181 yRec = trackParam->GetBendingCoor();
182 zRec = trackParam->GetZ();
184 //printf("Hit %d x %f y %f z %f \n",iHit,xRec,yRec,zRec);
190 track->SetPoint(count,xRec,yRec,zRec);
195 Float_t xrc[20], yrc[20], zrc[20];
197 if (mt->GetMatchTrigger() && 1) {
199 for (Int_t i = 0; i < nTrackHits; i++) {
200 if (TMath::Abs(zr[i]) > 1000.0) {
201 //printf("Hit %d x %f y %f z %f \n",iHit,xr[i],yr[i],zr[i]);
210 Float_t ax, bx, ay, by;
212 if (nrc < 2) continue;
217 for (Int_t i = 0; i < nrc; i++) {
218 xv = (Double_t)zrc[i];
219 yv = (Double_t)xrc[i];
220 //printf("x-z: xv %f yv %f \n",xv,yv);
222 smatrix(1,1) += xv*xv;
228 res = smatrix.Invert() * sums;
235 for (Int_t i = 0; i < nrc; i++) {
236 xv = (Double_t)zrc[i];
237 yv = (Double_t)yrc[i];
238 //printf("y-z: xv %f yv %f \n",xv,yv);
240 smatrix(1,1) += xv*xv;
246 res = smatrix.Invert() * sums;
250 Float_t xtc, ytc, ztc;
251 for (Int_t ii = 0; ii < 4; ii++) {
257 //printf("tc: x %f y %f z %f \n",xtc,ytc,ztc);
259 track->SetPoint(count,xtc,ytc,ztc);
264 } // end match trigger
266 gReve->AddRenderElement(lt, track);