/[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.4 - (hide annotations) (download)
Fri Dec 3 22:08:12 2004 UTC (20 years ago) by kusanagi
Branch: MAIN
Changes since 2.3: +7 -7 lines
*** empty log message ***

1 kusanagi 1.1 /** @file
2 kusanagi 1.2 * $Source: /home/cvsmanager/yoda/techmodel/physics/CalorimeterReader.cpp,v $
3 kusanagi 2.4 * $Id: CalorimeterReader.cpp,v 2.3 2004/10/18 14:28:03 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.4 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 2.4 "$Header: /home/cvsmanager/yoda/techmodel/physics/CalorimeterReader.cpp,v 2.3 2004/10/18 14:28:03 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    
90 kusanagi 1.2 //Call to the routine that unpack calorimeter events
91 kusanagi 2.1 calunpack_((unsigned char*)data, &length, &ERROR);
92 kusanagi 1.3
93     if (ERROR != 0) {
94     char *errmsg;
95     switch (ERROR){
96     case 1: errmsg = "CALORIMETER NOT FOUND";
97     }
98 kusanagi 2.4 oss.str("");
99 kusanagi 1.5 oss << "Fortran77 function calunpack: " << errmsg;
100     logger->warn(oss.str().c_str());
101 kusanagi 2.3 }
102     // In case of "ERROR != 0" the calunpack will take care to set all
103     // parameters to zero
104     //} else {
105 kusanagi 2.4 calorimeter->IEV = evento_.IEV;
106 kusanagi 2.1 memcpy(calorimeter->stwerr, evento_.stwerr, sizeof(calorimeter->stwerr));
107     memcpy(calorimeter->perror, evento_.perror, sizeof(calorimeter->perror));
108 kusanagi 1.3 //--------have to invert array because of FORTRAN <-> C different management of the indexes
109 kusanagi 2.1 float tempDexy[96][22][2];
110     float tempDexyc[96][22][2];
111     float tempBase[6][22][2];
112     float tempCalselftrig[7][4];
113 kusanagi 1.3 memcpy(tempDexy, evento_.dexy, sizeof(tempDexy));
114     memcpy(tempDexyc, evento_.dexyc, sizeof(tempDexyc));
115     memcpy(tempBase, evento_.base, sizeof(tempBase));
116     memcpy(tempCalselftrig, evento_.calselftrig, sizeof(tempCalselftrig));
117    
118     for (int i = 0; i < 4; i++){
119     for (int j = 0; j < 7; j++){
120     calorimeter->calselftrig[i][j] = tempCalselftrig[j][i];
121     }
122 kusanagi 1.2 }
123    
124 kusanagi 1.3 for (int i = 0; i < 2; i++){
125     for (int j = 0; j < 22; j++){
126     for (int z = 0; z < 96; z++){
127     calorimeter->dexy[i][j][z] = tempDexy[z][j][i];
128     calorimeter->dexyc[i][j][z] = tempDexyc[z][j][i];
129 kusanagi 2.1 }
130     for (int z = 0; z < 6; z++){
131 kusanagi 1.3 calorimeter->base[i][j][z] = tempBase[z][j][i];
132     }
133 kusanagi 1.2 }
134     }
135 kusanagi 1.3 //-----------------------------------------------------------------------------------------
136     memcpy(calorimeter->calIItrig, evento_.calIItrig, sizeof(calorimeter->calIItrig));
137 kusanagi 2.4 memcpy(calorimeter->calstriphit, evento_.calstriphit, sizeof(calorimeter->calstriphit));
138 kusanagi 1.3 memcpy(calorimeter->calDSPtaberr, evento_.calDSPtaberr, sizeof(calorimeter->calDSPtaberr));
139     memcpy(calorimeter->calevnum, evento_.calevnum, sizeof(calorimeter->calevnum));
140 kusanagi 2.3 //}
141 kusanagi 1.5 delete[] data;
142 kusanagi 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.23