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

Annotation of /yoda/techmodel/CalibCalPedReader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6.1 - (hide annotations) (download)
Tue May 30 19:10:01 2006 UTC (18 years, 6 months ago) by kusanagi
Branch: MAIN
Changes since 6.0: +1 -6 lines
Major update.
All the packet officially produced by PAMELA are implemented and unpacked.
The RegistryEvent Packet has been removed and put into another library.
New version, releasd by D.Campana, of tofunpack.

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

  ViewVC Help
Powered by ViewVC 1.1.23