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

Annotation of /yoda/techmodel/CalibCalPedReader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2.3 - (hide annotations) (download)
Thu Dec 9 13:17:24 2004 UTC (20 years ago) by kusanagi
Branch: MAIN
Changes since 2.2: +2 -2 lines
*** empty log message ***

1 kusanagi 1.1 #define BYTE unsigned char
2     #include <string>
3 kusanagi 1.7 #include <log4cxx/logger.h>
4 kusanagi 1.1 #include <fstream>
5     #include "stdio.h"
6 kusanagi 1.2 extern "C" {
7 kusanagi 1.3 #include "CRC.h"
8 kusanagi 1.2 //Struct per il passaggio di dati da e verso la chiamata fortran
9     extern struct {
10 kusanagi 2.2 int iev;
11     int cstwerr[4];
12     float cperror[4];
13     float calped[4][11][96];
14     float calgood[4][11][96];
15     float calthr[4][11][6];
16     float calrms[4][11][96];
17     float calbase[4][11][6];
18     float calvar[4][11][6];
19     float calpuls[4][11][96];
20 kusanagi 1.2 } calib_;
21 kusanagi 1.1 //external declaration of the Fortran function
22 kusanagi 2.2 void calpedestal_(char*, long int*, int*);
23 kusanagi 1.2 }
24 kusanagi 1.1
25     #include "ReaderAlgorithms.h"
26     #include "event/CalibCalPedEvent.h"
27    
28     using namespace pamela;
29     using namespace pamela::techmodel;
30    
31 kusanagi 1.7 static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.CalibCalPedReader"));
32 kusanagi 1.1
33     /**
34     * Constructor.
35     */
36     CalibCalPedReader::CalibCalPedReader(void):
37     TechmodelAlgorithm(PacketType::Log, "TechmodelCalibCalPedReader") {
38 kusanagi 1.7 logger->debug(_T("Constructor"));
39 kusanagi 1.3 calibCalPed = new CalibCalPedEvent();
40 kusanagi 1.1 }
41    
42     /**
43     * Get a string with the version info of the algorithm.
44     */
45     std::string CalibCalPedReader::GetVersionInfo(void) const {
46     return
47 kusanagi 2.3 "$Header: /home/cvsmanager/yoda/techmodel/CalibCalPedReader.cpp,v 2.2 2004/12/03 22:08:00 kusanagi Exp $\n";
48 kusanagi 1.1 }
49    
50     /**
51     * Initialize the algorithm with a special run. This will initialize the
52     * event reader routines for all packet types.
53     */
54     void CalibCalPedReader::Init(PamelaRun *run) {
55 kusanagi 1.7 logger->debug(_T("Initialize"));
56 kusanagi 1.1 SetInputStream(run);
57 kusanagi 1.3 run->WriteSubPacket(this, &calibCalPed, calibCalPed->Class());
58 kusanagi 1.1 }
59    
60     /**
61     * Unpack the CalibCalPed event from an input file.
62     */
63 kusanagi 2.2 void CalibCalPedReader::RunEvent(int EventNumber, long int dataLength) throw (Exception){
64 kusanagi 1.7 stringstream oss;
65 kusanagi 1.3 int ERROR;
66 kusanagi 2.2 char packetData[dataLength];
67 kusanagi 1.3 InputFile->read(packetData, sizeof(packetData));
68    
69 kusanagi 2.3 calpedestal_((char*)packetData, &dataLength, &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     << "\n" <<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 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