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:95
EdbView * GetView() const
Definition: EdbRun.h:110
EdbRunHeader * GetHeader() const
Definition: EdbRun.h:138
void AddView()
Definition: EdbRun.cxx:305
Base scanning data object: entry into Run tree.
Definition: EdbView.h:134
EdbRun * run
Definition: check_raw.C:38
fclose(pFile)
@ Header
Definition: tlg2couples.C:53
Definition: tlg2couples.C:65
Int_t View
Definition: tlg2couples.C:135
Definition: tlg2couples.C:89
#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)
members access functions
Definition: EdbFiducial.cxx:716
EdbMarksBox * GetAbsolute() const
Definition: EdbFiducial.h:109
EdbMarksBox * GetStage() const
Definition: EdbFiducial.h:110
virtual Float_t X() const
Definition: EdbVirtual.h:165
EdbMarksSet * GetMarks() const
Definition: EdbRun.h:120
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:424
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
void SetNareas(int n)
Definition: EdbRunHeader.h:134
Int_t GetNareas() const
Definition: EdbRunHeader.h:148
segment of the track
Definition: EdbSegment.h:63
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:93
void SetSigma(float sx, float sy)
Definition: EdbSegment.h:85
view identification
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
EdbCluster * AddCluster(EdbCluster *c)
Definition: EdbView.h:225
void AddFrame(int id, float z, int ncl=0, int npix=0)
Definition: EdbView.cxx:268
void Clear()
Definition: EdbView.cxx:79
int ReadFragment(void **ppData, char *name)
Definition: dataIO.cpp:89
TTree * t
Definition: check_shower.C:4
s
Definition: check_shower.C:55
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

◆ 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::@28 Config
long CountOfItems
Definition: Config.h:11
Definition: vscan_ds.h:34
SySalConfig Config
Definition: vscan_ds.h:36