FEDRA emulsion software from the OPERA Collaboration
edb2rwc.cpp File Reference
#include "TCut.h"
#include "TEventList.h"
#include "Riostream.h"
#include "EdbFrame.h"
#include "libDataConversion.h"
Include dependency graph for edb2rwc.cpp:

Functions

int BackConversion (EdbRun *run, char *rwcname)
 
int DumpRWC (EdbRun *run, char *rwcname)
 
int DumpRWD (EdbRun *run, char *rwcname, int fragID, IO_VS_Catalog *pCat)
 
int main (int argc, char *argv[])
 

Function Documentation

◆ BackConversion()

int BackConversion ( EdbRun run,
char *  rwcname 
)
253 {
254  IO_VS_Catalog* pCat = 0;
255  DumpRWC(run,rwcname) ;
256  cout << "save the catalog: " << rwcname << endl;
257 
258  if( ReadCatalog((void**)&pCat, (char*)rwcname) != 1)
259  {
260  cout << "Cannot read catalog --> the Fragment.Hdr.ID field will be saved as {0,0,0,0}" << endl;
261  }
262 
263  TTree* tree = (TTree* ) gDirectory->Get("Views");
264  int nfragm = tree->GetMaximum("eAreaID");
265  cout << "number of fragments: "<< nfragm << endl;
266  for(int i=0; i < nfragm; i++) DumpRWD( run, rwcname, i+1, pCat) ;
267 
268  return true;
269 }
int ReadCatalog(void **ppData, char *name)
Definition: dataIO.cpp:322
int DumpRWC(EdbRun *run, char *rwcname)
Definition: edb2rwc.cpp:231
int DumpRWD(EdbRun *run, char *rwcname, int fragID, IO_VS_Catalog *pCat)
Definition: edb2rwc.cpp:17
EdbRun * run
Definition: check_raw.C:38
Definition: vscan_ds.h:60

◆ DumpRWC()

int DumpRWC ( EdbRun run,
char *  rwcname 
)
232 {
233  // Retrieve the catalog file from the comment field of the run header
234  TObjString* objstr=0;
235  if (objstr = (TObjString*) gDirectory->Get("catalog"))
236  {
237  TString rwc = objstr->GetString();
238  ofstream out;
239  out.open(rwcname,ios::out | ios::binary);
240  out << rwc ;
241  out.close();
242  }
243  else
244  {
245  cout << "Cannot extract catalog information from the root file !" << endl;
246  return 0;
247  }
248  return 1;
249 }

◆ DumpRWD()

int DumpRWD ( EdbRun run,
char *  rwcname,
int  fragID,
IO_VS_Catalog pCat 
)
18 {
19  ISySalDataIO* iIO=0;
20  ISySalDataIO2* iIO2=0;
21  UINT Error;
22  CoInitialize(NULL);
23  CoCreateInstance(CLSID_SySalDataIO, NULL, CLSCTX_INPROC_SERVER,
24  IID_ISySalDataIO, (void **)&iIO);
25  iIO->QueryInterface(IID_ISySalDataIO2, (void**)&iIO2);
26 
27  IO_VS_Fragment2 Frag2;
28 
29  //SET THE EVENT LIST
30  char str[128];
31  TCut cut_t,cut_b;
32  TTree* tree = (TTree* ) gDirectory->Get("Views");
33  sprintf(str,"headers.eAreaID==%d && headers.eNframesTop!=0",fragID);
34  cut_t= str ;
35  tree->Draw(">>lst_t", cut_t);
36  TEventList *lst_t = (TEventList*)gDirectory->GetList()->FindObject("lst_t");
37  sprintf(str,"headers.eAreaID==%d && headers.eNframesBot!=0",fragID);
38  cut_b= str ;
39  tree->Draw(">>lst_b", cut_b);
40  TEventList *lst_b = (TEventList*)gDirectory->GetList()->FindObject("lst_b");
41 
42  int nviews = lst_t->GetN();
43  cout << "\t nviews (top): " << nviews << " (bot): " << lst_b->GetN() << endl;
44 
46  // VS_CATALOG_SECTION 1
47  // VS_VIEW_SECTION 2
48  // VS_TRACK_SECTION 3
49  // VS_GRAIN_SECTION 4
50  // VS_CONFIG_SECTION 5
51  // VS_FRAGMENT_SECTION 6
52  // VS_DATA_BYTES 0x30
53  // VS_HEADER_BYTES 0x60
55  // VS_OLD_HEADER_TYPE 0x701
56  // VS_HEADER_TYPE 0x702
57  if(pCat) Frag2.Hdr.ID = pCat->Hdr.ID; // <--------- from catalog
58  else Frag2.Hdr.ID.Part[0] =Frag2.Hdr.ID.Part[1] =Frag2.Hdr.ID.Part[2] =Frag2.Hdr.ID.Part[3] = 0 ;
59 
60  // Rebuild the Startview value // <--------- from catalog
61  Frag2.Fragment.StartView = 0;
62  int xf(0),yf(0);
63  if(pCat)
64  {
65  int xv(pCat->Area.XViews), yv(pCat->Area.YViews) ,
66  xf( (int) FindConfig(pCat,"Vertigo Scan", "XFields") +
67  (int) FindConfig(pCat,"Vertigo Scan 4","XFields") ),
68  yf( (int) FindConfig(pCat,"Vertigo Scan", "YFields") +
69  (int) FindConfig(pCat,"Vertigo Scan 4","YFields") );
70  if (xf!=0 && xv!=0)
71  {
72  int row = (int) (fragID -1)*xf/xv ;
73  int col0 = (fragID-1) % (xv/xf) ;
74  int col = (1-row%2)*col0 + (row%2) *(xv/xf-col0-1) ;
75  Frag2.Fragment.StartView = col*xf + row*xv*yf;
76  }
77  }
78 
79  Frag2.Fragment.CountOfViews = nviews;
80  Frag2.Fragment.CodingMode = VS_COMPRESSION_NULL ; // <--------- default
81  // VS_COMPRESSION_NULL 0
82  // VS_COMPRESSION_METHOD 0x100
83  // VS_COMPRESSION_GRAIN_SUPPRESSION (VS_COMPRESSION_METHOD + 2)
84  Frag2.Fragment.FitCorrectionDataSize = 0; // <--------- default
85 
86 
87  Frag2.Fragment.Index = fragID;
88 
89  for(int j=0;j<sizeof(Frag2.Reserved);j++) Frag2.Reserved[j] = (unsigned char) 0; // <--------- reserved = null
90  Frag2.Fragment.pViews = new VS_View2[nviews];
91 
92  EdbView* eView = run->GetView();
93  EdbViewHeader* eViewHeader = eView->GetHeader();
94  EdbSegment* eSeg=0;
95 
96  Grain* rwdGrain;
97  Track2* rwdTrack;
98  VS_View2* rwdView;
99 
100  int totsegments(0), totclusters(0);
101 
102  for (int v = 0; v < nviews; v++)
103  {
104  eView->Clear();
105  run->GetEntry(lst_t->GetEntry(v));
106 
107  rwdView = &(Frag2.Fragment.pViews[v]);
108  rwdView->TileX = eViewHeader->GetCol();
109  rwdView->TileY = eViewHeader->GetRow();
110 
111  rwdView->RelevantZs.TopExt = eViewHeader->GetZ1();
112  rwdView->RelevantZs.TopInt = eViewHeader->GetZ2();
113  rwdView->RelevantZs.BottomInt = eViewHeader->GetZ3();
114  rwdView->RelevantZs.BottomExt = eViewHeader->GetZ4();
115 
116  for (int s = 0; s < 2; s++)
117  {
118  eView->Clear();
119  s==0? run->GetEntry(lst_t->GetEntry(v),1,1,1,1,1) :
120  run->GetEntry(lst_b->GetEntry(v),1,1,1,1,1) ;
121  eView->AttachClustersToSegments() ;
122 
123  rwdView->X[s] = eViewHeader->GetXview();
124  rwdView->Y[s] = eViewHeader->GetYview();
125  rwdView->MapX[s] = eViewHeader->GetAffine()->B1();
126  rwdView->MapY[s] = eViewHeader->GetAffine()->B2();
127  rwdView->ImageMat[s][0][0] = eViewHeader->GetAffine()->A11() ;
128  rwdView->ImageMat[s][0][1] = eViewHeader->GetAffine()->A12() ;
129  rwdView->ImageMat[s][1][0] = eViewHeader->GetAffine()->A21() ;
130  rwdView->ImageMat[s][1][1] = eViewHeader->GetAffine()->A22() ;
131 
132  int nframes = eView->GetNframes() ;
133  rwdView->Layers[s].Count = nframes;
134  rwdView->Layers[s].pLayerInfo = new VS_View2::t_LayerInfo[nframes];
135 
136  for (int f = 0; f < nframes; f++)
137  {
138  EdbFrame* eFrame = (EdbFrame*) (eView->GetFrames())->At(f) ;
139  rwdView->Layers[s].pLayerInfo[f].Clusters = eFrame->GetNcl();
140  rwdView->Layers[s].pLayerInfo[f].Z = eFrame->GetZ();
141  }
142 
143  rwdView->Status[s] = 0;
144  int nsegments = eView->Nsegments() ;
145  rwdView->TCount[s] = nsegments;
146  rwdView->pTracks[s] = new Track2[nsegments] ;
147 
148  for (int t = 0; t < nsegments; t++)
149  {
150  totsegments++ ;
151  rwdTrack = &(rwdView->pTracks[s][t]);
152  eSeg = eView->GetSegment(t);
153  rwdTrack->Field = v;
154  rwdTrack->Grains = eSeg->GetPuls();
155  rwdTrack->Intercept.X = eSeg->GetX0();
156  rwdTrack->Intercept.Y = eSeg->GetY0();
157  rwdTrack->Intercept.Z = eSeg->GetZ0();
158  rwdTrack->Slope.X = eSeg->GetTx();
159  rwdTrack->Slope.Y = eSeg->GetTy();
160  rwdTrack->Slope.Z = 1.f;
161  rwdTrack->Sigma = eSeg->GetSigmaX();
162  rwdTrack->Valid = true;
163 
164  EdbCluster *eCluster=0;
165  TObjArray *eClusterArray = eSeg->GetElements();
166  int ncl = 0;
167  double zmin,zmax;
168  if(eClusterArray) ncl = eClusterArray->GetLast()+1;
169 
170  rwdTrack->AreaSum = 0;
171  rwdTrack->pGrains = new Grain[ncl];
172  for (int p = 0; p < ncl; p++)
173  {
174  totclusters++;
175  eCluster = (EdbCluster*)eClusterArray->At(p);
176  rwdGrain = &(rwdTrack->pGrains[p]);
177 
178  rwdGrain->Area = (unsigned short) eCluster->GetArea();
179  rwdTrack->AreaSum += rwdGrain->Area ;
180  rwdGrain->X = eCluster->GetX();
181  rwdGrain->Y = eCluster->GetY();
182  rwdGrain->Z = eCluster->GetZ() ;
183 
184  float z = eCluster->GetZ();
185  if(p==0) zmin=zmax= z;
186  else
187  {
188  if(z>zmax) zmax = z;
189  if(z<zmin) zmin = z;
190  }
191  rwdTrack->LastZ = zmin ;
192  rwdTrack->FirstZ = zmax ;
193  };
194  /*if (Frag2.Fragment.FitCorrectionDataSize)
195  {
196  rwdTrack->pCorrection = new BYTE[Frag2.Fragment.FitCorrectionDataSize];
197  for (p = 0; p < Frag2.Fragment.FitCorrectionDataSize; p++) rwdTrack->pCorrection[p] = rand() % 256;
198  }
199  else*/
200  rwdTrack->pCorrection = 0;
201  };
202 
203  rwdView->Status[s] = VSSCAN_NOTSCANNED; // <--------- default
204  // VSSCAN_OK 0x00 0
205  // VSSCAN_NOTOPFOCUS 0x01 1
206  // VSSCAN_NOBOTTOMFOCUS 0x02 2
207  // VSSCAN_ZLIMITER 0x04 4
208  // VSSCAN_XLIMITER 0x08 8
209  // VSSCAN_YLIMITER 0x10 16
210  // VSSCAN_TERMINATED 0x80 128
211  // VSSCAN_NOTSCANNED 0xFF 255
212  };
213  };
214 
215  // build rwd name
216  char rwdname[256], temp[256];
217  sprintf(temp, "%s", rwcname);
218  sprintf(temp+strlen(temp)-1, "d");
219  sprintf(rwdname, "%s.%08X", temp, fragID);
220 
221  cout << rwdname << " segments: "<< totsegments << "\tclusters: "<< totclusters << endl;
222  if (iIO2->Write2(0, (BYTE *)&Frag2, &Error, (UCHAR *)rwdname) != S_OK)
223  cout << "\tError Writing"<< endl;
224 
225  iIO2->Release();
226  iIO->Release();
227  return true;
228 }
FILE * f
Definition: RecDispMC.C:150
interface ISySalDataIO ISySalDataIO
Definition: SySalDataIO.h:48
interface ISySalDataIO2 ISySalDataIO2
Definition: SySalDataIO.h:54
EXTERN_C const CLSID CLSID_SySalDataIO
Definition: SySalDataIO.h:887
EXTERN_C const IID IID_ISySalDataIO2
Definition: SySalDataIO.h:726
EXTERN_C const IID IID_ISySalDataIO
Definition: SySalDataIO.h:574
const int VSSCAN_NOTSCANNED
Definition: VSRawData.linux.h:78
TTree * t
Definition: check_shower.C:4
Float_t B2() const
Definition: EdbAffine.h:48
Float_t A22() const
Definition: EdbAffine.h:46
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
Definition: EdbCluster.h:19
Float_t GetX() const
Definition: EdbCluster.h:51
Float_t GetY() const
Definition: EdbCluster.h:52
Float_t GetArea() const
Definition: EdbCluster.h:54
Float_t GetZ() const
Definition: EdbCluster.h:53
Definition: EdbFrame.h:20
float GetZ() const
Definition: EdbFrame.h:42
int GetNcl() const
Definition: EdbFrame.h:43
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
virtual Float_t GetX0() const
Definition: EdbSegment.h:37
virtual Float_t GetTx() const
Definition: EdbSegment.h:40
virtual Float_t GetZ0() const
Definition: EdbSegment.h:39
virtual Float_t GetY0() const
Definition: EdbSegment.h:38
virtual Float_t GetTy() const
Definition: EdbSegment.h:41
Definition: EdbSegment.h:61
Int_t GetPuls() const
Definition: EdbSegment.h:88
TObjArray * GetElements() const
Definition: EdbSegment.h:115
float GetSigmaX() const
Definition: EdbSegment.h:84
Definition: EdbView.h:26
Int_t GetCol() const
Definition: EdbView.h:123
Float_t GetXview() const
Definition: EdbView.h:93
Float_t GetYview() const
Definition: EdbView.h:94
EdbAffine2D const * GetAffine() const
Definition: EdbView.h:72
Float_t GetZ4() const
Definition: EdbView.h:113
Int_t GetRow() const
Definition: EdbView.h:124
Float_t GetZ2() const
Definition: EdbView.h:111
Float_t GetZ3() const
Definition: EdbView.h:112
Float_t GetZ1() const
Definition: EdbView.h:110
Definition: EdbView.h:134
EdbViewHeader * GetHeader() const
Definition: EdbView.h:163
int AttachClustersToSegments()
Definition: EdbView.cxx:360
Int_t Nsegments() const
Definition: EdbView.h:216
Int_t GetNframes() const
Definition: EdbView.h:206
TClonesArray * GetFrames() const
Definition: EdbView.h:167
EdbSegment * GetSegment(int i) const
Definition: EdbView.h:219
void Clear()
Definition: EdbView.cxx:79
double FindConfig(IO_VS_Catalog *pCat, char *ConfigName, char *ConfigItem)
Definition: libDataConversion.cpp:43
EdbSegment * eSeg
Definition: EdbViewRec.cxx:850
#define NULL
Definition: nidaqmx.h:84
Definition: Struct.h:33
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
WORD HeaderFormat
Definition: id.h:15
BYTE InfoType
Definition: id.h:14
struct IO_VS_Catalog::@28 Hdr
Identifier ID
Definition: vscan_ds.h:67
int XViews
Definition: vscan_ds.h:76
struct IO_VS_Catalog::@29 Area
int YViews
Definition: vscan_ds.h:76
Definition: vscan_ds.h:106
Identifier ID
Definition: vscan_ds.h:113
unsigned char Reserved[256]
Definition: vscan_ds.h:116
IO_Header Type
Definition: vscan_ds.h:112
struct IO_VS_Fragment2::@32 Hdr
VS_Fragment2 Fragment
Definition: vscan_ds.h:115
int Part[4]
Definition: AcqPlateChanger.h:32
float Z
Definition: TVectors.h:11
float X
Definition: TVectors.h:9
float Y
Definition: TVectors.h:10
Definition: Track2.h:18
int Field
Definition: Track2.h:19
float Sigma
Definition: Track2.h:26
BYTE * pCorrection
Definition: Track2.h:23
TVector Slope
Definition: Track2.h:25
float LastZ
Definition: Track2.h:28
unsigned Grains
Definition: Track2.h:20
float FirstZ
Definition: Track2.h:27
unsigned AreaSum
Definition: Track2.h:21
boolean Valid
Definition: Track2.h:29
Grain * pGrains
Definition: Track2.h:22
TVector Intercept
Definition: Track2.h:24
int FitCorrectionDataSize
Definition: vscan_ds.h:54
int StartView
Definition: vscan_ds.h:52
VS_View2 * pViews
Definition: vscan_ds.h:56
int Index
Definition: vscan_ds.h:51
int CountOfViews
Definition: vscan_ds.h:53
int CodingMode
Definition: vscan_ds.h:55
Definition: VSRawData.h:48
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]
unsigned char Status[2]
Definition: VSRawData.h:57
struct VS_View2::t_RelevantZs2 RelevantZs
int TileX
Definition: VSRawData.h:36
p
Definition: testBGReduction_AllMethods.C:8
EdbSegP * s
Definition: tlg2pattern.C:32
#define VS_COMPRESSION_NULL
Definition: vscan_ds.h:28
#define VS_FRAGMENT_SECTION
Definition: vscan_ds.h:20
const int VS_HEADER_TYPE
Definition: vscan_ds.linux.h:28
const int VS_HEADER_BYTES
Definition: vscan_ds.linux.h:25

◆ main()

int main ( int  argc,
char *  argv[] 
)
273 {
274  char rwcname[256], edbname[256] ;
275 
276  bool printusage=(argc<3)?true:false;
277  for (int i = 1; i < argc; i++) { // Skip argv[0] (program name)
278  { // Process non-optional arguments here
279  sprintf(edbname,argv[i++]);
280  sprintf(rwcname,argv[i]);
281  }
282  }
283  if(printusage) {
284  cout<< "usage: edb2rwc <input file (.root)> <output file (.rwc)> "<<endl;
285  return 0;
286  };
287 
288  EdbRun* outrun;
289  outrun = new EdbRun(edbname);
290 
291  BackConversion(outrun,rwcname);
292 
293  outrun->Close();
294 
295  return 0;
296 };
Definition: EdbRun.h:74
void Close()
Definition: EdbRun.cxx:466
int BackConversion(EdbRun *run, char *rwcname)
Definition: edb2rwc.cpp:252