SIL/TFndSilMon.cxx

00001 // @(#)fROOT/SIL:$Name:  $:$Id: TFndSilMon.cxx,v 1.31 2007/09/24 07:32:41 Diego_Faso Exp $
00002 // Revision Author: Diego Faso <mailto:faso@to.infn.it>, 2005/06/24
00003 // Original Author: Piergiorgio Cerello <mailto:cerello@to.infn.it>, 2002
00004 
00006 //                                             //
00007 //                 TFndSilMon                  //
00008 //                                             //
00009 // Base class fir of the Sil  online monitor   //
00010 //   - Histograms collection and filling       //
00011 //   - Shared memories management              //
00012 //                                             //
00013 //  see GTS relative class for documentation   //
00014 //                                             //
00016 
00017 //#include <math.h>
00018 #include <Riostream.h>
00019 
00020 #include "TFndHdt.h"
00021 #include "TFndSilMon.h"
00022 
00023 ClassImp(TFndSilMon)
00024 
00025   //________________________________
00026   TFndSilMon::TFndSilMon():
00027     shmflg(),fout(),fDet(),fsil(),msil(),
00028     fMustRecoverHistos(),fSharedMemName(),fSharedFileName(),
00029     fH_Sil_Noise(),fH_Sil_Mult(),fH_Sil_ClCh(),fH_Sil_CMsigma(),fH_Sil_CMmean(),
00030     fH_Sil_CleanMult(),fH_Sil_ClChClean(),fH_Sil_dEdx(),fH_Sil_dEdx_PvsZ(),fH_Sil_Pos_PvsZ()
00031 {
00032   //
00033   Init();
00034 
00035 }
00036 
00037 //________________________________
00038 TFndSilMon::TFndSilMon(const TString &fmode, Int_t det):
00039   shmflg(),fout(),fDet(det),fsil(),msil(),
00040   fMustRecoverHistos(),fSharedMemName(),fSharedFileName(),
00041   fH_Sil_Noise(),fH_Sil_Mult(),fH_Sil_ClCh(),fH_Sil_CMsigma(),fH_Sil_CMmean(),
00042   fH_Sil_CleanMult(),fH_Sil_ClChClean(),fH_Sil_dEdx(),fH_Sil_dEdx_PvsZ(),fH_Sil_Pos_PvsZ()
00043 {
00044   
00045   //  fDet = det;
00046   Init();
00047   OpenSharedFiles(fmode);
00048   InitHistos();
00049 
00050 }
00051 
00052 //________________________________
00053 TFndSilMon::~TFndSilMon() {
00054 
00055   // delete histo;
00056   for(Int_t lay =0 ; lay <=1 ; lay ++){
00057     for(Int_t mod = 0; mod < K_N_Sil_Modules; mod++){
00058       for(Int_t sid = 0; sid < K_N_Sil_Sides; sid++){
00059         delete fH_Sil_Noise[lay][mod][sid];
00060         delete fH_Sil_Mult[lay][mod][sid];
00061         delete fH_Sil_ClCh[lay][mod][sid];
00062         delete fH_Sil_CMsigma[lay][mod][sid];
00063         delete fH_Sil_CMmean[lay][mod][sid];
00064         if(sid<2){
00065           delete fH_Sil_CleanMult[lay][mod][sid];
00066           delete fH_Sil_ClChClean[lay][mod][sid];
00067           delete fH_Sil_dEdx[lay][mod][sid];
00068         }
00069       }
00070       delete fH_Sil_dEdx_PvsZ[lay][mod];
00071       delete fH_Sil_Pos_PvsZ[lay][mod];
00072     }
00073   }
00074   
00075   // all histos deleted
00076 
00077   if(! shmflg) {
00078     if(fsil && fsil->IsOpen()) fsil->Close();
00079     delete fsil;
00080   }
00081   
00082   if(fout && fout->IsOpen()) fsil->Close();
00083   delete fout;
00084 
00085   if(msil){ msil->Close(); msil = 0;}
00086   else delete msil;
00087 }
00088 
00089 //________________________________
00090 void TFndSilMon::Init() {
00091 
00092   fSharedMemName[0] = FROOT::ExpandPathName("$FND_SHR/ism.map");
00093   fSharedMemName[1] = FROOT::ExpandPathName("$FND_SHR/osm.map");
00094   fSharedFileName[0]= FROOT::ExpandPathName("ism.file.map");
00095   fSharedFileName[1]= FROOT::ExpandPathName("osm.file.map");
00096   
00097 }
00098 
00099 //________________________________
00100 void TFndSilMon::OpenSharedFiles(const TString &fmode) {
00101   
00102   shmflg = fndrun->Onlflg();
00103   cout << "Sil Shm flag is " << shmflg << endl;
00104   
00105   TString fsilnam =  (fmode.IsNull())? "ONLM" : fmode;
00106   if(fDet == (Int_t) E_FIN_INNER_LAYER) fsilnam+="_ism.root";
00107   else if(fDet == (Int_t) E_FIN_OUTER_LAYER) fsilnam+="_osm.root";
00108   else cout << "Wrong detector number" << endl;
00109   fsil = new TFile(fsilnam.Data(),"RECREATE","Sil Histogram File");   
00110   
00111   // ---
00112   if(shmflg) {
00113     cout << "create shared memory" << endl;    
00114     switch(fDet){
00115     case (Int_t) E_FIN_INNER_LAYER: // isim
00116 #if defined _FND_ONL_USE_MAP_FILES_
00117       msil = TMapFile::Create(fSharedMemName[0],"RECREATE",(Int_t)(1048576*FROOT::K_IsimMapSize),"Isim memory mapped file with histograms"); 
00118 #elif defined _FND_ONL_USE_SHARED_FILES_
00119       if(gSystem->AccessPathName(fSharedFileName[0])){
00120         cout << "Shared file missing: creating it now..." << endl;
00121         msil = new TFile(fSharedFileName[0],"RECREATE");
00122       }
00123       else{
00124         cout << "Shared file found: histograms will be recovered..." << endl;
00125         msil = TFile::Open(fSharedFileName[0],"UPDATE");
00126         fMustRecoverHistos = kTRUE;
00127         //msil->ls();
00128       }
00129 #endif
00130       break;
00131     case (Int_t) E_FIN_OUTER_LAYER: // osim
00132 #if defined _FND_ONL_USE_MAP_FILES_
00133       msil = TMapFile::Create(fSharedMemName[1],"RECREATE",(Int_t)(1048576*FROOT::K_OsimMapSize),"Osim memory mapped file with histograms"); 
00134 #elif defined _FND_ONL_USE_SHARED_FILES_
00135       if(gSystem->AccessPathName(fSharedFileName[1])){
00136         cout << "Shared file missing: creating it now..." << endl;
00137         msil = new TFile(fSharedFileName[1],"RECREATE");
00138       }
00139       else{
00140         cout << "Shared file found: histograms will be recovered..." << endl;
00141         msil = TFile::Open(fSharedFileName[1],"UPDATE");
00142         fMustRecoverHistos = kTRUE;
00143         //msil->ls();
00144       }
00145 #endif
00146       break;
00147     default:    
00148       Error("","Wrong detector number (%d)",fDet);
00149       msil = 0;
00150       TerminateFroot();
00151     }
00152     if(msil) msil->Print();
00153   }
00154 
00155 }
00156 
00157 //________________________________
00158 void TFndSilMon::InitHistos() {
00159 
00160   TString hnam = "";  
00161   TString htit = "";
00162   
00163   Float_t patt_edges[2] = { -0.5 , 1023.5}; // limits for pattern/multiplicity histos
00164   Float_t clus_edges[2] = { -0.5 , 1023.5}; // limits for cluster histos
00165   Float_t CM_edges[2]   = { -0.5 ,    7.5}; // limits for common-mode histos
00166   //--- now relative bins
00167   Int_t patt_bins = (Int_t)( patt_edges[1] - patt_edges[0] );
00168   Int_t clus_bins = (Int_t)( clus_edges[1] - clus_edges[0] ); 
00169   Int_t CM_bins   = (Int_t)(   CM_edges[1] -   CM_edges[0] ); 
00170   
00171   if(shmflg) msil->cd();
00172   // Define Histograms
00173   TString CluHNam = "";
00174   TString CluHTit = "";
00175   
00176   TString det_nam = "";
00177   Int_t lay_idx  = 0;
00178   if(fDet == (Int_t) E_FIN_INNER_LAYER ){
00179     lay_idx  = 0;
00180     det_nam = "Isim";
00181   }
00182   else{
00183     lay_idx  = 1;
00184     det_nam = "Osim"; 
00185   }
00186   //
00187   for(Int_t mod = 0; mod < K_N_Sil_Modules; mod++){
00188     if(fDet == (Int_t) E_FIN_INNER_LAYER && mod > 7) break; // this is ISIM
00189     for(Int_t sid = 0; sid < K_N_Sil_Sides; sid++){
00190       
00191       hnam.Form("%sNoise_%d_%s",det_nam.Data(),mod+1,SilSide_Name(sid).Data());
00192       htit.Form("%s Noise (mod %d, side %s)",det_nam.Data(),mod+1,SilSide_Name(sid).Data());
00193       fH_Sil_Noise[lay_idx][mod][sid] = (fMustRecoverHistos) ? 
00194         ((TH1F*) (msil->Get(hnam))) :
00195         new TH1F(hnam,htit,patt_bins,patt_edges[0],patt_edges[1]);
00196 
00197       hnam.Replace(4,5,"Mult");
00198       htit.Replace(5,5,"Mult");
00199       fH_Sil_Mult[lay_idx][mod][sid] = (fMustRecoverHistos) ? 
00200         ((TH1F*) (msil->Get(hnam))) :
00201         new TH1F(hnam,htit,patt_bins,patt_edges[0],patt_edges[1]);
00202 
00203       hnam.Replace(4,4,"ClustCharge");
00204       htit.Replace(5,4,"Clust-Charge");
00205       fH_Sil_ClCh[lay_idx][mod][sid] = (fMustRecoverHistos) ? 
00206         ((TH1F*) (msil->Get(hnam))) :
00207         new TH1F(hnam,htit,clus_bins,clus_edges[0],clus_edges[1]);
00208         
00209       hnam.Replace(4,11,"CM_sigma");
00210       htit.Replace(5,12,"CM sigma");
00211       fH_Sil_CMsigma[lay_idx][mod][sid] = (fMustRecoverHistos) ? 
00212         ((TH1F*) (msil->Get(hnam))) :
00213         new TH1F(hnam,htit,CM_bins,CM_edges[0],CM_edges[1]);
00214 
00215       hnam.Replace(4,8,"CM_mean");
00216       htit.Replace(5,8,"CM mean");
00217       fH_Sil_CMmean[lay_idx][mod][sid] = (fMustRecoverHistos) ? 
00218         ((TH1F*) (msil->Get(hnam))) :
00219         new TH1F(hnam,htit,CM_bins,CM_edges[0],CM_edges[1]);
00220       
00221       if(sid < 2){//fH_Sil_CleanMult
00222         TString sidnam = ( sid == 0 ) ? "PHI" : "Z";
00223         //
00224         CluHNam.Form("%s_CleanMult_%d_%s",det_nam.Data(),mod+1,sidnam.Data() );
00225         CluHTit.Form("%s Clean Mult. (mod %d, side %s)",det_nam.Data(),mod+1,sidnam.Data() );
00226         fH_Sil_CleanMult[lay_idx][mod][sid] = (fMustRecoverHistos) ? 
00227           ((TH1F*) (msil->Get(CluHNam))) :
00228           new TH1F(CluHNam,CluHTit,clus_bins,clus_edges[0], ( (sid+1) * clus_edges[1]) + (sid * 0.5) );
00229           
00230         CluHNam.Form("%s_ClustChClean_%d_%s",det_nam.Data(),mod+1,sidnam.Data() );
00231         CluHTit.Form("%s Clust.Charge Clean (mod %d, side %s)",det_nam.Data(),mod+1,sidnam.Data() );
00232         fH_Sil_ClChClean[lay_idx][mod][sid] = (fMustRecoverHistos) ? 
00233           ((TH1F*) (msil->Get(CluHNam))) :
00234           new TH1F(CluHNam,CluHTit,clus_bins,clus_edges[0],clus_edges[1] );
00235           
00236         CluHNam.Form("%s_dEdx_%d_%s",det_nam.Data(),mod+1,sidnam.Data() );
00237         CluHTit.Form("%s dEdx (mod %d, side %s)",det_nam.Data(),mod+1,sidnam.Data() );
00238         fH_Sil_dEdx[lay_idx][mod][sid] = (fMustRecoverHistos) ? 
00239           ((TH1F*) (msil->Get(CluHNam))) :
00240           new TH1F(CluHNam,CluHTit,clus_bins,clus_edges[0],clus_edges[1]);
00241       }
00242         
00243       if(sid == 0){
00244         CluHNam.Form("%s_dEdx_PvsZ_%d",det_nam.Data(),mod+1 );
00245         CluHTit.Form("%s dEdx PvsZ (mod %d)",det_nam.Data(),mod+1 );
00246         fH_Sil_dEdx_PvsZ[lay_idx][mod] = (fMustRecoverHistos) ? 
00247           ((TH2F*) (msil->Get(CluHNam))) :
00248           new TH2F(CluHNam,CluHTit,200,clus_edges[0],clus_edges[1],200,clus_edges[0],clus_edges[1]);    
00249 
00250         CluHNam.Form("%s_Pos_PvsZ_%d",det_nam.Data(),mod+1 );
00251         CluHTit.Form("%s Pos PvsZ (mod %d)",det_nam.Data(),mod+1 );
00252 
00253         fH_Sil_Pos_PvsZ[lay_idx][mod] = (fMustRecoverHistos) ? 
00254           ((TH2F*) (msil->Get(CluHNam))) :
00255           new TH2F(CluHNam,CluHTit,982,-9.82,9.82,526,-2.63,2.63);      
00256       }
00257 
00258 
00259     }
00260   }
00261   
00262   //
00263   // Reset Common Mode
00264   //
00265   if(fDet == (Int_t) E_FIN_INNER_LAYER){  //ISIM
00266     for(Int_t nchip = 0; nchip < (Int_t) K_N_Sil_AdcChips; nchip++)
00267       for(Int_t nside = 0; nside < (Int_t) K_N_Sil_Sides; nside++)
00268         for(Int_t nmod = 1; nmod < (Int_t) K_N_Sil_Modules+1; nmod++)
00269           SetZeroCommonMode(nchip,nside,nmod,1);
00270   } else if(fDet == (Int_t) E_FIN_OUTER_LAYER) {  //OSIM
00271     for(Int_t nchip = 0; nchip < (Int_t) K_N_Sil_AdcChips; nchip++)
00272       for(Int_t nside = 0; nside < (Int_t) K_N_Sil_Sides; nside++)
00273         for(Int_t nmod = 1; nmod < (Int_t) K_N_Sil_Modules+1; nmod++)
00274           SetZeroCommonMode(nchip,nside,nmod,2);
00275   }
00276 
00277 }
00278 
00279 //________________________________
00280 void TFndSilMon::Fill() {
00281 
00282   TClonesArray *cl = fndrun->GetCurrentHdt()->GetSilClusters();
00283   Fill(*cl);
00284 
00285 } 
00286 
00287 //________________________________
00288 void TFndSilMon::Fill(const TClonesArray &SilClus) {
00289 
00290   Int_t nhits = SilClus.GetEntries();
00291   //  
00292   if(fDet == (Int_t) E_FIN_INNER_LAYER){  //ISIM
00293     for(Int_t mod = 0; mod < 8; mod++){
00294       for(Int_t sid = 0; sid < K_N_Sil_Sides; sid++){
00295         //Printf("value:  lay %d mod %d sid %d", fDet, mod, sid);
00296         // loop on adc channels
00297         for (Int_t bina=1; bina <= fH_Sil_Noise[0][mod][sid]->GetNbinsX(); bina++)  {
00298           fH_Sil_Noise[0][mod][sid]->SetBinContent(bina,((TFndRun::fgFinHdt->GetSilNoise(bina-1,sid,mod+1,1) != 0) ? ((Double_t) TFndRun::fgFinHdt->GetSilNoise(bina-1,sid,mod+1,1) / (Double_t) K_N_Sil_MulNoise) : 0 ));
00299           //fH_Sil_Noise[0][mod][sid]->SetBinContent(bina,(Double_t) 1.0);
00300         }
00301         // loop on chips
00302         for (Int_t bina=1; bina <= fH_Sil_CMsigma[0][mod][sid]->GetNbinsX(); bina++)  {
00303           FillCommonMode(bina-1,sid,mod+1,1,TFndRun::fgFinHdt->GetIntSilComMod_mean(bina-1,sid,mod+1,1)) ;
00304           fH_Sil_CMsigma[0][mod][sid]->SetBinContent(bina, GetSigmaCommonMode(bina-1,sid,mod+1,1));
00305           fH_Sil_CMmean[0][mod][sid]->SetBinContent(bina, GetMeanCommonMode(bina-1,sid,mod+1,1));
00306         }
00307       }
00308     } 
00309     // --- ISIM filling completed (clusters will follow)   
00310   }
00311   //
00312   else if(fDet == (Int_t) E_FIN_OUTER_LAYER){  //OSIM
00313     for(Int_t mod = 0; mod < K_N_Sil_Modules; mod++){
00314       for(Int_t sid = 0; sid < K_N_Sil_Sides; sid++){
00315         //      Printf("value:  lay %d mod %d sid %d", 1, mod, sid);
00316         // loop on adc channels
00317         for (Int_t bina=1; bina <= fH_Sil_Noise[1][mod][sid]->GetNbinsX(); bina++)  {
00318           fH_Sil_Noise[1][mod][sid]->SetBinContent(bina,((TFndRun::fgFinHdt->GetSilNoise(bina-1,sid,mod+1,2) != 0) ? ((Double_t) TFndRun::fgFinHdt->GetSilNoise(bina-1,sid,mod+1,2) / (Double_t) K_N_Sil_MulNoise) : 0 ));
00319           //fH_Sil_Noise[1][mod][sid]->SetBinContent(bina,(Double_t) 1.0);
00320         }
00321         // loop on chips
00322         for (Int_t bina=1; bina <= fH_Sil_CMsigma[1][mod][sid]->GetNbinsX(); bina++)  {
00323           FillCommonMode(bina-1,sid,mod+1,2,TFndRun::fgFinHdt->GetIntSilComMod_mean(bina-1,sid,mod+1,2)) ;
00324           fH_Sil_CMsigma[1][mod][sid]->SetBinContent(bina, GetSigmaCommonMode(bina-1,sid,mod+1,2));
00325           fH_Sil_CMmean[1][mod][sid]->SetBinContent(bina, GetMeanCommonMode(bina-1,sid,mod+1,2));
00326         }
00327       }
00328     } 
00329     // --- OSIM filling completed (clusters will follow)
00330   }
00331   //
00332   else{ // must not occur
00333     Error("Fill","Wrong layer selected");
00334     TerminateFroot();
00335   }
00336  
00338   // CLUSTERS //
00340 
00341   TFndHSilCluster *hsil = 0;
00342   for (Int_t j=0; j<nhits; j++) {
00343     hsil = (TFndHSilCluster*) SilClus[j];
00344     //    hsil->PrintHit(3);
00345     
00346     // remember not to fill ISIM histos with OSIM clusters
00347     //  or vice-versa ( see next line )
00348     if(fDet != hsil->GetLayer()) continue;
00349 
00350     // Now fill histograms using "hsil"    
00351     if(fDet == (Int_t) E_FIN_INNER_LAYER){  //ISIM
00352       // --- fill ISIM cluster histos
00353       // Printf("value fill histos:  lay %d mod %d ", hsil->GetLayer(), hsil->GetModNum());
00354       //
00355       if (hsil->GetPhiClusterSignal() > -1.)  fH_Sil_ClCh[0][hsil->GetModNum() - 1][0]->Fill(hsil->GetPhiClusterSignal());
00356       if (hsil->GetZetaClusterSignal() > -1.) fH_Sil_ClCh[0][hsil->GetModNum() - 1][( hsil->GetClusterZetaAdcCh() < (Float_t) K_N_Sil_AdcCha) ? 1 : 2]->Fill(hsil->GetZetaClusterSignal()) ;
00357       if (hsil->GetClusterPhiAdcCh() > -1.)   fH_Sil_Mult[0][hsil->GetModNum() - 1][0]->Fill(hsil->GetClusterPhiAdcCh()) ;
00358       if (hsil->GetClusterZetaAdcCh() > -1.)  fH_Sil_Mult[0][hsil->GetModNum() - 1][( hsil->GetClusterZetaAdcCh() < (Float_t) K_N_Sil_AdcCha) ? 1 : 2]->Fill(( hsil->GetClusterZetaAdcCh() < (Float_t) K_N_Sil_AdcCha) ? hsil->GetClusterZetaAdcCh()  : hsil->GetClusterZetaAdcCh()  - (Float_t) K_N_Sil_AdcCha) ;
00359       // --- after clusters control
00360       if(hsil->GetGoodCl() == 1){
00361         fH_Sil_CleanMult[0][hsil->GetModNum() - 1][0]->Fill( hsil->GetClusterPhiAdcCh()  );
00362         fH_Sil_CleanMult[0][hsil->GetModNum() - 1][1]->Fill( hsil->GetClusterZetaAdcCh()  );
00363         fH_Sil_ClChClean[0][hsil->GetModNum() - 1][0]->Fill( hsil->GetPhiClusterSignal()  );
00364         fH_Sil_ClChClean[0][hsil->GetModNum() - 1][1]->Fill( hsil->GetZetaClusterSignal() ) ;
00365         fH_Sil_dEdx[0][hsil->GetModNum() - 1][0] ->Fill( hsil->GetDEDxPhi()  );
00366         fH_Sil_dEdx[0][hsil->GetModNum() - 1][1] ->Fill( hsil->GetDEDxZeta() ) ;
00367         fH_Sil_dEdx_PvsZ[0][hsil->GetModNum() - 1] ->Fill( hsil->GetDEDxZeta(),hsil->GetDEDxPhi() );
00368         fH_Sil_Pos_PvsZ[0][hsil->GetModNum() - 1] ->Fill( hsil->GetLocal_Z(),hsil->GetLocal_Y() );
00369       }
00370 
00371     }
00372     else if(fDet == (Int_t) E_FIN_OUTER_LAYER){  //OSIM
00373       // --- fill OSIM cluster histos
00374       if (hsil->GetPhiClusterSignal() > -1.)  fH_Sil_ClCh[1][hsil->GetModNum() - 1][0]->Fill(hsil->GetPhiClusterSignal());
00375       if (hsil->GetZetaClusterSignal() > -1.) fH_Sil_ClCh[1][hsil->GetModNum() - 1][( hsil->GetClusterZetaAdcCh() < (Float_t) K_N_Sil_AdcCha) ? 1 : 2]->Fill(hsil->GetZetaClusterSignal()) ;
00376       if (hsil->GetClusterPhiAdcCh() > -1.)   fH_Sil_Mult[1][hsil->GetModNum() - 1][0]->Fill(hsil->GetClusterPhiAdcCh()) ;
00377       if (hsil->GetClusterZetaAdcCh() > -1.)  fH_Sil_Mult[1][hsil->GetModNum() - 1][( hsil->GetClusterZetaAdcCh() < (Float_t) K_N_Sil_AdcCha) ? 1 : 2]->Fill(( hsil->GetClusterZetaAdcCh() < (Float_t) K_N_Sil_AdcCha) ? hsil->GetClusterZetaAdcCh()  : hsil->GetClusterZetaAdcCh()  - (Float_t) K_N_Sil_AdcCha) ;
00378       // --- after clusters control
00379       if(hsil->GetGoodCl() == 1){
00380         fH_Sil_CleanMult[1][hsil->GetModNum() - 1][0]->Fill( hsil->GetClusterPhiAdcCh()  );
00381         fH_Sil_CleanMult[1][hsil->GetModNum() - 1][1]->Fill( hsil->GetClusterZetaAdcCh()  );
00382         fH_Sil_ClChClean[1][hsil->GetModNum() - 1][0]->Fill( hsil->GetPhiClusterSignal()  );
00383         fH_Sil_ClChClean[1][hsil->GetModNum() - 1][1]->Fill( hsil->GetZetaClusterSignal() ) ;
00384         fH_Sil_dEdx[1][hsil->GetModNum() - 1][0] ->Fill( hsil->GetDEDxPhi()  );
00385         fH_Sil_dEdx[1][hsil->GetModNum() - 1][1] ->Fill( hsil->GetDEDxZeta() ) ;
00386         fH_Sil_dEdx_PvsZ[1][hsil->GetModNum() - 1] ->Fill( hsil->GetDEDxZeta(),hsil->GetDEDxPhi() );
00387         fH_Sil_Pos_PvsZ[1][hsil->GetModNum() - 1] ->Fill( hsil->GetLocal_Z(),hsil->GetLocal_Y() );
00388       }
00389     }
00390     else{ // must not occur
00391       Error("Fill","Wrong layer selected");
00392       TerminateFroot();
00393     }
00394     
00395   }
00396   
00397 }
00398 
00399 //________________________________
00400 void TFndSilMon::Update(Bool_t purge) {
00401   if(!shmflg) return;
00402 #if defined _FND_ONL_USE_MAP_FILES_
00403   if( msil && msil->IsWritable() ) msil->Update();
00404 #elif defined _FND_ONL_USE_SHARED_FILES_
00405   //  Info("TFndSilMon::Update","writing");
00406   WriteToFile(0,kTRUE);
00407   //  Info("TFndSilMon::Update","cd-ing");
00408   msil->cd();
00409   //  Info("TFndSilMon::Update","purging");
00410   if(purge) msil->Purge();
00411   //  Info("TFndSilMon::Update","flushing");
00412   msil->Flush();
00413   //  Info("TFndSilMon::Update","done");
00414 
00415 
00416   // --- copy shared files from here to shared directory
00417   //     (NFS safe)
00418   TString comm_cp = "";
00419   comm_cp.Form("cp ./ism.file.map %s",FROOT::ExpandPathName("$FND_SHR/ism.file.map").Data());
00420   gSystem->Exec(comm_cp);
00421   comm_cp.Form("cp ./osm.file.map %s",FROOT::ExpandPathName("$FND_SHR/osm.file.map").Data());
00422   gSystem->Exec(comm_cp);
00423 #endif 
00424 
00425   Info("Update","SIL histograms updated (producer)");
00426 
00427 }
00428 
00429 //________________________________
00430 void TFndSilMon::ResetHistos(){
00431   //
00432   // while resetting osim, every isim histogram is
00433   // initialized to zero
00434   for(Int_t lay =0 ; lay <=1 ; lay ++){
00435     for(Int_t mod = 0; mod < K_N_Sil_Modules; mod++){
00436       for(Int_t sid = 0; sid < K_N_Sil_Sides; sid++){
00437         if(fH_Sil_Noise[lay][mod][sid])   fH_Sil_Noise[lay][mod][sid]->Reset();
00438         if(fH_Sil_Mult[lay][mod][sid])    fH_Sil_Mult[lay][mod][sid]->Reset();
00439         if(fH_Sil_ClCh[lay][mod][sid])    fH_Sil_ClCh[lay][mod][sid]->Reset();
00440         if(fH_Sil_CMsigma[lay][mod][sid]) fH_Sil_CMsigma[lay][mod][sid]->Reset();
00441         if(fH_Sil_CMmean[lay][mod][sid])  fH_Sil_CMmean[lay][mod][sid]->Reset();
00442         if(sid<2){
00443           if(fH_Sil_CleanMult[lay][mod][sid])    fH_Sil_CleanMult[lay][mod][sid]->Reset();
00444           if(fH_Sil_ClChClean[lay][mod][sid])    fH_Sil_ClChClean[lay][mod][sid]->Reset();
00445           if(fH_Sil_dEdx[lay][mod][sid])    fH_Sil_dEdx[lay][mod][sid]->Reset();
00446         }
00447       
00448       }
00449       if(fH_Sil_dEdx_PvsZ[lay][mod]) fH_Sil_dEdx_PvsZ[lay][mod]->Reset();
00450       if(fH_Sil_Pos_PvsZ[lay][mod]) fH_Sil_Pos_PvsZ[lay][mod]->Reset();
00451     }
00452   }
00453   
00454   
00455   //
00456   // Reset Common Mode
00457   //
00458   if(fDet == (Int_t) E_FIN_INNER_LAYER){  //ISIM
00459     for(Int_t nchip = 0; nchip < (Int_t) K_N_Sil_AdcChips; nchip++)
00460       for(Int_t nside = 0; nside < (Int_t) K_N_Sil_Sides; nside++)
00461         for(Int_t nmod = 1; nmod < (Int_t) K_N_Sil_Modules+1; nmod++)
00462           SetZeroCommonMode(nchip,nside,nmod,1);
00463   } else if(fDet == (Int_t) E_FIN_OUTER_LAYER) {  //OSIM
00464     for(Int_t nchip = 0; nchip < (Int_t) K_N_Sil_AdcChips; nchip++)
00465       for(Int_t nside = 0; nside < (Int_t) K_N_Sil_Sides; nside++)
00466         for(Int_t nmod = 1; nmod < (Int_t) K_N_Sil_Modules+1; nmod++)
00467           SetZeroCommonMode(nchip,nside,nmod,2);
00468   }
00469 }
00470 
00471 //________________________________
00472 void TFndSilMon::WriteToFile(TString file,Bool_t IsShared) {
00473 
00474   //  cout << "TFndSilMon::WriteToFile called" << endl;
00475 
00476   if(IsShared){
00477     //    Info("TFndSilMon::WriteToFile","Writing histograms in on-line mode");
00478     msil->cd();
00479   }
00480   else{
00481     if(file.IsNull()) fsil->cd();
00482     else {
00483       fout = new TFile(file.Data(),"RECREATE","Sil Histogram File");
00484       fout->cd();
00485     }  
00486   }
00487 
00488   // while resetting osim, every isim histogram is
00489   // initialized to zero
00490   for(Int_t lay =0 ; lay <=1 ; lay ++){
00491     for(Int_t mod = 0; mod < K_N_Sil_Modules; mod++){
00492       for(Int_t sid = 0; sid < K_N_Sil_Sides; sid++){
00493         if(fH_Sil_Noise[lay][mod][sid])   fH_Sil_Noise[lay][mod][sid]->Write();
00494         if(fH_Sil_Mult[lay][mod][sid])    fH_Sil_Mult[lay][mod][sid]->Write();
00495         if(fH_Sil_ClCh[lay][mod][sid])    fH_Sil_ClCh[lay][mod][sid]->Write();
00496         if(fH_Sil_CMsigma[lay][mod][sid]) fH_Sil_CMsigma[lay][mod][sid]->Write();
00497         if(fH_Sil_CMmean[lay][mod][sid])  fH_Sil_CMmean[lay][mod][sid]->Write();
00498         if(sid<2){
00499           if(fH_Sil_CleanMult[lay][mod][sid])    fH_Sil_CleanMult[lay][mod][sid]->Write();
00500           if(fH_Sil_ClChClean[lay][mod][sid])    fH_Sil_ClChClean[lay][mod][sid]->Write();
00501           if(fH_Sil_dEdx[lay][mod][sid])    fH_Sil_dEdx[lay][mod][sid]->Write();
00502         }
00503       }
00504       if(fH_Sil_dEdx_PvsZ[lay][mod]) fH_Sil_dEdx_PvsZ[lay][mod]->Write();
00505       if(fH_Sil_Pos_PvsZ[lay][mod]) fH_Sil_Pos_PvsZ[lay][mod]->Write();
00506     }
00507   }
00508   
00509   if(!file.IsNull()) fout->Close();
00510   delete fout; fout = 0;
00511   
00512 }
00513 
00514 
00515 
00516 
00517 
00518 
00519 
00520 
00521 
00522 
00523 
00524 
00525 
00526 
00527 
00528 
00529 
00530 
00531 
00532 
00533 
00534 
00535 
00536 
00537 
00538 

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