X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONDigit.cxx;h=d3e7f53c602719aacb08290f11268648b459465e;hb=ef0672a13bee60c63cfdbb49a87b11757a37c510;hp=c08778727c2945c441b6a118f340d22f252f2945;hpb=4b1670dcf59a6bdc98e9805e1049c85143099084;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONDigit.cxx b/MUON/AliMUONDigit.cxx index c08778727c2..d3e7f53c602 100644 --- a/MUON/AliMUONDigit.cxx +++ b/MUON/AliMUONDigit.cxx @@ -13,75 +13,448 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* -$Log$ -Revision 1.5 2001/10/31 16:40:07 jchudoba -change preprocessor constant to C++ constant +/* $Id$ */ -Revision 1.4 2001/10/18 14:44:09 jchudoba -Define constant MAXTRACKS for maximum number of tracks associated with 1 digit +#include "AliMUONDigit.h" -Revision 1.3 2001/01/26 21:26:58 morsch -All data members private. Access functions provided. +/// \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). -Revision 1.2 2000/06/15 07:58:48 morsch -Code from MUON-dev joined +/// \cond CLASSIMP +ClassImp(AliMUONDigit) +/// \endcond -Revision 1.1.2.1 2000/06/09 22:03:22 morsch -Was before in DataStructures.cxx +//_____________________________________________________________________________ +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 +} -#include "AliMUONDigit.h" -#include +//_____________________________________________________________________________ +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); +} -ClassImp(AliMUONDigit) //_____________________________________________________________________________ -AliMUONDigit::AliMUONDigit(Int_t *digits) +AliMUONDigit::~AliMUONDigit() { - // - // Creates a MUON digit object to be updated - // - fPadX = digits[0]; - fPadY = digits[1]; - fCathode = digits[2]; - fSignal = digits[3]; - fPhysics = digits[4]; - fHit = digits[5]; + /// 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; + + fTracks = newTracks; + fTcharges = newTcharges; + + ++fNtracks; +} + //_____________________________________________________________________________ -AliMUONDigit::AliMUONDigit(Int_t *tracks, Int_t *charges, Int_t *digits) +void +AliMUONDigit::Clear(Option_t*) { - // - // Creates a MUON digit object - // - fPadX = digits[0]; - fPadY = digits[1]; - fCathode = digits[2]; - fSignal = digits[3]; - fPhysics = digits[4]; - fHit = digits[5]; + /// Reset this digit, in particular the internal arrays are deleted. - for(Int_t i=0; i(obj); + + if ( DetElemId() > d->DetElemId() ) + { + return 1; + } + else if ( DetElemId() < d->DetElemId() ) + { + return -1; + } + else + { + if ( Charge() > d->Charge() ) + { + return 1; + } + else if ( Charge() < d->Charge() ) + { + return -1; } + else + { + if ( ManuId() < d->ManuId() ) + { + return 1; + } + else if ( ManuId() > d->ManuId() ) + { + return -1; + } + else + { + return ( ManuChannel() < d->ManuChannel() ) ? 1 : -1; + } + } + } } -AliMUONDigit::~AliMUONDigit() +//______________________________________________________________________________ +void +AliMUONDigit::Copy(TObject& obj) const +{ + /// Copy this line to line. + + TObject::Copy(obj); + AliMUONDigit& digit = static_cast(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=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()); +}