27 #include "TGraphErrors.h"
45 for(Int_t i=0;i<100;i++)
51 for(Int_t i=0;i<100;i++)
58 array =
new TObjArray(angle);
59 for (Int_t i=0; i<angle; ++i)
71 array =
new TObjArray(mod);
72 for (Int_t i=0; i<mod; i++)
83 const Char_t* context,Int_t
n)
93 Error(
"HMdcCal2Par()",
"ZERO POINTER RETRIEVED FOR HMDCCAL2PARSIM!");
102 array =
new TObjArray(n);
131 Error(
"HMdcCal2Par:init()",
"Detector setup (gHades->getSetup()->getDetector(\"Mdc\")) missing.");
139 for(Int_t s=0; s<6; s++)
141 for(Int_t m=0; m<4; m++)
144 sprintf(buf,
"%s %i",buf,s*4+m);
145 for(Int_t a=0;a<18;a++)
165 cout<<
"HMdcCal2Par: plotting sector "<<s<<
" module "<<m<<endl;
166 gStyle->SetOptStat(0);
167 gStyle->SetOptTitle(0);
169 Char_t nameCanvas[300];
170 sprintf(nameCanvas,
"%s %i %s %i",
"time -> distance sector ",s,
" module ",m);
171 TH2F* dummy=
new TH2F(
"dummy",
"dummy",2,0,410,2,0,10.1);
172 dummy->SetXTitle(
"drift time [ns]");
173 dummy->SetYTitle(
"distance from wire [mm]");
175 TCanvas* result=
new TCanvas(nameCanvas,nameCanvas,1000,800);
183 for(Int_t a=0;a<18;a++)
185 for(Int_t i=0;i<100;i++)
188 y[i] =(*this)[s][m][a].distance[i];
190 ey[i]=(*this)[s][m][a].distanceErr[i];
194 TGraphErrors* g=
new TGraphErrors(100,x,y,ex,ey);
207 cout<<
"HMdcCal2Par: plotting 2D sector "<<s<<
" module "<<m<<endl;
209 gStyle->SetOptStat(0);
210 gStyle->SetOptTitle(0);
211 gStyle->SetPalette(1);
213 Char_t nameCanvas[300];
214 if(type==0)sprintf(nameCanvas,
"%s %i %s %i",
"distance sector ",s,
" module ",m);
215 if(type==1)sprintf(nameCanvas,
"%s %i %s %i",
"Error distance sector ",s,
" module ",m);
217 TH2F* dummy=
new TH2F(
"dummy",
"dummy",18,0,90,100,0,400);
219 dummy->SetXTitle(
"angle");
220 dummy->SetYTitle(
"drift time [ns]");
222 if(type==0)dummy->SetZTitle(
"distance [mm]");
223 if(type==1)dummy->SetZTitle(
"Error distance [mm]");
225 TCanvas* result=
new TCanvas(nameCanvas,nameCanvas,1000,800);
227 for(Int_t a=0;a<18;a++)
229 for(Int_t i=0;i<100;i++)
231 if(type==0)dummy->SetBinContent(a+1,i,(*
this)[s][m][a].distance[i]);
232 if(type==1)dummy->SetBinContent(a+1,i,(*
this)[s][m][a].distanceErr[i]);
236 dummy->DrawCopy(
"lego2");
269 Double_t angle=90.-a;
270 Double_t angleStepD=angle/5;
271 Int_t angleStepI=Int_t(angleStepD);
272 if(angleStepI==18)angleStepI=17;
275 HMdcCal2ParAngle& rAngle2=(angleStepI<17) ? (*
this)[s][m][angleStepI+1] : rAngle;
277 Double_t dminF=time/4.;
278 Int_t dminI=Int_t(dminF);
280 Double_t finalDistance;
286 Double_t t=angleStepD - angleStepI;
288 finalDistance=y1-t*(y1-y2);
289 return finalDistance;
293 Double_t y1=rAngle.
distance [dminI];
294 Double_t y2=rAngle2.
distance[dminI];
295 Double_t y3=rAngle2.
distance[dminI+1];
296 Double_t y4=rAngle.
distance [dminI+1];
298 Double_t t=angleStepD - angleStepI;
299 Double_t u=dminF - dminI;
301 finalDistance=y1-t*(y1-y2)-u*(y1-y4)+t*u*(y1-y2+y3-y4);
302 return finalDistance;
331 Double_t angle=90.-a;
332 Double_t angleStepD=angle/5;
333 Int_t angleStepI=Int_t(angleStepD);
334 if(angleStepI==18)angleStepI=17;
337 HMdcCal2ParAngle& rAngle2=(angleStepI<17) ? (*
this)[s][m][angleStepI+1] : rAngle;
339 Double_t dminF=time/4.;
340 Int_t dminI=Int_t(dminF);
348 Double_t t=angleStepD - angleStepI;
350 finalErr=y1-t*(y1-y2);
360 Double_t t=angleStepD - angleStepI;
361 Double_t u=dminF - dminI;
363 finalErr=y1-t*(y1-y2)-u*(y1-y4)+t*u*(y1-y2+y3-y4);
367 ,Double_t*dist,Double_t*distErr)
399 Double_t angle=90.-a;
400 Double_t angleStepD=angle/5;
401 Int_t angleStepI=Int_t(angleStepD);
402 if(angleStepI==18)angleStepI=17;
405 HMdcCal2ParAngle& rAngle2=(angleStepI<17) ? (*
this)[s][m][angleStepI+1] : rAngle;
407 Double_t dminF=time/4.;
408 Int_t dminI=Int_t(dminF);
415 Double_t t=angleStepD - angleStepI;
422 *distErr=y1-t*(y1-y2);
427 Double_t y1=rAngle.
distance [dminI];
428 Double_t y2=rAngle2.
distance[dminI];
429 Double_t y3=rAngle2.
distance[dminI+1];
430 Double_t y4=rAngle.
distance [dminI+1];
432 Double_t t=angleStepD - angleStepI;
433 Double_t u=dminF - dminI;
435 *dist=y1-t*(y1-y2)-u*(y1-y4)+t*u*(y1-y2+y3-y4);
443 *distErr=y1-t*(y1-y2)-u*(y1-y4)+t*u*(y1-y2+y3-y4);
449 if (strcmp(output->IsA()->GetName(),
"HParAsciiFileIo")==0)
452 if (out)
return out->
write(
this);
460 "# Cal2 Calibration parameters of the MDC\n"
461 "# time -> distance\n"
462 "# Format: type: 0=dist, 1=distErr\n"
463 "# sector module angle type par0 par1 par2 par3 par4 par5 pa6 par7 par8 par9 par10\n";
473 if (mod>-1 && mod<sector.
getSize()) {
487 sprintf(dummy,
"%1i %1i %2i %1i",sec, mod, angle,
type);
490 sprintf(buf,
"%s %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f\n",
499 sprintf(buf,
"%s %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f\n",
507 default:Error(
"HMdcCal2Par::writeline()",
"argument \"type\" out of range ");
514 }
else { strcpy(buf,
""); }
522 for(Int_t s=0;s<
getSize();s++) {
524 for(Int_t m=0;m<sec.
getSize();m++) {
526 for(Int_t l=0;l<18;l++) {
537 for(Int_t s=0;s<
getSize();s++) {
539 for(Int_t m=0;m<sec.
getSize();m++) {
541 for(Int_t l=0;l<18;l++) {
543 for(Int_t mytype=0;mytype<2;mytype++){
544 for(Int_t myline=0;myline<10;myline++){
549 "%7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f\n",
558 "%7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f\n",
565 default:Error(
"HMdcCal2Par::printParam()",
"argument \"type\" out of range ");
void fillDistanceError(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)
void putAsciiHeader(TString &)
Float_t getDistanceError(Int_t line, Int_t i)
HMdcCal2Par(const Char_t *name="MdcCal2Par", const Char_t *title="cal2 calibration parameters for Mdc [time->distance]", const Char_t *context="MdcCal2ParSimProduction", Int_t n=6)
Float_t getDistance(Int_t line, Int_t i)
ClassImp(HMdcCal2ParAngle) ClassImp(HMdcCal2ParMod) ClassImp(HMdcCal2ParSec) ClassImp(HMdcCal2Par) void HMdcCal2ParAngle
HRuntimeDb * getRuntimeDb(void)
Bool_t writeline(Char_t *, Int_t, Int_t, Int_t)
virtual Int_t getModule(Int_t sector, Int_t mod)
HMdcCal2ParSim * cal2parsim
virtual HDetParIo * getDetParIo(const Text_t *)
void info(Char_t level, Int_t det, const Char_t *className, const Char_t *text)
void plot2D(Int_t, Int_t, Int_t)
void resetInputVersions()
void transformToDistance(Int_t, Int_t, Int_t, Float_t, HMdcCal2Par *)
HSpectrometer * getSetup(void)
Bool_t changed
static flag
HMdcCal2ParSec(Int_t sec=0, Int_t mod=4)
#define INFO_msg(level, det, text)
HParSet * getContainer(const Text_t *)
Bool_t status
versions of container in the 2 possible inputs
HMdcCal2ParMod(Int_t sec=0, Int_t mod=0, Int_t angle=18)
Float_t getSlopeOutside()
virtual Int_t write(HParSet *)
Double_t calcDistanceErr(Int_t, Int_t, Double_t, Double_t)
HMessageMgr * getMsg(void)
Int_t versions[3]
name of the detector the container belongs to
Int_t getInputVersion(Int_t i)
Double_t calcDistance(Int_t, Int_t, Double_t, Double_t)
virtual Bool_t init(void)