//--------------------------------------------------------------------------- // version: v1.0 // code log: // 1) read and study on the BluetFactory output data in BluetDataModel format // 2) get the phi30 beam profile from 6Li(n,t) in the low energy region // 3) get drift velocity // author: yih@ihep.ac.cn // date: 2023-04-04 //-------------------------------------------------------------------------- // #include "../../sources/config/include/BluetDataModel.hh" #include "ROOT/TDataFrame.hxx" #include "TApplication.h" #include "TChain.h" #include "TF1.h" #include "TF2.h" #include "TGTab.h" #include "TH1F.h" #include "TH2F.h" #include "TInterpreter.h" #include "fmt/core.h" #include "string" #include "BluetDataModel.hh" const int sizeX = 900; const int sizeY = 900; const double rBeam = 35. / 2; const double rTarget = 73. / 2; const double rSubstrate = 89. / 2; const double rPCB = rSubstrate + 10.; class BluetAnalyzer { public: BluetAnalyzer() { // Declare main frame int argc = 0; char **argv = nullptr; app = new TApplication("app", &argc, argv); mFrame = new TGMainFrame(gClient->GetRoot(), sizeX, sizeY); mTab = new TGTab(mFrame, sizeX, sizeY); mFrame->AddFrame(mTab, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY)); // Declare Data Models const string bluetBase = getenv("bluet_base"); const string datamodel = fmt::format( "#include \"{}/sources/config/include/BluetDataModel.hh\"", bluetBase); gInterpreter->Declare(datamodel.c_str()); }; ~BluetAnalyzer(); private: TApplication *app; TGMainFrame *mFrame; TGTab *mTab; double sidelength; int Nlayer; double driftL; double sampleT; double EcutMin; double EcutMax; double tofCutMin; double tofCutMax; double stampCutMin; double stampCutMax; double cathAmpCutMin; double cathAmpCutMax; double cathTimeCutMax; double cathTimeCutMin; double meshAmpCutMin; double meshAmpCutMax; double meshTimeCutMax; double meshTimeCutMin; int NtrkCutMin; int NtrkCutMax; double lengthCutMin; double lengthCutMax; bool rCut; double rCutMin; double rCutMax; double cosCutMin; double CenterPos[2]; double sliceW; TF1 *fbeam1; TF2 *fbeam2; TF1 *fbeamr; TF1 *fdgaus; TChain *eventTree = new TChain("eventTree"); BluetEvent *fEvent = nullptr; int Nevent; int Nbin; double tmin; double tmax; int Nrbin; double rmax; double *Sbin; TH2F *hprofile; TH1F *hslicex; TH1F *hslicey; TH1F *hbeamr; TH1F *hrinte; TH2F *htofE; TH1F *htof; TH1F *htofr0; TH1F *htofr1; TH1F *hpull; TH1F *hratio; TH2F *hLengthE; TH1F *htcath; TH1F *htpad; TH1F *hv0; TH1F *hv1; TH1F *hcos; TH1F *hphi; TH2F *hdeltacos1; TH2F *hdeltacos2; TH2F *hts; TH2F *htn; TH2F *hamp; TH2F *han; TH2F *hta; TH2F *htt; public: void readCutParameters(string cfgfile); void defineFitFunctions(); void defineHistograms(); bool isGoodEvent(BluetEvent *event); bool isGoodTrack(BluetTrack *track); void readTreeData(vector files); void FillHistograms(); void postOperations(); void drawHistograms(); private: void drawVertex(); void drawTOF(); void drawDrift(); void drawAngle(); void draw1DFeatures(); void draw2DFeatures(); void drawPadFeatures(); };