ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2014, 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 defining a range in which a value to be checked is valid. Can be used
 * as a cut. In case a negative comparison (value valid only outside this range)
 * is desired, this is handled when setting the object to negate (function Negate()).
 * The class is a template, expecting the comparison operators to be overloaded.
 *
 *   Author: Markus Fasel
 */

#include "AliCutValueRange.h"

templateClassImp(EMCalTriggerPtAnalysis::AliCutValueRange)

namespace EMCalTriggerPtAnalysis {

	//______________________________________________________________________________
	template<typename t>
	AliCutValueRange<t>::AliCutValueRange():
	fNegate(false)
	{
		/*
		 * Dummy constructor, producing a range open to both sides
		 */
		fHasLimit[0] = fHasLimit[1] = false;
	}

	//______________________________________________________________________________
	template<typename t>
	AliCutValueRange<t>::AliCutValueRange(t min, t max):
	fNegate(false)
	{
		/*
		 * Constructor, producing a range closed to both sides
		 *
		 * @param min: lower limit
		 * @param max: upper limit
		 */
		fLimits[0] = min;
		fLimits[1] = max;
		fHasLimit[0] = fHasLimit[1] = true;
	}

	//______________________________________________________________________________
	template<typename t>
	AliCutValueRange<t>::AliCutValueRange(t limit, bool isUpper):
	fNegate(false)
	{
		/*
		 * Constructor, producing a range closed to both sides
		 *
		 * @param limit: the limit to be set
		 * @param isUpper: defining whether the limit is the upper (case true) or lower limit
		 */
		if(isUpper){
			fLimits[1] = limit;
			fHasLimit[0] = false;
			fHasLimit[1] = true;
		} else {
			fLimits[0] = limit;
			fHasLimit[0] = true;
			fHasLimit[1] = false;
		}
	}

	//______________________________________________________________________________
	template<typename t>
	bool AliCutValueRange<t>::IsInRange(t value) const {
		/*
		 * Check whether value is within a given range
		 *
		 * @param value: value to be checked
		 * @return: comparison result
		 */
		bool result = true;
		if(fHasLimit[0] && fHasLimit[1]){
			// Double-sided limited
			result = fNegate ? (value < fLimits[0] || value > fLimits[1]) : (value > fLimits[0] && value < fLimits[1]);
		} else if(fHasLimit[1]) {
			// only upper bound
			result = fNegate ? (value > fLimits[1]) : (value < fLimits[1]);
		} else if(fHasLimit[0]){
			// only lower bound
			result = fNegate ? (value < fLimits[0]) : (value > fLimits[0]);
		}
		return result;
	}

	template class AliCutValueRange<int>;
	template class AliCutValueRange<double>;
	template class AliCutValueRange<float>;

}

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