data consistency check monitoring added
[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>
b5279783 30#ifdef DATE_SYS
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"
37#ifdef ALI_HLT
38#include <AliLevel3.h>
39#include <AliL3Transform.h>
40#include <AliL3MemHandler.h>
41#include <AliL3TrackArray.h>
42#endif
43#endif
44
45
46//_____________________________________________________________________________
47class AliGDCInterruptHandler : public TSignalHandler {
48public:
49 AliGDCInterruptHandler();
50 Bool_t Notify() {fStop = kTRUE; return kTRUE;};
51 Bool_t Stop() const {return fStop;};
52private:
53 Bool_t fStop; // CTRL-C pressed
54};
55
56//_____________________________________________________________________________
57AliGDCInterruptHandler::AliGDCInterruptHandler() :
58 TSignalHandler(kSigInterrupt, kFALSE)
59{
60 fStop = kFALSE;
61};
62
63
64//_____________________________________________________________________________
b5279783 65#ifdef DATE_SYS
120b3c73 66int main(int argc, char** argv)
67{
b5279783 68 // set ROOT in batch mode
69 gROOT->SetBatch();
70
71 // open a log file
df0f3179 72#ifdef ALI_HLT
b5279783 73 FILE* file = fopen("monitorGDC.log", "w");
df0f3179 74#else
75 FILE* file = NULL;
76#endif
b5279783 77 TDatime time;
78
79 // get data from a file or online from this node
80 Int_t status = 0;
81 if (argc > 1) {
82 status = monitorSetDataSource(argv[1]);
83 } else {
84 status = monitorSetDataSource(":");
85 }
86 if (status) ::Fatal("monitorSetDataSource", monitorDecodeError(status));
87
88 // monitor only a sample of physics events
89 char* table[] = {"Physics event", "yes", NULL};
90 status = monitorDeclareTable(table);
91 if (status) ::Fatal("monitorDeclareTable", monitorDecodeError(status));
92
93 // declare this monitoring program to DATE
04b48a95 94 status = monitorDeclareMp("GDC physics monitoring");
b5279783 95 if (status) ::Fatal("monitorDeclareMp", monitorDecodeError(status));
96
97#ifdef ALI_HLT
98 // initialize HLT transformations
99 if (!AliL3Transform::Init("./", kFALSE)) {
100 ::Fatal("AliL3Transform::Init", "HLT initialization failed");
101 }
102#endif
103
104 // create the signal handler
105 AliGDCInterruptHandler* handler = new AliGDCInterruptHandler;
106 gSystem->AddSignalHandler(handler);
107
108 // endless loop
109 void* ptr = NULL;
110 while (!handler->Stop()) {
111 // get the next event
112 status = monitorGetEventDynamic(&ptr);
113 if (status == (Int_t)MON_ERR_EOF) break;
114 if (status) ::Fatal("monitorGetEventDynamic", monitorDecodeError(status));
115
116 // if no new event
117 if (!ptr) {
118 gSystem->Sleep(1000); // sleep for 1 second
119 continue;
120 }
121
122#ifdef ALI_HLT
04b48a95 123 AliRawReaderDate rawReader(ptr);
124 if ((rawReader.GetAttributes()[0] & 0x02) != 0) {
125
126 // run the HLT tracker
127 AliLevel3* hlt = new AliLevel3((Char_t*)ptr);
128 hlt->Init("./", AliLevel3::kDate, 1);
b5279783 129
04b48a95 130 hlt->SetClusterFinderParam(-1, -1, kTRUE);
b5279783 131
04b48a95 132 Int_t phiSegments = 50;
133 Int_t etaSegments = 100;
134 Int_t trackletlength = 3;
135 Int_t tracklength = 20;//40 or 5
136 Int_t rowscopetracklet = 2;
137 Int_t rowscopetrack = 10;
138 Double_t minPtFit = 0;
139 Double_t maxangle = 0.1745;
140 Double_t goodDist = 5;
141 Double_t maxphi = 0.1;
142 Double_t maxeta = 0.1;
143 Double_t hitChi2Cut = 15;//100 or 15
144 Double_t goodHitChi2 = 5;//20 or 5
145 Double_t trackChi2Cut = 10;//50 or 10
146 hlt->SetTrackerParam(phiSegments, etaSegments,
147 trackletlength, tracklength,
148 rowscopetracklet, rowscopetrack,
149 minPtFit, maxangle, goodDist, hitChi2Cut,
150 goodHitChi2, trackChi2Cut, 50, maxphi, maxeta,
151 kTRUE);
b5279783 152
04b48a95 153 gSystem->Exec("rm -rf hlt");
154 gSystem->MakeDirectory("hlt");
155 hlt->WriteFiles("./hlt/");
156 hlt->ProcessEvent(0, 35, 0);
157
158 time.Set();
159 if (file) fprintf(file, "%s\n", time.AsString());
160 if (file) fprintf(file, "run: %d event: %d %d\n",
161 rawReader.GetRunNumber(),
162 rawReader.GetEventId()[0], rawReader.GetEventId()[1]);
163
164 AliL3MemHandler memHandler;
165 if (!memHandler.SetBinaryInput("hlt/tracks_0.raw")) {
166 if (file) fprintf(file, "no HLT tracks\n");
167 continue;
168 }
169 AliL3TrackArray* tracks = new AliL3TrackArray;
170 memHandler.Binary2TrackArray(tracks);
171 if (file) fprintf(file, "HLT found %d tracks\n", tracks->GetNTracks());
172 delete tracks;
173 memHandler.CloseBinaryInput();
174
175 hlt->DoBench("hlt");
176 if (file) {
177 FILE* bench = fopen("hlt.dat", "r");
178 while (bench && !feof(bench)) {
179 char buffer[256];
180 if (!fgets(buffer, 256, bench)) break;
181 fprintf(file, "%s", buffer);
182 }
183 fclose(bench);
184 fprintf(file, "\n");
b5279783 185 }
b5279783 186
04b48a95 187 gSystem->Exec("rm -rf hlt");
188 delete hlt;
189 }
b5279783 190
191#else
192 // read run, event, detector, DDL numbers and data size
193 AliRawReaderDate rawReader(ptr);
df0f3179 194 time.Set();
195 printf("\n%s\n", time.AsString());
b5279783 196 printf("run: %d event: %d %d\n", rawReader.GetRunNumber(),
197 rawReader.GetEventId()[0], rawReader.GetEventId()[1]);
198 while (rawReader.ReadMiniHeader()) {
199 printf(" detector: %d DDL: %d size: %d\n",
200 rawReader.GetDetectorID(), rawReader.GetDDLID(),
201 rawReader.GetDataSize());
202 }
203
b5279783 204#endif
205
df0f3179 206 gSystem->Sleep(100); // sleep for 0.1 second
b5279783 207 free(ptr);
208
209 gSystem->ProcessEvents();
210 if (file) fflush(file);
211 }
212
213 gSystem->RemoveSignalHandler(handler);
214 if (file) fclose(file);
215
120b3c73 216 return 0;
217}
218
b5279783 219#else
120b3c73 220int main(int /*argc*/, char** /*argv*/)
221{
b5279783 222 ::Fatal("main", "this program was compiled without DATE");
b5279783 223
120b3c73 224 return 1;
b5279783 225}
120b3c73 226#endif