]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDDigitizer.h
Added AliMpStringObjMap, AliMpDEIterator, AliMpDEManager, AliMpSegFactory
[u/mrichter/AliRoot.git] / FMD / AliFMDDigitizer.h
index 2c1b292603bf57a27636dee3642d2a5573142b6c..81050669727d4309837860760e5182eda4b628c6 100644 (file)
 #ifndef ALIFMDDIGITIZER_H
 #define ALIFMDDIGITIZER_H
-/* Copyright(c) 1998-2000, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
+/* Copyright(c) 1998-2000, ALICE Experiment at CERN, All rights
+ * reserved. 
+ *
+ * See cxx source for full Copyright notice                               
+ */
+#ifndef ALIDIGITIZER_H
+# include <AliDigitizer.h>
+#endif
+#ifndef ALIRUNDIGITIZER_H
+# include <AliRunDigitizer.h>
+#endif
+#ifndef ALIFMDEdepMAP_H
+# include "AliFMDEdepMap.h"
+#endif
+#ifndef __UTILITY__
+# include <utility>
+#endif
+// #ifndef ROOT_TArrayF
+// # include <TArrayF.h>
+// #endif
 
-#include "AliDigitizer.h"
+//====================================================================
 class TClonesArray;
-class AliRunDigitizer;
-class AliFMDDigitizer : public AliDigitizer {
- public:
-  
-  AliFMDDigitizer();
-  AliFMDDigitizer(AliRunDigitizer * manager);
-  virtual ~AliFMDDigitizer();
-  virtual  Bool_t Init()  {return kTRUE;} ///???????????
+class AliFMD;
+class AliLoader;
+class AliRunLoader;
+
+
+//====================================================================
+class AliFMDBaseDigitizer : public AliDigitizer 
+{
+public:
+  AliFMDBaseDigitizer();
+  AliFMDBaseDigitizer(AliRunDigitizer * manager);
+  AliFMDBaseDigitizer(const Char_t* name, const Char_t* title);
+  virtual ~AliFMDBaseDigitizer();
    
-  
   // Do the main work
-  void Exec(Option_t* option=0) ;
-  Int_t PutNoise(Int_t charge){return (Int_t)(gRandom->Gaus(charge,500));}
-  TClonesArray *Digits() const {return fDigits;}
-  TClonesArray *Hits() const {return fHits;}
+  virtual Bool_t Init();
 
+  // Extra member functions 
+  void     SetVA1MipRange(UShort_t r=20) { fVA1MipRange = r; }
+  void     SetAltroChannelSize(UShort_t s=1024) { fAltroChannelSize = s;}
+  void     SetSampleRate(UShort_t r=1) { fSampleRate = (r>2 ? 2 : r); }
+  void     SetShapingTime(Float_t t=10) { fShapingTime = t;  }
+  
+  UShort_t GetVA1MipRange()      const { return fVA1MipRange; }
+  UShort_t GetAltroChannelSize() const { return fAltroChannelSize; }
+  UShort_t GetSampleRate()       const { return fSampleRate; }
+  Float_t  GetShapingTime()      const { return fShapingTime; }
+protected:
+  virtual void     SumContributions(AliFMD* fmd);
+  virtual void     DigitizeHits(AliFMD* fmd) const;
+  virtual void     ConvertToCount(Float_t   edep, 
+                                 Float_t   last,
+                                 Float_t   siThickness, 
+                                 Float_t   siDensity, 
+                                 TArrayI&  counts) const;
+  virtual UShort_t MakePedestal() const { return 0; }
+  virtual void     AddNoise(TArrayI&) const {}
+  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 
+  UShort_t      fVA1MipRange;      // How many MIPs the pre-amp can do    
+  UShort_t      fAltroChannelSize; // Largest # to store in 1 ADC chan.
+  UShort_t      fSampleRate;       // Times the ALTRO samples pre-amp.
+  Float_t       fShapingTime;      // Shaping profile parameter
+  
+  AliFMDBaseDigitizer(const AliFMDBaseDigitizer& o) 
+    : AliDigitizer(o) {}
+  AliFMDBaseDigitizer& operator=(const AliFMDBaseDigitizer&) { return *this; }
+  ClassDef(AliFMDBaseDigitizer,0) // Base class for FMD digitizers
+};
+
+//====================================================================
+class AliFMDDigitizer : public AliFMDBaseDigitizer 
+{
+public:
+  AliFMDDigitizer();
+  AliFMDDigitizer(AliRunDigitizer * manager);
+  virtual ~AliFMDDigitizer() {}
+  virtual void  Exec(Option_t* option=0);
   
-  enum {kBgTag = -1};
-      
    
- private:
-  TClonesArray *fDigits;               // ! array with digits
-  TClonesArray *fHits;                 // List of hits
-  AliRunDigitizer* GetManager(){return fManager;}
-         
-    ClassDef(AliFMDDigitizer,0)
-};    
-#endif
+  // Extra member functions 
+  void     SetPedestal(Float_t mean=10, Float_t width=.5);
+  void     GetPedestal(Float_t& mean,   Float_t& width) const;
+protected:
+  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;
+  virtual UShort_t MakePedestal() const;
+  virtual void     CheckDigit(Float_t         edep, 
+                             UShort_t        nhits,
+                             const TArrayI&  counts);
+  Float_t       fPedestal;         // Mean of pedestal 
+  Float_t       fPedestalWidth;    // Width of pedestal 
+  ClassDef(AliFMDDigitizer,0) // Make Digits from Hits
+};
+//____________________________________________________________________
+inline void 
+AliFMDDigitizer::SetPedestal(Float_t mean, Float_t width) 
+{
+  fPedestal      = mean;
+  fPedestalWidth = width;
+}
+
+//____________________________________________________________________
+inline void 
+AliFMDDigitizer::GetPedestal(Float_t& mean, Float_t& width)  const
+{
+  mean  = fPedestal;
+  width = fPedestalWidth;
+}
+
 
+//====================================================================
+class AliFMDSDigitizer : public AliFMDBaseDigitizer 
+{
+public:
+  AliFMDSDigitizer();
+  AliFMDSDigitizer(const Char_t* headerFile, const Char_t* sdigFile="");
+  virtual ~AliFMDSDigitizer();
+  virtual void  Exec(Option_t* option=0);
+protected:
+  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
+//____________________________________________________________________
+//
+// Local Variables:
+//   mode: C++
+// End:
+//
+//
+// EOF
+//
+