#ifndef HFORWARDFINETRACKER_H #define HFORWARDFINETRACKER_H #include "hfilter.h" #include "hgeomvector.h" #include "hreconstructor.h" #include "stsdef.h" #include #include #include #include #include #include #include #include class HCategory; class HStsDigiPar; class HStsGeomPar; class HForwardCandFinderPar; class HFRpcHit; class HForwardCand; class HStsCal; class HStsCalPar; class HForwardFineTracker : public HReconstructor { public: HForwardFineTracker(const Text_t* name, const Text_t* title); virtual ~HForwardFineTracker(); virtual Bool_t init(); virtual Bool_t reinit(); virtual Int_t execute(); virtual Bool_t finalize(); void disableTofRefit() { disable_tof_refit = kTRUE; } void enableTofRefit() { disable_tof_refit = kFALSE; } protected: // flags Bool_t disable_tof_refit; Bool_t with_vertex_cluster; private: HCategory* pKine; // Kine category for sim HCategory* pStrawCal; // Input array of straw hits HCategory* pFRpcHits; // Input array of rpc hits HCategory* pForwardCand; // Output array of candidates HStsGeomPar* pStsGeomPar; // strips geometry HStsCalPar* pCalPar; // cal run par HForwardCandFinderPar* pStrawVFPar; // vector finder parameters Bool_t isSimulation; // flag to mark simulation run HGeomVector primary_vertex; // the primary vector cluster Float_t fZ0[STS_MAX_MODULES]; // Z-coord. of the first layers HGeomVector* stsCellsLab[STS_MAX_MODULES][STS_MAX_LAYERS][STS_MAX_CELLS]; // Centre of the strip [mm] // cut variables Float_t fHRErrU; // hit meas. error for HR Float_t fHRCutChi2; // Chi2-cut Float_t fFRpcWindowU; Float_t fFRpcWindowL; ROOT::Math::Minimizer* minimizer; ROOT::Math::Functor* minimizer_functor; Double_t step[5]; Float_t minimize(Double_t* pars); /// Get hits from HStsCal and sort them module and layer likewise /// @return number of accepted hits void setTrackId(HForwardCand* vec); void findLine(Int_t patt, const Int_t (&plane_index)[STS_MAX_VPLANES], Double_t* pars); Double_t findChi2(Int_t patt, const Int_t (&plane_index)[STS_MAX_VPLANES], Double_t* pars, Float_t error); void filterTracks(); void selectTracks(); Double_t refit(HForwardCand* track, Double_t* pars, TMatrixDSym* cov); HFRpcHit* matchFRpcHit(HForwardCand* track); Bool_t fillForwardCandSim(HForwardCand* part, Int_t track); void storeVectors(); // statistics Int_t n_events; // number of analyzed events Int_t n_ok_events; // number of analyzed events with at least one vector reconstructed Int_t n_vecs; // number of analyzed events }; #endif