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
 
EdbScanCondGetCond (int ud)
 
EdbSegmentCutGetCut (int ud, int i)
 
float GetCutGR () const
 
int GetEntryXY (int ud, float x, float y)
 
EdbLayerGetLayer (int id)
 
EdbScanCondGetMakeCond (int ud)
 
EdbLayerGetMakeLayer (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)
 
EdbSegmentGetRawSegment (EdbView &v, int sid, int rs=0)
 
EdbSegmentGetRawSegment (int vid, int sid, int rs=0)
 
EdbSegmentGetRawSegmentN (int vid, int sid, int rs=0)
 
float GetRawSegmentPix (EdbSegment *seg)
 
EdbRunGetRun () 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)
 
EdbPatternGetVP (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

EdbAffine2DeAffStage2Abs
 
EdbScanCondeCond [3]
 
Float_t eCutGR
 
TObjArray * eCuts [3]
 
Int_t eFirstArea
 
Int_t eLastArea
 
EdbLayereLayers [3]
 
Int_t eNareas
 
Int_t eNviewsPerArea
 
EdbRuneRun
 
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]
 
EdbPatterneVP [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: