ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// 
// Class AliVZEROLogicalSignal
// ---------------------------
// Describes a logical signal in the electronics. 
// Use it to generate observation windows
// which are used by AliVZEROTriggerSimulator class
// 

#include "AliLog.h"
#include "AliVZEROLogicalSignal.h"

ClassImp(AliVZEROLogicalSignal)

//_____________________________________________________________________________
AliVZEROLogicalSignal::AliVZEROLogicalSignal() : TObject(), fStart(0.), fStop(0.)
{
	// Default constructor
}
//_____________________________________________________________________________
AliVZEROLogicalSignal::AliVZEROLogicalSignal(UShort_t profilClock, UInt_t delay) : TObject(), fStart(0.), fStop(0.)
{
	// Constructor using the profilClock and delay parameters comming from the FEE
	
	Bool_t word;
	Bool_t up=kFALSE;
	Bool_t down=kFALSE;
	
	for(int i=0 ; i<5 ; i++) {
	        Int_t shift = (i<4) ? (3-i) : 4;
	        word = (profilClock >> shift) & 0x1;
		if(word&&!up) {
		        fStart = 5. * (i + 1);
			up = kTRUE;
		}
		if(!word&&up&&!down) {
		        fStop = 5. * (i + 1);
			down = kTRUE;
		}		
	}
	if(!down) fStop = 30.;
	
	fStart += delay*1e-2; // Add 10 ps par register unit
	fStop  += delay*1e-2; 
}
//_____________________________________________________________________________
AliVZEROLogicalSignal::AliVZEROLogicalSignal(const AliVZEROLogicalSignal &signal) : 
	TObject(), fStart(signal.fStart), 
	fStop(signal.fStop)
{
	// Copy constructor
}

//_____________________________________________________________________________
AliVZEROLogicalSignal::~AliVZEROLogicalSignal(){
	// Destructor
}

//_____________________________________________________________________________
AliVZEROLogicalSignal& AliVZEROLogicalSignal::operator = 
(const AliVZEROLogicalSignal& signal)
{
	// Operator =
        if(&signal == this) return *this;
	fStart = signal.fStart;
	fStop  = signal.fStop;
	return *this;
}

//_____________________________________________________________________________
AliVZEROLogicalSignal AliVZEROLogicalSignal::operator|(const AliVZEROLogicalSignal& signal) const 
{
	// Perform the Logical OR of two signals: C = A or B
	if((fStart>signal.fStop) || (signal.fStart>fStop))
		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));
	
	AliVZEROLogicalSignal result;
	if(fStart<signal.fStart) result.fStart = fStart;
	else result.fStart = signal.fStart;
	
	if(fStop>signal.fStop) result.fStop = fStop;
	else result.fStop = signal.fStop;
		
	return result;
}
//_____________________________________________________________________________
AliVZEROLogicalSignal AliVZEROLogicalSignal::operator&(const AliVZEROLogicalSignal& signal) const
{
	// Perform the Logical AND of two signals: C = A and B
	if((fStart>signal.fStop) || (signal.fStart>fStop))
		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));
	
	AliVZEROLogicalSignal result;
	if(fStart>signal.fStart) result.fStart = fStart;
	else result.fStart = signal.fStart;
	
	if(fStop<signal.fStop) result.fStop = fStop;
	else result.fStop = signal.fStop;
	
	return result;
}

//_____________________________________________________________________________
Bool_t AliVZEROLogicalSignal::IsInCoincidence(Float_t time) const
{
	// Check if a signal arriving at the time "time" is in coincidence with the logical signal
	Bool_t result = kFALSE;
	if((time>fStart) && (time<fStop)) result = kTRUE;
	return result;
}

 AliVZEROLogicalSignal.cxx:1
 AliVZEROLogicalSignal.cxx:2
 AliVZEROLogicalSignal.cxx:3
 AliVZEROLogicalSignal.cxx:4
 AliVZEROLogicalSignal.cxx:5
 AliVZEROLogicalSignal.cxx:6
 AliVZEROLogicalSignal.cxx:7
 AliVZEROLogicalSignal.cxx:8
 AliVZEROLogicalSignal.cxx:9
 AliVZEROLogicalSignal.cxx:10
 AliVZEROLogicalSignal.cxx:11
 AliVZEROLogicalSignal.cxx:12
 AliVZEROLogicalSignal.cxx:13
 AliVZEROLogicalSignal.cxx:14
 AliVZEROLogicalSignal.cxx:15
 AliVZEROLogicalSignal.cxx:16
 AliVZEROLogicalSignal.cxx:17
 AliVZEROLogicalSignal.cxx:18
 AliVZEROLogicalSignal.cxx:19
 AliVZEROLogicalSignal.cxx:20
 AliVZEROLogicalSignal.cxx:21
 AliVZEROLogicalSignal.cxx:22
 AliVZEROLogicalSignal.cxx:23
 AliVZEROLogicalSignal.cxx:24
 AliVZEROLogicalSignal.cxx:25
 AliVZEROLogicalSignal.cxx:26
 AliVZEROLogicalSignal.cxx:27
 AliVZEROLogicalSignal.cxx:28
 AliVZEROLogicalSignal.cxx:29
 AliVZEROLogicalSignal.cxx:30
 AliVZEROLogicalSignal.cxx:31
 AliVZEROLogicalSignal.cxx:32
 AliVZEROLogicalSignal.cxx:33
 AliVZEROLogicalSignal.cxx:34
 AliVZEROLogicalSignal.cxx:35
 AliVZEROLogicalSignal.cxx:36
 AliVZEROLogicalSignal.cxx:37
 AliVZEROLogicalSignal.cxx:38
 AliVZEROLogicalSignal.cxx:39
 AliVZEROLogicalSignal.cxx:40
 AliVZEROLogicalSignal.cxx:41
 AliVZEROLogicalSignal.cxx:42
 AliVZEROLogicalSignal.cxx:43
 AliVZEROLogicalSignal.cxx:44
 AliVZEROLogicalSignal.cxx:45
 AliVZEROLogicalSignal.cxx:46
 AliVZEROLogicalSignal.cxx:47
 AliVZEROLogicalSignal.cxx:48
 AliVZEROLogicalSignal.cxx:49
 AliVZEROLogicalSignal.cxx:50
 AliVZEROLogicalSignal.cxx:51
 AliVZEROLogicalSignal.cxx:52
 AliVZEROLogicalSignal.cxx:53
 AliVZEROLogicalSignal.cxx:54
 AliVZEROLogicalSignal.cxx:55
 AliVZEROLogicalSignal.cxx:56
 AliVZEROLogicalSignal.cxx:57
 AliVZEROLogicalSignal.cxx:58
 AliVZEROLogicalSignal.cxx:59
 AliVZEROLogicalSignal.cxx:60
 AliVZEROLogicalSignal.cxx:61
 AliVZEROLogicalSignal.cxx:62
 AliVZEROLogicalSignal.cxx:63
 AliVZEROLogicalSignal.cxx:64
 AliVZEROLogicalSignal.cxx:65
 AliVZEROLogicalSignal.cxx:66
 AliVZEROLogicalSignal.cxx:67
 AliVZEROLogicalSignal.cxx:68
 AliVZEROLogicalSignal.cxx:69
 AliVZEROLogicalSignal.cxx:70
 AliVZEROLogicalSignal.cxx:71
 AliVZEROLogicalSignal.cxx:72
 AliVZEROLogicalSignal.cxx:73
 AliVZEROLogicalSignal.cxx:74
 AliVZEROLogicalSignal.cxx:75
 AliVZEROLogicalSignal.cxx:76
 AliVZEROLogicalSignal.cxx:77
 AliVZEROLogicalSignal.cxx:78
 AliVZEROLogicalSignal.cxx:79
 AliVZEROLogicalSignal.cxx:80
 AliVZEROLogicalSignal.cxx:81
 AliVZEROLogicalSignal.cxx:82
 AliVZEROLogicalSignal.cxx:83
 AliVZEROLogicalSignal.cxx:84
 AliVZEROLogicalSignal.cxx:85
 AliVZEROLogicalSignal.cxx:86
 AliVZEROLogicalSignal.cxx:87
 AliVZEROLogicalSignal.cxx:88
 AliVZEROLogicalSignal.cxx:89
 AliVZEROLogicalSignal.cxx:90
 AliVZEROLogicalSignal.cxx:91
 AliVZEROLogicalSignal.cxx:92
 AliVZEROLogicalSignal.cxx:93
 AliVZEROLogicalSignal.cxx:94
 AliVZEROLogicalSignal.cxx:95
 AliVZEROLogicalSignal.cxx:96
 AliVZEROLogicalSignal.cxx:97
 AliVZEROLogicalSignal.cxx:98
 AliVZEROLogicalSignal.cxx:99
 AliVZEROLogicalSignal.cxx:100
 AliVZEROLogicalSignal.cxx:101
 AliVZEROLogicalSignal.cxx:102
 AliVZEROLogicalSignal.cxx:103
 AliVZEROLogicalSignal.cxx:104
 AliVZEROLogicalSignal.cxx:105
 AliVZEROLogicalSignal.cxx:106
 AliVZEROLogicalSignal.cxx:107
 AliVZEROLogicalSignal.cxx:108
 AliVZEROLogicalSignal.cxx:109
 AliVZEROLogicalSignal.cxx:110
 AliVZEROLogicalSignal.cxx:111
 AliVZEROLogicalSignal.cxx:112
 AliVZEROLogicalSignal.cxx:113
 AliVZEROLogicalSignal.cxx:114
 AliVZEROLogicalSignal.cxx:115
 AliVZEROLogicalSignal.cxx:116
 AliVZEROLogicalSignal.cxx:117
 AliVZEROLogicalSignal.cxx:118
 AliVZEROLogicalSignal.cxx:119
 AliVZEROLogicalSignal.cxx:120
 AliVZEROLogicalSignal.cxx:121
 AliVZEROLogicalSignal.cxx:122
 AliVZEROLogicalSignal.cxx:123
 AliVZEROLogicalSignal.cxx:124
 AliVZEROLogicalSignal.cxx:125