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*/)
69 //___________________________________________
70 AliMUONDarcHeader::AliMUONDarcHeader()
88 fRegHeaderArray(new TClonesArray("AliMUONRegHeader",8))
94 for (Int_t i = 0; i < 4; i++)
97 for (Int_t i = 0; i < 6; i++)
102 //___________________________________________
103 AliMUONDarcHeader::AliMUONDarcHeader(const AliMUONDarcHeader& event)
106 fGlobalOutput(event.fGlobalOutput),
107 fGlobalL0(event.fGlobalL0),
108 fGlobalClk(event.fGlobalClk),
109 fGlobalHold(event.fGlobalHold),
110 fGlobalSpare(event.fGlobalSpare),
112 fDarcL0R(event.fDarcL0R),
113 fDarcL1P(event.fDarcL1P),
114 fDarcL1S(event.fDarcL1S),
115 fDarcL2A(event.fDarcL2A),
116 fDarcL2R(event.fDarcL2R),
117 fDarcClk(event.fDarcClk),
118 fDarcHold(event.fDarcHold),
119 fDarcSpare(event.fDarcSpare),
120 fRegHeaderArray(new TClonesArray("AliMUONRegHeader", 8))
127 for (Int_t i = 0; i < 4; i++)
128 fGlobalInput[i] = event.fGlobalInput[i];
130 for (Int_t i = 0; i < 6; i++)
131 fGlobalScaler[i] = event.fGlobalScaler[i];
133 for (Int_t index = 0; index < (event.fRegHeaderArray)->GetEntriesFast(); index++) {
134 new ((*fRegHeaderArray)[fRegHeaderArray->GetEntriesFast()])
135 AliMUONRegHeader(*(AliMUONRegHeader*)(event.fRegHeaderArray)->At(index));
139 //___________________________________________
140 AliMUONDarcHeader& AliMUONDarcHeader::operator=(const AliMUONDarcHeader& event)
143 /// assignment operator
145 if (this == &event) return *this;
148 fGlobalOutput = event.fGlobalOutput;
149 fGlobalL0 = event.fGlobalL0;
150 fGlobalClk = event.fGlobalClk;
151 fGlobalHold = event.fGlobalHold;
152 fGlobalSpare = event.fGlobalSpare;
154 fDarcL0R = event.fDarcL0R;
155 fDarcL1P = event.fDarcL1P;
156 fDarcL1S = event.fDarcL1S;
157 fDarcL2A = event.fDarcL2A;
158 fDarcL2R = event.fDarcL2R;
159 fDarcClk = event.fDarcClk;
160 fDarcHold = event.fDarcHold;
161 fDarcSpare = event.fDarcSpare;
163 for (Int_t i = 0; i < 4; i++)
164 fGlobalInput[i] = event.fGlobalInput[i];
166 for (Int_t i = 0; i < 6; i++)
167 fGlobalScaler[i] = event.fGlobalScaler[i];
169 fRegHeaderArray = new TClonesArray("AliMUONRegHeader", 8);
170 for (Int_t index = 0; index < (event.fRegHeaderArray)->GetEntriesFast(); index++) {
171 new ((*fRegHeaderArray)[fRegHeaderArray->GetEntriesFast()])
172 AliMUONRegHeader(*(AliMUONRegHeader*)(event.fRegHeaderArray)->At(index));
178 //___________________________________________
179 AliMUONDarcHeader::~AliMUONDarcHeader()
184 fRegHeaderArray->Delete();
185 delete fRegHeaderArray;
188 //___________________________________________
189 void AliMUONDarcHeader::SetScalersNumbers()
191 /// set numbers for scaler events for Darc header
192 /// since this is provided by the experiment
193 /// put dummy numbers to check the monitoring
209 for (Int_t i = 0; i < 6; i++)
210 fGlobalScaler[i] = i;
213 //___________________________________________
214 Bool_t AliMUONDarcHeader::GetEventType() const
216 /// return 1 for physics trigger
217 /// return 0 for software trigger
218 // 01 = trigger physics
219 // 10 = trigger software "start of run"
220 // 11 = trigger software "end of run"
221 // 00 = other trigger software
223 Bool_t b1 = (fWord >> 30) & 0x1;
224 Bool_t b2 = !((fWord >> 31) & 0x1);
226 //printf("%d\n", b1 & b2);
227 //printf("%d %d\n", b2 , b1);
231 //___________________________________________
232 void AliMUONDarcHeader::Clear(Option_t* )
234 /// Clear TClones arrays
235 /// instead of deleting
237 fRegHeaderArray->Clear("C");