/[PAMELA software]/PamelaDigitizer/Pamelagp2Digits.cxx
ViewVC logotype

Diff of /PamelaDigitizer/Pamelagp2Digits.cxx

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1.1.1 by silvio, Thu Sep 13 11:00:53 2007 UTC revision 1.14 by pizzolot, Fri Oct 16 09:15:51 2009 UTC
# Line 4  Line 4 
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 : Jan Conrad (conrad@particle.kth.se)  //      Created : 2006 Jan Conrad  (conrad@particle.kth.se)
8  //      Modified: 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 -hbookfile 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  //  HOWTO (EXPERT, only for testing purposes)  //  NB: more details are present in the file HOW-TO-DIGIT.TXT
16  //  Pamelagp2Digits hbook_filename root_filename  raw_filename compress tolower  //
17  //  - If the 2nd and 3rd parameters are missing the names are generated from the hbook file name.  //  HOWTO
18  //  - The following flags are from h2root and default values are used:  //  see usage(). Example:
19  //    if compress is missing (or = 1) the ROOT file will be compressed  //  Pamelagp2Digits -hbookfile filename.his -rootfile filename.root -pamfile filename.pam -calocompress [VAL] -rootcompress [VAL]
20  //    if compress = 0 the ROOT file will not be compressed.  //  The following flags are from h2root and default values are used:
21  //    if tolower is missing (or = 1) ntuple column names are converted to lower case  //   if rootcompress is missing (or = 1) the ROOT file will be compressed
22  //                but the first character is converted to upper case.  //   if rootcompress = 0 the ROOT file will not be compressed.
23  //    if tolower = 2 same as tolower=1 except that the first character is also  //   if tolower is missing (or = 1) ntuple column names are converted to lower case
24    //               but the first character is converted to upper case.
25    //   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    //
29  //  MODIFICATIONS:  //  MODIFICATIONS:
30  //  v. 1.0 (S.Orsi, September 2007)  //  (C.Pizzolotto. Trieste. october 2009)
31    //  - added DigitizeCALOCOMPRESS to write calorimeter data in compress mode
32    //  - changed way of reading input parameters. now the input order is not important.
33    //
34    //  v. 1.5 (S.Orsi, Roma2, 11 October 2007)
35    //  - 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
36    //
37    //  v. 1.4 (S.Orsi, Roma2, 11 October 2007)
38    //  - similar to v. 1.3
39    //
40    //  v. 1.3 (S.Orsi, Roma2, 11 October 2007)
41    //  - TOF: + changes and major corrections in ADC and TDC (W.Menn, D.Campana, S.Orsi)
42    //         + flag DEBUG added (default: DEBUG=false; if true, print on screem some messages to debug)
43    //  - AC: + shift register filled;
44    //        + minor bugs fixed
45    //        + counters increment by 1 at each event (they were constant before)
46    //  - S4: + minor bugs fixed (S.Borisov)
47    //        + 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
48    //  - 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.
49    //  - 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
50    //  - digitizer version numbers modified according to CVS repository (v1.00->v1.1, v1.01->v1.2)
51    //  - 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)
52    //
53    //  v. 1.2 (S.Orsi, Roma2, 28 September 2007)
54    //  - TOF TDC inserted (to be tuned)
55    //  - improved tracker dEdx, tracker saturation inserted (S.Bottai)
56    //  - S4 routine inserted in code (not in read-out)
57    //  - bugs with packet length corrected
58    //  - small bugs fixed
59    //  - 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
60    //
61    //  v. 1.1 (S.Orsi, Roma2, 13 September 2007)
62  //  - trigger (dummy), tof (preliminary, adc only), ND (preliminary) inserted  //  - trigger (dummy), tof (preliminary, adc only), ND (preliminary) inserted
63  //  - various changes and bug fixes  //  - various changes and bug fixes
64  //  - padding increased (fPADbuffer=64, fPadding = padbytes+64)  //  - padding increased (fPADbuffer=64, fPadding = padbytes+64)
65  //  //
66  //  v. beta (J.Conrad)  //  v. beta (J.Conrad, KTH, 2006)
67  //  - compiles; includes pscu, calo, trk, ac  //  - compiles; includes pscu, calo, trk, ac; not present on cvs
68  //  //
69  /////////////////////////////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////
70    
 #include <stdlib.h>  
 #include <string.h>  
 #include <ctype.h>  
 #include "Riostream.h"  
 #include "TFile.h"  
 #include "TDirectory.h"  
 #include "TTree.h"  
 #include "TLeafI.h"  
 #include "TH1.h"  
 #include "TH2.h"  
 #include "TProfile.h"  
 #include "TGraph.h"  
 #include "TMath.h"  
71  #include "Digitizer.h"  #include "Digitizer.h"
72    
73  int Error;   //to be removed soon  using namespace std;
74    
75    //int Error;   //to be removed soon
76    
77  //  Define the names of the Fortran common blocks for the different OSs  //  Define the names of the Fortran common blocks for the different OSs
78    
# Line 88  char chtitl[128]; Line 111  char chtitl[128];
111  int ncx,ncy,nwt,idb;  int ncx,ncy,nwt,idb;
112  int lcont, lcid, lcdir;  int lcont, lcid, lcdir;
113  float xmin,xmax,ymin,ymax;  float xmin,xmax,ymin,ymax;
114    int comprcalomode;
115  const Int_t kMIN1 = 7;  const Int_t kMIN1 = 7;
116  const Int_t kMAX1 = 8;  const Int_t kMAX1 = 8;
117    
# Line 246  Int_t golower  = 1; Line 270  Int_t golower  = 1;
270  Int_t bufsize  = 64000;  Int_t bufsize  = 64000;
271  Int_t optcwn = 1;  Int_t optcwn = 1;
272    
273    char *DigitizerInfo(bool print);
274    
 int main(int argc, char **argv)  
275    
 {  
   if (argc < 2) {  
      printf("Error: Pamelagp2Digits \n");  
      printf("Pamelagp2Digits file.hbook file.root file.pam [compress] [tolower] [lrecl] [bufsize] [optcwn] \n");  
      printf("      if file.root is not given  it will be = file.root\n");  
      printf("      compress = 1 by default (use 0 for no compression)\n");  
      printf("      tolower  = 1 by default (use 0 to keep case of column names)\n");  
      printf("      lrecl =0 by default (must be specified if >8092)\n");  
      printf("      bufsize = 8000 by default (branch buffer size)\n");  
      printf("      for cwn ntuple only: optcwn  = 1 (default)  1-byte int -> char, 2-byte int -> short, (use 0 to keep 4-byte int) \n");  
      return 1;  
   }  
276    
277    void usage(){
278      printf("\nUsage:\n");
279      printf("\n Pamelagp2Digits [options] -hbookfile file.hbook \n");
280      printf("\n -hbookfile      path to the file that has to be converted \n");
281      printf("\n Options are:\n\n");
282      printf(" -h | --help     print this help and exit \n");
283      printf(" -rootfile       name of the root file in output finename.root,\n");
284      printf("                 if parameter is missing the name is generated from the hbook file name\n");
285      printf(" -pamfile        name of the pam file in output filename.pam \n");
286      printf("                 if parameter is missing the name is generated from the hbook file name\n");
287      printf(" -calocompress   compression of data in calorimeter- By default is 1.\n");
288      printf("                 0 is RAW, 1 is COMPRESS, 2 is FULL (2 not yet implemented)\n");
289      printf(" -rootcompress   compression of root file = 1 by default (use 0 for no compression)\n");
290      printf(" -tolower        =  1 by default :  ntuple column names are converted to lower case \n");
291      printf("                      but the first character is converted to upper case.\n");
292      printf("                 if 2  same as tolower=1 but also the first character is converted to lower case.\n");
293      printf("                 use 0 to keep case of column names\n");
294      printf(" -lrecl          =0 by default (must be specified if >8092)\n");
295      printf(" -bufsize        = 8000 by default (branch buffer size)\n");
296      printf(" -optcwn         for cwn ntuple only: optcwn\n");
297      printf("                 = 1 (default)  1-byte int -> char, 2-byte int -> short, (use 0 to keep 4-byte int) \n");
298      printf("\n The order of input files and options does not matter. \n");
299      printf("\n Example: \n");
300      printf(" Pamelagp2Digits -hbookfile /path/to/files/protons_1_300-500.rz  -caloCompress 1  \n\n");
301    }
302    
303    
304    int main(int argc, char *argv[])
305    {
306      
307      printf("init\n");
308    lq = &pawc[9];    lq = &pawc[9];
309    iq = &pawc[17];    iq = &pawc[17];
310    void *qq = iq;    void *qq = iq;
311     q = (float*)qq;    q = (float*)qq;
   char *file_in=argv[1];  
   char *file_out = " ";  
   char *file_raw;  
   
   Int_t compress = 1;  
   int ier=0, record_size=0;  
312    
313    if (argc > 8) {    char *file_out = new char[512];
314      optcwn = atoi(argv[8]);    strcpy(file_out," ");
315    }    char *file_raw;
316    if (argc > 7) {    Int_t rootcompress = 1;
317      bufsize = atoi(argv[7]);    Int_t calocompress = 1;
318    }      int ier=0, record_size=0;
319    if (argc > 6) {  
320      record_size = atoi(argv[6]);    char *rootfile = new char[512];
321    }    strcpy(rootfile," ");
322    if (argc > 5) {    char *pamfile = new char[512];
323      golower = atoi(argv[5]);    strcpy(pamfile," ");
324    }    char *file_in;
325    if (argc > 4) {    file_in = NULL ;
326      compress = atoi(argv[4]);  
327    }    Int_t i = 0;    
328      if ( argc > 1 ){
329    if (argc > 3) {      while ( i < argc ){
330      file_raw=argv[3];        if ( !strcmp(argv[i],"-h") || !strcmp(argv[i],"--help") ){
331            usage();
332            return 0;
333          };
334          if ( !strcmp(argv[i],"-hbookfile") ) {
335            if ( argc-1 < i+1 ){
336              usage();
337              return 1;
338            };
339            file_in = argv[i+1];            
340          };
341          if ( !strcmp(argv[i],"-rootfile") ) {
342            if ( argc-1 < i+1 ){
343              usage();
344              return 1;
345            };
346            rootfile = argv[i+1];          
347          };
348          if ( !strcmp(argv[i],"-pamfile") ) {
349            if ( argc-1 < i+1 ){
350              usage();
351              return 1;
352            };
353            pamfile = argv[i+1];            
354          };
355          if ( !strcmp(argv[i],"-calocompress") ) {
356            if ( argc-1 < i+1 ){
357              usage();
358              return 1;
359            };
360            calocompress =  atoi(argv[i+1]);                
361          };
362         if ( !strcmp(argv[i],"-rootcompress") ) {
363            if ( argc-1 < i+1 ){
364              usage();
365              return 1;
366            };
367             rootcompress = atoi(argv[i+1]);                
368          };
369         if ( !strcmp(argv[i],"-tolower") ) {
370           if ( argc-1 < i+1 ){
371             usage();
372             return 1;
373           };
374            golower = atoi(argv[i+1]);
375         };
376         if ( !strcmp(argv[i],"-lrecl") ) {
377           if ( argc-1 < i+1 ){
378             usage();
379             return 1;
380           };
381           record_size = atoi(argv[i+1]);
382         };
383         if ( !strcmp(argv[i],"-bufsize") ) {
384           if ( argc-1 < i+1 ){
385             usage();
386             return 1;
387           };
388           bufsize = atoi(argv[i+1]);
389         };
390         if ( !strcmp(argv[i],"-optcwn") ) {
391           if ( argc-1 < i+1 ){
392             usage();
393             return 1;
394           };
395           optcwn = atoi(argv[i+1]);
396         };
397         i++;
398        };
399    } else {    } else {
400        //
401        // no input parameters exit with error, we need at least the input file
402        //
403        cout << "\n ERROR: NO INPUT PARAMETERS \n";
404        usage();
405        return 1;
406      };
407    
408      if ( file_in==NULL) {
409        //
410        // file is not defined. exit with error, we need at least the input file
411        //
412        cout << "\n ERROR: NO INPUT PARAMETERS \n";
413        usage();
414        return 1;
415      }
416    
417      // define calo writing format (general variable)
418      comprcalomode = calocompress ;
419      // Define the root and pam file
420      if ( !strcmp(pamfile," ")) {
421      file_raw= new char[2000];      file_raw= new char[2000];
422      strcpy(file_raw,file_in);      strcpy(file_raw,file_in);
423      char *dot = strrchr(file_raw,'.');      char *dot = strrchr(file_raw,'.');
424      if (dot) strcpy(dot+1,"pam");      if (dot) strcpy(dot+1,"pam");
425      else     strcat(file_out,".pam");      else     strcat(file_out,".pam");
   }  
   
   if (argc > 2) {  
     file_out=argv[2];  
426    } else {    } else {
427        file_raw=pamfile;
428      }
429      if (!strcmp(rootfile," ")) {
430      file_out= new char[2000];      file_out= new char[2000];
431      strcpy(file_out,file_in);      strcpy(file_out,file_in);
432      char *dot = strrchr(file_out,'.');      char *dot = strrchr(file_out,'.');
433      if (dot) strcpy(dot+1,"gp.root");     //modified S.Orsi 09/'07      if (dot) strcpy(dot+1,"gp.root");     //modified S.Orsi 09/'07
434      else     strcat(file_out,".gp.root");      else     strcat(file_out,".gp.root");
435      } else {
436        file_out=rootfile;
437    }    }
438    
439    
440      cout<<" Check input parameters  inputfile="<<file_in<<"  root="<<file_out<<"  pam="<<file_raw<<endl;
441      cout<<"                         calocompress="<<calocompress<<"  rootcompress="<<rootcompress<<"  golow="<<golower<<endl;
442      cout<<"                         bufsize="<<bufsize<<"  cwn="<<optcwn<<endl;
443    
444    
445  #if defined(_HIUX_SOURCE) && !defined(__GNUC__)  #if defined(_HIUX_SOURCE) && !defined(__GNUC__)
446    hf_fint((char *)NULL);    hf_fint((char *)NULL);
# Line 334  int main(int argc, char **argv) Line 465  int main(int argc, char **argv)
465    
466    char root_file_title[2000];    char root_file_title[2000];
467    
468    TFile* hfile= TFile::Open(file_out,"RECREATE",root_file_title,compress);    TFile* hfile= TFile::Open(file_out,"RECREATE",root_file_title,rootcompress);
469        
470    if (!hfile) {    if (!hfile) {
471       printf("Error: can't open output file: %s \n",file_out);       printf("Error: can't open output file: %s \n",file_out);
# Line 498  void convert_directory(const char *dir, Line 629  void convert_directory(const char *dir,
629    }    }
630    h1->SetEntries(nentries);    h1->SetEntries(nentries);
631    h1->Write();    h1->Write();
632    delete h1;    //  delete h1;
633      h1->Delete();
634  }  }
635  //____________________________________________________________________________  //____________________________________________________________________________
636    void convert_cwn(Int_t id,char* file_raw)    void convert_cwn(Int_t id,char* file_raw)
# Line 786  void convert_directory(const char *dir, Line 918  void convert_directory(const char *dir,
918    
919    tree->Write();    tree->Write();
920    
921    std::cout << "Invoking Digitizer" << endl << flush;    cout << "Invoking Digitizer" << endl << flush;
922      const char *ndl[9];
923    Digitizer* dig = new Digitizer(tree,file_raw);    char *q,*q1;
924      q=(char*)malloc(5 *sizeof(char));
925      q1=(char*)malloc(5 *sizeof(char));
926      ndl[0]="nspe";
927      ndl[1]="ntof";
928      ndl[2]="ncat";
929      ndl[3]="ncas";
930      ndl[4]="ncar";
931      ndl[5]="ncal";
932      ndl[6]="nndd";
933      ndl[7]="nstr";
934      ndl[8]="comprcalomod";
935    
936      int nspe=200,ntof=200,ncat=50,ncas=50,ncar=100,ncal=1000,nnd=200,nstr=1000,par[9],tmp=0,t;
937      par[0]=nspe;
938      par[1]=ntof;
939      par[2]=ncat;
940      par[3]=ncas;
941      par[4]=ncar;
942      par[5]=ncal;
943      par[6]=nnd;
944      par[7]=nstr;
945      par[8]=comprcalomode;
946    
947      ifstream np("vectpar.dat",ios::in);
948      if(!np)printf("ATTENTION: Using default vector legths!\n");
949      else{
950        while(!np.eof()){
951          np>>q>>tmp;
952          if(np.eof())break;
953          if(tmp<=0){
954            cout<<"ATTENTION: Length of one vector is negative or equal 0!"<<endl<<q<<"="<<tmp<<endl;
955            break;
956          }
957          t=0;
958          while(tmp){
959            strcpy(q1,ndl[t]);
960            if(q[0]==q1[0] && q[1]==q1[1] && q[2]==q1[2] && q[3]==q1[3]){
961              par[t]=tmp;
962              tmp=0;
963              cout<<q<<" "<<par[t]<<"["<<t<<"]"<<endl;
964            }
965            t++;
966          }
967        }
968        nspe=par[0];
969        ntof=par[1];
970        ncat=par[2];
971        ncas=par[3];
972        ncar=par[4];
973        ncal=par[5];
974        nnd=par[6];
975        nstr=par[7];
976        comprcalomode=par[8];
977      }
978      Digitizer* dig = new Digitizer(tree,file_raw,nspe,ntof,ncat,ncas,ncar,ncal,nnd,nstr,comprcalomode);
979    dig->Loop();    dig->Loop();
980    dig->Close();    dig->Close();
981    
982    std::cout << "Finished" << endl << flush;    cout << "Finished" << endl;
983    
984  }  }
985    

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.14

  ViewVC Help
Powered by ViewVC 1.1.23