FEDRA emulsion software from the OPERA Collaboration
EdbRunAccess Class Reference

#include <EdbRunAccess.h>

Inheritance diagram for EdbRunAccess:
Collaboration diagram for EdbRunAccess:

Public Member Functions

bool AcceptRawSegment (EdbView *view, int ud, EdbSegP &segP, int side, int entry)
 
bool AddRWDToRun (char *rwdname, const char *options="")
 
void AddSegmentCut (int ud, int xi, float min[5], float max[5])
 
void AddSegmentCut (int ud, int xi, float var[10])
 
void AddSegmentCut (int xi, const char *cutline)
 
void ApplyCorrections (const EdbView &view, EdbSegment &s, const int rs)
 
void ApplyImageMatrixCorr (int side, float &x, float &y)
 
float CalculateSegmentChi2 (EdbSegment *seg, float sx, float sy, float sz)
 
int Check0Views (EdbPattern &pat, int thres=1)
 
int CheckEmptyViews (EdbPattern &pat)
 
float CheckMeanSegsPerView (EdbPattern &pat)
 
void CheckRunLine ()
 
TH2F * CheckUpDownOffsets ()
 
void CheckViewSize ()
 
void CheckViewStep ()
 
void CheckViewStep (int ud)
 
void ClearCuts ()
 
bool CopyRawDataXY (float x0, float y0, float dR, const char *file)
 
 EdbRunAccess ()
 
 EdbRunAccess (const char *fname)
 
 EdbRunAccess (EdbRun *run)
 
void FillDZMaps ()
 
int FillVP ()
 
int FirstArea () const
 
EdbScanCond * GetCond (int ud)
 
EdbSegmentCut * GetCut (int ud, int i)
 
float GetCutGR () const
 
int GetEntryXY (int ud, float x, float y)
 
EdbLayer * GetLayer (int id)
 
EdbScanCond * GetMakeCond (int ud)
 
EdbLayer * GetMakeLayer (int id)
 
Int_t GetNareas ()
 
Int_t GetNviewsPerArea ()
 
int GetPatternData (EdbPattern &pat, int side, int nviews, TArrayI &srt, int &nrej)
 
int GetPatternDataForPrediction (int id, int side, EdbPattern &pat)
 
int GetPatternView (EdbPattern &pat, int side, int entry, int &nrej)
 
int GetPatternXY (EdbSegP &s, int side, EdbPattern &pat, float rmin=200)
 
int GetPatternXYcut (EdbSegP &s, int side, EdbPattern &pat, float dr, float dt)
 
EdbSegment * GetRawSegment (EdbView &v, int sid, int rs=0)
 
EdbSegment * GetRawSegment (int vid, int sid, int rs=0)
 
EdbSegment * GetRawSegmentN (int vid, int sid, int rs=0)
 
float GetRawSegmentPix (EdbSegment *seg)
 
EdbRun * GetRun () const
 
float GetScoreA () const
 
float GetScoreB () const
 
int GetViewsArea (int ud, TArrayI &entr, float xmin, float xmax, float ymin, float ymax)
 
int GetViewsArea (int ud, TArrayI &entr, int area, float &xmin, float &xmax, float &ymin, float &ymax)
 
int GetViewsAreaMarg (int ud, TArrayI &entr, int area, float xmarg, float ymarg)
 
int GetViewsXY (int ud, TArrayI &entr, float x, float y, float r=200.)
 
int GetVolumeArea (EdbPatternsVolume &vol, int area)
 
int GetVolumeData (EdbPatternsVolume &vol, int nviews, TArrayI &srt, int &nrej)
 
int GetVolumeXY (EdbSegP &s, EdbPatternsVolume &vol)
 
EdbPattern * GetVP (int ud) const
 
void GuessNviewsPerArea ()
 
bool InitRun (const char *runfile=0, bool do_update=false)
 
bool InitRunFromRWC (char *rwcname, bool bAddRWD=true, const char *options="")
 
int LastArea () const
 
int NCuts (int ud)
 
float OverlapX (int ud)
 
float OverlapY (int ud)
 
bool PassCuts (int ud, EdbSegment &seg)
 
void Print ()
 
void PrintStat ()
 
void ReadImageMatrixCorrection (EdbCell2 &map, const char *file)
 
void ReadImageMatrixCorrection (int side, const char *file)
 
void ReadVAfile ()
 
float SegmentWeight (const EdbSegment &s)
 
void Set0 ()
 
void SetCond (int ud, EdbScanCond &cond)
 
void SetCutBottom (int ud, float wmin)
 
void SetCutLeft (int ud, float wmin)
 
void SetCutRight (int ud, float wmin)
 
void SetCutTop (int ud, float wmin)
 
void SetImageCorrection (int side, const char *str)
 
void SetImageCorrectionAff (int side, const char *str)
 
void SetScoreCut (const char *cut)
 
void SetScoreCut (float a, float b)
 
bool SetSegmentAtExternalSurface (EdbSegment *seg, int side)
 
int ViewSide (const EdbView *view) const
 
float ViewX (const EdbView *view) const
 
float ViewY (const EdbView *view) const
 
virtual ~EdbRunAccess ()
 

Public Attributes

Int_t eAFID
 
Int_t eCLUST
 
EdbCell2 eCorrMap [3]
 
Int_t eDoImageCorr
 
Int_t eDoImageMatrixCorr
 
Bool_t eDoViewAnalysis
 
TGraph2D * eGraphDZ [3]
 keep z1/z2/z3/z4 surfaces using eZ1/eZ2/eZ3/eZ4 for each view More...
 
TGraph2D * eGraphZ [4]
 
TCut eHeaderCut
 
EdbH2 eHViewXY [3]
 
EdbAffine2D eImageCorr [3]
 
Bool_t eInvertSides
 
Int_t eTracking
 
Bool_t eUseDensityAsW
 
Bool_t eUseExternalSurface
 
Int_t eWeightAlg
 

Private Attributes

EdbAffine2D * eAffStage2Abs
 
EdbScanCond * eCond [3]
 
Float_t eCutGR
 
TObjArray * eCuts [3]
 
Int_t eFirstArea
 
Int_t eLastArea
 
EdbLayer * eLayers [3]
 
Int_t eNareas
 
Int_t eNviewsPerArea
 
EdbRun * eRun
 
TString eRunFileName
 keep the base/layer1/layer2 thickness calculated using eZ1/eZ2/eZ3/eZ4 for each view More...
 
Float_t eScoreCut [2]
 corrections obtained from the views alignment More...
 
TObjArray * eViewCorr
 
Float_t eViewXmax [3]
 
Float_t eViewXmin [3]
 
Float_t eViewYmax [3]
 
Float_t eViewYmin [3]
 
EdbPattern * eVP [3]
 
Float_t eXmax
 
Float_t eXmin
 
Float_t eXstep [3]
 
Float_t eYmax
 
Float_t eYmin
 
Float_t eYstep [3]
 

Constructor & Destructor Documentation

◆ EdbRunAccess() [1/3]

EdbRunAccess::EdbRunAccess ( )

◆ EdbRunAccess() [2/3]

EdbRunAccess::EdbRunAccess ( EdbRun *  r)

55 {
56  Set0();
57  eRun=r;
58 }
EdbRun * eRun
Definition: EdbRunAccess.h:53
void Set0()
Definition: EdbRunAccess.cxx:61
void r(int rid=2)
Definition: test.C:201

◆ EdbRunAccess() [3/3]

EdbRunAccess::EdbRunAccess ( const char *  fname)

36 {
37  Set0();
39 }
TString eRunFileName
keep the base/layer1/layer2 thickness calculated using eZ1/eZ2/eZ3/eZ4 for each view
Definition: EdbRunAccess.h:52
const char * fname
Definition: mc2raw.cxx:41

◆ ~EdbRunAccess()

EdbRunAccess::~EdbRunAccess ( )
virtual

43 {
44  if(eRun) { delete eRun; eRun=0; }
45  for(int i=0; i<3; i++) {
46  if(eVP[i]) { delete eVP[i]; eVP[i]=0; }
47  if(eLayers[i]) { delete eLayers[i]; eLayers[i]=0; }
48  if(eCuts[i]) { delete eCuts[i]; eCuts[i]=0; }
49  if(eCond[i]) { delete eCond[i]; eCond[i]=0; }
50  }
51 }
EdbLayer * eLayers[3]
Definition: EdbRunAccess.h:62
TObjArray * eCuts[3]
Definition: EdbRunAccess.h:64
EdbPattern * eVP[3]
Definition: EdbRunAccess.h:65
EdbScanCond * eCond[3]
Definition: EdbRunAccess.h:63

Member Function Documentation

◆ AcceptRawSegment()

bool EdbRunAccess::AcceptRawSegment ( EdbView *  view,
int  id,
EdbSegP &  segP,
int  side,
int  entry 
)

1067 {
1068  EdbSegment *seg = view->GetSegment(id);
1069 
1070  if( !PassCuts(side,*seg) ) return false;
1071 
1072  if(eTracking>=0)
1073  if(((Int_t)(seg->GetUniqueID()>>16))!=eTracking) return false;
1074 
1075  float pix, chi2;
1076  if(eCLUST) {
1077  if(eUseExternalSurface) {
1078  SetSegmentAtExternalSurface(seg,side);
1079  } else {
1080  pix = GetRawSegmentPix(seg);
1081  segP.SetVolume( pix );
1082  chi2 = CalculateSegmentChi2( seg,
1083  GetCond(1)->SigmaXgr(), //TODO: side logic
1084  GetCond(1)->SigmaYgr(),
1085  GetCond(1)->SigmaZgr());
1086  if(chi2>GetCutGR()) return false;
1087  segP.SetChi2( chi2 );
1088  }
1089  }
1090 
1091  if(eDoViewAnalysis) {
1092  eHViewXY[side].Fill( seg->GetX0(), seg->GetY0());
1093  }
1094 
1095  EdbLayer *layer=GetLayer(side);
1096  const EdbAffine2D *affview = 0;
1097  if (eAFID==1) affview = view->GetHeader()->GetAffine();
1098  else if (eAFID==11) affview = eAffStage2Abs;
1099  else if(eAFID==2) {
1100  affview = (EdbAffine2D*)eViewCorr->At(entry);
1101  if(id==0) {
1102  view->GetHeader()->GetAffine()->Print();
1103  affview->Print();
1104  }
1105  }
1106 
1107  float x,y,z,tx,ty,puls;
1108  tx = seg->GetTx()/layer->Shr();
1109  ty = seg->GetTy()/layer->Shr();
1110  x = seg->GetX0();
1111  y = seg->GetY0();
1112 
1113  if(eDoImageCorr)
1114  {
1115  float xt = eImageCorr[side].Xtrans(x,y);
1116  float yt = eImageCorr[side].Ytrans(x,y);
1117  x = xt;
1118  y = yt;
1119  }
1120 
1122 
1123  x += layer->Zcorr()*tx;
1124  y += layer->Zcorr()*ty;
1125  z = layer->Z() + layer->Zcorr();
1126 
1127  float xx, yy, txr, tyr;
1128  if( eAFID==0 ) {
1129  xx = x+view->GetXview();
1130  yy = y+view->GetYview();
1131  txr = tx;
1132  tyr = ty;
1133  }
1134  else if(eAFID==11) {
1135  x += view->GetXview();
1136  y += view->GetYview();
1137  xx = affview->A11()*x+affview->A12()*y+affview->B1();
1138  yy = affview->A21()*x+affview->A22()*y+affview->B2();
1139  txr = affview->A11()*tx+affview->A12()*ty; // rotate also angles
1140  tyr = affview->A21()*tx+affview->A22()*ty;
1141  }
1142  else {
1143  //seg->Transform( affview );
1144  xx = affview->A11()*x+affview->A12()*y+affview->B1();
1145  yy = affview->A21()*x+affview->A22()*y+affview->B2();
1146  txr = affview->A11()*tx+affview->A12()*ty; // rotate also angles
1147  tyr = affview->A21()*tx+affview->A22()*ty;
1148  }
1149 
1150  if(eWeightAlg==2) puls = seg->GetPuls(); // use SigmaX for cuts only
1151  else puls = SegmentWeight(*seg);
1152 
1153  EdbAffine2D *aff = layer->GetAffineTXTY();
1154  float txx = aff->A11()*txr+aff->A12()*tyr+aff->B1();
1155  float tyy = aff->A21()*txr+aff->A22()*tyr+aff->B2();
1156 
1157  segP.Set( seg->GetID(),xx,yy,txx,tyy,puls,0);
1158  segP.SetZ( z );
1159  segP.SetDZ( seg->GetDz()*layer->Shr() );
1160  segP.SetW( puls );
1161  segP.SetVolume( seg->GetVolume() );
1162  segP.SetChi2( seg->GetSigmaX() );
1163  segP.SetProb( seg->GetSigmaY() ); //test: grains density after LASSO
1164  segP.SetVid(entry,id);
1165  segP.SetAid(view->GetAreaID(),view->GetViewID(), side);
1166 
1167  return true;
1168 }
TLegendEntry * entry
Definition: Canv_SYSTEMATICS_ALLCOMBINED__RMSEnergy__vs__Energy__ELECTRON.C:130
Definition: EdbAffine.h:17
Float_t B2() const
Definition: EdbAffine.h:48
Float_t Xtrans(Float_t x, Float_t y) const
Definition: EdbAffine.h:78
Float_t A22() const
Definition: EdbAffine.h:46
void Print(Option_t *opt="") const
Definition: EdbAffine.cxx:52
Float_t Ytrans(Float_t x, Float_t y) const
Definition: EdbAffine.h:79
Float_t A21() const
Definition: EdbAffine.h:45
Float_t A12() const
Definition: EdbAffine.h:44
Float_t B1() const
Definition: EdbAffine.h:47
Float_t A11() const
Definition: EdbAffine.h:43
int Fill(float x, float y)
Definition: EdbCell2.h:88
Definition: EdbLayer.h:40
float Zcorr() const
Definition: EdbLayer.h:91
float Shr() const
Definition: EdbLayer.h:90
EdbAffine2D * GetAffineTXTY()
Definition: EdbLayer.h:121
float Z() const
Definition: EdbLayer.h:78
bool SetSegmentAtExternalSurface(EdbSegment *seg, int side)
Definition: EdbRunAccess.cxx:1297
Int_t eDoImageMatrixCorr
Definition: EdbRunAccess.h:42
EdbLayer * GetLayer(int id)
Definition: EdbRunAccess.h:125
void ApplyImageMatrixCorr(int side, float &x, float &y)
Definition: EdbRunAccess.cxx:1054
EdbH2 eHViewXY[3]
Definition: EdbRunAccess.h:30
Int_t eDoImageCorr
Definition: EdbRunAccess.h:38
float CalculateSegmentChi2(EdbSegment *seg, float sx, float sy, float sz)
Definition: EdbRunAccess.cxx:1191
EdbScanCond * GetCond(int ud)
Definition: EdbRunAccess.h:188
TObjArray * eViewCorr
Definition: EdbRunAccess.h:77
EdbAffine2D eImageCorr[3]
Definition: EdbRunAccess.h:39
bool PassCuts(int ud, EdbSegment &seg)
Definition: EdbRunAccess.cxx:1171
Int_t eCLUST
Definition: EdbRunAccess.h:26
float GetCutGR() const
Definition: EdbRunAccess.h:178
Int_t eAFID
Definition: EdbRunAccess.h:25
Int_t eTracking
Definition: EdbRunAccess.h:46
Bool_t eDoViewAnalysis
Definition: EdbRunAccess.h:29
Bool_t eUseExternalSurface
Definition: EdbRunAccess.h:27
float SegmentWeight(const EdbSegment &s)
Definition: EdbRunAccess.cxx:1046
Int_t eWeightAlg
Definition: EdbRunAccess.h:32
float GetRawSegmentPix(EdbSegment *seg)
Definition: EdbRunAccess.cxx:1281
EdbAffine2D * eAffStage2Abs
Definition: EdbRunAccess.h:55
virtual Float_t GetDz() const
Definition: EdbSegment.h:42
virtual Float_t GetX0() const
Definition: EdbSegment.h:37
virtual Float_t GetTx() const
Definition: EdbSegment.h:40
virtual Float_t GetY0() const
Definition: EdbSegment.h:38
virtual Float_t GetTy() const
Definition: EdbSegment.h:41
void SetVolume(float w)
Definition: EdbSegP.h:133
void SetProb(float prob)
Definition: EdbSegP.h:131
void SetZ(float z)
Definition: EdbSegP.h:122
void SetW(float w)
Definition: EdbSegP.h:129
void SetChi2(float chi2)
Definition: EdbSegP.h:132
void SetDZ(float dz)
Definition: EdbSegP.h:123
void SetVid(int vid, int sid)
Definition: EdbSegP.h:134
void SetAid(int a, int v, int side=0)
Definition: EdbSegP.h:135
void Set(int id, float x, float y, float tx, float ty, float w, int flag)
Definition: EdbSegP.h:86
Definition: EdbSegment.h:61
Int_t GetVolume() const
Definition: EdbSegment.h:89
Int_t GetPuls() const
Definition: EdbSegment.h:88
float GetSigmaX() const
Definition: EdbSegment.h:84
Int_t GetID() const
Definition: EdbSegment.h:90
float GetSigmaY() const
Definition: EdbSegment.h:85
EdbAffine2D const * GetAffine() const
Definition: EdbView.h:72
EdbViewHeader * GetHeader() const
Definition: EdbView.h:163
Float_t GetXview() const
Definition: EdbView.h:193
Int_t GetViewID() const
Definition: EdbView.h:190
Int_t GetAreaID() const
Definition: EdbView.h:191
EdbSegment * GetSegment(int i) const
Definition: EdbView.h:219
Float_t GetYview() const
Definition: EdbView.h:194
Float_t chi2
Definition: testBGReduction_By_ANN.C:14

◆ AddRWDToRun()

bool EdbRunAccess::AddRWDToRun ( char *  rwdname,
const char *  options = "" 
)

263 {
264  Log(2,"EdbRunAccess::AddRWDToRun"," %s\n",rwdname);
265  if(!eRun) return false;
266  if( gSystem->AccessPathName(rwdname, kFileExists) ) {
267  Log(1,"EdbRunAccess::AddRWDToRun","ERROR open file: %s\n",rwdname);
268  return false;
269  }
270 
271  int f;//fragment index
272  f=eRun->GetHeader()->GetNareas();
273  f++;
274  if( !AddRWD( eRun, rwdname, f, options) ) return false;
275  eRun->GetHeader()->SetNareas(f);
276  return true;
277 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
FILE * f
Definition: RecDispMC.C:150
void SetNareas(int n)
Definition: EdbRunHeader.h:133
Int_t GetNareas() const
Definition: EdbRunHeader.h:147
EdbRunHeader * GetHeader() const
Definition: EdbRun.h:137
int AddRWD(EdbRun *run, char *rwdname, int fragID, const char *options)
Definition: libDataConversion.cpp:176

◆ AddSegmentCut() [1/3]

void EdbRunAccess::AddSegmentCut ( int  layer,
int  xi,
float  min[5],
float  max[5] 
)

1337 {
1338  float var[10]={ min[0],max[0], min[1],max[1], min[2],max[2], min[3],max[3], min[4],max[4] };
1339  AddSegmentCut(layer,xi,var);
1340 }
float min(TClonesArray *t)
Definition: bitview.cxx:275
int max
Definition: check_shower.C:41
void AddSegmentCut(int xi, const char *cutline)
Definition: EdbRunAccess.cxx:1317

◆ AddSegmentCut() [2/3]

void EdbRunAccess::AddSegmentCut ( int  layer,
int  xi,
float  var[10] 
)

1330 {
1331  if(!eCuts[layer]) eCuts[layer] = new TObjArray();
1332  eCuts[layer]->Add( new EdbSegmentCut(xi,var) );
1333 }
Definition: EdbSegmentCut.h:6

◆ AddSegmentCut() [3/3]

void EdbRunAccess::AddSegmentCut ( int  xi,
const char *  cutline 
)

1318 {
1319  float var[10];
1320  int onoff=-1;
1321  if(sscanf(cutline,"%d %f %f %f %f %f %f %f %f %f %f",&onoff,
1322  &var[0],&var[1], &var[2],&var[3], &var[4],&var[5], &var[6],&var[7], &var[8], &var[9] )==11)
1323  if(onoff>-1) {
1324  AddSegmentCut(1,xi,var);
1325  AddSegmentCut(2,xi,var);
1326  }
1327 }

◆ ApplyCorrections()

void EdbRunAccess::ApplyCorrections ( const EdbView &  view,
EdbSegment &  s,
const int  rs 
)

1236 {
1237  // rs=0 local view RS
1238  // rs==1 plate RS (use layer 1&2 information Note that the last emlink
1239  // should be done with all corrections off to get the consistent data here
1240  // rs==1 brick RS - use layer 0 info
1241 
1242  if(rs==0) return; // do nothing - remain in local view RS
1243  if(rs>0) // use layers information
1244  {
1245  if(eAFID) s.Transform( view.GetHeader()->GetAffine() );
1246  else {
1247  s.SetX0( s.GetX0()+view.GetXview());
1248  s.SetY0( s.GetY0()+view.GetYview());
1249  }
1250  EdbSegP sp(0,s.GetX0(),s.GetY0(),s.GetTx(),s.GetTy());
1251  sp.SetZ( GetLayer( ViewSide(&view) )->Zxy() ); //forget original Z here...
1252  GetLayer( ViewSide(&view) )->CorrectSeg(sp); //get to plate RS
1253  if(rs==2) {
1254  GetLayer(0)->CorrectSeg(sp); //get to brick RS
1255  sp.SetZ( sp.Z() + GetLayer(0)->Zxy() );
1256  }
1257  s.SetTx( sp.TX() );
1258  s.SetTy( sp.TY() );
1259  s.SetX0( sp.X() );
1260  s.SetY0( sp.Y() );
1261  s.SetZ0( sp.Z() );
1262  }
1263 }
void CorrectSeg(EdbSegP &s)
Definition: EdbLayer.cxx:70
int ViewSide(const EdbView *view) const
Definition: EdbRunAccess.cxx:448
Definition: EdbSegP.h:18
virtual void Transform(const EdbAffine2D *a)
EdbSegP * s
Definition: tlg2pattern.C:32

◆ ApplyImageMatrixCorr()

void EdbRunAccess::ApplyImageMatrixCorr ( int  side,
float &  x,
float &  y 
)

1055 {
1056  TArrayD *dxy=0;
1057  if(side>0&&side<3)
1058  if( dxy = (TArrayD*)eCorrMap[side].GetObject(x,y,0) )
1059  {
1060  x -= (*dxy)[0];
1061  y -= (*dxy)[1];
1062  }
1063 }
EdbCell2 eCorrMap[3]
Definition: EdbRunAccess.h:43

◆ CalculateSegmentChi2()

float EdbRunAccess::CalculateSegmentChi2 ( EdbSegment *  seg,
float  sx,
float  sy,
float  sz 
)

1192 {
1193  //assumed that clusters are attached to segments
1194  double chi2=0;
1195  EdbCluster *cl=0;
1196  TObjArray *clusters = seg->GetElements();
1197  if(!clusters) return 0;
1198  int ncl = clusters->GetLast()+1;
1199  if(ncl<=0) return 0;
1200 
1201  float xyz1[3], xyz2[3]; // segment line parametrized as 2 points
1202  float xyz[3];
1203  bool inside=true;
1204 
1205  xyz1[0] = seg->GetX0() /sx;
1206  xyz1[1] = seg->GetY0() /sy;
1207  xyz1[2] = seg->GetZ0() /sz;
1208  xyz2[0] = (seg->GetX0() + seg->GetDz()*seg->GetTx()) /sx;
1209  xyz2[1] = (seg->GetY0() + seg->GetDz()*seg->GetTy()) /sy;
1210  xyz2[2] = (seg->GetZ0() + seg->GetDz()) /sz;
1211 
1212  double d;
1213  for(int i=0; i<ncl; i++ ) {
1214  cl = (EdbCluster*)clusters->At(i);
1215  xyz[0] = cl->GetX()/sx;
1216  xyz[1] = cl->GetY()/sy;
1217  xyz[2] = cl->GetZ()/sz;
1218  d = EdbMath::DistancePointLine3(xyz,xyz1,xyz2, inside);
1219  chi2 += d*d;
1220  }
1221 
1222  return TMath::Sqrt(chi2/ncl);
1223 }
void d()
Definition: RecDispEX.C:381
Definition: EdbCluster.h:19
Float_t GetX() const
Definition: EdbCluster.h:51
Float_t GetY() const
Definition: EdbCluster.h:52
Float_t GetZ() const
Definition: EdbCluster.h:53
static double DistancePointLine3(float Point[3], float LineStart[3], float LineEnd[3], bool inside)
Definition: EdbMath.cxx:61
virtual Float_t GetZ0() const
Definition: EdbSegment.h:39
TObjArray * GetElements() const
Definition: EdbSegment.h:115

◆ Check0Views()

int EdbRunAccess::Check0Views ( EdbPattern &  pat,
int  thres = 1 
)

811 {
812  Long_t n0=0, nview=pat.N();
813  if(!nview) return 0;
814  for(int i=0; i<nview; i++) if( pat.GetSegment(i)->Flag() < thres) n0++;
815  return n0;
816 }
Int_t Flag() const
Definition: EdbSegP.h:146
Int_t N() const
Definition: EdbPattern.h:89
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:66

◆ CheckEmptyViews()

int EdbRunAccess::CheckEmptyViews ( EdbPattern &  pat)

831 {
832  int nempty=0;
833  EdbSegP *s=0;
834  for(int i=0; i<pat.N(); i++) {
835  s = pat.GetSegment(i);
836  if( s->Vid(0)>0 ) continue;
837  if( s->Vid(1)>0 ) continue;
838  nempty++;
839  }
840  return nempty;
841 }
Int_t Vid(int i) const
Definition: EdbSegP.h:165

◆ CheckMeanSegsPerView()

float EdbRunAccess::CheckMeanSegsPerView ( EdbPattern &  pat)

803 {
804  Long_t nseg=0, nview=pat.N();
805  if(!nview) return 0;
806  for(int i=0; i<nview; i++) nseg += pat.GetSegment(i)->Flag();
807  return 1.*nseg/nview;
808 }

◆ CheckRunLine()

void EdbRunAccess::CheckRunLine ( )

747 {
748  if(!eRun) return;
749 
750  cerr << endl << eRunFileName.Data();
751  int nviews=eRun->GetEntries();
752  cerr<<"\tv: "<< nviews;
753  eNareas=0;
754  if(eRun->GetHeader()) {
756  } else
757  cerr <<" RUN HEADER is missing!";
758 
759  cerr<<" a: "<<eNareas;
760  int var=0;
761  if(eNareas>0) {
762  var = nviews/eNareas/2;
763  cerr<<" v/a/s: "<<var;
764  }
765  cerr<<endl;
766 
767  if(eNareas>0)
768  if(var*2*eNareas != nviews) {
769  cerr<<"\tWARNING: areas and views numbers are mismatching!\n";
770  for(int ud=0; ud<3; ud++) {
771  EdbPattern *pat=GetVP(ud);
772  if(pat) {
773  int nv = pat->N();
774  cerr<<"\t\t views("<<ud<<"): "<<nv;
775  if(nv>0) {
776  cerr<<" Areas in range: ";
777  cerr<<pat->GetSegment(0)->Aid(0)<<" : "<<pat->GetSegment(nv-1)->Aid(0);
778  cerr<<" Views in range: ";
779  cerr<<pat->GetSegment(0)->Aid(1)<<" : "<<pat->GetSegment(nv-1)->Aid(1);
780  }
781  cerr<<endl;
782  }
783  }
784  }
785 
786  for(int ud=0; ud<3; ud++) {
787  EdbPattern *pat=GetVP(ud);
788  int nempty=0;
789  if(pat) {
790  nempty = CheckEmptyViews(*pat);
791  if(nempty>0) cerr<<"\tWARNING: "<<nempty<<" empty views in layer "<<ud<<endl;
792  float meanseg = CheckMeanSegsPerView(*pat);
793  printf("Mean Segments/view = %10.1f\n",meanseg);
794  int thres=1;
795  int n0v = Check0Views(*pat, thres);
796  if(n0v) printf("%d views with <%d segments!\n",n0v,thres);
797  }
798  }
799 }
Definition: EdbPattern.h:280
int CheckEmptyViews(EdbPattern &pat)
Definition: EdbRunAccess.cxx:830
int Check0Views(EdbPattern &pat, int thres=1)
Definition: EdbRunAccess.cxx:810
float CheckMeanSegsPerView(EdbPattern &pat)
Definition: EdbRunAccess.cxx:802
Int_t eNareas
Definition: EdbRunAccess.h:59
EdbPattern * GetVP(int ud) const
Definition: EdbRunAccess.h:129
int GetEntries() const
Definition: EdbRun.h:135
Int_t Aid(int i) const
Definition: EdbSegP.h:166

◆ CheckUpDownOffsets()

TH2F * EdbRunAccess::CheckUpDownOffsets ( )

1377 {
1378  TH2F *h = new TH2F("UpDownOffsets","dXdY offsets between Up and correspondent Down views",100,-10,10,100,-10,10 );
1379  EdbPattern *p1 = GetVP(1); if(!p1) { Log(1,"EdbRunAccess::CheckUpDownOffsets","Error: GetVP(1) empty"); return h;}
1380  EdbPattern *p2 = GetVP(2); if(!p1) { Log(1,"EdbRunAccess::CheckUpDownOffsets","Error: GetVP(2) empty"); return h;}
1381  int N1 = p1->N(), N2 = p2->N();
1382  if(N1 != N2) Log(1,"EdbRunAccess::CheckUpDownOffsets","Warning: different number of views: %d -up, %d - down", p1->N(), p2->N() );
1383  int n = TMath::Min( N1, N2 );
1384 
1385 //segP.SetAid( view->GetAreaID() , view->GetViewID() );
1386 
1387  TArrayL viewid1(N1), viewid2(N2); //view/area id to sincronize the views
1388  TArrayI ind1(N1), ind2(N2);
1389  for(int i=0; i<N1; i++) viewid1[i] = p1->GetSegment(i)->Aid(0) * 1000000 + p1->GetSegment(i)->Aid(1);
1390  for(int i=0; i<N2; i++) viewid2[i] = p2->GetSegment(i)->Aid(0) * 1000000 + p2->GetSegment(i)->Aid(1);
1391  TMath::Sort(N1,viewid1.GetArray(),ind1.GetArray(),0);
1392  TMath::Sort(N2,viewid2.GetArray(),ind2.GetArray(),0);
1393 
1394  for(int i=0; i<n; i++) {
1395  EdbSegP *s1=p1->GetSegment(ind1[i]);
1396  EdbSegP *s2=p2->GetSegment(ind2[i]);
1397  h->Fill( s2->X()-s1->X(), s2->Y()-s1->Y() );
1398  }
1399  float sx = h->GetRMS(1);
1400  float sy = h->GetRMS(2);
1401  if(sx>0.5 || sy>0.5)
1402  Log(1,"EdbRunAccess::CheckUpDownOffsets","WARNING!!! XY stage possible malfunction (rms>0.5 micron) rmsX = %7.4f rmsY = %7.4f (by %d views)",
1403  h->GetRMS(1), h->GetRMS(2), n );
1404  else Log(2,"EdbRunAccess::CheckUpDownOffsets","rmsX = %7.4f rmsY = %7.4f (by %d views)", sx, sy, n );
1405  return h;
1406 }
Float_t X() const
Definition: EdbSegP.h:170
Float_t Y() const
Definition: EdbSegP.h:171
EdbSegP * s1
Definition: tlg2pattern.C:30
EdbSegP * s2
Definition: tlg2pattern.C:31

◆ CheckViewSize()

void EdbRunAccess::CheckViewSize ( )

1364 {
1365  for(int ud=1; ud<3; ud++ ) {
1366  eViewXmin[ud] = eHViewXY[ud].XminA(0.1);
1367  eViewXmax[ud] = eHViewXY[ud].XmaxA(0.1);
1368  eViewYmin[ud] = eHViewXY[ud].YminA(0.1);
1369  eViewYmax[ud] = eHViewXY[ud].YmaxA(0.1);
1370  Log(2,"EdbRunAccess::CheckViewSize"," side%d X:[%f %f] Y:[%f %f]", ud,
1371  eViewXmin[ud],eViewXmax[ud],eViewYmin[ud],eViewYmax[ud] );
1372  }
1373 }
float XmaxA(float level=0)
Definition: EdbCell2.cpp:172
float XminA(float level=0)
Definition: EdbCell2.cpp:167
float YmaxA(float level=0)
Definition: EdbCell2.cpp:182
float YminA(float level=0)
Definition: EdbCell2.cpp:177
Float_t eViewXmin[3]
Definition: EdbRunAccess.h:74
Float_t eViewYmin[3]
Definition: EdbRunAccess.h:75
Float_t eViewXmax[3]
Definition: EdbRunAccess.h:74
Float_t eViewYmax[3]
Definition: EdbRunAccess.h:75

◆ CheckViewStep() [1/2]

void EdbRunAccess::CheckViewStep ( )
845 {
846  CheckViewStep(1);
847  CheckViewStep(2);
848 }
void CheckViewStep()
Definition: EdbRunAccess.cxx:844

◆ CheckViewStep() [2/2]

void EdbRunAccess::CheckViewStep ( int  ud)

852 {
853  // assumed that in the tree (and in eVP) views are consecutive in the order of acquisition
854  if(ud<0 || ud>2) return;
855  EdbPattern *pat=GetVP(ud); if(!pat) return;
856 
857  TH1F hx("viewXstep","viewXstep",3000,200,500);
858  TH1F hy("viewYstep","viewYstep",3000,200,500);
859  int n=pat->N(); if(n<2) return;
860  for( int i=0; i<n-1; i++ ) {
861  EdbSegP *s1 = pat->GetSegment(i);
862  EdbSegP *s2 = pat->GetSegment(i+1);
863  if( s1->Aid(0) != s1->Aid(0) ) continue; // skip different areas
864  if( s1->Aid(1) == s2->Aid(1) ) continue; // skip same view
865  float dx = Abs(s2->X()-s1->X());
866  float dy = Abs(s2->Y()-s1->Y());
867  if(dx>dy)
868  if(dx>50&&dx<500&&dy<50) //check that steps are in reasonable limits
869  hx.Fill(dx);
870  if(dy>dx)
871  if(dy>50&&dy<500&&dx<50) //check that steps are in reasonable limits
872  hy.Fill(dy);
873  }
874  //hx.Write(); hy.Write(); f.Close();
875  eXstep[ud] = hx.GetMean();
876  eYstep[ud] = hy.GetMean();
877  Log(2,"EdbRunAccess::CheckViewStep","side %d: stepX(%d) = %f +- %f stepY(%d) = %f +- %f",
878  ud, (int)(hx.GetEntries()), hx.GetMean(),hx.GetRMS(), (int)(hy.GetEntries()), hy.GetMean(),hy.GetRMS() );
879 }
Float_t eXstep[3]
Definition: EdbRunAccess.h:72
Float_t eYstep[3]
Definition: EdbRunAccess.h:73

◆ ClearCuts()

void EdbRunAccess::ClearCuts ( )

96 {
97  for(int i=0; i<3; i++) {
98  if(eCuts[i]) eCuts[i]->Clear();
99  }
100 }

◆ CopyRawDataXY()

bool EdbRunAccess::CopyRawDataXY ( float  x0,
float  y0,
float  dR,
const char *  file 
)

1344 {
1345  Log(2,"CopyRawDataXY", "dR = %f around (%f %f) into file %s",dR, x0,y0, file);
1346  if(!eRun) return false;
1347  EdbRun r(*eRun, file);
1348  EdbView *view = eRun->GetView();
1349  for(int side=1; side<=2; side++) {
1350  TArrayI entr(100000);
1351  int nv = GetViewsXY(side,entr,x0,y0, dR);
1352  for(int i=0; i<nv; i++) {
1353  view = eRun->GetEntry(entr[i]);
1354  r.AddView(view);
1355  }
1356  Log(2,"CopyRawDataXY", "%d views copied for side %d",nv, side);
1357  }
1358  r.Close();
1359  return true;
1360 }
int GetViewsXY(int ud, TArrayI &entr, float x, float y, float r=200.)
Definition: EdbRunAccess.cxx:288
Definition: EdbRun.h:74
EdbView * GetEntry(int entry, int ih=1, int icl=0, int iseg=1, int itr=0, int ifr=0)
Definition: EdbRun.cxx:489
EdbView * GetView() const
Definition: EdbRun.h:109
Definition: EdbView.h:134
TFile * file
Definition: write_pvr.C:3

◆ FillDZMaps()

void EdbRunAccess::FillDZMaps ( )

1411 {
1412  // fill DZ maps
1413 
1414  int eNsegMin=100;
1415 
1416  Log(2,"EdbRunAccess::FillDZmaps","Get data from %s with AFID=%d", eRunFileName.Data(),eAFID);
1417  if(!eRun) { Log(1,"EdbRunAccess::FillDZMaps","ERROR: run is not opened\n"); return; }
1418  EdbView *view = eRun->GetView();
1419  EdbViewHeader *head = view->GetHeader();
1420  int nentries = eRun->GetEntries();
1421 
1422  Double_t *x1 = new Double_t[nentries];
1423  Double_t *y1 = new Double_t[nentries];
1424  Double_t *x2 = new Double_t[nentries];
1425  Double_t *y2 = new Double_t[nentries];
1426  Double_t *z1 = new Double_t[nentries];
1427  Double_t *z2 = new Double_t[nentries];
1428  Double_t *z3 = new Double_t[nentries];
1429  Double_t *z4 = new Double_t[nentries];
1430  Int_t cnt_good=0;
1431 
1432  int cnt1=0, cnt2=0;
1433  for(int ie=0; ie<nentries; ie++ ) {
1434  view = eRun->GetEntry(ie,1,0,0,0,0);
1435  if( head->GetNsegments() < eNsegMin ) continue;
1436  int side = ViewSide(view);
1437  if( side == 1 ) {
1438  x1[cnt1] = ViewX(view);
1439  y1[cnt1] = ViewY(view);
1440  z1[cnt1] = view->GetZ1();
1441  z2[cnt1] = view->GetZ2();
1442  cnt1++;
1443  }
1444  else if( side == 2 ) {
1445  x2[cnt2] = ViewX(view);
1446  y2[cnt2] = ViewY(view);
1447  z3[cnt2] = view->GetZ3();
1448  z4[cnt2] = view->GetZ4();
1449  cnt2++;
1450  }
1451  }
1452 
1453  for(int i=0; i<4; i++) if( eGraphZ[i] ) delete eGraphZ[i];
1454  for(int i=0; i<3; i++) if( eGraphDZ[i] ) delete eGraphDZ[i];
1455 
1456  eGraphZ[0] = new TGraph2D("graphZ1","graphZ1",cnt1,x1,y1,z1);
1457  eGraphZ[1] = new TGraph2D("graphZ2","graphZ2",cnt1,x1,y1,z2);
1458  eGraphZ[2] = new TGraph2D("graphZ3","graphZ3",cnt2,x2,y2,z3);
1459  eGraphZ[3] = new TGraph2D("graphZ4","graphZ4",cnt2,x2,y2,z4);
1460 
1461  std::unique_ptr<TFile> f(TFile::Open("dz.root","RECREATE"));
1462  if (!f || f->IsZombie()) Log(1,"EdbRunAccess::FillDZMaps","ERROR! can not open file dz.root");
1463  else for(int i=0; i<4; i++) if( eGraphZ[i] ) eGraphZ[i]->Write();
1464 }
int nentries
Definition: check_shower.C:40
float ViewX(const EdbView *view) const
Definition: EdbRunAccess.h:158
TGraph2D * eGraphDZ[3]
keep z1/z2/z3/z4 surfaces using eZ1/eZ2/eZ3/eZ4 for each view
Definition: EdbRunAccess.h:49
TGraph2D * eGraphZ[4]
Definition: EdbRunAccess.h:48
float ViewY(const EdbView *view) const
Definition: EdbRunAccess.h:159
Definition: EdbView.h:26
Int_t GetNsegments() const
Definition: EdbView.h:88
Float_t GetZ3() const
Definition: EdbView.h:198
Float_t GetZ1() const
Definition: EdbView.h:196
Float_t GetZ4() const
Definition: EdbView.h:199
Float_t GetZ2() const
Definition: EdbView.h:197

◆ FillVP()

int EdbRunAccess::FillVP ( )

883 {
884  // fill patterns up/down with dummy segments with center of view coordinates
885  // to profit of the pattern tools for the fast views selection
886  // the convention is:
887  // segp->ID() - tree entry number
888  // segp->X() - coordinates in the external (brick) RS (after transformation)
889  // segp->Y() - /
890  // segp->Aid(areaID,viewID);
891 
892 
893  Log(2,"EdbRunAccess::FillVP","Get data from %s with AFID=%d",eRunFileName.Data(),eAFID);
894 
895  if(!eRun) { Log(1,"EdbRunAccess::FillVP","ERROR: run is not opened\n"); return 0; }
896  EdbView *view = eRun->GetView();
897  EdbViewHeader *head = view->GetHeader();
898 
899  int nentr = eRun->GetEntries();
900 
901  eRun->GetTree()->Draw(">>lst", eHeaderCut );
902  TEventList *lst = (TEventList*)(gDirectory->GetList()->FindObject("lst"));
903  if(!lst) {Log(1,"EdbRunAccess::FillVP","ERROR!: events list (lst) did not found!"); return 0;}
904  nentr =lst->GetN();
905  if(nentr<1) {Log(1,"EdbRunAccess::FillVP","%d views accepted by cut %s", nentr, eHeaderCut.GetTitle()); return 0;}
906 
907  if( eVP[1] ) delete eVP[1];
908  if( eVP[2] ) delete eVP[2];
909  eVP[1] = new EdbPattern( 0.,0., 0., nentr);
910  eVP[2] = new EdbPattern( 0.,0., 200., nentr); //TODO
911 
912  EdbSegP segP;
913 
914  eFirstArea = 9999999;
915  eLastArea = 0;
916 
917  int side;
918  int nseg,ncl;
919  for(int ie=0; ie<nentr; ie++ ) {
920  int iv = lst->GetEntry(ie);
921  view = eRun->GetEntry(iv,1,0,0,0,0);
922 
923  nseg = head->GetNsegments();
924  ncl = head->GetNclusters();
925  if(eAFID==0){
926  segP.Set( iv,view->GetXview(),view->GetYview(), 0,0,ncl,nseg);
927  }
928  else if(eAFID==1 || eAFID==2) {
929  segP.Set( iv,0,0, 0,0,ncl,nseg);
930  segP.Transform( head->GetAffine() );
931  }
932  else if(eAFID==11) {
933  segP.Set( iv,0,0, 0,0,ncl,nseg);
934  if(!eAffStage2Abs) Log(1,"","eAffStage2Abs =0");
935  segP.Transform( eAffStage2Abs );
936  }
937  else if(eAFID==20) { //to remove
938  segP.Set( iv,0,0, 0,0,ncl,nseg);
939  EdbAffine2D *aff = (EdbAffine2D*)eViewCorr->At(iv);
940  if(aff) {
941  segP.Transform( aff );
942  head->GetAffine()->Print();
943  aff->Print();
944  } else Log(1,"EdbRunAccess::FillVP", "WARNING! aff is missing for entry %d",iv);
945  }
946  if( view->GetAreaID() < eFirstArea ) eFirstArea= view->GetAreaID();
947  if( view->GetAreaID() > eLastArea ) eLastArea = view->GetAreaID();
948 
949  segP.SetAid( view->GetAreaID() , view->GetViewID() );
950  segP.SetVid( head->GetNframesTop(), head->GetNframesBot() );
951 
952  side = ViewSide(view);
953  if(side<1||side>2) continue;
954  eVP[side]->AddSegment(segP);
955  }
956  Log(2,"EdbRunAccess::FillVP"," %d entries in limits X=(%f : %f) Y=(%f %f)\n", nentr,
957  eVP[1]->Xmin(), eVP[1]->Xmax(),
958  eVP[1]->Ymin(), eVP[1]->Ymax() );
959  return nentr;
960 }
Int_t eFirstArea
Definition: EdbRunAccess.h:57
Int_t eLastArea
Definition: EdbRunAccess.h:58
TCut eHeaderCut
Definition: EdbRunAccess.h:45
TTree * GetTree() const
Definition: EdbRun.h:112
EdbSegP * AddSegment(int i, EdbSegP &s)
Definition: EdbPattern.cxx:71
Int_t GetNclusters() const
Definition: EdbView.h:87
Int_t GetNframesTop() const
Definition: EdbView.h:120
Int_t GetNframesBot() const
Definition: EdbView.h:121

◆ FirstArea()

int EdbRunAccess::FirstArea ( ) const
inline
131 { return eFirstArea;}

◆ GetCond()

EdbScanCond* EdbRunAccess::GetCond ( int  ud)
inline
189  { if(eCond[ud]) return (EdbScanCond *)eCond[ud]; else return 0; }
Definition: EdbScanCond.h:10

◆ GetCut()

EdbSegmentCut* EdbRunAccess::GetCut ( int  ud,
int  i 
)
inline
177  { return (EdbSegmentCut *)(eCuts[ud]->UncheckedAt(i)); }

◆ GetCutGR()

float EdbRunAccess::GetCutGR ( ) const
inline
178 {return eCutGR;}
Float_t eCutGR
Definition: EdbRunAccess.h:68

◆ GetEntryXY()

int EdbRunAccess::GetEntryXY ( int  ud,
float  x,
float  y 
)

310 {
311  // find view with the center closest to x,y and return it's entry
312 
313  int entry = -1;
314  EdbPattern *pat=GetVP(ud);
315  if(!pat) return -1;
316  EdbSegP *seg=0;
317  float r,rmin=9999999.;
318  int imin=-1;
319  for( int i=0; i<pat->N(); i++ ) {
320  seg = pat->GetSegment(i);
321  r = Sqrt( (seg->X()-x)*(seg->X()-x)+(seg->Y()-y)*(seg->Y()-y));
322  if( r>rmin ) continue;
323  rmin = r;
324  entry = seg->ID();
325  imin = i;
326  }
327  //if(imin>0) pat->GetSegment(imin)->Print();
328  return entry;
329 }
Int_t ID() const
Definition: EdbSegP.h:144

◆ GetLayer()

EdbLayer* EdbRunAccess::GetLayer ( int  id)
inline
126  { if(eLayers[id]) return (EdbLayer *)eLayers[id]; else return 0; }
UInt_t id
Definition: tlg2pattern.C:118

◆ GetMakeCond()

EdbScanCond* EdbRunAccess::GetMakeCond ( int  ud)
inline
187 {return 0;} //TODO?

◆ GetMakeLayer()

EdbLayer * EdbRunAccess::GetMakeLayer ( int  id)

281 {
282  if(id<0) return 0; if(id>2) return 0;
283  if(!GetLayer(id)) eLayers[id] = new EdbLayer();
284  return GetLayer(id);
285 }

◆ GetNareas()

Int_t EdbRunAccess::GetNareas ( )
inline
107 { return eNareas; }

◆ GetNviewsPerArea()

Int_t EdbRunAccess::GetNviewsPerArea ( )
inline
108 { return eNviewsPerArea; }
Int_t eNviewsPerArea
Definition: EdbRunAccess.h:60

◆ GetPatternData()

int EdbRunAccess::GetPatternData ( EdbPattern &  pat,
int  side,
int  nviews,
TArrayI &  srt,
int &  nrej 
)

511 {
512  // get raw segments as a pattern for the given array of entries and given side
513 
514  EdbSegP segP;
515  EdbView *view = eRun->GetView();
516  int nseg=0;
517  nrej=0;
518  int entry;
519  int nsegV;
520 
521  for(int iu=0; iu<nviews; iu++) {
522  entry = srt[iu];
523  if(eCLUST) {
524  view = eRun->GetEntry(entry,1,1,1);
525  view->AttachClustersToSegments();
526  }
527  else view = eRun->GetEntry(entry);
528 
529  nsegV = view->Nsegments();
530  if( ViewSide(view) != side ) continue;
531 
532  for(int j=0;j<nsegV;j++) {
533  if(!AcceptRawSegment(view,j,segP,side,entry)) {
534  nrej++;
535  continue;
536  }
537  nseg++;
538  pat.AddSegment( segP);
539  }
540  }
541  return nseg;
542 }
bool AcceptRawSegment(EdbView *view, int ud, EdbSegP &segP, int side, int entry)
Definition: EdbRunAccess.cxx:1066
int AttachClustersToSegments()
Definition: EdbView.cxx:360
Int_t Nsegments() const
Definition: EdbView.h:216

◆ GetPatternDataForPrediction()

int EdbRunAccess::GetPatternDataForPrediction ( int  id,
int  side,
EdbPattern &  pat 
)

577 {
578  // get raw segments belonging to views having a given id (view->GetHeader()->GetTrack()) and a given side
579  // the result is stored into an EdbPattern object
580  // this routine is called by EdbRunTracking::FindCandidates and to select microtracks from a raw.root file
581  // acquired for a specific prediction
582  // Special case: if id=-1 - accept all views for the given side
583 
584  EdbSegP segP;
585  EdbView *view = eRun->GetView();
586  //int nviews = eRun->GetEntries();
587  int nviews = eVP[side]->N();
588  Log(2,"EdbRunAccess::GetPatternDataForPrediction","%d views are selected for side %d",nviews,side);
589  int nseg=0;
590  int nsegV;
591 
592  for(int ie=0; ie<nviews; ie++) {
593  int entry=eVP[side]->GetSegment(ie)->ID();
594  if(eCLUST) {
595  view = eRun->GetEntry(entry,1,1,1);
596  view->AttachClustersToSegments();
597  }
598  else view = eRun->GetEntry(entry);
599 
600  if( id>=0 && view->GetHeader()->GetTrack()!=id) continue;
601 
602  nsegV = view->Nsegments();
603  if( ViewSide(view) != side ) continue;
604  //Log(2,"EdbRunAccess::GetPatternDataForPrediction","ie = %d nsegV = %d",ie,nsegV);
605 
606  for(int j=0;j<nsegV;j++) {
607  if(!AcceptRawSegment(view,j,segP,side,entry)) continue;
608  nseg++;
609  segP.SetScanID(pat.ScanID());
610  segP.SetSide(pat.Side());
611  pat.AddSegment( segP);
612  }
613  }
614  Log(2,"GetPatternDataForPrediction","%d segments for pred %d, side %d from %s",nseg,id,side, eRunFileName.Data());
615  return nseg;
616 }
EdbID ScanID() const
Definition: EdbPattern.h:339
Int_t Side() const
Definition: EdbPattern.h:342
void SetSide(int side=0)
Definition: EdbSegP.h:136
void SetScanID(EdbID id)
Definition: EdbSegP.h:140
Int_t GetTrack() const
Definition: EdbView.h:126

◆ GetPatternView()

int EdbRunAccess::GetPatternView ( EdbPattern &  pat,
int  side,
int  entry,
int &  nrej 
)

546 {
547  // get raw segments as a pattern for the given entry in a Views tree
548 
549  EdbSegP segP;
550  EdbView *view = eRun->GetView();
551  int nseg=0;
552  nrej=0;
553 
554  if(eCLUST) {
555  view = eRun->GetEntry(entry,1,1,1);
556  view->AttachClustersToSegments();
557  }
558  else
559  view = eRun->GetEntry(entry);
560 
561  int nsegV = view->Nsegments();
562 
563  for(int j=0;j<nsegV;j++) {
564  if(!AcceptRawSegment(view,j,segP,side,entry)) {
565  nrej++;
566  continue;
567  }
568  nseg++;
569  pat.AddSegment( segP);
570  }
571 
572  return nseg;
573 }

◆ GetPatternXY()

int EdbRunAccess::GetPatternXY ( EdbSegP &  s,
int  side,
EdbPattern &  pat,
float  rmin = 200 
)

383 {
384  // assuming s as the prediction in plate RS (also Z), fill vol with the segments
385  // of closest up and down views
386  // todo: Z of layers must be setted!
387 
388  if(side<1||side>2) return 0;
389  TArrayI entr(100000);
390  float x = s.X()+ (eLayers[side]->Z()-s.Z())*s.TX();
391  float y = s.Y()+ (eLayers[side]->Z()-s.Z())*s.TY();
392  int nv = GetViewsXY(side,entr,x,y, Max(rmin,(float)300.) );
393  pat.SetZ(eLayers[side]->Z());
394  int nrej=0;
395  return GetPatternData(pat,side,nv,entr,nrej);
396 }
int GetPatternData(EdbPattern &pat, int side, int nviews, TArrayI &srt, int &nrej)
Definition: EdbRunAccess.cxx:507
Float_t TX() const
Definition: EdbSegP.h:172
Float_t Z() const
Definition: EdbSegP.h:150
Float_t TY() const
Definition: EdbSegP.h:173
void SetZ(float z)
Definition: EdbPattern.h:41
struct @8 Z

◆ GetPatternXYcut()

int EdbRunAccess::GetPatternXYcut ( EdbSegP &  s0,
int  side,
EdbPattern &  pat,
float  dr,
float  dt 
)

357 {
358  Log(2,"EdbRunAccess::GetPatternXYcut","side %d [%f %f %f %f] +-%5.1f +-%5.3f:", side, s0.X(), s0.Y(), s0.TX(),s0.TY(),dr,dt );
359 
360  EdbPattern p0;
361  int nseg = GetPatternXY(s0, side, p0, dr);
362  Log(2,"EdbRunAccess::GetPatternXYcut","nseg = %d",nseg);
363  Log(2,"EdbRunAccess::GetPatternXYcut","side = %d zlayer=%f zseg= %f",side,eLayers[side]->Z(),s0.Z() );
364  float x = s0.X()+ (eLayers[side]->Z()-s0.Z())*s0.TX();
365  float y = s0.Y()+ (eLayers[side]->Z()-s0.Z())*s0.TY();
366  int ic=0;
367  for(int i=0; i<nseg; i++)
368  {
369  EdbSegP *s = p0.GetSegment(i);
370  if( Abs(s->X()-x) > dr) continue;
371  if( Abs(s->Y()-y) > dr) continue;
372  if( Abs(s->TX()-s0.TX()) > dt) continue;
373  if( Abs(s->TY()-s0.TY()) > dt) continue;
374  pat.AddSegment(*s);
375  ic++;
376  }
377  Log(2,"EdbRunAccess::GetPatternXYcut","selected = %d",ic);
378  return ic;
379 }
int GetPatternXY(EdbSegP &s, int side, EdbPattern &pat, float rmin=200)
Definition: EdbRunAccess.cxx:382

◆ GetRawSegment() [1/2]

EdbSegment * EdbRunAccess::GetRawSegment ( EdbView &  view,
int  sid,
int  rs = 0 
)

1267 {
1268  EdbSegment *s = view.GetSegment(sid);
1269  ApplyCorrections( view, *s, rs );
1270  return s;
1271 }
void ApplyCorrections(const EdbView &view, EdbSegment &s, const int rs)
Definition: EdbRunAccess.cxx:1235

◆ GetRawSegment() [2/2]

EdbSegment * EdbRunAccess::GetRawSegment ( int  vid,
int  sid,
int  rs = 0 
)

1275 {
1276  EdbView *view = eRun->GetEntry(vid);
1277  return GetRawSegment( *view, sid, rs );
1278 }
EdbSegment * GetRawSegment(int vid, int sid, int rs=0)
Definition: EdbRunAccess.cxx:1274

◆ GetRawSegmentN()

EdbSegment * EdbRunAccess::GetRawSegmentN ( int  vid,
int  sid,
int  rs = 0 
)

1227 {
1228  EdbView *view = eRun->GetEntry(vid);
1229  EdbSegment *s = view->GetSegment(sid);
1230 // printf("(%d %d) %d %f %f\n",vid,sid, s->GetPuls(), view->GetXview(),view->GetYview());
1231  return s;
1232 }

◆ GetRawSegmentPix()

float EdbRunAccess::GetRawSegmentPix ( EdbSegment *  seg)

1282 {
1283  //assumed that clusters are attached to segments
1284  float pix=0;
1285  EdbCluster *cl=0;
1286  TObjArray *clusters = seg->GetElements();
1287  if(!clusters) return 0;
1288  int ncl = clusters->GetLast()+1;
1289  for(int i=0; i<ncl; i++ ) {
1290  cl = (EdbCluster*)clusters->At(i);
1291  pix += cl->GetArea();
1292  }
1293  return pix;
1294 }
Float_t GetArea() const
Definition: EdbCluster.h:54

◆ GetRun()

EdbRun* EdbRunAccess::GetRun ( ) const
inline
123 {return eRun;}

◆ GetScoreA()

float EdbRunAccess::GetScoreA ( ) const
inline
120 { return eScoreCut[0]; }
Float_t eScoreCut[2]
corrections obtained from the views alignment
Definition: EdbRunAccess.h:78

◆ GetScoreB()

float EdbRunAccess::GetScoreB ( ) const
inline
121 { return eScoreCut[1]; }

◆ GetViewsArea() [1/2]

int EdbRunAccess::GetViewsArea ( int  ud,
TArrayI &  entr,
float  xmin,
float  xmax,
float  ymin,
float  ymax 
)

650 {
651  // get all views in a given limits
652 
653  int nv=0;
654  if(ud<0) return nv; if(ud>2) return nv;
655 
656  EdbPattern *pat=GetVP(ud);
657  if(!pat) return nv;
658  EdbSegP *seg=0;
659  for( int i=0; i<pat->N(); i++ ) {
660  seg = pat->GetSegment(i);
661  if(seg->X()<xmin) continue;
662  if(seg->X()>xmax) continue;
663  if(seg->Y()<ymin) continue;
664  if(seg->Y()>ymax) continue;
665  entr[nv++]=seg->ID();
666  }
667  return nv;
668 }
float xmin
Definition: emthickness.cpp:61
float ymin
Definition: emthickness.cpp:63
float xmax
Definition: emthickness.cpp:61
float ymax
Definition: emthickness.cpp:63

◆ GetViewsArea() [2/2]

int EdbRunAccess::GetViewsArea ( int  ud,
TArrayI &  entr,
int  area,
float &  xmin,
float &  xmax,
float &  ymin,
float &  ymax 
)

623 {
624  // get all views of "area" for the side "ud"; fill entr with the entries,
625  // calculate area limits
626 
627  int nv=0;
628  if(ud<0) return nv; if(ud>2) return nv;
629 
630  EdbPattern *pat=GetVP(ud);
631  if(!pat) return nv;
632  xmin=eXmax; xmax=eXmin;
633  ymin=eYmax; ymax=eYmin;
634  EdbSegP *seg=0;
635  for( int i=0; i<pat->N(); i++ ) {
636  seg = pat->GetSegment(i);
637  if( seg->Aid(0) != area ) continue;
638  if(xmin>seg->X()) xmin=seg->X();
639  if(xmax<seg->X()) xmax=seg->X();
640  if(ymin>seg->Y()) ymin=seg->Y();
641  if(ymax<seg->Y()) ymax=seg->Y();
642  entr[nv++]=seg->ID();
643  }
644  return nv;
645 }
Float_t eYmin
Definition: EdbRunAccess.h:70
Float_t eXmin
Definition: EdbRunAccess.h:70
Float_t eYmax
Definition: EdbRunAccess.h:70
Float_t eXmax
Definition: EdbRunAccess.h:70
Double_t X
Definition: tlg2pattern.C:77
Double_t Y
Definition: tlg2pattern.C:77

◆ GetViewsAreaMarg()

int EdbRunAccess::GetViewsAreaMarg ( int  ud,
TArrayI &  entr,
int  area,
float  xmarg,
float  ymarg 
)

673 {
674  // return area views with margins
675  // ud: 0-base, 1-down, 2-up //TODO - to check this convention!
676 
677  int nv=0;
678  if(ud<0 || ud>2) return nv;
679  EdbPattern *pat=GetVP(ud);
680  if(!pat) return nv;
681 
682  EdbPattern ptmp;
683  EdbSegP *seg=0;
684  int N=pat->N();
685  for( int i=0; i<N; i++ ) {
686  seg = pat->GetSegment(i);
687  if( seg->Aid(0) == area ) ptmp.AddSegment( *seg );
688  }
689 
690  float xmin = ptmp.Xmin();
691  float xmax = ptmp.Xmax();
692  float ymin = ptmp.Ymin();
693  float ymax = ptmp.Ymax();
694 
695  for( int i=0; i<N; i++ ) {
696  seg = pat->GetSegment(i);
697  if( seg->X() < xmin-xmarg ) continue;
698  if( seg->X() > xmax+xmarg ) continue;
699  if( seg->Y() < ymin-ymarg ) continue;
700  if( seg->Y() > ymax+ymarg ) continue;
701  entr[nv++] = seg->ID();
702  }
703 
704  return nv;
705 }
virtual Float_t Xmax() const
Definition: EdbVirtual.cxx:195
virtual Float_t Ymin() const
Definition: EdbVirtual.cxx:205
virtual Float_t Xmin() const
Definition: EdbVirtual.cxx:185
virtual Float_t Ymax() const
Definition: EdbVirtual.cxx:215

◆ GetViewsXY()

int EdbRunAccess::GetViewsXY ( int  ud,
TArrayI &  entr,
float  x,
float  y,
float  rv = 200. 
)

290 {
291  // return all views in rv-surrounds of the x-y point
292  int nv=0;
293  if(ud<0||ud>2) return nv;
294  EdbPattern *pat=GetVP(ud);
295  if(!pat) return nv;
296  EdbSegP *seg=0;
297  float r;
298  for( int i=0; i<pat->N(); i++ ) {
299  seg = pat->GetSegment(i);
300  r = Sqrt( (seg->X()-x)*(seg->X()-x)+(seg->Y()-y)*(seg->Y()-y));
301  if( r>rv ) continue;
302  entr[nv++] = seg->ID();
303  }
304  return nv;
305 }

◆ GetVolumeArea()

int EdbRunAccess::GetVolumeArea ( EdbPatternsVolume &  vol,
int  area 
)

401 {
402  // get raw segments as a volume for the given "area"
403 
404  int maxA=10000; //TODO
405  TArrayI entr1(maxA);
406  float xmin,xmax,ymin,ymax;
407  int n1 = GetViewsArea( 1, entr1, area, xmin,xmax,ymin,ymax);
408  TArrayI entr2(maxA);
409  xmin -= eXstep[1]+eXstep[1]/10.;
410  xmax += eXstep[1]+eXstep[1]/10.;
411  ymin -= eYstep[1]+eYstep[1]/10.;
412  ymax += eYstep[1]+eYstep[1]/10.;
413  int n2 = GetViewsArea( 2, entr2, xmin,xmax,ymin,ymax );
414  // int n2 = GetViewsAreaMarg( 2, entr2, area, eXstep+eXstep/10.,eYstep+eYstep/10. );
415 
416  printf("n1=%d n2=%d\n",n1,n2);
417 
418  TArrayI eall(n1+n2);
419  int ic=0;
420  for(int i=0; i<n1; i++) eall[ic++]=entr1[i];
421  for(int i=0; i<n2; i++) eall[ic++]=entr2[i];
422 
423  TArrayI ind(ic);
424  TArrayI srt(ic);
425  TMath::Sort(ic,eall.GetArray(),ind.GetArray(),0);
426  for (int i=0; i<ic; i++) srt[i] = eall[ind[i]];
427 
428  int nrej=-1;
429  int nseg = GetVolumeData(vol, ic, srt, nrej);
430 
431 #ifdef _WINDOWS
432  Log(2,"GetVolumeArea","Area:%3d (%3.0f %%) views:%4d/%4d %6d +%6d segments are accepted; %6d - rejected"
433 #else
434  Log(2,"GetVolumeArea","Area:%3d (%3.0f \%%) views:%4d/%4d %6d +%6d segments are accepted; %6d - rejected"
435 #endif
436  ,area, 100.*area/eNareas
437  ,n1,n2
438  ,vol.GetPattern(0)->N()
439  ,vol.GetPattern(1)->N()
440  ,nrej );
441 
442  if(nseg != vol.GetPattern(0)->N()+vol.GetPattern(1)->N())
443  Log(2,"GetVolumeArea","WARNING!!! nseg = %d != %d\n", nseg,vol.GetPattern(0)->N()+vol.GetPattern(1)->N());
444  return ic;
445 }
EdbPatternsVolume * vol
Definition: RecDispNU.C:116
EdbPattern * GetPattern(int id) const
Definition: EdbPattern.cxx:1887
int GetViewsArea(int ud, TArrayI &entr, int area, float &xmin, float &xmax, float &ymin, float &ymax)
Definition: EdbRunAccess.cxx:621
int GetVolumeData(EdbPatternsVolume &vol, int nviews, TArrayI &srt, int &nrej)
Definition: EdbRunAccess.cxx:459

◆ GetVolumeData()

int EdbRunAccess::GetVolumeData ( EdbPatternsVolume &  vol,
int  nviews,
TArrayI &  srt,
int &  nrej 
)

463 {
464  // get raw segments as a volume for the given array of entries
465 
466  EdbSegP segP;
467  EdbView *view = eRun->GetView();
468  int side;
469  int nseg=0;
470  nrej=0;
471  int entry;
472  int nsegV;
473 
474  for(int iu=0; iu<nviews; iu++) {
475  entry = srt[iu];
476  if(eCLUST) {
477  view = eRun->GetEntry(entry,1,1,1);
478  view->AttachClustersToSegments();
479  }
480  else view = eRun->GetEntry(entry);
481 
482  nsegV = view->Nsegments();
483  side = ViewSide(view);
484 
485  //printf(" EdbRunAccess::GetVolumeData: %d nsegV = %d side=%d\n",iu, nsegV,side);
486  if(side<1||side>2) continue;
487 
488  //vol.Print();
489  for(int j=0;j<nsegV;j++) {
490  if(!AcceptRawSegment(view,j,segP,side,entry)) {
491  nrej++;
492  continue;
493  }
494  nseg++;
495  vol.GetPattern(side-1)->AddSegment( segP);
496  }
497  }
498 
499  //printf("nseg: %d \t rejected: %d\n", nseg, nrej );
500 
503  return nseg;
504 }
void SetSegmentsZ()
Definition: EdbPattern.cxx:275

◆ GetVolumeXY()

int EdbRunAccess::GetVolumeXY ( EdbSegP &  s,
EdbPatternsVolume &  vol 
)

333 {
334  // assuming s as the prediction in plate RS (also Z), fill vol with the segments
335  // of closest up and down views
336  // todo: Z of layers must be setted!
337 
338  TArrayI entr(2);
339  float x,y;
340  x = s.X()+ (eLayers[1]->Z()-s.Z())*s.TX();
341  y = s.Y()+ (eLayers[1]->Z()-s.Z())*s.TY();
342  entr[0] = GetEntryXY(1,x,y);
343  //printf(":GetVolumeXY: 1 %f %f \n",x,y);
344 
345  x = s.X()+ (eLayers[2]->Z()-s.Z())*s.TX();
346  y = s.Y()+ (eLayers[2]->Z()-s.Z())*s.TY();
347  entr[1] = GetEntryXY(2,x,y);
348  //printf(":GetVolumeXY: 2 %f %f \n",x,y);
349 
350  //printf("EdbRunAccess::GetVolumeXY: entr = %d %d\n",entr[0],entr[1]);
351  int nrej=0;
352  return GetVolumeData(vol,2,entr,nrej);
353 }
int GetEntryXY(int ud, float x, float y)
Definition: EdbRunAccess.cxx:309

◆ GetVP()

EdbPattern* EdbRunAccess::GetVP ( int  ud) const
inline
129 { if(ud>-1&&ud<3) return eVP[ud]; else return 0; }

◆ GuessNviewsPerArea()

void EdbRunAccess::GuessNviewsPerArea ( )

169 {
170  eNviewsPerArea = 0;
171  int nviews=eRun->GetEntries();
172  if(!nviews) return;
173 
174  int nareas=0;
175  int idmin = kMaxInt;
176  int idmax = kMinInt;
177  for(int iview=0; iview<nviews; iview++) {
178  int aid = eRun->GetEntry(iview,1,0,0,0,0)->GetAreaID();
179  if(aid>idmax)
180  {
181  idmax=aid;
182  nareas++;
183  }
184  if(aid<idmin) idmin=aid;
185  }
186  eNareas=nareas;
187  eFirstArea=idmin;
188  eLastArea=idmax;
189  eNviewsPerArea=nviews/eNareas/2;
190  /*
191  if( eNviewsPerArea*eNareas*2 != nviews )
192  { // try if value in run header is correct
193  int nva=0;
194  if( eRun->GetHeader() && eRun->GetHeader()->GetArea() )
195  {
196  nva = eRun->GetHeader()->GetArea()->GetN();
197  if( nva>0 && nva*eNareas*2==nviews ) eNviewsPerArea=nva;
198  }
199  }
200  */
201  if(eNviewsPerArea*eNareas*2 != nviews)
202  Log(1,"EdbRunAccess::GuessNviewsPerArea","WARNING: eNviewsPerArea*eNareas*2 != nviews: %d*%d*2 != %d",
203  eNviewsPerArea, eNareas, nviews );
204 }

◆ InitRun()

bool EdbRunAccess::InitRun ( const char *  runfile = 0,
bool  do_update = false 
)

113 {
114  if(eRun) SafeDelete(eRun);
115  if(runfile) eRunFileName=runfile;
116  if(eAFID==2) ReadVAfile();
117  if( gSystem->AccessPathName(eRunFileName.Data(), kFileExists) ) {
118  Log(1,"EdbRunAccess::InitRun","ERROR! open file: %s\n",eRunFileName.Data());
119  return false;
120  }
121  if(do_update) eRun=new EdbRun(eRunFileName.Data(),"UPDATE");
122  else eRun=new EdbRun(eRunFileName.Data());
123  if(!eRun) {Log(1,"EdbRunAccess::InitRun","ERROR! can't open file %s\n",eRunFileName.Data()); return false; }
124  if(!(eRun->GetTree())) {Log(1,"EdbRunAccess::InitRun","ERROR! Vews tree is missed %s\n",eRunFileName.Data());return false;}
125  for(int i=0; i<3; i++) if(eLayers[i]==0) GetMakeLayer(i);
126  if(eAFID==11) {
127  eRun->GetMarks()->Print();
130  else Log(1,"EdbRunAccess::InitRun","ERROR! Stage2Abs do not available (eAFID=11)");
131  }
132  if(do_update) {
133  if(FillVP()<1) return false;
134  eVP[1]->Write("views_s1");
135  eVP[2]->Write("views_s2");
136  eRun->GetTree()->GetCurrentFile()->Purge();
137  } else {
138  if( eVP[1] ) delete eVP[1];
139  if( eVP[2] ) delete eVP[2];
140  eVP[1] = dynamic_cast<EdbPattern*>(gDirectory->Get("views_s1"));
141  eVP[2] = dynamic_cast<EdbPattern*>(gDirectory->Get("views_s2"));
142  }
143 
144  int nn=0;
145  if( eVP[1] && eVP[2] ) nn = eVP[1]->N()+eVP[2]->N();
146  if(nn != eRun->GetEntries())
147  if(FillVP()<1)
148  {
149  Log(1,"EdbRunAccess::InitRun","no views accepted");
150  return false;
151  }
152  eVP[1]->Transform(eLayers[1]->GetAffineXY());
153  eVP[2]->Transform(eLayers[2]->GetAffineXY());
154  eXmin = eVP[1]->Xmin();
155  eXmax = eVP[1]->Xmax();
156  eYmin = eVP[1]->Ymin();
157  eYmax = eVP[1]->Ymax();
158 
160  if(gEDBDEBUGLEVEL>2) PrintStat();
161  for(int i=0; i<3; i++) { eXstep[i]=400; eYstep[i]=400; }
162 
163  Log(2,"EdbRunAccess::InitRun","%s AFID=%d",runfile, eAFID);
164  return true;
165 }
EdbAffine2D * Stage2Abs() const
Definition: EdbFiducial.cxx:279
void Print(Option_t *opt="") const
Definition: EdbFiducial.cxx:593
virtual void Transform(const EdbAffine2D *a)
Definition: EdbVirtual.cxx:154
void ReadVAfile()
Definition: EdbRunAccess.cxx:207
int FillVP()
Definition: EdbRunAccess.cxx:882
EdbLayer * GetMakeLayer(int id)
Definition: EdbRunAccess.cxx:280
void GuessNviewsPerArea()
Definition: EdbRunAccess.cxx:168
void PrintStat()
Definition: EdbRunAccess.cxx:708
EdbMarksSet * GetMarks() const
Definition: EdbRun.h:119
gEDBDEBUGLEVEL
Definition: energy.C:7

◆ InitRunFromRWC()

bool EdbRunAccess::InitRunFromRWC ( char *  rwcname,
bool  bAddRWD = true,
const char *  options = "" 
)

248 {
249  if(!eRun)
250  if( gSystem->AccessPathName(rwcname, kFileExists) ) {
251  Log(1,"EdbRunAccess::InitRunFromRWC","ERROR open file: %s\n",rwcname);
252  return false;
253  }
254  eRun=new EdbRun(eRunFileName.Data(),"RECREATE");
255  if(!eRun) return false;
256 
257  AddRWC(eRun, rwcname, bAddRWD, options);
258 
259  return true;
260 }
int AddRWC(EdbRun *run, char *rwcname, int bAddRWD, const char *options)
Definition: libDataConversion.cpp:64

◆ LastArea()

int EdbRunAccess::LastArea ( ) const
inline
132 { return eLastArea;}

◆ NCuts()

int EdbRunAccess::NCuts ( int  ud)
inline
164  {
165  if(!eCuts[ud]) return 0;
166  return eCuts[ud]->GetEntriesFast();
167  }

◆ OverlapX()

float EdbRunAccess::OverlapX ( int  ud)
inline
191 {return (ud>0&&ud<3)? (eViewXmax[ud]-eViewXmin[ud] - eXstep[ud]): 0.; }

◆ OverlapY()

float EdbRunAccess::OverlapY ( int  ud)
inline
192 {return (ud>0&&ud<3)? (eViewYmax[ud]-eViewYmin[ud] - eYstep[ud]): 0.; }

◆ PassCuts()

bool EdbRunAccess::PassCuts ( int  id,
EdbSegment &  seg 
)

1172 {
1173  float var[5];
1174  var[0] = seg.GetX0();
1175  var[1] = seg.GetY0();
1176  var[2] = seg.GetTx();
1177  var[3] = seg.GetTy();
1178  var[4] = SegmentWeight(seg);
1179 
1180  int nc = NCuts(id);
1181  for(int i=0; i<nc; i++) {
1182  if( !(GetCut(id,i)->PassCut(var)) ) return false;
1183  }
1184  // score cut
1185  float t = TMath::Sqrt( seg.GetTx()*seg.GetTx() + seg.GetTy()*seg.GetTy() );
1186  if(seg.GetSigmaX()<eScoreCut[0]+eScoreCut[1]*t) return false;
1187  return true;
1188 }
TTree * t
Definition: check_shower.C:4
EdbSegmentCut * GetCut(int ud, int i)
Definition: EdbRunAccess.h:176
int NCuts(int ud)
Definition: EdbRunAccess.h:164

◆ Print()

void EdbRunAccess::Print ( )

104 {
105  printf(" EdbRunAccess: eAFID=%d eCLUST=%d\n",eAFID, eCLUST );
106  printf("file: %s\n", eRunFileName.Data());
107  for(int i=0; i<3; i++)
108  if(eLayers[i]) eLayers[i]->Print();
109  }
void Print()
Definition: EdbLayer.cxx:150

◆ PrintStat()

void EdbRunAccess::PrintStat ( )

709 {
710  if(!eRun) return;
711 
712  printf("\nSome run statistics:\n");
713  printf( "--------------------\n");
714  int nviews=eRun->GetEntries();
715  EdbRunHeader *header = eRun->GetHeader();
716  if(header) eNareas=header->GetNareas();
717  printf("entries : %d\n", nviews );
718  printf("areas : %d in the range: ( %d : %d )\n",
720  int var=0;
721  if(eNareas>0) {
722  var = nviews/eNareas;
723  printf("views/area : %d (%d/side)\n", var, var/2 );
724  }
725  if(var*eNareas != nviews) printf("\t WARNING: areas are not equal\n");
726 
727  for(int ud=0; ud<3; ud++) {
728  EdbPattern *pat=GetVP(ud);
729  int nempty=0;
730  if(pat) {
731  printf( "side:%d xmin,xmax = %f %f ymin,ymax = %f %f\n",
732  ud,
733  pat->Xmin(),
734  pat->Xmax(),
735  pat->Ymin(),
736  pat->Ymax()
737  );
738  nempty = CheckEmptyViews(*pat);
739  if(nempty>0) printf("\t WARNING: %d empty views in layer %d\n",nempty,ud);
740  }
741  }
742  printf("\n");
743 }
Definition: EdbRunHeader.h:94

◆ ReadImageMatrixCorrection() [1/2]

void EdbRunAccess::ReadImageMatrixCorrection ( EdbCell2 &  map,
const char *  file 
)

970 {
971  Log(1,"EdbRunAccess::ReadImageMatrixCorrection","from %s ",file);
972  FILE *f = fopen(file,"r");
973  if(!f) { Log(1,"EdbRunAccess::ReadImageMatrixCorrection","file %s not found!",file); return; }
974  char str[256];
975  fgets(str, 256, f);
976  int nxpix, nypix;
977  float xpix, ypix;
978  if( 4 != sscanf(str,"%d %d %f %f", &nxpix, &nypix, &xpix, &ypix)) return;
979 
980  float mi[2] = { -nxpix*Abs(xpix)/2., -nypix*Abs(ypix)/2. };
981  float ma[2] = { nxpix*Abs(xpix)/2., nypix*Abs(ypix)/2. };
982  int n[2] = { nxpix, nypix };
983  map.InitCell(2, n, mi, ma);
984  int nc=map.Ncell();
985  for( int i=0; i<nc; i++ ) {
986  TArrayD *a = new TArrayD(2);
987  map.AddObject(i, (TObject*)a );
988  map.SetBin(i,0);
989  }
990 
991  int i0,j0;
992  float x0,y0,dx0,dy0;
993  for(int i=0; i<nxpix; i++) {
994  for(int j=0; j<nypix; j++) {
995  if(fgets(str, 256, f)==NULL) Log(1,"EdbRunAccess::ReadImageMatrixCorrection","ERROR: input file too short!");
996  if( sscanf(str, "%d %d %f %f %f %f", &i0, &j0, &x0, &y0, &dx0, &dy0) == 6 )
997  {
998  TArrayD *dxy = (TArrayD *)map.GetObject(x0,y0,0);
999  (*dxy)[0]+=dx0;
1000  (*dxy)[1]+=dy0;
1001  map.Fill(x0, y0);
1002  }
1003  }
1004  }
1005  fclose(f);
1006 
1007  nc=map.Ncell();
1008  for( int i=0; i<nc; i++ ) {
1009  TArrayD *dxy = (TArrayD*)( map.GetObject(i, 0 ) ); if(!dxy) continue;
1010  int w = map.Bin(i); if(!w) continue;
1011  (*dxy)[0] /= w;
1012  (*dxy)[1] /= w;
1013  }
1014 }
void a()
Definition: check_aligned.C:59
int InitCell(EdbCell2 &c)
Definition: EdbCell2.h:170
TObject * GetObject(float x, float y, int ientr) const
Definition: EdbCell2.h:199
bool AddObject(float v[2], TObject *obj)
Definition: EdbCell2.h:176
int Ncell() const
Definition: EdbCell2.h:49
void SetBin(int ix, int iy, int n)
Definition: EdbCell2.h:91
int Bin(float x, float y) const
Definition: EdbCell2.h:80
fclose(pFile)
#define NULL
Definition: nidaqmx.h:84
void w(int rid=2, int nviews=2)
Definition: test.C:27

◆ ReadImageMatrixCorrection() [2/2]

void EdbRunAccess::ReadImageMatrixCorrection ( int  side,
const char *  file 
)

964 {
966 }
void ReadImageMatrixCorrection(int side, const char *file)
Definition: EdbRunAccess.cxx:963

◆ ReadVAfile()

void EdbRunAccess::ReadVAfile ( )

208 {
209  int k = eRunFileName.Length();
210  TString s(eRunFileName.Data(),k-4); s+="va.root";
211  Log( 2,"EdbRunAccess::ReadVAfile","Get view corrections from %s",s.Data() );
212  std::unique_ptr<TFile> f(TFile::Open(s.Data(),"READ"));
213  if (!f || f->IsZombie()) Log(1,"EdbRunAccess::ReadVAfile","ERROR! can not open file %s",s.Data());
214  else eViewCorr = (TObjArray*)f->Get("viewcorr");
215 }

◆ SegmentWeight()

float EdbRunAccess::SegmentWeight ( const EdbSegment &  s)

1047 {
1048  if (eWeightAlg==1) return Sqrt(s.GetPuls()*s.GetSigmaY()/2.);
1049  else if(eWeightAlg==2) return s.GetSigmaX();
1050  return s.GetPuls();
1051 }

◆ Set0()

void EdbRunAccess::Set0 ( )

62 {
63  eRun=0;
64  for(int i=0; i<3; i++) {
65  eVP[i]=0;
66  eLayers[i]=0;
67  eCuts[i]=0;
68  eCond[i]=0;
69  }
70  eScoreCut[0]=-1.e10;
71  eScoreCut[1]= 0;
72  eAFID=0;
73  eCLUST=0;
74  eFirstArea = 9999999;
75  eLastArea = 0;
76  eNareas=0;
79  eUseExternalSurface=false;
80  eDoViewAnalysis=true;
81  eHViewXY[1].InitH2(500,-250,250, 500, -250, 250);
82  eHViewXY[2].InitH2(500,-250,250, 500, -250, 250);
83  eDoImageCorr=0;
84  eHeaderCut="1";
85  eTracking=-1;
86  eWeightAlg=0;
87  eViewCorr = 0;
88  eAffStage2Abs=0;
89  eInvertSides=0;
90  for(int i=0; i<4; i++) eGraphZ[i] = 0;
91  for(int i=0; i<3; i++) eGraphDZ[i] = 0;
92 }
int InitH2(const EdbH2 &h)
Definition: EdbCell2.cpp:79
Bool_t eInvertSides
Definition: EdbRunAccess.h:31

◆ SetCond()

void EdbRunAccess::SetCond ( int  ud,
EdbScanCond &  cond 
)
inline
180  {
181  if(ud<0) return;
182  if(ud>2) return;
183  if(eCond[ud]) delete (eCond[ud]);
184  (eCond[ud]) = new EdbScanCond(cond);
185  }

◆ SetCutBottom()

void EdbRunAccess::SetCutBottom ( int  side,
float  wmin 
)

240 {
241  float xmin[5]={ eViewXmin[side] + OverlapX(side), eViewYmin[side] , -1, -1, wmin};
242  float xmax[5]={ eViewXmax[side] - OverlapX(side), eViewYmin[side]+ OverlapY(side), 1, 1, 50};
243  ClearCuts(); AddSegmentCut(side,1,xmin,xmax);
244 }
void ClearCuts()
Definition: EdbRunAccess.cxx:95
float OverlapX(int ud)
Definition: EdbRunAccess.h:191
float OverlapY(int ud)
Definition: EdbRunAccess.h:192

◆ SetCutLeft()

void EdbRunAccess::SetCutLeft ( int  side,
float  wmin 
)

219 {
220  float xmin[5]={ eViewXmin[side] , eViewYmin[side], -1, -1, wmin};
221  float xmax[5]={ eViewXmin[side] + OverlapX(side), eViewYmax[side], 1, 1, 50};
222  ClearCuts(); AddSegmentCut(side,1,xmin,xmax);
223 }

◆ SetCutRight()

void EdbRunAccess::SetCutRight ( int  side,
float  wmin 
)

226 {
227  float xmin[5]={ eViewXmax[side] - OverlapX(side), eViewYmin[side], -1, -1, wmin};
228  float xmax[5]={ eViewXmax[side] , eViewYmax[side], 1, 1, 50};
229  ClearCuts(); AddSegmentCut(side,1,xmin,xmax);
230 }

◆ SetCutTop()

void EdbRunAccess::SetCutTop ( int  side,
float  wmin 
)

233 {
234  float xmin[5]={ eViewXmin[side] + OverlapX(side), eViewYmax[side] - OverlapY(side), -1, -1, wmin};
235  float xmax[5]={ eViewXmax[side] - OverlapX(side), eViewYmax[side] , 1, 1, 50};
236  ClearCuts(); AddSegmentCut(side,1,xmin,xmax);
237 }

◆ SetImageCorrection()

void EdbRunAccess::SetImageCorrection ( int  side,
const char *  str 
)

1018 {
1019  // fedra.link.ImageCorrSideX: scaleX scaleY rot
1020  float scaleX, scaleY, rot;
1021  if( 3 == sscanf(str,"%f %f %f", &scaleX, &scaleY, &rot) )
1022  {
1023  if(!(side>0&&side<3)) Log(1,"EdbRunAccess::SetImageCorrection:", "side %d out of range!", side);
1024  else
1025  {
1026  eImageCorr[side].ZoomX(scaleX);
1027  eImageCorr[side].ZoomY(scaleY);
1028  eImageCorr[side].Rotate(rot);
1029  }
1030  }
1031  Log(2,"EdbRunAccess::SetImageCorrection","%s",str);
1032 }
void ZoomX(float k)
Definition: EdbAffine.h:60
void ZoomY(float k)
Definition: EdbAffine.h:61
void Rotate(float angle)
Definition: EdbAffine.cxx:383

◆ SetImageCorrectionAff()

void EdbRunAccess::SetImageCorrectionAff ( int  side,
const char *  str 
)

1036 {
1037  // fedra.link.ImageCorrSideX: a11 a12 a21 a22 b1 b2
1038  if(!(side>0&&side<3))
1039  Log(1,"EdbRunAccess::SetImageCorrection:", "side %d out of range!", side);
1040  else
1041  eImageCorr[side].Set(str);
1042  Log(2,"EdbRunAccess::SetImageCorrectionAff","%s",str);
1043 }
void Set(EdbAffine2D &a)
Definition: EdbAffine.h:36

◆ SetScoreCut() [1/2]

void EdbRunAccess::SetScoreCut ( const char *  cut)
inline
118 { float a,b; sscanf(cut,"%f %f",&a,&b); SetScoreCut(a,b); }
TCut cut
Definition: check_shower.C:6
void SetScoreCut(const char *cut)
Definition: EdbRunAccess.h:118

◆ SetScoreCut() [2/2]

void EdbRunAccess::SetScoreCut ( float  a,
float  b 
)
inline
119 { eScoreCut[0]=a; eScoreCut[1]=b; }

◆ SetSegmentAtExternalSurface()

bool EdbRunAccess::SetSegmentAtExternalSurface ( EdbSegment *  seg,
int  side 
)

1298 {
1299  // set the segment coordinates correspondent to the cluster coord with maximal Z
1300  // assumed that clusters are attached to segments
1301  TObjArray *clusters = seg->GetElements();
1302  if(!clusters) return false;
1303  int ncl = clusters->GetLast()+1;
1304  EdbCluster *cl=0, *clZ=(EdbCluster*)clusters->At(0);
1305  for(int i=0; i<ncl; i++ ) {
1306  cl = (EdbCluster*)clusters->At(i);
1307  if (side==1) { if( clZ->Z() < cl->Z() ) clZ=cl; } //side=1: top use point of max Z
1308  else if(side==2) { if( clZ->Z() > cl->Z() ) clZ=cl; } //side=2: bottom use point of min Z
1309  }
1310  seg->SetX0(clZ->X());
1311  seg->SetY0(clZ->Y());
1312  seg->SetZ0(clZ->Z());
1313  return true;
1314 }
virtual Float_t Z() const
Definition: EdbCluster.h:80
virtual void SetX0(float x)
Definition: EdbSegment.h:44
virtual void SetZ0(float z)
Definition: EdbSegment.h:46
virtual void SetY0(float y)
Definition: EdbSegment.h:45

◆ ViewSide()

int EdbRunAccess::ViewSide ( const EdbView *  view) const

449 {
450  int side=0;
451  if( view->GetNframesTop()==0) side=2; // 2- bottom
452  else if(view->GetNframesBot()==0) side=1; // 1- top
453  else return 0;
454  if(eInvertSides) side = 3-side;
455  return side;
456 }
Int_t GetNframesTop() const
Definition: EdbView.h:207
Int_t GetNframesBot() const
Definition: EdbView.h:208

◆ ViewX()

float EdbRunAccess::ViewX ( const EdbView *  view) const
inline
158 {return view->GetXview();} // todo

◆ ViewY()

float EdbRunAccess::ViewY ( const EdbView *  view) const
inline
159 {return view->GetYview();} // todo

Member Data Documentation

◆ eAffStage2Abs

EdbAffine2D* EdbRunAccess::eAffStage2Abs
private

◆ eAFID

Int_t EdbRunAccess::eAFID

◆ eCLUST

Int_t EdbRunAccess::eCLUST

◆ eCond

EdbScanCond* EdbRunAccess::eCond[3]
private

◆ eCorrMap

EdbCell2 EdbRunAccess::eCorrMap[3]

◆ eCutGR

Float_t EdbRunAccess::eCutGR
private

◆ eCuts

TObjArray* EdbRunAccess::eCuts[3]
private

◆ eDoImageCorr

Int_t EdbRunAccess::eDoImageCorr

◆ eDoImageMatrixCorr

Int_t EdbRunAccess::eDoImageMatrixCorr

◆ eDoViewAnalysis

Bool_t EdbRunAccess::eDoViewAnalysis

◆ eFirstArea

Int_t EdbRunAccess::eFirstArea
private

◆ eGraphDZ

TGraph2D* EdbRunAccess::eGraphDZ[3]

keep z1/z2/z3/z4 surfaces using eZ1/eZ2/eZ3/eZ4 for each view

◆ eGraphZ

TGraph2D* EdbRunAccess::eGraphZ[4]

◆ eHeaderCut

TCut EdbRunAccess::eHeaderCut

◆ eHViewXY

EdbH2 EdbRunAccess::eHViewXY[3]

◆ eImageCorr

EdbAffine2D EdbRunAccess::eImageCorr[3]

◆ eInvertSides

Bool_t EdbRunAccess::eInvertSides

◆ eLastArea

Int_t EdbRunAccess::eLastArea
private

◆ eLayers

EdbLayer* EdbRunAccess::eLayers[3]
private

◆ eNareas

Int_t EdbRunAccess::eNareas
private

◆ eNviewsPerArea

Int_t EdbRunAccess::eNviewsPerArea
private

◆ eRun

EdbRun* EdbRunAccess::eRun
private

◆ eRunFileName

TString EdbRunAccess::eRunFileName
private

keep the base/layer1/layer2 thickness calculated using eZ1/eZ2/eZ3/eZ4 for each view

◆ eScoreCut

Float_t EdbRunAccess::eScoreCut[2]
private

corrections obtained from the views alignment

◆ eTracking

Int_t EdbRunAccess::eTracking

◆ eUseDensityAsW

Bool_t EdbRunAccess::eUseDensityAsW

◆ eUseExternalSurface

Bool_t EdbRunAccess::eUseExternalSurface

◆ eViewCorr

TObjArray* EdbRunAccess::eViewCorr
private

◆ eViewXmax

Float_t EdbRunAccess::eViewXmax[3]
private

◆ eViewXmin

Float_t EdbRunAccess::eViewXmin[3]
private

◆ eViewYmax

Float_t EdbRunAccess::eViewYmax[3]
private

◆ eViewYmin

Float_t EdbRunAccess::eViewYmin[3]
private

◆ eVP

EdbPattern* EdbRunAccess::eVP[3]
private

◆ eWeightAlg

Int_t EdbRunAccess::eWeightAlg

◆ eXmax

Float_t EdbRunAccess::eXmax
private

◆ eXmin

Float_t EdbRunAccess::eXmin
private

◆ eXstep

Float_t EdbRunAccess::eXstep[3]
private

◆ eYmax

Float_t EdbRunAccess::eYmax
private

◆ eYmin

Float_t EdbRunAccess::eYmin
private

◆ eYstep

Float_t EdbRunAccess::eYstep[3]
private

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