/[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 1.5 - (show annotations) (download)
Tue Sep 21 20:24:53 2004 UTC (20 years, 2 months ago) by kusanagi
Branch: MAIN
Changes since 1.4: +14 -9 lines
Commit toward log4cxx plus new packets types

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

  ViewVC Help
Powered by ViewVC 1.1.23