/[PAMELA software]/yoda/techmodel/CalibTrk2Reader.cpp
ViewVC logotype

Annotation of /yoda/techmodel/CalibTrk2Reader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3.0 - (hide annotations) (download)
Fri Mar 4 15:54:11 2005 UTC (19 years, 9 months ago) by kusanagi
Branch: MAIN
Changes since 2.6: +2 -2 lines
Error proof version.
Implemented all detectors packets plus all the main telemetries packets.
Missing all the Init and Alarm packets.
Disabled CRC control on VarDump, ArrDump, TabDump for CPU debugging needs
(the data formats seems correct even if CRC get wrong)

1 kusanagi 1.1 /** @file
2 kusanagi 1.2 * $Source: /home/cvsmanager/yoda/techmodel/CalibTrk2Reader.cpp,v $
3 kusanagi 3.0 * $Id: CalibTrk2Reader.cpp,v 2.6 2005/01/13 14:48:04 kusanagi Exp $
4 kusanagi 1.1 * $Author: kusanagi $
5     *
6     * Implementation of the LogReader class.
7     * ToBeDone:
8     * Control the CRC for the entire data Packet not just for single records
9     */
10    
11     #define UINT unsigned int
12     #define BYTE unsigned char
13     #include <string>
14 kusanagi 1.6 #include <log4cxx/logger.h>
15 kusanagi 1.1 extern "C" {
16 kusanagi 1.3 #include "CRC.h"
17 kusanagi 1.1 //Passo il path verso la il file temporaneo
18     extern void trkcalibpkt_(int*, char*);
19    
20     //Struct per il passaggio di dati da e verso la chiamata fortran
21 kusanagi 2.1 extern struct {
22 kusanagi 1.1 int DAQmode[6];
23     int DSPnumber[6];
24     int calibnumber[6];
25     int ncalib_event[6];
26     int ped_l1[6];
27     int ped_l2[6];
28     int ped_l3[6];
29     int sig_l1[6];
30     int sig_l2[6];
31     int sig_l3[6];
32     int nbad_l1[6];
33     int nbad_l2[6];
34     int nbad_l3[6];
35     int cal_flag[6];
36     int checksum[6];
37     int DSPbad_par[6][3072];
38     float DSPped_par[6][3072];
39     float DSPsig_par[6][3072];
40 kusanagi 2.1 } trkcalib_;
41 kusanagi 1.1 #include <dirent.h>
42     }
43    
44     #include <fstream>
45     #include "stdio.h"
46     #include "ReaderAlgorithms.h"
47    
48 kusanagi 1.2 #include "event/CalibTrk2Event.h"
49 kusanagi 1.1
50     using namespace pamela;
51     using namespace pamela::techmodel;
52    
53 kusanagi 1.6 static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.CalibTrk2Reader"));
54 kusanagi 1.1
55     /**
56     * Constructor.
57     */
58 kusanagi 1.2 CalibTrk2Reader::CalibTrk2Reader(void):
59     TechmodelAlgorithm(PacketType::CalibTrk2, "TechmodelCalibTrk2Reader") {
60 kusanagi 1.6 logger->debug(_T("Constructor"));
61 kusanagi 1.2 calibTrk2 = new CalibTrk2Event();
62 kusanagi 1.1 }
63    
64     /**
65     * Get a string with the version info of the algorithm.
66     */
67 kusanagi 1.2 std::string CalibTrk2Reader::GetVersionInfo(void) const {
68 kusanagi 1.1 return
69 kusanagi 3.0 "$Header: /home/cvsmanager/yoda/techmodel/CalibTrk2Reader.cpp,v 2.6 2005/01/13 14:48:04 kusanagi Exp $\n";
70 kusanagi 1.1 }
71    
72     /**
73     * Initialize the algorithm with a special run. This will initialize the
74     * event reader routines for all packet types.
75     */
76 kusanagi 1.2 void CalibTrk2Reader::Init(PamelaRun *run) {
77 kusanagi 1.6 logger->debug(_T("Initialize"));
78 kusanagi 1.1 SetInputStream(run);
79 kusanagi 1.2 run->WriteSubPacket(this, &calibTrk2, calibTrk2->Class());
80 kusanagi 1.1 }
81    
82     /**
83 kusanagi 1.2 * Unpack the CalibTrk2 event from an input file.
84 kusanagi 1.1 */
85 kusanagi 2.2 void CalibTrk2Reader::RunEvent(int EventNumber, long int dataLength) throw (Exception){
86 kusanagi 1.6 std::stringstream oss;
87 kusanagi 2.2 char subData[dataLength];
88     int ERROR;
89 kusanagi 1.3
90 kusanagi 1.1 InputFile->read(subData, sizeof(unsigned char)*dataLength);
91 kusanagi 2.2
92     //Scrivo un file temporaneo per passarlo alla routine
93     //Speriamo di cambiare la routine per passargli un buffer.....
94 kusanagi 2.4 oss.str("");
95     oss << getenv("YODA_DATA") << "/" << time(NULL) << "trc2.dat";
96 kusanagi 2.2 FILE *pfile;
97 kusanagi 2.4 pfile = fopen(oss.str().c_str(), "wb");
98 kusanagi 2.2 fwrite(subData, 1, dataLength, pfile);
99     fclose(pfile);
100    
101     //Call to the FORTRAN routin that unpack tracker events
102 kusanagi 2.4 trkcalibpkt_(&ERROR, (char*)oss.str().c_str());
103 kusanagi 2.6
104     calibTrk2->unpackError = ERROR;
105 kusanagi 2.5 remove(oss.str().c_str());
106 kusanagi 2.2 if (ERROR != 0) {
107     oss.str("");
108     oss << "Fortran77 function trkcalibpkt error code = " << ERROR;
109     logger->warn(oss.str().c_str());
110     }
111     //delete the temporary file
112 kusanagi 2.4 remove((char*)oss.str().c_str());
113 kusanagi 1.1
114 kusanagi 2.2 //Store the unpacked data
115     memcpy(calibTrk2->DAQmode, trkcalib_.DAQmode, sizeof(calibTrk2->DAQmode));
116     memcpy(calibTrk2->DSPnumber, trkcalib_.DSPnumber, sizeof(calibTrk2->DSPnumber));
117     memcpy(calibTrk2->calibnumber, trkcalib_.calibnumber, sizeof(calibTrk2->calibnumber));
118     memcpy(calibTrk2->DSPnumber, trkcalib_.ncalib_event, sizeof(calibTrk2->ncalib_event));
119     memcpy(calibTrk2->ped_l1, trkcalib_.ped_l1, sizeof(calibTrk2->ped_l1));
120     memcpy(calibTrk2->ped_l2, trkcalib_.ped_l2, sizeof(calibTrk2->ped_l2));
121     memcpy(calibTrk2->ped_l3, trkcalib_.ped_l3, sizeof(calibTrk2->ped_l3));
122     memcpy(calibTrk2->sig_l1, trkcalib_.sig_l1, sizeof(calibTrk2->sig_l1));
123     memcpy(calibTrk2->sig_l2, trkcalib_.sig_l2, sizeof(calibTrk2->sig_l2));
124     memcpy(calibTrk2->sig_l3, trkcalib_.sig_l3, sizeof(calibTrk2->sig_l3));
125     memcpy(calibTrk2->nbad_l1, trkcalib_.nbad_l1, sizeof(calibTrk2->nbad_l1));
126     memcpy(calibTrk2->nbad_l2, trkcalib_.nbad_l2, sizeof(calibTrk2->nbad_l2));
127     memcpy(calibTrk2->nbad_l3, trkcalib_.nbad_l3, sizeof(calibTrk2->nbad_l3));
128     memcpy(calibTrk2->cal_flag, trkcalib_.cal_flag, sizeof(calibTrk2->cal_flag));
129 kusanagi 2.1 // memcpy(calibTrk2->DSPbad_par, trkcalib_.DSPbad_par, sizeof(calibTrk2->DSPbad_par));
130     // memcpy(calibTrk2->DSPped_par, trkcalib_.DSPped_par, sizeof(calibTrk2->DSPped_par));
131     // memcpy(calibTrk2->DSPsig_par, trkcalib_.DSPsig_par, sizeof(calibTrk2->DSPsig_par));
132 kusanagi 1.4 //--------have to invert array because of FORTRAN <-> C different management of the indexes
133 kusanagi 2.2 int tempBad_par[3072][6];
134     int tempPed_par[3072][6];
135     int tempSig_par[3072][6];
136     memcpy(tempBad_par,trkcalib_.DSPbad_par, sizeof(tempBad_par));
137     memcpy(tempPed_par,trkcalib_.DSPped_par, sizeof(tempPed_par));
138     memcpy(tempSig_par,trkcalib_.DSPsig_par, sizeof(tempSig_par));
139    
140     for (int i = 0; i < 6; i++){
141     for (int j = 0; j < 3072; j++){
142     calibTrk2->DSPbad_par[i][j] = tempBad_par[j][i];
143     calibTrk2->DSPped_par[i][j] = tempPed_par[j][i];
144     calibTrk2->DSPsig_par[i][j] = tempSig_par[j][i];
145 kusanagi 1.4 }
146 kusanagi 2.2 }
147 kusanagi 1.4 //-----------------------------------------------------------------------------------------
148 kusanagi 2.2 oss.str("");
149     oss << "Fortran77 function trkcalibpkt error code = " << ERROR;
150     logger->warn(oss.str().c_str());
151    
152 kusanagi 2.3 //delete [] subData;
153 kusanagi 1.1 }
154    

  ViewVC Help
Powered by ViewVC 1.1.23