#ifndef HMDCTRACKFITTER_H
#define HMDCTRACKFITTER_H
#include <cmath>
#include "TObject.h"
#include "hlocation.h"
#include "hmdctrackparam.h"
#include "hmdcwiredata.h"
#include "hmdcdrifttimepar.h"
class HMdcTrackFitPar;
class HMdcSizesCells;
class HMdcSizesCellsMod;
class HMdcSizesCellsLayer;
class HMdcCal2ParSim;
class HMdcCal2Par;
class HMdcClus;
class HMdcWireFit;
class HMdcClusFit;
class HCategory;
class HMdcDigitPar;
class HMdcEvntListCells;
class HMdcTrackFitInOut : public TObject {
protected:
Int_t version;
HMdcDriftTimePar driftTimePar;
HMdcCal2ParSim* fCal2ParSim;
HMdcCal2Par* fCal2Par;
HMdcTrackFitPar* fitPar;
HCategory* fCalCat;
HCategory* fClusFitCat;
HCategory* fWireFitCat;
HCategory* fGeantKineCat;
HCategory* fGeantMdcCat;
HLocation locClusFit;
HLocation locWireFit;
HLocation loc;
Bool_t geantFlag;
Int_t wireOffsetFlag;
HMdcDigitPar* fDigitPar;
Float_t signalSpeed;
Bool_t fprint;
Int_t printStartEv;
Int_t nEventPrint;
HMdcSizesCells* fSizesCells;
HMdcSizesCellsMod* fSCModAr[6][4];
Bool_t useRndbPar;
Double_t cutWeight;
Int_t tofFlag;
Bool_t useRtdbTofFlag;
Double_t minTimeOffset;
Double_t maxTimeOffset;
Int_t minCellsNum;
Double_t totalChi2Cut;
Double_t chi2PerNdfCut;
Bool_t chi2CutFlag;
Bool_t useTukeyFlag;
Bool_t useRtdbTFlag;
Double_t cnWs;
Double_t cn2s;
Double_t cn4s;
Double_t tukeyScale;
Double_t minSig2;
Int_t maxNFilterIter;
Double_t minWeight;
Double_t maxChi2;
Bool_t doTargScan;
Bool_t calcInitValue;
Double_t minTOffsetIter;
Double_t funCt1;
Double_t stepD1;
Double_t funCt2;
Double_t stepD2;
Double_t stepD3;
Int_t exclLay[6][4];
public:
HMdcTrackFitInOut(void);
~HMdcTrackFitInOut(void) {}
Bool_t init(void);
Bool_t reinit(void);
void setDefaultFitParam(void);
void setModuleTof(void) {tofFlag=1; useRtdbTofFlag=kFALSE;}
void setSegmetTof(void) {tofFlag=2; useRtdbTofFlag=kFALSE;}
void setSectorTof(void) {tofFlag=3; useRtdbTofFlag=kFALSE;}
Int_t useWireOffset(void) const {return wireOffsetFlag;}
Bool_t isGeant(void) {return geantFlag;}
void setUseTukeyFlag(Bool_t flag) {useTukeyFlag=flag;
useRtdbTFlag=kFALSE;}
void setTukeyConstants(Double_t cw,Double_t c2,Double_t c4);
void setTukeyScale(Double_t tS) {tukeyScale=tS;}
void setTukeyWtMinSigma(Double_t sig) {minSig2=sig*sig;}
void setMaxNumFilterIter(Int_t ni) {maxNFilterIter=ni;}
void setMinTOffsetIter(Double_t mt) {minTOffsetIter=mt;}
void setMinWeight(Double_t mw) {minWeight=mw;}
void setMaxMaxChi2(Double_t mc) {maxChi2=mc;}
void setFunCut1(Double_t fc1) {funCt1=fc1;}
void setStepD1(Double_t sd1) {stepD1=sd1;}
void setFunCut2(Double_t fc2) {funCt2=fc2;}
void setStepD2(Double_t sd2) {stepD2=sd2;}
void setStepD3(Double_t sd3) {stepD3=sd3;}
void setTargetScanFlag(Bool_t fl) {doTargScan=fl;}
void setCalcInitialValue(void) {calcInitValue=kTRUE;}
void setPrintFlag(Bool_t prnt) {fprint=prnt;}
void setPrintFlag(Int_t currentEvent);
void setNEventsPrint(Int_t start,Int_t nev);
void setChi2PerNdfCut(Double_t cut=50.);
void setTotalChi2Cut(Double_t cut=300.);
void setSignalSpeed(Float_t ss) {signalSpeed = ss;}
void setWeightCut(Double_t wc) {cutWeight = wc;}
void excludeLayer(Int_t s,Int_t m,Int_t l);
HMdcWireFit* getNewWireFitSlot(Int_t* indWireFit);
HMdcClusFit* getNewClusFitSlot(Int_t* indClusFit);
void getTukeyConstants(Double_t& cw,Double_t& c2,Double_t& c4) const;
HMdcSizesCellsMod** getSCellsModArr(Int_t s) {return fSCModAr[s];}
HMdcSizesCells* getMdcSizesCells(void) {return fSizesCells;}
HCategory* getWireFitCat(void) {return fWireFitCat;}
HCategory* getMdcCal1Cat(void) {return fCalCat;}
HCategory* getGeantKineCat(void) {return fGeantKineCat;}
HCategory* getGeantMdcCat(void) {return fGeantMdcCat;}
HMdcDriftTimePar& getDriftTimePar(void) {return driftTimePar;}
Double_t getWeightCut(void) const {return cutWeight;}
Int_t getTofFlag(void) const {return tofFlag;}
Float_t getSignalSpeed(void) const {return signalSpeed;}
Int_t getDrTimeCalcVer(void) const {return version;}
Bool_t getTukeyFlag(void) const {return useTukeyFlag;}
Bool_t useTukey(void) const {return useTukeyFlag;}
Double_t getTukeyConstWs(void) const {return cnWs;}
Double_t getTukeyConst2s(void) const {return cn2s;}
Double_t getTukeyConst4s(void) const {return cn4s;}
Double_t getTukeyScale(void) {return tukeyScale;}
Double_t getTukeyWtMinSigma(void) const {return sqrt(minSig2);}
Double_t getTukeyWtMinSigma2(void) const {return minSig2;}
Int_t maxNumFilterIter(void) const {return maxNFilterIter;}
Double_t getMinTOffsetIter(void) const {return minTOffsetIter;}
Double_t getMinWeight(void) const {return minWeight;}
Double_t getMaxChi2(void) const {return maxChi2;}
Double_t getFunCut1(void) const {return funCt1;}
Double_t getStepD1(void) const {return stepD1;}
Double_t getFunCut2(void) const {return funCt2;}
Double_t getStepD2(void) const {return stepD2;}
Double_t getStepD3(void) const {return stepD3;}
Double_t getStepDer(Double_t funct) const;
Bool_t getPrintFlag(void) const {return fprint;}
Int_t getPrintStartEvent(void) const {return printStartEv;}
Int_t getNEventPrint(void) const {return nEventPrint;}
Bool_t getDoTargScanFlag(void) const {return doTargScan;}
Bool_t getCalcInitValueFlag(void) const {return calcInitValue;}
Double_t getMinTimeOffset(void) const {return minTimeOffset;}
Double_t getMaxTimeOffset(void) const {return maxTimeOffset;}
Int_t getMinCellsNum(void) const {return minCellsNum;}
Double_t getTotalChi2Cut(void) const {return totalChi2Cut;}
Double_t getChi2PerNdfCut(void) const {return chi2PerNdfCut;}
Bool_t getChi2CutFlag (void) const {return chi2CutFlag;}
Bool_t isLayerExcluded(Int_t s,Int_t m,Int_t l) const;
HMdcCal2ParSim* getCal2ParSim(void) {return fCal2ParSim;}
HMdcCal2Par* getCal2Par(void) {return fCal2Par;}
HCategory* getClusFitCat(void) {return fClusFitCat;}
ClassDef(HMdcTrackFitInOut,0)
};
class HMdcTrackFitter : public TObject {
protected:
HMdcTrackFitInOut* fitInOut;
HMdcCal2ParSim* fCal2ParSim;
HMdcCal2Par* fCal2Par;
Int_t indClusFit;
HMdcWiresArr wires;
HMdcTrackParam initParam;
HMdcTrackParam finalParam;
Int_t iteration;
Int_t maxIteration;
Int_t tofFlag;
Bool_t fprint;
Char_t exitFlag;
Bool_t fitStatus;
Int_t segIndex;
public:
HMdcTrackFitter(HMdcTrackFitInOut* fIO);
virtual ~HMdcTrackFitter(void) {}
virtual Int_t minimize(Int_t iter=0) {return 0;}
Bool_t fillListHits(HMdcClus* clus1,HMdcClus* clus2);
Bool_t fillListHits(HMdcClus* clus1,HMdcClus* clus2,
HMdcClus* clus3,HMdcClus* clus4);
Bool_t fillListHits(HMdcEvntListCells* store,
HMdcClus* clus1,HMdcClus* clus2);
Bool_t fillListHits(HMdcEvntListCells* store);
void setPrintFlag(Bool_t prnt);
void setModuleTof(void) {tofFlag=1;}
void setSegmentTof(void) {tofFlag=2;}
void setSectorTof(void) {tofFlag=3;}
Bool_t setClustAndFill(HMdcClus* fClst1, HMdcClus* fClst2=0);
Bool_t setClustAndFill(HMdcClus* fClst1, HMdcClus* fClst2,
HMdcClus* fClst3, HMdcClus* fClst4);
Bool_t setClustAndFill(HMdcEvntListCells* store,
Double_t x1, Double_t y1, Double_t z1,
Double_t x2, Double_t y2, Double_t z2);
void setFitStatus(Bool_t st) {fitStatus = st;}
Int_t getNumOfParam(void) const {return finalParam.getNumParam();}
Double_t getFunMin(void) const {return finalParam.functional();}
Double_t getChi2(void) const {return finalParam.getChi2();}
Int_t getIterationNumber(void) const {return iteration;}
Char_t getExitFlag(void) const {return exitFlag;}
Bool_t getFitStatus(void) const {return fitStatus;}
HMdcTrackParam* getFinalParam(void) {return &finalParam;}
HMdcTrackParam* getInitParam(void) {return &initParam;}
HMdcWireData* getWiresList(void) {return wires.getWiresArray();}
HMdcWiresArr& getWiresArr(void) {return wires;}
HMdcWireData& getWire(Int_t n) {return wires[n];}
Int_t getSegIndex(void) const {return segIndex;}
void setSegIndex(Int_t si) {segIndex = si;}
Int_t getIndClusFit(void) const {return indClusFit;}
virtual Double_t getFunctional(void) const {return -1.;}
void fillOutput();
Bool_t fillClusFitCont(void);
Bool_t fitCluster(Int_t fittingMod=-1);
void calcMinFunctional(void);
void setRegionOfWires(Int_t mod=-1);
void switchOffWires(Int_t sec, Int_t mod, Int_t lay=-1, Int_t cell=-1)
{wires.switchOff( sec, mod, lay, cell);}
protected:
void init(void);
void setPlanes(void);
Bool_t testChi2Cut(void);
ClassDef(HMdcTrackFitter,0)
};
#endif
Last change: Sat May 22 13:04:00 2010
Last generated: 2010-05-22 13:04
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.