/[PAMELA software]/chewbacca/PamOffLineSW/techmodel/CalibTrk1Reader.cpp
ViewVC logotype

Annotation of /chewbacca/PamOffLineSW/techmodel/CalibTrk1Reader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (download) (vendor branch)
Tue Sep 23 07:20:28 2008 UTC (16 years, 2 months ago) by mocchiut
Branch: v0r00, MAIN
CVS Tags: v1r02, v1r00, v1r01, start, v10RED, v9r00, v9r01, HEAD
Changes since 1.1: +0 -0 lines
Imported sources, 23/09/2008

1 mocchiut 1.1 /** @file
2     * $Source: /repository/PamOffLineSW/techmodel/CalibTrk1Reader.cpp,v $
3     * $Id: CalibTrk1Reader.cpp,v 1.8 2008-03-21 16:18:46 messineo Exp $
4     * $Author: messineo $
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     #include "ReaderAlgorithms.h"
12    
13     extern "C" {
14     #include "CRC.h"
15     extern void trkcalibpkt_(int*, unsigned char[], long int*, int*); //(*)
16    
17     //Struct per il passaggio di dati da e verso la chiamata fortran
18     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     #include <dirent.h>
41     }
42    
43     using namespace pamela::techmodel;
44    
45     /**
46     * Constructor.
47     */
48     CalibTrk1Reader::CalibTrk1Reader(void):
49     TechmodelAlgorithm(PacketType::CalibTrk1, "TechmodelCalibTrk1Reader") {
50     calibTrk1 = new CalibTrk1Event();
51     }
52    
53     /**
54     * Get a string with the version info of the algorithm.
55     */
56     std::string CalibTrk1Reader::GetVersionInfo(void) const {
57     return
58     "$Header: /repository/PamOffLineSW/techmodel/CalibTrk1Reader.cpp,v 1.8 2008-03-21 16:18:46 messineo Exp $\n";
59     }
60    
61     /**
62     * Initialize the algorithm with a special run. This will initialize the
63     * event reader routines for all packet types.
64     */
65     void CalibTrk1Reader::Init(PamelaRun *run) {
66     run->WriteSubPacket(this, &calibTrk1, calibTrk1->Class());
67     }
68    
69     /**
70     * Unpack the CalibTrk event
71     */
72     void CalibTrk1Reader::PKT_RunEvent(char* data, long int dataLength) throw (CalibException){
73     std::stringstream oss;
74     string msg;
75     int ERROR;
76     int curpos=1;
77    
78     //Call to the FORTRAN routin that unpack tracker events
79     trkcalibpkt_( &ERROR,(unsigned char*)data, &dataLength, &curpos);
80    
81     calibTrk1->unpackError = ERROR;
82     if (ERROR != 0) {
83     oss.str("");
84     oss << "CalibTrk1: Fortran77 function trkcalibpkt error code = " << ERROR;
85     msg=oss.str();
86     PamOffLineSW::mainLogUtil->logWarning(msg);
87     }
88    
89     //Store the unpacked data
90     calibTrk1->good0 = trkcalib_.good0;
91     memcpy(calibTrk1->DAQmode, trkcalib_.DAQmode, sizeof(calibTrk1->DAQmode));
92     memcpy(calibTrk1->DSPnumber, trkcalib_.DSPnumber, sizeof(calibTrk1->DSPnumber));
93     memcpy(calibTrk1->calibnumber, trkcalib_.calibnumber, sizeof(calibTrk1->calibnumber));
94     memcpy(calibTrk1->ncalib_event, trkcalib_.ncalib_event, sizeof(calibTrk1->ncalib_event));
95     memcpy(calibTrk1->ped_l1, trkcalib_.ped_l1, sizeof(calibTrk1->ped_l1));
96     memcpy(calibTrk1->ped_l2, trkcalib_.ped_l2, sizeof(calibTrk1->ped_l2));
97     memcpy(calibTrk1->ped_l3, trkcalib_.ped_l3, sizeof(calibTrk1->ped_l3));
98     memcpy(calibTrk1->sig_l1, trkcalib_.sig_l1, sizeof(calibTrk1->sig_l1));
99     memcpy(calibTrk1->sig_l2, trkcalib_.sig_l2, sizeof(calibTrk1->sig_l2));
100     memcpy(calibTrk1->sig_l3, trkcalib_.sig_l3, sizeof(calibTrk1->sig_l3));
101     memcpy(calibTrk1->nbad_l1, trkcalib_.nbad_l1, sizeof(calibTrk1->nbad_l1));
102     memcpy(calibTrk1->nbad_l2, trkcalib_.nbad_l2, sizeof(calibTrk1->nbad_l2));
103     memcpy(calibTrk1->nbad_l3, trkcalib_.nbad_l3, sizeof(calibTrk1->nbad_l3));
104     memcpy(calibTrk1->cal_flag, trkcalib_.cal_flag, sizeof(calibTrk1->cal_flag));
105    
106     int tempBad_par[3072][6];
107     float tempPed_par[3072][6];
108     float tempSig_par[3072][6];
109     int tempCrc_cal[3][6];
110     memcpy(tempBad_par,trkcalib_.DSPbad_par, sizeof(tempBad_par));
111     memcpy(tempPed_par,trkcalib_.DSPped_par, sizeof(tempPed_par));
112     memcpy(tempSig_par,trkcalib_.DSPsig_par, sizeof(tempSig_par));
113     memcpy(tempCrc_cal,trkcalib_.crc_cal, sizeof(tempCrc_cal));
114    
115     for (int i = 0; i < 6; i++){
116     for (int j = 0; j < 3072; j++){
117     calibTrk1->DSPbad_par[i][j] = tempBad_par[j][i];
118     calibTrk1->DSPped_par[i][j] = tempPed_par[j][i];
119     calibTrk1->DSPsig_par[i][j] = tempSig_par[j][i];
120     }
121     for (int k = 0; k < 3; k++){
122     calibTrk1->crc_cal[i][k] = tempCrc_cal[k][i];
123     }
124     }
125    
126     PamOffLineSW::mainLogUtil->logError("CANNOT CHECK IF CalibTrk1 IS GOOD OR NOT ...");
127    
128     //TODO: put the correct check here ....
129     if(1>2){
130     oss.str("");
131     //oss << "CalibTrk1 Problem: ??[0] = " <<cperror[0]<<" cperror[1] = " <<cperror[1]<<" cperror[2] = " <<cperror[2]<<" cperror[3] = " <<cperror[3];
132     msg=oss.str();
133     PamOffLineSW::mainLogUtil->logError(msg);
134     throw CalibException("Wrong Global CRC for CalibTrk1 Packet ");
135     }
136     //-----------------------------------------------------------------------------------------
137     }
138    
139    
140    

  ViewVC Help
Powered by ViewVC 1.1.23