ROOT logo
#ifndef ALIFMDQACHECKER_H
#define ALIFMDQACHECKER_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
 * reserved. 
 *
 * See cxx source for full Copyright notice                               
 */
#include "AliQACheckerBase.h"
class TFile; 
class TH1F; 
class TH1I; 
class TFitResultPtr;

/** 
 * @class AliFMDQAChecker 
 * @brief Quality assurance checker for the FMD 
 */
class AliFMDQAChecker : public AliQACheckerBase 
{
public:
  /** Constructor */
  AliFMDQAChecker();
  /** Destructor */
  virtual ~AliFMDQAChecker() {}
  /** 
   * 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:
  /** 
   * 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
// Local Variables:
//  mode: c++
// End:
 AliFMDQAChecker.h:1
 AliFMDQAChecker.h:2
 AliFMDQAChecker.h:3
 AliFMDQAChecker.h:4
 AliFMDQAChecker.h:5
 AliFMDQAChecker.h:6
 AliFMDQAChecker.h:7
 AliFMDQAChecker.h:8
 AliFMDQAChecker.h:9
 AliFMDQAChecker.h:10
 AliFMDQAChecker.h:11
 AliFMDQAChecker.h:12
 AliFMDQAChecker.h:13
 AliFMDQAChecker.h:14
 AliFMDQAChecker.h:15
 AliFMDQAChecker.h:16
 AliFMDQAChecker.h:17
 AliFMDQAChecker.h:18
 AliFMDQAChecker.h:19
 AliFMDQAChecker.h:20
 AliFMDQAChecker.h:21
 AliFMDQAChecker.h:22
 AliFMDQAChecker.h:23
 AliFMDQAChecker.h:24
 AliFMDQAChecker.h:25
 AliFMDQAChecker.h:26
 AliFMDQAChecker.h:27
 AliFMDQAChecker.h:28
 AliFMDQAChecker.h:29
 AliFMDQAChecker.h:30
 AliFMDQAChecker.h:31
 AliFMDQAChecker.h:32
 AliFMDQAChecker.h:33
 AliFMDQAChecker.h:34
 AliFMDQAChecker.h:35
 AliFMDQAChecker.h:36
 AliFMDQAChecker.h:37
 AliFMDQAChecker.h:38
 AliFMDQAChecker.h:39
 AliFMDQAChecker.h:40
 AliFMDQAChecker.h:41
 AliFMDQAChecker.h:42
 AliFMDQAChecker.h:43
 AliFMDQAChecker.h:44
 AliFMDQAChecker.h:45
 AliFMDQAChecker.h:46
 AliFMDQAChecker.h:47
 AliFMDQAChecker.h:48
 AliFMDQAChecker.h:49
 AliFMDQAChecker.h:50
 AliFMDQAChecker.h:51
 AliFMDQAChecker.h:52
 AliFMDQAChecker.h:53
 AliFMDQAChecker.h:54
 AliFMDQAChecker.h:55
 AliFMDQAChecker.h:56
 AliFMDQAChecker.h:57
 AliFMDQAChecker.h:58
 AliFMDQAChecker.h:59
 AliFMDQAChecker.h:60
 AliFMDQAChecker.h:61
 AliFMDQAChecker.h:62
 AliFMDQAChecker.h:63
 AliFMDQAChecker.h:64
 AliFMDQAChecker.h:65
 AliFMDQAChecker.h:66
 AliFMDQAChecker.h:67
 AliFMDQAChecker.h:68
 AliFMDQAChecker.h:69
 AliFMDQAChecker.h:70
 AliFMDQAChecker.h:71
 AliFMDQAChecker.h:72
 AliFMDQAChecker.h:73
 AliFMDQAChecker.h:74
 AliFMDQAChecker.h:75
 AliFMDQAChecker.h:76
 AliFMDQAChecker.h:77
 AliFMDQAChecker.h:78
 AliFMDQAChecker.h:79
 AliFMDQAChecker.h:80
 AliFMDQAChecker.h:81
 AliFMDQAChecker.h:82
 AliFMDQAChecker.h:83
 AliFMDQAChecker.h:84
 AliFMDQAChecker.h:85
 AliFMDQAChecker.h:86
 AliFMDQAChecker.h:87
 AliFMDQAChecker.h:88
 AliFMDQAChecker.h:89
 AliFMDQAChecker.h:90
 AliFMDQAChecker.h:91
 AliFMDQAChecker.h:92
 AliFMDQAChecker.h:93
 AliFMDQAChecker.h:94
 AliFMDQAChecker.h:95
 AliFMDQAChecker.h:96
 AliFMDQAChecker.h:97
 AliFMDQAChecker.h:98
 AliFMDQAChecker.h:99
 AliFMDQAChecker.h:100
 AliFMDQAChecker.h:101
 AliFMDQAChecker.h:102
 AliFMDQAChecker.h:103
 AliFMDQAChecker.h:104
 AliFMDQAChecker.h:105
 AliFMDQAChecker.h:106
 AliFMDQAChecker.h:107
 AliFMDQAChecker.h:108
 AliFMDQAChecker.h:109
 AliFMDQAChecker.h:110
 AliFMDQAChecker.h:111
 AliFMDQAChecker.h:112
 AliFMDQAChecker.h:113
 AliFMDQAChecker.h:114
 AliFMDQAChecker.h:115
 AliFMDQAChecker.h:116
 AliFMDQAChecker.h:117
 AliFMDQAChecker.h:118
 AliFMDQAChecker.h:119
 AliFMDQAChecker.h:120
 AliFMDQAChecker.h:121
 AliFMDQAChecker.h:122
 AliFMDQAChecker.h:123
 AliFMDQAChecker.h:124
 AliFMDQAChecker.h:125
 AliFMDQAChecker.h:126
 AliFMDQAChecker.h:127
 AliFMDQAChecker.h:128
 AliFMDQAChecker.h:129
 AliFMDQAChecker.h:130
 AliFMDQAChecker.h:131
 AliFMDQAChecker.h:132
 AliFMDQAChecker.h:133
 AliFMDQAChecker.h:134
 AliFMDQAChecker.h:135
 AliFMDQAChecker.h:136
 AliFMDQAChecker.h:137
 AliFMDQAChecker.h:138
 AliFMDQAChecker.h:139
 AliFMDQAChecker.h:140
 AliFMDQAChecker.h:141
 AliFMDQAChecker.h:142
 AliFMDQAChecker.h:143
 AliFMDQAChecker.h:144
 AliFMDQAChecker.h:145
 AliFMDQAChecker.h:146
 AliFMDQAChecker.h:147
 AliFMDQAChecker.h:148
 AliFMDQAChecker.h:149
 AliFMDQAChecker.h:150
 AliFMDQAChecker.h:151
 AliFMDQAChecker.h:152
 AliFMDQAChecker.h:153
 AliFMDQAChecker.h:154
 AliFMDQAChecker.h:155
 AliFMDQAChecker.h:156
 AliFMDQAChecker.h:157
 AliFMDQAChecker.h:158
 AliFMDQAChecker.h:159
 AliFMDQAChecker.h:160
 AliFMDQAChecker.h:161
 AliFMDQAChecker.h:162
 AliFMDQAChecker.h:163
 AliFMDQAChecker.h:164
 AliFMDQAChecker.h:165
 AliFMDQAChecker.h:166
 AliFMDQAChecker.h:167
 AliFMDQAChecker.h:168
 AliFMDQAChecker.h:169
 AliFMDQAChecker.h:170
 AliFMDQAChecker.h:171
 AliFMDQAChecker.h:172
 AliFMDQAChecker.h:173
 AliFMDQAChecker.h:174
 AliFMDQAChecker.h:175
 AliFMDQAChecker.h:176
 AliFMDQAChecker.h:177
 AliFMDQAChecker.h:178
 AliFMDQAChecker.h:179
 AliFMDQAChecker.h:180
 AliFMDQAChecker.h:181
 AliFMDQAChecker.h:182
 AliFMDQAChecker.h:183
 AliFMDQAChecker.h:184
 AliFMDQAChecker.h:185
 AliFMDQAChecker.h:186
 AliFMDQAChecker.h:187
 AliFMDQAChecker.h:188
 AliFMDQAChecker.h:189
 AliFMDQAChecker.h:190
 AliFMDQAChecker.h:191
 AliFMDQAChecker.h:192
 AliFMDQAChecker.h:193
 AliFMDQAChecker.h:194
 AliFMDQAChecker.h:195
 AliFMDQAChecker.h:196
 AliFMDQAChecker.h:197
 AliFMDQAChecker.h:198
 AliFMDQAChecker.h:199
 AliFMDQAChecker.h:200
 AliFMDQAChecker.h:201
 AliFMDQAChecker.h:202
 AliFMDQAChecker.h:203
 AliFMDQAChecker.h:204
 AliFMDQAChecker.h:205
 AliFMDQAChecker.h:206
 AliFMDQAChecker.h:207
 AliFMDQAChecker.h:208
 AliFMDQAChecker.h:209
 AliFMDQAChecker.h:210
 AliFMDQAChecker.h:211
 AliFMDQAChecker.h:212
 AliFMDQAChecker.h:213
 AliFMDQAChecker.h:214
 AliFMDQAChecker.h:215
 AliFMDQAChecker.h:216
 AliFMDQAChecker.h:217
 AliFMDQAChecker.h:218
 AliFMDQAChecker.h:219
 AliFMDQAChecker.h:220
 AliFMDQAChecker.h:221
 AliFMDQAChecker.h:222
 AliFMDQAChecker.h:223
 AliFMDQAChecker.h:224
 AliFMDQAChecker.h:225
 AliFMDQAChecker.h:226
 AliFMDQAChecker.h:227
 AliFMDQAChecker.h:228
 AliFMDQAChecker.h:229
 AliFMDQAChecker.h:230
 AliFMDQAChecker.h:231
 AliFMDQAChecker.h:232
 AliFMDQAChecker.h:233
 AliFMDQAChecker.h:234
 AliFMDQAChecker.h:235
 AliFMDQAChecker.h:236
 AliFMDQAChecker.h:237
 AliFMDQAChecker.h:238