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 **************************************************************************/
20 #include <TParticle.h>
22 #include "AliRunLoader.h"
23 #include "AliLoader.h"
25 #include "AliMUONDataInterface.h"
26 #include "AliMUONLocalTrigger.h"
27 #include "AliMUONGlobalTrigger.h"
28 #include "AliMUONHit.h"
29 #include "AliMUONDigit.h"
30 #include "AliMUONRawCluster.h"
31 #include "AliMUONTrack.h"
39 /// \class AliMUONDataInterface
41 /// An easy to use interface to the MUON module data stored in
42 /// TreeK, TreeH, TreeS, TreeD and TreeR
43 /// One can fetch any of the data objects with all the calls to runloader,
44 /// muon loader and AliMUONData done behind the scenes and automatically.
46 /// This interface in not necessarily the fastest way to fetch the data but
47 /// it is the easiest.
48 /// Note: If independant calls to the run loader, muon loader or
49 /// AliMUONData objects are interspersed with calls to the
50 /// AliMUONDataInterface to fetch data, one might need to call the Reset
51 /// method between these method calls at some point to prevent
52 /// AliMUONDataInterface from getting confused.
53 /// This is necessary since this object assumes the state of runloader,
54 /// muon loader nor AliMUONData has not changed between calls.
55 /// If the state has changes then one must call Reset so that
56 /// AliMUONDataInterface refreshes what it knows about the state
57 /// of the loader and AliMUONData objects.
59 /// \deprecated We have to revisit all this AliMUONData stuff anyway,
60 /// and probably make a real AliMUONLoader instead...
62 /// \author Artur Szostak
63 /// email: artur@alice.phy.uct.ac.za
67 ClassImp(AliMUONDataInterface)
70 AliMUONDataInterface::AliMUONDataInterface()
72 fCreatedRunLoader(kFALSE),
73 fCreatedRunLoaderSim(kFALSE),
74 fHitAddressSet(kFALSE),
75 fSDigitAddressSet(kFALSE),
76 fDigitAddressSet(kFALSE),
77 fClusterAddressSet(kFALSE),
78 fTriggerAddressSet(kFALSE),
79 fRecTracksAddressSet(kFALSE),
84 fRecData(0x0, "MUON", "MUON"),
85 fSimData(0x0, "MUON", "MUON"),
87 fFoldername("MUONLoader"),
88 fFoldernameSim("MUONLoaderSim"),
94 /// Set all internal pointers to 0x0 and indices to -1.
99 AliMUONDataInterface::~AliMUONDataInterface()
101 /// Delete the runloader if we created it.
102 /// If the runloader is not to be deleted then call Reset just before
103 /// the destructor is called.
105 if (fRunloader != NULL && fCreatedRunLoader)
108 if (fRunloaderSim != NULL && fCreatedRunLoaderSim)
109 delete fRunloaderSim;
112 void AliMUONDataInterface::Reset()
114 /// Sets all internal pointers to NULL and indices to -1.
115 /// Note: No resources are released!
116 /// Specificaly AliRunLoader is not deleted.
118 fCreatedRunLoader = kFALSE;
119 fCreatedRunLoaderSim = kFALSE;
121 fRunloaderSim = NULL;
128 fHitAddressSet = kFALSE;
129 fSDigitAddressSet = kFALSE;
130 fDigitAddressSet = kFALSE;
131 fClusterAddressSet = kFALSE;
132 fTriggerAddressSet = kFALSE;
133 fRecTracksAddressSet = kFALSE;
137 Bool_t AliMUONDataInterface::UseCurrentRunLoader()
139 /// Tries to fetch the current runloader with AliRunLoader::GetRunLoader. If nothing is
140 /// currently loaded then kFALSE is returned and AliMUONDataInterface is reset.
143 fRunloader = AliRunLoader::GetRunLoader();
144 if (fRunloader == NULL) return kFALSE;
145 // Fetch the current file name, folder name and event number.
146 fFilename = fRunloader->GetFileName();
147 // fFoldername = fRunloader->GetEventFolder()->GetName();
148 fEventnumber = fRunloader->GetEventNumber();
150 if ( ! FetchMuonLoader(fFilename.Data()) )
160 Bool_t AliMUONDataInterface::FetchMuonLoader(TString filename)
162 /// Fetches the muon loader for the given filename/foldername
165 fRecLoader = fRunloader->GetLoader("MUONLoader");
166 if (fRecLoader == NULL)
168 AliError(Form("Could not find the MUON loader in file: %s and folder: %s",
169 (const char*)filename, fFoldername.Data() ));
173 // Need to connect the muon loader to the AliMUONData object,
174 // else class to fRecData will return NULL.
175 fRecData.SetLoader(fRecLoader);
177 fSimLoader = fRunloaderSim->GetLoader("MUONLoader");
178 if (fSimLoader == NULL)
180 AliError(Form("Could not find the MUON loader in file: %s and folder: %s",
181 (const char*)filename, fFoldernameSim.Data()));
185 // Need to connect the muon loader to the AliMUONData object,
186 // else class to fSimData will return NULL.
187 fSimData.SetLoader(fSimLoader);
192 Bool_t AliMUONDataInterface::LoadLoaders(TString filename)
194 /// Load the run and muon loaders from the specified file and folder.
195 /// kTRUE is returned on success and kFALSE on failure.
197 fRunloader = AliRunLoader::Open(filename, "MUONFolder", "READ");
198 if (fRunloader == NULL)
200 AliError(Form("Could not find or load the run loader for the file: %s and folder: MUONFolder",
201 (const char*)filename));
204 fCreatedRunLoader = kTRUE;
206 fRunloaderSim = AliRunLoader::Open(filename, "MUONFolderSim", "READ");
207 if (fRunloaderSim == NULL)
209 AliError(Form("Could not find or load the run loader for the file: %s and folder: MUONFolderSim",
210 (const char*)filename));
213 fCreatedRunLoaderSim = kTRUE;
215 if ( ! FetchMuonLoader(filename) )
218 fRunloaderSim = NULL;
222 fFilename = filename;
223 fEventnumber = -1; // Reset the event number to force the event to be loaded.
228 Bool_t AliMUONDataInterface::FetchLoaders(TString filename)
230 /// Fetch the run loader and muon loader objects from memory if they already exist,
231 /// or from memory if they do not.
232 /// If the currently loaded run loader (if any) is not refering to the file and folder
233 /// we are interested in then it is deleted and reopened with the required file and
236 if (fRunloader == NULL)
238 fRunloader = AliRunLoader::GetRunLoader();
239 if (fRunloader == NULL)
240 return LoadLoaders(filename);
243 if (fRecLoader == NULL)
245 if ( ! FetchMuonLoader(filename) )
253 // Fetch the current file and folder names.
254 fFilename = fRunloader->GetFileName();
255 // fFoldername = fRunloader->GetEventFolder()->GetName();
258 // If filename or foldername are not the same as the ones currently selected then
260 if ( filename.CompareTo(fFilename) != 0 )
263 return LoadLoaders(filename);
269 Bool_t AliMUONDataInterface::FetchEvent(Int_t event)
271 /// Fetch the specified event from the runloader and reset all the track, cathode
272 /// and address flags to force them to be reloaded.
273 /// If a negative event number is specified then the current runloader event
276 if (fEventnumber < 0)
278 fEventnumber = fRunloader->GetEventNumber();
282 fHitAddressSet = kFALSE;
283 fSDigitAddressSet = kFALSE;
284 fDigitAddressSet = kFALSE;
285 fClusterAddressSet = kFALSE;
286 fTriggerAddressSet = kFALSE;
287 fRecTracksAddressSet = kFALSE;
289 if ( event != fEventnumber )
291 if ( fRunloader->GetEvent(event) < 0 ) return kFALSE;
292 fEventnumber = event;
296 fHitAddressSet = kFALSE;
297 fSDigitAddressSet = kFALSE;
298 fDigitAddressSet = kFALSE;
299 fClusterAddressSet = kFALSE;
300 fTriggerAddressSet = kFALSE;
301 fRecTracksAddressSet = kFALSE;
307 Bool_t AliMUONDataInterface::FetchTreeK()
309 /// Fetch the Kine tree from the current run loader.
311 if (fRunloaderSim->TreeK() == NULL)
313 fRunloaderSim->LoadKinematics("READ");
314 if (fRunloaderSim->TreeK() == NULL)
316 AliError("Could not load TreeK.");
324 Bool_t AliMUONDataInterface::FetchTreeH()
326 /// Fetch the Hits tree from the current muon loader.
327 /// Set all the required addresses etc...
329 if (fSimLoader->TreeH() == NULL)
331 fSimLoader->LoadHits("READ");
332 if (fSimLoader->TreeH() == NULL)
334 AliError("Could not load TreeH.");
337 fSimData.SetTreeAddress("H");
338 fHitAddressSet = kTRUE;
340 else if ( ! fHitAddressSet )
342 fSimData.SetTreeAddress("H");
343 fHitAddressSet = kTRUE;
349 Bool_t AliMUONDataInterface::FetchTreeS()
351 /// Fetch the S-Digits tree from the current muon loader.
352 /// Set all the required addresses etc...
354 if (fSimLoader->TreeS() == NULL)
356 fSimLoader->LoadSDigits("READ");
357 if (fSimLoader->TreeS() == NULL)
359 AliError("Could not load TreeS.");
362 fSimData.SetTreeAddress("S");
363 fSDigitAddressSet = kTRUE;
365 else if ( ! fSDigitAddressSet )
367 fSimData.SetTreeAddress("S");
368 fSDigitAddressSet = kTRUE;
374 Bool_t AliMUONDataInterface::FetchTreeD()
376 /// Fetch the digits tree from the current muon loader.
377 /// Set all the required addresses etc...
379 if (fSimLoader->TreeD() == NULL)
381 fSimLoader->LoadDigits("READ");
382 if (fSimLoader->TreeD() == NULL)
384 AliError("Could not load TreeD.");
387 fSimData.SetTreeAddress("D");
388 fDigitAddressSet = kTRUE;
390 else if ( ! fDigitAddressSet )
392 fSimData.SetTreeAddress("D");
393 fDigitAddressSet = kTRUE;
399 Bool_t AliMUONDataInterface::FetchTreeR()
401 /// Fetch the reconstructed objects tree from the current muon loader.
402 /// Note: The addresses must still be set.
404 if (fRecLoader->TreeR() == NULL)
406 fRecLoader->LoadRecPoints("READ");
407 if (fRecLoader->TreeR() == NULL)
409 AliError("Could not load TreeR.");
413 // Need to reset these flags so that the cluster and trigger address
414 // gets reset after this method.
415 fClusterAddressSet = kFALSE;
416 fTriggerAddressSet = kFALSE;
421 Bool_t AliMUONDataInterface::FetchTreeT()
423 /// fetch the reconstructed tracks tree from the current muon loader
424 /// note : the addresses must still be set.
425 if (fRecLoader->TreeT() == NULL)
427 fRecLoader->LoadTracks("READ");
428 if (fRecLoader->TreeT() == NULL)
430 AliError("Could not load TreeT.");
434 // Need to reset these flags so that the rec tracks address
435 // gets reset after this method.
436 fRecTracksAddressSet = kFALSE;
441 Int_t AliMUONDataInterface::NumberOfEvents(TString filename, TString foldername)
443 /// Returns the number of events in the specified file/folder, and -1 on error.
445 if ( ! FetchLoaders(filename) ) return -1;
446 return fRunloader->GetNumberOfEvents();
450 Int_t AliMUONDataInterface::NumberOfParticles(TString filename, TString foldername, Int_t event)
452 /// Returns the number of events in the specified file/folder, and -1 on error.
454 if ( ! FetchLoaders(filename) ) return -1;
455 if ( ! FetchEvent(event) ) return -1;
456 if ( ! FetchTreeK() ) return -1;
457 return (Int_t) fRunloader->TreeK()->GetEntriesFast();
461 TParticle* AliMUONDataInterface::Particle(
462 TString filename, TString foldername, Int_t event, Int_t particle
465 /// Returns the specified particle in the given file, folder and event.
466 /// NULL is returned on error.
468 if ( ! FetchLoaders(filename) ) return NULL;
469 if ( ! FetchEvent(event) ) return NULL;
470 if ( ! FetchTreeK() ) return NULL;
472 TTree* treeK = fRunloader->TreeK();
474 treeK->GetBranch("Particles")->SetAddress(&p);
475 treeK->GetEvent(particle);
480 Int_t AliMUONDataInterface::NumberOfTracks(TString filename, TString foldername, Int_t event)
482 /// Returns the number of tracks in the specified file/folder and event.
483 /// -1 is returned on error.
485 if ( ! FetchLoaders(filename) ) return -1;
486 if ( ! FetchEvent(event) ) return -1;
487 if ( ! FetchTreeH() ) return -1;
488 return fSimData.GetNtracks();
492 Int_t AliMUONDataInterface::NumberOfHits(
493 TString filename, TString foldername, Int_t event, Int_t track
496 /// Returns the number of hits in the specified file/folder, event and track.
497 /// -1 is returned on error.
499 if ( ! FetchLoaders(filename) ) return -1;
500 if ( ! FetchEvent(event) ) return -1;
501 if ( ! FetchTreeH() ) return -1;
503 if (fTrack < 0 || fTrack != track)
505 fSimData.ResetHits();
506 fSimData.GetTrack(track);
509 return fSimData.Hits()->GetEntriesFast();
513 AliMUONHit* AliMUONDataInterface::Hit(
514 TString filename, TString foldername, Int_t event,
515 Int_t track, Int_t hit
518 /// Returns the specified hit in the given file, folder, event and track.
519 /// NULL is returned on error.
521 if ( ! FetchLoaders(filename) ) return NULL;
522 if ( ! FetchEvent(event) ) return NULL;
523 if ( ! FetchTreeH() ) return NULL;
525 if (fTrack < 0 || fTrack != track)
527 fSimData.ResetHits();
528 fSimData.GetTrack(track);
531 return static_cast<AliMUONHit*>( fSimData.Hits()->At(hit) );
535 Int_t AliMUONDataInterface::NumberOfSDigits(
536 TString filename, TString foldername, Int_t event,
537 Int_t chamber, Int_t cathode
540 /// Returns the number of s-digits in the given file, folder, event,
541 /// chamber and cathode. -1 is returned on error.
543 assert( 0 <= chamber && chamber <= 13 );
544 assert( 0 <= cathode && cathode <= 1 );
546 if ( ! FetchLoaders(filename) ) return -1;
547 if ( ! FetchEvent(event) ) return -1;
548 if ( ! FetchTreeS() ) return -1;
550 if ( fSCathode != cathode )
552 fSimData.ResetSDigits();
553 fSimData.GetSDigits();
556 return fSimData.SDigits(chamber)->GetEntriesFast();
560 AliMUONDigit* AliMUONDataInterface::SDigit(
561 TString filename, TString foldername, Int_t event,
562 Int_t chamber, Int_t cathode, Int_t sdigit
565 /// Returns the specified s-digit in the given file, folder, event,
566 /// chamber and cathode. NULL is returned on error.
568 assert( 0 <= chamber && chamber <= 13 );
569 assert( 0 <= cathode && cathode <= 1 );
571 if ( ! FetchLoaders(filename) ) return NULL;
572 if ( ! FetchEvent(event) ) return NULL;
573 if ( ! FetchTreeS() ) return NULL;
575 if ( fSCathode != cathode )
577 fSimData.ResetSDigits();
578 fSimData.GetSDigits();
581 return static_cast<AliMUONDigit*>( fSimData.SDigits(chamber)->At(sdigit) );
585 Int_t AliMUONDataInterface::NumberOfDigits(
586 TString filename, TString foldername, Int_t event,
587 Int_t chamber, Int_t cathode
590 /// Returns the number of digits in the given file, folder, event,
591 /// chamber and cathode. -1 is returned on error.
592 assert( 0 <= chamber && chamber <= 13 );
593 assert( 0 <= cathode && cathode <= 1 );
595 if ( ! FetchLoaders(filename) ) return -1;
596 if ( ! FetchEvent(event) ) return -1;
597 if ( ! FetchTreeD() ) return -1;
599 if ( fCathode != cathode )
601 fSimData.ResetDigits();
602 fSimData.GetDigits();
605 return fSimData.Digits(chamber)->GetEntriesFast();
609 AliMUONDigit* AliMUONDataInterface::Digit(
610 TString filename, TString foldername, Int_t event,
611 Int_t chamber, Int_t cathode, Int_t digit
614 /// Returns the specified digit in the given file, folder, event,
615 /// chamber and cathode. NULL is returned on error.
617 assert( 0 <= chamber && chamber <= 13 );
618 assert( 0 <= cathode && cathode <= 1 );
620 if ( ! FetchLoaders(filename) ) return NULL;
621 if ( ! FetchEvent(event) ) return NULL;
622 if ( ! FetchTreeD() ) return NULL;
624 if ( fCathode != cathode )
626 fSimData.ResetDigits();
627 fSimData.GetDigits();
630 return static_cast<AliMUONDigit*>( fSimData.Digits(chamber)->At(digit) );
634 Int_t AliMUONDataInterface::NumberOfRawClusters(
635 TString filename, TString foldername, Int_t event, Int_t chamber
638 /// Returns the number of raw clusters in the specified file, folder, event and chamber.
639 /// -1 is returned or error.
641 assert( 0 <= chamber && chamber <= 13 );
642 if ( ! FetchLoaders(filename) ) return -1;
643 if ( ! FetchEvent(event) ) return -1;
644 if ( ! FetchTreeR() ) return -1;
645 if ( ! fClusterAddressSet )
647 // If the raw cluster address in TreeR is not set yet then set it now.
648 fRecData.SetTreeAddress("RC");
649 fRecData.ResetRawClusters();
650 fRecData.GetRawClusters();
651 fClusterAddressSet = kTRUE;
653 return fRecData.RawClusters(chamber)->GetEntriesFast();
657 AliMUONRawCluster* AliMUONDataInterface::RawCluster(
658 TString filename, TString foldername, Int_t event,
659 Int_t chamber, Int_t cluster
662 /// Fetch the specified raw cluster from the given file, folder, event and chamber number.
663 /// NULL is returned on error.
665 assert( 0 <= chamber && chamber <= 13 );
666 if ( ! FetchLoaders(filename) ) return NULL;
667 if ( ! FetchEvent(event) ) return NULL;
668 if ( ! FetchTreeR() ) return NULL;
669 if ( ! fClusterAddressSet )
671 // If the raw cluster address in TreeR is not set yet then set it now.
672 fRecData.SetTreeAddress("RC");
673 fRecData.ResetRawClusters();
674 fRecData.GetRawClusters();
675 fClusterAddressSet = kTRUE;
677 return static_cast<AliMUONRawCluster*>( fRecData.RawClusters(chamber)->At(cluster) );
681 Int_t AliMUONDataInterface::NumberOfLocalTriggers(TString filename, TString foldername, Int_t event)
683 /// Return the number of local trigger objects in the specified file, folder and
684 /// event number. -1 is returned on error.
686 if ( ! FetchLoaders(filename) ) return -1;
687 if ( ! FetchEvent(event) ) return -1;
688 if ( ! FetchTreeD() ) return -1;
689 if ( ! fTriggerAddressSet )
691 // If the local trigger address in TreeR is not set yet then set it now.
692 fRecData.SetTreeAddress("GLT");
693 fRecData.ResetTrigger();
694 fRecData.GetTriggerD();
695 fTriggerAddressSet = kTRUE;
697 return fRecData.LocalTrigger()->GetEntriesFast();
701 AliMUONLocalTrigger* AliMUONDataInterface::LocalTrigger(
702 TString filename, TString foldername, Int_t event, Int_t trigger
705 /// Fetch the specified local trigger object from the given file, folder and event number.
706 /// NULL is returned on error.
708 if ( ! FetchLoaders(filename) ) return NULL;
709 if ( ! FetchEvent(event) ) return NULL;
710 if ( ! FetchTreeD() ) return NULL;
711 if ( ! fTriggerAddressSet )
713 // If the local trigger address in TreeR is not set yet then set it now.
714 fRecData.SetTreeAddress("GLT");
715 fRecData.ResetTrigger();
716 fRecData.GetTriggerD();
717 fTriggerAddressSet = kTRUE;
719 return static_cast<AliMUONLocalTrigger*>( fRecData.LocalTrigger()->At(trigger) );
722 Bool_t AliMUONDataInterface::SetFile(TString filename, TString foldername)
724 /// Set the current file and folder from which to fetch data.
725 /// kTRUE is returned if the run and muon loaders were found, else kFALSE.
727 return FetchLoaders(filename);
731 Bool_t AliMUONDataInterface::GetEvent(Int_t event)
733 /// Select the current event from which to fetch data.
734 /// kTRUE is returned if the event was found, else kFALSE is returned.
736 if (fRunloader == NULL)
738 AliError("File not set.");
742 return FetchEvent(event);
746 Int_t AliMUONDataInterface::NumberOfEvents()
748 /// Get the number of events in the currently selected file.
749 /// -1 is returned on error.
751 if (fRunloader == NULL)
753 AliError("File not set.");
756 return fRunloader->GetNumberOfEvents();
760 Int_t AliMUONDataInterface::NumberOfParticles()
762 /// Get the number of particles in the current event.
763 /// -1 is returned on error.
765 if (fRunloader == NULL)
767 AliError("File not set.");
770 if ( ! FetchTreeK() ) return -1;
771 return (Int_t) fRunloader->TreeK()->GetEntriesFast();
775 TParticle* AliMUONDataInterface::Particle(Int_t particle)
777 /// Fetch the specified particle from the current event.
778 /// NULL is returned on error.
780 if (fRunloader == NULL)
782 AliError("File not set.");
785 if (fEventnumber < 0)
787 AliError("Event not chosen.");
790 if ( ! FetchTreeK() ) return NULL;
791 TTree* treeK = fRunloader->TreeK();
793 treeK->GetBranch("Particles")->SetAddress(&p);
794 treeK->GetEvent(particle);
799 Int_t AliMUONDataInterface::NumberOfTracks()
801 /// Get the number of tracks in the current event.
802 /// -1 is returned on error.
804 if (fRunloader == NULL)
806 AliError("File not set.");
809 if (fEventnumber < 0)
811 AliError( "Event not chosen.");
814 if ( ! FetchTreeH() ) return -1;
815 return fSimData.GetNtracks();
819 Int_t AliMUONDataInterface::NumberOfHits(Int_t track)
821 /// Get the number of hits for the given track in the current event.
822 /// -1 is returned on error.
824 if (fRunloader == NULL)
826 AliError("File not set.");
829 if (fEventnumber < 0)
831 AliError("Event not chosen.");
834 if ( ! FetchTreeH() ) return -1;
835 if (fTrack < 0 || fTrack != track)
837 fSimData.ResetHits();
838 fSimData.GetTrack(track);
841 return fSimData.Hits()->GetEntriesFast();
845 AliMUONHit* AliMUONDataInterface::Hit(Int_t track, Int_t hit)
847 /// Fetch the specified hit from the current event.
848 /// NULL is returned on error.
850 if (fRunloader == NULL)
852 AliError("File not set.");
855 if (fEventnumber < 0)
857 AliError("Event not chosen.");
860 if ( ! FetchTreeH() ) return NULL;
861 if (fTrack < 0 || fTrack != track)
863 fSimData.ResetHits();
864 fSimData.GetTrack(track);
867 return static_cast<AliMUONHit*>( fSimData.Hits()->At(hit) );
871 Int_t AliMUONDataInterface::NumberOfSDigits(Int_t chamber, Int_t cathode)
873 /// Get the number of s-digits on the chamber, cathode in the current event.
874 /// -1 is returned on error.
876 assert( 0 <= chamber && chamber <= 13 );
877 assert( 0 <= cathode && cathode <= 1 );
879 if (fRunloader == NULL)
881 AliError("File not set.");
884 if (fEventnumber < 0)
886 AliError("Event not chosen.");
890 if ( ! FetchTreeS() ) return -1;
891 if ( fSCathode != cathode )
893 fSimData.ResetSDigits();
894 fSimData.GetSDigits();
897 return fSimData.SDigits(chamber)->GetEntriesFast();
901 AliMUONDigit* AliMUONDataInterface::SDigit(Int_t chamber, Int_t cathode, Int_t sdigit)
903 /// Fetch the specified s-digits on the chamber, cathode from the current event.
904 /// NULL is returned on error.
906 assert( 0 <= chamber && chamber <= 13 );
907 assert( 0 <= cathode && cathode <= 1 );
909 if (fRunloader == NULL)
911 AliError("File not set.");
914 if (fEventnumber < 0)
916 AliError("Event not chosen.");
920 if ( ! FetchTreeS() ) return NULL;
921 if ( fSCathode != cathode )
923 fSimData.ResetSDigits();
924 fSimData.GetSDigits();
927 return static_cast<AliMUONDigit*>( fSimData.SDigits(chamber)->At(sdigit) );
931 Int_t AliMUONDataInterface::NumberOfDigits(Int_t chamber, Int_t cathode)
933 /// Get the number of digits on the chamber, cathode in the current event.
934 /// -1 is returned on error.
936 assert( 0 <= chamber && chamber <= 13 );
937 assert( 0 <= cathode && cathode <= 1 );
939 if (fRunloader == NULL)
941 AliError("File not set.");
944 if (fEventnumber < 0)
946 AliError("Event not chosen.");
950 if ( ! FetchTreeD() ) return -1;
951 if ( fCathode != cathode )
953 fSimData.ResetDigits();
954 fSimData.GetDigits();
957 return fSimData.Digits(chamber)->GetEntriesFast();
961 AliMUONDigit* AliMUONDataInterface::Digit(Int_t chamber, Int_t cathode, Int_t digit)
963 /// Fetch the specified digits on the chamber, cathode from the current event.
964 /// NULL is returned on error.
966 assert( 0 <= chamber && chamber <= 13 );
967 assert( 0 <= cathode && cathode <= 1 );
969 if (fRunloader == NULL)
971 AliError("File not set.");
974 if (fEventnumber < 0)
976 AliError("Event not chosen.");
980 if ( ! FetchTreeD() ) return NULL;
981 if ( fCathode != cathode )
983 fSimData.ResetDigits();
984 fSimData.GetDigits();
987 return static_cast<AliMUONDigit*>( fSimData.Digits(chamber)->At(digit) );
991 Int_t AliMUONDataInterface::NumberOfRawClusters(Int_t chamber)
993 /// Get the number of raw clusters on the given chamber in the current event.
994 /// -1 is returned on error.
996 assert( 0 <= chamber && chamber <= 13 );
998 if (fRunloader == NULL)
1000 AliError("File not set.");
1003 if (fEventnumber < 0)
1005 AliError("Event not chosen.");
1009 if ( ! FetchTreeR() ) return -1;
1010 if ( ! fClusterAddressSet )
1012 fRecData.SetTreeAddress("RC");
1013 fRecData.ResetRawClusters();
1014 fRecData.GetRawClusters();
1015 fClusterAddressSet = kTRUE;
1017 return fRecData.RawClusters(chamber)->GetEntriesFast();
1021 AliMUONRawCluster* AliMUONDataInterface::RawCluster(Int_t chamber, Int_t cluster)
1023 /// Fetch the specified raw cluster on the given chamber from the current event.
1024 /// NULL is returned on error.
1026 assert( 0 <= chamber && chamber <= 13 );
1028 if (fRunloader == NULL)
1030 AliError("File not set.");
1033 if (fEventnumber < 0)
1035 AliError("Event not chosen.");
1039 if ( ! FetchTreeR() ) return NULL;
1040 if ( ! fClusterAddressSet )
1042 fRecData.SetTreeAddress("RC");
1043 fRecData.ResetRawClusters();
1044 fRecData.GetRawClusters();
1045 fClusterAddressSet = kTRUE;
1047 return static_cast<AliMUONRawCluster*>( fRecData.RawClusters(chamber)->At(cluster) );
1051 Int_t AliMUONDataInterface::NumberOfLocalTriggers()
1053 /// Get the number of local trigger objects in the current event.
1054 /// -1 is returned on error.
1056 if (fRunloader == NULL)
1058 AliError("File not set.");
1061 if (fEventnumber < 0)
1063 AliError("Event not chosen.");
1067 if ( ! FetchTreeD() ) return -1;
1068 if ( ! fTriggerAddressSet )
1070 fRecData.SetTreeAddress("GLT");
1071 fRecData.ResetTrigger();
1072 fRecData.GetTriggerD();
1073 fTriggerAddressSet = kTRUE;
1075 return fRecData.LocalTrigger()->GetEntriesFast();
1079 AliMUONLocalTrigger* AliMUONDataInterface::LocalTrigger(Int_t trigger)
1081 /// Fetch the specified local trigger object from the current event.
1082 /// NULL is returned on error.
1084 if (fRunloader == NULL)
1086 AliError("File not set.");
1089 if (fEventnumber < 0)
1091 AliError( "Event not chosen.");
1095 if ( ! FetchTreeD() ) return NULL;
1096 if ( ! fTriggerAddressSet )
1098 fRecData.SetTreeAddress("GLT");
1099 fRecData.ResetTrigger();
1100 fRecData.GetTriggerD();
1101 fTriggerAddressSet = kTRUE;
1103 return static_cast<AliMUONLocalTrigger*>( fRecData.LocalTrigger()->At(trigger) );
1106 Int_t AliMUONDataInterface::NumberOfGlobalTriggers()
1108 /// Get the number of local trigger objects in the current event.
1109 /// -1 is returned on error.
1111 if (fRunloader == NULL)
1113 AliError("File not set.");
1116 if (fEventnumber < 0)
1118 AliError("Event not chosen.");
1122 if ( ! FetchTreeD() ) return -1;
1123 if ( ! fTriggerAddressSet )
1125 fRecData.SetTreeAddress("GLT");
1126 fRecData.ResetTrigger();
1127 fRecData.GetTriggerD();
1128 fTriggerAddressSet = kTRUE;
1130 return fRecData.GlobalTrigger()->GetEntriesFast();
1133 AliMUONGlobalTrigger* AliMUONDataInterface::GlobalTrigger(Int_t trigger)
1135 /// Fetch the specified local trigger object from the current event.
1136 /// NULL is returned on error.
1138 if (fRunloader == NULL)
1140 AliError("File not set.");
1143 if (fEventnumber < 0)
1145 AliError( "Event not chosen.");
1149 if ( ! FetchTreeD() ) return NULL;
1150 if ( ! fTriggerAddressSet )
1152 fRecData.SetTreeAddress("GLT");
1153 fRecData.ResetTrigger();
1154 fRecData.GetTriggerD();
1155 fTriggerAddressSet = kTRUE;
1157 return static_cast<AliMUONGlobalTrigger*>( fRecData.GlobalTrigger()->At(trigger) );
1160 Int_t AliMUONDataInterface::NumberOfRecTracks()
1162 /// Fetch the number of reconstructed tracks from the current event.
1163 /// NULL is returned on error.
1165 if (fRunloader == NULL)
1167 AliError("File not set.");
1170 if (fEventnumber < 0)
1172 AliError( "Event not chosen.");
1176 if ( ! FetchTreeT() ) return -1;
1177 if ( ! fRecTracksAddressSet )
1179 fRecData.SetTreeAddress("RT");
1180 fRecData.ResetRecTracks();
1181 fRecData.GetRecTracks();
1182 fRecTracksAddressSet = kTRUE;
1184 return fRecData.RecTracks()->GetEntriesFast();
1187 AliMUONTrack* AliMUONDataInterface::RecTrack(Int_t rectrack)
1189 /// Fetch the specified reconstructed track object from the current event.
1190 /// NULL is returned on error.
1192 if (fRunloader == NULL)
1194 AliError("File not set.");
1197 if (fEventnumber < 0)
1199 AliError( "Event not chosen.");
1203 if ( ! FetchTreeT() ) return NULL;
1204 if ( ! fRecTracksAddressSet )
1206 fRecData.SetTreeAddress("RT");
1207 fRecData.ResetRecTracks();
1208 fRecData.GetRecTracks();
1209 fRecTracksAddressSet = kTRUE;
1211 return static_cast<AliMUONTrack*>( fRecData.RecTracks()->At(rectrack) );
1212 // return (AliMUONTrack*)(fRecData.RecTracks()->At(rectrack));