]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TPC/TPCCEda.cxx
698616df3f61653d132332dcafb1cddaa31ff7ea
[u/mrichter/AliRoot.git] / TPC / TPCCEda.cxx
1 /*
2 TPC DA for online calibration
3
4 Contact: Haavard.Helstrup@cern.ch
5 Link: 
6 Run Type: PHYSICS_RUN STANDALONE DAQ
7 DA Type: MON
8 Number of events needed: 500
9 Input Files: 
10 Output Files: tpcCE.root, to be exported to the DAQ FXS
11 Trigger types used: PHYSICS_EVENT
12
13 */
14
15 /*
16
17 TPCCEda.cxx - calibration algorithm for TPC Central Electrode events
18
19 10/06/2007  sylvain.chapeland@cern.ch :  first version - clean skeleton based on DAQ DA case1
20 06/12/2007  haavard.helstrup@cern.ch  :  created CE DA based on pulser code
21
22 contact: marian.ivanov@cern.ch
23
24
25 This process reads RAW data from the files provided as command line arguments
26 and save results in a file (named from RESULT_FILE define - see below).
27
28 */
29
30 #define RESULT_FILE "tpcCE.root"
31 #define MAPPING_FILE "tpcMapping.root"
32
33
34 #include <daqDA.h>
35 #include "event.h"
36 #include "monitor.h"
37 #include <stdio.h>
38 #include <stdlib.h>
39
40 //
41 //Root includes
42 //
43 #include <TFile.h>
44 #include "TROOT.h"
45 #include "TPluginManager.h"
46 //
47 //AliRoot includes
48 //
49 #include "AliRawReader.h"
50 #include "AliRawReaderDate.h"
51 #include "AliTPCmapper.h"
52 #include "AliTPCRawStream.h"
53 #include "AliTPCROC.h"
54 #include "AliTPCCalROC.h"
55 #include "AliTPCCalPad.h"
56 #include "AliMathBase.h"
57 #include "TTreeStream.h"
58
59 //
60 // TPC calibration algorithm includes
61 //
62 #include "AliTPCCalibCE.h"
63
64
65
66
67 /* Main routine
68       Arguments: list of DATE raw data files
69 */
70 int main(int argc, char **argv) {
71
72  gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
73                                          "*",
74                                          "TStreamerInfo",
75                                          "RIO",
76                                          "TStreamerInfo()");
77
78
79   int i,status;
80
81   /* copy locally the mapping file from daq detector config db */
82   status = daqDA_DB_getFile(MAPPING_FILE,"./tpcMapping.root");
83   if (status) {
84     printf("Failed to get mapping file (%s) from DAQdetDB, status=%d\n", MAPPING_FILE, status);
85     printf("Continue anyway ... maybe it works?\n");              // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
86     //return -1;   // temporarily uncommented for testing on pcald47 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
87   }
88
89   /* open the mapping file and retrieve mapping object */
90   AliTPCmapper *mapping = 0;   // The TPC mapping
91   TFile *fileMapping = new TFile(MAPPING_FILE, "read");
92   mapping = (AliTPCmapper*) fileMapping->Get("tpcMapping");
93   if (mapping == 0) {
94     printf("Failed to get mapping object from %s. Exiting ...\n", MAPPING_FILE);
95     delete fileMapping;
96     return -1;
97   } else {
98     printf("Got mapping object from %s\n", MAPPING_FILE);
99   }
100
101
102   AliTPCCalibCE calibCE;   // pedestal and noise calibration
103
104   if (argc<2) {
105     printf("Wrong number of arguments\n");
106     return -1;
107   }
108
109
110   /* log start of process */
111   printf("TPC CE DA started - %s\n",__FILE__);
112
113
114   /* set time bin range */
115   calibCE.SetRangeTime(800,940);
116   calibCE.SetAltroMapping(mapping->GetAltroMapping()); // Use altro mapping we got from daqDetDb
117
118   /* declare monitoring program */
119   status=monitorDeclareMp( __FILE__ );
120   if (status!=0) {
121     printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
122     return -1;
123   }
124
125
126   /* loop over RAW data files */
127   int nevents=0;
128   for(i=1;i<argc;i++) {
129
130     /* define data source : this is argument i */
131     printf("Processing file %s\n", argv[i]);
132     status=monitorSetDataSource( argv[i] );
133     if (status!=0) {
134       printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
135       return -1;
136     }
137
138     /* read until EOF */
139     while (true) {
140       struct eventHeaderStruct *event;
141
142       /* check shutdown condition */
143       if (daqDA_checkShutdown()) {break;}
144
145       /* get next event (blocking call until timeout) */
146       status=monitorGetEventDynamic((void **)&event);
147       if (status==MON_ERR_EOF) {
148         printf ("End of File %d detected\n",i);
149         break; /* end of monitoring file has been reached */
150       }
151
152       if (status!=0) {
153         printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
154         break;
155       }
156
157       /* retry if got no event */
158       if (event==NULL) {
159         continue;
160       }
161       nevents++;
162
163       //  Pulser calibration
164
165       AliRawReader *rawReader = new AliRawReaderDate((void*)event);
166       calibCE.ProcessEvent(rawReader);
167       delete rawReader;
168
169       /* free resources */
170       free(event);
171     }
172   }
173
174   calibCE.Analyse(); 
175   printf ("%d events processed\n",nevents);
176
177   TFile * fileTPC = new TFile (RESULT_FILE,"recreate");
178   calibCE.Write("calibCE");
179   delete fileTPC;
180   printf("Wrote %s\n",RESULT_FILE);
181
182   /* store the result file on FES */
183
184   status=daqDA_FES_storeFile(RESULT_FILE,RESULT_FILE);
185   if (status) {
186     status = -2;
187   }
188
189   return status;
190 }