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

Annotation of /yoda/techmodel/CalibCalPedReader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3.0 - (hide 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 kusanagi 1.7 #include <log4cxx/logger.h>
2 kusanagi 1.1 #include <fstream>
3 kusanagi 2.4
4 kusanagi 1.2 extern "C" {
5 kusanagi 2.4
6 kusanagi 1.2 //Struct per il passaggio di dati da e verso la chiamata fortran
7     extern struct {
8 kusanagi 2.2 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 kusanagi 1.2 } calib_;
19 kusanagi 1.1 //external declaration of the Fortran function
20 kusanagi 2.2 void calpedestal_(char*, long int*, int*);
21 kusanagi 1.2 }
22 kusanagi 1.1
23     #include "ReaderAlgorithms.h"
24     #include "event/CalibCalPedEvent.h"
25    
26     using namespace pamela;
27     using namespace pamela::techmodel;
28    
29 kusanagi 1.7 static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.CalibCalPedReader"));
30 kusanagi 1.1
31     /**
32     * Constructor.
33     */
34     CalibCalPedReader::CalibCalPedReader(void):
35     TechmodelAlgorithm(PacketType::Log, "TechmodelCalibCalPedReader") {
36 kusanagi 1.7 logger->debug(_T("Constructor"));
37 kusanagi 1.3 calibCalPed = new CalibCalPedEvent();
38 kusanagi 1.1 }
39    
40     /**
41     * Get a string with the version info of the algorithm.
42     */
43     std::string CalibCalPedReader::GetVersionInfo(void) const {
44     return
45 kusanagi 3.0 "$Header: /home/cvsmanager/yoda/techmodel/CalibCalPedReader.cpp,v 2.5 2005/02/09 22:20:48 kusanagi Exp $\n";
46 kusanagi 1.1 }
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 kusanagi 1.7 logger->debug(_T("Initialize"));
54 kusanagi 1.1 SetInputStream(run);
55 kusanagi 1.3 run->WriteSubPacket(this, &calibCalPed, calibCalPed->Class());
56 kusanagi 1.1 }
57    
58     /**
59     * Unpack the CalibCalPed event from an input file.
60     */
61 kusanagi 2.2 void CalibCalPedReader::RunEvent(int EventNumber, long int dataLength) throw (Exception){
62 kusanagi 1.7 stringstream oss;
63 kusanagi 1.3 int ERROR;
64 kusanagi 2.2 char packetData[dataLength];
65 kusanagi 1.3 InputFile->read(packetData, sizeof(packetData));
66    
67 kusanagi 2.3 calpedestal_((char*)packetData, &dataLength, &ERROR);
68 kusanagi 2.4
69     calibCalPed->unpackError = ERROR;
70 kusanagi 2.2 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 kusanagi 2.5 << " " << errmsg;
78 kusanagi 2.2 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 kusanagi 1.5 }
109 kusanagi 1.4 }
110 kusanagi 2.2 }
111 kusanagi 1.4
112 kusanagi 2.2 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 kusanagi 1.5 }
119 kusanagi 1.4 }
120     }
121 kusanagi 2.2 //-----------------------------------------------------------------------------------------
122 kusanagi 1.3 }
123     }
124 kusanagi 1.1
125    

  ViewVC Help
Powered by ViewVC 1.1.23