using namespace std; #include "TError.h" #include "hmdctrackdset.h" #include "hmdctrackfinder.h" #include "hmdcclustertohit.h" #include "hmdc12fit.h" #include "hmdcidealtracking.h" #include "TCutG.h" #include #include #include #include "TArrayD.h" //*-- Author : Vladimir Pechenov //*-- Modified : 22.07.2002 by V.Pechenov //*-- Modified : 16.02.2010 by V.Pechenov //*-- Modified : 26.09.2012 by O.Pechenova //*-- Modified : 11.03.2015 by O.Pechenova //*-- Modified : 03.01.2020 by O.Pechenova // HMdcTrackFinder param.: HMdcTrackFinder* HMdcTrackDSet::pTrackFinder = NULL; Bool_t HMdcTrackDSet::trFndrIsAdded = kFALSE; Bool_t HMdcTrackDSet::isCoiloff = kFALSE; Int_t HMdcTrackDSet::clFinderType = -1; // =0 - segment finder, =1 - mdc finder, // =2 - mixed(segment+mdc) cluster finder Int_t HMdcTrackDSet::level4[2] = {-10,-10}; Int_t HMdcTrackDSet::level5[2] = {-50,-30}; Int_t HMdcTrackDSet::nLayersInMod[6][4] = {{-6,-6,-6,-6},{-6,-6,-6,-6},{-6,-6,-6,-6}, {-6,-6,-6,-6},{-6,-6,-6,-6},{-6,-6,-6,-6}}; // HMdcLookUpTb param: Bool_t HMdcTrackDSet::findVertex = kFALSE; Bool_t HMdcTrackDSet::useStartPosInSim = kFALSE; Double_t HMdcTrackDSet::dDistCutVF = 0.5; Int_t HMdcTrackDSet::levelVertF = 11; Int_t HMdcTrackDSet::levelVertPPlot = 12; Double_t HMdcTrackDSet::zStartDetertor = 0.; Int_t HMdcTrackDSet::nBinXSeg1 = 320; // 1194; // Project plot size; Int_t HMdcTrackDSet::nBinYSeg1 = 886; // 1100; Bool_t HMdcTrackDSet::useFloatLevSeg1 = kTRUE; Bool_t HMdcTrackDSet::useAmpCutSeg1 = kTRUE; Char_t HMdcTrackDSet::fakeSuppFlSeg1 = 1; Bool_t HMdcTrackDSet::useDrTimeSeg1 = kFALSE; Double_t HMdcTrackDSet::constUncertSeg1 = 0.7; // ??? 0.4; // //1.3; //0.7; Double_t HMdcTrackDSet::dDistCutSeg1 = 0.7; //1.5; // 1.0; Double_t HMdcTrackDSet::dDistCutYcorSeg1 = 1.5; Double_t HMdcTrackDSet::dDistCorrLaySeg1[4][6] = { {1.10,1.09,1.27,1.23,0.90,0.83}, // MDC I {0.94,0.95,1.36,1.40,1.12,1.14}, // MDC II { 1., 1., 1., 1., 1., 1.}, // MDC III { 1., 1., 1., 1., 1., 1.} }; // MDC IV Float_t HMdcTrackDSet::pileupType1cut = 1.e6; Float_t HMdcTrackDSet::pileupType2cut = 1.e6; // HMdc34ClFinder param: Int_t HMdcTrackDSet::nBinXSeg2 = 320; // 1194; // Project plot size; Int_t HMdcTrackDSet::nBinYSeg2 = 886; // 1100; Bool_t HMdcTrackDSet::useFloatLevSeg2 = kTRUE; Char_t HMdcTrackDSet::fakeSuppFlSeg2 = 1; Int_t HMdcTrackDSet::wLevSeg2 = 1000; Int_t HMdcTrackDSet::wBinSeg2 = 100; Int_t HMdcTrackDSet::wLaySeg2 = 600; Int_t HMdcTrackDSet::dWtCutSeg2 = 1650; Bool_t HMdcTrackDSet::useDrTimeSeg2 = kFALSE; Double_t HMdcTrackDSet::dDistCutSeg2 = 0.2; Double_t HMdcTrackDSet::dDistCutYcorSeg2 = 2.3; Double_t HMdcTrackDSet::dDistCorrLaySeg2[2][6] = { {0.5,0.2,0.1,0.1, 0.,0.3}, // MDC III {1.9,0.7,0.8,0.9,0.6,2.0} }; // MDC IV Bool_t HMdcTrackDSet::useDxDyCut = kTRUE; TCutG HMdcTrackDSet::cutDxDyArr[36]; Bool_t HMdcTrackDSet::isDxDyInited = kFALSE; Bool_t HMdcTrackDSet::useFittedSeg1Par = kFALSE; Bool_t HMdcTrackDSet::useKickCor = kTRUE; // Meta match: Bool_t HMdcTrackDSet::doMetaMatch = kTRUE; //kFALSE; Bool_t HMdcTrackDSet::doMMPlots = kFALSE; // HMdcClusterToHit param.: HMdcClusterToHit* HMdcTrackDSet::pClusterToHit = NULL; Int_t HMdcTrackDSet::modForSeg1 = 1; Int_t HMdcTrackDSet::modForSeg2 = 3; // HMdc12Fit param.: HMdc12Fit* HMdcTrackDSet::p12Fit = NULL; Bool_t HMdcTrackDSet::useAnotherFit = kFALSE; Int_t HMdcTrackDSet::fitAuthor = -1; Int_t HMdcTrackDSet::distTimeVer = -1; Int_t HMdcTrackDSet::fitType = -1; Bool_t HMdcTrackDSet::fntuple = kFALSE; Bool_t HMdcTrackDSet::fprint = kFALSE; Int_t HMdcTrackDSet::useWireOffset = 1; Int_t HMdcTrackDSet::mixFitCut = 2; Int_t HMdcTrackDSet::mixClusCut = 4; // OffVertex tracking param.: Bool_t HMdcTrackDSet::findOffVertTrk = kTRUE; //kFALSE; Int_t HMdcTrackDSet::nLayersCutOVT = 7; Int_t HMdcTrackDSet::nWiresCutOVT = 60; Int_t HMdcTrackDSet::nCellsCutOVT = 7; UChar_t HMdcTrackDSet::calcInitValue = 0; Double_t HMdcTrackDSet::cInitValCutSeg1 = 1.8; // [mm] Double_t HMdcTrackDSet::cInitValCutSeg2 = 3.8; // [mm] Bool_t HMdcTrackDSet::isSetCall = kFALSE; // HMdcIdealTracking: HMdcIdealTracking* HMdcTrackDSet::pIdealTracking = NULL; HReconstructor* HMdcTrackDSet::hMdcTrackFinder(const Char_t* name,const Char_t* title) { if(trFndrIsAdded) return pTrackFinder; if(pTrackFinder) exitSetup("hMdcTrackFinder","HMdcTrackFinder"); isSetCall = kTRUE; pTrackFinder = new HMdcTrackFinder(name,title); isSetCall = kFALSE; return pTrackFinder; } Bool_t HMdcTrackDSet::isModActive(UInt_t sec,UInt_t mod) { // - return nLayersInMod[sec][mod] > 0 && sec<6 && mod<4; return nLayersInMod[sec][mod] != 0 && sec<6 && mod<4; } Bool_t HMdcTrackDSet::isSegActive(UInt_t sec,UInt_t seg) { return seg<2 && (isModActive(sec,seg*2) || isModActive(sec,seg*2+1)); } Bool_t HMdcTrackDSet::isSecActive(UInt_t sec) { return isSegActive(sec,0) || isSegActive(sec,1); } void HMdcTrackDSet::useThisTrackFinder(HMdcTrackFinder* trFndr) { if(pTrackFinder) trFndrIsAdded=kTRUE; else Error("useThisTrackFinder(HMdcTrackFinder* trFndr)"," trFndr==0 !!!"); } HReconstructor* HMdcTrackDSet::hMdcClusterToHit(const Char_t* name,const Char_t* title) { if(pClusterToHit) exitSetup("hMdcClusterToHit","HMdcClusterToHit"); isSetCall = kTRUE; pClusterToHit=new HMdcClusterToHit(name,title); isSetCall = kFALSE; return pClusterToHit; } HReconstructor* HMdcTrackDSet::hMdcClusterToHit(const Char_t* name,const Char_t* title, Int_t mSeg1, Int_t mSeg2) { setMdcClusterToHit(mSeg1,mSeg2); return hMdcClusterToHit(name,title); } HReconstructor* HMdcTrackDSet::hMdc12Fit(const Char_t* name,const Char_t* title) { if(p12Fit) { if(useAnotherFit) return p12Fit; exitSetup("hMdc12Fit","HMdc12Fit"); } isSetCall = kTRUE; p12Fit = new HMdc12Fit(name,title); isSetCall = kFALSE; return p12Fit; } void HMdcTrackDSet::setAnotherFit(HMdc12Fit* fit) { p12Fit = fit; useAnotherFit = kTRUE; } HReconstructor* HMdcTrackDSet::hMdc12Fit(const Char_t* name,const Char_t* title, Int_t author, Int_t version, Int_t indep, Bool_t nTuple, Bool_t prnt) { setMdc12Fit(author,version,indep,nTuple,prnt); return hMdc12Fit(name,title); } HReconstructor* HMdcTrackDSet::hMdcIdealTracking(const Char_t* name,const Char_t* title,Bool_t fillParallel) { pIdealTracking = new HMdcIdealTracking(name,title); if(fillParallel) pIdealTracking->fillParallelCategories(); return pIdealTracking; } void HMdcTrackDSet::setMdcTrackFinder(Bool_t coilSt,Int_t type) { // Function for HMdcTrackFinderSetup only (see mdc/hmdcsetup.cc) if(isSetCall) return; setCoilStatus(coilSt); if(clFinderType<0) setClFinderType(type); // if clFinderType >= 0) - don't change it } void HMdcTrackDSet::setClFinderType(Int_t type) { if(isSetCall) return; if(type<0 || type>3) exitSetup("setClFinderType(Int_t):",1,"0,1 or 2",type); clFinderType = type; } void HMdcTrackDSet::setTrFnLevel(Int_t l4s1,Int_t l5s1,Int_t l4s2,Int_t l5s2) { // Function for HMdcTrackFinderSetup only (see mdc/hmdcsetup.cc) if(isSetCall) return; // if level4[seg] >= 0) - don't change it if(level4[0] < 0) setTrFnSegLevel(0,l4s1,l5s1); if(level4[1] < 0) setTrFnSegLevel(1,l4s2,l5s2); } void HMdcTrackDSet::setTrackFinderLevel(Int_t l4s1,Int_t l5s1,Int_t l4s2,Int_t l5s2) { setTrFnSegLevel(0,l4s1,l5s1); setTrFnSegLevel(1,l4s2,l5s2); } void HMdcTrackDSet::setTrFnSegLevel(Int_t seg, Int_t l4, Int_t l5) { if(isSetCall) return; if(seg<0||seg>1) exitSetup("setTrFnSegLevel(Int_t,Int_t,Int_t):",1,"0 or 1",seg); level4[seg] = l4; level5[seg] = l5; } void HMdcTrackDSet::setTrFnNLayers(const Int_t* lst) { // Function for HMdcTrackFinderSetup only (see mdc/hmdcsetup.cc) if(isSetCall) return; if(!lst) { Error("setTrFnNLayers(const Int_t*)"," lst-pointer = 0"); exit(1); } for(Int_t s=0;s<6;s++) for(Int_t m=0;m<4;m++) { if(nLayersInMod[s][m]<0) setTrFnNLayers(s,m,lst[s*4+m]); // if nLayersInMod>=0 - don't change it } } void HMdcTrackDSet::setTrFnNLayers(Int_t s, Int_t m,Int_t nl) { if(isSetCall) return; if(s<0 || s>5) exitSetup("setTrFnNLayers(Int_t,Int_t,Int_t):",1,"0,...,5",s); if(m<0 || m>3) exitSetup("setTrFnNLayers(Int_t,Int_t,Int_t):",2,"0,...,3",m); if(nl<0||nl>6) exitSetup("setTrFnNLayers(Int_t,Int_t,Int_t):",3,"0,...,6",nl); nLayersInMod[s][m] = nl; } void HMdcTrackDSet::setMdcClusterToHit(Int_t mSeg1,Int_t mSeg2) { // Function for HMdcTrackFinderSetup only (see mdc/hmdcsetup.cc) if(isSetCall) return; if(mSeg1<-1 || mSeg1>1) exitSetup("setMdcClusterToHit(Int_t,Int_t):",1,"-1, 0 or 1",mSeg1); modForSeg1 = mSeg1; if(mSeg2!=-1 && mSeg2!=2 && mSeg2!=3) exitSetup("setMdcClusterToHit(Int_t,Int_t):",2,"-1, 2 or 3",mSeg2); modForSeg2 = mSeg2; } void HMdcTrackDSet::setMdc12Fit(Int_t author,Int_t version,Int_t indep,Bool_t nTuple,Bool_t prnt) { // Function for HMdcTrackFinderSetup only (see mdc/hmdcsetup.cc) if(isSetCall) return; if(fitAuthor<0) setFitAuthor(author); if(distTimeVer<0) setFitVersion(version); if(fitType<0) setFitType(indep); setFitOutput(nTuple,prnt); } void HMdcTrackDSet::setFitAuthor(Int_t author) { if(isSetCall) return; if(author<1 || author>2) exitSetup("setFitAuthor(Int_t):",1,"1 or 2",author); fitAuthor = author; } void HMdcTrackDSet::setFitVersion(Int_t ver) { if(isSetCall) return; if(ver<0||ver>1) exitSetup("setFitVersion(Int_t):",1,"0 or 1",ver); distTimeVer = ver; } void HMdcTrackDSet::setFitType(Int_t type) { if(isSetCall) return; if(type<0 || type>1) exitSetup("setFitType(Int_t):",1,"0 or 1",type); fitType = type; } void HMdcTrackDSet::setFitOutput(Bool_t nTuple, Bool_t prnt) { if(isSetCall) return; fntuple = nTuple; fprint = prnt; } void HMdcTrackDSet::setUseWireOffset(Bool_t off) { // Function for HMdcTrackFinderSetup only (see mdc/hmdcsetup.cc) useWireOffset = off; } void HMdcTrackDSet::setMixFitCut(Int_t cut) { mixFitCut = cut; } void HMdcTrackDSet::setMixClusCut(Int_t cut) { mixClusCut = cut; } void HMdcTrackDSet::setMixCuts(Int_t cutFit,Int_t cutClus) { mixFitCut = cutFit; mixClusCut = cutClus; } void HMdcTrackDSet::exitSetup(const Char_t* funNm, Int_t npar,const Char_t* use, Int_t inst) { Error(funNm,"\n unknown argument %i: use %s instead %i",npar,use,inst); exit(1); } void HMdcTrackDSet::getTrFnLevels(Int_t& l4s1,Int_t& l5s1,Int_t& l4s2,Int_t& l5s2) { l4s1 = level4[0]; l4s2 = level4[1]; l5s1 = level5[0]; l5s2 = level5[1]; } void HMdcTrackDSet::printStatus(void) { if(pTrackFinder != NULL) pTrackFinder->printStatus(); if(pClusterToHit != NULL) pClusterToHit->printStatus(); if(p12Fit != NULL) p12Fit->printStatus(); if(pIdealTracking != NULL) pIdealTracking->printStatus(); } void HMdcTrackDSet::setTrackFinder(HMdcTrackFinder* tr) { if(isSetCall) return; if(pTrackFinder) exitSetup("setTrackFinder","HMdcTrackFinder"); pTrackFinder = tr; } void HMdcTrackDSet::setClusterToHit(HMdcClusterToHit* cl) { if(isSetCall) return; if(pClusterToHit) exitSetup("setClusterToHit","HMdcClusterToHit"); pClusterToHit = cl; } void HMdcTrackDSet::set12Fit(HMdc12Fit* fit) { if(isSetCall) return; if(p12Fit) exitSetup("set12Fit","HMdc12Fit"); p12Fit = fit; } void HMdcTrackDSet::exitSetup(const Char_t* funNm,const Char_t* className) { Error(funNm,"%s object exist already.",className); exit(1); } void HMdcTrackDSet::setGhostRemovingParamSeg2(Int_t wlev,Int_t wbin,Int_t wlay,Int_t dWtCut) { wLevSeg2 = wlev; wBinSeg2 = wbin; wLaySeg2 = wlay; dWtCutSeg2 = dWtCut; fakeSuppFlSeg2 = 1; } Char_t HMdcTrackDSet::getGhostRemovingParamSeg2(Int_t &wlev,Int_t &wbin,Int_t &wlay,Int_t &dWtCut) { wlev = wLevSeg2; wbin = wBinSeg2; wlay = wLaySeg2; dWtCut = dWtCutSeg2; return fakeSuppFlSeg2; } void HMdcTrackDSet::setProjectPlotSizeSeg1(Int_t xb,Int_t yb) { if(xb>20) nBinXSeg1 = xb; if(yb>20) nBinYSeg1 = yb; } void HMdcTrackDSet::getProjectPlotSizeSeg1(Int_t &xb,Int_t &yb) { xb = nBinXSeg1; yb = nBinYSeg1; } void HMdcTrackDSet::setProjectPlotSizeSeg2(Int_t xb,Int_t yb) { if(xb>20) nBinXSeg2 = xb; if(yb>20) nBinYSeg2 = yb; } void HMdcTrackDSet::getProjectPlotSizeSeg2(Int_t &xb,Int_t &yb) { xb = nBinXSeg2; yb = nBinYSeg2; } Bool_t HMdcTrackDSet::getVertexFinderPar(Double_t &d,Int_t &l,Int_t &lp) { d = dDistCutVF; l = levelVertF; lp = levelVertPPlot; return findVertex; } void HMdcTrackDSet::setVertexFinderPar(Double_t dc, Int_t lv, Int_t lp) { dDistCutVF = dc; levelVertF = lv; levelVertPPlot = lp; findVertex = dc >= 0.; } void HMdcTrackDSet::setDrTimeProjParamSeg1(Double_t cUns, Double_t cut) { constUncertSeg1 = cUns; // Constant part in LookUpTbCell::yProjUncer dDistCutSeg1 = cut; // Cut: dDist/yProjUncer < dDistCut } void HMdcTrackDSet::setDrTimeCutLCorrSeg1(Int_t m,Double_t* corr) { if(m<0 || m>3) return; for(Int_t lay=0;lay<6;lay++) if(corr[lay]>0.) dDistCorrLaySeg1[m][lay] = corr[lay]; } void HMdcTrackDSet::getDrTimeProjParSeg1(Double_t &uns,Double_t &cut,Double_t &ycor,Double_t *lcor) { uns = constUncertSeg1; cut = dDistCutSeg1; ycor = dDistCutYcorSeg1; for(Int_t m=0;m<4;m++) for(Int_t l=0;l<6;l++) lcor[m*6+l] = dDistCorrLaySeg1[m][l]; } void HMdcTrackDSet::setDrTimeCutLCorrSeg2(Int_t m,Double_t* corr) { if(m<2 || m>3) return; for(Int_t lay=0;lay<6;lay++) if(corr[lay]>0.) dDistCorrLaySeg2[m-2][lay] = corr[lay]; } void HMdcTrackDSet::getDrTimeProjParSeg2(Double_t &cut,Double_t &ycor,Double_t *lcor) { cut = dDistCutSeg2; ycor = dDistCutYcorSeg2; for(Int_t im=0;im<2;im++) for(Int_t l=0;l<6;l++) lcor[im*6+l] = dDistCorrLaySeg2[im][l]; } void HMdcTrackDSet::setDxDyKickCut(TCutG* cutR) { // cutR is pointer to array TCutG cutReg[36] ! for(Int_t nr=0;nr<36;nr++) { Double_t x,y; for(Int_t i=0;i level9, 6 -> level10 for(Int_t s=0;s<6;s++) HMdcTrackDSet::setTrFnNLayers(s,2,5); // MDCII Double_t distCutVF = 0.55; // Cut: dDist/yProjUncer < dDistCut Int_t levelVF = 10; // Level is used in HMdcLookUpTbSec::testBinForVertexF(...) Int_t levelVFP = 10; // Level is used for filling of project plot Double_t zStartDetector = -81.0; // Position of the start detector [mm] // For cut of drift time distance in cluster finder: Double_t constUncertS1 = 0.9; // ??? 0.4; // //1.3; //0.7; Double_t dDistCutS1 = 0.9; //1.5; // 1.0; Double_t dDistCutYcorS1 = 1.5; Double_t dDistCorrMod1Lay[6] = {1.23,1.09,1.33,1.28,0.88,0.85}; // MDC I Double_t dDistCorrMod2Lay[6] = {0.96,0.92,1.40,1.40,1.08,1.10}; // MDC II // =================== Outer segment track finder parameters: =================== Bool_t useFittedSeg1 = kTRUE; // Cluster finder: Int_t wLev = 1000; Int_t wBin = 67; //For level 9! // For level 10: 100; Int_t wLay = 467; //For level 9! // For level 10: 600; Int_t dWtCut = 1700; //For level 9! // For level 10: 1650; // For cut of drift time distance in cluster finder: Double_t dDistCutS2 = 0.5; //3.5; //-3.0; //??? Double_t dDistCutYcorS2 = 2.8; Double_t dDistCorrMod3Lay[6] = {0.5,0.25,0.55,0.55,0.05,0.2}; // MDC III Double_t dDistCorrMod4Lay[6] = {1.85,0.65,1.45,1.50,0.72,2.0}; // MDC IV // Segment fitter: UChar_t calcInitParam = 1; // calculate initial track param. for all segments Double_t cInitParCutSeg1 = 1.8; // Cut for the HMdcWireArr::calcInitialValue Double_t cInitParCutSeg2 = 3.8; // Cut for the HMdcWireArr::calcInitialValue //================================================================================ // Inner segment finder: HMdcTrackDSet::setVertexFinderPar(distCutVF,levelVF,levelVFP); HMdcTrackDSet::setDrTimeProjParamSeg1(constUncertS1,dDistCutS1); HMdcTrackDSet::setDrTimeCutYCorrSeg1(dDistCutYcorS1); HMdcTrackDSet::setDrTimeCutLCorrSeg1(0,dDistCorrMod1Lay); HMdcTrackDSet::setDrTimeCutLCorrSeg1(1,dDistCorrMod2Lay); HMdcTrackDSet::setZStarDetector(zStartDetector); //-------------------------------------------------------------------------------- // Outer segment finder: HMdcTrackDSet::setUseFittedSeg1ParFlag(useFittedSeg1); HMdcTrackDSet::setDrTimeProjParamSeg2(dDistCutS2); HMdcTrackDSet::setDrTimeCutYCorrSeg2(dDistCutYcorS2); HMdcTrackDSet::setDrTimeCutLCorrSeg2(2,dDistCorrMod3Lay); HMdcTrackDSet::setDrTimeCutLCorrSeg2(3,dDistCorrMod4Lay); HMdcTrackDSet::setGhostRemovingParamSeg2(wLev,wBin,wLay,dWtCut); //-------------------------------------------------------------------------------- // Segment fitter: HMdcTrackDSet::setCalcInitialValue(calcInitParam); HMdcTrackDSet::setCalcInitialValueSeg1(cInitParCutSeg1); HMdcTrackDSet::setCalcInitialValueSeg2(cInitParCutSeg2); } void HMdcTrackDSet::setTrackParamJul14(void) { HMdcTrackDSet::setDefParam(); // HMdcTrackDSet::setClFinderType(2); // 2 - mixed cluster finder HMdcTrackDSet::setClFinderType(0); // 0 - usual cluster finder HMdcTrackDSet::initDxDyCutApr12(); HMdcTrackDSet::setDxDyCut(kFALSE); HMdcTrackDSet::setFindOffVertTrkFlag(kTRUE); HMdcTrackDSet::setNLayersCutOVT(7); HMdcTrackDSet::setNWiresCutOVT(60); HMdcTrackDSet::setNCellsCutOVT(7); Bool_t useDriftTimeS1 = kFALSE; //^^^kTRUE Bool_t useDriftTimeS2 = kFALSE; //^^^kTRUE // =================== Inner segment track finder parameters: =================== // Cluster finder: // Set clusterfinder level =7 for inner and outer segment: for(Int_t s=0;s<6;s++) HMdcTrackDSet::setTrFnNLayers(s,0,4); //5 for(Int_t s=0;s<6;s++) HMdcTrackDSet::setTrFnNLayers(s,1,5); //5 for(Int_t s=0;s<6;s++) HMdcTrackDSet::setTrFnNLayers(s,2,4); //5 for(Int_t s=0;s<6;s++) HMdcTrackDSet::setTrFnNLayers(s,3,5); //5 Double_t distCutVF = 0.55; // ^^^Cut: dDist/yProjUncer < dDistCut Int_t levelVF = 8; //10; // Level is used in HMdcLookUpTbSec::testBinForVertexF(...) Int_t levelVFP = 8; //10; // Level is used for filling of project plot Double_t zStartDetector = -1600; // !!!!!!!!!!!! // Position of the start detector [mm] // == 0 - take it from HStart2GeomPar // For cut of drift time distance in cluster finder: Double_t constUncertS1 = 0.9; //1.5; // ^^^ 0.4; // //1.3; //0.7; Double_t dDistCutS1 = 0.9; //1.5; //1.5; // 1.0; Double_t dDistCutYcorS1 = 1.5; Double_t dDistCorrMod1Lay[6] = {1.23,1.09,1.33,1.28,0.88,0.85}; // MDC I Double_t dDistCorrMod2Lay[6] = {0.96,0.92,1.40,1.40,1.08,1.10}; // MDC II // =================== Outer segment track finder parameters: =================== Bool_t useFittedSeg1 = kTRUE; // Cluster finder: Int_t wLev = 1000; Int_t wBin = 67; //For level 9! // For level 10: 100; Int_t wLay = 467; //For level 9! // For level 10: 600; Int_t dWtCut = 1700; //For level 9! // For level 10: 1650; // Meta match: Bool_t doMMatch = kFALSE; Bool_t doMMPl = kFALSE; // For cut of drift time distance in cluster finder: Double_t dDistCutS2 = 0.5; //1.0^^^0.5; //3.5; //-3.0; //??? Double_t dDistCutYcorS2 = 2.8; Double_t dDistCorrMod3Lay[6] = {0.5,0.25,0.55,0.55,0.05,0.2}; // MDC III Double_t dDistCorrMod4Lay[6] = {1.85,0.65,1.45,1.50,0.72,2.0}; // MDC IV // Segment fitter: UChar_t calcInitParam = 1; // calculate initial track param. for all segments Double_t cInitParCutSeg1 = 1.8; // Cut for the HMdcWireArr::calcInitialValue Double_t cInitParCutSeg2 = 3.8; // Cut for the HMdcWireArr::calcInitialValue //================================================================================ // Inner segment finder: HMdcTrackDSet::setUseDriftTimeSeg1(useDriftTimeS1); //^^^ HMdcTrackDSet::setVertexFinderPar(distCutVF,levelVF,levelVFP); HMdcTrackDSet::setDrTimeProjParamSeg1(constUncertS1,dDistCutS1); HMdcTrackDSet::setDrTimeCutYCorrSeg1(dDistCutYcorS1); HMdcTrackDSet::setDrTimeCutLCorrSeg1(0,dDistCorrMod1Lay); HMdcTrackDSet::setDrTimeCutLCorrSeg1(1,dDistCorrMod2Lay); HMdcTrackDSet::setZStarDetector(zStartDetector); //-------------------------------------------------------------------------------- // Outer segment finder: HMdcTrackDSet::setUseDriftTimeSeg2(useDriftTimeS2); //^^^ HMdcTrackDSet::setUseFittedSeg1ParFlag(useFittedSeg1); HMdcTrackDSet::setDrTimeProjParamSeg2(dDistCutS2); HMdcTrackDSet::setDrTimeCutYCorrSeg2(dDistCutYcorS2); HMdcTrackDSet::setDrTimeCutLCorrSeg2(2,dDistCorrMod3Lay); HMdcTrackDSet::setDrTimeCutLCorrSeg2(3,dDistCorrMod4Lay); HMdcTrackDSet::setGhostRemovingParamSeg2(wLev,wBin,wLay,dWtCut); HMdcTrackDSet::setMetaMatchFlag(doMMatch,doMMPl); //-------------------------------------------------------------------------------- // Segment fitter: HMdcTrackDSet::setCalcInitialValue(calcInitParam); HMdcTrackDSet::setCalcInitialValueSeg1(cInitParCutSeg1); HMdcTrackDSet::setCalcInitialValueSeg2(cInitParCutSeg2); } void HMdcTrackDSet::setTrackParamAug18(void) { HMdcTrackDSet::setDefParam(); HMdcTrackDSet::initDxDyCutMar19(); // HMdcTrackDSet::initDxDyCutApr12(); // =================== Inner segment track finder parameters: =================== // Cluster finder: // Set clusterfinder level =9 for outer segment: for(Int_t s=0;s<6;s++) HMdcTrackDSet::setTrFnNLayers(s,1,5); // MDCII 5 -> level9, 6 -> level10 for(Int_t s=0;s<6;s++) HMdcTrackDSet::setTrFnNLayers(s,2,5); // MDCII Double_t distCutVF = 0.55; // Cut: dDist/yProjUncer < dDistCut Int_t levelVF = 10; // Level is used in HMdcLookUpTbSec::testBinForVertexF(...) Int_t levelVFP = 10; // Level is used for filling of project plot Float_t pileupCut1 = 67.; // Default cut for pile-up type I Float_t pileupCut2 = 28.; // Default cut for pile-up type II // Defaut pile-up cats correspond // 19.9% identification efficiency // and 0.1% of missidentification (sim.data) Double_t zStartDetector = -89.0; // Position of the start detector [mm] // For cut of drift time distance in cluster finder: Double_t constUncertS1 = 0.9; // ??? 0.4; // //1.3; //0.7; Double_t dDistCutS1 = 0.9; //1.5; // 1.0; Double_t dDistCutYcorS1 = 1.5; Double_t dDistCorrMod1Lay[6] = {1.23,1.09,1.33,1.28,0.88,0.85}; // MDC I Double_t dDistCorrMod2Lay[6] = {0.96,0.92,1.40,1.40,1.08,1.10}; // MDC II // =================== Outer segment track finder parameters: =================== Bool_t useFittedSeg1 = kTRUE; // Cluster finder: Int_t wLev = 1000; Int_t wBin = 67; //For level 9! // For level 10: 100; Int_t wLay = 467; //For level 9! // For level 10: 600; Int_t dWtCut = 1700; //For level 9! // For level 10: 1650; // Meta match: Bool_t doMMatch = kFALSE; Bool_t doMMPl = kFALSE; // For cut of drift time distance in cluster finder: Double_t dDistCutS2 = 0.5; //3.5; //-3.0; //??? Double_t dDistCutYcorS2 = 2.8; Double_t dDistCorrMod3Lay[6] = {0.5,0.25,0.55,0.55,0.05,0.2}; // MDC III Double_t dDistCorrMod4Lay[6] = {1.85,0.65,1.45,1.50,0.72,2.0}; // MDC IV // Segment fitter: UChar_t calcInitParam = 1; // calculate initial track param. for all segments Double_t cInitParCutSeg1 = 1.8; // Cut for the HMdcWireArr::calcInitialValue Double_t cInitParCutSeg2 = 3.8; // Cut for the HMdcWireArr::calcInitialValue //================================================================================ // Inner segment finder: HMdcTrackDSet::setPileupDefCuts(pileupCut1,pileupCut2); HMdcTrackDSet::setVertexFinderPar(distCutVF,levelVF,levelVFP); HMdcTrackDSet::setDrTimeProjParamSeg1(constUncertS1,dDistCutS1); HMdcTrackDSet::setDrTimeCutYCorrSeg1(dDistCutYcorS1); HMdcTrackDSet::setDrTimeCutLCorrSeg1(0,dDistCorrMod1Lay); HMdcTrackDSet::setDrTimeCutLCorrSeg1(1,dDistCorrMod2Lay); HMdcTrackDSet::setZStarDetector(zStartDetector); //-------------------------------------------------------------------------------- // Outer segment finder: HMdcTrackDSet::setUseFittedSeg1ParFlag(useFittedSeg1); HMdcTrackDSet::setDrTimeProjParamSeg2(dDistCutS2); HMdcTrackDSet::setDrTimeCutYCorrSeg2(dDistCutYcorS2); HMdcTrackDSet::setDrTimeCutLCorrSeg2(2,dDistCorrMod3Lay); HMdcTrackDSet::setDrTimeCutLCorrSeg2(3,dDistCorrMod4Lay); HMdcTrackDSet::setGhostRemovingParamSeg2(wLev,wBin,wLay,dWtCut); HMdcTrackDSet::setMetaMatchFlag(doMMatch,doMMPl); //-------------------------------------------------------------------------------- // Segment fitter: HMdcTrackDSet::setCalcInitialValue(calcInitParam); HMdcTrackDSet::setCalcInitialValueSeg1(cInitParCutSeg1); HMdcTrackDSet::setCalcInitialValueSeg2(cInitParCutSeg2); } void HMdcTrackDSet::setTrackParamFeb21(void) { HMdcTrackDSet::setDefParam(); // HMdcTrackDSet::setClFinderType(2); // 2 - mixed cluster finder HMdcTrackDSet::setClFinderType(0); // 0 - usual cluster finder HMdcTrackDSet::initDxDyCutMar19(); HMdcTrackDSet::setDxDyCut(kFALSE); HMdcTrackDSet::setFindOffVertTrkFlag(kTRUE); HMdcTrackDSet::setNLayersCutOVT(7); HMdcTrackDSet::setNWiresCutOVT(60); HMdcTrackDSet::setNCellsCutOVT(7); Bool_t useDriftTimeS1 = kFALSE; //^^^kTRUE Bool_t useDriftTimeS2 = kFALSE; //^^^kTRUE // =================== Inner segment track finder parameters: =================== // Cluster finder: // Set clusterfinder level =7 for inner and outer segment: for(Int_t s=0;s<6;s++) HMdcTrackDSet::setTrFnNLayers(s,0,4); //5 for(Int_t s=0;s<6;s++) HMdcTrackDSet::setTrFnNLayers(s,1,5); //5 for(Int_t s=0;s<6;s++) HMdcTrackDSet::setTrFnNLayers(s,2,4); //5 for(Int_t s=0;s<6;s++) HMdcTrackDSet::setTrFnNLayers(s,3,5); //5 Double_t distCutVF = 0.55; // ^^^Cut: dDist/yProjUncer < dDistCut Int_t levelVF = 8; //10; // Level is used in HMdcLookUpTbSec::testBinForVertexF(...) Int_t levelVFP = 8; //10; // Level is used for filling of project plot Double_t zStartDetector = -1600; // !!!!!!!!!!!! // Position of the start detector [mm] // == 0 - take it from HStart2GeomPar // For cut of drift time distance in cluster finder: Double_t constUncertS1 = 0.9; //1.5; // ^^^ 0.4; // //1.3; //0.7; Double_t dDistCutS1 = 0.9; //1.5; //1.5; // 1.0; Double_t dDistCutYcorS1 = 1.5; Double_t dDistCorrMod1Lay[6] = {1.23,1.09,1.33,1.28,0.88,0.85}; // MDC I Double_t dDistCorrMod2Lay[6] = {0.96,0.92,1.40,1.40,1.08,1.10}; // MDC II // =================== Outer segment track finder parameters: =================== Bool_t useFittedSeg1 = kTRUE; // Cluster finder: Int_t wLev = 1000; Int_t wBin = 67; //For level 9! // For level 10: 100; Int_t wLay = 467; //For level 9! // For level 10: 600; Int_t dWtCut = 1700; //For level 9! // For level 10: 1650; // Meta match: Bool_t doMMatch = kFALSE; Bool_t doMMPl = kFALSE; // For cut of drift time distance in cluster finder: Double_t dDistCutS2 = 0.5; //1.0^^^0.5; //3.5; //-3.0; //??? Double_t dDistCutYcorS2 = 2.8; Double_t dDistCorrMod3Lay[6] = {0.5,0.25,0.55,0.55,0.05,0.2}; // MDC III Double_t dDistCorrMod4Lay[6] = {1.85,0.65,1.45,1.50,0.72,2.0}; // MDC IV // Segment fitter: UChar_t calcInitParam = 1; // calculate initial track param. for all segments Double_t cInitParCutSeg1 = 1.8; // Cut for the HMdcWireArr::calcInitialValue Double_t cInitParCutSeg2 = 3.8; // Cut for the HMdcWireArr::calcInitialValue //================================================================================ // Inner segment finder: HMdcTrackDSet::setUseDriftTimeSeg1(useDriftTimeS1); //^^^ HMdcTrackDSet::setVertexFinderPar(distCutVF,levelVF,levelVFP); HMdcTrackDSet::setDrTimeProjParamSeg1(constUncertS1,dDistCutS1); HMdcTrackDSet::setDrTimeCutYCorrSeg1(dDistCutYcorS1); HMdcTrackDSet::setDrTimeCutLCorrSeg1(0,dDistCorrMod1Lay); HMdcTrackDSet::setDrTimeCutLCorrSeg1(1,dDistCorrMod2Lay); HMdcTrackDSet::setZStarDetector(zStartDetector); //-------------------------------------------------------------------------------- // Outer segment finder: HMdcTrackDSet::setUseDriftTimeSeg2(useDriftTimeS2); //^^^ HMdcTrackDSet::setUseFittedSeg1ParFlag(useFittedSeg1); HMdcTrackDSet::setDrTimeProjParamSeg2(dDistCutS2); HMdcTrackDSet::setDrTimeCutYCorrSeg2(dDistCutYcorS2); HMdcTrackDSet::setDrTimeCutLCorrSeg2(2,dDistCorrMod3Lay); HMdcTrackDSet::setDrTimeCutLCorrSeg2(3,dDistCorrMod4Lay); HMdcTrackDSet::setGhostRemovingParamSeg2(wLev,wBin,wLay,dWtCut); HMdcTrackDSet::setMetaMatchFlag(doMMatch,doMMPl); //-------------------------------------------------------------------------------- // Segment fitter: HMdcTrackDSet::setCalcInitialValue(calcInitParam); HMdcTrackDSet::setCalcInitialValueSeg1(cInitParCutSeg1); HMdcTrackDSet::setCalcInitialValueSeg2(cInitParCutSeg2); } ClassImp(HMdcTrackDSet)