ROOT logo
//__________________________________________________[C++ CLASS IMPLEMENTATION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TC2LVulomTB.cxx
// Purpose:        MARaBOU client to connect to LynxOs/VME
// Description:    Implements class methods to connect to VME modules
// Keywords:
// Author:         R. Lutter
// Mailto:         <a href=mailto:rudi.lutter@physik.uni-muenchen.de>R. Lutter</a>
// Revision:       $Id: TC2LVulomTB.cxx,v 1.4 2010-12-10 15:25:19 Marabou Exp $
// Date:           $Date: 2010-12-10 15:25:19 $
//////////////////////////////////////////////////////////////////////////////

namespace std {} using namespace std;

#include <iostream>
#include <iomanip>

#include "Rtypes.h"
#include "TEnv.h"
#include "TDatime.h"
#include "TROOT.h"

#include "TMrbC2Lynx.h"
#include "TC2LVulomTB.h"

#include "TMrbTemplate.h"
#include "TMrbNamedX.h"
#include "TMrbLogger.h"
#include "TMrbResource.h"
#include "SetColor.h"

#include "M2L_CommonDefs.h"

extern TMrbLogger * gMrbLog;
extern TMrbC2Lynx * gMrbC2Lynx;

ClassImp(TC2LVulomTB)

Bool_t TC2LVulomTB::ExecFunction(Int_t Fcode, TArrayI & DataSend, TArrayI & DataRecv, Int_t Index) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TC2LVulomTB::ExecFunction()
// Purpose:        Execute function
// Arguments:      Int_t Fcode            -- function code
//                 TArrayI & DataSend     -- data (send)
//                 TArrayI & DataRecv     -- data (receive)
//                 Int_t Index            -- channel or scaler number
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Executes function.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (this->IsVerbose() || this->IsOffline()) {
		TMrbNamedX * f = this->FindFunction(Fcode);
		TString fn = f ? f->GetName() : "???";
		TString an = (Index == kVulomTBAllChannels) ? "all" : Form("chn%d", Index);
		cout << "[" << this->GetName() << ", " << an << "] Exec function - \""
					<< fn << "\" (0x" << setbase(16) << Fcode << setbase(10) << ")";
		for (Int_t i = 0; i < DataSend.GetSize(); i++) {
			if (i == 0) cout	<< ", data: "; else cout << ", ";
			cout	<< DataSend[i]
					<< "|0x" << setbase(16) << DataSend[i] << setbase(10);
		}
		cout << endl;
		if (this->IsOffline()) {
			DataRecv.Set(100);
			return(kTRUE);
		}
	}

	Int_t wc = DataSend.GetSize() + 1;
	M2L_VME_Exec_Function * x = (M2L_VME_Exec_Function *) gMrbC2Lynx->AllocMessage(sizeof(M2L_VME_Exec_Function), wc, kM2L_MESS_VME_EXEC_FUNCTION);
	x->fData.fData[0] = Index;
	Int_t * dp = &x->fData.fData[1];
	for (Int_t i = 0; i < DataSend.GetSize(); i++, dp++) *dp = DataSend[i];
	x->fXhdr.fHandle = this->GetHandle();
	x->fXhdr.fCode = Fcode;
	x->fData.fWc = wc;
	if (gMrbC2Lynx->Send((M2L_MsgHdr *) x)) {
		wc = DataRecv.GetSize();
		M2L_VME_Return_Results * r = (M2L_VME_Return_Results *) gMrbC2Lynx->AllocMessage(sizeof(M2L_VME_Return_Results), wc, kM2L_MESS_VME_EXEC_FUNCTION);
		if (gMrbC2Lynx->Recv((M2L_MsgHdr *) r)) {
			wc = r->fData.fWc;
			DataRecv.Set(wc);
			Int_t * dp = r->fData.fData;
			for (Int_t i = 0; i < wc; i++, dp++) DataRecv[i] = *dp;
			return(kTRUE);
		} else {
			return(kFALSE);
		}
	} else {
		return(kFALSE);
	}
}

Bool_t TC2LVulomTB::GetModuleInfo(Int_t & BoardId, Int_t & MajorVersion, Int_t & MinorVersion) {
	if (this->IsOffline()) return(kTRUE);
	M2L_VME_Exec_Function x;
	gMrbC2Lynx->InitMessage((M2L_MsgHdr *) &x, sizeof(M2L_VME_Exec_Function), kM2L_MESS_VME_EXEC_FUNCTION);
	x.fData.fData[0] = kVulomTBAllChannels;
	x.fXhdr.fHandle = this->GetHandle();
	x.fXhdr.fCode = kM2L_FCT_GET_MODULE_INFO;
	x.fData.fWc = 1;
	if (gMrbC2Lynx->Send((M2L_MsgHdr *) &x)) {
		M2L_VME_Return_Module_Info r;
		if (gMrbC2Lynx->Recv((M2L_MsgHdr *) &r)) {
			BoardId = r.fBoardId;
			MajorVersion = r.fMajorVersion;
			MinorVersion = r.fMinorVersion;
			return(kTRUE);
		} else {
			return(kFALSE);
		}
	} else {
		return(kFALSE);
	}
}

Bool_t TC2LVulomTB::ReadScaler(TArrayI & ScalerValues, Int_t ScalerNo) {
	TArrayI dataSend(0);
	return(this->ExecFunction(kM2L_FCT_VULOM_TB_READ_SCALER, dataSend, ScalerValues, ScalerNo));
}

Bool_t TC2LVulomTB::ReadChannel(TArrayI & ScalerValues, Int_t ChannelNo) {
	TArrayI dataSend(0);
	return(this->ExecFunction(kM2L_FCT_VULOM_TB_READ_CHANNEL, dataSend, ScalerValues, ChannelNo));
}

Bool_t TC2LVulomTB::EnableChannel(Int_t ChannelNo) {
	TArrayI bits(1); bits[0] = 1;
	if (!this->ExecFunction(kM2L_FCT_VULOM_TB_ENABLE_CHANNEL, bits, bits, ChannelNo)) return(kFALSE);
	return(kTRUE);
}

Bool_t TC2LVulomTB::DisableChannel(Int_t ChannelNo) {
	TArrayI bits(1); bits[0] = 0;
	if (!this->ExecFunction(kM2L_FCT_VULOM_TB_DISABLE_CHANNEL, bits, bits, ChannelNo)) return(kFALSE);
	return(kTRUE);
}

Bool_t TC2LVulomTB::SetEnableMask(UInt_t & Bits) {
	TArrayI bits(1); bits[0] = Bits;
	if (!this->ExecFunction(kM2L_FCT_VULOM_TB_SET_ENABLE_MASK, bits, bits, kVulomTBAllChannels)) return(kFALSE);
	Bits = bits[0];
	return(kTRUE);
}

Bool_t TC2LVulomTB::GetEnableMask(UInt_t & Bits) {
	TArrayI dataSend(0);
	TArrayI bits;
	if (!this->ExecFunction(kM2L_FCT_VULOM_TB_GET_ENABLE_MASK, dataSend, bits, kVulomTBAllChannels)) return(kFALSE);
	Bits = bits[0];
	return(kTRUE);
}

Bool_t TC2LVulomTB::SetScaleDown(Int_t & ScaleDown, Int_t ChannelNo) {
	TArrayI scaleDown(1); scaleDown[0] = ScaleDown;
	if (!this->ExecFunction(kM2L_FCT_VULOM_TB_SET_SCALE_DOWN, scaleDown, scaleDown, ChannelNo)) return(kFALSE);
	ScaleDown = scaleDown[0];
	return(kTRUE);
}

Bool_t TC2LVulomTB::ReadScaleDown(TArrayI & ScaleDown) {
	TArrayI dataSend(0);
	if (!this->ExecFunction(kM2L_FCT_VULOM_TB_GET_SCALE_DOWN, dataSend, ScaleDown, kVulomTBAllChannels)) return(kFALSE);
	return(kTRUE);
}

Bool_t TC2LVulomTB::GetScaleDown(Int_t & ScaleDown, Int_t ChannelNo) {
	TArrayI dataSend(0);
	TArrayI scaleDown;
	if (!this->ExecFunction(kM2L_FCT_VULOM_TB_GET_SCALE_DOWN, dataSend, scaleDown, ChannelNo)) return(kFALSE);
	ScaleDown = scaleDown[0];
	return(kTRUE);
}

Bool_t TC2LVulomTB::ClearScaler(Int_t ChannelNo) {
	TArrayI dataSend(0);
	if (!this->ExecFunction(kM2L_FCT_VULOM_TB_CLEAR_SCALER, dataSend, dataSend, ChannelNo)) return(kFALSE);
	return(kTRUE);
}

Bool_t TC2LVulomTB::RestoreSettings(const Char_t * SettingsFile) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TC2LVulomTB::RestoreSettings
// Purpose:        Read settings from file
// Arguments:      Char_t * SettingsFile   -- settings file
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Reads env data from file.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (fSettingsFile.IsNull()) fSettingsFile = Form("%sSettings.rc", this->GetName());

	if (SettingsFile == NULL || *SettingsFile == '\0') SettingsFile = fSettingsFile.Data();

	TString settingsFile = SettingsFile;
	gSystem->ExpandPathName(settingsFile);
	if (gSystem->AccessPathName(settingsFile.Data())) {
		gMrbLog->Err()	<< "Settings file not found - " << settingsFile << endl;
		gMrbLog->Flush("RestoreSettings");
		return(kFALSE);
	}

	TMrbResource * settings = new TMrbResource("VulomTB", settingsFile.Data());
	TString moduleName; settings->Get(moduleName, ".ModuleName", "");
	if (moduleName.IsNull()) {
		gMrbLog->Err()	<< "[" << settingsFile << "] Wrong format - module name missing" << endl;
		gMrbLog->Flush("RestoreSettings");
		return(kFALSE);
	}

	TString dotMod = Form(".%s", moduleName.Data());

	for (Int_t chn = 0; chn < kVulomTBNofChannels; chn++) {
		Bool_t enable = settings->Get(dotMod.Data(), "Enable", Form("%d", chn), kFALSE);
		if (enable) this->EnableChannel(chn); else this->DisableChannel(chn);
	}

	for (Int_t chn = 0; chn < kVulomTBNofChannels; chn++) {
		Int_t scd = settings->Get(dotMod.Data(), "ScaleDown", Form("%d", chn), 0);
		this->SetScaleDown(scd, chn);
	}

	return(kTRUE);
}

Bool_t TC2LVulomTB::SaveSettings(const Char_t * SettingsFile) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TC2LVulomTB::SaveSettings
// Purpose:        Write settings to file
// Arguments:      Char_t * SettingsFile   -- settings file
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Write env data to file.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (fSettingsFile.IsNull()) fSettingsFile = Form("%sSettings.rc", this->GetName());

	if (SettingsFile == NULL || *SettingsFile == '\0') SettingsFile = fSettingsFile.Data();

	TString settingsFile = SettingsFile;

	ofstream settings(settingsFile.Data(), ios::out);
	if (!settings.good()) {
		gMrbLog->Err() << gSystem->GetError() << " - " << settingsFile << endl;
		gMrbLog->Flush(this->ClassName(), "SaveSettings");
		return(kFALSE);
	}

	TString tmplPath = gEnv->GetValue("TMrbConfig.TemplatePath", ".:config:$(MARABOU)/templates/config");
	TString tf = "Module_VulomTB.rc.code";
	gSystem->ExpandPathName(tmplPath);

	const Char_t * fp = gSystem->Which(tmplPath.Data(), tf.Data());
	if (fp == NULL) {
		gMrbLog->Err()	<< "Template file not found -" << endl
						<<           "                 Searching on path " << tmplPath << endl
						<<           "                 for file          " << tf << endl;
		gMrbLog->Flush("SaveSettings");
		return(kFALSE);
	}

	tf = fp;

	TMrbLofNamedX tags;
	tags.AddNamedX(TC2LVulomTB::kRcModuleSettings, "MODULE_SETTINGS");

	TMrbTemplate tmpl;
	TString line;
	if (tmpl.Open(tf.Data(), &tags)) {
		for (;;) {
			TMrbNamedX * tag = tmpl.Next(line);
			if (tmpl.IsEof()) break;
			if (tmpl.IsError()) continue;
			if (tmpl.Status() & TMrbTemplate::kNoTag) {
				if (line.Index("//-") != 0) settings << line << endl;
			} else {
				switch (tag->GetIndex()) {
					case TC2LVulomTB::kRcModuleSettings:
					{
						TDatime d;
						tmpl.InitializeCode("%Preamble%");
						tmpl.Substitute("$author", gSystem->Getenv("USER"));
						tmpl.Substitute("$date", d.AsString());
						tmpl.Substitute("$moduleName", this->GetName());
						tmpl.WriteCode(settings);

						UInt_t enaMask;
						this->GetEnableMask(enaMask);
						UInt_t bit = 0x1;
						for (Int_t chn = 0; chn < kVulomTBNofChannels; chn++) {
							tmpl.InitializeCode("%Channels%");
							tmpl.Substitute("$moduleName", this->GetName());
							tmpl.Substitute("$chn", chn);
							tmpl.Substitute("$enaFlag", (enaMask & bit) ? "TRUE" : "FALSE");
							bit <<= 1;
							Int_t scd;
							this->GetScaleDown(scd, chn);
							tmpl.Substitute("$scaleDown", scd);
							tmpl.WriteCode(settings);
						}
					}
				}
			}
		}
	}
	settings.close();
	fSettingsFile = settingsFile;
	gMrbLog->Out()  << "[" << this->GetName() << "] Settings saved to file " << settingsFile << endl;
	gMrbLog->Flush(this->ClassName(), "SaveSettings", setblue);
	return(kTRUE);
}
 TC2LVulomTB.cxx:1
 TC2LVulomTB.cxx:2
 TC2LVulomTB.cxx:3
 TC2LVulomTB.cxx:4
 TC2LVulomTB.cxx:5
 TC2LVulomTB.cxx:6
 TC2LVulomTB.cxx:7
 TC2LVulomTB.cxx:8
 TC2LVulomTB.cxx:9
 TC2LVulomTB.cxx:10
 TC2LVulomTB.cxx:11
 TC2LVulomTB.cxx:12
 TC2LVulomTB.cxx:13
 TC2LVulomTB.cxx:14
 TC2LVulomTB.cxx:15
 TC2LVulomTB.cxx:16
 TC2LVulomTB.cxx:17
 TC2LVulomTB.cxx:18
 TC2LVulomTB.cxx:19
 TC2LVulomTB.cxx:20
 TC2LVulomTB.cxx:21
 TC2LVulomTB.cxx:22
 TC2LVulomTB.cxx:23
 TC2LVulomTB.cxx:24
 TC2LVulomTB.cxx:25
 TC2LVulomTB.cxx:26
 TC2LVulomTB.cxx:27
 TC2LVulomTB.cxx:28
 TC2LVulomTB.cxx:29
 TC2LVulomTB.cxx:30
 TC2LVulomTB.cxx:31
 TC2LVulomTB.cxx:32
 TC2LVulomTB.cxx:33
 TC2LVulomTB.cxx:34
 TC2LVulomTB.cxx:35
 TC2LVulomTB.cxx:36
 TC2LVulomTB.cxx:37
 TC2LVulomTB.cxx:38
 TC2LVulomTB.cxx:39
 TC2LVulomTB.cxx:40
 TC2LVulomTB.cxx:41
 TC2LVulomTB.cxx:42
 TC2LVulomTB.cxx:43
 TC2LVulomTB.cxx:44
 TC2LVulomTB.cxx:45
 TC2LVulomTB.cxx:46
 TC2LVulomTB.cxx:47
 TC2LVulomTB.cxx:48
 TC2LVulomTB.cxx:49
 TC2LVulomTB.cxx:50
 TC2LVulomTB.cxx:51
 TC2LVulomTB.cxx:52
 TC2LVulomTB.cxx:53
 TC2LVulomTB.cxx:54
 TC2LVulomTB.cxx:55
 TC2LVulomTB.cxx:56
 TC2LVulomTB.cxx:57
 TC2LVulomTB.cxx:58
 TC2LVulomTB.cxx:59
 TC2LVulomTB.cxx:60
 TC2LVulomTB.cxx:61
 TC2LVulomTB.cxx:62
 TC2LVulomTB.cxx:63
 TC2LVulomTB.cxx:64
 TC2LVulomTB.cxx:65
 TC2LVulomTB.cxx:66
 TC2LVulomTB.cxx:67
 TC2LVulomTB.cxx:68
 TC2LVulomTB.cxx:69
 TC2LVulomTB.cxx:70
 TC2LVulomTB.cxx:71
 TC2LVulomTB.cxx:72
 TC2LVulomTB.cxx:73
 TC2LVulomTB.cxx:74
 TC2LVulomTB.cxx:75
 TC2LVulomTB.cxx:76
 TC2LVulomTB.cxx:77
 TC2LVulomTB.cxx:78
 TC2LVulomTB.cxx:79
 TC2LVulomTB.cxx:80
 TC2LVulomTB.cxx:81
 TC2LVulomTB.cxx:82
 TC2LVulomTB.cxx:83
 TC2LVulomTB.cxx:84
 TC2LVulomTB.cxx:85
 TC2LVulomTB.cxx:86
 TC2LVulomTB.cxx:87
 TC2LVulomTB.cxx:88
 TC2LVulomTB.cxx:89
 TC2LVulomTB.cxx:90
 TC2LVulomTB.cxx:91
 TC2LVulomTB.cxx:92
 TC2LVulomTB.cxx:93
 TC2LVulomTB.cxx:94
 TC2LVulomTB.cxx:95
 TC2LVulomTB.cxx:96
 TC2LVulomTB.cxx:97
 TC2LVulomTB.cxx:98
 TC2LVulomTB.cxx:99
 TC2LVulomTB.cxx:100
 TC2LVulomTB.cxx:101
 TC2LVulomTB.cxx:102
 TC2LVulomTB.cxx:103
 TC2LVulomTB.cxx:104
 TC2LVulomTB.cxx:105
 TC2LVulomTB.cxx:106
 TC2LVulomTB.cxx:107
 TC2LVulomTB.cxx:108
 TC2LVulomTB.cxx:109
 TC2LVulomTB.cxx:110
 TC2LVulomTB.cxx:111
 TC2LVulomTB.cxx:112
 TC2LVulomTB.cxx:113
 TC2LVulomTB.cxx:114
 TC2LVulomTB.cxx:115
 TC2LVulomTB.cxx:116
 TC2LVulomTB.cxx:117
 TC2LVulomTB.cxx:118
 TC2LVulomTB.cxx:119
 TC2LVulomTB.cxx:120
 TC2LVulomTB.cxx:121
 TC2LVulomTB.cxx:122
 TC2LVulomTB.cxx:123
 TC2LVulomTB.cxx:124
 TC2LVulomTB.cxx:125
 TC2LVulomTB.cxx:126
 TC2LVulomTB.cxx:127
 TC2LVulomTB.cxx:128
 TC2LVulomTB.cxx:129
 TC2LVulomTB.cxx:130
 TC2LVulomTB.cxx:131
 TC2LVulomTB.cxx:132
 TC2LVulomTB.cxx:133
 TC2LVulomTB.cxx:134
 TC2LVulomTB.cxx:135
 TC2LVulomTB.cxx:136
 TC2LVulomTB.cxx:137
 TC2LVulomTB.cxx:138
 TC2LVulomTB.cxx:139
 TC2LVulomTB.cxx:140
 TC2LVulomTB.cxx:141
 TC2LVulomTB.cxx:142
 TC2LVulomTB.cxx:143
 TC2LVulomTB.cxx:144
 TC2LVulomTB.cxx:145
 TC2LVulomTB.cxx:146
 TC2LVulomTB.cxx:147
 TC2LVulomTB.cxx:148
 TC2LVulomTB.cxx:149
 TC2LVulomTB.cxx:150
 TC2LVulomTB.cxx:151
 TC2LVulomTB.cxx:152
 TC2LVulomTB.cxx:153
 TC2LVulomTB.cxx:154
 TC2LVulomTB.cxx:155
 TC2LVulomTB.cxx:156
 TC2LVulomTB.cxx:157
 TC2LVulomTB.cxx:158
 TC2LVulomTB.cxx:159
 TC2LVulomTB.cxx:160
 TC2LVulomTB.cxx:161
 TC2LVulomTB.cxx:162
 TC2LVulomTB.cxx:163
 TC2LVulomTB.cxx:164
 TC2LVulomTB.cxx:165
 TC2LVulomTB.cxx:166
 TC2LVulomTB.cxx:167
 TC2LVulomTB.cxx:168
 TC2LVulomTB.cxx:169
 TC2LVulomTB.cxx:170
 TC2LVulomTB.cxx:171
 TC2LVulomTB.cxx:172
 TC2LVulomTB.cxx:173
 TC2LVulomTB.cxx:174
 TC2LVulomTB.cxx:175
 TC2LVulomTB.cxx:176
 TC2LVulomTB.cxx:177
 TC2LVulomTB.cxx:178
 TC2LVulomTB.cxx:179
 TC2LVulomTB.cxx:180
 TC2LVulomTB.cxx:181
 TC2LVulomTB.cxx:182
 TC2LVulomTB.cxx:183
 TC2LVulomTB.cxx:184
 TC2LVulomTB.cxx:185
 TC2LVulomTB.cxx:186
 TC2LVulomTB.cxx:187
 TC2LVulomTB.cxx:188
 TC2LVulomTB.cxx:189
 TC2LVulomTB.cxx:190
 TC2LVulomTB.cxx:191
 TC2LVulomTB.cxx:192
 TC2LVulomTB.cxx:193
 TC2LVulomTB.cxx:194
 TC2LVulomTB.cxx:195
 TC2LVulomTB.cxx:196
 TC2LVulomTB.cxx:197
 TC2LVulomTB.cxx:198
 TC2LVulomTB.cxx:199
 TC2LVulomTB.cxx:200
 TC2LVulomTB.cxx:201
 TC2LVulomTB.cxx:202
 TC2LVulomTB.cxx:203
 TC2LVulomTB.cxx:204
 TC2LVulomTB.cxx:205
 TC2LVulomTB.cxx:206
 TC2LVulomTB.cxx:207
 TC2LVulomTB.cxx:208
 TC2LVulomTB.cxx:209
 TC2LVulomTB.cxx:210
 TC2LVulomTB.cxx:211
 TC2LVulomTB.cxx:212
 TC2LVulomTB.cxx:213
 TC2LVulomTB.cxx:214
 TC2LVulomTB.cxx:215
 TC2LVulomTB.cxx:216
 TC2LVulomTB.cxx:217
 TC2LVulomTB.cxx:218
 TC2LVulomTB.cxx:219
 TC2LVulomTB.cxx:220
 TC2LVulomTB.cxx:221
 TC2LVulomTB.cxx:222
 TC2LVulomTB.cxx:223
 TC2LVulomTB.cxx:224
 TC2LVulomTB.cxx:225
 TC2LVulomTB.cxx:226
 TC2LVulomTB.cxx:227
 TC2LVulomTB.cxx:228
 TC2LVulomTB.cxx:229
 TC2LVulomTB.cxx:230
 TC2LVulomTB.cxx:231
 TC2LVulomTB.cxx:232
 TC2LVulomTB.cxx:233
 TC2LVulomTB.cxx:234
 TC2LVulomTB.cxx:235
 TC2LVulomTB.cxx:236
 TC2LVulomTB.cxx:237
 TC2LVulomTB.cxx:238
 TC2LVulomTB.cxx:239
 TC2LVulomTB.cxx:240
 TC2LVulomTB.cxx:241
 TC2LVulomTB.cxx:242
 TC2LVulomTB.cxx:243
 TC2LVulomTB.cxx:244
 TC2LVulomTB.cxx:245
 TC2LVulomTB.cxx:246
 TC2LVulomTB.cxx:247
 TC2LVulomTB.cxx:248
 TC2LVulomTB.cxx:249
 TC2LVulomTB.cxx:250
 TC2LVulomTB.cxx:251
 TC2LVulomTB.cxx:252
 TC2LVulomTB.cxx:253
 TC2LVulomTB.cxx:254
 TC2LVulomTB.cxx:255
 TC2LVulomTB.cxx:256
 TC2LVulomTB.cxx:257
 TC2LVulomTB.cxx:258
 TC2LVulomTB.cxx:259
 TC2LVulomTB.cxx:260
 TC2LVulomTB.cxx:261
 TC2LVulomTB.cxx:262
 TC2LVulomTB.cxx:263
 TC2LVulomTB.cxx:264
 TC2LVulomTB.cxx:265
 TC2LVulomTB.cxx:266
 TC2LVulomTB.cxx:267
 TC2LVulomTB.cxx:268
 TC2LVulomTB.cxx:269
 TC2LVulomTB.cxx:270
 TC2LVulomTB.cxx:271
 TC2LVulomTB.cxx:272
 TC2LVulomTB.cxx:273
 TC2LVulomTB.cxx:274
 TC2LVulomTB.cxx:275
 TC2LVulomTB.cxx:276
 TC2LVulomTB.cxx:277
 TC2LVulomTB.cxx:278
 TC2LVulomTB.cxx:279
 TC2LVulomTB.cxx:280
 TC2LVulomTB.cxx:281
 TC2LVulomTB.cxx:282
 TC2LVulomTB.cxx:283
 TC2LVulomTB.cxx:284
 TC2LVulomTB.cxx:285
 TC2LVulomTB.cxx:286
 TC2LVulomTB.cxx:287
 TC2LVulomTB.cxx:288
 TC2LVulomTB.cxx:289
 TC2LVulomTB.cxx:290
 TC2LVulomTB.cxx:291
 TC2LVulomTB.cxx:292
 TC2LVulomTB.cxx:293
 TC2LVulomTB.cxx:294
 TC2LVulomTB.cxx:295
 TC2LVulomTB.cxx:296
 TC2LVulomTB.cxx:297
 TC2LVulomTB.cxx:298
 TC2LVulomTB.cxx:299
 TC2LVulomTB.cxx:300
 TC2LVulomTB.cxx:301
 TC2LVulomTB.cxx:302
 TC2LVulomTB.cxx:303
 TC2LVulomTB.cxx:304
 TC2LVulomTB.cxx:305
 TC2LVulomTB.cxx:306
 TC2LVulomTB.cxx:307
 TC2LVulomTB.cxx:308
 TC2LVulomTB.cxx:309
 TC2LVulomTB.cxx:310
 TC2LVulomTB.cxx:311
 TC2LVulomTB.cxx:312
 TC2LVulomTB.cxx:313
 TC2LVulomTB.cxx:314
 TC2LVulomTB.cxx:315
 TC2LVulomTB.cxx:316
 TC2LVulomTB.cxx:317
 TC2LVulomTB.cxx:318