1 /**************************************************************************
\r
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
\r
4 * Author: The ALICE Off-line Project. *
\r
5 * Contributors are mentioned in the code where appropriate. *
\r
7 * Permission to use, copy, modify and distribute this software and its *
\r
8 * documentation strictly for non-commercial purposes is hereby granted *
\r
9 * without fee, provided that the above copyright notice appears in all *
\r
10 * copies and that both the copyright notice and this permission notice *
\r
11 * appear in the supporting documentation. The authors make no claims *
\r
12 * about the suitability of this software for any purpose. It is *
\r
13 * provided "as is" without express or implied warranty. *
\r
14 **************************************************************************/
\r
17 // Class AliVZEROLogicalSignal
\r
18 // ---------------------------
\r
19 // Describes a logical signal in the electronics.
\r
20 // Use it to generate observation windows
\r
21 // which are used by AliVZEROTriggerSimulator class
\r
25 #include "AliVZEROLogicalSignal.h"
\r
27 ClassImp(AliVZEROLogicalSignal)
\r
29 //_____________________________________________________________________________
\r
30 AliVZEROLogicalSignal::AliVZEROLogicalSignal() : TObject(), fStart(0.), fStop(0.)
\r
32 // Default constructor
\r
34 //_____________________________________________________________________________
\r
35 AliVZEROLogicalSignal::AliVZEROLogicalSignal(Float_t start, Float_t stop) : TObject(), fStart(start), fStop(stop)
\r
37 // Constructor using start and stop time
\r
38 if(fStart>fStop) AliError("Logical Signal has a Start time AFTER the Stop time");
\r
39 if(fStart==fStop) AliWarning("Logical Signal has a zero width");
\r
41 //_____________________________________________________________________________
\r
42 AliVZEROLogicalSignal::AliVZEROLogicalSignal(UShort_t profilClock, UInt_t delay) : TObject(), fStart(0.), fStop(0.)
\r
44 // Constructor using the profilClock and delay parameters comming from the FEE
\r
50 for(int i=0 ; i<5 ; i++) {
\r
51 word = (profilClock >> i) & 0x1;
\r
56 if(!word&&up&&!down) {
\r
61 if(!down) fStop = 25.;
\r
63 fStart += delay*10.e-3; // Add 10 ps par register unit
\r
64 fStop += delay*10.e-3;
\r
66 //_____________________________________________________________________________
\r
67 AliVZEROLogicalSignal::AliVZEROLogicalSignal(const AliVZEROLogicalSignal &signal) :
\r
68 TObject(), fStart(signal.fStart),
\r
74 //_____________________________________________________________________________
\r
75 AliVZEROLogicalSignal::~AliVZEROLogicalSignal(){
\r
79 //_____________________________________________________________________________
\r
80 AliVZEROLogicalSignal& AliVZEROLogicalSignal::operator =
\r
81 (const AliVZEROLogicalSignal& signal)
\r
84 fStart = signal.fStart;
\r
85 fStop = signal.fStop;
\r
89 //_____________________________________________________________________________
\r
90 AliVZEROLogicalSignal AliVZEROLogicalSignal::operator|(const AliVZEROLogicalSignal& signal) const
\r
92 // Perform the Logical OR of two signals: C = A or B
\r
93 if((fStart>signal.fStop) || (signal.fStart>fStop))
\r
94 AliError(Form("Both signal do not superpose in time.\n Start(A) = %f Stop(A) = %f\n Start(B) = %f Stop(B) = %f",fStart, fStop, signal.fStart,signal.fStop));
\r
96 AliVZEROLogicalSignal result;
\r
97 if(fStart<signal.fStart) result.fStart = fStart;
\r
98 else result.fStart = signal.fStart;
\r
100 if(fStop>signal.fStop) result.fStop = fStop;
\r
101 else result.fStop = signal.fStop;
\r
105 //_____________________________________________________________________________
\r
106 AliVZEROLogicalSignal AliVZEROLogicalSignal::operator&(const AliVZEROLogicalSignal& signal) const
\r
108 // Perform the Logical AND of two signals: C = A and B
\r
109 if((fStart>signal.fStop) || (signal.fStart>fStop))
\r
110 AliError(Form("Both signal do not superpose in time.\n Start(A) = %f Stop(A) = %f\n Start(B) = %f Stop(B) = %f",fStart, fStop, signal.fStart,signal.fStop));
\r
112 AliVZEROLogicalSignal result;
\r
113 if(fStart>signal.fStart) result.fStart = fStart;
\r
114 else result.fStart = signal.fStart;
\r
116 if(fStop<signal.fStop) result.fStop = fStop;
\r
117 else result.fStop = signal.fStop;
\r
122 //_____________________________________________________________________________
\r
123 Bool_t AliVZEROLogicalSignal::IsInCoincidence(Float_t time) const
\r
125 // Check if a signal arriving at the time "time" is in coincidence with the logical signal
\r
126 Bool_t result = kFALSE;
\r
127 if((time>fStart) && (time<fStop)) result = kTRUE;
\r