SOLARIS_Analysis/working/obsolete/Monitor.h

393 lines
11 KiB
C++

#ifndef Monitor_h
#define Monitor_h
#include <TROOT.h>
#include <TChain.h>
#include <TFile.h>
#include <TSelector.h>
#include <TH1.h>
#include <TMath.h>
#include <TH2.h>
#include <TStyle.h>
#include <TCutG.h>
#include "Mapping.h"
#include "../Armory/AnalysisLib.h"
#include "../Armory/ClassDetGeo.h"
#include "../Armory/ClassReactionConfig.h"
#include "../Armory/ClassCorrParas.h"
#include "../Cleopatra/ClassTransfer.h"
#include "ClassMonPlotter.h"
class Monitor : public TSelector {
public :
TTree *fChain; //!pointer to the analyzed TTree or TChain
// Declaration of leaf types
Float_t * e; //!
ULong64_t * e_t; //!
Float_t * xf; //!
ULong64_t * xf_t; //!
Float_t * xn; //!
ULong64_t * xn_t; //!
Float_t * rdt; //!
ULong64_t * rdt_t; //!
// List of branches
TBranch *b_Energy; //!
TBranch *b_EnergyTimestamp; //!
TBranch *b_XF; //!
TBranch *b_XFTimestamp; //!
TBranch *b_XN; //!
TBranch *b_XNTimestamp; //!
TBranch *b_RDT; //!
TBranch *b_RDTTimestamp; //!
// trace analysis data
// Float_t * we; //!
// Float_t * weR; //!
// Float_t * weT; //!
// Float_t * wrdt; //!
// Float_t * wrdtT; //!
// Float_t * wrdtR; //!
// TBranch *b_Trace_Energy; //!
// TBranch *b_Trace_Energy_RiseTime; //!
// TBranch *b_Trace_Energy_Time; //!
// TBranch *b_Trace_RDT; //!
// TBranch *b_Trace_RDT_Time; //!
// TBranch *b_Trace_RDT_RiseTime; //!
bool isArrayTraceExist;
bool isRDTTraceExist;
bool isRDTExist;
CorrParas * corr; //!
DetGeo * detGeo; //!
TransferReaction * transfer; //!
TString canvasTitle;
MonPlotter ** plotter; //!
//==== global variable
float * x, * z;
float * xCal, * xfCal, * xnCal, * eCal;
std::vector<ULong64_t> startTime ;
std::vector<ULong64_t> endTime ;
double timeRangeInMin[2];
ULong64_t baseTimeStamp;
int treeID;
int padID;
Monitor(TTree * /*tree*/ =0) : fChain(0) {
e = new Float_t [mapping::NARRAY];
xf = new Float_t [mapping::NARRAY];
xn = new Float_t [mapping::NARRAY];
rdt = new Float_t [mapping::NRDT];
e_t = new ULong64_t [mapping::NARRAY];
xf_t = new ULong64_t [mapping::NARRAY];
xn_t = new ULong64_t [mapping::NARRAY];
rdt_t = new ULong64_t [mapping::NRDT];
x = new float [mapping::NARRAY];
z = new float [mapping::NARRAY];
xCal = new float [mapping::NARRAY];
xfCal = new float [mapping::NARRAY];
xnCal = new float [mapping::NARRAY];
eCal = new float [mapping::NARRAY];
padID = 0;
timeRangeInMin[0] = 0;
timeRangeInMin[1] = 100;
startTime.clear();
endTime.clear();
baseTimeStamp = 0;
treeID = -1;
corr = new CorrParas();
detGeo = new DetGeo();
detGeo->LoadDetectorGeo("detectorGeo.txt");
transfer = new TransferReaction();
transfer->SetReactionFromFile("reactionConfig.txt");
plotter = new MonPlotter *[detGeo->numGeo];
for( int i = 0; i < detGeo->numGeo; i++ ){
plotter[i] = new MonPlotter(i, detGeo);
}
}
virtual ~Monitor() {
delete e ;
delete xf ;
delete xn ;
delete rdt ;
delete e_t ;
delete xf_t ;
delete xn_t ;
delete rdt_t;
delete z ;
delete x ;
delete xCal;
delete xfCal;
delete xnCal;
delete eCal;
delete corr;
for( int i = 0; i < detGeo->numGeo; i++ ) delete [] plotter[i];
delete plotter;
delete detGeo;
delete transfer;
}
virtual Int_t Version() const { return 2; }
virtual void Begin(TTree *tree);
virtual void SlaveBegin(TTree *tree);
virtual void Init(TTree *tree);
virtual Bool_t Notify();
virtual Bool_t Process(Long64_t entry);
virtual Int_t GetEntry(Long64_t entry, Int_t getall = 0) { return fChain ? fChain->GetTree()->GetEntry(entry, getall) : 0; }
virtual void SetOption(const char *option) { fOption = option; }
virtual void SetObject(TObject *obj) { fObject = obj; }
virtual void SetInputList(TList *input) { fInput = input; }
virtual TList *GetOutputList() const { return fOutput; }
virtual void SlaveTerminate();
virtual void Terminate();
TString fCanvasTitle;
void SetCanvasTitle(TString title) {fCanvasTitle = title;}
TString GetCanvasTitle() const {return fCanvasTitle;}
// void Draw2DHist(TH2F * hist);
// void PlotEZ(bool isRaw);
// void PlotTDiff(bool isGated, bool isLog);
// void PlotRDT(int id, bool isRaw);
//void PlotCRDTPolar();
ClassDef(Monitor,0);
};
#endif
#ifdef Monitor_cxx
void Monitor::Init(TTree *tree){
printf("============================================ Branch Pointer Inititization. \n");
// Set branch addresses and branch pointers
if (!tree) return;
fChain = tree;
fChain->SetMakeClass(1);
fChain->SetBranchAddress("e", e, &b_Energy);
fChain->SetBranchAddress("e_t", e_t, &b_EnergyTimestamp);
fChain->SetBranchAddress("xf", xf, &b_XF);
fChain->SetBranchAddress("xf_t", xf_t, &b_XFTimestamp);
fChain->SetBranchAddress("xn", xn, &b_XN);
fChain->SetBranchAddress("xn_t", xn_t, &b_XNTimestamp);
TBranch * br = (TBranch *) fChain->GetListOfBranches()->FindObject("rdt");
if( br == NULL ){
printf(" ++++++++ no Recoil Branch.\n");
isRDTExist = false;
}else{
printf(" ++++++++ Found Recoil Branch.\n");
isRDTExist = true;
fChain->SetBranchAddress("rdt" , rdt, &b_RDT);
fChain->SetBranchAddress("rdt_t", rdt_t, &b_RDTTimestamp);
}
/*
br = (TBranch *) fChain->GetListOfBranches()->FindObject("we");
if( br == NULL ){
printf(" ++++++++ no Array trace.\n");
isArrayTraceExist = false;
}else{
isArrayTraceExist = true;
if( isUseArrayTrace ){
fChain->SetBranchAddress("te", e, &b_Energy);// replace e with te
}else{
fChain->SetBranchAddress("te", te, &b_Trace_Energy);
}
fChain->SetBranchAddress("te_r", te_r, &b_Trace_Energy_RiseTime);
fChain->SetBranchAddress("te_t", te_t, &b_Trace_Energy_Time);
}
br = (TBranch *) fChain->GetListOfBranches()->FindObject("wrdt");
if( br == NULL ){
printf(" ++++++++ no Recoil trace.\n");
isRDTTraceExist = false;
}else{
isRDTTraceExist = true;
if( isUseRDTTrace ) {
fChain->SetBranchAddress("trdt", rdt, &b_RDT); // replace rdt with trdt
printf("************ using Trace in recoil \n");
}else{
fChain->SetBranchAddress("trdt", trdt, &b_Trace_RDT);
}
fChain->SetBranchAddress("trdt_t", trdt_t, &b_Trace_RDT_Time);
fChain->SetBranchAddress("trdt_r", trdt_r, &b_Trace_RDT_RiseTime);
}
*/
printf("============================================ End of Branch Pointer Inititization. \n");
}
Bool_t Monitor::Notify(){
return kTRUE;
}
// void DrawLine(TH1 * hist, double pos){
// double yMax = hist->GetMaximum();
// TLine * line = new TLine(pos, 0, pos, yMax);
// line->SetLineColor(2);
// line->Draw("");
// }
void Monitor::SlaveBegin(TTree * /*tree*/){
/// not use, if use, place in Monitor.C
TString option = GetOption();
}
void Monitor::SlaveTerminate(){
/// not use, if use, place in Monitor.C
}
/*###########################################################
* Plotting Function
###########################################################*/
// void DrawBox(TH1* hist, double x1, double x2, Color_t color, float alpha){
// double yMax = hist->GetMaximum();
// TBox * box = new TBox (x1, 0, x2, yMax);
// box->SetFillColorAlpha(color, alpha);
// box->Draw();
// }
// void Monitor::Draw2DHist(TH2F * hist){
// if( hist->Integral() < 3000 ){
// hist->SetMarkerStyle(20);
// hist->SetMarkerSize(0.3);
// hist->Draw("");
// }else{
// hist->Draw("colz");
// }
// }
/*
void Monitor::PlotEZ(bool isRaw){
padID++; cCanvas->cd(padID);
if( isRaw ) {
Draw2DHist(heCalVz);
heCalVz->SetTitle("E vs Z | " + canvasTitle + " | " + rdtCutFile1);
if( skipDetID.size() > 0 ){
text.DrawLatex(0.15, 0.3, "skipped Detector:");
for( int i = 0; i < (int) skipDetID.size(); i++){
text.DrawLatex(0.15 + 0.1*i, 0.25, Form("%d", skipDetID[i]));
}
}
text.DrawLatex(0.15, 0.8, Form("%.1f < eCal < %.1f MeV", eCalCut[0], eCalCut[1]));
if( xGate < 1 ) text.DrawLatex(0.15, 0.75, Form("with |x-0.5|<%.4f", xGate/2.));
}else{
Draw2DHist(heCalVzGC);
if( cutList1 ) text.DrawLatex(0.15, 0.8, "with Recoil gate");
if( xGate < 1 ) text.DrawLatex(0.15, 0.75, Form("with |x-0.5|<%.4f", xGate/2.));
//if( isTACGate ) text.DrawLatex(0.15, 0.7, Form("%d < TAC < %d", tacGate[0], tacGate[1]));
if(isTimeGateOn)text.DrawLatex(0.15, 0.7, Form("%d < coinTime < %d", timeGate[0], timeGate[1]));
}
TFile * transfer = new TFile("transfer.root");
TObjArray * gList = NULL ;
TObjArray * fxList = NULL ;
int nGList = 0;
int nFxList = 0;
if( transfer->IsOpen() ) {
gList = (TObjArray *) transfer->FindObjectAny("gList");
nGList = gList->GetLast() + 1;
fxList = (TObjArray *) transfer->FindObjectAny("fxList");
nFxList = fxList->GetLast() +1 ;
}
///the constant thetaCM line
if( transfer->IsOpen() ) gList->At(0)->Draw("same");
///the e-z line for excitation
if( transfer->IsOpen() ){
for( int i = 0 ; i < nFxList ; i++){
((TF1*)fxList->At(i))->SetLineColor(6);
fxList->At(i)->Draw("same");
}
}
}
void Monitor::PlotTDiff(bool isGated, bool isLog){
padID++; cCanvas->cd(padID);
if( isLog ) cCanvas->cd(padID)->SetLogy(1);
double yMax = 0;
if( isGated ){
yMax = htdiff->GetMaximum()*1.2;
if( isLog ){
htdiff->GetYaxis()->SetRangeUser(1, yMax);
}else{
htdiff->GetYaxis()->SetRangeUser(0, yMax);
}
}
htdiff->Draw();
if( isGated ){
htdiffg->SetLineColor(2);
htdiffg->Draw("same");
}
if( cutList1 ) text.DrawLatex(0.15, 0.8, "with Recoil gate");
if(isTimeGateOn)text.DrawLatex(0.15, 0.7, Form("%d < coinTime < %d", timeGate[0], timeGate[1]));
DrawBox(htdiff, timeGate[0], timeGate[1], kGreen, 0.2);
}
void Monitor::PlotRDT(int id, bool isRaw){
padID++; cCanvas->cd(padID);
if( isRaw ){
Draw2DHist(hrdt2D[id]);
}else{
Draw2DHist(hrdt2Dg[id]);
}
if(isTimeGateOn)text.DrawLatex(0.15, 0.8, Form("%d < coinTime < %d", timeGate[0], timeGate[1]));
//if( isTACGate ) text.DrawLatex(0.15, 0.7, Form("%d < TAC < %d", tacGate[0], tacGate[1]));
if( cutList1 && cutList1->GetEntries() > id ) {cutG = (TCutG *)cutList1->At(id) ; cutG->Draw("same");}
if( cutList2 && cutList2->GetEntries() > id ) {cutG = (TCutG *)cutList2->At(id) ; cutG->Draw("same");}
}
//void Monitor::PlotCRDTPolar(){
// padID++; cCanvas->cd(padID);
// cCanvas->cd(padID)->DrawFrame(-50, -50, 50, 50);
// hcrdtPolar->Draw("same colz pol");
//}
*/
#endif // #ifdef Monitor_cxx