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 **************************************************************************/
18 //-----------------------------------------------------------------------------
19 /// \class AliMUONCheck
21 /// This class check the ESD tree, providing the matching with the trigger
22 /// response and designing useful plots (Pt, Y, ITS vertex, multiplicity).
23 /// Note that there is a special flag to turn on for pdc06 production.
24 /// It also checks the TR tree giving hit densities on the two first and
25 /// last planes of the spectrometer as well as the time of flight on these planes.
26 /// MUONkine() provides event stack and check if the event are generated with
27 /// at least one muon and two muons (for PDC06).
28 /// DumpDigit() as a replacement of the function from MUONCheck.C macro.
30 /// \author Frederic Yermia, INFN Torino
31 //-----------------------------------------------------------------------------
33 #include "AliMUONCheck.h"
34 #include "AliMUONConstants.h"
35 #include "AliMUONMCDataInterface.h"
36 #include "AliMUONDataInterface.h"
38 #include "AliMpSegmentation.h"
39 #include "AliMpVSegmentation.h"
40 #include "AliMpDEManager.h"
42 #include "AliMUONVDigitStore.h"
44 #include "AliRunLoader.h"
45 #include "AliLoader.h"
47 #include "AliTrackReference.h"
48 #include "AliTracker.h"
49 #include "AliESDEvent.h"
50 #include "AliESDMuonTrack.h"
51 #include "AliESDVertex.h"
57 #include <TLorentzVector.h>
60 #include <TParticle.h>
63 ClassImp(AliMUONCheck)
66 //_____________________________________________________________________________
67 const TString& AliMUONCheck::GetDefaultOutFileName()
69 /// Default output file name
70 static const TString kDefaultOutFileName = "output.txt";
71 return kDefaultOutFileName;
74 //_____________________________________________________________________________
75 AliMUONCheck::AliMUONCheck(const char* galiceFile, const char* esdFile,Int_t firstEvent, Int_t lastEvent,const char* outDir)
77 fFileName(galiceFile),
79 fesdFileName(esdFile),
81 fOutFileName(GetDefaultOutFileName()),
82 fFirstEvent(firstEvent),
88 //_____________________________________________________________________________
89 AliMUONCheck::AliMUONCheck(const char* galiceFile, const char* galiceFileSim,
90 const char* esdFile,Int_t firstEvent, Int_t lastEvent,
93 fFileName(galiceFile),
94 fFileNameSim(galiceFileSim),
95 fesdFileName(esdFile),
97 fOutFileName(GetDefaultOutFileName()),
98 fFirstEvent(firstEvent),
104 //_____________________________________________________________________________
105 AliMUONCheck::~AliMUONCheck()
110 //_____________________________________________________________________________
112 AliMUONCheck::CheckESD(Bool_t pdc06TriggerResponse)
117 TH1F * fhMUONVertex ; //!
118 TH1F * fhMUONMult ; //!
121 fhMUONVertex = new TH1F("hMUONVertex","ITS Vertex" ,100, -25., 25.);
122 fhMUONMult = new TH1F("hMUONMult" ,"Multiplicity of ESD tracks",10, -0.5, 9.5);
124 TH1F *hY = new TH1F("hY","Rapidity",100,-5.,-1.);
125 TH1F *hPt = new TH1F("hPt","Pt",100, 0.,20.);
127 // ------------->open the ESD file
128 TFile* esdFile = TFile::Open(fesdFileName.Data());
130 if (!esdFile || !esdFile->IsOpen())
132 AliError(Form("Error opening %s file \n",fesdFileName.Data()));
136 Int_t fSPLowpt=0 ; //!
137 Int_t fSPHighpt=0 ; //!
138 Int_t fSPAllpt=0 ; //!
139 Int_t fSMLowpt=0 ; //!
140 Int_t fSMHighpt =0 ; //!
141 Int_t fSMAllpt=0 ; //!
142 Int_t fSULowpt=0 ; //!
143 Int_t fSUHighpt=0 ; //!
144 Int_t fSUAllpt=0 ; //!
145 Int_t fUSLowpt=0 ; //!
146 Int_t fUSHighpt=0 ; //!
147 Int_t fUSAllpt=0 ; //!
148 Int_t fLSLowpt=0 ; //!
149 Int_t fLSHighpt=0 ; //!
150 Int_t fLSAllpt=0 ; //!
152 Int_t fSLowpt=0 ; //!
153 Int_t fSHighpt=0 ; //!
155 Int_t fnTrackTrig=0 ; //!
156 Int_t ftracktot=0 ; //!
157 Int_t effMatch=0 ; //!
160 Float_t muonMass = 0.105658389;
161 Double_t thetaX, thetaY, pYZ;
162 Double_t fPxRec1, fPyRec1, fPzRec1, fE1;
165 AliESDEvent* fESD = new AliESDEvent();
166 TTree* tree = (TTree*) esdFile->Get("esdTree");
169 Error("CheckESD", "no ESD tree found");
170 AliError(Form("no ESD tree found"));
173 fESD->ReadFromTree(tree);
175 Int_t fnevents = tree->GetEntries();
176 Int_t endOfLoop = fLastEvent+1;
178 if ( fLastEvent == -1 ) endOfLoop = fnevents;
182 for (ievent = fFirstEvent; ievent < endOfLoop; ++ievent )
185 if (tree->GetEvent(ievent) <= 0)
187 Error("CheckESD", "no ESD object found for event %d", ievent);
190 AliESDVertex* vertex = (AliESDVertex*) fESD->GetVertex();
192 Double_t zVertex = 0. ;
193 if (vertex) zVertex = vertex->GetZv();
195 Int_t nTracks = (Int_t)fESD->GetNumberOfMuonTracks() ;
196 ULong64_t trigword=fESD->GetTriggerMask();
198 if(pdc06TriggerResponse)
200 if (trigword & 0x01) {
204 if (trigword & 0x02){
207 if (trigword & 0x04){
210 if (trigword & 0x08){
213 if (trigword & 0x010){
216 if (trigword & 0x020){
219 if (trigword & 0x040){
222 if (trigword & 0x080){
225 if (trigword & 0x100){
228 if (trigword & 0x200){
232 if (trigword & 0x400){
235 if (trigword & 0x800){
238 if (trigword & 0x1000){
242 if (trigword & 0x2000){
246 if (trigword & 0x4000){
249 }// if pdc06TriggerResponse
251 if (trigword & 0x01) {
255 if (trigword & 0x02){
258 if (trigword & 0x04){
261 if (trigword & 0x08){
264 if (trigword & 0x010){
267 if (trigword & 0x020){
274 for ( Int_t iTrack1 = 0; iTrack1<nTracks; ++iTrack1 )
276 AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iTrack1);
278 // skip fake tracks (ghosts)
279 if (!muonTrack->ContainTrackerData()) continue;
283 thetaX = muonTrack->GetThetaX();
284 thetaY = muonTrack->GetThetaY();
285 pYZ = 1./TMath::Abs(muonTrack->GetInverseBendingMomentum());
287 fPzRec1 = - pYZ / TMath::Sqrt(1.0 + TMath::Tan(thetaY)*TMath::Tan(thetaY));
288 fPxRec1 = fPzRec1 * TMath::Tan(thetaX);
289 fPyRec1 = fPzRec1 * TMath::Tan(thetaY);
290 fZ1 = Int_t(TMath::Sign(1.,muonTrack->GetInverseBendingMomentum()));
291 fE1 = TMath::Sqrt(muonMass * muonMass + fPxRec1 * fPxRec1 + fPyRec1 * fPyRec1 + fPzRec1 * fPzRec1);
292 fV1.SetPxPyPzE(fPxRec1, fPyRec1, fPzRec1, fE1);
293 // -----------> transverse momentum
294 Float_t pt1 = fV1.Pt();
295 // ----------->Rapidity
296 Float_t y1 = fV1.Rapidity();
298 if(muonTrack->GetMatchTrigger())
307 fhMUONVertex->Fill(zVertex) ;
308 fhMUONMult->Fill(Float_t(nTracks)) ;
310 } // loop over events
312 AliInfo(Form("Terminate %s:", GetName())) ;
314 effMatch=100*fnTrackTrig/ftracktot;
316 if(pdc06TriggerResponse)
318 printf("=================================================================\n") ;
319 printf("================ %s ESD SUMMARY ==============\n", GetName()) ;
321 printf(" Total number of processed events %d \n", nev) ;
324 printf("Table 1: \n") ;
325 printf(" Global Trigger output Low pt High pt All\n") ;
326 printf(" number of Single Plus :\t");
327 printf("%i\t%i\t%i\t", fSPLowpt, fSPHighpt, fSPAllpt) ;
329 printf(" number of Single Minus :\t");
330 printf("%i\t%i\t%i\t", fSMLowpt, fSMHighpt, fSMAllpt) ;
332 printf(" number of Single Undefined :\t");
333 printf("%i\t%i\t%i\t", fSULowpt, fSUHighpt, fSUAllpt) ;
335 printf(" number of UnlikeSign pair :\t");
336 printf("%i\t%i\t%i\t", fUSLowpt, fUSHighpt, fUSAllpt) ;
338 printf(" number of LikeSign pair :\t");
339 printf("%i\t%i\t%i\t", fLSLowpt, fLSHighpt, fLSAllpt) ;
341 printf("===================================================\n") ;
343 printf("matching efficiency with the trigger for single tracks = %2d %% \n", effMatch);
344 printf("================================================================\n") ; printf("\n") ;
346 }//if(pdc06TriggerResponse)
348 gSystem->cd(fkOutDir);
350 FILE *outtxt=fopen(fOutFileName.Data(),"a");
352 if(pdc06TriggerResponse){
353 fprintf(outtxt," \n");
354 fprintf(outtxt,"===================================================\n");
355 fprintf(outtxt,"================ ESD SUMMARY ==============\n");
356 fprintf(outtxt," \n");
357 fprintf(outtxt," Total number of processed events %d \n", nev);
358 fprintf(outtxt,"\n");
359 fprintf(outtxt,"\n");
360 fprintf(outtxt,"Table 1: \n");
361 fprintf(outtxt," Global Trigger output Low pt High pt All\n");
362 fprintf(outtxt," number of Single Plus :\t");
363 fprintf(outtxt,"%i\t%i\t%i\t",fSPLowpt,fSPHighpt,fSPAllpt);
364 fprintf(outtxt,"\n");
365 fprintf(outtxt," number of Single Minus :\t");
366 fprintf(outtxt,"%i\t%i\t%i\t",fSMLowpt,fSMHighpt,fSMAllpt);
367 fprintf(outtxt,"\n");
368 fprintf(outtxt," number of Single Undefined :\t");
369 fprintf(outtxt,"%i\t%i\t%i\t",fSULowpt,fSUHighpt,fSUAllpt);
370 fprintf(outtxt,"\n");
371 fprintf(outtxt," number of UnlikeSign pair :\t");
372 fprintf(outtxt,"%i\t%i\t%i\t",fUSLowpt,fUSHighpt,fUSAllpt);
373 fprintf(outtxt,"\n");
374 fprintf(outtxt," number of LikeSign pair :\t");
375 fprintf(outtxt,"%i\t%i\t%i\t",fLSLowpt,fLSHighpt, fLSAllpt);
376 fprintf(outtxt,"\n");
377 fprintf(outtxt,"===================================================\n");
378 fprintf(outtxt,"\n");
379 fprintf(outtxt,"matching efficiency with the trigger for single tracks = %2d %% \n", effMatch);
380 }//if(pdc06TriggerResponse)
384 fprintf(outtxt," \n");
385 fprintf(outtxt,"===================================================\n");
386 fprintf(outtxt,"================ ESD SUMMARY ==============\n");
387 fprintf(outtxt," \n");
388 fprintf(outtxt," Total number of processed events %d \n", nev);
389 fprintf(outtxt,"\n");
390 fprintf(outtxt,"\n");
391 fprintf(outtxt,"Table 1: \n");
392 fprintf(outtxt," Global Trigger output Low pt High pt \n");
393 fprintf(outtxt," number of Single :\t");
394 fprintf(outtxt,"%i\t%i\t",fSLowpt,fSHighpt);
395 fprintf(outtxt,"\n");
396 fprintf(outtxt," number of UnlikeSign pair :\t");
397 fprintf(outtxt,"%i\t%i\t",fUSLowpt,fUSHighpt);
398 fprintf(outtxt,"\n");
399 fprintf(outtxt," number of LikeSign pair :\t");
400 fprintf(outtxt,"%i\t%i\t",fLSLowpt,fLSHighpt);
401 fprintf(outtxt,"\n");
402 fprintf(outtxt,"===================================================\n");
403 fprintf(outtxt,"\n");
404 fprintf(outtxt,"matching efficiency with the trigger for single tracks = %2d %% \n", effMatch);
408 TCanvas * c1 = new TCanvas("c1", "ESD", 400, 10, 600, 700) ;
411 fhMUONVertex->Draw() ;
414 c1->Print("VertexAndMul.eps") ;
415 TCanvas *c2 = new TCanvas("c2","ESD",400,10,600,700);
421 c2->Print("YandPt.eps") ;
424 //_____________________________________________________________________________
426 AliMUONCheck::CheckKine()
430 AliMUONMCDataInterface diSim(fFileNameSim.Data());
431 if (!diSim.IsValid()) return;
433 Int_t fnevents = diSim.NumberOfEvents();
435 Int_t endOfLoop = fLastEvent+1;
437 if ( fLastEvent == -1 ) endOfLoop = fnevents;
444 for ( Int_t ievent = fFirstEvent; ievent < endOfLoop; ++ievent )
449 AliStack* stack = diSim.Stack(ievent);
450 Int_t npa = stack->GetNprimary();
451 Int_t npb = stack->GetNtrack();
452 printf("Primary particles %i \n",npa);
453 printf("Sec particles %i \n",npb);
454 printf("=================================================================\n") ;
455 printf("Primary particles listing: \n");
456 printf("=================================================================\n") ;
457 for (Int_t i=0; i<npa; ++i)
459 TParticle *p = stack->Particle(i);
461 Int_t pdg=p->GetPdgCode();
468 printf("=================================================================\n") ;
469 printf("=================================================================\n") ;
471 printf("Secondaries particles listing: \n");
472 printf("=================================================================\n") ;
473 for (Int_t i=npa; i<npb; ++i)
475 stack->Particle(i)->Print("");
478 printf("=================================================================\n") ;
479 printf(">>> Event %d, Number of primary particles is %d \n",ievent, npa);
480 printf(">>> Event %d, Number of secondary articles is %d \n",ievent, npb-npa);
481 printf("=================================================================\n");
484 printf(">>> Okay!!! Event %d with at least one muon on primary stack! \n",ievent);
490 printf(">>> Warning!!! Event %d without muon on primary stack! \n",ievent);
496 printf(">>> Okay!!! Event %d with at least two muons on primary stack! \n",ievent);
499 printf("=================================================================\n");
504 printf("=================================================================\n") ;
505 printf(" Total number of processed events %d \n", nev) ;
510 printf("---> WARNING!!! <---\n");
511 printf(" %i events without muon on primary stack \n",nmu);
516 printf("---> OKAY!!! <---\n");
517 printf(" %i events generated with at least one muon on primary stack \n",nonemu);
522 printf("---> OKAY!!! <---\n");
523 printf(" %i events generated with at least two muons on primary stack \n",ndimu);
527 printf("*** Leaving MuonKine() *** \n");
528 printf("**************************************************************** \n");
530 gSystem->cd(fkOutDir);
531 FILE *outtxt=fopen(fOutFileName.Data(),"a");
532 fprintf(outtxt," \n");
533 fprintf(outtxt,"=================================================================\n");
534 fprintf(outtxt,"================ MUONkine SUMMARY ================\n");
535 fprintf(outtxt,"\n");
536 fprintf(outtxt,"=================================================================\n");
537 fprintf(outtxt," Total number of processed events %d \n", nev) ;
538 fprintf(outtxt," \n");
542 fprintf(outtxt," ---> WARNING!!! <--- \n");
543 fprintf(outtxt," %i events without muon on primary stack \n",nmu);
548 fprintf(outtxt," ---> OKAY!!! <--- \n");
549 fprintf(outtxt," %i events generated with at least one muon on primary stack \n",nonemu);
554 fprintf(outtxt," ---> OKAY!!! <--- \n");
555 fprintf(outtxt," %i events generated with at least two muons on primary stack \n",ndimu);
558 fprintf(outtxt," \n") ;
559 fprintf(outtxt,"*** Leaving MuonKine() *** \n");
560 fprintf(outtxt,"**************************************************************** \n");
564 //_____________________________________________________________________________
566 AliMUONCheck::CheckTrackRef()
568 /// Check TrackRef files
570 AliMUONMCDataInterface diSim(fFileNameSim.Data());
571 if ( !diSim.IsValid() ) return;
573 Int_t flag11=0,flag12=0,flag13=0,flag14=0;
575 TH1F *tof01= new TH1F("tof01","TOF for first tracking plane",100,0.,100);
576 tof01->SetXTitle("tof (ns)");
577 TH1F *tof14= new TH1F("tof14","TOF for MT22",100,0.,100);
578 tof14->SetXTitle("tof (ns)");
581 hitDensity[0] = new TH1F("TR_dhits01","",30,0,300);
582 hitDensity[0]->SetFillColor(3);
583 hitDensity[0]->SetXTitle("R (cm)");
584 hitDensity[1] = new TH1F("TR_dhits10","",30,0,300);
585 hitDensity[1]->SetFillColor(3);
586 hitDensity[1]->SetXTitle("R (cm)");
587 hitDensity[2] = new TH1F("TR_dhits11","",30,0,300);
588 hitDensity[2]->SetFillColor(3);
589 hitDensity[2]->SetXTitle("R (cm)");
590 hitDensity[3] = new TH1F("TR_dhits14","",30,0,300);
591 hitDensity[3]->SetFillColor(3);
592 hitDensity[3]->SetXTitle("R (cm)");
594 Int_t fnevents = diSim.NumberOfEvents();
596 Int_t endOfLoop = fLastEvent+1;
598 if ( fLastEvent == -1 ) endOfLoop = fnevents;
601 Int_t ntot=fLastEvent+1-fFirstEvent;
603 for ( Int_t ievent = fFirstEvent; ievent < endOfLoop; ++ievent )
608 Int_t nentries = diSim.NumberOfTrackRefs(ievent);
610 for ( Int_t l=0; l<nentries; ++l )
612 TClonesArray* trackRefs = diSim.TrackRefs(ievent,l);
613 if (!trackRefs) continue;
615 Int_t nnn = trackRefs->GetEntriesFast();
617 for ( Int_t k=0; k<nnn; ++k )
619 AliTrackReference *tref = static_cast<AliTrackReference*>(trackRefs->UncheckedAt(k));
620 Int_t label = tref->GetTrack();
621 Float_t x = tref->X(); // x-pos of hit
622 Float_t y = tref->Y(); // y-pos
623 Float_t z = tref->Z();
625 Float_t r=TMath::Sqrt(x*x+y*y);
626 Float_t time = tref->GetTime();
628 Float_t wgt=1/(2*10*TMath::Pi()*r)/(ntot);
641 if (z<=-521&& z>=-531&&flag11==0){
643 hitDensity[0]->Fill(r,wgt);
644 tof01->Fill(1000000000*time,1);
648 if (z<=-1432&&z>=-1442&&flag12==0){
650 hitDensity[1]->Fill(r,wgt);
654 if (z<=-1598&& z>=-1608&&flag13==0){
656 hitDensity[2]->Fill(r,wgt);
660 if(z<=-1715&&z>=-1725&&flag14==0){
662 hitDensity[3]->Fill(r,wgt);
663 tof14->Fill(1000000000*time,1);
674 gSystem->cd(fkOutDir);
675 TCanvas *c6 = new TCanvas("c6","TOF",400,10,600,700);
682 c6->Print("tof_on_trigger.ps");
684 TCanvas *c5 = new TCanvas("c5","TRef:Hits Density",400,10,600,700);
687 hitDensity[0]->Draw();
689 hitDensity[1]->Draw();
691 hitDensity[2]->Draw();
693 hitDensity[3]->Draw();
694 c5->Print("TR_Hit_densities.ps");
695 printf("=================================================================\n") ;
696 printf("================ %s Tref SUMMARY ==============\n", GetName()) ;
698 printf(" Total number of processed events %d \n", nev) ;
699 printf("*** Leaving TRef() *** \n");
700 printf("*************************************************** \n");
703 //_____________________________________________________________________________
705 AliMUONCheck::CheckOccupancy(Bool_t perDetEle) const
707 /// Check occupancy for the first event selected
709 Int_t dEoccupancyBending[14][26];
710 Int_t dEoccupancyNonBending[14][26];
711 Int_t cHoccupancyBending[14];
712 Int_t cHoccupancyNonBending[14];
713 Int_t totaloccupancyBending =0;
714 Int_t totaloccupancyNonBending =0;
716 Int_t dEchannelsBending[14][26];
717 Int_t dEchannelsNonBending[14][26];
718 Int_t cHchannelsBending[14];
719 Int_t cHchannelsNonBending[14];
720 Int_t totalchannelsBending =0;
721 Int_t totalchannelsNonBending =0;
723 Int_t nchambers = AliMUONConstants::NCh();
725 AliMUONDataInterface di(fFileNameSim);
727 AliMUONVDigitStore* digitStore = di.DigitStore(fFirstEvent);
730 for (Int_t ichamber=0; ichamber<nchambers; ++ichamber)
732 cHchannelsBending[ichamber]=0;
733 cHchannelsNonBending[ichamber]=0;
734 cHoccupancyBending[ichamber]=0;
735 cHoccupancyNonBending[ichamber]=0;
737 for (Int_t idetele=0; idetele<26; idetele++)
739 Int_t detele = 100*(ichamber +1)+idetele;
741 if ( AliMpDEManager::IsValidDetElemId(detele) )
745 const AliMpVSegmentation* segbend = AliMpSegmentation::Instance()
746 ->GetMpSegmentation(detele, AliMp::kCath0);
747 const AliMpVSegmentation* segnonbend = AliMpSegmentation::Instance()
748 ->GetMpSegmentation(detele, AliMp::kCath1);
750 if (AliMpDEManager::GetPlaneType(detele, AliMp::kCath0) != AliMp::kBendingPlane )
752 const AliMpVSegmentation* tmp = segbend;
753 segbend = segnonbend;
758 Int_t nchannels = segbend->NofPads();
759 Int_t ndigits = digitStore->GetSize(detele,cathode);
760 dEchannelsBending[ichamber][idetele] = nchannels;
761 dEoccupancyBending[ichamber][idetele] = ndigits;
762 cHchannelsBending[ichamber] += nchannels;
763 cHoccupancyBending[ichamber] += ndigits;
764 totalchannelsBending += nchannels;
765 totaloccupancyBending += ndigits;
767 nchannels = segnonbend->NofPads();
768 ndigits = digitStore->GetSize(detele,1-cathode);
770 dEchannelsNonBending[ichamber][idetele] = nchannels;
771 dEoccupancyNonBending[ichamber][idetele] = ndigits;
772 cHchannelsNonBending[ichamber] += nchannels;
773 cHoccupancyNonBending[ichamber] += ndigits;
774 totalchannelsNonBending += nchannels;
775 totaloccupancyNonBending += ndigits;
779 printf(">>> Detection element %4d has %5d channels in bending and %5d channels in nonbending \n",
780 detele, dEchannelsBending[ichamber][idetele], dEchannelsNonBending[ichamber][idetele] );
783 printf(">>> Chamber %2d has %6d channels in bending and %6d channels in nonbending \n",
784 ichamber+1, cHchannelsBending[ichamber], cHchannelsNonBending[ichamber]);
786 printf(">>Spectrometer has %7d channels in bending and %7d channels in nonbending \n",
787 totalchannelsBending, totalchannelsNonBending);
791 for ( Int_t ichamber = 0; ichamber < nchambers; ++ichamber )
793 printf(">>> Chamber %2d nChannels Bending %5d nChannels NonBending %5d \n",
795 cHoccupancyBending[ichamber],
796 cHoccupancyNonBending[ichamber]);
797 if ( cHchannelsBending[ichamber] != 0 && cHchannelsBending[ichamber] ) {
798 printf(">>> Chamber %2d Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
800 100.*((Float_t) cHoccupancyBending[ichamber])/((Float_t) cHchannelsBending[ichamber]),
801 100.*((Float_t) cHoccupancyNonBending[ichamber])/((Float_t) cHchannelsBending[ichamber]));
806 for(Int_t idetele=0; idetele<26; idetele++)
808 Int_t detele = idetele + 100*(ichamber+1);
809 if ( AliMpDEManager::IsValidDetElemId(detele) )
811 printf(">>> DetEle %4d nChannels Bending %5d nChannels NonBending %5d \n",
812 idetele+100*(ichamber+1),
813 dEoccupancyBending[ichamber][idetele],
814 dEoccupancyNonBending[ichamber][idetele]);
816 if ( dEchannelsBending[ichamber][idetele] != 0 && dEchannelsBending[ichamber][idetele] !=0 ) {
817 printf(">>> DetEle %4d Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
818 idetele+100*(ichamber+1),
819 100.*((Float_t) dEoccupancyBending[ichamber][idetele])/((Float_t) dEchannelsBending[ichamber][idetele]),
820 100.*((Float_t) dEoccupancyNonBending[ichamber][idetele])/((Float_t) dEchannelsBending[ichamber][idetele]));
827 if ( totalchannelsBending != 0 && totalchannelsNonBending != 0 ) {
828 printf(">>> Muon Spectrometer Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
829 100.*((Float_t) totaloccupancyBending)/((Float_t) totalchannelsBending),
830 100.*((Float_t) totaloccupancyNonBending)/((Float_t) totalchannelsNonBending));
834 //_____________________________________________________________________________
835 void AliMUONCheck::SetEventsToCheck(Int_t firstEvent, Int_t lastEvent)
837 /// Set first and last event number to check
839 fFirstEvent = firstEvent;
840 fLastEvent = lastEvent;