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();
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
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 * GetView() const
Definition: EdbRun.h:110
EdbView * GetEntry(int entry, int ih=1, int icl=0, int iseg=1, int itr=0, int ifr=0)
Definition: EdbRun.cxx:462
virtual Float_t GetX0() const
Definition: EdbSegment.h:38
virtual Float_t GetTx() const
Definition: EdbSegment.h:41
virtual Float_t GetZ0() const
Definition: EdbSegment.h:40
virtual Float_t GetY0() const
Definition: EdbSegment.h:39
virtual Float_t GetTy() const
Definition: EdbSegment.h:42
segment of the track
Definition: EdbSegment.h:63
Int_t GetPuls() const
Definition: EdbSegment.h:90
float GetSigmaX() const
Definition: EdbSegment.h:86
TObjArray * GetElements() const
Definition: EdbSegment.h:117
view identification
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
Float_t GetZ4() const
Definition: EdbView.h:113
EdbAffine2D const * GetAffine() const
Definition: EdbView.h:72
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
Base scanning data object: entry into Run tree.
Definition: EdbView.h:134
EdbViewHeader * GetHeader() const
Definition: EdbView.h:163
EdbSegment * GetSegment(int i) const
Definition: EdbView.h:219
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
void Clear()
Definition: EdbView.cxx:79
double FindConfig(IO_VS_Catalog *pCat, char *ConfigName, char *ConfigItem)
Definition: libDataConversion.cpp:43
TTree * t
Definition: check_shower.C:4
s
Definition: check_shower.C:55
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::@27 Area
Identifier ID
Definition: vscan_ds.h:67
int XViews
Definition: vscan_ds.h:76
int YViews
Definition: vscan_ds.h:76
struct IO_VS_Catalog::@26 Hdr
Definition: vscan_ds.h:106
Identifier ID
Definition: vscan_ds.h:113
unsigned char Reserved[256]
Definition: vscan_ds.h:116
struct IO_VS_Fragment2::@30 Hdr
IO_Header Type
Definition: vscan_ds.h:112
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
#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:75
void Close()
Definition: EdbRun.cxx:439
int BackConversion(EdbRun *run, char *rwcname)
Definition: edb2rwc.cpp:252