/[PAMELA software]/root2paw/macros/GroundDataConvert.c
ViewVC logotype

Annotation of /root2paw/macros/GroundDataConvert.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (hide annotations) (download)
Thu Mar 9 15:46:26 2006 UTC (18 years, 8 months ago) by mocchiut
Branch: MAIN
CVS Tags: v4r00, HEAD
Changes since 1.2: +29 -7 lines
File MIME type: text/plain
Convert tracker output from software v3r02. Some small bugs fixed

1 mocchiut 1.1 //
2     // Program to convert rootples to ntuples and viceversa for the PAMELA ground data.
3     // Written by Emiliano Mocchiutti.
4     //
5 mocchiut 1.3 // Version 4.00 (2006/03/09)
6 mocchiut 1.1 //
7     // Changelog:
8     //
9 mocchiut 1.3 // 3.01 - 4.00 (2006/03/09): convert tracker software output release r3v04.
10     //
11 mocchiut 1.2 // 3.00 - 3.01 (2006/02/14): bug in the booking of the level2 tracker rootple (wrong dimension of axv and wrong dereference to image[ntrk]), fixed (thanks to Silvio Orsi).
12     //
13 mocchiut 1.1 // 2.00 - 3.00 (2005/11/29): compiled.
14     //
15     // 1.05 - 2.00 (2005/10/07): added TOF and TRIGGER level1 conversion (from PAW to ROOT).
16     //
17     // 1.04 - 1.05 (2005/10/04): tracker version 2.00 conversion.
18     //
19     // 1.03 - 1.04 (2005/09/07): small bug unloading libraries fixed.
20     //
21     // 1.02 - 1.03 (2005/08/03): changes for working on 64 bit machines.
22     //
23     // 1.01 - 1.02 (2005/07/21): don't load yodaUtility.c anymore and use clone routines in CaloFunctions.h
24     //
25     // 1.00 - 1.01 (2005/07/14): small change in the call to getLEVname (changed to be compiled).
26     //
27     // 0.1 - 1.00 (2005/07/05): working, it converts AC level1 rootples to ntuples and TRK level1 and level2 ntuples to rootples.
28     //
29     // v. 0.1 (2005/06/15): created.
30     //
31     //
32     #include <math.h>
33     #include <stdio.h>
34     //
35     #include <fstream>
36     #include <sstream>
37     #include <iostream>
38     #include <iomanip>
39     //
40     #include <ctrkstruct.h>
41     #include <ctofstruct.h>
42     #include <cacstruct.h>
43     //
44     #if !defined (__CINT__)
45     #include <event/PamelaRun.h>
46     #include <event/physics/trigger/TriggerEvent.h>
47     #include <event/physics/tof/TofEvent.h>
48     #include <event/physics/tracker/TrackerEvent.h>
49     #include <event/physics/anticounter/AnticounterEvent.h>
50     #include <event/CalibCalPedEvent.h>
51     extern const char *pathtocalibration();
52     extern void coptrklev2(const char [], struct Tracklev2 &, int &);
53     extern void cretrklev2(int &, Tracklev2 &);
54     extern void ccltrklev2(struct Tracklev2 &);
55     extern void coptrklev1(const char [], struct Tracklev1 &, int &);
56     extern void cretrklev1(int &, Tracklev1 &);
57     extern void ccltrklev1(struct Tracklev1 &);
58     extern void coptoflev1(const char [], struct Toflev1 &, int &);
59     extern void cretoflev1(int &, Toflev1 &);
60     extern void ccltoflev1(struct Toflev1 &);
61     extern void copaclev1(const char []);
62     extern void cfiaclev1(struct AClev1 &);
63     extern void cclaclev1();
64     #endif
65     //
66     //
67     #include <CaloFunctions.h>
68     //
69     #include <ctrkinclude.h>
70     #include <ctofinclude.h>
71     #include <aclev1class.h>
72    
73     int GroundDataConvert(TString filename, TString detector, TString level, TString outDir = "", Int_t FORCE = 0){
74     gROOT->GetListOfCanvases()->Delete();
75     gDirectory->GetList()->Delete();
76     #if defined (__CINT__)
77     emicheckLib();
78     #endif
79     const char* startingdir = gSystem->WorkingDirectory();
80     TString path;
81     stringcopy(path,startingdir);
82     const char *decname = detector;
83     TString level2;
84     stringcopy(level2,level);
85     const char *lev = level2;
86     Int_t lev1 = 0;
87     Int_t lev2 = 0;
88     if ( !strcmp(lev,"1") ){
89     lev1 = 1;
90     };
91     if ( !strcmp(lev,"2") ){
92     lev2 = 1;
93     };
94     Int_t TRK = 0;
95     stringstream bdir;
96     bdir.str("");
97     if ( !strcmp(decname,"tracker") ) {
98     #if defined (__CINT__)
99     const char *sdir=gSystem->Getenv("PAM_LIB");
100     if ( !strcmp(lev,"1") ){
101     bdir << sdir << "/liboptrklev1.so";
102     gSystem->Load(bdir.str().c_str());
103     bdir.str("");
104     bdir << sdir << "/liboptrklev1_C.so";
105     gSystem->Load(bdir.str().c_str());
106     bdir.str("");
107     bdir << sdir << "/libretrklev1.so";
108     gSystem->Load(bdir.str().c_str());
109     bdir.str("");
110     bdir << sdir << "/libretrklev1_C.so";
111     gSystem->Load(bdir.str().c_str());
112     bdir.str("");
113     bdir << sdir << "/libcltrklev1.so";
114     gSystem->Load(bdir.str().c_str());
115     bdir.str("");
116     bdir << sdir << "/libcltrklev1_C.so";
117     gSystem->Load(bdir.str().c_str());
118     bdir.str("");
119     };
120     if ( !strcmp(lev,"2") ){
121     bdir << sdir << "/liboptrklev2.so";
122     gSystem->Load(bdir.str().c_str());
123     bdir.str("");
124     bdir << sdir << "/liboptrklev2_C.so";
125     gSystem->Load(bdir.str().c_str());
126     bdir.str("");
127     bdir << sdir << "/libretrklev2.so";
128     gSystem->Load(bdir.str().c_str());
129     bdir.str("");
130     bdir << sdir << "/libretrklev2_C.so";
131     gSystem->Load(bdir.str().c_str());
132     bdir.str("");
133     bdir << sdir << "/libcltrklev2.so";
134     gSystem->Load(bdir.str().c_str());
135     bdir.str("");
136     bdir << sdir << "/libcltrklev2_C.so";
137     gSystem->Load(bdir.str().c_str());
138     bdir.str("");
139     };
140     #endif
141     TRK = 1;
142     };
143     Int_t AC = 0;
144     if ( !strcmp(decname,"anticounter") ) {
145     if ( strcmp(lev,"1") ) printf("WARNING: this program can convert only LEVEL1 AC rootples!\nWARNING: assuming you are meaning level=1\n");
146     lev="1";
147     lev1 = 1;
148     lev2 = 0;
149     level = "1";
150     #if defined (__CINT__)
151     const char *sdir=gSystem->Getenv("PAM_LIB");
152     bdir << sdir << "/libopaclev1.so";
153     gSystem->Load(bdir.str().c_str());
154     bdir.str("");
155     bdir << sdir << "/libopaclev1_C.so";
156     gSystem->Load(bdir.str().c_str());
157     bdir.str("");
158     bdir << sdir << "/libfiaclev1.so";
159     gSystem->Load(bdir.str().c_str());
160     bdir.str("");
161     bdir << sdir << "/libfiaclev1_C.so";
162     gSystem->Load(bdir.str().c_str());
163     bdir.str("");
164     bdir << sdir << "/libclaclev1.so";
165     gSystem->Load(bdir.str().c_str());
166     bdir.str("");
167     bdir << sdir << "/libclaclev1_C.so";
168     gSystem->Load(bdir.str().c_str());
169     bdir.str("");
170     #endif
171     AC = 1;
172     };
173     Int_t TOF = 0;
174     if ( !strcmp(decname,"tof") ) {
175     if ( strcmp(lev,"1") ) printf("WARNING: this program can convert only LEVEL1 TOF ntuples!\nWARNING: assuming you are meaning level=1\n");
176     lev="1";
177     lev1 = 1;
178     lev2 = 0;
179     level = "1";
180     #if defined (__CINT__)
181     const char *sdir=gSystem->Getenv("PAM_LIB");
182     bdir << sdir << "/liboptoflev1.so";
183     gSystem->Load(bdir.str().c_str());
184     bdir.str("");
185     bdir << sdir << "/liboptoflev1_C.so";
186     gSystem->Load(bdir.str().c_str());
187     bdir.str("");
188     bdir << sdir << "/libretoflev1.so";
189     gSystem->Load(bdir.str().c_str());
190     bdir.str("");
191     bdir << sdir << "/libretoflev1_C.so";
192     gSystem->Load(bdir.str().c_str());
193     bdir.str("");
194     bdir << sdir << "/libcltoflev1.so";
195     gSystem->Load(bdir.str().c_str());
196     bdir.str("");
197     bdir << sdir << "/libcltoflev1_C.so";
198     gSystem->Load(bdir.str().c_str());
199     bdir.str("");
200     #endif
201     TOF = 1;
202     };
203     //
204     printf("\n Check the existence of input data: \n\n");
205     //
206     Int_t isfileinput = 0;
207     stringstream ifile;
208     if ( TRK ){
209     const string fil = (const char*)filename;
210     //
211     Int_t posiz = fil.find(".rz");
212     if ( posiz == -1 ) posiz = fil.find(".RZ");
213     if ( posiz == -1 ){
214     const string fil2 = (const char*)filename;
215     Int_t nposiz = fil2.find("dw_");
216     if ( nposiz == -1 ) nposiz = fil2.find("DW_");
217     if ( nposiz == -1 ) return(5);
218     nposiz = nposiz+3;
219     Int_t nposiz2 = nposiz+10;
220     TString ufile2;
221     stringcopy(ufile2,filename,nposiz,nposiz2);
222     const char *trname = ufile2;
223     //
224     ifile << filename.Data() << "/Physics/Level";
225     ifile << lev << "/DW_";
226     ifile << trname << "_level";
227     ifile << lev << ".rz";
228     } else {
229     if ( outDir == "" ){
230     printf("ERROR: if you give as input the name of the file to convert you must give also the output directory where to store data\n");
231     printf("Exiting...\n");
232     return(6);
233     };
234     TString ufile2;
235     Int_t nposiz = posiz -1;
236     Int_t nposiz2 = posiz;
237     stringcopy(ufile2,filename,nposiz,nposiz2);
238     const char *levname = ufile2;
239     if ( strcmp(lev,levname) ){
240     printf("ERROR: you asked to process LEVEL%s data but the input file contains LEVEL%s data!\n\n Exiting... \n",lev,levname);
241     return(6);
242     };
243     ifile << filename;
244     isfileinput = 1;
245     };
246     ifstream mypawfile;
247     mypawfile.open(ifile.str().c_str());
248     if ( !mypawfile ){
249     printf("ERROR: file %s does not exist \n\n",ifile.str().c_str());
250     printf("Exiting...\n");
251     return(2);
252     };
253     printf(" OK, TRACKER input file exists \n\n");
254     };
255     //
256     if ( TOF ){
257     const string fil = (const char*)filename;
258     //
259     Int_t posiz = fil.find(".rz");
260     if ( posiz == -1 ) posiz = fil.find(".RZ");
261     if ( posiz == -1 ){
262     const string fil2 = (const char*)filename;
263     Int_t nposiz = fil2.find("dw_");
264     if ( nposiz == -1 ) nposiz = fil2.find("DW_");
265     if ( nposiz == -1 ) return(5);
266     nposiz = nposiz+3;
267     Int_t nposiz2 = nposiz+10;
268     TString ufile2;
269     stringcopy(ufile2,filename,nposiz,nposiz2);
270     const char *trname = ufile2;
271     //
272     ifile << filename.Data() << "/Physics/Level";
273     ifile << lev << "/DW_";
274     ifile << trname << "_toftrack.rz";
275     } else {
276     if ( outDir == "" ){
277     printf("ERROR: if you give as input the name of the file to convert you must give also the output directory where to store data\n");
278     printf("Exiting...\n");
279     return(6);
280     };
281     //
282     ifile << filename;
283     isfileinput = 1;
284     };
285     ifstream mypawfile;
286     mypawfile.open(ifile.str().c_str());
287     if ( !mypawfile ){
288     printf("ERROR: file %s does not exist \n\n",ifile.str().c_str());
289     printf("Exiting...\n");
290     return(2);
291     };
292     printf(" OK, TOF input file exists \n\n");
293     };
294     //
295     TFile *headerFile = 0;
296     TTree *tr = 0;
297     TFile *acFile = 0;
298     if ( AC ){
299     headerFile = emigetFile(filename, "Physics", "Header");
300     if ( !headerFile ){
301     headerFile->Close();
302     printf("No header file, exiting...\n");
303     return(1);
304     };
305     tr = (TTree*)headerFile->Get("Pscu");
306     //
307     acFile = emigetFile(filename, "Physics.Level1","Anticounter");
308     if ( !acFile ){
309     printf("ERROR: No AC file! \n Exiting... \n\n");
310     return(2);
311     };
312     printf(" OK, AC file exists \n\n");
313     tr->AddFriend("AcLevel1",acFile);
314     };
315     //
316     if ( !FORCE ) printf(" Not in FORCE mode, check the existence of output data: \n");
317     Int_t nofile = 0;
318     //
319     TString filety = "";
320     TString detc = ""; // detector
321     //
322     if ( TRK ){
323     filety = "root";
324     detc = "Tracker"; // detector
325     };
326     if ( TOF ){
327     filety = "root";
328     detc = "TofTrigger"; // detector
329     };
330     if ( AC ){
331     filety = "rz";
332     detc = "Anticounter"; // detector
333     }
334     char *file;
335     if ( !isfileinput ){
336     file = getLEVname(filename,detc,lev,filety);
337     } else {
338     file = getfileLEVname(filename,detc,lev,filety);
339     };
340     //
341     stringstream file2;
342     file2.str("");
343     stringstream file3;
344     file3.str("");
345     const char *file4 = 0;
346     if ( outDir == "" ){
347     file4 = filename;
348     file3 << file4 << "/Physics/Level";
349     file3 << lev;
350     } else {
351     file4 = outDir;
352     file3 << file4;
353     };
354     file2 << file3.str().c_str() << "/";
355     file2 << file;
356     //
357     printf("\n Filename will be: \n %s \n\n",file2.str().c_str());
358     ifstream mypawfile;
359     mypawfile.open(file2.str().c_str());
360     if ( mypawfile ){
361     nofile = 1;
362     } else {
363     if ( !FORCE ) printf("Error in opening file: file %s does not exist \n",file2.str().c_str());
364     };
365     //
366     if ( !FORCE ){
367     if ( nofile ){
368     printf(" ERROR: file already exists! Use FORCE = 1 to override \n\n");
369     gSystem->ChangeDirectory(path);
370     return(3);
371     } else {
372     printf("\n OK, I will create it!\n\n");
373     };
374     };
375     //
376     //
377     //
378     if ( TRK ){
379     if ( lev1 ){
380     //
381     // create output file:
382     //
383     struct Tracklev1 trklev1;
384     char *type;
385     type = "NEW";
386     if ( FORCE ) type = "RECREATE";
387     TFile *hfile = 0;
388     TTree *tree = 0;
389     hfile = new TFile(file2.str().c_str(),type,"Tracker LEVEL1 data");
390     tree = new TTree("TrkLevel1","PAMELA level1 tracker data");
391     tree->Branch("good1",&trklev1.good1,"good1/O");
392     tree->Branch("nev1",&trklev1.nev1,"nev1/I");
393 mocchiut 1.3 tree->Branch("whic_calib1",&trklev1.whic_calib1,"whic_calib1/I");
394     tree->Branch("swcode1",&trklev1.swcode1,"swcode1/I");
395     // tree->Branch("crc1",trklev1.crc1,"crc1[12]/O");
396     tree->Branch("crc1",trklev1.crc1,"crc1[12]/I");
397 mocchiut 1.1 tree->Branch("pkt_type1",&trklev1.pkt_type1,"pkt_type1/I");
398     tree->Branch("pkt_num1",&trklev1.pkt_num1,"pkt_num1/I");
399     tree->Branch("obt1",&trklev1.obt1,"obt1/I");
400 mocchiut 1.3 tree->Branch("cpu_crc1",&trklev1.cpu_crc1,"cpu_crc1/O");
401 mocchiut 1.1 tree->Branch("nclstr1",&trklev1.nclstr1,"nclstr1/I");
402     tree->Branch("view",trklev1.view,"view[nclstr1]/I");
403     tree->Branch("ladder",trklev1.ladder,"ladder[nclstr1]/I");
404     tree->Branch("maxs",trklev1.maxs,"maxs[nclstr1]/I");
405     tree->Branch("mult",trklev1.mult,"mult[nclstr1]/I");
406     tree->Branch("dedx",trklev1.dedx,"dedx[nclstr1]/F");
407     tree->Branch("indstart",trklev1.indstart,"indstart[nclstr1]/I");
408     tree->Branch("indmax",trklev1.indmax,"indmax[nclstr1]/I");
409     tree->Branch("totcllength",&trklev1.totcllength,"totcllength/I");
410     tree->Branch("clsignal",trklev1.clsignal,"clsignal[totcllength]/F");
411     tree->Branch("cnev",trklev1.cnev,"cnev[24][12]/F");
412     //
413     Int_t trnev = 0;
414     coptrklev1(ifile.str().c_str(),trklev1,trnev);
415     printf(" The tracker ntuple contains %i events\n Processing data: \n",trnev );
416     for ( Int_t i = 1; i < trnev+1; i++){
417     if ( i%1000 == 0 ) printf("%iK \n",i/1000);
418     //
419     cretrklev1(i,trklev1);
420     //
421     tree->Fill();
422     };
423     printf(" Finished! Closing ntuple...\n");
424     ccltrklev1(trklev1);
425     //
426     hfile->Write();
427     hfile->Close();
428     //
429     gSystem->ChangeDirectory(path);
430     #if defined (__CINT__)
431     char *sdir=gSystem->Getenv("PAM_LIB");
432     bdir.str("");
433     bdir << sdir << "/libcltrklev1_C.so";
434     gSystem->Unload(bdir.str().c_str());
435     bdir.str("");
436     bdir << sdir << "/libcltrklev1.so";
437     gSystem->Unload(bdir.str().c_str());
438     bdir.str("");
439     bdir << sdir << "/libretrklev1_C.so";
440     gSystem->Unload(bdir.str().c_str());
441     bdir.str("");
442     bdir << sdir << "/libretrklev1.so";
443     gSystem->Unload(bdir.str().c_str());
444     bdir.str("");
445     bdir << sdir << "/liboptrklev1_C.so";
446     gSystem->Unload(bdir.str().c_str());
447     stringstream cdir;
448     cdir.str("");
449     char *sdir=gSystem->Getenv("PAM_LIB");
450     cdir << sdir << "/liboptrklev1.so";
451     gSystem->Unload(cdir.str().c_str());
452     #endif
453     return(0);
454     };
455     if ( lev2 ){
456     struct Tracklev2 trklev2;
457     char *type;
458     type = "NEW";
459     if ( FORCE ) type = "RECREATE";
460     TFile *hfile = 0;
461     TTree *tree = 0;
462     hfile = new TFile(file2.str().c_str(),type,"Tracker LEVEL2 data");
463     tree = new TTree("TrkLevel2","PAMELA level2 tracker data");
464 mocchiut 1.3 // GENERAL
465 mocchiut 1.1 tree->Branch("good2",&trklev2.good2,"good2/O");
466     tree->Branch("nev2",&trklev2.nev2,"nev2/I");
467 mocchiut 1.3 tree->Branch("which_calib",&trklev2.which_calib,"which_calib/I");
468     tree->Branch("swcode",&trklev2.swcode,"swcode/I");
469     // tree->Branch("crc",trklev2.crc,"crc[12]/O");
470     tree->Branch("crc",trklev2.crc,"crc[12]/I");
471     // CPU
472 mocchiut 1.1 tree->Branch("pkt_type",&trklev2.pkt_type,"pkt_type/I");
473     tree->Branch("pkt_num",&trklev2.pkt_num,"pkt_num/I");
474     tree->Branch("obt",&trklev2.obt,"obt/I");
475 mocchiut 1.3 tree->Branch("cpu_crc",&trklev2.cpu_crc,"cpu_crc/I");
476     // TRACKS
477 mocchiut 1.1 tree->Branch("ntrk",&trklev2.ntrk,"ntrk/I");
478 mocchiut 1.2 tree->Branch("image",trklev2.image,"image[ntrk]/I");
479 mocchiut 1.1 tree->Branch("xm",trklev2.xm,"xm[ntrk][6]/F");
480     tree->Branch("ym",trklev2.ym,"ym[ntrk][6]/F");
481     tree->Branch("zm",trklev2.zm,"zm[ntrk][6]/F");
482     tree->Branch("resx",trklev2.resx,"resx[ntrk][6]/F");
483     tree->Branch("resy",trklev2.resy,"resy[ntrk][6]/F");
484     tree->Branch("al",trklev2.al,"al[ntrk][5]/F");
485     tree->Branch("coval",trklev2.coval,"coval[ntrk][5][5]/F");
486     tree->Branch("chi2",trklev2.chi2,"chi2[ntrk]/F");
487     tree->Branch("xgood",trklev2.xgood,"xgood[ntrk][6]/I");
488     tree->Branch("ygood",trklev2.ygood,"ygood[ntrk][6]/I");
489     tree->Branch("xv",trklev2.xv,"xv[ntrk][6]/F");
490     tree->Branch("yv",trklev2.yv,"yv[ntrk][6]/F");
491     tree->Branch("zv",trklev2.zv,"zv[ntrk][6]/F");
492 mocchiut 1.2 tree->Branch("axv",trklev2.axv,"axv[ntrk][6]/F");
493 mocchiut 1.1 tree->Branch("ayv",trklev2.ayv,"ayv[ntrk][6]/F");
494 mocchiut 1.3 tree->Branch("dedx_x",trklev2.dedx_x,"dedx_x[ntrk][6]/F");
495     tree->Branch("dedx_y",trklev2.dedx_y,"dedx_y[ntrk][6]/F");
496     tree->Branch("bdl",trklev2.bdl,"bdl[ntrk]/F");
497     // SINGLETX
498     tree->Branch("nclsx",&trklev2.nclsx,"nclsx/I");
499     tree->Branch("planex",trklev2.planex,"planex[nclsx]/I");
500     tree->Branch("xs",trklev2.xs,"xs[nclsx][2]/F");
501     tree->Branch("sgnlxs",trklev2.sgnlxs,"sgnlxs[nclsx]/F");
502     // SINGLETY
503     tree->Branch("nclsy",&trklev2.nclsy,"nclsy/I");
504     tree->Branch("planey",trklev2.planey,"planey[nclsy]/I");
505     tree->Branch("ys",trklev2.ys,"ys[nclsy][2]/F");
506     tree->Branch("sgnlys",trklev2.sgnlys,"sgnlys[nclsy]/F");
507 mocchiut 1.1 //
508     Int_t trnev = 0;
509     coptrklev2(ifile.str().c_str(),trklev2,trnev);
510     printf(" The tracker ntuple contains %i events\n Processing data: \n",trnev );
511     for ( Int_t i = 1; i < trnev+1; i++){
512     if ( i%1000 == 0 ) printf("%iK \n",i/1000);
513     //
514     cretrklev2(i,trklev2);
515     //
516     tree->Fill();
517     };
518     printf(" Finished! Closing ntuple...\n");
519     ccltrklev2(trklev2);
520     //
521     hfile->Write();
522     hfile->Close();
523     //
524     gSystem->ChangeDirectory(path);
525     #if defined (__CINT__)
526     char *sdir=gSystem->Getenv("PAM_LIB");
527     bdir.str("");
528     bdir << sdir << "/libcltrklev2_C.so";
529     gSystem->Unload(bdir.str().c_str());
530     bdir.str("");
531     bdir << sdir << "/libcltrklev2.so";
532     gSystem->Unload(bdir.str().c_str());
533     bdir.str("");
534     bdir << sdir << "/libretrklev2_C.so";
535     gSystem->Unload(bdir.str().c_str());
536     bdir.str("");
537     bdir << sdir << "/libretrklev2.so";
538     gSystem->Unload(bdir.str().c_str());
539     bdir.str("");
540     bdir << sdir << "/liboptrklev2_C.so";
541     gSystem->Unload(bdir.str().c_str());
542     stringstream bdir;
543     bdir.str("");
544     char *sdir=gSystem->Getenv("PAM_LIB");
545     bdir << sdir << "/liboptrklev2.so";
546     gSystem->Unload(bdir.str().c_str());
547     bdir.str("");
548     #endif
549     return(0);
550     };
551     };
552     if ( TOF ){
553     if ( lev1 ){
554     //
555     // create output file:
556     //
557     struct Toflev1 toflev1;
558     char *type;
559     type = "NEW";
560     if ( FORCE ) type = "RECREATE";
561     TFile *hfile = 0;
562     TTree *tree = 0;
563     hfile = new TFile(file2.str().c_str(),type,"Tof and Trigger LEVEL1 data");
564     tree = new TTree("TofLevel1","PAMELA level1 tof and trigger data");
565     tree->Branch("good2",&toflev1.good2,"good2/O");
566     tree->Branch("nev2",&toflev1.nev2,"nev2/I");
567     tree->Branch("pkt_type",&toflev1.pkt_type,"pkt_type/I");
568     tree->Branch("pkt_num",&toflev1.pkt_num,"pkt_num/I");
569     tree->Branch("obt",&toflev1.obt,"obt/I");
570     tree->Branch("which_calib",&toflev1.which_calib,"which_calib/I");
571     tree->Branch("tdcid",toflev1.tdcid,"tdcid[12]/I");
572     tree->Branch("evcount",toflev1.evcount,"evcount[12]/I");
573     tree->Branch("tdcmask",toflev1.tdcmask,"tdcmask[12]/I");
574     tree->Branch("adc",toflev1.adc,"adc[12][4]/I");
575     tree->Branch("tdc",toflev1.tdc,"tdc[12][4]/I");
576     tree->Branch("temp1",toflev1.temp1,"temp1[12]/I");
577     tree->Branch("temp2",toflev1.temp2,"temp2[12]/I");
578     tree->Branch("beta",toflev1.beta,"beta[5]/F");
579     tree->Branch("xtof",toflev1.xtof,"xtof[3]/F");
580     tree->Branch("ytof",toflev1.ytof,"ytof[3]/F");
581     tree->Branch("adc_c",toflev1.adc_c,"adc_c[12][4]/F");
582     tree->Branch("iflag",toflev1.iflag,"iflag[6]/I");
583     tree->Branch("jflag",toflev1.jflag,"jflag[6]/I");
584     tree->Branch("xout",toflev1.xout,"xout[3]/F");
585     tree->Branch("yout",toflev1.yout,"yout[3]/F");
586     tree->Branch("trig_evcount",&toflev1.trig_evcount,"trig_evcount/I");
587     tree->Branch("pmtpl",toflev1.pmtpl,"pmtpl[3]/I");
588     tree->Branch("trigrate",toflev1.trigrate,"trigrate[6]/I");
589     tree->Branch("dltime",toflev1.dltime,"dltime[2]/I");
590     tree->Branch("s4calcount",toflev1.s4calcount,"s4calcount[2]/I");
591     tree->Branch("pmtcount1",toflev1.pmtcount1,"pmtcount1[24]/I");
592     tree->Branch("pmtcount2",toflev1.pmtcount2,"pmtcount2[24]/I");
593     tree->Branch("patternbusy",toflev1.patternbusy,"patternbusy[3]/I");
594     tree->Branch("patterntrig",toflev1.patterntrig,"patterntrig[6]/I");
595     tree->Branch("trigconf",&toflev1.trigconf,"trigconf/I");
596     tree->Branch("ntrk",&toflev1.ntrk,"ntrk/I");
597     tree->Branch("image",&toflev1.image,"image[ntrk]/I");
598     tree->Branch("xm",toflev1.xm,"xm[ntrk][6]/F");
599     tree->Branch("ym",toflev1.ym,"ym[ntrk][6]/F");
600     tree->Branch("zm",toflev1.zm,"zm[ntrk][6]/F");
601     tree->Branch("resx",toflev1.resx,"resx[ntrk][6]/F");
602     tree->Branch("resy",toflev1.resy,"resy[ntrk][6]/F");
603     tree->Branch("al",toflev1.al,"al[ntrk][5]/F");
604     tree->Branch("coval",toflev1.coval,"coval[ntrk][5][5]/F");
605     tree->Branch("chi2",toflev1.chi2,"chi2[ntrk]/F");
606     tree->Branch("xgood",toflev1.xgood,"xgood[ntrk][6]/I");
607     tree->Branch("ygood",toflev1.ygood,"ygood[ntrk][6]/I");
608     tree->Branch("xv",toflev1.xv,"xv[ntrk][6]/F");
609     tree->Branch("yv",toflev1.yv,"yv[ntrk][6]/F");
610     tree->Branch("zv",toflev1.zv,"zv[ntrk][6]/F");
611     tree->Branch("axv",toflev1.axv,"axv[ntrk]/F");
612     tree->Branch("ayv",toflev1.ayv,"ayv[ntrk][6]/F");
613     tree->Branch("dedxp",toflev1.dedxp,"dedxp[ntrk][6]/F");
614     tree->Branch("nclsx",toflev1.nclsx,"nclsx[6]/I");
615     tree->Branch("nclsy",toflev1.nclsy,"nclsy[6]/I");
616     //
617     Int_t trnev = 0;
618     coptoflev1(ifile.str().c_str(),toflev1,trnev);
619     printf(" The tof ntuple contains %i events\n Processing data: \n",trnev );
620     for ( Int_t i = 1; i < trnev+1; i++){
621     if ( i%1000 == 0 ) printf("%iK \n",i/1000);
622     //
623     cretoflev1(i,toflev1);
624     //
625     tree->Fill();
626     };
627     printf(" Finished! Closing ntuple...\n");
628     ccltoflev1(toflev1);
629     //
630     hfile->Write();
631     hfile->Close();
632     //
633     gSystem->ChangeDirectory(path);
634     #if defined (__CINT__)
635     char *sdir=gSystem->Getenv("PAM_LIB");
636     bdir.str("");
637     bdir << sdir << "/libcltoflev1_C.so";
638     gSystem->Unload(bdir.str().c_str());
639     bdir.str("");
640     bdir << sdir << "/libcltoflev1.so";
641     gSystem->Unload(bdir.str().c_str());
642     bdir.str("");
643     bdir << sdir << "/libretoflev1_C.so";
644     gSystem->Unload(bdir.str().c_str());
645     bdir.str("");
646     bdir << sdir << "/libretoflev1.so";
647     gSystem->Unload(bdir.str().c_str());
648     bdir.str("");
649     bdir << sdir << "/liboptoflev1_C.so";
650     gSystem->Unload(bdir.str().c_str());
651     stringstream cdir;
652     cdir.str("");
653     char *sdir=gSystem->Getenv("PAM_LIB");
654     cdir << sdir << "/liboptoflev1.so";
655     gSystem->Unload(cdir.str().c_str());
656     #endif
657     return(0);
658     };
659     };
660     if ( AC ){
661     Long64_t nevents = tr->GetEntries();
662     if ( nevents < 1 ) {
663     printf("The file is empty!\n");
664     return(1);
665     };
666     AnticounterLevel1 *ac = new AnticounterLevel1();
667     tr->SetBranchAddress("Event",&ac);
668     //
669     // Open the rz file with a fortran call
670     //
671     struct AClev1 aclev1;
672     copaclev1(file2.str().c_str());
673     //
674     // run over all the events:
675     //
676     for (Int_t i = 0; i < nevents; i++){
677     if ( i%1000 == 0 ) printf("%iK \n",i/1000);
678     //
679     // open the rootple and copy variables values in "evento_"
680     //
681     tr->GetEntry(i);
682     //
683     // here you must run over all your variables and copy them in evento_....
684     //
685     aclev1.obt = ac->obt;
686     aclev1.evfile = ac->evfile;
687     aclev1.headc = ac->headc;
688     for (Int_t j = 0; j<2 ; j++){
689     aclev1.status[j] = (int)ac->status[j];
690     aclev1.hitmap[j] = (int)ac->hitmap[j];
691     aclev1.hitstatus[j] = (int)ac->hitstatus[j];
692     aclev1.trigger[j] = (int)ac->trigger[j];
693     };
694     //
695     // fill the ntuple
696     //
697     cfiaclev1(aclev1);
698     };
699     //
700     // close the rz file
701     //
702     printf("\nClose rz file! \n\n");
703     cclaclev1();
704     printf("File saved in \n\n %s \n\n",file2.str().c_str());
705     gSystem->ChangeDirectory(path);
706     #if defined (__CINT__)
707     char *sdir=gSystem->Getenv("PAM_LIB");
708     bdir.str("");
709     bdir << sdir << "/libclaclev1_C.so";
710     gSystem->Unload(bdir.str().c_str());
711     bdir.str("");
712     bdir << sdir << "/libclaclev1.so";
713     gSystem->Unload(bdir.str().c_str());
714     bdir.str("");
715     bdir << sdir << "/libfiaclev1_C.so";
716     gSystem->Unload(bdir.str().c_str());
717     bdir.str("");
718     bdir << sdir << "/libfiaclev1.so";
719     gSystem->Unload(bdir.str().c_str());
720     bdir.str("");
721     bdir << sdir << "/libopaclev1_C.so";
722     gSystem->Unload(bdir.str().c_str());
723     char *sdir=gSystem->Getenv("PAM_LIB");
724     stringstream bdir;
725     bdir.str("");
726     bdir << sdir << "/libopaclev1.so";
727     gSystem->Unload(bdir.str().c_str());
728     bdir.str("");
729     #endif
730     return(0);
731     };
732     return(0);
733     }

  ViewVC Help
Powered by ViewVC 1.1.23