/[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.2 - (hide annotations) (download)
Thu Aug 19 15:24:58 2004 UTC (20 years, 3 months ago) by kusanagi
Branch: MAIN
Changes since 1.1: +48 -16 lines
*** empty log message ***

1 kusanagi 1.1 /** @file
2 kusanagi 1.2 * $Source: /home/cvsmanager/yoda/techmodel/physics/CalorimeterReader.cpp,v $
3     * $Id: CalorimeterReader.cpp,v 1.1 2004/07/17 20:03:48 kusanagi Exp $
4 kusanagi 1.1 * $Author: kusanagi $
5     *
6     * Implementation of the CalorimeterReader class.
7     */
8    
9     #include <string>
10     #include <log4cpp/Category.hh>
11     #include "CalorimeterReader.h"
12    
13     extern "C" {
14    
15     extern struct {
16     int IEV2;
17 kusanagi 1.2 int stwerr;
18     int perror;
19     int dexy[2][22][96];
20     int dexyc[2][22][96];
21     int base[2][22][96];
22     int calselftrig[4][7];
23 kusanagi 1.1 int calIItrig[4];
24     int calstripshift[4];
25     int calDSPtaberr[4];
26     int calevnum[4];
27     } evento_;
28    
29 kusanagi 1.2 void calunpack_(short[], long int*, int*);
30 kusanagi 1.1 //Struct per il passaggio di dati da e verso la chiamata fortran
31     }
32    
33     using namespace pamela;
34     using namespace pamela::calorimeter;
35    
36     static log4cpp::Category& cat = log4cpp::Category::getInstance("pamela.techmodel.calorimeter.CalorimeterReader");
37    
38     /**
39     * Constructor.
40     */
41     CalorimeterReader::CalorimeterReader(void):
42     TechmodelAlgorithm(PacketType::Physics, "TechmodelCalorimeterReader") {
43     cat.debug("Constructor");
44     calorimeter = new CalorimeterEvent();
45     }
46    
47     /**
48     * Get a string with the version info of the algorithm.
49     */
50     std::string CalorimeterReader::GetVersionInfo(void) const {
51     return
52 kusanagi 1.2 "$Header: /home/cvsmanager/yoda/techmodel/physics/CalorimeterReader.cpp,v 1.1 2004/07/17 20:03:48 kusanagi Exp $";
53 kusanagi 1.1 }
54    
55     /**
56     * Initialize the algorithm with a special run. This will initialize the
57     * event reader routines for all packet types.
58     */
59     void CalorimeterReader::Init(PamelaRun *run) {
60     SetInputStream(run);
61     run->WriteSubPacket(this, &calorimeter, calorimeter->Class());
62     }
63    
64     /**
65     * Unpack the calorimeter event from an input file.
66     */
67     void CalorimeterReader::RunEvent(int EventNumber) {
68    
69     }
70    
71     /**
72     * Unpack the Calorimeter data event from the physical packet.
73     */
74     void CalorimeterReader::RunEvent(int EventNumber, const char subData[], long int length) {
75     char data[length];
76     memcpy(data, subData, length);
77     int ERROR = 0;
78    
79     unsigned short convdata[length];
80     for (int i = 0; i<length; i++){
81     convdata[i] = (unsigned short)((unsigned char)subData[i]&0xFF);
82     }
83 kusanagi 1.2
84     //Call to the routine that unpack calorimeter events
85     calunpack_((short*)convdata, &length, &ERROR);
86 kusanagi 1.1
87 kusanagi 1.2 /*switch (ERROR){
88     case:
89     }*/
90    
91     calorimeter->IEV2 = evento_.IEV2;
92     calorimeter->stwerr = evento_.stwerr;
93     calorimeter->perror = evento_.perror;
94    
95     //--------have to invert array because of FORTRAN <-> C different management of the indexes
96     int tempDexy[96][22][2];
97     int tempDexyc[96][22][2];
98     int tempBase[96][22][2];
99     int tempCalselftrig[7][4];
100     memcpy(tempDexy, evento_.dexy, sizeof(tempDexy));
101     memcpy(tempDexyc, evento_.dexyc, sizeof(tempDexyc));
102     memcpy(tempBase, evento_.base, sizeof(tempBase));
103     memcpy(tempCalselftrig, evento_.calselftrig, sizeof(tempCalselftrig));
104    
105     for (int i = 0; i < 4; i++){
106     for (int j = 0; j < 7; j++){
107     calorimeter->calselftrig[i][j] = tempCalselftrig[j][i];
108     }
109     }
110    
111     for (int i = 0; i < 2; i++){
112     for (int j = 0; j < 22; j++){
113     for (int z = 0; z < 96; z++){
114     calorimeter->dexy[i][j][z] = tempDexy[z][j][i];
115     calorimeter->dexyc[i][j][z] = tempDexyc[z][j][i];
116     calorimeter->base[i][j][z] = tempBase[z][j][i];
117     }
118     }
119     }
120     //-----------------------------------------------------------------------------------------
121    
122 kusanagi 1.1
123     memcpy(calorimeter->calIItrig, evento_.calIItrig, sizeof(calorimeter->calIItrig));
124     memcpy(calorimeter->calstripshift, evento_.calstripshift, sizeof(calorimeter->calstripshift));
125     memcpy(calorimeter->calDSPtaberr, evento_.calDSPtaberr, sizeof(calorimeter->calDSPtaberr));
126     memcpy(calorimeter->calevnum, evento_.calevnum, sizeof(calorimeter->calevnum));
127    
128     cat << log4cpp::Priority::ERROR
129     << "Fortran77 function calunpack error code = " << ERROR
130     << "\n " << log4cpp::CategoryStream::ENDLINE;
131     }

  ViewVC Help
Powered by ViewVC 1.1.23