]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDParameters.h
CSP registers depend of FEE firmware, not RCU firmware
[u/mrichter/AliRoot.git] / FMD / AliFMDParameters.h
index c763d241461c22d73c7dee723ed9996acacae259..0a48809dafbf56131e80f404368bd1455068f05d 100644 (file)
@@ -91,7 +91,10 @@ public:
     /** Zero suppression parameters */ 
     kZeroSuppression = 0x10, // Zero suppression parameters 
     /** ALTRO data map */ 
-    kAltroMap = 0x20 // Altro channel map
+    kAltroMap = 0x20, // Altro channel map
+    /** Strip Range */
+    kStripRange = 0x40 //Strip range
+    
   };
   
   /** Singleton access
@@ -103,14 +106,14 @@ public:
    */
   void Init(Bool_t forceReInit=kFALSE, 
            UInt_t what = (kPulseGain|kPedestal|kDeadMap|kSampleRate|
-                          kZeroSuppression|kAltroMap));
+                          kZeroSuppression|kAltroMap|kStripRange));
   /** Initialize the manager.  This tries to read the parameters from
       CDB.  If that fails, the class uses the hard-coded parameters. 
    */
   void Init(AliFMDPreprocessor* pp, 
            Bool_t forceReInit=kFALSE, 
            UInt_t what = (kPulseGain|kPedestal|kDeadMap|kSampleRate|
-                          kZeroSuppression|kAltroMap));
+                          kZeroSuppression|kAltroMap|kStripRange));
   /** Print all parameters. 
       @param option Option string */
   void Print(Option_t* option="A") const;
@@ -143,6 +146,15 @@ public:
   void SetChannelsPerAltro(UShort_t size=128) { fChannelsPerAltro = size; }
   /** @param f Factor to use for accepting a signal. */
   void SetPedestalFactor(Float_t f=3)         { fPedestalFactor = f; }
+  /** @param n Number of pre-samples to keep during zero-suppression -
+      only used in simulation. */
+  void SetZSPreSamples(UShort_t n=1) { fZSPre = (n & 0x3); }
+  /** @param n Number of post-samples to keep during zero-suppression -
+      only used in simulation. */
+  void SetZSPostSamples(UShort_t n=1) { fZSPost = (n & 0x3); }
+  /** @param use If true, do pedestal subtraction before zero
+      suppression - only used in simulation */
+  void SetZSPedSubtract(Bool_t use=kTRUE) { fZSPedSubtract = use; }
   /** @} */
 
   /** @{ */
@@ -150,7 +162,8 @@ public:
   /** @param s Zero suppression threshold in ADC counts */
   void SetZeroSuppression(UShort_t s=0)       { fFixedZeroSuppression = s; }
   /** @param r How many times we oversample each strip. */
-  void SetSampleRate(UShort_t r=1)            { fFixedSampleRate = (r>2?2:r);}
+  void SetSampleRate(UShort_t r=1)            { fFixedSampleRate = r ;}//(r>2?2:r);}
+  void SetSampleRate(AliFMDCalibSampleRate* r) { fSampleRate = r; }
   /** @param p Pedestal value in ADC counts */
   void SetPedestal(Float_t p=10)              { fFixedPedestal = p; }
   /** @param w Pedestal width in ADC counts */
@@ -161,10 +174,7 @@ public:
       @param min Minimum strip number (0-127). 
       @param max Maximum strip number (0-127). */
   void SetStripRange(UShort_t min=0, UShort_t max=127);
-  /** Whether raw data is in the old ALTRO format (i.e., no RCU
-      trailer), or in the new format (with a trailer). 
-      @param yes if true the raw data has RCU trailer */ 
-  void UseRcuTrailer(Bool_t yes=kTRUE) { fHasRcuTrailer = yes; } 
+  void SetStripRange(AliFMDCalibStripRange* r) { fStripRange = r; }
   /** Whether raw data has full common data header (8 32bit words) or
       the older invalid format (7 32bit words with bogus entries)
       @param yes if true the raw data has complete data header */ 
@@ -181,12 +191,23 @@ public:
   UShort_t GetChannelsPerAltro()     const { return fChannelsPerAltro; }
   /** @return The average energy deposited by one MIP */
   Float_t  GetEdepMip()              const;
+  /** @return The conversion factor from DAC to ADC */
+  Float_t  GetDACPerMIP()              const;
   /** @return The factor used of signal acceptance */
   Float_t  GetPedestalFactor()      const { return fPedestalFactor; }
+  /** @param n Number of pre-samples to keep during zero-suppression -
+      only used in simulation. */
+  UShort_t GetZSPreSamples() const { return fZSPre; }
+  /** @param n Number of post-samples to keep during zero-suppression -
+      only used in simulation. */
+  UShort_t GetZSPostSamples() const { return fZSPost; }
+  /** @param use If true, do pedestal subtraction before zero
+      suppression - only used in simulation */
+  Bool_t IsZSPedSubtract() const { return fZSPedSubtract; }
   /** @} */
 
   /** @{ */
-  /** @name Get variable parameters */
+  /** @name Various varible conditions */
   /** Whether the strip is considered dead
       @param detector Detector # (1-3)
       @param ring     Ring ID ('I' or 'O')
@@ -279,6 +300,44 @@ public:
                         Char_t, 
                         UShort_t, 
                         UShort_t) const { return 14+5; }
+  /** @} */
+  
+  /** @{ 
+      @name Hardware to detector translation (and inverse) */
+  /** Map a hardware address into a detector index. 
+      @param ddl        Hardware DDL number 
+      @param board      FEC number
+      @param altro      ALTRO number 
+      @param channel    Channel number 
+      @param timebin    Timebin 
+      @param det        On return, the detector #
+      @param ring       On return, the ring ID
+      @param sec        On return, the sector #
+      @param str        On return, the base of strip #
+      @param sam        On return, the sample number for this strip
+      @return @c true on success, false otherwise */
+  Bool_t Hardware2Detector(UShort_t    ddl,        UShort_t    board, 
+                          UShort_t    altro,      UShort_t    chan,
+                          UShort_t  timebin,   
+                          UShort_t& det,        Char_t&   ring, 
+                          UShort_t& sec,        Short_t& str,
+                          UShort_t& sam) const;
+  /** Map a hardware address into a detector index. 
+      @param ddl        Hardware DDL number 
+      @param hwaddr     Hardware address.  
+      @param timebin    Timebin 
+      @param det        On return, the detector #
+      @param ring       On return, the ring ID
+      @param sec        On return, the sector #
+      @param str        On return, the base of strip #
+      @param sam        On return, the sample number for this strip
+      @return @c true on success, false otherwise */
+  Bool_t Hardware2Detector(UShort_t    ddl,        UShort_t    hwaddr, 
+                          UShort_t  timebin,    
+                          UShort_t& det,        Char_t&   ring, 
+                          UShort_t& sec,        Short_t& str,
+                          UShort_t& sam) const;
+#if 0
   /** Translate hardware address to detector coordinates 
       @param ddl      DDL number 
       @param board    Board address
@@ -289,10 +348,10 @@ public:
       @param sec      On return, Sector number (0-39)
       @param str      On return, Strip number (0-511)
       @return @c true on success. */
-  Bool_t   Hardware2Detector(UInt_t ddl,    UInt_t    board, 
-                            UInt_t chip,   UInt_t    channel, 
+  Bool_t   Hardware2Detector(UShort_t ddl,    UShort_t    board, 
+                            UShort_t chip,   UShort_t    channel, 
                             UShort_t& det, Char_t&   ring, 
-                            UShort_t& sec, UShort_t& str) const;
+                            UShort_t& sec, Short_t& str) const;
   /** Translate hardware address to detector coordinates 
       @param ddl      DDL number 
       @param addr     Hardware address
@@ -301,9 +360,44 @@ public:
       @param sec      On return, Sector number (0-39)
       @param str      On return, Strip number (0-511)
       @return @c true on success. */
-  Bool_t   Hardware2Detector(UInt_t ddl, UInt_t addr, UShort_t& det,
-                            Char_t& ring, UShort_t& sec, UShort_t& str) const;
+  Bool_t   Hardware2Detector(UShort_t ddl, UShort_t addr, UShort_t& det,
+                            Char_t& ring, UShort_t& sec, Short_t& str) const;
+#endif
 
+  /** Map a detector index into a hardware address. 
+      @param det         The detector #
+      @param ring        The ring ID
+      @param sec         The sector #
+      @param str         The strip #
+      @param sam         The sample number 
+      @param ddl         On return, hardware DDL number 
+      @param board       On return, the FEC board address (local to DDL)
+      @param altro       On return, the ALTRO number (local to FEC)
+      @param channel     On return, the channel number (local to ALTRO)
+      @param timebin     On return, the timebin number (local to ALTRO)
+      @return @c true on success, false otherwise */
+  Bool_t Detector2Hardware(UShort_t  det,        Char_t    ring, 
+                          UShort_t  sec,        UShort_t  str,
+                          UShort_t  sam, 
+                          UShort_t&   ddl,        UShort_t&   board, 
+                          UShort_t&   altro,      UShort_t&   channel, 
+                          UShort_t& timebin) const;
+  /** Map a detector index into a hardware address. 
+      @param det         The detector #
+      @param ring        The ring ID
+      @param sec         The sector #
+      @param str         The strip #
+      @param sam         The sample number 
+      @param ddl         On return, hardware DDL number 
+      @param hwaddr      On return, hardware address.  
+      @param timebin     On return, the timebin number (local to ALTRO)
+      @return @c true on success, false otherwise */
+  Bool_t Detector2Hardware(UShort_t  det,        Char_t    ring, 
+                          UShort_t  sec,        UShort_t  str,
+                          UShort_t  sam, 
+                          UShort_t&   ddl,        UShort_t&   hwaddr, 
+                          UShort_t& timebin) const;
+#if 0
   /** Translate detector coordinates to hardware address 
       @param det      Detector # (1-3)
       @param ring     Ring ID ('I' or 'O')
@@ -316,8 +410,8 @@ public:
       @return @c true on success. */
   Bool_t   Detector2Hardware(UShort_t det, Char_t ring, 
                             UShort_t sec, UShort_t str, 
-                            UInt_t& ddl,  UInt_t& board,
-                            UInt_t& chip, UInt_t& channel) const;
+                            UShort_t& ddl,  UShort_t& board,
+                            UShort_t& chip, UShort_t& channel) const;
   /** Translate detector coordinates to hardware address 
       @param det      Detector # (1-3)
       @param ring     Ring ID ('I' or 'O')
@@ -327,15 +421,12 @@ public:
       @param addr     On return, Hardware address
       @return @c true on success. */
   Bool_t   Detector2Hardware(UShort_t det, Char_t ring, UShort_t sec, 
-                            UShort_t str, UInt_t& ddl, UInt_t& addr) const;
+                            UShort_t str, UShort_t& ddl, UShort_t& addr) const;
+#endif
   /** Get the map that translates hardware to detector coordinates 
       @return Get the map that translates hardware to detector
       coordinates */ 
   AliFMDAltroMapping* GetAltroMap() const;
-  /** Whether raw data is in the old ALTRO format (i.e., no RCU
-      trailer), or in the new format (with a trailer). 
-      @return false if the raw data has no RCU trailer */ 
-  Bool_t HasRcuTrailer() const { return fHasRcuTrailer; } 
   /** Whether raw data has full common data header (8 32bit words) or
       the older invalid format (7 32bit words with bogus entries)
       @return false if the raw data has incomplete data header */ 
@@ -350,6 +441,9 @@ public:
   static const char* AltroMapPath()        { return fgkAltroMap; }
   static const char* ZeroSuppressionPath() { return fgkZeroSuppression; }
   static const char* StripRangePath()      { return fgkStripRange; }
+  static const char* GetPedestalShuttleID()   {return fkPedestalShuttleID;}
+  static const char* GetGainShuttleID()       {return fkGainShuttleID;}
+  static const char* GetConditionsShuttleID()   {return fkConditionsShuttleID;}
 protected:
   /** CTOR  */
   AliFMDParameters();
@@ -362,6 +456,9 @@ protected:
       fAltroChannelSize(o.fAltroChannelSize),
       fChannelsPerAltro(o.fChannelsPerAltro),
       fPedestalFactor(o.fPedestalFactor),
+      fZSPre(o.fZSPre),
+      fZSPost(o.fZSPost),
+      fZSPedSubtract(o.fZSPedSubtract),
       fFixedPedestal(o.fFixedPedestal),
       fFixedPedestalWidth(o.fFixedPedestalWidth),
       fFixedZeroSuppression(o.fFixedZeroSuppression),
@@ -371,7 +468,6 @@ protected:
       fFixedMaxStrip(o.fFixedMaxStrip),
       fFixedPulseGain(o.fFixedPulseGain),
       fEdepMip(o.fEdepMip),
-      fHasRcuTrailer(o.fHasRcuTrailer),
       fHasCompleteHeader(o.fHasCompleteHeader),
       fZeroSuppression(o.fZeroSuppression),
       fSampleRate(o.fSampleRate),
@@ -411,32 +507,38 @@ protected:
   /** Initialize strip range.  Try to get it from CDB */
   void InitStripRange(AliFMDPreprocessor* pp=0);
 
-  Bool_t          fIsInit;               // Whether we've been initialised  
+  Bool_t          fIsInit;                   // Whether we've been initialised  
 
-  static const char* fgkPulseGain;      // Path to PulseGain calib object
-  static const char* fgkPedestal;       // Path to Pedestal calib object
-  static const char* fgkDead;           // Path to Dead calib object
-  static const char* fgkSampleRate;     // Path to SampleRate calib object
-  static const char* fgkAltroMap;       // Path to AltroMap calib object
-  static const char* fgkZeroSuppression; // Path to ZeroSuppression cal object
-  static const char* fgkStripRange;      // Path to strip range cal object
-  const Float_t   fkSiDeDxMip;           // MIP dE/dx in Silicon
-  UShort_t        fVA1MipRange;          // # MIPs the pre-amp can do    
-  UShort_t        fAltroChannelSize;     // Largest # to store in 1 ADC ch.
-  UShort_t        fChannelsPerAltro;     // Number of pre-amp. chan/adc chan.
-  Float_t         fPedestalFactor;       // Number of pedestal widths
+  static const char* fgkPulseGain;          // Path to PulseGain calib object
+  static const char* fgkPedestal;           // Path to Pedestal calib object
+  static const char* fgkDead;               // Path to Dead calib object
+  static const char* fgkSampleRate;         // Path to SampleRate calib object
+  static const char* fgkAltroMap;           // Path to AltroMap calib object
+  static const char* fgkZeroSuppression;     // Path to ZeroSuppression cal object
+  static const char* fgkStripRange;          // Path to strip range cal object
+  const Float_t   fkSiDeDxMip;               // MIP dE/dx in Silicon
+  UShort_t        fVA1MipRange;              // # MIPs the pre-amp can do    
+  UShort_t        fAltroChannelSize;         // Largest # to store in 1 ADC ch.
+  UShort_t        fChannelsPerAltro;         // Number of pre-amp. chan/adc chan.
+  Float_t         fPedestalFactor;           // Number of pedestal widths
+  UShort_t        fZSPre;                    // Number of pre-samples in ZS
+  UShort_t        fZSPost;                   // Number of post-samples in ZS
+  Bool_t          fZSPedSubtract;            // Pedestal subtraction before ZS
 
-  Float_t         fFixedPedestal;        // Pedestal to subtract
-  Float_t         fFixedPedestalWidth;   // Width of pedestal
-  UShort_t        fFixedZeroSuppression; // Threshold for zero-suppression
-  UShort_t        fFixedSampleRate;      // Times the ALTRO samples pre-amp.
-  Float_t         fFixedThreshold;       // Threshold in ADC counts
-  UShort_t        fFixedMinStrip;        // Minimum strip read-out
-  UShort_t        fFixedMaxStrip;        // Maximum strip read-out 
-  mutable Float_t fFixedPulseGain;       //! Gain (cached)
-  mutable Float_t fEdepMip;              //! Cache of energy loss for a MIP
-  Bool_t          fHasRcuTrailer;        // if the raw data has RCU trailer
-  Bool_t          fHasCompleteHeader;    // raw data has incomplete data header
+  Float_t         fFixedPedestal;            // Pedestal to subtract
+  Float_t         fFixedPedestalWidth;       // Width of pedestal
+  UShort_t        fFixedZeroSuppression;     // Threshold for zero-suppression
+  UShort_t        fFixedSampleRate;          // Times the ALTRO samples pre-amp.
+  Float_t         fFixedThreshold;           // Threshold in ADC counts
+  UShort_t        fFixedMinStrip;            // Minimum strip read-out
+  UShort_t        fFixedMaxStrip;            // Maximum strip read-out 
+  mutable Float_t fFixedPulseGain;           //! Gain (cached)
+  mutable Float_t fEdepMip;                  //! Cache of energy loss for a MIP
+  Bool_t          fHasCompleteHeader;        // raw data has incomplete data header
+  
+  static const char* fkPedestalShuttleID;    // Shuttle/preprocessor ID for pedestals
+  static const char* fkGainShuttleID;        // Shuttle/preprocessor ID for gains
+  static const char* fkConditionsShuttleID;  // Shuttle/preprocessor ID for conditions
   
   AliFMDCalibZeroSuppression* fZeroSuppression; // Zero suppression from CDB
   AliFMDCalibSampleRate*      fSampleRate;      // Sample rate from CDB 
@@ -446,7 +548,7 @@ protected:
   AliFMDAltroMapping*         fAltroMap;        // Map of hardware
   AliFMDCalibStripRange*      fStripRange;      // Strip range
   
-  ClassDef(AliFMDParameters,5) // Manager of parameters
+  ClassDef(AliFMDParameters,6) // Manager of parameters
 };
 
 #endif