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

Contents of /yoda/techmodel/CalibCalPedReader.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.5: +1 -1 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 #include <log4cxx/logger.h>
2 #include <fstream>
3
4 extern "C" {
5
6 //Struct per il passaggio di dati da e verso la chiamata fortran
7 extern struct {
8 int iev;
9 int cstwerr[4];
10 float cperror[4];
11 float calped[4][11][96];
12 float calgood[4][11][96];
13 float calthr[4][11][6];
14 float calrms[4][11][96];
15 float calbase[4][11][6];
16 float calvar[4][11][6];
17 float calpuls[4][11][96];
18 } calib_;
19 //external declaration of the Fortran function
20 void calpedestal_(char*, long int*, int*);
21 }
22
23 #include "ReaderAlgorithms.h"
24 #include "event/CalibCalPedEvent.h"
25
26 using namespace pamela;
27 using namespace pamela::techmodel;
28
29 static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.CalibCalPedReader"));
30
31 /**
32 * Constructor.
33 */
34 CalibCalPedReader::CalibCalPedReader(void):
35 TechmodelAlgorithm(PacketType::Log, "TechmodelCalibCalPedReader") {
36 logger->debug(_T("Constructor"));
37 calibCalPed = new CalibCalPedEvent();
38 }
39
40 /**
41 * Get a string with the version info of the algorithm.
42 */
43 std::string CalibCalPedReader::GetVersionInfo(void) const {
44 return
45 "$Header: /home/cvsmanager/yoda/techmodel/CalibCalPedReader.cpp,v 2.5 2005/02/09 22:20:48 kusanagi Exp $\n";
46 }
47
48 /**
49 * Initialize the algorithm with a special run. This will initialize the
50 * event reader routines for all packet types.
51 */
52 void CalibCalPedReader::Init(PamelaRun *run) {
53 logger->debug(_T("Initialize"));
54 SetInputStream(run);
55 run->WriteSubPacket(this, &calibCalPed, calibCalPed->Class());
56 }
57
58 /**
59 * Unpack the CalibCalPed event from an input file.
60 */
61 void CalibCalPedReader::RunEvent(int EventNumber, long int dataLength) throw (Exception){
62 stringstream oss;
63 int ERROR;
64 char packetData[dataLength];
65 InputFile->read(packetData, sizeof(packetData));
66
67 calpedestal_((char*)packetData, &dataLength, &ERROR);
68
69 calibCalPed->unpackError = ERROR;
70 if (ERROR != 0) {
71 char *errmsg;
72 switch (ERROR){
73 case 1: errmsg = "CALORIMETER NOT FOUND";
74 }
75 oss.str("");
76 oss << "Fortran77 function calpedestal error code = " << ERROR
77 << " " << errmsg;
78 logger->warn(oss.str().c_str());
79 } else {
80 //Store the unpacked data
81 calibCalPed->iev = calib_.iev;
82 memcpy(calibCalPed->cstwerr, calib_.cstwerr, sizeof(calibCalPed->cstwerr));
83 memcpy(calibCalPed->cperror, calib_.cperror, sizeof(calibCalPed->cperror));
84 //--------have to invert array because of FORTRAN <-> C different management of the indexes
85 float tempCalped[96][11][4];
86 float tempCalgood[96][11][4];
87 float tempCalthr[6][11][4];
88 float tempCalrms[96][11][4];
89 float tempCalbase[6][11][4];
90 float tempCalvar[6][11][4];
91 float tempCalpuls[96][11][4];
92
93 memcpy(tempCalped, calib_.calped, sizeof(tempCalped));
94 memcpy(tempCalgood, calib_.calgood, sizeof(tempCalgood));
95 memcpy(tempCalthr, calib_.calthr, sizeof(tempCalthr));
96 memcpy(tempCalrms, calib_.calrms, sizeof(tempCalrms));
97 memcpy(tempCalbase, calib_.calbase, sizeof(tempCalbase));
98 memcpy(tempCalvar, calib_.calvar, sizeof(tempCalvar));
99 memcpy(tempCalpuls, calib_.calpuls, sizeof(tempCalpuls));
100
101 for (int i = 0; i < 4; i++){
102 for (int j = 0; j <11; j++){
103 for (int z = 0; z < 96; z++){
104 calibCalPed->calped[i][j][z] = tempCalped[z][j][i];
105 calibCalPed->calgood[i][j][z] = tempCalgood[z][j][i];
106 calibCalPed->calrms[i][j][z] = tempCalrms[z][j][i];
107 calibCalPed->calpuls[i][j][z] = tempCalpuls[z][j][i];
108 }
109 }
110 }
111
112 for (int i = 0; i < 4; i++){
113 for (int j = 0; j <11; j++){
114 for (int z = 0; z < 6; z++){
115 calibCalPed->calthr[i][j][z] = tempCalthr[z][j][i];
116 calibCalPed->calbase[i][j][z] = tempCalbase[z][j][i];
117 calibCalPed->calvar[i][j][z] = tempCalvar[z][j][i];
118 }
119 }
120 }
121 //-----------------------------------------------------------------------------------------
122 }
123 }
124
125

  ViewVC Help
Powered by ViewVC 1.1.23