////////////////////////////////////////////////////////// // This class has been automatically generated on // Fri May 13 17:59:58 2022 by ROOT version 6.24/06 // from TTree tree/root_data/run-0143-00.root // found on file: root_data/run-0143-00.root ////////////////////////////////////////////////////////// #ifndef peachCake_h #define peachCake_h #include #include #include #include #include #include #include #include "cmath" // Header file for the classes stored in the TTree if any. class peachCake : public TSelector { public : TChain *fChain; //!pointer to the analyzed TTree or TChain // Fixed size dimensions of array or collections stored in the TTree if any. // Declaration of leaf types ULong64_t evID; Int_t multi; Int_t detID[416]; //[multi] Double_t e[416]; //[multi] ULong64_t e_t[416]; //[multi] Int_t cfd[416]; //[multi] Int_t qdc[416][8]; //[multi] Int_t multiClover; Int_t multiBeam; Int_t runID; // List of branches TBranch *b_event_ID; //! TBranch *b_multi; //! TBranch *b_detID; //! TBranch *b_e; //! TBranch *b_e_t; //! TBranch *b_cfd; //! TBranch *b_qdc; //! TBranch *b_multiplicity_Clover; //! TBranch *b_multiplicity_Beam; //! TBranch *b_runID; //! peachCake(TTree * /*tree*/ =0) : fChain(0) { saveNewTree = false; pidCorrFileName = ""; fHistRootName = ""; plotHists = true; canvasTitle = "Run: "; lastRunID = -1; contFlag = false; } virtual ~peachCake() { } 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(); void SaveNewTree(bool YesOrNo){ saveNewTree = YesOrNo;} void SetPIDCorrectionFile(TString corr_PID){ pidCorrFileName = corr_PID;} void SetHistRootFileName(TString fileName){ fHistRootName = fileName;} void SetPlotHist(bool onOff) { plotHists = onOff; } ClassDef(peachCake,0); TString pidCorrFileName; vector> pidCorr; //=========== varibales in new tree bool saveNewTree; TFile * saveFile; TTree * newTree; TString saveFileName; int totnumEntry; //of the original file //tree Int_t eventID; UInt_t crossEnergy; ULong64_t crossTime; Double_t TOF; Double_t energy; Short_t flag; /// 1 = has beam, 2 = has Ions, 4 = hasBeta, default 0; Double_t xIons; Double_t yIons; Double_t xBeta; Double_t yBeta; UInt_t dyIonsEnergy[4]; ULong64_t dyIonsTime[4]; UInt_t dyBetaEnergy[4]; ULong64_t dyBetaTime[4]; Double_t veto_f; ULong64_t veto_f_time; Double_t veto_r; ULong64_t veto_r_time; Short_t vetoFlag; /// default = 0, 1 = front, 2 = rear, 4 = cross //clock TBenchmark clock; Bool_t shown; Long64_t nProcessed; TString fHistRootName; bool plotHists; TString canvasTitle; int lastRunID; bool contFlag; }; #endif #ifdef peachCake_cxx void peachCake::Init(TTree *tree){ // Set branch addresses and branch pointers if (!tree) return; totnumEntry = tree->GetEntries(); printf("============= num entry : %d\n", totnumEntry); fChain = (TChain *)tree; fChain->SetMakeClass(1); fChain->SetBranchAddress("evID", &evID, &b_event_ID); fChain->SetBranchAddress("multi", &multi, &b_multi); fChain->SetBranchAddress("detID", detID, &b_detID); fChain->SetBranchAddress("e", e, &b_e); fChain->SetBranchAddress("e_t", e_t, &b_e_t); fChain->SetBranchAddress("cfd", cfd, &b_cfd); fChain->SetBranchAddress("qdc", qdc, &b_qdc); fChain->SetBranchAddress("multiClover", &multiClover, &b_multiplicity_Clover); fChain->SetBranchAddress("multiBeam", &multiBeam, &b_multiplicity_Beam); fChain->SetBranchAddress("runID", &runID, &b_runID); //============ new tree printf(" is save tree? :%d \n", saveNewTree); if( saveNewTree ){ saveFileName = "test"; int oldSeg = -100; int numFile = fChain->GetListOfFiles()->GetLast()+1; for( int i = 0; i < numFile; i++){ TString name = fChain->GetListOfFiles()->At(i)->GetTitle(); int pos = name.Last('/'); name = name.Remove(0,pos+1); //this should be run-XXXX-XX.root if( i == 0 ) { saveFileName = name; pos = saveFileName.Last('-'); saveFileName = saveFileName.Remove(pos); //run-XXXX } pos = name.Last('-'); int segNum = atoi(name.Remove(0, pos+1).Remove(2)); if( oldSeg == -100 ) oldSeg = segNum; saveFileName = saveFileName + Form("_%02d",segNum); if( segNum == oldSeg + 1 && i != numFile -1 ){ int len = saveFileName.Length(); saveFileName = saveFileName.Remove(len - 3); oldSeg = segNum; } } saveFileName = saveFileName + ".root"; printf("=========== saveFile : %s \n", saveFileName.Data()); saveFile = new TFile(saveFileName, "recreate"); newTree = new TTree("tree", "tree"); newTree->Branch("eventID", &eventID, "eventID/l"); //newTree->Branch("runID", &runID, "runID/I"); newTree->Branch("TOF", &TOF, "TOF/D"); newTree->Branch("energy", &energy, "energy/D"); newTree->Branch("crossTime", &crossTime, "crossTime/l"); newTree->Branch("crossEnergy", &crossEnergy, "crossEnergy/i"); newTree->Branch("flag", &flag, "flag/S"); newTree->Branch("vetoFlag", &vetoFlag, "vetoFlag/S"); newTree->Branch("xIons", &xIons, "xIons/D"); newTree->Branch("yIons", &yIons, "yIons/D"); newTree->Branch("xBeta", &xBeta, "xBeta/D"); newTree->Branch("yBeta", &yBeta, "yBeta/D"); newTree->Branch("dyIonsTime", dyIonsTime, "dyIonsTime[4]/l"); newTree->Branch("dyBetaTime", dyBetaTime, "dyBetaTime[4]/l"); newTree->Branch("veto_f", &veto_f, "veto_f/D"); newTree->Branch("veto_r", &veto_r, "veto_r/D"); } //==== clock clock.Reset(); clock.Start("timer"); shown = 0; nProcessed = 0; printf("==========================================\n"); } Bool_t peachCake::Notify(){ return kTRUE; } void peachCake::SlaveBegin(TTree * /*tree*/){ TString option = GetOption(); } void peachCake::SlaveTerminate(){ } TH2F * createTH2F(const char* name, const char* title, Int_t nbinsx, Double_t xlow, Double_t xup, Int_t nbinsy, Double_t ylow, Double_t yup){ TH2F * hist2 = (TH2F *) gROOT->FindObjectAny( name ); if ( hist2 == NULL ) hist2 = new TH2F( name , title , nbinsx, xlow, xup, nbinsy, ylow, yup); hist2->Reset(); return hist2; } TH1F * createTH1F(const char* name, const char* title, Int_t nbinsx, Double_t xlow, Double_t xup){ TH1F * hist1 = (TH1F *) gROOT->FindObjectAny( name ); if ( hist1 == NULL ) hist1 = new TH1F( name , title , nbinsx, xlow, xup); hist1->Reset(); return hist1; } #endif // #ifdef peachCake_cxx