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

  ViewVC Help
Powered by ViewVC 1.1.23