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 /// \class AliMUONCheck
20 /// This class check the ESD tree, providing the matching with the trigger
21 /// response and designing useful plots (Pt, Y, ITS vertex, multiplicity).
22 /// Note that there is a special flag to turn on for pdc06 production.
23 /// It also checks the TR tree giving hit densities on the two first and
24 /// last planes of the spectrometer as well as the time of flight on these planes.
25 /// MUONkine() provides event stack and check if the event are generated with
26 /// at least one muon and two muons (for PDC06).
27 /// DumpDigit() as a replacement of the function from MUONCheck.C macro.
29 /// \author Frederic Yermia, INFN Torino
31 #include "AliMUONCheck.h"
32 #include "AliMUONConstants.h"
33 #include "AliMUONTrack.h"
34 #include "AliMUONTrackParam.h"
35 #include "AliMUONTrackExtrap.h"
36 #include "AliMUONMCDataInterface.h"
37 #include "AliMUONDataInterface.h"
38 #include "AliMpSegmentation.h"
39 #include "AliMpVSegmentation.h"
40 #include "AliMpDEManager.h"
41 #include "AliMUONVDigitStore.h"
43 #include "AliRunLoader.h"
44 #include "AliLoader.h"
46 #include "AliTrackReference.h"
47 #include "AliTracker.h"
49 #include "AliESDMuonTrack.h"
50 #include "AliMagFMaps.h"
55 #include <TLorentzVector.h>
58 #include <TParticle.h>
61 ClassImp(AliMUONCheck)
64 AliMUONCheck::AliMUONCheck(const char* galiceFile, const char* esdFile,Int_t firstEvent, Int_t lastEvent,const char* outDir)
66 fFileName(galiceFile),
68 fesdFileName(esdFile),
70 fFirstEvent(firstEvent),
76 //_____________________________________________________________________________
77 AliMUONCheck::AliMUONCheck(const char* galiceFile, const char* galiceFileSim,
78 const char* esdFile,Int_t firstEvent, Int_t lastEvent,
81 fFileName(galiceFile),
82 fFileNameSim(galiceFileSim),
83 fesdFileName(esdFile),
85 fFirstEvent(firstEvent),
91 //_____________________________________________________________________________
92 AliMUONCheck::~AliMUONCheck()
97 //_____________________________________________________________________________
99 AliMUONCheck::CheckESD(Bool_t pdc06TriggerResponse)
104 TH1F * fhMUONVertex ; //!
105 TH1F * fhMUONMult ; //!
108 fhMUONVertex = new TH1F("hMUONVertex","ITS Vertex" ,100, -25., 25.);
109 fhMUONMult = new TH1F("hMUONMult" ,"Multiplicity of ESD tracks",10, -0.5, 9.5);
111 TH1F *hY = new TH1F("hY","Rapidity",100,-5.,-1.);
112 TH1F *hPt = new TH1F("hPt","Pt",100, 0.,20.);
114 // ------------->open the ESD file
115 TFile* esdFile = TFile::Open(fesdFileName.Data());
117 if (!esdFile || !esdFile->IsOpen())
119 AliError(Form("Error opening %s file \n",fesdFileName.Data()));
123 Int_t fSPLowpt=0 ; //!
124 Int_t fSPHighpt=0 ; //!
125 Int_t fSPAllpt=0 ; //!
126 Int_t fSMLowpt=0 ; //!
127 Int_t fSMHighpt =0 ; //!
128 Int_t fSMAllpt=0 ; //!
129 Int_t fSULowpt=0 ; //!
130 Int_t fSUHighpt=0 ; //!
131 Int_t fSUAllpt=0 ; //!
132 Int_t fUSLowpt=0 ; //!
133 Int_t fUSHighpt=0 ; //!
134 Int_t fUSAllpt=0 ; //!
135 Int_t fLSLowpt=0 ; //!
136 Int_t fLSHighpt=0 ; //!
137 Int_t fLSAllpt=0 ; //!
139 Int_t fSLowpt=0 ; //!
140 Int_t fSHighpt=0 ; //!
142 Int_t fnTrackTrig=0 ; //!
143 Int_t ftracktot=0 ; //!
144 Int_t effMatch=0 ; //!
147 Float_t muonMass = 0.105658389;
148 Double_t thetaX, thetaY, pYZ;
149 Double_t fPxRec1, fPyRec1, fPzRec1, fE1;
152 AliESD* fESD = new AliESD();
153 TTree* tree = (TTree*) esdFile->Get("esdTree");
156 Error("CheckESD", "no ESD tree found");
157 AliError(Form("CheckESD", "no ESD tree found"));
160 fESD->ReadFromTree(tree);
162 Int_t fnevents = tree->GetEntries();
163 Int_t endOfLoop = fLastEvent+1;
165 if ( fLastEvent == -1 ) endOfLoop = fnevents;
169 for (ievent = fFirstEvent; ievent < endOfLoop; ++ievent )
172 tree->GetEvent(ievent);
175 Error("CheckESD", "no ESD object found for event %d", ievent);
178 AliESDVertex* vertex = (AliESDVertex*) fESD->GetVertex();
180 Double_t zVertex = 0. ;
181 if (vertex) zVertex = vertex->GetZv();
183 Int_t nTracks = (Int_t)fESD->GetNumberOfMuonTracks() ;
184 ULong64_t trigword=fESD->GetTriggerMask();
186 if(pdc06TriggerResponse)
188 if (trigword & 0x01) {
192 if (trigword & 0x02){
195 if (trigword & 0x04){
198 if (trigword & 0x08){
201 if (trigword & 0x010){
204 if (trigword & 0x020){
207 if (trigword & 0x040){
210 if (trigword & 0x080){
213 if (trigword & 0x100){
216 if (trigword & 0x200){
220 if (trigword & 0x400){
223 if (trigword & 0x800){
226 if (trigword & 0x1000){
230 if (trigword & 0x2000){
234 if (trigword & 0x4000){
237 }// if pdc06TriggerResponse
239 if (trigword & 0x01) {
243 if (trigword & 0x02){
246 if (trigword & 0x04){
249 if (trigword & 0x08){
252 if (trigword & 0x010){
255 if (trigword & 0x020){
262 for ( Int_t iTrack1 = 0; iTrack1<nTracks; ++iTrack1 )
264 AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iTrack1);
267 thetaX = muonTrack->GetThetaX();
268 thetaY = muonTrack->GetThetaY();
269 pYZ = 1./TMath::Abs(muonTrack->GetInverseBendingMomentum());
271 fPzRec1 = - pYZ / TMath::Sqrt(1.0 + TMath::Tan(thetaY)*TMath::Tan(thetaY));
272 fPxRec1 = fPzRec1 * TMath::Tan(thetaX);
273 fPyRec1 = fPzRec1 * TMath::Tan(thetaY);
274 fZ1 = Int_t(TMath::Sign(1.,muonTrack->GetInverseBendingMomentum()));
275 fE1 = TMath::Sqrt(muonMass * muonMass + fPxRec1 * fPxRec1 + fPyRec1 * fPyRec1 + fPzRec1 * fPzRec1);
276 fV1.SetPxPyPzE(fPxRec1, fPyRec1, fPzRec1, fE1);
277 // -----------> transverse momentum
278 Float_t pt1 = fV1.Pt();
279 // ----------->Rapidity
280 Float_t y1 = fV1.Rapidity();
282 if(muonTrack->GetMatchTrigger())
291 fhMUONVertex->Fill(zVertex) ;
292 fhMUONMult->Fill(Float_t(nTracks)) ;
294 } // loop over events
296 AliInfo(Form("Terminate %s:", GetName())) ;
298 effMatch=100*fnTrackTrig/ftracktot;
300 if(pdc06TriggerResponse)
302 printf("=================================================================\n") ;
303 printf("================ %s ESD SUMMARY ==============\n", GetName()) ;
305 printf(" Total number of processed events %d \n", nev) ;
308 printf("Table 1: \n") ;
309 printf(" Global Trigger output Low pt High pt All\n") ;
310 printf(" number of Single Plus :\t");
311 printf("%i\t%i\t%i\t", fSPLowpt, fSPHighpt, fSPAllpt) ;
313 printf(" number of Single Minus :\t");
314 printf("%i\t%i\t%i\t", fSMLowpt, fSMHighpt, fSMAllpt) ;
316 printf(" number of Single Undefined :\t");
317 printf("%i\t%i\t%i\t", fSULowpt, fSUHighpt, fSUAllpt) ;
319 printf(" number of UnlikeSign pair :\t");
320 printf("%i\t%i\t%i\t", fUSLowpt, fUSHighpt, fUSAllpt) ;
322 printf(" number of LikeSign pair :\t");
323 printf("%i\t%i\t%i\t", fLSLowpt, fLSHighpt, fLSAllpt) ;
325 printf("===================================================\n") ;
327 printf("matching efficiency with the trigger for single tracks = %2d %% \n", effMatch);
328 printf("================================================================\n") ; printf("\n") ;
330 }//if(pdc06TriggerResponse)
332 gSystem->cd(foutDir);
334 FILE *outtxt=fopen("output.txt","a");
335 freopen("output.txt","a",outtxt);
337 if(pdc06TriggerResponse){
338 fprintf(outtxt," \n");
339 fprintf(outtxt,"===================================================\n");
340 fprintf(outtxt,"================ ESD SUMMARY ==============\n");
341 fprintf(outtxt," \n");
342 fprintf(outtxt," Total number of processed events %d \n", nev);
343 fprintf(outtxt,"\n");
344 fprintf(outtxt,"\n");
345 fprintf(outtxt,"Table 1: \n");
346 fprintf(outtxt," Global Trigger output Low pt High pt All\n");
347 fprintf(outtxt," number of Single Plus :\t");
348 fprintf(outtxt,"%i\t%i\t%i\t",fSPLowpt,fSPHighpt,fSPAllpt);
349 fprintf(outtxt,"\n");
350 fprintf(outtxt," number of Single Minus :\t");
351 fprintf(outtxt,"%i\t%i\t%i\t",fSMLowpt,fSMHighpt,fSMAllpt);
352 fprintf(outtxt,"\n");
353 fprintf(outtxt," number of Single Undefined :\t");
354 fprintf(outtxt,"%i\t%i\t%i\t",fSULowpt,fSUHighpt,fSUAllpt);
355 fprintf(outtxt,"\n");
356 fprintf(outtxt," number of UnlikeSign pair :\t");
357 fprintf(outtxt,"%i\t%i\t%i\t",fUSLowpt,fUSHighpt,fUSAllpt);
358 fprintf(outtxt,"\n");
359 fprintf(outtxt," number of LikeSign pair :\t");
360 fprintf(outtxt,"%i\t%i\t%i\t",fLSLowpt,fLSHighpt, fLSAllpt);
361 fprintf(outtxt,"\n");
362 fprintf(outtxt,"===================================================\n");
363 fprintf(outtxt,"\n");
364 fprintf(outtxt,"matching efficiency with the trigger for single tracks = %2d %% \n", effMatch);
365 }//if(pdc06TriggerResponse)
369 fprintf(outtxt," \n");
370 fprintf(outtxt,"===================================================\n");
371 fprintf(outtxt,"================ ESD SUMMARY ==============\n");
372 fprintf(outtxt," \n");
373 fprintf(outtxt," Total number of processed events %d \n", nev);
374 fprintf(outtxt,"\n");
375 fprintf(outtxt,"\n");
376 fprintf(outtxt,"Table 1: \n");
377 fprintf(outtxt," Global Trigger output Low pt High pt \n");
378 fprintf(outtxt," number of Single :\t");
379 fprintf(outtxt,"%i\t%i\t",fSLowpt,fSHighpt);
380 fprintf(outtxt,"\n");
381 fprintf(outtxt," number of UnlikeSign pair :\t");
382 fprintf(outtxt,"%i\t%i\t",fUSLowpt,fUSHighpt);
383 fprintf(outtxt,"\n");
384 fprintf(outtxt," number of LikeSign pair :\t");
385 fprintf(outtxt,"%i\t%i\t",fLSLowpt,fLSHighpt);
386 fprintf(outtxt,"\n");
387 fprintf(outtxt,"===================================================\n");
388 fprintf(outtxt,"\n");
389 fprintf(outtxt,"matching efficiency with the trigger for single tracks = %2d %% \n", effMatch);
393 TCanvas * c1 = new TCanvas("c1", "ESD", 400, 10, 600, 700) ;
396 fhMUONVertex->Draw() ;
399 c1->Print("VertexAndMul.eps") ;
400 TCanvas *c2 = new TCanvas("c2","ESD",400,10,600,700);
406 c2->Print("YandPt.eps") ;
409 //_____________________________________________________________________________
411 AliMUONCheck::CheckKine()
415 AliMUONMCDataInterface diSim(fFileNameSim.Data());
416 if (!diSim.IsValid()) return;
418 Int_t fnevents = diSim.NumberOfEvents();
420 Int_t endOfLoop = fLastEvent+1;
422 if ( fLastEvent == -1 ) endOfLoop = fnevents;
429 for ( Int_t ievent = fFirstEvent; ievent < endOfLoop; ++ievent )
434 AliStack* stack = diSim.Stack(ievent);
435 Int_t npa = stack->GetNprimary();
436 Int_t npb = stack->GetNtrack();
437 printf("Primary particles %i \n",npa);
438 printf("Sec particles %i \n",npb);
439 printf("=================================================================\n") ;
440 printf("Primary particles listing: \n");
441 printf("=================================================================\n") ;
442 for (Int_t i=0; i<npa; ++i)
444 TParticle *p = stack->Particle(i);
446 Int_t pdg=p->GetPdgCode();
453 printf("=================================================================\n") ;
454 printf("=================================================================\n") ;
456 printf("Secondaries particles listing: \n");
457 printf("=================================================================\n") ;
458 for (Int_t i=npa; i<npb; ++i)
460 stack->Particle(i)->Print("");
463 printf("=================================================================\n") ;
464 printf(">>> Event %d, Number of primary particles is %d \n",ievent, npa);
465 printf(">>> Event %d, Number of secondary articles is %d \n",ievent, npb-npa);
466 printf("=================================================================\n");
469 printf(">>> Okay!!! Event %d with at least one muon on primary stack! \n",ievent);
475 printf(">>> Warning!!! Event %d without muon on primary stack! \n",ievent);
481 printf(">>> Okay!!! Event %d with at least two muons on primary stack! \n",ievent);
484 printf("=================================================================\n");
489 printf("=================================================================\n") ;
490 printf(" Total number of processed events %d \n", nev) ;
495 printf("---> WARNING!!! <---\n");
496 printf(" %i events without muon on primary stack \n",nmu);
501 printf("---> OKAY!!! <---\n");
502 printf(" %i events generated with at least one muon on primary stack \n",nonemu);
507 printf("---> OKAY!!! <---\n");
508 printf(" %i events generated with at least two muons on primary stack \n",ndimu);
512 printf("*** Leaving MuonKine() *** \n");
513 printf("**************************************************************** \n");
515 gSystem->cd(foutDir);
516 FILE *outtxt=fopen("output.txt","a");
517 freopen("output.txt","a",outtxt);
518 fprintf(outtxt," \n");
519 fprintf(outtxt,"=================================================================\n");
520 fprintf(outtxt,"================ MUONkine SUMMARY ================\n");
521 fprintf(outtxt,"\n");
522 fprintf(outtxt,"=================================================================\n");
523 fprintf(outtxt," Total number of processed events %d \n", nev) ;
524 fprintf(outtxt," \n");
528 fprintf(outtxt," ---> WARNING!!! <--- \n");
529 fprintf(outtxt," %i events without muon on primary stack \n",nmu);
534 fprintf(outtxt," ---> OKAY!!! <--- \n");
535 fprintf(outtxt," %i events generated with at least one muon on primary stack \n",nonemu);
540 fprintf(outtxt," ---> OKAY!!! <--- \n");
541 fprintf(outtxt," %i events generated with at least two muons on primary stack \n",ndimu);
544 fprintf(outtxt," \n") ;
545 fprintf(outtxt,"*** Leaving MuonKine() *** \n");
546 fprintf(outtxt,"**************************************************************** \n");
550 //_____________________________________________________________________________
552 AliMUONCheck::CheckTrackRef()
554 /// Check TrackRef files
556 AliMUONMCDataInterface diSim(fFileNameSim.Data());
557 if ( !diSim.IsValid() ) return;
559 Int_t flag11=0,flag12=0,flag13=0,flag14=0;
561 TH1F *tof01= new TH1F("tof01","TOF for first tracking plane",100,0.,100);
562 tof01->SetXTitle("tof (ns)");
563 TH1F *tof14= new TH1F("tof14","TOF for MT22",100,0.,100);
564 tof14->SetXTitle("tof (ns)");
567 hitDensity[0] = new TH1F("TR_dhits01","",30,0,300);
568 hitDensity[0]->SetFillColor(3);
569 hitDensity[0]->SetXTitle("R (cm)");
570 hitDensity[1] = new TH1F("TR_dhits10","",30,0,300);
571 hitDensity[1]->SetFillColor(3);
572 hitDensity[1]->SetXTitle("R (cm)");
573 hitDensity[2] = new TH1F("TR_dhits11","",30,0,300);
574 hitDensity[2]->SetFillColor(3);
575 hitDensity[2]->SetXTitle("R (cm)");
576 hitDensity[3] = new TH1F("TR_dhits14","",30,0,300);
577 hitDensity[3]->SetFillColor(3);
578 hitDensity[3]->SetXTitle("R (cm)");
580 Int_t fnevents = diSim.NumberOfEvents();
582 Int_t endOfLoop = fLastEvent+1;
584 if ( fLastEvent == -1 ) endOfLoop = fnevents;
587 Int_t ntot=fLastEvent+1-fFirstEvent;
589 for ( Int_t ievent = fFirstEvent; ievent < endOfLoop; ++ievent )
594 Int_t nentries = diSim.NumberOfTrackRefs(ievent);
596 for ( Int_t l=0; l<nentries; ++l )
598 TClonesArray* trackRefs = diSim.TrackRefs(ievent,l);
599 if (!trackRefs) continue;
601 Int_t nnn = trackRefs->GetEntriesFast();
603 for ( Int_t k=0; k<nnn; ++k )
605 AliTrackReference *tref = static_cast<AliTrackReference*>(trackRefs->UncheckedAt(k));
606 Int_t label = tref->GetTrack();
607 Float_t x = tref->X(); // x-pos of hit
608 Float_t y = tref->Y(); // y-pos
609 Float_t z = tref->Z();
611 Float_t r=TMath::Sqrt(x*x+y*y);
612 Float_t time = tref->GetTime();
614 Float_t wgt=1/(2*10*TMath::Pi()*r)/(ntot);
627 if (z<=-521&& z>=-531&&flag11==0){
629 hitDensity[0]->Fill(r,wgt);
630 tof01->Fill(1000000000*time,1);
634 if (z<=-1432&&z>=-1442&&flag12==0){
636 hitDensity[1]->Fill(r,wgt);
640 if (z<=-1598&& z>=-1608&&flag13==0){
642 hitDensity[2]->Fill(r,wgt);
646 if(z<=-1715&&z>=-1725&&flag14==0){
648 hitDensity[3]->Fill(r,wgt);
649 tof14->Fill(1000000000*time,1);
662 gSystem->cd(foutDir);
663 TCanvas *c6 = new TCanvas("c6","TOF",400,10,600,700);
670 c6->Print("tof_on_trigger.ps");
672 TCanvas *c5 = new TCanvas("c5","TRef:Hits Density",400,10,600,700);
675 hitDensity[0]->Draw();
677 hitDensity[1]->Draw();
679 hitDensity[2]->Draw();
681 hitDensity[3]->Draw();
682 c5->Print("TR_Hit_densities.ps");
683 printf("=================================================================\n") ;
684 printf("================ %s Tref SUMMARY ==============\n", GetName()) ;
686 printf(" Total number of processed events %d \n", nev) ;
687 printf("*** Leaving TRef() *** \n");
688 printf("*************************************************** \n");
691 //_____________________________________________________________________________
693 AliMUONCheck::CheckOccupancy(Bool_t perDetEle) const
695 /// Check occupancy for the first event selected
697 Int_t dEoccupancyBending[14][26];
698 Int_t dEoccupancyNonBending[14][26];
699 Int_t cHoccupancyBending[14];
700 Int_t cHoccupancyNonBending[14];
701 Int_t totaloccupancyBending =0;
702 Int_t totaloccupancyNonBending =0;
704 Int_t dEchannelsBending[14][26];
705 Int_t dEchannelsNonBending[14][26];
706 Int_t cHchannelsBending[14];
707 Int_t cHchannelsNonBending[14];
708 Int_t totalchannelsBending =0;
709 Int_t totalchannelsNonBending =0;
711 Int_t nchambers = AliMUONConstants::NCh();
713 AliMUONDataInterface di(fFileNameSim);
715 AliMUONVDigitStore* digitStore = di.DigitStore(fFirstEvent);
718 for (Int_t ichamber=0; ichamber<nchambers; ++ichamber)
720 cHchannelsBending[ichamber]=0;
721 cHchannelsNonBending[ichamber]=0;
722 cHoccupancyBending[ichamber]=0;
723 cHoccupancyNonBending[ichamber]=0;
725 for (Int_t idetele=0; idetele<26; idetele++)
727 Int_t detele = 100*(ichamber +1)+idetele;
729 if ( AliMpDEManager::IsValidDetElemId(detele) )
733 const AliMpVSegmentation* segbend = AliMpSegmentation::Instance()
734 ->GetMpSegmentation(detele, AliMp::kCath0);
735 const AliMpVSegmentation* segnonbend = AliMpSegmentation::Instance()
736 ->GetMpSegmentation(detele, AliMp::kCath1);
738 if (AliMpDEManager::GetPlaneType(detele, AliMp::kCath0) != AliMp::kBendingPlane )
740 const AliMpVSegmentation* tmp = segbend;
741 segbend = segnonbend;
746 Int_t nchannels = segbend->NofPads();
747 Int_t ndigits = digitStore->GetSize(detele,cathode);
748 dEchannelsBending[ichamber][idetele] = nchannels;
749 dEoccupancyBending[ichamber][idetele] = ndigits;
750 cHchannelsBending[ichamber] += nchannels;
751 cHoccupancyBending[ichamber] += ndigits;
752 totalchannelsBending += nchannels;
753 totaloccupancyBending += ndigits;
755 nchannels = segnonbend->NofPads();
756 ndigits = digitStore->GetSize(detele,1-cathode);
758 dEchannelsNonBending[ichamber][idetele] = nchannels;
759 dEoccupancyBending[ichamber][idetele] = ndigits;
760 cHchannelsNonBending[ichamber] += nchannels;
761 cHoccupancyNonBending[ichamber] += ndigits;
762 totalchannelsNonBending += nchannels;
763 totaloccupancyNonBending += ndigits;
767 printf(">>> Detection element %4d has %5d channels in bending and %5d channels in nonbending \n",
768 detele, dEchannelsBending[ichamber][idetele], dEchannelsNonBending[ichamber][idetele] );
771 printf(">>> Chamber %2d has %6d channels in bending and %6d channels in nonbending \n",
772 ichamber+1, cHchannelsBending[ichamber], cHchannelsNonBending[ichamber]);
774 printf(">>Spectrometer has %7d channels in bending and %7d channels in nonbending \n",
775 totalchannelsBending, totalchannelsNonBending);
779 for ( Int_t ichamber = 0; ichamber < 14; ++ichamber )
781 printf(">>> Chamber %2d nChannels Bending %5d nChannels NonBending %5d \n",
783 cHoccupancyBending[ichamber],
784 cHoccupancyNonBending[ichamber]);
785 printf(">>> Chamber %2d Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
787 100.*((Float_t) cHoccupancyBending[ichamber])/((Float_t) cHchannelsBending[ichamber]),
788 100.*((Float_t) cHoccupancyNonBending[ichamber])/((Float_t) cHchannelsBending[ichamber]) );
792 for(Int_t idetele=0; idetele<26; idetele++)
794 Int_t detele = idetele + 100*(ichamber+1);
795 if ( AliMpDEManager::IsValidDetElemId(detele) )
797 printf(">>> DetEle %4d nChannels Bending %5d nChannels NonBending %5d \n",
798 idetele+100*(ichamber+1),
799 dEoccupancyBending[ichamber][idetele],
800 dEoccupancyNonBending[ichamber][idetele]);
801 printf(">>> DetEle %4d Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
802 idetele+100*(ichamber+1),
803 100.*((Float_t) dEoccupancyBending[ichamber][idetele])/((Float_t) dEchannelsBending[ichamber][idetele]),
804 100.*((Float_t) dEoccupancyNonBending[ichamber][idetele])/((Float_t) dEchannelsBending[ichamber][idetele]));
810 printf(">>> Muon Spectrometer Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
811 100.*((Float_t) totaloccupancyBending)/((Float_t) totalchannelsBending),
812 100.*((Float_t) totaloccupancyNonBending)/((Float_t) totalchannelsNonBending) );
817 //_____________________________________________________________________________
819 AliMUONCheck::CheckRecTracks () const
821 /// Reads and dumps rec tracks objects
823 AliWarning("Reimplement me ? or use AliMUONDumper simply ?");
825 // // waiting for mag field in CDB
826 // AliInfoStream() << "Loading field map...\n";
827 // if (!AliTracker::GetFieldMap()) {
828 // AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
829 // AliTracker::SetFieldMap(field, kFALSE);
833 // fLoader->LoadTracks("READ");
835 // Int_t endOfLoop = fLastEvent+1;
836 // if ( fLastEvent == -1 ) endOfLoop = fRunLoader->GetNumberOfEvents();
838 // for (Int_t ievent=fFirstEvent; ievent<endOfLoop; ievent++) {
839 // fRunLoader->GetEvent(ievent);
841 // fRecData->SetTreeAddress("RT");
842 // fRecData->GetRecTracks();
843 // TClonesArray* recTracks = fRecData->RecTracks();
845 // Int_t nrectracks = (Int_t) recTracks->GetEntriesFast(); //
846 // printf(">>> Event %d, Number of Recconstructed tracks %d \n",ievent, nrectracks);
848 // // Set the magnetic field for track extrapolations
849 // AliMUONTrackExtrap::SetField(AliTracker::GetFieldMap());
851 // // Loop over tracks
852 // for (Int_t iRecTracks = 0; iRecTracks < nrectracks; iRecTracks++) {
853 // AliMUONTrack* recTrack = (AliMUONTrack*) recTracks->At(iRecTracks);
854 // AliMUONTrackParam* trackParam = (AliMUONTrackParam*) (recTrack->GetTrackParamAtHit())->First();
855 // AliMUONTrackExtrap::ExtrapToZ(trackParam,0.);
856 // recTrack->Print("full");
858 // fRecData->ResetRecTracks();
860 // fLoader->UnloadTracks();
863 //_____________________________________________________________________________
864 void AliMUONCheck::SetEventsToCheck(Int_t firstEvent, Int_t lastEvent)
866 /// Set first and last event number to check
868 fFirstEvent = firstEvent;
869 fLastEvent = lastEvent;