still working on Monitor. Shift to TTreeReader
This commit is contained in:
parent
5bb5f58956
commit
56285cef62
|
@ -182,7 +182,7 @@ void GeneralSort::SetUpTree(){
|
||||||
newSaveTree->SetDirectory(saveFile);
|
newSaveTree->SetDirectory(saveFile);
|
||||||
newSaveTree->AutoSave();
|
newSaveTree->AutoSave();
|
||||||
|
|
||||||
newSaveTree->Branch( "evID", &evID, "EventID/l"); // simply copy
|
newSaveTree->Branch( "evID", &evID, "evID/l"); // simply copy
|
||||||
|
|
||||||
eE = new Float_t * [mapping::nDetType];
|
eE = new Float_t * [mapping::nDetType];
|
||||||
eT = new ULong64_t * [mapping::nDetType];
|
eT = new ULong64_t * [mapping::nDetType];
|
||||||
|
@ -198,7 +198,7 @@ void GeneralSort::SetUpTree(){
|
||||||
}
|
}
|
||||||
|
|
||||||
newSaveTree->Branch( mapping::detTypeName[i].c_str(), eE[i], Form("%s[%d]/F", mapping::detTypeName[i].c_str(), mapping::detNum[i]));
|
newSaveTree->Branch( mapping::detTypeName[i].c_str(), eE[i], Form("%s[%d]/F", mapping::detTypeName[i].c_str(), mapping::detNum[i]));
|
||||||
newSaveTree->Branch( (mapping::detTypeName[i]+"_t").c_str(), eT[i], Form("%s_Timestamp[%d]/l", mapping::detTypeName[i].c_str(), mapping::detNum[i]));
|
newSaveTree->Branch( (mapping::detTypeName[i]+"_t").c_str(), eT[i], Form("%s_t[%d]/l", mapping::detTypeName[i].c_str(), mapping::detNum[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -88,9 +88,11 @@ else
|
||||||
echo -e "$CYAN############### Only in SOLARIS MAC can donwload data. skip.$NC"
|
echo -e "$CYAN############### Only in SOLARIS MAC can donwload data. skip.$NC"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "$YELLOW=============================================$NC"
|
if [ -z ${rawDataPath}/RunTimeStamp.dat ]; then
|
||||||
tail -10 ${rawDataPath}/RunTimeStamp.dat
|
echo -e "$YELLOW=============================================$NC"
|
||||||
echo -e "$YELLOW=============================================$NC"
|
tail -10 ${rawDataPath}/RunTimeStamp.dat
|
||||||
|
echo -e "$YELLOW=============================================$NC"
|
||||||
|
fi
|
||||||
|
|
||||||
count=`ls -1 ${rawDataPath}/${expName}_${RUN}_*.sol 2>/dev/null | wc -l`
|
count=`ls -1 ${rawDataPath}/${expName}_${RUN}_*.sol 2>/dev/null | wc -l`
|
||||||
echo -e "========================= Number of Files : ${count}${YELLOW}"
|
echo -e "========================= Number of Files : ${count}${YELLOW}"
|
||||||
|
|
|
@ -300,6 +300,12 @@ void MonPlotter::Plot(){
|
||||||
|
|
||||||
for( int i = 0; i < numPad; i++ ){
|
for( int i = 0; i < numPad; i++ ){
|
||||||
canvas->cd(i+1);
|
canvas->cd(i+1);
|
||||||
|
switch (i){
|
||||||
|
case 0: he_ID->Draw("colz");break;
|
||||||
|
case 1: hxf_ID->Draw("colz");break;
|
||||||
|
case 2: hxn_ID->Draw("colz");break;
|
||||||
|
default:break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,88 +1,158 @@
|
||||||
#define MonAnalyzer_cxx
|
|
||||||
// The class definition in MonAnalyzer.h has been generated automatically
|
#include "../Armory/AnalysisLib.h"
|
||||||
// by the ROOT utility TTree::MakeSelector(). This class is derived
|
#include "../Armory/ClassDetGeo.h"
|
||||||
// from the ROOT class TSelector. For more information on the TSelector
|
#include "../Armory/ClassReactionConfig.h"
|
||||||
// framework see $ROOTSYS/README/README.SELECTOR or the ROOT User Manual.
|
#include "../Armory/ClassCorrParas.h"
|
||||||
|
// #include "../Cleopatra/ClassHelios.h"
|
||||||
|
#include "../Cleopatra/ClassTransfer.h"
|
||||||
|
|
||||||
|
#include "ClassMonPlotter.h"
|
||||||
|
#include "Mapping.h"
|
||||||
|
|
||||||
|
#include "TFile.h"
|
||||||
|
#include "TChain.h"
|
||||||
|
#include "TH1F.h"
|
||||||
|
#include "TTreeReader.h"
|
||||||
|
#include "TTreeReaderValue.h"
|
||||||
|
#include "TTreeReaderArray.h"
|
||||||
|
#include "TClonesArray.h"
|
||||||
|
#include "TH2.h"
|
||||||
|
#include "TStyle.h"
|
||||||
|
#include "TStopwatch.h"
|
||||||
|
|
||||||
|
#include "vector"
|
||||||
|
//^############################################ User setting
|
||||||
|
int rawEnergyRange[2] = { 100, 4000}; /// share with e, xf, xn
|
||||||
|
int energyRange[2] = { 0, 10}; /// in the E-Z plot
|
||||||
|
int rdtDERange[2] = { 0, 80};
|
||||||
|
int rdtERange[2] = { 0, 80};
|
||||||
|
int thetaCMRange[2] = {0, 80};
|
||||||
|
|
||||||
|
double exRange[3] = { 100, -2, 10}; /// bin [keV], low[MeV], high[MeV]
|
||||||
|
|
||||||
|
|
||||||
// The following methods are defined in this file:
|
//---Gate
|
||||||
// Begin(): called every time a loop on the tree starts,
|
bool isTimeGateOn = true;
|
||||||
// a convenient place to create your histograms.
|
int timeGate[2] = {-20, 12}; /// min, max, 1 ch = 10 ns
|
||||||
// SlaveBegin(): called after Begin(), when on PROOF called only on the
|
double eCalCut[2] = {0.5, 50}; /// lower & higher limit for eCal
|
||||||
// slave servers.
|
|
||||||
// Process(): called for each event, in this function you decide what
|
std::vector<int> skipDetID = {11, 16, 23} ;//{2, 11, 17}
|
||||||
// to read and fill your histograms.
|
//^############################################ end of user setting
|
||||||
// SlaveTerminate: called at the end of the loop on the tree, when on PROOF
|
|
||||||
// called only on the slave servers.
|
|
||||||
// Terminate(): called at the end of the loop on the tree,
|
|
||||||
// a convenient place to draw/fit your histograms.
|
|
||||||
//
|
|
||||||
// To use this file, try the following session on your Tree T:
|
|
||||||
//
|
|
||||||
// root> T->Process("MonAnalyzer.C")
|
|
||||||
// root> T->Process("MonAnalyzer.C","some options")
|
|
||||||
// root> T->Process("MonAnalyzer.C+")
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
#include "MonAnalyzer.h"
|
void MonAnalyzer(){
|
||||||
#include <TH2.h>
|
|
||||||
#include <TStyle.h>
|
|
||||||
|
|
||||||
void MonAnalyzer::Begin(TTree * /*tree*/)
|
// TFile * file = new TFile("../root_data/gen_run043.root");
|
||||||
{
|
|
||||||
// The Begin() function is called at the start of the query.
|
|
||||||
// When running with PROOF Begin() is only called on the client.
|
|
||||||
// The tree argument is deprecated (on PROOF 0 is passed).
|
|
||||||
|
|
||||||
TString option = GetOption();
|
TChain *chain = new TChain("gen_tree");
|
||||||
}
|
chain->Add("../root_data/gen_run043.root");
|
||||||
|
|
||||||
void MonAnalyzer::SlaveBegin(TTree * /*tree*/)
|
// chain->Print();
|
||||||
{
|
|
||||||
// The SlaveBegin() function is called after the Begin() function.
|
|
||||||
// When running with PROOF SlaveBegin() is called on each slave server.
|
|
||||||
// The tree argument is deprecated (on PROOF 0 is passed).
|
|
||||||
|
|
||||||
TString option = GetOption();
|
TTreeReader reader(chain);
|
||||||
|
|
||||||
|
TTreeReaderValue<ULong64_t> evID = {reader, "evID"};
|
||||||
|
TTreeReaderArray<Float_t> e = {reader, "e"};
|
||||||
|
TTreeReaderArray<ULong64_t> e_t = {reader, "e_t"};
|
||||||
|
TTreeReaderArray<Float_t> xf = {reader, "xf"};
|
||||||
|
TTreeReaderArray<Float_t> xn = {reader, "xn"};
|
||||||
|
|
||||||
|
TTreeReaderArray<Float_t> rdt = {reader, "rdt"};
|
||||||
|
TTreeReaderArray<ULong64_t> rdt_t = {reader, "rdt_t"};
|
||||||
|
|
||||||
|
//TODO
|
||||||
|
// TTreeReaderArray<TClonesArray> array = {reader, "trace"};
|
||||||
|
|
||||||
|
//*==========================================
|
||||||
|
ULong64_t NumEntries = chain->GetEntries();
|
||||||
|
CorrParas * corr = new CorrParas;
|
||||||
|
DetGeo * detGeo = new DetGeo("detectorGeo.txt");
|
||||||
|
// TransferReaction * transfer = new TransferReaction("reactionConfig.txt");
|
||||||
|
|
||||||
|
MonPlotter ** plotter = new MonPlotter *[detGeo->numGeo];
|
||||||
|
for( int i = 0; i < detGeo->numGeo; i++ ) {
|
||||||
|
plotter[i] = new MonPlotter(i, detGeo, mapping::NRDT);
|
||||||
|
plotter[i]->SetUpCanvas("haha", 500, 3, 2);
|
||||||
|
plotter[i]->SetUpHistograms(rawEnergyRange, energyRange, exRange, thetaCMRange, rdtDERange, rdtERange);
|
||||||
|
}
|
||||||
|
|
||||||
|
double eCal[mapping::NARRAY];
|
||||||
|
double xfCal[mapping::NARRAY];
|
||||||
|
double xnCal[mapping::NARRAY];
|
||||||
|
|
||||||
|
//^###########################################################
|
||||||
|
//^ * Process
|
||||||
|
//^###########################################################
|
||||||
|
ULong64_t processedEntries = 0;
|
||||||
|
float Frac = 0.1;
|
||||||
|
TStopwatch StpWatch;
|
||||||
|
StpWatch.Start();
|
||||||
|
|
||||||
|
while (reader.Next()) {
|
||||||
|
|
||||||
|
// printf("%llu | %llu | %lu\n", processedEntries, *evID, e.GetSize());
|
||||||
|
|
||||||
|
//*============================================= Array;
|
||||||
|
for( int id = 0; id < e.GetSize() ; id++ ){
|
||||||
|
short aID = detGeo->GetArrayID(id);
|
||||||
|
if( aID < 0 ) continue;
|
||||||
|
|
||||||
|
//@================== Filling raw data
|
||||||
|
plotter[aID]->he[id]->Fill(e[id]);
|
||||||
|
plotter[aID]->hxf[id]->Fill(xf[id]);
|
||||||
|
plotter[aID]->hxn[id]->Fill(xn[id]);
|
||||||
|
plotter[aID]->hxf_xn[id]->Fill(xf[id],xn[id]);
|
||||||
|
plotter[aID]->he_xs[id]->Fill(xf[id]+xn[id], e[id]);
|
||||||
|
|
||||||
|
plotter[aID]->he_ID->Fill(id, e[id]);
|
||||||
|
plotter[aID]->hxf_ID->Fill(id, xf[id]);
|
||||||
|
plotter[aID]->hxn_ID->Fill(id, xn[id]);
|
||||||
|
|
||||||
|
// //@==================== Basic gate
|
||||||
|
// if( TMath::IsNaN(e[id]) ) continue ;
|
||||||
|
// if( TMath::IsNaN(xn[id]) && TMath::IsNaN(xf[id]) ) continue ;
|
||||||
|
|
||||||
|
// //@==================== Skip detector
|
||||||
|
// bool skipFlag = false;
|
||||||
|
// for( unsigned int kk = 0; kk < skipDetID.size() ; kk++){
|
||||||
|
// if( id == skipDetID[kk] ) {
|
||||||
|
// skipFlag = true;
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (skipFlag ) continue;
|
||||||
|
|
||||||
|
// //@==================== Calibrations go here
|
||||||
|
// if( corr->xnCorr.size() >= id && corr->xfxneCorr.size() >= id ) xnCal[id] = xn[id] * corr->xnCorr[id] * corr->xfxneCorr[id][1] + corr->xfxneCorr[id][0];
|
||||||
|
// if( corr->xfxneCorr.size() >= id ) xfCal[id] = xf[id] * corr->xfxneCorr[id][1] + corr->xfxneCorr[id][0];
|
||||||
|
// if( corr->eCorr.size() >= id) eCal[id] = e[id] / corr->eCorr[id][0] + corr->eCorr[id][1];
|
||||||
|
|
||||||
|
// if( eCal[id] < eCalCut[0] || eCalCut[1] < eCal[id] ) continue;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}//*==== end of array
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//*============================================ Progress Bar
|
||||||
|
processedEntries ++;
|
||||||
|
if (processedEntries >= NumEntries*Frac - 1 ) {
|
||||||
|
TString msg; msg.Form("%llu", NumEntries/1000);
|
||||||
|
int len = msg.Sizeof();
|
||||||
|
printf(" %3.0f%% (%*llu/%llu k) processed in %6.1f sec | expect %6.1f sec\n",
|
||||||
|
Frac*100, len, processedEntries/1000,NumEntries/1000,StpWatch.RealTime(), StpWatch.RealTime()/Frac);
|
||||||
|
StpWatch.Start(kFALSE);
|
||||||
|
Frac += 0.1;
|
||||||
|
}
|
||||||
|
if( processedEntries > 1000 ) break;
|
||||||
|
|
||||||
|
}//^############################################## End of Process
|
||||||
|
|
||||||
|
for( int i = 0; i < detGeo->numGeo ; i++){
|
||||||
|
plotter[i]->Plot();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MonAnalyzer::Process(Long64_t entry)
|
|
||||||
{
|
|
||||||
// The Process() function is called for each entry in the tree (or possibly
|
|
||||||
// keyed object in the case of PROOF) to be processed. The entry argument
|
|
||||||
// specifies which entry in the currently loaded tree is to be processed.
|
|
||||||
// When processing keyed objects with PROOF, the object is already loaded
|
|
||||||
// and is available via the fObject pointer.
|
|
||||||
//
|
|
||||||
// This function should contain the \"body\" of the analysis. It can contain
|
|
||||||
// simple or elaborate selection criteria, run algorithms on the data
|
|
||||||
// of the event and typically fill histograms.
|
|
||||||
//
|
|
||||||
// The processing can be stopped by calling Abort().
|
|
||||||
//
|
|
||||||
// Use fStatus to set the return value of TTree::Process().
|
|
||||||
//
|
|
||||||
// The return value is currently not used.
|
|
||||||
|
|
||||||
fReader.SetLocalEntry(entry);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MonAnalyzer::SlaveTerminate()
|
|
||||||
{
|
|
||||||
// The SlaveTerminate() function is called after all entries or objects
|
|
||||||
// have been processed. When running with PROOF SlaveTerminate() is called
|
|
||||||
// on each slave server.
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void MonAnalyzer::Terminate()
|
|
||||||
{
|
|
||||||
// The Terminate() function is the last function to be called during
|
|
||||||
// a query. It always runs on the client, it can be used to present
|
|
||||||
// the results graphically or save the results to file.
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,115 +0,0 @@
|
||||||
//////////////////////////////////////////////////////////
|
|
||||||
// This class has been automatically generated on
|
|
||||||
// Mon Jul 8 13:26:58 2024 by ROOT version 6.32.02
|
|
||||||
// from TTree gen_tree/Tree After GeneralSort
|
|
||||||
// found on file: ../root_data/gen_run043.root
|
|
||||||
//////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef MonAnalyzer_h
|
|
||||||
#define MonAnalyzer_h
|
|
||||||
|
|
||||||
#include <TROOT.h>
|
|
||||||
#include <TChain.h>
|
|
||||||
#include <TFile.h>
|
|
||||||
#include <TSelector.h>
|
|
||||||
#include <TTreeReader.h>
|
|
||||||
#include <TTreeReaderValue.h>
|
|
||||||
#include <TTreeReaderArray.h>
|
|
||||||
|
|
||||||
// Headers needed by this particular selector
|
|
||||||
#include "TClonesArray.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MonAnalyzer : public TSelector {
|
|
||||||
public :
|
|
||||||
TTreeReader fReader; //!the tree reader
|
|
||||||
TTree *fChain = 0; //!pointer to the analyzed TTree or TChain
|
|
||||||
|
|
||||||
// Readers to access the data (delete the ones you do not need).
|
|
||||||
TTreeReaderValue<ULong64_t> EventID = {fReader, "evID"};
|
|
||||||
TTreeReaderArray<Float_t> e = {fReader, "e"};
|
|
||||||
TTreeReaderArray<ULong64_t> e_Timestamp = {fReader, "e_t"};
|
|
||||||
TTreeReaderArray<Float_t> xf = {fReader, "xf"};
|
|
||||||
TTreeReaderArray<ULong64_t> xf_Timestamp = {fReader, "xf_t"};
|
|
||||||
TTreeReaderArray<Float_t> xn = {fReader, "xn"};
|
|
||||||
TTreeReaderArray<ULong64_t> xn_Timestamp = {fReader, "xn_t"};
|
|
||||||
TTreeReaderArray<Float_t> rdt = {fReader, "rdt"};
|
|
||||||
TTreeReaderArray<ULong64_t> rdt_Timestamp = {fReader, "rdt_t"};
|
|
||||||
TTreeReaderArray<unsigned int> trace_fUniqueID = {fReader, "trace.fUniqueID"};
|
|
||||||
TTreeReaderArray<unsigned int> trace_fBits = {fReader, "trace.fBits"};
|
|
||||||
TTreeReaderArray<TString> trace_fName = {fReader, "trace.fName"};
|
|
||||||
TTreeReaderArray<TString> trace_fTitle = {fReader, "trace.fTitle"};
|
|
||||||
TTreeReaderArray<Short_t> trace_fLineColor = {fReader, "trace.fLineColor"};
|
|
||||||
TTreeReaderArray<Short_t> trace_fLineStyle = {fReader, "trace.fLineStyle"};
|
|
||||||
TTreeReaderArray<Short_t> trace_fLineWidth = {fReader, "trace.fLineWidth"};
|
|
||||||
TTreeReaderArray<Short_t> trace_fFillColor = {fReader, "trace.fFillColor"};
|
|
||||||
TTreeReaderArray<Short_t> trace_fFillStyle = {fReader, "trace.fFillStyle"};
|
|
||||||
TTreeReaderArray<Short_t> trace_fMarkerColor = {fReader, "trace.fMarkerColor"};
|
|
||||||
TTreeReaderArray<Short_t> trace_fMarkerStyle = {fReader, "trace.fMarkerStyle"};
|
|
||||||
TTreeReaderArray<Float_t> trace_fMarkerSize = {fReader, "trace.fMarkerSize"};
|
|
||||||
TTreeReaderArray<Double_t> trace_fMinimum = {fReader, "trace.fMinimum"};
|
|
||||||
TTreeReaderArray<Double_t> trace_fMaximum = {fReader, "trace.fMaximum"};
|
|
||||||
TTreeReaderArray<TString> trace_fOption = {fReader, "trace.fOption"};
|
|
||||||
TTreeReaderArray<Float_t> trace_e = {fReader, "we"};
|
|
||||||
TTreeReaderArray<Float_t> trace_e_time = {fReader, "weT"};
|
|
||||||
TTreeReaderArray<Float_t> trace_e_rise = {fReader, "weR"};
|
|
||||||
TTreeReaderArray<Float_t> trace_xf = {fReader, "wxf"};
|
|
||||||
TTreeReaderArray<Float_t> trace_xf_time = {fReader, "wxfT"};
|
|
||||||
TTreeReaderArray<Float_t> trace_xf_rise = {fReader, "wxfR"};
|
|
||||||
TTreeReaderArray<Float_t> trace_xn = {fReader, "wxn"};
|
|
||||||
TTreeReaderArray<Float_t> trace_xn_time = {fReader, "wxnT"};
|
|
||||||
TTreeReaderArray<Float_t> trace_xn_rise = {fReader, "wxnR"};
|
|
||||||
TTreeReaderArray<Float_t> trace_rdt = {fReader, "wrdt"};
|
|
||||||
TTreeReaderArray<Float_t> trace_rdt_time = {fReader, "wrdtT"};
|
|
||||||
TTreeReaderArray<Float_t> trace_rdt_rise = {fReader, "wrdtR"};
|
|
||||||
|
|
||||||
|
|
||||||
MonAnalyzer(TTree * /*tree*/ =0) { }
|
|
||||||
~MonAnalyzer() override { }
|
|
||||||
Int_t Version() const override { return 2; }
|
|
||||||
void Begin(TTree *tree) override;
|
|
||||||
void SlaveBegin(TTree *tree) override;
|
|
||||||
void Init(TTree *tree) override;
|
|
||||||
bool Notify() override;
|
|
||||||
bool Process(Long64_t entry) override;
|
|
||||||
Int_t GetEntry(Long64_t entry, Int_t getall = 0) override { return fChain ? fChain->GetTree()->GetEntry(entry, getall) : 0; }
|
|
||||||
void SetOption(const char *option) override { fOption = option; }
|
|
||||||
void SetObject(TObject *obj) override { fObject = obj; }
|
|
||||||
void SetInputList(TList *input) override { fInput = input; }
|
|
||||||
TList *GetOutputList() const override { return fOutput; }
|
|
||||||
void SlaveTerminate() override;
|
|
||||||
void Terminate() override;
|
|
||||||
|
|
||||||
ClassDefOverride(MonAnalyzer,0);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef MonAnalyzer_cxx
|
|
||||||
void MonAnalyzer::Init(TTree *tree)
|
|
||||||
{
|
|
||||||
// The Init() function is called when the selector needs to initialize
|
|
||||||
// a new tree or chain. Typically here the reader is initialized.
|
|
||||||
// It is normally not necessary to make changes to the generated
|
|
||||||
// code, but the routine can be extended by the user if needed.
|
|
||||||
// Init() will be called many times when running on PROOF
|
|
||||||
// (once per file to be processed).
|
|
||||||
|
|
||||||
fReader.SetTree(tree);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MonAnalyzer::Notify()
|
|
||||||
{
|
|
||||||
// The Notify() function is called when a new file is opened. This
|
|
||||||
// can be either for a new TTree in a TChain or when when a new TTree
|
|
||||||
// is started when using PROOF. It is normally not necessary to make changes
|
|
||||||
// to the generated code, but the routine can be extended by the
|
|
||||||
// user if needed. The return value is currently not used.
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif // #ifdef MonAnalyzer_cxx
|
|
|
@ -317,12 +317,6 @@ Bool_t Monitor::Process(Long64_t entry){
|
||||||
}
|
}
|
||||||
if (skipFlag ) continue;
|
if (skipFlag ) continue;
|
||||||
|
|
||||||
//@==================== Basic gate
|
|
||||||
if( TMath::IsNaN(e[id]) ) continue ;
|
|
||||||
///if( ring[id] < -100 || ring[id] > 100 ) continue;
|
|
||||||
///if( ring[id] > 300 ) continue;
|
|
||||||
if( TMath::IsNaN(xn[id]) && TMath::IsNaN(xf[id]) ) continue ;
|
|
||||||
|
|
||||||
//@==================== Calibrations go here
|
//@==================== Calibrations go here
|
||||||
if( corr->xnCorr.size() >= id && corr->xfxneCorr.size() >= id ) xnCal[id] = xn[id] * corr->xnCorr[id] * corr->xfxneCorr[id][1] + corr->xfxneCorr[id][0];
|
if( corr->xnCorr.size() >= id && corr->xfxneCorr.size() >= id ) xnCal[id] = xn[id] * corr->xnCorr[id] * corr->xfxneCorr[id][1] + corr->xfxneCorr[id][0];
|
||||||
if( corr->xfxneCorr.size() >= id ) xfCal[id] = xf[id] * corr->xfxneCorr[id][1] + corr->xfxneCorr[id][0];
|
if( corr->xfxneCorr.size() >= id ) xfCal[id] = xf[id] * corr->xfxneCorr[id][1] + corr->xfxneCorr[id][0];
|
||||||
|
|
Loading…
Reference in New Issue
Block a user