//this file looks like plain C, but it's actually -*- c++ -*-
#ifndef __TQPCAAnalysisJob__
#define __TQPCAAnalysisJob__

#include "QFramework/TQAnalysisJob.h"
#include "TObject.h"
#include "QFramework/TQPCA.h"
#include "QFramework/TQObservable.h"

class TQSample;

class TQPCAAnalysisJob : public TQAnalysisJob {

protected:
 
  TQPCA* fPCA = NULL;
  double* fValues = NULL;
  std::vector<TString> fNames;
  std::vector<TString> fTitles;
  std::vector<TString> fExpressions;
  std::vector<TQObservable*> fObservables; //!
  TQSampleFolder* poolAt = NULL;
  double weightCutoff = 0;

  bool initializePCA();
  bool finalizePCA();
  bool checkValues();
 
public:
 
  TQPCAAnalysisJob();
  TQPCAAnalysisJob(TString name_);
 
  virtual TQPCAAnalysisJob* copy();
  virtual TQPCAAnalysisJob* getClone() override;
  TQPCAAnalysisJob(TQPCAAnalysisJob &job);
  TQPCAAnalysisJob(TQPCAAnalysisJob* job);

  virtual void bookVariable(const TString& name, const TString& title, const TString& expression);
  virtual void bookVariable(const TString& expression);
 
  virtual bool initializeSampleFolder(TQSampleFolder* sf) override;
  virtual bool finalizeSampleFolder(TQSampleFolder* sf) override;
  virtual bool initializeSelf() override;
  virtual bool finalizeSelf() override;
  virtual bool execute(double weight) override;
 
  virtual void setWeightCutoff(double cutoff);
  virtual double getWeightCutoff();

  virtual ~TQPCAAnalysisJob();

  virtual TObjArray * getBranchNames() override;
 
  ClassDefOverride(TQPCAAnalysisJob, 1); // analysis job preparing a principal component analysis
 
};

#endif
 TQPCAAnalysisJob.h:1
 TQPCAAnalysisJob.h:2
 TQPCAAnalysisJob.h:3
 TQPCAAnalysisJob.h:4
 TQPCAAnalysisJob.h:5
 TQPCAAnalysisJob.h:6
 TQPCAAnalysisJob.h:7
 TQPCAAnalysisJob.h:8
 TQPCAAnalysisJob.h:9
 TQPCAAnalysisJob.h:10
 TQPCAAnalysisJob.h:11
 TQPCAAnalysisJob.h:12
 TQPCAAnalysisJob.h:13
 TQPCAAnalysisJob.h:14
 TQPCAAnalysisJob.h:15
 TQPCAAnalysisJob.h:16
 TQPCAAnalysisJob.h:17
 TQPCAAnalysisJob.h:18
 TQPCAAnalysisJob.h:19
 TQPCAAnalysisJob.h:20
 TQPCAAnalysisJob.h:21
 TQPCAAnalysisJob.h:22
 TQPCAAnalysisJob.h:23
 TQPCAAnalysisJob.h:24
 TQPCAAnalysisJob.h:25
 TQPCAAnalysisJob.h:26
 TQPCAAnalysisJob.h:27
 TQPCAAnalysisJob.h:28
 TQPCAAnalysisJob.h:29
 TQPCAAnalysisJob.h:30
 TQPCAAnalysisJob.h:31
 TQPCAAnalysisJob.h:32
 TQPCAAnalysisJob.h:33
 TQPCAAnalysisJob.h:34
 TQPCAAnalysisJob.h:35
 TQPCAAnalysisJob.h:36
 TQPCAAnalysisJob.h:37
 TQPCAAnalysisJob.h:38
 TQPCAAnalysisJob.h:39
 TQPCAAnalysisJob.h:40
 TQPCAAnalysisJob.h:41
 TQPCAAnalysisJob.h:42
 TQPCAAnalysisJob.h:43
 TQPCAAnalysisJob.h:44
 TQPCAAnalysisJob.h:45
 TQPCAAnalysisJob.h:46
 TQPCAAnalysisJob.h:47
 TQPCAAnalysisJob.h:48
 TQPCAAnalysisJob.h:49
 TQPCAAnalysisJob.h:50
 TQPCAAnalysisJob.h:51
 TQPCAAnalysisJob.h:52
 TQPCAAnalysisJob.h:53
 TQPCAAnalysisJob.h:54
 TQPCAAnalysisJob.h:55
 TQPCAAnalysisJob.h:56
 TQPCAAnalysisJob.h:57
 TQPCAAnalysisJob.h:58
 TQPCAAnalysisJob.h:59