/[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 2.2 - (hide annotations) (download)
Mon Oct 18 13:01:43 2004 UTC (20 years, 1 month ago) by kusanagi
Branch: MAIN
Changes since 2.1: +6 -6 lines
Changes request by Morchiutti

1 kusanagi 1.1 /** @file
2 kusanagi 1.2 * $Source: /home/cvsmanager/yoda/techmodel/physics/CalorimeterReader.cpp,v $
3 kusanagi 2.2 * $Id: CalorimeterReader.cpp,v 2.1 2004/10/17 12:28:46 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.2 int IEV2;
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.2 float calstripshift[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 2.2 "$Header: /home/cvsmanager/yoda/techmodel/physics/CalorimeterReader.cpp,v 2.1 2004/10/17 12:28:46 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 1.2
89     //Call to the routine that unpack calorimeter events
90 kusanagi 2.1 calunpack_((unsigned char*)data, &length, &ERROR);
91 kusanagi 1.3
92     if (ERROR != 0) {
93     char *errmsg;
94     switch (ERROR){
95     case 1: errmsg = "CALORIMETER NOT FOUND";
96     }
97 kusanagi 1.5 oss.flush();
98     oss << "Fortran77 function calunpack: " << errmsg;
99     logger->warn(oss.str().c_str());
100 kusanagi 1.3 } else {
101 kusanagi 2.2 calorimeter->IEV2 = evento_.IEV2;
102 kusanagi 2.1 memcpy(calorimeter->stwerr, evento_.stwerr, sizeof(calorimeter->stwerr));
103     memcpy(calorimeter->perror, evento_.perror, sizeof(calorimeter->perror));
104 kusanagi 1.3 //--------have to invert array because of FORTRAN <-> C different management of the indexes
105 kusanagi 2.1 float tempDexy[96][22][2];
106     float tempDexyc[96][22][2];
107     float tempBase[6][22][2];
108     float tempCalselftrig[7][4];
109 kusanagi 1.3 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 kusanagi 1.2 }
119    
120 kusanagi 1.3 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 kusanagi 2.1 }
126     for (int z = 0; z < 6; z++){
127 kusanagi 1.3 calorimeter->base[i][j][z] = tempBase[z][j][i];
128     }
129 kusanagi 1.2 }
130     }
131 kusanagi 1.3 //-----------------------------------------------------------------------------------------
132     memcpy(calorimeter->calIItrig, evento_.calIItrig, sizeof(calorimeter->calIItrig));
133 kusanagi 2.2 memcpy(calorimeter->calstripshift, evento_.calstripshift, sizeof(calorimeter->calstripshift));
134 kusanagi 1.3 memcpy(calorimeter->calDSPtaberr, evento_.calDSPtaberr, sizeof(calorimeter->calDSPtaberr));
135     memcpy(calorimeter->calevnum, evento_.calevnum, sizeof(calorimeter->calevnum));
136 kusanagi 1.2 }
137 kusanagi 1.5 delete[] data;
138 kusanagi 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.23