#define anal_sim_cxx #include "TH2.h" #include "TStyle.h" #include "TCanvas.h" //#include //#include #include #include #include #include //#include #include //#include //#include #include #include "anal_sim.h" #include "sim_hist.h" Float_t p_old=0.; Int_t ntot_mu=0; Int_t calo_type; void anal_sim::set_psfile_name(string file_in){ sprintf(psfile_name,"%s",file_in.c_str()); cout << " plot are written on file=" << psfile_name << endl; file_in.erase (file_in.length() - 2, 2); sprintf(rootfile_name,"hist_%s%s",file_in.c_str(),"root"); cout <<" rootfile name "< .L anal_sim.C // Root > anal_sim t // Root > t.GetEntry(12); // Fill t data members with entry number 12 // Root > t.Show(); // Show values of entry 12 // Root > t.Show(16); // Read and show values of entry 16 // Root > t.Loop(); // Loop on all entries // // This is the loop skeleton // To read only selected branches, Insert statements like: // METHOD1: // fChain->SetBranchStatus("*",0); // disable all branches // fChain->SetBranchStatus("branchname",1); // activate branchname // METHOD2: replace line // fChain->GetEntry(i); // read all branches //by b_branchname->GetEntry(i); //read only this branchq Int_t n_to_read=100000000; //Int_t n_to_read=100; Int_t ntot=0; const Int_t nbp=10; const Int_t nbe=20; const Int_t nkas=2; Bool_t mu_eff=1; Int_t n1=0; Int_t n2=0; Int_t n3=0; Int_t n2_a=0; Float_t pmin[]={1.6,3.0,3.0}; Float_t pmax[]={3.6,8.0,8.0}; Float_t y_limit[]={280.,418.,551.}; // sim_hist * my_histos =new sim_hist(psfile_name,nbp,nbe,nkas,pmin,pmax); sim_hist * my_histos =new sim_hist(psfile_name,nbp,nbe,nkas); my_histos->sim_hist_init(pmin,pmax); // const Int_t nbp=my_histos->nbp; //const Int_t nbe=my_histos->nbe; //const Int_t nkas=my_histos->nkas; Float_t bin_nb=static_cast (nbp); Float_t ptmin=my_histos->ptmin; Float_t ptmax=my_histos->ptmax; Float_t etamin=my_histos->etamin; Float_t etamax=my_histos->etamax; Float_t pt_bin=my_histos->pt_bin; Float_t eta_bin=my_histos-> eta_bin; Float_t pbin_A=(pmax[0]-pmin[0])/bin_nb; Float_t pbin_B=(pmax[1]-pmin[1])/bin_nb; Float_t pbin_C=(pmax[2]-pmin[2])/bin_nb; Int_t bad_index=0; Float_t phimin=3.93; Float_t phimax=5.50; Float_t phi_hole_inf=4.42; Float_t phi_hole_sup=5.02; cout <<" avant test sur fchain"<GetEntriesFast()); Int_t nmax=(nentries > n_to_read)?n_to_read:nentries; cout <<" Nmax / Nentries: "<< nmax << " / " << nentries << endl; Int_t ifreq=nmax/10; Int_t freq_accum=1; if(nmax >100)freq_accum=100; if(ifreq <=0)ifreq=1; ifreq=1; cout <<" Processing" << endl; Bool_t doprint,debug=0; Int_t nbytes = 0, nb = 0; Int_t Ngener[nbp][nbe][nkas]; Int_t Ngener_A[nbp][nbe][nkas]; Int_t Ngener_B[nbp][nbe][nkas]; Int_t Ngener_C[nbp][nbe][nkas]; Int_t Naccep_A[nbp][nbe][nkas], Naccep_B[nbp][nbe][nkas], Naccep_C[nbp][nbe][nkas]; Float_t muoH = 292.059; // distance from the beam to "A" layer for (Int_t i=0;iGetEntry(jentry); nbytes += nb; // if (Cut(ientry) < 0) continue; float x,y,z; float steplength,g3code; Float_t edep=0.; Float_t ptot=0; //Float_t dist,tof; if(doprint){ cout <<"ncpsh,ncfth,nfpsh,nmuonh,nsmth "<< CPSH_ncpsh<<" "<HSMT_SIM->GetNbinsX(); //cout <<" nbinx "<HSMT_SIM ->Fill(SMTH_nsmth); my_histos->HCFT_SIM ->Fill(CFTH_ncfth); my_histos->HCPS_SIM ->Fill(CPSH_ncpsh); my_histos->HFPS_SIM ->Fill(FPSH_nfpsh); my_histos->HMUON_SIM->Fill(MUONH_nmuonh); if(debug)cout<<" after premier fill"<H_1011->Fill (float(KINE_id_kin[i])); my_histos->H_1012->Fill (KINE_pt_kin[i]); my_histos->H_1013->Fill (KINE_eta_kin[i],KINE_phi_kin[i]); my_histos->H_1015->Fill (KINE_eta_kin[i]); my_histos->H_1016->Fill (KINE_phi_kin[i]); if(KINE_prim_kin[i]==1) nprim++; if(KINE_stab_kin[i]==1) nstab++; if(KINE_cent_kin[i]==1) ncent++; // accumulation for muon efficiency if( !mu_eff)continue; n1++; if(abs(KINE_id_kin[i])!=14 )continue; n2++; if(KINE_e_kin[i]phi_hole_inf && KINE_phi_kin[i]< phi_hole_sup)?1:0; // Calculate detector eta for muon "A" layer: Float_t Zv= VERGEN_zver_gen[KINE_vtx_kin[i]-1]; Float_t z0 = Zv + muoH*sinh(KINE_eta_kin[i]); Float_t detaMuo = log(z0/muoH + sqrt(pow((z0/muoH),2) + 1.)); eta_det[i]=fabs(detaMuo); // cout <<" id_kine "<etamax){ cout <<" pmuon "<300) cout <<" pos 1"<300) out <<" pos 1"< ((KINE_e_kin[i]- ptmin)/ pt_bin) ; Int_t ipe =static_cast ((eta_det[i]-etamin)/eta_bin); if(ipb>=nbp)ipb=nbp-1; //if(jentry>300) cout <<" ipb 1"<300) out <<" ipb 1"<( (KINE_e_kin[i]- pmin[0])/pbin_A); if(ipb <0)continue; if(ipb>=nbp)ipb=nbp-1; //if(jentry>300) cout <<" ipb 2"<300) out <<" ipb 2"<( (KINE_e_kin[i]- pmin[1])/pbin_B); if(ipb <0)continue; if(ipb>=nbp)ipb=nbp-1; Ngener_B[ipb][ipe][k]++; ipb =static_cast ( (KINE_e_kin[i]- pmin[2])/pbin_C); if(ipb>=nbp)ipb=nbp-1; if(ipb <0)continue; //if(jentry>300) cout <<" ipb 4"<300) out <<" ipb 4"<300)cout <<"dsn kine fin de boucle"<300)out <<"dsn kine fin de boucle"<300)cout <<" apres kine"<300) out <<" apres kine "<0.1){ my_histos-> H_2121 -> Fill (steplength); my_histos->H_2131 -> Fill (edep); if(steplength>0) my_histos->H_2141 -> Fill (edep/steplength); }else{ my_histos->H_2122 -> Fill (steplength); my_histos->H_2132 -> Fill (edep); if(steplength>0) my_histos->H_2142 -> Fill (edep/steplength); } if(ptot>0.1){ if(indice==1) { my_histos->H_2111 -> Fill (x,y); my_histos->H_2114 -> Fill (z,sqrt(x*x+y*y)); if( z > 0. ) my_histos-> H_2112 -> Fill (x,y); if( z < 0. ) my_histos-> H_2113 -> Fill (x,y); } if(indice==2) { my_histos->H_2211 -> Fill (x,y); my_histos->H_2214 -> Fill (z,sqrt(x*x+y*y)); if( z > 0. ) my_histos->H_2212 -> Fill (x,y); if( z < 0. ) my_histos->H_2213 -> Fill (x,y); } if(indice==3) { my_histos->H_2311 -> Fill (x,y); my_histos->H_2314 -> Fill (z,sqrt(x*x+y*y)); if( z > 0. ) my_histos->H_2312 -> Fill (x,y); if( z < 0. ) my_histos->H_2313 -> Fill (x,y); } }//end of ptot }//end of loop on smt hits} //end of loop on SMT if(debug)cout <<" apres loop sur SMT"<0.1){ my_histos->H_3111 -> Fill (x,y); my_histos->H_3112 -> Fill (z,sqrt(x*x+y*y)); my_histos->H_3121 -> Fill (steplength); my_histos->H_3131 -> Fill (edep); if(steplength>0.)my_histos->H_3141 -> Fill (edep/steplength); }else { my_histos->H_3122 -> Fill (steplength); my_histos->H_3132 -> Fill (edep); if(steplength>0.)my_histos->H_3142 -> Fill (edep/steplength); } }//end of loop on CFT if(debug)cout <<" apres loop sur cft"< 0.1 ){ my_histos->H_4111 -> Fill (x,y); my_histos->H_4112 -> Fill (z,sqrt(x*x+y*y)); my_histos->H_4121 -> Fill (steplength); my_histos->H_4131 -> Fill (edep); if(steplength>0.) my_histos->H_4141 -> Fill (edep/steplength); }else{ my_histos->H_4122 -> Fill (steplength); my_histos->H_4132 -> Fill (edep); if(steplength>0.) my_histos->H_4142 -> Fill (edep/steplength); } }//end of loop on CPS if(debug)cout <<" apres loop sur CPS"< 0.1){ if(i%freq == 0){ my_histos->H_5111 -> Fill (x,y); my_histos->H_5112 -> Fill (z,sqrt(x*x+y*y)); my_histos->H_5113 -> Fill (z,sqrt(x*x+y*y)); } my_histos->H_5121 -> Fill (steplength); my_histos->H_5131 -> Fill (edep); if(steplength>0.) my_histos->H_5141 -> Fill (edep/steplength); }else{ my_histos->H_5122 -> Fill (steplength); my_histos->H_5132 -> Fill (edep); if(steplength>0.) my_histos->H_5142 -> Fill (edep/steplength); } }//end of loop on FPS if(debug)cout <<" apres loop sur FPS"<21)break; etot_cal+=CAL_e_cal[i]; Int_t layer; if(CAL_lyr_cal[i]<20){ layer = layToLyr[CAL_lyr_cal[i]-1]; if(CAL_lyr_cal[i]<=7) calo_type=0; else if(CAL_lyr_cal[i]>=11) calo_type=1; else if(CAL_lyr_cal[i]>=8 &&CAL_lyr_cal[i]<=10) calo_type=2; }else{ layer=( CAL_lyr_cal[i]==20)?1:11; calo_type=CAL_lyr_cal[i]-20; } etot_cal_type[calo_type]+=CAL_e_cal[i]; Int_t lyr=CAL_lyr_cal[i]; if(CAL_lyr_cal[i]<20){ //EM1 EM2 (lyr = 1, 2) if (CAL_lyr_cal[i]>= 3 && lyr <= 6) lyr = 3; //EM3 else if (CAL_lyr_cal[i] == 7) lyr = 4; //EM4 else if (CAL_lyr_cal[i] >= 11 && lyr <=14 ) lyr = lyr-6; //Fine Hadronic else if (CAL_lyr_cal[i] >= 15 && CAL_lyr_cal[i]<20) lyr = 9; //Coarse hadronic else if (CAL_lyr_cal[i] == 8) lyr = 10; //CCMG else if (CAL_lyr_cal[i] == 9) lyr = 11; //ICD else if (CAL_lyr_cal[i] == 10) lyr = 12; //ECMG } else lyr =1+(CAL_lyr_cal[i]-20)*4; lyr=lyr-1; ndig_layer[lyr]++; edig_layer[lyr]+= CAL_e_cal[i]; if(lyr <=8){ //cout <<"lyr "< H_El_dig[lyr]->Fill(CAL_e_cal[i]); my_histos-> H_Eh_dig[lyr]->Fill(CAL_e_cal[i]); } if(i%freq_accum == 0){ my_histos->H_etaxphi[calo_type*3]->Fill(CAL_ieta_cal[i],CAL_iphi_cal[i]); my_histos->H_etaxphi[calo_type*3+1]->Fill(CAL_ieta_cal[i],CAL_iphi_cal[i],CAL_pt_cal[i]); } Int_t newt=1; if( ntower[calo_type] cal_ndig->Fill(CAL_ncal); my_histos-> cal_edig->Fill(etot_cal); //Energy and nb. of hits per layer for( Int_t i=0;i< 12 ;i++){ // if(ndig_layer[i]<=0)continue; my_histos-> cal_ndig_layer->Fill(i+1,ndig_layer[i]); my_histos-> cal_edig_layer->Fill(i+1,edig_layer[i]); } for(Int_t it=0;it<3;it++){ my_histos-> cal_etot[it]->Fill(etot_cal_type[it]); my_histos-> cal_ntower[it]->Fill(ntower[it]); for( Int_t i=0;i< ntower[it] ;i++){ my_histos-> cal_etower[it]->Fill(et[i][it]); my_histos-> eta_phi_tow[it*3]->Fill( etat[i][it], phit[i][it]); my_histos-> eta_phi_tow[it*3+1]->Fill( etat[i][it], phit[i][it],et[i][it]); }//end of loop on towers }//end of loop on calo_type //------------+ //|end of calo| //+-----------+ if(debug)cout <<" apres loop sur calo"<=60)cout <<" retour en debut de boucle mu "< 0.1){ my_histos-> H_mu_xy[indice] -> Fill (x,y); my_histos-> H_mu_zr[indice] -> Fill (z,sqrt(x*x+y*y)); my_histos-> H_mu_step[indice] -> Fill (steplength); my_histos-> H_mu_e[indice] -> Fill (edep); if (steplength>0.)my_histos-> H_mu_enorm[indice] -> Fill (edep/steplength); //Int_t j=MUONH_itr_muh[i]-1; }else{ my_histos->H_mu_step_d[indice] -> Fill (steplength); my_histos->H_mu_e_d[indice] -> Fill (edep); if (steplength>0.)my_histos->H_mu_enorm_d[indice]->Fill (edep/steplength); } if(!mu_eff)continue; if(MUONH_g3_muh[i]!=5 && MUONH_g3_muh[i]!=6)continue; if(abs(KINE_id_kin[j]) !=14)continue; if(ptot <0.1)continue; p_old=ptot; if(KINE_e_kin[j]< ptmin )continue; if(eta_det[j] etamax)continue; if(indice ==1 || indice==3)continue;//select chambers (exclude scintillators) Int_t k=(KINE_phi_kin[j]> phi_hole_inf && KINE_phi_kin[j]( (KINE_e_kin[j]- pmin[0])/ pbin_A); if(ipb>=nbp)ipb=nbp-1; if(ipb <0)continue; Int_t ipe =static_cast ((eta_det[j]-etamin)/ eta_bin); Float_t diff =0.; if(doprint)cout <<" MUONH_ind_muh "<=phimin && phip<4.5)phimin=phip; if(phip <=phimax && phip>5.0)phimax=phip; cout <<" phimin "< Ngener_A[ipb][ipe][k]){ cout <<" ipb ipe k "<< ipb <<","< mu_E_loss[ipb][0]->Fill(eta_det[i],KINE_e_kin[j]-ptot); if(doprint){ cout <<" accum de H_acc: laye 0: ipb , k "<( (KINE_e_kin[j]- pmin[1])/ pbin_B); if(ipb <0)continue; if(ipb>=nbp)ipb=nbp-1; Naccep_B[ipb][ipe][k]++; my_histos-> mu_E_loss[ipb][1]->Fill(eta_det[i],KINE_e_kin[j]-ptot); if(doprint)cout <<" accum de H_acc: laye 1: ipb , k "<( (KINE_e_kin[j]- pmin[2])/ pbin_C); if(ipb <0)continue; if(ipb>=nbp)ipb=nbp-1; Naccep_C[ipb][ipe][k]++; my_histos-> mu_E_loss[ipb][2]->Fill(eta_det[i],KINE_e_kin[j]-ptot); if(doprint)cout <<" accum de H_acc: laye 2: ipb , k "<etamax)continue; Int_t k=(KINE_phi_kin[i]>phi_hole_inf && KINE_phi_kin[i]< phi_hole_sup)?1:0; Int_t d=dir_part[i]; Int_t ipb =static_cast ( (KINE_e_kin[i]- pmin[0])/pbin_A); if(ipb >-1){ if(ipb>=nbp)ipb=nbp-1; my_histos-> E_dep_cal[ipb]->Fill(eta_det[i],etot_cal); my_histos->range_A[ipb][d][k]->Fill(t_lengthA[i]); my_histos-> E_dep_cal[ipb]->Fill(eta_det[i],etot_cal); } ipb =static_cast ( (KINE_e_kin[i]- pmin[1])/pbin_B); if(ipb <0)continue; if(ipb>=nbp)ipb=nbp-1; my_histos->range_B[ipb][d]->Fill(t_lengthB[i]); my_histos->range_C[ipb][d]->Fill(t_lengthC[i]); if(doprint)cout<<" part. direction "<H_gen[i][k][0]-> SetBinContent(j, Ngener_A[i][j][k]); my_histos->H_acc[i][k][0]->SetBinContent(j,Naccep_A[i][j][k]) ; my_histos->H_gen[i][k][1]->SetBinContent(j,Ngener_B[i][j][k]); my_histos-> H_acc[i][k][1]->SetBinContent(j,Naccep_B[i][j][k]) ; my_histos->H_gen[i][k][2]->SetBinContent(j,Ngener_C[i][j][k]); my_histos-> H_acc[i][k][2]->SetBinContent(j,Naccep_C[i][j][k]) ; // cout <<" i,j "<H_gen[i][k][0] // -> GetBinContent(j)<<" ngener "<=nbp) line=nbp;"< layer:"< layer"< etamax ( ="<=1){ Float_t den=static_cast ( Ngener[i][j][k]); switch (layer){ case 0 : den=static_cast ( Ngener_A[i][j][k]); num=static_cast ( Naccep_A[i][j][k]); break; case 1 : den=static_cast ( Ngener_B[i][j][k]); num=static_cast ( Naccep_B[i][j][k]); break; case 2 : den=static_cast ( Ngener_C[i][j][k]); num=static_cast ( Naccep_C[i][j][k]); break; } // cout <<" den,num "<=1)?num/den:0.; // cout <<" avant accum de h_prob eta_ref "<H_prob[i ][k][layer]->Fill(eta_ref,rap); eta_ref+=eta_bin; // cout <<" apres accum "<(100*rap); //cout <<" prob "<100){ cout <<" prob " <sim_hist_draw_effic(nentries, ntot,psfile_name); // outputfile->Close(); }//end of test on mu_eff //my_histos->sim_hist_draw(nentries, ntot,psfile_name); //my_histos->sim_hist_write(ntot,rootfile_name); //my_histos->_ps_file->Close(); cout <<" end of anal_sim"<