X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONDigit.cxx;h=f78a5d46b40311d12b579c657549c7d430fdecf5;hb=3b7f2f857b8c6f05a9eec38d847ffa0a057a9696;hp=c8d8432bf33c9df60ed098f5a75ba61a5c58f124;hpb=a713db22a500de8b3ba697a788794540da4df231;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONDigit.cxx b/MUON/AliMUONDigit.cxx index c8d8432bf33..f78a5d46b40 100644 --- a/MUON/AliMUONDigit.cxx +++ b/MUON/AliMUONDigit.cxx @@ -17,101 +17,404 @@ #include "AliMUONDigit.h" +//----------------------------------------------------------------------------- +/// \class AliMUONDigit +/// A class representing a digit (with MC information if possible) +/// in the MUON spectrometer either in tracking or trigger chambers. +/// +/// A digit holds the signal (proportional to a charge) on a pad +/// (or strip). +/// +/// This class is used to represent either sdigits (purely simulated digit, +/// with no electronic noise whatsoever) or digits (simulated ones but +/// including electronic noise and de-calibration, to closely ressemble real ones). +//----------------------------------------------------------------------------- +/// \cond CLASSIMP ClassImp(AliMUONDigit) +/// \endcond + +//_____________________________________________________________________________ +AliMUONDigit::AliMUONDigit() +: +AliMUONVDigit(), +fDetElemId(0), +fManuId(0), +fManuChannel(0), +fSignal(0.0), +fPadX(-1), +fPadY(-1), +fCathode(0), +fADC(0), +fFlags(0), +fNtracks(0), +fTcharges(0x0), +fTracks(0x0), +fHit(0), +fStatusMap(0) +{ + /// Default constructor +} + +//_____________________________________________________________________________ +AliMUONDigit::AliMUONDigit(Int_t detElemId, Int_t manuId, + Int_t manuChannel, Int_t cathode) +: +AliMUONVDigit(detElemId,manuId,manuChannel,cathode), +fDetElemId(detElemId), +fManuId(manuId), +fManuChannel(manuChannel), +fSignal(0.0), +fPadX(-1), +fPadY(-1), +fCathode(cathode), +fADC(0), +fFlags(0), +fNtracks(0), +fTcharges(0x0), +fTracks(0x0), +fHit(0), +fStatusMap(0) +{ + /// Normal constructor +} + + +//_____________________________________________________________________________ +AliMUONDigit::AliMUONDigit(const AliMUONDigit& digit) +: AliMUONVDigit(), +fDetElemId(0), +fManuId(0), +fManuChannel(0), +fSignal(0.0), +fPadX(-1), +fPadY(-1), +fCathode(0), +fADC(0), +fFlags(0), +fNtracks(0), +fTcharges(0x0), +fTracks(0x0), +fHit(0), +fStatusMap(0) +{ + /// Copy constructor + + (static_cast(digit)).Copy(*this); +} + //_____________________________________________________________________________ - AliMUONDigit::AliMUONDigit(const AliMUONDigit& digits):TObject(digits) +AliMUONDigit::~AliMUONDigit() { -// copy constructor + /// Destructor + + delete[] fTcharges; + delete[] fTracks; +} + +//_____________________________________________________________________________ +void +AliMUONDigit::AddTrack(Int_t trackNumber, Float_t trackCharge) +{ + /// Add 1 track information to the track list we keep. + /// The implementation below is dumb, you've been warned ! + + // First check if track is already there, in which + // case we simply increment its charge. + for ( Int_t i = 0; i < Ntracks(); ++i ) + { + if ( Track(i) == trackNumber ) + { + fTcharges[i] += trackCharge; + return; + } + } + + // Nope. It's a brand new track. Make a new array to get space + // for it, copy the old array into new one, and add the track. + Int_t* newTracks = new Int_t[fNtracks+1]; + Float_t* newTcharges = new Float_t[fNtracks+1]; + + for ( Int_t i = 0; i < fNtracks; ++i ) + { + newTracks[i] = fTracks[i]; + newTcharges[i] = fTcharges[i]; + } + + newTracks[fNtracks] = trackNumber; + newTcharges[fNtracks] = trackCharge; + + delete[] fTracks; + delete[] fTcharges; - fPadX = digits.fPadX; - fPadY = digits.fPadY; - fCathode = digits.fCathode; - fSignal = digits.fSignal; - fPhysics = digits.fPhysics; - fHit = digits.fHit; - fDetElemId = digits.fDetElemId; + fTracks = newTracks; + fTcharges = newTcharges; + + ++fNtracks; +} - for(Int_t i=0; i(obj); + + digit.fDetElemId = fDetElemId; + digit.fManuId = fManuId; + digit.fManuChannel = fManuChannel; + digit.fSignal = fSignal; + + digit.fPadX = fPadX; + digit.fPadY = fPadY; + digit.fCathode = fCathode; + digit.fADC = fADC; + digit.fFlags = fFlags; + + digit.fNtracks = fNtracks; + + delete[] digit.fTcharges; + delete[] digit.fTracks; + + if ( fNtracks ) + { + digit.fTcharges = new Float_t[fNtracks]; + digit.fTracks = new Int_t[fNtracks]; + } + + for ( Int_t i=0; i d->DetElemId()) ? 1 : -1; +//_____________________________________________________________________________ +Int_t +AliMUONDigit::Track(Int_t i) const +{ + /// Return the i-th track number (if i is >=0 and < Ntracks()) or -1. + + if ( i >= 0 && i < fNtracks ) + { + return fTracks[i]; + } + + return -1; +} + +//_____________________________________________________________________________ +Float_t +AliMUONDigit::TrackCharge(Int_t i) const +{ + /// Return the i-th track charge (if i is >=0 and < Ntracjs()) or -1. + + if ( i >= 0 && i < fNtracks ) + { + return fTcharges[i]; + } + + return -1; +} + +//_____________________________________________________________________________ +UInt_t +AliMUONDigit::GetUniqueID() const +{ + /// Return a single integer with id information + return BuildUniqueID(DetElemId(),ManuId(),ManuChannel(),Cathode()); }