ROOT logo
/**************************************************************************
 * Copyright(c) 2004, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
/* $Id: AliFMDHitDigitizer.cxx 28055 2008-08-18 00:33:20Z cholm $ */
/** @file    AliFMDHitDigitizer.cxx
    @author  Christian Holm Christensen <cholm@nbi.dk>
    @date    Mon Mar 27 12:38:26 2006
    @brief   FMD Digitizers implementation
    @ingroup FMD_sim
*/
//////////////////////////////////////////////////////////////////////////////
//
//  This class contains the procedures simulation ADC  signal for the
//  Forward Multiplicity detector  : Hits->Digits
// 
//  Digits consists of
//   - Detector #
//   - Ring ID                                             
//   - Sector #     
//   - Strip #
//   - ADC count in this channel                                  
//
// As the Digits and SDigits have so much in common, the classes
// AliFMDHitDigitizer and AliFMDSDigitizer are implemented via a base
// class AliFMDBaseDigitizer.
//
//                 +---------------------+
//                 | AliFMDBaseDigitizer |
//                 +---------------------+
//                           ^
//                           |
//                +----------+---------+
//                |                    |
//      +-----------------+     +------------------+
//      | AliFMDHitDigitizer |	| AliFMDSDigitizer |
//      +-----------------+	+------------------+
//
// These classes has several paramters: 
//
//     fPedestal
//     fPedestalWidth
//         (Only AliFMDHitDigitizer)
//         Mean and width of the pedestal.  The pedestal is simulated
//         by a Guassian, but derived classes my override MakePedestal
//         to simulate it differently (or pick it up from a database).
//
//     fVA1MipRange
//         The dymamic MIP range of the VA1_ALICE pre-amplifier chip 
//
//     fAltroChannelSize
//         The largest number plus one that can be stored in one
//         channel in one time step in the ALTRO ADC chip. 
//
//     fSampleRate
//         How many times the ALTRO ADC chip samples the VA1_ALICE
//         pre-amplifier signal.   The VA1_ALICE chip is read-out at
//         10MHz, while it's possible to drive the ALTRO chip at
//         25MHz.  That means, that the ALTRO chip can have time to
//         sample each VA1_ALICE signal up to 2 times.  Although it's
//         not certain this feature will be used in the production,
//         we'd like have the option, and so it should be reflected in
//         the code.
//
// These parameters are fetched from OCDB via the mananger AliFMDParameters.
//
// The shaping function of the VA1_ALICE is generally given by 
//
//      f(x) = A(1 - exp(-Bx))
//
// where A is the total charge collected in the pre-amp., and B is a
// paramter that depends on the shaping time of the VA1_ALICE circut.
// 
// When simulating the shaping function of the VA1_ALICe
// pre-amp. chip, we have to take into account, that the shaping
// function depends on the previous value of read from the pre-amp. 
//
// That results in the following algorithm:
//
//    last = 0;
//    FOR charge IN pre-amp. charge train DO 
//      IF last < charge THEN 
//        f(t) = (charge - last) * (1 - exp(-B * t)) + last
//      ELSE
//        f(t) = (last - charge) * exp(-B * t) + charge)
//      ENDIF
//      FOR i IN # samples DO 
//        adc_i = f(i / (# samples))
//      DONE
//      last = charge
//   DONE
//
// Here, 
//
//   pre-amp. charge train 
//       is a series of 128 charges read from the VA1_ALICE chip
//
//   # samples
//       is the number of times the ALTRO ADC samples each of the 128
//       charges from the pre-amp. 
//
// Where Q is the total charge collected by the VA1_ALICE
// pre-amplifier.   Q is then given by 
//
//           E S 
//      Q =  - -
//           e R
//
// where E is the total energy deposited in a silicon strip, R is the
// dynamic range of the VA1_ALICE pre-amp (fVA1MipRange), e is the
// energy deposited by a single MIP, and S ALTRO channel size in each
// time step (fAltroChannelSize).  
//
// The energy deposited per MIP is given by 
//
//      e = M * rho * w 
//
// where M is the universal number 1.664, rho is the density of
// silicon, and w is the depth of the silicon sensor. 
//
// The final ADC count is given by 
//
//      C' = C + P
//
// where P is the (randomized) pedestal (see MakePedestal)
//
// This class uses the class template AliFMDMap<Type> to make an
// internal cache of the energy deposted of the hits.  The class
// template is instantasized as 
//
//  typedef AliFMDMap<std::pair<Float_t, UShort_t> > AliFMDEdepMap;
//
// The first member of the values is the summed energy deposition in a
// given strip, while the second member of the values is the number of
// hits in a given strip.  Using the second member, it's possible to
// do some checks on just how many times a strip got hit, and what
// kind of error we get in our reconstructed hits.  Note, that this
// information is currently not written to the digits tree.  I think a
// QA (Quality Assurance) digit tree is better suited for that task.
// However, the information is there to be used in the future. 
//
//
// Latest changes by Christian Holm Christensen
//
//////////////////////////////////////////////////////////////////////////////

//      /1
//      |           A(-1 + B + exp(-B))
//      | f(x) dx = ------------------- = 1
//      |                    B
//      / 0
//
// and B is the a parameter defined by the shaping time (fShapingTime).  
//
// Solving the above equation, for A gives
//
//                 B
//      A = ----------------
//          -1 + B + exp(-B)
//
// So, if we define the function g: [0,1] -> [0:1] by 
//
//               / v
//               |              Bu + exp(-Bu) - Bv - exp(-Bv) 
//      g(u,v) = | f(x) dx = -A -----------------------------
//               |                            B
//               / u
//
// we can evaluate the ALTRO sample of the VA1_ALICE pre-amp between
// any two times (u, v), by 
//       
//
//                                B	    Bu + exp(-Bu) - Bv - exp(-Bv)
//      C = Q g(u,v) = - Q ---------------- -----------------------------
//		           -1 + B + exp(-B)              B	            
//
//               Bu + exp(-Bu) - Bv - exp(-Bv) 
//        = -  Q -----------------------------
//                    -1 + B + exp(-B)
//

#include <TTree.h>		// ROOT_TTree
#include "AliFMDDebug.h"        // Better debug macros
#include "AliFMDHitDigitizer.h"	// ALIFMDDIGITIZER_H
#include "AliFMD.h"		// ALIFMD_H
#include "AliFMDDigit.h"	// ALIFMDDIGIT_H
#include "AliFMDParameters.h"   // ALIFMDPARAMETERS_H
#include <AliRun.h>		// ALIRUN_H
#include <AliLoader.h>		// ALILOADER_H
#include <AliRunLoader.h>	// ALIRUNLOADER_H
#include <AliFMDHit.h>
#include <AliStack.h>
#include <TFile.h>
#include <TParticle.h>

//====================================================================
ClassImp(AliFMDHitDigitizer)    
#if 0
;
#endif

//____________________________________________________________________
AliFMDHitDigitizer::AliFMDHitDigitizer(AliFMD* fmd, Output_t  output)
  : 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::Digitize(Option_t* /*option*/)
{
  // Run this digitizer 
  // Get an inititialize parameter manager
  AliFMDParameters::Instance()->Init();
  if (AliLog::GetDebugLevel("FMD","") >= 10) 
    AliFMDParameters::Instance()->Print("ALL");

  // Get loader, and ask it to read in the hits 
  AliLoader* loader = fFMD->GetLoader();
  if (!loader) { 
    AliError("Failed to get loader from detector object");
    return;
  }
  loader->LoadHits("READ");
  
  // Get the run loader 
  AliRunLoader* runLoader = loader->GetRunLoader();
  if (!runLoader) {
    AliError("Failed to get run loader from loader");
    return;
  }
  
  // Now loop over events
  Int_t nEvents = runLoader->GetNumberOfEvents();
  for (Int_t event = 0; event < nEvents; event++) { 
    // Get the current event folder. 
    TFolder* folder = loader->GetEventFolder();
    if (!folder) { 
      AliError("Failed to get event folder from loader");
      return;
    }

    // Get the run-loader of this event. 
    const char* loaderName = AliRunLoader::GetRunLoaderName();
    AliRunLoader* thisLoader = 
      static_cast<AliRunLoader*>(folder->FindObject(loaderName));
    if (!thisLoader) { 
      AliError(Form("Failed to get loader '%s' from event folder", loaderName));
      return;
    }
    
    // Read in the event
    AliFMDDebug(1, ("Now digitizing (Hits->%s) event # %d", 
		    (fOutput == kDigits ? "digits" : "sdigits"), event));
    thisLoader->GetEvent(event);
    
    // Load kinematics to get primary information for SDigits
    fStack = 0;
    if (fOutput == kSDigits) {
      if (thisLoader->LoadKinematics("READ")) {
	AliError("Failed to get kinematics from event loader");
	return;
      }
      AliFMDDebug(5, ("Loading stack of kinematics"));
      fStack = thisLoader->Stack();
    }

    // Check that we have the hits 
    if (!loader->TreeH() && loader->LoadHits()) {
      AliError("Failed to load hits");
      return;
    }
    TTree*   hitsTree = loader->TreeH();
    TBranch* hitsBranch = hitsTree->GetBranch(fFMD->GetName());
    if (!hitsBranch) { 
      AliError("Failed to get hits branch in tree");
      return;
    }
    // Check that we can make the output digits - This must come
    // before AliFMD::SetBranchAddress
    TTree* outTree = MakeOutputTree(loader);
    if (!outTree) { 
      AliError("Failed to get output tree");
      return;
    }
    AliFMDDebug(5, ("Output tree name for %s is '%s'", 
		    (fOutput == kDigits ? "digits" : "sdigits"),
		    outTree->GetName()));
    if (AliLog::GetDebugLevel("FMD","") >= 5) {
      TFile* file = outTree->GetCurrentFile();
      if (!file) {
	AliWarning("Output tree has no file!");
      }
      else { 
	AliFMDDebug(5, ("Output tree file %s content:", file->GetName()));
	file->ls();
      }
    }

    // Set-up the branch addresses 
    fFMD->SetTreeAddress();
    
    // Now sum all contributions in cache 
    SumContributions(hitsBranch);
    loader->UnloadHits();

    // And now digitize the hits 
    DigitizeHits();
    
    // Write digits to tree
    Int_t write = outTree->Fill();
    AliFMDDebug(5, ("Wrote %d bytes to digit tree", write));

    // Store the digits
    StoreDigits(loader);

  }  
}

//____________________________________________________________________
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);
  
  AliFMDDebug(5, ("Making sdigits tree"));
  loader->LoadSDigits("UPDATE"); // RECREATE");
  TTree* out = loader->TreeS();
  if (!out) loader->MakeTree("S");
  out = loader->TreeS(); 
  if (out) { 
    out->Reset();
    fFMD->MakeBranch("S");
  }
  return out;
}


//____________________________________________________________________
void
AliFMDHitDigitizer::SumContributions(TBranch* hitsBranch) 
{
  // Sum energy deposited contributions from each hit in a cache
  // (fEdep).  
  
  // Clear array of deposited energies 
  fEdep.Reset();
  
  // Get a list of hits from the FMD manager 
  AliFMDDebug(5, ("Get array of FMD hits"));
  TClonesArray *fmdHits = fFMD->Hits();
  

  // Get number of entries in the tree 
  AliFMDDebug(5, ("Get # of tracks"));
  Int_t ntracks  = Int_t(hitsBranch->GetEntries());
  AliFMDDebug(5, ("We got %d tracks", ntracks));

  Int_t read = 0;
  // Loop over the tracks in the 
  for (Int_t track = 0; track < ntracks; track++)  {
    // Read in entry number `track' 
    read += hitsBranch->GetEntry(track);

    // Get the number of hits 
    Int_t nhits = fmdHits->GetEntries ();
    for (Int_t hit = 0; hit < nhits; hit++) {
      // 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) {
	trackno = fmdHit->Track();
	AliFMDDebug(10, ("Will get track # %d/%d from entry # %d", 
			trackno, fStack->GetNtrack(), track));
	if (fStack->GetNtrack() < trackno) {
	  AliError(Form("Track number %d/%d out of bounds", 
			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) { 
	  // Extended testing of mother status - this is for Pythia6.
	  Int_t      mother1   = part->GetFirstMother();
	  TParticle* mother    = fStack->Particle(mother1);
	  if (!mother || mother->GetStatusCode() > 1)
	    isPrimary = kTRUE;
	  AliFMDDebug(15,
		      ("Track %d secondary, mother: %d - %s - status %d: %s", 
		       trackno, mother1, 
		       (mother ? "found"                 : "not found"), 
		       (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, 
		      1, 
		      &trackno);
    }  // hit loop
  } // track loop
  AliFMDDebug(5, ("Size of cache: %d bytes, read %d bytes", 
		  int(sizeof(fEdep)), read));
}


//____________________________________________________________________
UShort_t
AliFMDHitDigitizer::MakePedestal(UShort_t  detector, 
				 Char_t    ring, 
				 UShort_t  sector, 
				 UShort_t  strip) const 
{
  // Make a pedestal 
  if (fOutput == kSDigits) return 0;
  return AliFMDBaseDigitizer::MakePedestal(detector, ring, sector, strip);
}



//____________________________________________________________________
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 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, 
				  ntotal, nprim, refs);
    return;
  }
  if (edep <= 0) { 
    AliFMDDebug(15, ("Digit edep = %f <= 0 for FMD%d%c[%2d,%3d]", 
		    edep, detector, ring, sector, strip));
    return;
  }
  if (count1 == 0 && count2 <= 0 && count3 <= 0 && count4 <= 0) {
    AliFMDDebug(15, ("Digit counts = (%x,%x,%x,%x) <= 0 for FMD%d%c[%2d,%3d]", 
		    count1, count2, count3, count4, 
		    detector, ring, sector, strip));
    return;
  }
  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, refs.fN));
  fFMD->AddSDigitByFields(detector, ring, sector, strip, edep,
			  count1, count2, count3, count4, 
			  ntotal, nprim, fStoreTrackRefs ? refs.fArray : 0);
  if (fStoreTrackRefs && nprim > 3) fIgnoredLabels += nprim - 3;
}

//____________________________________________________________________
void
AliFMDHitDigitizer::CheckDigit(AliFMDDigit*    digit,
			       UShort_t        nhits,
			       const TArrayI&  counts) 
{
  // Check that digit is consistent
  AliFMDParameters* param = AliFMDParameters::Instance();
  UShort_t          det   = digit->Detector();
  Char_t            ring  = digit->Ring();
  UShort_t          sec   = digit->Sector();
  UShort_t          str   = digit->Strip();
  Float_t           mean  = param->GetPedestal(det,ring,sec,str);
  Float_t           width = param->GetPedestalWidth(det,ring,sec,str);
  UShort_t          range = param->GetVA1MipRange();
  UShort_t          size  = param->GetAltroChannelSize();
  Int_t             integral = counts[0];
  if (counts[1] >= 0) integral += counts[1];
  if (counts[2] >= 0) integral += counts[2];
  if (counts[3] >= 0) integral += counts[3];
  integral -= Int_t(mean + 2 * width);
  if (integral < 0) integral = 0;
  
  Float_t convF = Float_t(range) / size;
  Float_t mips  = integral * convF;
  if (mips > Float_t(nhits) + .5 || mips < Float_t(nhits) - .5) 
    Warning("CheckDigit", "Digit -> %4.2f MIPS != %d +/- .5 hits", 
	    mips, nhits);
}

//____________________________________________________________________
void
AliFMDHitDigitizer::StoreDigits(const AliLoader* loader)
{
  /** 
   * Store the data using the loader 
   *
   * @param loader The loader 
   */
  if (fOutput == kDigits) { 
    AliFMDBaseDigitizer::StoreDigits(loader);
    return;
  }
  AliFMDDebug(5, ("Storing %d sdigits",   fFMD->SDigits()->GetEntries()));
  // Write the digits to disk 
  loader->WriteSDigits("OVERWRITE");
  loader->UnloadSDigits();
  // Reset the digits in the AliFMD object 
  fFMD->ResetSDigits();
}


//____________________________________________________________________
//
// EOF
// 




 AliFMDHitDigitizer.cxx:1
 AliFMDHitDigitizer.cxx:2
 AliFMDHitDigitizer.cxx:3
 AliFMDHitDigitizer.cxx:4
 AliFMDHitDigitizer.cxx:5
 AliFMDHitDigitizer.cxx:6
 AliFMDHitDigitizer.cxx:7
 AliFMDHitDigitizer.cxx:8
 AliFMDHitDigitizer.cxx:9
 AliFMDHitDigitizer.cxx:10
 AliFMDHitDigitizer.cxx:11
 AliFMDHitDigitizer.cxx:12
 AliFMDHitDigitizer.cxx:13
 AliFMDHitDigitizer.cxx:14
 AliFMDHitDigitizer.cxx:15
 AliFMDHitDigitizer.cxx:16
 AliFMDHitDigitizer.cxx:17
 AliFMDHitDigitizer.cxx:18
 AliFMDHitDigitizer.cxx:19
 AliFMDHitDigitizer.cxx:20
 AliFMDHitDigitizer.cxx:21
 AliFMDHitDigitizer.cxx:22
 AliFMDHitDigitizer.cxx:23
 AliFMDHitDigitizer.cxx:24
 AliFMDHitDigitizer.cxx:25
 AliFMDHitDigitizer.cxx:26
 AliFMDHitDigitizer.cxx:27
 AliFMDHitDigitizer.cxx:28
 AliFMDHitDigitizer.cxx:29
 AliFMDHitDigitizer.cxx:30
 AliFMDHitDigitizer.cxx:31
 AliFMDHitDigitizer.cxx:32
 AliFMDHitDigitizer.cxx:33
 AliFMDHitDigitizer.cxx:34
 AliFMDHitDigitizer.cxx:35
 AliFMDHitDigitizer.cxx:36
 AliFMDHitDigitizer.cxx:37
 AliFMDHitDigitizer.cxx:38
 AliFMDHitDigitizer.cxx:39
 AliFMDHitDigitizer.cxx:40
 AliFMDHitDigitizer.cxx:41
 AliFMDHitDigitizer.cxx:42
 AliFMDHitDigitizer.cxx:43
 AliFMDHitDigitizer.cxx:44
 AliFMDHitDigitizer.cxx:45
 AliFMDHitDigitizer.cxx:46
 AliFMDHitDigitizer.cxx:47
 AliFMDHitDigitizer.cxx:48
 AliFMDHitDigitizer.cxx:49
 AliFMDHitDigitizer.cxx:50
 AliFMDHitDigitizer.cxx:51
 AliFMDHitDigitizer.cxx:52
 AliFMDHitDigitizer.cxx:53
 AliFMDHitDigitizer.cxx:54
 AliFMDHitDigitizer.cxx:55
 AliFMDHitDigitizer.cxx:56
 AliFMDHitDigitizer.cxx:57
 AliFMDHitDigitizer.cxx:58
 AliFMDHitDigitizer.cxx:59
 AliFMDHitDigitizer.cxx:60
 AliFMDHitDigitizer.cxx:61
 AliFMDHitDigitizer.cxx:62
 AliFMDHitDigitizer.cxx:63
 AliFMDHitDigitizer.cxx:64
 AliFMDHitDigitizer.cxx:65
 AliFMDHitDigitizer.cxx:66
 AliFMDHitDigitizer.cxx:67
 AliFMDHitDigitizer.cxx:68
 AliFMDHitDigitizer.cxx:69
 AliFMDHitDigitizer.cxx:70
 AliFMDHitDigitizer.cxx:71
 AliFMDHitDigitizer.cxx:72
 AliFMDHitDigitizer.cxx:73
 AliFMDHitDigitizer.cxx:74
 AliFMDHitDigitizer.cxx:75
 AliFMDHitDigitizer.cxx:76
 AliFMDHitDigitizer.cxx:77
 AliFMDHitDigitizer.cxx:78
 AliFMDHitDigitizer.cxx:79
 AliFMDHitDigitizer.cxx:80
 AliFMDHitDigitizer.cxx:81
 AliFMDHitDigitizer.cxx:82
 AliFMDHitDigitizer.cxx:83
 AliFMDHitDigitizer.cxx:84
 AliFMDHitDigitizer.cxx:85
 AliFMDHitDigitizer.cxx:86
 AliFMDHitDigitizer.cxx:87
 AliFMDHitDigitizer.cxx:88
 AliFMDHitDigitizer.cxx:89
 AliFMDHitDigitizer.cxx:90
 AliFMDHitDigitizer.cxx:91
 AliFMDHitDigitizer.cxx:92
 AliFMDHitDigitizer.cxx:93
 AliFMDHitDigitizer.cxx:94
 AliFMDHitDigitizer.cxx:95
 AliFMDHitDigitizer.cxx:96
 AliFMDHitDigitizer.cxx:97
 AliFMDHitDigitizer.cxx:98
 AliFMDHitDigitizer.cxx:99
 AliFMDHitDigitizer.cxx:100
 AliFMDHitDigitizer.cxx:101
 AliFMDHitDigitizer.cxx:102
 AliFMDHitDigitizer.cxx:103
 AliFMDHitDigitizer.cxx:104
 AliFMDHitDigitizer.cxx:105
 AliFMDHitDigitizer.cxx:106
 AliFMDHitDigitizer.cxx:107
 AliFMDHitDigitizer.cxx:108
 AliFMDHitDigitizer.cxx:109
 AliFMDHitDigitizer.cxx:110
 AliFMDHitDigitizer.cxx:111
 AliFMDHitDigitizer.cxx:112
 AliFMDHitDigitizer.cxx:113
 AliFMDHitDigitizer.cxx:114
 AliFMDHitDigitizer.cxx:115
 AliFMDHitDigitizer.cxx:116
 AliFMDHitDigitizer.cxx:117
 AliFMDHitDigitizer.cxx:118
 AliFMDHitDigitizer.cxx:119
 AliFMDHitDigitizer.cxx:120
 AliFMDHitDigitizer.cxx:121
 AliFMDHitDigitizer.cxx:122
 AliFMDHitDigitizer.cxx:123
 AliFMDHitDigitizer.cxx:124
 AliFMDHitDigitizer.cxx:125
 AliFMDHitDigitizer.cxx:126
 AliFMDHitDigitizer.cxx:127
 AliFMDHitDigitizer.cxx:128
 AliFMDHitDigitizer.cxx:129
 AliFMDHitDigitizer.cxx:130
 AliFMDHitDigitizer.cxx:131
 AliFMDHitDigitizer.cxx:132
 AliFMDHitDigitizer.cxx:133
 AliFMDHitDigitizer.cxx:134
 AliFMDHitDigitizer.cxx:135
 AliFMDHitDigitizer.cxx:136
 AliFMDHitDigitizer.cxx:137
 AliFMDHitDigitizer.cxx:138
 AliFMDHitDigitizer.cxx:139
 AliFMDHitDigitizer.cxx:140
 AliFMDHitDigitizer.cxx:141
 AliFMDHitDigitizer.cxx:142
 AliFMDHitDigitizer.cxx:143
 AliFMDHitDigitizer.cxx:144
 AliFMDHitDigitizer.cxx:145
 AliFMDHitDigitizer.cxx:146
 AliFMDHitDigitizer.cxx:147
 AliFMDHitDigitizer.cxx:148
 AliFMDHitDigitizer.cxx:149
 AliFMDHitDigitizer.cxx:150
 AliFMDHitDigitizer.cxx:151
 AliFMDHitDigitizer.cxx:152
 AliFMDHitDigitizer.cxx:153
 AliFMDHitDigitizer.cxx:154
 AliFMDHitDigitizer.cxx:155
 AliFMDHitDigitizer.cxx:156
 AliFMDHitDigitizer.cxx:157
 AliFMDHitDigitizer.cxx:158
 AliFMDHitDigitizer.cxx:159
 AliFMDHitDigitizer.cxx:160
 AliFMDHitDigitizer.cxx:161
 AliFMDHitDigitizer.cxx:162
 AliFMDHitDigitizer.cxx:163
 AliFMDHitDigitizer.cxx:164
 AliFMDHitDigitizer.cxx:165
 AliFMDHitDigitizer.cxx:166
 AliFMDHitDigitizer.cxx:167
 AliFMDHitDigitizer.cxx:168
 AliFMDHitDigitizer.cxx:169
 AliFMDHitDigitizer.cxx:170
 AliFMDHitDigitizer.cxx:171
 AliFMDHitDigitizer.cxx:172
 AliFMDHitDigitizer.cxx:173
 AliFMDHitDigitizer.cxx:174
 AliFMDHitDigitizer.cxx:175
 AliFMDHitDigitizer.cxx:176
 AliFMDHitDigitizer.cxx:177
 AliFMDHitDigitizer.cxx:178
 AliFMDHitDigitizer.cxx:179
 AliFMDHitDigitizer.cxx:180
 AliFMDHitDigitizer.cxx:181
 AliFMDHitDigitizer.cxx:182
 AliFMDHitDigitizer.cxx:183
 AliFMDHitDigitizer.cxx:184
 AliFMDHitDigitizer.cxx:185
 AliFMDHitDigitizer.cxx:186
 AliFMDHitDigitizer.cxx:187
 AliFMDHitDigitizer.cxx:188
 AliFMDHitDigitizer.cxx:189
 AliFMDHitDigitizer.cxx:190
 AliFMDHitDigitizer.cxx:191
 AliFMDHitDigitizer.cxx:192
 AliFMDHitDigitizer.cxx:193
 AliFMDHitDigitizer.cxx:194
 AliFMDHitDigitizer.cxx:195
 AliFMDHitDigitizer.cxx:196
 AliFMDHitDigitizer.cxx:197
 AliFMDHitDigitizer.cxx:198
 AliFMDHitDigitizer.cxx:199
 AliFMDHitDigitizer.cxx:200
 AliFMDHitDigitizer.cxx:201
 AliFMDHitDigitizer.cxx:202
 AliFMDHitDigitizer.cxx:203
 AliFMDHitDigitizer.cxx:204
 AliFMDHitDigitizer.cxx:205
 AliFMDHitDigitizer.cxx:206
 AliFMDHitDigitizer.cxx:207
 AliFMDHitDigitizer.cxx:208
 AliFMDHitDigitizer.cxx:209
 AliFMDHitDigitizer.cxx:210
 AliFMDHitDigitizer.cxx:211
 AliFMDHitDigitizer.cxx:212
 AliFMDHitDigitizer.cxx:213
 AliFMDHitDigitizer.cxx:214
 AliFMDHitDigitizer.cxx:215
 AliFMDHitDigitizer.cxx:216
 AliFMDHitDigitizer.cxx:217
 AliFMDHitDigitizer.cxx:218
 AliFMDHitDigitizer.cxx:219
 AliFMDHitDigitizer.cxx:220
 AliFMDHitDigitizer.cxx:221
 AliFMDHitDigitizer.cxx:222
 AliFMDHitDigitizer.cxx:223
 AliFMDHitDigitizer.cxx:224
 AliFMDHitDigitizer.cxx:225
 AliFMDHitDigitizer.cxx:226
 AliFMDHitDigitizer.cxx:227
 AliFMDHitDigitizer.cxx:228
 AliFMDHitDigitizer.cxx:229
 AliFMDHitDigitizer.cxx:230
 AliFMDHitDigitizer.cxx:231
 AliFMDHitDigitizer.cxx:232
 AliFMDHitDigitizer.cxx:233
 AliFMDHitDigitizer.cxx:234
 AliFMDHitDigitizer.cxx:235
 AliFMDHitDigitizer.cxx:236
 AliFMDHitDigitizer.cxx:237
 AliFMDHitDigitizer.cxx:238
 AliFMDHitDigitizer.cxx:239
 AliFMDHitDigitizer.cxx:240
 AliFMDHitDigitizer.cxx:241
 AliFMDHitDigitizer.cxx:242
 AliFMDHitDigitizer.cxx:243
 AliFMDHitDigitizer.cxx:244
 AliFMDHitDigitizer.cxx:245
 AliFMDHitDigitizer.cxx:246
 AliFMDHitDigitizer.cxx:247
 AliFMDHitDigitizer.cxx:248
 AliFMDHitDigitizer.cxx:249
 AliFMDHitDigitizer.cxx:250
 AliFMDHitDigitizer.cxx:251
 AliFMDHitDigitizer.cxx:252
 AliFMDHitDigitizer.cxx:253
 AliFMDHitDigitizer.cxx:254
 AliFMDHitDigitizer.cxx:255
 AliFMDHitDigitizer.cxx:256
 AliFMDHitDigitizer.cxx:257
 AliFMDHitDigitizer.cxx:258
 AliFMDHitDigitizer.cxx:259
 AliFMDHitDigitizer.cxx:260
 AliFMDHitDigitizer.cxx:261
 AliFMDHitDigitizer.cxx:262
 AliFMDHitDigitizer.cxx:263
 AliFMDHitDigitizer.cxx:264
 AliFMDHitDigitizer.cxx:265
 AliFMDHitDigitizer.cxx:266
 AliFMDHitDigitizer.cxx:267
 AliFMDHitDigitizer.cxx:268
 AliFMDHitDigitizer.cxx:269
 AliFMDHitDigitizer.cxx:270
 AliFMDHitDigitizer.cxx:271
 AliFMDHitDigitizer.cxx:272
 AliFMDHitDigitizer.cxx:273
 AliFMDHitDigitizer.cxx:274
 AliFMDHitDigitizer.cxx:275
 AliFMDHitDigitizer.cxx:276
 AliFMDHitDigitizer.cxx:277
 AliFMDHitDigitizer.cxx:278
 AliFMDHitDigitizer.cxx:279
 AliFMDHitDigitizer.cxx:280
 AliFMDHitDigitizer.cxx:281
 AliFMDHitDigitizer.cxx:282
 AliFMDHitDigitizer.cxx:283
 AliFMDHitDigitizer.cxx:284
 AliFMDHitDigitizer.cxx:285
 AliFMDHitDigitizer.cxx:286
 AliFMDHitDigitizer.cxx:287
 AliFMDHitDigitizer.cxx:288
 AliFMDHitDigitizer.cxx:289
 AliFMDHitDigitizer.cxx:290
 AliFMDHitDigitizer.cxx:291
 AliFMDHitDigitizer.cxx:292
 AliFMDHitDigitizer.cxx:293
 AliFMDHitDigitizer.cxx:294
 AliFMDHitDigitizer.cxx:295
 AliFMDHitDigitizer.cxx:296
 AliFMDHitDigitizer.cxx:297
 AliFMDHitDigitizer.cxx:298
 AliFMDHitDigitizer.cxx:299
 AliFMDHitDigitizer.cxx:300
 AliFMDHitDigitizer.cxx:301
 AliFMDHitDigitizer.cxx:302
 AliFMDHitDigitizer.cxx:303
 AliFMDHitDigitizer.cxx:304
 AliFMDHitDigitizer.cxx:305
 AliFMDHitDigitizer.cxx:306
 AliFMDHitDigitizer.cxx:307
 AliFMDHitDigitizer.cxx:308
 AliFMDHitDigitizer.cxx:309
 AliFMDHitDigitizer.cxx:310
 AliFMDHitDigitizer.cxx:311
 AliFMDHitDigitizer.cxx:312
 AliFMDHitDigitizer.cxx:313
 AliFMDHitDigitizer.cxx:314
 AliFMDHitDigitizer.cxx:315
 AliFMDHitDigitizer.cxx:316
 AliFMDHitDigitizer.cxx:317
 AliFMDHitDigitizer.cxx:318
 AliFMDHitDigitizer.cxx:319
 AliFMDHitDigitizer.cxx:320
 AliFMDHitDigitizer.cxx:321
 AliFMDHitDigitizer.cxx:322
 AliFMDHitDigitizer.cxx:323
 AliFMDHitDigitizer.cxx:324
 AliFMDHitDigitizer.cxx:325
 AliFMDHitDigitizer.cxx:326
 AliFMDHitDigitizer.cxx:327
 AliFMDHitDigitizer.cxx:328
 AliFMDHitDigitizer.cxx:329
 AliFMDHitDigitizer.cxx:330
 AliFMDHitDigitizer.cxx:331
 AliFMDHitDigitizer.cxx:332
 AliFMDHitDigitizer.cxx:333
 AliFMDHitDigitizer.cxx:334
 AliFMDHitDigitizer.cxx:335
 AliFMDHitDigitizer.cxx:336
 AliFMDHitDigitizer.cxx:337
 AliFMDHitDigitizer.cxx:338
 AliFMDHitDigitizer.cxx:339
 AliFMDHitDigitizer.cxx:340
 AliFMDHitDigitizer.cxx:341
 AliFMDHitDigitizer.cxx:342
 AliFMDHitDigitizer.cxx:343
 AliFMDHitDigitizer.cxx:344
 AliFMDHitDigitizer.cxx:345
 AliFMDHitDigitizer.cxx:346
 AliFMDHitDigitizer.cxx:347
 AliFMDHitDigitizer.cxx:348
 AliFMDHitDigitizer.cxx:349
 AliFMDHitDigitizer.cxx:350
 AliFMDHitDigitizer.cxx:351
 AliFMDHitDigitizer.cxx:352
 AliFMDHitDigitizer.cxx:353
 AliFMDHitDigitizer.cxx:354
 AliFMDHitDigitizer.cxx:355
 AliFMDHitDigitizer.cxx:356
 AliFMDHitDigitizer.cxx:357
 AliFMDHitDigitizer.cxx:358
 AliFMDHitDigitizer.cxx:359
 AliFMDHitDigitizer.cxx:360
 AliFMDHitDigitizer.cxx:361
 AliFMDHitDigitizer.cxx:362
 AliFMDHitDigitizer.cxx:363
 AliFMDHitDigitizer.cxx:364
 AliFMDHitDigitizer.cxx:365
 AliFMDHitDigitizer.cxx:366
 AliFMDHitDigitizer.cxx:367
 AliFMDHitDigitizer.cxx:368
 AliFMDHitDigitizer.cxx:369
 AliFMDHitDigitizer.cxx:370
 AliFMDHitDigitizer.cxx:371
 AliFMDHitDigitizer.cxx:372
 AliFMDHitDigitizer.cxx:373
 AliFMDHitDigitizer.cxx:374
 AliFMDHitDigitizer.cxx:375
 AliFMDHitDigitizer.cxx:376
 AliFMDHitDigitizer.cxx:377
 AliFMDHitDigitizer.cxx:378
 AliFMDHitDigitizer.cxx:379
 AliFMDHitDigitizer.cxx:380
 AliFMDHitDigitizer.cxx:381
 AliFMDHitDigitizer.cxx:382
 AliFMDHitDigitizer.cxx:383
 AliFMDHitDigitizer.cxx:384
 AliFMDHitDigitizer.cxx:385
 AliFMDHitDigitizer.cxx:386
 AliFMDHitDigitizer.cxx:387
 AliFMDHitDigitizer.cxx:388
 AliFMDHitDigitizer.cxx:389
 AliFMDHitDigitizer.cxx:390
 AliFMDHitDigitizer.cxx:391
 AliFMDHitDigitizer.cxx:392
 AliFMDHitDigitizer.cxx:393
 AliFMDHitDigitizer.cxx:394
 AliFMDHitDigitizer.cxx:395
 AliFMDHitDigitizer.cxx:396
 AliFMDHitDigitizer.cxx:397
 AliFMDHitDigitizer.cxx:398
 AliFMDHitDigitizer.cxx:399
 AliFMDHitDigitizer.cxx:400
 AliFMDHitDigitizer.cxx:401
 AliFMDHitDigitizer.cxx:402
 AliFMDHitDigitizer.cxx:403
 AliFMDHitDigitizer.cxx:404
 AliFMDHitDigitizer.cxx:405
 AliFMDHitDigitizer.cxx:406
 AliFMDHitDigitizer.cxx:407
 AliFMDHitDigitizer.cxx:408
 AliFMDHitDigitizer.cxx:409
 AliFMDHitDigitizer.cxx:410
 AliFMDHitDigitizer.cxx:411
 AliFMDHitDigitizer.cxx:412
 AliFMDHitDigitizer.cxx:413
 AliFMDHitDigitizer.cxx:414
 AliFMDHitDigitizer.cxx:415
 AliFMDHitDigitizer.cxx:416
 AliFMDHitDigitizer.cxx:417
 AliFMDHitDigitizer.cxx:418
 AliFMDHitDigitizer.cxx:419
 AliFMDHitDigitizer.cxx:420
 AliFMDHitDigitizer.cxx:421
 AliFMDHitDigitizer.cxx:422
 AliFMDHitDigitizer.cxx:423
 AliFMDHitDigitizer.cxx:424
 AliFMDHitDigitizer.cxx:425
 AliFMDHitDigitizer.cxx:426
 AliFMDHitDigitizer.cxx:427
 AliFMDHitDigitizer.cxx:428
 AliFMDHitDigitizer.cxx:429
 AliFMDHitDigitizer.cxx:430
 AliFMDHitDigitizer.cxx:431
 AliFMDHitDigitizer.cxx:432
 AliFMDHitDigitizer.cxx:433
 AliFMDHitDigitizer.cxx:434
 AliFMDHitDigitizer.cxx:435
 AliFMDHitDigitizer.cxx:436
 AliFMDHitDigitizer.cxx:437
 AliFMDHitDigitizer.cxx:438
 AliFMDHitDigitizer.cxx:439
 AliFMDHitDigitizer.cxx:440
 AliFMDHitDigitizer.cxx:441
 AliFMDHitDigitizer.cxx:442
 AliFMDHitDigitizer.cxx:443
 AliFMDHitDigitizer.cxx:444
 AliFMDHitDigitizer.cxx:445
 AliFMDHitDigitizer.cxx:446
 AliFMDHitDigitizer.cxx:447
 AliFMDHitDigitizer.cxx:448
 AliFMDHitDigitizer.cxx:449
 AliFMDHitDigitizer.cxx:450
 AliFMDHitDigitizer.cxx:451
 AliFMDHitDigitizer.cxx:452
 AliFMDHitDigitizer.cxx:453
 AliFMDHitDigitizer.cxx:454
 AliFMDHitDigitizer.cxx:455
 AliFMDHitDigitizer.cxx:456
 AliFMDHitDigitizer.cxx:457
 AliFMDHitDigitizer.cxx:458
 AliFMDHitDigitizer.cxx:459
 AliFMDHitDigitizer.cxx:460
 AliFMDHitDigitizer.cxx:461
 AliFMDHitDigitizer.cxx:462
 AliFMDHitDigitizer.cxx:463
 AliFMDHitDigitizer.cxx:464
 AliFMDHitDigitizer.cxx:465
 AliFMDHitDigitizer.cxx:466
 AliFMDHitDigitizer.cxx:467
 AliFMDHitDigitizer.cxx:468
 AliFMDHitDigitizer.cxx:469
 AliFMDHitDigitizer.cxx:470
 AliFMDHitDigitizer.cxx:471
 AliFMDHitDigitizer.cxx:472
 AliFMDHitDigitizer.cxx:473
 AliFMDHitDigitizer.cxx:474
 AliFMDHitDigitizer.cxx:475
 AliFMDHitDigitizer.cxx:476
 AliFMDHitDigitizer.cxx:477
 AliFMDHitDigitizer.cxx:478
 AliFMDHitDigitizer.cxx:479
 AliFMDHitDigitizer.cxx:480
 AliFMDHitDigitizer.cxx:481
 AliFMDHitDigitizer.cxx:482
 AliFMDHitDigitizer.cxx:483
 AliFMDHitDigitizer.cxx:484
 AliFMDHitDigitizer.cxx:485
 AliFMDHitDigitizer.cxx:486
 AliFMDHitDigitizer.cxx:487
 AliFMDHitDigitizer.cxx:488
 AliFMDHitDigitizer.cxx:489
 AliFMDHitDigitizer.cxx:490
 AliFMDHitDigitizer.cxx:491
 AliFMDHitDigitizer.cxx:492
 AliFMDHitDigitizer.cxx:493
 AliFMDHitDigitizer.cxx:494
 AliFMDHitDigitizer.cxx:495
 AliFMDHitDigitizer.cxx:496
 AliFMDHitDigitizer.cxx:497
 AliFMDHitDigitizer.cxx:498
 AliFMDHitDigitizer.cxx:499
 AliFMDHitDigitizer.cxx:500
 AliFMDHitDigitizer.cxx:501
 AliFMDHitDigitizer.cxx:502
 AliFMDHitDigitizer.cxx:503
 AliFMDHitDigitizer.cxx:504
 AliFMDHitDigitizer.cxx:505
 AliFMDHitDigitizer.cxx:506
 AliFMDHitDigitizer.cxx:507
 AliFMDHitDigitizer.cxx:508
 AliFMDHitDigitizer.cxx:509
 AliFMDHitDigitizer.cxx:510
 AliFMDHitDigitizer.cxx:511
 AliFMDHitDigitizer.cxx:512
 AliFMDHitDigitizer.cxx:513
 AliFMDHitDigitizer.cxx:514
 AliFMDHitDigitizer.cxx:515
 AliFMDHitDigitizer.cxx:516
 AliFMDHitDigitizer.cxx:517
 AliFMDHitDigitizer.cxx:518
 AliFMDHitDigitizer.cxx:519
 AliFMDHitDigitizer.cxx:520
 AliFMDHitDigitizer.cxx:521
 AliFMDHitDigitizer.cxx:522
 AliFMDHitDigitizer.cxx:523
 AliFMDHitDigitizer.cxx:524
 AliFMDHitDigitizer.cxx:525
 AliFMDHitDigitizer.cxx:526
 AliFMDHitDigitizer.cxx:527
 AliFMDHitDigitizer.cxx:528
 AliFMDHitDigitizer.cxx:529
 AliFMDHitDigitizer.cxx:530
 AliFMDHitDigitizer.cxx:531
 AliFMDHitDigitizer.cxx:532
 AliFMDHitDigitizer.cxx:533
 AliFMDHitDigitizer.cxx:534
 AliFMDHitDigitizer.cxx:535
 AliFMDHitDigitizer.cxx:536
 AliFMDHitDigitizer.cxx:537
 AliFMDHitDigitizer.cxx:538
 AliFMDHitDigitizer.cxx:539
 AliFMDHitDigitizer.cxx:540
 AliFMDHitDigitizer.cxx:541
 AliFMDHitDigitizer.cxx:542
 AliFMDHitDigitizer.cxx:543
 AliFMDHitDigitizer.cxx:544
 AliFMDHitDigitizer.cxx:545
 AliFMDHitDigitizer.cxx:546
 AliFMDHitDigitizer.cxx:547
 AliFMDHitDigitizer.cxx:548
 AliFMDHitDigitizer.cxx:549
 AliFMDHitDigitizer.cxx:550
 AliFMDHitDigitizer.cxx:551
 AliFMDHitDigitizer.cxx:552
 AliFMDHitDigitizer.cxx:553
 AliFMDHitDigitizer.cxx:554
 AliFMDHitDigitizer.cxx:555
 AliFMDHitDigitizer.cxx:556
 AliFMDHitDigitizer.cxx:557
 AliFMDHitDigitizer.cxx:558
 AliFMDHitDigitizer.cxx:559
 AliFMDHitDigitizer.cxx:560
 AliFMDHitDigitizer.cxx:561
 AliFMDHitDigitizer.cxx:562
 AliFMDHitDigitizer.cxx:563
 AliFMDHitDigitizer.cxx:564
 AliFMDHitDigitizer.cxx:565
 AliFMDHitDigitizer.cxx:566
 AliFMDHitDigitizer.cxx:567
 AliFMDHitDigitizer.cxx:568
 AliFMDHitDigitizer.cxx:569
 AliFMDHitDigitizer.cxx:570
 AliFMDHitDigitizer.cxx:571
 AliFMDHitDigitizer.cxx:572
 AliFMDHitDigitizer.cxx:573
 AliFMDHitDigitizer.cxx:574
 AliFMDHitDigitizer.cxx:575
 AliFMDHitDigitizer.cxx:576
 AliFMDHitDigitizer.cxx:577
 AliFMDHitDigitizer.cxx:578
 AliFMDHitDigitizer.cxx:579
 AliFMDHitDigitizer.cxx:580
 AliFMDHitDigitizer.cxx:581
 AliFMDHitDigitizer.cxx:582
 AliFMDHitDigitizer.cxx:583
 AliFMDHitDigitizer.cxx:584
 AliFMDHitDigitizer.cxx:585
 AliFMDHitDigitizer.cxx:586
 AliFMDHitDigitizer.cxx:587
 AliFMDHitDigitizer.cxx:588
 AliFMDHitDigitizer.cxx:589
 AliFMDHitDigitizer.cxx:590
 AliFMDHitDigitizer.cxx:591
 AliFMDHitDigitizer.cxx:592
 AliFMDHitDigitizer.cxx:593
 AliFMDHitDigitizer.cxx:594