/* Copyright 2008-2010, Technische Universitaet Muenchen,
Authors: Christian Hoeppner & Sebastian Neubert & Johannes Rauch
This file is part of GENFIT.
GENFIT is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
GENFIT is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with GENFIT. If not, see .
*/
/**
* @author Johannes Rauch (Technische Universität München, original author)
*
*/
/** @addtogroup utilities
* @{
*/
#ifndef genfit_MeasurementOnPlaneCreator_h
#define genfit_MeasurementOnPlaneCreator_h
#include "AbsMeasurement.h"
#include "HelixTrackModel.h"
#include
#include
namespace genfit {
enum eMeasurementType { Pixel = 0,
Spacepoint,
ProlateSpacepoint,
StripU,
StripV,
StripUV,
Wire,
WirePoint };
/**
* @brief Create different measurement types along a HelixTrackModel for testing purposes.
*/
class MeasurementCreator : public TObject {
public:
// Constructors/Destructors ---------
MeasurementCreator();
~MeasurementCreator() {delete trackModel_;}
//! Takes ownership!
void setTrackModel(const HelixTrackModel* model) {delete trackModel_; trackModel_ = model;}
void setResolution(double resolution) {resolution_ = resolution;}
void setResolutionWire(double resolutionWire) {resolutionWire_ = resolutionWire;}
void setOutlierProb(double outlierProb) {outlierProb_ = outlierProb;}
void setOutlierRange(double outlierRange) {outlierRange_ = outlierRange;}
void setThetaDetPlane(double thetaDetPlane) {thetaDetPlane_ = thetaDetPlane;}
void setPhiDetPlane(double phiDetPlane) {phiDetPlane_ = phiDetPlane;}
void setWireDir(const TVector3 wireDir) {wireDir_ = wireDir; wireDir_.SetMag(1.);}
void setMinDrift(double minDrift) {minDrift_ = minDrift;}
void setMaxDrift(double maxDrift) {maxDrift_ = maxDrift;}
void setIdealLRResolution(bool idealLRResolution) {idealLRResolution_ = idealLRResolution;}
void setUseSkew(bool useSkew) {useSkew_ = useSkew;}
void setSkewAngle(double skewAngle) {skewAngle_ = skewAngle;}
void setNSuperLayer(int nSuperLayer) {nSuperLayer_ = nSuperLayer;}
void setDebug(bool debug) {debug_ = debug;}
std::vector create(eMeasurementType, double tracklength, bool& outlier, int& lr);
std::vector create(eMeasurementType type, double tracklength) {
bool dummy1;
int dummy2;
return create(type, tracklength, dummy1, dummy2);
}
void reset();
private:
const HelixTrackModel* trackModel_; // ownership
double resolution_; // cm; resolution of generated measurements
double resolutionWire_; // cm; resolution in wire direction of generated measurements (wire and prolate sp measurements)
double outlierProb_;
double outlierRange_;
// planarMeasurement specific
double thetaDetPlane_; // degree
double phiDetPlane_; // degree
// WireMeasurement specific
int wireCounter_;
TVector3 wireDir_;
double minDrift_;
double maxDrift_;
bool idealLRResolution_; // resolve the l/r ambiguities of the wire measurements
bool useSkew_;
double skewAngle_;
int nSuperLayer_;
// misc
int measurementCounter_;
bool debug_;
public:
ClassDef(MeasurementCreator,1)
};
} /* End of namespace genfit */
/** @} */
#endif // genfit_MeasurementOnPlaneCreator_h