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

Contents of /yoda/techmodel/CalibCalPedReader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6.2 - (show annotations) (download)
Tue May 30 19:10:03 2006 UTC (18 years, 6 months ago) by kusanagi
Branch: MAIN
CVS Tags: YODA6_3/10, YODA6_3/06, YODA6_3/04, YODA6_3/05, YODA6_3/07, YODA6_3/00, YODA6_3/01, YODA6_3/02, YODA6_3/03, YODA6_3/08, YODA6_3/09
Changes since 6.1: +1 -1 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
2 extern "C" {
3
4 //Struct per il passaggio di dati da e verso la chiamata fortran
5 extern struct {
6 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 //float calpuls[4][11][96];
16 } calib_;
17 //external declaration of the Fortran function
18 void calpedestal_(char*, long int*, int*);
19 }
20
21 #include "ReaderAlgorithms.h"
22 using namespace pamela::techmodel;
23
24 static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.CalibCalPedReader"));
25
26 /**
27 * Constructor.
28 */
29 CalibCalPedReader::CalibCalPedReader(void):
30 TechmodelAlgorithm(PacketType::Log, "TechmodelCalibCalPedReader") {
31 logger->debug(_T("Constructor"));
32 calibCalPed = new CalibCalPedEvent();
33 }
34
35 /**
36 * Get a string with the version info of the algorithm.
37 */
38 std::string CalibCalPedReader::GetVersionInfo(void) const {
39 return
40 "$Header: /home/cvsmanager/yoda/techmodel/CalibCalPedReader.cpp,v 6.1 2006/05/30 19:10:01 kusanagi Exp $\n";
41 }
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 logger->debug(_T("Initialize"));
49 SetInputStream(run);
50 run->WriteSubPacket(this, &calibCalPed, calibCalPed->Class());
51 }
52
53 /**
54 * Unpack the CalibCalPed event from an input file.
55 */
56 void CalibCalPedReader::RunEvent(int EventNumber, long int dataLength) throw (Exception){
57 stringstream oss;
58 int ERROR;
59 char packetData[dataLength];
60 InputFile->read(packetData, sizeof(packetData));
61
62 calpedestal_((char*)packetData, &dataLength, &ERROR);
63
64 calibCalPed->unpackError = ERROR;
65 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 << " " << errmsg;
73 logger->warn(oss.str().c_str());
74 } //else {
75 //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 //float tempCalpuls[96][11][4];
87
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 //memcpy(tempCalpuls, calib_.calpuls, sizeof(tempCalpuls));
95
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 //calibCalPed->calpuls[i][j][z] = tempCalpuls[z][j][i];
103 }
104 }
105 }
106
107 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 }
114 }
115 }
116 //-----------------------------------------------------------------------------------------
117 //}
118 }
119
120

  ViewVC Help
Powered by ViewVC 1.1.23