#ifndef HMDCSETUP_H
#define HMDCSETUP_H
#include "TNamed.h"
#include "TObject.h"
#include "TObjArray.h"
#include "TArrayI.h"
#include "TArrayF.h"
#include "hparcond.h"

class HMdcDetector;
class HParamList;
class HMdcDigitizer;
class HMdcCalibrater1;
class HMdcSetup;

class HMdcDigitizerSetup : public TNamed {
protected:
    HMdcSetup* setup;
    Int_t tdcModeDigi;        // leading and trailing edge or 2 times leading edge
    Int_t NtupleDigi;         // write NTuple
    Int_t useTofDigi;         // add tof to drift time in cal1
    Int_t useErrorDigi;       // add error to drift time in cal1
    Int_t useWireOffsetDigi;  // add signal time on wire to drift time in cal1
    Int_t useWireStatDigi;    // use wirestat container for dead wires/efficiency
    Int_t embeddingModeDigi;  // keep geant hits or merge realistic
    Int_t useTimeCutsDigi;    // use/d not use time cuts

    Int_t  offsetsOnDigi;     // switch on/off use offset
    Int_t  cellEffOnDigi;     // switch on/off use cellEff
    Int_t  noiseOnDigi;       // switch on/off use noise

    TArrayF offsetsDigi;      // offset in ns to be substracted from (drift time + tof) per plane
    TArrayF cellEffDigi;      // Efficiency level of cell per plane
    Int_t noiseModeDigi;      // switch the different noise modes
    TArrayF noiseLevelDigi;   // noise level per plane
    TArrayI noiseRangeLoDigi; // lower boundery for noise simulation per plane
    TArrayI noiseRangeHiDigi; // upper boundery for noise simulation per plane

public:
    HMdcDigitizerSetup(const Char_t* name="",const Char_t* title="",HMdcSetup* set=0);
    ~HMdcDigitizerSetup();
    void   setTdcModeDigi(Int_t mode)         {tdcModeDigi=mode;}
    void   setNtupleDigi(Bool_t ntuple)       {NtupleDigi=(Int_t)ntuple;}
    void   setUseTofDigi(Bool_t tof)          {useTofDigi=(Int_t)tof;}
    void   setUseErrorDigi(Bool_t err)        {useErrorDigi=(Int_t)err;}
    void   setUseWireOffsetDigi(Bool_t off)   {useWireOffsetDigi=(Int_t)off;}
    void   setUseWireStatDigi(Bool_t stat)    {useWireStatDigi=(Int_t)stat;}
    void   setUseTimeCutsDigi(Bool_t stat)    {useTimeCutsDigi=(Int_t)stat;}
    void   setEmbeddingModeDigi(Int_t mode)   {embeddingModeDigi=mode;}
    void   setNoiseModeDigi(Int_t noise)      {noiseModeDigi=noise;}
    void   setNoiseOffDigi(Int_t noiseoff)    {noiseOnDigi=noiseoff;}
    void   setOffsetsOffDigi(Int_t offsetsoff){offsetsOnDigi=offsetsoff;}
    void   setCellEffOffDigi(Int_t effoff)    {cellEffOnDigi=effoff;}
    void   setNoiseLevelDigi(Float_t l0,Float_t l1,Float_t l2,Float_t l3)
    {
	noiseLevelDigi[0]=l0;
        noiseLevelDigi[1]=l1;
        noiseLevelDigi[2]=l2;
        noiseLevelDigi[3]=l3;
    }
    void   setOffsetsDigi(Float_t o0,Float_t o1,Float_t o2,Float_t o3)
    {
	offsetsDigi[0]=o0;
        offsetsDigi[1]=o1;
        offsetsDigi[2]=o2;
        offsetsDigi[3]=o3;
    }
    void   setCellEffDigi(Float_t e0,Float_t e1,Float_t e2,Float_t e3)
    {
	cellEffDigi[0]=e0;
        cellEffDigi[1]=e1;
        cellEffDigi[2]=e2;
        cellEffDigi[3]=e3;
    }
    void   setNoiseRangeDigi(Int_t rLo0,Int_t rLo1,Int_t rLo2,Int_t rLo3,
			     Int_t rHi0,Int_t rHi1,Int_t rHi2,Int_t rHi3)
    {
	noiseRangeLoDigi[0]=rLo0;
        noiseRangeLoDigi[1]=rLo1;
        noiseRangeLoDigi[2]=rLo2;
        noiseRangeLoDigi[3]=rLo3;
	noiseRangeHiDigi[0]=rHi0;
        noiseRangeHiDigi[1]=rHi1;
        noiseRangeHiDigi[2]=rHi2;
        noiseRangeHiDigi[3]=rHi3;
    }
    Int_t  getTdcModeDigi()      {return tdcModeDigi;}
    Bool_t getNtupleDigi()       {return (Bool_t)NtupleDigi;}
    Bool_t getUseTofDigi()       {return (Bool_t)useTofDigi;}
    Bool_t getUseErrorDigi()     {return (Bool_t)useErrorDigi;}
    Bool_t getUseWireOffsetDigi(){return (Bool_t)useWireOffsetDigi;}
    Bool_t getUseWireStatDigi()  {return (Bool_t)useWireStatDigi;}
    Bool_t getUseTimeCutsDigi()  {return (Bool_t)useTimeCutsDigi;}
    Int_t  getEmbeddingModeDigi(){return embeddingModeDigi;}
    Int_t  getNoiseModeDigi()    {return noiseModeDigi;}
    Int_t  getNoiseOffDigi()     {return noiseOnDigi;}
    Int_t  getOffsetsOffDigi()   {return offsetsOnDigi;}
    Int_t  getCellEffOffDigi()   {return cellEffOnDigi;}

    void   getNoiseLevelDigi(Float_t* l0,Float_t* l1,Float_t* l2,Float_t* l3)
    {
	*l0=noiseLevelDigi[0];
        *l1=noiseLevelDigi[1];
        *l2=noiseLevelDigi[2];
        *l3=noiseLevelDigi[3];
    }
    TArrayF& getNoiseLevelDigi()
    {
	return  noiseLevelDigi;
    }
    void   getOffsetsDigi(Float_t* o0,Float_t* o1,Float_t* o2,Float_t* o3)
    {
       *o0=offsetsDigi[0];
       *o1=offsetsDigi[1];
       *o2=offsetsDigi[2];
       *o3=offsetsDigi[3];
    }
    TArrayF& getOffsetsDigi()
    {
       return offsetsDigi;
    }
    void   getCellEffDigi(Float_t* e0,Float_t* e1,Float_t* e2,Float_t* e3)
    {
       *e0=cellEffDigi[0];
       *e1=cellEffDigi[1];
       *e2=cellEffDigi[2];
       *e3=cellEffDigi[3];
    }
    TArrayF& getCellEffDigi()
    {
       return cellEffDigi;
    }
    void   getNoiseRangeDigi(Int_t* rLo0,Int_t* rLo1,Int_t* rLo2,Int_t* rLo3,
			   Int_t* rHi0,Int_t* rHi1,Int_t* rHi2,Int_t* rHi3)
    {
	*rLo0=noiseRangeLoDigi[0];
	*rLo1=noiseRangeLoDigi[1];
	*rLo2=noiseRangeLoDigi[2];
	*rLo3=noiseRangeLoDigi[3];
	*rHi0=noiseRangeHiDigi[0];
	*rHi1=noiseRangeHiDigi[1];
	*rHi2=noiseRangeHiDigi[2];
	*rHi3=noiseRangeHiDigi[3];
    }
    TArrayI& getNoiseRangeLoDigi()
    {
	return noiseRangeLoDigi;
    }
    TArrayI& getNoiseRangeHiDigi()
    {
	return noiseRangeHiDigi;
    }
    void   clear();
    Bool_t check();
    void   printParam();
    Bool_t getParams(HParamList*);
    void   putParams(HParamList*);
    void   setupMdcDigitizer(HMdcDigitizer*);
    void   copySet(HMdcDigitizerSetup* par);
    Bool_t isEqual(HMdcDigitizerSetup* par);
    ClassDef(HMdcDigitizerSetup,1) // Container for the MDC Digitizer parameters
};

class HMdcCalibrater1Setup : public TNamed {
protected:
    HMdcSetup* setup;
    Int_t ModeFlagCal1;   // switch the different modes of the calibrater1
    Int_t TimeCutFlagCal1;// switch on/off time cuts
public:
    HMdcCalibrater1Setup(const Char_t* name="",const Char_t* title="",HMdcSetup* set=0);
    ~HMdcCalibrater1Setup();
    void   setModeFlagCal1(Int_t flag)  {ModeFlagCal1=flag;}
    void   setTimeCutFlagCal1(Int_t cut){TimeCutFlagCal1=cut;}
    void   setMdcCalibrater1Set(Int_t flag,Int_t cut)
    {
	   setModeFlagCal1(flag);
           setTimeCutFlagCal1(cut);
    }
    Int_t  getModeFlagCal1()            {return ModeFlagCal1;}
    Int_t  getTimeCutFlagCal1()         {return TimeCutFlagCal1;}
    void   getMdcCalibrater1Set(Int_t* mode,Int_t* cut)
    {
	*mode=getModeFlagCal1();
	*cut =getTimeCutFlagCal1();
    }
    void   clear();
    Bool_t check();
    void   printParam(void);
    Bool_t getParams(HParamList*);
    void   putParams(HParamList*);
    void   setupMdcCalibrater1(HMdcCalibrater1*,Int_t merge=0);
    void   copySet(HMdcCalibrater1Setup* par);
    Bool_t isEqual(HMdcCalibrater1Setup* par);
    ClassDef(HMdcCalibrater1Setup,1) // Container for the MDC Calibrater1 parameters
};

class HMdcTrackFinderSetup : public TNamed {
protected:
    HMdcSetup* setup;
    Int_t isCoilOff;       // magnet on/off
    Int_t typeClustFinder; // segment or mdc
    TArrayI nLayers;       // number of layers per module [6][4]
    TArrayI nLevel;        // level of hit finding
public:
    HMdcTrackFinderSetup(const Char_t* name="",const Char_t* title="",HMdcSetup* set=0);
    ~HMdcTrackFinderSetup();
    void   setIsCoilOff(Bool_t field)    {isCoilOff=(Int_t)field;}
    void   setTypeClustFinder(Int_t type){typeClustFinder=type;}
    Bool_t getIsCoilOff()                {return (Bool_t)isCoilOff;}
    void   setNLayers(Int_t* myLayers)
    {
	for(Int_t s=0;s<6;s++){
	    for(Int_t m=0;m<4;m++){
               nLayers[s*4+m]=myLayers[s*4+m];
	    }
	}
    }
    void   setNLevel(Int_t* L)
    {
	for(Int_t i=0;i<4;i++)
	{
           nLevel[i]=L[i];
	}
    }
    void   setMdcTrackFinderSet(Bool_t field,Int_t type,Int_t* myLayers,Int_t* L)
    {
	setIsCoilOff(field);
	setTypeClustFinder(type);
	setNLayers(myLayers);
	setNLevel(L);
    }
    Int_t  getTypeClustFinder()          {return typeClustFinder;}
    void   getNLayers(Int_t* myLayers)
    {
	for(Int_t s=0;s<6;s++){
	    for(Int_t m=0;m<4;m++){
               myLayers[s*4+m]=nLayers[s*4+m];
	    }
	}
    }
    void   getNLevel(Int_t* L)
    {
	for(Int_t i=0;i<4;i++)
	{
           L[i]=nLevel[i];
	}
    }
    void   getMdcTrackfinderSet(Bool_t* field,Int_t* type,Int_t* nlay)
    {
	*field=getIsCoilOff();
	*type =getTypeClustFinder();
               getNLayers(nlay);
    }
    void   clear();
    Bool_t check();
    void   printParam(void);
    Bool_t getParams(HParamList*);
    void   putParams(HParamList*);
    void   setupMdcTrackFinder();
    void   copySet(HMdcTrackFinderSetup* par);
    Bool_t isEqual(HMdcTrackFinderSetup* par);
    ClassDef(HMdcTrackFinderSetup,1) // Container for the MDC trackfinder parameters
};

class HMdcClusterToHitSetup : public TNamed {
protected:
    HMdcSetup* setup;
    Int_t mdcForSeg1;  // what to fill in segment1
    Int_t mdcForSeg2;  // what to fill in segment2
public:
    HMdcClusterToHitSetup(const Char_t* name="",const Char_t* title="",HMdcSetup* set=0);
    ~HMdcClusterToHitSetup();
    void   setMdcForSeg1(Int_t mdcseg1){mdcForSeg1=mdcseg1;}
    void   setMdcForSeg2(Int_t mdcseg2){mdcForSeg2=mdcseg2;}
    void   setMdcClusterToHitSet(Int_t mdcseg1,Int_t mdcseg2)
    {
	setMdcForSeg1(mdcseg1);
        setMdcForSeg2(mdcseg2);
    }
    Int_t  getMdcForSeg1()             {return mdcForSeg1;}
    Int_t  getMdcForSeg2()             {return mdcForSeg2;}
    void   getMdcClusterToHitSet(Int_t* mdcseg1,Int_t*mdcseg2)
    {
	*mdcseg1=getMdcForSeg1();
	*mdcseg2=getMdcForSeg2();
    }
    void   clear();
    Bool_t check();
    void   printParam(void);
    Bool_t getParams(HParamList*);
    void   putParams(HParamList*);
    void   setupMdcClusterToHit();
    void   copySet(HMdcClusterToHitSetup* par);
    Bool_t isEqual(HMdcClusterToHitSetup* par);
    ClassDef(HMdcClusterToHitSetup,1) // Container for the MDC clustertoseg parameters
};

class HMdc12FitSetup : public TNamed {
protected:
    HMdcSetup* setup;
    Int_t fitauthor;   // different fit algorhythms
    Int_t fitVersion;  // use polynom,cal2parsim for distance/time
    Int_t fitIndep;    // segment,mdc
    Int_t fitNTuple;   // NTuple
    Int_t fitPrint;    // print
public:
    HMdc12FitSetup(const Char_t* name="",const Char_t* title="",HMdcSetup* set=0);
    ~HMdc12FitSetup();
    void   setFitAuthor(Int_t author){fitauthor=author;}
    void   setFitVersion(Int_t vers) {fitVersion=vers;}
    void   setFitIndep(Int_t indep)  {fitIndep=indep;}
    void   setFitNTuple(Bool_t tuple){fitNTuple=(Int_t)tuple;}
    void   setFitPrint(Bool_t print) {fitPrint=(Int_t)print;}

    void   setMdc12FitSet(Int_t author,Int_t vers,Int_t indep,Bool_t tuple,Bool_t print)
    {
           setFitAuthor (author);
           setFitVersion(vers);
           setFitIndep  (indep);
           setFitNTuple (tuple);
           setFitPrint  (print);
    }

    Int_t  getFitAuthor()            {return fitauthor;}
    Int_t  getFitVersion()           {return fitVersion;}
    Int_t  getFitIndep()             {return fitIndep;}
    Bool_t getFitNTuple()            {return (Bool_t)fitNTuple;}
    Bool_t getFitPrint()             {return (Bool_t)fitPrint;}
    void   getMdc12FitSet(Int_t* author,Int_t* vers,Int_t* indep,Bool_t* tuple,Bool_t* print)
    {
	*author=getFitAuthor();
	*vers  =getFitVersion();
	*indep =getFitIndep();
	*tuple =getFitNTuple();
	*print =getFitPrint();
    }
    void   clear();
    Bool_t check();
    void   printParam(void);
    Bool_t getParams(HParamList*);
    void   putParams(HParamList*);
    void   setupMdc12Fit();
    void   copySet(HMdc12FitSetup* par);
    Bool_t isEqual(HMdc12FitSetup* par);
    ClassDef(HMdc12FitSetup,1) // Container for the MDC fitter parameters
};
class HMdcCommonSetup : public TNamed {
protected:
    HMdcSetup* setup;
    Int_t isSimulation;   // sim,real data ,merge
    Int_t analysisLevel;  // raw,cal1,cal2,hit,fit
    Int_t tracker;        // dubna, santiago
public:
    HMdcCommonSetup(const Char_t* name="",const Char_t* title="",HMdcSetup* set=0);
    ~HMdcCommonSetup();
    void   setIsSimulation(Int_t sim)   {isSimulation=sim;}
    void   setAnalysisLevel(Int_t level){analysisLevel=level;}
    void   setTracker(Int_t track)      {tracker=track;}
    void   setMdcCommonSet(Int_t sim,Int_t level,Int_t track)
    {
           setIsSimulation(sim);
           setAnalysisLevel(level);
           setTracker(track);
    }
    Int_t  getIsSimulation()            {return isSimulation;}
    Int_t  getAnalysisLevel()           {return analysisLevel;}
    Int_t  getTracker()                 {return tracker;}
    void   getMdcCommonSet(Int_t* sim,Int_t* level,Int_t* track)
    {
	*sim  =getIsSimulation();
	*level=getAnalysisLevel();
        *track=getTracker();
    }
    void   clear();
    Bool_t check();
    void   printParam(void);
    Bool_t getParams(HParamList*);
    void   putParams(HParamList*);
    void   copySet(HMdcCommonSetup* par);
    Bool_t isEqual(HMdcCommonSetup* par);
    ClassDef(HMdcCommonSetup,1) // Container for the MDC common parameters
};

class HMdcSetup : public HParCond {
protected:
    HMdcDetector*          fMdc;
    HMdcDigitizerSetup*    digiset;
    HMdcCalibrater1Setup*  cal1set;
    HMdcTrackFinderSetup*  trackfinderset;
    HMdcClusterToHitSetup* clustertohitset;
    HMdc12FitSetup*        fitterset;
    HMdcCommonSetup*       commonset;

public:
    HMdcSetup(const Char_t* name   ="MdcSetup",
	      const Char_t* title  ="parameters for MdcTaskSet",
	      const Char_t* context="MdcSetupProduction");
    ~HMdcSetup();

    HMdcDigitizerSetup*    getMdcDigitizerSet()   {return digiset;}
    HMdcCalibrater1Setup*  getMdcCalibrater1Set() {return cal1set;}
    HMdcTrackFinderSetup*  getMdcTrackFinderSet() {return trackfinderset;}
    HMdcClusterToHitSetup* getMdcClusterToHitSet(){return clustertohitset;}
    HMdc12FitSetup*        getMdc12FitSet()       {return fitterset;}
    HMdcCommonSetup*       getMdcCommonSet()      {return commonset;}
    Bool_t init(HParIo*, Int_t*);
    Int_t  write(HParIo*);
    void   putParams(HParamList*);
    Bool_t getParams(HParamList*);
    void   clear();
    Bool_t check();
    void   printParam(void);
    void   copySet(HMdcSetup* par);
    Bool_t isEqual(HMdcSetup* par);
    ClassDef(HMdcSetup,1) // Container for the MDC taskset parameters
};

#endif  /*!HMDCSETUP_H*/


Last change: Sat May 22 13:03:57 2010
Last generated: 2010-05-22 13:03

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.