]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/MUONCheck.C
New versions of GDC and CDH raw data headers. Some CDH getters are added
[u/mrichter/AliRoot.git] / MUON / MUONCheck.C
CommitLineData
c121e924 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id$ */
17
88cb7938 18//
19// Macro for checking aliroot output and associated files contents
20// Gines Martinez, Subatech June 2003
21//
e516b01d 22#if !defined(__CINT__) || defined(__MAKECINT__)
88cb7938 23// ROOT includes
24#include "TBranch.h"
25#include "TClonesArray.h"
26#include "TFile.h"
27#include "TH1.h"
bf485fb9 28#include "TMath.h"
88cb7938 29#include "TParticle.h"
30#include "TTree.h"
da47578c 31#include "TNtuple.h"
88cb7938 32
33// STEER includes
34#include "AliRun.h"
35#include "AliRunLoader.h"
36#include "AliHeader.h"
37#include "AliLoader.h"
38#include "AliStack.h"
39
40// MUON includes
41#include "AliMUON.h"
ce3f5e87 42#include "AliMUONData.h"
88cb7938 43#include "AliMUONHit.h"
44#include "AliMUONConstants.h"
45#include "AliMUONDigit.h"
46#include "AliMUONRawCluster.h"
47#include "AliMUONGlobalTrigger.h"
48#include "AliMUONLocalTrigger.h"
8547965d 49#include "AliMUONTrack.h"
bf485fb9 50#include "AliMUONTrackParam.h"
84da0ea0 51#include "AliMUONTriggerConstants.h"
52#include "AliMUONTriggerCircuit.h"
53#include "AliMUONTriggerCircuitNew.h"
bf485fb9 54
55#include "AliMpVSegmentation.h"
56#include "AliMpIntPair.h"
6babe058 57#include "AliMpDEManager.h"
58#include "AliMpSegFactory.h"
e516b01d 59#endif
2b32c661 60
bf485fb9 61void MUONkine(Int_t event2Check=0, char * filename="galice.root")
88cb7938 62{
3b0cf968 63 // Stack of particle for each event
64 AliStack* stack;
88cb7938 65 // Creating Run Loader and openning file containing Hits
66 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
67 if (RunLoader ==0x0) {
68 printf(">>> Error : Error Opening %s file \n",filename);
69 return;
70 }
3b0cf968 71
88cb7938 72 RunLoader->LoadKinematics("READ");
73 Int_t ievent, nevents;
74 nevents = RunLoader->GetNumberOfEvents();
75
76 for(ievent=0; ievent<nevents; ievent++) { // Event loop
2b32c661 77 if (event2Check!=0) ievent=event2Check;
88cb7938 78 Int_t iparticle, nparticles;
79 // Getting event ievent
80 RunLoader->GetEvent(ievent);
3b0cf968 81 stack = RunLoader->Stack();
82 nparticles = (Int_t) stack->GetNtrack();
88cb7938 83 printf(">>> Event %d, Number of particles is %d \n",ievent, nparticles);
84 for(iparticle=0; iparticle<nparticles; iparticle++) {
3b0cf968 85 stack->Particle(iparticle)->Print("");
88cb7938 86 }
2b32c661 87 if (event2Check!=0) ievent=nevents;
88cb7938 88 }
89 RunLoader->UnloadKinematics();
90}
91
92
bf485fb9 93void MUONhits(Int_t event2Check=0, char * filename="galice.root")
88cb7938 94{
88cb7938 95 // Creating Run Loader and openning file containing Hits
96 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
97 if (RunLoader ==0x0) {
98 printf(">>> Error : Error Opening %s file \n",filename);
99 return;
100 }
88cb7938 101 // Loading MUON subsystem
102 AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
1a1cdff8 103 MUONLoader->LoadHits("READ"); // Loading Tree of hits for MUON
104 AliMUONData muondata(MUONLoader,"MUON","MUON"); // Creating MUON data container
88cb7938 105 Int_t ievent, nevents;
106 nevents = RunLoader->GetNumberOfEvents();
107
108 for(ievent=0; ievent<nevents; ievent++) { // Event loop
2b32c661 109 if (event2Check!=0) ievent=event2Check;
88cb7938 110 printf(">>> Event %d \n",ievent);
88cb7938 111 // Getting event ievent
112 RunLoader->GetEvent(ievent);
ce3f5e87 113 muondata.SetTreeAddress("H");
88cb7938 114 Int_t itrack, ntracks;
1a1cdff8 115 ntracks = (Int_t) muondata.GetNtracks();
88cb7938 116 for (itrack=0; itrack<ntracks; itrack++) { // Track loop
88cb7938 117 //Getting List of Hits of Track itrack
bf485fb9 118 muondata.GetTrack(itrack);
88cb7938 119 Int_t ihit, nhits;
ce3f5e87 120 nhits = (Int_t) muondata.Hits()->GetEntriesFast();
bf485fb9 121 printf(">>> Track %d, Number of hits %d \n",itrack,nhits);
88cb7938 122 AliMUONHit* mHit;
123 for(ihit=0; ihit<nhits; ihit++) {
ce3f5e87 124 mHit = static_cast<AliMUONHit*>(muondata.Hits()->At(ihit));
6464217e 125 mHit->Print("full");
88cb7938 126 }
ce3f5e87 127 muondata.ResetHits();
88cb7938 128 } // end track loop
2b32c661 129 if (event2Check!=0) ievent=nevents;
88cb7938 130 } // end event loop
131 MUONLoader->UnloadHits();
132}
133
134
bf485fb9 135void MUONdigits(Int_t event2Check=0, char * filename="galice.root")
88cb7938 136{
88cb7938 137 // Creating Run Loader and openning file containing Hits
138 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
139 if (RunLoader ==0x0) {
140 printf(">>> Error : Error Opening %s file \n",filename);
141 return;
142 }
ce3f5e87 143 // Loading MUON subsystem
88cb7938 144 AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
145 MUONLoader->LoadDigits("READ");
ce3f5e87 146 // Creating MUON data container
147 AliMUONData muondata(MUONLoader,"MUON","MUON");
75fbac63 148
88cb7938 149 Int_t ievent, nevents;
150 nevents = RunLoader->GetNumberOfEvents();
88cb7938 151 AliMUONDigit * mDigit;
152
88cb7938 153 for(ievent=0; ievent<nevents; ievent++) {
2b32c661 154 if (event2Check!=0) ievent=event2Check;
88cb7938 155 printf(">>> Event %d \n",ievent);
156 RunLoader->GetEvent(ievent);
75fbac63 157
88cb7938 158 // Addressing
159 Int_t ichamber, nchambers;
160 nchambers = AliMUONConstants::NCh(); ;
6babe058 161 muondata.SetTreeAddress("D,GLT");
75fbac63 162
bf485fb9 163 muondata.GetDigits();
164 // Loop on chambers
165 for( ichamber=0; ichamber<nchambers; ichamber++) {
166 Int_t idigit, ndigits;
75fbac63 167 TClonesArray* digits = muondata.Digits(ichamber);
168 digits->Sort();
169 ndigits = (Int_t)digits->GetEntriesFast();
bf485fb9 170 for(idigit=0; idigit<ndigits; idigit++) {
75fbac63 171 mDigit = static_cast<AliMUONDigit*>(digits->At(idigit));
172 mDigit->Print("tracks");
bf485fb9 173 } // end digit loop
174 } // end chamber loop
175 muondata.ResetDigits();
2b32c661 176 if (event2Check!=0) ievent=nevents;
88cb7938 177 } // end event loop
178 MUONLoader->UnloadDigits();
179}
180
75fbac63 181void MUONsdigits(Int_t event2Check=0, char * filename="galice.root")
182{
183 // Creating Run Loader and openning file containing Hits
184 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
185 if (RunLoader ==0x0) {
186 printf(">>> Error : Error Opening %s file \n",filename);
187 return;
188 }
189 // Loading MUON subsystem
190 AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
191 MUONLoader->LoadSDigits("READ");
192 // Creating MUON data container
193 AliMUONData muondata(MUONLoader,"MUON","MUON");
194
195 Int_t ievent, nevents;
196 nevents = RunLoader->GetNumberOfEvents();
197 AliMUONDigit * mDigit;
198
199 for(ievent=0; ievent<nevents; ievent++) {
200 if (event2Check!=0) ievent=event2Check;
201 printf(">>> Event %d \n",ievent);
202 RunLoader->GetEvent(ievent);
203
204 // Addressing
205 Int_t ichamber, nchambers;
206 nchambers = AliMUONConstants::NCh(); ;
207 muondata.SetTreeAddress("S");
208
209 muondata.GetSDigits();
210 // Loop on chambers
211 for( ichamber=0; ichamber<nchambers; ichamber++) {
212 Int_t idigit, ndigits;
213 TClonesArray* digits = muondata.SDigits(ichamber);
214 ndigits = (Int_t)digits->GetEntriesFast();
215 for(idigit=0; idigit<ndigits; idigit++) {
216 mDigit = static_cast<AliMUONDigit*>(digits->At(idigit));
217 mDigit->Print("tracks");
218 } // end digit loop
219 } // end chamber loop
220 muondata.ResetSDigits();
221 if (event2Check!=0) ievent=nevents;
222 } // end event loop
223 MUONLoader->UnloadSDigits();
224}
225
bf485fb9 226void MUONoccupancy(Int_t event2Check=0, Bool_t perDetEle =kFALSE, char * filename="galice.root") {
227 // Creating Run Loader and openning file containing Hits
228 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
229 if (RunLoader ==0x0) {
230 printf(">>> Error : Error Opening %s file \n",filename);
231 return;
232 }
233 // Loading MUON subsystem
234 AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
235 MUONLoader->LoadDigits("READ");
236 // Creating MUON data container
237 AliMUONData muondata(MUONLoader,"MUON","MUON");
238
239 Int_t ievent, nevents;
240 nevents = RunLoader->GetNumberOfEvents();
241 AliMUONDigit * mDigit =0x0;
242 AliMpVSegmentation * segbend = 0x0;
243 AliMpVSegmentation * segnonbend = 0x0;
244 AliMpIntPair pad(0,0);
245
246 Int_t dEoccupancy_bending[14][26];
247 Int_t dEoccupancy_nonbending[14][26];
248 Int_t cHoccupancy_bending[14];
249 Int_t cHoccupancy_nonbending[14];
250 Int_t totaloccupancy_bending =0;
251 Int_t totaloccupancy_nonbending =0;
252
253 Int_t dEchannels_bending[14][26];
254 Int_t dEchannels_nonbending[14][26];
255 Int_t cHchannels_bending[14];
256 Int_t cHchannels_nonbending[14];
257 Int_t totalchannels_bending =0;
258 Int_t totalchannels_nonbending =0;
259
260 Int_t ichamber, nchambers,idetele, detele, ix, iy;
261 nchambers = AliMUONConstants::NCh(); ;
262
6babe058 263 AliMpSegFactory factory;
264
bf485fb9 265 for (ichamber=0; ichamber<nchambers; ichamber++) {
266 cHchannels_bending[ichamber]=0;
267 cHchannels_nonbending[ichamber]=0;
268 for (idetele=0; idetele<26; idetele++) {
269 detele= 100*(ichamber +1)+idetele;
270 dEchannels_bending[ichamber][idetele]=0;
271 dEchannels_nonbending[ichamber][idetele]=0;
272 dEoccupancy_bending[ichamber][idetele]=0;
273 dEoccupancy_nonbending[ichamber][idetele]=0;
6babe058 274 if ( AliMpDEManager::IsValidDetElemId(detele) ) {
275
276 segbend = factory.CreateMpSegmentation(detele, 0);
277 segnonbend = factory.CreateMpSegmentation(detele, 1);
278 if (AliMpDEManager::GetPlaneType(detele, 0) != kBendingPlane ) {
279 AliMpVSegmentation* tmp = segbend;
280 segbend = segnonbend;
281 segnonbend = tmp;
282 }
283
bf485fb9 284 for(ix=0; ix<=segbend->MaxPadIndexX(); ix++) {
285 for(iy=0; iy<=segbend->MaxPadIndexY(); iy++) {
286 pad.SetFirst(ix);
287 pad.SetSecond(iy);
288 if( segbend->HasPad(pad) ) {
289 dEchannels_bending[ichamber][idetele]++;
290 cHchannels_bending[ichamber]++;
291 totalchannels_bending++;
292 }
293 }
294 }
295 for(ix=0; ix<=segnonbend->MaxPadIndexX(); ix++) {
296 for(iy=0; iy<=segnonbend->MaxPadIndexY(); iy++) {
297 pad.SetFirst(ix);
298 pad.SetSecond(iy);
299 if(segnonbend->HasPad(pad)) {
300 dEchannels_nonbending[ichamber][idetele]++;
301 cHchannels_nonbending[ichamber]++;
302 totalchannels_nonbending++;
303 }
304 }
305 }
306 if (perDetEle) printf(">>> Detection element %4d has %5d channels in bending and %5d channels in nonbending \n",
307 detele, dEchannels_bending[ichamber][idetele], dEchannels_nonbending[ichamber][idetele] );
308 }
309 }
310 printf(">>> Chamber %2d has %6d channels in bending and %6d channels in nonbending \n",
311 ichamber+1, cHchannels_bending[ichamber], cHchannels_nonbending[ichamber]);
312 }
313 printf(">>Spectrometer has %7d channels in bending and %7d channels in nonbending \n",
314 totalchannels_bending, totalchannels_nonbending);
315
6babe058 316 factory.DeleteSegmentations();
317
bf485fb9 318 ievent=event2Check;
319 printf(">>> Event %d \n",ievent);
320 RunLoader->GetEvent(ievent);
321
322 // Addressing
323 muondata.SetTreeAddress("D");
324 muondata.GetDigits();
325 // Loop on chambers
326 for( ichamber=0; ichamber<nchambers; ichamber++) {
327 cHoccupancy_bending[ichamber] = 0;
328 cHoccupancy_nonbending[ichamber]= 0;
329 Int_t idigit, ndigits;
330 ndigits = (Int_t) muondata.Digits(ichamber)->GetEntriesFast();
331 for(idigit=0; idigit<ndigits; idigit++) {
332 mDigit = static_cast<AliMUONDigit*>(muondata.Digits(ichamber)->At(idigit));
333 Int_t detele = mDigit->DetElemId();
334 Int_t idetele = detele-(ichamber+1)*100;
335 if ( mDigit->Cathode() == 0 ) {
336
337 cHoccupancy_bending[ichamber]++;
338 dEoccupancy_bending[ichamber][idetele]++;
339 totaloccupancy_bending++;
340 }
341 else {
342 cHoccupancy_nonbending[ichamber]++;
343 dEoccupancy_nonbending[ichamber][idetele]++;
344 totaloccupancy_nonbending++;
345 }
346 } // end digit loop
347
348 printf(">>> Chamber %2d nChannels Bending %5d nChannels NonBending %5d \n",
349 ichamber+1,
350 cHoccupancy_bending[ichamber],
351 cHoccupancy_nonbending[ichamber]);
0ad940df 352 printf(">>> Chamber %2d Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
bf485fb9 353 ichamber+1,
354 100.*((Float_t) cHoccupancy_bending[ichamber])/((Float_t) cHchannels_bending[ichamber]),
355 100.*((Float_t) cHoccupancy_nonbending[ichamber])/((Float_t) cHchannels_bending[ichamber]) );
356
357
358 for(Int_t idetele=0; idetele<26; idetele++) {
359 Int_t detele = idetele + 100*(ichamber+1);
6babe058 360 if ( AliMpDEManager::IsValidDetElemId(detele) ) {
bf485fb9 361 if (perDetEle) {
362 printf(">>> DetEle %4d nChannels Bending %5d nChannels NonBending %5d \n",
363 idetele+100*(ichamber+1),
364 dEoccupancy_bending[ichamber][idetele],
365 dEoccupancy_nonbending[ichamber][idetele]);
0ad940df 366 printf(">>> DetEle %4d Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
bf485fb9 367 idetele+100*(ichamber+1),
368 100.*((Float_t) dEoccupancy_bending[ichamber][idetele])/((Float_t) dEchannels_bending[ichamber][idetele]),
369 100.*((Float_t) dEoccupancy_nonbending[ichamber][idetele])/((Float_t) dEchannels_bending[ichamber][idetele]));
370 }
371 }
372 }
373 } // end chamber loop
0ad940df 374 printf(">>> Muon Spectrometer Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
bf485fb9 375 100.*((Float_t) totaloccupancy_bending)/((Float_t) totalchannels_bending),
376 100.*((Float_t) totaloccupancy_nonbending)/((Float_t) totalchannels_nonbending) );
377 muondata.ResetDigits();
378 // } // end cathode loop
379 MUONLoader->UnloadDigits();
380}
381
382void MUONrecpoints(Int_t event2Check=0, char * filename="galice.root") {
88cb7938 383
88cb7938 384 // Creating Run Loader and openning file containing Hits
385 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
386 if (RunLoader ==0x0) {
387 printf(">>> Error : Error Opening %s file \n",filename);
388 return;
389 }
ce3f5e87 390 // Getting MUONloader
88cb7938 391 AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
392 MUONLoader->LoadRecPoints("READ");
ce3f5e87 393 // Creating MUON data container
394 AliMUONData muondata(MUONLoader,"MUON","MUON");
88cb7938 395
396 Int_t ievent, nevents;
397 nevents = RunLoader->GetNumberOfEvents();
e516b01d 398 AliMUONRawCluster * mRecPoint = 0;
88cb7938 399
88cb7938 400 for(ievent=0; ievent<nevents; ievent++) {
2b32c661 401 if (event2Check!=0) ievent=event2Check;
88cb7938 402 printf(">>> Event %d \n",ievent);
403 RunLoader->GetEvent(ievent);
88cb7938 404 // Addressing
405 Int_t ichamber, nchambers;
406 nchambers = AliMUONConstants::NTrackingCh();
6babe058 407 muondata.SetTreeAddress("RC,TC");
88cb7938 408 char branchname[30];
1a1cdff8 409 muondata.GetRawClusters();
88cb7938 410 // Loop on chambers
411 for( ichamber=0; ichamber<nchambers; ichamber++) {
88cb7938 412 sprintf(branchname,"MUONRawClusters%d",ichamber+1);
413 //printf(">>> branchname %s\n",branchname);
88cb7938 414 Int_t irecpoint, nrecpoints;
ce3f5e87 415 nrecpoints = (Int_t) muondata.RawClusters(ichamber)->GetEntriesFast();
bf485fb9 416 // printf(">>> Chamber %2d, Number of recpoints = %6d \n",ichamber+1, nrecpoints);
88cb7938 417 for(irecpoint=0; irecpoint<nrecpoints; irecpoint++) {
ce3f5e87 418 mRecPoint = static_cast<AliMUONRawCluster*>(muondata.RawClusters(ichamber)->At(irecpoint));
6464217e 419 mRecPoint->Print("full");
88cb7938 420 } // end recpoint loop
421 } // end chamber loop
ce3f5e87 422 muondata.ResetRawClusters();
2b32c661 423 if (event2Check!=0) ievent=nevents;
88cb7938 424 } // end event loop
425 MUONLoader->UnloadRecPoints();
426}
427
84da0ea0 428void MUONrectrigger (Int_t event2Check=0, char * filename="galice.root", Int_t WRITE = 0, Bool_t newTrigger=kFALSE)
9e48bfe3 429{
84da0ea0 430// USAGE: newTrigger=kFALSE/kTRUE for old/new trigger version
431
da47578c 432 // reads and dumps trigger objects from MUON.RecPoints.root
88cb7938 433 TClonesArray * globalTrigger;
434 TClonesArray * localTrigger;
435
da47578c 436 // Do NOT print out all the info if the loop runs over all events
437 Int_t PRINTOUT = (event2Check == 0 ) ? 0 : 1 ;
9e48bfe3 438
da47578c 439 // Book a ntuple for more detailled studies
9e48bfe3 440 TNtuple *TgtupleGlo = new TNtuple("TgtupleGlo","Global Trigger Ntuple","ev:global:spapt:smapt:undefapt:uplpt:uphpt:upapt:lpapt");
84da0ea0 441 TNtuple *TgtupleLoc = new TNtuple("TgtupleLoc","Local Trigger Ntuple","ev:LoCircuit:LoStripX:LoDev:StripY:LoLpt:LoHpt:LoApt:y11:y21:x11");
da47578c 442
443 // counters
444 Int_t SPLowpt=0,SPHighpt=0,SPAllpt=0;
445 Int_t SMLowpt=0,SMHighpt=0,SMAllpt=0;
446 Int_t SULowpt=0,SUHighpt=0,SUAllpt=0;
447 Int_t USLowpt=0,USHighpt=0,USAllpt=0;
448 Int_t LSLowpt=0,LSHighpt=0,LSAllpt=0;
449
88cb7938 450 // Creating Run Loader and openning file containing Hits
451 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
452 if (RunLoader ==0x0) {
c121e924 453 printf(">>> Error : Error Opening %s file \n",filename);
454 return;
88cb7938 455 }
84da0ea0 456
457 // Loading MUON subsystem
458 RunLoader->LoadgAlice();
459 AliMUON* pMUON = (AliMUON*)RunLoader->GetAliRun()->GetModule("MUON");
88cb7938 460
88cb7938 461 AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
6d2a906b 462 MUONLoader->LoadDigits("READ");
ce3f5e87 463 // Creating MUON data container
464 AliMUONData muondata(MUONLoader,"MUON","MUON");
88cb7938 465
c121e924 466
88cb7938 467 Int_t ievent, nevents;
468 nevents = RunLoader->GetNumberOfEvents();
469
0ad940df 470 AliMUONGlobalTrigger *gloTrg(0x0);
471 AliMUONLocalTrigger *locTrg(0x0);
88cb7938 472
473 for (ievent=0; ievent<nevents; ievent++) {
2b32c661 474 if (event2Check!=0) ievent=event2Check;
da47578c 475 if (ievent%100==0 || event2Check) cout << "Processing event " << ievent << endl;
c121e924 476 RunLoader->GetEvent(ievent);
477
9e48bfe3 478 muondata.SetTreeAddress("D,GLT");
6d2a906b 479 muondata.GetTriggerD();
c121e924 480
481 globalTrigger = muondata.GlobalTrigger();
482 localTrigger = muondata.LocalTrigger();
483
484 Int_t nglobals = (Int_t) globalTrigger->GetEntriesFast(); // should be 1
485 Int_t nlocals = (Int_t) localTrigger->GetEntriesFast(); // up to 234
da47578c 486 if (PRINTOUT) printf("###################################################\n");
eba3379e 487 if (PRINTOUT) printf("event %d nglobal %d nlocal %d \n",ievent,nglobals,nlocals);
488
c121e924 489 for (Int_t iglobal=0; iglobal<nglobals; iglobal++) { // Global Trigger
490 gloTrg = static_cast<AliMUONGlobalTrigger*>(globalTrigger->At(iglobal));
88cb7938 491
da47578c 492 SPLowpt+=gloTrg->SinglePlusLpt() ;
493 SPHighpt+=gloTrg->SinglePlusHpt() ;
494 SPAllpt+=gloTrg->SinglePlusApt() ;
495 SMLowpt+=gloTrg->SingleMinusLpt();
496 SMHighpt+=gloTrg->SingleMinusHpt();
497 SMAllpt+=gloTrg->SingleMinusApt();
498 SULowpt+=gloTrg->SingleUndefLpt();
499 SUHighpt+=gloTrg->SingleUndefHpt();
500 SUAllpt+=gloTrg->SingleUndefApt();
501 USLowpt+=gloTrg->PairUnlikeLpt();
502 USHighpt+=gloTrg->PairUnlikeHpt();
503 USAllpt+=gloTrg->PairUnlikeApt();
504 LSLowpt+=gloTrg->PairLikeLpt();
505 LSHighpt+=gloTrg->PairLikeHpt();
506 LSAllpt+=gloTrg->PairLikeApt();
88cb7938 507
eba3379e 508 if (PRINTOUT) gloTrg->Print("full");
509
c121e924 510 } // end of loop on Global Trigger
511
512 for (Int_t ilocal=0; ilocal<nlocals; ilocal++) { // Local Trigger
c121e924 513 locTrg = static_cast<AliMUONLocalTrigger*>(localTrigger->At(ilocal));
eba3379e 514 if (PRINTOUT) locTrg->Print("full");
84da0ea0 515
516 if (!newTrigger) { // old trigger
517// printf("MUONCheck::rectrigger using OLD trigger \n");
518 AliMUONTriggerCircuit * circuit = &(pMUON->TriggerCircuit(locTrg->LoCircuit()));
519 TgtupleLoc->Fill(ievent,locTrg->LoCircuit(),locTrg->LoStripX(),locTrg->LoDev(),locTrg->LoStripY(),locTrg->LoLpt(),locTrg->LoHpt(),locTrg->LoApt(),circuit->GetY11Pos(locTrg->LoStripX()),circuit->GetY21Pos(locTrg->LoStripX()+locTrg->LoDev()+1),circuit->GetX11Pos(locTrg->LoStripY()));
520
521 } else { // new trigger
522// printf("MUONCheck::rectrigger using NEW trigger \n");
523 AliMUONTriggerCircuitNew * circuit = &(pMUON->TriggerCircuitNew(locTrg->LoCircuit()-1));
9e48bfe3 524
84da0ea0 525 TgtupleLoc->Fill(ievent,locTrg->LoCircuit(),locTrg->LoStripX(),locTrg->LoDev(),locTrg->LoStripY(),locTrg->LoLpt(),locTrg->LoHpt(),locTrg->LoApt(),circuit->GetY11Pos(locTrg->LoStripX()),circuit->GetY21Pos(locTrg->LoStripX()+locTrg->LoDev()+1),circuit->GetX11Pos(locTrg->LoStripY()));
da47578c 526 }
84da0ea0 527
528
c121e924 529 } // end of loop on Local Trigger
da47578c 530
531
532 // fill ntuple
4af32a88 533 //TNtuple *Tgtuple = new TNtuple("Tgtuple","Trigger Ntuple","ev:global:spapt:smapt:undefapt:uplpt:uphpt:upapt:lpapt");
9e48bfe3 534 TgtupleGlo->Fill(ievent,nglobals,gloTrg->SinglePlusApt(),gloTrg->SingleMinusApt(),gloTrg->SingleUndefApt(),gloTrg->PairUnlikeLpt(),gloTrg->PairUnlikeHpt(),gloTrg->PairUnlikeApt(),gloTrg->PairLikeApt());
da47578c 535
c121e924 536 muondata.ResetTrigger();
2b32c661 537 if (event2Check!=0) ievent=nevents;
88cb7938 538 } // end loop on event
da47578c 539
540 // Print out summary if loop ran over all event
144414de 541 if (!event2Check){
542 printf("\n");
543 printf("===================================================\n");
544 printf("=================== SUMMARY =====================\n");
545 printf("\n");
546 printf("Total number of events processed %d \n", (event2Check==0) ? nevents : 1);
547 printf("\n");
548 printf(" Global Trigger output Low pt High pt All\n");
549 printf(" number of Single Plus :\t");
550 printf("%i\t%i\t%i\t",SPLowpt,SPHighpt,SPAllpt);
551 printf("\n");
552 printf(" number of Single Minus :\t");
553 printf("%i\t%i\t%i\t",SMLowpt,SMHighpt,SMAllpt);
554 printf("\n");
555 printf(" number of Single Undefined :\t");
556 printf("%i\t%i\t%i\t",SULowpt,SUHighpt,SUAllpt);
557 printf("\n");
558 printf(" number of UnlikeSign pair :\t");
559 printf("%i\t%i\t%i\t",USLowpt,USHighpt,USAllpt);
560 printf("\n");
561 printf(" number of LikeSign pair :\t");
562 printf("%i\t%i\t%i\t",LSLowpt,LSHighpt, LSAllpt);
563 printf("\n");
564 printf("===================================================\n");
565 }
566
da47578c 567 if (WRITE){
9e48bfe3 568 TFile *myFile = new TFile("TriggerCheck.root", "RECREATE");
569 TgtupleGlo->Write();
570 TgtupleLoc->Write();
da47578c 571 myFile->Close();
572 }
c121e924 573
574
da47578c 575 MUONLoader->UnloadRecPoints();
576}
88cb7938 577
9e48bfe3 578
bf485fb9 579void MUONrectracks (Int_t event2Check=0, char * filename="galice.root"){
8547965d 580// reads and dumps trigger objects from MUON.RecPoints.root
581 TClonesArray * RecTracks;
582
583 // Creating Run Loader and openning file containing Hits
584 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
585 if (RunLoader ==0x0) {
586 printf(">>> Error : Error Opening %s file \n",filename);
587 return;
588 }
589
590 AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
591 MUONLoader->LoadTracks("READ");
592 // Creating MUON data container
593 AliMUONData muondata(MUONLoader,"MUON","MUON");
594
595 Int_t ievent, nevents;
596 nevents = RunLoader->GetNumberOfEvents();
597
e516b01d 598 // AliMUONTrack * rectrack;
8547965d 599
600 for (ievent=0; ievent<nevents; ievent++) {
2b32c661 601 if (event2Check!=0) ievent=event2Check;
8547965d 602 RunLoader->GetEvent(ievent);
603
604 muondata.SetTreeAddress("RT");
605 muondata.GetRecTracks();
606 RecTracks = muondata.RecTracks();
607
608
609 Int_t nrectracks = (Int_t) RecTracks->GetEntriesFast(); //
610
bf485fb9 611 printf(">>> Event %d, Number of Recconstructed tracks %d \n",ievent, nrectracks);
612 // loop over tracks
6464217e 613
614 // setting pointer for tracks, triggertracks & trackparam at vertex
bf485fb9 615 AliMUONTrack* recTrack = 0;
616 AliMUONTrackParam* trackParam = 0;
617
618 for (Int_t iRecTracks = 0; iRecTracks < nrectracks; iRecTracks++) {
6464217e 619 // // reading info from tracks
620 recTrack = (AliMUONTrack*) RecTracks->At(iRecTracks);
621 trackParam = (AliMUONTrackParam*) (recTrack->GetTrackParamAtHit())->First();
622 trackParam->ExtrapToZ(0.0);
623 recTrack->Print("full");
bf485fb9 624 } // end loop tracks
625
8547965d 626 muondata.ResetRecTracks();
2b32c661 627 if (event2Check!=0) ievent=nevents;
8547965d 628 } // end loop on event
629 MUONLoader->UnloadTracks();
630}
631