mcr/calib/tofino/StabilityFromPeakTable.C

00001 /*
00002 ======================================================================
00003   StabilityFromPeakTable(const TString &runtype,const Int_t &run_num_start,const Int_t &run_num_stop, const TString &directory, const TString &calib_filename, const TString &root_filename, Bool_t estimate_threshold)
00004     Read Peak Tables and make histograms about trends of pedestal, Bhabha
00005     and Kaon peaks.
00006 ======================================================================
00007 */
00008 #include "TH2.h"
00009 #include "TCanvas.h"
00010 #include "TFile.h"
00011 #include "TApplication.h"
00012 #include "TTree.h"
00013 #include "TF1.h"
00014 #include "TNamed.h"
00015 #include "TGraph.h"
00016 #include "TProfile.h"
00017 
00018 #include "TFndHdt.h"
00019 //#include "FROOT.h"
00020 
00021 using namespace FROOT;
00022 
00023 TH1F *p_ped_e[12];
00024 TH1F *p_ped_p[12];
00025 TH1F *p_bha_e[12];
00026 TH1F *p_bha_p[12];
00027 TH1F *p_kaon_e[12];
00028 TH1F *p_kaon_p[12];
00029 TH1F *p_eq_e[12];
00030 TH1F *p_eq_p[12];
00031 
00032 TH1F *p_EQbha_e[12];
00033 TH1F *p_EQbha_p[12];
00034 //TH1F *p_EQbha_sqr[12];
00035 TH1F *p_EQkaon_e[12];
00036 TH1F *p_EQkaon_p[12];
00037 //TH1F *p_EQkaon_sqr[12];
00038 
00039 TH1F *p_EQ_e[12];
00040 TH1F *p_EQ_p[12];
00041 
00042 TH1F *p_OverKaonThreshold[12];
00043 
00044 Int_t CurrentRunNumber;
00045 
00046 Int_t KaonThreshold[K_N_TOFINO_SLABS];
00047 Int_t NevOverThreshold[K_N_TOFINO_SLABS];
00048 Int_t NevAllKaon[K_N_TOFINO_SLABS];
00049 
00050 Float_t ped_table_e[K_N_TOFINO_SLABS];
00051 Float_t ped_table_p[K_N_TOFINO_SLABS];
00052 Float_t eq_table_e[K_N_TOFINO_SLABS];
00053 Float_t eq_table_p[K_N_TOFINO_SLABS];
00054 
00055 TFile *fHdtFile = 0;
00056 
00057 TFndHdt *fCurHdtEv = 0;
00058 TTree *fHdtTree = 0;
00059 
00060 void DeclareProfiles(Int_t const &run_num_start, Int_t const &run_num_stop){
00061 
00062   TString hname;
00063   TString htitle;
00064 
00065   Int_t N=run_num_stop-run_num_start+2;
00066 
00067   for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00068     hname.Form("PedE_%d",sl+1);
00069     htitle.Form("Tofino Pedestal slab: %d e",sl+1);
00070     p_ped_e[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00071 
00072     hname.Form("PedP_%d",sl+1);
00073     htitle.Form("Tofino Pedestal slab: %d p",sl+1);
00074     p_ped_p[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00075 
00076     hname.Form("BhaE_%d",sl+1);
00077     htitle.Form("Tofino Bhabha Peak slab: %d e",sl+1);
00078     p_bha_e[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00079 
00080     hname.Form("BhaP_%d",sl+1);
00081     htitle.Form("Tofino Bhabha Peak slab: %d p",sl+1);
00082     p_bha_p[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00083 
00084     hname.Form("EqBhaE_%d",sl+1);
00085     htitle.Form("Tofino Bhabha Peak (eq.) slab: %d e",sl+1);
00086     p_EQbha_e[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00087 
00088     hname.Form("EqBhaP_%d",sl+1);
00089     htitle.Form("Tofino Bhabha Peak (eq.) slab: %d p",sl+1);
00090     p_EQbha_p[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00091 
00092 //      hname.Form("EqBhaSqr_%d",sl+1);
00093 //      htitle.Form("Tofino Bhabha Peak slab sqrt(e*p) (eq.): %d",sl+1);
00094 //      p_EQbha_sqr[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00095 
00096     hname.Form("KaonE_%d",sl+1);
00097     htitle.Form("Tofino Kaon Peak slab: %d e",sl+1);
00098     p_kaon_e[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00099 
00100     hname.Form("KaonP_%d",sl+1);
00101     htitle.Form("Tofino Kaon Peak slab: %d p",sl+1);
00102     p_kaon_p[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00103 
00104     hname.Form("EqKaonE_%d",sl+1);
00105     htitle.Form("Tofino Kaon Peak (eq.) slab: %d e",sl+1);
00106     p_EQkaon_e[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00107 
00108     hname.Form("EqKaonP_%d",sl+1);
00109     htitle.Form("Tofino Kaon Peak slab (eq.): %d p",sl+1);
00110     p_EQkaon_p[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00111 
00112 //      hname.Form("EqKaonSqr_%d",sl+1);
00113 //      htitle.Form("Tofino Kaon Peak slab sqrt(e*p) (eq.): %d",sl+1);
00114 //      p_EQkaon_sqr[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00115 
00116     hname.Form("EqE_%d",sl+1);
00117     htitle.Form("Tofino Equalization Factor slab: %d e",sl+1);
00118     p_eq_e[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00119 
00120     hname.Form("EqP_%d",sl+1);
00121     htitle.Form("Tofino Equalization Factor slab: %d p",sl+1);
00122     p_eq_p[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00123 
00124     hname.Form("EqFactorE_%d",sl+1);
00125     htitle.Form("Tofino Equalization Factor slab: %d e",sl+1);
00126     p_EQ_e[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00127 
00128     hname.Form("EqFactorP_%d",sl+1);
00129     htitle.Form("Tofino Equalization Factor slab: %d p",sl+1);
00130     p_EQ_p[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00131 
00132     hname.Form("OverKaonThreshold_%d",sl+1);
00133     htitle.Form("Tofino Ratio over kaon threshold slab: %d p",sl+1);
00134     p_OverKaonThreshold[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00135   }
00136 }
00137 
00138 void SaveProfiles(const TString &fname){
00139   TFile *fOutFile = new TFile(fname,"RECREATE");
00140 
00141   for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00142     p_ped_e[sl]->Write();
00143     p_ped_p[sl]->Write();
00144     p_bha_e[sl]->Write();
00145     p_bha_p[sl]->Write();
00146     p_kaon_e[sl]->Write();
00147     p_kaon_p[sl]->Write(); 
00148     p_eq_e[sl]->Write();
00149     p_eq_p[sl]->Write();
00150     p_EQbha_e[sl]->Write();
00151     p_EQbha_p[sl]->Write();
00152 //      p_EQbha_sqr[sl]->Write();
00153     p_EQkaon_e[sl]->Write();
00154     p_EQkaon_p[sl]->Write();
00155 //      p_EQkaon_sqr[sl]->Write();
00156     p_EQ_e[sl]->Write();
00157     p_EQ_p[sl]->Write();
00158     p_OverKaonThreshold[sl]->Write();
00159   }
00160 
00161   fOutFile->Close();
00162   delete fOutFile;
00163   fOutFile = 0;
00164 
00165 }
00166 
00167 void CloseHdtFile(){
00168   
00169   if (fHdtTree){
00170     delete fHdtTree;
00171     // fHdtTree->Delete();
00172     fHdtTree = 0;
00173   }
00174   
00175   if(fHdtFile){
00176     if(fHdtFile->IsOpen()) fHdtFile->Close();
00177     delete fHdtFile;
00178     fHdtFile = 0;
00179   }
00180   
00181 }
00182 
00183 Int_t OpenHdtFile(const TString &runtype,const Int_t &run_num){
00184   // return value:
00185   //              0: ok
00186   //             -1: file not found
00187 
00188   CloseHdtFile();
00189 
00190   TString runname;
00191   TString fnam;
00192   //  fnam.Form("%s/%s.hdt.root",ExpandPathName("$FND_HDT").Data(),runname.Data());
00193   //  if (run_num>=7000){
00194     runname = BuildRunName(runtype,run_num, kTRUE);
00195     //  fnam.Form("%s/run_group_%d000/%s.hdt.root",ExpandPathName("$FND_HDT").Data(),
00196     //    Int_t(run_num/1000), runname.Data());
00197     //} else {
00198   //runname = BuildRunName(runtype,run_num, kFALSE);
00199     //fnam.Form("%s_v9.0/%s.hdt.root",ExpandPathName("$FND_HDT").Data(),
00200     //runname.Data());
00201   //}
00202   fnam.Form("%s/%s.hdt.root",ExpandPathName("$FND_HDT").Data(),runname.Data());
00203   
00204   if(gSystem->AccessPathName(fnam)){
00205     gROOT->Warning("OpenHdtFile","file \"%s\" not found",fnam.Data());
00206     return -1;
00207   }
00208 
00209   gROOT->Info("OpenHdtFile","opening file \"%s\"",fnam.Data());
00210   fHdtFile = new TFile(fnam,"OPEN");
00211 
00212   return 0;
00213 }
00214 
00215 
00216 Int_t LoadHdtTree(){
00217   // return value:
00218   //              0: ok
00219   //             -1: Problems while getting HDT tree from file
00220   
00221   if (fHdtTree){
00222     delete fHdtTree;
00223     // fHdtTree->Delete();
00224     fHdtTree = 0;
00225   }
00226   
00227   fHdtTree = (TTree *) ( fHdtFile->Get("FIN_HDT_TREE") );
00228   if(!fHdtTree){
00229     gROOT->Warning("LoadHdtTree","Problems while getting HDT tree from file");
00230     return -1;
00231   }
00232   //  fHdtTree->Print();
00233 
00234   fHdtTree->SetBranchAddress("fndhdt",&fCurHdtEv);
00235 
00236   return 0;
00237 }
00238 
00239 void GetMultiplicity(Int_t *mult){
00240   // mult[0] ... low threshold
00241   // mult[1] ... high threshold
00242   mult[0]=0; mult[1]=0;
00243 
00244   TClonesArray *TofHits = fCurHdtEv->GetTofHits();
00245   Int_t lay, slab;
00246   TFndHTof *cur_hit = 0;
00247 
00248   for(Int_t ic=0;ic< TofHits->GetEntries(); ic++) {
00249     cur_hit =  (TFndHTof *) ( TofHits->At(ic) );
00250     cur_hit->GetLayer_Slab(lay, slab);
00251     if(lay==E_FIN_OUTER_LAYER) continue;
00252 
00253     Bool_t both_adc = kFALSE;
00254     Bool_t both_tdcl = kFALSE;
00255     Bool_t both_tdch = kFALSE;
00256     if(cur_hit->GetBothAdc() == TFndHit::E_HIT_BOTH_CH ) both_adc = kTRUE;
00257     if(cur_hit->GetBothLowTdc() == TFndHit::E_HIT_BOTH_CH ) both_tdcl = kTRUE;
00258     if(cur_hit->GetBothHighTdc() == TFndHit::E_HIT_BOTH_CH ) both_tdch = kTRUE;
00259 
00260     Double_t adce=cur_hit->GetAdcE();
00261     Double_t adcp=cur_hit->GetAdcP();
00262 
00263     if(both_tdch&&adce>0&&adcp>0){ // kaons
00264       mult[1]++;
00265     }   
00266     if(both_tdcl&&adce>0&&adcp>0){ // bhabha+kaons
00267       mult[0]++;
00268     }
00269   }
00270 }
00271   
00272 Int_t GetTrigType(){
00273   TFndTrig *cur_trig = (TFndTrig *) (fCurHdtEv->GetGts());
00274   Short_t hyp_bit=cur_trig->GetPU_cont_bit(0, 0);
00275   Short_t bha_bit=cur_trig->GetPU_cont_bit(0, 1);
00276   Short_t cosm_bit=cur_trig->GetPU_cont_bit(0, 5);
00277   if ((CurrentRunNumber>=5872&&CurrentRunNumber<=5880)||
00278       (CurrentRunNumber>=5887&&CurrentRunNumber<=5905)||
00279       (CurrentRunNumber>=5912&&CurrentRunNumber<=5935)||
00280       (CurrentRunNumber>=5941&&CurrentRunNumber<=5957)||
00281       (CurrentRunNumber>=5998&&CurrentRunNumber<=6014)||
00282       (CurrentRunNumber>=6020&&CurrentRunNumber<=6014)||
00283       (CurrentRunNumber>=7290&&CurrentRunNumber<=7316)||
00284       (CurrentRunNumber>=7319&&CurrentRunNumber<=7329)||
00285       (CurrentRunNumber>=7332&&CurrentRunNumber<=7346)||
00286       (CurrentRunNumber>=7349&&CurrentRunNumber<=7364)||
00287       (CurrentRunNumber>=7367&&CurrentRunNumber<=7382)||
00288       (CurrentRunNumber>=7385&&CurrentRunNumber<=7400)||
00289       (CurrentRunNumber>=7403&&CurrentRunNumber<=7405)||
00290       (CurrentRunNumber>=7403&&CurrentRunNumber<=7405)||
00291       (CurrentRunNumber>=7407&&CurrentRunNumber<=7421)||
00292       (CurrentRunNumber>=7423&&CurrentRunNumber<=7433)||
00293       (CurrentRunNumber>=7436&&CurrentRunNumber<=7445)||
00294       (CurrentRunNumber>=7447&&CurrentRunNumber<=7453)||
00295       (CurrentRunNumber>=7458&&CurrentRunNumber<=7463)||
00296       (CurrentRunNumber>=7465&&CurrentRunNumber<=7475)||
00297       (CurrentRunNumber>=7477&&CurrentRunNumber<=7486)||
00298       (CurrentRunNumber>=7488&&CurrentRunNumber<=7497)||
00299       (CurrentRunNumber>=7499&&CurrentRunNumber<=7517)||
00300       (CurrentRunNumber>=7519&&CurrentRunNumber<=7528)||
00301       (CurrentRunNumber>=7530&&CurrentRunNumber<=7541)||
00302       (CurrentRunNumber>=7543&&CurrentRunNumber<=7552)||
00303       (CurrentRunNumber>=7554&&CurrentRunNumber<=7563)||
00304       (CurrentRunNumber>=7565&&CurrentRunNumber<=7574)||
00305       (CurrentRunNumber>=7576&&CurrentRunNumber<=7585))      
00306     { hyp_bit=1; bha_bit=0; cosm_bit=0;}
00307   if ((CurrentRunNumber>=5881&&CurrentRunNumber<=5886)||
00308       (CurrentRunNumber>=5906&&CurrentRunNumber<=5911)||
00309       (CurrentRunNumber>=5936&&CurrentRunNumber<=5940)||
00310       (CurrentRunNumber>=5969&&CurrentRunNumber<=5973)||
00311       (CurrentRunNumber>=5986&&CurrentRunNumber<=5991)||
00312       (CurrentRunNumber>=7289&&CurrentRunNumber<=7289)||
00313       (CurrentRunNumber>=7317&&CurrentRunNumber<=7318)||
00314       (CurrentRunNumber>=7330&&CurrentRunNumber<=7331)||
00315       (CurrentRunNumber>=7347&&CurrentRunNumber<=7348)||
00316       (CurrentRunNumber>=7365&&CurrentRunNumber<=7366)||
00317       (CurrentRunNumber>=7383&&CurrentRunNumber<=7384)||
00318       (CurrentRunNumber>=7401&&CurrentRunNumber<=7402)||
00319       (CurrentRunNumber>=7406&&CurrentRunNumber<=7406)||
00320       (CurrentRunNumber>=7422&&CurrentRunNumber<=7422)||
00321       (CurrentRunNumber>=7434&&CurrentRunNumber<=7435)||
00322       (CurrentRunNumber>=7446&&CurrentRunNumber<=7446)||
00323       (CurrentRunNumber>=7454&&CurrentRunNumber<=7457)||
00324       (CurrentRunNumber>=7464&&CurrentRunNumber<=7464)||
00325       CurrentRunNumber==7476||CurrentRunNumber==7487||
00326       CurrentRunNumber==7498||CurrentRunNumber==7518||
00327       CurrentRunNumber==7529||CurrentRunNumber==7542||
00328       CurrentRunNumber==7553||CurrentRunNumber==7564||
00329       CurrentRunNumber==7575||CurrentRunNumber==7586)
00330     { hyp_bit=0; bha_bit=1; cosm_bit=0;}
00331   if ((CurrentRunNumber>=7587&&CurrentRunNumber<=8335)||
00332       (CurrentRunNumber>=9027&&CurrentRunNumber<=9084)||
00333       (CurrentRunNumber>=9394&&CurrentRunNumber<=9585))
00334   {
00335     if (CurrentRunNumber==7597||
00336         CurrentRunNumber==7608||
00337         CurrentRunNumber==7619||
00338         CurrentRunNumber==7630||
00339         CurrentRunNumber==7639||
00340         CurrentRunNumber==7650||
00341         CurrentRunNumber==7661||
00342         CurrentRunNumber==7670||
00343         CurrentRunNumber==7690||
00344         CurrentRunNumber==7691||
00345         CurrentRunNumber==7702||
00346         CurrentRunNumber==7713||
00347         CurrentRunNumber==7719||
00348         CurrentRunNumber==7733||
00349         CurrentRunNumber==7744||
00350         CurrentRunNumber==7756||
00351         CurrentRunNumber==7777||
00352         CurrentRunNumber==7788||
00353         CurrentRunNumber==7792||
00354         CurrentRunNumber==7793||
00355         (CurrentRunNumber>=7799&&CurrentRunNumber<=7802)||
00356         CurrentRunNumber==7814||
00357         CurrentRunNumber==7825||
00358         CurrentRunNumber==7836||
00359         CurrentRunNumber==7847||
00360         CurrentRunNumber==7858||
00361         CurrentRunNumber==7869||
00362         CurrentRunNumber==7873||
00363         CurrentRunNumber==7874||
00364         CurrentRunNumber==7885||
00365         CurrentRunNumber==7896||
00366         CurrentRunNumber==7907||
00367         CurrentRunNumber==7919||
00368         CurrentRunNumber==7921||
00369         CurrentRunNumber==7932||
00370         CurrentRunNumber==7943||
00371         CurrentRunNumber==7954||
00372         CurrentRunNumber==7965||
00373         CurrentRunNumber==7976||
00374         CurrentRunNumber==7987||
00375         CurrentRunNumber==7991||
00376         CurrentRunNumber==7992||
00377         CurrentRunNumber==7993||
00378         CurrentRunNumber==8004||
00379         CurrentRunNumber==8005||
00380         CurrentRunNumber==8023||
00381         CurrentRunNumber==8064||
00382         CurrentRunNumber==8065||
00383         CurrentRunNumber==8074||
00384         CurrentRunNumber==8085||
00385         CurrentRunNumber==8098||
00386         CurrentRunNumber==8109||
00387         CurrentRunNumber==8120||
00388         CurrentRunNumber==8131||
00389         CurrentRunNumber==8142||
00390         CurrentRunNumber==8153||
00391         CurrentRunNumber==8163||
00392         CurrentRunNumber==8174||
00393         CurrentRunNumber==8185||
00394         CurrentRunNumber==8208||
00395         CurrentRunNumber==8222||
00396         CurrentRunNumber==8233||
00397         CurrentRunNumber==8244||
00398         CurrentRunNumber==8255||
00399         CurrentRunNumber==8266||
00400         CurrentRunNumber==8277||
00401         CurrentRunNumber==8288||
00402         CurrentRunNumber==8299||
00403         CurrentRunNumber==8303||
00404         CurrentRunNumber==8308||
00405         CurrentRunNumber==8319||
00406         CurrentRunNumber==8334||
00407         CurrentRunNumber==8335||
00408         CurrentRunNumber==9029||
00409         CurrentRunNumber==9040||
00410         CurrentRunNumber==9051||
00411         CurrentRunNumber==9062||
00412         CurrentRunNumber==9073||
00413         CurrentRunNumber==9401||
00414         CurrentRunNumber==9412||
00415         CurrentRunNumber==9416||
00416         CurrentRunNumber==9428||
00417         CurrentRunNumber==9439||
00418         CurrentRunNumber==9450||
00419         CurrentRunNumber==9461||
00420         CurrentRunNumber==9472||
00421         CurrentRunNumber==9483||
00422         CurrentRunNumber==9494||
00423         CurrentRunNumber==9505||
00424         CurrentRunNumber==9516||
00425         CurrentRunNumber==9527||
00426         CurrentRunNumber==9538||
00427         CurrentRunNumber==9549||
00428         CurrentRunNumber==9560||
00429         CurrentRunNumber==9571||
00430         CurrentRunNumber==9582)
00431       { hyp_bit=0; bha_bit=1; cosm_bit=0;}
00432     else { hyp_bit=1; bha_bit=0; cosm_bit=0;}
00433   }
00434   return (Int_t) hyp_bit+2*bha_bit+32*cosm_bit;
00435 }
00436 
00437 void FillHistos(){
00438   
00439   TClonesArray *TofHits = fCurHdtEv->GetTofHits();
00440   
00441   Int_t lay, slab;
00442   TFndHTof *cur_hit = 0;
00443   Int_t mult[2];
00444   GetMultiplicity(mult);
00445   if (GetTrigType()!=1||mult[1]!=2) return;
00446 
00447   for(Int_t ic=0;ic< TofHits->GetEntries(); ic++) {
00448     cur_hit =  (TFndHTof *) ( TofHits->At(ic) );
00449     //    cur_hit->PrintHit();
00450     cur_hit->GetLayer_Slab(lay, slab);
00451     //     TThread::Printf("%d %d %d",lay, cham, wire);
00452     //     TThread::Printf("");
00453     if(lay==E_FIN_OUTER_LAYER) continue;
00454 
00455     Bool_t both_adc = kFALSE;
00456     Bool_t both_tdcl = kFALSE;
00457     Bool_t both_tdch = kFALSE;
00458     if(cur_hit->GetBothAdc() == TFndHit::E_HIT_BOTH_CH ) both_adc = kTRUE;
00459     if(cur_hit->GetBothLowTdc() == TFndHit::E_HIT_BOTH_CH ) both_tdcl = kTRUE;
00460     if(cur_hit->GetBothHighTdc() == TFndHit::E_HIT_BOTH_CH ) both_tdch = kTRUE;
00461 
00462     //     cout << "a: " << cur_hit->GetBothAdc() << " ; l: " << cur_hit->GetBothLowTdc() << " ; h: " << cur_hit->GetBothHighTdc() << endl;
00463     //     if(both_tdcl) continue; // pedestal
00464     //     if(!both_tdcl || both_tdch) continue; // bhabha
00465     //     if(!both_tdcl) continue; // bhabha + kaons
00466     //    if(!both_tdch) continue; // kaons
00467 
00468     Double_t adce=cur_hit->GetAdcE();
00469     Double_t adcp=cur_hit->GetAdcP();
00470     Double_t sqradc;
00471     sqradc=sqrt((adce-ped_table_e[slab-1])*eq_table_e[slab-1]
00472                 *(adcp-ped_table_p[slab-1])*eq_table_p[slab-1]);
00473 
00474     if(both_tdch){ // kaons
00475       if (adce>1&&adcp>1){
00476         NevAllKaon[slab-1]++;
00477         if (sqradc>KaonThreshold[slab-1]) NevOverThreshold[slab-1]++;
00478       }   
00479     }
00480   }
00481 }
00482 
00483 void EventLoop(const Int_t &nevs){
00484   
00485   Int_t entries = fHdtTree->GetEntries();
00486   
00487   Int_t cur_ev = 0;
00488   while(1){
00489     if(cur_ev >= entries){      
00490       gROOT->Info("EventLoop","run completed");
00491       break;
00492     }
00493     if(nevs != -1 && cur_ev >= nevs){      
00494       gROOT->Info("EventLoop","requested number of events reached");
00495       break;
00496     }
00497     //
00498     fHdtTree->GetEntry(cur_ev);
00499     //
00500     FillHistos();
00501     if(cur_ev%3000 == 0 ) cout << "cur_ev: " << cur_ev << endl;
00502     //     fCurHdtEv->PrintTofHits();
00503     //
00504     cur_ev++;
00505   }
00506 }
00507 
00508 void FillTofFromHdt(const TString &runtype,const Int_t &run_num_start,const Int_t &run_num_stop,const TString &root_filename,const Int_t &nevs, Int_t B){
00509   
00510   gStyle->SetOptFit(1);
00511 //   TofCalibration = new TofiCalib();
00512 
00513   // --- loop in runs
00514   for(Int_t cur_run=run_num_start; cur_run <=run_num_stop ; cur_run++){
00515     cout << "Filling from run \"" << runtype.Data() << "\" " << cur_run << endl;
00516     if(OpenHdtFile(runtype,cur_run) !=0) continue; 
00517     if(LoadHdtTree() != 0) continue;
00518     
00519     CurrentRunNumber = cur_run;
00520     
00521     for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00522      NevOverThreshold[sl]=0;
00523      NevAllKaon[sl]=0;
00524     }
00525     EventLoop(nevs);
00526     for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00527       if (NevAllKaon[sl]>0){
00528         p_OverKaonThreshold[sl]->Fill(cur_run, (Double_t)NevOverThreshold[sl]/NevAllKaon[sl]);
00529       }
00530     }
00531     CloseHdtFile();
00532   }
00533 
00534   // --- loop in runs
00535 
00536   // Store information  
00537   //   TofCalibration->SetPedE(4,998);
00538   //   cout << "================> " << TofCalibration->GetPedE(4) << endl;
00539   // --
00540 
00541 }
00542 
00543 void FillTofFromHdt_TS(const TString &runtype,const Int_t &run_num){
00544   FillTofFromHdt(runtype, run_num, run_num, "", -1, 1);
00545 }
00546 void StabilityFromPeakTable(const TString &runtype,const Int_t &run_num_start,const Int_t &run_num_stop, const TString &directory, const TString &calib_filename, const TString &root_filename, Bool_t estimate_threshold){
00547    
00548   // Threshold For Kaon Selection (very tentative ver.20070126)
00549   KaonThreshold[0]=350;
00550   KaonThreshold[1]=400;
00551   KaonThreshold[2]=400;
00552   KaonThreshold[3]=450;
00553   KaonThreshold[4]=470;
00554   KaonThreshold[5]=590;
00555   KaonThreshold[6]=500;
00556   KaonThreshold[7]=500;
00557   KaonThreshold[8]=500;
00558   KaonThreshold[9]=300;
00559   KaonThreshold[10]=360;
00560   KaonThreshold[11]=400;
00561 
00562   Int_t start_time, stop_time;
00563   TString temp1, temp2, temp3, temp4, temp5;
00564   TString temp6, temp7, temp8, temp9, temp10;
00565 
00566   std::fstream cFstrm (calib_filename.Data(), std::ios::in);
00567   if (cFstrm.fail()) return;
00568 
00569   Int_t line=-1;
00570   Char_t buff[1000];
00571   while (!cFstrm.eof()){
00572     cFstrm.getline(buff, 1000);
00573     line++;
00574   }
00575   cout << "LINE=" << line << endl;
00576   cFstrm.clear();
00577   cFstrm.seekg(0, std::ios::beg);
00578 
00579   Int_t start_run[line], stop_run[line];
00580   Float_t PED_e[line+1][K_N_TOFINO_SLABS], PED_p[line+1][K_N_TOFINO_SLABS];
00581   Float_t EQ_e[line+1][K_N_TOFINO_SLABS], EQ_p[line+1][K_N_TOFINO_SLABS];
00582     
00583     for (Int_t i=0; i<line; i++){ 
00584       cFstrm >> start_run[i] >> start_time >> temp1 >> temp2 >> temp3 >> temp4 >> temp5 
00585              >>  stop_run[i] >> stop_time >> temp6 >> temp7 >> temp8 >> temp9 >> temp10;
00586       cout << start_run[i] << " " << stop_run[i] << endl;
00587       for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00588         cFstrm >> PED_e[i][sl];
00589       }
00590       for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00591         cFstrm >> PED_p[i][sl];
00592       }
00593       for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00594         cFstrm >> EQ_e[i][sl];
00595       }
00596       for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00597         cFstrm >> EQ_p[i][sl];
00598       }
00599     }
00600 
00601     for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00602       PED_e[line][sl]=0;
00603       PED_p[line][sl]=0;
00604       EQ_e[line][sl]=0;
00605       EQ_p[line][sl]=0;
00606     }
00607 
00608   DeclareProfiles(run_num_start, run_num_stop);
00609 
00610   Int_t i0=0;
00611 
00612   for (Int_t run_num=run_num_start; run_num<=run_num_stop; run_num++){
00613 
00614     Int_t i;
00615     // get calibration constants obtained already
00616     for (i=i0; i<line; i++){
00617       if (run_num>=start_run[i]&&run_num<=stop_run[i]) break;
00618     }
00619       
00620     for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00621       ped_table_e[sl]=PED_e[i][sl];
00622       ped_table_p[sl]=PED_p[i][sl];
00623       eq_table_e[sl]=EQ_e[i][sl];
00624       eq_table_p[sl]=EQ_p[i][sl];
00625     }
00626 
00627     if (i!=line){
00628       cout << "Use the calibration table adjusted between run " <<
00629         start_run[i] << " and " << stop_run[i] << endl;
00630       i0=i;
00631       if (estimate_threshold) FillTofFromHdt_TS(runtype, run_num);
00632     }
00633 
00634     // read the peak table
00635  
00636     TString table_filename="./";
00637     table_filename += directory;
00638     table_filename += "/";
00639     table_filename += runtype;
00640     table_filename += "_";
00641     table_filename += run_num;
00642     table_filename += ".txt";
00643     cout << table_filename << endl;
00644     std::fstream cFstrm_table (table_filename.Data(), std::ios::in);
00645     if (cFstrm_table.fail()) continue;
00646 
00647     Double_t ped_e[12], ped_p[12];
00648     Int_t bhaentry_e[12], bhaentry_p[12];
00649     Double_t bha_e[12], bha_p[12];
00650     Int_t kaonentry_e[12], kaonentry_p[12];
00651     Double_t kaon_e[12], kaon_p[12];
00652     Double_t eq_e[12], eq_p[12];
00653     
00654     for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00655       cFstrm_table >> ped_e[sl] >> ped_p[sl]
00656                    >> bhaentry_e[sl] >> bha_e[sl] 
00657                    >> bhaentry_p[sl] >> bha_p[sl] 
00658                    >> kaonentry_e[sl] >> kaon_e[sl] 
00659                    >> kaonentry_p[sl] >> kaon_p[sl] 
00660                    >> eq_e[sl] >> eq_p[sl];
00661 
00662       p_ped_e[sl]->Fill(run_num, ped_e[sl]);
00663       p_ped_p[sl]->Fill(run_num, ped_p[sl]);
00664 
00665       if (ped_e[sl]>0&&bhaentry_e[sl]>500){
00666         p_bha_e[sl]->Fill(run_num, bha_e[sl]);
00667         p_EQbha_e[sl]->Fill(run_num, (bha_e[sl]-PED_e[i][sl])*EQ_e[i][sl]);
00668         p_eq_e[sl]->Fill(run_num, eq_e[sl]);
00669       }
00670 
00671       if (ped_p[sl]>0&&bhaentry_p[sl]>500){
00672         p_bha_p[sl]->Fill(run_num, bha_p[sl]);
00673         p_EQbha_p[sl]->Fill(run_num, (bha_p[sl]-PED_p[i][sl])*EQ_p[i][sl]);
00674         p_eq_p[sl]->Fill(run_num, eq_p[sl]);
00675       }
00676 
00677       if (ped_e[sl]>0&&kaon_e[sl]>ped_e[sl]){
00678         p_kaon_e[sl]->Fill(run_num, kaon_e[sl]);
00679         p_EQkaon_e[sl]->Fill(run_num, (kaon_e[sl]-PED_e[i][sl])*EQ_e[i][sl]);
00680       }
00681 
00682       if (ped_p[sl]>0&&kaon_p[sl]>ped_p[sl]){
00683         p_kaon_p[sl]->Fill(run_num, kaon_p[sl]);
00684         p_EQkaon_p[sl]->Fill(run_num, (kaon_p[sl]-PED_p[i][sl])*EQ_p[i][sl]);
00685       }
00686 
00687       p_EQ_e[sl]->Fill(run_num, EQ_e[i][sl]);
00688       p_EQ_p[sl]->Fill(run_num, EQ_p[i][sl]);
00689     }
00690   }
00691    SaveProfiles(root_filename);
00692 }
00693 
00694 void StabilityFromPeakTable(const TString &runtype,const Int_t &run_num_start,const Int_t &run_num_stop, const TString &directory, const TString &calib_filename, const TString &root_filename){
00695   StabilityFromPeakTable(runtype, run_num_start, run_num_stop, directory,
00696                          calib_filename, root_filename, false);
00697 }

Generated on Tue Oct 16 15:40:47 2007 by  doxygen 1.5.2