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

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

  ViewVC Help
Powered by ViewVC 1.1.23