]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONDigit.cxx
Adding more bins in QA (Alis)
[u/mrichter/AliRoot.git] / MUON / AliMUONDigit.cxx
index 5bb8f12d8b113ba672556c118876912391596314..56907450e1980c7c99e2f7cb21eef1c4a15cec8d 100644 (file)
 
 #include "AliMUONDigit.h"
 
-#include "Riostream.h"
-#include "TString.h"
-
+//-----------------------------------------------------------------------------
 /// \class AliMUONDigit
-/// A class representing a digit in the MUON spectrometer
-/// either in tracking or trigger chambers.
+/// 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 (either real digits or
-/// simulated ones but including electronic noise and de-calibration, to 
-/// closely ressemble real ones).
+/// 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)
@@ -39,127 +37,73 @@ ClassImp(AliMUONDigit)
 //_____________________________________________________________________________
 AliMUONDigit::AliMUONDigit()
 : 
-TObject(),
-fDetElemId(-1),
-fManuId(-1),
-fManuChannel(-1),
-fSignal(0),
+AliMUONVDigit(),
+fDetElemId(0),
+fManuId(0),
+fManuChannel(0),
+fSignal(0.0),
 fPadX(-1),
 fPadY(-1),
-fCathode(-1),
+fCathode(0),
 fADC(0),
 fFlags(0),
 fNtracks(0),
 fTcharges(0x0),
 fTracks(0x0),
-fPhysics(0),
-fHit(0)
+fHit(0),
+fTime(0),
+fStatusMap(0)
 {
   /// Default constructor
 }
 
 //_____________________________________________________________________________
-AliMUONDigit::AliMUONDigit(const AliMUONDigit& digit)
-: TObject(digit),
-fDetElemId(-1),
-fManuId(-1),
-fManuChannel(-1),
-fSignal(0),
+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(-1),
+fCathode(cathode),
 fADC(0),
 fFlags(0),
 fNtracks(0),
 fTcharges(0x0),
 fTracks(0x0),
-fPhysics(0),
-fHit(0)
+fHit(0),
+fTime(0),
+fStatusMap(0)
 {
-  /// Copy constructor
-
-   (static_cast<const AliMUONDigit&>(digit)).Copy(*this);
+  /// Normal constructor
 }
 
 
 //_____________________________________________________________________________
-AliMUONDigit::AliMUONDigit(Int_t *digits)
-: TObject(),
-fDetElemId(-1),
-fManuId(-1),
-fManuChannel(-1),
-fSignal(0),
+AliMUONDigit::AliMUONDigit(const AliMUONDigit& digit)
+: AliMUONVDigit(),
+fDetElemId(0),
+fManuId(0),
+fManuChannel(0),
+fSignal(0.0),
 fPadX(-1),
 fPadY(-1),
-fCathode(-1),
+fCathode(0),
 fADC(0),
 fFlags(0),
 fNtracks(0),
 fTcharges(0x0),
 fTracks(0x0),
-fPhysics(0),
-fHit(0)
-
+fHit(0),
+fTime(0),
+fStatusMap(0)
 {
-  /// Creates a MUON digit object to be updated
-  /// \deprecated
-
-    fPadX        = digits[0];
-    fPadY        = digits[1];
-    fCathode     = digits[2];
-    fSignal      = digits[3];
-    fPhysics     = digits[4];
-    fHit         = digits[5];
-    fDetElemId   = digits[6];
-    fManuId = -1;
-    fManuChannel = -1;
-    fADC=0;
-    fFlags = 0;
-}
+  /// Copy constructor
 
-//_____________________________________________________________________________
-AliMUONDigit::AliMUONDigit(Int_t *tracks, Int_t *charges, Int_t *digits)
-: TObject(),
-fDetElemId(-1),
-fManuId(-1),
-fManuChannel(-1),
-fSignal(0),
-fPadX(-1),
-fPadY(-1),
-fCathode(-1),
-fADC(0),
-fFlags(0),
-fNtracks(0),
-fTcharges(0x0),
-fTracks(0x0),
-fPhysics(0),
-fHit(0)
-{
-  /// Creates a MUON digit object
-  /// \deprecated
-
-    fPadX        = digits[0];
-    fPadY        = digits[1];
-    fCathode     = digits[2];
-    fSignal      = digits[3];
-    fPhysics     = digits[4];
-    fHit         = digits[5];
-    fDetElemId   = digits[6];
-    fManuId = -1;
-    fManuChannel = -1;
-    fADC=0;
-    
-    // For backward compatibility, which assumed 10 tracks.
-    fNtracks = 10;
-    fTcharges = new Int_t[fNtracks];
-    fTracks = new Int_t[fNtracks];
-    
-    for ( Int_t i=0; i<fNtracks; ++i ) 
-    {
-      fTcharges[i]  = charges[i];
-      fTracks[i]    = tracks[i];
-    }
-    fFlags=0;
+   (static_cast<const AliMUONDigit&>(digit)).Copy(*this);
 }
 
 //_____________________________________________________________________________
@@ -173,7 +117,7 @@ AliMUONDigit::~AliMUONDigit()
 
 //_____________________________________________________________________________
 void
-AliMUONDigit::AddTrack(Int_t trackNumber, Int_t trackCharge)
+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 !
@@ -192,7 +136,7 @@ AliMUONDigit::AddTrack(Int_t trackNumber, Int_t trackCharge)
   // 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];
-  Int_t* newTcharges = new Int_t[fNtracks+1];
+  Float_t* newTcharges = new Float_t[fNtracks+1];
   
   for ( Int_t i = 0; i < fNtracks; ++i )
   {
@@ -225,50 +169,6 @@ AliMUONDigit::Clear(Option_t*)
   fNtracks=0;
 }
 
-//_____________________________________________________________________________
-Int_t AliMUONDigit::Compare(const TObject *obj) const
-{
-  /// The order defined below is first by DE, then Signal, then 
-  /// manuId, and then manuChannel, i.e. it should be a total ordering...
-
-  const AliMUONDigit* d = static_cast<const AliMUONDigit*>(obj);
-  
-  if ( DetElemId() > d->DetElemId() ) 
-  {
-    return 1;
-  }
-  else if ( DetElemId() < d->DetElemId() )
-  {
-    return -1;
-  }
-  else
-  {
-    if ( Signal() > d->Signal() )
-    {
-      return 1;
-    }
-    else if ( Signal() < d->Signal() )
-    {
-      return -1;
-    }
-    else
-    {
-      if ( ManuId() < d->ManuId() )
-      {
-        return 1;
-      }
-      else if ( ManuId() > d->ManuId() )
-      {
-        return -1;
-      }
-      else
-      {
-        return ( ManuChannel() < d->ManuChannel() ) ? 1 : -1;
-      }
-    }
-  }
-}
-
 //______________________________________________________________________________
 void 
 AliMUONDigit::Copy(TObject& obj) const
@@ -296,7 +196,7 @@ AliMUONDigit::Copy(TObject& obj) const
   
   if ( fNtracks )
   {
-    digit.fTcharges = new Int_t[fNtracks];
+    digit.fTcharges = new Float_t[fNtracks];
     digit.fTracks = new Int_t[fNtracks];
   }
   
@@ -306,10 +206,12 @@ AliMUONDigit::Copy(TObject& obj) const
     digit.fTracks[i] = fTracks[i];
   }
   
-  digit.fPhysics = fPhysics;
   digit.fHit = fHit;
+  digit.fTime = fTime;
+  digit.fStatusMap = fStatusMap;
 }
 
+
 //_____________________________________________________________________________
 Bool_t
 AliMUONDigit::IsNoiseOnly() const
@@ -328,6 +230,123 @@ AliMUONDigit::IsSaturated() const
   return (fFlags & fgkSaturatedMask );
 }
 
+//_____________________________________________________________________________
+Bool_t
+AliMUONDigit::IsCalibrated() const
+{
+  /// Whether this digit is calibrated or not
+  
+  return (fFlags & fgkCalibratedMask );
+}
+
+//_____________________________________________________________________________
+Bool_t
+AliMUONDigit::IsConverted() const
+{
+  /// Whether this digit is converted or not
+  
+  return (fFlags & fgkConverted);
+}
+
+//_____________________________________________________________________________
+Bool_t
+AliMUONDigit::IsChargeInFC() const
+{
+  /// Whether this digit is converted or not
+  
+  return (fFlags & fgkChargeInFC);
+}
+
+
+//_____________________________________________________________________________
+Bool_t
+AliMUONDigit::IsUsed() const
+{
+  /// Whether this digit is used or not (in a cluster, for instance)
+  
+  return (fFlags & fgkUsedMask );
+}
+
+//_____________________________________________________________________________
+Bool_t
+AliMUONDigit::IsEfficiencyApplied() const
+{
+  /// Whether this digit had efficiency applied or not
+  
+  return (fFlags & fgkEfficiencyMask );
+}
+
+//_____________________________________________________________________________
+void
+AliMUONDigit::Used(Bool_t value)
+{
+  /// Set the Used status of this digit.
+  
+  if ( value )
+  {
+    fFlags |= fgkUsedMask;
+  }
+  else
+  {
+    fFlags &= ~fgkUsedMask;
+  }
+}
+
+//_____________________________________________________________________________
+void
+AliMUONDigit::Calibrated(Bool_t value)
+{
+  /// Set the Calibrated status of this digit.
+  
+  if ( value )
+  {
+    fFlags |= fgkCalibratedMask;
+  }
+  else
+  {
+    fFlags &= ~fgkCalibratedMask;
+  }
+}
+
+//_____________________________________________________________________________
+void
+AliMUONDigit::EfficiencyApplied(Bool_t value)
+{
+  /// Set the EfficiencyApplied status of this digit.
+  
+  if ( value )
+  {
+    fFlags |= fgkEfficiencyMask;
+  }
+  else
+  {
+    fFlags &= ~fgkEfficiencyMask;
+  }
+}
+
+//_____________________________________________________________________________
+Bool_t
+AliMUONDigit::MergeWith(const AliMUONVDigit& src)
+{
+  /// Merge with src.
+  
+  Bool_t check = ( src.DetElemId() == DetElemId() &&
+                   src.PadX() == PadX() &&
+                   src.PadY() == PadY() &&
+                   src.Cathode() == Cathode() );
+  if (!check)
+  {
+    return kFALSE;
+  }
+  
+  AddCharge(src.Charge());
+  for ( Int_t i = 0; i < src.Ntracks(); ++i )
+  {
+    AddTrack(src.Track(i),src.TrackCharge(i));
+  }
+  return kTRUE;
+}
+
 //_____________________________________________________________________________
 void
 AliMUONDigit::NoiseOnly(Bool_t value)
@@ -340,7 +359,7 @@ AliMUONDigit::NoiseOnly(Bool_t value)
   }
   else
   {
-    fFlags ^= fgkNoiseOnlyMask;
+    fFlags &= ~fgkNoiseOnlyMask;
   }
 }
 
@@ -350,8 +369,10 @@ AliMUONDigit::operator=(const AliMUONDigit& digit)
 {
   /// Assignement operator.
 
-  AliMUONDigit a(digit);
-  a.Copy(*this);
+  if ( this != &digit ) 
+  {
+    digit.Copy(*this);
+  }
   return *this;
 }
 
@@ -369,78 +390,50 @@ AliMUONDigit::PatchTracks(Int_t mask)
 
 //_____________________________________________________________________________
 void
-AliMUONDigit::Print(Option_t* opt) const
+AliMUONDigit::Saturated(Bool_t value)
 {
-  /// Dump to screen.
-  /// If opt=="tracks", info on tracks are printed too.
-
-  cout << "<AliMUONDigit>: DetEle " << setw(5) << DetElemId()
-  << " Cath " << setw(2) << Cathode()
-  << " (Ix,Iy)=(" << setw(3) << PadX() << "," << setw(3) << PadY()
-  << ") "
-  << " (Manu,Channel)=(" << setw(4) << ManuId() 
-  << "," << setw(3) << ManuChannel() << ")"
-  << " Signal=" << setw(6) << Signal()
-  << " Physics=" << setw(4) << Physics();
-  if ( IsSaturated() ) 
+  /// Set the saturation status of this digit.
+
+  if ( value )
   {
-    cout << "(S)";
+    fFlags |= fgkSaturatedMask;
   }
   else
   {
-    cout << "   ";
-  }
-  cout << " ADC=" << setw(4) << ADC();
-  cout << " Flags=0x" << setw(4) << hex << setfill('0') << fFlags << dec
-    << setfill(' ');
-  TString options(opt);
-  options.ToLower();
-  if ( options.Contains("tracks") )
-  {
-    cout << " Hit " << setw(3) << Hit();
-    Int_t ntracks = Ntracks();
-    if (ntracks) 
-    {
-      cout << " Tracks : " << setw(2) << ntracks;
-      for ( Int_t i = 0; i < ntracks; ++i )
-      {
-        cout << " Track(" << i << ")=" << setw(3) << Track(i)
-        << " Charge(" << i << ")=" << setw(5) << TrackCharge(i);
-      }
-    }
-    else
-    {
-      cout << " no track info.";
-    }
+    fFlags &= ~fgkSaturatedMask;
   }
-  cout << endl;  
 }
 
 //_____________________________________________________________________________
 void
-AliMUONDigit::Saturated(Bool_t value)
+AliMUONDigit::Converted(Bool_t value)
 {
-  /// Set the saturation status of this digit.
-
+  /// Set the convertion status of this digit.
+  
   if ( value )
   {
-    fFlags |= fgkSaturatedMask;
+    fFlags |= fgkConverted;
   }
   else
   {
-    fFlags ^= fgkSaturatedMask;
+    fFlags &= ~fgkConverted;
   }
 }
 
 //_____________________________________________________________________________
 void
-AliMUONDigit::SetElectronics(Int_t manuId, Int_t manuChannel)
+AliMUONDigit::ChargeInFC(Bool_t value)
 {
-  //
-  //FIXME: should we check that the values are ok here ??
-  //
-  fManuId=manuId;
-  fManuChannel=manuChannel;
+  /// Set the convertion status of this digit.
+  
+  if ( value )
+  {
+    fFlags |= fgkChargeInFC;
+  }
+  else
+  {
+    fFlags &= ~fgkChargeInFC;
+  }
 }
 
 //_____________________________________________________________________________
@@ -458,7 +451,7 @@ AliMUONDigit::Track(Int_t i) const
 }
 
 //_____________________________________________________________________________
-Int_t
+Float_t
 AliMUONDigit::TrackCharge(Int_t i) const
 {
   /// Return the i-th track charge (if i is >=0 and < Ntracjs()) or -1.
@@ -470,3 +463,12 @@ AliMUONDigit::TrackCharge(Int_t i) const
 
   return -1;
 }
+
+//_____________________________________________________________________________
+UInt_t
+AliMUONDigit::GetUniqueID() const
+{
+  /// Return a single integer with id information
+
+  return BuildUniqueID(DetElemId(),ManuId(),ManuChannel(),Cathode());
+}