10 #include "hcategory.h"
11 #include "hiterator.h"
49 Int_t bmTmID,
const Char_t* sumOfShFName) :
HMdc12Fit(
"mdc.Mille",
"mdc.Mille") {
52 if(bmTmID<0 || bmTmID>9)
printErrorAndExit(
"HMdcMille",
"beamTimeId must be >= 0 and <=9 !!!");
119 for(Int_t s=0;s<6;s++) {
125 for(Int_t im=0;im<24;im++)
pSCMod[im] = NULL;
126 for(Int_t il=0;il<144;il++)
pSCLayer[il] = NULL;
128 for(Int_t s=0;s<6;s++)
for(Int_t m=0;m<4;m++) {
138 for(Int_t l=0;l<6;l++) {
149 shitsInfo[0] =
"shift along X axis [mm]";
150 shitsInfo[1] =
"shift along Y axis [mm]";
151 shitsInfo[2] =
"shift along Z axis [mm]";
152 shitsInfo[3] =
"rotation around X axis [deg]";
153 shitsInfo[4] =
"rotation around Y axis [deg]";
154 shitsInfo[5] =
"rotation around Z axis [deg]";
156 shitsInfo[7] =
"shift along Y axis [mm]";
157 shitsInfo[8] =
"rotation around Z axis [deg]";
176 if(pSizesCells == 0)
return kFALSE;
180 for(Int_t sec=0;sec<6;sec++) {
183 if(&pSizesCellsSec == 0)
continue;
187 if(&pSizesCellsMod == 0)
continue;
195 if(&rSizesCellsLay == 0)
continue;
205 for(Int_t s=0;s<6;s++)
for(Int_t m=0;m<4;m++)
for(Int_t l=-1;l<6;l++) {
224 sprintf(name,
"pThVsPhS%i",sec+1);
225 sprintf(title,
"Sec.%i #Theta vs #phi",sec+1);
226 fHistograms->Add(
new TH2F(name,title,60,60.,120.,80,10.,90.));
229 sprintf(name,
"hChi2S%i",sec+1);
230 sprintf(title,
"Sec.%i Chi^{2}/NDF",sec+1);
234 sprintf(name,
"hNWiresS%i",sec+1);
235 sprintf(title,
"Sec.%i Num.wires per track",sec+1);
237 fHistograms->Add(
new TH1F(name,title,nBins,0.,nBins));
241 sprintf(name,
"hNLayersS%i",sec+1);
242 sprintf(title,
"Sec.%i Num.layers per track",sec+1);
243 fHistograms->Add(
new TH1F(name,title,nBins,0.,nBins));
248 Double_t steps[6]={0.,0.,0.,0.,0.,0.};
249 for(Int_t parn=0;parn<6;parn++) {
259 for(Int_t lay=0;lay<6;lay++) {
264 steps[2] = -steps[2];
277 for(Int_t parn=0;parn<6;parn++) {
280 if(layP2Mod == NULL)
continue;
287 if(layP2Mod != NULL) {
298 for(Int_t parn=0;parn<6;parn++) {
301 if(layP2Sec == NULL)
continue;
308 if(layP2Sec == NULL)
return;
322 for(Int_t parn=0;parn<6;parn++) {
325 if(layP2Sec == NULL)
continue;
332 if(layP2Sec != NULL) {
384 "============================== Event %i =============================\n",
400 UInt_t nClusters[6] = {0,0,0,0,0,0};
403 UChar_t sec = pClst->
getSec();
407 Bool_t isGoodSectors = kFALSE;
408 for(Int_t s=0;s<6;s++) {
410 if(
nMods[s] <= 1)
continue;
412 if(pEvLCells != NULL) {
413 Int_t nCells = (*pEvLCells)[s].getNCells();
415 if(nCells>=nWiresC && nCells<=
nWiresCut[s]) {
417 isGoodSectors = kTRUE;
421 isGoodSectors = kTRUE;
425 return isGoodSectors;
434 UChar_t sec = fClst1->
getSec();
469 Int_t nWiresInAlign = 0;
476 if(nWiresInAlign < 6)
continue;
482 if(typeClFn==0) flag =
fitSeg(fClst1);
489 flag =
fitSec(fClst1,fClst2);
506 Int_t &s1 = secList[0];
507 Int_t &s2 = secList[1];
508 Int_t &s3 = secList[2];
509 Int_t &s4 = secList[3];
516 for(Int_t s=0;s<6;s++) {
517 fClstArr[s][0] = NULL;
518 fClstArr[s][1] = NULL;
523 Int_t nWiresInAlign = 0;
525 Int_t sec = fClst->
getSec();
527 if(fClstArr[sec][seg] != 0) {
528 Error(
"fitAlgForMilleCosmic",
"Second time HMdcClus for sec.%i seg.%i",sec,seg);
535 fClstArr[sec][seg] = fClst;
536 if(nSegs[sec] == 0) {
537 secList[nSectors] = sec;
549 if(first < 0 || nSectors == 4)
break;
553 if(nWiresInAlign < 6)
continue;
555 for(Int_t s=0;s<6;s++)
if(fClstArr[s][0]==NULL && fClstArr[s][1]!=NULL) {
556 fClstArr[s][0] = fClstArr[s][1];
557 fClstArr[s][1] = NULL;
559 if(nModules==1)
continue;
569 if(nModules < 2)
continue;
571 if(typeClFn==0) flag =
fitSeg(fClst);
574 if (nSectors == 1) flag =
fitSec(fClstArr[s1][0],fClstArr[s1][1]);
575 else if(nSectors == 2) flag =
fit2Sectors(fClstArr[s1][0],fClstArr[s1][1],
576 fClstArr[s2][0],fClstArr[s2][1]);
584 else if(nSectors == 3) flag =
fitNSectors(fClstArr[s1][0],fClstArr[s1][1],
585 fClstArr[s2][0],fClstArr[s2][1],
586 fClstArr[s3][0],fClstArr[s3][1],NULL,NULL);
587 else if(nSectors == 4) flag =
fitNSectors(fClstArr[s1][0],fClstArr[s1][1],
588 fClstArr[s2][0],fClstArr[s2][1],
589 fClstArr[s3][0],fClstArr[s3][1],
590 fClstArr[s4][0],fClstArr[s4][1]);
651 if(
mille == 0)
return;
662 for(Int_t mod=0;mod<4;mod++) {
664 if(nLayersMod == 1)
return;
669 for(Int_t mod=0;mod<4;mod++)
if(listCells2.
getNLayersMod(mod) == 1)
return;
672 for(Int_t mod=0;mod<4;mod++)
if(listCells3.
getNLayersMod(mod) == 1)
return;
675 for(Int_t mod=0;mod<4;mod++)
if(listCells4.
getNLayersMod(mod) == 1)
return;
680 for(Int_t wInd=0;wInd<nWiresData;wInd++) {
700 ((TH1F*)
fHistograms->At(hstInd+2))->Fill(nWires+0.1);
701 ((TH1F*)
fHistograms->At(hstInd+3))->Fill(nLayers+0.1);
707 for(Int_t wInd=0;wInd<nWiresData;wInd++) {
717 for(Int_t wInd=0;wInd<nWiresData;wInd++) {
725 for(Int_t wInd=0;wInd<nWiresData;wInd++) {
773 for(Int_t p=0;p<nMdcPar;p++) {
811 Int_t nParam = nMdcPar;
812 for(Int_t p=0;p<nMdcPar;p++) {
820 Int_t pInd = p==1 ? nMdcPar : nMdcPar+1;
835 if(dDrTm) *dDrTm = dDrT;
838 if(sumWtNorm > 0.)
return -dDrT*wtNorm/sumWtNorm;
846 if(l<0)
mShFlag[s][m][parn] = kTRUE;
847 else lShFlag[s][m][l][parn] = kTRUE;
849 int label = (((
shiftType*10 + s+1)*10 + m+1)*10 + l+1)*10 + parn+1;
855 Int_t& sec,Int_t& mod,Int_t& lay,Int_t& parn) {
869 sys = (label%100000)/10000;
870 sec = (label%10000)/1000 - 1;
871 mod = (label%1000)/100 - 1;
872 lay = (label%100)/10 - 1;
873 parn = (label%10) - 1;
874 if(sec<0||sec>5 || mod<0||mod>3 || lay<-1||lay>5 || parn<0)
return kFALSE;
881 else return dDrT*
derNorm[parNum];
889 if(dSign1 == dSign2)
return (drTime1-drTime2)*0.5;
898 if(parSec==
sector || parSec<0) {
913 else Error(
"setPedeInFileName",
"File name is not specified!!!");
919 printf(
"******CreatePedeInParamFile******\n");
921 printf(
"* If you want to change this file\n");
922 printf(
"* do it by hand or delete file.\n");
923 printf(
"*********************************\n");
928 if(file == NULL) Error(
"creatPedeInParamFile",
"Can't open file %s",
pedeInParFName.Data());
931 if(
shiftType == 0) sys =
"All shifts done in sector sys.";
932 if(
shiftType == 1) sys =
"All shifts done in mdc sys.";
933 if(
shiftType == 2) sys =
"All shifts done in lab. sys.";
934 fprintf(file,
" Parameter ! %s\n",sys.Data());
935 for(Int_t s=0;s<6;s++)
for(Int_t m=0;m<4;m++)
for(Int_t l=-1;l<6;l++) {
938 if(l<0 && !
mShFlag[s][m][p])
continue;
939 if(l>=0 && !
lShFlag[s][m][l][p])
continue;
941 fprintf(file,
"%11i 0.0 -1.0000 !",
packLabel(s,m,l,p));
942 else fprintf(file,
"%11i 0.0 0.0000 !",
packLabel(s,m,l,p));
944 if(l<0) fprintf(file,
" %is. %im.: mdc",s+1,m+1);
946 fprintf(file,
" %is. %im. %il.: layer",s+1,m+1,l+1);
947 if(p==7 || p==8) fprintf(file,
" part II");
949 fprintf(file,
" %s\n",
shitsInfo[p].Data());
958 if(rtdb == 0)
return kFALSE;
962 if( !((
HParSet*)pMdcGeomStruct)->
init(inputFile) )
return kFALSE;
974 !((
HParSet*)pMdcLCorrPar)->
init(inputFile))
return kFALSE;
993 if(fileName == 0)
printErrorAndExit(
"readPedeResFile",
"File name of Pede results not specified!");
995 FILE* file = fopen(fileName,
"r");
998 for(Int_t s=0;s<6;s++)
for(Int_t m=0;m<4;m++)
for(Int_t p=0;p<9;p++)
mShFlag[s][m][p] = kTRUE;
1006 if( !buffer.Gets(file) )
printErrorAndExit(
"readPedeResFile",
"Wrong format of file %s",fileName);
1007 Ssiz_t pos = buffer.Index(
"Parameter");
1008 if(pos<0 || pos>10)
printErrorAndExit(
"readPedeResFile",
"Wrong format of file %s",fileName);
1009 while(buffer.Gets(file) && buffer.Length()>16 &&
addShifts(buffer));
1019 Bool_t reCalcLayerTransf = kFALSE;
1022 for(Int_t s=0;s<6;s++)
for(Int_t m=0;m<4;m++) {
1030 Double_t pitch = fLayerParLay.
getPitch();
1033 Double_t wireOrNew = wireOrOld +
shiftsLay[s][m][l][5];
1034 Double_t wireOrR = wireOrNew*TMath::DegToRad();
1035 Double_t layShift = shiftsLay[s][m][l][1]*TMath::Cos(wireOrR) -
1036 shiftsLay[s][m][l][0]*TMath::Sin(wireOrR);
1037 Double_t centWrNew = centWrOld - layShift/pitch;
1044 Float_t layShiftPIIold, wrOrCorrPIIold;
1045 if(!pMdcLCorrPar->
getLayerCorrPar(s,m,l, firstWrPII,layShiftPIIold,wrOrCorrPIIold))
continue;
1046 if(firstWrPII>300) pMdcLCorrPar->
addLayerShift(s,m,l,firstWrPII,0.,0.);
1056 Float_t wrOrCorrPIInew = wrOrCorrPIIold + shiftsLay[s][m][l][5] - shiftsLay[s][m][l][8];
1057 Double_t cosWrOrPIInew = TMath::Cos((wireOrNew - wrOrCorrPIInew)*TMath::DegToRad());
1058 Float_t layShiftPIInew = layShiftPIIold + shiftsLay[s][m][l][7]*cosWrOrPIInew - layShift;
1060 pMdcLCorrPar->
addLayerShift(s,m,l,firstWrPII,layShiftPIInew,wrOrCorrPIInew);
1066 for(Int_t l=0;l<6;l++) {
1071 reCalcLayerTransf = kTRUE;
1093 if(
isGeomChanged) printf(
"\nMDC geometry has changed !!!\n\n");
1100 if( !outputFile->
open(const_cast<char*>(outGeomFileName.Data()),
"out") )
1103 if(rtdb == 0)
return kFALSE;
1110 outputFile->
close();
1115 gSystem->Exec(cpFile);
1121 for(Int_t p=0;p<7;p++)
fixModPar(s,m,p);
1125 if(s>=0&&s<6 && m>=0&&m<4 && p>=0&&p<7) {
1136 if(s<0 || s>5 || m<0 || m>3 || l<0 || l>5 || p<0 || p>8)
return;
1154 if(file == NULL)
return;
1160 Ssiz_t pos = buffer.Index(
"SumOfShifts:");
1165 Int_t
n = sscanf(buffer.Data(),
"%*s %i %*s %*s %i",&
iteration,&sys);
1171 pos = buffer.Index(
"Statistics:");
1175 while(buffer.Gets(file) && buffer.Length()>16 &&
addShifts(buffer));
1181 TObjArray* arr = buffer.Tokenize(
" ");
1182 Bool_t exitFlag = kFALSE;
1183 if(arr->GetEntries()>=3) {
1184 Int_t label = ((TObjString*)(arr->At(0)))->GetString().Atoi();
1185 Double_t shift = ((TObjString*)(arr->At(1)))->GetString().Atof();
1186 Double_t coef = ((TObjString*)(arr->At(2)))->GetString().Atof();
1187 Int_t btId,sys,sec,mod,lay,parn;
1197 mShFlag[sec][mod][parn] = kTRUE;
1200 shiftsLay[sec][mod][lay][parn] += shift;
1203 lShFlag[sec][mod][lay][parn] = kTRUE;
1204 sigmaLay[sec][mod][lay][parn] = coef;
1214 #warning the following warning because of string literal can be ignored!
1215 if(str == NULL) Error(func,form);
1216 else Error(func,form,str);
1225 if(
shiftType == 0) sys =
"all shifts done in sector sys.";
1226 if(
shiftType == 1) sys =
"all shifts done in mdc sys.";
1227 if(
shiftType == 2) sys =
"all shifts done in lab. sys.";
1230 fprintf(file,
"SumOfShifts: %i iteration. System %i - %s\n",
iteration,
shiftType,sys.Data());
1231 fprintf(file,
"Statistics: %i tracks; %8.4f <wires/tr.>; %8.4f <layers/tr.>\n",
nTracks,mNWr,mNLy);
1232 for(Int_t s=0;s<6;s++)
for(Int_t m=0;m<4;m++)
for(Int_t l=-1;l<6;l++) {
1234 for(Int_t p=0;p<
nParMax;p++) {
1235 if(l<0 && !
mShFlag[s][m][p])
continue;
1236 if(l>=0 && !
lShFlag[s][m][l][p])
continue;
1238 fprintf(file,
"%11i",
packLabel(s,m,l,p));
1239 if(l < 0) fprintf(file,
" %18.10e %9.4e ! %is. %im.: mdc",
1242 fprintf(file,
" %18.10e %9.4e ! %is. %im. %il.: layer",
1244 if(p==7 || p==8) fprintf(file,
" part II");
1246 fprintf(file,
" %s\n",
shitsInfo[p].Data());
1258 if(ext) cpFile +=
" "+file+ext+
" "+file+ext+
stepIter;
1259 else cpFile +=
" "+file+
" "+file+
stepIter;
1260 gSystem->Exec(cpFile);
1266 "File name of pede task list is not specified!");
1272 mthDescr =
"Gauss matrix inversion";
1280 mthDescr =
"Gauss matrix inversion";
1285 method =
"bandcholesky ";
1317 method =
"diagonalization";
1331 "File name of parameters list not specified!");
1334 fprintf(file,
"Cfiles !\n");
1338 else fprintf(file,
"!parConstrain.txt ! constraints text file\n");
1340 fprintf(file,
"%s ! parameter text file\n",
pedeInParFName.Data());
1351 for(Int_t s=0;s<6;s++)
nWiresCut[s] = wc[s];
1366 for(Int_t s=0;s<6;s++)
for(Int_t m=0;m<4;m++)
for(Int_t p=6;p<9;p++)
mShFlag[s][m][p] = kFALSE;
static HMdcEvntListCells * getExObject(void)
HMdcList24GroupCells & getOutputListCells3(void)
HGeomTransform * layPosShCurr
void setMaxNumWiresCut(Int_t *wc)
void fixPar(Int_t s, Int_t m, Int_t l, Int_t p)
Int_t getNumOfGoodWires(void) const
Double_t sigmaMdc[6][4][9]
HGeomTransform negShifts[ASIZE]
UChar_t getSec(void) const
void readSumOfShiftsFile(void)
const HGeomTransform & getLabTransSec(Int_t sec, Bool_t init=kFALSE)
static void setAnotherFit(HMdc12Fit *fit)
Int_t getNLayers(void) const
void fixLayPar(Int_t s, Int_t m, Int_t l, Int_t p)
const HGeomTransform * getRotLayP2SysRSec(void) const
Int_t getGlobalDerWTof(void)
void transLineToOtherSec(const HMdcLineParam &ln, Int_t sec, HGeomVector &p1, HGeomVector &p2)
Double_t sigmaLay[6][4][6][9]
Double_t getWtNorm(void) const
static HMdcGetContainers * getObject()
static Bool_t fPrint(void)
void creatPedeInParamFile(void)
HMdcTrackParam * getFinalParam(void)
HMdcWireData * getWireData(Int_t n)
Bool_t getFitStatus(void) const
void setTrShiftInModSys(void)
void setShiftTransformation(void)
UChar_t getIOSeg(void) const
Double_t calcDriftTimeForAlign(const HGeomVector &p1, const HGeomVector &p2, Int_t &distSign)
HMdcDetector * getMdcDetector()
const HGeomTransform * getRotLayP1SysRMod(void) const
Bool_t getPrintFlag(void) const
Int_t getLayerNParts(void) const
Int_t getSector3(void) const
void setPrintFlag(Bool_t prnt)
Int_t getNDrTimesMod(Int_t m) const
Bool_t lFixFlag[6][4][6][9]
HRuntimeDb * getRuntimeDb(void)
virtual Int_t getModule(Int_t sector, Int_t mod)
Double_t getChi2(void) const
Bool_t lShFlag[6][4][6][9]
const HGeomTransform & getLabTransMod(Int_t sec, Int_t mod, Bool_t init=kFALSE)
HMdcGetContainers * pGetCont
void setMdcShiftParOnly(Bool_t fl=kTRUE)
Bool_t fitSeg(HMdcClus *fClst, Int_t arrInd=0)
HGeomTransform negLThSh[6]
void calcShiftInSecSys(const HGeomTransform *laySec, const HGeomTransform &shift, HGeomTransform &laySh)
void setInputVersion(Int_t v=-1, Int_t i=0)
static HMdcSizesCells * getExObject(void)
static HMdcSizesCells * getObject(void)
Bool_t writeParAsciiFile(void)
Bool_t fitNSectors(HMdcClus *cl1, HMdcClus *cl2, HMdcClus *cl3, HMdcClus *cl4, HMdcClus *cl5, HMdcClus *cl6, HMdcClus *cl7, HMdcClus *cl8)
void useDiagonalizationMethod(Int_t nit=5, Float_t acc=0.01)
Double_t getThetaDeg(void) const
void readPedeResFile(const char *fileName)
Int_t getNDrTimes(void) const
Float_t getCentralWireNr()
void setParConstrainFile(const char *file)
HMdcWiresArr & getWiresArr(void)
Int_t getSector(void) const
HModGeomPar * getModGeomPar(Int_t sec, Int_t mod, Bool_t init=kFALSE)
Bool_t open(const Text_t *fname, const Text_t *status="in")
Int_t getLayerPart(Int_t c) const
HMdcList24GroupCells & getOutputListCells2(void)
static Bool_t unpackLabel(Int_t label, Int_t &btId, Int_t &sys, Int_t &sec, Int_t &mod, Int_t &lay, Int_t &parn)
Bool_t addLayerShift(Int_t s, Int_t m, Int_t l, Int_t fstWr, Float_t sh, Float_t orCorr=0.)
HGeomTransform layPosSh[144][ASIZE]
HMdcLayerCorrPar * getMdcLayerCorrPar(Bool_t init=kFALSE)
void fixModPar(Int_t s, Int_t m, Int_t p)
HMdcList24GroupCells & getOutputListCells(void)
void setIMod(Int_t s, Int_t m)
Int_t getNLayersMod(Int_t mod) const
void useCholeskyMethod(Int_t nit=5, Float_t acc=0.001, Int_t bwidth=6)
Double_t func(Double_t *x, Double_t *par)
Int_t getTypeClFinder(void) const
Bool_t fit2Sectors(HMdcClus *fClst1, HMdcClus *fClst2, HMdcClus *fClst3, HMdcClus *fClst4)
Int_t getDistanceSign(void) const
Int_t getSector4(void) const
void useSparseGMRESMethod(Int_t nit=5, Float_t acc=0.01)
TString fileName("be1834507002801.hld")
Bool_t getLayerCorrPar(Int_t s, Int_t m, Int_t l, Int_t &fstWr, Float_t &sh, Float_t &orCorr) const
void creatSumOfShiftsFile(void)
HMdcSizesCellsLayer * pSCLayer[144]
void setXYZ(const Double_t xx, const Double_t yy, const Double_t zz)
void setTrShiftInSecSys(void)
Double_t tofDerCorr[24][9]
void setChi2PerNdfCut(Double_t cut=50.)
void setCatDist(Float_t c)
Bool_t getSecTransMod(HGeomTransform &trans, Int_t sec, Int_t mod, Bool_t init=kFALSE)
void setTrShiftInLabSys(void)
ClassImp(HMdcMille) HMdcMille
Double_t getSumWtNorm(Int_t m) const
void writePedeTaskFile(void)
Bool_t getAnalytDeriv(Float_t *der, HMdcTrackParam *par=0)
HMdcList24GroupCells & getOutputListCells4(void)
HMdcSizesCellsMod * pSCMod[24]
void getIndexRegChilds(Int_t &first, Int_t &last) const
Int_t getModule(void) const
Int_t getModIndex(void) const
Double_t getDrTime(void) const
void mille(int NLC, const float *derLc, int NGL, const float *derGl, const int *label, float rMeas, float sigma)
void fitAlgorithmForMille(void)
HGeomTransform layNegSh[144][ASIZE]
void printErrorAndExit(const char *func, const char *form, const char *str=NULL)
HParSet * getContainer(const Text_t *)
void setCentralWireNr(Float_t e)
const HGeomTransform * getRotLayP1SysRSec(void) const
void fixFullMod(Int_t s, Int_t m)
HGeomTransform posShifts[ASIZE]
Double_t shiftsMdc[6][4][9]
void creatPedeTaskFile(const char *fileName="pedeTask.txt")
Char_t getHitStatus(void) const
void fixFullLay(Int_t s, Int_t m, Int_t l)
void calcShiftInLabSys(const HGeomTransform *secSys, const HGeomTransform *laySysMod, const HGeomTransform &shift, HGeomTransform &laySh)
Int_t getSector(void) const
void openNewBinaryFile(void)
Double_t getPhiDeg(void) const
HMdcTrackFitter * getFitter(Int_t ind)
Bool_t fitMixedClus(HMdcClus *fClst, Int_t arrInd=0)
void setStatic(Bool_t flag=kTRUE)
void createHists(Int_t sec)
Double_t calcDDriftTime(Int_t p)
HMdcTrackParam * finalParam
HMdcFittersArray fittersArr[2]
static void setTransform(Double_t *par, HGeomTransform &trans)
const HGeomTransform * getSecTrans(void) const
void fitAlgForMilleCosmic(void)
Bool_t isInCell(void) const
Int_t getSector2(void) const
int packLabel(Int_t s, Int_t m, Int_t l, Int_t parn)
Int_t getIndexParent(void) const
Int_t getOutputNLayers(void) const
void copyFile(const char *op, TString &file, const char *ext=0)
Double_t getErrTdcTime(void) const
HMdcLayerGeomPar * getMdcLayerGeomPar(Bool_t init=kFALSE)
Int_t getLayer(void) const
void calcLayerTransformations()
HGeomTransform & getLabTransform()
void useFullGMRESMethod(Int_t nit=5, Float_t acc=0.01)
HGeomTransform posLThSh[6]
Double_t getDev(void) const
Double_t calcGlobDer(Int_t parNum)
Int_t getActiveModule(void) const
Bool_t loadGeometryPar(void)
const HGeomTransform * getRotLayP2SysRMod(void) const
void calcShiftInModSys(const HGeomTransform *mdcSys, const HGeomTransform *laySysMod, const HGeomTransform &shift, HGeomTransform &laySh)
Double_t shiftsLay[6][4][6][9]
void useInversionMethod(Int_t nit=3, Float_t acc=0.001)
Int_t getSegIndex(void) const
Double_t calcDerTofCorr(Int_t p, Double_t *dDrTm=0)
void setWireOrient(Float_t d)
Bool_t addShifts(TString &buffer)
Bool_t fitSec(HMdcClus *fClst1, HMdcClus *fClst2)
void useBandCholeskyMethod(Int_t nit=8, Float_t acc=0.01, Int_t bwidth=6)
HGeomTransform * layNegShCurr
Int_t getNDriftTimes(void) const
Int_t shiftSysLay[6][4][6]
Double_t calcDriftTime(const HGeomTransform &laySys, Int_t &distSign)
Int_t getCell(void) const
void setPedeInFileName(const char *fname)
Bool_t isMdcInAlign[6][4]
HMdcTrkCand * fillTrkCandISeg(void)