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 **************************************************************************/
20 #include "AliMUONGlobalTrigger.h"
23 #include "AliMUONLocalStruct.h"
25 /// \class AliMUONGlobalTrigger
26 /// Global Trigger algorithm data output.
27 /// Built from Local and Regional algorithms. \n
28 /// Update for copy & assigment operator,
29 /// add SetGlobalPattern and GetGlobalPattern method for rawdata
31 /// \author Ph. Crochet
34 ClassImp(AliMUONGlobalTrigger)
37 //----------------------------------------------------------------------
38 AliMUONGlobalTrigger::AliMUONGlobalTrigger()
60 /// Default constructor
63 //----------------------------------------------------------------------
64 AliMUONGlobalTrigger::AliMUONGlobalTrigger(const AliMUONGlobalTrigger& theMUONGlobalTrig)
65 : TObject(theMUONGlobalTrig),
67 fSinglePlusLpt(theMUONGlobalTrig.fSinglePlusLpt),
68 fSinglePlusHpt(theMUONGlobalTrig.fSinglePlusHpt),
69 fSinglePlusApt(theMUONGlobalTrig.fSinglePlusApt),
71 fSingleMinusLpt(theMUONGlobalTrig.fSingleMinusLpt),
72 fSingleMinusHpt(theMUONGlobalTrig.fSingleMinusHpt),
73 fSingleMinusApt(theMUONGlobalTrig.fSingleMinusApt),
75 fSingleUndefLpt(theMUONGlobalTrig.fSingleUndefLpt),
76 fSingleUndefHpt(theMUONGlobalTrig.fSingleUndefHpt),
77 fSingleUndefApt(theMUONGlobalTrig.fSingleUndefApt),
79 fPairUnlikeLpt(theMUONGlobalTrig.fPairUnlikeLpt),
80 fPairUnlikeHpt(theMUONGlobalTrig.fPairUnlikeHpt),
81 fPairUnlikeApt(theMUONGlobalTrig.fPairUnlikeApt),
83 fPairLikeLpt(theMUONGlobalTrig.fPairLikeLpt),
84 fPairLikeHpt(theMUONGlobalTrig.fPairLikeHpt),
85 fPairLikeApt(theMUONGlobalTrig.fPairLikeApt)
90 //----------------------------------------------------------------------
91 AliMUONGlobalTrigger::~AliMUONGlobalTrigger()
96 //----------------------------------------------------------------------
97 AliMUONGlobalTrigger& AliMUONGlobalTrigger::operator=(const AliMUONGlobalTrigger& theMUONGlobalTrig)
99 /// Assignement operator;
100 /// equal operator (useful for non-pointer member in TClonesArray)
102 if (this == &theMUONGlobalTrig)
105 // base class assignement
106 TObject::operator=(theMUONGlobalTrig);
108 fSinglePlusLpt = theMUONGlobalTrig.fSinglePlusLpt;
109 fSinglePlusHpt = theMUONGlobalTrig.fSinglePlusHpt;
110 fSinglePlusApt = theMUONGlobalTrig.fSinglePlusApt;
112 fSingleMinusLpt = theMUONGlobalTrig.fSingleMinusLpt;
113 fSingleMinusHpt = theMUONGlobalTrig.fSingleMinusHpt;
114 fSingleMinusApt = theMUONGlobalTrig.fSingleMinusApt;
116 fSingleUndefLpt = theMUONGlobalTrig.fSingleUndefLpt;
117 fSingleUndefHpt = theMUONGlobalTrig.fSingleUndefHpt;
118 fSingleUndefApt = theMUONGlobalTrig.fSingleUndefApt;
120 fPairUnlikeLpt = theMUONGlobalTrig.fPairUnlikeLpt;
121 fPairUnlikeHpt = theMUONGlobalTrig.fPairUnlikeHpt;
122 fPairUnlikeApt = theMUONGlobalTrig.fPairUnlikeApt;
124 fPairLikeLpt = theMUONGlobalTrig.fPairLikeLpt;
125 fPairLikeHpt = theMUONGlobalTrig.fPairLikeHpt;
126 fPairLikeApt = theMUONGlobalTrig.fPairLikeApt;
131 //----------------------------------------------------------------------
132 AliMUONGlobalTrigger::AliMUONGlobalTrigger(Int_t *singlePlus,
135 Int_t *pairUnlike, Int_t *pairLike)
138 fSinglePlusLpt(singlePlus[0]),
139 fSinglePlusHpt(singlePlus[1]),
140 fSinglePlusApt(singlePlus[2]),
142 fSingleMinusLpt(singleMinus[0]),
143 fSingleMinusHpt(singleMinus[1]),
144 fSingleMinusApt(singleMinus[2]),
146 fSingleUndefLpt(singleUndef[0]),
147 fSingleUndefHpt(singleUndef[1]),
148 fSingleUndefApt(singleUndef[2]),
150 fPairUnlikeLpt(pairUnlike[0]),
151 fPairUnlikeHpt(pairUnlike[1]),
152 fPairUnlikeApt(pairUnlike[2]),
154 fPairLikeLpt(pairLike[0]),
155 fPairLikeHpt(pairLike[1]),
156 fPairLikeApt(pairLike[2])
159 /// Set the Global Trigger object
162 //-----------------------------------------------------------
163 void AliMUONGlobalTrigger::SetGlobalPattern(Int_t gloTrigPat)
165 /// Set class member from global pattern
166 /// coming from rawdata
167 /// [Hpt, Lpt] with [+, -, LS, US]
169 fSinglePlusLpt = (gloTrigPat ) & 0x1;
170 fSinglePlusHpt = (gloTrigPat >> 1) & 0x1;
171 fSinglePlusApt = (gloTrigPat >> 2) & 0x1;
173 fSingleMinusLpt = (gloTrigPat >> 3) & 0x1;
174 fSingleMinusHpt = (gloTrigPat >> 4) & 0x1;
175 fSingleMinusApt = (gloTrigPat >> 5) & 0x1;
177 fSingleUndefLpt = (gloTrigPat >> 6) & 0x1;
178 fSingleUndefHpt = (gloTrigPat >> 7) & 0x1;
179 fSingleUndefApt = (gloTrigPat >> 8) & 0x1;
181 fPairUnlikeLpt = (gloTrigPat >> 9) & 0x1;
182 fPairUnlikeHpt = (gloTrigPat >> 10) & 0x1;
183 fPairUnlikeApt = (gloTrigPat >> 11) & 0x1;
185 fPairLikeLpt = (gloTrigPat >> 12) & 0x1;
186 fPairLikeHpt = (gloTrigPat >> 13) & 0x1;
187 fPairLikeApt = (gloTrigPat >> 14) & 0x1;
190 //-----------------------------------------------------------
191 void AliMUONGlobalTrigger::SetGlobalPattern(UShort_t globalResponse)
193 /// Set class member from global response
194 /// coming from trigger electronics
195 /// should be unformized with rawdata (->oct 06)
196 /// [Hpt, Lpt, Apt] with [+, -, US, LS]
197 fSinglePlusLpt = ((globalResponse & 0xC0) >> 6) == 2;
198 fSinglePlusHpt = ((globalResponse & 0xC00) >> 10) == 2;
199 fSinglePlusApt = ((globalResponse & 0xC) >> 2) == 2;
201 fSingleMinusLpt = ((globalResponse & 0xC0) >> 6) == 1;
202 fSingleMinusHpt = ((globalResponse & 0xC00) >> 10) == 1;
203 fSingleMinusApt = ((globalResponse & 0xC) >> 2) == 1;
205 fSingleUndefLpt = ((globalResponse & 0xC0) >> 6) == 3;
206 fSingleUndefHpt = ((globalResponse & 0xC00) >> 10) == 3;
207 fSingleUndefApt = ((globalResponse & 0xC) >> 2) == 3;
209 fPairUnlikeLpt = (globalResponse & 0x10) >> 4;
210 fPairUnlikeHpt = (globalResponse & 0x100) >> 8;
211 fPairUnlikeApt = (globalResponse & 0x1);
213 fPairLikeLpt = (globalResponse & 0x20) >> 5;
214 fPairLikeHpt = (globalResponse & 0x200) >> 9;
215 fPairLikeApt = (globalResponse & 0x2) >> 1;
218 //-----------------------------------------------------------
219 void AliMUONGlobalTrigger::SetFromGlobalResponse(UChar_t globalResponse)
221 /// Set class members from global response
222 /// coming from rawdata
223 /// [US:2, LS:2, Single:2] with [Hpt, Lpt]
226 // don't have the information anymore of the sign
227 fSinglePlusLpt = fSingleMinusLpt = globalResponse & 0x1;
228 fSinglePlusHpt = fSingleMinusHpt = (globalResponse >> 1) & 0x1;
230 fPairUnlikeLpt = (globalResponse >> 4) & 0x1;
231 fPairUnlikeHpt = (globalResponse >> 5) & 0x1;
233 fPairLikeLpt = (globalResponse >> 2) & 0x1;
234 fPairLikeHpt = (globalResponse >> 3) & 0x1;
237 //-----------------------------------------------------------
238 Int_t AliMUONGlobalTrigger::GetGlobalPattern() const
240 /// Global trigger pattern calculation
241 /// from class member values
243 Int_t gloTrigPat = 0;
245 if (SinglePlusLpt()) gloTrigPat|= 0x1;
246 if (SinglePlusHpt()) gloTrigPat|= 0x2;
247 if (SinglePlusApt()) gloTrigPat|= 0x4;
249 if (SingleMinusLpt()) gloTrigPat|= 0x8;
250 if (SingleMinusHpt()) gloTrigPat|= 0x10;
251 if (SingleMinusApt()) gloTrigPat|= 0x20;
253 if (SingleUndefLpt()) gloTrigPat|= 0x40;
254 if (SingleUndefHpt()) gloTrigPat|= 0x80;
255 if (SingleUndefApt()) gloTrigPat|= 0x100;
257 if (PairUnlikeLpt()) gloTrigPat|= 0x200;
258 if (PairUnlikeHpt()) gloTrigPat|= 0x400;
259 if (PairUnlikeApt()) gloTrigPat|= 0x800;
261 if (PairLikeLpt()) gloTrigPat|= 0x1000;
262 if (PairLikeHpt()) gloTrigPat|= 0x2000;
263 if (PairLikeApt()) gloTrigPat|= 0x4000;
270 //-----------------------------------------------------------
271 UChar_t AliMUONGlobalTrigger::GetGlobalResponse() const
273 /// Global trigger response
274 /// from class member values
275 /// [US:2, LS:2, Single:2] with [Hpt, Lpt]
278 UChar_t response = 0;
283 if (SinglePlusLpt() || SingleMinusLpt()) respS |= 0x1;
284 if (SinglePlusHpt() || SingleMinusHpt()) respS |= 0x2;
286 if (PairLikeLpt()) respLS |= 0x1;
287 if (PairLikeHpt()) respLS |= 0x1;
290 if (PairUnlikeLpt()) respUS |= 0x1;
291 if (PairUnlikeHpt()) respUS |= 0x2;
294 response = respUS | respLS | respS;
299 //----------------------------------------------------------------------
300 void AliMUONGlobalTrigger::Print(Option_t* opt) const
303 // Printing Global Trigger information
307 if ( sopt.Contains("FULL") ) {
309 printf("===================================================\n");
310 printf(" Global Trigger output Low pt High pt All\n");
311 printf(" number of Single Plus :\t");
312 printf("%i\t%i\t%i\t",SinglePlusLpt(),SinglePlusHpt(),SinglePlusApt());
315 printf(" number of Single Minus :\t");
316 printf("%i\t%i\t%i\t",SingleMinusLpt(),SingleMinusHpt(),SingleMinusApt());
319 printf(" number of Single Undefined :\t");
320 printf("%i\t%i\t%i\t",SingleUndefLpt(),SingleUndefHpt(),SingleUndefApt());
323 printf(" number of UnlikeSign pair :\t");
324 printf("%i\t%i\t%i\t",PairUnlikeLpt(),PairUnlikeHpt(),PairUnlikeApt());
327 printf(" number of LikeSign pair :\t");
328 printf("%i\t%i\t%i\t",PairLikeLpt(),PairLikeHpt(),PairLikeApt());
331 printf("===================================================\n");