/[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.6 - (hide annotations) (download)
Thu Dec 16 17:33:02 2004 UTC (20 years ago) by kusanagi
Branch: MAIN
Changes since 2.5: +4 -6 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.6 * $Id: CalorimeterReader.cpp,v 2.5 2004/12/09 13:17:26 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.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 kusanagi 2.6 "$Header: /home/cvsmanager/yoda/techmodel/physics/CalorimeterReader.cpp,v 2.5 2004/12/09 13:17:26 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     }
97 kusanagi 2.4 oss.str("");
98 kusanagi 1.5 oss << "Fortran77 function calunpack: " << errmsg;
99     logger->warn(oss.str().c_str());
100 kusanagi 2.3 }
101     // In case of "ERROR != 0" the calunpack will take care to set all
102     // parameters to zero
103     //} else {
104 kusanagi 2.6 calorimeter->iev = evento_.iev;
105 kusanagi 2.1 memcpy(calorimeter->stwerr, evento_.stwerr, sizeof(calorimeter->stwerr));
106     memcpy(calorimeter->perror, evento_.perror, sizeof(calorimeter->perror));
107 kusanagi 1.3 //--------have to invert array because of FORTRAN <-> C different management of the indexes
108 kusanagi 2.1 float tempDexy[96][22][2];
109     float tempDexyc[96][22][2];
110     float tempBase[6][22][2];
111     float tempCalselftrig[7][4];
112 kusanagi 1.3 memcpy(tempDexy, evento_.dexy, sizeof(tempDexy));
113     memcpy(tempDexyc, evento_.dexyc, sizeof(tempDexyc));
114     memcpy(tempBase, evento_.base, sizeof(tempBase));
115     memcpy(tempCalselftrig, evento_.calselftrig, sizeof(tempCalselftrig));
116    
117     for (int i = 0; i < 4; i++){
118     for (int j = 0; j < 7; j++){
119     calorimeter->calselftrig[i][j] = tempCalselftrig[j][i];
120     }
121 kusanagi 1.2 }
122    
123 kusanagi 1.3 for (int i = 0; i < 2; i++){
124     for (int j = 0; j < 22; j++){
125     for (int z = 0; z < 96; z++){
126     calorimeter->dexy[i][j][z] = tempDexy[z][j][i];
127     calorimeter->dexyc[i][j][z] = tempDexyc[z][j][i];
128 kusanagi 2.1 }
129     for (int z = 0; z < 6; z++){
130 kusanagi 1.3 calorimeter->base[i][j][z] = tempBase[z][j][i];
131     }
132 kusanagi 1.2 }
133     }
134 kusanagi 1.3 //-----------------------------------------------------------------------------------------
135     memcpy(calorimeter->calIItrig, evento_.calIItrig, sizeof(calorimeter->calIItrig));
136 kusanagi 2.4 memcpy(calorimeter->calstriphit, evento_.calstriphit, sizeof(calorimeter->calstriphit));
137 kusanagi 1.3 memcpy(calorimeter->calDSPtaberr, evento_.calDSPtaberr, sizeof(calorimeter->calDSPtaberr));
138     memcpy(calorimeter->calevnum, evento_.calevnum, sizeof(calorimeter->calevnum));
139 kusanagi 2.3 //}
140 kusanagi 1.5 delete[] data;
141 kusanagi 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.23