/[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 6.1 - (hide annotations) (download)
Tue Sep 12 08:56:30 2006 UTC (18 years, 3 months ago) by mocchiut
Branch: MAIN
CVS Tags: YODA6_3/19, YODA6_3/18, YODA6_3/13, YODA6_3/12, YODA6_3/11, YODA6_3/10, YODA6_3/17, YODA6_3/16, YODA6_3/15, YODA6_3/14, YODA6_3/20, YODA6_3/08, YODA6_3/09, HEAD
Changes since 6.0: +18 -4 lines
Added unpackError flag to trigger and tof, small change in the calo unpackError flag

1 kusanagi 1.1 /** @file
2 mocchiut 6.1 * $Source: /afs/ba.infn.it/user/pamela/src/CVS/yoda/techmodel/physics/CalorimeterReader.cpp,v $
3     * $Id: CalorimeterReader.cpp,v 6.0 2006/02/07 17:11:11 kusanagi Exp $
4 kusanagi 6.0 * $Author: kusanagi $
5 kusanagi 1.1 *
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 mocchiut 6.1 "$Header: /afs/ba.infn.it/user/pamela/src/CVS/yoda/techmodel/physics/CalorimeterReader.cpp,v 6.0 2006/02/07 17:11:11 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     if (ERROR != 0) {
93     char *errmsg;
94     switch (ERROR){
95     case 1: errmsg = "CALORIMETER NOT FOUND";
96 kusanagi 3.1 break;
97     default: errmsg = "CALORIMETER ERRROR CODE UNIDENTIFIED";
98 kusanagi 1.3 }
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 mocchiut 6.1 //
104     ERROR = 0;
105     Int_t cmask = 119;
106     for (int i=0; i<4 ; i++){
107     if ( evento_.perror[i] ){
108     ERROR = 1;
109     break;
110     };
111     if ( evento_.stwerr[i] & cmask ){
112     ERROR = 1;
113     break;
114     };
115     };
116     //
117     calorimeter->unpackError = ERROR;
118 kusanagi 2.3 // In case of "ERROR != 0" the calunpack will take care to set all
119     // parameters to zero
120     //} else {
121 kusanagi 2.6 calorimeter->iev = evento_.iev;
122 kusanagi 2.1 memcpy(calorimeter->stwerr, evento_.stwerr, sizeof(calorimeter->stwerr));
123     memcpy(calorimeter->perror, evento_.perror, sizeof(calorimeter->perror));
124 kusanagi 1.3 //--------have to invert array because of FORTRAN <-> C different management of the indexes
125 kusanagi 2.1 float tempDexy[96][22][2];
126     float tempDexyc[96][22][2];
127     float tempBase[6][22][2];
128     float tempCalselftrig[7][4];
129 kusanagi 1.3 memcpy(tempDexy, evento_.dexy, sizeof(tempDexy));
130     memcpy(tempDexyc, evento_.dexyc, sizeof(tempDexyc));
131     memcpy(tempBase, evento_.base, sizeof(tempBase));
132     memcpy(tempCalselftrig, evento_.calselftrig, sizeof(tempCalselftrig));
133    
134     for (int i = 0; i < 4; i++){
135     for (int j = 0; j < 7; j++){
136     calorimeter->calselftrig[i][j] = tempCalselftrig[j][i];
137     }
138 kusanagi 1.2 }
139    
140 kusanagi 1.3 for (int i = 0; i < 2; i++){
141     for (int j = 0; j < 22; j++){
142     for (int z = 0; z < 96; z++){
143     calorimeter->dexy[i][j][z] = tempDexy[z][j][i];
144     calorimeter->dexyc[i][j][z] = tempDexyc[z][j][i];
145 kusanagi 2.1 }
146     for (int z = 0; z < 6; z++){
147 kusanagi 1.3 calorimeter->base[i][j][z] = tempBase[z][j][i];
148     }
149 kusanagi 1.2 }
150     }
151 kusanagi 1.3 //-----------------------------------------------------------------------------------------
152     memcpy(calorimeter->calIItrig, evento_.calIItrig, sizeof(calorimeter->calIItrig));
153 kusanagi 2.4 memcpy(calorimeter->calstriphit, evento_.calstriphit, sizeof(calorimeter->calstriphit));
154 kusanagi 1.3 memcpy(calorimeter->calDSPtaberr, evento_.calDSPtaberr, sizeof(calorimeter->calDSPtaberr));
155     memcpy(calorimeter->calevnum, evento_.calevnum, sizeof(calorimeter->calevnum));
156 kusanagi 2.3 //}
157 kusanagi 3.1 delete [] data;
158 kusanagi 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.23