////////////////////////////////////////////////////////////////////////
/// $Id: QuadLinearityCalScheme.h,v 1.1 2006/02/21 23:12:57 tagg Exp $
///
/// Calibrator for ND nonlinearity curves, using a quadratic fit.
///
/// Nathaniel Tagg
/// (tagg@minos.phy.tufts.edu)
////////////////////////////////////////////////////////////////////////
#ifndef QUADLINEARITYCALSCHEME_H
#define QUADLINEARITYCALSCHEME_H

#include "CalScheme.h"
#include "Rtypes.h"
#include "DatabaseInterface/DbiResultPtr.h"
#include "DatabaseInterface/DbiResultSet.h"
#include "DatabaseInterface/DbiTableRow.h"
#include "DatabaseInterface/DbiValidityRec.h"
#include "PulserCalibration/PulserGain.h"
#include "PulserCalibration/PulserGainPin.h"
#include "Plex/PlexStripEndId.h"
#include "Plex/PlexPinDiodeId.h"
#include "Plex/PlexLedId.h"
#include "Plex/PlexHandle.h"
#include "Calibrator/CalPulserFits.h"

class VldContext;

class QuadLinearityCalScheme : public CalScheme
{
public:
  QuadLinearityCalScheme();
  ~QuadLinearityCalScheme();


  virtual  void DoReset(const VldContext& vc);
  virtual void ConfigModified();
  virtual void PrintConfig( std::ostream& os ) const;
 
  virtual FloatErr GetLinearized(FloatErr rawcharge, const PlexStripEndId& seid) const;
  virtual FloatErr DecalLinearity(FloatErr lin, const PlexStripEndId& seid) const;

private:

  // Configuration 
  Double_t fPulseToBucketCorrection;
  Int_t    fBucketMode; // 1=true, 0=pulse mode

  // Database:
  DbiResultPtr<CalPulserFits> fFitTable;
 
  ClassDef(QuadLinearityCalScheme,0)     
};


#endif // QUADLINEARITYCALSCHEME_H

