1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 #include "AliMUONDarcHeader.h"
19 #include "AliMUONRegHeader.h"
21 //-----------------------------------------------------------------------------
22 /// \class AliMUONDarcHeader
23 /// Darc structure for trigger raw data.
24 /// Each DDL contains one Darc structure
25 /// The structure includes the information of the Darc boards
26 /// the Global board input and the global board output
27 /// The structure containes the information of the 8 (at most)
28 /// regional structures.
30 /// \author Christian Finck
31 //-----------------------------------------------------------------------------
34 ClassImp(AliMUONDarcHeader)
37 const Int_t AliMUONDarcHeader::fgkDarcHeaderLength = 1;
38 const Int_t AliMUONDarcHeader::fgkGlobalHeaderLength = 5;
39 const Int_t AliMUONDarcHeader::fgkDarcScalerLength = 8;
40 const Int_t AliMUONDarcHeader::fgkGlobalScalerLength = 10;
42 const UInt_t AliMUONDarcHeader::fgkEndOfDarc = 0xDEADFACE;
43 const UInt_t AliMUONDarcHeader::fgkEndOfGlobal = 0xDEADBEEF;
44 const UInt_t AliMUONDarcHeader::fgkDarcVadorhType = 4;
45 const UInt_t AliMUONDarcHeader::fgkDarcDefaultType = 6;
47 //___________________________________________
48 AliMUONDarcHeader::AliMUONDarcHeader(TRootIOCtor* /*dummy*/)
67 for (Int_t i = 0; i < 4; i++)
70 for (Int_t i = 0; i < 6; i++)
75 //___________________________________________
76 AliMUONDarcHeader::AliMUONDarcHeader()
94 fRegHeaderArray(new TClonesArray("AliMUONRegHeader",8))
100 for (Int_t i = 0; i < 4; i++)
103 for (Int_t i = 0; i < 6; i++)
104 fGlobalScaler[i] = 0;
108 //___________________________________________
109 AliMUONDarcHeader::AliMUONDarcHeader(const AliMUONDarcHeader& event)
112 fGlobalOutput(event.fGlobalOutput),
113 fGlobalL0(event.fGlobalL0),
114 fGlobalClk(event.fGlobalClk),
115 fGlobalHold(event.fGlobalHold),
116 fGlobalSpare(event.fGlobalSpare),
118 fDarcL0R(event.fDarcL0R),
119 fDarcL1P(event.fDarcL1P),
120 fDarcL1S(event.fDarcL1S),
121 fDarcL2A(event.fDarcL2A),
122 fDarcL2R(event.fDarcL2R),
123 fDarcClk(event.fDarcClk),
124 fDarcHold(event.fDarcHold),
125 fDarcSpare(event.fDarcSpare),
126 fRegHeaderArray(new TClonesArray("AliMUONRegHeader", 8))
133 for (Int_t i = 0; i < 4; i++)
134 fGlobalInput[i] = event.fGlobalInput[i];
136 for (Int_t i = 0; i < 6; i++)
137 fGlobalScaler[i] = event.fGlobalScaler[i];
139 for (Int_t index = 0; index < (event.fRegHeaderArray)->GetEntriesFast(); index++) {
140 new ((*fRegHeaderArray)[fRegHeaderArray->GetEntriesFast()])
141 AliMUONRegHeader(*(AliMUONRegHeader*)(event.fRegHeaderArray)->At(index));
145 //___________________________________________
146 AliMUONDarcHeader& AliMUONDarcHeader::operator=(const AliMUONDarcHeader& event)
149 /// assignment operator
151 if (this == &event) return *this;
154 fGlobalOutput = event.fGlobalOutput;
155 fGlobalL0 = event.fGlobalL0;
156 fGlobalClk = event.fGlobalClk;
157 fGlobalHold = event.fGlobalHold;
158 fGlobalSpare = event.fGlobalSpare;
160 fDarcL0R = event.fDarcL0R;
161 fDarcL1P = event.fDarcL1P;
162 fDarcL1S = event.fDarcL1S;
163 fDarcL2A = event.fDarcL2A;
164 fDarcL2R = event.fDarcL2R;
165 fDarcClk = event.fDarcClk;
166 fDarcHold = event.fDarcHold;
167 fDarcSpare = event.fDarcSpare;
169 for (Int_t i = 0; i < 4; i++)
170 fGlobalInput[i] = event.fGlobalInput[i];
172 for (Int_t i = 0; i < 6; i++)
173 fGlobalScaler[i] = event.fGlobalScaler[i];
175 fRegHeaderArray = new TClonesArray("AliMUONRegHeader", 8);
176 for (Int_t index = 0; index < (event.fRegHeaderArray)->GetEntriesFast(); index++) {
177 new ((*fRegHeaderArray)[fRegHeaderArray->GetEntriesFast()])
178 AliMUONRegHeader(*(AliMUONRegHeader*)(event.fRegHeaderArray)->At(index));
184 //___________________________________________
185 AliMUONDarcHeader::~AliMUONDarcHeader()
190 fRegHeaderArray->Delete();
191 delete fRegHeaderArray;
194 //___________________________________________
195 void AliMUONDarcHeader::SetScalersNumbers()
197 /// set numbers for scaler events for Darc header
198 /// since this is provided by the experiment
199 /// put dummy numbers to check the monitoring
215 for (Int_t i = 0; i < 6; i++)
216 fGlobalScaler[i] = i;
219 //___________________________________________
220 Bool_t AliMUONDarcHeader::GetEventType() const
222 /// return 1 for physics trigger
223 /// return 0 for software trigger
224 // 01 = trigger physics
225 // 10 = trigger software "start of run"
226 // 11 = trigger software "end of run"
227 // 00 = other trigger software
229 Bool_t b1 = (fWord >> 30) & 0x1;
230 Bool_t b2 = !((fWord >> 31) & 0x1);
232 //printf("%d\n", b1 & b2);
233 //printf("%d %d\n", b2 , b1);
237 //___________________________________________
238 void AliMUONDarcHeader::Clear(Option_t* )
240 /// Clear TClones arrays
241 /// instead of deleting
243 fRegHeaderArray->Clear("C");