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

Contents of /yoda/techmodel/CalibTrk2Reader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4.1 - (show annotations) (download)
Wed Mar 9 19:44:19 2005 UTC (19 years, 8 months ago) by kusanagi
Branch: MAIN
CVS Tags: YODA4_0/04, YODA4_0/03, YODA4_0/02
Changes since 4.0: +3 -4 lines
Bug Fix:
The parameter DSPbad_par into the struct was defined not in the same order of the
corresponding COMMON in the FORTRAN routine.
The parameter checksum into the struct was defined not defined in the corresponding
COMMON in the FORTRAN routine so has been deleted.

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

  ViewVC Help
Powered by ViewVC 1.1.23