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

Annotation of /yoda/techmodel/CalibTrk2Reader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6.2 - (hide annotations) (download)
Tue May 30 19:10:03 2006 UTC (18 years, 6 months ago) by kusanagi
Branch: MAIN
CVS Tags: YODA6_3/10, YODA6_3/06, YODA6_3/04, YODA6_3/05, YODA6_3/07, YODA6_3/00, YODA6_3/01, YODA6_3/02, YODA6_3/03, YODA6_3/08, YODA6_3/09
Changes since 6.1: +2 -2 lines
Major update.
All the packet officially produced by PAMELA are implemented and unpacked.
The RegistryEvent Packet has been removed and put into another library.
New version, releasd by D.Campana, of tofunpack.

1 kusanagi 1.1 /** @file
2 kusanagi 1.2 * $Source: /home/cvsmanager/yoda/techmodel/CalibTrk2Reader.cpp,v $
3 kusanagi 6.2 * $Id: CalibTrk2Reader.cpp,v 6.1 2006/05/30 19:10:02 kusanagi Exp $
4 kusanagi 6.0 * $Author: kusanagi $
5 kusanagi 1.1 *
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 kusanagi 5.1 #include "ReaderAlgorithms.h"
12    
13 kusanagi 1.1 extern "C" {
14 kusanagi 1.3 #include "CRC.h"
15 kusanagi 5.1 extern void trkcalibpkt_(int*, unsigned char[], long int*, int*); //(*)
16 kusanagi 1.1
17     //Struct per il passaggio di dati da e verso la chiamata fortran
18 kusanagi 5.1 extern struct {
19     int good0;
20     int DAQmode[6];
21     int DSPnumber[6];
22     int calibnumber[6];
23     int ncalib_event[6];
24     int ped_l1[6];
25     int ped_l2[6];
26     int ped_l3[6];
27     int sig_l1[6];
28     int sig_l2[6];
29     int sig_l3[6];
30     int nbad_l1[6];
31     int nbad_l2[6];
32     int nbad_l3[6];
33     int cal_flag[6];
34     float DSPped_par[3072][6];
35     float DSPsig_par[3072][6];
36     int DSPbad_par[3072][6];
37     int crc_cal[3][6];
38     int crc_hcal[6];
39     } trkcalib_;
40 kusanagi 1.1 #include <dirent.h>
41     }
42    
43     using namespace pamela::techmodel;
44    
45 kusanagi 1.6 static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.CalibTrk2Reader"));
46 kusanagi 1.1
47     /**
48     * Constructor.
49     */
50 kusanagi 1.2 CalibTrk2Reader::CalibTrk2Reader(void):
51     TechmodelAlgorithm(PacketType::CalibTrk2, "TechmodelCalibTrk2Reader") {
52 kusanagi 1.6 logger->debug(_T("Constructor"));
53 kusanagi 1.2 calibTrk2 = new CalibTrk2Event();
54 kusanagi 1.1 }
55    
56     /**
57     * Get a string with the version info of the algorithm.
58     */
59 kusanagi 1.2 std::string CalibTrk2Reader::GetVersionInfo(void) const {
60 kusanagi 1.1 return
61 kusanagi 6.2 "$Header: /home/cvsmanager/yoda/techmodel/CalibTrk2Reader.cpp,v 6.1 2006/05/30 19:10:02 kusanagi Exp $\n";
62 kusanagi 1.1 }
63    
64     /**
65     * Initialize the algorithm with a special run. This will initialize the
66     * event reader routines for all packet types.
67     */
68 kusanagi 1.2 void CalibTrk2Reader::Init(PamelaRun *run) {
69 kusanagi 1.6 logger->debug(_T("Initialize"));
70 kusanagi 1.1 SetInputStream(run);
71 kusanagi 1.2 run->WriteSubPacket(this, &calibTrk2, calibTrk2->Class());
72 kusanagi 1.1 }
73    
74     /**
75 kusanagi 5.1 * Unpack the CalibTrk event from an input file.
76 kusanagi 1.1 */
77 kusanagi 5.1 //void CalibTrkReader::RunEvent(int EventNumber, long int length, char *subData) {
78 kusanagi 2.2 void CalibTrk2Reader::RunEvent(int EventNumber, long int dataLength) throw (Exception){
79 kusanagi 1.6 std::stringstream oss;
80 kusanagi 5.1 char subData[dataLength];
81     int ERROR;
82 kusanagi 1.1 InputFile->read(subData, sizeof(unsigned char)*dataLength);
83 kusanagi 5.1 char *data = new char[dataLength];
84     memcpy(data, subData, dataLength);
85     int curpos=1;
86 kusanagi 2.2
87     //Call to the FORTRAN routin that unpack tracker events
88 kusanagi 5.1 trkcalibpkt_( &ERROR,(unsigned char*)data, &dataLength, &curpos);
89 kusanagi 2.6
90     calibTrk2->unpackError = ERROR;
91 kusanagi 2.2 if (ERROR != 0) {
92     oss.str("");
93     oss << "Fortran77 function trkcalibpkt error code = " << ERROR;
94     logger->warn(oss.str().c_str());
95     }
96 kusanagi 1.1
97 kusanagi 2.2 //Store the unpacked data
98 kusanagi 5.1 calibTrk2->good0 = trkcalib_.good0;
99     memcpy(calibTrk2->DAQmode, trkcalib_.DAQmode, sizeof(calibTrk2->DAQmode));
100     memcpy(calibTrk2->DSPnumber, trkcalib_.DSPnumber, sizeof(calibTrk2->DSPnumber));
101     memcpy(calibTrk2->calibnumber, trkcalib_.calibnumber, sizeof(calibTrk2->calibnumber));
102     memcpy(calibTrk2->ncalib_event, trkcalib_.ncalib_event, sizeof(calibTrk2->ncalib_event));
103     memcpy(calibTrk2->ped_l1, trkcalib_.ped_l1, sizeof(calibTrk2->ped_l1));
104     memcpy(calibTrk2->ped_l2, trkcalib_.ped_l2, sizeof(calibTrk2->ped_l2));
105     memcpy(calibTrk2->ped_l3, trkcalib_.ped_l3, sizeof(calibTrk2->ped_l3));
106     memcpy(calibTrk2->sig_l1, trkcalib_.sig_l1, sizeof(calibTrk2->sig_l1));
107     memcpy(calibTrk2->sig_l2, trkcalib_.sig_l2, sizeof(calibTrk2->sig_l2));
108     memcpy(calibTrk2->sig_l3, trkcalib_.sig_l3, sizeof(calibTrk2->sig_l3));
109     memcpy(calibTrk2->nbad_l1, trkcalib_.nbad_l1, sizeof(calibTrk2->nbad_l1));
110     memcpy(calibTrk2->nbad_l2, trkcalib_.nbad_l2, sizeof(calibTrk2->nbad_l2));
111     memcpy(calibTrk2->nbad_l3, trkcalib_.nbad_l3, sizeof(calibTrk2->nbad_l3));
112     memcpy(calibTrk2->cal_flag, trkcalib_.cal_flag, sizeof(calibTrk2->cal_flag));
113    
114 kusanagi 4.2 int tempBad_par[3072][6];
115     float tempPed_par[3072][6];
116     float tempSig_par[3072][6];
117 kusanagi 5.1 int tempCrc_cal[3][6];
118 kusanagi 2.2 memcpy(tempBad_par,trkcalib_.DSPbad_par, sizeof(tempBad_par));
119     memcpy(tempPed_par,trkcalib_.DSPped_par, sizeof(tempPed_par));
120 kusanagi 5.1 memcpy(tempSig_par,trkcalib_.DSPsig_par, sizeof(tempSig_par));
121     memcpy(tempCrc_cal,trkcalib_.crc_cal, sizeof(tempCrc_cal));
122 kusanagi 2.2
123     for (int i = 0; i < 6; i++){
124     for (int j = 0; j < 3072; j++){
125     calibTrk2->DSPbad_par[i][j] = tempBad_par[j][i];
126     calibTrk2->DSPped_par[i][j] = tempPed_par[j][i];
127     calibTrk2->DSPsig_par[i][j] = tempSig_par[j][i];
128 kusanagi 1.4 }
129 kusanagi 5.1 for (int k = 0; k < 3; k++){
130     calibTrk2->crc_cal[i][k] = tempCrc_cal[k][i];
131     }
132 kusanagi 2.2 }
133 kusanagi 1.4 //-----------------------------------------------------------------------------------------
134 kusanagi 1.1 }
135    
136 kusanagi 5.1

  ViewVC Help
Powered by ViewVC 1.1.23