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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (hide annotations) (download)
Thu Feb 11 09:02:11 2010 UTC (14 years, 9 months ago) by mocchiut
Branch: MAIN
CVS Tags: v10RED, v9r00, v9r01, HEAD
Changes since 1.4: +34 -14 lines
9R bugs fixed

1 mocchiut 1.1 /** @file
2 mocchiut 1.3 * $Author: mocchiut $
3 mocchiut 1.5 * $Date: 2009/08/04 13:58:12 $
4     * $Revision: 1.4 $
5 mocchiut 1.1 *
6     * Implementation of the functions of a sample Algorithm class.
7     * This file can be used as a templace to develop your own algorithm.
8     */
9    
10     #include "EventReader.h"
11     #include "ReaderAlgorithms.h"
12 mocchiut 1.5 #include <TObjectTable.h>
13 mocchiut 1.1
14     extern "C" {
15     #include "CRC.h"
16     }
17    
18     using namespace pamela;
19     using namespace pamela::techmodel;
20    
21     EventReader::~EventReader(){
22     if(Header){delete Header; Header=NULL;}
23     }
24    
25     /**
26     * Constructor.
27     */
28    
29     EventReader::EventReader():
30     TechmodelAlgorithm(0, "TechmodelEventReader"){
31     Header = new EventHeader();
32    
33     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::PhysEndRun, new PhysEndRunReader));
34     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::CalibCalPulse1, new CalibCalPulse1Reader));
35     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::CalibCalPulse2, new CalibCalPulse2Reader));
36     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::Physics, new PhysicsReader));
37     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::CalibTrkBoth, new CalibTrkBothReader));
38     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::CalibTrk1, new CalibTrk1Reader));
39     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::CalibTrk2, new CalibTrk2Reader));
40     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::CalibTof, new CalibTofReader));
41     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::CalibS4, new CalibS4Reader));
42     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::CalibCalPed, new CalibCalPedReader));
43     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::Calib1_Ac1, new Calib1_Ac1Reader));
44     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::Calib2_Ac1, new Calib2_Ac1Reader));
45     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::Calib1_Ac2, new Calib1_Ac2Reader));
46     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::Calib2_Ac2, new Calib2_Ac2Reader));
47     //TODO: marco maybe a bug?: due volte Calib2_Ac2. ??
48     // TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::Calib2_Ac2, new CalibCalReader));
49     //TODO: marco maybe a bug?
50     // questa dovrebbe essere cosi ma poi c'e' un errore in Pamela Run: in WriteHeaders non ho CalibCal
51     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::CalibCal, new CalibCalReader));
52     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::RunHeader, new RunHeaderReader));
53     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::RunTrailer, new RunTrailerReader));
54     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::CalibHeader, new CalibHeaderReader));
55     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::CalibTrailer, new CalibTrailerReader));
56     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::InitHeader, new InitHeaderReader));
57     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::InitTrailer, new InitTrailerReader));
58     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::EventTrk, new EventTrkReader));
59     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::Log, new LogReader));
60     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::VarDump, new VarDumpReader));
61     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::ArrDump, new ArrDumpReader));
62     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::TabDump, new TabDumpReader));
63     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::Tmtc, new TmtcReader));
64     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::Mcmd, new McmdReader));
65     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::ForcedFECmd, new ForcedFECmdReader));
66     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::Ac1Init, new Ac1InitReader));
67     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::CalInit, new CalInitReader));
68     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::TrkInit, new TrkInitReader));
69     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::TofInit, new TofInitReader));
70     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::TrgInit, new TrgInitReader));
71     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::NdInit, new NdInitReader));
72     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::S4Init, new S4InitReader));
73     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::Ac2Init, new Ac2InitReader));
74     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::CalAlarm, new CalAlarmReader));
75     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::Ac1Alarm, new Ac1AlarmReader));
76     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::TrkAlarm, new TrkAlarmReader));
77     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::TrgAlarm, new TrgAlarmReader));
78     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::TofAlarm, new TofAlarmReader));
79     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::S4Alarm, new S4AlarmReader));
80     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::Ac2Alarm, new Ac2AlarmReader));
81     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::TsbT, new TsbTReader));
82     TechmodelAlgorithmMap.insert(AlgorithmMap::value_type(PacketType::TsbB, new TsbBReader));
83     }
84    
85     /**
86     * Initialize the algorithm with a special run. This will initialize the
87     * event reader routines for all packet types.
88     */
89 mocchiut 1.5 TObject *EventReader::GetPtr(TString name){
90     for (AlgorithmMap::iterator i = TechmodelAlgorithmMap.begin(); i != TechmodelAlgorithmMap.end(); i++) {
91     if ( !strcmp(i->second->GetAlgorithmName(),name.Data()) ){
92     // cout << " Retrieving pointer of " << i->second->GetAlgorithmName()<<endl;
93     TechmodelAlgorithm* EventAlgorithm(i->second);
94     return(EventAlgorithm->GetPtr(""));
95     };
96     };
97     return(NULL);
98     }
99    
100    
101 mocchiut 1.1 void EventReader::Init(PamelaRun *run) {
102 mocchiut 1.5 //Create the structure of directories and create xxx.Header.root files
103     // printf(" init er \n");
104     run->WriteHeaders(this, &Header);
105     // printf(" init er wrote \n");
106     //Create the xxx.root in it's specific directory
107     // gObjectTable->Print();
108     // Int_t yy = 0;
109     for (AlgorithmMap::iterator i = TechmodelAlgorithmMap.begin();
110 mocchiut 1.1 i != TechmodelAlgorithmMap.end(); i++) {
111 mocchiut 1.5 // cout << " Initializing algo " << i->second->GetAlgorithmName()<<endl;
112     i->second->Init(run);
113     // printf(" algo %i \n",yy);
114     // yy++;
115     }
116     // printf(" init er header \n");
117     if ( Header ) { delete Header; Header = new EventHeader(); }; // EMILIANO, reset Counter when opening a new file
118     // printf(" init er header done %p \n",run);
119    
120     Run=run;
121 mocchiut 1.1 }
122    
123    
124     /**
125     * Read the next event header, call the reader algorithms that
126     * correspond to its packet type, and read the event trailer.
127     * if the packet is saved return 0.
128     *
129     * return values: meaning:
130     0 packet good
131     1 exception but used //never happen
132     2 CRC exception but used
133     3 CALIBRATION PACKET with error but used
134     -1 CRC exception packet DISCARDED
135     -2 FATAL exception packet DISCARDED //never happen
136 mocchiut 1.2 -3 No way to read events of this type. packet DISCARDED( es CalibCal --old)
137 mocchiut 1.1 //in PacketUser I will put ret = 10
138     ret = 10 if the packet is good but comes from a cadre with VRL problems
139    
140     *
141     */
142     int EventReader::PKT_RunEvent(char* headerPkt, char* pamPkt, long int length, const PacketType* type){
143     stringstream oss;
144     string msg;
145     int ret=0;
146     PKT_UnpackPscuHeader(headerPkt);
147     AlgorithmMap::iterator i = TechmodelAlgorithmMap.find(type);
148     if (i != TechmodelAlgorithmMap.end())
149     {
150     TechmodelAlgorithm* EventAlgorithm(i->second);
151     try{
152     EventAlgorithm->PKT_RunEvent(pamPkt, length);
153     }
154     catch (WrongCRCException_PKTUsed &exc){
155     //questo tipo di eccezione NON mi preoccupa,
156     //il pacchetto e' stato utilizzato e salvato ugualmente
157     ret=2;
158     oss.str("");
159     oss << exc.print();
160     oss << " Return "<<ret;
161     msg=oss.str();
162     PamOffLineSW::mainLogUtil->logWarning(msg);
163     }
164     catch (CalibException &exc){
165     //questo tipo di eccezione mi preoccupa un pochino,
166     //il pacchetto e' stato utilizzato e salvato ugualmente
167     ret=3;
168     oss.str("");
169     oss << exc.print();
170     oss << " Return "<<ret;
171     msg=oss.str();
172     PamOffLineSW::mainLogUtil->logWarning(msg);
173     }
174     catch (WrongCRCException &exc){
175     //questo tipo di eccezione mi preoccupa,
176     //il pacchetto non e' stato utilizzato ne salvato
177     ret=-1;
178     oss.str("");
179     oss << exc.print();
180     oss << " The Packet is Discarded ";
181     oss << " Return "<<ret;
182     msg=oss.str();
183     PamOffLineSW::mainLogUtil->logError(msg);
184     return ret;
185     }
186     catch (FatalException &exc){
187     ret=-2;
188     oss.str("");
189     oss << exc.print();
190     oss << " The Packet is Discarded ";
191     oss << " Return "<<ret;
192     msg=oss.str();
193     PamOffLineSW::mainLogUtil->logError(msg);
194     return ret;
195     }
196     catch (Exception &exc){
197     ret=1;
198     oss.str("");
199     oss << exc.print();
200     oss << " Return "<<ret;
201     msg=oss.str();
202     PamOffLineSW::mainLogUtil->logWarning(msg);
203     }
204     // catch (NotExistingAlgorithmException exc) {}
205    
206     Run->FillTrees(type);
207 mocchiut 1.4 // cout << Header->GetCounter()->Get(type) << endl;
208 mocchiut 1.1 Header->GetCounter()->Increment(type);
209 mocchiut 1.4 // cout << Header->GetCounter()->Get(type) << endl;
210 mocchiut 1.1 }
211     else
212     {
213     ret=-3;
214     oss.str("");
215 mocchiut 1.3 // oss << " No way to read events of type " << type->GetName().c_str()<<". The Packet is skipped ";
216     oss << " No way to read events of type " << type->GetName()<<". The Packet is skipped ";
217 mocchiut 1.1 oss << " Return "<<ret;
218     msg=oss.str();
219     PamOffLineSW::mainLogUtil->logWarning(msg);
220     return ret;
221     }
222     return ret;
223     }
224    
225     /**
226     * Unpack the PSCU header from the pkt into the structure.
227     */
228     //fill the header structure,
229     void EventReader::PKT_UnpackPscuHeader(char* buff)
230     {
231     unsigned char PacketId1 = buff[3];
232     unsigned char PacketId2 = buff[4];
233     unsigned int Counter = (((UINT32)buff[5]<<16)&0x00FF0000) + (((UINT32)buff[6]<<8)&0x0000FF00) + (((UINT32)buff[7])&0x000000FF);
234     unsigned int OrbitalTime = (((UINT32)buff[8]<<24)&0xFF000000) + (((UINT32)buff[9]<<16)&0x00FF0000) + (((UINT32)buff[10]<<8)&0x0000FF00) + (((UINT32)buff[11])&0x000000FF);
235     unsigned int PacketLenght = (((UINT32)buff[12]<<16)&0x00FF0000) + (((UINT32)buff[13]<<8)&0x0000FF00) + (((UINT32)buff[14])&0x000000FF);
236     unsigned char CRC = buff[15];
237 mocchiut 1.3 // unsigned char FileOffset = 0;// ??
238 mocchiut 1.1
239     Header->GetPscuHeader()->SetPacketId(PacketId1, PacketId2);
240     Header->GetPscuHeader()->SetCounter(Counter);
241     Header->GetPscuHeader()->SetOrbitalTime(OrbitalTime);
242     //PacketLength is the length of the whole DATApacket starting from the first byte after the header
243     //plus the CRC legth (which varies for each type of packet)
244     Header->GetPscuHeader()->SetPacketLenght(PacketLenght);
245    
246     Header->GetPscuHeader()->SetCRC(CRC);
247     Header->GetPscuHeader()->SetFileOffset(0);//I don't need this !!
248     }
249    
250    
251    
252     /**
253     * Get a string with the version info of the algorithm.
254     */
255     std::string EventReader::GetVersionInfo(void) const {
256     return
257 mocchiut 1.5 "$Header: /afs/ba.infn.it/user/pamela/src/CVS/chewbacca/PamOffLineSW/techmodel/EventReader.cpp,v 1.4 2009/08/04 13:58:12 mocchiut Exp $\n";
258 mocchiut 1.1 }
259    
260    
261     ClassImp(EventReader)

  ViewVC Help
Powered by ViewVC 1.1.23