#ifndef HMDCPPEVTFILTER_H
#define HMDCPPEVTFILTER_H
#include "hevent.h"
#include "hreconstructor.h"
#include "TString.h"
#include "TCanvas.h"
#include "TH1.h"
#include "TH2.h"
#include "TF1.h"
#include "hmdcseg.h"
#include "hades.h"
#include "haddef.h"
#include "heventheader.h"
#include "hiterator.h"
#include "hmdcgeompar.h"
#include "hspecgeompar.h"
#include "hmdcdetector.h"
#include "hcategory.h"
#include "hruntimedb.h"
#include "heventheader.h"
#include "hmdcclus.h"
class TH1F;
class TFile;
class TLine;
class HMdcPPEvtFilter : public HReconstructor  {
  protected:
  HRuntimeDb*        rtdb;
  HCategory*         catmHMdcSeg;   
  HMdcSeg*           mdcseg;         
  HIterator*         mdcsegiter;     
  HCategory*         catmHMdcClus;   
  HMdcClus*          mdcclus;         
  HIterator*         mdcclusiter;     
  Char_t title[300];          
  Char_t name[300];           
  Char_t xtitle[300];         
  Char_t ytitle[300];         
  Char_t ztitle[300];         
  TH1F*              histtanthetamult;
  TH1F*              histphidiff;
  TH1F*              histphidiffcut;
  TH1F*              histtanthetamultcut;
  TH2F*              histchithetacut;
  TH2F*              histchitheta;
  TH2F*              histchiphicut;
  TH2F*              histchiphi;
  TCanvas*           canv1; 
  TCanvas*           canv2; 
  TCanvas*           canv3; 
  TString histFileDir;
  TString histFileSuffix;
  TString histFileOption;
  TString histFile;
  TString psFile;
  TString flNmWoExt;         
  Bool_t saveHist;
  Bool_t saveCanv;
  Bool_t savePSFile;
  Int_t flagcategory;
  Int_t sector[200];
  Float_t phishift[6];
  Float_t theta[200], phi[200];
  Float_t phidiff, tanthetamult;
  Float_t phimin, phimax;
  Float_t tanthetamin, tanthetamax;
  Float_t phiwidth, tanthetawidth;
  Float_t tanthetamean, phimean;
  Int_t multiplicity;       
  Int_t IsElasticFlag;
  Int_t TrigBit;
  Float_t chi2[200];
 void resetCounters()
 {
   multiplicity=0;
 }
 void resetArrays()
   {
     for(Int_t a=0; a<200; a++)
       {
	 phi[a]=0;
	 theta[a]=0;
	 chi2[a]=0;
	 sector[a]=0;
       }
   }
  private:
 TFile* openHistFile(const Char_t* flag);
  public:
    HMdcPPEvtFilter(const Text_t *name,const Text_t *title, Int_t flagcat=0);
    HMdcPPEvtFilter(void);
    ~HMdcPPEvtFilter(void);
    Bool_t init(void);
    Bool_t reinit(void);
    Bool_t finalize(void);
    Int_t  execute(void);
    void createHists();
    void initVariables();
    void setThetaCuts(Float_t Theta, Float_t DTheta);
    void setPhiCuts(Float_t Phi, Float_t DPhi);
                void setSaveHists(Bool_t s = kTRUE){saveHist = s;};
                void setSaveCanv(Bool_t s = kTRUE){saveCanv = s;};
                void setSavePSFile(Bool_t s = kTRUE){savePSFile = s;};
                void setTrigBit(Int_t bit){TrigBit = bit;};
    void setHistFile(const Char_t* dir,const Char_t* suf,const Char_t* option="NEW");
    ClassDef(HMdcPPEvtFilter,0)
};
#endif