1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
19 // Macro for checking aliroot output and associated files contents
20 // Gines Martinez, Subatech June 2003
22 #if !defined(__CINT__) || defined(__MAKECINT__)
25 #include "TClonesArray.h"
29 #include "TParticle.h"
35 #include "AliRunLoader.h"
36 #include "AliHeader.h"
37 #include "AliLoader.h"
42 #include "AliMUONData.h"
43 #include "AliMUONHit.h"
44 #include "AliMUONConstants.h"
45 #include "AliMUONDigit.h"
46 #include "AliMUONRawCluster.h"
47 #include "AliMUONGlobalTrigger.h"
48 #include "AliMUONLocalTrigger.h"
49 #include "AliMUONTrack.h"
50 #include "AliMUONTrackParam.h"
52 #include "AliMpVSegmentation.h"
53 #include "AliMpIntPair.h"
54 #include "AliMpDEManager.h"
55 #include "AliMpSegFactory.h"
59 void MUONkine(Int_t event2Check=0, char * filename="galice.root")
61 // Stack of particle for each event
63 // Creating Run Loader and openning file containing Hits
64 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
65 if (RunLoader ==0x0) {
66 printf(">>> Error : Error Opening %s file \n",filename);
70 RunLoader->LoadKinematics("READ");
71 Int_t ievent, nevents;
72 nevents = RunLoader->GetNumberOfEvents();
74 for(ievent=0; ievent<nevents; ievent++) { // Event loop
75 if (event2Check!=0) ievent=event2Check;
76 Int_t iparticle, nparticles;
77 // Getting event ievent
78 RunLoader->GetEvent(ievent);
79 stack = RunLoader->Stack();
80 nparticles = (Int_t) stack->GetNtrack();
81 printf(">>> Event %d, Number of particles is %d \n",ievent, nparticles);
82 for(iparticle=0; iparticle<nparticles; iparticle++) {
83 stack->Particle(iparticle)->Print("");
85 if (event2Check!=0) ievent=nevents;
87 RunLoader->UnloadKinematics();
91 void MUONhits(Int_t event2Check=0, char * filename="galice.root")
93 // Creating Run Loader and openning file containing Hits
94 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
95 if (RunLoader ==0x0) {
96 printf(">>> Error : Error Opening %s file \n",filename);
99 // Loading MUON subsystem
100 AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
101 MUONLoader->LoadHits("READ"); // Loading Tree of hits for MUON
102 AliMUONData muondata(MUONLoader,"MUON","MUON"); // Creating MUON data container
103 Int_t ievent, nevents;
104 nevents = RunLoader->GetNumberOfEvents();
106 for(ievent=0; ievent<nevents; ievent++) { // Event loop
107 if (event2Check!=0) ievent=event2Check;
108 printf(">>> Event %d \n",ievent);
109 // Getting event ievent
110 RunLoader->GetEvent(ievent);
111 muondata.SetTreeAddress("H");
112 Int_t itrack, ntracks;
113 ntracks = (Int_t) muondata.GetNtracks();
114 for (itrack=0; itrack<ntracks; itrack++) { // Track loop
115 //Getting List of Hits of Track itrack
116 muondata.GetTrack(itrack);
118 nhits = (Int_t) muondata.Hits()->GetEntriesFast();
119 printf(">>> Track %d, Number of hits %d \n",itrack,nhits);
121 for(ihit=0; ihit<nhits; ihit++) {
122 mHit = static_cast<AliMUONHit*>(muondata.Hits()->At(ihit));
123 Int_t detele = mHit-> DetElemId(); // Detection element if defined
124 Int_t hittrack = mHit->Track();
125 Float_t x = mHit->X();
126 Float_t y = mHit->Y();
127 Float_t z = mHit->Z();
128 Float_t elos = mHit->Eloss();
129 Float_t momentum = mHit->Momentum();
130 printf(">>> >>> Hit%4d DetEle %4d Track%4d (X,Y,Z)=(%7.2f,%7.2f,%8.2f)cm Elost=%7.2gGeV P=%6.1fGeV/c\n",
131 ihit, detele, hittrack,x,y,z,elos,momentum);
133 muondata.ResetHits();
135 if (event2Check!=0) ievent=nevents;
137 MUONLoader->UnloadHits();
141 void MUONdigits(Int_t event2Check=0, char * filename="galice.root")
143 // Creating Run Loader and openning file containing Hits
144 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
145 if (RunLoader ==0x0) {
146 printf(">>> Error : Error Opening %s file \n",filename);
149 // Loading MUON subsystem
150 AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
151 MUONLoader->LoadDigits("READ");
152 // Creating MUON data container
153 AliMUONData muondata(MUONLoader,"MUON","MUON");
155 Int_t ievent, nevents;
156 nevents = RunLoader->GetNumberOfEvents();
157 AliMUONDigit * mDigit;
159 for(ievent=0; ievent<nevents; ievent++) {
160 if (event2Check!=0) ievent=event2Check;
161 printf(">>> Event %d \n",ievent);
162 RunLoader->GetEvent(ievent);
165 Int_t ichamber, nchambers;
166 nchambers = AliMUONConstants::NCh(); ;
167 muondata.SetTreeAddress("D,GLT");
168 // char branchname[30];
170 muondata.GetDigits();
172 for( ichamber=0; ichamber<nchambers; ichamber++) {
173 Int_t idigit, ndigits;
174 ndigits = (Int_t) muondata.Digits(ichamber)->GetEntriesFast();
175 for(idigit=0; idigit<ndigits; idigit++) {
176 mDigit = static_cast<AliMUONDigit*>(muondata.Digits(ichamber)->At(idigit));
177 Int_t PadX = mDigit->PadX(); // Pad X number
178 Int_t PadY = mDigit->PadY(); // Pad Y number
179 Int_t Signal = mDigit->Signal(); // Physics Signal
180 Int_t Physics= mDigit->Physics(); // Physics contribution to signal
181 // Int_t Hit = mDigit->Hit(); // iHit
182 Int_t Cathode= mDigit->Cathode(); // Cathode
183 Int_t Track0 = mDigit->Track(0);
184 Int_t Track1 = mDigit->Track(1);
185 //Int_t Track2 = mDigit->Track(2);
186 Int_t TCharges0 = mDigit->TrackCharge(0); //charge per track making this digit (up to 10)
187 Int_t TCharges1 = mDigit->TrackCharge(1);
188 //Int_t TCharges2 = mDigit->TrackCharge(2);
189 Int_t idDE = mDigit->DetElemId();
190 // printf(">>> Cathode %d\n",Cathode);
192 printf(">>> DetEle %4d Digit%4d Cath %1d (Ix,Iy)=(%3d,%3d) Signal=%4d Physics=%4d Track0=%4d Charge0=%4d Track1=%4d Charge1=%4d \n",
193 idDE, idigit, Cathode, PadX, PadY, Signal, Physics, Track0,
194 TCharges0, Track1, TCharges1);
196 } // end chamber loop
197 muondata.ResetDigits();
198 // } // end cathode loop
199 if (event2Check!=0) ievent=nevents;
201 MUONLoader->UnloadDigits();
204 void MUONoccupancy(Int_t event2Check=0, Bool_t perDetEle =kFALSE, char * filename="galice.root") {
205 // Creating Run Loader and openning file containing Hits
206 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
207 if (RunLoader ==0x0) {
208 printf(">>> Error : Error Opening %s file \n",filename);
211 // Loading MUON subsystem
212 AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
213 MUONLoader->LoadDigits("READ");
214 // Creating MUON data container
215 AliMUONData muondata(MUONLoader,"MUON","MUON");
217 Int_t ievent, nevents;
218 nevents = RunLoader->GetNumberOfEvents();
219 AliMUONDigit * mDigit =0x0;
220 AliMpVSegmentation * segbend = 0x0;
221 AliMpVSegmentation * segnonbend = 0x0;
222 AliMpIntPair pad(0,0);
224 Int_t dEoccupancy_bending[14][26];
225 Int_t dEoccupancy_nonbending[14][26];
226 Int_t cHoccupancy_bending[14];
227 Int_t cHoccupancy_nonbending[14];
228 Int_t totaloccupancy_bending =0;
229 Int_t totaloccupancy_nonbending =0;
231 Int_t dEchannels_bending[14][26];
232 Int_t dEchannels_nonbending[14][26];
233 Int_t cHchannels_bending[14];
234 Int_t cHchannels_nonbending[14];
235 Int_t totalchannels_bending =0;
236 Int_t totalchannels_nonbending =0;
238 Int_t ichamber, nchambers,idetele, detele, ix, iy;
239 nchambers = AliMUONConstants::NCh(); ;
241 AliMpSegFactory factory;
243 for (ichamber=0; ichamber<nchambers; ichamber++) {
244 cHchannels_bending[ichamber]=0;
245 cHchannels_nonbending[ichamber]=0;
246 for (idetele=0; idetele<26; idetele++) {
247 detele= 100*(ichamber +1)+idetele;
248 dEchannels_bending[ichamber][idetele]=0;
249 dEchannels_nonbending[ichamber][idetele]=0;
250 dEoccupancy_bending[ichamber][idetele]=0;
251 dEoccupancy_nonbending[ichamber][idetele]=0;
252 if ( AliMpDEManager::IsValidDetElemId(detele) ) {
254 segbend = factory.CreateMpSegmentation(detele, 0);
255 segnonbend = factory.CreateMpSegmentation(detele, 1);
256 if (AliMpDEManager::GetPlaneType(detele, 0) != kBendingPlane ) {
257 AliMpVSegmentation* tmp = segbend;
258 segbend = segnonbend;
262 for(ix=0; ix<=segbend->MaxPadIndexX(); ix++) {
263 for(iy=0; iy<=segbend->MaxPadIndexY(); iy++) {
266 if( segbend->HasPad(pad) ) {
267 dEchannels_bending[ichamber][idetele]++;
268 cHchannels_bending[ichamber]++;
269 totalchannels_bending++;
273 for(ix=0; ix<=segnonbend->MaxPadIndexX(); ix++) {
274 for(iy=0; iy<=segnonbend->MaxPadIndexY(); iy++) {
277 if(segnonbend->HasPad(pad)) {
278 dEchannels_nonbending[ichamber][idetele]++;
279 cHchannels_nonbending[ichamber]++;
280 totalchannels_nonbending++;
284 if (perDetEle) printf(">>> Detection element %4d has %5d channels in bending and %5d channels in nonbending \n",
285 detele, dEchannels_bending[ichamber][idetele], dEchannels_nonbending[ichamber][idetele] );
288 printf(">>> Chamber %2d has %6d channels in bending and %6d channels in nonbending \n",
289 ichamber+1, cHchannels_bending[ichamber], cHchannels_nonbending[ichamber]);
291 printf(">>Spectrometer has %7d channels in bending and %7d channels in nonbending \n",
292 totalchannels_bending, totalchannels_nonbending);
294 factory.DeleteSegmentations();
297 printf(">>> Event %d \n",ievent);
298 RunLoader->GetEvent(ievent);
301 muondata.SetTreeAddress("D");
302 muondata.GetDigits();
304 for( ichamber=0; ichamber<nchambers; ichamber++) {
305 cHoccupancy_bending[ichamber] = 0;
306 cHoccupancy_nonbending[ichamber]= 0;
307 Int_t idigit, ndigits;
308 ndigits = (Int_t) muondata.Digits(ichamber)->GetEntriesFast();
309 for(idigit=0; idigit<ndigits; idigit++) {
310 mDigit = static_cast<AliMUONDigit*>(muondata.Digits(ichamber)->At(idigit));
311 Int_t detele = mDigit->DetElemId();
312 Int_t idetele = detele-(ichamber+1)*100;
313 if ( mDigit->Cathode() == 0 ) {
315 cHoccupancy_bending[ichamber]++;
316 dEoccupancy_bending[ichamber][idetele]++;
317 totaloccupancy_bending++;
320 cHoccupancy_nonbending[ichamber]++;
321 dEoccupancy_nonbending[ichamber][idetele]++;
322 totaloccupancy_nonbending++;
326 printf(">>> Chamber %2d nChannels Bending %5d nChannels NonBending %5d \n",
328 cHoccupancy_bending[ichamber],
329 cHoccupancy_nonbending[ichamber]);
330 printf(">>> Chamber %2d Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
332 100.*((Float_t) cHoccupancy_bending[ichamber])/((Float_t) cHchannels_bending[ichamber]),
333 100.*((Float_t) cHoccupancy_nonbending[ichamber])/((Float_t) cHchannels_bending[ichamber]) );
336 for(Int_t idetele=0; idetele<26; idetele++) {
337 Int_t detele = idetele + 100*(ichamber+1);
338 if ( AliMpDEManager::IsValidDetElemId(detele) ) {
340 printf(">>> DetEle %4d nChannels Bending %5d nChannels NonBending %5d \n",
341 idetele+100*(ichamber+1),
342 dEoccupancy_bending[ichamber][idetele],
343 dEoccupancy_nonbending[ichamber][idetele]);
344 printf(">>> DetEle %4d Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
345 idetele+100*(ichamber+1),
346 100.*((Float_t) dEoccupancy_bending[ichamber][idetele])/((Float_t) dEchannels_bending[ichamber][idetele]),
347 100.*((Float_t) dEoccupancy_nonbending[ichamber][idetele])/((Float_t) dEchannels_bending[ichamber][idetele]));
351 } // end chamber loop
352 printf(">>> Muon Spectrometer Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
353 100.*((Float_t) totaloccupancy_bending)/((Float_t) totalchannels_bending),
354 100.*((Float_t) totaloccupancy_nonbending)/((Float_t) totalchannels_nonbending) );
355 muondata.ResetDigits();
356 // } // end cathode loop
357 MUONLoader->UnloadDigits();
360 void MUONrecpoints(Int_t event2Check=0, char * filename="galice.root") {
362 // Creating Run Loader and openning file containing Hits
363 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
364 if (RunLoader ==0x0) {
365 printf(">>> Error : Error Opening %s file \n",filename);
368 // Getting MUONloader
369 AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
370 MUONLoader->LoadRecPoints("READ");
371 // Creating MUON data container
372 AliMUONData muondata(MUONLoader,"MUON","MUON");
374 Int_t ievent, nevents;
375 nevents = RunLoader->GetNumberOfEvents();
376 AliMUONRawCluster * mRecPoint = 0;
378 for(ievent=0; ievent<nevents; ievent++) {
379 if (event2Check!=0) ievent=event2Check;
380 printf(">>> Event %d \n",ievent);
381 RunLoader->GetEvent(ievent);
383 Int_t ichamber, nchambers;
384 nchambers = AliMUONConstants::NTrackingCh();
385 muondata.SetTreeAddress("RC,TC");
387 muondata.GetRawClusters();
389 for( ichamber=0; ichamber<nchambers; ichamber++) {
390 sprintf(branchname,"MUONRawClusters%d",ichamber+1);
391 //printf(">>> branchname %s\n",branchname);
392 Int_t irecpoint, nrecpoints;
393 nrecpoints = (Int_t) muondata.RawClusters(ichamber)->GetEntriesFast();
394 // printf(">>> Chamber %2d, Number of recpoints = %6d \n",ichamber+1, nrecpoints);
395 for(irecpoint=0; irecpoint<nrecpoints; irecpoint++) {
396 mRecPoint = static_cast<AliMUONRawCluster*>(muondata.RawClusters(ichamber)->At(irecpoint));
397 Int_t Track0 = mRecPoint->GetTrack(0);
398 Int_t Track1 = mRecPoint->GetTrack(1);
399 Int_t Track2 = mRecPoint->GetTrack(2);
400 Int_t Q0 = mRecPoint->GetCharge(0);
401 Int_t Q1 = mRecPoint->GetCharge(1);
402 Float_t x0 = mRecPoint->GetX(0);
403 Float_t x1 = mRecPoint->GetX(1);
404 Float_t y0 = mRecPoint->GetY(0);
405 Float_t y1 = mRecPoint->GetY(1);
406 Float_t z0 = mRecPoint->GetZ(0);
407 Float_t z1 = mRecPoint->GetZ(1);
408 Float_t chi2_0 = mRecPoint->GetChi2(0);
409 //Float_t chi2_1 = mRecPoint->GetChi2(1);
410 Int_t de = mRecPoint->GetDetElemId();
411 printf(">>> >>> RecPoint %4d DetEle %4d (X,Y,Z)=(%7.2f,%7.2f,%8.2f)cm Q0=%4d Q1=%4d Hit=%4d Track1=%4d Track2=%4d Chi2=%6.3f \n",
412 irecpoint,de,x0,y0,z0,Q0,Q1,Track0, Track1, Track2, chi2_0);
413 if( (x0!=x1) || (y0!=y1) || (z0!=z1) )
414 printf(">>> >>> Warning (X0,Y0,Z0)=(%7.2f, %7.2f, %8.2f)cm != (X1,Y1,Z1)=(%7.2f,%7.2f,%8.2f)cm \n",x0,y0,z0,x1,y1,z1);
415 } // end recpoint loop
416 } // end chamber loop
417 muondata.ResetRawClusters();
418 if (event2Check!=0) ievent=nevents;
420 MUONLoader->UnloadRecPoints();
423 void MUONrectrigger (Int_t event2Check=0, char * filename="galice.root", Int_t WRITE = 0)
425 // reads and dumps trigger objects from MUON.RecPoints.root
426 TClonesArray * globalTrigger;
427 TClonesArray * localTrigger;
429 // Do NOT print out all the info if the loop runs over all events
430 Int_t PRINTOUT = (event2Check == 0 ) ? 0 : 1 ;
432 // Book a ntuple for more detailled studies
433 TNtuple *TgtupleGlo = new TNtuple("TgtupleGlo","Global Trigger Ntuple","ev:global:spapt:smapt:undefapt:uplpt:uphpt:upapt:lpapt");
434 TNtuple *TgtupleLoc = new TNtuple("TgtupleLoc","Local Trigger Ntuple","LoCircuit:LoStripX:LoDev:StripY:LoLpt:LoHpt:LoApt");
437 Int_t SPLowpt=0,SPHighpt=0,SPAllpt=0;
438 Int_t SMLowpt=0,SMHighpt=0,SMAllpt=0;
439 Int_t SULowpt=0,SUHighpt=0,SUAllpt=0;
440 Int_t USLowpt=0,USHighpt=0,USAllpt=0;
441 Int_t LSLowpt=0,LSHighpt=0,LSAllpt=0;
443 // Creating Run Loader and openning file containing Hits
444 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
445 if (RunLoader ==0x0) {
446 printf(">>> Error : Error Opening %s file \n",filename);
450 AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
451 MUONLoader->LoadDigits("READ");
452 // Creating MUON data container
453 AliMUONData muondata(MUONLoader,"MUON","MUON");
456 Int_t ievent, nevents;
457 nevents = RunLoader->GetNumberOfEvents();
459 AliMUONGlobalTrigger *gloTrg(0x0);
460 AliMUONLocalTrigger *locTrg(0x0);
462 for (ievent=0; ievent<nevents; ievent++) {
463 if (event2Check!=0) ievent=event2Check;
464 if (ievent%100==0 || event2Check) cout << "Processing event " << ievent << endl;
465 RunLoader->GetEvent(ievent);
467 muondata.SetTreeAddress("D,GLT");
468 muondata.GetTriggerD();
470 globalTrigger = muondata.GlobalTrigger();
471 localTrigger = muondata.LocalTrigger();
473 Int_t nglobals = (Int_t) globalTrigger->GetEntriesFast(); // should be 1
474 Int_t nlocals = (Int_t) localTrigger->GetEntriesFast(); // up to 234
475 if (PRINTOUT) printf("###################################################\n");
476 if (PRINTOUT) {cout << " event " << ievent
477 << " nglobals nlocals: " << nglobals << " " << nlocals << "\n"; }
479 for (Int_t iglobal=0; iglobal<nglobals; iglobal++) { // Global Trigger
480 gloTrg = static_cast<AliMUONGlobalTrigger*>(globalTrigger->At(iglobal));
482 SPLowpt+=gloTrg->SinglePlusLpt() ;
483 SPHighpt+=gloTrg->SinglePlusHpt() ;
484 SPAllpt+=gloTrg->SinglePlusApt() ;
485 SMLowpt+=gloTrg->SingleMinusLpt();
486 SMHighpt+=gloTrg->SingleMinusHpt();
487 SMAllpt+=gloTrg->SingleMinusApt();
488 SULowpt+=gloTrg->SingleUndefLpt();
489 SUHighpt+=gloTrg->SingleUndefHpt();
490 SUAllpt+=gloTrg->SingleUndefApt();
491 USLowpt+=gloTrg->PairUnlikeLpt();
492 USHighpt+=gloTrg->PairUnlikeHpt();
493 USAllpt+=gloTrg->PairUnlikeApt();
494 LSLowpt+=gloTrg->PairLikeLpt();
495 LSHighpt+=gloTrg->PairLikeHpt();
496 LSAllpt+=gloTrg->PairLikeApt();
499 printf("===================================================\n");
500 printf(" Global Trigger output Low pt High pt All\n");
501 printf(" number of Single Plus :\t");
502 printf("%i\t%i\t%i\t",gloTrg->SinglePlusLpt(),
503 gloTrg->SinglePlusHpt(),gloTrg->SinglePlusApt());
506 printf(" number of Single Minus :\t");
507 printf("%i\t%i\t%i\t",gloTrg->SingleMinusLpt(),
508 gloTrg->SingleMinusHpt(),gloTrg->SingleMinusApt());
511 printf(" number of Single Undefined :\t");
512 printf("%i\t%i\t%i\t",gloTrg->SingleUndefLpt(),
513 gloTrg->SingleUndefHpt(),gloTrg->SingleUndefApt());
516 printf(" number of UnlikeSign pair :\t");
517 printf("%i\t%i\t%i\t",gloTrg->PairUnlikeLpt(),
518 gloTrg->PairUnlikeHpt(),gloTrg->PairUnlikeApt());
521 printf(" number of LikeSign pair :\t");
522 printf("%i\t%i\t%i\t",gloTrg->PairLikeLpt(),
523 gloTrg->PairLikeHpt(),gloTrg->PairLikeApt());
526 printf("===================================================\n");
529 } // end of loop on Global Trigger
531 for (Int_t ilocal=0; ilocal<nlocals; ilocal++) { // Local Trigger
532 if (PRINTOUT) cout << " >>> Output for Local Trigger " << ilocal << "\n";
534 locTrg = static_cast<AliMUONLocalTrigger*>(localTrigger->At(ilocal));
537 cout << "Circuit StripX Dev StripY: "
538 << locTrg->LoCircuit() << " "
539 << locTrg->LoStripX() << " "
540 << locTrg->LoDev() << " "
541 << locTrg->LoStripY()
543 cout << "Lpt Hpt Apt: "
544 << locTrg->LoLpt() << " "
545 << locTrg->LoHpt() << " "
546 << locTrg->LoApt() << "\n";
549 TgtupleLoc->Fill(locTrg->LoCircuit(),locTrg->LoStripX(),locTrg->LoDev(),locTrg->LoStripY(),locTrg->LoLpt(),locTrg->LoHpt(),locTrg->LoApt());
550 } // end of loop on Local Trigger
554 //TNtuple *Tgtuple = new TNtuple("Tgtuple","Trigger Ntuple","ev:global:spapt:smapt:undefapt:uplpt:uphpt:upapt:lpapt");
555 TgtupleGlo->Fill(ievent,nglobals,gloTrg->SinglePlusApt(),gloTrg->SingleMinusApt(),gloTrg->SingleUndefApt(),gloTrg->PairUnlikeLpt(),gloTrg->PairUnlikeHpt(),gloTrg->PairUnlikeApt(),gloTrg->PairLikeApt());
557 muondata.ResetTrigger();
558 if (event2Check!=0) ievent=nevents;
559 } // end loop on event
561 // Print out summary if loop ran over all event
564 printf("===================================================\n");
565 printf("=================== SUMMARY =====================\n");
567 printf("Total number of events processed %d \n", (event2Check==0) ? nevents : 1);
569 printf(" Global Trigger output Low pt High pt All\n");
570 printf(" number of Single Plus :\t");
571 printf("%i\t%i\t%i\t",SPLowpt,SPHighpt,SPAllpt);
573 printf(" number of Single Minus :\t");
574 printf("%i\t%i\t%i\t",SMLowpt,SMHighpt,SMAllpt);
576 printf(" number of Single Undefined :\t");
577 printf("%i\t%i\t%i\t",SULowpt,SUHighpt,SUAllpt);
579 printf(" number of UnlikeSign pair :\t");
580 printf("%i\t%i\t%i\t",USLowpt,USHighpt,USAllpt);
582 printf(" number of LikeSign pair :\t");
583 printf("%i\t%i\t%i\t",LSLowpt,LSHighpt, LSAllpt);
585 printf("===================================================\n");
589 TFile *myFile = new TFile("TriggerCheck.root", "RECREATE");
596 MUONLoader->UnloadRecPoints();
600 void MUONrectracks (Int_t event2Check=0, char * filename="galice.root"){
601 // reads and dumps trigger objects from MUON.RecPoints.root
602 TClonesArray * RecTracks;
604 // Creating Run Loader and openning file containing Hits
605 AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
606 if (RunLoader ==0x0) {
607 printf(">>> Error : Error Opening %s file \n",filename);
611 AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
612 MUONLoader->LoadTracks("READ");
613 // Creating MUON data container
614 AliMUONData muondata(MUONLoader,"MUON","MUON");
616 Int_t ievent, nevents;
617 nevents = RunLoader->GetNumberOfEvents();
619 // AliMUONTrack * rectrack;
621 for (ievent=0; ievent<nevents; ievent++) {
622 if (event2Check!=0) ievent=event2Check;
623 RunLoader->GetEvent(ievent);
625 muondata.SetTreeAddress("RT");
626 muondata.GetRecTracks();
627 RecTracks = muondata.RecTracks();
630 Int_t nrectracks = (Int_t) RecTracks->GetEntriesFast(); //
632 printf(">>> Event %d, Number of Recconstructed tracks %d \n",ievent, nrectracks);
636 Int_t nTrackHits;// nPrimary;
638 Double_t bendingSlope, nonBendingSlope, inverseBendingMomentum;
639 Double_t xRec, yRec, zRec, chi2MatchTrigger;
641 Double_t Pz,Px,Py,Pt,Ptot,Eta ;
643 // setting pointer for tracks, triggertracks & trackparam at vertex
644 AliMUONTrack* recTrack = 0;
645 AliMUONTrackParam* trackParam = 0;
647 for (Int_t iRecTracks = 0; iRecTracks < nrectracks; iRecTracks++) {
648 // reading info from tracks
649 recTrack = (AliMUONTrack*) RecTracks->At(iRecTracks);
650 trackParam = (AliMUONTrackParam*) (recTrack->GetTrackParamAtHit())->First();
651 trackParam->ExtrapToZ(0.0);
652 bendingSlope = trackParam->GetBendingSlope();
653 nonBendingSlope = trackParam->GetNonBendingSlope();
654 inverseBendingMomentum = trackParam->GetInverseBendingMomentum();
655 xRec = trackParam->GetNonBendingCoor();
656 yRec = trackParam->GetBendingCoor();
657 zRec = trackParam->GetZ();
659 nTrackHits = recTrack->GetNTrackHits();
660 fitFmin = recTrack->GetFitFMin();
661 matchTrigger = recTrack->GetMatchTrigger();
662 chi2MatchTrigger = recTrack->GetChi2MatchTrigger();
664 Px = trackParam->Px();
665 Py = trackParam->Py();
666 Pz = trackParam->Pz();
667 Pt = TMath::Sqrt(Px*Px + Py*Py );
668 Ptot = TMath::Sqrt(Px*Px + Py*Py + Pz*Pz);
669 Eta = (Pt!=0) ? 0.5*log( (Ptot+Pz)/(Ptot-Pz) ) : 999999999.999 ;
671 printf(">>> RecTrack %4d NofClusters=%2d BendMomentum=%7.2f NonBendSlope=%5.2f BendSlope=%5.2f Match2Trig=%1d (vertex@z=0)=(%5.2f,%5.2f,%5.1f)cm \n", iRecTracks, nTrackHits, 1/inverseBendingMomentum , nonBendingSlope*180./TMath::Pi(), bendingSlope*180./TMath::Pi(), matchTrigger, xRec,yRec,zRec);
672 printf(" Px=%f Py =%f Pz =%f Pt=%f Ptot=%f PseudoRap=%f \n",Px,Py,Pz,Pt,Ptot,Eta);
675 muondata.ResetRecTracks();
676 if (event2Check!=0) ievent=nevents;
677 } // end loop on event
678 MUONLoader->UnloadTracks();