#include #include "TMath.h" #include "TVector2.h" #include "Stntuple/data/TStnBeamPos.hh" ClassImp(TStnBeamPos) //______________________________________________________________________________ void TStnBeamPos::Streamer(TBuffer &R__b) { // Stream an object of class TStnBeamPos. UInt_t R__s, R__c; if (R__b.IsReading()) { Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v == 1) ReadV1(R__b,R__s,R__c); else if (R__v == 2) ReadV2(R__b,R__s,R__c); else if (R__v == 3) ReadV3(R__b,R__s,R__c); else { // current version: 4 TObject::Streamer(R__b); R__b >> fRunNumber; R__b >> fStatus; R__b >> fHistory; R__b >> fX0; R__b >> fY0; R__b >> fZ0; R__b >> fDxDz; R__b >> fDyDz; R__b >> fCov00; R__b >> fCov01; R__b >> fCov02; R__b >> fCov03; R__b >> fCov11; R__b >> fCov12; R__b >> fCov13; R__b >> fCov22; R__b >> fCov23; R__b >> fCov33; R__b >> fEmittXFit; R__b >> fEmittYFit; R__b >> fBstarXFit; R__b >> fBstarYFit; R__b >> fZzeroXFit; R__b >> fZzeroYFit; R__b >> fWidthX; R__b >> fWidthY; R__b >> fWidthXY; fName.Streamer(R__b); R__b.CheckByteCount(R__s, R__c, TStnBeamPos::IsA()); } //----------------------------------------------------------------------------- // fD0 and fPhi0 are not written out, recalculate them on the fly //----------------------------------------------------------------------------- fD0 = sqrt(fX0*fX0+fY0*fY0); fPhi0 = TVector2::Phi_0_2pi(atan2(fY0,fX0)); //----------------------------------------------------------------------------- // for backward compatibility calculate fSigmaX,.. //----------------------------------------------------------------------------- fSigmaX = fCov00 + BeamConst::corrAtZeroX; fSigmaY = fCov11 + BeamConst::corrAtZeroY; fSigmaZ = 35.0*35.0; } else { R__c = R__b.WriteVersion(TStnBeamPos::IsA(), kTRUE); TObject::Streamer(R__b); R__b << fRunNumber; R__b << fStatus; R__b << fHistory; R__b << fX0; R__b << fY0; R__b << fZ0; R__b << fDxDz; R__b << fDyDz; R__b << fCov00; R__b << fCov01; R__b << fCov02; R__b << fCov03; R__b << fCov11; R__b << fCov12; R__b << fCov13; R__b << fCov22; R__b << fCov23; R__b << fCov33; R__b << fEmittXFit; R__b << fEmittYFit; R__b << fBstarXFit; R__b << fBstarYFit; R__b << fZzeroXFit; R__b << fZzeroYFit; R__b << fWidthX; R__b << fWidthY; R__b << fWidthXY; fName.Streamer(R__b); R__b.SetByteCount(R__c, kTRUE); } } //_____________________________________________________________________________ TStnBeamPos::TStnBeamPos(const char* Name) { fName = Name; Init(-1,-1,0, 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.); } //_____________________________________________________________________________ TStnBeamPos::TStnBeamPos(const char* Name, Int_t RunNumber, Int_t Status, Int_t History, Double_t X0, Double_t Y0, Double_t Z0, Double_t DxDz, Double_t DyDz, Double_t Cov00, Double_t Cov01, Double_t Cov02, Double_t Cov03, Double_t Cov11, Double_t Cov12, Double_t Cov13, Double_t Cov22, Double_t Cov23, Double_t Cov33, Double_t EmittXFit, Double_t EmittYFit, Double_t BstarXFit, Double_t BstarYFit, Double_t ZzeroXFit, Double_t ZzeroYFit, Double_t WidthX, Double_t WidthY, Double_t WidthXY) { fName = Name; Init(RunNumber,Status,History,X0,Y0,Z0,DxDz,DyDz, Cov00,Cov01,Cov02,Cov03,Cov11,Cov12,Cov13,Cov22,Cov23,Cov33, EmittXFit,EmittYFit,BstarXFit,BstarYFit,ZzeroXFit,ZzeroYFit, WidthX,WidthY,WidthXY); } //_____________________________________________________________________________ void TStnBeamPos::CopyC(TStnBeamPos* b) { // Copy just the contents Init(b->fRunNumber,b->fStatus,b->fHistory, b->fX0,b->fY0,b->fZ0,b->fDxDz,b->fDyDz, b->fCov00,b->fCov01,b->fCov02,b->fCov03,b->fCov11,b->fCov12,b->fCov13, b->fCov22,b->fCov23,b->fCov33, b->fEmittXFit,b->fEmittYFit,b->fBstarXFit,b->fBstarYFit, b->fZzeroXFit,b->fZzeroYFit,b->fWidthX,b->fWidthY,b->fWidthXY); return; } //_____________________________________________________________________________ Int_t TStnBeamPos::Init (Int_t RunNumber, Int_t Status, Int_t History, Double_t X0, Double_t Y0, Double_t Z0, Double_t DxDz, Double_t DyDz, Double_t Cov00, Double_t Cov01, Double_t Cov02, Double_t Cov03, Double_t Cov11, Double_t Cov12, Double_t Cov13, Double_t Cov22, Double_t Cov23, Double_t Cov33, Double_t EmittXFit, Double_t EmittYFit, Double_t BstarXFit, Double_t BstarYFit, Double_t ZzeroXFit, Double_t ZzeroYFit, Double_t WidthX, Double_t WidthY, Double_t WidthXY) { fRunNumber = RunNumber; fStatus = Status ; fHistory = History ; fX0 = X0 ; fY0 = Y0 ; fZ0 = Z0 ; fDxDz = DxDz ; fDyDz = DyDz ; fCov00 = Cov00 ; fCov01 = Cov01 ; fCov02 = Cov02 ; fCov03 = Cov03 ; fCov11 = Cov11 ; fCov12 = Cov12 ; fCov13 = Cov13 ; fCov22 = Cov22 ; fCov23 = Cov23 ; fCov33 = Cov33 ; fEmittXFit = EmittXFit; fEmittYFit = EmittYFit; fBstarXFit = BstarXFit; fBstarYFit = BstarYFit; fZzeroXFit = ZzeroXFit; fZzeroYFit = ZzeroYFit; fWidthX = WidthX ; fWidthY = WidthY ; fWidthXY = WidthXY ; //----------------------------------------------------------------------------- // fD0 and fPhi0 are not written out, recalculate them on the fly //----------------------------------------------------------------------------- fD0 = sqrt(fX0*fX0+fY0*fY0); fPhi0 = TVector2::Phi_0_2pi(atan2(fY0,fX0)); //----------------------------------------------------------------------------- // for backward compatibility calculate fSigmaX,.. (fixed averages) //----------------------------------------------------------------------------- fSigmaX = fCov00 + BeamConst::corrAtZeroX; fSigmaY = fCov11 + BeamConst::corrAtZeroY; fSigmaZ = 35.0*35.0; return 0; } //_____________________________________________________________________________ void TStnBeamPos::Print(Option_t* Opt) const { TString opt = Opt; if ((opt == "") || (opt.Index("banner") >= 0)) { printf(" RunNum Status X0 Y0 Z0 DxDz DyDz"); printf(" SigmaX SigmaY SigmaZ \n"); printf("------------------------------------------------------------------"); printf("-----------------------------------\n"); } if ((opt == "") || (opt.Index("data") >= 0)) printf(" %7i 0x%08x %9.6f %9.6f %9.6f %9.6f %9.6f %9.6f %9.6f %9.5f\n", fRunNumber,fStatus,fX0,fY0,fZ0,fDxDz,fDyDz,fSigmaX,fSigmaY,fSigmaZ); } //______________________________________________________________________________ void TStnBeamPos::ReadV3(TBuffer &R__b, UInt_t R__s, UInt_t R__c) { // read version 3 of class TStnBeamPos. TObject::Streamer(R__b); R__b >> fRunNumber; R__b >> fStatus; R__b >> fHistory; R__b >> fX0; R__b >> fY0; R__b >> fZ0; R__b >> fDxDz; R__b >> fDyDz; R__b >> fSigmaX; R__b >> fSigmaY; R__b >> fSigmaZ; fName.Streamer(R__b); R__b.CheckByteCount(R__s, R__c, TStnBeamPos::IsA()); } //______________________________________________________________________________ void TStnBeamPos::ReadV2(TBuffer &R__b, UInt_t R__s, UInt_t R__c) { // read version 2 of class TStnBeamPos. TObject::Streamer(R__b); R__b >> fRunNumber; R__b >> fStatus; R__b >> fX0; R__b >> fY0; R__b >> fZ0; R__b >> fDxDz; R__b >> fDyDz; R__b >> fSigmaX; R__b >> fSigmaY; R__b >> fSigmaZ; fName.Streamer(R__b); R__b.CheckByteCount(R__s, R__c, TStnBeamPos::IsA()); } //______________________________________________________________________________ void TStnBeamPos::ReadV1(TBuffer &R__b, UInt_t R__s, UInt_t R__c) { // read version 1 of class TStnBeamPos. TObject::Streamer(R__b); R__b >> fRunNumber; R__b >> fStatus; R__b >> fX0; R__b >> fY0; R__b >> fZ0; R__b >> fDxDz; R__b >> fDyDz; R__b >> fSigmaX; R__b >> fSigmaY; R__b >> fSigmaZ; R__b.CheckByteCount(R__s, R__c, TStnBeamPos::IsA()); }