Line data Source code
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 : #include "AliMUONPreprocessor.h"
19 :
20 : #include "AliCDBEntry.h"
21 : #include "AliLog.h"
22 : #include "AliMUONGMSSubprocessor.h"
23 : #include "AliMUONHVSubprocessor.h"
24 : #include "AliMUONPedestalSubprocessor.h"
25 : #include "AliMpCDB.h"
26 : #include "AliMpDDLStore.h"
27 : #include "AliMpDataMap.h"
28 : #include "AliMpDataStreams.h"
29 : #include "AliMpSegmentation.h"
30 : #include "AliShuttleInterface.h"
31 : #include "Riostream.h"
32 : #include "TObjArray.h"
33 :
34 : //-----------------------------------------------------------------------------
35 : /// \class AliMUONPreprocessor
36 : ///
37 : /// Shuttle preprocessor for MUON subsystems (TRK and TRG)
38 : ///
39 : /// It's simply a manager class that deals with a list of sub-tasks
40 : /// (of type AliMUONVSubprocessor).
41 : ///
42 : /// \author Laurent Aphecetche
43 : //-----------------------------------------------------------------------------
44 :
45 : /// \cond CLASSIMP
46 12 : ClassImp(AliMUONPreprocessor)
47 : /// \endcond
48 :
49 : //_____________________________________________________________________________
50 : AliMUONPreprocessor::AliMUONPreprocessor(const char* detName, AliShuttleInterface* shuttle)
51 0 : : AliPreprocessor(detName, shuttle),
52 0 : fIsValid(kFALSE),
53 0 : fIsApplicable(kTRUE),
54 0 : fSubprocessors(new TObjArray()),
55 0 : fProcessDCS(kFALSE)
56 0 : {
57 : /// ctor
58 0 : }
59 :
60 : //_____________________________________________________________________________
61 : AliMUONPreprocessor::~AliMUONPreprocessor()
62 0 : {
63 : /// dtor
64 0 : delete fSubprocessors;
65 0 : }
66 :
67 : //_____________________________________________________________________________
68 : void
69 : AliMUONPreprocessor::ClearSubprocessors()
70 : {
71 : /// Empty our subprocessor list
72 0 : fSubprocessors->Clear();
73 0 : fProcessDCS = kFALSE;
74 0 : fIsValid = kFALSE;
75 0 : fIsApplicable = kTRUE;
76 0 : }
77 :
78 : //_____________________________________________________________________________
79 : void
80 : AliMUONPreprocessor::Add(AliMUONVSubprocessor* sub, Bool_t processDCS)
81 : {
82 : /// Add a subprocessor to our list of workers
83 0 : fSubprocessors->Add(sub);
84 0 : if ( processDCS == kTRUE ) fProcessDCS = processDCS;
85 0 : }
86 :
87 : //_____________________________________________________________________________
88 : void
89 : AliMUONPreprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTime)
90 : {
91 : /// Load mapping and initialize subtasks
92 :
93 : // Delete previous mapping
94 0 : AliMpCDB::UnloadAll();
95 :
96 0 : if ( ! IsApplicable() ) {
97 0 : Log(Form("WARNING-RunType=%s is not one I should handle.",GetRunType()));
98 0 : return;
99 : }
100 :
101 : // Load mapping from CDB for this run
102 0 : AliCDBEntry* cdbEntry = GetFromOCDB("Calib", "MappingData");
103 0 : if (!cdbEntry)
104 : {
105 0 : Log("Could not get MappingData from OCDB !");
106 0 : fIsValid = kFALSE;
107 0 : }
108 : else
109 : {
110 0 : AliMpDataMap* dataMap = dynamic_cast<AliMpDataMap*>(cdbEntry->GetObject());
111 0 : if (!dataMap)
112 : {
113 0 : Log("DataMap is not of the expected type. That is bad...");
114 0 : fIsValid = kFALSE;
115 0 : }
116 : else
117 : {
118 0 : AliMpDataStreams dataStreams(dataMap);
119 0 : AliMpDDLStore::ReadData(dataStreams);
120 0 : }
121 : }
122 :
123 : Int_t nok(0);
124 :
125 0 : if (IsValid())
126 : {
127 : // loop over subtasks and initialize them
128 0 : for ( Int_t i = 0; i <= fSubprocessors->GetLast(); ++i )
129 : {
130 0 : Bool_t ok = Subprocessor(i)->Initialize(run,startTime,endTime);
131 0 : if (ok) ++nok;
132 : }
133 0 : if (nok != fSubprocessors->GetLast()+1) fIsValid = kFALSE;
134 : }
135 0 : Log(Form("Initialize was %s",( IsValid() ? "fine" : "NOT OK")));
136 0 : }
137 :
138 : //_____________________________________________________________________________
139 : UInt_t
140 : AliMUONPreprocessor::Process(TMap* dcsAliasMap)
141 : {
142 : /// loop over subtasks to make them work
143 :
144 0 : if (!IsValid())
145 : {
146 0 : Log("Will not run as not properly initialized");
147 0 : return 99;
148 : }
149 :
150 0 : if (!IsApplicable())
151 : {
152 0 : Log("Nothing to do for me");
153 0 : return 0;
154 : }
155 :
156 : UInt_t rv(0);
157 :
158 0 : for ( Int_t i = 0; i <= fSubprocessors->GetLast(); ++i )
159 : {
160 0 : rv += Subprocessor(i)->Process(dcsAliasMap);
161 : }
162 :
163 : return rv;
164 0 : }
165 :
166 : //_____________________________________________________________________________
167 : void
168 : AliMUONPreprocessor::Print(Option_t* opt) const
169 : {
170 : /// output to screen
171 0 : cout << "<AliMUONPreprocessor> subprocessors :" << endl;
172 0 : for ( Int_t i=0; i <= fSubprocessors->GetLast(); ++i )
173 : {
174 0 : Subprocessor(i)->Print(opt);
175 : }
176 0 : }
177 :
178 : //_____________________________________________________________________________
179 : AliMUONVSubprocessor*
180 : AliMUONPreprocessor::Subprocessor(Int_t i) const
181 : {
182 : /// return i-th subprocessor
183 0 : if ( i >= 0 && i <= fSubprocessors->GetLast() )
184 : {
185 0 : return static_cast<AliMUONVSubprocessor*>(fSubprocessors->At(i));
186 : }
187 0 : return 0x0;
188 0 : }
|