]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/MUON/OfflineInterface/AliHLTMUONAgent.cxx
updates for running with plugin
[u/mrichter/AliRoot.git] / HLT / MUON / OfflineInterface / AliHLTMUONAgent.cxx
CommitLineData
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
1d8ae082 16// $Id$
d1ff7c16 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"
52c6d8aa 34#include "AliHLTMUONFullTrackerComponent.h"
c9537879 35#include "AliHLTMUONDecisionComponent.h"
649ab027 36#include "AliHLTMUONESDMaker.h"
0528e93a 37#include "AliHLTMUONEmptyEventFilterComponent.h"
dba14d7d 38#include "AliHLTMUONDataCheckerComponent.h"
17d68f2a 39#include "AliHLTMUONClusterFinderComponent.h"
a63da6d6 40#include "AliHLTMUONRawDataHistoComponent.h"
f064ef44 41#include "AliHLTMUONClusterHistoComponent.h"
94135365 42#include "AliHLTOUTHandlerChain.h"
352670bf 43#include "AliRawReader.h"
d1ff7c16 44#include "AliRunLoader.h"
a252a44b 45#include "AliRun.h"
46#include "AliMUON.h"
887a669c 47#include "TSystem.h"
a252a44b 48#include "TObjArray.h"
887a669c 49#include "TString.h"
d1ff7c16 50
6253e09b 51// The single global instance of the dimuon HLT agent.
52AliHLTMUONAgent AliHLTMUONAgent::fgkInstance;
d1ff7c16 53
94135365 54AliHLTOUTHandlerChain AliHLTMUONAgent::fgkESDMakerChain("libAliHLTMUON.so chains=dHLT-make-esd");
55AliHLTOUTHandlerChain AliHLTMUONAgent::fgkRootifyDumpChain("libAliHLTMUON.so chains=dHLT-rootify-and-dump");
a252a44b 56Int_t AliHLTMUONAgent::fgMuonModuleLoaded = 0;
0d716b5f 57bool AliHLTMUONAgent::fgRunRootifyChain = false;
94135365 58
59
d1ff7c16 60ClassImp(AliHLTMUONAgent);
61
62
a252a44b 63bool AliHLTMUONAgent::IsMuonModuleLoaded()
64{
59d9bb69 65 /// Checks to see if the MUON module is loaded or not.
a252a44b 66
67 // If the check was already done then use the cached value.
68 if (fgMuonModuleLoaded > 0) return true;
69 if (fgMuonModuleLoaded < 0) return false;
70
a252a44b 71 if (gAlice != NULL)
72 {
73 // Search for a module in gAlice deriving from AliMUON.
74 TIter next(gAlice->Modules());
75 TObject* mod = NULL;
76 while ((mod = next()) != NULL)
77 {
42d1b43c 78 if (mod->InheritsFrom(AliMUON::Class()))
a252a44b 79 {
80 fgMuonModuleLoaded = 1;
81 return true;
82 }
83 }
84 }
59d9bb69 85
86 fgMuonModuleLoaded = -1;
87 return false;
a252a44b 88}
89
90
626bfcc1 91AliHLTMUONAgent::AliHLTMUONAgent() : AliHLTModuleAgent("MUON")
d1ff7c16 92{
6253e09b 93 ///
94 /// Default constructor.
95 ///
d1ff7c16 96}
97
98AliHLTMUONAgent::~AliHLTMUONAgent()
99{
6253e09b 100 ///
101 /// Default destructor.
102 ///
d1ff7c16 103}
104
887a669c 105const char* AliHLTMUONAgent::GetReconstructionChains(AliRawReader* rawReader,
106 AliRunLoader* runloader
d1ff7c16 107 ) const
108{
6253e09b 109 ///
110 /// Inherited from AliHLTModuleAgent.
111 /// Returns the top processing chain configurations for local event
112 /// reconstruction.
113 /// @param rawReader [in] AliRoot rawreader instance.
114 /// @param runloader [in] AliRoot runloader
115 /// @return string containing the top configurations separated by blanks.
116 ///
887a669c 117 /// If rawReader is not NULL then the standard dHLT chain is run taking
118 /// data from raw DDL data. Otherwise runloader is checked and if it is
119 /// not NULL then a dHLT chain is run with input data from digits.
6253e09b 120
887a669c 121 if (rawReader != NULL)
122 {
352670bf 123 // Check if there is any data from the tracker and trigger.
124 bool dataFromTracker = false;
125 bool dataFromTrigger = false;
126 rawReader->Select("MUONTRK", 0, 19);
127 for (Int_t i = 0; i < 20; i++)
128 {
129 if (rawReader->ReadHeader()) dataFromTracker = true;
130 }
131 rawReader->Select("MUONTRG", 0, 1);
132 for (Int_t i = 0; i < 2; i++)
133 {
134 if (rawReader->ReadHeader()) dataFromTrigger = true;
135 }
a1dcf777 136 rawReader->Reset();
352670bf 137
138 // If raw data was found for our detector then select the
139 // appropriate chain.
140 if (dataFromTracker and dataFromTrigger)
141 return "dHLT-sim-fromRaw";
887a669c 142 }
352670bf 143
144 if (runloader != NULL)
887a669c 145 {
a252a44b 146 // IsMuonModuleLoaded() is used to check if the muon module was loaded
147 // If there is no AliMUON module in the simulation then do not run the
148 // MUON HLT chain.
149 if (IsMuonModuleLoaded() and runloader->GetLoader("MUONLoader") != NULL)
352670bf 150 return "dHLT-sim";
887a669c 151 }
352670bf 152
153 return "";
d1ff7c16 154}
155
156const char* AliHLTMUONAgent::GetRequiredComponentLibraries() const
157{
6253e09b 158 ///
159 /// Inherited from AliHLTModuleAgent.
160 /// Returns a list of libraries which the configurations registered by
161 /// this module agent depend on.
162 /// @return list of component libraries as a blank-separated string.
163 ///
164
887a669c 165 // List of libraries that we depend on.
166 static const char* libs[] =
167 {
168 "libCore.so",
169 "libCint.so",
170 "libGraf.so",
171 "libRIO.so",
172 "libNet.so",
173 "libHist.so",
174 "libMatrix.so",
175 "libMathCore.so",
176 "libMinuit.so",
177 "libTree.so",
178 "libGraf3d.so",
179 "libGpad.so",
180 "libPhysics.so",
181 "libGui.so",
182 "libProofPlayer.so",
183 "libProof.so",
184 "libThread.so",
185 "libGeom.so",
887a669c 186 "libEG.so",
187 "libTreePlayer.so",
188 "libXMLIO.so",
189 "libVMC.so",
190 "libESD.so",
191 "libCDB.so",
192 "libSTEERBase.so",
193 "libSTEER.so",
194 "libGui.so",
195 "libRAWDatasim.so",
196 "libRAWDatarec.so",
197 "libRAWDatabase.so",
198 "libMUONcore.so",
199 "libMUONraw.so",
200 "libMUONbase.so",
201 "libMUONgeometry.so",
202 "libMUONmapping.so",
203 "libMUONcalib.so",
204 "libMUONsim.so",
205 "libMUONtrigger.so",
206 "libMUONevaluation.so",
207 "libMUONrec.so",
208 "libHLTbase.so",
209 "libAliHLTUtil.so",
210 NULL
211 };
212
213 // First check if the library is not already loaded. If it is then we have
214 // no reason to declare it as needed, so that we do not load it again.
215 static TString result;
216 for (const char** lib = libs; *lib != NULL; lib++)
217 {
218 const char* list = gSystem->GetLibraries(*lib, "", kFALSE);
219 if (list == NULL) continue;
220 // Check if not found, i.e. result was an empty string.
221 // If so then add the library to the required list.
222 if (list[0] == '\0')
223 {
224 result += *lib;
225 result += " ";
226 }
227 }
228 return result.Data();
d1ff7c16 229}
230
231
232int AliHLTMUONAgent::CreateConfigurations(
233 AliHLTConfigurationHandler* handler,
887a669c 234 AliRawReader* rawReader,
235 AliRunLoader* runloader
d1ff7c16 236 ) const
237{
6253e09b 238 /// Register all processing configurations belonging to the dimuon HLT
239 /// library with the AliHLTConfigurationHandler.
240 /// @param handler the configuration handler
241 /// @param rawReader [in] AliRoot rawreader instance.
242 /// @param runloader AliRoot runloader
243 /// @return Zero on success and error code if failed.
244 ///
887a669c 245 /// Chains available:
246 /// dHLT-sim - standard dHLT simulation chain.
247 /// dHLT-sim-fromRaw - standard dHLT chain taking raw DDL data as input.
248 /// dHLT-sim-fromMC - dHLT chain taking Monte Carlo hit data as input.
249 /// So hit reconstruction is not checked, just the tracker.
6253e09b 250
d1ff7c16 251 if (handler == NULL) return 0;
887a669c 252
253 const char* trackerId = AliHLTMUONConstants::MansoTrackerFSMId();
52c6d8aa 254 const char* fullTrackerId = AliHLTMUONConstants::FullTrackerId();
887a669c 255 const char* decCompId = AliHLTMUONConstants::DecisionComponentId();
256
257 if (rawReader != NULL)
258 {
259 // Implement the dHLT-sim-fromRaw dHLT simulation chain reading
260 // from raw data.
261 const char* rawPubComp = "AliRawReaderPublisher";
52c6d8aa 262 const char* cmd1 = "-minid 2560 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x000001";
263 const char* cmd2 = "-minid 2561 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x000002";
264 const char* cmd3 = "-minid 2562 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x000004";
265 const char* cmd4 = "-minid 2563 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x000008";
266 const char* cmd5 = "-minid 2564 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x000010";
267 const char* cmd6 = "-minid 2565 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x000020";
268 const char* cmd7 = "-minid 2566 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x000040";
269 const char* cmd8 = "-minid 2567 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x000080";
270 const char* cmd9 = "-minid 2568 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x000100";
271 const char* cmd10 = "-minid 2569 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x000200";
272 const char* cmd11 = "-minid 2570 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x000400";
273 const char* cmd12 = "-minid 2571 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x000800";
887a669c 274 const char* cmd13 = "-minid 2572 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x001000";
275 const char* cmd14 = "-minid 2573 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x002000";
276 const char* cmd15 = "-minid 2574 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x004000";
277 const char* cmd16 = "-minid 2575 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x008000";
278 const char* cmd17 = "-minid 2576 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x010000";
279 const char* cmd18 = "-minid 2577 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x020000";
280 const char* cmd19 = "-minid 2578 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x040000";
281 const char* cmd20 = "-minid 2579 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x080000";
282 const char* cmd21 = "-minid 2816 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x100000";
283 const char* cmd22 = "-minid 2817 -datatype 'DDL_RAW ' 'MUON' -dataspec 0x200000";
52c6d8aa 284 handler->CreateConfiguration("RawDDL1", rawPubComp, NULL, cmd1);
285 handler->CreateConfiguration("RawDDL2", rawPubComp, NULL, cmd2);
286 handler->CreateConfiguration("RawDDL3", rawPubComp, NULL, cmd3);
287 handler->CreateConfiguration("RawDDL4", rawPubComp, NULL, cmd4);
288 handler->CreateConfiguration("RawDDL5", rawPubComp, NULL, cmd5);
289 handler->CreateConfiguration("RawDDL6", rawPubComp, NULL, cmd6);
290 handler->CreateConfiguration("RawDDL7", rawPubComp, NULL, cmd7);
291 handler->CreateConfiguration("RawDDL8", rawPubComp, NULL, cmd8);
292 handler->CreateConfiguration("RawDDL9", rawPubComp, NULL, cmd9);
293 handler->CreateConfiguration("RawDDL10", rawPubComp, NULL, cmd10);
294 handler->CreateConfiguration("RawDDL11", rawPubComp, NULL, cmd11);
295 handler->CreateConfiguration("RawDDL12", rawPubComp, NULL, cmd12);
887a669c 296 handler->CreateConfiguration("RawDDL13", rawPubComp, NULL, cmd13);
297 handler->CreateConfiguration("RawDDL14", rawPubComp, NULL, cmd14);
298 handler->CreateConfiguration("RawDDL15", rawPubComp, NULL, cmd15);
299 handler->CreateConfiguration("RawDDL16", rawPubComp, NULL, cmd16);
300 handler->CreateConfiguration("RawDDL17", rawPubComp, NULL, cmd17);
301 handler->CreateConfiguration("RawDDL18", rawPubComp, NULL, cmd18);
302 handler->CreateConfiguration("RawDDL19", rawPubComp, NULL, cmd19);
303 handler->CreateConfiguration("RawDDL20", rawPubComp, NULL, cmd20);
304 handler->CreateConfiguration("RawDDL21", rawPubComp, NULL, cmd21);
305 handler->CreateConfiguration("RawDDL22", rawPubComp, NULL, cmd22);
306 const char* hrId = AliHLTMUONConstants::HitReconstructorId();
307 const char* trId = AliHLTMUONConstants::TriggerReconstructorId();
52c6d8aa 308 handler->CreateConfiguration("RecoRawDDL1", hrId, "RawDDL1", "-ddl 1 -cdb");
309 handler->CreateConfiguration("RecoRawDDL2", hrId, "RawDDL2", "-ddl 2 -cdb");
310 handler->CreateConfiguration("RecoRawDDL3", hrId, "RawDDL3", "-ddl 3 -cdb");
311 handler->CreateConfiguration("RecoRawDDL4", hrId, "RawDDL4", "-ddl 4 -cdb");
312 handler->CreateConfiguration("RecoRawDDL5", hrId, "RawDDL5", "-ddl 5 -cdb");
313 handler->CreateConfiguration("RecoRawDDL6", hrId, "RawDDL6", "-ddl 6 -cdb");
314 handler->CreateConfiguration("RecoRawDDL7", hrId, "RawDDL7", "-ddl 7 -cdb");
315 handler->CreateConfiguration("RecoRawDDL8", hrId, "RawDDL8", "-ddl 8 -cdb");
316 handler->CreateConfiguration("RecoRawDDL9", hrId, "RawDDL9", "-ddl 9 -cdb");
317 handler->CreateConfiguration("RecoRawDDL10", hrId, "RawDDL10", "-ddl 10 -cdb");
318 handler->CreateConfiguration("RecoRawDDL11", hrId, "RawDDL11", "-ddl 11 -cdb");
319 handler->CreateConfiguration("RecoRawDDL12", hrId, "RawDDL12", "-ddl 12 -cdb");
887a669c 320 handler->CreateConfiguration("RecoRawDDL13", hrId, "RawDDL13", "-ddl 13 -cdb");
321 handler->CreateConfiguration("RecoRawDDL14", hrId, "RawDDL14", "-ddl 14 -cdb");
322 handler->CreateConfiguration("RecoRawDDL15", hrId, "RawDDL15", "-ddl 15 -cdb");
323 handler->CreateConfiguration("RecoRawDDL16", hrId, "RawDDL16", "-ddl 16 -cdb");
324 handler->CreateConfiguration("RecoRawDDL17", hrId, "RawDDL17", "-ddl 17 -cdb");
325 handler->CreateConfiguration("RecoRawDDL18", hrId, "RawDDL18", "-ddl 18 -cdb");
326 handler->CreateConfiguration("RecoRawDDL19", hrId, "RawDDL19", "-ddl 19 -cdb");
327 handler->CreateConfiguration("RecoRawDDL20", hrId, "RawDDL20", "-ddl 20 -cdb");
328 handler->CreateConfiguration("RecoRawDDL21", trId, "RawDDL21", "-ddl 21 -cdb -suppress_partial_triggers");
329 handler->CreateConfiguration("RecoRawDDL22", trId, "RawDDL22", "-ddl 22 -cdb -suppress_partial_triggers");
330
331 const char* recoSrcs = "RecoRawDDL13 RecoRawDDL14 RecoRawDDL15 RecoRawDDL16 RecoRawDDL17"
332 " RecoRawDDL18 RecoRawDDL19 RecoRawDDL20 RecoRawDDL21 RecoRawDDL22";
333 handler->CreateConfiguration("MansoTrackerForRaw", trackerId, recoSrcs, "");
334
147b1df7 335 handler->CreateConfiguration("DecisionForRaw", decCompId, "MansoTrackerForRaw", "");
336
337 TString outputSrcs = "DecisionForRaw MansoTrackerForRaw ";
338 outputSrcs += recoSrcs;
339 handler->CreateConfiguration("dHLT-sim-fromRaw", "BlockFilter", outputSrcs, "");
52c6d8aa 340
341 // For reconstruction using full tracker.
342 const char* recoSrcsFull = " RecoRawDDL1 RecoRawDDL2 RecoRawDDL3 RecoRawDDL4 RecoRawDDL5 RecoRawDDL6 "
343 " RecoRawDDL7 RecoRawDDL8 RecoRawDDL9 RecoRawDDL10 RecoRawDDL11 RecoRawDDL12 "
344 " RecoRawDDL13 RecoRawDDL14 RecoRawDDL15 RecoRawDDL16 RecoRawDDL17 "
345 " RecoRawDDL18 RecoRawDDL19 RecoRawDDL20 RecoRawDDL21 RecoRawDDL22 ";
fd5b812e 346 handler->CreateConfiguration("FullTrackerForRaw", fullTrackerId, recoSrcsFull, "-cdb");
52c6d8aa 347
348 handler->CreateConfiguration("DecisionForRawFullTrk", decCompId, "FullTrackerForRaw", "");
349
fd5b812e 350 TString outputSrcsFull = "DecisionForRawFullTrk FullTrackerForRaw ";
52c6d8aa 351 outputSrcsFull += recoSrcsFull;
352 handler->CreateConfiguration("dHLT-sim-fromRaw-fullTracker", "BlockFilter", outputSrcsFull, "");
887a669c 353 }
354
a252a44b 355 if (IsMuonModuleLoaded() and runloader != NULL)
887a669c 356 {
357 // Implement the dHLT-sim dHLT simulation chain reading from
358 // simulated digits.
359 const char* digitPub = AliHLTMUONConstants::DigitPublisherId();
360 handler->CreateConfiguration("DigitDDL13", digitPub, NULL, "-simdata -ddl 13");
361 handler->CreateConfiguration("DigitDDL14", digitPub, NULL, "-simdata -ddl 14");
362 handler->CreateConfiguration("DigitDDL15", digitPub, NULL, "-simdata -ddl 15");
363 handler->CreateConfiguration("DigitDDL16", digitPub, NULL, "-simdata -ddl 16");
364 handler->CreateConfiguration("DigitDDL17", digitPub, NULL, "-simdata -ddl 17");
365 handler->CreateConfiguration("DigitDDL18", digitPub, NULL, "-simdata -ddl 18");
366 handler->CreateConfiguration("DigitDDL19", digitPub, NULL, "-simdata -ddl 19");
367 handler->CreateConfiguration("DigitDDL20", digitPub, NULL, "-simdata -ddl 20");
368 handler->CreateConfiguration("DigitDDL21", digitPub, NULL, "-simdata -ddl 21");
369 handler->CreateConfiguration("DigitDDL22", digitPub, NULL, "-simdata -ddl 22");
370 const char* hrId = AliHLTMUONConstants::HitReconstructorId();
371 const char* trId = AliHLTMUONConstants::TriggerReconstructorId();
372 handler->CreateConfiguration("RecoDDL13", hrId, "DigitDDL13", "-ddl 13 -cdb");
373 handler->CreateConfiguration("RecoDDL14", hrId, "DigitDDL14", "-ddl 14 -cdb");
374 handler->CreateConfiguration("RecoDDL15", hrId, "DigitDDL15", "-ddl 15 -cdb");
375 handler->CreateConfiguration("RecoDDL16", hrId, "DigitDDL16", "-ddl 16 -cdb");
376 handler->CreateConfiguration("RecoDDL17", hrId, "DigitDDL17", "-ddl 17 -cdb");
377 handler->CreateConfiguration("RecoDDL18", hrId, "DigitDDL18", "-ddl 18 -cdb");
378 handler->CreateConfiguration("RecoDDL19", hrId, "DigitDDL19", "-ddl 19 -cdb");
379 handler->CreateConfiguration("RecoDDL20", hrId, "DigitDDL20", "-ddl 20 -cdb");
380 handler->CreateConfiguration("RecoDDL21", trId, "DigitDDL21", "-ddl 21 -cdb -suppress_partial_triggers");
381 handler->CreateConfiguration("RecoDDL22", trId, "DigitDDL22", "-ddl 22 -cdb -suppress_partial_triggers");
382
383 const char* recoSrcs = "RecoDDL13 RecoDDL14 RecoDDL15 RecoDDL16 RecoDDL17"
384 " RecoDDL18 RecoDDL19 RecoDDL20 RecoDDL21 RecoDDL22";
385 handler->CreateConfiguration("MansoTracker", trackerId, recoSrcs, "");
386
147b1df7 387 handler->CreateConfiguration("Decision", decCompId, "MansoTracker", "");
388
389 TString outputSrcs = "Decision MansoTracker ";
390 outputSrcs += recoSrcs;
391 handler->CreateConfiguration("dHLT-sim", "BlockFilter", outputSrcs.Data(), "");
887a669c 392
393 // Implement the dHLT-sim-fromMC dHLT simulation chain reading
394 // Monte Carlo geant hits and putting those into a tracker component.
395 const char* rhsId = AliHLTMUONConstants::RecHitsSourceId();
396 const char* trsId = AliHLTMUONConstants::TriggerRecordsSourceId();
397 handler->CreateConfiguration("HitsDDL13", rhsId, NULL, "-simdata -plane left -chamber 7");
398 handler->CreateConfiguration("HitsDDL14", rhsId, NULL, "-simdata -plane right -chamber 7");
399 handler->CreateConfiguration("HitsDDL15", rhsId, NULL, "-simdata -plane left -chamber 8");
400 handler->CreateConfiguration("HitsDDL16", rhsId, NULL, "-simdata -plane right -chamber 8");
401 handler->CreateConfiguration("HitsDDL17", rhsId, NULL, "-simdata -plane left -chamber 9");
402 handler->CreateConfiguration("HitsDDL18", rhsId, NULL, "-simdata -plane right -chamber 9");
403 handler->CreateConfiguration("HitsDDL19", rhsId, NULL, "-simdata -plane left -chamber 10");
404 handler->CreateConfiguration("HitsDDL20", rhsId, NULL, "-simdata -plane right -chamber 10");
405 handler->CreateConfiguration("TrigRecsDDL21", trsId, NULL, "-hitdata -plane left");
406 handler->CreateConfiguration("TrigRecsDDL22", trsId, NULL, "-hitdata -plane right");
407
408 const char* dataSrcs = "HitsDDL13 HitsDDL14 HitsDDL15 HitsDDL16 HitsDDL17"
409 " HitsDDL18 HitsDDL19 HitsDDL20 TrigRecsDDL21 TrigRecsDDL22";
410 handler->CreateConfiguration("MansoTrackerForMC", trackerId, dataSrcs, "");
411
147b1df7 412 handler->CreateConfiguration("DecisionForMC", decCompId, "MansoTrackerForMC", "");
413
414 outputSrcs = "DecisionForMC MansoTrackerForMC ";
415 outputSrcs += dataSrcs;
416 handler->CreateConfiguration("dHLT-sim-fromMC", "BlockFilter", outputSrcs.Data(), "");
887a669c 417 }
418
94135365 419 // Create a chain for generating AliESDEvent objects from dHLT raw reconstructed data.
420 handler->CreateConfiguration("HLTOUTPubTrigRecs", "AliHLTOUTPublisher", NULL, "-datatype 'TRIGRECS' 'MUON'");
421 handler->CreateConfiguration("HLTOUTPubMansoTracks", "AliHLTOUTPublisher", NULL, "-datatype 'MANTRACK' 'MUON'");
d24a4636 422 handler->CreateConfiguration("HLTOUTPubTracks", "AliHLTOUTPublisher", NULL, "-datatype 'TRACKS ' 'MUON'");
94135365 423 handler->CreateConfiguration(
424 "dHLT-make-esd",
425 AliHLTMUONConstants::ESDMakerId(),
d24a4636 426 "HLTOUTPubTrigRecs HLTOUTPubMansoTracks HLTOUTPubTracks",
94135365 427 "-make_minimal_esd"
428 );
429
430 // Create a chain for rootifying the raw dHLT data and dumping to file.
431 // This is used during AliRoot reconstruction.
432 handler->CreateConfiguration("HLTOUTPubTrigDbg", "AliHLTOUTPublisher", NULL, "-datatype 'TRIGRDBG' 'MUON'");
433 handler->CreateConfiguration("HLTOUTPubHits", "AliHLTOUTPublisher", NULL, "-datatype 'RECHITS ' 'MUON'");
434 handler->CreateConfiguration("HLTOUTPubClusters", "AliHLTOUTPublisher", NULL, "-datatype 'CLUSTERS' 'MUON'");
435 handler->CreateConfiguration("HLTOUTPubChannels", "AliHLTOUTPublisher", NULL, "-datatype 'CHANNELS' 'MUON'");
436 handler->CreateConfiguration("HLTOUTPubCandidates", "AliHLTOUTPublisher", NULL, "-datatype 'MNCANDID' 'MUON'");
437 handler->CreateConfiguration("HLTOUTPubSingles", "AliHLTOUTPublisher", NULL, "-datatype 'DECIDSIN' 'MUON'");
438 handler->CreateConfiguration("HLTOUTPubPairs", "AliHLTOUTPublisher", NULL, "-datatype 'DECIDPAR' 'MUON'");
439 handler->CreateConfiguration(
440 "HLTOUTConverter",
441 AliHLTMUONConstants::RootifierComponentId(),
442 "HLTOUTPubTrigRecs HLTOUTPubTrigDbg HLTOUTPubHits HLTOUTPubClusters"
443 " HLTOUTPubChannels HLTOUTPubMansoTracks HLTOUTPubCandidates"
d24a4636 444 " HLTOUTPubTracks HLTOUTPubSingles HLTOUTPubPairs",
94135365 445 ""
446 );
447 handler->CreateConfiguration(
448 "dHLT-rootify-and-dump",
449 "ROOTFileWriter",
450 "HLTOUTConverter",
451 "-concatenate-events -datafile dHLTRawData.root -specfmt"
452 );
453
d1ff7c16 454 return 0;
455}
6253e09b 456
457
458int AliHLTMUONAgent::RegisterComponents(AliHLTComponentHandler* pHandler) const
459{
460 ///
461 /// Registers all available components of this module.
462 /// @param pHandler [in] instance of the component handler.
463 ///
464
465 if (pHandler == NULL) return -EINVAL;
466 pHandler->AddComponent(new AliHLTMUONRecHitsSource);
467 pHandler->AddComponent(new AliHLTMUONTriggerRecordsSource);
887a669c 468 pHandler->AddComponent(new AliHLTMUONDigitPublisherComponent);
6253e09b 469 pHandler->AddComponent(new AliHLTMUONRootifierComponent);
470 pHandler->AddComponent(new AliHLTMUONHitReconstructorComponent);
471 pHandler->AddComponent(new AliHLTMUONTriggerReconstructorComponent);
472 pHandler->AddComponent(new AliHLTMUONMansoTrackerFSMComponent);
52c6d8aa 473 pHandler->AddComponent(new AliHLTMUONFullTrackerComponent);
c9537879 474 pHandler->AddComponent(new AliHLTMUONDecisionComponent);
649ab027 475 pHandler->AddComponent(new AliHLTMUONESDMaker);
0528e93a 476 pHandler->AddComponent(new AliHLTMUONEmptyEventFilterComponent);
dba14d7d 477 pHandler->AddComponent(new AliHLTMUONDataCheckerComponent);
17d68f2a 478 pHandler->AddComponent(new AliHLTMUONClusterFinderComponent);
a63da6d6 479 pHandler->AddComponent(new AliHLTMUONRawDataHistoComponent);
f064ef44 480 pHandler->AddComponent(new AliHLTMUONClusterHistoComponent);
6253e09b 481 return 0;
482}
483
94135365 484
485int AliHLTMUONAgent::GetHandlerDescription(
486 AliHLTComponentDataType dt,
487#ifdef __DEBUG
488 AliHLTUInt32_t spec,
489#else
490 AliHLTUInt32_t /*spec*/,
491#endif
492 AliHLTOUTHandlerDesc& desc
493 ) const
494{
495 /// Get handler decription for MUON data in the HLTOUT data stream.
496
497 if (dt == AliHLTMUONConstants::TriggerRecordsBlockDataType() or
d24a4636 498 dt == AliHLTMUONConstants::MansoTracksBlockDataType() or
499 dt == AliHLTMUONConstants::TracksBlockDataType()
94135365 500 )
501 {
502 HLTDebug("Indicating we can handle data type = %s and specification"
503 " = 0x%8.8X with dHLT-make-esd chain",
504 AliHLTComponent::DataType2Text(dt).c_str(),
505 spec
506 );
507 desc = AliHLTOUTHandlerDesc(kChain, dt, "dHLT-make-esd");
508 return 1;
509 }
510
0d716b5f 511 if (fgRunRootifyChain and
512 (dt == AliHLTMUONConstants::TriggerRecordsBlockDataType() or
513 dt == AliHLTMUONConstants::TrigRecsDebugBlockDataType() or
514 dt == AliHLTMUONConstants::RecHitsBlockDataType() or
515 dt == AliHLTMUONConstants::ClusterBlockDataType() or
516 dt == AliHLTMUONConstants::ChannelBlockDataType() or
517 dt == AliHLTMUONConstants::MansoTracksBlockDataType() or
518 dt == AliHLTMUONConstants::MansoCandidatesBlockDataType() or
519 dt == AliHLTMUONConstants::TracksBlockDataType() or
520 dt == AliHLTMUONConstants::SinglesDecisionBlockDataType() or
521 dt == AliHLTMUONConstants::PairsDecisionBlockDataType()
522 ))
94135365 523 {
524 HLTDebug("Indicating we can handle data type = %s and specification"
525 " = 0x%8.8X with dHLT-rootify-and-dump chain",
526 AliHLTComponent::DataType2Text(dt).c_str(),
527 spec
528 );
529 desc = AliHLTOUTHandlerDesc(kChain, dt, "dHLT-rootify-and-dump");
530 return 1;
531 }
532
533 return 0;
534}
535
536
537AliHLTOUTHandler* AliHLTMUONAgent::GetOutputHandler(
538 AliHLTComponentDataType dt,
539#ifdef __DEBUG
540 AliHLTUInt32_t spec
541#else
542 AliHLTUInt32_t /*spec*/
543#endif
544 )
545{
546 /// Get specific handler for MUON data in the HLTOUT data stream.
547
548 HLTDebug("Trying to create HLTOUT handler for data type = %s and"
549 " specification = 0x%8.8X",
550 AliHLTComponent::DataType2Text(dt).c_str(),
551 spec
552 );
553
554 if (dt == AliHLTMUONConstants::TriggerRecordsBlockDataType() or
d24a4636 555 dt == AliHLTMUONConstants::MansoTracksBlockDataType() or
556 dt == AliHLTMUONConstants::TracksBlockDataType()
94135365 557 )
558 {
559 return &fgkESDMakerChain;
560 }
d24a4636 561
0d716b5f 562 if (fgRunRootifyChain and
563 (dt == AliHLTMUONConstants::TriggerRecordsBlockDataType() or
564 dt == AliHLTMUONConstants::TrigRecsDebugBlockDataType() or
565 dt == AliHLTMUONConstants::RecHitsBlockDataType() or
566 dt == AliHLTMUONConstants::ClusterBlockDataType() or
567 dt == AliHLTMUONConstants::ChannelBlockDataType() or
568 dt == AliHLTMUONConstants::MansoTracksBlockDataType() or
569 dt == AliHLTMUONConstants::MansoCandidatesBlockDataType() or
570 dt == AliHLTMUONConstants::TracksBlockDataType() or
571 dt == AliHLTMUONConstants::SinglesDecisionBlockDataType() or
572 dt == AliHLTMUONConstants::PairsDecisionBlockDataType()
573 ))
94135365 574 {
575 return &fgkRootifyDumpChain;
576 }
577
578 return NULL;
579}
580
581
582int AliHLTMUONAgent::DeleteOutputHandler(AliHLTOUTHandler* pInstance)
583{
584 /// Deletes the HLTOUT handlers. In this case since the handlers are
585 /// allocated statically, we just check that the right pointer was
586 /// given and exit.
587
588 HLTDebug("Trying to delete HLTOUT handler: %p", pInstance);
589
590 if (pInstance != &fgkESDMakerChain or pInstance != &fgkRootifyDumpChain)
591 return -EINVAL;
592
593 return 0;
594}