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

Contents of /yoda/techmodel/CalibCalPedReader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6.3 - (show annotations) (download)
Fri Sep 29 10:19:18 2006 UTC (18 years, 2 months ago) by mocchiut
Branch: MAIN
CVS Tags: YODA6_3/19, YODA6_3/18, YODA6_3/13, YODA6_3/12, YODA6_3/11, YODA6_3/17, YODA6_3/16, YODA6_3/15, YODA6_3/14, YODA6_3/20, HEAD
Changes since 6.2: +2 -1 lines
Last event bug fixed, compilation warnings/errors fixed

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: /afs/ba.infn.it/user/pamela/src/CVS/yoda/techmodel/CalibCalPedReader.cpp,v 6.2 2006/05/30 19:10:03 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 memset(packetData, 0, dataLength*sizeof(char));
61 InputFile->read(packetData, sizeof(packetData));
62
63 calpedestal_((char*)packetData, &dataLength, &ERROR);
64
65 calibCalPed->unpackError = ERROR;
66 if (ERROR != 0) {
67 char *errmsg;
68 switch (ERROR){
69 case 1: errmsg = "CALORIMETER NOT FOUND";
70 }
71 oss.str("");
72 oss << "Fortran77 function calpedestal error code = " << ERROR
73 << " " << errmsg;
74 logger->warn(oss.str().c_str());
75 } //else {
76 //Store the unpacked data
77 calibCalPed->iev = calib_.iev;
78 memcpy(calibCalPed->cstwerr, calib_.cstwerr, sizeof(calibCalPed->cstwerr));
79 memcpy(calibCalPed->cperror, calib_.cperror, sizeof(calibCalPed->cperror));
80 //--------have to invert array because of FORTRAN <-> C different management of the indexes
81 float tempCalped[96][11][4];
82 float tempCalgood[96][11][4];
83 float tempCalthr[6][11][4];
84 float tempCalrms[96][11][4];
85 float tempCalbase[6][11][4];
86 float tempCalvar[6][11][4];
87 //float tempCalpuls[96][11][4];
88
89 memcpy(tempCalped, calib_.calped, sizeof(tempCalped));
90 memcpy(tempCalgood, calib_.calgood, sizeof(tempCalgood));
91 memcpy(tempCalthr, calib_.calthr, sizeof(tempCalthr));
92 memcpy(tempCalrms, calib_.calrms, sizeof(tempCalrms));
93 memcpy(tempCalbase, calib_.calbase, sizeof(tempCalbase));
94 memcpy(tempCalvar, calib_.calvar, sizeof(tempCalvar));
95 //memcpy(tempCalpuls, calib_.calpuls, sizeof(tempCalpuls));
96
97 for (int i = 0; i < 4; i++){
98 for (int j = 0; j <11; j++){
99 for (int z = 0; z < 96; z++){
100 calibCalPed->calped[i][j][z] = tempCalped[z][j][i];
101 calibCalPed->calgood[i][j][z] = tempCalgood[z][j][i];
102 calibCalPed->calrms[i][j][z] = tempCalrms[z][j][i];
103 //calibCalPed->calpuls[i][j][z] = tempCalpuls[z][j][i];
104 }
105 }
106 }
107
108 for (int i = 0; i < 4; i++){
109 for (int j = 0; j <11; j++){
110 for (int z = 0; z < 6; z++){
111 calibCalPed->calthr[i][j][z] = tempCalthr[z][j][i];
112 calibCalPed->calbase[i][j][z] = tempCalbase[z][j][i];
113 calibCalPed->calvar[i][j][z] = tempCalvar[z][j][i];
114 }
115 }
116 }
117 //-----------------------------------------------------------------------------------------
118 //}
119 }
120
121

  ViewVC Help
Powered by ViewVC 1.1.23