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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5.0 - (hide annotations) (download)
Mon Aug 29 09:46:13 2005 UTC (19 years, 3 months ago) by kusanagi
Branch: MAIN
CVS Tags: YODA5_0/00, YODA5_0/01, YODA5_0/02
Changes since 4.4: +2 -2 lines
Starting form this version:
1) includes are defined with relative (not absolute) path respect to the YODA aplication
2) RegistryEvent class is foreseen to contain post-unpack data.

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

  ViewVC Help
Powered by ViewVC 1.1.23