]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONTriggerSubprocessor.cxx
First version of trigger preprocessor (only local and regional masks so far)
[u/mrichter/AliRoot.git] / MUON / AliMUONTriggerSubprocessor.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
18 #include "AliMUONTriggerSubprocessor.h"
19
20 #include "AliCDBMetaData.h"
21 #include "AliLog.h"
22 #include "AliMUON1DArray.h"
23 #include "AliMUONCalibParamNI.h"
24 #include "AliMUONPreprocessor.h"
25 #include "AliMUONTriggerIO.h"
26 #include "AliMUONTriggerLut.h"
27 #include "AliMpConstants.h"
28 #include <Riostream.h>
29 #include <TList.h>
30 #include <TObjString.h>
31 #include <TSystem.h>
32
33 /// \class AliMUONTriggerSubprocessor
34 ///
35 /// Implementation of AliMUONVSubprocessor for MUON trigger system
36 ///
37 /// Reads masks and LUT online files to feed the OCDB
38 ///
39 /// \author L. Aphecetche
40
41 /// \cond CLASSIMP
42 ClassImp(AliMUONTriggerSubprocessor)
43 /// \endcond
44
45 //_____________________________________________________________________________
46 AliMUONTriggerSubprocessor::AliMUONTriggerSubprocessor(AliMUONPreprocessor* master)
47 : AliMUONVSubprocessor(master,
48                        "Triggers",
49                        "Upload MUON Trigger masks and LUT to OCDB"),
50 fRegionalMasks(0x0),
51 fLocalMasks(0x0),
52 fGlobalMasks(0x0),
53 fLUT(0x0)
54 {
55   /// default ctor
56 }
57
58 //_____________________________________________________________________________
59 AliMUONTriggerSubprocessor::~AliMUONTriggerSubprocessor()
60 {
61   /// dtor
62   delete fRegionalMasks;
63   delete fLocalMasks;
64   delete fGlobalMasks;
65   delete fLUT;
66 }
67
68 //_____________________________________________________________________________
69 TString
70 AliMUONTriggerSubprocessor::GetFileName(const char* fid) const
71 {
72   /// Get filename for a given id
73   
74   const Int_t kSystem = AliMUONPreprocessor::kDAQ;
75   
76   TList* sources = Master()->GetFileSources(kSystem,fid);
77   if ( sources && sources->GetSize() == 1 ) 
78   {
79     return Master()->GetFile(kSystem,fid,static_cast<TObjString*>(sources->First())->GetName());
80   }
81   return "";
82 }
83
84 //_____________________________________________________________________________
85 void 
86 AliMUONTriggerSubprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTime)
87 {
88   /// When starting a new run, reads in the trigger online files.
89   
90   Master()->Log(Form("Reading trigger masks for Run %d startTime %ld endTime %ld",
91                      run,startTime,endTime));
92     
93   delete fRegionalMasks;
94   delete fLocalMasks;
95   delete fGlobalMasks;
96   
97   fRegionalMasks = new AliMUON1DArray(16);
98   fLocalMasks = new AliMUON1DArray(AliMpConstants::NofLocalBoards()+1);
99   fGlobalMasks = 0x0; // new AliMUONCalibParamNI(1,16,1,0,0);
100
101   AliMUONTriggerIO tio;
102   
103   tio.ReadMasks(GetFileName("LOCAL").Data(),
104                 GetFileName("REGIONAL").Data(),
105                 GetFileName("GLOBAL").Data(),
106                 fLocalMasks,fRegionalMasks,fGlobalMasks);
107
108   delete fLUT;
109   fLUT = 0x0; // new AliMUONTriggerLut;
110     
111 //  Master()->Log(Form("Reading trigger LUT for Run %d startTime %ld endTime %ld",
112 //                     run,startTime,endTime));
113 //  tio.ReadLut(lutFile,fLUT);
114 }
115
116 //_____________________________________________________________________________
117 UInt_t 
118 AliMUONTriggerSubprocessor::Process(TMap* /*dcsAliasMap*/)
119 {
120   /// Store the trigger masks into the CDB
121   
122   if ( !fGlobalMasks && !fRegionalMasks && !fLocalMasks && !fLUT )
123   {
124     // nothing to do
125     return 0;
126   }
127   
128   Master()->Log(Form("N global = %d N regional = %d N local %d",                     
129                      (fGlobalMasks ? 1 : 0 ),
130                      (fRegionalMasks ? fRegionalMasks->GetSize() : 0 ),
131                      (fLocalMasks ? fLocalMasks->GetSize() : 0 )));
132   
133   AliCDBMetaData metaData;
134         metaData.SetBeamPeriod(0);
135         metaData.SetResponsible("MUON TRG");
136         metaData.SetComment("Computed by AliMUONTriggerSubprocessor $Id$");
137   
138   Bool_t validToInfinity = kTRUE;
139
140         Bool_t result1(kTRUE);
141   Bool_t result2(kTRUE);
142   Bool_t result3(kTRUE);
143   Bool_t result4(kTRUE);
144   
145   if ( fGlobalMasks ) 
146   {
147     result1 = Master()->Store("Calib", "GlobalTriggerBoardMasks", fGlobalMasks, 
148                               &metaData, 0, validToInfinity);
149   }
150   
151   if ( fRegionalMasks && fRegionalMasks->GetSize() > 0 )
152   {
153     result2 = Master()->Store("Calib", "RegionalTriggerBoardMasks", fRegionalMasks, 
154                               &metaData, 0, validToInfinity);
155   }
156   
157   if ( fLocalMasks && fLocalMasks->GetSize() > 0 ) 
158   {
159     result3 = Master()->Store("Calib", "LocalTriggerBoardMasks", fLocalMasks, 
160                               &metaData, 0, validToInfinity);
161   }
162
163   if ( fLUT )
164   {
165     result4 = Master()->Store("Calib", "TriggerLut", fLUT, 
166                               &metaData, 0, validToInfinity);
167   }
168   
169   return ( result1 != kTRUE && result2 != kTRUE && result3 != kTRUE && result4 != kTRUE ); // return 0 if everything is ok.  
170 }