#include <iostream.h>

#include "TFndStbMon.h"
#include "TDirectory.h"
#include "TFndHStb.h"
#include "TObjArray.h"

ClassImp(TFndStbMon);

 TFndStbMon::TFndStbMon(const char *fmode,Int_t stb_tdc_bins,Double_t stb_tdc_min,Double_t stb_tdc_max) {

  stb_mon_tdc = 0;
  stb_mon_pat = 0;

  const char *fhist = "_stb.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 *fstbnam = new Char_t[ilen];
  strcpy(fstbnam,fmode);
  fstbnam = strcat(fstbnam,fhist);
  
  fstb = new TFile(fstbnam,"RECREATE","Stb Histogram File");   
  
  if(shmflg) {
    const char *mfnstb = "stb.map";
    //TMapFile::SetMapAddress(0x4240f000);  
    mstb = TMapFile::Create(mfnstb,"RECREATE",2000000,"Stb memory mapped file with histograms");
    mstb->Print();
  }
  
  stbmult = new TH1F("stbmult","Stb multiplicity",50,-0.5,49.5);
  stbmaptdc = new TH2F("stbmaptdc","Stb TDC pattern (Crown vs Tube)",404,0.5,404.5,7,-0.5,6.5);   
  
  // Define Histogram Parameters
  
  char hname[20];
  char htitle[80];

  for (Int_t ll=0;ll<n_stb_crwn;ll++) {
    sprintf(hname,"stb_pattern_%d",ll+1);
    sprintf(htitle,"Hit Pattern for Crown: %d",ll+1);
    stb_pattern[ll] = new TH1F(hname,htitle,n_stb_hist,0.5,0.5+n_stb_hist);
    stb_pattern[ll]->SetFillColor(4); 
  }
  
  //   STB   TDC Crown 1
  
  if(shmflg) {
    const char *mfnstb1 = "stb_tdc_1.map";
    //TMapFile::SetMapAddress(0x425f8000);  
    stb_tdc_1 = TMapFile::Create(mfnstb1,"RECREATE",2000000,"Stb memory mapped file with TDC histograms (Crown 1)");
    stb_tdc_1->Print();
  }
  
  for (Int_t l=0;l<n_stb_hist;l++) {
    sprintf(hname,"stbtdc_1_%d",l+1);
    sprintf(htitle,"TDC  for Crown: 1 Tube: %d",l+1);
    stbtdc1[l] = new TH1F(hname,htitle,stb_tdc_bins,stb_tdc_min,stb_tdc_max);
    stbtdc1[l]->SetFillColor(6); 
  }
  
  //   STB   TDC Crown 2
  
  if(shmflg) {
    const char *mfnstb2 = "stb_tdc_2.map";
    //TMapFile::SetMapAddress(0x42abd000);  
    stb_tdc_2 = TMapFile::Create(mfnstb2,"RECREATE",2000000,"Stb memory mapped file with TDC histograms (Crown 2)");
    stb_tdc_2->Print();
  }
  
  for (Int_t k=0;k<n_stb_hist;k++) {
    sprintf(hname,"stbtdc_2_%d",k+1);
    sprintf(htitle,"TDC  for Crown: 2 Tube: %d",k+1);
    stbtdc2[k] = new TH1F(hname,htitle,stb_tdc_bins,stb_tdc_min,stb_tdc_max);
    stbtdc2[k]->SetFillColor(6); 
  }
  
  //   STB   TDC Crown 3
  
  if(shmflg) {
    const char *mfnstb3 = "stb_tdc_3.map";
    //TMapFile::SetMapAddress(0x42f82000);  
    stb_tdc_3 = TMapFile::Create(mfnstb3,"RECREATE",2000000,"Stb memory mapped file with TDC histograms (Crown 3)");
    stb_tdc_3->Print();
  }
  
  for (Int_t j=0;j<n_stb_hist;j++) {
    sprintf(hname,"stbtdc_3_%d",j+1);
    sprintf(htitle,"TDC  for Crown: 3 Tube: %d",j+1);
    stbtdc3[j] = new TH1F(hname,htitle,stb_tdc_bins,stb_tdc_min,stb_tdc_max);
    stbtdc3[j]->SetFillColor(6); 
  }
  
  //   STB   TDC Crown 4
  
  if(shmflg) {
    const char *mfnstb4 = "stb_tdc_4.map";
    //TMapFile::SetMapAddress(0x43447000);  
    stb_tdc_4 = TMapFile::Create(mfnstb4,"RECREATE",2000000,"Stb memory mapped file with TDC histograms (Crown 4)");
    stb_tdc_4->Print();
  }
  
  for (Int_t ik=0;ik<n_stb_hist;ik++) {
    sprintf(hname,"stbtdc_4_%d",ik+1);
    sprintf(htitle,"TDC  for Crown: 4 Tube: %d",ik+1);
    stbtdc4[ik] = new TH1F(hname,htitle,stb_tdc_bins,stb_tdc_min,stb_tdc_max);
    stbtdc4[ik]->SetFillColor(6); 
  }
  
  //   STB   TDC Crown 5
  
  if(shmflg) {
    const char *mfnstb5 = "stb_tdc_5.map";
    //TMapFile::SetMapAddress(0x4390c000);  
    stb_tdc_5 = TMapFile::Create(mfnstb5,"RECREATE",2000000,"Stb memory mapped file with TDC histograms (Crown 5)");
    stb_tdc_5->Print();
  }
  
  for (Int_t il=0;il<n_stb_hist;il++) {
    sprintf(hname,"stbtdc_5_%d",il+1);
    sprintf(htitle,"TDC  for Crown: 5 Tube: %d",il+1);
    stbtdc5[il] = new TH1F(hname,htitle,stb_tdc_bins,stb_tdc_min,stb_tdc_max);
    stbtdc5[il]->SetFillColor(6); 
  }
  
  //   STB   TDC Crown 6
  
  if(shmflg) {
    const char *mfnstb6 = "stb_tdc_6.map";
    //TMapFile::SetMapAddress(0x43dd1000);  
    stb_tdc_6 = TMapFile::Create(mfnstb6,"RECREATE",2000000,"Stb memory mapped file with TDC histograms (Crown 6)");
    stb_tdc_6->Print();
  }
  
  for (Int_t jl=0;jl<n_stb_hist;jl++) {
    sprintf(hname,"stbtdc_6_%d",jl+1);
    sprintf(htitle,"TDC  for Crown: 6 Tube: %d",jl+1);
    stbtdc6[jl] = new TH1F(hname,htitle,stb_tdc_bins,stb_tdc_min,stb_tdc_max);
    stbtdc6[jl]->SetFillColor(6); 
  }
  
  stb1d = 0;
  stb2d = 0;
}

 TFndStbMon::TFndStbMon() {

  fstb = 0;
  mstb = TMapFile::Create("stb.map","UPDATE");
  mstb->Print();
  stb_tdc_1 = TMapFile::Create("stb_tdc_1.map","UPDATE");
  stb_tdc_1->Print();
  stb_tdc_2 = TMapFile::Create("stb_tdc_2.map","UPDATE");
  stb_tdc_2->Print();
  stb_tdc_3 = TMapFile::Create("stb_tdc_3.map","UPDATE");
  stb_tdc_3->Print();
  stb_tdc_4 = TMapFile::Create("stb_tdc_4.map","UPDATE");
  stb_tdc_4->Print();
  stb_tdc_5 = TMapFile::Create("stb_tdc_5.map","UPDATE");
  stb_tdc_5->Print();
  stb_tdc_6 = TMapFile::Create("stb_tdc_6.map","UPDATE");
  stb_tdc_6->Print();
  stb_mon_tdc = new TCanvas("stb_mon_tdc","Stb TDCs",640,10,400,400);   
  stb_mon_pat = new TCanvas("stb_mon_pat","Stb Patterns",10,10,900,450);   
  stb1d = 0;
  stb2d = 0;
}

 TFndStbMon::~TFndStbMon() {
  if(fstb) fstb->Close();
  delete fstb;
  mstb->Close();
  delete mstb;
  stb_tdc_1->Close();
  delete stb_tdc_1;
  stb_tdc_2->Close();
  delete stb_tdc_2;
  stb_tdc_3->Close();
  delete stb_tdc_3;
  stb_tdc_4->Close();
  delete stb_tdc_4;
  stb_tdc_5->Close();
  delete stb_tdc_5;
  stb_tdc_6->Close();
  delete stb_tdc_6;

  delete stb_mon_tdc;
  delete stb_mon_pat;

  stb1d = 0;
  delete stb1d;
  stb2d = 0;
  delete stb2d;
}

 void TFndStbMon::Fill(TFndHdt *fndhdt) {

  Int_t nhstb = fndhdt->GetNHStb();
  stbmult->Fill((Float_t) nhstb);
  TObjArray *fHStb = fndhdt->GetStb();
  
  for (Int_t j=0; j<nhstb; j++) {
    TFndHStb *hstb = (TFndHStb*) fHStb->At(j);
    Int_t crown = hstb->GetCrown();
    Int_t tube =  hstb->GetTube();
    Float_t tdc = (Float_t) hstb->GetTdc();
    //Float_t ppan = (Float_t) hstb->GetPP();
    
    stbmaptdc->Fill((Float_t ) tube,(Float_t ) crown);
    if(crown == 1) stbtdc1[tube-1]->Fill(tdc);
    if(crown == 2) stbtdc2[tube-1]->Fill(tdc);
    if(crown == 3) stbtdc3[tube-1]->Fill(tdc);
    if(crown == 4) stbtdc4[tube-1]->Fill(tdc);
    if(crown == 5) stbtdc5[tube-1]->Fill(tdc);
    if(crown == 6) stbtdc6[tube-1]->Fill(tdc);
    stb_pattern[crown-1]->Fill((Float_t) tube);
  }
}

 void TFndStbMon::Update() {

  if(shmflg) {
    mstb->Update();
    stb_tdc_1->Update();
    stb_tdc_2->Update();
    stb_tdc_3->Update();
    stb_tdc_4->Update();
    stb_tdc_5->Update();
    stb_tdc_6->Update();
  }
}

 void TFndStbMon::DisplayTube(Int_t crown,Int_t tube) {

  if(crown < 1 || crown > 6) {
    cout << "WRONG crown number " << crown << endl;
    return;
  }
  if(tube < 1 || tube > 404) {
    cout << "WRONG tube number " << tube << endl;
    return;
  }

  Char_t ccrown[2];
  sprintf(ccrown,"%d",crown);
  Char_t ctube[4];
  sprintf(ctube,"%d",tube);
  
  stb_mon_tdc->Clear();

  TString *hname = new TString("stbtdc_");
  hname->Append(ccrown);
  hname->Append("_");
  hname->Append(ctube);
  
  if(crown == 1)  stb1d = (TH1F *) stb_tdc_1->Get(hname->Data());
  if(crown == 2)  stb1d = (TH1F *) stb_tdc_2->Get(hname->Data());
  if(crown == 3)  stb1d = (TH1F *) stb_tdc_3->Get(hname->Data());
  if(crown == 4)  stb1d = (TH1F *) stb_tdc_4->Get(hname->Data());
  if(crown == 5)  stb1d = (TH1F *) stb_tdc_5->Get(hname->Data());
  if(crown == 6)  stb1d = (TH1F *) stb_tdc_6->Get(hname->Data());
  
  stb1d->Draw();
  delete hname;
  
  stb_mon_tdc->Update();
  
}

 void TFndStbMon::DisplayPattern(Int_t crown) {

  if(crown < 1 || crown > 6) {
    cout << "WRONG crown number " << crown << endl;
    return;
  }

  stb_mon_pat->Clear();
  //  stb_mon_pat->Divide(2,3);

  Char_t ccrown[2];
  sprintf(ccrown,"%d",crown);
  TString *hname = new TString("stb_pattern_");
  hname->Append(ccrown);

  stb1d = (TH1F *) mstb->Get(hname->Data());
  
  stb1d->Draw();
  delete hname;
  
  stb_mon_pat->Update();
  
}

 void TFndStbMon::WriteToFile() {
  fstb->cd();
  stbmult->Write();
  stbmaptdc->Write();

  for(Int_t i=0; i<n_stb_crwn; i++) stb_pattern[i]->Write();
  for(Int_t j=0; j<n_stb_hist; j++) {
    stbtdc1[j]->Write();
    stbtdc2[j]->Write();
    stbtdc3[j]->Write();
    stbtdc4[j]->Write();
    stbtdc5[j]->Write();
    stbtdc6[j]->Write();
  }
}

 void TFndStbMon::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.