FEDRA emulsion software from the OPERA Collaboration
EdbViewMap Class Reference

#include <EdbViewMap.h>

Inheritance diagram for EdbViewMap:
Collaboration diagram for EdbViewMap:

Public Member Functions

void AddInverseAlign ()
 
void CheckView (AView *v)
 
void CheckView (int side, int area, int idview)
 
void CheckViewFrameAlignQuality (const char *file)
 
void ConvertRun (const char *fin, const char *fout)
 
void CorrectCols (TTree &tree)
 
void CorrectLines (TTree &tree)
 
void CorrectToStage ()
 
void DoCorrection ()
 
void DoCorrection1 (AArea &area)
 
void DoCorrectionAllNeib (AView &v)
 
void DoCorrectionBestNeib (AView &v)
 
 EdbViewMap ()
 
void FillAHT (AlignmentParView *apv, EdbViewHeader *vn, EdbViewHeader *vc, EdbAffine2D *aff, float w, TTree *&aht, const char *name)
 
void FillALcp ()
 
void FillAR ()
 
AAreaGetAArea (int side, int area)
 
AViewGetAView (EdbViewHeader &h)
 
AViewGetAView (int side, int area, int view)
 
EdbViewHeaderGetHeader (int i)
 
EdbViewHeaderGetPinHeader (int i)
 
EdbViewHeaderGetViewHeader (AlignmentParView &apv, int fs)
 
void InitAR ()
 
bool IsBug0 (AView &v1, AView &v2)
 
void MakeAHTnocorr ()
 
int PinPoint (int pinviewid)
 
int PinViewID (int pinpoint, int side)
 
float Quality (AApv &apv)
 
void ReadPinViewsHeaders (const char *file)
 
void ReadViewAlign (const char *file)
 
void ReadViewsHeaders (const char *file, TCut &cut)
 
void SaveColsCorrToRun (const char *fin)
 
void SaveCorrToRun (const char *fin)
 
void SaveLinesCorrToRun (const char *fin)
 
AViewSelectBestNotCorrected (AArea &area)
 
void t (const char *fin, const char *fout, int algorithm, const char *cut="1")
 
void Transform (AView &v, const AlignmentParView &apv)
 
float ViewCorrectability (AView &v)
 
float ViewCorrectability1 (AView &v)
 
float ViewCorrectabilityAll (AView &v)
 
int ViewSide (const EdbViewHeader &vh) const
 
virtual ~EdbViewMap ()
 

Static Public Member Functions

static bool IsApplied (const AlignmentParFrame &apf)
 
static bool IsApplied (const AlignmentParView &apv)
 
static bool IsFound (const AlignmentParFrame &apf)
 
static bool IsFound (const AlignmentParView &apv)
 
static bool IsPin (const AlignmentParView &apv)
 
static bool IsRecovered (const AlignmentParFrame &apf)
 

Public Attributes

TTree * eAHT
 
AlignmentParView ** eALcp
 
Int_t eAlgorithm
 
ARun eAR
 
TH2D * eHX0even
 
TH2D * eHX0odd
 
TH2D * eHX1even
 
TH2D * eHX1odd
 
TH2D * eHY0even
 
TH2D * eHY0odd
 
TH2D * eHY1even
 
TH2D * eHY1odd
 
Int_t eNcp
 
Int_t eNpvh
 
Int_t eNvh
 read tree with alignment parameters here More...
 
Int_t ePinPointID
 
TObjArray ePinViewHeaders
 
TObjArray eViewHeaders
 

Constructor & Destructor Documentation

◆ EdbViewMap()

EdbViewMap::EdbViewMap ( )
21 {
22  eNcp =0;
23  eALcp =0;
24  eNvh =0;
25  eAHT =0;
26  eAlgorithm=0;
27  eHX0odd=0;
28  eHX0even=0;
29  eHY0odd=0;
30  eHY0even=0;
31  eHX1odd=0;
32  eHX1even=0;
33  eHY1odd=0;
34  eHY1even=0;
35 }
AlignmentParView ** eALcp
Definition: EdbViewMap.h:74
Int_t eAlgorithm
Definition: EdbViewMap.h:86
TH2D * eHX0odd
Definition: EdbViewMap.h:90
TTree * eAHT
Definition: EdbViewMap.h:84
TH2D * eHY1even
Definition: EdbViewMap.h:97
TH2D * eHY0odd
Definition: EdbViewMap.h:92
Int_t eNcp
Definition: EdbViewMap.h:73
TH2D * eHY0even
Definition: EdbViewMap.h:93
TH2D * eHX1odd
Definition: EdbViewMap.h:94
TH2D * eHY1odd
Definition: EdbViewMap.h:96
Int_t eNvh
read tree with alignment parameters here
Definition: EdbViewMap.h:76
TH2D * eHX0even
Definition: EdbViewMap.h:91
TH2D * eHX1even
Definition: EdbViewMap.h:95

◆ ~EdbViewMap()

EdbViewMap::~EdbViewMap ( )
virtual
39 {
40  if(eALcp) delete[] eALcp;
41 }

Member Function Documentation

◆ AddInverseAlign()

void EdbViewMap::AddInverseAlign ( )
207 {
208  for(int i=0; i<eNcp; i++)
209  {
210  AlignmentParView *v=eALcp[i];
211  AlignmentParView *vi = eALcp[i+eNcp] = new AlignmentParView(*v);
212  vi->view1 = v->view2;
213  vi->area1 = v->area2;
214  vi->side1 = v->side2;
215  vi->view2 = v->view1;
216  vi->area2 = v->area1;
217  vi->side2 = v->side1;
218  vi->dx = -v->dx;
219  vi->dy = -v->dy;
220  vi->dz = -v->dz;
221  }
222  eNcp *= 2;
223 }
Definition: EdbRun.h:32
Float_t dy
Definition: EdbRun.h:40
Int_t side1
Definition: EdbRun.h:37
Float_t dz
Definition: EdbRun.h:41
Float_t dx
Definition: EdbRun.h:39
Int_t view2
Definition: EdbRun.h:34
Int_t area2
Definition: EdbRun.h:36
Int_t side2
Definition: EdbRun.h:38
Int_t view1
Definition: EdbRun.h:33
Int_t area1
Definition: EdbRun.h:35

◆ CheckView() [1/2]

void EdbViewMap::CheckView ( AView v)
332 {
333  v->header->Print();
334  float corr = ViewCorrectability(*v);
335  printf("%d corrected: %d nalv= %d correctability: %f \n", v->header->GetViewID(), v->isCorrected, v->nalv, corr);
336 
337  for(int i=0; i<v->nalv; i++)
338  {
339  AlignmentParView *apv = v->alv[i]->apv;
340  if(apv->view1== v->header->GetViewID()|| apv->view2==v->header->GetViewID())
341  printf("%d %d %d\n",apv->view1,apv->view2,apv->nsg);
342  }
343 }
void Print() const
Definition: EdbView.cxx:749
Int_t GetViewID() const
Definition: EdbView.h:90
float ViewCorrectability(AView &v)
Definition: EdbViewMap.cxx:422
AlignmentParView * apv
Definition: EdbViewMap.h:33
AApv * alv[16]
Definition: EdbViewMap.h:42
bool isCorrected
Definition: EdbViewMap.h:43
int nalv
Definition: EdbViewMap.h:41
EdbViewHeader * header
Definition: EdbViewMap.h:40
Int_t nsg
Definition: EdbRun.h:46

◆ CheckView() [2/2]

void EdbViewMap::CheckView ( int  side,
int  area,
int  idview 
)
326 {
327  AView *v = eAR.side[side].area[area]->view[idview];
328  CheckView(v);
329 }
void CheckView(int side, int area, int idview)
Definition: EdbViewMap.cxx:325
ARun eAR
Definition: EdbViewMap.h:82
AView ** view
Definition: EdbViewMap.h:53
ASide side[2]
Definition: EdbViewMap.h:66
AArea ** area
Definition: EdbViewMap.h:59
Definition: EdbViewMap.h:39

◆ CheckViewFrameAlignQuality()

void EdbViewMap::CheckViewFrameAlignQuality ( const char *  file)
227 {
228  // tag view as bad if there are notaligned frames inside
229  TFile f(file);
230  TTree *t = (TTree*)(f.Get("FrameAlign"));
232  t->SetBranchAddress("frpar",&fr);
233  int n = t->GetEntries();
234  printf("%d entries in FrameAlign \n",n);
235  int view=-1, area=-1, side=-1;
236  int changeflag=0;
237  int flag=0;
238  for(int i=0; i<n; i++)
239  {
240  t->GetEntry(i);
241  if( fr.view != view || area != fr.area || side != fr.side) { // new view started here
242  if(changeflag>2) GetAView(side,area,view)->quality /= 100;
243  view = fr.view; area = fr.area; side = fr.side;
244  flag = 0;
245  changeflag=0;
246  }
247  if(fr.flag!=flag) { flag=fr.flag; changeflag++; }
248  }
249  if(changeflag>2) GetAView(side,area,view)->quality /= 100;
250 
251  f.Close();
252  Log(2,"EdbViewMap::CheckViewFrameAlignQuality","Read %d frame alignments",n);
253 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
FILE * f
Definition: RecDispMC.C:150
AView * GetAView(EdbViewHeader &h)
Definition: EdbViewMap.cxx:256
void t(const char *fin, const char *fout, int algorithm, const char *cut="1")
Definition: EdbViewMap.cxx:865
float quality
Definition: EdbViewMap.h:45
Definition: EdbRun.h:52
Int_t view
Definition: EdbRun.h:55
Int_t flag
Definition: EdbRun.h:70
Int_t side
Definition: EdbRun.h:57
Int_t area
Definition: EdbRun.h:56
TFile * file
Definition: write_pvr.C:3

◆ ConvertRun()

void EdbViewMap::ConvertRun ( const char *  fin,
const char *  fout 
)
550 {
551  EdbRun rin(fin);
552  EdbView *v = rin.GetView();
553  EdbRun rout(fout,"RECREATE");
554 
555  int n=rin.GetEntries();
556  printf("entries=%d\n",n);
557 
558  for(int i=0; i<n; i++)
559  {
560  rin.GetEntry(i,1,0,1,1,1);
561  //rin.GetEntry(i,1,0,0,0,0);
562 
563  EdbViewHeader *h = v->GetHeader();
564  AView *av=GetAView(*h);
565  if(av) {
566  EdbAffine2D a( av->aff );
567  h->SetAffine( a.A11(),a.A12(),a.A21(),a.A22(),a.B1(),a.B2() );
568  }
569  rout.AddView(v);
570  }
571 
572  if(eAHT) eAHT->Write();
573 
574  //FillAHTapv();
575  //if(eAHTapv) eAHTapv->Write();
576 
577  rout.Close();
578  //rin.Close();
579 }
void a()
Definition: check_aligned.C:59
Definition: EdbAffine.h:17
Definition: EdbRun.h:74
Definition: EdbView.h:26
void SetAffine(float a11, float a12, float a21, float a22, float b1, float b2)
Definition: EdbView.h:67
Definition: EdbView.h:134
EdbViewHeader * GetHeader() const
Definition: EdbView.h:163
EdbAffine2D aff
Definition: EdbViewMap.h:44

◆ CorrectCols()

void EdbViewMap::CorrectCols ( TTree &  tree)
721 {
722  tree.SetAlias("xm","(vc.eXview+vn.eXview)/2.");
723  tree.SetAlias("ym","(vc.eYview+vn.eYview)/2.");
724 
725  TCut cutx("cutx","flag!=0 && abs(vn.eXview-vc.eXview)<100");
726  TCut cuty("cuty","flag!=0 && abs(vn.eYview-vc.eYview)<100");
727 
728  tree.Draw( "dx:ym:xm>>hx0even(30,0,120000,20,0,100000)", "!(vn.eCol%2)&&side1==0" && cutx ,"prof colz");
729  tree.Draw( "dx:ym:xm>>hx0odd(30,0,120000,20,0,100000)", "(vn.eCol%2)&&side1==0" && cutx ,"prof colz");
730  tree.Draw( "dy:ym:xm>>hy0even(30,0,120000,20,0,100000)", "!(vn.eCol%2)&&side1==0" && cuty ,"prof colz");
731  tree.Draw( "dy:ym:xm>>hy0odd(30,0,120000,20,0,100000)", "(vn.eCol%2)&&side1==0" && cuty ,"prof colz");
732  tree.Draw( "dx:ym:xm>>hx1even(30,0,120000,20,0,100000)", "!(vn.eCol%2)&&side1==1" && cutx ,"prof colz");
733  tree.Draw( "dx:ym:xm>>hx1odd(30,0,120000,20,0,100000)", "(vn.eCol%2)&&side1==1" && cutx ,"prof colz");
734  tree.Draw( "dy:ym:xm>>hy1even(30,0,120000,20,0,100000)", "!(vn.eCol%2)&&side1==1" && cuty ,"prof colz");
735  tree.Draw( "dy:ym:xm>>hy1odd(30,0,120000,20,0,100000)", "(vn.eCol%2)&&side1==1" && cuty ,"prof colz");
736  eHX0odd = (TH2D*)((TH2D*)gDirectory->Get("hx0odd"))->Clone("X0odd"); // positive
737  eHX0even = (TH2D*)((TH2D*)gDirectory->Get("hx0even"))->Clone("X0even"); // negative
738  eHY0odd = (TH2D*)((TH2D*)gDirectory->Get("hy0odd"))->Clone("Y0odd"); // positive
739  eHY0even = (TH2D*)((TH2D*)gDirectory->Get("hy0even"))->Clone("Y0even"); // negative
740  eHX1odd = (TH2D*)((TH2D*)gDirectory->Get("hx1odd"))->Clone("X1odd"); // positive
741  eHX1even = (TH2D*)((TH2D*)gDirectory->Get("hx1even"))->Clone("X1even"); // negative
742  eHY1odd = (TH2D*)((TH2D*)gDirectory->Get("hy1odd"))->Clone("Y1odd"); // positive
743  eHY1even = (TH2D*)((TH2D*)gDirectory->Get("hy1even"))->Clone("Y1even"); // negative
744 }

◆ CorrectLines()

void EdbViewMap::CorrectLines ( TTree &  tree)
679 {
680  tree.SetAlias("xm","(vc.eXview+vn.eXview)/2.");
681  tree.SetAlias("ym","(vc.eYview+vn.eYview)/2.");
682 
683  TCut cutx("cutx","flag!=0 && abs(vn.eXview-vc.eXview)<100");
684  TCut cuty("cuty","flag!=0 && abs(vn.eYview-vc.eYview)<100");
685 
686  tree.Draw( "dx:ym:xm>>hx0even(30,0,120000,20,0,100000)", "!(vn.eRow%2)&&side1==0" && cutx ,"prof colz");
687  tree.Draw( "dx:ym:xm>>hx0odd(30,0,120000,20,0,100000)", "(vn.eRow%2)&&side1==0" && cutx ,"prof colz");
688  tree.Draw( "dy:ym:xm>>hy0even(30,0,120000,20,0,100000)", "!(vn.eRow%2)&&side1==0" && cuty ,"prof colz");
689  tree.Draw( "dy:ym:xm>>hy0odd(30,0,120000,20,0,100000)", "(vn.eRow%2)&&side1==0" && cuty ,"prof colz");
690  tree.Draw( "dx:ym:xm>>hx1even(30,0,120000,20,0,100000)", "!(vn.eRow%2)&&side1==1" && cutx ,"prof colz");
691  tree.Draw( "dx:ym:xm>>hx1odd(30,0,120000,20,0,100000)", "(vn.eRow%2)&&side1==1" && cutx ,"prof colz");
692  tree.Draw( "dy:ym:xm>>hy1even(30,0,120000,20,0,100000)", "!(vn.eRow%2)&&side1==1" && cuty ,"prof colz");
693  tree.Draw( "dy:ym:xm>>hy1odd(30,0,120000,20,0,100000)", "(vn.eRow%2)&&side1==1" && cuty ,"prof colz");
694  eHX0odd = (TH2D*)((TH2D*)gDirectory->Get("hx0odd"))->Clone("X0odd"); // positive
695  eHX0even = (TH2D*)((TH2D*)gDirectory->Get("hx0even"))->Clone("X0even"); // negative
696  eHY0odd = (TH2D*)((TH2D*)gDirectory->Get("hy0odd"))->Clone("Y0odd"); // positive
697  eHY0even = (TH2D*)((TH2D*)gDirectory->Get("hy0even"))->Clone("Y0even"); // negative
698  eHX1odd = (TH2D*)((TH2D*)gDirectory->Get("hx1odd"))->Clone("X1odd"); // positive
699  eHX1even = (TH2D*)((TH2D*)gDirectory->Get("hx1even"))->Clone("X1even"); // negative
700  eHY1odd = (TH2D*)((TH2D*)gDirectory->Get("hy1odd"))->Clone("Y1odd"); // positive
701  eHY1even = (TH2D*)((TH2D*)gDirectory->Get("hy1even"))->Clone("Y1even"); // negative
702 
703  /*
704  printf("eHXodd integral: %f eHXeven integral: %f \n",
705  eHXodd->Integral(),
706  eHXeven->Integral());
707  TH2D *hxdiff = (TH2D *)(eHXodd->Clone("hxdiff"));
708  hxdiff->Add(eHXeven, 1);
709  printf("hdiff integral: %f \n",hxdiff->Integral());
710  printf("eHYodd integral: %f eHYeven integral: %f \n",
711  eHYodd->Integral(),
712  eHYeven->Integral());
713  TH2D *hydiff = (TH2D *)(eHYodd->Clone("hydiff"));
714  hydiff->Add(eHYeven, 1);
715  printf("hydiff integral: %f \n",hydiff->Integral());
716  */
717 }

◆ CorrectToStage()

void EdbViewMap::CorrectToStage ( )
514 {
515  //for each area eliminate scaling&rotation in respect to the stage coord
516  for( int side=0; side<2; side++)
517  for( int area=0; area<eAR.side[side].narea; area++)
518  {
519  AArea *a= eAR.side[side].area[area];
520  TArrayF xst(a->nview);
521  TArrayF yst(a->nview);
522  TArrayF x(a->nview);
523  TArrayF y(a->nview);
524  int cnt=0;
525  for(int i=0; i<a->nview; i++)
526  {
527  AView *v = GetAView(side,area,i);
528  if(!v) continue;
529  if(!v->header) continue;
530  xst[cnt]= v->header->GetXview();
531  yst[cnt]= v->header->GetYview();
532  v->aff.ShiftX( xst[cnt] );
533  v->aff.ShiftY( yst[cnt] );
534  x[cnt] = v->aff.B1();
535  y[cnt] = v->aff.B2();
536  cnt++;
537  }
538  EdbAffine2D aff;
539  aff.Calculate(cnt,x.GetArray(),y.GetArray(),xst.GetArray(),yst.GetArray());
540  aff.Print();
541  for(int i=0; i<a->nview; i++)
542  {
543  if(GetAView(side,area,i)) GetAView(side,area,i)->aff.Transform(aff);
544  }
545  }
546 }
Float_t B2() const
Definition: EdbAffine.h:48
void Print(Option_t *opt="") const
Definition: EdbAffine.cxx:52
void ShiftX(float d)
Definition: EdbAffine.h:64
void ShiftY(float d)
Definition: EdbAffine.h:65
Int_t Calculate(EdbPointsBox2D *b1, EdbPointsBox2D *b2)
Definition: EdbAffine.cxx:260
Float_t B1() const
Definition: EdbAffine.h:47
void Transform(const EdbAffine2D *a)
Definition: EdbAffine.cxx:93
Float_t GetXview() const
Definition: EdbView.h:93
Float_t GetYview() const
Definition: EdbView.h:94
Definition: EdbViewMap.h:50
int narea
Definition: EdbViewMap.h:60

◆ DoCorrection()

void EdbViewMap::DoCorrection ( )
506 {
507  for( int iside=0; iside<2; iside++)
508  for( int iarea=0; iarea<eAR.side[iside].narea; iarea++)
509  DoCorrection1( *(eAR.side[iside].area[iarea]) );
510 }
void DoCorrection1(AArea &area)
Definition: EdbViewMap.cxx:489

◆ DoCorrection1()

void EdbViewMap::DoCorrection1 ( AArea area)
490 {
491  Log(3,"DoCorrection","area with %d views, alg=%d",area.nview,eAlgorithm);
492  for(int i=0; i<area.nview; i++)
493  {
494  AView *v = SelectBestNotCorrected(area);
495  if(v)
496  {
497  if ( eAlgorithm==0 ) DoCorrectionBestNeib(*v);
498  else if( eAlgorithm==1 ) DoCorrectionAllNeib(*v);
499  }
500  }
501  Log(3,"DoCorrection","ok");
502 }
void DoCorrectionAllNeib(AView &v)
Definition: EdbViewMap.cxx:379
AView * SelectBestNotCorrected(AArea &area)
Definition: EdbViewMap.cxx:468
void DoCorrectionBestNeib(AView &v)
Definition: EdbViewMap.cxx:346
int nview
Definition: EdbViewMap.h:52

◆ DoCorrectionAllNeib()

void EdbViewMap::DoCorrectionAllNeib ( AView v)
380 {
381  // allNeigbours algorithm
382  // convention for apv: view1+offset => view2
383 
384  // TODO: insert sigma approach
385 
386  int ncorr=0;
387  EdbAffine2D aff[10]; // corrections obtained from different neighbours
388  float weight[10];
389  for( int inb=0; inb < v.nalv; inb++ )
390  {
391  AApv *apv = v.alv[inb];
392  AView *vc=GetAView( apv->apv->side2, apv->apv->area2, apv->apv->view2);
393  if(!vc) continue;
394  if(vc->isCorrected)
395  {
396  aff[ncorr].Set( vc->aff );
397  aff[ncorr].ShiftX(apv->apv->dx);
398  aff[ncorr].ShiftY(apv->apv->dy);
399  weight[ncorr] = Quality(*apv);
400  //printf("%5d %5d %9.1f ",apv->apv->view1, apv->apv->view2, weight[ncorr]); aff[ncorr].Print();
401  FillAHT( apv->apv, v.header, vc->header, &(aff[ncorr]), weight[ncorr], eAHT, "AHT" );
402  ncorr++;
403  }
404  }
405 
406  float xmean=0, ymean=0;
407  float wmean=0;
408  for( int i=0; i < ncorr; i++ )
409  {
410  xmean += aff[i].B1()*weight[i];
411  ymean += aff[i].B2()*weight[i];
412  wmean += weight[i];
413  }
414  xmean /= wmean;
415  ymean /= wmean;
416  v.aff.ShiftX(xmean);
417  v.aff.ShiftY(ymean);
418  v.isCorrected=true;
419 }
void Set(EdbAffine2D &a)
Definition: EdbAffine.h:36
float Quality(AApv &apv)
Definition: EdbViewMap.cxx:304
void FillAHT(AlignmentParView *apv, EdbViewHeader *vn, EdbViewHeader *vc, EdbAffine2D *aff, float w, TTree *&aht, const char *name)
Definition: EdbViewMap.cxx:607
Definition: EdbViewMap.h:32

◆ DoCorrectionBestNeib()

void EdbViewMap::DoCorrectionBestNeib ( AView v)
347 {
348  // bestNeigbours algorithm
349  // convention for apv: view1+offset => view2
350  Log(3,"DoCorrectionBestNeib","%d alv",v.nalv);
351  AView *vcbest=0;
352  AApv *apv0=0;
353  float wmax=0;
354  for( int inb=0; inb < v.nalv; inb++ )
355  {
356  AApv *apv = v.alv[inb];
357  AView *vc=GetAView( apv->apv->side2, apv->apv->area2, apv->apv->view2);
358  //printf("i=%d\n",inb);
359  if(!vc) continue;
360  if(vc->isCorrected)
361  {
362  float w=Quality(*apv);
363  //printf("w=%f\n",w);
364  if( w > wmax) { wmax=w; vcbest=vc; apv0=apv;}
365  }
366  }
367  if(vcbest&&apv0) {
368  v.aff.Transform( vcbest->aff );
369 
370  Transform( v, *(apv0->apv) );
371  //printf( "%d %d %d ", apv0->apv->side1, apv0->apv->area1, v.header->GetViewID()); v.aff.Print();
372  float w=Quality(*apv0);
373  v.isCorrected=true;
374  FillAHT( apv0->apv, v.header, vcbest->header, &(v.aff), w, eAHT, "AHT" );
375  }
376 }
void Transform(AView &v, const AlignmentParView &apv)
Definition: EdbViewMap.cxx:318
void w(int rid=2, int nviews=2)
Definition: test.C:27

◆ FillAHT()

void EdbViewMap::FillAHT ( AlignmentParView apv,
EdbViewHeader vn,
EdbViewHeader vc,
EdbAffine2D aff,
float  w,
TTree *&  aht,
const char *  name 
)
608 {
609  if(!aht) {
610  aht=new TTree( name , "Aligned Headers");
611  aht->Branch("alpar",apv,"view1/I:view2/I:area1/I:area2/I:side1/I:side2/I:dx/F:dy/F:dz/F:n1tot/I:n2tot/I:n1/I:n2/I:nsg/I:nbg/I:flag/I");
612  aht->Branch("vn",vn);
613  aht->Branch("vc",vc);
614  aht->Branch("aff",aff);
615  aht->Branch("w",&w,"w/F");
616  } else {
617  aht->SetBranchAddress("alpar",&(apv->view1) );
618  aht->SetBranchAddress("vn",&vn);
619  aht->SetBranchAddress("vc",&vc);
620  aht->SetBranchAddress("aff",&aff);
621  aht->SetBranchAddress("w",&w);
622  }
623  aht->Fill();
624 }
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24

◆ FillALcp()

void EdbViewMap::FillALcp ( )
270 {
271  for(int i=0; i<eNcp; i++) {
272  AlignmentParView *apv = eALcp[i];
273  if(!apv) continue;
274  AView *v1 = GetAView( apv->side1, apv->area1, apv->view1 );
275  if(!v1) continue;
276  AView *v2 = GetAView( apv->side2, apv->area2, apv->view2 );
277  if(!v2) continue;
278 
279  float quality=1;
280  if( IsBug0(*v1,*v2) ) continue;
281  //printf("%d %d %d - %d %d %d\n",apv->side1, apv->area1, apv->view1, apv->side2, apv->area2, apv->view2);
282 
283  if(v1) {
284  if(v1->nalv>15) { Log(1,"EdbViewMap::FillALcp","ERROR: nalv out of limits: %d",v1->nalv); continue;}
285  v1->alv[v1->nalv] = new AApv;
286  v1->alv[v1->nalv]->apv = apv;
287  v1->alv[v1->nalv]->quality=quality;
288  v1->nalv++;
289  }
290  /*
291  if(v2) {
292  if(v2->nalv>15) { Log(1,"EdbViewMap::FillALcp","ERROR: nalv out of limits: %d",v2->nalv); continue;}
293  v2->alv[v2->nalv] = new AApv;
294  v2->alv[v2->nalv]->apv = apv;
295  v2->alv[v2->nalv]->quality=quality;
296  v2->nalv++;
297  }
298  */
299  }
300  Log(3,"FillALcp","filled with %d cp",eNcp);
301 }
bool IsBug0(AView &v1, AView &v2)
Definition: EdbViewMap.cxx:177
float quality
Definition: EdbViewMap.h:34

◆ FillAR()

void EdbViewMap::FillAR ( )
92 {
93  for(int i=0; i<eNvh; i++)
94  {
95  EdbViewHeader *vh = GetHeader(i);
96  int side=ViewSide(*vh);
97  int area=vh->GetAreaID();
98  int view = vh->GetViewID();
99  //printf("%d %d (%d) %d (%d)\n",side,area, eAR.side[side].narea ,view, eAR.side[side].area[area]->nview );
100  eAR.side[side].area[area]->view[view]->header=vh;
101  if( view > eAR.side[side].area[area]->ilast) eAR.side[side].area[area]->ilast=view;
102  }
103  Log(2,"EdbViewMap::FillARun","with %d headers",eNvh );
104 
105  for(int i=0; i<eNpvh; i++) //pinned
106  {
107  EdbViewHeader *vh = GetPinHeader(i);
108  int side=ViewSide(*vh);
109  int area=vh->GetAreaID();
110  int oldid = vh->GetViewID();
111  int newid = (eAR.side[side].area[area]->ilast++);
112  printf("oldid %d newid %d\n",oldid,newid);
113  eAR.side[side].area[area]->view[newid]->header=vh;
114  eAR.side[side].area[area]->view[ newid ]->isCorrected=true;
115  eAR.side[side].area[area]->view[ newid ]->quality=1;
116  vh->SetViewID(newid); // update header with new id
117  for(int ia=0; ia<eNcp; ia++)
118  {
119  AlignmentParView *apv = eALcp[ia];
120  if( apv->side1==side && apv->area1==area )
121  {
122  if( apv->view1==oldid) apv->view1=newid; // update APV vith newid
123  if( apv->view2==oldid) apv->view2=newid;
124  }
125  }
126  }
127  Log(2,"EdbViewMap::FillARun","with %d pinned headers",eNpvh );
128 }
void SetViewID(int id)
Definition: EdbView.h:99
Int_t GetAreaID() const
Definition: EdbView.h:91
int ViewSide(const EdbViewHeader &vh) const
Definition: EdbViewMap.h:114
EdbViewHeader * GetPinHeader(int i)
Definition: EdbViewMap.h:113
EdbViewHeader * GetHeader(int i)
Definition: EdbViewMap.h:112
Int_t eNpvh
Definition: EdbViewMap.h:79
int ilast
Definition: EdbViewMap.h:51

◆ GetAArea()

AArea* EdbViewMap::GetAArea ( int  side,
int  area 
)
inline
120 { return eAR.side[side].area[area]; }

◆ GetAView() [1/2]

AView * EdbViewMap::GetAView ( EdbViewHeader h)
257 {
258  return GetAView( ViewSide(h), h.GetAreaID(), h.GetViewID() );
259 }

◆ GetAView() [2/2]

AView * EdbViewMap::GetAView ( int  side,
int  area,
int  view 
)
261 {
262  if( side<0||side>1) return 0;
263  if( area<0||area>=eAR.side[side].narea) return 0;
264  if( view<0||view>=eAR.side[side].area[area]->nview) return 0;
265  return eAR.side[side].area[area]->view[view];
266 }

◆ GetHeader()

EdbViewHeader* EdbViewMap::GetHeader ( int  i)
inline
112 { return (EdbViewHeader*)(eViewHeaders.At(i)); }
TObjArray eViewHeaders
Definition: EdbViewMap.h:77

◆ GetPinHeader()

EdbViewHeader* EdbViewMap::GetPinHeader ( int  i)
inline
113 { return (EdbViewHeader*)(ePinViewHeaders.At(i)); }
TObjArray ePinViewHeaders
Definition: EdbViewMap.h:80

◆ GetViewHeader()

EdbViewHeader * EdbViewMap::GetViewHeader ( AlignmentParView apv,
int  fs 
)
628 {
629  EdbViewHeader *h=0;
630  int side=-1;
631  int vid =-1;
632  int area = -1;
633  if(fs==1) {
634  side = apv.side1;
635  area = apv.area1;
636  vid = apv.view1;
637  } else if(fs==2) {
638  side = apv.side2;
639  area = apv.area2;
640  vid = apv.view2;
641  }
642  else return h;
643 
644  for(int i=0; i<eNvh; i++)
645  {
646  h = GetHeader(i);
647  if(ViewSide(*h) == side)
648  if( h->GetViewID()==vid )
649  if(h->GetAreaID()==area)
650  return h;
651  }
652  return 0;
653 }

◆ InitAR()

void EdbViewMap::InitAR ( )
45 {
46  int narea=0;
47  for(int i=0; i<eNvh; i++)
48  {
49  EdbViewHeader *vh = GetHeader(i);
50  if( vh) if(vh->GetAreaID()>narea) narea=vh->GetAreaID();
51  }
52  narea++;
53  for(int iside=0; iside<2; iside++) {
54  eAR.side[iside].narea = narea;
55  eAR.side[iside].area = new AArea*[narea];
56  for(int iarea=0; iarea<narea; iarea++) {
57  eAR.side[iside].area[iarea] = new AArea;
58  eAR.side[iside].area[iarea]->nview=0;
59  //eAR.side[iside].area[iarea]->nalv=0;
60  }
61  }
62  printf("%d areas\n", narea);
63 
64  for(int i=0; i<eNvh; i++)
65  {
66  EdbViewHeader *vh = GetHeader(i);
67  //eAR.side[ViewSide(*vh)].area[vh->GetAreaID()]->nview++;
68  if( eAR.side[ViewSide(*vh)].area[vh->GetAreaID()]->nview < vh->GetViewID())
69  eAR.side[ViewSide(*vh)].area[vh->GetAreaID()]->nview = vh->GetViewID();
70  }
71 
72  for(int iside=0; iside<2; iside++)
73  for(int iarea=0; iarea<narea; iarea++)
74  {
75  eAR.side[iside].area[iarea]->nview += (eNpvh +1); // keep space for pinned views at the end of the buffer
76  eAR.side[iside].area[iarea]->ilast = 0;
77  printf( "%d %d %d\n", iside, iarea, eAR.side[iside].area[iarea]->nview );
78  eAR.side[iside].area[iarea]->view = new AView*[eAR.side[iside].area[iarea]->nview];
79  for( int iv=0; iv<eAR.side[iside].area[iarea]->nview; iv++ )
80  {
81  AView *v = eAR.side[iside].area[iarea]->view[iv] = new AView;
82  v->header=0;
83  v->quality=1;
84  v->nalv=0;
85  v->isCorrected=0;
86  }
87  }
88 }

◆ IsApplied() [1/2]

static bool EdbViewMap::IsApplied ( const AlignmentParFrame apf)
inlinestatic
147 {return test_ith_bit(0,apf.flag);}
bool test_ith_bit(int i_, int flags_)
Definition: EdbViewMap.h:25

◆ IsApplied() [2/2]

static bool EdbViewMap::IsApplied ( const AlignmentParView apv)
inlinestatic
151 {return test_ith_bit(0,apv.flag);}
Int_t flag
Definition: EdbRun.h:48

◆ IsBug0()

bool EdbViewMap::IsBug0 ( AView v1,
AView v2 
)
178 {
179  // protection for bug in LASSO 11/06/2015
180  if( Abs( v1.header->GetXview() - v2.header->GetXview()) > 1000. ||
181  Abs( v1.header->GetYview() - v2.header->GetYview()) > 1000. ) return 1;
182  return 0;
183 }

◆ IsFound() [1/2]

static bool EdbViewMap::IsFound ( const AlignmentParFrame apf)
inlinestatic
148 {return test_ith_bit(1,apf.flag);}

◆ IsFound() [2/2]

static bool EdbViewMap::IsFound ( const AlignmentParView apv)
inlinestatic
153 {return test_ith_bit(2,apv.flag);}

◆ IsPin()

static bool EdbViewMap::IsPin ( const AlignmentParView apv)
inlinestatic
152 {return test_ith_bit(1,apv.flag);}

◆ IsRecovered()

static bool EdbViewMap::IsRecovered ( const AlignmentParFrame apf)
inlinestatic
149 {return test_ith_bit(2,apf.flag);}

◆ MakeAHTnocorr()

void EdbViewMap::MakeAHTnocorr ( )
657 {
658  TTree *tree=0;
659  EdbAffine2D *aff = new EdbAffine2D();
660  for(int i=0; i<eNcp; i++)
661  {
662  AlignmentParView *apv=eALcp[i];
663  EdbViewHeader *v1 = GetViewHeader(*apv,1);
664  EdbViewHeader *v2 = GetViewHeader(*apv,2);
665  if(v1&&v2) FillAHT(apv, v1, v2, aff, 0, tree, "AHTnocorr");
666  }
667 
668  if (eAlgorithm==2) CorrectLines( *tree );
669  else if(eAlgorithm==3) CorrectCols( *tree );
670 
671  TFile rout( "aht.root","RECREATE" );
672  tree->Write();
673  rout.Close();
674 
675 }
EdbViewHeader * GetViewHeader(AlignmentParView &apv, int fs)
Definition: EdbViewMap.cxx:627
void CorrectLines(TTree &tree)
Definition: EdbViewMap.cxx:678
void CorrectCols(TTree &tree)
Definition: EdbViewMap.cxx:720

◆ PinPoint()

int EdbViewMap::PinPoint ( int  pinviewid)
inline
127 {return (-1000-pinviewid)/2; }

◆ PinViewID()

int EdbViewMap::PinViewID ( int  pinpoint,
int  side 
)
inline
126 {return -(1000+2*pinpoint+side); }

◆ Quality()

float EdbViewMap::Quality ( AApv apv)
305 {// the bigger the better
306 
307  float q = 0;
308  if(apv.apv->view1>=0&&apv.apv->view2>=0)
309  {
310  AView *v1 = GetAView( apv.apv->side1, apv.apv->area1, apv.apv->view1 );
311  AView *v2 = GetAView( apv.apv->side2, apv.apv->area2, apv.apv->view2 );
312  if(v1&&v2) q = apv.apv->nsg * apv.quality * v1->quality * v2->quality;
313  }
314  return q;
315 }
q
Definition: testBGReduction_AllMethods.C:55

◆ ReadPinViewsHeaders()

void EdbViewMap::ReadPinViewsHeaders ( const char *  file)
158 {
159  EdbRun r(file);
160  TTree *t = r.GetPinViews();
161  if(t) {
162  EdbViewHeader *h=new EdbViewHeader();
163  t->SetBranchAddress("headers",&h);
164  int n = t->GetEntries();
165  for(int i=0; i<n; i++)
166  {
167  t->GetEntry(i);
168  if(h) ePinViewHeaders.Add( new EdbViewHeader( *h ) );
169  }
170  eNpvh = n;
171  }
172  r.Close();
173  Log(2,"EdbViewMap::ReadPinViewsHeaders","Read %d headers",eNpvh);
174 }
void r(int rid=2)
Definition: test.C:201

◆ ReadViewAlign()

void EdbViewMap::ReadViewAlign ( const char *  file)
187 {
188  eNcp=0;
189  TFile f(file);
190  TTree *t = (TTree*)(f.Get("ViewAlign"));
192  t->SetBranchAddress("alpar",&v);
193  int n = t->GetEntries();
194  eALcp = new AlignmentParView*[2*n]; // doubled space for inverse align
195  for(int i=0; i<n; i++)
196  {
197  t->GetEntry(i);
198  eALcp[i] = new AlignmentParView(v);
199  //eNcp++;
200  }
201  eNcp=n;
202  f.Close();
203  Log(2,"EdbViewMap::ReadViewAlign","Read %d aligned views couples",eNcp);
204 }

◆ ReadViewsHeaders()

void EdbViewMap::ReadViewsHeaders ( const char *  file,
TCut &  cut 
)
132 {
133  // read headers from runfile, fill eViewHeaders
134  EdbRun r(file);
135  EdbView *view = r.GetView();
136  r.GetTree()->Draw(">>lst", cut );
137  TEventList *lst = (TEventList*)(gDirectory->GetList()->FindObject("lst"));
138  if(!lst) {Log(1,"EdbViewMap::ReadViewsHeaders","ERROR!: events list (lst) did not found!"); return;}
139  int n = lst->GetN();
140  for(int i=0; i<n; i++)
141  {
142  view = r.GetEntry(lst->GetEntry(i),1,0,0,0);
143  if(view) {
144  EdbViewHeader *h = view->GetHeader();
145  if(h) {
146  h->SetStatus(lst->GetEntry(i)); // keep the entry number in status
147  eViewHeaders.Add( new EdbViewHeader( *h ) );
148  }
149  }
150  }
151  eNvh = n;
152  r.Close();
153  Log(2,"EdbViewMap::ReadViewsHeaders","Read %d headers",eNvh);
154 }
TCut cut
Definition: check_shower.C:6
void SetStatus(int st)
Definition: EdbView.h:106

◆ SaveColsCorrToRun()

void EdbViewMap::SaveColsCorrToRun ( const char *  fin)
807 {
808  EdbRun rin(fin);
809  EdbView *v = rin.GetView();
810  int n=rin.GetEntries();
811  printf("entries=%d\n",n);
812  TObjArray viewcorr(n);
813 
814  for(int i=0; i<n; i++)
815  {
816  rin.GetEntry(i,1,0,0,0,0);
817  EdbViewHeader *h = v->GetHeader();
818  float x = h->GetXview();
819  float y = h->GetYview();
820  EdbAffine2D *aff = new EdbAffine2D(*h->GetAffine());
821 
822  if(h->GetCol()%2) //odd
823  {
824  if(ViewSide(*h)) {
825  aff->ShiftX( 0.5*eHX1odd->Interpolate(x,y) );
826  aff->ShiftY( -0.5*eHY1odd->Interpolate(x,y) );
827  }
828  else {
829  aff->ShiftX( 0.5*eHX0odd->Interpolate(x,y) );
830  aff->ShiftY( -0.5*eHY0odd->Interpolate(x,y) );
831  }
832  }
833  else if(!(h->GetCol()%2)) //even
834  {
835  if(ViewSide(*h)) {
836  aff->ShiftX( 0.5*eHX1even->Interpolate(x,y) );
837  aff->ShiftY( -0.5*eHY1even->Interpolate(x,y) );
838  }
839  else {
840  aff->ShiftX( 0.5*eHX0even->Interpolate(x,y) );
841  aff->ShiftY( -0.5*eHY0even->Interpolate(x,y) );
842  }
843  }
844  viewcorr.Add( new EdbAffine2D(*aff) );
845  }
846  int k = strlen(fin);
847  TString s(fin,k-4); s+="va.root";
848  TFile rout( s.Data(),"RECREATE" );
849 
850  viewcorr.Write("viewcorr",1);
851  if(eAHT) eAHT->Write();
852  eHX0odd->Write();
853  eHY0odd->Write();
854  eHX0even->Write();
855  eHY0even->Write();
856  eHX1odd->Write();
857  eHY1odd->Write();
858  eHX1even->Write();
859  eHY1even->Write();
860  rout.Close();
861  //rin.Close();
862 }
Int_t GetCol() const
Definition: EdbView.h:123
EdbAffine2D const * GetAffine() const
Definition: EdbView.h:72
EdbSegP * s
Definition: tlg2pattern.C:32

◆ SaveCorrToRun()

void EdbViewMap::SaveCorrToRun ( const char *  fin)
583 {
584  EdbRun rin(fin);
585  EdbView *v = rin.GetView();
586  int n=rin.GetEntries();
587  printf("entries=%d\n",n);
588  TObjArray viewcorr(n);
589 
590  for(int i=0; i<n; i++)
591  {
592  rin.GetEntry(i,1,0,0,0,0);
593  EdbViewHeader *h = v->GetHeader();
594  viewcorr.Add( new EdbAffine2D(GetAView(*h)->aff) );
595  }
596  int k = strlen(fin);
597  TString s(fin,k-4); s+="va.root";
598  TFile rout( s.Data(),"RECREATE" );
599 
600  viewcorr.Write("viewcorr",1);
601  if(eAHT) eAHT->Write();
602  rout.Close();
603  //rin.Close();
604 }

◆ SaveLinesCorrToRun()

void EdbViewMap::SaveLinesCorrToRun ( const char *  fin)
748 {
749  EdbRun rin(fin);
750  EdbView *v = rin.GetView();
751  int n=rin.GetEntries();
752  printf("entries=%d\n",n);
753  TObjArray viewcorr(n);
754 
755  for(int i=0; i<n; i++)
756  {
757  rin.GetEntry(i,1,0,0,0,0);
758  EdbViewHeader *h = v->GetHeader();
759  float x = h->GetXview();
760  float y = h->GetYview();
761  EdbAffine2D *aff = new EdbAffine2D(*h->GetAffine());
762 
763  if(h->GetRow()%2) //odd
764  {
765  if(ViewSide(*h)) {
766  aff->ShiftX( 0.5*eHX1odd->Interpolate(x,y) );
767  aff->ShiftY( -0.5*eHY1odd->Interpolate(x,y) );
768  }
769  else {
770  aff->ShiftX( 0.5*eHX0odd->Interpolate(x,y) );
771  aff->ShiftY( -0.5*eHY0odd->Interpolate(x,y) );
772  }
773  }
774  else if(!(h->GetRow()%2)) //even
775  {
776  if(ViewSide(*h)) {
777  aff->ShiftX( 0.5*eHX1even->Interpolate(x,y) );
778  aff->ShiftY( -0.5*eHY1even->Interpolate(x,y) );
779  }
780  else {
781  aff->ShiftX( 0.5*eHX0even->Interpolate(x,y) );
782  aff->ShiftY( -0.5*eHY0even->Interpolate(x,y) );
783  }
784  }
785  viewcorr.Add( new EdbAffine2D(*aff) );
786  }
787  int k = strlen(fin);
788  TString s(fin,k-4); s+="va.root";
789  TFile rout( s.Data(),"RECREATE" );
790 
791  viewcorr.Write("viewcorr",1);
792  if(eAHT) eAHT->Write();
793  eHX0odd->Write();
794  eHY0odd->Write();
795  eHX0even->Write();
796  eHY0even->Write();
797  eHX1odd->Write();
798  eHY1odd->Write();
799  eHX1even->Write();
800  eHY1even->Write();
801  rout.Close();
802  //rin.Close();
803 }
Int_t GetRow() const
Definition: EdbView.h:124

◆ SelectBestNotCorrected()

AView * EdbViewMap::SelectBestNotCorrected ( AArea area)
469 {
470  AView *vbest=0;
471  float maxcorr=0;
472  for(int i=0; i<area.nview; i++)
473  {
474  AView *v=area.view[i];
475  if(!v) Log(1,"EdbViewMap::SelectBestNotCorrected","ERROR; zero pointer");
476  float corr = ViewCorrectability(*v);
477  if( corr > maxcorr)
478  {
479  //printf("%d nalv=%d correatability=%f\n",i, v->nalv, corr);
480  vbest=v;
481  maxcorr = corr;
482  }
483 
484  }
485  return vbest;
486 }

◆ t()

void EdbViewMap::t ( const char *  fin,
const char *  fout,
int  algorithm,
const char *  cut = "1" 
)
866 {
867  TCut cut("cut",c);
868  EdbViewMap vm;
869  vm.ReadViewsHeaders(fin, cut); // read headers from runfile, fill eViewHeaders
870  vm.ReadPinViewsHeaders(fin); // read headers from runfile, fill ePinViewHeaders
871  vm.ReadViewAlign(fin); // read ViewAlign from runfile, fill eALcp
872  vm.eAlgorithm=algorithm;
873 
874  if(algorithm==2) {
875  vm.MakeAHTnocorr(); // create tree with alignment parameters and views headers
876  vm.SaveLinesCorrToRun(fin); // correct hysteresis only
877  }
878  else if(algorithm==3) {
879  vm.MakeAHTnocorr(); // create tree with alignment parameters and views headers
880  vm.SaveColsCorrToRun(fin); // correct hysteresis only (colomns)
881  }
882  else {
883  vm.AddInverseAlign();
884 
885  vm.InitAR(); // init eAR structure
886  vm.FillAR(); // fill eAR structure (assumed that view entry==h.GetViewID())
888 
889  vm.FillALcp(); //fill neighbouring
890  //vm.CheckView(0,0,225);
891  //vm.CheckView(0,0,112);
892 
893  vm.DoCorrection();
894  vm.CorrectToStage();
895  //vm.ConvertRun(fin,fout);
896  vm.SaveCorrToRun(fin);
897  }
898 }
Definition: EdbViewMap.h:70
void MakeAHTnocorr()
Definition: EdbViewMap.cxx:656
void DoCorrection()
Definition: EdbViewMap.cxx:505
void ReadViewsHeaders(const char *file, TCut &cut)
Definition: EdbViewMap.cxx:131
void FillALcp()
Definition: EdbViewMap.cxx:269
void CorrectToStage()
Definition: EdbViewMap.cxx:513
void SaveCorrToRun(const char *fin)
Definition: EdbViewMap.cxx:582
void CheckViewFrameAlignQuality(const char *file)
Definition: EdbViewMap.cxx:226
void ReadPinViewsHeaders(const char *file)
Definition: EdbViewMap.cxx:157
void InitAR()
Definition: EdbViewMap.cxx:44
void SaveLinesCorrToRun(const char *fin)
Definition: EdbViewMap.cxx:747
void AddInverseAlign()
Definition: EdbViewMap.cxx:206
void SaveColsCorrToRun(const char *fin)
Definition: EdbViewMap.cxx:806
void FillAR()
Definition: EdbViewMap.cxx:91
void ReadViewAlign(const char *file)
Definition: EdbViewMap.cxx:186

◆ Transform()

void EdbViewMap::Transform ( AView v,
const AlignmentParView apv 
)
319 {
320  v.aff.ShiftX(apv.dx);
321  v.aff.ShiftY(apv.dy);
322 }

◆ ViewCorrectability()

float EdbViewMap::ViewCorrectability ( AView v)
423 {
424  if (eAlgorithm==0) return ViewCorrectability1(v);
425  else if(eAlgorithm==1) return ViewCorrectabilityAll(v);
426  return 0;
427 }
float ViewCorrectability1(AView &v)
Definition: EdbViewMap.cxx:430
float ViewCorrectabilityAll(AView &v)
Definition: EdbViewMap.cxx:449

◆ ViewCorrectability1()

float EdbViewMap::ViewCorrectability1 ( AView v)
431 {
432  float correctability=0;
433  if(!v.isCorrected)
434  {
435  for(int ia=0; ia<v.nalv; ia++ )
436  {
437  AApv *apv=v.alv[ia];
438  if(!apv) Log(1,"EdbViewMap::ViewCorrectability1","ERROR! apv = zero pointer");
439  if(apv->apv->view2<0) continue;
440  AView *v = GetAView( apv->apv->side2, apv->apv->area2, apv->apv->view2);
441  if(!v) { Log(1,"EdbViewMap::ViewCorrectability","ERROR! v(%d,%d,%d) = zero pointer",apv->apv->side2, apv->apv->area2, apv->apv->view2); continue;}
442  if( v->isCorrected ) if(Quality(*apv)>correctability) correctability=Quality(*apv);
443  }
444  }
445  return correctability;
446 }

◆ ViewCorrectabilityAll()

float EdbViewMap::ViewCorrectabilityAll ( AView v)
450 {
451  float correctability=0;
452  if(!v.isCorrected)
453  {
454  for(int ia=0; ia<v.nalv; ia++ )
455  {
456  AApv *apv=v.alv[ia];
457  if(!apv) Log(1,"EdbViewMap::ViewCorrectabilityAll","ERROR! apv = zero pointer");
458  if(apv->apv->view2<0) continue;
459  AView *v = GetAView( apv->apv->side2, apv->apv->area2, apv->apv->view2);
460  if(!v) { Log(1,"EdbViewMap::ViewCorrectability","ERROR! v(%d,%d,%d) = zero pointer",apv->apv->side2, apv->apv->area2, apv->apv->view2); continue;}
461  if( v->isCorrected ) correctability+=Quality(*apv);
462  }
463  }
464  return correctability;
465 }

◆ ViewSide()

int EdbViewMap::ViewSide ( const EdbViewHeader vh) const
inline
114 { return vh.GetNframesTop()==0?0:1; }
Int_t GetNframesTop() const
Definition: EdbView.h:120

Member Data Documentation

◆ eAHT

TTree* EdbViewMap::eAHT

◆ eALcp

AlignmentParView** EdbViewMap::eALcp

◆ eAlgorithm

Int_t EdbViewMap::eAlgorithm

◆ eAR

ARun EdbViewMap::eAR

◆ eHX0even

TH2D* EdbViewMap::eHX0even

◆ eHX0odd

TH2D* EdbViewMap::eHX0odd

◆ eHX1even

TH2D* EdbViewMap::eHX1even

◆ eHX1odd

TH2D* EdbViewMap::eHX1odd

◆ eHY0even

TH2D* EdbViewMap::eHY0even

◆ eHY0odd

TH2D* EdbViewMap::eHY0odd

◆ eHY1even

TH2D* EdbViewMap::eHY1even

◆ eHY1odd

TH2D* EdbViewMap::eHY1odd

◆ eNcp

Int_t EdbViewMap::eNcp

◆ eNpvh

Int_t EdbViewMap::eNpvh

◆ eNvh

Int_t EdbViewMap::eNvh

read tree with alignment parameters here

◆ ePinPointID

Int_t EdbViewMap::ePinPointID

◆ ePinViewHeaders

TObjArray EdbViewMap::ePinViewHeaders

◆ eViewHeaders

TObjArray EdbViewMap::eViewHeaders

The documentation for this class was generated from the following files: