]>
Commit | Line | Data |
---|---|---|
170c35f1 | 1 | /* |
2 | ||
b770893d | 3 | - "Contact: r.bailhache@gsi.de" |
4 | - "Link: http://www-linux.gsi.de/~bailhach/VDRIFT/raw.root.date" | |
5 | - "Run Type: nothing special in ECS, physics run" | |
6 | - "DA Type: MON" | |
7 | - "Number of events needed: as many as possible" | |
8 | - "Input Files: no config files, no previous result files, RAW DATA file with all the TRD ([DDL = 1024 to DDL = 1041])" | |
9 | - "Output Files: trdCalibrationv.root, trdCalibrationv.root, no persitent file over runs" | |
10 | - "Trigger types used: PHYSICS" | |
170c35f1 | 11 | |
12 | */ | |
13 | ||
6ace5fe2 | 14 | #define RESULT_FILE "trdCalibrationv.root" |
15 | ||
16 | ||
170c35f1 | 17 | extern "C" { |
18 | #include <daqDA.h> | |
19 | } | |
20 | ||
21 | #include "event.h" | |
22 | #include "monitor.h" | |
23 | #include <stdio.h> | |
24 | #include <stdlib.h> | |
25 | ||
26 | ||
27 | // | |
28 | //Root includes | |
29 | // | |
30 | #include <TObjArray.h> | |
31 | #include <TString.h> | |
32 | #include <TVectorF.h> | |
33 | #include <TROOT.h> | |
34 | #include <TDirectory.h> | |
35 | #include <TSystem.h> | |
36 | #include <TFile.h> | |
37 | // | |
38 | //AliRoot includes | |
39 | // | |
40 | #include "AliRawReader.h" | |
41 | #include "AliRawReaderDate.h" | |
289cc637 | 42 | #include "AliTRDRawStreamV2.h" |
170c35f1 | 43 | #include "AliCDBManager.h" |
44 | ||
45 | // | |
46 | // TRD calibration algorithm includes | |
47 | // | |
170c35f1 | 48 | #include "AliTRDCalibraFillHisto.h" |
49 | ||
50 | ||
51 | ||
52 | ||
53 | /* Main routine | |
54 | Arguments: | |
55 | 1- monitoring data source | |
56 | */ | |
57 | int main(int argc, char **argv) { | |
58 | ||
59 | int status; | |
60 | ||
61 | if (argc!=2) { | |
62 | printf("Wrong number of arguments\n"); | |
63 | return -1; | |
64 | } | |
65 | ||
66 | ||
67 | /* define data source : this is argument 1 */ | |
68 | status=monitorSetDataSource( argv[1] ); | |
69 | if (status!=0) { | |
70 | printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status)); | |
71 | return -1; | |
72 | } | |
73 | ||
74 | ||
75 | /* declare monitoring program */ | |
76 | status=monitorDeclareMp( __FILE__ ); | |
77 | if (status!=0) { | |
78 | printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status)); | |
79 | return -1; | |
80 | } | |
81 | ||
82 | ||
83 | /* define wait event timeout - 1s max */ | |
84 | monitorSetNowait(); | |
85 | monitorSetNoWaitNetworkTimeout(1000); | |
86 | ||
87 | ||
88 | /* log start of process */ | |
6ace5fe2 | 89 | printf("TRD DA VDRIFT started\n"); |
170c35f1 | 90 | |
91 | ||
92 | /* init some counters */ | |
93 | int nevents_physics=0; | |
94 | int nevents_total=0; | |
95 | ||
289cc637 | 96 | //Instance of AliCDBManager: needed by AliTRDRawStreamV2 |
170c35f1 | 97 | AliCDBManager *man = AliCDBManager::Instance(); |
98 | man->SetDefaultStorage("local://$ALICE_ROOT"); | |
99 | man->SetRun(0); | |
100 | //Instance of AliTRDCalibraFillHisto | |
101 | AliTRDCalibraFillHisto *calibra = AliTRDCalibraFillHisto::Instance(); | |
170c35f1 | 102 | // everythings are okey for vdrift |
3a0f6479 | 103 | Bool_t passvdrift = kTRUE; // if timebin okey |
104 | Int_t nbvdrift = 0; // number of events with entries for vdrift | |
170c35f1 | 105 | |
106 | ||
107 | /* main loop (infinite) */ | |
108 | for(;;) { | |
109 | //for(Int_t k = 0; k < 20; k++) { | |
110 | struct eventHeaderStruct *event; | |
111 | eventTypeType eventT; | |
6ace5fe2 | 112 | |
170c35f1 | 113 | /* check shutdown condition */ |
114 | if (daqDA_checkShutdown()) {break;} | |
115 | ||
116 | /* get next event (blocking call until timeout) */ | |
117 | status=monitorGetEventDynamic((void **)&event); | |
118 | if (status==MON_ERR_EOF) { | |
119 | printf ("End of File detected\n"); | |
120 | break; /* end of monitoring file has been reached */ | |
121 | } | |
122 | ||
123 | if (status!=0) { | |
124 | printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status)); | |
125 | break; | |
126 | } | |
127 | ||
128 | /* retry if got no event */ | |
129 | if (event==NULL) { | |
130 | continue; | |
131 | } | |
132 | ||
6ace5fe2 | 133 | if( ((Int_t)nevents_total)%100 == 0 ) printf(" event number %d (physic event number %d) will be processed\n",(Int_t) nevents_total,(Int_t) nevents_physics); |
170c35f1 | 134 | |
135 | ||
136 | /* use event - here, just write event id to result file */ | |
137 | eventT=event->eventType; | |
6ace5fe2 | 138 | |
170c35f1 | 139 | // |
140 | // vdrift calibration: run only for physics events | |
141 | // | |
6ace5fe2 | 142 | if ((eventT==PHYSICS_EVENT) && (passvdrift)) { |
170c35f1 | 143 | //if (eventT==PHYSICS_EVENT) { |
170c35f1 | 144 | AliRawReader *rawReader = new AliRawReaderDate((void*)event); |
289cc637 | 145 | AliTRDRawStreamV2 *trdRawStream = new AliTRDRawStreamV2((AliRawReader *) rawReader); |
3a0f6479 | 146 | Int_t result = calibra->ProcessEventDAQ(trdRawStream,(Bool_t)nevents_physics); |
147 | if(!result) passvdrift = kFALSE; | |
148 | else nbvdrift += (Int_t) result/2; | |
5750af0a | 149 | |
150 | ||
170c35f1 | 151 | delete trdRawStream; |
152 | delete rawReader; | |
153 | } | |
154 | ||
5750af0a | 155 | if(eventT==PHYSICS_EVENT){ |
156 | ||
157 | nevents_physics++; | |
158 | ||
159 | } | |
170c35f1 | 160 | |
161 | nevents_total++; | |
162 | ||
163 | ||
164 | /* free resources */ | |
165 | free(event); | |
166 | ||
167 | /* exit when last event received, no need to wait for TERM signal */ | |
168 | if (eventT==END_OF_RUN) { | |
169 | printf("EOR event detected\n"); | |
170 | break; | |
171 | } | |
172 | } | |
173 | ||
6ace5fe2 | 174 | |
175 | /* report progress */ | |
176 | printf("%d events processed and %d used\n",nevents_total,nbvdrift); | |
177 | ||
170c35f1 | 178 | // |
179 | // Write a local file and put it on the FX | |
180 | // | |
6ace5fe2 | 181 | TFile *fileTRD = new TFile(RESULT_FILE,"recreate"); |
182 | ||
3a0f6479 | 183 | if((nbvdrift > 0) && passvdrift){ |
6ace5fe2 | 184 | //Double_t *stat = calibra->StatH((TH2 *)(calibra->GetPH2d()),1); |
185 | //if((stat[6] < 0.20) && (stat[5] > 3000.0)) { | |
186 | // write the histogram in any case to see if problems | |
187 | calibra->GetPH2d()->Write(); | |
188 | //} | |
170c35f1 | 189 | } |
190 | fileTRD->Close(); | |
191 | status=0; | |
6ace5fe2 | 192 | // Export the file in any case to see if problems |
193 | if(daqDA_FES_storeFile(RESULT_FILE,RESULT_FILE)) status = -2; | |
194 | ||
170c35f1 | 195 | delete fileTRD; |
196 | ||
197 | return status; | |
198 | } |