Rene Brun ??:
> Hi,
>
> Your file eff.root seems to be corrupted.
> Could you send teh output of teh following short session
> root > TFile f("eff.root")
> root > f.ls()
> root > f.Map()
>
> Rene Brun
>
Dear Mr. Brun,
The file eff.root is generated by the attached macro
"divide_kmax_event.C". I also attach the macro "ph_psd_generate.C". Are
there some incorrect statements within the generationg macro?
Thank you for your help.
Exaos
///////////////////////////////////////////////////////////////////////////
// $Name: $ - $Id: divide_kmax_event.C,v 1.3 2003/07/24 18:48:45 cvs Exp $
// Divide tree "kmax_event" to two tree: monitor & detectors
//
// Author: Exaos Lee (schlie@iris.ciae.ac.cn)
//-------------------------------------------------------------------------
// monitor: phm psdm tofm
// kmax_event: var9/8. var10/8. var11/4.
//-------------------------------------------------------------------------
// detectors: ph0 ph1 psd1 ph2 psd2 ph3 psd3
// kmax_event: var0/8. var1/8. var2/8. var3/8. var4/8. var5/8. var6/8.
//----
// ph4 psd4 tof01 tof02 tof03 tof04
// var7/8. var8/8. var12/8. var13/8. var14/8. var15/8.
//----
// tof0 tof1 tof2 tof3 tof4
// var16/4. var17/4. var18/4. var19/4. var20/4.
///////////////////////////////////////////////////////////////////////////
{
gROOT->Reset();
TFile *oldfile = new TFile("n2n.root");
TChain *chain = (TChain *)oldfile->Get("kmax_event");
Int_t nentries = (Int_t)chain->GetEntries();
TString str;
////////////////////////////////////////////////////////////////////////
// Generate tree for monitor
TFile *monfile = new TFile("monitor.root","recreate");
float phm, psdm, tofm;
// Set branch addresses
chain->SetBranchAddress("var9",&phm);
chain->SetBranchAddress("var10",&psdm);
chain->SetBranchAddress("var11",&tofm);
// Active and deactive branchs
chain->SetBranchStatus("*",0);
chain->SetBranchStatus("var9",1);
chain->SetBranchStatus("var10",1);
chain->SetBranchStatus("var11",1);
// Get calibration
TDirectory *monitor = (TDirectory *)oldfile->Get("monitor");
TH1F *hline_monitor = (TH1F *)monitor->Get("hline_monitor");
TF1 *fline_monitor = (TF1 *)monitor->Get("fline_monitor");
// Clone tree
printf("Cloning monitor tree ......\n");
TTree *mon_tree = chain->CloneTree(0);
for(Int_t i=0;i<nentries;i++) {
chain->GetEntry(i);
phm /= 8.; psdm /= 8.; tofm /= 4.;
if( phm>fline_monitor->Eval(472./4.)) // Event selection: > 1/4 Cs
mon_tree->Fill();
if(!((i+1)%10000)) printf(".");
}
printf("\n");
// Change branch names and titles
mon_tree->GetBranch("var9")->SetName("phm");
mon_tree->GetBranch("phm")->SetTitle("phm");
mon_tree->GetBranch("var10")->SetName("psdm");
mon_tree->GetBranch("psdm")->SetTitle("psdm");
mon_tree->GetBranch("var11")->SetName("tofm");
mon_tree->GetBranch("tofm")->SetTitle("tofm");
// Change tree name and title
mon_tree->SetName("mon_tree");
mon_tree->SetTitle("Monitor Tree");
mon_tree->Print();
// Write cuts
printf("Generating cuts ...\n");
str = "phm>"; str += fline_monitor->Eval(472./4.);
TCut cut1_mon("cut1_mon",str); cut1_mon.Write();
str = "phm>"; str += fline_monitor->Eval(472./3.);
TCut cut2_mon("cut1_mon",str); cut2_mon.Write();
// Histograms
// -- 1/4 Cs
printf("Generating histograms with LLD = 1/4 Cs ...\n");
TH1F *phm_1=new TH1F("phm_1","PH of Monitor",1024, 0., 1024.);
TH1F *psdm_1 = new TH1F("psdm_1","PSD of Monitor",1024, 0., 1024.);
TH2F *phm_psdm_1 = new TH2F("phm_psdm_1","PH-PSD of Monitor",
512, 0., 1024., 512, 0., 1024.);
mon_tree->Project("phm_1","phm",cut1_mon);
mon_tree->Project("psdm_1","psdm",cut1_mon && "psdm >0");
mon_tree->Project("phm_psdm_1","phm:psdm", cut1_mon && "psdm>0");
phm_1->Write();
psdm_1->Write();
phm_psdm_1->Write();
// -- 1/3 Cs
printf("Generating histograms with LLD = 1/3 Cs ...\n");
TH1F *phm_2=new TH1F("phm_2","PH of Monitor",1024, 0., 1024.);
TH1F *psdm_2 = new TH1F("psdm_2","PSD of Monitor",1024, 0., 1024.);
TH2F *phm_psdm_2 = new TH2F("phm_psdm_2","PH-PSD of Monitor",
512, 0., 1024., 512, 0., 1024.);
mon_tree->Project("phm_2","phm",cut2_mon);
mon_tree->Project("psdm_2","psdm",cut2_mon && "psdm >0");
mon_tree->Project("phm_psdm_2","phm:psdm", cut2_mon && "psdm>0");
phm_2->Write();
psdm_2->Write();
phm_psdm_2->Write();
hline_monitor->Write();
fline_monitor->Write();
mon_tree->Write();
monfile->Close();
printf("File monitor.root is closed.\n");
delete monfile;
delete hline_monitor;
delete fline_monitor;
////////////////////////////////////////////////////////////////////
// Generate tree for detectors
printf("Recreate file eff.root ...\n");
TFile *detfile = new TFile("eff.root","recreate");
// Define variables
Float_t ph0, ph1, ph2, ph3, ph4;
Float_t psd1, psd2, psd3, psd4;
Float_t tof0, tof1, tof2, tof3, tof4;
Float_t tof01,tof02,tof03,tof04;
// Activate branchs
chain->SetBranchStatus("*",1);
chain->SetBranchStatus("var9",0);
chain->SetBranchStatus("var10",0);
chain->SetBranchStatus("var11",0);
// Set branch addresses
chain->SetBranchAddress("var0", &ph0);
chain->SetBranchAddress("var1", &ph1);
chain->SetBranchAddress("var2", &psd1);
chain->SetBranchAddress("var3", &ph2);
chain->SetBranchAddress("var4", &psd2);
chain->SetBranchAddress("var5", &ph3);
chain->SetBranchAddress("var6", &psd3);
chain->SetBranchAddress("var7", &ph4);
chain->SetBranchAddress("var8", &psd4);
chain->SetBranchAddress("var12",&tof01);
chain->SetBranchAddress("var13",&tof02);
chain->SetBranchAddress("var14",&tof03);
chain->SetBranchAddress("var15",&tof04);
chain->SetBranchAddress("var16",&tof0);
chain->SetBranchAddress("var17",&tof1);
chain->SetBranchAddress("var18",&tof2);
chain->SetBranchAddress("var19",&tof3);
chain->SetBranchAddress("var20",&tof4);
// Get calibration histograms
TH1F *hline_det0 = (TH1F *)oldfile->Get("hline_det0");
TH1F *hline_det1 = (TH1F *)((TDirectory *)oldfile->Get("det1"))->Get("hline_det1");
TH1F *hline_det2 = (TH1F *)((TDirectory *)oldfile->Get("det2"))->Get("hline_det2");
TH1F *hline_det3 = (TH1F *)((TDirectory *)oldfile->Get("det3"))->Get("hline_det3");
TH1F *hline_det4 = (TH1F *)((TDirectory *)oldfile->Get("det4"))->Get("hline_det4");
// Get calibration functions
TF1 *fline_det0 = (TF1 *)oldfile->Get("fline_det0");
TF1 *fline_det1 = (TF1 *)((TDirectory *)oldfile->Get("det1"))->Get("fline_det1");
TF1 *fline_det2 = (TF1 *)((TDirectory *)oldfile->Get("det2"))->Get("fline_det2");
TF1 *fline_det3 = (TF1 *)((TDirectory *)oldfile->Get("det3"))->Get("fline_det3");
TF1 *fline_det4 = (TF1 *)((TDirectory *)oldfile->Get("det4"))->Get("fline_det4");
// Clone tree
printf("Cloning tree of main detectors ... ... \n");
TTree *det_tree = chain->CloneTree(0);
for(Int_t i=0;i<nentries;i++) {
chain->GetEntry(i);
ph0/= 8.;
ph1/=8.; ph2/=8.; ph3/=8.; ph4/=8.;
psd1/=8.; psd2/=8.; psd3/=8.; psd4/=8.;
tof0/=4.;
tof1/=4.; tof2/=4.; tof3/=4.; tof4/=4.;
tof01/=8.; tof02/=8.; tof03/=8.; tof04/=8.;
if( ph0>fline_det0->Eval(472./4.) || // Select events above 1/4 Cs
ph1>fline_det1->Eval(472./4.) ||
ph2>fline_det2->Eval(472./4.) ||
ph3>fline_det3->Eval(472./4.) ||
ph4>fline_det4->Eval(472./4.))
det_tree->Fill();
if(!((i+1)%10000)) printf(".");
}
printf("\n");
// Change branch names and titles
det_tree->GetBranch("var0")->SetName("ph0");
det_tree->GetBranch("var1")->SetName("ph1");
det_tree->GetBranch("var2")->SetName("psd1");
det_tree->GetBranch("var3")->SetName("ph2");
det_tree->GetBranch("var4")->SetName("psd2");
det_tree->GetBranch("var5")->SetName("ph3");
det_tree->GetBranch("var6")->SetName("psd3");
det_tree->GetBranch("var7")->SetName("ph4");
det_tree->GetBranch("var8")->SetName("psd4");
det_tree->GetBranch("var12")->SetName("tof01");
det_tree->GetBranch("var13")->SetName("tof02");
det_tree->GetBranch("var14")->SetName("tof03");
det_tree->GetBranch("var15")->SetName("tof04");
det_tree->GetBranch("var16")->SetName("tof0");
det_tree->GetBranch("var17")->SetName("tof1");
det_tree->GetBranch("var18")->SetName("tof2");
det_tree->GetBranch("var19")->SetName("tof3");
det_tree->GetBranch("var20")->SetName("tof4");
// Change tree name and title
det_tree->SetName("det_tree");
det_tree->SetTitle("Tree of Detectors");
det_tree->Print();
det_tree->Write();
// Write calibrations to a new directory
printf("Writing calibration information ...\n");
detfile->mkdir("calibrate");
TDirectory *cali=(TDirectory *)detfile->Get("calibrate");
cali->cd();
hline_det0->SetDirectory(cali); hline_det0->Write();
hline_det1->SetDirectory(cali); hline_det1->Write();
hline_det2->SetDirectory(cali); hline_det2->Write();
hline_det3->SetDirectory(cali); hline_det3->Write();
hline_det4->SetDirectory(cali); hline_det4->Write();
fline_det0->Write();
fline_det1->Write();
fline_det2->Write();
fline_det3->Write();
fline_det4->Write();
// Dir: cut
printf("Generating cuts ...\n");
detfile->mkdir("cut");
TDirectory *cut=(TDirectory *)detfile->Get("cut");
cut->cd();
// -- 1/4 Cs
str = "ph0>" ; str += fline_det0->Eval(472./4);
TCut cut1_det0("cut1_det0",str); cut1_det0.Write();
str = "ph1>" ; str += fline_det1->Eval(472./4);
TCut cut1_det1("cut1_det1",str); cut1_det1.Write();
str = "ph2>" ; str += fline_det2->Eval(472./4);
TCut cut1_det2("cut1_det2",str); cut1_det2.Write();
str = "ph3>" ; str += fline_det3->Eval(472./4);
TCut cut1_det3("cut1_det3",str); cut1_det3.Write();
str = "ph4>" ; str += fline_det4->Eval(472./4);
TCut cut1_det4("cut1_det4",str); cut1_det4.Write();
TCut cut1_det01 = cut1_det0 && cut1_det1;
cut1_det01.SetName("cut1_det01"); cut1_det01.Write();
TCut cut1_det02 = cut1_det0 && cut1_det2;
cut1_det02.SetName("cut1_det02"); cut1_det02.Write();
TCut cut1_det03 = cut1_det0 && cut1_det3;
cut1_det03.SetName("cut1_det03"); cut1_det03.Write();
TCut cut1_det04 = cut1_det0 && cut1_det4;
cut1_det04.SetName("cut1_det04"); cut1_det04.Write();
// -- 1/3 Cs
str = "ph0>" ; str += fline_det0->Eval(472./3);
TCut cut2_det0("cut2_det0",str); cut2_det0.Write();
str = "ph1>" ; str += fline_det1->Eval(472./3);
TCut cut2_det1("cut2_det1",str); cut2_det1.Write();
str = "ph2>" ; str += fline_det2->Eval(472./3);
TCut cut2_det2("cut2_det2",str); cut2_det2.Write();
str = "ph3>" ; str += fline_det3->Eval(472./3);
TCut cut2_det3("cut2_det3",str); cut2_det3.Write();
str = "ph4>" ; str += fline_det4->Eval(472./3);
TCut cut2_det4("cut2_det4",str); cut2_det4.Write();
TCut cut2_det01 = cut2_det0 && cut2_det1;
cut1_det01.SetName("cut2_det01"); cut2_det01.Write();
TCut cut2_det02 = cut2_det0 && cut2_det2;
cut1_det02.SetName("cut2_det02"); cut2_det02.Write();
TCut cut2_det03 = cut2_det0 && cut2_det3;
cut1_det03.SetName("cut2_det03"); cut2_det03.Write();
TCut cut2_det04 = cut2_det0 && cut2_det4;
cut1_det04.SetName("cut2_det04"); cut2_det04.Write();
// TOF
detfile->mkdir("tofs_1");
detfile->mkdir("tofs_2");
// PH-PSD spectra // -- see macro "ph_psd_generate.C"
//detfile->mkdir("ph_psd_1"); // 1/4 Cs
//detfile->mkdir("ph_psd_2"); // 1/3 Cs
// Close file
//detfile->Write();
detfile->Close();
delete detfile;
printf("File eff.root is closed.\n");
delete oldfile;
}
//____________________________________________________________________
//
// //
{
gROOT->Reset();
TFile *detfile = new TFile("eff.root","update");
det_tree = (TNtuple *)detfile->Get("det_tree");
// Get cuts
TDirectory *cut=(TDirectory *)detfile->Get("cut");
TCut *cut1_det0 = (TCut *)cut->Get("cut1_det0");
TCut *cut1_det1 = (TCut *)cut->Get("cut1_det1");
TCut *cut1_det2 = (TCut *)cut->Get("cut1_det2");
TCut *cut1_det3 = (TCut *)cut->Get("cut1_det3");
TCut *cut1_det4 = (TCut *)cut->Get("cut1_det4");
TCut *cut2_det0 = (TCut *)cut->Get("cut2_det0");
TCut *cut2_det1 = (TCut *)cut->Get("cut2_det1");
TCut *cut2_det2 = (TCut *)cut->Get("cut2_det2");
TCut *cut2_det3 = (TCut *)cut->Get("cut2_det3");
TCut *cut2_det4 = (TCut *)cut->Get("cut2_det4");
// PH, PSD histograms
TH1F *ph0=new TH1F("ph0","PH of Det #0",1024, 0, 1024.);
TH1F *ph1=new TH1F("ph1","PH of Det #1",1024, 0, 1024.);
TH1F *ph2=new TH1F("ph2","PH of Det #2",1024, 0, 1024.);
TH1F *ph3=new TH1F("ph3","PH of Det #3",1024, 0, 1024.);
TH1F *ph4=new TH1F("ph4","PH of Det #4",1024, 0, 1024.);
TH1F *psd1=new TH1F("psd1","PSD of Det #1",1024, 0., 1024.);
TH1F *psd2=new TH1F("psd2","PSD of Det #2",1024, 0., 1024.);
TH1F *psd3=new TH1F("psd3","PSD of Det #3",1024, 0., 1024.);
TH1F *psd4=new TH1F("psd4","PSD of Det #4",1024, 0., 1024.);
TH2F *ph1_psd1=new TH2F("ph1_psd1","PH-PSD of Det #1",512,0.,1024.,512,0.,1024.);
TH2F *ph2_psd2=new TH2F("ph2_psd2","PH-PSD of Det #2",512,0.,1024.,512,0.,1024.);
TH2F *ph3_psd3=new TH2F("ph3_psd3","PH-PSD of Det #3",512,0.,1024.,512,0.,1024.);
TH2F *ph4_psd4=new TH2F("ph4_psd4","PH-PSD of Det #4",512,0.,1024.,512,0.,1024.);
// -- 1/4 Cs
printf("Generating ph & psd histograms with LLD = 1/4 Cs ... ...\n");
detfile->mkdir("ph_psd1");
TDirectory *ph_psd1=(TDirectory *)detfile->Get("ph_psd1");
ph_psd1->cd();
det_tree->Project("ph0","ph0",(*cut1_det0));
det_tree->Project("ph1","ph1",(*cut1_det1));
det_tree->Project("ph2","ph2",(*cut1_det2));
det_tree->Project("ph3","ph3",(*cut1_det3));
det_tree->Project("ph4","ph4",(*cut1_det4));
ph0->SetDirectory(ph_psd1); ph0->Write();
ph1->SetDirectory(ph_psd1); ph1->Write();
ph2->SetDirectory(ph_psd1); ph2->Write();
ph3->SetDirectory(ph_psd1); ph3->Write();
ph4->SetDirectory(ph_psd1); ph4->Write();
det_tree->Project("psd1","psd1", (*cut1_det1) && "psd1>0.");
det_tree->Project("psd2","psd2", (*cut1_det2) && "psd2>0.");
det_tree->Project("psd3","psd3", (*cut1_det3) && "psd3>0.");
det_tree->Project("psd4","psd4", (*cut1_det4) && "psd4>0.");
psd1->SetDirectory(ph_psd1); psd1->Write();
psd2->SetDirectory(ph_psd1); psd2->Write();
psd3->SetDirectory(ph_psd1); psd3->Write();
psd4->SetDirectory(ph_psd1); psd4->Write();
det_tree->Project("ph1_psd1","ph1:psd1",(*cut1_det1) && "psd1>0.");
det_tree->Project("ph2_psd2","ph2:psd2",(*cut1_det2) && "psd2>0.");
det_tree->Project("ph3_psd3","ph3:psd3",(*cut1_det3) && "psd3>0.");
det_tree->Project("ph4_psd4","ph4:psd4",(*cut1_det4) && "psd4>0.");
ph1_psd1->SetDirectory(ph_psd1); ph1_psd1->Write();
ph2_psd2->SetDirectory(ph_psd1); ph2_psd2->Write();
ph3_psd3->SetDirectory(ph_psd1); ph3_psd3->Write();
ph4_psd4->SetDirectory(ph_psd1); ph4_psd4->Write();
// -- 1/3 Cs
printf("Generating ph & psd histograms with LLD = 1/3 Cs ... ...\n");
detfile->mkdir("ph_psd2");
TDirectory *ph_psd2=(TDirectory *)detfile->Get("ph_psd2");
ph_psd2->cd();
det_tree->Project("ph0","ph0", (*cut2_det0));
det_tree->Project("ph1","ph1", (*cut2_det1));
det_tree->Project("ph2","ph2", (*cut2_det2));
det_tree->Project("ph3","ph3", (*cut2_det3));
det_tree->Project("ph4","ph4", (*cut2_det4));
ph0->SetDirectory(ph_psd2); ph0->Write();
ph1->SetDirectory(ph_psd2); ph1->Write();
ph2->SetDirectory(ph_psd2); ph2->Write();
ph3->SetDirectory(ph_psd2); ph3->Write();
ph4->SetDirectory(ph_psd2); ph4->Write();
det_tree->Project("psd1","psd1",(*cut2_det1) && "psd1>0.");
det_tree->Project("psd2","psd2",(*cut2_det2) && "psd2>0.");
det_tree->Project("psd3","psd3",(*cut2_det3) && "psd3>0.");
det_tree->Project("psd4","psd4",(*cut2_det4) && "psd4>0.");
psd1->SetDirectory(ph_psd2); psd1->Write();
psd2->SetDirectory(ph_psd2); psd2->Write();
psd3->SetDirectory(ph_psd2); psd3->Write();
psd4->SetDirectory(ph_psd2); psd4->Write();
det_tree->Project("ph1_psd1","ph1:psd1",(*cut2_det1) && "psd1>0.");
det_tree->Project("ph2_psd2","ph2:psd2",(*cut2_det2) && "psd2>0.");
det_tree->Project("ph3_psd3","ph3:psd3",(*cut2_det3) && "psd3>0.");
det_tree->Project("ph4_psd4","ph4:psd4",(*cut2_det4) && "psd4>0.");
ph1_psd1->SetDirectory(ph_psd2); ph1_psd1->Write();
ph2_psd2->SetDirectory(ph_psd2); ph2_psd2->Write();
ph3_psd3->SetDirectory(ph_psd2); ph3_psd3->Write();
ph4_psd4->SetDirectory(ph_psd2); ph4_psd4->Write();
}
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:14 MET