]>
Commit | Line | Data |
---|---|---|
d1ff7c16 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-2007, 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 | ||
6253e09b | 18 | /// |
19 | /// @file AliHLTMUONAgent.cxx | |
20 | /// @author Artur Szostak <artursz@iafrica.com> | |
887a669c | 21 | /// @date 28 May 2007 |
6253e09b | 22 | /// @brief Implementation of the AliHLTMUONAgent class. |
23 | /// | |
d1ff7c16 | 24 | |
25 | #include "AliHLTMUONAgent.h" | |
887a669c | 26 | #include "AliHLTMUONConstants.h" |
6253e09b | 27 | #include "AliHLTMUONRecHitsSource.h" |
28 | #include "AliHLTMUONTriggerRecordsSource.h" | |
887a669c | 29 | #include "AliHLTMUONDigitPublisherComponent.h" |
6253e09b | 30 | #include "AliHLTMUONRootifierComponent.h" |
31 | #include "AliHLTMUONHitReconstructorComponent.h" | |
32 | #include "AliHLTMUONTriggerReconstructorComponent.h" | |
33 | #include "AliHLTMUONMansoTrackerFSMComponent.h" | |
c9537879 | 34 | #include "AliHLTMUONDecisionComponent.h" |
0528e93a | 35 | #include "AliHLTMUONEmptyEventFilterComponent.h" |
dba14d7d | 36 | #include "AliHLTMUONDataCheckerComponent.h" |
352670bf | 37 | #include "AliRawReader.h" |
d1ff7c16 | 38 | #include "AliRunLoader.h" |
887a669c | 39 | #include "TSystem.h" |
40 | #include "TString.h" | |
d1ff7c16 | 41 | |
6253e09b | 42 | // The single global instance of the dimuon HLT agent. |
43 | AliHLTMUONAgent AliHLTMUONAgent::fgkInstance; | |
d1ff7c16 | 44 | |
45 | ClassImp(AliHLTMUONAgent); | |
46 | ||
47 | ||
626bfcc1 | 48 | AliHLTMUONAgent::AliHLTMUONAgent() : AliHLTModuleAgent("MUON") |
d1ff7c16 | 49 | { |
6253e09b | 50 | /// |
51 | /// Default constructor. | |
52 | /// | |
d1ff7c16 | 53 | } |
54 | ||
55 | AliHLTMUONAgent::~AliHLTMUONAgent() | |
56 | { | |
6253e09b | 57 | /// |
58 | /// Default destructor. | |
59 | /// | |
d1ff7c16 | 60 | } |
61 | ||
887a669c | 62 | const char* AliHLTMUONAgent::GetReconstructionChains(AliRawReader* rawReader, |
63 | AliRunLoader* runloader | |
d1ff7c16 | 64 | ) const |
65 | { | |
6253e09b | 66 | /// |
67 | /// Inherited from AliHLTModuleAgent. | |
68 | /// Returns the top processing chain configurations for local event | |
69 | /// reconstruction. | |
70 | /// @param rawReader [in] AliRoot rawreader instance. | |
71 | /// @param runloader [in] AliRoot runloader | |
72 | /// @return string containing the top configurations separated by blanks. | |
73 | /// | |
887a669c | 74 | /// If rawReader is not NULL then the standard dHLT chain is run taking |
75 | /// data from raw DDL data. Otherwise runloader is checked and if it is | |
76 | /// not NULL then a dHLT chain is run with input data from digits. | |
6253e09b | 77 | |
887a669c | 78 | if (rawReader != NULL) |
79 | { | |
352670bf | 80 | // Check if there is any data from the tracker and trigger. |
81 | bool dataFromTracker = false; | |
82 | bool dataFromTrigger = false; | |
83 | rawReader->Select("MUONTRK", 0, 19); | |
84 | for (Int_t i = 0; i < 20; i++) | |
85 | { | |
86 | if (rawReader->ReadHeader()) dataFromTracker = true; | |
87 | } | |
88 | rawReader->Select("MUONTRG", 0, 1); | |
89 | for (Int_t i = 0; i < 2; i++) | |
90 | { | |
91 | if (rawReader->ReadHeader()) dataFromTrigger = true; | |
92 | } | |
93 | rawReader->RewindEvents(); | |
94 | ||
95 | // If raw data was found for our detector then select the | |
96 | // appropriate chain. | |
97 | if (dataFromTracker and dataFromTrigger) | |
98 | return "dHLT-sim-fromRaw"; | |
887a669c | 99 | } |
352670bf | 100 | |
101 | if (runloader != NULL) | |
887a669c | 102 | { |
352670bf | 103 | if (runloader->GetLoader("MUONLoader") != NULL) |
104 | return "dHLT-sim"; | |
887a669c | 105 | } |
352670bf | 106 | |
107 | return ""; | |
d1ff7c16 | 108 | } |
109 | ||
110 | const char* AliHLTMUONAgent::GetRequiredComponentLibraries() const | |
111 | { | |
6253e09b | 112 | /// |
113 | /// Inherited from AliHLTModuleAgent. | |
114 | /// Returns a list of libraries which the configurations registered by | |
115 | /// this module agent depend on. | |
116 | /// @return list of component libraries as a blank-separated string. | |
117 | /// | |
118 | ||
887a669c | 119 | // List of libraries that we depend on. |
120 | static const char* libs[] = | |
121 | { | |
122 | "libCore.so", | |
123 | "libCint.so", | |
124 | "libGraf.so", | |
125 | "libRIO.so", | |
126 | "libNet.so", | |
127 | "libHist.so", | |
128 | "libMatrix.so", | |
129 | "libMathCore.so", | |
130 | "libMinuit.so", | |
131 | "libTree.so", | |
132 | "libGraf3d.so", | |
133 | "libGpad.so", | |
134 | "libPhysics.so", | |
135 | "libGui.so", | |
136 | "libProofPlayer.so", | |
137 | "libProof.so", | |
138 | "libThread.so", | |
139 | "libGeom.so", | |
887a669c | 140 | "libEG.so", |
141 | "libTreePlayer.so", | |
142 | "libXMLIO.so", | |
143 | "libVMC.so", | |
144 | "libESD.so", | |
145 | "libCDB.so", | |
146 | "libSTEERBase.so", | |
147 | "libSTEER.so", | |
148 | "libGui.so", | |
149 | "libRAWDatasim.so", | |
150 | "libRAWDatarec.so", | |
151 | "libRAWDatabase.so", | |
152 | "libMUONcore.so", | |
153 | "libMUONraw.so", | |
154 | "libMUONbase.so", | |
155 | "libMUONgeometry.so", | |
156 | "libMUONmapping.so", | |
157 | "libMUONcalib.so", | |
158 | "libMUONsim.so", | |
159 | "libMUONtrigger.so", | |
160 | "libMUONevaluation.so", | |
161 | "libMUONrec.so", | |
162 | "libHLTbase.so", | |
163 | "libAliHLTUtil.so", | |
164 | NULL | |
165 | }; | |
166 | ||
167 | // First check if the library is not already loaded. If it is then we have | |
168 | // no reason to declare it as needed, so that we do not load it again. | |
169 | static TString result; | |
170 | for (const char** lib = libs; *lib != NULL; lib++) | |
171 | { | |
172 | const char* list = gSystem->GetLibraries(*lib, "", kFALSE); | |
173 | if (list == NULL) continue; | |
174 | // Check if not found, i.e. result was an empty string. | |
175 | // If so then add the library to the required list. | |
176 | if (list[0] == '\0') | |
177 | { | |
178 | result += *lib; | |
179 | result += " "; | |
180 | } | |
181 | } | |
182 | return result.Data(); | |
d1ff7c16 | 183 | } |
184 | ||
185 | ||
186 | int AliHLTMUONAgent::CreateConfigurations( | |
187 | AliHLTConfigurationHandler* handler, | |
887a669c | 188 | AliRawReader* rawReader, |
189 | AliRunLoader* runloader | |
d1ff7c16 | 190 | ) const |
191 | { | |
6253e09b | 192 | /// Register all processing configurations belonging to the dimuon HLT |
193 | /// library with the AliHLTConfigurationHandler. | |
194 | /// @param handler the configuration handler | |
195 | /// @param rawReader [in] AliRoot rawreader instance. | |
196 | /// @param runloader AliRoot runloader | |
197 | /// @return Zero on success and error code if failed. | |
198 | /// | |
887a669c | 199 | /// Chains available: |
200 | /// dHLT-sim - standard dHLT simulation chain. | |
201 | /// dHLT-sim-fromRaw - standard dHLT chain taking raw DDL data as input. | |
202 | /// dHLT-sim-fromMC - dHLT chain taking Monte Carlo hit data as input. | |
203 | /// So hit reconstruction is not checked, just the tracker. | |
6253e09b | 204 | |
d1ff7c16 | 205 | if (handler == NULL) return 0; |
887a669c | 206 | |
207 | const char* trackerId = AliHLTMUONConstants::MansoTrackerFSMId(); | |
208 | const char* decCompId = AliHLTMUONConstants::DecisionComponentId(); | |
209 | ||
210 | if (rawReader != NULL) | |
211 | { | |
212 | // Implement the dHLT-sim-fromRaw dHLT simulation chain reading | |
213 | // from raw data. | |
214 | const char* rawPubComp = "AliRawReaderPublisher"; | |
215 | const char* cmd13 = "-minid 2572 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x001000"; | |
216 | const char* cmd14 = "-minid 2573 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x002000"; | |
217 | const char* cmd15 = "-minid 2574 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x004000"; | |
218 | const char* cmd16 = "-minid 2575 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x008000"; | |
219 | const char* cmd17 = "-minid 2576 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x010000"; | |
220 | const char* cmd18 = "-minid 2577 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x020000"; | |
221 | const char* cmd19 = "-minid 2578 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x040000"; | |
222 | const char* cmd20 = "-minid 2579 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x080000"; | |
223 | const char* cmd21 = "-minid 2816 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x100000"; | |
224 | const char* cmd22 = "-minid 2817 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x200000"; | |
225 | handler->CreateConfiguration("RawDDL13", rawPubComp, NULL, cmd13); | |
226 | handler->CreateConfiguration("RawDDL14", rawPubComp, NULL, cmd14); | |
227 | handler->CreateConfiguration("RawDDL15", rawPubComp, NULL, cmd15); | |
228 | handler->CreateConfiguration("RawDDL16", rawPubComp, NULL, cmd16); | |
229 | handler->CreateConfiguration("RawDDL17", rawPubComp, NULL, cmd17); | |
230 | handler->CreateConfiguration("RawDDL18", rawPubComp, NULL, cmd18); | |
231 | handler->CreateConfiguration("RawDDL19", rawPubComp, NULL, cmd19); | |
232 | handler->CreateConfiguration("RawDDL20", rawPubComp, NULL, cmd20); | |
233 | handler->CreateConfiguration("RawDDL21", rawPubComp, NULL, cmd21); | |
234 | handler->CreateConfiguration("RawDDL22", rawPubComp, NULL, cmd22); | |
235 | const char* hrId = AliHLTMUONConstants::HitReconstructorId(); | |
236 | const char* trId = AliHLTMUONConstants::TriggerReconstructorId(); | |
237 | handler->CreateConfiguration("RecoRawDDL13", hrId, "RawDDL13", "-ddl 13 -cdb"); | |
238 | handler->CreateConfiguration("RecoRawDDL14", hrId, "RawDDL14", "-ddl 14 -cdb"); | |
239 | handler->CreateConfiguration("RecoRawDDL15", hrId, "RawDDL15", "-ddl 15 -cdb"); | |
240 | handler->CreateConfiguration("RecoRawDDL16", hrId, "RawDDL16", "-ddl 16 -cdb"); | |
241 | handler->CreateConfiguration("RecoRawDDL17", hrId, "RawDDL17", "-ddl 17 -cdb"); | |
242 | handler->CreateConfiguration("RecoRawDDL18", hrId, "RawDDL18", "-ddl 18 -cdb"); | |
243 | handler->CreateConfiguration("RecoRawDDL19", hrId, "RawDDL19", "-ddl 19 -cdb"); | |
244 | handler->CreateConfiguration("RecoRawDDL20", hrId, "RawDDL20", "-ddl 20 -cdb"); | |
245 | handler->CreateConfiguration("RecoRawDDL21", trId, "RawDDL21", "-ddl 21 -cdb -suppress_partial_triggers"); | |
246 | handler->CreateConfiguration("RecoRawDDL22", trId, "RawDDL22", "-ddl 22 -cdb -suppress_partial_triggers"); | |
247 | ||
248 | const char* recoSrcs = "RecoRawDDL13 RecoRawDDL14 RecoRawDDL15 RecoRawDDL16 RecoRawDDL17" | |
249 | " RecoRawDDL18 RecoRawDDL19 RecoRawDDL20 RecoRawDDL21 RecoRawDDL22"; | |
250 | handler->CreateConfiguration("MansoTrackerForRaw", trackerId, recoSrcs, ""); | |
251 | ||
252 | handler->CreateConfiguration("dHLT-sim-fromRaw", decCompId, "MansoTrackerForRaw", ""); | |
253 | } | |
254 | ||
255 | if (runloader != NULL) | |
256 | { | |
257 | // Implement the dHLT-sim dHLT simulation chain reading from | |
258 | // simulated digits. | |
259 | const char* digitPub = AliHLTMUONConstants::DigitPublisherId(); | |
260 | handler->CreateConfiguration("DigitDDL13", digitPub, NULL, "-simdata -ddl 13"); | |
261 | handler->CreateConfiguration("DigitDDL14", digitPub, NULL, "-simdata -ddl 14"); | |
262 | handler->CreateConfiguration("DigitDDL15", digitPub, NULL, "-simdata -ddl 15"); | |
263 | handler->CreateConfiguration("DigitDDL16", digitPub, NULL, "-simdata -ddl 16"); | |
264 | handler->CreateConfiguration("DigitDDL17", digitPub, NULL, "-simdata -ddl 17"); | |
265 | handler->CreateConfiguration("DigitDDL18", digitPub, NULL, "-simdata -ddl 18"); | |
266 | handler->CreateConfiguration("DigitDDL19", digitPub, NULL, "-simdata -ddl 19"); | |
267 | handler->CreateConfiguration("DigitDDL20", digitPub, NULL, "-simdata -ddl 20"); | |
268 | handler->CreateConfiguration("DigitDDL21", digitPub, NULL, "-simdata -ddl 21"); | |
269 | handler->CreateConfiguration("DigitDDL22", digitPub, NULL, "-simdata -ddl 22"); | |
270 | const char* hrId = AliHLTMUONConstants::HitReconstructorId(); | |
271 | const char* trId = AliHLTMUONConstants::TriggerReconstructorId(); | |
272 | handler->CreateConfiguration("RecoDDL13", hrId, "DigitDDL13", "-ddl 13 -cdb"); | |
273 | handler->CreateConfiguration("RecoDDL14", hrId, "DigitDDL14", "-ddl 14 -cdb"); | |
274 | handler->CreateConfiguration("RecoDDL15", hrId, "DigitDDL15", "-ddl 15 -cdb"); | |
275 | handler->CreateConfiguration("RecoDDL16", hrId, "DigitDDL16", "-ddl 16 -cdb"); | |
276 | handler->CreateConfiguration("RecoDDL17", hrId, "DigitDDL17", "-ddl 17 -cdb"); | |
277 | handler->CreateConfiguration("RecoDDL18", hrId, "DigitDDL18", "-ddl 18 -cdb"); | |
278 | handler->CreateConfiguration("RecoDDL19", hrId, "DigitDDL19", "-ddl 19 -cdb"); | |
279 | handler->CreateConfiguration("RecoDDL20", hrId, "DigitDDL20", "-ddl 20 -cdb"); | |
280 | handler->CreateConfiguration("RecoDDL21", trId, "DigitDDL21", "-ddl 21 -cdb -suppress_partial_triggers"); | |
281 | handler->CreateConfiguration("RecoDDL22", trId, "DigitDDL22", "-ddl 22 -cdb -suppress_partial_triggers"); | |
282 | ||
283 | const char* recoSrcs = "RecoDDL13 RecoDDL14 RecoDDL15 RecoDDL16 RecoDDL17" | |
284 | " RecoDDL18 RecoDDL19 RecoDDL20 RecoDDL21 RecoDDL22"; | |
285 | handler->CreateConfiguration("MansoTracker", trackerId, recoSrcs, ""); | |
286 | ||
287 | handler->CreateConfiguration("dHLT-sim", decCompId, "MansoTracker", ""); | |
288 | ||
289 | // Implement the dHLT-sim-fromMC dHLT simulation chain reading | |
290 | // Monte Carlo geant hits and putting those into a tracker component. | |
291 | const char* rhsId = AliHLTMUONConstants::RecHitsSourceId(); | |
292 | const char* trsId = AliHLTMUONConstants::TriggerRecordsSourceId(); | |
293 | handler->CreateConfiguration("HitsDDL13", rhsId, NULL, "-simdata -plane left -chamber 7"); | |
294 | handler->CreateConfiguration("HitsDDL14", rhsId, NULL, "-simdata -plane right -chamber 7"); | |
295 | handler->CreateConfiguration("HitsDDL15", rhsId, NULL, "-simdata -plane left -chamber 8"); | |
296 | handler->CreateConfiguration("HitsDDL16", rhsId, NULL, "-simdata -plane right -chamber 8"); | |
297 | handler->CreateConfiguration("HitsDDL17", rhsId, NULL, "-simdata -plane left -chamber 9"); | |
298 | handler->CreateConfiguration("HitsDDL18", rhsId, NULL, "-simdata -plane right -chamber 9"); | |
299 | handler->CreateConfiguration("HitsDDL19", rhsId, NULL, "-simdata -plane left -chamber 10"); | |
300 | handler->CreateConfiguration("HitsDDL20", rhsId, NULL, "-simdata -plane right -chamber 10"); | |
301 | handler->CreateConfiguration("TrigRecsDDL21", trsId, NULL, "-hitdata -plane left"); | |
302 | handler->CreateConfiguration("TrigRecsDDL22", trsId, NULL, "-hitdata -plane right"); | |
303 | ||
304 | const char* dataSrcs = "HitsDDL13 HitsDDL14 HitsDDL15 HitsDDL16 HitsDDL17" | |
305 | " HitsDDL18 HitsDDL19 HitsDDL20 TrigRecsDDL21 TrigRecsDDL22"; | |
306 | handler->CreateConfiguration("MansoTrackerForMC", trackerId, dataSrcs, ""); | |
307 | ||
308 | handler->CreateConfiguration("dHLT-sim-fromMC", decCompId, "MansoTrackerForMC", ""); | |
309 | } | |
310 | ||
d1ff7c16 | 311 | return 0; |
312 | } | |
6253e09b | 313 | |
314 | ||
315 | int AliHLTMUONAgent::RegisterComponents(AliHLTComponentHandler* pHandler) const | |
316 | { | |
317 | /// | |
318 | /// Registers all available components of this module. | |
319 | /// @param pHandler [in] instance of the component handler. | |
320 | /// | |
321 | ||
322 | if (pHandler == NULL) return -EINVAL; | |
323 | pHandler->AddComponent(new AliHLTMUONRecHitsSource); | |
324 | pHandler->AddComponent(new AliHLTMUONTriggerRecordsSource); | |
887a669c | 325 | pHandler->AddComponent(new AliHLTMUONDigitPublisherComponent); |
6253e09b | 326 | pHandler->AddComponent(new AliHLTMUONRootifierComponent); |
327 | pHandler->AddComponent(new AliHLTMUONHitReconstructorComponent); | |
328 | pHandler->AddComponent(new AliHLTMUONTriggerReconstructorComponent); | |
329 | pHandler->AddComponent(new AliHLTMUONMansoTrackerFSMComponent); | |
c9537879 | 330 | pHandler->AddComponent(new AliHLTMUONDecisionComponent); |
0528e93a | 331 | pHandler->AddComponent(new AliHLTMUONEmptyEventFilterComponent); |
dba14d7d | 332 | pHandler->AddComponent(new AliHLTMUONDataCheckerComponent); |
6253e09b | 333 | return 0; |
334 | } | |
335 |