#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>

#include "TObjectTable.h"
#include "TBranch.h"
#include "TFndFeeMap.h"
#include "TFndConst.h"
#include "TFndRdt.h"
#include "TFndHdt.h"
#include "TFndRawEqp.h"
#include "TFndRawSil.h"
#include "TFndHHdr.h"
#include "TFndHSil.h"
#include "TFndHTof.h"
#include "TFndHLmd.h"
#include "TFndHStb.h"
#include "TFndCorbo.h"
#include "TFndTrig.h"
#include "Bytes.h"

//******************************************************************/
//*-------> UNIX only */
//******************************************************************/

#include <sys/file.h>
#include <sys/ioctl.h>
#include <sys/types.h>

#include <sys/socket.h>
#include <sys/un.h>

#include <netinet/in.h>
#include <netdb.h>
#include "TObjectTable.h"

ClassImp(TFndRdt);

 TFndRdt::TFndRdt() { 
  phdr = new TFndHHdr();
  pgts = new TFndRawEqp();
  ptof = new TFndRawEqp();
  pism = new TFndRawSil();
  posm = new TFndRawSil();
  plmd = new TFndRawEqp();
  pstb = new TFndRawEqp();
}

 TFndRdt::~TFndRdt() {  
  delete phdr;
  delete pgts;
  delete ptof;
  delete pism; 
  delete posm;
  delete plmd;
  delete pstb;
}

 TFndRdt::TFndRdt(TFndHHdr *hdr, TFndRawEqp *gts, TFndRawEqp *tof, TFndRawSil *ism, TFndRawSil *osm, TFndRawEqp *lmd, TFndRawEqp *stb) {
  phdr = hdr;
  pgts = gts;
  ptof = tof;
  pism = ism;
  posm = osm;
  plmd = lmd;
  pstb = stb;
}

//******************************************************************/
//*                     Build  Gts  Hits  Tree                     */
//******************************************************************/

 void TFndRdt::GtsTree(TFndHdt* fev, TFndFeeMap* fndfeemap) {

  TFndTrig *fTrig = new TFndTrig(this);
  fev->AddTrg(fTrig);
}

//******************************************************************/
//*                     Build  Ism  Hits  Tree                     */
//******************************************************************/

 void TFndRdt::IsmTree(TFndHdt* fev, TFndFeeMap* fndfeemap) {

  TFndRawSil *ism = this->GetIsm();
  for(Int_t k=0; k<TFndConst::kN_CRAMS; k++) {
    Int_t clen = (Int_t) ism->GetCramLen(k);
    if(clen) {
      UInt_t *pcram = ism->GetCram(k);
      UInt_t sect = *(pcram+1);
      UInt_t ncram = ((*pcram)>>0x10)&0xF;
      ncram = (ncram-4)*2+sect;
      //UInt_t addr = *(pcram);
      //printf("Cram %d, Address %X, Section %d, Length %dn",ncram,addr,sect,clen);
      for(Int_t j=3; j<clen; j++) {
        ULong_t stripn = (*(pcram+j)) << 9; 
        stripn = stripn >> 21;
        Int_t nstrip = (Int_t) stripn;
        ULong_t adcv = (*(pcram+j)) << 20; 
        adcv = adcv >> 20;
        Int_t adc = (Int_t) adcv - 200;
	UInt_t noisev = (*(pcram+j)) << 1;
        noisev = noisev >> 24;
	Short_t noise = (Short_t) noisev/10;
        Short_t nmodule = fndfeemap->GetSilModule(ncram);
        Short_t nsection = fndfeemap->GetSilSection(ncram);
	Short_t nhybrid = (Short_t) ncram;
        TFndHSil *hit = new TFndHSil(nhybrid,nmodule,nsection,nstrip,adc,noise);
        fev->AddHit(hit);  
        //hit->Print();
        }
      }
    }

}

//******************************************************************/
//*                     Build  Osm  Hits  Tree                     */
//******************************************************************/

 void TFndRdt::OsmTree(TFndHdt* fev, TFndFeeMap* fndfeemap) {

  TFndRawSil *osm = this->GetOsm();
  for(Int_t k=0; k<TFndConst::kN_CRAMS; k++) {
    Int_t clen = (Int_t) osm->GetCramLen(k);
    if(clen) {
      UInt_t *pcram = osm->GetCram(k);
      UInt_t sect = *(pcram+1);
      UInt_t ncram = ((*pcram)>>0x10)&0xF;
      ncram = (ncram-4)*2+sect;
      //UInt_t addr = *(pcram);
      //printf("Cram %d, Address %X, Section %d, Length %dn",ncram,addr,sect,clen);
      for(Int_t j=3; j<clen; j++) {
        ULong_t stripn = (*(pcram+j)) << 9; 
        stripn = stripn >> 21;
        Int_t nstrip = (Int_t) stripn;
        ULong_t adcv = (*(pcram+j)) << 20; 
        adcv = adcv >> 20;
        Int_t adc = (Int_t) adcv - 200;
	UInt_t noisev = (*(pcram+j)) << 1;
        noisev = noisev >> 24;
	Short_t noise = (Short_t) noisev/10;
        Short_t nmodule = fndfeemap->GetSilModule(ncram);
        Short_t nsection = fndfeemap->GetSilSection(ncram);
	Short_t nhybrid = (Short_t) ncram;
        TFndHSil *hit = new TFndHSil(nhybrid,nmodule,nsection,nstrip,adc,noise);
        fev->AddHit(hit);  
        //hit->Print();
        }
      }
    }

}

//******************************************************************/
//*                     Build  Tof  Hits  Tree                     */
//******************************************************************/

 void TFndRdt::TofTree(TFndHdt* fev, TFndFeeMap* fndfeemap) {

  Int_t n_adc_hit = this->TofAdcHit(fev,fndfeemap);
  Int_t n_tdc_hit = this->TofTdcHit(fev,fndfeemap);
  //  cout << n_adc_hit << " tof ADC hits, " << n_tdc_hit << " tof TDC hits" << endl;

  }


 Int_t TFndRdt::TofAdcHit(TFndHdt* fev, TFndFeeMap* fndfeemap) {

//*--------> TOF hit <----------*/
   TFndHTof *hit;

   UInt_t *ladcptr=0;
   UInt_t ladclen=0;

// ADC equipment
//   cout << "ADC equipment" << endl;

   TFndRawEqp *tofptr = this->GetTof();
//   cout << "length " << endl;
   ladcptr = tofptr->GetEqp(5);
   ladclen = tofptr->GetEqpLen(5);
 
   Int_t n_tof_hit = 0;

    if(ladclen) {
     Int_t tof_adc_cnt;
     Int_t tof_adc_chn;
     Int_t tof_adc_brd;
     Int_t i=0;
     while(i < (Int_t) ladclen-1) {
       if(i>0) { ladcptr++; i++; }
       Int_t n_conv = *ladcptr;
  //            cout << n_conv << " conversions" << endl;
       for(Int_t k=0;k<n_conv;k++) {
	 i++;
         ladcptr++;
         tof_adc_cnt = (Int_t) (*ladcptr)&0xFFF;
         tof_adc_chn = (Int_t) ((*ladcptr)>>0x10)&0x3F;
         tof_adc_brd = (Int_t) ((*ladcptr)>>0x17)&0x1F;
	//         cout << "tof_adc_cnt[" << i <<"] " << tof_adc_cnt << endl;
        // cout << "tof_adc_chn[" << i <<"] " << tof_adc_chn << endl;
        // cout << "tof_adc_brd[" << i <<"] " << tof_adc_brd << endl;
         Int_t tofslb1 = 0;
         Int_t rflag1 = -1;
         if(fndfeemap->IsThere()) {
           tofslb1 = fndfeemap->GetTofAdcSlb(tof_adc_chn);
           rflag1 = fndfeemap->GetTofAdcSide(tof_adc_chn);
           Int_t hit_found = 0;
           for(Int_t j=0; j<n_tof_hit;j++){
             TFndHTof *hadc = fev->GetHTof(j);
             Int_t tofslb = hadc->GetSlab();
             if(tofslb1 >= 101 && tofslb1<=120 && tofslb1 == tofslb){
               hit_found = 1; 
               //cout << "rflag1 = " << rflag1 << endl;
               if(rflag1 == 0)
                 hadc->SetAdcF(tof_adc_cnt);
               else if(rflag1 == 1)
                 hadc->SetAdcR(tof_adc_cnt);
               //hadc->Print();
               break;
               } 
             }

           if(hit_found == 0 && tofslb1 >= 101 && tofslb1<=120) {
//      CREAZIONE DELL'HIT
             Int_t Tflag = 0;
	     //             TFndHTof *hit;
             if(rflag1 == 0)
               Tflag = 1;
             else if(rflag1 == 1)
               Tflag = 2;
             hit = new TFndHTof(tofslb1,tof_adc_cnt,Tflag);
             fev->AddHit(hit);
             n_tof_hit++;
	     //cout << n_tof_hit << "tof hits" << endl;
             //hit->Print(); 
             }
           }
         }
       i++;
       ladcptr++;
       }
     }
  return n_tof_hit;
}
 
 Int_t TFndRdt::TofTdcHit(TFndHdt* fev, TFndFeeMap* fndfeemap) {

//*--------> TOF hit <----------*/

    Int_t n_tof_hit=0;

    UInt_t *ltdcptr = 0;
    UInt_t ltdclen = 0;

//    TDC equipment
//    cout <<"TDC equipment" << endl;

    TFndRawEqp *tofptr = this->GetTof();
    ltdcptr = tofptr->GetEqp(6);
    ltdclen = tofptr->GetEqpLen(6);

    if(ltdclen) {
      Int_t tof_tdc_cnt;
      Int_t tof_tdc_chn; 
      Int_t tof_tdc_brd;
      Int_t i=0;
      while(i < (Int_t) ltdclen-1) {
       if(i>0) { ltdcptr++; i++; }
       Int_t n_conv = *ltdcptr;
       //       cout << n_conv << " conversions" << endl;
        for(Int_t k=0;k<n_conv;k++) {
	 i++;
         ltdcptr++;
         tof_tdc_cnt = (Int_t) (*ltdcptr)&0xFFF;
         tof_tdc_chn = (Int_t) ((*ltdcptr)>>0x10)&0x3F;
         tof_tdc_brd = (Int_t) ((*ltdcptr)>>0x17)&0x1F;

         //cout << "tof_tdc_cnt[" << i << "] = " << tof_tdc_cnt << endl;
         //cout << "tof_tdc_chn[" << i << "] = " << tof_tdc_chn << endl; 
         //cout << "tof_tdc_brd[" << i << "] = " << tof_tdc_brd << endl; 

         Int_t tdcslb1 = 0;
         Int_t rflag1  = -1;
         if(fndfeemap->IsThere()) {

          tdcslb1 = fndfeemap->GetTofTdcSlb(tof_tdc_chn);
          rflag1 = fndfeemap->GetTofTdcSide(tof_tdc_chn); 

          //cout << "tdcslb1 = " << tdcslb1 << endl;
          //cout << "rflag1  = " << rflag1  << endl;
          
          Int_t hit_found = 0;
          n_tof_hit = fev->GetNHTof();
          //cout << "n_tof_hit = " << n_tof_hit << endl;
          for(Int_t j=0;j<n_tof_hit;j++) {
            TFndHTof *htdc = fev->GetHTof(j);
            Int_t tdcslb = htdc->GetSlab();
            if(tdcslb1 >= 101 && tdcslb1 <= 120 && tdcslb1 == tdcslb){
              hit_found = 1;
              if(rflag1 == 0)
                htdc->SetTdcF(tof_tdc_cnt);
              else if(rflag1 == 1)
                htdc->SetTdcR(tof_tdc_cnt);
              break;
              }
            }
          if(hit_found == 0 && tdcslb1 >= 101 && tdcslb1<=120) {

//  CREAZIONE DELL' HIT          
            Int_t Tflag = 0;                   
            TFndHTof *hit;
            if(rflag1 == 0)
              Tflag = 3;
            else if(rflag1 == 1)
              Tflag = 4;
            hit = new TFndHTof(tdcslb1,tof_tdc_cnt,Tflag);    
            fev->AddHit(hit);
            n_tof_hit++;
            //hit->Print();
            }
           }
	  }
        }
      }
    return n_tof_hit;
} 

//******************************************************************/
//*                     Build  Lmd  Hits  Tree                     */
//******************************************************************/

 void TFndRdt::LmdTree(TFndHdt* fev, TFndFeeMap* fndfeemap) {

  Int_t n_adc_hit = this->LmdAdcHit(fev,fndfeemap);
  Int_t n_tdc_hit = this->LmdTdcHit(fev,fndfeemap);
//  cout << n_adc_hit << " lmd ADC hits; " << n_tdc_hit << " lmd TDC hits" << endl;

}

 Int_t TFndRdt::LmdAdcHit(TFndHdt* fev, TFndFeeMap* fndfeemap) {

//*--------> LMD hit <----------*/

   UInt_t *ladcptr=0;
   UInt_t ladclen=0;

// ADC equipment
//   cout << "ADC equipment" << endl;

   TFndRawEqp *lmdptr = this->GetLmd();
   ladcptr = lmdptr->GetEqp(5);
   ladclen = lmdptr->GetEqpLen(5);
   //   lmdptr->PrtEqp(5);

   //   Int_t n_adc_hit = ladclen;
 
   Int_t n_lmd_hit = 0;

   if(ladclen) {
     Int_t lmd_adc_cnt=0;
     Int_t lmd_adc_chn=0;
     Int_t lmd_adc_brd=0;
     Int_t i=0;
     while(i < (Int_t) ladclen-1) {
       if(i>0) { ladcptr++; i++; }
       Int_t n_conv = *ladcptr;
       //cout << n_conv << " conversions" << endl;
       for(Int_t k=0;k<n_conv;k++) {
	i++;
        ladcptr++;
	lmd_adc_cnt = (Int_t) (*ladcptr)&0xFFF;
        lmd_adc_chn = (Int_t) ((*ladcptr)>>0x10)&0x3F;
        lmd_adc_brd = (Int_t) ((*ladcptr)>>0x17)&0x1F;

        //cout << "lmd_adc_cnt " << lmd_adc_cnt << endl;
        //cout << "lmd_adc_brd " << lmd_adc_brd;
        //cout << ", lmd_adc_chn " << lmd_adc_chn << endl;

        Int_t adcdch1 = 0;
        Int_t adcwir1 = 0;
        Int_t rflag1 = -1;
        if(fndfeemap->IsThere()) {

         adcdch1 = fndfeemap->GetLmdAdcDch(lmd_adc_brd,lmd_adc_chn);
         adcwir1 = fndfeemap->GetLmdAdcWire(lmd_adc_brd,lmd_adc_chn);
         rflag1 = fndfeemap->GetLmdAdcSide(lmd_adc_brd,lmd_adc_chn);
             
         Int_t hit_found = 0;
         for(Int_t j=0; j<n_lmd_hit;j++){
           TFndHLmd *hadc = fev->GetHLmd(j);
           Int_t adcdch = hadc->GetCham();
           Int_t adcwir = hadc->GetWire();
           if(adcdch1 != 0 && adcwir1 != 0 && adcdch1 == adcdch && adcwir1 == adcwir){
             hit_found = 1;  
	     //             cout << "Dch" << adcdch1 << ", wire " << adcwir1 << ", flag " << rflag1 << endl;
             if(rflag1 == 1)
               hadc->SetAdcF(lmd_adc_cnt);
             else if(rflag1 == 0)
               hadc->SetAdcR(lmd_adc_cnt);
             //hadc->Print();
             break;
             } 
           }
         if(hit_found == 0 && adcdch1 != 0 && adcwir1 != 0) {
//      CREAZIONE DELL'HIT
           Int_t Tflag = 0;
           TFndHLmd *hit;
           if(rflag1 == 0)
             Tflag = 2;
           else if(rflag1 == 1)
             Tflag = 1;
           
           hit = new TFndHLmd(adcdch1,adcwir1,lmd_adc_cnt,Tflag);
           //cout << "Dch" << adcdch1 << ", wire " << adcwir1 << ", flag " << rflag1 << endl;
           fev->AddHit(hit);
           n_lmd_hit++;
           //hit->Print(); 
           }
         }
        }
      i++;
      ladcptr++;
      }
     }
  return n_lmd_hit;
}
 
 Int_t TFndRdt::LmdTdcHit(TFndHdt* fev, TFndFeeMap* fndfeemap) {

//*--------> LMD hit <----------*/

    Int_t n_lmd_hit=0;

    UInt_t *ltdcptr = 0;
    UInt_t ltdclen = 0;

//  TDC equipment
//  cout <<"TDC equipment" << endl;

    TFndRawEqp *lmdptr = this->GetLmd();
    ltdcptr = lmdptr->GetEqp(7);
    ltdclen = lmdptr->GetEqpLen(7);
    //lmdptr->PrtEqp(7);
    
    //cout << "ltdclen " << ltdclen << endl;
    //    cout << "ltdcptr " << ltdcptr << endl;
    if(ltdclen) {
      Int_t lmd_tdc_cnt;
      Int_t lmd_tdc_chn; 
      Int_t lmd_tdc_brd;
      Int_t lmd_tdc_slt;
      Int_t i=0;
      while(i < (Int_t) ltdclen-1) {
        if(i>0) { ltdcptr++; i++; }
        Int_t n_conv = (*ltdcptr)&0xFFFFFF;
        //Int_t n_cage = ((*ltdcptr)>>0x18)&0xF;
	//        cout << "number of conversions: " << n_conv << endl;
        //cout << "cage number: " << n_cage << endl;
        for(Int_t k=0;k<n_conv;k++) {
	  i++;
          ltdcptr++;
          lmd_tdc_cnt = (Int_t) (*ltdcptr)&0xFFFF;
          lmd_tdc_chn = (Int_t) ((*ltdcptr)>>0x11)&0x7F;
          lmd_tdc_brd = (Int_t) ((*ltdcptr)>>0x1B)&0x1F;
          if(lmd_tdc_brd == 17)
   	    lmd_tdc_slt = 1;
	  else if(lmd_tdc_brd == 18)
	    lmd_tdc_slt = 3;
	  else if(lmd_tdc_brd == 19)
	    lmd_tdc_slt = 4;
	  else if(lmd_tdc_brd == 20)
	    lmd_tdc_slt = 6;

	  /*
          cout << "lmd_tdc_cnt[" << i << "] = " << lmd_tdc_cnt << endl;
          cout << "lmd_tdc_chn[" << i << "] = " << lmd_tdc_chn << endl; 
          cout << "lmd_tdc_brd[" << i << "] = " << lmd_tdc_brd << endl; 
          cout << "lmd_tdc_slt[" << i << "] = " << lmd_tdc_slt << endl;
	  */

          Int_t tdcdch1 = 0;
          Int_t tdcwir1 = 0;
          Int_t rflag1  = -1;
          if(fndfeemap->IsThere()) {

            tdcdch1 = fndfeemap->GetLmdTdcDch(lmd_tdc_slt,lmd_tdc_chn);
            tdcwir1 = fndfeemap->GetLmdTdcWire(lmd_tdc_slt,lmd_tdc_chn);
            rflag1 = fndfeemap->GetLmdTdcSide(lmd_tdc_slt,lmd_tdc_chn); 
	    /*
            cout << "tdcdch1 = " << tdcdch1 << endl;
            cout << "tdcwir1 = " << tdcwir1 << endl;
            cout << "rflag1  = " << rflag1  << endl;
	    */          
            Int_t hit_found = 0;
            n_lmd_hit = fev->GetNHLmd();
            //cout << "n_lmd_hit = " << n_lmd_hit << endl;
            for(Int_t j=0;j<n_lmd_hit;j++) {
              TFndHLmd *htdc = fev->GetHLmd(j);
              Int_t tdcdch = htdc->GetCham();
              Int_t tdcwir = htdc->GetWire();
              if(tdcdch1 != 0 && tdcwir1 != 0 && tdcdch1 == tdcdch && tdcwir1 == tdcwir){
                //cout << "Dch" << tdcdch1 << ", wire " << tdcwir1 << ", flag " << rflag1 << endl;
                hit_found = 1;
                if(rflag1 == 1)
                  htdc->SetTdcF(lmd_tdc_cnt);
                else if(rflag1 == 0)
                  htdc->SetTdcR(lmd_tdc_cnt);
                break;
                }
              }
            if(hit_found == 0 && tdcdch1 != 0 && tdcwir1 != 0) {

//  CREAZIONE DELL' HIT          
              Int_t Tflag = 0;                   
              TFndHLmd *hit;
              if(rflag1 == 0)
                Tflag = 4;
              else if(rflag1 == 1)
                Tflag = 3;
              //cout << "Dch" << tdcdch1 << ", wire " << tdcwir1 << ", flag " << rflag1 << endl;
              hit = new TFndHLmd(tdcdch1,tdcwir1,lmd_tdc_cnt,Tflag);    
              fev->AddHit(hit);
              n_lmd_hit++;
              //hit->Print();
              }
            }
          }
        }
      }
    return n_lmd_hit;
} 
//******************************************************************/
//*                     Build  Stb  Hits  Tree                     */
//******************************************************************/

 void TFndRdt::StbTree(TFndHdt* fev, TFndFeeMap* fndfeemap) {

//*--------> stb hit <----------*/

   Int_t n_stb_hit=0;
   TFndHStb *hit;
   UInt_t *ltdcptr = 0;
   UInt_t ltdclen = 0;

   TFndRawEqp *stbptr = this->GetStb();
   ltdcptr = stbptr->GetEqp(7);
   //   cout << "stb tdc equipment: " << endl;
   //stbptr->PrtEqp(7);
   ltdclen = stbptr->GetEqpLen(7);
   //cout << "stb tdc buffer length: " << ltdclen << endl;

   if(ltdclen) {
      Int_t stb_tdc_cnt;
      Int_t stb_tdc_chn; 
      Int_t stb_tdc_brd;
      Int_t i=0;
      while(i < (Int_t) ltdclen-1) {
        if(i>0) { ltdcptr++; i++; }
        Int_t n_conv = (*ltdcptr)&0xFFFFFF;
        Int_t n_cage = ((*ltdcptr)>>0x18)&0xF;
        //cout << "number of conversions: " << n_conv << endl;
        //cout << "cage number: " << n_cage << endl;
        for(Int_t k=0;k<n_conv;k++) {
	  i++;
          ltdcptr++;
          stb_tdc_cnt = (Int_t) (*ltdcptr)&0xFFFF;
          stb_tdc_chn = (Int_t) ((*ltdcptr)>>0x11)&0x7F;
          stb_tdc_brd = (Int_t) ((*ltdcptr)>>0x1B)&0x1F;
	  /*
	  cout << "stb_tdc_cnt[" << i << "] = " << stb_tdc_cnt << " ";
          cout << "stb_tdc_chn[" << i << "] = " << stb_tdc_chn << " "; 
          cout << "stb_tdc_brd[" << i << "] = " << stb_tdc_brd << endl; 
	  */
	  if(stb_tdc_brd < 6 || stb_tdc_brd > 21) cout << "WARNING: board   # " << stb_tdc_brd << endl; 
	  if(stb_tdc_chn < 0 || stb_tdc_chn > 95) cout << "WARNING: channel # " << stb_tdc_chn << endl;
 
//*--------> map stb tdc channel to stb wire <----------*/

          Int_t tdcwir = 0;
          Int_t ppanel = 0;
          if(fndfeemap->IsThere()) {
            tdcwir = fndfeemap->GetStbWire(n_cage,stb_tdc_brd,stb_tdc_chn);
            ppanel = fndfeemap->GetStbPatchPanel(n_cage,stb_tdc_brd,stb_tdc_chn);
            }
          if(tdcwir == 0)  {
	    cout << "WARNING: Stb wire = 0; cage: " << n_cage << ", board: " << stb_tdc_brd << ", channel: " << stb_tdc_chn << ", content: " << stb_tdc_cnt << endl;
            }

//*--------> add stb hit <----------*/

          Int_t crown = tdcwir/1000;
          Int_t tube = tdcwir-crown*1000;
	  if(crown < 1 || crown > 6) cout << "WARNING: crown # " << crown << endl;
	  if(tube < 1 || tube > 404) cout << "WARNING: tube  # " << tube << endl;
          hit = new TFndHStb(crown,tube,ppanel,stb_tdc_cnt);
          fev->AddHit(hit);
          n_stb_hit++;
          //hit->Print();
          }
        }
   } 
}

 void TFndRdt::Dump() {

   cout << "Header" << endl;
   phdr->Print();
   cout << "Trigger" << endl;
   if(pgts) pgts->Dump();
   cout << "Time of Flight" << endl;
   if(ptof) ptof->Dump();
   cout << "Inner Silicon" << endl;
   if(pism) pism->Dump();
   cout << "Outer Silicon" << endl;
   if(posm) posm->Dump();
   cout << "Drift Chambers" << endl;
   if(plmd) plmd->Dump();
   cout << "Straw Tubes" << endl;
   if(pstb) pstb->Dump();
}



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.