]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDBaseDigitizer.cxx
Bringing CMakeLists under svn maintenance
[u/mrichter/AliRoot.git] / FMD / AliFMDBaseDigitizer.cxx
index 36bf25549b796ba25057b8af693d5b7dec665c04..7dcf7e416decb52782dd8768b4ce09d451f01a34 100644 (file)
 #include "AliFMDHit.h"         // ALIFMDHIT_H
 // #include "AliFMDDigit.h"    // ALIFMDDIGIT_H
 #include "AliFMDParameters.h"   // ALIFMDPARAMETERS_H
-// #include <AliRunDigitizer.h>        // ALIRUNDIGITIZER_H
+// #include <AliDigitizationInput.h>   // ALIRUNDIGITIZER_H
 //#include <AliRun.h>          // ALIRUN_H
 #include <AliLoader.h>         // ALILOADER_H
 #include <AliRun.h>            // ALILOADER_H
@@ -231,23 +231,22 @@ AliFMDBaseDigitizer::AliFMDBaseDigitizer()
          AliFMDMap::kMaxSectors, 
          AliFMDMap::kMaxStrips),
     fShapingTime(6),
-    fStoreTrackRefs(kTRUE)
+    fStoreTrackRefs(kTRUE), 
+    fIgnoredLabels(0)
 {
   AliFMDDebug(1, ("Constructed"));
   // Default ctor - don't use it
 }
 
 //____________________________________________________________________
-AliFMDBaseDigitizer::AliFMDBaseDigitizer(AliRunDigitizer* manager
-  : AliDigitizer(manager, "AliFMDBaseDigitizer", "FMD Digitizer base class"), 
+AliFMDBaseDigitizer::AliFMDBaseDigitizer(AliDigitizationInput* digInput
+  : AliDigitizer(digInput, "AliFMDBaseDigitizer", "FMD Digitizer base class"), 
     fFMD(0),
     fRunLoader(0),
-    fEdep(AliFMDMap::kMaxDetectors, 
-         AliFMDMap::kMaxRings, 
-         AliFMDMap::kMaxSectors, 
-         AliFMDMap::kMaxStrips), 
+    fEdep(0),        // nDet==0 means 51200 slots
     fShapingTime(6),
-    fStoreTrackRefs(kTRUE)
+    fStoreTrackRefs(kTRUE), 
+    fIgnoredLabels(0)
 {
   // Normal CTOR
   AliFMDDebug(1, ("Constructed"));
@@ -260,12 +259,10 @@ AliFMDBaseDigitizer::AliFMDBaseDigitizer(const Char_t* name,
   : AliDigitizer(name, title),
     fFMD(0),
     fRunLoader(0),
-    fEdep(AliFMDMap::kMaxDetectors, 
-         AliFMDMap::kMaxRings, 
-         AliFMDMap::kMaxSectors, 
-         AliFMDMap::kMaxStrips),
+    fEdep(0),        // nDet==0 means 51200 slots
     fShapingTime(6),
-    fStoreTrackRefs(kTRUE)
+    fStoreTrackRefs(kTRUE), 
+    fIgnoredLabels(0)
 {
   // Normal CTOR
   AliFMDDebug(1, (" Constructed"));
@@ -278,6 +275,26 @@ AliFMDBaseDigitizer::~AliFMDBaseDigitizer()
   // Destructor
 }
 
+//____________________________________________________________________
+AliFMDBaseDigitizer&
+AliFMDBaseDigitizer::operator=(const AliFMDBaseDigitizer& o) 
+{ 
+  // 
+  // Assignment operator
+  // 
+  // Return:
+  //    Reference to this object 
+  //
+  if (&o == this) return *this; 
+  AliDigitizer::operator=(o);
+  fRunLoader      = o.fRunLoader;
+  fEdep           = o.fEdep;
+  fShapingTime    = o.fShapingTime;
+  fStoreTrackRefs = o.fStoreTrackRefs;
+  fIgnoredLabels  = o.fIgnoredLabels;
+  return *this; 
+}
+
 //____________________________________________________________________
 Bool_t 
 AliFMDBaseDigitizer::Init()
@@ -319,7 +336,15 @@ AliFMDBaseDigitizer::AddContribution(UShort_t detector,
 {
   // Add edep contribution from (detector,ring,sector,strip) to cache
   AliFMDParameters* param = AliFMDParameters::Instance();
-
+  AliFMDDebug(10, ("Adding contribution %7.5f for FMD%d%c[%2d,%3d] "
+                 " from %d tracks (%s)", 
+                 edep,
+                 detector, 
+                 ring,
+                 sector, 
+                 strip, 
+                 nTrack, 
+                 (isPrimary ? "primary" : "secondary")));
   // Check if strip is `dead' 
   if (param->IsDead(detector, ring, sector, strip)) { 
     AliFMDDebug(5, ("FMD%d%c[%2d,%3d] is marked as dead", 
@@ -341,18 +366,25 @@ AliFMDBaseDigitizer::AddContribution(UShort_t detector,
                    detector, ring, sector, strip));
       
   // Sum energy deposition
+  Int_t oldN  =  entry.fN;
   entry.fEdep += edep;
   entry.fN    += nTrack;
   if (isPrimary) entry.fNPrim += nTrack;
   if (fStoreTrackRefs) { 
-    Int_t oldN = entry.fLabels.fN;
-    entry.fLabels.Set(entry.fN);
-    for (Int_t i = 0; i < nTrack; i++) 
+    if (entry.fLabels.fN < entry.fN) {
+      AliFMDDebug(15, ("== New label array size %d, was %d, added %d", 
+                      entry.fN, entry.fLabels.fN, nTrack));
+      entry.fLabels.Set(entry.fN);
+    }
+    for (Int_t i = 0; i < nTrack; i++) {
+      AliFMDDebug(15, ("=> Setting track label # %d", oldN+i));
       entry.fLabels[oldN + i] = tracknos[i];
+      AliFMDDebug(15, ("<= Setting track label # %d", oldN+i));
+    }
   }
-  AliFMDDebug(15, ("Adding contribution %f to FMD%d%c[%2d,%3d] (%f) track %d", 
-                  edep, detector, ring, sector, strip,
-                  entry.fEdep, (nTrack > 0 ? tracknos[0] : -1)));
+  AliFMDDebug(15,("Adding contribution %f to FMD%d%c[%2d,%3d] (%f) track %d", 
+                 edep, detector, ring, sector, strip,
+                 entry.fEdep, (nTrack > 0 ? tracknos[0] : -1)));
   
 }
 
@@ -365,6 +397,7 @@ AliFMDBaseDigitizer::DigitizeHits() const
   // the digits array (AliFMD::fDigits)
   //
   AliFMDDebug(5, ("Will now digitize all the summed signals"));
+  fIgnoredLabels = 0;
   AliFMDGeometry* geometry = AliFMDGeometry::Instance();
   
   TArrayI counts(4);
@@ -444,6 +477,10 @@ AliFMDBaseDigitizer::DigitizeHits() const
       } // Sector 
     } // Ring 
   } // Detector 
+  if (fIgnoredLabels > 0) 
+    AliWarning(Form("%d track labels could not be associated with digits "
+                   "due to limited storage facilities in AliDigit", 
+                   fIgnoredLabels));
 }
 
 //____________________________________________________________________
@@ -551,14 +588,15 @@ AliFMDBaseDigitizer::AddDigit(UShort_t        detector,
                              Short_t         count2, 
                              Short_t         count3,
                              Short_t         count4,
-                             UShort_t        /* ntot */
+                             UShort_t        ntot
                              UShort_t        /* nprim */,
                              const TArrayI&  refs) const
 {
   // Add a digit or summable digit
-  
   fFMD->AddDigitByFields(detector, ring, sector, strip, 
-                        count1, count2, count3, count4, refs);
+                        count1, count2, count3, count4, 
+                        ntot, fStoreTrackRefs ? refs.fArray : 0);
+  if (fStoreTrackRefs && ntot > 3) fIgnoredLabels += ntot - 3;
 }
 
 //____________________________________________________________________
@@ -585,7 +623,7 @@ AliFMDBaseDigitizer::MakeOutputTree(AliLoader* loader)
 
 //____________________________________________________________________
 void
-AliFMDBaseDigitizer::StoreDigits(AliLoader* loader)
+AliFMDBaseDigitizer::StoreDigits(const AliLoader* loader)
 {
   // Write the digits to disk 
   AliFMDDebug(5, ("Storing %d digits",   fFMD->Digits()->GetEntries()));