Adding base classes for zmq networking and modificiations to event server
[u/mrichter/AliRoot.git] / MONITOR / monitorGDC.cxx
CommitLineData
b5279783 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id$ */
17
18///////////////////////////////////////////////////////////////////////////////
19// //
20// this program performs local monitoring on a GDC by running the HLT code //
21// //
22// If an argument is given, this is taken as the name of a date file which //
23// is used instead of the local node. //
24// The program can be stopped by pressing CTRL-C. //
25// //
26///////////////////////////////////////////////////////////////////////////////
27
28#include <TError.h>
8ecba4b2 29#include <TSysEvtHandler.h>
8c50acf2 30#ifdef ALI_DATE
b5279783 31#include <TROOT.h>
32#include <TSystem.h>
b5279783 33#include <TDatime.h>
34#include "AliRawReaderDate.h"
35#include "event.h"
36#include "monitor.h"
cae21299 37/*
4aa41877 38#include <AliHLTStandardIncludes.h>
39#include <AliHLTTransform.h>
40#include <AliHLTMemHandler.h>
41#include <AliHLTTrackArray.h>
42#include <AliHLTHoughMaxFinder.h>
43#include <AliHLTHoughBaseTransformer.h>
44#include <AliHLTHough.h>
45#include <AliHLTBenchmark.h>
cae21299 46#include <AliHLTITSclusterer.h>
47#include <AliHLTITSVertexerZ.h>
48#include <AliHLTITStracker.h>
49*/
50#include "AliESDEvent.h"
ede6ca10 51#include "AliESDVertex.h"
cae21299 52#include "AliTracker.h"
b77a0228 53#include <AliKalmanTrack.h>
ad693bc1 54#include "AliITSgeomTGeo.h"
f7ea67db 55#include "AliITSgeom.h"
b5279783 56#endif
b5279783 57
b5279783 58//_____________________________________________________________________________
59class AliGDCInterruptHandler : public TSignalHandler {
60public:
61 AliGDCInterruptHandler();
62 Bool_t Notify() {fStop = kTRUE; return kTRUE;};
63 Bool_t Stop() const {return fStop;};
64private:
65 Bool_t fStop; // CTRL-C pressed
66};
67
68//_____________________________________________________________________________
69AliGDCInterruptHandler::AliGDCInterruptHandler() :
e41f1e44 70 TSignalHandler(kSigInterrupt, kFALSE),
71 fStop(kFALSE)
b5279783 72{
e41f1e44 73
cae21299 74}
b5279783 75
76
77//_____________________________________________________________________________
8c50acf2 78#ifdef ALI_DATE
120b3c73 79int main(int argc, char** argv)
80{
b5279783 81 // set ROOT in batch mode
82 gROOT->SetBatch();
83
84 // open a log file
85 FILE* file = fopen("monitorGDC.log", "w");
a8ffd46b 86
b5279783 87 TDatime time;
88
89 // get data from a file or online from this node
90 Int_t status = 0;
91 if (argc > 1) {
92 status = monitorSetDataSource(argv[1]);
93 } else {
94 status = monitorSetDataSource(":");
95 }
96 if (status) ::Fatal("monitorSetDataSource", monitorDecodeError(status));
97
98 // monitor only a sample of physics events
99 char* table[] = {"Physics event", "yes", NULL};
100 status = monitorDeclareTable(table);
101 if (status) ::Fatal("monitorDeclareTable", monitorDecodeError(status));
102
103 // declare this monitoring program to DATE
04b48a95 104 status = monitorDeclareMp("GDC physics monitoring");
b5279783 105 if (status) ::Fatal("monitorDeclareMp", monitorDecodeError(status));
106
b5279783 107 // initialize HLT transformations
cae21299 108 // if (!AliHLTTransform::Init("./", kFALSE)) {
109 // ::Fatal("AliHLTTransform::Init", "HLT initialization failed");
110 // }
111
af885e0f 112 AliESDEvent *esd = new AliESDEvent;
113 esd->CreateStdContent();
cae21299 114
115 // AliITSgeom *geom = new AliITSgeom();
116 // geom->ReadNewFile("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymmFMD.det");
117 // if (!geom) return 1;
118 // Int_t sfield = 0;
119 // switch ((Int_t)(AliHLTTransform::GetSolenoidField()+0.5)) {
120 // case 2:
f7a1cc68 121 // sfield = AliMagF::k2kG;
cae21299 122 // break;
123 // case 5:
f7a1cc68 124 // sfield = AliMagF::k5kG;
cae21299 125 // break;
126 // default:
127 // ::Fatal("AliHLTTransform::GetSolenoidField", "Incorrect magnetic field");
128 // }
aa95f9f7 129
130 // Init PID
131 AliPID pid;
b5279783 132
133 // create the signal handler
134 AliGDCInterruptHandler* handler = new AliGDCInterruptHandler;
135 gSystem->AddSignalHandler(handler);
136
137 // endless loop
138 void* ptr = NULL;
139 while (!handler->Stop()) {
140 // get the next event
141 status = monitorGetEventDynamic(&ptr);
142 if (status == (Int_t)MON_ERR_EOF) break;
143 if (status) ::Fatal("monitorGetEventDynamic", monitorDecodeError(status));
144
145 // if no new event
146 if (!ptr) {
147 gSystem->Sleep(1000); // sleep for 1 second
148 continue;
149 }
150
04b48a95 151 AliRawReaderDate rawReader(ptr);
a8ffd46b 152 // if ((rawReader.GetAttributes()[0] & 0x02) != 0) {
04b48a95 153
a8ffd46b 154 // Int_t errorCode = rawReader.CheckData();
155 Int_t errorCode = 0;
3256212a 156 if (errorCode && (errorCode != AliRawReader::kErrSize)) {
157 time.Set();
158 if (file) fprintf(file, "%s\n", time.AsString());
159 if (file) fprintf(file, "run: %d event: %d %d\n",
160 rawReader.GetRunNumber(),
161 rawReader.GetEventId()[0],
162 rawReader.GetEventId()[1]);
163 fprintf(file, "ERROR: %d\n\n", errorCode);
164
165 } else {
166
cae21299 167// AliHLTBenchmark *fBenchmark = new AliHLTBenchmark();
168// fBenchmark->Start("Overall timing");
a8ffd46b 169
cae21299 170// // ITS clusterer and vertexer
171// fBenchmark->Start("ITS Clusterer");
172// AliHLTITSclusterer clusterer(0);
173// AliRawReader *itsrawreader=new AliRawReaderDate(ptr);
174// TTree* treeClusters = new TTree("TreeL3ITSclusters"," "); //make a tree
175// clusterer.Digits2Clusters(itsrawreader,treeClusters);
176// fBenchmark->Stop("ITS Clusterer");
b77a0228 177
cae21299 178// AliHLTITSVertexerZ vertexer;
179// AliESDVertex *vertex = vertexer.FindVertexForCurrentEvent(geom,treeClusters);
180// Double_t vtxPos[3];
181// Double_t vtxErr[3]={0.005,0.005,0.010};
182// vertex->GetXYZ(vtxPos);
183// // vertex->GetSigmaXYZ(vtxErr);
184// esd->SetVertex(vertex);
185
186// // TPC Hough reconstruction
187// Float_t ptmin = 0.1*AliHLTTransform::GetSolenoidField();
188// Float_t zvertex = vtxPos[2];
189
190// // Run the Hough Transformer
191// fBenchmark->Start("Init");
192// AliHLTHough *hough1 = new AliHLTHough();
193
194// hough1->SetThreshold(4);
195// hough1->CalcTransformerParams(ptmin);
196// hough1->SetPeakThreshold(70,-1);
197// // printf("Pointer is %x\n",ptr);
198// hough1->Init("./", kFALSE, 100, kFALSE,4,0,(Char_t*)ptr,zvertex);
199// hough1->SetAddHistograms();
200// fBenchmark->Stop("Init");
201
202// fBenchmark->Start("Init");
203// AliHLTHough *hough2 = new AliHLTHough();
204
205// hough2->SetThreshold(4);
206// hough2->CalcTransformerParams(ptmin);
207// hough2->SetPeakThreshold(70,-1);
208// // printf("Pointer is %x\n",ptr);
209// hough2->Init("./", kFALSE, 100, kFALSE,4,0,(Char_t*)ptr,zvertex);
210// hough2->SetAddHistograms();
211// fBenchmark->Stop("Init");
212
213// Int_t nglobaltracks = 0;
214// /*
215// hough1->StartProcessInThread(0,17);
216// hough2->StartProcessInThread(18,35);
217
218// // gSystem->Sleep(20000);
219// if(hough1->WaitForThreadFinish())
220// ::Fatal("AliHLTHough::WaitForThreadFinish"," Can not join the required thread! ");
221// if(hough2->WaitForThreadFinish())
222// ::Fatal("AliHLTHough::WaitForThreadFinish"," Can not join the required thread! ");
223
224// gSystem->MakeDirectory("hough1");
225// hough1->WriteTracks("./hough1");
226// gSystem->MakeDirectory("hough2");
227// hough2->WriteTracks("./hough2");
228// */
229
230// for(int slice=0; slice<=17; slice++)
231// {
232// // cout<<"Processing slice "<<slice<<endl;
233// fBenchmark->Start("ReadData");
234// hough1->ReadData(slice,0);
235// fBenchmark->Stop("ReadData");
236// fBenchmark->Start("Transform");
237// hough1->Transform();
238// fBenchmark->Stop("Transform");
239// hough1->AddAllHistogramsRows();
240// hough1->FindTrackCandidatesRow();
241// fBenchmark->Start("AddTracks");
242// hough1->AddTracks();
243// fBenchmark->Stop("AddTracks");
244
245// // AliHLTTrackArray* tracks = (AliHLTTrackArray*)hough1->GetTracks(0);
246// // nglobaltracks += tracks->GetNTracks();
247// }
248// for(int slice=18; slice<=35; slice++)
249// {
250// // cout<<"Processing slice "<<slice<<endl;
251// fBenchmark->Start("ReadData");
252// hough2->ReadData(slice,0);
253// fBenchmark->Stop("ReadData");
254// fBenchmark->Start("Transform");
255// hough2->Transform();
256// fBenchmark->Stop("Transform");
257// hough2->AddAllHistogramsRows();
258// hough2->FindTrackCandidatesRow();
259// fBenchmark->Start("AddTracks");
260// hough2->AddTracks();
261// fBenchmark->Stop("AddTracks");
262
263// // AliHLTTrackArray* tracks = (AliHLTTrackArray*)hough2->GetTracks(0);
264// // nglobaltracks += tracks->GetNTracks();
265// }
266
267// nglobaltracks += hough1->FillESD(esd);
268// nglobaltracks += hough2->FillESD(esd);
269
270// // ITS tracker
271// AliHLTITStracker itsTracker(0);
272// itsTracker.SetVertex(vtxPos,vtxErr);
273
274// itsTracker.LoadClusters(treeClusters);
275// itsTracker.Clusters2Tracks(esd);
276// itsTracker.UnloadClusters();
277
278// fBenchmark->Stop("Overall timing");
279// time.Set();
280// if (file) fprintf(file, "%s\n", time.AsString());
281// if (file) fprintf(file, "run: %d event: %d %d\n",
282// rawReader.GetRunNumber(),
283// rawReader.GetEventId()[0],
284// rawReader.GetEventId()[1]);
285// if (errorCode) fprintf(file, "ERROR: %d\n", errorCode);
286
287// if (file) fprintf(file, "Hough Transformer found %d tracks\n",nglobaltracks);
288
289// hough1->DoBench("hough1");
290// hough2->DoBench("hough2");
291// fBenchmark->Analyze("overall");
292// if (file) {
293// FILE* bench = fopen("hough1.dat", "r");
294// while (bench && !feof(bench)) {
295// char buffer[256];
296// if (!fgets(buffer, 256, bench)) break;
297// fprintf(file, "%s", buffer);
298// }
299// fclose(bench);
300// }
301// if (file) {
302// FILE* bench = fopen("hough2.dat", "r");
303// while (bench && !feof(bench)) {
304// char buffer[256];
305// if (!fgets(buffer, 256, bench)) break;
306// fprintf(file, "%s", buffer);
307// }
308// fclose(bench);
309// }
310// if (file) {
311// FILE* bench = fopen("overall.dat", "r");
312// while (bench && !feof(bench)) {
313// char buffer[256];
314// if (!fgets(buffer, 256, bench)) break;
315// fprintf(file, "%s", buffer);
316// }
317// fclose(bench);
318// fprintf(file, "\n\n");
319// }
320
321// delete hough1;
322// delete hough2;
323
324// esd->Reset();
3256212a 325 }
a8ffd46b 326 // }
327
328 /*
329 // read run, event, detector, DDL numbers and data size
330 AliRawReaderDate rawReader(ptr);
331 time.Set();
332 printf("\n%s\n", time.AsString());
333 printf("run: %d event: %d %d\n", rawReader.GetRunNumber(),
334 rawReader.GetEventId()[0], rawReader.GetEventId()[1]);
335 while (rawReader.ReadMiniHeader()) {
336 printf(" detector: %d DDL: %d size: %d\n",
337 rawReader.GetDetectorID(), rawReader.GetDDLID(),
338 rawReader.GetDataSize());
04b48a95 339 }
b5279783 340
a8ffd46b 341 */
342
df0f3179 343 gSystem->Sleep(100); // sleep for 0.1 second
b5279783 344 free(ptr);
345
346 gSystem->ProcessEvents();
347 if (file) fflush(file);
a8ffd46b 348
b5279783 349 }
350
351 gSystem->RemoveSignalHandler(handler);
352 if (file) fclose(file);
353
120b3c73 354 return 0;
355}
356
b5279783 357#else
120b3c73 358int main(int /*argc*/, char** /*argv*/)
359{
b5279783 360 ::Fatal("main", "this program was compiled without DATE");
b5279783 361
120b3c73 362 return 1;
b5279783 363}
120b3c73 364#endif