*
* See cxx source for full Copyright notice
*/
+// Classses to make SDigits into Digits
+//
+// Digits consists of
+// - Detector #
+// - Ring ID
+// - Sector #
+// - Strip #
+// - ADC count in this channel
+//
+// Summable digits consists of
+// - Detector #
+// - Ring ID
+// - Sector #
+// - Strip #
+// - Total energy deposited in the strip
+// - ADC count in this channel
+//
/** @file AliFMDDigitizer.h
@author Christian Holm Christensen <cholm@nbi.dk>
@date Mon Mar 27 12:38:26 2006
@brief FMD Digitizers declaration
+ @ingroup FMD_sim
*/
-#ifndef ALIDIGITIZER_H
-# include <AliDigitizer.h>
-#endif
-#ifndef ALIRUNDIGITIZER_H
-# include <AliRunDigitizer.h>
-#endif
-#ifndef ALIFMDEdepMAP_H
-# include "AliFMDEdepMap.h"
+#ifndef ALIFMDBASEDIGITIZER_H
+# include <AliFMDBaseDigitizer.h>
#endif
-#ifndef __UTILITY__
-# include <utility>
-#endif
-// #ifndef ROOT_TArrayF
-// # include <TArrayF.h>
-// #endif
//====================================================================
class TClonesArray;
class AliFMDDigit;
-//====================================================================
-/** @class AliFMDBaseDigitizer AliFMDDigitizer.h <FMD/AliFMDDigitizer>
- @brief Base class for digitizers.
-
- This class contains the procedures simulation ADC signal for the
- Forward Multiplicity detector : Hits->Digits and Hits->SDigits
-
- Digits consists of
- - Detector #
- - Ring ID
- - Sector #
- - Strip #
- - ADC count in this channel
-
- Summable digits consists of
- - Detector #
- - Ring ID
- - Sector #
- - Strip #
- - Total energy deposited in the strip
- - ADC count in this channel
-
- As the Digits and SDigits have so much in common, the classes
- AliFMDDigitizer and AliFMDSDigitizer are implemented via a base
- class AliFMDBaseDigitizer.
- @verbatim
- +---------------------+
- | AliFMDBaseDigitizer |
- +---------------------+
- ^
- |
- +----------+---------+
- | |
- +-----------------+ +------------------+
- | AliFMDDigitizer | | AliFMDSDigitizer |
- +-----------------+ +------------------+
- @endverbatim
- These classes uses parameters fetched from the AliFMDParameters
- manager.
-
- The shaping function of the VA1 is generally given by
- @f[
- f(x) = A(1 - \exp(-Bx))
- @f]
- 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 circut.
-
- When simulating the shaping function of the VA1 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:
- @code
- last = 0;
- for (i=0; i < n_pre_amp_charge; i++) {
- charge = GetCharge(i);
- if (last < charge)
- f(t) = (charge - last) * (1 - exp(-B * t)) + last
- else
- f(t) = (last - charge) * exp(-B * t) + charge)
- for (j=0; j < sample_rate; j++)
- adc[j] = f(i / (# samples))
- last = charge
- }
- @endcode
- Here, the first loop is over all charges collected by the VA1
- chip, and the @c sample_rate is how many times the ALTRO ADC
- samples each of the 128 charges from the pre-amp.
-
- The @c charge is the total charge @f$ Q@f$ collected by the VA1
- pre-amplifier for a strip. @f$ Q@f$ is then given by
- @f[
- Q = \frac{E}{e}\frac{S}{r}
- @f]
- where @f$ E@f$ is the total energy deposited in a silicon strip,
- @f$ R@f$ is the dynamic range of the VA1 pre-amp, @f$ e@f$ is the
- energy deposited by a single MIP, and @f$ S@f$ ALTRO channel size
- in each time step.
-
- The energy deposited per MIP is given by
- @f$
- e = M \rho w
- @f$
- where @f$ M@f$ is the universal number
- @f$ 1.664 \mbox{keV}\mbox{cm}^{2}\mbox{g}^{-1}@f$, @f$ \rho@f$ is
- the density of silicon, and @f$ w@f$ is the depth of the silicon
- sensor.
-
- The final ADC count is given by
- @f[
- C' = C + P
- @f]
- where @f$ P@f$ is the (randomized) pedestal.
-
- This class uses the class template AliFMDEdepMap to make an
- internal cache of the energy deposted of the hits. The class
- template is instantasized as
-
- 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.
- @ingroup FMD_sim
- */
-class AliFMDBaseDigitizer : public AliDigitizer
-{
-public:
- /** CTOR */
- AliFMDBaseDigitizer();
- /** Normal CTOR
- @param manager Manager of digitization */
- AliFMDBaseDigitizer(AliRunDigitizer * manager);
- /** Normal ctor
- @param name Name
- @param title Title */
- AliFMDBaseDigitizer(const Char_t* name, const Char_t* title);
- /** DTOR */
- virtual ~AliFMDBaseDigitizer();
-
- /** Initialize */
- virtual Bool_t Init();
-
- /** The response shape of the VA1 shaping circuit is approximently
- given by
- @f[
- f(x) = A(1 - \exp(-Bx))
- @f]
- where @f$ A@f$ is the total charge collected by the pre-amp.,
- and @f$ B@f$ is parameter that depends on the shaping time of
- the @b VA1 pre-amp. This member function sets the parameter @f$
- B@f$
- @param B */
- void SetShapingTime(Float_t B=10) { fShapingTime = B; }
- /** @return Get the shaping time */
- Float_t GetShapingTime() const { return fShapingTime; }
-protected:
- /** Sum energy deposited contributions from each hit in a cache
- @param fmd Pointer to detector */
- virtual void SumContributions(AliFMD* fmd);
- /** For the stored energy contributions in the cache, convert the
- energy signal to ADC counts, and store the created digit in
- the digits array
- @param fmd Pointer to detector */
- virtual void DigitizeHits(AliFMD* fmd) const;
- /** Convert the total energy deposited to a (set of) ADC count(s).
- See also the class description for more details.
- @param edep Total energy deposited in detector
- @param last Last charge collected in previous VA1 channnel
- @param detector Detector #
- @param ring Ring ID
- @param sector Sector #
- @param strip Strip #
- @param counts Array holding the counts on return */
- virtual void ConvertToCount(Float_t edep,
- Float_t last,
- UShort_t detector,
- Char_t ring,
- UShort_t sector,
- UShort_t strip,
- TArrayI& counts) const;
- /** Make a pedestal
- @param detector Detector #
- @param ring Ring ID
- @param sector Sector #
- @param strip Strip #
- @return Pedestal value */
- virtual UShort_t MakePedestal(UShort_t detector,
- Char_t ring,
- UShort_t sector,
- UShort_t strip) const;
- /** Add noise to each sample */
- virtual void AddNoise(TArrayI&) const {}
- /** Add a digit to output */
- virtual void AddDigit(AliFMD* /* fmd */,
- UShort_t /* detector */,
- Char_t /* ring */,
- UShort_t /* sector */,
- UShort_t /* strip */,
- Float_t /* edep */,
- UShort_t /* count1 */,
- Short_t /* count2 */,
- Short_t /* count3 */) const {}
-
- AliRunLoader* fRunLoader; //! Run loader
- AliFMDEdepMap fEdep; // Cache of Energy from hits
- Float_t fShapingTime; // Shaping profile parameter
-
- /** Copy CTOR
- @param o object to copy from */
- AliFMDBaseDigitizer(const AliFMDBaseDigitizer& o)
- : AliDigitizer(o) {}
- /** Assignment operator
- @return Reference to this object */
- AliFMDBaseDigitizer& operator=(const AliFMDBaseDigitizer&) { return *this; }
- ClassDef(AliFMDBaseDigitizer,2) // Base class for FMD digitizers
-};
//====================================================================
-/** @class AliFMDDigitizer
- @brief Concrete digitizer to make digits from hits. See also
- AliFMDBaseDigitizer documentation.
- @ingroup FMD_sim
+/**
+ * @class AliFMDDigitizer
+ * @brief Concrete digitizer to make digits from hits. See also
+ * AliFMDBaseDigitizer documentation.
+ *
+ * @ingroup FMD_sim
*/
class AliFMDDigitizer : public AliFMDBaseDigitizer
{
public:
- /** CTOR */
- AliFMDDigitizer();
- /** CTOR
- @param manager Manager of digitization */
- AliFMDDigitizer(AliRunDigitizer * manager);
- /** DTOR */
+ /**
+ * CTOR
+ */
+ AliFMDDigitizer() : AliFMDBaseDigitizer() {}
+ /**
+ * CTOR
+ *
+ * @param manager Manager of digitization
+ */
+ AliFMDDigitizer(AliRunDigitizer * manager)
+ : AliFMDBaseDigitizer(manager) {}
+ /**
+ * DTOR
+ */
virtual ~AliFMDDigitizer() {}
- /** Do everything
- @param option Not used */
- virtual void Exec(Option_t* option=0);
+ /**
+ * Initialise
+ */
+ virtual Bool_t Init();
+ /**
+ * Execute this digitizer.
+ * This member function will be called once per event by the passed
+ * AliRunDigitizer manager object.
+ *
+ * @param options Not used
+ */
+ virtual void Exec(Option_t* option="");
protected:
- /** Add a digit to output.
- @param fmd Pointer to detector object
- @param detector Detector #
- @param ring Ring ID
- @param sector Sector number
- @param strip Strip number
- @param edep Energy deposited (not used)
- @param count1 ADC count 1
- @param count2 ADC count 2 (-1 if not used)
- @param count3 ADC count 3 (-1 if not used) */
- virtual void AddDigit(AliFMD* fmd,
- UShort_t detector,
- Char_t ring,
- UShort_t sector,
- UShort_t strip,
- Float_t edep,
- UShort_t count1,
- Short_t count2,
- Short_t count3) const;
- /** MAke a pedestal
- @param detector Detector #
- @param ring Ring ID
- @param sector Sector number
- @param strip Strip number
- @return Random noise */
- virtual UShort_t MakePedestal(UShort_t detector,
- Char_t ring,
- UShort_t sector,
- UShort_t strip) const;
- /** Check that digit data is consistent
- @param digit Digit
- @param nhits Number of hits
- @param counts ADC counts */
- virtual void CheckDigit(AliFMDDigit* digit,
- UShort_t nhits,
- const TArrayI& counts);
+ /**
+ * Sum contributions from SDigits
+ *
+ * @param sdigitsBranch Branch of SDigit data
+ */
+ void SumContributions(TBranch* sdigitsBranch);
+
ClassDef(AliFMDDigitizer,1) // Make Digits from Hits
};
-//====================================================================
-/** @class AliFMDSDigitizer AliFMDDigitizer.h <FMD/AliFMDDigitizer.h>
- @brief Concrete implementation to make summable digits.
- See also class documentation of AliFMDBaseDigitizer
- @ingroup FMD_sim
- */
-class AliFMDSDigitizer : public AliFMDBaseDigitizer
-{
-public:
- /** CTOR */
- AliFMDSDigitizer();
- /** CTOR
- @param headerFile Where to write headings
- @param sdigFile Where to write digits. */
- AliFMDSDigitizer(const Char_t* headerFile, const Char_t* sdigFile="");
- /** DTOR */
- virtual ~AliFMDSDigitizer();
- /** Do it all
- @param option Not used */
- virtual void Exec(Option_t* option=0);
-protected:
- /** Add a digit to output.
- @param fmd Pointer to detector object
- @param detector Detector #
- @param ring Ring ID
- @param sector Sector number
- @param strip Strip number
- @param edep Energy deposited (not used)
- @param count1 ADC count 1
- @param count2 ADC count 2 (-1 if not used)
- @param count3 ADC count 3 (-1 if not used) */
- virtual void AddDigit(AliFMD* fmd,
- UShort_t detector,
- Char_t ring,
- UShort_t sector,
- UShort_t strip,
- Float_t edep,
- UShort_t count1,
- Short_t count2,
- Short_t count3) const;
- ClassDef(AliFMDSDigitizer,0) // Make Summable Digits from Hits
-};
-
-
#endif
//____________________________________________________________________