/[PAMELA software]/yoda/techmodel/EventTrkReader.cpp
ViewVC logotype

Diff of /yoda/techmodel/EventTrkReader.cpp

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

revision 1.2 by kusanagi, Tue Sep 21 20:24:33 2004 UTC revision 6.2 by kusanagi, Wed Mar 8 10:49:50 2006 UTC
# Line 2  Line 2 
2  // Implementation of the EventTrkReader class.  // Implementation of the EventTrkReader class.
3    
4    
5  #define UINT unsigned int  
 #define BYTE  unsigned char  
 #include <string>  
6  #include <log4cxx/logger.h>  #include <log4cxx/logger.h>
 extern "C" {  
 #include <sys/time.h>  
 #include "CRC.h"  
 }  
7    
8  #include <fstream>  #include <fstream>
 #include "stdio.h"  
9  #include "ReaderAlgorithms.h"  #include "ReaderAlgorithms.h"
10    
11  #include "event/EventTrkEvent.h"  #include "event/EventTrkEvent.h"
12    
13    extern "C" {
14        //Passo il path verso la il file temporaneo
15        extern void trkeventpkt_(int*, unsigned char[], long int*, int*);
16        //Struct per il passaggio di dati da e verso la chiamata fortran
17        extern struct {
18            int DAQmode[12];
19            int DSPnumber[12];
20            int DATAlength[12];
21            int eventn[12];
22            int nclust[12];
23            int cutc[12];
24            int cutcl[12];
25            int addrcluster[3][12];
26            int signcluster[3][12];
27            int fc[12];
28            int compressiontime[12];
29            int fl5[12];
30            int fl4[12];
31            int fl3[12];
32            int fl2[12];
33            int fl1[12];
34            int fl6[12];
35            int checksum[12];
36            int TOTDATAlength;
37            int datatracker[49152];
38            int pnum[12];
39            int cmdnum[12];
40            int bid[12];
41            int alarm[12];
42            int aswr[12];
43            int good0;          
44            int crc[12];        
45        } level0_;
46    #include <dirent.h>
47    }
48    
49  using namespace pamela;  using namespace pamela;
50  using namespace pamela::techmodel;  using namespace pamela::techmodel;
51    
# Line 52  void EventTrkReader::Init(PamelaRun *run Line 81  void EventTrkReader::Init(PamelaRun *run
81  /**  /**
82   * Unpack the EventTrk event from an input file.   * Unpack the EventTrk event from an input file.
83   */   */
84  void EventTrkReader::RunEvent(int EventNumber, long int length) {  void EventTrkReader::RunEvent(int EventNumber, long int length) throw (Exception){
85        int       ERROR=0;
86        stringstream oss;
87        char *subData = new char[length];
88        InputFile->read(subData, sizeof(unsigned char)*length);
89        int curpos=1;
90        
91        //Call to the FORTRAN routin that unpack tracker events
92        trkeventpkt_( &ERROR,(unsigned char*)subData, &length, &curpos);
93    
94       if (ERROR != 0) {
95            char *errmsg;
96            switch (ERROR){
97                case 1: errmsg = "GENERIC TRACKER ERROR";
98                break;
99                default: errmsg = "TRACKER ERRROR CODE UNIDENTIFIED";
100            }
101            oss.str("");
102            oss << "Fortran77 function trkeventpkt: " <<  errmsg;
103            logger->warn(oss.str().c_str());
104        }
105        //Store the unpacked data
106        eventTrk->unpackError    = ERROR;
107        eventTrk->good0          = level0_.good0;
108        memcpy(eventTrk->DAQmode,    level0_.DAQmode,    sizeof(eventTrk->DAQmode));
109        memcpy(eventTrk->DSPnumber,  level0_.DSPnumber,  sizeof(eventTrk->DSPnumber));
110        memcpy(eventTrk->DATAlength, level0_.DATAlength, sizeof(eventTrk->DATAlength));
111        memcpy(eventTrk->eventn,     level0_.eventn,     sizeof(eventTrk->eventn));
112        memcpy(eventTrk->nclust,     level0_.nclust,     sizeof(eventTrk->nclust));
113        memcpy(eventTrk->cutc,       level0_.cutc,       sizeof(eventTrk->cutc));
114        memcpy(eventTrk->cutcl,      level0_.cutcl,      sizeof(eventTrk->cutcl));
115    //--------have to invert array because of FORTRAN <-> C different management of the indexes
116        int tempAddr[3][12];
117        int tempSign[3][12];
118        memcpy(tempAddr, (level0_.addrcluster), sizeof(tempAddr));
119        memcpy(tempSign, (level0_.signcluster), sizeof(tempSign));
120        for (int j = 0; j < 12; j++){
121            for (int i = 0; i < 3; i++){
122                eventTrk->addrcluster[j][i] = tempAddr[i][j];
123                eventTrk->signcluster[j][i] = tempSign[i][j];
124            }
125        }
126    //-----------------------------------------------------------------------------------------
127            
128        memcpy(eventTrk->fc,                 level0_.fc,              sizeof(eventTrk->fc));
129        memcpy(eventTrk->compressiontime,    level0_.compressiontime, sizeof(eventTrk->compressiontime));
130        memcpy(eventTrk->fl1,                level0_.fl1,             sizeof(eventTrk->fl1));
131        memcpy(eventTrk->fl2,                level0_.fl2,             sizeof(eventTrk->fl2));
132        memcpy(eventTrk->fl3,                level0_.fl3,             sizeof(eventTrk->fl3));
133        memcpy(eventTrk->fl4,                level0_.fl4,             sizeof(eventTrk->fl4));
134        memcpy(eventTrk->fl5,                level0_.fl5,             sizeof(eventTrk->fl5));
135        memcpy(eventTrk->fl6,                level0_.fl6,             sizeof(eventTrk->fl6));
136        memcpy(eventTrk->checksum,           level0_.checksum,        sizeof(eventTrk->checksum));
137        memcpy(eventTrk->pnum,               level0_.pnum,            sizeof(eventTrk->pnum));
138        memcpy(eventTrk->cmdnum,             level0_.cmdnum,          sizeof(eventTrk->cmdnum));    
139        memcpy(eventTrk->bid,                level0_.bid,             sizeof(eventTrk->bid));    
140        memcpy(eventTrk->alarm,              level0_.alarm,           sizeof(eventTrk->alarm));    
141        memcpy(eventTrk->aswr,               level0_.aswr,            sizeof(eventTrk->aswr));          
142        memcpy(eventTrk->crc,                level0_.crc,             sizeof(eventTrk->crc));          
143            
144        eventTrk->TOTDATAlength = level0_.TOTDATAlength;
145        eventTrk->TrackerData   = TArrayI(level0_.TOTDATAlength, level0_.datatracker);
146  }  }
147    

Legend:
Removed from v.1.2  
changed lines
  Added in v.6.2

  ViewVC Help
Powered by ViewVC 1.1.23