]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDQAChecker.h
Updating info for ACORDE and TRD
[u/mrichter/AliRoot.git] / FMD / AliFMDQAChecker.h
index c7f860d012c6c54c9e446dc28ee11b1eb5e92b40..0931e54423a7d44e1eb2654d7d2e08cfa1c58239 100644 (file)
 class TFile; 
 class TH1F; 
 class TH1I; 
+class TFitResultPtr;
 
-/** @class AliFMDQAChecker 
-    @brief Quality assurance checker for the FMD */
+/** 
+ * @class AliFMDQAChecker 
+ * @brief Quality assurance checker for the FMD 
+ */
 class AliFMDQAChecker : public AliQACheckerBase 
 {
 public:
   /** Constructor */
-  AliFMDQAChecker() 
-    : AliQACheckerBase("FMD","FMD Quality Assurance Checker") 
-  {}          
+  AliFMDQAChecker();
   /** Destructor */
   virtual ~AliFMDQAChecker() {}
-  Double_t * Check(AliQAv1::ALITASK_t what, TObjArray ** list, AliDetectorRecoParam* t);
+  /** 
+   * Member function called to do the actual checking
+   * 
+   * @param rv   Array of return values. 
+   * @param what What to check 
+   * @param list Array of arrays of histograms.  There's one arrat for
+   *             each 'specie'
+   * @param t    Reconstruction parameters - not used. 
+   */
+  void Check(Double_t* rv, AliQAv1::ALITASK_t what, 
+            TObjArray** list, const AliDetectorRecoParam* t);
+  /** 
+   * Make output images.  This is overridden relative to the base
+   * class so that we can set the log(y) scale and put everything on
+   * the same axis. 
+   * 
+   * @param list  List of specie array of histograms 
+   * @param task  What to show 
+   * @param mode  Mode 
+   */
+  void  MakeImage(TObjArray** list, 
+                 AliQAv1::TASKINDEX_t task, 
+                 AliQAv1::MODE_t mode);
+  /** 
+   * Set wether to scale the histograms to a common Y axis or not when
+   * generating plots
+   * 
+   * @param on If true, do scale 
+   */
+  void SetDoScale(Bool_t on=true) { fDoScale = on; }
+protected:
+  // Return values 
+  enum { 
+    kOK,
+    kProblem, 
+    kBad, 
+    kWhatTheFk
+  };
+  /** 
+   * Add a status pave to the plot 
+   * 
+   * @param ll   List to add to 
+   * @param qual Quality 
+   * @param xl   X coordinate of lower-left corner (NDC)
+   * @param yl   Y coordinate of lower-left corner (NDC)
+   * @param xh   X coordinate of upper-right corner (NDC)
+   * @param yh          Y coordinate of upper-right corner (NDC)
+   */
+  void AddStatusPave(TH1* hist, Int_t qual, 
+                    Double_t xl=-1, Double_t yl=-1, 
+                    Double_t xh=-1, Double_t yh=-1) const;
+  /** 
+   * Check one histogram 
+   * 
+   * @param specie Event specie 
+   * @param hist   Histogram to check 
+   * 
+   * @return 0 if all is good, increasing severity for increasingly
+   * bad data
+   */
+  UShort_t CheckOne(AliQAv1::ALITASK_t          what,
+                   AliRecoParam::EventSpecie_t specie, 
+                   TH1*                        hist) const;
+  /** 
+   * Check raw input.   If the reconstructor is enabled, then we try to fit 
+   * 
+   * @f[ 
+   *   f(\Delta;\Delta_p,\xi,\sigma) = \int_{-\infty}^{\infty}d\Delta_p' 
+   *     f_{L}(\Delta;\Delta_p',\xi) \times 
+   *     e^{\frac{(\Delta-\Delta_p')^2}{\sigma^2}}
+   * @f]
+   * 
+   * where @f$f_L@f$ is the Landau distribution, to the data.  The
+   * quality is set according to the value of @f$\chi^2/\nu@f$.
+   *
+   * If no reconstructor is set, then simply check that the histogram
+   * isn't empty
+   * 
+   * @param specie Event specie 
+   * @param hist   Histogram to check 
+   * 
+   * @return 0 if all is good, increasing severity for increasingly
+   * bad data
+   */
+  UShort_t CheckRaw(AliRecoParam::EventSpecie_t specie, 
+                   TH1*                        hist) const;
+  /** 
+   * Check simulation output.  Does a simple test of whether the
+   * histogram is empty or not.
+   * 
+   * @param specie Event specie 
+   * @param hist   Histogram to check 
+   * 
+   * @return 0 if all is good, increasing severity for increasingly
+   * bad data
+   */
+  UShort_t CheckSim(AliRecoParam::EventSpecie_t specie, 
+                   TH1*                        hist) const;
+  /** 
+   * Check ESD.  Does a simple test of whether the histogram is empty
+   * or not.
+   * 
+   * @param specie Event specie 
+   * @param hist   Histogram to check 
+   * 
+   * @return 0 if all is good, increasing severity for increasingly
+   * bad data
+   */
+  UShort_t CheckESD(AliRecoParam::EventSpecie_t specie, 
+                   TH1*                        hist) const;
+  /** 
+   * Check reconstruction points.  Does a simple test of whether the
+   * histogram is empty or not.
+   * 
+   * @param specie Event specie 
+   * @param hist   Histogram to check 
+   * 
+   * @return 0 if all is good, increasing severity for increasingly
+   * bad data
+   */
+  UShort_t CheckRec(AliRecoParam::EventSpecie_t specie, 
+                   TH1*                        hist) const;
+  /** 
+   * Set the returned QA from this checker based on the values in the
+   * array @a values.  Note, this by-passes the Low/High setting of
+   * the base class (which are very confusing) 
+   * 
+   * @param index   Task index 
+   * @param values  Array of values 
+   */
+  void SetQA(AliQAv1::ALITASK_t index, Double_t* values) const;
+  /** 
+   * Process external parameters 
+   * 
+   */
+  void ProcessExternalParams();
+  /** 
+   * Process a single external parameter 
+   * 
+   * @param name Name of parameter 
+   * @param v    On return, the value - as a double 
+   */
+  void ProcessExternalParam(const char* name, Double_t& v);
+  /** 
+   * Get the thresholds from OCDB
+   * 
+   */
+  void GetThresholds();
+  /** 
+   * The basic check on a histogram 
+   * 
+   * @param hist Histogram 
+   * 
+   * @return 1 empty - 0 otherwise 
+   */
+  UShort_t BasicCheck(TH1* hist) const;
+  /** 
+   * Translate our internal quality measure to QA framework bit 
+   * 
+   * @param qual Internal quality 
+   * 
+   * @return QA framework quality bit 
+   */
+  AliQAv1::QABIT_t Quality2Bit(UShort_t qual) const;
+  /** 
+   * Add fit results to to plot 
+   * 
+   * @param hist  Histogram 
+   * @param res   Fit result 
+   * @param color Color to use for the text - depends on quality 
+   * @param low   Lower bound on fit range 
+   * @param high  Upper bound on fit range 
+   */
+  UShort_t CheckFit(TH1* hist, const TFitResultPtr& res, 
+                   Double_t low, Double_t high, Int_t& color) const;
+  Bool_t   fDoScale;           // Whether to scale all histograms 
+  Bool_t   fDidExternal;       // Whether we've processed the external params 
+  Bool_t   fShowFitResults;    // Whether to put the fit result on the plots
+  Double_t fELossLowCut;       // Low cut on ELoss fits 
+  Double_t fELossNRMS;         // Number of RMS to fit upward
+  Double_t fELossBadChi2Nu;    // Cut on bad chi2/nu
+  Double_t fELossFkupChi2Nu;   // Cut on F**ked up chi2/nu
+  Int_t    fELossMinEntries;   // Least number of entries before fitting
+  Int_t    fELossMaxEntries;   // Maximum number of entries before clear
+  Double_t fELossGoodParError; // Least relative error
+  Double_t fELossMinSharing;   // Least to consider for sharing fit
+  Double_t fROErrorsBad;       // Cut on read-out errors 
+  Double_t fROErrorsFkup;      // Cut on read-out errors 
+  Int_t    fMaxNProblem;       // Maximum number of problematic fits
+  Int_t    fMaxNBad;           // Maximum number of bad fits
+  Bool_t   fNoFits;            // If true, do not fit at all 
 private:
-  ClassDef(AliFMDQAChecker,0)  // Yves? what to do? 
+  /** 
+   * Copy constructor - not implemented 
+   * 
+   * @param qac Object to copy from
+   */
+  AliFMDQAChecker(const AliFMDQAChecker& qac); 
+  /** 
+   * assignment operator - not implemented 
+   * 
+   * @param qac Object to assign from 
+   * 
+   * @return Reference to this object 
+   */
+  AliFMDQAChecker& operator=(const AliFMDQAChecker& qac); 
+
+  ClassDef(AliFMDQAChecker,0)  // Checker of FMD data quality 
 };
 
 #endif // AliFMDQAChecker_H