]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/MUONmapping/AliMpRegionalTrigger.cxx
Fixes for object target dependencies
[u/mrichter/AliRoot.git] / MUON / MUONmapping / AliMpRegionalTrigger.cxx
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 // $MpId: AliMpTrigger.cxx,v 1.4 2006/05/24 13:58:52 ivana Exp $
18
19 //-----------------------------------------------------------------------------
20 // Class AliMpRegionalTrigger
21 // --------------------
22 // The class defines the properties of regional trigger crate
23 // Author: Ch. Finck, Subatech Nantes
24 //-----------------------------------------------------------------------------
25
26 #include "AliMpRegionalTrigger.h"
27 #include "AliMpExMapIterator.h"
28 #include "AliMpTriggerCrate.h"
29 #include "AliMpLocalBoard.h"
30 #include "AliMpConstants.h"
31 #include "AliMpFiles.h"
32 #include "AliMpDataStreams.h"
33 #include "AliMpHelper.h"
34
35 #include "AliLog.h"
36
37 #include <TArrayI.h>
38 #include <Riostream.h>
39 #include <TClass.h>
40 #include <TSystem.h>
41
42
43 /// \cond CLASSIMP
44 ClassImp(AliMpRegionalTrigger)
45 /// \endcond
46
47
48 //______________________________________________________________________________
49 AliMpRegionalTrigger::AliMpRegionalTrigger()
50   : TObject(),
51     fTriggerCrates(),
52     fLocalBoardMap(),
53     fLocalBoardArray(AliMpConstants::TotalNofLocalBoards()+1) // included non-notified boards
54 {
55       /// Standard constructor
56   
57     fTriggerCrates.SetOwner(true);
58     fTriggerCrates.SetSize(AliMpConstants::LocalBoardNofChannels());
59 }
60
61 //______________________________________________________________________________
62 AliMpRegionalTrigger::AliMpRegionalTrigger(const AliMpRegionalTrigger& rhs)
63   : TObject(rhs),
64     fTriggerCrates(rhs.fTriggerCrates),
65     fLocalBoardMap(rhs.fLocalBoardMap),
66     fLocalBoardArray(rhs.fLocalBoardArray)
67 {
68 /// Copy constructor
69 }  
70
71 //______________________________________________________________________________
72 AliMpRegionalTrigger::AliMpRegionalTrigger(TRootIOCtor* ioCtor)
73   : TObject(),
74     fTriggerCrates(ioCtor),
75     fLocalBoardMap(ioCtor),
76     fLocalBoardArray()
77 {
78 /// Constructor for I0
79 }
80
81 //______________________________________________________________________________
82 AliMpRegionalTrigger& AliMpRegionalTrigger::operator=(const AliMpRegionalTrigger& rhs)
83 {
84 /// Assignment operator
85
86   // check assignment to self
87   if (this == &rhs) return *this;
88
89   // base class assignment
90   TObject::operator=(rhs);
91
92   // assignment operator
93   fTriggerCrates = rhs.fTriggerCrates;
94   fLocalBoardArray = rhs.fLocalBoardArray;
95   
96   return *this;
97 }  
98
99 //______________________________________________________________________________
100 AliMpRegionalTrigger::~AliMpRegionalTrigger()
101 {
102 /// Destructor
103 }
104
105
106 //
107 // private methods
108 //
109
110 //______________________________________________________________________________
111 Bool_t AliMpRegionalTrigger::ReadData(istream& in)
112 {
113 /// Load the Regional trigger from ASCII data files
114 /// and fill objects. Return false if reading fails
115   
116   if ( !in.good() ) return kFALSE;
117    
118   Int_t localBoardId = 0;
119   TArrayI listInt;
120   UShort_t crateId;
121   Int_t nofBoards;
122   Int_t localBoardIndex(0);
123   char line[80];
124  
125   // decode file and store in objects
126   while (!in.eof())
127   {
128     in.getline(line,80);
129     if (!strlen(line)) break;
130     TString crateName(AliMpHelper::Normalize(line));
131     
132     in.getline(line,80);    
133     sscanf(line,"%hx",&crateId);
134
135     // skip data which are not stored in mapping object
136     // (mode, coincidence, mask)
137     in.getline(line,80);
138     in.getline(line,80);
139     in.getline(line,80);
140     
141     // read # local board
142     in.getline(line,80);
143     sscanf(line,"%d",&nofBoards);
144     
145     AliMpTriggerCrate* crate 
146       = (AliMpTriggerCrate*)(fTriggerCrates.GetValue(crateName.Data()));
147     if (!crate)  {
148       crate = new AliMpTriggerCrate(crateName.Data(), crateId);
149       fTriggerCrates.Add(crateName.Data(), crate);
150     }
151
152     Char_t localBoardName[20];
153     Int_t slot;
154     UInt_t switches;
155     
156     for ( Int_t i = 0; i < nofBoards; ++i ) 
157     {
158         in.getline(line,80);
159         sscanf(line,"%02d %19s %03d %03x",&slot,localBoardName,&localBoardId,&switches);
160         AliMpLocalBoard* board = new AliMpLocalBoard(localBoardId, localBoardName, slot); 
161         board->SetSwitch(switches);
162         board->SetCrate(crateName);
163         
164         if (localBoardId > AliMpConstants::NofLocalBoards())
165           board->SetNotified(false); // copy cards
166         
167         crate->AddLocalBoard(localBoardId);
168         
169         // add  list of DEs for local board
170         listInt.Reset();
171         in.getline(line,80);
172         TString tmp(AliMpHelper::Normalize(line));
173         AliMpHelper::DecodeName(tmp,' ',listInt);
174         for (Int_t ii = 0; ii < listInt.GetSize(); ++ii) { 
175           if ( listInt[ii] ) board->AddDE(listInt[ii]);
176         }  
177          
178         // set copy number and transverse connector
179         in.getline(line,80);
180         TString tmp1 = AliMpHelper::Normalize(line);
181         AliMpHelper::DecodeName(tmp1,' ',listInt);
182         
183         board->SetInputXfrom(listInt[0]);
184         board->SetInputXto(listInt[1]);
185         
186         board->SetInputYfrom(listInt[2]);
187         board->SetInputYto(listInt[3]);
188         
189         board->SetTC(listInt[4]);
190         
191         // add local board into array
192         fLocalBoardArray.AddAt(board,localBoardIndex);
193         fLocalBoardMap.Add(board->GetId(),board);
194       
195       ++localBoardIndex;
196     }
197   }
198
199   AliDebug(1,Form("%d trigger crate created",fTriggerCrates.GetSize()));
200   AliDebug(1,Form("%d local board added to the map",fLocalBoardMap.GetSize()));
201   AliDebug(1,Form("%d local board referenced from the array",fLocalBoardArray.GetLast()+1));
202   
203   return kTRUE;
204 }  
205
206 //
207 // public methods
208 //
209
210 //______________________________________________________________________________
211 Bool_t AliMpRegionalTrigger::ReadData(const TString& fileName)
212 {
213 /// Load the Regional trigger from ASCII data files
214 /// and return its instance
215     
216     AliDebugStream(2) << "Read data from file " << fileName.Data() << endl;
217     
218     TString inFileName(fileName);
219     inFileName = gSystem->ExpandPathName(inFileName.Data());
220     ifstream inFile(inFileName.Data(), ios::in);
221     if ( ! inFile.good() ) {
222       AliErrorStream()
223          << "Local Trigger Board Mapping File " << fileName.Data() << " not found" << endl;
224       return kFALSE;
225     }
226     
227     return ReadData(inFile);  
228 }
229
230 //______________________________________________________________________________
231 Bool_t AliMpRegionalTrigger::ReadData(const AliMpDataStreams& dataStreams)
232 {
233 /// Load the Regional trigger from ASCII data files
234 /// and return its instance
235     
236     AliDebugStream(2) << "Read data from stream " << endl;
237     istream& in
238        = dataStreams.
239            CreateDataStream(AliMpFiles::LocalTriggerBoardMapping());
240            
241     Bool_t result = ReadData(in);
242     
243     delete &in;
244     return result;        
245 }
246
247 //______________________________________________________________________________
248 AliMpLocalBoard* AliMpRegionalTrigger::FindLocalBoard(Int_t localBoardId, 
249                                                       Bool_t warn) const {
250     /// Return local board with given Id
251
252     AliMpLocalBoard* localBoard
253       = static_cast<AliMpLocalBoard*>(fLocalBoardMap.GetValue(localBoardId));
254     
255     if ( ! localBoard && warn ) {
256         AliErrorStream()
257         << "Loacl board with localBoardId = " << localBoardId << " not found." << endl;
258     }      
259
260     return localBoard;
261 }
262
263 //______________________________________________________________________________
264 AliMpTriggerCrate* AliMpRegionalTrigger::FindTriggerCrate(TString name, 
265                                                           Bool_t warn) const  {
266     /// Return trigger crate with given name
267
268     AliMpTriggerCrate* crate
269     = (AliMpTriggerCrate*) fTriggerCrates.GetValue(name.Data());
270
271     if ( ! crate && warn ) {
272         AliErrorStream()
273         << "Trigger crate with name = " << name.Data() << " not defined." << endl;
274     }
275
276     return crate;
277 }
278
279 //______________________________________________________________________________
280 Int_t AliMpRegionalTrigger::GetNofTriggerCrates() const 
281
282     /// Return number of trigger crates
283
284     return fTriggerCrates.GetSize(); 
285 }
286
287 //______________________________________________________________________________
288 Int_t AliMpRegionalTrigger::GetNofLocalBoards() const
289
290     /// Return number of local boards
291     
292     return fLocalBoardArray.GetLast()+1; 
293 }
294
295 //______________________________________________________________________________
296 TIterator* 
297 AliMpRegionalTrigger::CreateCrateIterator() const
298 {
299   /// Create iterator over crates
300
301   return fTriggerCrates.CreateIterator();
302 }
303
304 //______________________________________________________________________________
305 TIterator* 
306 AliMpRegionalTrigger::CreateLocalBoardIterator() const
307 {
308   /// Create iterator over local boards
309
310   return fLocalBoardArray.MakeIterator();
311 }
312
313 //______________________________________________________________________________
314 Int_t 
315 AliMpRegionalTrigger::LocalBoardId(Int_t index) const
316 {
317   /// Return local board Id for the local boards with a given index
318
319   AliMpLocalBoard* lb = static_cast<AliMpLocalBoard*>(fLocalBoardArray.At(index));
320   if (lb)
321   {
322     return lb->GetId();
323   }
324   AliError(Form("Could not get local board at index %d",index));
325   return -1;
326 }
327
328 //______________________________________________________________________________
329 void AliMpRegionalTrigger::SetTriggerCratesOwner(Bool_t owner)
330 {
331   /// Set ownership to trigger crates
332
333   fTriggerCrates.SetOwner(owner);
334 }