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

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

  ViewVC Help
Powered by ViewVC 1.1.23