HYDRA_development_version
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
halignmentmeta.cc
Go to the documentation of this file.
1 //*-- Author : Vladimir Pechenov 24.11.2011
2 
3 #include "halignmentmeta.h"
4 #include "TMinuit.h"
5 #include "TFile.h"
6 #include "TString.h"
7 #include "TNtuple.h"
8 #include "hmdcsizescells.h"
9 #include "hades.h"
10 #include "hruntimedb.h"
11 #include "hspecgeompar.h"
12 #include "hgeomvolume.h"
13 #include <iostream>
14 
15 using namespace std;
16 
18 
20  trackSelecCutX = 1.5;
21  trackSelecCutY = 1.0;
22  filterFlag = kTRUE;
23  nMetaModules = 0;
24  metaDetector = 3;
25  fitTofModYPos = kFALSE;
26  xShitfRpc = 0.;
27  calcCellXOffset = kFALSE;
28  nCells = 0;
29  nCellsTot = 0;
30 }
31 
32 void HAlignmentMeta::setTofDetector(Double_t cutX,Double_t cutY) {
33  metaDetector = 0;
34  nMetaModules = 8;
35  setCuts(cutX,cutY);
36  nCells = 8;
37  nCellsTot = nMetaModules*nCells;
38 }
39 
40 void HAlignmentMeta::setShowerDetector(Double_t cutX,Double_t cutY) {
41  metaDetector = 1;
42  nMetaModules = 1;
43  setCuts(cutX,cutY);
44  nCells = 32; // number of rows
45  nCellsTot = nCells;
46 }
47 
48 void HAlignmentMeta::setRpcDetector(Double_t cutX,Double_t cutY) {
49  metaDetector = 2;
50  nMetaModules = 1;
51  setCuts(cutX,cutY);
52  nCells = 32;
53  nCellsTot = 6*nCells; // 6-number of columns in RPC
54 }
55 
56 void HAlignmentMeta::setCuts(Double_t cutX,Double_t cutY) {
57  trackSelecCutX = cutX;
58  trackSelecCutY = cutY;
59  if(trackSelecCutX > 0. && trackSelecCutY > 0.) filterFlag = kTRUE;
60  else filterFlag = kFALSE;
61 }
62 
63 void HAlignmentMeta::setNtuple(TNtuple *ntp) {
64  nt = ntp;
65  nt -> SetBranchAddress("s",&sec);
66  nt -> SetBranchAddress("x1s",&x1); // yuxari dubna
67  nt -> SetBranchAddress("y1s",&y1); // yuxari dubna
68  nt -> SetBranchAddress("z1s",&z1);
69  nt -> SetBranchAddress("x2s",&x2); // yuxari gsi
70  nt -> SetBranchAddress("y2s",&y2); // yuxari gsi
71  nt -> SetBranchAddress("z2s",&z2);
72  nt -> SetBranchAddress("metaMod",&metaModule);
73  nt -> SetBranchAddress("col",&metaColumn);
74  nt -> SetBranchAddress("cell",&metaCell);
75  nt -> SetBranchAddress("xMeta",&xMetaLocal); // ashagi gsi
76  nt -> SetBranchAddress("yMeta",&yMetaLocal);
77  nt -> SetBranchAddress("zMeta",&zMetaLocal);
78  nt -> SetBranchAddress("sigX",&xRMS);
79  nt -> SetBranchAddress("sigY",&yRMS);
80  nt -> SetBranchAddress("sigZ",&zRMS);
81 //nt -> SetBranchAddress("beta",&beta);
82 }
83 
85  if(gMinuit != NULL) delete gMinuit;
86 }
87 
88 void HAlignmentMeta::fcnMeta(Int_t &npar, Double_t *gin, Double_t &fn, Double_t *par, Int_t iflag) {
89  static int count = 1;
90  count++;
91  HAlignmentMeta *myObject = (HAlignmentMeta*)(gMinuit -> GetObjectFit());
92  fn = myObject->getMinFunction(par);
93  if(count%100 == 0) cout<<"iter: "<<count<<" function "<<fn<<" "<<par[0]<<" "<<par[1]<<" "
94  <<par[2]<<" "<<par[3]<<" "<<par[4]<<" "<<par[5]<< endl;
95 }
96 
97 void HAlignmentMeta::alignMeta(Int_t sec,TNtuple *ntp) {
98  if(metaDetector<0 || metaDetector>2) {
99  Error("alignMeta","Meta detector type is not setted! Stop!");
100  exit(1);
101  }
102  alignSec = sec;
103  setNtuple(ntp);
104 
105  HSpecGeomPar* fSpecGeomPar = (HSpecGeomPar*)gHades->getRuntimeDb()->getContainer("SpecGeomPar");
106  const HGeomTransform& secLabTrans = fSpecGeomPar->getSector(alignSec)->getTransform();
107 
108  xShitfRpc = 0.;
109  for(Int_t im=0;im<nMetaModules;im++) {
110  transMetaModSecOld[im] = transMetaModLabOld[im];
111  transMetaModSecOld[im].transTo(secLabTrans); // trans.from lab. to sector coor.sys.
112  }
113 
114  Int_t ierflg = 0;
115  if(gMinuit == NULL) {
116  if(metaDetector == 0) new TMinuit(6+8);
117  else new TMinuit(6);
118  }
119  gMinuit->mncler();
120  gMinuit->SetFCN(fcnMeta);
121  gMinuit->SetObjectFit(this);
122  Double_t arglist[6];
123 
124  fillArray();
125 
126  gMinuit->mnparm(0,"x", 0., 1.,0,0,ierflg);
127  gMinuit->mnparm(1,"y", 0., 1.,0,0,ierflg);
128  gMinuit->mnparm(2,"z", 0., 1.,0,0,ierflg);
129  gMinuit->mnparm(3,"alpha", 0., 0.1,0,0,ierflg);
130  gMinuit->mnparm(4,"beta", 0., 0.1,0,0,ierflg);
131  gMinuit->mnparm(5,"gamma", 0., 0.1,0,0,ierflg);
132  if(metaDetector != 1) { // TOF&RPC
133  gMinuit->FixParameter(0);
134  gMinuit->FixParameter(4);
135  if(metaDetector == 0) { // TOF
136  if(fitTofModYPos) {
137  for(Int_t ip=0;ip<8;ip++) {
138  TString parName("Ymod");
139  parName += ip;
140  gMinuit->mnparm(6+ip,parName.Data(),0.,1.,0,0,ierflg);
141  }
142  for(Int_t ip=0;ip<8;ip++) gMinuit->FixParameter(6+ip);
143  for(Int_t ip=0;ip<8;ip++) tofModYSh[ip] = 0.;
144  }
145  }
146  }
147 
148 
149 // gMinuit->SetPrintLevel(-1);
150 gMinuit->SetPrintLevel(1);
151 //!!! gMinuit->SetErrorDef(1);
152  arglist[0] = 2;
153  gMinuit->mnexcm("SET STR",arglist,1,ierflg);
154  arglist[1] = 0.001; //0.001;
155 // arglist[0] = 5000; //20000;
156  arglist[0] = 20000; //5000; //20000;
157  for(Int_t i=0;i<5;i++) {
158  calcMinDist();
159  if(filterFlag) {
160  if(metaDetector == 1) selectTracks(i==0 ? 2. : 1.);
161  else calcXOffset(i==0 ? 2. : 1.);
162  }
163  setWeights();
164  if(i==0) for(Int_t tr = 0; tr < nTracks; tr++) {
165  tracks[tr].xMinDistInit = tracks[tr].xMinDist;
166  tracks[tr].yMinDistInit = tracks[tr].yMinDist;
167  }
168  gMinuit->mnexcm("MINI",arglist,2,ierflg);
169  if(i<2) continue; // At least do track selection 2 times
170  if(ierflg == 0) break;
171  }
172 
173  calcMinDist();
174  if(metaDetector == 0 && fitTofModYPos) {
175  printf(" ------ Fit Yshifts --------------\n");
176  gMinuit->mnfree(0);
177  for(Int_t ip=0;ip<6;ip++) gMinuit->FixParameter(ip);
178  gMinuit->mnexcm("MINI",arglist,2,ierflg);
179 
180  selectTracks(1.);
181  setWeights();
182 
183  gMinuit->mnfree(0);
184  for(Int_t ip=0;ip<8;ip++) gMinuit->FixParameter(6+ip);
185  gMinuit->FixParameter(0);
186  gMinuit->FixParameter(4);
187  gMinuit->mnexcm("MINI",arglist,2,ierflg);
188  calcMinDist();
189  }
190 
191  if(metaDetector != 1) {
192  calcXOffset(1.0); //1.5);
193  calcMinDist();
194  }
195 
196  for(Int_t im=0;im<nMetaModules;im++) {
197  transMetaModLabNew[im] = transMetaModSecNew[im];
198  transMetaModLabNew[im].transFrom(secLabTrans);
199  }
200 }
201 
203  Double_t out[6];
204  Double_t err;
205  for(Int_t ip=0;ip<6;ip++) gMinuit->GetParameter(ip,out[ip],err);
206  if(metaDetector==0 && fitTofModYPos)
207  for(Int_t ip=0;ip<8;ip++) gMinuit->GetParameter(6+ip,tofModYSh[ip],err);
208  HGeomTransform trans;
209  HMdcSizesCells::setTransform(out,trans);
210  calcMinDist(trans);
211 }
212 
213 void HAlignmentMeta::calcMinDist(Double_t *par) {
214  HGeomTransform trans;
215  HMdcSizesCells::setTransform(par,trans);
216  if(metaDetector == 0 && fitTofModYPos) for(Int_t ip=0;ip<8;ip++) tofModYSh[ip] = par[6+ip];
217  calcMinDist(trans);
218 }
219 
221  nTracks = 0;
222  for(Int_t c=0;c<nCellsTot;c++) {
223  cellStat[c] = 0;
224  cellXCorr[c] = 0.;
225  }
226  Int_t nentries = nt->GetEntries();
227  HGeomVector trPoint1pr,trPoint2pr;
228  Int_t strInd = 0;
229  for(Int_t i = 0; i < nentries; i++) {
230  nt->GetEntry(i);
231  if(sec != alignSec) continue;
232  if(TMath::IsNaN(xMetaLocal+yMetaLocal+zMetaLocal)) {
233  printf("NaN!!! Entry %i: xMetaLocal=%f yMetaLocal=%f zMetaLocal=%f\n",
234  i,xMetaLocal,yMetaLocal,zMetaLocal);
235  continue;
236  }
237 
238  TrackMdcMeta &t = tracks[nTracks];
239  t.mdcPnt1Sec.setXYZ(x1, y1, z1); // mdc lab
240  t.mdcPnt2Sec.setXYZ(x2, y2, z2); // mdc lab
241  t.metaMod = Short_t(metaModule + 0.1);
242  t.column = Short_t(metaColumn+0.1);
243  t.cell = Short_t(metaCell+0.1);
244  if (metaDetector == 0) t.cellInd = t.metaMod*nCells + t.cell;
245  else if(metaDetector == 1) t.cellInd = t.cell;
246  else if(metaDetector == 2) t.cellInd = t.column*nCells + t.cell;
247  t.xMeta = xMetaLocal;
248  t.yMeta = yMetaLocal;
249  t.zMeta = zMetaLocal;
250  t.sigmaX = xRMS; // shower/rpc local error
251  t.sigmaY = yRMS; // shower/rpc local error
252  t.sigmaZ = zRMS; // shower/rpc local error
253  t.useIt = kTRUE;
254  t.wt = 1.;
255  HGeomVector dv1(trPoint1pr-t.mdcPnt1Sec);
256  HGeomVector dv2(trPoint2pr-t.mdcPnt2Sec);
257  if(dv1.length()+dv2.length()<0.01) t.startTrInd = strInd;
258  else {
259  t.startTrInd = nTracks;
260  strInd = nTracks;
261  trPoint1pr = t.mdcPnt1Sec;
262  trPoint2pr = t.mdcPnt2Sec;
263  }
264  if(nTracks==0 || yMetaLocal<yMinMetaLocal) yMinMetaLocal = yMetaLocal;
265  if(nTracks==0 || yMetaLocal>yMaxMetaLocal) yMaxMetaLocal = yMetaLocal;
266  cellStat[t.cellInd]++;
267  nTracks++;
268  if(nTracks==1000000) return;
269  }
270  if(metaDetector > 0) { // RPC & Shower:
271  Double_t binSize = (yMaxMetaLocal-yMinMetaLocal)/8.;
272  for(Int_t tr = 0; tr < nTracks; tr++) {
273  TrackMdcMeta &t = tracks[tr];
274  t.binScWt = Short_t((t.yMeta-yMinMetaLocal)/binSize);
275  if(t.binScWt<0) t.binScWt = 0;
276  else if(t.binScWt>7) t.binScWt = 7;
277  }
278  } else { // TOF:
279  for(Int_t tr = 0; tr < nTracks; tr++) {
280  TrackMdcMeta &t = tracks[tr];
281  t.binScWt = t.metaMod;
282  }
283  }
284 
285 }
286 
287 Double_t HAlignmentMeta::getMinFunction(Double_t *par) {
288  calcMinDist(par);
289  Double_t dist = 0;
290  for(Int_t tr = 0; tr < nTracks; tr++) if(tracks[tr].useIt) {
291  dist += tracks[tr].minDist2*tracks[tr].wt;
292 //dist += TMath::Sqrt(tracks[tr].minDist2)*tracks[tr].wt;
293  }
294  return dist;
295 }
296 
298  for(Int_t im=0;im<nMetaModules;im++) {
299  transMetaModSecNew[im] = transMetaModSecOld[im];
300  transMetaModSecNew[im].transTo(trans);
301  if(metaDetector == 2 && xShitfRpc != 0.) { // Take into account Xmodule shift (for RPC only!):
302  HGeomTransform shifterTrans;
303  HGeomVector tr(xShitfRpc,0.,0.);
304  shifterTrans.setTransVector(tr);
305  shifterTrans.transFrom(transMetaModSecNew[im]);
306  transMetaModSecNew[im] = shifterTrans;
307  }
308  if(metaDetector == 0 && fitTofModYPos && tofModYSh[im] != 0.) {
309  HGeomTransform trans;
310  HGeomVector tr(0.,tofModYSh[im],0.);
311  trans.setTransVector(tr) ;
312  trans.transFrom(transMetaModSecNew[im]);
313  transMetaModSecNew[im] = trans;
314  }
315  }
316 
317  for(Int_t tr = 0; tr < nTracks; tr++) {
318  TrackMdcMeta &t = tracks[tr];
319  HGeomVector point1(transMetaModSecNew[t.metaMod].transTo(t.mdcPnt1Sec));
320  HGeomVector point2(transMetaModSecNew[t.metaMod].transTo(t.mdcPnt2Sec));
321  point1.setZ(point1.getZ() - t.zMeta);
322  point2.setZ(point2.getZ() - t.zMeta);
323  Double_t diffZ = point2.getZ() - point1.getZ();
324  Double_t diffX = point2.getX() - point1.getX();
325  Double_t diffY = point2.getY() - point1.getY();
326  t.xMinDist = (point1.getX()*diffZ - point1.getZ()*diffX)/diffZ - t.xMeta;
327  t.yMinDist = (point1.getY()*diffZ - point1.getZ()*diffY)/diffZ - t.yMeta;
328  t.xMinDist -= cellXCorr[t.cellInd];
329 
330  Double_t dYNr = t.dYNorm();
331  t.minDist2 = dYNr*dYNr; // => chi2
332  if(metaDetector == 1) {
333  Double_t dXNr = t.dXNorm();
334  t.minDist2 += dXNr*dXNr;
335  }
336  }
337 }
338 
340  Double_t stat[8];
341  for(Int_t i=0;i<8;i++) stat[i] = 0;
342  for(Int_t tr = 0; tr < nTracks; tr++) {
343  TrackMdcMeta &t = tracks[tr];
344  t.wt = t.useIt ? 1.:0.;
345  if(t.useIt && t.startTrInd != tr) {
346  Int_t nTr = 1;
347  Int_t str = t.startTrInd;
348  for(Int_t p=str;p<tr;p++) if(tracks[p].useIt && t.oneLay(tracks[p])) nTr++;
349  if(nTr == 1) continue;
350  Double_t w = 1./Double_t(nTr);
351  t.wt = w;
352  for(Int_t p=str;p<tr;p++) if(tracks[p].useIt && t.oneLay(tracks[p])) tracks[p].wt = w;
353  }
354  stat[t.binScWt] += t.wt;
355  }
356  Double_t statMax = 0.;
357  for(Int_t i=0;i<8;i++) if(statMax < stat[i]) statMax = stat[i];
358  for(Int_t tr = 0; tr < nTracks; tr++) {
359  TrackMdcMeta &t = tracks[tr];
360  if(t.wt>0. && stat[t.binScWt]>100.) t.wt *= statMax/stat[t.binScWt];
361  }
362 }
363 
364 void HAlignmentMeta::selectTracks(Double_t nSigmasCut) {
365  meanX = 0.;
366  meanY = 0.;
367  meanZ = 0.;
368  sigmX = 0.;
369  sigmY = 0.;
370  sigmZ = 0.;
371  isFirstSIter = kTRUE;
372  while(selectTracksIter(nSigmasCut));
373 }
374 
375 Bool_t HAlignmentMeta::selectTracksIter(Double_t nSigmasCut) {
376  Double_t dXM = 0.;
377  Double_t dX2M = 0.;
378  Double_t dYM = 0.;
379  Double_t dY2M = 0.;
380  Int_t nTr = 0;
381  Bool_t doNextIter = kFALSE;
382  for(Int_t tr = 0; tr < nTracks; tr++) {
383  TrackMdcMeta &t = tracks[tr];
384  Double_t dXm = t.dXNorm();
385  Double_t dYm = t.dYNorm();
386  if(isFirstSIter) { // First iteration.
387  t.useIt = kTRUE;
388  doNextIter = kTRUE;
389  } else if(TMath::Abs(dXm-meanX) <= sigmX*nSigmasCut &&
390  TMath::Abs(dYm-meanY) <= sigmY*nSigmasCut) {
391  if(!t.useIt) doNextIter = kTRUE;
392  t.useIt = kTRUE;
393  } else {
394  if(t.useIt) doNextIter = kTRUE;
395  t.useIt = kFALSE;
396  continue;
397  }
398  dXM += dXm;
399  dX2M += dXm*dXm;
400  dYM += dYm;
401  dY2M += dYm*dYm;
402  nTr++;
403  }
404  meanX = dXM/nTr;
405  meanY = dYM/nTr;
406  sigmX = TMath::Max(TMath::Sqrt(dX2M/nTr - meanX*meanX),trackSelecCutX);
407  sigmY = TMath::Max(TMath::Sqrt(dY2M/nTr - meanY*meanY),trackSelecCutY);
408  if(doNextIter) printf(" * From %i tracks %i selected. <X>=%f sX=%f <Y>=%f sY=%f\n",
409  nTracks,nTr,meanX,sigmX,meanY,sigmY);
410  isFirstSIter = kFALSE;
411  return doNextIter;
412 }
413 
415  TString fileName("align");
416  if(metaDetector == 0) fileName += "Tof_S";
417  else if(metaDetector == 1) fileName += "Shower_S";
418  else if(metaDetector == 2) fileName += "Rpc_S";
419  fileName += alignSec;
420  fileName += ".root";
421 
422  TFile *f = new TFile(fileName.Data(),"recreate");
423  TNtuple *chnt = new TNtuple("chnt","chnt",
424  "alignSec:wt:xMeta:yMeta:zMeta:dXold:dYold:dX:dY:sigX:sigY:chi2:mod:col:cell");
425  Float_t data[15];
426  for(Int_t tr = 0; tr < nTracks; tr++) {
427  TrackMdcMeta &t = tracks[tr];
428  data[ 0] = sec;
429  data[ 1] = t.wt;
430  data[ 2] = t.xMeta + cellXCorr[t.cellInd];
431  data[ 3] = t.yMeta;
432  data[ 4] = t.zMeta;
433  data[ 5] = t.xMinDistInit;
434  data[ 6] = t.yMinDistInit;
435  data[ 7] = t.xMinDist;
436  data[ 8] = t.yMinDist;
437  data[ 9] = t.sigmaX;
438  data[10] = t.sigmaY;
439  data[11] = t.minDist2;
440  data[12] = t.metaMod;
441  data[13] = t.column;
442  data[14] = t.cell;
443  chnt->Fill(data);
444  }
445  f->cd();
446  chnt->Write();
447  f->Close();
448  delete f;
449 }
450 
451 
452 void HAlignmentMeta::calcXOffset(Double_t nSigmasCut) {
453  Int_t nCellsC = 0;
454  xShitfRpc = 0.;
455  for(Short_t c=0;c<nCellsTot;c++) {
456  meanX = 0.;
457  meanY = 0.;
458  meanZ = 0.;
459  sigmX = 0.;
460  sigmY = 0.;
461  sigmZ = 0.;
462  isFirstSIter = kTRUE;
463  if(cellStat[c] > 100) {
464  while(calcXOffset(nSigmasCut,c));
465  nCellsC++;
466  if(metaDetector==2 && calcCellXOffset) { // Calculate Xmodule shift (for RPC only):
467  xShitfRpc += cellXCorr[c];
468  nCellsC++;
469  }
470  }
471  }
472  if(metaDetector==2 && calcCellXOffset ) { // Calculate Xmodule shift (for RPC only):
473  if(nCellsC>0) xShitfRpc /= nCellsC;
474  printf("xShitf =%f nCells=%i !!!!!!!!!!!\n",xShitfRpc,nCellsC);
475  for(Short_t c=0;c<nCellsTot;c++) if(cellStat[c] > 100) cellXCorr[c] -= xShitfRpc;
476  }
477 }
478 
479 Bool_t HAlignmentMeta::calcXOffset(Double_t nSigmasCut,Short_t cellInd) {
480  Double_t dXM = 0.;
481  Double_t dX2M = 0.;
482  Double_t dYM = 0.;
483  Double_t dY2M = 0.;
484  Double_t xShift = 0.;
485  Int_t nTr = 0;
486  Bool_t doNextIter = kFALSE;
487  Int_t nTot = 0;
488  for(Int_t tr = 0; tr < nTracks; tr++) {
489  TrackMdcMeta &t = tracks[tr];
490  if(cellInd != t.cellInd) continue;
491  nTot++;
492  Double_t dXm = t.dXNorm();
493  Double_t dYm = t.dYNorm();
494  if(isFirstSIter) { // First iteration.
495  t.useIt = kTRUE;
496  doNextIter = kTRUE;
497  } else if(TMath::Abs(dXm-meanX) <= sigmX*nSigmasCut &&
498  TMath::Abs(dYm-meanY) <= sigmY*nSigmasCut) {
499  if(!t.useIt) doNextIter = kTRUE;
500  t.useIt = kTRUE;
501  } else {
502  if(t.useIt) doNextIter = kTRUE;
503  t.useIt = kFALSE;
504  continue;
505  }
506  dXM += dXm;
507  dX2M += dXm*dXm;
508  dYM += dYm;
509  dY2M += dYm*dYm;
510  xShift += t.xMinDist;
511  nTr++;
512  }
513  meanX = dXM/nTr;
514  meanY = dYM/nTr;
515  sigmX = TMath::Max(TMath::Sqrt(dX2M/nTr - meanX*meanX),trackSelecCutX);
516  sigmY = TMath::Max(TMath::Sqrt(dY2M/nTr - meanY*meanY),trackSelecCutY);
517  isFirstSIter = kFALSE;
518  if(!doNextIter) {
519  cellXCorr[cellInd] += xShift/nTr; // !!!!!!!!!! += vmesto =
520  printf(" * %icolumn %2icell: From %i tracks %i selected. xOffset=%f\n",
521  cellInd/nCells,cellInd%nCells,nTot,nTr,cellXCorr[cellInd]);
522  }
523  return doNextIter;
524 }
HGeomTransform & getTransform()
Definition: hgeomvolume.h:22
Bool_t selectTracksIter(Double_t nSigmasCut)
void setShowerDetector(Double_t cutX=2.0, Double_t cutY=2.0)
ClassImp(HAlignmentMeta) HAlignmentMeta
virtual ~HAlignmentMeta()
void setRpcDetector(Double_t cutX=2.4, Double_t cutY=2.2)
void setCuts(Double_t cutX, Double_t cutY)
Double_t dXNorm(void) const
HRuntimeDb * getRuntimeDb(void)
Definition: hades.h:111
Bool_t oneLay(TrackMdcMeta &t) const
void setZ(const Double_t a)
Definition: hgeomvector.h:30
static void fcnMeta(Int_t &npar, Double_t *gin, Double_t &fn, Double_t *par, Int_t iflag)
TString fileName("be1834507002801.hld")
void calcMinDist(void)
void setXYZ(const Double_t xx, const Double_t yy, const Double_t zz)
Definition: hgeomvector.h:25
Double_t dYNorm(void) const
Double_t length() const
Definition: hgeomvector.h:53
void selectTracks(Double_t nSigmasCut)
void setNtuple(TNtuple *nt)
Hades * gHades
Definition: hades.cc:1213
void setTransVector(const HGeomVector &t)
void checkAlignment(void)
void setWeights(void)
HParSet * getContainer(const Text_t *)
Definition: hruntimedb.cc:124
HGeomVector transFrom(const HGeomVector &p) const
void calcXOffset(Double_t nSigmasCut)
HGeomVolume * getSector(const Int_t n)
Definition: hspecgeompar.cc:75
static void setTransform(Double_t *par, HGeomTransform &trans)
Double_t getMinFunction(Double_t *par)
void setTofDetector(Double_t cutX=3.6, Double_t cutY=2.6)
HGeomVector transTo(const HGeomVector &p) const
void fillArray(void)
void alignMeta(Int_t sec, TNtuple *nt)