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

Annotation of /yoda/techmodel/CalibCalPedReader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2.4 - (hide annotations) (download)
Thu Jan 13 14:48:04 2005 UTC (19 years, 11 months ago) by kusanagi
Branch: MAIN
Changes since 2.3: +5 -5 lines
Added unpackError initialization.

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 2.4 "$Header: /home/cvsmanager/yoda/techmodel/CalibCalPedReader.cpp,v 2.3 2004/12/09 13:17:24 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     << "\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