Commit a3c7f18b authored by dino's avatar dino
Browse files

Some fixes in the calculation of T0 in PSAFilterGridSearch.

Possibility to exclude it with keyword NoFitTZero in PSAFilter.conf
Added file zTemplates/SummaryKeywords.txt with summary of the keywords of the configuration files of the various actor

git-svn-id: svn://gal-serv.lnl.infn.it/agata/trunk/narval_emulator@1069 170316e4-aea8-4b27-aad4-0380ec0519c9
parent b1de6255
......@@ -69,6 +69,7 @@ PSAFilter::PSAFilter() :
fCoarseOnly = false;
fPsaSegCenter = false;
fFullSearch = false;
fFitTZero = true;
fDistMetric = -1; // unititialized !!
fUseMultiHist = true;
......@@ -315,6 +316,10 @@ void PSAFilter::GetParameters(UInt_t *error_code)
}
ok = true;
}
else if( stringEq(keyw, "NoFitTZero") ) {
fFitTZero = false;
ok = true;
}
else if( stringEq(keyw, "Threads") ) {
#ifdef PSA_THREADED
ok = 2 == sscanf(data.c_str(), "%d %d", &fPsaCount, &fPsaModulo);
......@@ -450,8 +455,12 @@ Int_t PSAFilter::SetOutput(int slot)
crystal_status = pSlot->crystal_status;
CoreE0 = pSlot->CoreE[0];
CoreE1 = pSlot->CoreE[1];
CoreT0 = pSlot->CoreT[0] + pSlot->shiftT0;
CoreT1 = pSlot->CoreT[1] + pSlot->shiftT0;
// Add the T0 correction as determined by the PSA. --> The overall Ge-Ge timing becomes ~10% worse, with larger tails.
// If the T0 shift is subtracted the overall ge-ge timing becomes ~2 worse (but very symmetric, meaning added noise).
// Therefore, it is better not to correct. However, one should also question the T0 realignment done in the PSA!
CoreT0 = pSlot->CoreT[0] /*+ pSlot->shiftT0*/;
CoreT1 = pSlot->CoreT[1] /*+ pSlot->shiftT0*/;
//myAno.Set(crystal_id, 0);
//myAno.fRealSize = sizeof(crystal_id);
......
......@@ -229,6 +229,7 @@ public:
Bool_t fCoarseOnly;
Bool_t fPsaSegCenter;
Bool_t fFullSearch;
Bool_t fFitTZero;
Float_t fDistMetric;
Float_t fTauSlice[7];
......
......@@ -71,6 +71,7 @@ PSAFilterGridSearch::PSAFilterGridSearch()
gCoarseOnly = false;
gPsaSegCenter = false;
gFullSearch = false;
gFitTZero = true;
firstEventPSA = true;
......@@ -106,6 +107,7 @@ Int_t PSAFilterGridSearch::AlgoSpecificInitialise()
gCoarseOnly = fCoarseOnly;
gPsaSegCenter = fPsaSegCenter;
gFullSearch = fFullSearch;
gFitTZero = fFitTZero;
gDistMetric = fDistMetric;
if(gDistMetric < 0)
gDistMetric = PMETRIC;
......@@ -396,7 +398,7 @@ Int_t PSAFilterGridSearch::AlgoSpecificInitialise()
if(!gPsaSegCenter) {
if(numFit_T0) {
PsaSpecTZero = new MultiHist<unsigned int>(4, specLenT);
PsaSpecTZero = new MultiHist<unsigned int>(40, specLenT);
PsaSpecTZero->setFileName(fOdirPrefix+"Psa?Tzero.spec");
PsaSpecTZero->setComment ("Time zero and time shift of event (ns)");
hGroup.add(PsaSpecTZero);
......@@ -668,7 +670,7 @@ Int_t PSAFilterGridSearch::Process(int slot, int count)
bool extraLoop = false; // the final loop in which also the search for two hits can be done
bool doTwoHits = false; // looking for two hits in a segment is done in the extraloop
if(numFit_T0<1) { // no T0 fit --> execute the final loop rightaway
if(!gFitTZero || numFit_T0<1) { // no T0 fit --> execute the final loop rightaway
extraLoop = true;
if(gTryTwoHits && gUseAdaptive)
doTwoHits = true; // looking also for two hits, if requested
......@@ -2387,18 +2389,20 @@ Int_t PSAFilterGridSearch::AlgoSpecificPostProcess(int slot)
PsaSpecEner->Incr(NSEGS+3, (int)(eSumCore*fEnergyGain)); // 39 core
}
if(PsaSpecTZero) {
// CoreT[0] is the original position of the traces, in samples
int bestT0 = int( pSlot->CoreT[0]*SAMP_STEP); // original position
PsaSpecTZero->incr(0, bestT0);
int bestT1 = int((pSlot->CoreT[0]+pSlot->shiftT0)*SAMP_STEP); // corrected position
PsaSpecTZero->incr(1, bestT1);
int bestT2 = int((pSlot->CoreT[0]-pSlot->shiftT0)*SAMP_STEP); // corrected position (with reversed sign)
PsaSpecTZero->incr(2, bestT2);
int bestDT = int(pSlot->shiftT0*SAMP_STEP + specLenT/2); // the correction, placed in the middle of the spectrum
PsaSpecTZero->incr(3, bestDT);
PsaSpecTZero->incr(3, pSlot->tCycles); // number of search-tShift cycles (at the beginning of the spectrum)
}
if(PsaSpecStat)
// CoreT[0] is the original position of the traces, in samples
PsaSpecTZero->incr(36+0, bestDT);
PsaSpecTZero->incr(36+0, pSlot->tCycles); // number of search-tShift cycles (at the beginning of the spectrum)
PsaSpecTZero->incr(36+1, bestT0);
PsaSpecTZero->incr(36+2, bestT1);
PsaSpecTZero->incr(36+3, bestT2);
if(numNetSegs == 1)
PsaSpecTZero->incr(pOut->netChargeSeg, bestDT);
}
if(PsaSpecStat && numFit_T0>1)
PsaSpecStat->Incr(0, numNetSegs); // distribution of number of hit segments
#endif //PSA_MULTIHIST
......@@ -2658,7 +2662,6 @@ void PSAFilterGridSearch::MatChi2(float chi, pointPsa* pPsa)
}
#endif // #ifdef MATRCHI2
// use the complete trace
// returns the time shift with respect to SAMP0 in units of samples
Float_t PSAFilterGridSearch::FitT0AfterPSA(pointFull &PF)
......
......@@ -84,6 +84,7 @@ private:
bool gCoarseOnly;
bool gPsaSegCenter;
bool gFullSearch;
bool gFitTZero;
float gDistMetric; // initialized to PMETRIC but user settable; may create inconsistencies if USE_SSE_VERSION
float fDistRescale; // used to consider RESCALE when calculating chi2 for non rescaled residues
......
......@@ -44,7 +44,7 @@ const float tScale = tStep; // 1ns/ch
const int tGain = 10; // 1; // to increase the scale and length of ...TT1 and ...TT2 spectra in a (more or less) consistent way
const int speTTlen = int(1000*tScale);
#if 0 && defined(_DEBUG) // set to 1 to enable writing the intermediate waves while debugging
#if 1 && defined(_DEBUG) // set to 1 to enable writing the intermediate waves while debugging
# define WRITEWORKINGWAVE1(p1,p2) WriteWorkingWave(p1, p2)
#ifdef TIMING_CFD
# define WRITEWORKINGWAVE2(p1,p2) WriteWorkingWave(p1, p2)
......@@ -145,6 +145,13 @@ PreprocessingFilterPSA::PreprocessingFilterPSA() :
PreprocessingFilterPSA::~PreprocessingFilterPSA()
{
for(int nn = 0; nn < CrystalInterface::kNbSegments; nn++) {
delete [] sTracesSG[nn];
}
for(int nn = 0; nn < CrystalInterface::kNbCores; nn++) {
delete [] sTracesCC[nn];
}
cServer.Finish();
#ifdef PPF_FromGRU
......@@ -171,7 +178,7 @@ Int_t PreprocessingFilterPSA::AlgoSpecificInitialise()
// calibrations and other parameters
CC.SetTriggerLevel(fCoreEnerMin);
CC.SetSegMinEnergy(fPrepSegEmin);
if( !CC.ReadCalibCoeffs(setupFile, true) ) {
if( !CC.ReadCalibCoeffs(setupFile, false) ) {
cout << "Error decoding file " << setupFile << endl;
return 130;
}
......@@ -186,6 +193,13 @@ Int_t PreprocessingFilterPSA::AlgoSpecificInitialise()
CC.CalcDifferentialXtalk(xFactor);
}
for(int nn = 0; nn < CrystalInterface::kNbSegments; nn++) {
sTracesSG[nn] = new Float_t [defTraceLengthRaw];
}
for(int nn = 0; nn < CrystalInterface::kNbCores; nn++) {
sTracesCC[nn] = new Float_t [defTraceLengthRaw];
}
ResetTraceLength();
#ifdef READ_TSHIFT_CORRECTION
......@@ -524,10 +538,10 @@ bool PreprocessingFilterPSA::initPresort()
PreSpecTT1->setComment("time spectra, before shifting the traces)");
hGroup.add(PreSpecTT1);
//PreSpecTT2 = new MultiHist<unsigned int>(2, 40, speTTlen);
//PreSpecTT2->setFileName(fOdirPrefix+"Prep?TT2.spec");
//PreSpecTT2->setComment("time spectra after shifting the traces)");
//hGroup.add(PreSpecTT2);
PreSpecTT2 = new MultiHist<unsigned int>(2, 40, speTTlen);
PreSpecTT2->setFileName(fOdirPrefix+"Prep?TT2.spec");
PreSpecTT2->setComment("time spectra after shifting the traces)");
hGroup.add(PreSpecTT2);
PreSpecEner = new MultiHist<unsigned int>(2, CC.nSG + 2*CC.nCC, specLenE);
PreSpecEner->setFileName(fOdirPrefix+"Prep?Ener.spec");
......@@ -760,22 +774,32 @@ bool PreprocessingFilterPSA::ProcessEvent(int &segMult, float &eSumSG1, float
////// TIMING, done with fTT ///////
////////////////////////////////////
//// copy triggering core into the "netcharge" wave
// CC.pCC[iTR].tmove is a global event shift and is not to be applied here
WRITEWORKINGWAVE1(fTracesCC[iTR], true);
//ShiftMoveTrace(fTracesCC[iTR], nNsamp, 0, fTC);
memcpy(fTC, fTracesCC[iTR], nNsamp*sizeof(float));
WRITEWORKINGWAVE1(fTC, true);
// Apply time shifts specified in PreprocessingFilterPSA.conf
// to the cores and the net-charge segments needed for timing
// Being the reference for all time shifts the triggering core is not moved
for(int ic = 0; ic < nCC; ic++) {
WRITEWORKINGWAVE1(fTracesCC[ic], true);
float xmove = (ic==iTR) ? 0 : CC.pCC[ic].tmove/tStep;
ShiftMoveTrace(fTracesCC[ic], nNsamp, xmove, sTracesCC[ic]);
WRITEWORKINGWAVE1(sTracesCC[ic], true);
}
for(int is = 0; is < nSegFold; is++) {
int ns = netChargeSegs[is];
WRITEWORKINGWAVE1(fTracesSG[ns], true);
ShiftMoveTrace(fTracesSG[ns], nNsamp, CC.pSG[ns].tmove/tStep, sTracesSG[ns]);
WRITEWORKINGWAVE1(sTracesSG[ns], true);
}
//// copy the triggering core into the "netcharge" wave
memcpy(fTC, sTracesCC[iTR], nNsamp*sizeof(float));
//// calculate the sum of net-charge waves for the trigger
//// calculate the sum of shifted net-charge waves for the trigger
// WE SHOULD PROBABLY EXCLUDE FROM THE SUM THE VERY LOW ENERGY SEGMENTS,
// BY SETTING A THRESHOLD ON A FRACTION OF THE CORE ENERGY
memset(fTS, 0, sizeof(float)*nNsamp);
for(int is = 0; is < nSegFold; is++) {
int ns = netChargeSegs[is];
WRITEWORKINGWAVE1(fTracesSG[ns], true);
ShiftAccuTrace(fTracesSG[ns], nNsamp, CC.pSG[ns].tmove/tStep, fTS);
WRITEWORKINGWAVE1(fTS, true);
ShiftAccuTrace(sTracesSG[ns], nNsamp, 0, fTS);
}
//// sum of core and net-charge segments
......@@ -821,7 +845,7 @@ bool PreprocessingFilterPSA::ProcessEvent(int &segMult, float &eSumSG1, float
#endif
//// put both trigger times to the same value
CoreT[0] = CoreT[1] = tRefCC;
CoreT[0] = CoreT[1] = tRefCC /*+ CC.pCC[iTR].tmove/tStep*/;
#if 0
//// select only events in a given time range
......@@ -849,25 +873,25 @@ bool PreprocessingFilterPSA::ProcessEvent(int &segMult, float &eSumSG1, float
//// time alignment of core and traces
float tmp[100]; // intermediate storage until writing an in-place shift
// Shift CC's and SG's by the amount that moves the trigger point to defTriggerSample+defTriggerSamplePlus (normally 30)
// The final shift to (defTriggerSample/4)*4 is done in PreprocessingFilter::SetOutput()
// fHandShift is an ad-hoc common shift to have the traces well positioned in the PSA.
float fHandShift = CC.pCC[iTR].tmove/tStep; // CC.pCC[iTR].tmove is interpreted as global shift
float fHandShift = CC.pCC[iTR].tmove/tStep; // is interpreted as global shift
float fshiftCC = (defTriggerSample+defTriggerSamplePlus) - tRefCC + fHandShift;
#ifdef TSHIFT_CORRETCTION
float extraShift = getTstampFileValue(timestamp);
fshiftCC += extraShift;
#endif
for(int nc = 0; nc < nCC; nc++) {
ShiftMoveTrace(fTracesCC[nc], nNsamp, fshiftCC, tmp); // no extra shift for the cores
memcpy(fTracesCC[nc], tmp, sizeof(tmp));
float xmove = (nc==iTR) ? fshiftCC : fshiftCC + CC.pCC[nc].tmove/tStep;
ShiftMoveTrace(fTracesCC[nc], nNsamp, xmove, sTracesCC[nc]);
memcpy(fTracesCC[nc], sTracesCC[nc], sizeof(float)*nNsamp);
}
for(int ns = 0; ns < nSG; ns++) {
// Segments shifted respect to the core as specified (in ns) in the last column of the calibration file
ShiftMoveTrace(fTracesSG[ns], nNsamp, fshiftCC + CC.pSG[ns].tmove/tStep, tmp);
memcpy(fTracesSG[ns], tmp, sizeof(tmp));
ShiftMoveTrace(fTracesSG[ns], nNsamp, fshiftCC + CC.pSG[ns].tmove/tStep, sTracesSG[ns]);
memcpy(fTracesSG[ns], sTracesSG[ns], sizeof(float)*nNsamp);
}
// ?????????????????
......@@ -1399,8 +1423,8 @@ void PreprocessingFilterPSA::calcTT(float tRefCC, MultiHist<unsigned int>*specTT
specTT->Incr(0, CC.nSG+2, int((tRefCC-int(tRefCC))*tScale*tGain)); // to verify flatness of subsample distribution
// trigger on the triggering core
float cRefCC = FindTriggerTime(fTracesCC[CC.itrig], trigFraction, trigChansCC);
WRITEWORKINGWAVE1(fTracesCC[CC.itrig], true);
float cRefCC = FindTriggerTime(sTracesCC[CC.itrig], trigFraction, trigChansCC);
WRITEWORKINGWAVE1(sTracesCC[CC.itrig], true);
WRITEWORKINGWAVE2(mwd->MWDptrTFA(), true); // timing filter wave from the trigger
WRITEWORKINGWAVE2(mwd->MWDptrCFD(), true); // cfd wave in the trigger
if(cRefCC < 1.f)
......@@ -1413,8 +1437,8 @@ void PreprocessingFilterPSA::calcTT(float tRefCC, MultiHist<unsigned int>*specTT
// trigger on the second core
int iCC1 = (CC.itrig+1)%ADF::CrystalInterface::kNbCores;
float cRefCC1 = FindTriggerTime(fTracesCC[iCC1], trigFraction, trigChansCC);
WRITEWORKINGWAVE1(fTracesCC[iCC1], true);
float cRefCC1 = FindTriggerTime(sTracesCC[iCC1], trigFraction, trigChansCC);
WRITEWORKINGWAVE1(sTracesCC[iCC1], true);
WRITEWORKINGWAVE2(mwd->MWDptrTFA(), true); // timing filter wave from the trigger
WRITEWORKINGWAVE2(mwd->MWDptrCFD(), true); // cfd wave in the trigger
......@@ -1427,7 +1451,7 @@ void PreprocessingFilterPSA::calcTT(float tRefCC, MultiHist<unsigned int>*specTT
specTT->Incr(1, CC.nSG+2, int(tCC2 + speTTlen/2)); // relative time placed at the center of spectrum
}
#define TT_FOR_ALL_SEGMENT_MULTIPLICITIES
//#define TT_FOR_ALL_SEGMENT_MULTIPLICITIES
#ifndef TT_FOR_ALL_SEGMENT_MULTIPLICITIES
if(nSegFold != 1)
......@@ -1436,8 +1460,8 @@ void PreprocessingFilterPSA::calcTT(float tRefCC, MultiHist<unsigned int>*specTT
for(int nnseg = 0; nnseg < nSegFold; nnseg++) {
int theSeg = netChargeSegs[nnseg];
float tRefSG = FindTriggerTime(fTracesSG[theSeg], trigFraction, trigChansSG);
WRITEWORKINGWAVE1(fTracesSG[theSeg], true);
float tRefSG = FindTriggerTime(sTracesSG[theSeg], trigFraction, trigChansSG);
WRITEWORKINGWAVE1(sTracesSG[theSeg], true);
WRITEWORKINGWAVE2(mwd->MWDptrTFA(), true); // timing filter wave from the trigger
WRITEWORKINGWAVE2(mwd->MWDptrCFD(), true); // cfd wave in the trigger
if(tRefSG < 1.f)
......
......@@ -198,6 +198,10 @@ public:
float *fTFA; // to pass out a copy of the TFA
float *fCFD; // to pass out a copy of the CFD
// float version of the shifted traces
Float_t *sTracesSG[ADF::CrystalInterface::kNbSegments];
Float_t *sTracesCC[ADF::CrystalInterface::kNbCores];
#ifdef TIMING_CFD
MWD *mwd; // the mwd functions
bool bDelay2; // CFD succeeded with longer delay
......
CrystalProducer "ActualClass"
CrystalProducer "ReadDataDir" "ReadDataPrefix"
CrystalProducer "SaveDataDir" "WriteDataDir" "WriteDataPrefix"
CrystalProducer "TstampCorrection"
CrystalProducer "CrystalID"
CrystalProducer "WriteDataMask"
CrystalProducer "DecimateMezzdata" "Decimate_mezzdata"
CrystalProducer "DecimateMezzener" "Decimate_mezzener"
CrystalProducer "WriteCompressed"
CrystalProducer "WriteUnCompressed"
CrystalProducer "WriteDataRange"
CrystalProducer "WriteDataSplit"
CrystalProducer "InputDataFile"
CrystalProducer "NumInputFiles"
CrystalProducer "AllInputFiles"
CrystalProducer "TraceLength"
CrystalProducer "ValidationRate" "TriggerRate"
CrystalProducer "WriteTraces"
CrystalProducer "WriteBaseLines"
CrystalProducer "ProjeM1"
CrystalProducer "TimeStep"
CrystalProducer "MaxTstampSeconds"
CrystalProducer "StopErrorCode"
CrystalProducer "NoMultiHist" "NoLocalSpectra"
CrystalProducer "Verbose"
PreprocessingFilter "ActualClass"
PreprocessingFilter "SaveDataDir" "WriteDataDir" "WriteDataPrefix"
PreprocessingFilter "XtalkFile"
PreprocessingFilter "TraceLengthRaw"
PreprocessingFilter "WriteTraces"
PreprocessingFilter "EnergyGain"
PreprocessingFilter "CoreEnergyGate"
PreprocessingFilter "SegmentEnergyThreshold"
PreprocessingFilter "SegmentFoldGate"
PreprocessingFilter "CFDparamsCC"
PreprocessingFilter "TriggerWithCoreAlone"
PreprocessingFilter "DeadSegment"
PreprocessingFilter "UnstableSegment"
PreprocessingFilter "NoMultiHist" "NoLocalSpectra"
PreprocessingFilter "Verbose"
PSAFilter "ActualClass"
PSAFilter "SaveDataDir" "WriteDataDir" "WriteDataPrefix"
PSAFilter "BasisFile"
PSAFilter "XtalkFile"
PSAFilter "NoMultiHist" "NoLocalSpectra"
PSAFilter "MatrXYZR" "XYZRmatr"
PSAFilter "DistanceMetric"
PSAFilter "GridSearch" "GridSearchType"
PSAFilter "NoFitTZero"
PSAFilter "Threads"
PSAFilter "WriteTraces"
PSAFilter "WritePsaHits"
PSAFilter "EnergyGain"
PSAFilter "CoreEnergyGate"
PSAFilter "SegmentFoldGate"
PSAFilter "DeadSegment"
PSAFilter "TauSlice"
PSAFilter "Verbose"
PostPSAFilter "ActualClass"
PostPSAFilter "SaveDataDir" "WriteDataDir" "WriteDataPrefix"
PostPSAFilter "WritePsaHits"
PostPSAFilter "CoreEnergyGate"
PostPSAFilter "SegmentFoldGate"
PostPSAFilter "NumberOfHitsGate"
PostPSAFilter "EnergyGain"
PostPSAFilter "LambdaE"
PostPSAFilter "LambdaH"
PostPSAFilter "TrappingFile"
PostPSAFilter "SmearPos"
PostPSAFilter "RecalCC"
PostPSAFilter "RecalSG"
PostPSAFilter "ShiftCC"
PostPSAFilter "ForceSegmentsToCore"
PostPSAFilter "NoMultiHist" "NoLocalSpectra"
PostPSAFilter "Verbose"
AncillaryProducerTCP "ActualClass"
AncillaryProducerTCP "ReadDataDir" "ReadDataPrefix"
AncillaryProducerTCP "SaveDataDir" "WriteDataDir" "WriteDataPrefix"
AncillaryProducerTCP "KeyADF" "AdfKey"
AncillaryProducerTCP "WriteDataMask"
AncillaryProducerTCP "DetectorID"
AncillaryProducerTCP "TcpPort" "PortTCP"
AncillaryProducerTCP "TcpLittleEndian"
AncillaryProducerTCP "EndEventTag"
AncillaryProducerTCP "InputDataFile"
AncillaryProducerTCP "RawXDaq"
AncillaryProducerTCP "EventsPerBlock"
AncillaryProducerTCP "Verbose"
AncillaryFilter "ActualClass"
AncillaryFilter "SaveDataDir" "WriteDataDir" "WriteDataPrefix"
AncillaryFilter "AllPairsMat"
AncillaryFilter "PRISMALUTFile"
AncillaryFilter "PRISMAManager"
AncillaryFilter "WriteRootTree"
AncillaryFilter "TstampFile"
AncillaryFilter "DanteChan"
AncillaryFilter "DantePos"
AncillaryFilter "DanteBeta"
AncillaryFilter "DanteCalX"
AncillaryFilter "DanteCalY"
AncillaryFilter "ReferenceTDC"
AncillaryFilter "DanteTDC"
AncillaryFilter "PrismaTDC"
AncillaryFilter "NoMultiHist" "NoLocalSpectra"
AncillaryFilter "Verbose"
EventBuilder "ActualClass"
EventBuilder "SaveDataDir" "WriteDataDir" "WriteDataPrefix"
EventBuilder "BuilderType"
EventBuilder "KeyIn"
EventBuilder "KeyOut"
EventBuilder "MinFold"
EventBuilder "TimestampCorrect"
EventBuilder "NoMultiHist" "NoLocalSpectra"
EventBuilder "Verbose"
GlobalFilter "ActualClass"
GlobalFilter "SaveDataDir" "WriteDataDir" "WriteDataPrefix"
GlobalFilter "Ancillary"
GlobalFilter "Recoiling"
GlobalFilter "RotoTranslations"
GlobalFilter "GeometrySummary"
GlobalFilter "RecoilBeta"
GlobalFilter "RecoilDirection"
GlobalFilter "SourcePosition"
GlobalFilter "KeepEmpty"
GlobalFilter "DiscardEmpty"
GlobalFilter "EnergyGain"
GlobalFilter "CoreEnergyGate"
GlobalFilter "SumEnergyGate"
GlobalFilter "DetectorFoldGate"
GlobalFilter "WriteMgtHits" "WriteMgtData" "WriteOftHits" "WriteInputHits"
GlobalFilter "WriteRootTree"
GlobalFilter "WriteGsortData"
GlobalFilter "WriteTracked"
GlobalFilter "TimeWindowGeAnc" "TimeWindowGeAncillary"
GlobalFilter "Matrixgg1"
GlobalFilter "Matrixgg2"
GlobalFilter "NoMultiHist" "NoLocalSpectra"
GlobalFilter "Verbose"
GlobalFilter "Debug"
TrackingFilter "ActualClass"
TrackingFilter "SaveDataDir" "WriteDataDir" "WriteDataPrefix"
TrackingFilter "ExcludeTracking"
TrackingFilter "Ancillary"
TrackingFilter "AncillaryRawFrame"
TrackingFilter "Recoiling"
TrackingFilter "RotoTranslations"
TrackingFilter "GeometrySummary"
TrackingFilter "RecoilBeta"
TrackingFilter "RecoilDirection"
TrackingFilter "SourcePosition"
TrackingFilter "KeepEmpty"
TrackingFilter "DiscardEmpty"
TrackingFilter "OutputModel"
TrackingFilter "AcceptanceValue"
TrackingFilter "EnergyGain"
TrackingFilter "CoreEnergyGate"
TrackingFilter "SumEnergyGate"
TrackingFilter "DetectorFoldGate"
TrackingFilter "WriteMgtHits" "WriteMgtData" "WriteOftHits" "WriteInputHits"
TrackingFilter "WriteRootTree"
TrackingFilter "WriteGsortData"
TrackingFilter "WriteTracked"
TrackingFilter "TimeWindowGeAnc" "TimeWindowGeAncillary"
TrackingFilter "Matrixgg1"
TrackingFilter "Matrixgg2"
TrackingFilter "NoMultiHist" "NoLocalSpectra"
TrackingFilter "Verbose"
TrackingFilter "Debug"
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment