ROOT logo
#ifndef HMDCGARSIGNALREADER_H
#define HMDCGARSIGNALREADER_H
#include "TNamed.h"
#include "TObject.h"
#include "TH1.h"
#include "TPaveText.h"
#include "htool.h"

class TFile;
class TDirectory;
class TH1F;
class TString;

class HMdcGarSignalReader : public TNamed {
protected:

    FILE*    inputAscii;                  //! file pointer to input
    TString  fNameAsciiIn;                //! file name of root input file
    TFile*   outputRoot;                  //! root file pointer
    TString  fNameRootOut;                //! root file pointer
    Int_t    nSignals;                    //! number of signals per sample point
    Int_t    nBinSignal;                  //! number of bins of signal hist
    Float_t  rangeSignal;                 //! upperrange signal hist
    Int_t    nBinDist;                    //! number of bins of hist drift time vs distance
    Float_t  binSizeDist;                 //! size of bin hist drift time vs distance (mm)
    Int_t    nStep;                       //! number of threshold steps
    Float_t  stepsize;                    //! size of threshold step
    Float_t  minSignal[4];                // maximum charge per module type
    Int_t    version;                     //! read different GARFIELD versions (704,708 (skip))
    TH1F*    hdist_1[10];                 //! distribution of time1 per threshold step
    TH1F*    hdist_2[10];                 //! distribution of time2 per threshold step
    TH1F*    htime1 [10];                 //! hist for time1 vs distance per threshold step
    TH1F*    htime2 [10];                 //! hist for time2 vs distance per threshold step
    TH1F*    hminCharge   [4];            //! hist for minimum charge per mdc type
    TH1F*    hminChargeSum[4];            //! hist for minimum charge from sum hist per mdc type
    TPaveText* myconfig;                  //! configuration discription
    Int_t    nmake;                       //! counter for calling make
    TH1F*    hresponse;                   //! response hist
    Bool_t   simResponse;                 //! switch simulate response of adc / simple integration
    Float_t sigma1;                       //! sigma 1 of reponse function of adc
    Float_t sigma2;                       //! sigma 2 of reponse function of adc

    Bool_t   writehists[6];               //! switch write on/off for signal

    void    initVariables();
    void    initHistArrays()
    {
	for(Int_t i=0;i<getNStep();i++)
	{
	    htime1[i] =0;
            htime2[i] =0;
            hdist_1[i]=0;
            hdist_2[i]=0;
	}
    }
    void    createHistArrays(Int_t,Int_t,Int_t,Int_t);
    void    writeHistArrays (Int_t type)
    {
	for(Int_t i=0;i<getNStep();i++)
	{
	    if(type==1 || type==3)
	    {
		writeHist(htime1 [i],4);
		writeHist(htime2 [i],4);
	    }
	    if(type==2 || type==3)
	    {
		writeHist(hdist_1[i],3);
		writeHist(hdist_2[i],3);
	    }
	}
    }
    void    deleteHistArrays(Int_t type)
    {
	for(Int_t i=0;i<getNStep();i++)
	{
            if(type==1 || type==3)
	    {
		HTool::deleteObject(htime1 [i]);
		HTool::deleteObject(htime2 [i]);
	    }
	    if(type==2 || type==3)
	    {
		HTool::deleteObject(hdist_1[i]);
		HTool::deleteObject(hdist_2[i]);
	    }
	}
    }
    void    writeHist     (TH1F* h,Int_t i)
    {
	if(h&&writehists[i])
	{
	    h->Write();
	}
    }
    void    readInput     (Int_t,Int_t);
    void    integrateHists(Int_t,Int_t,Int_t,Int_t,TH1F*,TH1F*);
    void    findThresholds(Int_t,TH1F*);
    void    fillDriftTimeVersusDistance(Int_t,Int_t,Int_t);
    Bool_t  check(Int_t,Int_t,Int_t,Int_t,TH1F*);
    void    createHists(Int_t,Int_t,Int_t,TH1F**,TH1F**,TH1F**,TH1F**);
    void    createChargeHists();
    void    fillChargeHists(Int_t,Int_t,Int_t,Int_t,Int_t,TH1F*,TH1F*);
    void    writeChargeHists();
    void    deleteChargeHists();
    void    response(Float_t mean,Float_t scale);
    void    simulateResponse(TH1F*,TH1F*);
public:
    HMdcGarSignalReader(const Char_t* name="",const Char_t* title="");
    ~HMdcGarSignalReader  ();
    void    setVersion(Int_t vers){if(vers==704||vers==708){version=vers;}else{Warning("serVersion()","Unknown version! Use 704 (old,default) or 708 (skip)!");}}
    void    setFileNameOut(TString);
    void    setFileNameIn (TString);
    void    setSigma1(Float_t sig){sigma1=sig;}
    void    setSigma2(Float_t sig){sigma2=sig;}
    void    setSimResponse(Bool_t sim){simResponse=sim;}
    Float_t getSigma1(){return sigma1;}
    Float_t getSigma2(){return sigma2;}
    void    setNSignals   (Int_t i)   {nSignals=i;}
    Int_t   getNSignals   ()          {return nSignals;}
    void    setNBinSignal (Int_t i)   {nBinSignal=i;}
    Int_t   getNBinSignal ()          {return nBinSignal;}
    void    setRangeSignal(Float_t i) {rangeSignal=i;}
    Float_t getRangeSignal()          {return rangeSignal;}
    void    setNBinDist   (Int_t i)   {nBinDist=i;}
    Int_t   getNBinDist   ()          {return nBinDist;}
    void    setBinSizeDist(Float_t i) {binSizeDist=i;}
    Float_t getBinSizeDist()          {return binSizeDist;}
    void    setNStep      (Int_t i)   {nStep=i;}
    Int_t   getNStep      ()          {return nStep;}
    void    setStepSize   (Float_t i) {stepsize=i;}
    Float_t getStepSize   ()          {return stepsize;}
    void    setMinSignal  (Float_t i,Float_t j,Float_t k,Float_t l)
    {
	minSignal[0]=i;
        minSignal[1]=j;
        minSignal[2]=k;
        minSignal[3]=l;
    }
    Float_t getMinSignal  (Int_t i)   {return minSignal[i];}
    void    setWriteHists (Bool_t signal,Bool_t signalint,Bool_t sum,Bool_t dist,Bool_t timedistance,Bool_t mincharge)
    {
	writehists[0]=signal;
	writehists[1]=signalint;
	writehists[2]=sum;
        writehists[3]=dist;
        writehists[4]=timedistance;
        writehists[5]=mincharge;
    }
    void    printStatus   (void);
    void    make          (Int_t,Int_t,TString);
    void    closeOutput   ();
    ClassDef(HMdcGarSignalReader,1) // Class for producing the MDC Cal2 parameters
};
#endif  /*!HMDCGARSIGNALREADER_H*/
 hmdcgarsignalreader.h:1
 hmdcgarsignalreader.h:2
 hmdcgarsignalreader.h:3
 hmdcgarsignalreader.h:4
 hmdcgarsignalreader.h:5
 hmdcgarsignalreader.h:6
 hmdcgarsignalreader.h:7
 hmdcgarsignalreader.h:8
 hmdcgarsignalreader.h:9
 hmdcgarsignalreader.h:10
 hmdcgarsignalreader.h:11
 hmdcgarsignalreader.h:12
 hmdcgarsignalreader.h:13
 hmdcgarsignalreader.h:14
 hmdcgarsignalreader.h:15
 hmdcgarsignalreader.h:16
 hmdcgarsignalreader.h:17
 hmdcgarsignalreader.h:18
 hmdcgarsignalreader.h:19
 hmdcgarsignalreader.h:20
 hmdcgarsignalreader.h:21
 hmdcgarsignalreader.h:22
 hmdcgarsignalreader.h:23
 hmdcgarsignalreader.h:24
 hmdcgarsignalreader.h:25
 hmdcgarsignalreader.h:26
 hmdcgarsignalreader.h:27
 hmdcgarsignalreader.h:28
 hmdcgarsignalreader.h:29
 hmdcgarsignalreader.h:30
 hmdcgarsignalreader.h:31
 hmdcgarsignalreader.h:32
 hmdcgarsignalreader.h:33
 hmdcgarsignalreader.h:34
 hmdcgarsignalreader.h:35
 hmdcgarsignalreader.h:36
 hmdcgarsignalreader.h:37
 hmdcgarsignalreader.h:38
 hmdcgarsignalreader.h:39
 hmdcgarsignalreader.h:40
 hmdcgarsignalreader.h:41
 hmdcgarsignalreader.h:42
 hmdcgarsignalreader.h:43
 hmdcgarsignalreader.h:44
 hmdcgarsignalreader.h:45
 hmdcgarsignalreader.h:46
 hmdcgarsignalreader.h:47
 hmdcgarsignalreader.h:48
 hmdcgarsignalreader.h:49
 hmdcgarsignalreader.h:50
 hmdcgarsignalreader.h:51
 hmdcgarsignalreader.h:52
 hmdcgarsignalreader.h:53
 hmdcgarsignalreader.h:54
 hmdcgarsignalreader.h:55
 hmdcgarsignalreader.h:56
 hmdcgarsignalreader.h:57
 hmdcgarsignalreader.h:58
 hmdcgarsignalreader.h:59
 hmdcgarsignalreader.h:60
 hmdcgarsignalreader.h:61
 hmdcgarsignalreader.h:62
 hmdcgarsignalreader.h:63
 hmdcgarsignalreader.h:64
 hmdcgarsignalreader.h:65
 hmdcgarsignalreader.h:66
 hmdcgarsignalreader.h:67
 hmdcgarsignalreader.h:68
 hmdcgarsignalreader.h:69
 hmdcgarsignalreader.h:70
 hmdcgarsignalreader.h:71
 hmdcgarsignalreader.h:72
 hmdcgarsignalreader.h:73
 hmdcgarsignalreader.h:74
 hmdcgarsignalreader.h:75
 hmdcgarsignalreader.h:76
 hmdcgarsignalreader.h:77
 hmdcgarsignalreader.h:78
 hmdcgarsignalreader.h:79
 hmdcgarsignalreader.h:80
 hmdcgarsignalreader.h:81
 hmdcgarsignalreader.h:82
 hmdcgarsignalreader.h:83
 hmdcgarsignalreader.h:84
 hmdcgarsignalreader.h:85
 hmdcgarsignalreader.h:86
 hmdcgarsignalreader.h:87
 hmdcgarsignalreader.h:88
 hmdcgarsignalreader.h:89
 hmdcgarsignalreader.h:90
 hmdcgarsignalreader.h:91
 hmdcgarsignalreader.h:92
 hmdcgarsignalreader.h:93
 hmdcgarsignalreader.h:94
 hmdcgarsignalreader.h:95
 hmdcgarsignalreader.h:96
 hmdcgarsignalreader.h:97
 hmdcgarsignalreader.h:98
 hmdcgarsignalreader.h:99
 hmdcgarsignalreader.h:100
 hmdcgarsignalreader.h:101
 hmdcgarsignalreader.h:102
 hmdcgarsignalreader.h:103
 hmdcgarsignalreader.h:104
 hmdcgarsignalreader.h:105
 hmdcgarsignalreader.h:106
 hmdcgarsignalreader.h:107
 hmdcgarsignalreader.h:108
 hmdcgarsignalreader.h:109
 hmdcgarsignalreader.h:110
 hmdcgarsignalreader.h:111
 hmdcgarsignalreader.h:112
 hmdcgarsignalreader.h:113
 hmdcgarsignalreader.h:114
 hmdcgarsignalreader.h:115
 hmdcgarsignalreader.h:116
 hmdcgarsignalreader.h:117
 hmdcgarsignalreader.h:118
 hmdcgarsignalreader.h:119
 hmdcgarsignalreader.h:120
 hmdcgarsignalreader.h:121
 hmdcgarsignalreader.h:122
 hmdcgarsignalreader.h:123
 hmdcgarsignalreader.h:124
 hmdcgarsignalreader.h:125
 hmdcgarsignalreader.h:126
 hmdcgarsignalreader.h:127
 hmdcgarsignalreader.h:128
 hmdcgarsignalreader.h:129
 hmdcgarsignalreader.h:130
 hmdcgarsignalreader.h:131
 hmdcgarsignalreader.h:132
 hmdcgarsignalreader.h:133
 hmdcgarsignalreader.h:134
 hmdcgarsignalreader.h:135
 hmdcgarsignalreader.h:136
 hmdcgarsignalreader.h:137
 hmdcgarsignalreader.h:138
 hmdcgarsignalreader.h:139
 hmdcgarsignalreader.h:140
 hmdcgarsignalreader.h:141
 hmdcgarsignalreader.h:142
 hmdcgarsignalreader.h:143
 hmdcgarsignalreader.h:144
 hmdcgarsignalreader.h:145
 hmdcgarsignalreader.h:146
 hmdcgarsignalreader.h:147
 hmdcgarsignalreader.h:148
 hmdcgarsignalreader.h:149
 hmdcgarsignalreader.h:150
 hmdcgarsignalreader.h:151
 hmdcgarsignalreader.h:152
 hmdcgarsignalreader.h:153
 hmdcgarsignalreader.h:154
 hmdcgarsignalreader.h:155