FEDRA emulsion software from the OPERA Collaboration
libDataConversion.cpp File Reference
#include <stdio.h>
#include <iostream>
#include <string.h>
#include "TSystem.h"
#include "EdbLog.h"
#include "libDataConversion.h"
#include "dataIO/dataIO.cpp"
Include dependency graph for libDataConversion.cpp:

Functions

int AddGrainsTXT (EdbRun *run, char *txtname)
 
int AddMAP (EdbRun *run, char *mapname)
 
int AddRWC (EdbRun *run, char *rwcname, int bAddRWD, const char *options)
 
int AddRWD (EdbRun *run, char *rwdname, int fragID, const char *options)
 
double FindConfig (IO_VS_Catalog *pCat, char *ConfigName, char *ConfigItem)
 

Function Documentation

◆ AddGrainsTXT()

int AddGrainsTXT ( EdbRun run,
char *  txtname 
)
341 {
342  printf("Testrun!\n");
343  FILE* grfile;
344  grfile=fopen(txtname,"r");
345 
346  int gs,gf,gTot,gn; //grains: view side frame Total index size
347  float gX,gY,gZ,ga,gv;
348 
350  Header = run->GetHeader();
351  // customize run flags:
352  // eFlag[0] = 1 - UTS data
353  // eFlag[0] = 2 - SySal data
354  // eFlag[1] = 1 - Stage coordinates
355  // eFlag[1] = 2 - Absolute (marks) coordinates
356  // eFlag[2] = 1 - real (stage) coordinates for clusters
357  // eFlag[2] = 2 - pixels coordinates for clusters
358  Header->SetFlag(0,2);
359  Header->SetFlag(1,1);
360  Header->SetFlag(2,2);
361 
362  char instr[128];
363  EdbView *View;
364  View=run->GetView();
365  View->Clear();
366  float curv=0;
367  int curs=1;
368  int curf= -9 ;
369  int curTot=0;
370 
371  int ngr=0;
372  int nfr=0;
373 
374  if(fgets(instr,128,grfile)!=NULL) //get initial side and viewID
375  {
376  sscanf(instr,"%f %d %d %f %d %d %f %f %f",&gv,&gs,&gf,&gZ,&gTot,&gn,&gX,&gY,&ga);
377  }
378  curs = gs ;
379  curv = gv ;
380  fseek(grfile,0,0);
381  printf("Reading grains from %s..\n",txtname);
382  printf("Filling view %d side %d..",int(curv),curs);
383 
384  while(fgets(instr,128,grfile)!=NULL)
385  {
386  sscanf(instr,"%f %d %d %f %d %d %f %f %f",&gv,&gs,&gf,&gZ,&gTot,&gn,&gX,&gY,&ga);
387  if ((gv!=curv)||(gs!=curs)) { // new view found
388  // ADD VIEW
389  View->GetHeader()->SetViewID((int) curv);
390  if(curs) View->GetHeader()->SetNframes(nfr, 0 ); //curs==1 top curs==0 bottom
391  else View->GetHeader()->SetNframes(0 ,nfr);
392  View->GetHeader()->SetNclusters(ngr);
393  View->GetHeader()->SetNsegments(-1);//grain view
394  run->AddView(View);
395 
396  View->Clear();
397  curv = gv ;
398  curs = gs ;
399  printf("%d clusters.\nFilling view %d side %d..",ngr,int(curv),curs);
400  ngr=0;
401  nfr=0;
402  }
403  if ( gf != curf) { // new frame found
404  View->AddFrame(curf, gZ, gTot);
405  curf = gf ;
406  curTot = gTot ;
407  nfr++;
408  }
409  View->AddCluster(gX,gY,gZ,ga,gv, nfr-1 ,gs,-2);
410  ngr++;
411  }
412 
413  // ADD LAST VIEW
414  View->GetHeader()->SetViewID((int) curv);
415  if(curs) View->GetHeader()->SetNframes(nfr, 0 ); //curs==1 top curs==0 bottom
416  else View->GetHeader()->SetNframes(0 ,nfr);
417  View->GetHeader()->SetNclusters(ngr);
418  View->GetHeader()->SetNsegments(-1); //grain view
419  run->AddView(View); //the last view
420 
421  printf("%d clusters.\n",ngr);
422  fclose(grfile);
423 
424  return true;
425 }
void gv(int n=1, int nve=100, float back1=0., float back2=0.)
Definition: RecDispMC.C:227
Definition: EdbRunHeader.h:94
EdbRunHeader * GetHeader() const
Definition: EdbRun.h:137
void AddView()
Definition: EdbRun.cxx:332
EdbView * GetView() const
Definition: EdbRun.h:109
Definition: EdbView.h:134
EdbRun * run
Definition: check_raw.C:38
fclose(pFile)
@ Header
Definition: tlg2pattern.C:54
Definition: tlg2pattern.C:66
Int_t View
Definition: tlg2pattern.C:136
Definition: tlg2pattern.C:90
#define NULL
Definition: nidaqmx.h:84

◆ AddMAP()

int AddMAP ( EdbRun run,
char *  mapname 
)
312 {
313 #ifdef _USESYSAL
314  IO_Data* pMarks = 0;
315  if (ReadMap((void**)&pMarks, (char*)mapname ) != 1) return false;
316 
317  EdbMarksBox* stage = run->GetMarks()->GetStage() ;
318  EdbMarksBox* abs = run->GetMarks()->GetAbsolute();
319 
320  int nmarks = pMarks->MkMap.Map.Count ;
321  for(int i=0;i<nmarks;i++)
322  {
323  float AbsX = pMarks->MkMap.Map.pMarks[i].Nominal.X;
324  float AbsY = pMarks->MkMap.Map.pMarks[i].Nominal.Y;
325  abs->AddMark(i,AbsX,AbsY);
326  float StageX = pMarks->MkMap.Map.pMarks[i].Stage.X;
327  float StageY = pMarks->MkMap.Map.pMarks[i].Stage.Y;
328  stage->AddMark(i,StageX,StageY);
329  }
330  FreeMemory((void**)pMarks);
331  delete pMarks ;
332  return true;
333 #else
334  cout << "IO_Data class not implemented for this op. sys. " << endl;
335  return false;
336 #endif
337 }
Definition: EdbFiducial.h:55
void AddMark(int id, float x, float y, int flag=0)
Definition: EdbFiducial.cxx:716
EdbMarksBox * GetStage() const
Definition: EdbFiducial.h:110
EdbMarksBox * GetAbsolute() const
Definition: EdbFiducial.h:109
virtual Float_t X() const
Definition: EdbVirtual.h:164
EdbMarksSet * GetMarks() const
Definition: EdbRun.h:119
int ReadMap(void **ppData, char *mapname)
Definition: dataIO.cpp:83
int FreeMemory(void **ppData)
Definition: dataIO.cpp:67
Definition: datastructs.h:16

◆ AddRWC()

int AddRWC ( EdbRun run,
char *  rwcname,
int  bAddRWD,
const char *  options 
)
65 {
66  IO_VS_Catalog* pCat = 0;
67 
68  if( gSystem->AccessPathName(rwcname, kReadPermission) ) {
69  Log(1,"AddRWC","ERROR! Can not access file %s",rwcname);
70  return 0;
71  }
72 
73  if( ReadCatalog((void**)&pCat, (char*)rwcname) != 1) return false;
74 
75  int nFragments = pCat->Area.Fragments;
76  cout<<"Hdr.ID :"
77  <<pCat->Hdr.ID.Part[0] <<"\t"
78  <<pCat->Hdr.ID.Part[1]<<"\t"
79  <<pCat->Hdr.ID.Part[2]<<"\t"
80  <<pCat->Hdr.ID.Part[3]<<endl;
81  cout<<"Options: "<<options<<endl;
82  cout<<"Fragments: "<<nFragments<<endl;
83 
85  Header = run->GetHeader();
86  // customize run flags:
87  // eFlag[0] = 1 - UTS data
88  // eFlag[0] = 2 - SySal data
89  // eFlag[1] = 1 - Stage coordinates
90  // eFlag[1] = 2 - Absolute (marks) coordinates
91  // eFlag[2] = 1 - real (stage) coordinates for clusters
92  // eFlag[2] = 2 - pixels coordinates for clusters
93  Header->SetFlag(0,2);
94  Header->SetFlag(1,1);
95  Header->SetFlag(2,1);
96 
97  Header->SetLimits(pCat->Area.XMin,pCat->Area.XMax,
98  pCat->Area.YMin,pCat->Area.YMax);
99  // fiducial coordinates
100  int lys;
101  lys=(int)FindConfig(pCat,"Vertigo Scan","VLayers");
102  Header->SetArea(pCat->Area.XViews*pCat->Area.YViews,
103  pCat->Area.XStep,pCat->Area.YStep, lys,lys,
104  0);
105  //Header->SetNareas(pCat->Area.Fragments);
106  Header->SetCCD((int) FindConfig(pCat,"Objective","Width"),
107  (int) FindConfig(pCat,"Objective","Height"),
108  -999, // physical pixel size in microns along X
109  -999, // physical pixel size in microns along Y
110  "", // es. "Dalsa CAD4"
111  ""); // es. "Bologna"
112  Header->SetObjective(-999, // magnification
113  (float)FindConfig(pCat,"Objective","Width" )*
114  fabs((float)FindConfig(pCat,"Objective","PixelToMicronX")),
115  0,0,
116  (float)FindConfig(pCat,"Objective","Height")*
117  fabs((float)FindConfig(pCat,"Objective","PixelToMicronY")),
118  0,0,
119  "", // es. "Nikon CFI - oil"
120  ""); // es, "50x"
121  Header->SetPlate(-999, // plate ID
122  (float)FindConfig(pCat,"Vertigo Scan","VStep")*
123  (float)FindConfig(pCat,"Vertigo Scan","Shrinkage"),
124  (float)FindConfig(pCat,"Vertigo Scan","BaseThickness"),
125  (float)FindConfig(pCat,"Vertigo Scan","VStep")*
126  (float)FindConfig(pCat,"Vertigo Scan","Shrinkage"),
127  (float)FindConfig(pCat,"Vertigo Scan","Shrinkage"),
128  (float)FindConfig(pCat,"Vertigo Scan","Shrinkage"),
129  "", // es. "Test Plate"
130  ""); //
131 
132  // Store the catalog file as TObjString
133  TObjString objstr ;
134  int i, ch;
135  FILE *stream;
136  if( (stream = fopen( rwcname, "rb" )) == NULL ) exit( 0 );
137  ch = fgetc( stream );
138  for( i=0; feof( stream ) == 0 ; i++ )
139  {
140  objstr.String().Append( ch );
141  ch = fgetc( stream );
142  }
143 
144  // int NviewCols = (int) FindConfig(pCat,"Vertigo Scan","XFields") ;
145  // int NviewRows = (int) FindConfig(pCat,"Vertigo Scan","YFields") ;
146  // int NfragmCols = pCat->Area.XViews / NviewCols ;
147  // int NfragmRows = pCat->Area.YViews / NviewRows ;
148 
149  fclose( stream );
150  objstr.Write("catalog");
151 
152  // Free memory
153  FreeMemory((void**)pCat);
154  delete pCat;
155 
156  run->Save() ;
157 
158  // loop on rwd files
159  if(bAddRWD)
160  {
161  char rwdname[256], temp[256];
162  for (int f = 1; f < nFragments+1; f++)
163  {
164  sprintf(temp, "%s", rwcname);
165  sprintf(temp+strlen(temp)-1, "d");
166  sprintf(rwdname, "%s.%08X", temp, f);
167  cout <<"(tot. fragm.:"<<nFragments<<") ";
168  if (! AddRWD(run, rwdname, f, options) ) continue;
169  }
170  cout <<endl;
171  }
172  return true;
173 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
FILE * f
Definition: RecDispMC.C:150
Expr< UnaryOp< Fabs< T >, Expr< A, T, D >, T >, T, D > fabs(const Expr< A, T, D > &rhs)
Definition: UnaryOperators.hh:96
void Save()
Definition: EdbRun.cxx:451
int ReadCatalog(void **ppData, char *name)
Definition: dataIO.cpp:322
double FindConfig(IO_VS_Catalog *pCat, char *ConfigName, char *ConfigItem)
Definition: libDataConversion.cpp:43
int AddRWD(EdbRun *run, char *rwdname, int fragID, const char *options)
Definition: libDataConversion.cpp:176
Definition: vscan_ds.h:60

◆ AddRWD()

int AddRWD ( EdbRun run,
char *  rwdname,
int  fragID,
const char *  options 
)
177 {
178  if( gSystem->AccessPathName(rwdname, kReadPermission) ) {
179  Log(1,"AddRWD","ERROR! Can not access file %s",rwdname);
180  return 0;
181  }
182 
183  Bool_t addcl(true);
184  Bool_t addclframe(false);
185  Bool_t addareasum(false);
186  // OPTIONS
187  if (strstr(options,"NOCL") ) addcl=false; // do not add clusters
188  if (strstr(options,"CLFRAME") ) addclframe=true; // fill clusters.eFrame branch
189  if (strstr(options,"SUM") ) addareasum=true; // encode the sum of cluster areas in the segment puls
190  // ePuls = (sum of clust areas)*1000 + (number of clusters)
191  const char *key=0;
192  int cutcl=0;
193  if( (key = strstr(options,"CUTCL")) ) sscanf(key+5,"%d",&cutcl);
194 
195  EdbView* edbView = run->GetView();
196  EdbSegment* edbSegment = new EdbSegment(0,0,0,0,0,0,0,0);
197 
198  IO_VS_Fragment2* pFrag = 0;
199  if (ReadFragment((void**)&pFrag, (char*)rwdname) != 1) return false;
200 
201  int v, s, t, p; // v=view, s=side, t=track, p=point
202  int tracks; // number of tracks in the fragment
203  int fclusters; // number of clusters in the fragment
204  int vclusters; // number of clusters in the view
205  float dz ; // z-length of the track segment
206  int tr_clusters; // number of cluster of the track
207  int puls ; // ePuls = (number of clusters ) OR (sum of clust areas)*1000 + (number of clusters)
208 
209  Track2* rwdTrack;
210  VS_View2* rwdView;
211 
212  tracks = 0;
213  fclusters = 0;
215  for (s = 0; s < 2; s++) {
216  for (v = 0; v < pFrag->Fragment.CountOfViews; v++) {
217  rwdView = &(pFrag->Fragment.pViews[v]);
218  vclusters=0;
219  tracks += rwdView->TCount[s];
220 
221  edbView->Clear();
222  EdbViewHeader* edbViewHeader = edbView->GetHeader();
223  edbViewHeader->SetAffine(rwdView->ImageMat[s][0][0],
224  rwdView->ImageMat[s][0][1],
225  rwdView->ImageMat[s][1][0],
226  rwdView->ImageMat[s][1][1],
227  rwdView->MapX[s],
228  rwdView->MapY[s]);
229  edbViewHeader->SetAreaID(run->GetHeader()->GetNareas());
230  edbViewHeader->SetCoordXY(rwdView->X[s], rwdView->Y[s]);
231  edbViewHeader->SetCoordZ(rwdView->RelevantZs.TopExt,rwdView->RelevantZs.TopInt,
232  rwdView->RelevantZs.BottomInt,rwdView->RelevantZs.BottomExt);
233 
234  if(s) edbViewHeader->SetNframes(0,rwdView->Layers[s].Count); // s==0 top , s==1 bottom
235  else edbViewHeader->SetNframes(rwdView->Layers[s].Count,0);
236 
237  edbViewHeader->SetNsegments(rwdView->TCount[s]);
238  edbViewHeader->SetViewID(v);
239  edbViewHeader->SetColRow(rwdView->TileX ,rwdView->TileY );
240 
241  int nframes = rwdView->Layers[s].Count;
242 
243  for( int nlvl=0; nlvl<nframes; nlvl++ )
244  edbView->AddFrame(nlvl,rwdView->Layers[s].pLayerInfo[nlvl].Z,
245  rwdView->Layers[s].pLayerInfo[nlvl].Clusters);
246 
247  for (t = 0; t < rwdView->TCount[s]; t++) {
248  rwdTrack = &(rwdView->pTracks[s][t]);
249  tr_clusters = rwdTrack->Grains;
250  if( cutcl>0 && tr_clusters<cutcl) continue;
251  if (addareasum) puls = rwdTrack->Grains + (2000000>rwdTrack->AreaSum?rwdTrack->AreaSum:2000000)*1000;
252  else puls = rwdTrack->Grains ;
253 
254  if ( rwdTrack->pGrains ) // fix the "null pointer to grains" bug
255  dz = rwdTrack->pGrains[0].Z - rwdTrack->pGrains[tr_clusters-1].Z;
256  else
257  dz = 0 ;
258 
259  edbSegment->Set( rwdTrack->Intercept.X,
260  rwdTrack->Intercept.Y,
261  rwdTrack->Intercept.Z,
262  rwdTrack->Slope.X,
263  rwdTrack->Slope.Y,
264  dz, s , puls, t);
265 
266  edbSegment->SetSigma(rwdTrack->Sigma,-999);
267 
268  // Add clusters
269  if (addcl && rwdTrack->pGrains ) { // rwdTrack->pGrains -> fix the "null pointer to grains" bug
270  float volume = 0;
271  int frameId = 0;
272  for ( p=0; p<tr_clusters;p++) {
273  if (addclframe) {
274  for(int nlvl=frameId;nlvl<nframes;nlvl++) {
275  if(rwdTrack->pGrains[p].Z == rwdView->Layers[s].pLayerInfo[nlvl].Z ) {
276  frameId=nlvl;
277  break;
278  }
279  }
280  }
281  edbView->AddCluster( rwdTrack->pGrains[p].X,
282  rwdTrack->pGrains[p].Y,
283  rwdTrack->pGrains[p].Z,
284  rwdTrack->pGrains[p].Area,
285  volume,
286  frameId,
287  s,t);
288  }
289  }
290  edbViewHeader->SetNclusters(vclusters);
291  edbView->AddSegment(edbSegment) ;
292  vclusters += tr_clusters;
293  } // end of tracks (t)
294  run->AddView(edbView);
295  fclusters += vclusters;
296  }; //end of views (v)
297  };//end of sides (s)
298 
299  cout<<"Fragment:"<<fragID<<"\tmicrotracks: "
300  <<tracks<<"\tclusters: "<<fclusters<<endl;
301  cout << flush;
302 
303  FreeMemory((void**)pFrag);
304 #ifndef WIN32
305  delete pFrag; // WINDOWS VISTA CRASH but on linux - memory leak!!
306 #endif
307  return true;
308 }
brick dz
Definition: RecDispMC.C:107
TTree * t
Definition: check_shower.C:4
void SetNareas(int n)
Definition: EdbRunHeader.h:133
Int_t GetNareas() const
Definition: EdbRunHeader.h:147
Definition: EdbSegment.h:61
void Set(float x, float y, float z, float tx, float ty, float dz=0, int side=0, int puls=0, int id=0)
Definition: EdbSegment.cxx:92
void SetSigma(float sx, float sy)
Definition: EdbSegment.h:83
Definition: EdbView.h:26
void SetColRow(int col, int row)
Definition: EdbView.h:105
void SetCoordZ(float z1, float z2, float z3, float z4)
Definition: EdbView.h:102
void SetNsegments(int nseg)
Definition: EdbView.h:86
void SetAreaID(int id)
Definition: EdbView.h:100
void SetViewID(int id)
Definition: EdbView.h:99
void SetNclusters(int nclu)
Definition: EdbView.h:85
void SetNframes(int top, int bot)
Definition: EdbView.h:104
void SetAffine(float a11, float a12, float a21, float a22, float b1, float b2)
Definition: EdbView.h:67
void SetCoordXY(float x, float y)
Definition: EdbView.h:101
EdbViewHeader * GetHeader() const
Definition: EdbView.h:163
EdbSegment * AddSegment(float x, float y, float z, float tx, float ty, float dz=0, int side=0, int puls=0, int id=-1)
Definition: EdbView.h:231
void AddFrame(int id, float z, int ncl=0, int npix=0)
Definition: EdbView.cxx:268
EdbCluster * AddCluster(EdbCluster *c)
Definition: EdbView.h:225
void Clear()
Definition: EdbView.cxx:79
int ReadFragment(void **ppData, char *name)
Definition: dataIO.cpp:89
TTree * tracks
Definition: check_tr.C:19
float Y
Definition: Track2.h:13
unsigned short Area
Definition: Track2.h:11
float Z
Definition: Track2.h:14
float X
Definition: Track2.h:12
Definition: vscan_ds.h:106
float Z
Definition: TVectors.h:11
float X
Definition: TVectors.h:9
float Y
Definition: TVectors.h:10
Definition: Track2.h:18
float Sigma
Definition: Track2.h:26
TVector Slope
Definition: Track2.h:25
unsigned Grains
Definition: Track2.h:20
unsigned AreaSum
Definition: Track2.h:21
Grain * pGrains
Definition: Track2.h:22
TVector Intercept
Definition: Track2.h:24
int Clusters
Definition: VSRawData.h:49
float Z
Definition: VSRawData.h:50
int Count
Definition: VSRawData.h:54
struct t_LayerInfo * pLayerInfo
Definition: VSRawData.h:55
float TopInt
Definition: VSRawData.h:43
float TopExt
Definition: VSRawData.h:42
float BottomExt
Definition: VSRawData.h:45
float BottomInt
Definition: VSRawData.h:44
Definition: VSRawData.h:35
float Y[2]
Definition: VSRawData.h:37
float MapX[2]
Definition: VSRawData.h:38
Track2 * pTracks[2]
Definition: VSRawData.h:59
float X[2]
Definition: VSRawData.h:37
float MapY[2]
Definition: VSRawData.h:38
float ImageMat[2][2][2]
Definition: VSRawData.h:39
int TCount[2]
Definition: VSRawData.h:58
int TileY
Definition: VSRawData.h:36
struct VS_View2::t_Layers2 Layers[2]
struct VS_View2::t_RelevantZs2 RelevantZs
int TileX
Definition: VSRawData.h:36
p
Definition: testBGReduction_AllMethods.C:8
EdbSegP * s
Definition: tlg2pattern.C:32

◆ FindConfig()

double FindConfig ( IO_VS_Catalog pCat,
char *  ConfigName,
char *  ConfigItem 
)
44 {
45  int CountOfConfigs = pCat->Config.CountOfConfigs;
46  VS_Config* pConfigs =pCat->Config.pConfigs;
47 
48  double dbl=0;
49  for (int j=0;j<CountOfConfigs;j++) {
50  if(! strcmp(pConfigs[j].Config.Name, ConfigName) ) {
51  for(int k=0;k<pConfigs[j].Config.CountOfItems;k++) {
52  if(! strcmp(&pConfigs[j].Config.pItems[k*128],ConfigItem) ) {
53  char* stopchar;
54  dbl = strtod(&pConfigs[j].Config.pItems[k*128+64],&stopchar);
55  break;
56  }
57  }
58  }
59  }
60  return dbl;
61 }
int CountOfConfigs
Definition: vscan_ds.h:84
VS_Config * pConfigs
Definition: vscan_ds.h:85
struct IO_VS_Catalog::@30 Config
long CountOfItems
Definition: Config.h:11
Definition: vscan_ds.h:34
SySalConfig Config
Definition: vscan_ds.h:36