52 Warning(
"init",
"track fit version 0 is not supported more, version 1 will used");
55 if(!useRndbPar) fitPar = 0;
66 Error(
"init:",
"Zero pointer for HMdcDigitPar recieved!");
73 Error(
"init",
"HMdcSizesCells is absent");
87 if (!fCalCat)
return kFALSE;
91 if(!fClusFitCat || !fWireFitCat)
return kFALSE;
103 if(!fSizesCells->initContainer())
return kFALSE;
104 if(!fDriftTimePar->initContainer())
return kFALSE;
105 for(Int_t sec=0; sec<6; sec++) {
107 for(Int_t mod=0; mod<4; mod++)
108 fSCModAr[sec][mod]=(fSizesCells->modStatus(sec,mod)) ? &fSCSec[mod] : 0;
113 if(useRtdbTofFlag) tofFlag = fitPar->getTofFlag();
114 cutWeight = fitPar->getCutWeight ();
115 if(useRtdbTScFlag) doTargScan = fitPar->getDoTargScan();
117 minTimeOffset = fitPar->getMinTimeOffset ();
118 maxTimeOffset = fitPar->getMaxTimeOffset ();
119 minCellsNum = fitPar->getMinCellsNum ();
120 chi2CutFlag = fitPar->getChi2CutFlag ();
121 totalChi2Cut = fitPar->getTotalChi2Cut ();
122 chi2PerNdfCut = fitPar->getChi2PerNdfCut ();
124 if(useRtdbTFlag) useTukeyFlag = fitPar->getUseTukeyFlag();
125 cnWs = fitPar->getCnWs ();
126 cn2s = fitPar->getCn2s ();
127 cn4s = fitPar->getCn4s ();
128 cn2s = cn4s*cn4s/cnWs;
129 minSig2 = fitPar->getMinSig2 ();
130 maxNFilterIter= fitPar->getMaxNFilterIter();
131 minWeight = fitPar->getMinWeight ();
132 maxChi2 = fitPar->getMaxChi2 ();
134 minTOffsetIter= fitPar->getMinTOffsetIter();
136 funCt1 = fitPar->getFunCt1 ();
137 stepD1 = fitPar->getStepD1 ();
138 funCt2 = fitPar->getFunCt2 ();
139 stepD2 = fitPar->getStepD2 ();
140 stepD3 = fitPar->getStepD3 ();
145 signalSpeed=fDigitPar->getSignalSpeed();
146 }
else signalSpeed=0.;
157 nEventPrint = 1000000000;
164 useRtdbTofFlag = kTRUE;
169 minTimeOffset = -30.;
178 useTukeyFlag = kTRUE;
179 useRtdbTFlag = kTRUE;
180 useRtdbTScFlag = kTRUE;
183 cn2s = cn4s*cn4s/cnWs;
190 minTOffsetIter = -50.;
200 for(Int_t s=0;s<6;s++)
for(Int_t m=0;m<4;m++)
for(Int_t l=0;l<6;l++) exclLay[s][m][l] = kFALSE;
204 printStartEv = start;
215 cn2s = cn4s*cn4s/cnWs;
219 Double_t& c4)
const {
226 TObject* fWireFit=fWireFitCat->getNewSlot(locWireFit,indWireFit);
228 Warning(
"getNewWireFitSlot",
"No slot HMdcWireFit available");
236 TObject* fClusFit=fClusFitCat->getNewSlot(locClusFit,indClusFit);
238 Warning(
"getNewClusFitSlot",
"No slot HMdcClusFit available");
246 return (funct<funCt1) ? stepD1:((funct<funCt2) ? stepD2:stepD3);
250 fprint = currentEvent>=printStartEv && currentEvent<printStartEv+nEventPrint;
254 chi2CutFlag = kFALSE;
264 if(s<6 && m<4 && l<6) exclLay[s][m][l] = kTRUE;
268 if(s<6 && m<4)
for(UInt_t l=0;l<6;l++) exclLay[s][m][l] = kTRUE;
272 return s<6 && m<4 && l<6 ? exclLay[s][m][l] : kFALSE;
283 fprint = fitInOut->getPrintFlag();
284 tofFlag = fitInOut->getTofFlag();
285 wires.setPrintFlag(fprint);
286 wires.setTrackFitInOut(fitInOut);
291 wires.setPrintFlag(fprint);
297 if(!wires.fillListHits(cl1,cl2))
return kFALSE;
307 if( !wires.fillListHits(cl1,cl2,cl3,cl4,cl5,cl6,cl7,cl8) )
return kFALSE;
315 if(!wires.fillListHits(store,clus1,clus2))
return kFALSE;
323 if(!wires.fillListHits(store))
return kFALSE;
329 Int_t sec = wires.getSector();
332 Int_t nClTimes = wires.getNDrTmFirstSec();
333 initParam.setFirstPlane(&((*(fSCModAr[wires[0].getModule()]))[0]));
334 initParam.setSecondPlane(&((*(fSCModAr[wires[nClTimes-1].getModule()]))[5]));
335 initParam.setCoorSys(sec);
339 HMdcClusFit* fClusFit=fitInOut->getNewClusFitSlot(&indClusFit);
340 if(!fClusFit)
return kFALSE;
342 finalParam.fillClusFit(fClusFit);
344 wires.calcDistanceSign(finalParam);
345 wires.fillClusFitSim(fClusFit,finalParam);
346 wires.fillClusFitAndWireFit(fClusFit);
351 if(wires.getNCellsInInput(fittingMod) < 5)
return kFALSE;
352 wires.setHitStatM1toP1();
353 wires.subtractWireOffset(initParam);
358 wires.fillLookupTableForDer(initParam);
359 fitStatus = fit(fittingMod);
363 if(!fitStatus) refitCluster(fittingMod);
365 Int_t nInputLayers = wires.getInputListCells().getNLayers();
366 Int_t nFittedLayers = wires.getOutputListCells().getNLayers();
367 if(nInputLayers-nFittedLayers >= 3) {
368 refitCluster(fittingMod);
369 nFittedLayers = wires.getOutputListCells().getNLayers();
379 if(wires.calcInitialValue(initParam)) {
381 fitStatus = fit(fittingMod);
388 Int_t exit = minimize(iter++);
389 Double_t delW = wires.testFitResult();
390 Int_t nCells = wires.getNCellsInOutput(fittingMod);
391 if( delW<0.5 || nCells<6 ) {
392 if(exit == 0)
return kFALSE;
394 if(finalParam.calcChi2PerDF(wires.getNumOfGoodWires())<0. || !testChi2Cut())
return kFALSE;
395 if(finalParam.testParameters(fitInOut->getMinTimeOffset(),fitInOut->getMaxTimeOffset()) &&
396 nCells >= fitInOut->getMinCellsNum())
return kTRUE;
399 if(fprint) printf(
"TestFit: num.of deleted cells=%.1f, refit this!\n",delW);
405 if(fitInOut->getChi2CutFlag()) {
406 if(finalParam.functional()<fitInOut->getTotalChi2Cut() )
return kTRUE;
407 }
else if(finalParam.getChi2() <fitInOut->getChi2PerNdfCut())
return kTRUE;
412 wires.setRegionOfWires(mod);
416 if(fprint != fitInOut->getPrintFlag()) setPrintFlag(fitInOut->getPrintFlag());
419 if(cl2) cl2->
print();
421 if(!fillListHits(cl1,cl2))
return kFALSE;
430 if(fprint != fitInOut->getPrintFlag()) setPrintFlag(fitInOut->getPrintFlag());
433 if(cl2 != NULL) cl2->
print();
434 if(cl3 != NULL) cl3->
print();
435 if(cl4 != NULL) cl4->
print();
436 if(cl5 != NULL) cl5->
print();
437 if(cl6 != NULL) cl6->
print();
438 if(cl7 != NULL) cl7->
print();
439 if(cl8 != NULL) cl8->
print();
442 if(cl5 != NULL) nSecs = 3;
443 if(cl7 != NULL) nSecs = 4;
444 initParam.setNMods(nSecs);
445 finalParam.setNMods(nSecs);
446 if(!fillListHits(cl1,cl2,cl3,cl4,cl5,cl6,cl7,cl8))
return kFALSE;
453 Double_t x1, Double_t y1, Double_t z1,
454 Double_t x2, Double_t y2, Double_t z2) {
455 if(fprint != fitInOut->getPrintFlag()) setPrintFlag(fitInOut->getPrintFlag());
456 if(fprint) printf(
"x1=%f y1=%f z1=%f x2=%f y2=%f z2=%f \n",x1,y1,z1,x2,y2,z2);
457 if(!fillListHits(store))
return kFALSE;
458 initParam.setParam(x1, y1, z1, x2, y2, z2);
459 wires.setXYZClust(x2, y2, z2);
464 finalParam.copyLine(initParam);
465 wires.calcNGoodWiresAndChi2(finalParam);
466 wires.valueOfFunctional(finalParam,2);
467 wires.calculateErrors(finalParam);
void setTukeyConstants(Double_t cw, Double_t c2, Double_t c4)
Bool_t fit(Int_t fittingMod=-1)
HCategory * getCatMdcWireFit(Bool_t create=kFALSE)
void setRegionOfWires(Int_t mod=-1)
void print(Bool_t fl=kTRUE) const
void excludeLayer(UInt_t s, UInt_t m, UInt_t l)
static HMdcGetContainers * getObject()
static Bool_t fPrint(void)
void setDefaultFitParam(void)
void getTukeyConstants(Double_t &cw, Double_t &c2, Double_t &c4) const
static Int_t getUseWireOffset(void)
void setPrintFlag(Bool_t prnt)
HRuntimeDb * getRuntimeDb(void)
Bool_t fitCluster(Int_t fittingMod=-1)
Float_t getYTarg(void) const
static HMdcSizesCells * getObject(void)
static Bool_t isInited(HParSet *par)
Bool_t fillClusFitCont(void)
void excludeModule(UInt_t s, UInt_t m)
static Bool_t isGeant(void)
static Bool_t fNTuple(void)
HCategory * getCatMdcCal1(void)
ClassImp(HMdcTrackFitInOut) ClassImp(HMdcTrackFitter) HMdcTrackFitInOut
Bool_t isLayerExcluded(Int_t s, Int_t m, Int_t l) const
static UChar_t getCalcInitValueFlag(void)
void setChi2PerNdfCut(Double_t cut=50.)
HCategory * getCatGeantMdc(void)
Bool_t setClustAndFill(HMdcClus *cl1, HMdcClus *cl2=NULL)
HParSet * getContainer(const Text_t *)
static Int_t getFitVersion(void)
void setTotalChi2Cut(Double_t cut=300.)
Bool_t fillListHits(HMdcClus *cl1, HMdcClus *cl2)
Float_t getXTarg(void) const
Double_t getStepDer(Double_t funct) const
Float_t getZTarg(void) const
void setFitStatus(Bool_t stat)
void refitCluster(Int_t fittingMod=-1)
void setNEventsPrint(Int_t start, Int_t nev)
HCategory * getCatMdcClusFit(Bool_t create=kFALSE)
void setPrintFlag(Bool_t prnt)
static void setDriftTimePar(HMdcDriftTimePar *par)
HCategory * getCatGeantKine(void)
HMdcClusFit * getNewClusFitSlot(Int_t *indClusFit)
HMdcTrackFitter(HMdcTrackFitInOut *fIO)
HMdcWireFit * getNewWireFitSlot(Int_t *indWireFit)
void setExitFlag(Char_t fl)
static HMdcDriftTimePar * getObject(void)