#include <iostream.h>

#include "TFndSilMon.h"
#include "TDirectory.h"
#include "TFndHSil.h"
#include "TObjArray.h"

ClassImp(TFndSilMon);

 TFndSilMon::TFndSilMon(const char *fmode) {

   const char *fhist = "_sil.root";
   const char *fonl = "onl";
   
   shmflg = 0;
   if(!strcmp(fmode,fonl)) shmflg = 1;
   //cout << "Online flag is " << onlflg << endl;

   Int_t ilen = strlen(fmode)+strlen(fhist);
   Char_t *fsilnam = new Char_t[ilen];
   strcpy(fsilnam,fmode);
   fsilnam = strcat(fsilnam,fhist);

   fsil = new TFile(fsilnam,"RECREATE","Sil Histogram File");   
   //fsil = 0;
   if(shmflg) {
     const char *mfnsil = "sil.map";
     //TMapFile::SetMapAddress(0x4240f000);  
     msil = TMapFile::Create(mfnsil,"RECREATE",2000000,"Sil memory mapped file with histograms");
     msil->Print();
   }

   ismmult = new TH1F("ismmult","Ism multiplicity",500,-0.5,499.5);
   osmmult = new TH1F("osmmult","Osm multiplicity",500,-0.5,499.5);
   ismmap = new TH2F("ism_map","ISM pattern (Module vs Strip)",1024,0.5,1024.5,24,0.5,24.5);   
   osmmap = new TH2F("osm_map","OSM pattern (Module vs Strip)",1024,0.5,1024.5,30,0.5,30.5);   

   // Define Histogram Parameters

   char hname[20];
   char htitle[80];
      
//   ISM  ADC

   if(shmflg) {
     const char *mfnism = "sil_ism.map";
     //TMapFile::SetMapAddress(0x425f8000);  
     ism_adc = TMapFile::Create(mfnism,"RECREATE",2000000,"Ism memory mapped file");
     ism_adc->Print();
   }

   for (Int_t i=0;i<n_ism_hybr;i++) {
     sprintf(hname,"ism_hybrid_%d",i+1);
     sprintf(htitle,"ISM ADC Pattern for hybrid: %d",i+1);
     ism_adc_pattern[i] = new TH1F(hname,htitle,n_sil_chan,0.5,0.5+n_sil_chan);
     ism_adc_pattern[i]->SetFillColor(4); 
   }

//   OSM  ADC

   if(shmflg) {
     const char *mfnosm = "sil_osm.map";
     //TMapFile::SetMapAddress(0x425f8000);  
     osm_adc = TMapFile::Create(mfnosm,"RECREATE",2000000,"Osm memory mapped file");
     osm_adc->Print();
   }

   for (Int_t l=0;l<n_osm_hybr;l++) {
     sprintf(hname,"osm_hybrid_%d",l+1);
     sprintf(htitle,"OSM ADC Pattern for hybrid: %d",l+1);
     osm_adc_pattern[l] = new TH1F(hname,htitle,n_sil_chan,0.5,0.5+n_sil_chan);
     osm_adc_pattern[l]->SetFillColor(6); 
   }

}

 TFndSilMon::~TFndSilMon() {
  if(fsil) fsil->Close();
  delete fsil;
  msil->Close();
  delete msil;
  ism_adc->Close();
  delete ism_adc;
  osm_adc->Close();
  delete osm_adc;
}

 void TFndSilMon::Fill(TFndHdt *fndhdt) {

  Int_t nhsil = fndhdt->GetNHSil();
  TObjArray *fHSil = fndhdt->GetSil();

  Int_t nhism = 0;
  Int_t nhosm = 0;
  for (Int_t i=0;i<n_ism_hybr;i++) ism_adc_pattern[i]->Reset();
  for (Int_t l=0;l<n_osm_hybr;l++) osm_adc_pattern[l]->Reset();
  
  for (Int_t j=0; j<nhsil; j++) {
    TFndHSil *hsil = (TFndHSil*) fHSil->At(j);
    Int_t module = hsil->GetModule();
    Int_t section = hsil->GetSection();
    Int_t strip = hsil->GetStrip();
    Int_t adc = hsil->GetAdc();
    
    Int_t index = (module-1)*3+section;
    if(module > 0 && module <= 8) {
      nhism++;
      ism_adc_pattern[index]->Fill((Float_t) strip, (Float_t) adc);
      ismmap->Fill((Float_t) strip, (Float_t) index);
    } else if(module >= 9 && module <= 18) {
      nhosm++;
      osm_adc_pattern[index-24]->Fill((Float_t) strip, (Float_t) adc);
      osmmap->Fill((Float_t) strip, (Float_t) index);
    } else {
      cout << "Wrong module number: " << module << endl;
    }
  }
  
  ismmult->Fill((Float_t) nhism);
  osmmult->Fill((Float_t) nhosm);
}

 void TFndSilMon::Update() {

  if(shmflg) {
    msil->Update();
    ism_adc->Update();
    osm_adc->Update();
  }
}

 void TFndSilMon::WriteToFile() {
  fsil->cd();
  ismmult->Write();
  ismmap->Write();
  osmmult->Write();
  osmmap->Write();
}

 void TFndSilMon::Streamer(TBuffer &R__b) {}















ROOT page - Class index - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.