ROOT logo
//*--- Author: Erik Krebs

#include "hkalmdcmeaslayer.h"

// from ROOT
#include "TCollection.h" // for kIterForward declaration
#include "TVector3.h"

// from kalman
#include "hkaldef.h"
using namespace Kalman;

#include <iostream>
#include <iomanip>
using namespace std;

ClassImp(HKalMdcMeasLayer)

//_HADES_CLASS_DESCRIPTION
///////////////////////////////////////////////////////////////////////////////
//
// This models a measurement layer within a mini drift chamber. The geometry
// of the layer is defined in class HKalPlane.
//
//-----------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////


//  -----------------------------------
//  Ctors and Dtor
//  -----------------------------------

HKalMdcMeasLayer::HKalMdcMeasLayer(const TVector3 &center, const TVector3 &normal, const HKalMixture *matIn, const HKalMixture *matOut,
        Int_t mod, Int_t sec, Int_t lay, Int_t nLayMod, Double_t catDist) : HKalPlane(center, normal) {
    // Creates a new Mdc measurement layer.
    // center:  a point on the layer
    // normal:  normal vector of the layer
    // matIn:   material inside the layer
    // matOut:  material outside the layer
    // mod:     module where the layer is located
    // sec:     sector
    // lay:     layer number in Mdc
    // catDist: the thickness of the mdc layer, i.e. the distance between the two cathodes, in mm

    materialInside  = (HKalMixture*) matIn;
    materialOutside = (HKalMixture*) matOut;
    module          = mod;
    sector          = sec;
    layer           = lay;
    nLayersInModule = nLayMod;
    thickness       = catDist;
}

HKalMdcMeasLayer::HKalMdcMeasLayer(const TVector3 &origin, const TVector3 &u, const TVector3 &v, const HKalMixture *matIn, const HKalMixture *matOut,
        Int_t mod, Int_t sec, Int_t lay, Int_t nLayMod, Double_t catDist) : HKalPlane(origin, u, v) {
    // Creates a new Mdc measurement layer.
    // origin:  origin of the plane's coordinate system
    // u, v:    two orthogonal vectors defining the plane's coordinate system. The axis u points in
    //          direction of the signal wire which fired. Axis v in direction of the drift radius.
    // matIn:   material inside the layer
    // matOut:  material outside the layer
    // mod:     module where the layer is located
    // sec:     sector
    // lay:     layer number in Mdc
    // catDist: the thickness of the mdc layer, i.e. the distance between the two cathodes, in mm

    materialInside  = (HKalMixture*) matIn;
    materialOutside = (HKalMixture*) matOut;
    module          = mod;
    sector          = sec;
    layer           = lay;
    nLayersInModule = nLayMod;
    thickness       = catDist;
}

HKalMdcMeasLayer::~HKalMdcMeasLayer() {
}

//  -----------------------------------
//  Implementation of public methods
//  -----------------------------------

Double_t HKalMdcMeasLayer::getDistToModBound(Bool_t dir) const {
    Double_t dist = getThickness() / 2.;
    if(dir == kIterForward) {
        dist += (nLayersInModule - 1 - layer) * getThickness();
    } else {
	dist += layer * getThickness();
    }
    return dist;
}

Bool_t HKalMdcMeasLayer::isInsideMod(const TVector3 &point) const {
    Double_t dist = signedDistanceToPlane(point);
    //cout<<"signed dist from isInsideMod: "<<dist<<endl;
    if(TMath::Abs(dist) < getDistToModBound((dist > 0.))) {
        return kTRUE;
    }
    return kFALSE;
}

Bool_t HKalMdcMeasLayer::isInside(const TVector3 &point) const {
    // Checks if point is located inside the measurement chamber or outside.
    return (distanceToPlane(point) < getThickness()/2.);
}

void HKalMdcMeasLayer::print(Option_t* opt) const {
    // Prints information about the measurement layer.
    // opt: Determines what information about the object will be printed.
    // If opt contains:
    // "Geo": print information about the geometry and location in Hades detector (module, sector, ..)
    // "Mat": print materials of the layer.
    // If opt is empty all of the above will be printed.

    TString stropt(opt);
    cout<<"**** Measurement layer of module "<<getModule()<<", sector "<<getSector()
		        <<" and layer "<<getLayer()<<": ****"<<endl;
    if(stropt.Contains("Geo", TString::kIgnoreCase) || stropt.IsNull()) {
	HKalPlane::print();
        cout<<"Thickness of layer is "<<getThickness()<<" mm."<<endl;
    }
    if(stropt.Contains("Mat", TString::kIgnoreCase) || stropt.IsNull()) {
        cout<<"Material inside: "<<endl;
        materialInside->print();
        cout<<endl;
        cout<<"Material outside: "<<endl;
        materialOutside->print();
    }
    cout<<endl;
    cout<<"**** End printout of measurement layer. ****"<<endl;
}

Float_t HKalMdcMeasLayer::getA(Bool_t inside) const {
    return (inside ? materialInside->GetA() : materialOutside->GetA());
}

Float_t HKalMdcMeasLayer::getZ(Bool_t inside) const {
    return (inside ? materialInside->GetZ() : materialOutside->GetZ());
}

Float_t HKalMdcMeasLayer::getDensity(Bool_t inside) const {
    return (inside ? materialInside->GetDensity() : materialOutside->GetDensity());
}

Float_t HKalMdcMeasLayer::getRadLength(Bool_t inside) const {
    return (inside ? materialInside->GetRadLength() : materialOutside->GetRadLength());
}

Float_t HKalMdcMeasLayer::getExcitationEnergy(Bool_t inside) const {
    return (inside ? materialInside->GetExciteEner() : materialOutside->GetExciteEner());
}

const HKalMixture* HKalMdcMeasLayer::getMaterialPtr(Bool_t inside) const {
    return (inside ? materialInside : materialOutside);
}

 hkalmdcmeaslayer.cc:1
 hkalmdcmeaslayer.cc:2
 hkalmdcmeaslayer.cc:3
 hkalmdcmeaslayer.cc:4
 hkalmdcmeaslayer.cc:5
 hkalmdcmeaslayer.cc:6
 hkalmdcmeaslayer.cc:7
 hkalmdcmeaslayer.cc:8
 hkalmdcmeaslayer.cc:9
 hkalmdcmeaslayer.cc:10
 hkalmdcmeaslayer.cc:11
 hkalmdcmeaslayer.cc:12
 hkalmdcmeaslayer.cc:13
 hkalmdcmeaslayer.cc:14
 hkalmdcmeaslayer.cc:15
 hkalmdcmeaslayer.cc:16
 hkalmdcmeaslayer.cc:17
 hkalmdcmeaslayer.cc:18
 hkalmdcmeaslayer.cc:19
 hkalmdcmeaslayer.cc:20
 hkalmdcmeaslayer.cc:21
 hkalmdcmeaslayer.cc:22
 hkalmdcmeaslayer.cc:23
 hkalmdcmeaslayer.cc:24
 hkalmdcmeaslayer.cc:25
 hkalmdcmeaslayer.cc:26
 hkalmdcmeaslayer.cc:27
 hkalmdcmeaslayer.cc:28
 hkalmdcmeaslayer.cc:29
 hkalmdcmeaslayer.cc:30
 hkalmdcmeaslayer.cc:31
 hkalmdcmeaslayer.cc:32
 hkalmdcmeaslayer.cc:33
 hkalmdcmeaslayer.cc:34
 hkalmdcmeaslayer.cc:35
 hkalmdcmeaslayer.cc:36
 hkalmdcmeaslayer.cc:37
 hkalmdcmeaslayer.cc:38
 hkalmdcmeaslayer.cc:39
 hkalmdcmeaslayer.cc:40
 hkalmdcmeaslayer.cc:41
 hkalmdcmeaslayer.cc:42
 hkalmdcmeaslayer.cc:43
 hkalmdcmeaslayer.cc:44
 hkalmdcmeaslayer.cc:45
 hkalmdcmeaslayer.cc:46
 hkalmdcmeaslayer.cc:47
 hkalmdcmeaslayer.cc:48
 hkalmdcmeaslayer.cc:49
 hkalmdcmeaslayer.cc:50
 hkalmdcmeaslayer.cc:51
 hkalmdcmeaslayer.cc:52
 hkalmdcmeaslayer.cc:53
 hkalmdcmeaslayer.cc:54
 hkalmdcmeaslayer.cc:55
 hkalmdcmeaslayer.cc:56
 hkalmdcmeaslayer.cc:57
 hkalmdcmeaslayer.cc:58
 hkalmdcmeaslayer.cc:59
 hkalmdcmeaslayer.cc:60
 hkalmdcmeaslayer.cc:61
 hkalmdcmeaslayer.cc:62
 hkalmdcmeaslayer.cc:63
 hkalmdcmeaslayer.cc:64
 hkalmdcmeaslayer.cc:65
 hkalmdcmeaslayer.cc:66
 hkalmdcmeaslayer.cc:67
 hkalmdcmeaslayer.cc:68
 hkalmdcmeaslayer.cc:69
 hkalmdcmeaslayer.cc:70
 hkalmdcmeaslayer.cc:71
 hkalmdcmeaslayer.cc:72
 hkalmdcmeaslayer.cc:73
 hkalmdcmeaslayer.cc:74
 hkalmdcmeaslayer.cc:75
 hkalmdcmeaslayer.cc:76
 hkalmdcmeaslayer.cc:77
 hkalmdcmeaslayer.cc:78
 hkalmdcmeaslayer.cc:79
 hkalmdcmeaslayer.cc:80
 hkalmdcmeaslayer.cc:81
 hkalmdcmeaslayer.cc:82
 hkalmdcmeaslayer.cc:83
 hkalmdcmeaslayer.cc:84
 hkalmdcmeaslayer.cc:85
 hkalmdcmeaslayer.cc:86
 hkalmdcmeaslayer.cc:87
 hkalmdcmeaslayer.cc:88
 hkalmdcmeaslayer.cc:89
 hkalmdcmeaslayer.cc:90
 hkalmdcmeaslayer.cc:91
 hkalmdcmeaslayer.cc:92
 hkalmdcmeaslayer.cc:93
 hkalmdcmeaslayer.cc:94
 hkalmdcmeaslayer.cc:95
 hkalmdcmeaslayer.cc:96
 hkalmdcmeaslayer.cc:97
 hkalmdcmeaslayer.cc:98
 hkalmdcmeaslayer.cc:99
 hkalmdcmeaslayer.cc:100
 hkalmdcmeaslayer.cc:101
 hkalmdcmeaslayer.cc:102
 hkalmdcmeaslayer.cc:103
 hkalmdcmeaslayer.cc:104
 hkalmdcmeaslayer.cc:105
 hkalmdcmeaslayer.cc:106
 hkalmdcmeaslayer.cc:107
 hkalmdcmeaslayer.cc:108
 hkalmdcmeaslayer.cc:109
 hkalmdcmeaslayer.cc:110
 hkalmdcmeaslayer.cc:111
 hkalmdcmeaslayer.cc:112
 hkalmdcmeaslayer.cc:113
 hkalmdcmeaslayer.cc:114
 hkalmdcmeaslayer.cc:115
 hkalmdcmeaslayer.cc:116
 hkalmdcmeaslayer.cc:117
 hkalmdcmeaslayer.cc:118
 hkalmdcmeaslayer.cc:119
 hkalmdcmeaslayer.cc:120
 hkalmdcmeaslayer.cc:121
 hkalmdcmeaslayer.cc:122
 hkalmdcmeaslayer.cc:123
 hkalmdcmeaslayer.cc:124
 hkalmdcmeaslayer.cc:125
 hkalmdcmeaslayer.cc:126
 hkalmdcmeaslayer.cc:127
 hkalmdcmeaslayer.cc:128
 hkalmdcmeaslayer.cc:129
 hkalmdcmeaslayer.cc:130
 hkalmdcmeaslayer.cc:131
 hkalmdcmeaslayer.cc:132
 hkalmdcmeaslayer.cc:133
 hkalmdcmeaslayer.cc:134
 hkalmdcmeaslayer.cc:135
 hkalmdcmeaslayer.cc:136
 hkalmdcmeaslayer.cc:137
 hkalmdcmeaslayer.cc:138
 hkalmdcmeaslayer.cc:139
 hkalmdcmeaslayer.cc:140
 hkalmdcmeaslayer.cc:141
 hkalmdcmeaslayer.cc:142
 hkalmdcmeaslayer.cc:143
 hkalmdcmeaslayer.cc:144
 hkalmdcmeaslayer.cc:145
 hkalmdcmeaslayer.cc:146
 hkalmdcmeaslayer.cc:147
 hkalmdcmeaslayer.cc:148
 hkalmdcmeaslayer.cc:149
 hkalmdcmeaslayer.cc:150
 hkalmdcmeaslayer.cc:151
 hkalmdcmeaslayer.cc:152
 hkalmdcmeaslayer.cc:153
 hkalmdcmeaslayer.cc:154
 hkalmdcmeaslayer.cc:155
 hkalmdcmeaslayer.cc:156