Re: [ROOT] Segmentation vialation with ver 3.05/05

From: Exaos Lee (schlie@iris.ciae.ac.cn)
Date: Mon Jul 28 2003 - 05:34:35 MEST


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