/[PAMELA software]/yoda/techmodel/physics/TrackerReader.cpp
ViewVC logotype

Contents of /yoda/techmodel/physics/TrackerReader.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3.0 - (show 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 /** @file
2 * $Source: /home/cvsmanager/yoda/techmodel/physics/TrackerReader.cpp,v $
3 * $Id: TrackerReader.cpp,v 2.6 2005/01/29 00:31:36 kusanagi Exp $
4 * $Author: kusanagi $
5 *
6 * Implementation of the TrackerPhysicsReader class.
7 */
8
9 #include <string>
10 #include <log4cxx/logger.h>
11 #include "TrackerReader.h"
12 #include "event/physics/tracker/TrackerEvent.h"
13 //#include <TArrayC.h>
14
15 extern "C" {
16 //Passo il path verso la il file temporaneo
17 extern void trkeventpkt_(int*, char*);
18 //Struct per il passaggio di dati da e verso la chiamata fortran
19 extern struct {
20 int good0;
21 int nev0;
22 int DAQmode[12];
23 int DSPnumber[12];
24 int DATAlength[12];
25 int eventn[12];
26 int nclust[12];
27 int cutc[12];
28 int cutcl[12];
29 int addrcluster[12][3];
30 int signcluster[12][3];
31 int fc[12];
32 int compressiontime[12];
33 int fl5[12];
34 int fl4[12];
35 int fl3[12];
36 int fl2[12];
37 int fl1[12];
38 int fl6[12];
39 int checksum[12];
40 int TOTDATAlength;
41 int datatracker[49152];
42 int pnum[12];
43 int cmdnum[12];
44 int bid[12];
45 int alarm[12];
46 int aswr[12];
47 } level0_;
48 #include <dirent.h>
49 }
50
51 using namespace pamela;
52 using namespace pamela::tracker;
53
54 static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.tracker.TrackerReader"));
55
56 /**
57 * Constructor.
58 */
59 TrackerReader::TrackerReader(void):
60 TechmodelAlgorithm(PacketType::Physics, "TechmodelTrackerReader") {
61 logger->debug(_T("Constructor"));
62 tracker = new TrackerEvent();
63 }
64
65 /**
66 * Get a string with the version info of the algorithm.
67 */
68 std::string TrackerReader::GetVersionInfo(void) const {
69 return
70 "$Header: /home/cvsmanager/yoda/techmodel/physics/TrackerReader.cpp,v 2.6 2005/01/29 00:31:36 kusanagi Exp $";
71 }
72
73 /**
74 * Initialize the algorithm with a special run. This will initialize the
75 * event reader routines for all packet types.
76 */
77 void TrackerReader::Init(PamelaRun *run) {
78 logger->debug(_T("Initialize"));
79 SetInputStream(run);
80 run->WriteSubPacket(this, &tracker, tracker->Class());
81 }
82
83 /**
84 * Unpack the orbital event from an input file.
85 */
86 void TrackerReader::RunEvent(int EventNumber) {
87
88 }
89
90 /**
91 * Unpack the Tracker data event from the physical packet.
92 */
93 void TrackerReader::RunEvent(int EventNumber, const char subData[], long int length) {
94 int ERROR;
95
96 //Scrivo un file temporaneo per passarlo alla routine
97 //Speriamo di cambiare la routine per passargli un buffer.....
98 //DIR *dirp;
99
100 //std::string pathDir((char*)getenv("YODA_DATA"));
101
102 //pathDir = pathDir + "/todatemp.dat";
103 stringstream oss;
104 oss.str("");
105 oss << getenv("YODA_DATA") << "/" << time(NULL) << "trev.dat";
106 FILE *pfile;
107 pfile = fopen(oss.str().c_str(), "wb");
108 fwrite(subData, 1, length, pfile);
109 fclose(pfile);
110
111 //Call to the FORTRAN routin that unpack tracker events
112 trkeventpkt_(&ERROR, (char*)oss.str().c_str());
113
114 remove(oss.str().c_str());
115
116 /*if (ERROR != 0) {
117 char *errmsg;
118 switch (ERROR){
119 case 1: errmsg = "---------------------";
120 }
121 } else {*/
122 //Store the unpacked data
123 tracker->unpackError = ERROR;
124 tracker->good0 = level0_.good0;
125 tracker->nev0 = level0_.nev0;
126 memcpy(tracker->DAQmode, level0_.DAQmode, sizeof(tracker->DAQmode));
127 memcpy(tracker->DSPnumber, level0_.DSPnumber, sizeof(tracker->DSPnumber));
128 memcpy(tracker->DATAlength, level0_.DATAlength, sizeof(tracker->DATAlength));
129 memcpy(tracker->eventn, level0_.eventn, sizeof(tracker->eventn));
130 memcpy(tracker->nclust, level0_.nclust, sizeof(tracker->nclust));
131 memcpy(tracker->cutc, level0_.cutc, sizeof(tracker->cutc));
132 memcpy(tracker->cutcl, level0_.cutcl, sizeof(tracker->cutcl));
133 // memcpy(tracker->addrcluster, (level0_.addrcluster), sizeof(tracker->addrcluster));
134 // memcpy(tracker->signcluster, (level0_.signcluster), sizeof(tracker->signcluster));
135 //--------have to invert array because of FORTRAN <-> C different management of the indexes
136 int tempAddr[3][12];
137 int tempSign[3][12];
138 memcpy(tempAddr, (level0_.addrcluster), sizeof(tempAddr));
139 memcpy(tempSign, (level0_.signcluster), sizeof(tempSign));
140 for (int j = 0; j < 12; j++){
141 for (int i = 0; i < 3; i++){
142 tracker->addrcluster[j][i] = tempAddr[i][j];
143 tracker->signcluster[j][i] = tempSign[i][j];
144 }
145 }
146 //-----------------------------------------------------------------------------------------
147
148 memcpy(tracker->fc, level0_.fc, sizeof(tracker->fc));
149 memcpy(tracker->compressiontime, level0_.compressiontime, sizeof(tracker->compressiontime));
150 memcpy(tracker->fl1, level0_.fl1, sizeof(tracker->fl1));
151 memcpy(tracker->fl2, level0_.fl2, sizeof(tracker->fl2));
152 memcpy(tracker->fl3, level0_.fl3, sizeof(tracker->fl3));
153 memcpy(tracker->fl4, level0_.fl4, sizeof(tracker->fl4));
154 memcpy(tracker->fl5, level0_.fl5, sizeof(tracker->fl5));
155 memcpy(tracker->fl6, level0_.fl6, sizeof(tracker->fl6));
156 memcpy(tracker->pnum, level0_.pnum, sizeof(tracker->pnum));
157 memcpy(tracker->cmdnum, level0_.cmdnum, sizeof(tracker->cmdnum));
158 memcpy(tracker->bid, level0_.bid, sizeof(tracker->bid));
159 memcpy(tracker->alarm, level0_.alarm, sizeof(tracker->alarm));
160 memcpy(tracker->aswr, level0_.aswr, sizeof(tracker->aswr));
161
162 tracker->TOTDATAlength = level0_.TOTDATAlength;
163 //tracker->TrackerData = new TArrayI(level0_.TOTDATAlength, level0_.datatracker);
164 tracker->TrackerData = TArrayI(level0_.TOTDATAlength, level0_.datatracker);
165
166 //memcpy(tracker->datatracker, level0_.datatracker, sizeof(tracker->datatracker));
167 //}
168
169 }

  ViewVC Help
Powered by ViewVC 1.1.23