]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDHitDigitizer.cxx
Adding TOF calib task for calibration of problematic channels
[u/mrichter/AliRoot.git] / FMD / AliFMDHitDigitizer.cxx
index 4087677ec19fcc2b703d0cf6fe73104f298bbc2a..3c4e1b6ae7e39af8d33ccdb722c3f7d46b94e50f 100644 (file)
@@ -211,18 +211,37 @@ ClassImp(AliFMDHitDigitizer)
 
 //____________________________________________________________________
 AliFMDHitDigitizer::AliFMDHitDigitizer(AliFMD* fmd, Output_t  output)
-  : AliFMDBaseDigitizer("FMD", (fOutput == kDigits ? 
+  : AliFMDBaseDigitizer("FMD", (output == kDigits ? 
                                "FMD Hit->Digit digitizer" :
                                "FMD Hit->SDigit digitizer")),
     fOutput(output), 
+    fHoldTime(2e-6),
     fStack(0)
 {
   fFMD = fmd;
 }
 
+//____________________________________________________________________
+AliFMDHitDigitizer& 
+AliFMDHitDigitizer::operator=(const AliFMDHitDigitizer& o) 
+{
+  /** 
+   * Assignment operator
+   *
+   * @param o Object to assign from 
+   * @return Reference to this 
+   */
+  if (&o == this) return *this; 
+  AliFMDBaseDigitizer::operator=(o);
+  fHoldTime    = o.fHoldTime;
+  fOutput      = o.fOutput;
+  fStack       = o.fStack;
+  return *this;
+}
+
 //____________________________________________________________________
 void
-AliFMDHitDigitizer::Exec(Option_t* /*option*/)
+AliFMDHitDigitizer::Digitize(Option_t* /*option*/)
 {
   // Run this digitizer 
   // Get an inititialize parameter manager
@@ -265,7 +284,7 @@ AliFMDHitDigitizer::Exec(Option_t* /*option*/)
     }
     
     // Read in the event
-    AliFMDDebug(5, ("Now digitizing (Hits->%s) event # %d", 
+    AliFMDDebug(1, ("Now digitizing (Hits->%s) event # %d", 
                    (fOutput == kDigits ? "digits" : "sdigits"), event));
     thisLoader->GetEvent(event);
     
@@ -336,6 +355,12 @@ AliFMDHitDigitizer::Exec(Option_t* /*option*/)
 TTree*
 AliFMDHitDigitizer::MakeOutputTree(AliLoader* loader)
 {
+  /** 
+   * Make the output tree using the passed loader 
+   *
+   * @param loader 
+   * @return The generated tree. 
+   */
   if (fOutput == kDigits) 
     return AliFMDBaseDigitizer::MakeOutputTree(loader);
   
@@ -384,11 +409,16 @@ AliFMDHitDigitizer::SumContributions(TBranch* hitsBranch)
       // Get the hit number `hit'
       AliFMDHit* fmdHit = 
        static_cast<AliFMDHit*>(fmdHits->UncheckedAt(hit));
+
+      // Ignore hits that arrive too late
+      if (fmdHit->Time() > fHoldTime) continue;
       
+
       // Check if this is a primary particle
       Bool_t isPrimary = kTRUE;
+      Int_t  trackno   = -1;
       if (fStack) {
-       Int_t      trackno = fmdHit->Track();
+       trackno = fmdHit->Track();
        AliFMDDebug(10, ("Will get track # %d/%d from entry # %d", 
                        trackno, fStack->GetNtrack(), track));
        if (fStack->GetNtrack() < trackno) {
@@ -396,7 +426,9 @@ AliFMDHitDigitizer::SumContributions(TBranch* hitsBranch)
                        trackno, fStack->GetNtrack()));
          continue;
        }
-       
+#if 1
+       isPrimary = fStack->IsPhysicalPrimary(trackno);
+#else // This is our hand-crafted code.  We use the ALICE definition
        TParticle* part    = fStack->Particle(trackno);
        isPrimary          = part->IsPrimary();
        if (!isPrimary) { 
@@ -412,19 +444,31 @@ AliFMDHitDigitizer::SumContributions(TBranch* hitsBranch)
                       (mother ? mother->GetStatusCode() : -1),
                       (isPrimary ? "primary" : "secondary")));
        }
+#endif
       }
     
       // Extract parameters 
+      AliFMDDebug(15,("Adding contribution %7.5f for FMD%d%c[%2d,%3d] "
+                     " for trackno %6d (%s)", 
+                     fmdHit->Edep(),
+                     fmdHit->Detector(), 
+                     fmdHit->Ring(),
+                     fmdHit->Sector(), 
+                     fmdHit->Strip(), 
+                     trackno, 
+                     (isPrimary ? "primary" : "secondary")));
       AddContribution(fmdHit->Detector(),
                      fmdHit->Ring(),
                      fmdHit->Sector(),
                      fmdHit->Strip(),
                      fmdHit->Edep(), 
-                     isPrimary);
+                     isPrimary, 
+                     1, 
+                     &trackno);
     }  // hit loop
   } // track loop
   AliFMDDebug(5, ("Size of cache: %d bytes, read %d bytes", 
-                  sizeof(fEdep), read));
+                 int(sizeof(fEdep)), read));
 }
 
 
@@ -444,22 +488,27 @@ AliFMDHitDigitizer::MakePedestal(UShort_t  detector,
 
 //____________________________________________________________________
 void
-AliFMDHitDigitizer::AddDigit(UShort_t  detector, 
-                            Char_t    ring,
-                            UShort_t  sector, 
-                            UShort_t  strip, 
-                            Float_t   edep, 
-                            UShort_t  count1, 
-                            Short_t   count2, 
-                            Short_t   count3,
-                            Short_t   count4, 
-                            UShort_t  ntotal,
-                            UShort_t  nprim) const
+AliFMDHitDigitizer::AddDigit(UShort_t        detector, 
+                            Char_t          ring,
+                            UShort_t        sector, 
+                            UShort_t        strip, 
+                            Float_t         edep, 
+                            UShort_t        count1, 
+                            Short_t         count2, 
+                            Short_t         count3,
+                            Short_t         count4, 
+                            UShort_t        ntotal,
+                            UShort_t        nprim, 
+                            const TArrayI&  refs) const
 {
   // Add a digit or summable digit
   if (fOutput == kDigits) { 
+    AliFMDDebug(15,("Adding digit for FMD%d%c[%2d,%3d] = (%x,%x,%x,%x)",
+                   detector, ring, sector, strip, 
+                   count1, count2, count3, count4));
     AliFMDBaseDigitizer::AddDigit(detector, ring, sector, strip, 0,
-                                 count1, count2, count3, count4, 0, 0);
+                                 count1, count2, count3, count4, 
+                                 ntotal, nprim, refs);
     return;
   }
   if (edep <= 0) { 
@@ -473,12 +522,14 @@ AliFMDHitDigitizer::AddDigit(UShort_t  detector,
                    detector, ring, sector, strip));
     return;
   }
-  AliFMDDebug(15, ("Adding digit for FMD%d%c[%2d,%3d] = (%x,%x,%x,%x) [%d/%d]",
+  AliFMDDebug(15, ("Adding sdigit for FMD%d%c[%2d,%3d] = "
+                  "(%x,%x,%x,%x) [%d/%d] %d",
                   detector, ring, sector, strip, 
-                  count1, count2, count3, count4, nprim, ntotal));
+                  count1, count2, count3, count4, nprim, ntotal, refs.fN));
   fFMD->AddSDigitByFields(detector, ring, sector, strip, edep,
                          count1, count2, count3, count4, 
-                         ntotal, nprim);
+                         ntotal, nprim, fStoreTrackRefs ? refs.fArray : 0);
+  if (fStoreTrackRefs && nprim > 3) fIgnoredLabels += nprim - 3;
 }
 
 //____________________________________________________________________
@@ -513,8 +564,13 @@ AliFMDHitDigitizer::CheckDigit(AliFMDDigit*    digit,
 
 //____________________________________________________________________
 void
-AliFMDHitDigitizer::StoreDigits(AliLoader* loader)
+AliFMDHitDigitizer::StoreDigits(const AliLoader* loader)
 {
+  /** 
+   * Store the data using the loader 
+   *
+   * @param loader The loader 
+   */
   if (fOutput == kDigits) { 
     AliFMDBaseDigitizer::StoreDigits(loader);
     return;