#ifndef HKICKTRACKF_H
#define HKICKTRACKF_H

#include "hreconstructor.h"
#include "hgeomvector.h"
#include "hkickplane2.h"
#include "hkickmatchpar.h"
#include "htofhit.h"
#include "htofcluster.h"
#include "hshowerhit.h"
#include "hkickcandidate.h"
#include "hkickcandidateevaluator.h"
#include "hkickimpact.h"
#include "hkicktask.h"
#include "hkickcandidatematrix.h"
#include "TObject.h"
#include "TFile.h"
#include "TNtuple.h"

class HCategory;
class HMdcSeg;
class HMdcGeomPar;
class HTofGeomPar;
class HTofClusterFPar;
class HTofinoGeomPar;
class HSpecGeomPar;
class HIterator;
class HKickTrackFPar;
class HRuntimeDb;
class HShowerGeometry;
class HKickTrack;
class HEvent;
class TH1F;

class HKickTrackF : public HKickTask {
private:
  static const Int_t kInactiveSector;  //Sector is not active
  static const Int_t kLowResSector;    //Sector has not outer chambers
protected:
  Cat_t fShowerCatId;
  HLocation fSectorLoc; //!
  HKickPlane2 *fKickPlane; //The kick plane
  HKickMatchPar *fMatchPar;
  HKickPlane2 *fKickPlaneList[2];
  HKickMatchPar *fMatchParList[2];
  HKickTrackFPar *fKickPar; //Finder parameters
  TClonesArray *fImpacts; //!List of impacts in kick plane.
  Int_t fNImpacts; //Nb of valid impacts
  HCategory *fInput; //!Input category
  HCategory *fTofHits; //!TOF hits
  HCategory *fTofClusters; //!TOF clusters
  HCategory *fShowerHits; //!
  HCategory *fCandidateOut; //! Output category
  //  HTofHit *fTofArray[22*8]; //! array of tof hits;
  //HShowerHit *fShowerArray[32*32]; //FIXME:
  TObjArray fOuterHitArray;
  Int_t fNTofHits, fNShowerHits,fNTotalHits;
  HIterator *fIter; //Iterator in fInput
  HIterator *fTofIter; //Iterator in fInput
  HIterator *fTofCIter; //Iterator in fInput
  HIterator *fShowerIter; //!
  Double_t fMinMomentum; 
  Double_t fMaxXPull; //Max pull in x
  HMdcGeomPar *fMdcGeometry; //!Geometry transformation
  HTofGeomPar *fTofGeometry; //!TOF geometry
  HTofClusterFPar *fTofClFPar;
  HTofinoGeomPar *fTofinoGeometry; //! Tofino Geometry
  HSpecGeomPar *fSpecGeometry;
  HShowerGeometry *fShowerGeometry;
  HKickCandidateMatrix fCandidates;
  HKickCandidateEvaluator *fEvaluator;
  Bool_t fHasTof, fHasShower;
  Bool_t fConservativeMode; 
  Bool_t fTofClusterMode;
  TArrayI fSectors; //Sectors to be analized.
  Float_t fTimeOffset;
  Bool_t fDebug;
  Bool_t fControlHistograms;  // flag for control histograms
  TNtuple *fRecStat;  //! Reconstruction statistics
  Float_t fTargetFlag; //Flag indicating which target was used.
  Bool_t fUsingVertex; //Wheter to use or not to use vertex algorithm
  Bool_t fMultipleTarget;

  TH1F *histCorELoss;
  TH1F *histCorELossCut;
  TH1F *histDiffMom;
  TH1F *histDiffMomCut;

  virtual void readHits(HLocation &loc);
  virtual void readMetaHits(HLocation &loc);
  void transform(HMdcSeg *hit,HGeomVector &r,HGeomVector &alpha);
  Bool_t isUnique(Int_t i,Int_t j);
  Int_t execute_mult(void);
  virtual void fillControl(HKickCandidate &candidate, HKickImpact *imp);
  virtual HKickTrack *fillData(HKickCandidate &candidate,HKickImpact *imp);
  virtual HKickCandidateEvaluator *makeEvaluator(void);
  void assignRemainingCombinations(void);
  void clearImpactList();
  void evaluateMetaCandidates(void);
  Bool_t passesCuts(HKickCandidate &c); 
  void assignUniqueCombinations(void);
  void selectTofClusters(Int_t i);
  void checkTofClusterParticipants(Int_t i,Int_t j,Int_t sz);
  void checkMETAoverlap(Int_t i,Int_t j);
  virtual HKickTrack *makeTrack(void);
  virtual HCategory *makeOutputCategory(HEvent *event);
public:
  //HKickTrackF(void);
  HKickTrackF(const Text_t name[]="kick.trackf",const Text_t title[]="Kick track finder");
  ~HKickTrackF(void);
  Int_t execute(void);
  Bool_t init(void);
  Bool_t reinit(void);
  Bool_t finalize(void);

  Bool_t hasTof(void) { return fHasTof; }
  Bool_t hasShower(void) { return fHasShower; }
  void setConservativeMode(Bool_t m) { fConservativeMode=m; }
  Bool_t getConservativeMode(void) { return fConservativeMode; }
  void setTofClusterMode(Bool_t m) { fTofClusterMode = m; }
  Bool_t getTofClusterMode(void) { return fTofClusterMode; }
  void setDebug(Bool_t flag=kTRUE) { fDebug = flag; }
  void enableControlHistograms() { fControlHistograms = kTRUE; }
  Bool_t usingVertexAlgorithm(void) { return fUsingVertex; }
  void setVertexAlgorithm(Bool_t f=kTRUE) { fUsingVertex=f; }
  Bool_t hasMultipleTarget(void) { return fMultipleTarget; }
  void setMultipleTarget(Bool_t f=kTRUE) { fMultipleTarget=f; }
  ClassDef(HKickTrackF,0)
};

#endif






Last change: Sat May 22 12:58:44 2010
Last generated: 2010-05-22 12:58

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.