/[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.1 by kusanagi, Thu Aug 19 15:24:46 2004 UTC revision 3.0 by kusanagi, Fri Mar 4 15:54:11 2005 UTC
# Line 2  Line 2 
2  // Implementation of the EventTrkReader class.  // Implementation of the EventTrkReader class.
3    
4    
5  #define UINT unsigned int  
6  #define BYTE  unsigned char  #include <log4cxx/logger.h>
 #include <string>  
 #include <log4cpp/Category.hh>  
 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*, char*);
16        //Struct per il passaggio di dati da e verso la chiamata fortran
17        extern struct {
18          int good0;
19          int nev0;
20          int DAQmode[12];
21          int DSPnumber[12];
22          int DATAlength[12];
23          int eventn[12];
24          int nclust[12];
25          int cutc[12];
26          int cutcl[12];
27          int addrcluster[12][3];
28          int signcluster[12][3];
29          int fc[12];
30          int compressiontime[12];
31          int fl5[12];
32          int fl4[12];
33          int fl3[12];
34          int fl2[12];
35          int fl1[12];
36          int fl6[12];
37          int checksum[12];
38          int TOTDATAlength;
39          int datatracker[49152];
40          int pnum[12];
41          int cmdnum[12];
42          int bid[12];
43          int alarm[12];
44          int aswr[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    
52  static log4cpp::Category& cat = log4cpp::Category::getInstance("pamela.techmodel.EventTrkReader");    static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.EventTrkReader"));
53    
54  /**  /**
55   * Constructor.   * Constructor.
56   */   */
57  EventTrkReader::EventTrkReader(void):  EventTrkReader::EventTrkReader(void):
58    TechmodelAlgorithm(PacketType::EventTrk, "TechmodelEventTrkReader") {    TechmodelAlgorithm(PacketType::EventTrk, "TechmodelEventTrkReader") {
59    cat <<  log4cpp::Priority::DEBUG    logger->debug(_T("Constructor"));
       <<  "Constructor "  
       <<  "\n " << log4cpp::CategoryStream::ENDLINE;  
60    eventTrk = new EventTrkEvent();    eventTrk = new EventTrkEvent();
61  }  }
62    
# Line 46  std::string EventTrkReader::GetVersionIn Line 73  std::string EventTrkReader::GetVersionIn
73   * event reader routines for all packet types.   * event reader routines for all packet types.
74   */   */
75  void EventTrkReader::Init(PamelaRun *run) {  void EventTrkReader::Init(PamelaRun *run) {
76      logger->debug(_T("Initialize"));
77    SetInputStream(run);    SetInputStream(run);
78    run->WriteSubPacket(this, &eventTrk, eventTrk->Class());    run->WriteSubPacket(this, &eventTrk, eventTrk->Class());
79  }  }
# Line 53  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;
86            
87        //Scrivo un file temporaneo per passarlo alla routine
88        //Speriamo di cambiare la routine per passargli un buffer.....
89        //DIR *dirp;
90        
91        //std::string pathDir((char*)getenv("YODA_DATA"));
92        
93        //pathDir = pathDir + "/todatemp.dat";
94        char *subData;
95        subData = new char[length];
96        InputFile->read(subData, sizeof(unsigned char)*length);
97    
98        stringstream oss;
99        oss.str("");
100        oss << getenv("YODA_DATA") << "/" << time(NULL) << "evtrk.dat";
101        FILE *pfile;
102        pfile = fopen(oss.str().c_str(), "wb");
103        fwrite(subData, 1, length, pfile);
104        fclose(pfile);
105        
106        //Call to the FORTRAN routin that unpack tracker events
107        trkeventpkt_(&ERROR, (char*)oss.str().c_str());
108        
109        remove(oss.str().c_str());
110    
111        /*if (ERROR != 0) {
112            char *errmsg;
113            switch (ERROR){
114                case 1: errmsg = "---------------------";
115            }
116        } else {*/
117        //Store the unpacked data
118        eventTrk->unpackError    = ERROR;
119        eventTrk->good0          = level0_.good0;
120        eventTrk->nev0           = level0_.nev0;
121        memcpy(eventTrk->DAQmode, level0_.DAQmode, sizeof(eventTrk->DAQmode));
122        memcpy(eventTrk->DSPnumber, level0_.DSPnumber, sizeof(eventTrk->DSPnumber));
123        memcpy(eventTrk->DATAlength, level0_.DATAlength, sizeof(eventTrk->DATAlength));
124        memcpy(eventTrk->eventn, level0_.eventn, sizeof(eventTrk->eventn));
125        memcpy(eventTrk->nclust, level0_.nclust, sizeof(eventTrk->nclust));
126        memcpy(eventTrk->cutc, level0_.cutc, sizeof(eventTrk->cutc));
127        memcpy(eventTrk->cutcl, level0_.cutcl, sizeof(eventTrk->cutcl));
128    //    memcpy(eventTrk->addrcluster, (level0_.addrcluster), sizeof(eventTrk->addrcluster));
129    //    memcpy(eventTrk->signcluster, (level0_.signcluster), sizeof(eventTrk->signcluster));
130    //--------have to invert array because of FORTRAN <-> C different management of the indexes
131        int tempAddr[3][12];
132        int tempSign[3][12];
133        memcpy(tempAddr, (level0_.addrcluster), sizeof(tempAddr));
134        memcpy(tempSign, (level0_.signcluster), sizeof(tempSign));
135        for (int j = 0; j < 12; j++){
136            for (int i = 0; i < 3; i++){
137                eventTrk->addrcluster[j][i] = tempAddr[i][j];
138                eventTrk->signcluster[j][i] = tempSign[i][j];
139            }
140        }
141    //-----------------------------------------------------------------------------------------
142            
143        memcpy(eventTrk->fc, level0_.fc, sizeof(eventTrk->fc));
144        memcpy(eventTrk->compressiontime, level0_.compressiontime, sizeof(eventTrk->compressiontime));
145        memcpy(eventTrk->fl1, level0_.fl1, sizeof(eventTrk->fl1));
146        memcpy(eventTrk->fl2, level0_.fl2, sizeof(eventTrk->fl2));
147        memcpy(eventTrk->fl3, level0_.fl3, sizeof(eventTrk->fl3));
148        memcpy(eventTrk->fl4, level0_.fl4, sizeof(eventTrk->fl4));
149        memcpy(eventTrk->fl5, level0_.fl5, sizeof(eventTrk->fl5));
150        memcpy(eventTrk->fl6, level0_.fl6, sizeof(eventTrk->fl6));
151        memcpy(eventTrk->pnum, level0_.pnum, sizeof(eventTrk->pnum));
152        memcpy(eventTrk->cmdnum, level0_.cmdnum, sizeof(eventTrk->cmdnum));    
153        memcpy(eventTrk->bid, level0_.bid, sizeof(eventTrk->bid));    
154        memcpy(eventTrk->alarm, level0_.alarm, sizeof(eventTrk->alarm));    
155        memcpy(eventTrk->aswr, level0_.aswr, sizeof(eventTrk->aswr));          
156        eventTrk->TOTDATAlength = level0_.TOTDATAlength;
157    
158        eventTrk->TrackerData  = new TArrayI(level0_.TOTDATAlength, level0_.datatracker);
159        //memcpy(eventTrk->datatracker, level0_.datatracker, sizeof(eventTrk->datatracker));          
160        //}
161  }  }
162    

Legend:
Removed from v.1.1  
changed lines
  Added in v.3.0

  ViewVC Help
Powered by ViewVC 1.1.23