ROOT logo
#ifndef HMDCCAL2PARSIM_H
#define HMDCCAL2PARSIM_H

#include "TObject.h"
#include "TObjArray.h"
#include "hparset.h"
#include "TRandom.h"
#include "TF1.h"
#include "TString.h"
class HMdcDetector;
class HMdcCal2Par;

class HMdcCal2ParAngleSim : public TObject {
friend class HMdcCal2ParSim;
friend class HMdcCal2ParSecSim;
friend class HMdcCal2ParModSim;
friend class HMdcCal2Par;
friend class HMdcCal2ParSec;
friend class HMdcCal2ParMod;
friend class HMdcCal2ParAngle;

protected:
    Float_t drifttime1[100];
    Float_t drifttime2[100];
    Float_t drifttime1Err[100];
    Float_t drifttime2Err[100];
public:
    HMdcCal2ParAngleSim() { clear(); }
    ~HMdcCal2ParAngleSim() {;}
    void setDriftTime1(Int_t i, Float_t t)     {drifttime1[i]=t;}
    void setDriftTime2(Int_t i, Float_t t)     {drifttime2[i]=t;}
    void setDriftTime1Error(Int_t i, Float_t t){drifttime1Err[i]=t;}
    void setDriftTime2Error(Int_t i, Float_t t){drifttime2Err[i]=t;}
    Float_t getDriftTime1(Int_t i)     {return drifttime1[i];}
    Float_t getDriftTime2(Int_t i)     {return drifttime2[i];}
    Float_t getDriftTime1Error(Int_t i){return drifttime1Err[i];}
    Float_t getDriftTime2Error(Int_t i){return drifttime2Err[i];}

    void setDriftTime1(Int_t line,Int_t i, Float_t t){drifttime1[line*10+i]=t;}
    void setDriftTime2(Int_t line,Int_t i, Float_t t){drifttime2[line*10+i]=t;}
    void setDriftTime1Error(Int_t line,Int_t i, Float_t t){drifttime1Err[line*10+i]=t;}
    void setDriftTime2Error(Int_t line,Int_t i, Float_t t){drifttime2Err[line*10+i]=t;}

    Float_t getDriftTime1(Int_t line,Int_t i){return drifttime1[line*10+i];}
    Float_t getDriftTime2(Int_t line,Int_t i){return drifttime2[line*10+i];}
    Float_t getDriftTime1Error(Int_t line,Int_t i){return drifttime1Err[line*10+i];}
    Float_t getDriftTime2Error(Int_t line,Int_t i){return drifttime2Err[line*10+i];}

    void fillTime1(Int_t p0,
	      Float_t p1,Float_t p2,
	      Float_t p3,Float_t p4,
	      Float_t p5,Float_t p6,
	      Float_t p7,Float_t p8,
	      Float_t p9,Float_t p10)
    {
	setDriftTime1(p0,0,p1);
	setDriftTime1(p0,1,p2);
	setDriftTime1(p0,2,p3);
	setDriftTime1(p0,3,p4);
	setDriftTime1(p0,4,p5);
	setDriftTime1(p0,5,p6);
	setDriftTime1(p0,6,p7);
	setDriftTime1(p0,7,p8);
	setDriftTime1(p0,8,p9);
	setDriftTime1(p0,9,p10);

    }
    void fillTime2(Int_t p0,
	      Float_t p1,Float_t p2,
	      Float_t p3,Float_t p4,
	      Float_t p5,Float_t p6,
	      Float_t p7,Float_t p8,
	      Float_t p9,Float_t p10)
    {
	setDriftTime2(p0,0,p1);
	setDriftTime2(p0,1,p2);
	setDriftTime2(p0,2,p3);
	setDriftTime2(p0,3,p4);
	setDriftTime2(p0,4,p5);
	setDriftTime2(p0,5,p6);
	setDriftTime2(p0,6,p7);
	setDriftTime2(p0,7,p8);
	setDriftTime2(p0,8,p9);
	setDriftTime2(p0,9,p10);

    }
   void fillTime1Error(Int_t p0,
	      Float_t p1,Float_t p2,
	      Float_t p3,Float_t p4,
	      Float_t p5,Float_t p6,
	      Float_t p7,Float_t p8,
	      Float_t p9,Float_t p10)
    {
	setDriftTime1Error(p0,0,p1);
	setDriftTime1Error(p0,1,p2);
	setDriftTime1Error(p0,2,p3);
	setDriftTime1Error(p0,3,p4);
	setDriftTime1Error(p0,4,p5);
	setDriftTime1Error(p0,5,p6);
	setDriftTime1Error(p0,6,p7);
	setDriftTime1Error(p0,7,p8);
	setDriftTime1Error(p0,8,p9);
	setDriftTime1Error(p0,9,p10);

    }
    void fillTime2Error(Int_t p0,
	      Float_t p1,Float_t p2,
	      Float_t p3,Float_t p4,
	      Float_t p5,Float_t p6,
	      Float_t p7,Float_t p8,
	      Float_t p9,Float_t p10)
    {
	setDriftTime2Error(p0,0,p1);
	setDriftTime2Error(p0,1,p2);
	setDriftTime2Error(p0,2,p3);
	setDriftTime2Error(p0,3,p4);
	setDriftTime2Error(p0,4,p5);
	setDriftTime2Error(p0,5,p6);
	setDriftTime2Error(p0,6,p7);
	setDriftTime2Error(p0,7,p8);
	setDriftTime2Error(p0,8,p9);
	setDriftTime2Error(p0,9,p10);

    }
    void fillTime1(HMdcCal2ParAngleSim&);
    void fillTime2(HMdcCal2ParAngleSim&);
    void fillTime1Error(HMdcCal2ParAngleSim&);
    void fillTime2Error(HMdcCal2ParAngleSim&);

    void clear() {
	for(Int_t i=0;i<100;i++)
	{
	    drifttime1[i]=0.;
            drifttime2[i]=0.;
            drifttime1Err[i]=0.;
            drifttime2Err[i]=0.;
	}
    }
    ClassDef(HMdcCal2ParAngleSim,1) // Angle level of the MDC calibration parameters
};

class HMdcCal2ParModSim : public TObject {
protected:
    TObjArray *array;   // array of pointers of type HMdcCal2ParAngleSim
public:
    HMdcCal2ParModSim(Int_t sec = 0, Int_t mod = 0 , Int_t angle = 18);
    ~HMdcCal2ParModSim();
    HMdcCal2ParAngleSim& operator[](Int_t i) {
      return *static_cast<HMdcCal2ParAngleSim*>((*array)[i]);
    }
    Int_t getSize() {return array->GetEntries();}
    ClassDef(HMdcCal2ParModSim,1) // Module level of the MDC calibration parameters
};


class HMdcCal2ParSecSim : public TObject {
protected:
    TObjArray* array;   // array of pointers of type HMdcCal2ParModSim
public:
    HMdcCal2ParSecSim(Int_t sec = 0, Int_t mod = 4);
    ~HMdcCal2ParSecSim();
    HMdcCal2ParModSim& operator[](Int_t i) {
      return *static_cast<HMdcCal2ParModSim*>((*array)[i]);
    }
    Int_t getSize() {return array->GetEntries();}
    ClassDef(HMdcCal2ParSecSim,1) // Sector level of the MDC calibration parameters
};


class HMdcCal2ParSim : public HParSet {
protected:
    TObjArray* array;      // array of pointers of type HMdcCal2ParSecSim
    HMdcDetector *fMdc;
    TString comment;
    Int_t sector;
    Int_t module;
    Float_t angleDeg;
    Float_t time;
    Float_t time2;
    Float_t finaltime;
    Int_t angleStep;
    Float_t distance;
    Int_t linecounter;
    Int_t linecounterwrite;
    Float_t slopeOutside;
    Int_t type;
    Int_t dmin;
    Int_t dmax;
    Float_t scaleError[4]; //! scaler for error of time1 per module type
    Float_t constError[4]; //! const error of time1 per module type
    Bool_t useConstErr;    //! switch for using const errors
    Float_t constVD[4];    //! const Driftvelocity VD[mu/ns] for simple xt-correlation (only in combination with constErr)
    Bool_t useConstVD;     //! switch for using const VD
public:
    HMdcCal2ParSim(const Char_t* name="MdcCal2ParSim",
                   const Char_t* title=
                       "cal2 calibration parameters for Mdc [distance->time]",
                   const Char_t* context="MdcCal2ParSimProduction",
                   Int_t n=6);
    ~HMdcCal2ParSim();
    HMdcCal2ParSecSim& operator[](Int_t i) {
        return *static_cast<HMdcCal2ParSecSim*>((*array)[i]);
    }
    void setContainerComment(TString mycomment){comment=mycomment;}
    TString getContainerComment(){return comment;}
    void printContainerComment(){printf("%s\n",comment.Data());}
    Int_t getSize() {return array->GetEntries();}
    Int_t getNumberOfLines() {return 40;}
    Int_t getNumberOfBins()  {return 100;}
    Bool_t init(HParIo*, Int_t*);
    Int_t write(HParIo*);
    void readline(const Char_t*, Int_t*);
    void putAsciiHeader(TString&);
    Bool_t writeline(Char_t*, Int_t, Int_t, Int_t);
    Double_t calcTime(Int_t ,Int_t ,Double_t,Double_t);
    Double_t calcTimeErr(Int_t ,Int_t ,Double_t,Double_t);
    void calcTime(Int_t ,Int_t ,Double_t,Double_t,Double_t*,Double_t*);
    Float_t calcTime(Int_t ,Int_t ,Float_t,Float_t);
    Float_t calcTimeErr(Int_t ,Int_t ,Float_t,Float_t);
    Float_t calcTime2(Int_t ,Int_t ,Float_t,Float_t);
    Float_t calcTime2Err(Int_t ,Int_t ,Float_t,Float_t);
    Float_t calcDriftVelocity(Int_t,Int_t,Float_t,Float_t);
    Float_t calcResolution(Int_t,Int_t,Float_t,Float_t);
    void calcTimeDigitizer (Int_t ,Int_t ,Float_t,Float_t,Float_t*,Float_t*);
    void calcTime2Digitizer(Int_t ,Int_t ,Float_t,Float_t,Float_t*,Float_t*);
    void transformToDistance(Int_t,Int_t,Int_t,Float_t,HMdcCal2Par*);
    void plot(Int_t,Int_t);
    void plot2D(Int_t,Int_t,Int_t);
    Float_t getSlopeOutside(){return slopeOutside;}
    void setScalerTime1Err(Float_t m0=0,Float_t m1=0,Float_t m2=0,Float_t m3=0)
    {
	scaleError[0]=m0;
	scaleError[1]=m1;
	scaleError[2]=m2;
	scaleError[3]=m3;
    }
    void setConstantTime1Err(Float_t m0=0,Float_t m1=0,Float_t m2=0,Float_t m3=0)
    {
	useConstErr=kTRUE;
	constError[0]=m0;
	constError[1]=m1;
	constError[2]=m2;
	constError[3]=m3;
    }
    void setConstantVD(Float_t m0=40 ,Float_t m1=40 ,Float_t m2=40 ,Float_t m3=40,
                       Float_t m0E=2,Float_t m1E=2,Float_t m2E=2,Float_t m3E=2
		      )
    {
        // constant drift velocity [cm/ns] per module, const drift time error [ns] per module
	useConstVD=kTRUE;
	constVD[0]=m0;
	constVD[1]=m1;
	constVD[2]=m2;
	constVD[3]=m3;

	useConstErr=kTRUE;
	constError[0]=m0E;
	constError[1]=m1E;
	constError[2]=m2E;
	constError[3]=m3E;
    }
    void clear();
    void printParam();
    ClassDef(HMdcCal2ParSim,2) // Container for the MDC calibration parameters
};

#endif  /*!HMDCCAL2PARSIM_H*/

 hmdccal2parsim.h:1
 hmdccal2parsim.h:2
 hmdccal2parsim.h:3
 hmdccal2parsim.h:4
 hmdccal2parsim.h:5
 hmdccal2parsim.h:6
 hmdccal2parsim.h:7
 hmdccal2parsim.h:8
 hmdccal2parsim.h:9
 hmdccal2parsim.h:10
 hmdccal2parsim.h:11
 hmdccal2parsim.h:12
 hmdccal2parsim.h:13
 hmdccal2parsim.h:14
 hmdccal2parsim.h:15
 hmdccal2parsim.h:16
 hmdccal2parsim.h:17
 hmdccal2parsim.h:18
 hmdccal2parsim.h:19
 hmdccal2parsim.h:20
 hmdccal2parsim.h:21
 hmdccal2parsim.h:22
 hmdccal2parsim.h:23
 hmdccal2parsim.h:24
 hmdccal2parsim.h:25
 hmdccal2parsim.h:26
 hmdccal2parsim.h:27
 hmdccal2parsim.h:28
 hmdccal2parsim.h:29
 hmdccal2parsim.h:30
 hmdccal2parsim.h:31
 hmdccal2parsim.h:32
 hmdccal2parsim.h:33
 hmdccal2parsim.h:34
 hmdccal2parsim.h:35
 hmdccal2parsim.h:36
 hmdccal2parsim.h:37
 hmdccal2parsim.h:38
 hmdccal2parsim.h:39
 hmdccal2parsim.h:40
 hmdccal2parsim.h:41
 hmdccal2parsim.h:42
 hmdccal2parsim.h:43
 hmdccal2parsim.h:44
 hmdccal2parsim.h:45
 hmdccal2parsim.h:46
 hmdccal2parsim.h:47
 hmdccal2parsim.h:48
 hmdccal2parsim.h:49
 hmdccal2parsim.h:50
 hmdccal2parsim.h:51
 hmdccal2parsim.h:52
 hmdccal2parsim.h:53
 hmdccal2parsim.h:54
 hmdccal2parsim.h:55
 hmdccal2parsim.h:56
 hmdccal2parsim.h:57
 hmdccal2parsim.h:58
 hmdccal2parsim.h:59
 hmdccal2parsim.h:60
 hmdccal2parsim.h:61
 hmdccal2parsim.h:62
 hmdccal2parsim.h:63
 hmdccal2parsim.h:64
 hmdccal2parsim.h:65
 hmdccal2parsim.h:66
 hmdccal2parsim.h:67
 hmdccal2parsim.h:68
 hmdccal2parsim.h:69
 hmdccal2parsim.h:70
 hmdccal2parsim.h:71
 hmdccal2parsim.h:72
 hmdccal2parsim.h:73
 hmdccal2parsim.h:74
 hmdccal2parsim.h:75
 hmdccal2parsim.h:76
 hmdccal2parsim.h:77
 hmdccal2parsim.h:78
 hmdccal2parsim.h:79
 hmdccal2parsim.h:80
 hmdccal2parsim.h:81
 hmdccal2parsim.h:82
 hmdccal2parsim.h:83
 hmdccal2parsim.h:84
 hmdccal2parsim.h:85
 hmdccal2parsim.h:86
 hmdccal2parsim.h:87
 hmdccal2parsim.h:88
 hmdccal2parsim.h:89
 hmdccal2parsim.h:90
 hmdccal2parsim.h:91
 hmdccal2parsim.h:92
 hmdccal2parsim.h:93
 hmdccal2parsim.h:94
 hmdccal2parsim.h:95
 hmdccal2parsim.h:96
 hmdccal2parsim.h:97
 hmdccal2parsim.h:98
 hmdccal2parsim.h:99
 hmdccal2parsim.h:100
 hmdccal2parsim.h:101
 hmdccal2parsim.h:102
 hmdccal2parsim.h:103
 hmdccal2parsim.h:104
 hmdccal2parsim.h:105
 hmdccal2parsim.h:106
 hmdccal2parsim.h:107
 hmdccal2parsim.h:108
 hmdccal2parsim.h:109
 hmdccal2parsim.h:110
 hmdccal2parsim.h:111
 hmdccal2parsim.h:112
 hmdccal2parsim.h:113
 hmdccal2parsim.h:114
 hmdccal2parsim.h:115
 hmdccal2parsim.h:116
 hmdccal2parsim.h:117
 hmdccal2parsim.h:118
 hmdccal2parsim.h:119
 hmdccal2parsim.h:120
 hmdccal2parsim.h:121
 hmdccal2parsim.h:122
 hmdccal2parsim.h:123
 hmdccal2parsim.h:124
 hmdccal2parsim.h:125
 hmdccal2parsim.h:126
 hmdccal2parsim.h:127
 hmdccal2parsim.h:128
 hmdccal2parsim.h:129
 hmdccal2parsim.h:130
 hmdccal2parsim.h:131
 hmdccal2parsim.h:132
 hmdccal2parsim.h:133
 hmdccal2parsim.h:134
 hmdccal2parsim.h:135
 hmdccal2parsim.h:136
 hmdccal2parsim.h:137
 hmdccal2parsim.h:138
 hmdccal2parsim.h:139
 hmdccal2parsim.h:140
 hmdccal2parsim.h:141
 hmdccal2parsim.h:142
 hmdccal2parsim.h:143
 hmdccal2parsim.h:144
 hmdccal2parsim.h:145
 hmdccal2parsim.h:146
 hmdccal2parsim.h:147
 hmdccal2parsim.h:148
 hmdccal2parsim.h:149
 hmdccal2parsim.h:150
 hmdccal2parsim.h:151
 hmdccal2parsim.h:152
 hmdccal2parsim.h:153
 hmdccal2parsim.h:154
 hmdccal2parsim.h:155
 hmdccal2parsim.h:156
 hmdccal2parsim.h:157
 hmdccal2parsim.h:158
 hmdccal2parsim.h:159
 hmdccal2parsim.h:160
 hmdccal2parsim.h:161
 hmdccal2parsim.h:162
 hmdccal2parsim.h:163
 hmdccal2parsim.h:164
 hmdccal2parsim.h:165
 hmdccal2parsim.h:166
 hmdccal2parsim.h:167
 hmdccal2parsim.h:168
 hmdccal2parsim.h:169
 hmdccal2parsim.h:170
 hmdccal2parsim.h:171
 hmdccal2parsim.h:172
 hmdccal2parsim.h:173
 hmdccal2parsim.h:174
 hmdccal2parsim.h:175
 hmdccal2parsim.h:176
 hmdccal2parsim.h:177
 hmdccal2parsim.h:178
 hmdccal2parsim.h:179
 hmdccal2parsim.h:180
 hmdccal2parsim.h:181
 hmdccal2parsim.h:182
 hmdccal2parsim.h:183
 hmdccal2parsim.h:184
 hmdccal2parsim.h:185
 hmdccal2parsim.h:186
 hmdccal2parsim.h:187
 hmdccal2parsim.h:188
 hmdccal2parsim.h:189
 hmdccal2parsim.h:190
 hmdccal2parsim.h:191
 hmdccal2parsim.h:192
 hmdccal2parsim.h:193
 hmdccal2parsim.h:194
 hmdccal2parsim.h:195
 hmdccal2parsim.h:196
 hmdccal2parsim.h:197
 hmdccal2parsim.h:198
 hmdccal2parsim.h:199
 hmdccal2parsim.h:200
 hmdccal2parsim.h:201
 hmdccal2parsim.h:202
 hmdccal2parsim.h:203
 hmdccal2parsim.h:204
 hmdccal2parsim.h:205
 hmdccal2parsim.h:206
 hmdccal2parsim.h:207
 hmdccal2parsim.h:208
 hmdccal2parsim.h:209
 hmdccal2parsim.h:210
 hmdccal2parsim.h:211
 hmdccal2parsim.h:212
 hmdccal2parsim.h:213
 hmdccal2parsim.h:214
 hmdccal2parsim.h:215
 hmdccal2parsim.h:216
 hmdccal2parsim.h:217
 hmdccal2parsim.h:218
 hmdccal2parsim.h:219
 hmdccal2parsim.h:220
 hmdccal2parsim.h:221
 hmdccal2parsim.h:222
 hmdccal2parsim.h:223
 hmdccal2parsim.h:224
 hmdccal2parsim.h:225
 hmdccal2parsim.h:226
 hmdccal2parsim.h:227
 hmdccal2parsim.h:228
 hmdccal2parsim.h:229
 hmdccal2parsim.h:230
 hmdccal2parsim.h:231
 hmdccal2parsim.h:232
 hmdccal2parsim.h:233
 hmdccal2parsim.h:234
 hmdccal2parsim.h:235
 hmdccal2parsim.h:236
 hmdccal2parsim.h:237
 hmdccal2parsim.h:238
 hmdccal2parsim.h:239
 hmdccal2parsim.h:240
 hmdccal2parsim.h:241
 hmdccal2parsim.h:242
 hmdccal2parsim.h:243
 hmdccal2parsim.h:244
 hmdccal2parsim.h:245
 hmdccal2parsim.h:246
 hmdccal2parsim.h:247
 hmdccal2parsim.h:248
 hmdccal2parsim.h:249
 hmdccal2parsim.h:250
 hmdccal2parsim.h:251
 hmdccal2parsim.h:252
 hmdccal2parsim.h:253
 hmdccal2parsim.h:254
 hmdccal2parsim.h:255
 hmdccal2parsim.h:256
 hmdccal2parsim.h:257
 hmdccal2parsim.h:258
 hmdccal2parsim.h:259
 hmdccal2parsim.h:260
 hmdccal2parsim.h:261
 hmdccal2parsim.h:262
 hmdccal2parsim.h:263
 hmdccal2parsim.h:264
 hmdccal2parsim.h:265
 hmdccal2parsim.h:266
 hmdccal2parsim.h:267
 hmdccal2parsim.h:268