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

Annotation of /yoda/techmodel/CalibTrk2Reader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4.1 - (hide annotations) (download)
Wed Mar 9 19:44:19 2005 UTC (19 years, 8 months ago) by kusanagi
Branch: MAIN
CVS Tags: YODA4_0/04, YODA4_0/03, YODA4_0/02
Changes since 4.0: +3 -4 lines
Bug Fix:
The parameter DSPbad_par into the struct was defined not in the same order of the
corresponding COMMON in the FORTRAN routine.
The parameter checksum into the struct was defined not defined in the corresponding
COMMON in the FORTRAN routine so has been deleted.

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

  ViewVC Help
Powered by ViewVC 1.1.23