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

Annotation of /yoda/techmodel/CalibTrk1Reader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (hide annotations) (download)
Sat Jul 17 20:03:38 2004 UTC (20 years, 4 months ago) by kusanagi
Branch: MAIN
Changes since 1.2: +56 -43 lines
*** empty log message ***

1 kusanagi 1.1 /** @file
2 kusanagi 1.2 * $Source: /home/cvsmanager/yoda/techmodel/CalibTrk1Reader.cpp,v $
3 kusanagi 1.3 * $Id: CalibTrk1Reader.cpp,v 1.2 2004/07/06 13:31:18 kusanagi Exp $
4 kusanagi 1.1 * $Author: kusanagi $
5     *
6     * Implementation of the LogReader class.
7     * ToBeDone:
8     * Control the CRC for the entire data Packet not just for single records
9     */
10    
11     #define UINT unsigned int
12     #define BYTE unsigned char
13     #include <string>
14     #include <log4cpp/Category.hh>
15     extern "C" {
16 kusanagi 1.3 #include "CRC.h"
17 kusanagi 1.1 //The int* return the error code
18     //The char* is the path to the temporary file
19     extern void trkcalibpkt_(int*, char*);
20    
21     //Struct per il passaggio di dati da e verso la chiamata fortran
22     extern struct {
23     int DAQmode[6];
24     int DSPnumber[6];
25     int calibnumber[6];
26     int ncalib_event[6];
27     int ped_l1[6];
28     int ped_l2[6];
29     int ped_l3[6];
30     int sig_l1[6];
31     int sig_l2[6];
32     int sig_l3[6];
33     int nbad_l1[6];
34     int nbad_l2[6];
35     int nbad_l3[6];
36     int cal_flag[6];
37     int checksum[6];
38     int DSPbad_par[6][3072];
39     float DSPped_par[6][3072];
40     float DSPsig_par[6][3072];
41     } trkcalib_;
42    
43     #include <dirent.h>
44     }
45    
46     #include <fstream>
47     #include "stdio.h"
48     #include "ReaderAlgorithms.h"
49     #include "event/PamelaRun.h"
50    
51 kusanagi 1.2 #include "event/CalibTrk1Event.h"
52 kusanagi 1.1
53     using namespace pamela;
54     using namespace pamela::techmodel;
55    
56 kusanagi 1.2 static log4cpp::Category& cat = log4cpp::Category::getInstance("pamela.techmodel.CalibTrk1Reader");
57 kusanagi 1.1
58     /**
59     * Constructor.
60     */
61 kusanagi 1.2 CalibTrk1Reader::CalibTrk1Reader(void):
62     TechmodelAlgorithm(PacketType::CalibTrk1, "TechmodelCalibTrk1Reader") {
63 kusanagi 1.1 cat << log4cpp::Priority::DEBUG
64     << "Constructor "
65     << "\n " << log4cpp::CategoryStream::ENDLINE;
66 kusanagi 1.2 calibTrk1 = new CalibTrk1Event();
67 kusanagi 1.1 }
68    
69     /**
70     * Get a string with the version info of the algorithm.
71     */
72 kusanagi 1.2 std::string CalibTrk1Reader::GetVersionInfo(void) const {
73 kusanagi 1.1 return
74 kusanagi 1.3 "$Header: /home/cvsmanager/yoda/techmodel/CalibTrk1Reader.cpp,v 1.2 2004/07/06 13:31:18 kusanagi Exp $\n";
75 kusanagi 1.1 }
76    
77     /**
78     * Initialize the algorithm with a special run. This will initialize the
79     * event reader routines for all packet types.
80     */
81 kusanagi 1.2 void CalibTrk1Reader::Init(PamelaRun *run) {
82 kusanagi 1.1 SetInputStream(run);
83 kusanagi 1.2 run->WriteSubPacket(this, &calibTrk1, calibTrk1->Class());
84 kusanagi 1.1 }
85    
86     /**
87     * Unpack the CalibTrk event from an input file.
88     */
89     //void CalibTrkReader::RunEvent(int EventNumber, long int length, char *subData) {
90 kusanagi 1.2 void CalibTrk1Reader::RunEvent(int EventNumber, long int length) {
91 kusanagi 1.3
92     char *subData;
93     char eventCRC[2];
94     UINT16 subCRC; //CRC of the data
95     UINT16 readCRC; //CRC read from the end of the subpacket
96     long int dataLength;
97    
98 kusanagi 1.1 //the 2 bytes subtracted belong to the final event CRC bytes
99 kusanagi 1.3 dataLength = length - (long int)2;
100 kusanagi 1.1
101 kusanagi 1.3 subData = new char[dataLength];
102 kusanagi 1.1 InputFile->read(subData, sizeof(unsigned char)*dataLength);
103 kusanagi 1.3 subCRC = CM_Compute_CRC16(0, (BYTE*)subData, dataLength);
104 kusanagi 1.1
105 kusanagi 1.3 //took the final CRC to compare it with the previous calculated CRC of the data
106     InputFile->read(eventCRC, sizeof(eventCRC));
107     readCRC = (((UINT16)(eventCRC[0]<<8))&0xFF00) + (((UINT16)eventCRC[1])&0x00FF);
108    
109     if (subCRC == readCRC){
110     int ERROR;
111     //Scrivo un file temporaneo per passarlo alla routine
112     //Speriamo di cambiare la routine per passargli un buffer.....
113     DIR *dirp;
114     std::string pathDir((char*)getenv("YODA_DATA"));
115     pathDir = pathDir + "/todatemp.dat";;
116     FILE *pfile;
117     pfile = fopen((char*)pathDir.c_str(), "wb");
118     fwrite(subData, 1, dataLength, pfile);
119     fclose(pfile);
120 kusanagi 1.1
121 kusanagi 1.3 //Call to the FORTRAN routin that unpack tracker events
122     trkcalibpkt_(&ERROR, (char*)pathDir.c_str());
123 kusanagi 1.1
124 kusanagi 1.3 remove((char*)pathDir.c_str());
125 kusanagi 1.1
126 kusanagi 1.3 //Store the unpacked data
127     memcpy(calibTrk1->DAQmode, trkcalib_.DAQmode, sizeof(calibTrk1->DAQmode));
128     memcpy(calibTrk1->DSPnumber, trkcalib_.DSPnumber, sizeof(calibTrk1->DSPnumber));
129     memcpy(calibTrk1->calibnumber, trkcalib_.calibnumber, sizeof(calibTrk1->calibnumber));
130     memcpy(calibTrk1->DSPnumber, trkcalib_.ncalib_event, sizeof(calibTrk1->ncalib_event));
131     memcpy(calibTrk1->ped_l1, trkcalib_.ped_l1, sizeof(calibTrk1->ped_l1));
132     memcpy(calibTrk1->ped_l2, trkcalib_.ped_l2, sizeof(calibTrk1->ped_l2));
133     memcpy(calibTrk1->ped_l3, trkcalib_.ped_l3, sizeof(calibTrk1->ped_l3));
134     memcpy(calibTrk1->sig_l1, trkcalib_.sig_l1, sizeof(calibTrk1->sig_l1));
135     memcpy(calibTrk1->sig_l2, trkcalib_.sig_l2, sizeof(calibTrk1->sig_l2));
136     memcpy(calibTrk1->sig_l3, trkcalib_.sig_l3, sizeof(calibTrk1->sig_l3));
137     memcpy(calibTrk1->nbad_l1, trkcalib_.nbad_l1, sizeof(calibTrk1->nbad_l1));
138     memcpy(calibTrk1->nbad_l2, trkcalib_.nbad_l2, sizeof(calibTrk1->nbad_l2));
139     memcpy(calibTrk1->nbad_l3, trkcalib_.nbad_l3, sizeof(calibTrk1->nbad_l3));
140     memcpy(calibTrk1->cal_flag, trkcalib_.cal_flag, sizeof(calibTrk1->cal_flag));
141     memcpy(calibTrk1->checksum, trkcalib_.checksum, sizeof(calibTrk1->checksum));
142     memcpy(calibTrk1->DSPbad_par,trkcalib_.DSPbad_par, sizeof(calibTrk1->DSPbad_par));
143     memcpy(calibTrk1->DSPped_par,trkcalib_.DSPped_par, sizeof(calibTrk1->DSPped_par));
144     memcpy(calibTrk1->DSPsig_par,trkcalib_.DSPsig_par, sizeof(calibTrk1->DSPsig_par));
145 kusanagi 1.1
146     cat << log4cpp::Priority::ERROR
147     << "Fortran77 function trkcalibpkt error code = " << ERROR
148     << "\n " << log4cpp::CategoryStream::ENDLINE;
149 kusanagi 1.3 free(subData);
150     } else {
151     cat << log4cpp::Priority::ERROR
152     << "Wrong CRC for CalibTrk1 Packet "
153     << "\n " << log4cpp::CategoryStream::ENDLINE;
154     }
155 kusanagi 1.1 }
156    

  ViewVC Help
Powered by ViewVC 1.1.23