/[PAMELA software]/yoda/techmodel/physics/CalorimeterReader.cpp
ViewVC logotype

Contents of /yoda/techmodel/physics/CalorimeterReader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2.5 - (show annotations) (download)
Thu Dec 9 13:17:26 2004 UTC (19 years, 11 months ago) by kusanagi
Branch: MAIN
Changes since 2.4: +4 -3 lines
*** empty log message ***

1 /** @file
2 * $Source: /home/cvsmanager/yoda/techmodel/physics/CalorimeterReader.cpp,v $
3 * $Id: CalorimeterReader.cpp,v 2.4 2004/12/03 22:08:12 kusanagi Exp $
4 * $Author: kusanagi $
5 *
6 * Implementation of the CalorimeterReader class.
7 */
8
9
10 #include <iostream>
11 #include <string>
12 #include <log4cxx/logger.h>
13 #include "CalorimeterReader.h"
14
15 extern "C" {
16
17
18 extern struct {
19 int IEV;
20 int stwerr[4];
21 float perror[4];
22 float dexy[2][22][96];
23 float dexyc[2][22][96];
24 float base[2][22][6];
25 float calselftrig[4][7];
26 float calIItrig[4];
27 float calstriphit[4];
28 float calDSPtaberr[4];
29 float calevnum[4];
30 } evento_;
31
32 void calunpack_(unsigned char[], long int*, int*);
33 //void calunpack_(char[], long int*, int*);
34 //Struct per il passaggio di dati da e verso la chiamata fortran
35 }
36
37 using namespace pamela;
38 using namespace pamela::calorimeter;
39
40 static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.calorimeter.CalorimeterReader"));
41
42 /**
43 * Constructor.
44 */
45 CalorimeterReader::CalorimeterReader(void):
46 TechmodelAlgorithm(PacketType::Physics, "TechmodelCalorimeterReader") {
47 logger->debug(_T("Construnctor"));
48 calorimeter = new CalorimeterEvent();
49 }
50
51 /**
52 * Get a string with the version info of the algorithm.
53 */
54 std::string CalorimeterReader::GetVersionInfo(void) const {
55 return
56 "$Header: /home/cvsmanager/yoda/techmodel/physics/CalorimeterReader.cpp,v 2.4 2004/12/03 22:08:12 kusanagi Exp $";
57 }
58
59 /**
60 * Initialize the algorithm with a special run. This will initialize the
61 * event reader routines for all packet types.
62 */
63 void CalorimeterReader::Init(PamelaRun *run) {
64 logger->debug(_T("Initialize"));
65 SetInputStream(run);
66 run->WriteSubPacket(this, &calorimeter, calorimeter->Class());
67 }
68
69 /**
70 * Unpack the calorimeter event from an input file.
71 */
72 void CalorimeterReader::RunEvent(int EventNumber) {
73
74 }
75
76 /**
77 * Unpack the Calorimeter data event from the physical packet.
78 */
79 void CalorimeterReader::RunEvent(int EventNumber, const char subData[], long int length) {
80 std::stringstream oss;
81 char *data = new char[length];
82 memcpy(data, subData, length);
83 int ERROR = 0;
84
85 /*unsigned short convdata[length];
86 for (int i = 0; i<length; i++){
87 convdata[i] = (unsigned short)((unsigned char)subData[i]&0xFF);
88 }*/
89
90 //Call to the routine that unpack calorimeter events
91 calunpack_((unsigned char*)data, &length, &ERROR);
92 //calunpack_((char*)data, &length, &ERROR);
93
94 if (ERROR != 0) {
95 char *errmsg;
96 switch (ERROR){
97 case 1: errmsg = "CALORIMETER NOT FOUND";
98 }
99 oss.str("");
100 oss << "Fortran77 function calunpack: " << errmsg;
101 logger->warn(oss.str().c_str());
102 }
103 // In case of "ERROR != 0" the calunpack will take care to set all
104 // parameters to zero
105 //} else {
106 calorimeter->IEV = evento_.IEV;
107 memcpy(calorimeter->stwerr, evento_.stwerr, sizeof(calorimeter->stwerr));
108 memcpy(calorimeter->perror, evento_.perror, sizeof(calorimeter->perror));
109 //--------have to invert array because of FORTRAN <-> C different management of the indexes
110 float tempDexy[96][22][2];
111 float tempDexyc[96][22][2];
112 float tempBase[6][22][2];
113 float tempCalselftrig[7][4];
114 memcpy(tempDexy, evento_.dexy, sizeof(tempDexy));
115 memcpy(tempDexyc, evento_.dexyc, sizeof(tempDexyc));
116 memcpy(tempBase, evento_.base, sizeof(tempBase));
117 memcpy(tempCalselftrig, evento_.calselftrig, sizeof(tempCalselftrig));
118
119 for (int i = 0; i < 4; i++){
120 for (int j = 0; j < 7; j++){
121 calorimeter->calselftrig[i][j] = tempCalselftrig[j][i];
122 }
123 }
124
125 for (int i = 0; i < 2; i++){
126 for (int j = 0; j < 22; j++){
127 for (int z = 0; z < 96; z++){
128 calorimeter->dexy[i][j][z] = tempDexy[z][j][i];
129 calorimeter->dexyc[i][j][z] = tempDexyc[z][j][i];
130 }
131 for (int z = 0; z < 6; z++){
132 calorimeter->base[i][j][z] = tempBase[z][j][i];
133 }
134 }
135 }
136 //-----------------------------------------------------------------------------------------
137 memcpy(calorimeter->calIItrig, evento_.calIItrig, sizeof(calorimeter->calIItrig));
138 memcpy(calorimeter->calstriphit, evento_.calstriphit, sizeof(calorimeter->calstriphit));
139 memcpy(calorimeter->calDSPtaberr, evento_.calDSPtaberr, sizeof(calorimeter->calDSPtaberr));
140 memcpy(calorimeter->calevnum, evento_.calevnum, sizeof(calorimeter->calevnum));
141 //}
142 delete[] data;
143 }

  ViewVC Help
Powered by ViewVC 1.1.23