/[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.3 - (show annotations) (download)
Fri Aug 20 15:01:50 2004 UTC (20 years, 3 months ago) by kusanagi
Branch: MAIN
Changes since 1.2: +44 -42 lines
*** empty log message ***

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

  ViewVC Help
Powered by ViewVC 1.1.23