1 |
///////////////////////////////////////////////////////////////////////// |
///////////////////////////////////////////////////////////////////////// |
2 |
// Program to convert an gpamela ntuple to pamela raw data (.pam). |
// Program to convert an gpamela ntuple to pamela raw data (.pam). |
3 |
// A root file containing the ntuple is also produced. |
// A root file containing the ntuple is also produced. |
4 |
// The conversion is done using a slightly patched version of |
// The conversion is done using a slightly patched version of |
5 |
// Rene Brun's h2root. |
// Rene Brun's h2root. |
6 |
// |
// |
7 |
// Created : 2006 Jan Conrad (conrad@particle.kth.se) |
// Created : 2006 Jan Conrad (conrad@particle.kth.se) |
8 |
// Modified: 2007 Silvio Orsi (silvio.orsi@roma2.infn.it) |
// Modified: 2007 Silvio Orsi (silvio.orsi@roma2.infn.it) |
9 |
// |
// |
10 |
// |
// |
11 |
// HOWTO (RECOMMENDED): |
// HOWTO (RECOMMENDED): |
12 |
// ./ Pamelagp2Digits filename.his |
// ./ Pamelagp2Digits filename.his |
13 |
// It generates filename.pam (PAMELA raw data) and filename.gp.root (sim info) |
// It generates filename.pam (PAMELA raw data) and filename.gp.root (sim info) |
14 |
// |
// |
15 |
// NB: more details are present in the file HOW-TO-DIGIT.TXT |
// NB: more details are present in the file HOW-TO-DIGIT.TXT |
16 |
// |
// |
17 |
// HOWTO (only for testing purposes) |
// HOWTO (only for testing purposes) |
18 |
// Pamelagp2Digits hbook_filename root_filename raw_filename compress tolower |
// Pamelagp2Digits hbook_filename root_filename raw_filename compress tolower |
19 |
// - If the 2nd and 3rd parameters are missing the names are generated from the hbook file name. |
// - If the 2nd and 3rd parameters are missing the names are generated from the hbook file name. |
20 |
// - The following flags are from h2root and default values are used: |
// - The following flags are from h2root and default values are used: |
21 |
// if compress is missing (or = 1) the ROOT file will be compressed |
// if compress is missing (or = 1) the ROOT file will be compressed |
22 |
// if compress = 0 the ROOT file will not be compressed. |
// if compress = 0 the ROOT file will not be compressed. |
23 |
// if tolower is missing (or = 1) ntuple column names are converted to lower case |
// if tolower is missing (or = 1) ntuple column names are converted to lower case |
24 |
// but the first character is converted to upper case. |
// but the first character is converted to upper case. |
25 |
// if tolower = 2 same as tolower=1 except that the first character is also |
// if tolower = 2 same as tolower=1 except that the first character is also |
26 |
// convertex to lower case |
// convertex to lower case |
27 |
// |
// |
28 |
// MODIFICATIONS: |
// MODIFICATIONS: |
29 |
// |
// |
30 |
// v. 1.6 (S.Orsi, Roma2, 31 October 2007) |
// rev. 1.8 tag 2r01 (S.Orsi, Roma2, 5 December 2007) |
31 |
// - TOF: (Campana, Menn, Orsi) |
// - first tagged version |
32 |
// + bugs fixed |
// - options "--version" and "--help" implemented in Makefile (file digitVersion.h added) |
33 |
// + crc included |
// - TRG: + number of words corrected from 153 to 152 (the trg/tof code accidentally accounted for this error in all (?) cases) |
34 |
// + introduction of 3 control bits in the ADC and TDC words before writing fDataTof |
// + variables event_count (=Ievnt from gpamela), pattern_trigger, trigger_conf (always acq.mode TOF4) implemented (they were all 0 before!) |
35 |
// + channel map corrected (correspondence between PMT# and TDC channel) |
// - AC : attenuation of light as function of distance from PMT implemented for CAS (see Digitizer.cxx for further references and comments) |
36 |
// + new conversion pC to ADC |
// - RunHeader and RunTrailer implemented (filled with flight-like information) |
37 |
// + scaling factors to tune MC data to real ones |
// |
38 |
// - HOW-TO-DIGIT.TXT file updated (E.Vannuccini) |
// rev. 1.7 (S.Orsi, Roma2, 28 November 2007) |
39 |
// |
// - TOF: + mapping S21 corrected (WM) |
40 |
// v. 1.5 (S.Orsi, Roma2, 11 October 2007) |
// + time resolution increased to 425ps (WM) |
41 |
// - file HOW-TO-DIGIT.TXT written (mainly by S.Bottai): contains information on how to run the chain from the DB creation to DarthVader through Digitizer, yoda and YodaProfiler |
// + new scale factors (WM) |
42 |
// |
// + various corrections |
43 |
// v. 1.4 (S.Orsi, Roma2, 11 October 2007) |
// - file README removed (usage and install information are present in the file HOW-TO-DIGIT.TXT) |
44 |
// - similar to v. 1.3 |
// - Makefile: option "install" added |
45 |
// |
// |
46 |
// v. 1.3 (S.Orsi, Roma2, 11 October 2007) |
// rev. 1.6 (S.Orsi, Roma2, 31 October 2007) |
47 |
// - TOF: + changes and major corrections in ADC and TDC (W.Menn, D.Campana, S.Orsi) |
// - TOF: (Campana, Menn, Orsi) |
48 |
// + flag DEBUG added (default: DEBUG=false; if true, print on screem some messages to debug) |
// + bugs fixed |
49 |
// - AC: + shift register filled; |
// + crc included |
50 |
// + minor bugs fixed |
// + introduction of 3 control bits in the ADC and TDC words before writing fDataTof |
51 |
// + counters increment by 1 at each event (they were constant before) |
// + channel map corrected (correspondence between PMT# and TDC channel) |
52 |
// - S4: + minor bugs fixed (S.Borisov) |
// + new conversion pC to ADC |
53 |
// + the routine DigitizeS4() is now inserted in the code. For DV versions earlier than October 2007, the option "-S4" is still needed because S4 calibration is not present |
// + scaling factors to tune MC data to real ones |
54 |
// - corrected severe bug that caused yoda to process only part of large data files (file.pam). S4 data were written to file even if the DigitizeS4() routine was not called. Previous versions of the digitizer should have crashed always, but unexpectedly worked on small files. |
// - HOW-TO-DIGIT.TXT file updated (E.Vannuccini) |
55 |
// - file HOW-TO-DIGIT.TXT written (mainly by S.Bottai): contains information on how to run the chain from the DB creation to DarthVader through Digitizer, yoda and YodaProfiler. The file is included only from release 1.5 |
// |
56 |
// - digitizer version numbers modified according to CVS repository (v1.00->v1.1, v1.01->v1.2) |
// v. 1.5 (S.Orsi, Roma2, 11 October 2007) |
57 |
// - some flags (LDFLAGS) in the Makefile have been changed; they are needed on some machines (e.g. pamelatov.roma2.infn.it), but give errors on others (e.g. pamelaws02.na.infn.it). See Makefile for details if the compilation fails due to library errors) |
// - file HOW-TO-DIGIT.TXT written (mainly by S.Bottai): contains information on how to run the chain from the DB creation to DarthVader through Digitizer, yoda and YodaProfiler |
58 |
// |
// |
59 |
// v. 1.2 (S.Orsi, Roma2, 28 September 2007) |
// v. 1.4 (S.Orsi, Roma2, 11 October 2007) |
60 |
// - TOF TDC inserted (to be tuned) |
// - similar to v. 1.3 |
61 |
// - improved tracker dEdx, tracker saturation inserted (S.Bottai) |
// |
62 |
// - S4 routine inserted in code (not in read-out) |
// v. 1.3 (S.Orsi, Roma2, 11 October 2007) |
63 |
// - bugs with packet length corrected |
// - TOF: + changes and major corrections in ADC and TDC (W.Menn, D.Campana, S.Orsi) |
64 |
// - small bugs fixed |
// + flag DEBUG added (default: DEBUG=false; if true, print on screem some messages to debug) |
65 |
// - NB: Run DarthVader with the options: "DarthVader -zerofill -idRun 1 -ALL +RUN +CAL [ --no-crosstalk ] +TRK +TOF +AC +TRG +ND" or "DarthVader -zerofill -idRun 1 +CAL [ --no-crosstalk ] -S4", i.e. without S4 |
// - AC: + shift register filled; |
66 |
// |
// + minor bugs fixed |
67 |
// v. 1.1 (S.Orsi, Roma2, 13 September 2007) |
// + counters increment by 1 at each event (they were constant before) |
68 |
// - trigger (dummy), tof (preliminary, adc only), ND (preliminary) inserted |
// - S4: + minor bugs fixed (S.Borisov) |
69 |
// - various changes and bug fixes |
// + the routine DigitizeS4() is now inserted in the code. For DV versions earlier than October 2007, the option "-S4" is still needed because S4 calibration is not present |
70 |
// - padding increased (fPADbuffer=64, fPadding = padbytes+64) |
// - corrected severe bug that caused yoda to process only part of large data files (file.pam). S4 data were written to file even if the DigitizeS4() routine was not called. Previous versions of the digitizer should have crashed always, but unexpectedly worked on small files. |
71 |
// |
// - file HOW-TO-DIGIT.TXT written (mainly by S.Bottai): contains information on how to run the chain from the DB creation to DarthVader through Digitizer, yoda and YodaProfiler. The file is included only from release 1.5 |
72 |
// v. beta (J.Conrad, KTH, 2006) |
// - digitizer version numbers modified according to CVS repository (v1.00->v1.1, v1.01->v1.2) |
73 |
// - compiles; includes pscu, calo, trk, ac; not present on cvs |
// - some flags (LDFLAGS) in the Makefile have been changed; they are needed on some machines (e.g. pamelatov.roma2.infn.it), but give errors on others (e.g. pamelaws02.na.infn.it). See Makefile for details if the compilation fails due to library errors) |
74 |
// |
// |
75 |
///////////////////////////////////////////////////////////////////////// |
// v. 1.2 (S.Orsi, Roma2, 28 September 2007) |
76 |
|
// - TOF TDC inserted (to be tuned) |
77 |
#include <stdlib.h> |
// - improved tracker dEdx, tracker saturation inserted (S.Bottai) |
78 |
#include <string.h> |
// - S4 routine inserted in code (not in read-out) |
79 |
#include <ctype.h> |
// - bugs with packet length corrected |
80 |
#include "Riostream.h" |
// - small bugs fixed |
81 |
#include "TFile.h" |
// - NB: Run DarthVader with the options: "DarthVader -zerofill -idRun 1 -ALL +RUN +CAL [ --no-crosstalk ] +TRK +TOF +AC +TRG +ND" or "DarthVader -zerofill -idRun 1 +CAL [ --no-crosstalk ] -S4", i.e. without S4 |
82 |
#include "TDirectory.h" |
// |
83 |
#include "TTree.h" |
// v. 1.1 (S.Orsi, Roma2, 13 September 2007) |
84 |
#include "TLeafI.h" |
// - trigger (dummy), tof (preliminary, adc only), ND (preliminary) inserted |
85 |
#include "TH1.h" |
// - various changes and bug fixes |
86 |
#include "TH2.h" |
// - padding increased (fPADbuffer=64, fPadding = padbytes+64) |
87 |
#include "TProfile.h" |
// |
88 |
#include "TGraph.h" |
// v. beta (J.Conrad, KTH, 2006) |
89 |
#include "TMath.h" |
// - compiles; includes pscu, calo, trk, ac; not present on cvs |
90 |
#include "Digitizer.h" |
// |
91 |
|
///////////////////////////////////////////////////////////////////////// |
92 |
int Error; //to be removed soon |
// |
93 |
|
#include <stdlib.h> |
94 |
// Define the names of the Fortran common blocks for the different OSs |
#include <string.h> |
95 |
|
#include <ctype.h> |
96 |
#ifndef WIN32 |
#include "Riostream.h" |
97 |
#define PAWC_SIZE 5000000 |
#include "TFile.h" |
98 |
# define pawc pawc_ |
#include "TDirectory.h" |
99 |
# define quest quest_ |
#include "TTree.h" |
100 |
# define hcbits hcbits_ |
#include "TLeafI.h" |
101 |
# define hcbook hcbook_ |
#include "TH1.h" |
102 |
# define rzcl rzcl_ |
#include "TH2.h" |
103 |
int pawc[PAWC_SIZE]; |
#include "TProfile.h" |
104 |
int quest[100]; |
#include "TGraph.h" |
105 |
int hcbits[37]; |
#include "TMath.h" |
106 |
int hcbook[51]; |
#include "Digitizer.h" |
107 |
int rzcl[11]; |
// |
108 |
#else |
#include "digitVersion.h" |
109 |
// on windows /pawc/ must have the same length as in libPacklib.a !! |
// |
110 |
#define PAWC_SIZE 2000000 |
int Error; //to be removed soon |
111 |
# define pawc PAWC |
|
112 |
# define quest QUEST |
// Define the names of the Fortran common blocks for the different OSs |
113 |
# define hcbits HCBITS |
|
114 |
# define hcbook HCBOOK |
#ifndef WIN32 |
115 |
# define rzcl RZCL |
#define PAWC_SIZE 5000000 |
116 |
extern "C" int pawc[PAWC_SIZE]; |
# define pawc pawc_ |
117 |
extern "C" int quest[100]; |
# define quest quest_ |
118 |
extern "C" int hcbits[37]; |
# define hcbits hcbits_ |
119 |
extern "C" int hcbook[51]; |
# define hcbook hcbook_ |
120 |
extern "C" int rzcl[11]; |
# define rzcl rzcl_ |
121 |
#endif |
int pawc[PAWC_SIZE]; |
122 |
|
int quest[100]; |
123 |
int *iq, *lq; |
int hcbits[37]; |
124 |
float *q; |
int hcbook[51]; |
125 |
char idname[128]; |
int rzcl[11]; |
126 |
int nentries; |
#else |
127 |
char chtitl[128]; |
// on windows /pawc/ must have the same length as in libPacklib.a !! |
128 |
int ncx,ncy,nwt,idb; |
#define PAWC_SIZE 2000000 |
129 |
int lcont, lcid, lcdir; |
# define pawc PAWC |
130 |
float xmin,xmax,ymin,ymax; |
# define quest QUEST |
131 |
const Int_t kMIN1 = 7; |
# define hcbits HCBITS |
132 |
const Int_t kMAX1 = 8; |
# define hcbook HCBOOK |
133 |
|
# define rzcl RZCL |
134 |
#if defined __linux |
extern "C" int pawc[PAWC_SIZE]; |
135 |
//On linux Fortran wants this, so we give to it! |
extern "C" int quest[100]; |
136 |
int xargv=0; |
extern "C" int hcbits[37]; |
137 |
int xargc=0; |
extern "C" int hcbook[51]; |
138 |
void MAIN__() {} |
extern "C" int rzcl[11]; |
139 |
#endif |
#endif |
140 |
|
|
141 |
// Define the names of the Fortran subroutine and functions for the different OSs |
int *iq, *lq; |
142 |
|
float *q; |
143 |
#ifndef WIN32 |
char idname[128]; |
144 |
# define hlimit hlimit_ |
int nentries; |
145 |
# define hropen hropen_ |
char chtitl[128]; |
146 |
# define hrin hrin_ |
int ncx,ncy,nwt,idb; |
147 |
# define hnoent hnoent_ |
int lcont, lcid, lcdir; |
148 |
# define hgive hgive_ |
float xmin,xmax,ymin,ymax; |
149 |
# define hgiven hgiven_ |
const Int_t kMIN1 = 7; |
150 |
# define hprntu hprntu_ |
const Int_t kMAX1 = 8; |
151 |
# define hgnpar hgnpar_ |
|
152 |
# define hgnf hgnf_ |
#if defined __linux |
153 |
# define hgnt hgnt_ |
//On linux Fortran wants this, so we give to it! |
154 |
# define rzink rzink_ |
int xargv=0; |
155 |
# define hdcofl hdcofl_ |
int xargc=0; |
156 |
# define hmaxim hmaxim_ |
void MAIN__() {} |
157 |
# define hminim hminim_ |
#endif |
158 |
# define hdelet hdelet_ |
|
159 |
# define hntvar2 hntvar2_ |
// Define the names of the Fortran subroutine and functions for the different OSs |
160 |
# define hbname hbname_ |
|
161 |
# define hbnamc hbnamc_ |
#ifndef WIN32 |
162 |
# define hbnam hbnam_ |
# define hlimit hlimit_ |
163 |
# define hi hi_ |
# define hropen hropen_ |
164 |
# define hie hie_ |
# define hrin hrin_ |
165 |
# define hif hif_ |
# define hnoent hnoent_ |
166 |
# define hij hij_ |
# define hgive hgive_ |
167 |
# define hix hix_ |
# define hgiven hgiven_ |
168 |
# define hijxy hijxy_ |
# define hprntu hprntu_ |
169 |
# define hije hije_ |
# define hgnpar hgnpar_ |
170 |
# define hcdir hcdir_ |
# define hgnf hgnf_ |
171 |
# define zitoh zitoh_ |
# define hgnt hgnt_ |
172 |
# define uhtoc uhtoc_ |
# define rzink rzink_ |
173 |
|
# define hdcofl hdcofl_ |
174 |
# define type_of_call |
# define hmaxim hmaxim_ |
175 |
# define DEFCHAR const char* |
# define hminim hminim_ |
176 |
# define PASSCHAR(string) string |
# define hdelet hdelet_ |
177 |
#else |
# define hntvar2 hntvar2_ |
178 |
# define hlimit HLIMIT |
# define hbname hbname_ |
179 |
# define hropen HROPEN |
# define hbnamc hbnamc_ |
180 |
# define hrin HRIN |
# define hbnam hbnam_ |
181 |
# define hnoent HNOENT |
# define hi hi_ |
182 |
# define hgive HGIVE |
# define hie hie_ |
183 |
# define hgiven HGIVEN |
# define hif hif_ |
184 |
# define hprntu HPRNTU |
# define hij hij_ |
185 |
# define hgnpar HGNPAR |
# define hix hix_ |
186 |
# define hgnf HGNF |
# define hijxy hijxy_ |
187 |
# define hgnt HGNT |
# define hije hije_ |
188 |
# define rzink RZINK |
# define hcdir hcdir_ |
189 |
# define hdcofl HDCOFL |
# define zitoh zitoh_ |
190 |
# define hmaxim HMAXIM |
# define uhtoc uhtoc_ |
191 |
# define hminim HMINIM |
|
192 |
# define hdelet HDELET |
# define type_of_call |
193 |
# define hntvar2 HNTVAR2 |
# define DEFCHAR const char* |
194 |
# define hbname HBNAME |
# define PASSCHAR(string) string |
195 |
# define hbnamc HBNAMC |
#else |
196 |
# define hbnam HBNAM |
# define hlimit HLIMIT |
197 |
# define hi HI |
# define hropen HROPEN |
198 |
# define hie HIE |
# define hrin HRIN |
199 |
# define hif HIF |
# define hnoent HNOENT |
200 |
# define hij HIJ |
# define hgive HGIVE |
201 |
# define hix HIX |
# define hgiven HGIVEN |
202 |
# define hijxy HIJXY |
# define hprntu HPRNTU |
203 |
# define hije HIJE |
# define hgnpar HGNPAR |
204 |
# define hcdir HCDIR |
# define hgnf HGNF |
205 |
# define zitoh ZITOH |
# define hgnt HGNT |
206 |
# define uhtoc UHTOC |
# define rzink RZINK |
207 |
# define type_of_call _stdcall |
# define hdcofl HDCOFL |
208 |
# define DEFCHAR const char*, const int |
# define hmaxim HMAXIM |
209 |
# define PASSCHAR(string) string, strlen(string) |
# define hminim HMINIM |
210 |
#endif |
# define hdelet HDELET |
211 |
|
# define hntvar2 HNTVAR2 |
212 |
extern "C" void type_of_call hlimit(const int&); |
# define hbname HBNAME |
213 |
#ifndef WIN32 |
# define hbnamc HBNAMC |
214 |
extern "C" void type_of_call hropen(const int&,DEFCHAR,DEFCHAR,DEFCHAR, |
# define hbnam HBNAM |
215 |
const int&,const int&,const int,const int,const int); |
# define hi HI |
216 |
#else |
# define hie HIE |
217 |
extern "C" void type_of_call hropen(const int&,DEFCHAR,DEFCHAR,DEFCHAR, |
# define hif HIF |
218 |
const int&,const int&); |
# define hij HIJ |
219 |
#endif |
# define hix HIX |
220 |
|
# define hijxy HIJXY |
221 |
extern "C" void type_of_call hrin(const int&,const int&,const int&); |
# define hije HIJE |
222 |
extern "C" void type_of_call hnoent(const int&,const int&); |
# define hcdir HCDIR |
223 |
#ifndef WIN32 |
# define zitoh ZITOH |
224 |
extern "C" void type_of_call hgive(const int&,DEFCHAR,const int&,const float&,const float&, |
# define uhtoc UHTOC |
225 |
const int&,const float&,const float&,const int&,const int&,const int); |
# define type_of_call _stdcall |
226 |
#else |
# define DEFCHAR const char*, const int |
227 |
extern "C" void type_of_call hgive(const int&,DEFCHAR,const int&,const float&,const float&, |
# define PASSCHAR(string) string, strlen(string) |
228 |
const int&,const float&,const float&,const int&,const int&); |
#endif |
229 |
#endif |
|
230 |
|
extern "C" void type_of_call hlimit(const int&); |
231 |
#ifndef WIN32 |
#ifndef WIN32 |
232 |
extern "C" void type_of_call hgiven(const int&,DEFCHAR,const int&,DEFCHAR, |
extern "C" void type_of_call hropen(const int&,DEFCHAR,DEFCHAR,DEFCHAR, |
233 |
const float&,const float&,const int,const int); |
const int&,const int&,const int,const int,const int); |
234 |
#else |
#else |
235 |
extern "C" void type_of_call hgiven(const int&,DEFCHAR,const int&,DEFCHAR, |
extern "C" void type_of_call hropen(const int&,DEFCHAR,DEFCHAR,DEFCHAR, |
236 |
const float&,const float&); |
const int&,const int&); |
237 |
#endif |
#endif |
238 |
|
|
239 |
#ifndef WIN32 |
extern "C" void type_of_call hrin(const int&,const int&,const int&); |
240 |
extern "C" void type_of_call hntvar2(const int&,const int&,DEFCHAR,DEFCHAR,DEFCHAR,int&,int&,int&,int&,int&,const int,const int, const int); |
extern "C" void type_of_call hnoent(const int&,const int&); |
241 |
#else |
#ifndef WIN32 |
242 |
extern "C" void type_of_call hntvar2(const int&,const int&,DEFCHAR,DEFCHAR,DEFCHAR,int&,int&,int&,int&,int&); |
extern "C" void type_of_call hgive(const int&,DEFCHAR,const int&,const float&,const float&, |
243 |
#endif |
const int&,const float&,const float&,const int&,const int&,const int); |
244 |
|
#else |
245 |
#ifndef WIN32 |
extern "C" void type_of_call hgive(const int&,DEFCHAR,const int&,const float&,const float&, |
246 |
extern "C" void type_of_call hbnam(const int&,DEFCHAR,const int&,DEFCHAR,const int&,const int, const int); |
const int&,const float&,const float&,const int&,const int&); |
247 |
#else |
#endif |
248 |
extern "C" void type_of_call hbnam(const int&,DEFCHAR,const int&,DEFCHAR,const int&); |
|
249 |
#endif |
#ifndef WIN32 |
250 |
|
extern "C" void type_of_call hgiven(const int&,DEFCHAR,const int&,DEFCHAR, |
251 |
extern "C" void type_of_call hprntu(const int&); |
const float&,const float&,const int,const int); |
252 |
extern "C" void type_of_call hgnpar(const int&,const char *,const int); |
#else |
253 |
extern "C" void type_of_call hgnf(const int&,const int&,const float&,const int&); |
extern "C" void type_of_call hgiven(const int&,DEFCHAR,const int&,DEFCHAR, |
254 |
extern "C" void type_of_call hgnt(const int&,const int&,const int&); |
const float&,const float&); |
255 |
extern "C" void type_of_call rzink(const int&,const int&,const char *,const int); |
#endif |
256 |
extern "C" void type_of_call hdcofl(); |
|
257 |
extern "C" void type_of_call hmaxim(const int&,const float&); |
#ifndef WIN32 |
258 |
extern "C" void type_of_call hminim(const int&,const float&); |
extern "C" void type_of_call hntvar2(const int&,const int&,DEFCHAR,DEFCHAR,DEFCHAR,int&,int&,int&,int&,int&,const int,const int, const int); |
259 |
extern "C" void type_of_call hdelet(const int&); |
#else |
260 |
extern "C" float type_of_call hi(const int&,const int&); |
extern "C" void type_of_call hntvar2(const int&,const int&,DEFCHAR,DEFCHAR,DEFCHAR,int&,int&,int&,int&,int&); |
261 |
extern "C" float type_of_call hie(const int&,const int&); |
#endif |
262 |
extern "C" float type_of_call hif(const int&,const int&); |
|
263 |
extern "C" float type_of_call hij(const int&,const int&,const int&); |
#ifndef WIN32 |
264 |
extern "C" void type_of_call hix(const int&,const int&,const float&); |
extern "C" void type_of_call hbnam(const int&,DEFCHAR,const int&,DEFCHAR,const int&,const int, const int); |
265 |
extern "C" void type_of_call hijxy(const int&,const int&,const int&,const float&,const float&); |
#else |
266 |
extern "C" float type_of_call hije(const int&,const int&,const int&); |
extern "C" void type_of_call hbnam(const int&,DEFCHAR,const int&,DEFCHAR,const int&); |
267 |
#ifndef WIN32 |
#endif |
268 |
extern "C" void type_of_call hcdir(DEFCHAR,DEFCHAR ,const int,const int); |
|
269 |
#else |
extern "C" void type_of_call hprntu(const int&); |
270 |
extern "C" void type_of_call hcdir(DEFCHAR,DEFCHAR); |
extern "C" void type_of_call hgnpar(const int&,const char *,const int); |
271 |
#endif |
extern "C" void type_of_call hgnf(const int&,const int&,const float&,const int&); |
272 |
|
extern "C" void type_of_call hgnt(const int&,const int&,const int&); |
273 |
extern "C" void type_of_call zitoh(const int&,const int&,const int&); |
extern "C" void type_of_call rzink(const int&,const int&,const char *,const int); |
274 |
#ifndef WIN32 |
extern "C" void type_of_call hdcofl(); |
275 |
extern "C" void type_of_call uhtoc(const int&,const int&,DEFCHAR,int&,const int); |
extern "C" void type_of_call hmaxim(const int&,const float&); |
276 |
#else |
extern "C" void type_of_call hminim(const int&,const float&); |
277 |
extern "C" void type_of_call uhtoc(const int&,const int&,DEFCHAR,int&); |
extern "C" void type_of_call hdelet(const int&); |
278 |
#endif |
extern "C" float type_of_call hi(const int&,const int&); |
279 |
|
extern "C" float type_of_call hie(const int&,const int&); |
280 |
extern void convert_directory(const char*, char* file_raw); |
extern "C" float type_of_call hif(const int&,const int&); |
281 |
extern void convert_1d(Int_t id); |
extern "C" float type_of_call hij(const int&,const int&,const int&); |
282 |
extern void convert_cwn(Int_t id,char* file_raw); |
extern "C" void type_of_call hix(const int&,const int&,const float&); |
283 |
|
extern "C" void type_of_call hijxy(const int&,const int&,const int&,const float&,const float&); |
284 |
|
extern "C" float type_of_call hije(const int&,const int&,const int&); |
285 |
Int_t golower = 1; |
#ifndef WIN32 |
286 |
Int_t bufsize = 64000; |
extern "C" void type_of_call hcdir(DEFCHAR,DEFCHAR ,const int,const int); |
287 |
Int_t optcwn = 1; |
#else |
288 |
|
extern "C" void type_of_call hcdir(DEFCHAR,DEFCHAR); |
289 |
|
#endif |
290 |
int main(int argc, char **argv) |
|
291 |
|
extern "C" void type_of_call zitoh(const int&,const int&,const int&); |
292 |
{ |
#ifndef WIN32 |
293 |
if (argc < 2) { |
extern "C" void type_of_call uhtoc(const int&,const int&,DEFCHAR,int&,const int); |
294 |
printf("Error: Pamelagp2Digits \n"); |
#else |
295 |
printf("Pamelagp2Digits file.hbook file.root file.pam [compress] [tolower] [lrecl] [bufsize] [optcwn] \n"); |
extern "C" void type_of_call uhtoc(const int&,const int&,DEFCHAR,int&); |
296 |
printf(" if file.root is not given it will be = file.root\n"); |
#endif |
297 |
printf(" compress = 1 by default (use 0 for no compression)\n"); |
|
298 |
printf(" tolower = 1 by default (use 0 to keep case of column names)\n"); |
extern void convert_directory(const char*, char* file_raw); |
299 |
printf(" lrecl =0 by default (must be specified if >8092)\n"); |
extern void convert_1d(Int_t id); |
300 |
printf(" bufsize = 8000 by default (branch buffer size)\n"); |
extern void convert_cwn(Int_t id,char* file_raw); |
301 |
printf(" for cwn ntuple only: optcwn = 1 (default) 1-byte int -> char, 2-byte int -> short, (use 0 to keep 4-byte int) \n"); |
|
302 |
return 1; |
|
303 |
} |
Int_t golower = 1; |
304 |
|
Int_t bufsize = 64000; |
305 |
lq = &pawc[9]; |
Int_t optcwn = 1; |
306 |
iq = &pawc[17]; |
|
307 |
void *qq = iq; |
// Usage subroutine |
308 |
q = (float*)qq; |
// |
309 |
char *file_in=argv[1]; |
void DigitUsage(Int_t u){ |
310 |
char *file_out = " "; |
if (u<0) |
311 |
char *file_raw; |
printf("----- ERROR in input parameters! -----\n"); |
312 |
|
printf("\nPAMELA Digitizer Usage:\n\n"); |
313 |
Int_t compress = 1; |
printf("Pamelagp2Digits file.hbook file.root file.pam [compress] [tolower] [lrecl] [bufsize] [optcwn] \n"); |
314 |
int ier=0, record_size=0; |
printf(" if file.root is not given it will be = file.root\n"); |
315 |
|
printf(" or: \nPamelagp2Digits [option] \n"); |
316 |
if (argc > 8) { |
printf("\n Options are:\n\n"); |
317 |
optcwn = atoi(argv[8]); |
printf(" --version print informations about compilation and exit\n"); |
318 |
} |
printf(" -h | --help print this help and exit \n"); |
319 |
if (argc > 7) { |
//printf(" -g | --debug set debug flag\n"); |
320 |
bufsize = atoi(argv[7]); |
printf("\nExamples: \n"); |
321 |
} |
printf(" Pamelagp2Digits --version\n"); |
322 |
if (argc > 6) { |
printf(" Pamelagp2Digits simulatedProtons.his \n\n"); |
323 |
record_size = atoi(argv[6]); |
|
324 |
} |
printf("The options [compress] [tolower] [lrecl] [bufsize] [optcwn] should be modified only for testing purposes:\n"); |
325 |
if (argc > 5) { |
printf("(options to be removed in future versions)\n"); |
326 |
golower = atoi(argv[5]); |
printf(" compress = 1 by default (use 0 for no compression)\n"); |
327 |
} |
printf(" tolower = 1 by default (use 0 to keep case of column names)\n"); |
328 |
if (argc > 4) { |
printf(" lrecl =0 by default (must be specified if >8092)\n"); |
329 |
compress = atoi(argv[4]); |
printf(" bufsize = 8000 by default (branch buffer size)\n"); |
330 |
} |
printf(" for cwn ntuple only: optcwn = 1 (default) 1-byte int -> char, 2-byte int -> short, (use 0 to keep 4-byte int) \n\n"); |
331 |
|
}; |
332 |
if (argc > 3) { |
|
333 |
file_raw=argv[3]; |
int main(int argc, char *argv[]){ |
334 |
} else { |
// |
335 |
file_raw= new char[2000]; |
// Checking input parameters |
336 |
strcpy(file_raw,file_in); |
// |
337 |
char *dot = strrchr(file_raw,'.'); |
if ( argc > 1 ){ |
338 |
if (dot) strcpy(dot+1,"pam"); |
Int_t ic = 0; |
339 |
else strcat(file_out,".pam"); |
while ( ic < argc ){ |
340 |
} |
if ( !strcmp(argv[ic],"--version") ){ |
341 |
|
DigitizerInfo(true); |
342 |
if (argc > 2) { |
exit(0); |
343 |
file_out=argv[2]; |
}; |
344 |
} else { |
if ( !strcmp(argv[ic],"-h") || !strcmp(argv[ic],"--help") ){ |
345 |
file_out= new char[2000]; |
DigitUsage(0); |
346 |
strcpy(file_out,file_in); |
exit(0); |
347 |
char *dot = strrchr(file_out,'.'); |
}; |
348 |
if (dot) strcpy(dot+1,"gp.root"); //modified S.Orsi 09/'07 |
//if ( !strcmp(argv[ic],"-g") || !strcmp(argv[ic],"--debug") ){ |
349 |
else strcat(file_out,".gp.root"); |
//debug = true; |
350 |
} |
//}; |
351 |
|
ic++; |
352 |
|
}; |
353 |
|
} else{ |
354 |
#if defined(_HIUX_SOURCE) && !defined(__GNUC__) |
// |
355 |
hf_fint((char *)NULL); |
// no input parameters: exit with error |
356 |
#endif |
// |
357 |
|
DigitUsage(-2); |
358 |
|
exit(-2); |
359 |
int pawc_size = PAWC_SIZE; |
}; |
360 |
hlimit(pawc_size); |
|
361 |
|
lq = &pawc[9]; |
362 |
int lun = 10; |
iq = &pawc[17]; |
363 |
#ifndef WIN32 |
void *qq = iq; |
364 |
hropen(lun,PASSCHAR("example"),PASSCHAR(file_in),PASSCHAR("p"),record_size,ier,7,strlen(file_in),1); |
q = (float*)qq; |
365 |
#else |
char *file_in=argv[1]; |
366 |
hropen(lun,PASSCHAR("example"),PASSCHAR(file_in),PASSCHAR("p"),record_size,ier); |
char *file_out = " "; |
367 |
#endif |
char *file_raw; |
368 |
|
|
369 |
if (ier) printf (" Error on hropen was %d \n", ier); |
Int_t compress = 1; |
370 |
if (quest[0]) { |
int ier=0, record_size=0; |
371 |
printf("Error cannot open input file: %s\n",file_in); |
|
372 |
return 1; |
if (argc > 8) { |
373 |
} |
optcwn = atoi(argv[8]); |
374 |
|
} |
375 |
char root_file_title[2000]; |
if (argc > 7) { |
376 |
|
bufsize = atoi(argv[7]); |
377 |
TFile* hfile= TFile::Open(file_out,"RECREATE",root_file_title,compress); |
} |
378 |
|
if (argc > 6) { |
379 |
if (!hfile) { |
record_size = atoi(argv[6]); |
380 |
printf("Error: can't open output file: %s \n",file_out); |
} |
381 |
return 1; |
if (argc > 5) { |
382 |
} |
golower = atoi(argv[5]); |
383 |
|
} |
384 |
convert_directory("//example",file_raw); |
if (argc > 4) { |
385 |
|
compress = atoi(argv[4]); |
386 |
//hfile->Write(); |
} |
387 |
//hfile->ls(); |
|
388 |
|
if (argc > 3) { |
389 |
hfile->Close(); |
file_raw=argv[3]; |
390 |
delete hfile; |
} else { |
391 |
return(0); |
file_raw= new char[2000]; |
392 |
} |
strcpy(file_raw,file_in); |
393 |
|
char *dot = strrchr(file_raw,'.'); |
394 |
|
if (dot) strcpy(dot+1,"pam"); |
395 |
//____________________________________________________________________________ |
else strcat(file_out,".pam"); |
396 |
void convert_directory(const char *dir, char* file_raw) |
} |
397 |
{ |
|
398 |
|
if (argc > 2) { |
399 |
|
file_out=argv[2]; |
400 |
printf(" Converting directory %s\n",dir); |
} else { |
401 |
Int_t id; |
file_out= new char[2000]; |
402 |
// Int_t nastycase=0; |
strcpy(file_out,file_in); |
403 |
// Int_t nastyprint=0; |
char *dot = strrchr(file_out,'.'); |
404 |
// Int_t idold = 0; |
if (dot) strcpy(dot+1,"gp.root"); //modified S.Orsi 09/'07 |
405 |
for (Int_t key=1;key<1000000;key++) { |
else strcat(file_out,".gp.root"); |
406 |
int z0 = 0; |
} |
407 |
rzink(key,z0,"S",1); |
|
408 |
if (quest[0]) break; |
|
409 |
if (quest[13] & 8) { |
|
410 |
continue; |
#if defined(_HIUX_SOURCE) && !defined(__GNUC__) |
411 |
// if (!nastyprint) { |
hf_fint((char *)NULL); |
412 |
// printf("Found nasty Hbook case!! You had an Hbook error message\n"); |
#endif |
413 |
// printf(" when creating the file (too many records)\n"); |
|
414 |
// printf(" Hbook file should have been created with a bigger LRECL\n"); |
|
415 |
// printf(" ROOT will try to recover\n"); |
int pawc_size = PAWC_SIZE; |
416 |
// nastyprint = 1; |
hlimit(pawc_size); |
417 |
// } |
|
418 |
// nastycase = 1; |
int lun = 10; |
419 |
} |
#ifndef WIN32 |
420 |
id = quest[20]; |
hropen(lun,PASSCHAR("example"),PASSCHAR(file_in),PASSCHAR("p"),record_size,ier,7,strlen(file_in),1); |
421 |
// if (id == idold && nastycase) continue; |
#else |
422 |
// nastycase = 0; |
hropen(lun,PASSCHAR("example"),PASSCHAR(file_in),PASSCHAR("p"),record_size,ier); |
423 |
// idold = id; |
#endif |
424 |
int i999 = 999; |
|
425 |
hrin(id,i999,0); |
if (ier) printf (" Error on hropen was %d \n", ier); |
426 |
if (quest[0]) { |
if (quest[0]) { |
427 |
printf("Error cannot read ID = %d\n",id); |
printf("Error cannot open input file: %s\n",file_in); |
428 |
break; |
return 1; |
429 |
} |
} |
430 |
hdcofl(); |
|
431 |
lcid = hcbook[10]; |
char root_file_title[2000]; |
432 |
lcont = lq[lcid-1]; |
|
433 |
if (hcbits[3]) { |
TFile* hfile= TFile::Open(file_out,"RECREATE",root_file_title,compress); |
434 |
convert_cwn(id,file_raw); |
|
435 |
hdelet(id); |
if (!hfile) { |
436 |
continue; |
printf("Error: can't open output file: %s \n",file_out); |
437 |
} |
return 1; |
438 |
|
} |
439 |
if (hcbits[0]) { |
|
440 |
convert_1d(id); |
convert_directory("//example",file_raw); |
441 |
hdelet(id); |
|
442 |
continue; |
//hfile->Write(); |
443 |
} |
//hfile->ls(); |
444 |
|
|
445 |
} |
hfile->Close(); |
446 |
|
delete hfile; |
447 |
// converting subdirectories of this directory |
return(0); |
448 |
const Int_t kKLS = 26; |
} |
449 |
const Int_t kKNSD = 23; |
|
450 |
lcdir = rzcl[2]; |
|
451 |
Int_t ls = iq[lcdir+kKLS]; |
//____________________________________________________________________________ |
452 |
Int_t ndir = iq[lcdir+kKNSD]; |
void convert_directory(const char *dir, char* file_raw) |
453 |
Int_t nch=16; |
{ |
454 |
Int_t ihdir[4]; |
|
455 |
Int_t ncw = 4; |
|
456 |
TDirectory *cursav = gDirectory; |
printf(" Converting directory %s\n",dir); |
457 |
Int_t i; |
Int_t id; |
458 |
char chdir[17]; |
// Int_t nastycase=0; |
459 |
char hbookdir[17]; |
// Int_t nastyprint=0; |
460 |
for (Int_t k=0;k<ndir;k++) { |
// Int_t idold = 0; |
461 |
lcdir = rzcl[2]; |
for (Int_t key=1;key<1000000;key++) { |
462 |
zitoh(iq[lcdir+ls+7*k],ihdir[0],ncw); |
int z0 = 0; |
463 |
for (i=0;i<17;i++) chdir[i] = 0; |
rzink(key,z0,"S",1); |
464 |
#ifndef WIN32 |
if (quest[0]) break; |
465 |
uhtoc(ihdir[0],ncw,chdir,nch ,16); |
if (quest[13] & 8) { |
466 |
#else |
continue; |
467 |
uhtoc(ihdir[0],ncw,chdir,16,nch); |
// if (!nastyprint) { |
468 |
#endif |
// printf("Found nasty Hbook case!! You had an Hbook error message\n"); |
469 |
strcpy(hbookdir,chdir); |
// printf(" when creating the file (too many records)\n"); |
470 |
for (i=16;i>0;i--) { |
// printf(" Hbook file should have been created with a bigger LRECL\n"); |
471 |
if (chdir[i] == 0) continue; |
// printf(" ROOT will try to recover\n"); |
472 |
if (chdir[i] != ' ') break; |
// nastyprint = 1; |
473 |
chdir[i] = 0; |
// } |
474 |
} |
// nastycase = 1; |
475 |
#ifndef WIN32 |
} |
476 |
hcdir(PASSCHAR(hbookdir),PASSCHAR(" "),16,1); |
id = quest[20]; |
477 |
#else |
// if (id == idold && nastycase) continue; |
478 |
hcdir(PASSCHAR(hbookdir),PASSCHAR(" ")); |
// nastycase = 0; |
479 |
#endif |
// idold = id; |
480 |
TDirectory *newdir = new TDirectory(chdir,chdir); |
int i999 = 999; |
481 |
newdir->cd(); |
hrin(id,i999,0); |
482 |
convert_directory(chdir, file_raw); |
if (quest[0]) { |
483 |
#ifndef WIN32 |
printf("Error cannot read ID = %d\n",id); |
484 |
hcdir(PASSCHAR("\\"),PASSCHAR(" "),1,1); |
break; |
485 |
#else |
} |
486 |
hcdir(PASSCHAR("\\"),PASSCHAR(" ")); |
hdcofl(); |
487 |
#endif |
lcid = hcbook[10]; |
488 |
newdir->Write(); |
lcont = lq[lcid-1]; |
489 |
cursav->cd(); |
if (hcbits[3]) { |
490 |
} |
convert_cwn(id,file_raw); |
491 |
} |
hdelet(id); |
492 |
|
continue; |
493 |
//____________________________________________________________________________ |
} |
494 |
void convert_1d(Int_t id) |
|
495 |
{ |
if (hcbits[0]) { |
496 |
if (id > 0) sprintf(idname,"h%d",id); |
convert_1d(id); |
497 |
else sprintf(idname,"h_%d",-id); |
hdelet(id); |
498 |
hnoent(id,nentries); |
continue; |
499 |
#ifndef WIN32 |
} |
500 |
hgive(id,chtitl,ncx,xmin,xmax,ncy,ymin,ymax,nwt,idb,80); |
|
501 |
#else |
} |
502 |
hgive(id,chtitl,80,ncx,xmin,xmax,ncy,ymin,ymax,nwt,idb); |
|
503 |
#endif |
// converting subdirectories of this directory |
504 |
chtitl[4*nwt] = 0; |
const Int_t kKLS = 26; |
505 |
TH1F *h1; |
const Int_t kKNSD = 23; |
506 |
Int_t i; |
lcdir = rzcl[2]; |
507 |
if (hcbits[5]) { |
Int_t ls = iq[lcdir+kKLS]; |
508 |
Int_t lbins = lq[lcid-2]; |
Int_t ndir = iq[lcdir+kKNSD]; |
509 |
Double_t *xbins = new Double_t[ncx+1]; |
Int_t nch=16; |
510 |
for (i=0;i<=ncx;i++) xbins[i] = q[lbins+i+1]; |
Int_t ihdir[4]; |
511 |
h1 = new TH1F(idname,chtitl,ncx,xbins); |
Int_t ncw = 4; |
512 |
delete [] xbins; |
TDirectory *cursav = gDirectory; |
513 |
} else { |
Int_t i; |
514 |
h1 = new TH1F(idname,chtitl,ncx,xmin,xmax); |
char chdir[17]; |
515 |
} |
char hbookdir[17]; |
516 |
if (hcbits[8]) h1->Sumw2(); |
for (Int_t k=0;k<ndir;k++) { |
517 |
TGraph *gr = 0; |
lcdir = rzcl[2]; |
518 |
if (hcbits[11]) { |
zitoh(iq[lcdir+ls+7*k],ihdir[0],ncw); |
519 |
gr = new TGraph(ncx); |
for (i=0;i<17;i++) chdir[i] = 0; |
520 |
h1->GetListOfFunctions()->Add(gr); |
#ifndef WIN32 |
521 |
} |
uhtoc(ihdir[0],ncw,chdir,nch ,16); |
522 |
|
#else |
523 |
Float_t x; |
uhtoc(ihdir[0],ncw,chdir,16,nch); |
524 |
for (i=0;i<=ncx+1;i++) { |
#endif |
525 |
x = h1->GetBinCenter(i); |
strcpy(hbookdir,chdir); |
526 |
h1->Fill(x,hi(id,i)); |
for (i=16;i>0;i--) { |
527 |
if (hcbits[8]) h1->SetBinError(i,hie(id,i)); |
if (chdir[i] == 0) continue; |
528 |
if (gr && i>0 && i<=ncx) gr->SetPoint(i,x,hif(id,i)); |
if (chdir[i] != ' ') break; |
529 |
} |
chdir[i] = 0; |
530 |
Float_t ymin, ymax; |
} |
531 |
if (hcbits[19]) { |
#ifndef WIN32 |
532 |
ymax = q[lcid+kMAX1]; |
hcdir(PASSCHAR(hbookdir),PASSCHAR(" "),16,1); |
533 |
h1->SetMaximum(ymax); |
#else |
534 |
} |
hcdir(PASSCHAR(hbookdir),PASSCHAR(" ")); |
535 |
if (hcbits[20]) { |
#endif |
536 |
ymin = q[lcid+kMIN1]; |
TDirectory *newdir = new TDirectory(chdir,chdir); |
537 |
h1->SetMinimum(ymin); |
newdir->cd(); |
538 |
} |
convert_directory(chdir, file_raw); |
539 |
h1->SetEntries(nentries); |
#ifndef WIN32 |
540 |
h1->Write(); |
hcdir(PASSCHAR("\\"),PASSCHAR(" "),1,1); |
541 |
delete h1; |
#else |
542 |
} |
hcdir(PASSCHAR("\\"),PASSCHAR(" ")); |
543 |
//____________________________________________________________________________ |
#endif |
544 |
void convert_cwn(Int_t id,char* file_raw) |
newdir->Write(); |
545 |
{ |
cursav->cd(); |
546 |
const int kNchar=9; |
} |
547 |
int nvar; |
} |
548 |
int ier=0; |
|
549 |
int i,j; |
//____________________________________________________________________________ |
550 |
int nsub,itype,isize,ielem; |
void convert_1d(Int_t id) |
551 |
char *chtag_out; |
{ |
552 |
float *x; |
if (id > 0) sprintf(idname,"h%d",id); |
553 |
float rmin[1000], rmax[1000]; |
else sprintf(idname,"h_%d",-id); |
554 |
|
hnoent(id,nentries); |
555 |
if (id > 0) sprintf(idname,"h%d",id); |
#ifndef WIN32 |
556 |
else sprintf(idname,"h_%d",-id); |
hgive(id,chtitl,ncx,xmin,xmax,ncy,ymin,ymax,nwt,idb,80); |
557 |
hnoent(id,nentries); |
#else |
558 |
printf(" Converting CWN with ID= %d, nentries = %d\n",id,nentries); |
hgive(id,chtitl,80,ncx,xmin,xmax,ncy,ymin,ymax,nwt,idb); |
559 |
nvar=0; |
#endif |
560 |
#ifndef WIN32 |
chtitl[4*nwt] = 0; |
561 |
hgiven(id,chtitl,nvar,PASSCHAR(""),rmin[0],rmax[0],80,0); |
TH1F *h1; |
562 |
#else |
Int_t i; |
563 |
hgiven(id,chtitl,80,nvar,PASSCHAR(""),rmin[0],rmax[0]); |
if (hcbits[5]) { |
564 |
#endif |
Int_t lbins = lq[lcid-2]; |
565 |
|
Double_t *xbins = new Double_t[ncx+1]; |
566 |
|
for (i=0;i<=ncx;i++) xbins[i] = q[lbins+i+1]; |
567 |
chtag_out = new char[nvar*kNchar+1]; |
h1 = new TH1F(idname,chtitl,ncx,xbins); |
568 |
Int_t *charflag = new Int_t[nvar]; |
delete [] xbins; |
569 |
Int_t *lenchar = new Int_t[nvar]; |
} else { |
570 |
Int_t *boolflag = new Int_t[nvar]; |
h1 = new TH1F(idname,chtitl,ncx,xmin,xmax); |
571 |
Int_t *lenbool = new Int_t[nvar]; |
} |
572 |
UChar_t *boolarr = new UChar_t[10000]; |
if (hcbits[8]) h1->Sumw2(); |
573 |
x = new float[nvar]; |
TGraph *gr = 0; |
574 |
char *bigbuf = new char[2500000]; |
if (hcbits[11]) { |
575 |
|
gr = new TGraph(ncx); |
576 |
chtag_out[nvar*kNchar]=0; |
h1->GetListOfFunctions()->Add(gr); |
577 |
for (i=0;i<80;i++)chtitl[i]=0; |
} |
578 |
#ifndef WIN32 |
|
579 |
hgiven(id,chtitl,nvar,chtag_out,rmin[0],rmax[0],80,kNchar); |
Float_t x; |
580 |
#else |
for (i=0;i<=ncx+1;i++) { |
581 |
hgiven(id,chtitl,80,nvar,chtag_out,kNchar,rmin[0],rmax[0]); |
x = h1->GetBinCenter(i); |
582 |
#endif |
h1->Fill(x,hi(id,i)); |
583 |
#ifndef WIN32 |
if (hcbits[8]) h1->SetBinError(i,hie(id,i)); |
584 |
hbnam(id,PASSCHAR(" "),bigbuf[0],PASSCHAR("$CLEAR"),0,1,6); |
if (gr && i>0 && i<=ncx) gr->SetPoint(i,x,hif(id,i)); |
585 |
#else |
} |
586 |
hbnam(id,PASSCHAR(" "),bigbuf[0],PASSCHAR("$CLEAR"),0); |
Float_t ymin, ymax; |
587 |
#endif |
if (hcbits[19]) { |
588 |
|
ymax = q[lcid+kMAX1]; |
589 |
Int_t bufpos = 0; |
h1->SetMaximum(ymax); |
590 |
Int_t isachar = 0; |
} |
591 |
Int_t isabool = 0; |
if (hcbits[20]) { |
592 |
char fullname[1024]; |
ymin = q[lcid+kMIN1]; |
593 |
char name[512]; |
h1->SetMinimum(ymin); |
594 |
char block[512]; |
} |
595 |
char oldblock[512]; |
h1->SetEntries(nentries); |
596 |
Int_t nbits = 0; |
h1->Write(); |
597 |
strcpy(oldblock,"OLDBLOCK"); |
delete h1; |
598 |
Int_t oldischar = -1; |
} |
599 |
for (i=80;i>0;i--) {if (chtitl[i] == ' ') chtitl[i] = 0; } |
//____________________________________________________________________________ |
600 |
TTree *tree = new TTree(idname,chtitl); |
void convert_cwn(Int_t id,char* file_raw) |
601 |
for(i=0; i<nvar;i++) { |
{ |
602 |
memset(name,' ',sizeof(name)); |
const int kNchar=9; |
603 |
name[sizeof(name)-1] = 0; |
int nvar; |
604 |
memset(block,' ',sizeof(block)); |
int ier=0; |
605 |
block[sizeof(block)-1] = 0; |
int i,j; |
606 |
memset(fullname,' ',sizeof(fullname)); |
int nsub,itype,isize,ielem; |
607 |
fullname[sizeof(fullname)-1]=0; |
char *chtag_out; |
608 |
#ifndef WIN32 |
float *x; |
609 |
hntvar2(id,i+1,PASSCHAR(name),PASSCHAR(fullname),PASSCHAR(block),nsub,itype,isize,nbits,ielem,512,1024,512); |
float rmin[1000], rmax[1000]; |
610 |
#else |
|
611 |
hntvar2(id,i+1,PASSCHAR(name),PASSCHAR(fullname),PASSCHAR(block),nsub,itype,isize,nbits,ielem); |
if (id > 0) sprintf(idname,"h%d",id); |
612 |
#endif |
else sprintf(idname,"h_%d",-id); |
613 |
|
hnoent(id,nentries); |
614 |
for (j=510;j>0;j--) { |
printf(" Converting CWN with ID= %d, nentries = %d\n",id,nentries); |
615 |
if(golower) name[j] = tolower(name[j]); |
nvar=0; |
616 |
if (name[j] == ' ') name[j] = 0; |
#ifndef WIN32 |
617 |
} |
hgiven(id,chtitl,nvar,PASSCHAR(""),rmin[0],rmax[0],80,0); |
618 |
if (golower == 2) name[0] = tolower(name[0]); |
#else |
619 |
|
hgiven(id,chtitl,80,nvar,PASSCHAR(""),rmin[0],rmax[0]); |
620 |
for (j=1022;j>0;j--) { |
#endif |
621 |
if(golower && fullname[j-1] != '[') fullname[j] = tolower(fullname[j]); |
|
622 |
// convert also character after [, if golower == 2 |
|
623 |
if (golower == 2) fullname[j] = tolower(fullname[j]); |
chtag_out = new char[nvar*kNchar+1]; |
624 |
if (fullname[j] == ' ') fullname[j] = 0; |
Int_t *charflag = new Int_t[nvar]; |
625 |
} |
Int_t *lenchar = new Int_t[nvar]; |
626 |
// convert also first character, if golower == 2 |
Int_t *boolflag = new Int_t[nvar]; |
627 |
if (golower == 2) fullname[0] = tolower(fullname[0]); |
Int_t *lenbool = new Int_t[nvar]; |
628 |
for (j=510;j>0;j--) { |
UChar_t *boolarr = new UChar_t[10000]; |
629 |
if (block[j] == ' ') block[j] = 0; |
x = new float[nvar]; |
630 |
else break; |
char *bigbuf = new char[2500000]; |
631 |
} |
|
632 |
if (itype == 1) { |
chtag_out[nvar*kNchar]=0; |
633 |
if( isize == 4 ) strcat(fullname,"/F"); |
for (i=0;i<80;i++)chtitl[i]=0; |
634 |
else if( isize == 8) strcat(fullname,"/D"); |
#ifndef WIN32 |
635 |
} |
hgiven(id,chtitl,nvar,chtag_out,rmin[0],rmax[0],80,kNchar); |
636 |
|
#else |
637 |
|
hgiven(id,chtitl,80,nvar,chtag_out,kNchar,rmin[0],rmax[0]); |
638 |
// add support for 1-byte (Char_t) and 2-byte (Short_t) integers |
#endif |
639 |
Int_t nBytesUsed = 4; // default for integers |
#ifndef WIN32 |
640 |
|
hbnam(id,PASSCHAR(" "),bigbuf[0],PASSCHAR("$CLEAR"),0,1,6); |
641 |
if( itype == 2 ) |
#else |
642 |
{ |
hbnam(id,PASSCHAR(" "),bigbuf[0],PASSCHAR("$CLEAR"),0); |
643 |
if( optcwn == 1 ) |
#endif |
644 |
{ |
|
645 |
if( nbits > 16 ) |
Int_t bufpos = 0; |
646 |
{ |
Int_t isachar = 0; |
647 |
strcat(fullname,"/I"); |
Int_t isabool = 0; |
648 |
} |
char fullname[1024]; |
649 |
else |
char name[512]; |
650 |
{ |
char block[512]; |
651 |
if( nbits > 8 ) |
char oldblock[512]; |
652 |
{ |
Int_t nbits = 0; |
653 |
strcat(fullname,"/S"); |
strcpy(oldblock,"OLDBLOCK"); |
654 |
nBytesUsed = 2; |
Int_t oldischar = -1; |
655 |
} |
for (i=80;i>0;i--) {if (chtitl[i] == ' ') chtitl[i] = 0; } |
656 |
else |
TTree *tree = new TTree(idname,chtitl); |
657 |
{ |
for(i=0; i<nvar;i++) { |
658 |
strcat(fullname,"/B"); |
memset(name,' ',sizeof(name)); |
659 |
nBytesUsed = 1; |
name[sizeof(name)-1] = 0; |
660 |
} |
memset(block,' ',sizeof(block)); |
661 |
} |
block[sizeof(block)-1] = 0; |
662 |
} |
memset(fullname,' ',sizeof(fullname)); |
663 |
else |
fullname[sizeof(fullname)-1]=0; |
664 |
{ |
#ifndef WIN32 |
665 |
strcat(fullname,"/I"); |
hntvar2(id,i+1,PASSCHAR(name),PASSCHAR(fullname),PASSCHAR(block),nsub,itype,isize,nbits,ielem,512,1024,512); |
666 |
} |
#else |
667 |
} |
hntvar2(id,i+1,PASSCHAR(name),PASSCHAR(fullname),PASSCHAR(block),nsub,itype,isize,nbits,ielem); |
668 |
|
#endif |
669 |
// add support for 1-byte (UChar_t) and 2-byte (UShort_t) integers |
|
670 |
if ( itype == 3 ) |
for (j=510;j>0;j--) { |
671 |
{ |
if(golower) name[j] = tolower(name[j]); |
672 |
if( optcwn == 1 ) |
if (name[j] == ' ') name[j] = 0; |
673 |
{ |
} |
674 |
if( nbits > 16) |
if (golower == 2) name[0] = tolower(name[0]); |
675 |
{ |
|
676 |
strcat(fullname,"/i"); |
for (j=1022;j>0;j--) { |
677 |
} |
if(golower && fullname[j-1] != '[') fullname[j] = tolower(fullname[j]); |
678 |
else |
// convert also character after [, if golower == 2 |
679 |
{ |
if (golower == 2) fullname[j] = tolower(fullname[j]); |
680 |
if( nbits > 8 ) |
if (fullname[j] == ' ') fullname[j] = 0; |
681 |
{ |
} |
682 |
strcat(fullname,"/s"); |
// convert also first character, if golower == 2 |
683 |
nBytesUsed = 2; |
if (golower == 2) fullname[0] = tolower(fullname[0]); |
684 |
} |
for (j=510;j>0;j--) { |
685 |
else |
if (block[j] == ' ') block[j] = 0; |
686 |
{ |
else break; |
687 |
strcat(fullname,"/b"); |
} |
688 |
nBytesUsed = 1; |
if (itype == 1) { |
689 |
} |
if( isize == 4 ) strcat(fullname,"/F"); |
690 |
} |
else if( isize == 8) strcat(fullname,"/D"); |
691 |
} |
} |
692 |
else |
|
693 |
{ |
|
694 |
strcat(fullname,"/i"); |
// add support for 1-byte (Char_t) and 2-byte (Short_t) integers |
695 |
} |
Int_t nBytesUsed = 4; // default for integers |
696 |
} |
|
697 |
|
if( itype == 2 ) |
698 |
|
{ |
699 |
|
if( optcwn == 1 ) |
700 |
|
{ |
701 |
// if (itype == 4) strcat(fullname,"/i"); |
if( nbits > 16 ) |
702 |
if (itype == 4) strcat(fullname,"/b"); |
{ |
703 |
if (itype == 5) strcat(fullname,"/C"); |
strcat(fullname,"/I"); |
704 |
//printf("Creating branch:%s, block:%s, fullname:%s, nsub=%d, itype=%d, isize=%d, ielem=%d\n",name,block,fullname,nsub,itype,isize,ielem); |
} |
705 |
Int_t ischar; |
else |
706 |
if (itype == 5) ischar = 1; |
{ |
707 |
else ischar = 0; |
if( nbits > 8 ) |
708 |
if (ischar != oldischar || strcmp(oldblock,block) != 0) { |
{ |
709 |
strcpy(oldblock,block); |
strcat(fullname,"/S"); |
710 |
oldischar = ischar; |
nBytesUsed = 2; |
711 |
Int_t lblock = strlen(block); |
} |
712 |
Long_t add= (Long_t)&bigbuf[bufpos]; |
else |
713 |
#ifndef WIN32 |
{ |
714 |
hbnam(id,PASSCHAR(block),add,PASSCHAR("$SET"),ischar,lblock,4); |
strcat(fullname,"/B"); |
715 |
#else |
nBytesUsed = 1; |
716 |
hbnam(id,PASSCHAR(block),add,PASSCHAR("$SET"),ischar); |
} |
717 |
#endif |
} |
718 |
|
} |
719 |
} |
else |
720 |
TBranch *branch = tree->Branch(name,(void*)&bigbuf[bufpos],fullname,bufsize); |
{ |
721 |
boolflag[i] = -10; |
strcat(fullname,"/I"); |
722 |
charflag[i] = 0; |
} |
723 |
if (itype == 4) {isabool++; boolflag[i] = bufpos; lenbool[i] = ielem;} |
} |
724 |
bufpos += isize*ielem; |
|
725 |
if (ischar) {isachar++; charflag[i] = bufpos-1; lenchar[i] = isize*ielem;} |
// add support for 1-byte (UChar_t) and 2-byte (UShort_t) integers |
726 |
TObjArray *ll= branch->GetListOfLeaves(); |
if ( itype == 3 ) |
727 |
TLeaf *leaf = (TLeaf*)ll->UncheckedAt(0); |
{ |
728 |
if (!leaf) continue; |
if( optcwn == 1 ) |
729 |
TLeafI *leafcount = (TLeafI*)leaf->GetLeafCount(); |
{ |
730 |
if (leafcount) { |
if( nbits > 16) |
731 |
if (leafcount->GetMaximum() <= 0) leafcount->SetMaximum(ielem); |
{ |
732 |
} |
strcat(fullname,"/i"); |
733 |
} |
} |
734 |
Int_t cf,l; |
else |
735 |
for(i=1;i<=nentries;i++) { |
{ |
736 |
hgnt(id,i,ier); |
if( nbits > 8 ) |
737 |
if (isabool) { // if column is boolean |
{ |
738 |
for (j=0;j<nvar;j++) { |
strcat(fullname,"/s"); |
739 |
cf = boolflag[j]; |
nBytesUsed = 2; |
740 |
if (cf >-1) { |
} |
741 |
for (l=0;l<lenbool[j];l++) { |
else |
742 |
#ifdef R__BYTESWAP |
{ |
743 |
boolarr[l] = (UChar_t)bigbuf[cf+4*l]; |
strcat(fullname,"/b"); |
744 |
#else |
nBytesUsed = 1; |
745 |
boolarr[l] = (UChar_t)bigbuf[cf+4*l+3]; |
} |
746 |
#endif |
} |
747 |
} |
} |
748 |
memcpy(&bigbuf[cf],boolarr,lenbool[j]); |
else |
749 |
} |
{ |
750 |
} |
strcat(fullname,"/i"); |
751 |
} |
} |
752 |
if (isachar) { // if column is character, set terminator |
} |
753 |
for (j=0;j<nvar;j++) { |
|
754 |
cf = charflag[j]; |
|
755 |
if (cf) { |
|
756 |
bigbuf[cf] = '\0'; |
|
757 |
if (bigbuf[cf-1] != ' ') continue; |
// if (itype == 4) strcat(fullname,"/i"); |
758 |
bigbuf[cf-1] = '\0'; |
if (itype == 4) strcat(fullname,"/b"); |
759 |
if (bigbuf[cf-2] != ' ') continue; |
if (itype == 5) strcat(fullname,"/C"); |
760 |
bigbuf[cf-2] = '\0'; |
//printf("Creating branch:%s, block:%s, fullname:%s, nsub=%d, itype=%d, isize=%d, ielem=%d\n",name,block,fullname,nsub,itype,isize,ielem); |
761 |
} |
Int_t ischar; |
762 |
} |
if (itype == 5) ischar = 1; |
763 |
} |
else ischar = 0; |
764 |
|
if (ischar != oldischar || strcmp(oldblock,block) != 0) { |
765 |
// if optimizing cwn ntuple then look up bufpos and adjust integers to be shorts or chars |
strcpy(oldblock,block); |
766 |
if( optcwn == 1 ) |
oldischar = ischar; |
767 |
{ |
Int_t lblock = strlen(block); |
768 |
bufpos = 0; |
Long_t add= (Long_t)&bigbuf[bufpos]; |
769 |
for(int k=0; k<nvar;k++) |
#ifndef WIN32 |
770 |
{ |
hbnam(id,PASSCHAR(block),add,PASSCHAR("$SET"),ischar,lblock,4); |
771 |
#ifndef WIN32 |
#else |
772 |
hntvar2(id,k+1,PASSCHAR(name),PASSCHAR(fullname),PASSCHAR(block),nsub,itype,isize,nbits,ielem,32,64,32); |
hbnam(id,PASSCHAR(block),add,PASSCHAR("$SET"),ischar); |
773 |
#else |
#endif |
774 |
hntvar2(id,k+1,PASSCHAR(name),PASSCHAR(fullname),PASSCHAR(block),nsub,itype,isize,nbits,ielem); |
|
775 |
#endif |
} |
776 |
|
TBranch *branch = tree->Branch(name,(void*)&bigbuf[bufpos],fullname,bufsize); |
777 |
Int_t nBytesUsed = 4; // default for integers |
boolflag[i] = -10; |
778 |
|
charflag[i] = 0; |
779 |
if ( itype == 2 || itype == 3) |
if (itype == 4) {isabool++; boolflag[i] = bufpos; lenbool[i] = ielem;} |
780 |
{ |
bufpos += isize*ielem; |
781 |
if( nbits > 16) |
if (ischar) {isachar++; charflag[i] = bufpos-1; lenchar[i] = isize*ielem;} |
782 |
{ |
TObjArray *ll= branch->GetListOfLeaves(); |
783 |
// do nothing for integers of 4 byte |
TLeaf *leaf = (TLeaf*)ll->UncheckedAt(0); |
784 |
} |
if (!leaf) continue; |
785 |
else |
TLeafI *leafcount = (TLeafI*)leaf->GetLeafCount(); |
786 |
{ |
if (leafcount) { |
787 |
if( nbits > 8 ) |
if (leafcount->GetMaximum() <= 0) leafcount->SetMaximum(ielem); |
788 |
{ |
} |
789 |
nBytesUsed = 2; |
} |
790 |
} |
Int_t cf,l; |
791 |
else |
for(i=1;i<=nentries;i++) { |
792 |
{ |
hgnt(id,i,ier); |
793 |
nBytesUsed = 1; |
if (isabool) { // if column is boolean |
794 |
} |
for (j=0;j<nvar;j++) { |
795 |
} |
cf = boolflag[j]; |
796 |
} |
if (cf >-1) { |
797 |
|
for (l=0;l<lenbool[j];l++) { |
798 |
if(nBytesUsed == 1) |
#ifdef R__BYTESWAP |
799 |
{ |
boolarr[l] = (UChar_t)bigbuf[cf+4*l]; |
800 |
|
#else |
801 |
for(Int_t index = 0; index < ielem; index++) |
boolarr[l] = (UChar_t)bigbuf[cf+4*l+3]; |
802 |
{ |
#endif |
803 |
// shift all chars with data to be one after another |
} |
804 |
bigbuf[bufpos + index*nBytesUsed ] = bigbuf[bufpos + index * isize]; |
memcpy(&bigbuf[cf],boolarr,lenbool[j]); |
805 |
} |
} |
806 |
} |
} |
807 |
else |
} |
808 |
{ |
if (isachar) { // if column is character, set terminator |
809 |
if(nBytesUsed == 2) |
for (j=0;j<nvar;j++) { |
810 |
{ |
cf = charflag[j]; |
811 |
|
if (cf) { |
812 |
for(Int_t index = 0; index < ielem; index++) |
bigbuf[cf] = '\0'; |
813 |
{ |
if (bigbuf[cf-1] != ' ') continue; |
814 |
// shift all shorts ( 2 chars) with data to be one after another |
bigbuf[cf-1] = '\0'; |
815 |
bigbuf[bufpos + index*nBytesUsed ] = bigbuf[bufpos + index * isize]; |
if (bigbuf[cf-2] != ' ') continue; |
816 |
bigbuf[bufpos + index*nBytesUsed+1 ] = bigbuf[bufpos + index * isize+1]; |
bigbuf[cf-2] = '\0'; |
817 |
} |
} |
818 |
} |
} |
819 |
} |
} |
820 |
bufpos += isize*ielem; |
|
821 |
} |
// if optimizing cwn ntuple then look up bufpos and adjust integers to be shorts or chars |
822 |
} |
if( optcwn == 1 ) |
823 |
|
{ |
824 |
tree->Fill(); |
bufpos = 0; |
825 |
} |
for(int k=0; k<nvar;k++) |
826 |
|
{ |
827 |
tree->Write(); |
#ifndef WIN32 |
828 |
|
hntvar2(id,k+1,PASSCHAR(name),PASSCHAR(fullname),PASSCHAR(block),nsub,itype,isize,nbits,ielem,32,64,32); |
829 |
std::cout << "Invoking Digitizer" << endl << flush; |
#else |
830 |
|
hntvar2(id,k+1,PASSCHAR(name),PASSCHAR(fullname),PASSCHAR(block),nsub,itype,isize,nbits,ielem); |
831 |
Digitizer* dig = new Digitizer(tree,file_raw); |
#endif |
832 |
dig->Loop(); |
|
833 |
dig->Close(); |
Int_t nBytesUsed = 4; // default for integers |
834 |
|
|
835 |
std::cout << "Finished" << endl << flush; |
if ( itype == 2 || itype == 3) |
836 |
|
{ |
837 |
} |
if( nbits > 16) |
838 |
|
{ |
839 |
|
// do nothing for integers of 4 byte |
840 |
|
} |
841 |
|
else |
842 |
|
{ |
843 |
|
if( nbits > 8 ) |
844 |
|
{ |
845 |
|
nBytesUsed = 2; |
846 |
|
} |
847 |
|
else |
848 |
|
{ |
849 |
|
nBytesUsed = 1; |
850 |
|
} |
851 |
|
} |
852 |
|
} |
853 |
|
|
854 |
|
if(nBytesUsed == 1) |
855 |
|
{ |
856 |
|
|
857 |
|
for(Int_t index = 0; index < ielem; index++) |
858 |
|
{ |
859 |
|
// shift all chars with data to be one after another |
860 |
|
bigbuf[bufpos + index*nBytesUsed ] = bigbuf[bufpos + index * isize]; |
861 |
|
} |
862 |
|
} |
863 |
|
else |
864 |
|
{ |
865 |
|
if(nBytesUsed == 2) |
866 |
|
{ |
867 |
|
|
868 |
|
for(Int_t index = 0; index < ielem; index++) |
869 |
|
{ |
870 |
|
// shift all shorts ( 2 chars) with data to be one after another |
871 |
|
bigbuf[bufpos + index*nBytesUsed ] = bigbuf[bufpos + index * isize]; |
872 |
|
bigbuf[bufpos + index*nBytesUsed+1 ] = bigbuf[bufpos + index * isize+1]; |
873 |
|
} |
874 |
|
} |
875 |
|
} |
876 |
|
bufpos += isize*ielem; |
877 |
|
} |
878 |
|
} |
879 |
|
|
880 |
|
tree->Fill(); |
881 |
|
} |
882 |
|
|
883 |
|
tree->Write(); |
884 |
|
|
885 |
|
std::cout << "Invoking Digitizer" << endl << flush; |
886 |
|
|
887 |
|
Digitizer* dig = new Digitizer(tree,file_raw); |
888 |
|
dig->Loop(); |
889 |
|
dig->Close(); |
890 |
|
|
891 |
|
std::cout << "Finished" << endl << flush; |
892 |
|
|
893 |
|
} |
894 |
|
|
895 |
|
|