/[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 1.5 - (hide annotations) (download)
Tue Sep 21 20:24:53 2004 UTC (20 years, 2 months ago) by kusanagi
Branch: MAIN
Changes since 1.4: +14 -9 lines
Commit toward log4cxx plus new packets types

1 kusanagi 1.1 /** @file
2 kusanagi 1.2 * $Source: /home/cvsmanager/yoda/techmodel/physics/CalorimeterReader.cpp,v $
3 kusanagi 1.5 * $Id: CalorimeterReader.cpp,v 1.4 2004/08/24 08:00: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     extern struct {
18     int IEV2;
19 kusanagi 1.2 int stwerr;
20     int perror;
21     int dexy[2][22][96];
22     int dexyc[2][22][96];
23     int base[2][22][96];
24     int calselftrig[4][7];
25 kusanagi 1.1 int calIItrig[4];
26     int calstripshift[4];
27     int calDSPtaberr[4];
28     int calevnum[4];
29     } evento_;
30    
31 kusanagi 1.2 void calunpack_(short[], long int*, int*);
32 kusanagi 1.1 //Struct per il passaggio di dati da e verso la chiamata fortran
33     }
34    
35     using namespace pamela;
36     using namespace pamela::calorimeter;
37    
38 kusanagi 1.5 static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.calorimeter.CalorimeterReader"));
39 kusanagi 1.1
40     /**
41     * Constructor.
42     */
43     CalorimeterReader::CalorimeterReader(void):
44     TechmodelAlgorithm(PacketType::Physics, "TechmodelCalorimeterReader") {
45 kusanagi 1.5 logger->debug(_T("Construnctor"));
46 kusanagi 1.1 calorimeter = new CalorimeterEvent();
47     }
48    
49     /**
50     * Get a string with the version info of the algorithm.
51     */
52     std::string CalorimeterReader::GetVersionInfo(void) const {
53     return
54 kusanagi 1.5 "$Header: /home/cvsmanager/yoda/techmodel/physics/CalorimeterReader.cpp,v 1.4 2004/08/24 08:00:12 kusanagi Exp $";
55 kusanagi 1.1 }
56    
57     /**
58     * Initialize the algorithm with a special run. This will initialize the
59     * event reader routines for all packet types.
60     */
61     void CalorimeterReader::Init(PamelaRun *run) {
62 kusanagi 1.5 logger->debug(_T("Initialize"));
63 kusanagi 1.1 SetInputStream(run);
64     run->WriteSubPacket(this, &calorimeter, calorimeter->Class());
65     }
66    
67     /**
68     * Unpack the calorimeter event from an input file.
69     */
70     void CalorimeterReader::RunEvent(int EventNumber) {
71    
72     }
73    
74     /**
75     * Unpack the Calorimeter data event from the physical packet.
76     */
77     void CalorimeterReader::RunEvent(int EventNumber, const char subData[], long int length) {
78 kusanagi 1.5 std::stringstream oss;
79     char *data = new char[length];
80 kusanagi 1.1 memcpy(data, subData, length);
81     int ERROR = 0;
82    
83     unsigned short convdata[length];
84     for (int i = 0; i<length; i++){
85     convdata[i] = (unsigned short)((unsigned char)subData[i]&0xFF);
86     }
87 kusanagi 1.2
88     //Call to the routine that unpack calorimeter events
89     calunpack_((short*)convdata, &length, &ERROR);
90 kusanagi 1.3
91     if (ERROR != 0) {
92     char *errmsg;
93     switch (ERROR){
94     case 1: errmsg = "CALORIMETER NOT FOUND";
95     }
96 kusanagi 1.5 oss.flush();
97     oss << "Fortran77 function calunpack: " << errmsg;
98     logger->warn(oss.str().c_str());
99 kusanagi 1.3 } else {
100     calorimeter->IEV2 = evento_.IEV2;
101     calorimeter->stwerr = evento_.stwerr;
102     calorimeter->perror = evento_.perror;
103    
104     //--------have to invert array because of FORTRAN <-> C different management of the indexes
105     int tempDexy[96][22][2];
106     int tempDexyc[96][22][2];
107     int tempBase[96][22][2];
108     int tempCalselftrig[7][4];
109     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     calorimeter->base[i][j][z] = tempBase[z][j][i];
126     }
127 kusanagi 1.2 }
128     }
129 kusanagi 1.3 //-----------------------------------------------------------------------------------------
130    
131     memcpy(calorimeter->calIItrig, evento_.calIItrig, sizeof(calorimeter->calIItrig));
132     memcpy(calorimeter->calstripshift, evento_.calstripshift, sizeof(calorimeter->calstripshift));
133     memcpy(calorimeter->calDSPtaberr, evento_.calDSPtaberr, sizeof(calorimeter->calDSPtaberr));
134     memcpy(calorimeter->calevnum, evento_.calevnum, sizeof(calorimeter->calevnum));
135 kusanagi 1.2 }
136 kusanagi 1.5 delete[] data;
137 kusanagi 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.23