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

Contents of /yoda/techmodel/CalibTrk2Reader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3.0 - (show annotations) (download)
Fri Mar 4 15:54:11 2005 UTC (19 years, 11 months ago) by kusanagi
Branch: MAIN
Changes since 2.6: +2 -2 lines
Error proof version.
Implemented all detectors packets plus all the main telemetries packets.
Missing all the Init and Alarm packets.
Disabled CRC control on VarDump, ArrDump, TabDump for CPU debugging needs
(the data formats seems correct even if CRC get wrong)

1 /** @file
2 * $Source: /home/cvsmanager/yoda/techmodel/CalibTrk2Reader.cpp,v $
3 * $Id: CalibTrk2Reader.cpp,v 2.6 2005/01/13 14:48:04 kusanagi Exp $
4 * $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 <log4cxx/logger.h>
15 extern "C" {
16 #include "CRC.h"
17 //Passo il path verso la il file temporaneo
18 extern void trkcalibpkt_(int*, char*);
19
20 //Struct per il passaggio di dati da e verso la chiamata fortran
21 extern struct {
22 int DAQmode[6];
23 int DSPnumber[6];
24 int calibnumber[6];
25 int ncalib_event[6];
26 int ped_l1[6];
27 int ped_l2[6];
28 int ped_l3[6];
29 int sig_l1[6];
30 int sig_l2[6];
31 int sig_l3[6];
32 int nbad_l1[6];
33 int nbad_l2[6];
34 int nbad_l3[6];
35 int cal_flag[6];
36 int checksum[6];
37 int DSPbad_par[6][3072];
38 float DSPped_par[6][3072];
39 float DSPsig_par[6][3072];
40 } trkcalib_;
41 #include <dirent.h>
42 }
43
44 #include <fstream>
45 #include "stdio.h"
46 #include "ReaderAlgorithms.h"
47
48 #include "event/CalibTrk2Event.h"
49
50 using namespace pamela;
51 using namespace pamela::techmodel;
52
53 static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.CalibTrk2Reader"));
54
55 /**
56 * Constructor.
57 */
58 CalibTrk2Reader::CalibTrk2Reader(void):
59 TechmodelAlgorithm(PacketType::CalibTrk2, "TechmodelCalibTrk2Reader") {
60 logger->debug(_T("Constructor"));
61 calibTrk2 = new CalibTrk2Event();
62 }
63
64 /**
65 * Get a string with the version info of the algorithm.
66 */
67 std::string CalibTrk2Reader::GetVersionInfo(void) const {
68 return
69 "$Header: /home/cvsmanager/yoda/techmodel/CalibTrk2Reader.cpp,v 2.6 2005/01/13 14:48:04 kusanagi Exp $\n";
70 }
71
72 /**
73 * Initialize the algorithm with a special run. This will initialize the
74 * event reader routines for all packet types.
75 */
76 void CalibTrk2Reader::Init(PamelaRun *run) {
77 logger->debug(_T("Initialize"));
78 SetInputStream(run);
79 run->WriteSubPacket(this, &calibTrk2, calibTrk2->Class());
80 }
81
82 /**
83 * Unpack the CalibTrk2 event from an input file.
84 */
85 void CalibTrk2Reader::RunEvent(int EventNumber, long int dataLength) throw (Exception){
86 std::stringstream oss;
87 char subData[dataLength];
88 int ERROR;
89
90 InputFile->read(subData, sizeof(unsigned char)*dataLength);
91
92 //Scrivo un file temporaneo per passarlo alla routine
93 //Speriamo di cambiare la routine per passargli un buffer.....
94 oss.str("");
95 oss << getenv("YODA_DATA") << "/" << time(NULL) << "trc2.dat";
96 FILE *pfile;
97 pfile = fopen(oss.str().c_str(), "wb");
98 fwrite(subData, 1, dataLength, pfile);
99 fclose(pfile);
100
101 //Call to the FORTRAN routin that unpack tracker events
102 trkcalibpkt_(&ERROR, (char*)oss.str().c_str());
103
104 calibTrk2->unpackError = ERROR;
105 remove(oss.str().c_str());
106 if (ERROR != 0) {
107 oss.str("");
108 oss << "Fortran77 function trkcalibpkt error code = " << ERROR;
109 logger->warn(oss.str().c_str());
110 }
111 //delete the temporary file
112 remove((char*)oss.str().c_str());
113
114 //Store the unpacked data
115 memcpy(calibTrk2->DAQmode, trkcalib_.DAQmode, sizeof(calibTrk2->DAQmode));
116 memcpy(calibTrk2->DSPnumber, trkcalib_.DSPnumber, sizeof(calibTrk2->DSPnumber));
117 memcpy(calibTrk2->calibnumber, trkcalib_.calibnumber, sizeof(calibTrk2->calibnumber));
118 memcpy(calibTrk2->DSPnumber, trkcalib_.ncalib_event, sizeof(calibTrk2->ncalib_event));
119 memcpy(calibTrk2->ped_l1, trkcalib_.ped_l1, sizeof(calibTrk2->ped_l1));
120 memcpy(calibTrk2->ped_l2, trkcalib_.ped_l2, sizeof(calibTrk2->ped_l2));
121 memcpy(calibTrk2->ped_l3, trkcalib_.ped_l3, sizeof(calibTrk2->ped_l3));
122 memcpy(calibTrk2->sig_l1, trkcalib_.sig_l1, sizeof(calibTrk2->sig_l1));
123 memcpy(calibTrk2->sig_l2, trkcalib_.sig_l2, sizeof(calibTrk2->sig_l2));
124 memcpy(calibTrk2->sig_l3, trkcalib_.sig_l3, sizeof(calibTrk2->sig_l3));
125 memcpy(calibTrk2->nbad_l1, trkcalib_.nbad_l1, sizeof(calibTrk2->nbad_l1));
126 memcpy(calibTrk2->nbad_l2, trkcalib_.nbad_l2, sizeof(calibTrk2->nbad_l2));
127 memcpy(calibTrk2->nbad_l3, trkcalib_.nbad_l3, sizeof(calibTrk2->nbad_l3));
128 memcpy(calibTrk2->cal_flag, trkcalib_.cal_flag, sizeof(calibTrk2->cal_flag));
129 // memcpy(calibTrk2->DSPbad_par, trkcalib_.DSPbad_par, sizeof(calibTrk2->DSPbad_par));
130 // memcpy(calibTrk2->DSPped_par, trkcalib_.DSPped_par, sizeof(calibTrk2->DSPped_par));
131 // memcpy(calibTrk2->DSPsig_par, trkcalib_.DSPsig_par, sizeof(calibTrk2->DSPsig_par));
132 //--------have to invert array because of FORTRAN <-> C different management of the indexes
133 int tempBad_par[3072][6];
134 int tempPed_par[3072][6];
135 int tempSig_par[3072][6];
136 memcpy(tempBad_par,trkcalib_.DSPbad_par, sizeof(tempBad_par));
137 memcpy(tempPed_par,trkcalib_.DSPped_par, sizeof(tempPed_par));
138 memcpy(tempSig_par,trkcalib_.DSPsig_par, sizeof(tempSig_par));
139
140 for (int i = 0; i < 6; i++){
141 for (int j = 0; j < 3072; j++){
142 calibTrk2->DSPbad_par[i][j] = tempBad_par[j][i];
143 calibTrk2->DSPped_par[i][j] = tempPed_par[j][i];
144 calibTrk2->DSPsig_par[i][j] = tempSig_par[j][i];
145 }
146 }
147 //-----------------------------------------------------------------------------------------
148 oss.str("");
149 oss << "Fortran77 function trkcalibpkt error code = " << ERROR;
150 logger->warn(oss.str().c_str());
151
152 //delete [] subData;
153 }
154

  ViewVC Help
Powered by ViewVC 1.1.23