diff --git a/src/THcDC.cxx b/src/THcDC.cxx index c09ce44dd2ed9d2e6191762c46e9df2d18086f71..cad4ce981b7c215429cd365a0d45ff1813bb43fb 100644 --- a/src/THcDC.cxx +++ b/src/THcDC.cxx @@ -13,132 +13,125 @@ the number of parameters per plane. */ #include "THcDC.h" -#include "THaEvData.h" +#include "TClonesArray.h" +#include "THaApparatus.h" +#include "THaCutList.h" #include "THaDetMap.h" +#include "THaEvData.h" +#include "THaTrack.h" +#include "THcDCTrack.h" #include "THcDetectorMap.h" #include "THcGlobals.h" -#include "THaCutList.h" +#include "THcHallCSpectrometer.h" #include "THcParmList.h" -#include "THcDCTrack.h" -#include "VarDef.h" -#include "VarType.h" -#include "THaTrack.h" -#include "TClonesArray.h" #include "TMath.h" #include "TVectorD.h" -#include "THaApparatus.h" -#include "THcHallCSpectrometer.h" +#include "VarDef.h" +#include "VarType.h" -#include <cstring> #include <cstdio> #include <cstdlib> +#include <cstring> #include <iostream> -#include "spdlog/spdlog.h" +#include "spdlog/sinks/basic_file_sink.h" // support for basic file logging #include "spdlog/sinks/stdout_color_sinks.h" //support for stdout logging -#include "spdlog/sinks/basic_file_sink.h" // support for basic file logging - +#include "spdlog/spdlog.h" using namespace std; //_____________________________________________________________________________ -THcDC::THcDC( - const char* name, const char* description, - THaApparatus* apparatus ) : - THaTrackingDetector(name,description,apparatus) -{ +THcDC::THcDC(const char* name, const char* description, THaApparatus* apparatus) + : THaTrackingDetector(name, description, apparatus) { // Constructor - fNPlanes = 0; // No planes until we make them - _sub_logger = _det_logger->clone("THcDC"); - fXCenter = NULL; - fYCenter = NULL; - fMinHits = NULL; - fMaxHits = NULL; - fMinCombos = NULL; + fNPlanes = 0; // No planes until we make them + _sub_logger = _det_logger->clone("THcDC"); + fXCenter = NULL; + fYCenter = NULL; + fMinHits = NULL; + fMaxHits = NULL; + fMinCombos = NULL; fSpace_Point_Criterion = NULL; - fTdcWinMin = NULL; - fTdcWinMax = NULL; - fCentralTime = NULL; - fNWires = NULL; - fNChamber = NULL; - fWireOrder = NULL; + fTdcWinMin = NULL; + fTdcWinMax = NULL; + fCentralTime = NULL; + fNWires = NULL; + fNChamber = NULL; + fWireOrder = NULL; fDriftTimeSign = NULL; - fReadoutTB = NULL; - fReadoutLR = NULL; - - fXPos = NULL; - fYPos = NULL; - fZPos = NULL; - fAlphaAngle = NULL; - fBetaAngle = NULL; - fGammaAngle = NULL; - fPitch = NULL; - fCentralWire = NULL; + fReadoutTB = NULL; + fReadoutLR = NULL; + + fXPos = NULL; + fYPos = NULL; + fZPos = NULL; + fAlphaAngle = NULL; + fBetaAngle = NULL; + fGammaAngle = NULL; + fPitch = NULL; + fCentralWire = NULL; fPlaneTimeZero = NULL; - fSigma = NULL; + fSigma = NULL; // These should be set to zero (in a parameter file) in order to // replicate historical ENGINE behavior - fFixLR = 1; + fFixLR = 1; fFixPropagationCorrection = 1; - fProjectToChamber = 0; // Use 1 for SOS chambers + fProjectToChamber = 0; // Use 1 for SOS chambers - fDCTracks = new TClonesArray( "THcDCTrack", 20 ); + fDCTracks = new TClonesArray("THcDCTrack", 20); - fNChamHits = 0; + fNChamHits = 0; fPlaneEvents = 0; - //The version defaults to 0 (old HMS style). 1 is new HMS style and 2 is SHMS style. + // The version defaults to 0 (old HMS style). 1 is new HMS style and 2 is SHMS style. fVersion = 0; - //Create and return a shared_ptr to a multithreaded console logger. + // Create and return a shared_ptr to a multithreaded console logger. //_logger = spdlog::get("config"); - //if(!_logger) { + // if(!_logger) { // _logger = spdlog::stdout_color_mt("config"); //} _sub_logger->debug("THcDC constructor"); } //_____________________________________________________________________________ -void THcDC::Setup(const char* name, const char* description) -{ +void THcDC::Setup(const char* name, const char* description) { - Bool_t optional = true; + Bool_t optional = true; // Create the chamber and plane objects using parameters. static const char* const here = "Setup"; - THaApparatus *app = GetApparatus(); - if(app) { + THaApparatus* app = GetApparatus(); + if (app) { // cout << app->GetName() << endl; - fPrefix[0]=tolower(app->GetName()[0]); - fPrefix[1]='\0'; + fPrefix[0] = tolower(app->GetName()[0]); + fPrefix[1] = '\0'; } else { cout << "No apparatus found" << endl; - fPrefix[0]='\0'; + fPrefix[0] = '\0'; } // For now, decide chamber style from the spectrometer name. // Should override with a paramter - //cout<<"HMS Style??\t"<<fHMSStyleChambers<<endl; - string planenamelist; - DBRequest list[]={ - {"dc_num_planes",&fNPlanes, kInt}, - {"dc_num_chambers",&fNChambers, kInt}, - {"dc_tdc_time_per_channel",&fNSperChan, kDouble}, - {"dc_wire_velocity",&fWireVelocity,kDouble}, - {"dc_plane_names",&planenamelist, kString}, - {"dc_version", &fVersion, kInt, 0, optional}, - {"dc_tdcrefcut", &fTDC_RefTimeCut, kInt, 0, 1}, - {0} - }; - - fTDC_RefTimeCut = 0; // Minimum allowed reference times - gHcParms->LoadParmValues((DBRequest*)&list,fPrefix); - - if(fVersion==0) { + // cout<<"HMS Style??\t"<<fHMSStyleChambers<<endl; + string planenamelist; + DBRequest list[] = {{"dc_num_planes", &fNPlanes, kInt}, + {"dc_num_chambers", &fNChambers, kInt}, + {"dc_tdc_time_per_channel", &fNSperChan, kDouble}, + {"dc_wire_velocity", &fWireVelocity, kDouble}, + {"dc_plane_names", &planenamelist, kString}, + {"dc_version", &fVersion, kInt, 0, optional}, + {"dc_tdcrefcut", &fTDC_RefTimeCut, kInt, 0, 1}, + {0}}; + + fTDC_RefTimeCut = 0; // Minimum allowed reference times + gHcParms->LoadParmValues((DBRequest*)&list, fPrefix); + + if (fVersion == 0) { fHMSStyleChambers = 1; } else { fHMSStyleChambers = 0; @@ -146,123 +139,121 @@ void THcDC::Setup(const char* name, const char* description) _det_logger->info("Plane Name List: {}", planenamelist); _det_logger->info("Drift Chambers: {} planes in {} chambers", fNPlanes, fNChambers); - //cout << "Plane Name List: " << planenamelist << endl; - //cout << "Drift Chambers: " << fNPlanes << " planes in " << fNChambers << " chambers" << endl; + // cout << "Plane Name List: " << planenamelist << endl; + // cout << "Drift Chambers: " << fNPlanes << " planes in " << fNChambers << " chambers" << endl; vector<string> plane_names = vsplit(planenamelist); - if(plane_names.size() != (UInt_t) fNPlanes) { - //cout << "ERROR: Number of planes " << fNPlanes << " doesn't agree with number of plane names " << plane_names.size() << endl; + if (plane_names.size() != (UInt_t)fNPlanes) { + // cout << "ERROR: Number of planes " << fNPlanes << " doesn't agree with number of plane names + // " << plane_names.size() << endl; _det_logger->error("ERROR: Number of planes {} doesn't agree with number of plane names {}", - fNPlanes, plane_names.size()); + fNPlanes, plane_names.size()); // Should quit. Is there an official way to quit? } - fPlaneNames = new char* [fNPlanes]; - for(Int_t i=0;i<fNPlanes;i++) { - fPlaneNames[i] = new char[plane_names[i].length()+1]; + fPlaneNames = new char*[fNPlanes]; + for (Int_t i = 0; i < fNPlanes; i++) { + fPlaneNames[i] = new char[plane_names[i].length() + 1]; strcpy(fPlaneNames[i], plane_names[i].c_str()); } - char *desc = new char[strlen(description)+100]; - char *desc1= new char[strlen(description)+100]; + char* desc = new char[strlen(description) + 100]; + char* desc1 = new char[strlen(description) + 100]; fPlanes.clear(); - for(Int_t i=0;i<fNPlanes;i++) { + for (Int_t i = 0; i < fNPlanes; i++) { strcpy(desc, description); strcat(desc, " Plane "); strcat(desc, fPlaneNames[i]); - THcDriftChamberPlane* newplane = new THcDriftChamberPlane(fPlaneNames[i], desc, i+1, this); - if( !newplane or newplane->IsZombie() ) { - _det_logger->error( "{} Error creating Drift Chamber plane {}. Call expert.", Here(here), name); + THcDriftChamberPlane* newplane = new THcDriftChamberPlane(fPlaneNames[i], desc, i + 1, this); + if (!newplane or newplane->IsZombie()) { + _det_logger->error("{} Error creating Drift Chamber plane {}. Call expert.", Here(here), + name); MakeZombie(); - delete [] desc; - delete [] desc1; + delete[] desc; + delete[] desc1; return; } fPlanes.push_back(newplane); newplane->SetDebug(fDebug); // cout << "Created Drift Chamber Plane " << fPlaneNames[i] << ", " << desc << endl; - } fChambers.clear(); - for(UInt_t i=0;i<fNChambers;i++) { - sprintf(desc1,"Ch%d",i+1); + for (UInt_t i = 0; i < fNChambers; i++) { + sprintf(desc1, "Ch%d", i + 1); // Should construct a better chamber name - THcDriftChamber* newchamber = new THcDriftChamber(desc1, desc, i+1, this); + THcDriftChamber* newchamber = new THcDriftChamber(desc1, desc, i + 1, this); fChambers.push_back(newchamber); - //cout << "Created Drift Chamber " << i+1 << ", " << desc1 << endl; - _det_logger->info("Created Drift Chamber {}, {}" , i+1 , desc1); + // cout << "Created Drift Chamber " << i+1 << ", " << desc1 << endl; + _det_logger->info("Created Drift Chamber {}, {}", i + 1, desc1); newchamber->SetHMSStyleFlag(fHMSStyleChambers); // Tell the chamber its style } - delete [] desc; - delete [] desc1; + delete[] desc; + delete[] desc1; } //_____________________________________________________________________________ -THcDC::THcDC( ) -{ +THcDC::THcDC() { // Constructor } //_____________________________________________________________________________ -THaAnalysisObject::EStatus THcDC::Init( const TDatime& date ) -{ +THaAnalysisObject::EStatus THcDC::Init(const TDatime& date) { // Register the plane objects with the appropriate chambers. // Trigger ReadDatabase to load the remaining parameters - Setup(GetName(), GetTitle()); // Create the subdetectors here + Setup(GetName(), GetTitle()); // Create the subdetectors here EffInit(); char EngineDID[] = "xDC"; - EngineDID[0] = toupper(GetApparatus()->GetName()[0]); - if( gHcDetectorMap->FillMap(fDetMap, EngineDID) < 0 ) { + EngineDID[0] = toupper(GetApparatus()->GetName()[0]); + if (gHcDetectorMap->FillMap(fDetMap, EngineDID) < 0) { static const char* const here = "Init()"; - _det_logger->error("{} Error filling detectormap for {}.", Here(here), EngineDID ); + _det_logger->error("{} Error filling detectormap for {}.", Here(here), EngineDID); return kInitError; } // Should probably put this in ReadDatabase as we will know the // maximum number of hits after setting up the detector map _det_logger->info("DC tdc ref time cut = {} ", fTDC_RefTimeCut); - //cout << " DC tdc ref time cut = " << fTDC_RefTimeCut << endl; - InitHitList(fDetMap, "THcRawDCHit", fDetMap->GetTotNumChan()+1, fTDC_RefTimeCut, 0); + // cout << " DC tdc ref time cut = " << fTDC_RefTimeCut << endl; + InitHitList(fDetMap, "THcRawDCHit", fDetMap->GetTotNumChan() + 1, fTDC_RefTimeCut, 0); - CreateMissReportParms(Form("%sdc",fPrefix)); + CreateMissReportParms(Form("%sdc", fPrefix)); EStatus status; // This triggers call of ReadDatabase and DefineVariables - if( (status = THaTrackingDetector::Init( date )) ) - return fStatus=status; + if ((status = THaTrackingDetector::Init(date))) + return fStatus = status; // Initialize planes and add them to chambers - for(Int_t ip=0;ip<fNPlanes;ip++) { - if((status = fPlanes[ip]->Init( date ))) { - return fStatus=status; + for (Int_t ip = 0; ip < fNPlanes; ip++) { + if ((status = fPlanes[ip]->Init(date))) { + return fStatus = status; } else { - Int_t chamber=fNChamber[ip]; - fChambers[chamber-1]->AddPlane(fPlanes[ip]); + Int_t chamber = fNChamber[ip]; + fChambers[chamber - 1]->AddPlane(fPlanes[ip]); } } // Initialize chambers - for(UInt_t ic=0;ic<fNChambers;ic++) { - if((status = fChambers[ic]->Init ( date ))) { - return fStatus=status; + for (UInt_t ic = 0; ic < fNChambers; ic++) { + if ((status = fChambers[ic]->Init(date))) { + return fStatus = status; } } // Retrieve the fiting coefficients - fPlaneCoeffs = new Double_t* [fNPlanes]; - for(Int_t ip=0; ip<fNPlanes;ip++) { + fPlaneCoeffs = new Double_t*[fNPlanes]; + for (Int_t ip = 0; ip < fNPlanes; ip++) { fPlaneCoeffs[ip] = fPlanes[ip]->GetPlaneCoef(); } - fResiduals = new Double_t [fNPlanes]; - fResidualsExclPlane = new Double_t [fNPlanes]; - fWire_hit_did = new Double_t [fNPlanes]; - fWire_hit_should = new Double_t [fNPlanes]; - + fResiduals = new Double_t[fNPlanes]; + fResidualsExclPlane = new Double_t[fNPlanes]; + fWire_hit_did = new Double_t[fNPlanes]; + fWire_hit_should = new Double_t[fNPlanes]; // Replace with what we need for Hall C // const DataDest tmp[NDEST] = { @@ -270,17 +261,17 @@ THaAnalysisObject::EStatus THcDC::Init( const TDatime& date ) // { &fLTNhit, &fLANhit, fLT, fLT_c, fLA, fLA_p, fLA_c, fLOff, fLPed, fLGain } // }; // memcpy( fDataDest, tmp, NDEST*sizeof(DataDest) ); - - fPresentP = 0; - THaVar* vpresent = gHaVars->Find(Form("%s.present",GetApparatus()->GetName())); - if(vpresent) { - fPresentP = (Bool_t *) vpresent->GetValuePointer(); + + fPresentP = 0; + THaVar* vpresent = gHaVars->Find(Form("%s.present", GetApparatus()->GetName())); + if (vpresent) { + fPresentP = (Bool_t*)vpresent->GetValuePointer(); } return fStatus = kOK; } //_____________________________________________________________________________ -Int_t THcDC::ManualInitTree( TTree* t ){ +Int_t THcDC::ManualInitTree(TTree* t) { std::string app_name = GetApparatus()->GetName(); std::string det_name = GetName(); std::string branch_name = (app_name + "_" + det_name + "_data"); @@ -292,8 +283,7 @@ Int_t THcDC::ManualInitTree( TTree* t ){ } //_____________________________________________________________________________ -Int_t THcDC::ReadDatabase( const TDatime& date ) -{ +Int_t THcDC::ReadDatabase(const TDatime& date) { /** Read this detector's parameters from the ThcParmList This function is called by THaDetectorBase::Init() once at the @@ -302,114 +292,135 @@ Int_t THcDC::ReadDatabase( const TDatime& date ) */ // static const char* const here = "ReadDatabase()"; - delete [] fXCenter; fXCenter = new Double_t [fNChambers]; - delete [] fYCenter; fYCenter = new Double_t [fNChambers]; - delete [] fMinHits; fMinHits = new Int_t [fNChambers]; - delete [] fMaxHits; fMaxHits = new Int_t [fNChambers]; - delete [] fMinCombos; fMinCombos = new Int_t [fNChambers]; - delete [] fSpace_Point_Criterion; fSpace_Point_Criterion = new Double_t [fNChambers]; - - delete [] fTdcWinMin; fTdcWinMin = new Int_t [fNPlanes]; - delete [] fTdcWinMax; fTdcWinMax = new Int_t [fNPlanes]; - delete [] fCentralTime; fCentralTime = new Double_t [fNPlanes]; - delete [] fNWires; fNWires = new Int_t [fNPlanes]; - delete [] fNChamber; fNChamber = new Int_t [fNPlanes]; // Which chamber is this plane - delete [] fWireOrder; fWireOrder = new Int_t [fNPlanes]; // Wire readout order - delete [] fDriftTimeSign; fDriftTimeSign = new Int_t [fNPlanes]; - delete [] fReadoutLR; fReadoutLR = new Int_t [fNPlanes]; - delete [] fReadoutTB; fReadoutTB = new Int_t [fNPlanes]; - - delete [] fXPos; fXPos = new Double_t [fNPlanes]; - delete [] fYPos; fYPos = new Double_t [fNPlanes]; - delete [] fZPos; fZPos = new Double_t [fNPlanes]; - delete [] fAlphaAngle; fAlphaAngle = new Double_t [fNPlanes]; - delete [] fBetaAngle; fBetaAngle = new Double_t [fNPlanes]; - delete [] fGammaAngle; fGammaAngle = new Double_t [fNPlanes]; - delete [] fPitch; fPitch = new Double_t [fNPlanes]; - delete [] fCentralWire; fCentralWire = new Double_t [fNPlanes]; - delete [] fPlaneTimeZero; fPlaneTimeZero = new Double_t [fNPlanes]; - delete [] fSigma; fSigma = new Double_t [fNPlanes]; + delete[] fXCenter; + fXCenter = new Double_t[fNChambers]; + delete[] fYCenter; + fYCenter = new Double_t[fNChambers]; + delete[] fMinHits; + fMinHits = new Int_t[fNChambers]; + delete[] fMaxHits; + fMaxHits = new Int_t[fNChambers]; + delete[] fMinCombos; + fMinCombos = new Int_t[fNChambers]; + delete[] fSpace_Point_Criterion; + fSpace_Point_Criterion = new Double_t[fNChambers]; + + delete[] fTdcWinMin; + fTdcWinMin = new Int_t[fNPlanes]; + delete[] fTdcWinMax; + fTdcWinMax = new Int_t[fNPlanes]; + delete[] fCentralTime; + fCentralTime = new Double_t[fNPlanes]; + delete[] fNWires; + fNWires = new Int_t[fNPlanes]; + delete[] fNChamber; + fNChamber = new Int_t[fNPlanes]; // Which chamber is this plane + delete[] fWireOrder; + fWireOrder = new Int_t[fNPlanes]; // Wire readout order + delete[] fDriftTimeSign; + fDriftTimeSign = new Int_t[fNPlanes]; + delete[] fReadoutLR; + fReadoutLR = new Int_t[fNPlanes]; + delete[] fReadoutTB; + fReadoutTB = new Int_t[fNPlanes]; + + delete[] fXPos; + fXPos = new Double_t[fNPlanes]; + delete[] fYPos; + fYPos = new Double_t[fNPlanes]; + delete[] fZPos; + fZPos = new Double_t[fNPlanes]; + delete[] fAlphaAngle; + fAlphaAngle = new Double_t[fNPlanes]; + delete[] fBetaAngle; + fBetaAngle = new Double_t[fNPlanes]; + delete[] fGammaAngle; + fGammaAngle = new Double_t[fNPlanes]; + delete[] fPitch; + fPitch = new Double_t[fNPlanes]; + delete[] fCentralWire; + fCentralWire = new Double_t[fNPlanes]; + delete[] fPlaneTimeZero; + fPlaneTimeZero = new Double_t[fNPlanes]; + delete[] fSigma; + fSigma = new Double_t[fNPlanes]; Bool_t optional = true; - DBRequest list[]={ - {"dc_tdc_time_per_channel",&fNSperChan, kDouble}, - {"dc_wire_velocity",&fWireVelocity,kDouble}, - - {"dc_xcenter", fXCenter, kDouble, fNChambers}, - {"dc_ycenter", fYCenter, kDouble, fNChambers}, - {"min_hit", fMinHits, kInt, fNChambers}, - {"max_pr_hits", fMaxHits, kInt, fNChambers}, - {"min_combos", fMinCombos, kInt, fNChambers}, - {"space_point_criterion", fSpace_Point_Criterion, kDouble, fNChambers}, - - {"dc_tdc_min_win", fTdcWinMin, kInt, (UInt_t)fNPlanes}, - {"dc_tdc_max_win", fTdcWinMax, kInt, (UInt_t)fNPlanes}, - {"dc_central_time", fCentralTime, kDouble, (UInt_t)fNPlanes}, - {"dc_nrwire", fNWires, kInt, (UInt_t)fNPlanes}, - {"dc_chamber_planes", fNChamber, kInt, (UInt_t)fNPlanes}, - {"dc_wire_counting", fWireOrder, kInt, (UInt_t)fNPlanes}, - {"dc_drifttime_sign", fDriftTimeSign, kInt, (UInt_t)fNPlanes}, - {"dc_readoutLR", fReadoutLR, kInt, (UInt_t)fNPlanes, optional}, - {"dc_readoutTB", fReadoutTB, kInt, (UInt_t)fNPlanes, optional}, - - {"dc_zpos", fZPos, kDouble, (UInt_t)fNPlanes}, - {"dc_alpha_angle", fAlphaAngle, kDouble, (UInt_t)fNPlanes}, - {"dc_beta_angle", fBetaAngle, kDouble, (UInt_t)fNPlanes}, - {"dc_gamma_angle", fGammaAngle, kDouble, (UInt_t)fNPlanes}, - {"dc_pitch", fPitch, kDouble, (UInt_t)fNPlanes}, - {"dc_central_wire", fCentralWire, kDouble, (UInt_t)fNPlanes}, - {"dc_plane_time_zero", fPlaneTimeZero, kDouble, (UInt_t)fNPlanes}, - {"dc_sigma", fSigma, kDouble, (UInt_t)fNPlanes}, - {"single_stub",&fSingleStub, kInt,0,1}, - {"ntracks_max_fp", &fNTracksMaxFP, kInt}, - {"xt_track_criterion", &fXtTrCriterion, kDouble}, - {"yt_track_criterion", &fYtTrCriterion, kDouble}, - {"xpt_track_criterion", &fXptTrCriterion, kDouble}, - {"ypt_track_criterion", &fYptTrCriterion, kDouble}, - {"dc_fix_lr", &fFixLR, kInt}, - {"dc_fix_propcorr", &fFixPropagationCorrection, kInt}, - {"debuglinkstubs", &fdebuglinkstubs, kInt}, - {"debugprintrawdc", &fdebugprintrawdc, kInt}, - {"debugprintdecodeddc", &fdebugprintdecodeddc, kInt}, - {"debugflagpr", &fdebugflagpr, kInt}, - {"debugflagstubs", &fdebugflagstubs, kInt}, - {"debugtrackprint", &fdebugtrackprint , kInt}, - {0} - }; - fSingleStub=0; - for(Int_t ip=0; ip<fNPlanes;ip++) { + DBRequest list[] = {{"dc_tdc_time_per_channel", &fNSperChan, kDouble}, + {"dc_wire_velocity", &fWireVelocity, kDouble}, + + {"dc_xcenter", fXCenter, kDouble, fNChambers}, + {"dc_ycenter", fYCenter, kDouble, fNChambers}, + {"min_hit", fMinHits, kInt, fNChambers}, + {"max_pr_hits", fMaxHits, kInt, fNChambers}, + {"min_combos", fMinCombos, kInt, fNChambers}, + {"space_point_criterion", fSpace_Point_Criterion, kDouble, fNChambers}, + + {"dc_tdc_min_win", fTdcWinMin, kInt, (UInt_t)fNPlanes}, + {"dc_tdc_max_win", fTdcWinMax, kInt, (UInt_t)fNPlanes}, + {"dc_central_time", fCentralTime, kDouble, (UInt_t)fNPlanes}, + {"dc_nrwire", fNWires, kInt, (UInt_t)fNPlanes}, + {"dc_chamber_planes", fNChamber, kInt, (UInt_t)fNPlanes}, + {"dc_wire_counting", fWireOrder, kInt, (UInt_t)fNPlanes}, + {"dc_drifttime_sign", fDriftTimeSign, kInt, (UInt_t)fNPlanes}, + {"dc_readoutLR", fReadoutLR, kInt, (UInt_t)fNPlanes, optional}, + {"dc_readoutTB", fReadoutTB, kInt, (UInt_t)fNPlanes, optional}, + + {"dc_zpos", fZPos, kDouble, (UInt_t)fNPlanes}, + {"dc_alpha_angle", fAlphaAngle, kDouble, (UInt_t)fNPlanes}, + {"dc_beta_angle", fBetaAngle, kDouble, (UInt_t)fNPlanes}, + {"dc_gamma_angle", fGammaAngle, kDouble, (UInt_t)fNPlanes}, + {"dc_pitch", fPitch, kDouble, (UInt_t)fNPlanes}, + {"dc_central_wire", fCentralWire, kDouble, (UInt_t)fNPlanes}, + {"dc_plane_time_zero", fPlaneTimeZero, kDouble, (UInt_t)fNPlanes}, + {"dc_sigma", fSigma, kDouble, (UInt_t)fNPlanes}, + {"single_stub", &fSingleStub, kInt, 0, 1}, + {"ntracks_max_fp", &fNTracksMaxFP, kInt}, + {"xt_track_criterion", &fXtTrCriterion, kDouble}, + {"yt_track_criterion", &fYtTrCriterion, kDouble}, + {"xpt_track_criterion", &fXptTrCriterion, kDouble}, + {"ypt_track_criterion", &fYptTrCriterion, kDouble}, + {"dc_fix_lr", &fFixLR, kInt}, + {"dc_fix_propcorr", &fFixPropagationCorrection, kInt}, + {"debuglinkstubs", &fdebuglinkstubs, kInt}, + {"debugprintrawdc", &fdebugprintrawdc, kInt}, + {"debugprintdecodeddc", &fdebugprintdecodeddc, kInt}, + {"debugflagpr", &fdebugflagpr, kInt}, + {"debugflagstubs", &fdebugflagstubs, kInt}, + {"debugtrackprint", &fdebugtrackprint, kInt}, + {0}}; + fSingleStub = 0; + for (Int_t ip = 0; ip < fNPlanes; ip++) { fReadoutLR[ip] = 0.0; fReadoutTB[ip] = 0.0; - } - + } - gHcParms->LoadParmValues((DBRequest*)&list,fPrefix); + gHcParms->LoadParmValues((DBRequest*)&list, fPrefix); - //Set the default plane x,y positions to those of the chamber - for(Int_t ip=0; ip<fNPlanes;ip++) { - fXPos[ip] = fXCenter[GetNChamber(ip+1)-1]; - fYPos[ip] = fYCenter[GetNChamber(ip+1)-1]; - } + // Set the default plane x,y positions to those of the chamber + for (Int_t ip = 0; ip < fNPlanes; ip++) { + fXPos[ip] = fXCenter[GetNChamber(ip + 1) - 1]; + fYPos[ip] = fYCenter[GetNChamber(ip + 1) - 1]; + } - //Load the x,y positions of the planes if they exist (overwrites defaults) - DBRequest listOpt[]={ - {"dc_xpos", fXPos, kDouble, (UInt_t)fNPlanes, optional}, - {"dc_ypos", fYPos, kDouble, (UInt_t)fNPlanes, optional}, - {0} - }; - gHcParms->LoadParmValues((DBRequest*)&listOpt,fPrefix); - if(fNTracksMaxFP <= 0) fNTracksMaxFP = 10; + // Load the x,y positions of the planes if they exist (overwrites defaults) + DBRequest listOpt[] = {{"dc_xpos", fXPos, kDouble, (UInt_t)fNPlanes, optional}, + {"dc_ypos", fYPos, kDouble, (UInt_t)fNPlanes, optional}, + {0}}; + gHcParms->LoadParmValues((DBRequest*)&listOpt, fPrefix); + if (fNTracksMaxFP <= 0) + fNTracksMaxFP = 10; // if(fNTracksMaxFP > HNRACKS_MAX) fNTracksMaxFP = NHTRACKS_MAX; - + std::string plane_counts_string; - //cout << "Plane counts:"; - for(Int_t i=0;i<fNPlanes;i++) { - //cout << " " << fNWires[i]; + // cout << "Plane counts:"; + for (Int_t i = 0; i < fNPlanes; i++) { + // cout << " " << fNWires[i]; plane_counts_string += std::string(" "); plane_counts_string += std::to_string(fNWires[i]); } - //cout << endl; + // cout << endl; _det_logger->info("Plane counts: {}", plane_counts_string); fIsInit = true; @@ -418,148 +429,173 @@ Int_t THcDC::ReadDatabase( const TDatime& date ) } //_____________________________________________________________________________ -Int_t THcDC::DefineVariables( EMode mode ) -{ +Int_t THcDC::DefineVariables(EMode mode) { /** Initialize global variables for histograms and Root tree */ - if( mode == kDefine && fIsSetup ) return kOK; - fIsSetup = ( mode == kDefine ); + if (mode == kDefine && fIsSetup) + return kOK; + fIsSetup = (mode == kDefine); // Register variables in global list RVarDef vars[] = { - { "stubtest", "stub test", "fStubTest" }, - { "nhit", "Number of DC hits", "fNhits" }, - { "tnhit", "Number of good DC hits", "fNthits" }, - { "trawhit", "Number of true raw DC hits", "fN_True_RawHits" }, - { "ntrack", "Number of Tracks", "fNDCTracks" }, - { "nsp", "Number of Space Points", "fNSp" }, - { "track_nsp", "Number of spacepoints in track", "fDCTracks.THcDCTrack.GetNSpacePoints()"}, - { "x", "X at focal plane", "fDCTracks.THcDCTrack.GetX()"}, - { "y", "Y at focal plane", "fDCTracks.THcDCTrack.GetY()"}, - { "xp", "XP at focal plane", "fDCTracks.THcDCTrack.GetXP()"}, - { "yp", "YP at focal plane", "fDCTracks.THcDCTrack.GetYP()"}, - { "x_fp", "X at focal plane (golden track)", "fX_fp_best"}, - { "y_fp", "Y at focal plane( golden track)", "fY_fp_best"}, - { "xp_fp", "XP at focal plane (golden track)", "fXp_fp_best"}, - { "yp_fp", "YP at focal plane(golden track) ", "fYp_fp_best"}, - { "chisq", "chisq/dof (golden track) ", "fChisq_best"}, - { "sp1_id", " (golden track) ", "fSp1_ID_best"}, - { "sp2_id", " (golden track) ", "fSp2_ID_best"}, - { "InsideDipoleExit", " ","fInSideDipoleExit_best"}, - { "gtrack_nsp", " Number of space points in golden track ", "fNsp_best"}, - { "residual", "Residuals", "fResiduals"}, - { "residualExclPlane", "Residuals", "fResidualsExclPlane"}, - { "wireHitDid","Wire did have matched track hit", "fWire_hit_did"}, - { "wireHitShould", "Wire should have matched track hit", "fWire_hit_should"}, - { 0 } - }; - return DefineVarsFromList( vars, mode ); - + {"stubtest", "stub test", "fStubTest"}, + {"nhit", "Number of DC hits", "fNhits"}, + {"tnhit", "Number of good DC hits", "fNthits"}, + {"trawhit", "Number of true raw DC hits", "fN_True_RawHits"}, + {"ntrack", "Number of Tracks", "fNDCTracks"}, + {"nsp", "Number of Space Points", "fNSp"}, + {"track_nsp", "Number of spacepoints in track", "fDCTracks.THcDCTrack.GetNSpacePoints()"}, + {"x", "X at focal plane", "fDCTracks.THcDCTrack.GetX()"}, + {"y", "Y at focal plane", "fDCTracks.THcDCTrack.GetY()"}, + {"xp", "XP at focal plane", "fDCTracks.THcDCTrack.GetXP()"}, + {"yp", "YP at focal plane", "fDCTracks.THcDCTrack.GetYP()"}, + {"x_fp", "X at focal plane (golden track)", "fX_fp_best"}, + {"y_fp", "Y at focal plane( golden track)", "fY_fp_best"}, + {"xp_fp", "XP at focal plane (golden track)", "fXp_fp_best"}, + {"yp_fp", "YP at focal plane(golden track) ", "fYp_fp_best"}, + {"chisq", "chisq/dof (golden track) ", "fChisq_best"}, + {"sp1_id", " (golden track) ", "fSp1_ID_best"}, + {"sp2_id", " (golden track) ", "fSp2_ID_best"}, + {"InsideDipoleExit", " ", "fInSideDipoleExit_best"}, + {"gtrack_nsp", " Number of space points in golden track ", "fNsp_best"}, + {"residual", "Residuals", "fResiduals"}, + {"residualExclPlane", "Residuals", "fResidualsExclPlane"}, + {"wireHitDid", "Wire did have matched track hit", "fWire_hit_did"}, + {"wireHitShould", "Wire should have matched track hit", "fWire_hit_should"}, + {0}}; + return DefineVarsFromList(vars, mode); } //_____________________________________________________________________________ -THcDC::~THcDC() -{ +THcDC::~THcDC() { // Destructor. Remove variables from global list. - if( fIsSetup ) + if (fIsSetup) RemoveVariables(); - if( fIsInit ) + if (fIsInit) DeleteArrays(); // Delete the plane objects - for (vector<THcDriftChamberPlane*>::iterator ip = fPlanes.begin(); - ip != fPlanes.end(); ++ip) delete *ip; + for (vector<THcDriftChamberPlane*>::iterator ip = fPlanes.begin(); ip != fPlanes.end(); ++ip) + delete *ip; // Delete the chamber objects - for (vector<THcDriftChamber*>::iterator ip = fChambers.begin(); - ip != fChambers.end(); ++ip) delete *ip; + for (vector<THcDriftChamber*>::iterator ip = fChambers.begin(); ip != fChambers.end(); ++ip) + delete *ip; delete fDCTracks; } //_____________________________________________________________________________ -void THcDC::DeleteArrays() -{ +void THcDC::DeleteArrays() { // Delete member arrays. Used by destructor. - delete [] fXCenter; fXCenter = NULL; - delete [] fYCenter; fYCenter = NULL; - delete [] fMinHits; fMinHits = NULL; - delete [] fMaxHits; fMaxHits = NULL; - delete [] fMinCombos; fMinCombos = NULL; - delete [] fSpace_Point_Criterion; fSpace_Point_Criterion = NULL; - - delete [] fTdcWinMin; fTdcWinMin = NULL; - delete [] fTdcWinMax; fTdcWinMax = NULL; - delete [] fCentralTime; fCentralTime = NULL; - delete [] fNWires; fNWires = NULL; - delete [] fNChamber; fNChamber = NULL; - delete [] fWireOrder; fWireOrder = NULL; - delete [] fDriftTimeSign; fDriftTimeSign = NULL; - delete [] fReadoutLR; fReadoutLR = NULL; - delete [] fReadoutTB; fReadoutTB = NULL; - - delete [] fXPos; fXPos = NULL; - delete [] fYPos; fYPos = NULL; - delete [] fZPos; fZPos = NULL; - delete [] fAlphaAngle; fAlphaAngle = NULL; - delete [] fBetaAngle; fBetaAngle = NULL; - delete [] fGammaAngle; fGammaAngle = NULL; - delete [] fPitch; fPitch = NULL; - delete [] fCentralWire; fCentralWire = NULL; - delete [] fPlaneTimeZero; fPlaneTimeZero = NULL; - delete [] fSigma; fSigma = NULL; + delete[] fXCenter; + fXCenter = NULL; + delete[] fYCenter; + fYCenter = NULL; + delete[] fMinHits; + fMinHits = NULL; + delete[] fMaxHits; + fMaxHits = NULL; + delete[] fMinCombos; + fMinCombos = NULL; + delete[] fSpace_Point_Criterion; + fSpace_Point_Criterion = NULL; + + delete[] fTdcWinMin; + fTdcWinMin = NULL; + delete[] fTdcWinMax; + fTdcWinMax = NULL; + delete[] fCentralTime; + fCentralTime = NULL; + delete[] fNWires; + fNWires = NULL; + delete[] fNChamber; + fNChamber = NULL; + delete[] fWireOrder; + fWireOrder = NULL; + delete[] fDriftTimeSign; + fDriftTimeSign = NULL; + delete[] fReadoutLR; + fReadoutLR = NULL; + delete[] fReadoutTB; + fReadoutTB = NULL; + + delete[] fXPos; + fXPos = NULL; + delete[] fYPos; + fYPos = NULL; + delete[] fZPos; + fZPos = NULL; + delete[] fAlphaAngle; + fAlphaAngle = NULL; + delete[] fBetaAngle; + fBetaAngle = NULL; + delete[] fGammaAngle; + fGammaAngle = NULL; + delete[] fPitch; + fPitch = NULL; + delete[] fCentralWire; + fCentralWire = NULL; + delete[] fPlaneTimeZero; + fPlaneTimeZero = NULL; + delete[] fSigma; + fSigma = NULL; // Efficiency arrays - delete [] fNChamHits; fNChamHits = NULL; - delete [] fPlaneEvents; fPlaneEvents = NULL; - - for( Int_t i = 0; i<fNPlanes; ++i ) - delete [] fPlaneNames[i]; - delete [] fPlaneNames; - - delete [] fPlaneCoeffs; fPlaneCoeffs = 0; - delete [] fResiduals; fResiduals = 0; - delete [] fResidualsExclPlane; fResidualsExclPlane = 0; - delete [] fWire_hit_did; fWire_hit_did = 0; - delete [] fWire_hit_should; fWire_hit_should = 0; + delete[] fNChamHits; + fNChamHits = NULL; + delete[] fPlaneEvents; + fPlaneEvents = NULL; + + for (Int_t i = 0; i < fNPlanes; ++i) + delete[] fPlaneNames[i]; + delete[] fPlaneNames; + + delete[] fPlaneCoeffs; + fPlaneCoeffs = 0; + delete[] fResiduals; + fResiduals = 0; + delete[] fResidualsExclPlane; + fResidualsExclPlane = 0; + delete[] fWire_hit_did; + fWire_hit_did = 0; + delete[] fWire_hit_should; + fWire_hit_should = 0; } //_____________________________________________________________________________ -inline -void THcDC::ClearEvent() -{ +inline void THcDC::ClearEvent() { // Reset per-event data. - fStubTest = 0; - fNhits = 0; - fNthits = 0; - fN_True_RawHits=0; - fX_fp_best=-10000.; - fY_fp_best=-10000.; - fXp_fp_best=-10000.; - fYp_fp_best=-10000.; - fChisq_best=kBig; - fNsp_best=0; + fStubTest = 0; + fNhits = 0; + fNthits = 0; + fN_True_RawHits = 0; + fX_fp_best = -10000.; + fY_fp_best = -10000.; + fXp_fp_best = -10000.; + fYp_fp_best = -10000.; + fChisq_best = kBig; + fNsp_best = 0; fInSideDipoleExit_best = kTRUE; - for(UInt_t i=0;i<fNChambers;i++) { + for (UInt_t i = 0; i < fNChambers; i++) { fChambers[i]->Clear(); } - for(Int_t i=0;i<fNPlanes;i++) { - fResiduals[i] = 1000.0; + for (Int_t i = 0; i < fNPlanes; i++) { + fResiduals[i] = 1000.0; fResidualsExclPlane[i] = 1000.0; - fWire_hit_did[i] = 1000.0; - fWire_hit_should[i] = 1000.0; + fWire_hit_did[i] = 1000.0; + fWire_hit_should[i] = 1000.0; } // fTrackProj->Clear(); } //_____________________________________________________________________________ -Int_t THcDC::Decode( const THaEvData& evdata ) -{ +Int_t THcDC::Decode(const THaEvData& evdata) { /** Decode event into hit list. Pass hit list to the planes. @@ -567,54 +603,52 @@ Int_t THcDC::Decode( const THaEvData& evdata ) */ ClearEvent(); Int_t num_event = evdata.GetEvNum(); - if (fdebugprintrawdc ||fdebugprintdecodeddc || fdebuglinkstubs || fdebugtrackprint) cout << " event num = " << num_event << endl; + if (fdebugprintrawdc || fdebugprintdecodeddc || fdebuglinkstubs || fdebugtrackprint) + cout << " event num = " << num_event << endl; // Get the Hall C style hitlist (fRawHitList) for this event - Bool_t present = kTRUE; // Suppress reference time warnings - if(fPresentP) { // if this spectrometer not part of trigger + Bool_t present = kTRUE; // Suppress reference time warnings + if (fPresentP) { // if this spectrometer not part of trigger present = *fPresentP; } fNhits = DecodeToHitList(evdata, !present); - - - if(!gHaCuts->Result("Pedestal_event")) { + if (!gHaCuts->Result("Pedestal_event")) { // Let each plane get its hits Int_t nexthit = 0; - for(Int_t ip=0;ip<fNPlanes;ip++) { + for (Int_t ip = 0; ip < fNPlanes; ip++) { nexthit = fPlanes[ip]->ProcessHits(fRawHitList, nexthit); fN_True_RawHits += fPlanes[ip]->GetNRawhits(); - } // fRawHitList is TClones array of THcRawDCHit objects - Int_t counter=0; + Int_t counter = 0; if (fdebugprintrawdc) { - cout << " RAW_TOT_HITS = " << fNRawHits << endl; - cout << " Hit # " << "Plane " << " Wire " << " Raw TDC " << endl; - for(UInt_t ihit = 0; ihit < fNRawHits ; ihit++) { - THcRawDCHit* hit = (THcRawDCHit *) fRawHitList->At(ihit); - for(UInt_t imhit = 0; imhit < hit->GetRawTdcHit().GetNHits(); imhit++) { - counter++; - cout << counter << " " << hit->fPlane << " " << hit->fCounter << " " << hit->GetRawTdcHit().GetTimeRaw(imhit) << endl; - } + cout << " RAW_TOT_HITS = " << fNRawHits << endl; + cout << " Hit # " + << "Plane " + << " Wire " + << " Raw TDC " << endl; + for (UInt_t ihit = 0; ihit < fNRawHits; ihit++) { + THcRawDCHit* hit = (THcRawDCHit*)fRawHitList->At(ihit); + for (UInt_t imhit = 0; imhit < hit->GetRawTdcHit().GetNHits(); imhit++) { + counter++; + cout << counter << " " << hit->fPlane << " " << hit->fCounter << " " + << hit->GetRawTdcHit().GetTimeRaw(imhit) << endl; + } } cout << endl; } - Eff(); // Accumlate statistics + Eff(); // Accumlate statistics } return fNhits; } //_____________________________________________________________________________ -Int_t THcDC::ApplyCorrections( void ) -{ - return(0); -} +Int_t THcDC::ApplyCorrections(void) { return (0); } //_____________________________________________________________________________ -Int_t THcDC::CoarseTrack( TClonesArray& tracks ) -{ +Int_t THcDC::CoarseTrack(TClonesArray& tracks) { /** Find a set of tracks through the drift chambers and put them into the tracks TClonesArray. @@ -622,48 +656,50 @@ Int_t THcDC::CoarseTrack( TClonesArray& tracks ) */ // Subtract starttimes from each plane hit - for(Int_t ip=0;ip<fNPlanes;ip++) { - fPlanes[ip]->SubtractStartTime(); - } + for (Int_t ip = 0; ip < fNPlanes; ip++) { + fPlanes[ip]->SubtractStartTime(); + } // - // Let each chamber get its hits - for(UInt_t ic=0;ic<fNChambers;ic++) { - fChambers[ic]->ProcessHits(); - fNthits += fChambers[ic]->GetNHits(); - if (fdebugprintdecodeddc)fChambers[ic]->PrintDecode(); - } - // - for(UInt_t i=0;i<fNChambers;i++) { + // Let each chamber get its hits + for (UInt_t ic = 0; ic < fNChambers; ic++) { + fChambers[ic]->ProcessHits(); + fNthits += fChambers[ic]->GetNHits(); + if (fdebugprintdecodeddc) + fChambers[ic]->PrintDecode(); + } + // + for (UInt_t i = 0; i < fNChambers; i++) { fChambers[i]->FindSpacePoints(); fChambers[i]->CorrectHitTimes(); fChambers[i]->LeftRight(); } - if (fdebugflagstubs) PrintSpacePoints(); - if (fdebugflagstubs) PrintStubs(); + if (fdebugflagstubs) + PrintSpacePoints(); + if (fdebugflagstubs) + PrintStubs(); // Now link the stubs between chambers LinkStubs(); - if(fNDCTracks > 0) { - TrackFit(); + if (fNDCTracks > 0) { + TrackFit(); // Copy tracks into podd tracks list - for(UInt_t itrack=0;itrack<fNDCTracks;itrack++) { + for (UInt_t itrack = 0; itrack < fNDCTracks; itrack++) { THaTrack* theTrack = NULL; - theTrack = AddTrack(tracks, 0.0, 0.0, 0.0, 0.0); // Leaving off trackID + theTrack = AddTrack(tracks, 0.0, 0.0, 0.0, 0.0); // Leaving off trackID // Should we add stubs with AddCluster? Could we do this // by having stubs inherit from cluster - THcDCTrack *tr = static_cast<THcDCTrack*>( fDCTracks->At(itrack)); + THcDCTrack* tr = static_cast<THcDCTrack*>(fDCTracks->At(itrack)); theTrack->Set(tr->GetX(), tr->GetY(), tr->GetXP(), tr->GetYP()); - theTrack->SetFlag((UInt_t) 0); + theTrack->SetFlag((UInt_t)0); // Need to look at how engine does chi2 and track selection. Reduced? - theTrack->SetChi2(tr->GetChisq(),tr->GetNFree()); + theTrack->SetChi2(tr->GetChisq(), tr->GetNFree()); // CalcFocalPlaneCoords. Aren't our tracks already in focal plane coords // We should have some kind of track ID so that the THaTrack can be // associate back with the DC track // Assign the track number - theTrack->SetTrkNum(itrack+1); + theTrack->SetTrkNum(itrack + 1); } - } - + } ApplyCorrections(); @@ -671,68 +707,66 @@ Int_t THcDC::CoarseTrack( TClonesArray& tracks ) } //_____________________________________________________________________________ -Int_t THcDC::FineTrack( TClonesArray& tracks ) -{ - - return 0; -} +Int_t THcDC::FineTrack(TClonesArray& tracks) { return 0; } // -void THcDC::SetFocalPlaneBestTrack(Int_t golden_track_index) -{ - THcDCTrack *tr1 = static_cast<THcDCTrack*>( fDCTracks->At(golden_track_index)); - fX_fp_best=tr1->GetX(); - fY_fp_best=tr1->GetY(); - fXp_fp_best=tr1->GetXP(); - fYp_fp_best=tr1->GetYP(); - THcHallCSpectrometer *app = dynamic_cast<THcHallCSpectrometer*>(GetApparatus()); - fInSideDipoleExit_best = app->InsideDipoleExitWindow(fX_fp_best, fXp_fp_best ,fY_fp_best,fYp_fp_best); - fSp1_ID_best=tr1->GetSp1_ID(); - fSp2_ID_best=tr1->GetSp2_ID(); - fChisq_best=tr1->GetChisq(); - fNsp_best=tr1->GetNSpacePoints(); - for (UInt_t ihit = 0; ihit < UInt_t (tr1->GetNHits()); ihit++) { - THcDCHit *hit = tr1->GetHit(ihit); - Int_t plane = hit->GetPlaneNum() - 1; - _basic_data._Residuals[plane] = tr1->GetResidual(plane); - fResiduals[plane] = tr1->GetResidual(plane); - _basic_data._ResidualsExclPlane[plane] = tr1->GetResidualExclPlane(plane); - fResidualsExclPlane[plane] = tr1->GetResidualExclPlane(plane); - } - EfficiencyPerWire(golden_track_index); +void THcDC::SetFocalPlaneBestTrack(Int_t golden_track_index) { + THcDCTrack* tr1 = static_cast<THcDCTrack*>(fDCTracks->At(golden_track_index)); + fX_fp_best = tr1->GetX(); + fY_fp_best = tr1->GetY(); + fXp_fp_best = tr1->GetXP(); + fYp_fp_best = tr1->GetYP(); + THcHallCSpectrometer* app = dynamic_cast<THcHallCSpectrometer*>(GetApparatus()); + fInSideDipoleExit_best = + app->InsideDipoleExitWindow(fX_fp_best, fXp_fp_best, fY_fp_best, fYp_fp_best); + fSp1_ID_best = tr1->GetSp1_ID(); + fSp2_ID_best = tr1->GetSp2_ID(); + fChisq_best = tr1->GetChisq(); + fNsp_best = tr1->GetNSpacePoints(); + for (UInt_t ihit = 0; ihit < UInt_t(tr1->GetNHits()); ihit++) { + THcDCHit* hit = tr1->GetHit(ihit); + Int_t plane = hit->GetPlaneNum() - 1; + _basic_data._Residuals[plane] = tr1->GetResidual(plane); + fResiduals[plane] = tr1->GetResidual(plane); + _basic_data._ResidualsExclPlane[plane] = tr1->GetResidualExclPlane(plane); + fResidualsExclPlane[plane] = tr1->GetResidualExclPlane(plane); + } + EfficiencyPerWire(golden_track_index); } // -void THcDC::EfficiencyPerWire(Int_t golden_track_index) -{ - THcDCTrack *tr1 = static_cast<THcDCTrack*>( fDCTracks->At(golden_track_index)); - Double_t track_pos; - for (UInt_t ihit = 0; ihit < UInt_t (tr1->GetNHits()); ihit++) { - THcDCHit *hit = tr1->GetHit(ihit); - Int_t plane = hit->GetPlaneNum() - 1; - track_pos=tr1->GetCoord(plane); - Int_t wire_num = hit->GetWireNum(); - Int_t wire_track_num=round(fPlanes[plane]->CalcWireFromPos(track_pos)); - if ( (wire_num-wire_track_num) ==0) fWire_hit_did[plane]=wire_num; - } - for(Int_t ip=0; ip<fNPlanes;ip++) { - track_pos=tr1->GetCoord(ip); - Int_t wire_should = round(fPlanes[ip]->CalcWireFromPos(track_pos)); - fWire_hit_should[ip]=wire_should; +void THcDC::EfficiencyPerWire(Int_t golden_track_index) { + THcDCTrack* tr1 = static_cast<THcDCTrack*>(fDCTracks->At(golden_track_index)); + Double_t track_pos; + for (UInt_t ihit = 0; ihit < UInt_t(tr1->GetNHits()); ihit++) { + THcDCHit* hit = tr1->GetHit(ihit); + Int_t plane = hit->GetPlaneNum() - 1; + track_pos = tr1->GetCoord(plane); + Int_t wire_num = hit->GetWireNum(); + Int_t wire_track_num = round(fPlanes[plane]->CalcWireFromPos(track_pos)); + if ((wire_num - wire_track_num) == 0) + fWire_hit_did[plane] = wire_num; + } + for (Int_t ip = 0; ip < fNPlanes; ip++) { + track_pos = tr1->GetCoord(ip); + Int_t wire_should = round(fPlanes[ip]->CalcWireFromPos(track_pos)); + fWire_hit_should[ip] = wire_should; } } // -void THcDC::PrintSpacePoints() -{ - for(UInt_t ich=0;ich<fNChambers;ich++) { - printf("%s %2d %s %3d %s %3d \n"," chamber = ",fChambers[ich]->GetChamberNum()," number of hits = ",fChambers[ich]->GetNHits()," number of spacepoints = ",fChambers[ich]->GetNSpacePoints()); - printf("%6s %-8s %-8s %6s %6s %10s \n"," "," "," ","Number","Number","Plane Wire"); - printf("%6s %-8s %-8s %6s %6s %10s \n","Point","x","y"," hits ","combos"," for each hit"); +void THcDC::PrintSpacePoints() { + for (UInt_t ich = 0; ich < fNChambers; ich++) { + printf("%s %2d %s %3d %s %3d \n", " chamber = ", fChambers[ich]->GetChamberNum(), + " number of hits = ", fChambers[ich]->GetNHits(), + " number of spacepoints = ", fChambers[ich]->GetNSpacePoints()); + printf("%6s %-8s %-8s %6s %6s %10s \n", " ", " ", " ", "Number", "Number", "Plane Wire"); + printf("%6s %-8s %-8s %6s %6s %10s \n", "Point", "x", "y", " hits ", "combos", " for each hit"); TClonesArray* spacepointarray = fChambers[ich]->GetSpacePointsP(); - for(Int_t isp=0;isp<fChambers[ich]->GetNSpacePoints();isp++) { + for (Int_t isp = 0; isp < fChambers[ich]->GetNSpacePoints(); isp++) { THcSpacePoint* sp = (THcSpacePoint*)(spacepointarray->At(isp)); - printf("%5d %8.5f %8.5f %5d %5d ",isp+1,sp->GetX(),sp->GetY(),sp->GetNHits(),sp->GetCombos()) ; - for (Int_t ii=0;ii<sp->GetNHits();ii++) { - THcDCHit* hittemp = (THcDCHit*)(sp->GetHit(ii)); - printf("%3d %3d %3d",hittemp->GetPlaneNum(),hittemp->GetWireNum(),hittemp->GetLR()); + printf("%5d %8.5f %8.5f %5d %5d ", isp + 1, sp->GetX(), sp->GetY(), sp->GetNHits(), + sp->GetCombos()); + for (Int_t ii = 0; ii < sp->GetNHits(); ii++) { + THcDCHit* hittemp = (THcDCHit*)(sp->GetHit(ii)); + printf("%3d %3d %3d", hittemp->GetPlaneNum(), hittemp->GetWireNum(), hittemp->GetLR()); } printf("\n"); } @@ -740,24 +774,23 @@ void THcDC::PrintSpacePoints() } // // -void THcDC::PrintStubs() -{ - for(UInt_t ich=0;ich<fNChambers;ich++) { - printf("%s %3d \n"," Stub fit results Chamber = ",ich+1); - printf("%-5s %-18s %-18s %-18s %-18s\n","point","x_t","y_t","xp_t","yp_t"); - printf("%-5s %-18s %-18s %-18s %-18s\n"," ","[cm]","[cm]","[cm]","[cm]"); +void THcDC::PrintStubs() { + for (UInt_t ich = 0; ich < fNChambers; ich++) { + printf("%s %3d \n", " Stub fit results Chamber = ", ich + 1); + printf("%-5s %-18s %-18s %-18s %-18s\n", "point", "x_t", "y_t", "xp_t", "yp_t"); + printf("%-5s %-18s %-18s %-18s %-18s\n", " ", "[cm]", "[cm]", "[cm]", "[cm]"); TClonesArray* spacepointarray = fChambers[ich]->GetSpacePointsP(); - for(Int_t isp=0;isp<fChambers[ich]->GetNSpacePoints();isp++) { - THcSpacePoint* sp = (THcSpacePoint*)(spacepointarray->At(isp)); - Double_t *spstubt=sp->GetStubP(); - printf("%-5d % 15.10e % 15.10e % 15.10e % 15.10e \n",isp+1,spstubt[0],spstubt[1],spstubt[2],spstubt[3]); + for (Int_t isp = 0; isp < fChambers[ich]->GetNSpacePoints(); isp++) { + THcSpacePoint* sp = (THcSpacePoint*)(spacepointarray->At(isp)); + Double_t* spstubt = sp->GetStubP(); + printf("%-5d % 15.10e % 15.10e % 15.10e % 15.10e \n", isp + 1, spstubt[0], spstubt[1], + spstubt[2], spstubt[3]); } } } // //_____________________________________________________________________________ -void THcDC::LinkStubs() -{ +void THcDC::LinkStubs() { /** The logic is 0) Put all space points in a single list @@ -774,194 +807,215 @@ void THcDC::LinkStubs() */ std::vector<THcSpacePoint*> fSp; - fNSp=0; + fNSp = 0; fSp.clear(); fSp.reserve(100); - fNDCTracks=0; // Number of Focal Plane tracks found + fNDCTracks = 0; // Number of Focal Plane tracks found fDCTracks->Delete(); // Make a vector of pointers to the SpacePoints - //if (fChambers[0]->GetNSpacePoints()+fChambers[1]->GetNSpacePoints()>10) return; + // if (fChambers[0]->GetNSpacePoints()+fChambers[1]->GetNSpacePoints()>10) return; - for(UInt_t ich=0;ich<fNChambers;ich++) { - Int_t nchamber=fChambers[ich]->GetChamberNum(); + for (UInt_t ich = 0; ich < fNChambers; ich++) { + Int_t nchamber = fChambers[ich]->GetChamberNum(); TClonesArray* spacepointarray = fChambers[ich]->GetSpacePointsP(); - for(Int_t isp=0;isp<fChambers[ich]->GetNSpacePoints();isp++) { + for (Int_t isp = 0; isp < fChambers[ich]->GetNSpacePoints(); isp++) { fSp.push_back(static_cast<THcSpacePoint*>(spacepointarray->At(isp))); - fSp[fNSp]->fNChamber = nchamber; + fSp[fNSp]->fNChamber = nchamber; fSp[fNSp]->fNChamber_spnum = isp; fNSp++; - if (ich==0 && fNSp>50) break; - if (fNSp>100) break; + if (ich == 0 && fNSp > 50) + break; + if (fNSp > 100) + break; } } - Double_t stubminx = 999999; - Double_t stubminy = 999999; + Double_t stubminx = 999999; + Double_t stubminy = 999999; Double_t stubminxp = 999999; Double_t stubminyp = 999999; - Int_t stub_tracks[MAXTRACKS]; - if(fSingleStub==0) { - for(Int_t isp1=0;isp1<fNSp-1;isp1++) { // isp1 is index/id in total list of space points - THcSpacePoint* sp1 = fSp[isp1]; - Int_t sptracks=0; + Int_t stub_tracks[MAXTRACKS]; + if (fSingleStub == 0) { + for (Int_t isp1 = 0; isp1 < fNSp - 1; + isp1++) { // isp1 is index/id in total list of space points + THcSpacePoint* sp1 = fSp[isp1]; + Int_t sptracks = 0; // Now make sure this sp is not already used in a sp. // Could this be done by having a sp point to the track it is in? - Int_t tryflag=1; - for(UInt_t itrack=0;itrack<fNDCTracks;itrack++) { - THcDCTrack *theDCTrack = static_cast<THcDCTrack*>( fDCTracks->At(itrack)); - for(Int_t isp=0;isp<theDCTrack->GetNSpacePoints();isp++) { - // isp is index into list of space points attached to theDCTrack - if(theDCTrack->GetSpacePoint(isp) == sp1) { - tryflag=0; - } - } + Int_t tryflag = 1; + for (UInt_t itrack = 0; itrack < fNDCTracks; itrack++) { + THcDCTrack* theDCTrack = static_cast<THcDCTrack*>(fDCTracks->At(itrack)); + for (Int_t isp = 0; isp < theDCTrack->GetNSpacePoints(); isp++) { + // isp is index into list of space points attached to theDCTrack + if (theDCTrack->GetSpacePoint(isp) == sp1) { + tryflag = 0; + } + } } - if(tryflag) { // SP not already part of a track - Int_t newtrack=1; - for(Int_t isp2=isp1+1;isp2<fNSp;isp2++) { - THcSpacePoint* sp2=fSp[isp2]; - if(sp1->fNChamber!=sp2->fNChamber&&sp1->GetSetStubFlag()&&sp2->GetSetStubFlag()) { - Double_t *spstub1=sp1->GetStubP(); - Double_t *spstub2=sp2->GetStubP(); - Double_t dposx = spstub1[0] - spstub2[0]; - Double_t dposy; - if(fProjectToChamber) { // From SOS s_link_stubs - // Since single chamber resolution is ~50mr, and the maximum y` - // angle is about 30mr, use differenece between y AT CHAMBERS, rather - // than at focal plane. (Project back to chamber, to take out y' uncertainty) - // (Should this be done for SHMS and HMS too?) - Double_t y1=spstub1[1]+fChambers[sp1->fNChamber]->GetZPos()*spstub1[3]; - Double_t y2=spstub2[1]+fChambers[sp2->fNChamber]->GetZPos()*spstub2[3]; - dposy = y1-y2; - } else { - dposy = spstub1[1] - spstub2[1]; - } - Double_t dposxp = spstub1[2] - spstub2[2]; - Double_t dposyp = spstub1[3] - spstub2[3]; - - // What is the point of saving these stubmin values. They - // Don't seem to be used anywhere except that they can be - // printed out if hbypass_track_eff_files is zero. - if(TMath::Abs(dposx)<TMath::Abs(stubminx)) stubminx = dposx; - if(TMath::Abs(dposy)<TMath::Abs(stubminy)) stubminy = dposy; - if(TMath::Abs(dposxp)<TMath::Abs(stubminxp)) stubminxp = dposxp; - if(TMath::Abs(dposyp)<TMath::Abs(stubminyp)) stubminyp = dposyp; - - // if hbypass_track_eff_files == 0 then - // Print out each stubminX that is less that its criterion - - if((TMath::Abs(dposx) < fXtTrCriterion) - && (TMath::Abs(dposy) < fYtTrCriterion) - && (TMath::Abs(dposxp) < fXptTrCriterion) - && (TMath::Abs(dposyp) < fYptTrCriterion)) { - if(newtrack) { - assert(sptracks==0); - fStubTest = 1; - //stubtest=1; Used in h_track_tests.f - // Make a new track if there are not to many - if(fNDCTracks < fNTracksMaxFP) { - sptracks=0; // Number of tracks with this seed - stub_tracks[sptracks++] = fNDCTracks; - THcDCTrack *theDCTrack = new( (*fDCTracks)[fNDCTracks++]) THcDCTrack(fNPlanes); - theDCTrack->AddSpacePoint(sp1); - theDCTrack->AddSpacePoint(sp2); - if (sp1->fNChamber==1) theDCTrack->SetSp1_ID(sp1->fNChamber_spnum); - if (sp1->fNChamber==2) theDCTrack->SetSp2_ID(sp1->fNChamber_spnum); - if (sp2->fNChamber==1) theDCTrack->SetSp1_ID(sp2->fNChamber_spnum); - if (sp2->fNChamber==2) theDCTrack->SetSp2_ID(sp2->fNChamber_spnum); - newtrack = 0; // Make no more tracks in this loop - // (But could replace a SP?) - } else { + if (tryflag) { // SP not already part of a track + Int_t newtrack = 1; + for (Int_t isp2 = isp1 + 1; isp2 < fNSp; isp2++) { + THcSpacePoint* sp2 = fSp[isp2]; + if (sp1->fNChamber != sp2->fNChamber && sp1->GetSetStubFlag() && sp2->GetSetStubFlag()) { + Double_t* spstub1 = sp1->GetStubP(); + Double_t* spstub2 = sp2->GetStubP(); + Double_t dposx = spstub1[0] - spstub2[0]; + Double_t dposy; + if (fProjectToChamber) { // From SOS s_link_stubs + // Since single chamber resolution is ~50mr, and the maximum y` + // angle is about 30mr, use differenece between y AT CHAMBERS, rather + // than at focal plane. (Project back to chamber, to take out y' uncertainty) + // (Should this be done for SHMS and HMS too?) + Double_t y1 = spstub1[1] + fChambers[sp1->fNChamber]->GetZPos() * spstub1[3]; + Double_t y2 = spstub2[1] + fChambers[sp2->fNChamber]->GetZPos() * spstub2[3]; + dposy = y1 - y2; + } else { + dposy = spstub1[1] - spstub2[1]; + } + Double_t dposxp = spstub1[2] - spstub2[2]; + Double_t dposyp = spstub1[3] - spstub2[3]; + + // What is the point of saving these stubmin values. They + // Don't seem to be used anywhere except that they can be + // printed out if hbypass_track_eff_files is zero. + if (TMath::Abs(dposx) < TMath::Abs(stubminx)) + stubminx = dposx; + if (TMath::Abs(dposy) < TMath::Abs(stubminy)) + stubminy = dposy; + if (TMath::Abs(dposxp) < TMath::Abs(stubminxp)) + stubminxp = dposxp; + if (TMath::Abs(dposyp) < TMath::Abs(stubminyp)) + stubminyp = dposyp; + + // if hbypass_track_eff_files == 0 then + // Print out each stubminX that is less that its criterion + + if ((TMath::Abs(dposx) < fXtTrCriterion) && (TMath::Abs(dposy) < fYtTrCriterion) && + (TMath::Abs(dposxp) < fXptTrCriterion) && (TMath::Abs(dposyp) < fYptTrCriterion)) { + if (newtrack) { + assert(sptracks == 0); + fStubTest = 1; + // stubtest=1; Used in h_track_tests.f + // Make a new track if there are not to many + if (fNDCTracks < fNTracksMaxFP) { + sptracks = 0; // Number of tracks with this seed + stub_tracks[sptracks++] = fNDCTracks; + THcDCTrack* theDCTrack = new ((*fDCTracks)[fNDCTracks++]) THcDCTrack(fNPlanes); + theDCTrack->AddSpacePoint(sp1); + theDCTrack->AddSpacePoint(sp2); + if (sp1->fNChamber == 1) + theDCTrack->SetSp1_ID(sp1->fNChamber_spnum); + if (sp1->fNChamber == 2) + theDCTrack->SetSp2_ID(sp1->fNChamber_spnum); + if (sp2->fNChamber == 1) + theDCTrack->SetSp1_ID(sp2->fNChamber_spnum); + if (sp2->fNChamber == 2) + theDCTrack->SetSp2_ID(sp2->fNChamber_spnum); + newtrack = 0; // Make no more tracks in this loop + // (But could replace a SP?) + } else { if (fHMSStyleChambers) { - fNDCTracks=0; - return; + fNDCTracks = 0; + return; } - } - } else { - // Check if there is another space point in the same chamber - for(Int_t itrack=0;itrack<sptracks;itrack++) { - Int_t track=stub_tracks[itrack]; - THcDCTrack *theDCTrack = static_cast<THcDCTrack*>( fDCTracks->At(track)); - Int_t spoint=-1; - Int_t duppoint=0; - for(Int_t isp=0;isp<theDCTrack->GetNSpacePoints();isp++) { - // isp is index of space points in theDCTrack - if(sp2->fNChamber == - theDCTrack->GetSpacePoint(isp)->fNChamber) { - spoint=isp; - } - if(sp2==theDCTrack->GetSpacePoint(isp)) { - duppoint=1; - } - } // End loop over sp in tracks with isp1 - // If there is no other space point in this chamber - // add this space point to current track(2) - if(!duppoint) { - if(spoint<0) { - theDCTrack->AddSpacePoint(sp2); - if (sp2->fNChamber==1) theDCTrack->SetSp1_ID(sp2->fNChamber_spnum); - if (sp2->fNChamber==2) theDCTrack->SetSp2_ID(sp2->fNChamber_spnum); - } else { - // If there is another point in the same chamber - // in this track create a new track with all the - // same space points except spoint - if(fNDCTracks < MAXTRACKS) { - stub_tracks[sptracks++] = fNDCTracks; - THcDCTrack *newDCTrack = new( (*fDCTracks)[fNDCTracks++]) THcDCTrack(fNPlanes); - for(Int_t isp=0;isp<theDCTrack->GetNSpacePoints();isp++) { - if(isp!=spoint) { - newDCTrack->AddSpacePoint(theDCTrack->GetSpacePoint(isp)); - if (theDCTrack->GetSpacePoint(isp)->fNChamber==1) newDCTrack->SetSp1_ID(theDCTrack->GetSpacePoint(isp)->fNChamber_spnum); - if (theDCTrack->GetSpacePoint(isp)->fNChamber==2) newDCTrack->SetSp2_ID(theDCTrack->GetSpacePoint(isp)->fNChamber_spnum); - } else { - newDCTrack->AddSpacePoint(sp2); - if (sp2->fNChamber==1) newDCTrack->SetSp1_ID(sp2->fNChamber_spnum); - if (sp2->fNChamber==2) newDCTrack->SetSp2_ID(sp2->fNChamber_spnum); - } // End check for dup on copy - } // End copy of track - } else { - if (fHMSStyleChambers) { - if (fdebuglinkstubs) cout << "EPIC FAIL 2: Too many tracks found in THcDC::LinkStubs maxtracks = " << MAXTRACKS << endl; - fNDCTracks=0; - return; // Max # of allowed tracks + } + } else { + // Check if there is another space point in the same chamber + for (Int_t itrack = 0; itrack < sptracks; itrack++) { + Int_t track = stub_tracks[itrack]; + THcDCTrack* theDCTrack = static_cast<THcDCTrack*>(fDCTracks->At(track)); + Int_t spoint = -1; + Int_t duppoint = 0; + for (Int_t isp = 0; isp < theDCTrack->GetNSpacePoints(); isp++) { + // isp is index of space points in theDCTrack + if (sp2->fNChamber == theDCTrack->GetSpacePoint(isp)->fNChamber) { + spoint = isp; + } + if (sp2 == theDCTrack->GetSpacePoint(isp)) { + duppoint = 1; + } + } // End loop over sp in tracks with isp1 + // If there is no other space point in this chamber + // add this space point to current track(2) + if (!duppoint) { + if (spoint < 0) { + theDCTrack->AddSpacePoint(sp2); + if (sp2->fNChamber == 1) + theDCTrack->SetSp1_ID(sp2->fNChamber_spnum); + if (sp2->fNChamber == 2) + theDCTrack->SetSp2_ID(sp2->fNChamber_spnum); + } else { + // If there is another point in the same chamber + // in this track create a new track with all the + // same space points except spoint + if (fNDCTracks < MAXTRACKS) { + stub_tracks[sptracks++] = fNDCTracks; + THcDCTrack* newDCTrack = + new ((*fDCTracks)[fNDCTracks++]) THcDCTrack(fNPlanes); + for (Int_t isp = 0; isp < theDCTrack->GetNSpacePoints(); isp++) { + if (isp != spoint) { + newDCTrack->AddSpacePoint(theDCTrack->GetSpacePoint(isp)); + if (theDCTrack->GetSpacePoint(isp)->fNChamber == 1) + newDCTrack->SetSp1_ID( + theDCTrack->GetSpacePoint(isp)->fNChamber_spnum); + if (theDCTrack->GetSpacePoint(isp)->fNChamber == 2) + newDCTrack->SetSp2_ID( + theDCTrack->GetSpacePoint(isp)->fNChamber_spnum); + } else { + newDCTrack->AddSpacePoint(sp2); + if (sp2->fNChamber == 1) + newDCTrack->SetSp1_ID(sp2->fNChamber_spnum); + if (sp2->fNChamber == 2) + newDCTrack->SetSp2_ID(sp2->fNChamber_spnum); + } // End check for dup on copy + } // End copy of track + } else { + if (fHMSStyleChambers) { + if (fdebuglinkstubs) + cout << "EPIC FAIL 2: Too many tracks found in THcDC::LinkStubs " + "maxtracks = " + << MAXTRACKS << endl; + fNDCTracks = 0; + return; // Max # of allowed tracks } - } - } // end if on same chamber - } // end if on duplicate point - } // end for over tracks with isp1 - } // else newtrack - } // criterion - } // end test on same chamber - } // end isp2 loop over new space points - } // end test on tryflag - } // end isp1 outer loop over space points + } + } // end if on same chamber + } // end if on duplicate point + } // end for over tracks with isp1 + } // else newtrack + } // criterion + } // end test on same chamber + } // end isp2 loop over new space points + } // end test on tryflag + } // end isp1 outer loop over space points + // // - // } else { // Make track out of each single space point - for(Int_t isp=0;isp<fNSp;isp++) { - if(fNDCTracks<MAXTRACKS) { - // Need some constructed t thingy + for (Int_t isp = 0; isp < fNSp; isp++) { + if (fNDCTracks < MAXTRACKS) { + // Need some constructed t thingy if (fSp[isp]->GetSetStubFlag()) { - THcDCTrack *newDCTrack = new( (*fDCTracks)[fNDCTracks++]) THcDCTrack(fNPlanes); - newDCTrack->AddSpacePoint(fSp[isp]); - } + THcDCTrack* newDCTrack = new ((*fDCTracks)[fNDCTracks++]) THcDCTrack(fNPlanes); + newDCTrack->AddSpacePoint(fSp[isp]); + } } else { - if (fdebuglinkstubs) cout << "EPIC FAIL 3: Too many tracks found in THcDC::LinkStubs" << endl; - fNDCTracks=0; - // Do something here to fail this event - return; // Max # of allowed tracks + if (fdebuglinkstubs) + cout << "EPIC FAIL 3: Too many tracks found in THcDC::LinkStubs" << endl; + fNDCTracks = 0; + // Do something here to fail this event + return; // Max # of allowed tracks } } } /// if (fdebuglinkstubs) { cout << " Number of tracks from link stubs = " << fNDCTracks << endl; - printf("%s %s \n","Track","Plane Wire "); - for (UInt_t itrack=0;itrack<fNDCTracks;itrack++) { - THcDCTrack *tempTrack = (THcDCTrack*)( fDCTracks->At(itrack)); - printf("%-5d ",itrack+1); - for (Int_t ihit=0;ihit<tempTrack->GetNHits();ihit++) { - THcDCHit* hit=(THcDCHit*)(tempTrack->GetHit(ihit)); - printf("%3d %3d",hit->GetPlaneNum(),hit->GetWireNum()); + printf("%s %s \n", "Track", "Plane Wire "); + for (UInt_t itrack = 0; itrack < fNDCTracks; itrack++) { + THcDCTrack* tempTrack = (THcDCTrack*)(fDCTracks->At(itrack)); + printf("%-5d ", itrack + 1); + for (Int_t ihit = 0; ihit < tempTrack->GetNHits(); ihit++) { + THcDCHit* hit = (THcDCHit*)(tempTrack->GetHit(ihit)); + printf("%3d %3d", hit->GetPlaneNum(), hit->GetWireNum()); } printf("\n"); } @@ -969,123 +1023,116 @@ void THcDC::LinkStubs() } //_____________________________________________________________________________ -void THcDC::TrackFit() -{ +void THcDC::TrackFit() { /** Primary track fitting routine */ // Number of ray parameters in focal plane. - const Int_t raycoeffmap[]={4,5,2,3}; + const Int_t raycoeffmap[] = {4, 5, 2, 3}; Double_t dummychi2 = 1.0E4; - for(UInt_t itrack=0;itrack<fNDCTracks;itrack++) { + for (UInt_t itrack = 0; itrack < fNDCTracks; itrack++) { // Double_t chi2 = dummychi2; // Int_t htrack_fit_num = itrack; - THcDCTrack *theDCTrack = static_cast<THcDCTrack*>( fDCTracks->At(itrack)); + THcDCTrack* theDCTrack = static_cast<THcDCTrack*>(fDCTracks->At(itrack)); Double_t coords[theDCTrack->GetNHits()]; - Int_t planes[theDCTrack->GetNHits()]; - for(Int_t ihit=0;ihit < theDCTrack->GetNHits();ihit++) { - THcDCHit* hit=theDCTrack->GetHit(ihit); - planes[ihit]=hit->GetPlaneNum()-1; - if(fFixLR) { - if(fFixPropagationCorrection) { - coords[ihit] = hit->GetPos() - + theDCTrack->GetHitLR(ihit)*theDCTrack->GetHitDist(ihit); - } else { - coords[ihit] = hit->GetPos() - + theDCTrack->GetHitLR(ihit)*hit->GetDist(); - } + Int_t planes[theDCTrack->GetNHits()]; + for (Int_t ihit = 0; ihit < theDCTrack->GetNHits(); ihit++) { + THcDCHit* hit = theDCTrack->GetHit(ihit); + planes[ihit] = hit->GetPlaneNum() - 1; + if (fFixLR) { + if (fFixPropagationCorrection) { + coords[ihit] = hit->GetPos() + theDCTrack->GetHitLR(ihit) * theDCTrack->GetHitDist(ihit); + } else { + coords[ihit] = hit->GetPos() + theDCTrack->GetHitLR(ihit) * hit->GetDist(); + } } else { - if(fFixPropagationCorrection) { - coords[ihit] = hit->GetPos() - + hit->GetLR()*theDCTrack->GetHitDist(ihit); - } else { - coords[ihit] = hit->GetCoord(); - } + if (fFixPropagationCorrection) { + coords[ihit] = hit->GetPos() + hit->GetLR() * theDCTrack->GetHitDist(ihit); + } else { + coords[ihit] = hit->GetCoord(); + } } - - } //end loop over hits + } // end loop over hits theDCTrack->SetNFree(theDCTrack->GetNHits() - NUM_FPRAY); Double_t chi2 = dummychi2; - if(theDCTrack->GetNFree() > 0) { + if (theDCTrack->GetNFree() > 0) { TVectorD TT(NUM_FPRAY); - TMatrixD AA(NUM_FPRAY,NUM_FPRAY); - for(Int_t irayp=0;irayp<NUM_FPRAY;irayp++) { - TT[irayp] = 0.0; - for(Int_t ihit=0;ihit < theDCTrack->GetNHits();ihit++) { - - THcDCHit* hit=theDCTrack->GetHit(ihit); - - TT[irayp] += (coords[ihit]*fPlaneCoeffs[planes[ihit]][raycoeffmap[irayp]])/pow(hit->GetWireSigma(),2); - // if (hit->GetPlaneNum()==5) - // { - // // cout << "Plane: " << hit->GetPlaneNum() << endl; - // //cout << "Wire: " <<hit->GetWireNum() << endl; - // //cout << "Sigma: " << hit->GetWireSigma() << endl; - // } - - } //end hit loop + TMatrixD AA(NUM_FPRAY, NUM_FPRAY); + for (Int_t irayp = 0; irayp < NUM_FPRAY; irayp++) { + TT[irayp] = 0.0; + for (Int_t ihit = 0; ihit < theDCTrack->GetNHits(); ihit++) { + + THcDCHit* hit = theDCTrack->GetHit(ihit); + + TT[irayp] += (coords[ihit] * fPlaneCoeffs[planes[ihit]][raycoeffmap[irayp]]) / + pow(hit->GetWireSigma(), 2); + // if (hit->GetPlaneNum()==5) + // { + // // cout << "Plane: " << hit->GetPlaneNum() << endl; + // //cout << "Wire: " <<hit->GetWireNum() << endl; + // //cout << "Sigma: " << hit->GetWireSigma() << endl; + // } + + } // end hit loop } - for(Int_t irayp=0;irayp<NUM_FPRAY;irayp++) { - for(Int_t jrayp=0;jrayp<NUM_FPRAY;jrayp++) { - AA[irayp][jrayp] = 0.0; - if(jrayp<irayp) { // Symmetric - AA[irayp][jrayp] = AA[jrayp][irayp]; - } else { - for(Int_t ihit=0;ihit < theDCTrack->GetNHits();ihit++) { - - THcDCHit* hit=theDCTrack->GetHit(ihit); - - - AA[irayp][jrayp] += fPlaneCoeffs[planes[ihit]][raycoeffmap[irayp]]* - fPlaneCoeffs[planes[ihit]][raycoeffmap[jrayp]]/ - pow(hit->GetWireSigma(),2); - - } //end ihit loop - } - } + for (Int_t irayp = 0; irayp < NUM_FPRAY; irayp++) { + for (Int_t jrayp = 0; jrayp < NUM_FPRAY; jrayp++) { + AA[irayp][jrayp] = 0.0; + if (jrayp < irayp) { // Symmetric + AA[irayp][jrayp] = AA[jrayp][irayp]; + } else { + for (Int_t ihit = 0; ihit < theDCTrack->GetNHits(); ihit++) { + + THcDCHit* hit = theDCTrack->GetHit(ihit); + + AA[irayp][jrayp] += fPlaneCoeffs[planes[ihit]][raycoeffmap[irayp]] * + fPlaneCoeffs[planes[ihit]][raycoeffmap[jrayp]] / + pow(hit->GetWireSigma(), 2); + + } // end ihit loop + } + } } // Solve 4x4 equations TVectorD dray(NUM_FPRAY); // Should check that it is invertable AA.Invert(); - dray = AA*TT; - // cout << "DRAY: " << dray[0] << " "<< dray[1] << " "<< dray[2] << " "<< dray[3] << " " << endl; - // if(bad_determinant) { + dray = AA * TT; + // cout << "DRAY: " << dray[0] << " "<< dray[1] << " "<< dray[2] << " "<< dray[3] << " " + // << endl; if(bad_determinant) { // dray[0] = dray[1] = 10000.; dray[2] = dray[3] = 2.0; // } // Calculate hit coordinate for each plane for chi2 and efficiency // calculations // Make sure fCoords, fResiduals, and fDoubleResiduals are clear - for(Int_t iplane=0;iplane < fNPlanes; iplane++) { - Double_t coord=0.0; - for(Int_t ir=0;ir<NUM_FPRAY;ir++) { - coord += fPlaneCoeffs[iplane][raycoeffmap[ir]]*dray[ir]; - // cout << "ir = " << ir << ", dray[ir] = " << dray[ir] << endl; - } - theDCTrack->SetCoord(iplane,coord); + for (Int_t iplane = 0; iplane < fNPlanes; iplane++) { + Double_t coord = 0.0; + for (Int_t ir = 0; ir < NUM_FPRAY; ir++) { + coord += fPlaneCoeffs[iplane][raycoeffmap[ir]] * dray[ir]; + // cout << "ir = " << ir << ", dray[ir] = " << dray[ir] << endl; + } + theDCTrack->SetCoord(iplane, coord); } // Compute Chi2 and residuals chi2 = 0.0; - for(Int_t ihit=0;ihit < theDCTrack->GetNHits();ihit++) { - - THcDCHit* hit=theDCTrack->GetHit(ihit); - + for (Int_t ihit = 0; ihit < theDCTrack->GetNHits(); ihit++) { - Double_t residual = coords[ihit] - theDCTrack->GetCoord(planes[ihit]); - theDCTrack->SetResidual(planes[ihit], residual); + THcDCHit* hit = theDCTrack->GetHit(ihit); - // double track_coord = theDCTrack->GetCoord(planes[ihit]); -//cout<<planes[ihit]<<"\t"<<track_coord<<"\t"<<coords[ihit]<<"\t"<<residual<<endl; - chi2 += pow(residual/hit->GetWireSigma(),2); + Double_t residual = coords[ihit] - theDCTrack->GetCoord(planes[ihit]); + theDCTrack->SetResidual(planes[ihit], residual); + // double track_coord = theDCTrack->GetCoord(planes[ihit]); + // cout<<planes[ihit]<<"\t"<<track_coord<<"\t"<<coords[ihit]<<"\t"<<residual<<endl; + chi2 += pow(residual / hit->GetWireSigma(), 2); } theDCTrack->SetVector(dray[0], dray[1], 0.0, dray[2], dray[3]); @@ -1093,181 +1140,171 @@ void THcDC::TrackFit() theDCTrack->SetChisq(chi2); // calculate ray without a plane in track - for(Int_t ipl_hit=0;ipl_hit < theDCTrack->GetNHits();ipl_hit++) { - - - if(theDCTrack->GetNFree() > 0) { - TVectorD TT(NUM_FPRAY); - TMatrixD AA(NUM_FPRAY,NUM_FPRAY); - for(Int_t irayp=0;irayp<NUM_FPRAY;irayp++) { - TT[irayp] = 0.0; - for(Int_t ihit=0;ihit < theDCTrack->GetNHits();ihit++) { - - - THcDCHit* hit=theDCTrack->GetHit(ihit); - - if (ihit != ipl_hit) { - TT[irayp] += (coords[ihit]* - fPlaneCoeffs[planes[ihit]][raycoeffmap[irayp]]) - /pow(hit->GetWireSigma(),2); - - } - } - } - for(Int_t irayp=0;irayp<NUM_FPRAY;irayp++) { - for(Int_t jrayp=0;jrayp<NUM_FPRAY;jrayp++) { - AA[irayp][jrayp] = 0.0; - if(jrayp<irayp) { // Symmetric - AA[irayp][jrayp] = AA[jrayp][irayp]; - } else { - - for(Int_t ihit=0;ihit < theDCTrack->GetNHits();ihit++) { - - THcDCHit* hit=theDCTrack->GetHit(ihit); - - - if (ihit != ipl_hit) { - AA[irayp][jrayp] += fPlaneCoeffs[planes[ihit]][raycoeffmap[irayp]]* - fPlaneCoeffs[planes[ihit]][raycoeffmap[jrayp]]/ - pow(hit->GetWireSigma(),2); - - } - } - } - } - } - // - // Solve 4x4 equations - // Should check that it is invertable - TVectorD dray(NUM_FPRAY); - AA.Invert(); - dray = AA*TT; - Double_t coord=0.0; - for(Int_t ir=0;ir<NUM_FPRAY;ir++) { - coord += fPlaneCoeffs[planes[ipl_hit]][raycoeffmap[ir]]*dray[ir]; - // cout << "ir = " << ir << ", dray[ir] = " << dray[ir] << endl; - } - Double_t residual = coords[ipl_hit] - coord; - theDCTrack->SetResidualExclPlane(planes[ipl_hit], residual); + for (Int_t ipl_hit = 0; ipl_hit < theDCTrack->GetNHits(); ipl_hit++) { + + if (theDCTrack->GetNFree() > 0) { + TVectorD TT(NUM_FPRAY); + TMatrixD AA(NUM_FPRAY, NUM_FPRAY); + for (Int_t irayp = 0; irayp < NUM_FPRAY; irayp++) { + TT[irayp] = 0.0; + for (Int_t ihit = 0; ihit < theDCTrack->GetNHits(); ihit++) { + + THcDCHit* hit = theDCTrack->GetHit(ihit); + + if (ihit != ipl_hit) { + TT[irayp] += (coords[ihit] * fPlaneCoeffs[planes[ihit]][raycoeffmap[irayp]]) / + pow(hit->GetWireSigma(), 2); + } + } + } + for (Int_t irayp = 0; irayp < NUM_FPRAY; irayp++) { + for (Int_t jrayp = 0; jrayp < NUM_FPRAY; jrayp++) { + AA[irayp][jrayp] = 0.0; + if (jrayp < irayp) { // Symmetric + AA[irayp][jrayp] = AA[jrayp][irayp]; + } else { + + for (Int_t ihit = 0; ihit < theDCTrack->GetNHits(); ihit++) { + + THcDCHit* hit = theDCTrack->GetHit(ihit); + + if (ihit != ipl_hit) { + AA[irayp][jrayp] += fPlaneCoeffs[planes[ihit]][raycoeffmap[irayp]] * + fPlaneCoeffs[planes[ihit]][raycoeffmap[jrayp]] / + pow(hit->GetWireSigma(), 2); + } + } + } + } + } + // + // Solve 4x4 equations + // Should check that it is invertable + TVectorD dray(NUM_FPRAY); + AA.Invert(); + dray = AA * TT; + Double_t coord = 0.0; + for (Int_t ir = 0; ir < NUM_FPRAY; ir++) { + coord += fPlaneCoeffs[planes[ipl_hit]][raycoeffmap[ir]] * dray[ir]; + // cout << "ir = " << ir << ", dray[ir] = " << dray[ir] << endl; + } + Double_t residual = coords[ipl_hit] - coord; + theDCTrack->SetResidualExclPlane(planes[ipl_hit], residual); } } } - //Calculate residual without plane + // Calculate residual without plane // Calculate residuals for each chamber if in single stub mode // and there was a track found in each chamber // Specific for two chambers. Can/should it be generalized? - if(fSingleStub != 0) { - if(fNDCTracks == 2) { - THcDCTrack *theDCTrack1 = static_cast<THcDCTrack*>( fDCTracks->At(0)); - THcDCTrack *theDCTrack2 = static_cast<THcDCTrack*>( fDCTracks->At(1)); + if (fSingleStub != 0) { + if (fNDCTracks == 2) { + THcDCTrack* theDCTrack1 = static_cast<THcDCTrack*>(fDCTracks->At(0)); + THcDCTrack* theDCTrack2 = static_cast<THcDCTrack*>(fDCTracks->At(1)); // Int_t itrack=0; - Int_t ihit=0; - THcDCHit* hit=theDCTrack1->GetHit(ihit); - Int_t plane=hit->GetPlaneNum()-1; - Int_t chamber=fNChamber[plane]; - if(chamber==1) { - // itrack=1; - hit=theDCTrack2->GetHit(ihit); - plane=hit->GetPlaneNum()-1; - chamber=fNChamber[plane]; - if(chamber==2) { - Double_t ray1[4]; - Double_t ray2[4]; - theDCTrack1->GetRay(ray1); - theDCTrack2->GetRay(ray2); - // itrack = 1; - // Loop over hits in second chamber - for(Int_t ihit=0;ihit < theDCTrack2->GetNHits();ihit++) { - // Calculate residual in second chamber from first chamber track - THcDCHit* hit=theDCTrack2->GetHit(ihit); - Int_t plane=hit->GetPlaneNum()-1; - Double_t pos = DpsiFun(ray1,plane); - Double_t coord; - if(fFixLR) { - if(fFixPropagationCorrection) { - coord = hit->GetPos() - + theDCTrack2->GetHitLR(ihit)*theDCTrack2->GetHitDist(ihit); - } else { - coord = hit->GetPos() - + theDCTrack2->GetHitLR(ihit)*hit->GetDist(); - } - } else { - if(fFixPropagationCorrection) { - coord = hit->GetPos() - + hit->GetLR()*theDCTrack2->GetHitDist(ihit); - } else { - coord = hit->GetCoord(); - } - } - theDCTrack1->SetDoubleResidual(plane,coord - pos); - // hdc_dbl_res(pln) = hdc_double_residual(1,pln) for hists - } - // itrack=0; - // Loop over hits in first chamber - for(Int_t ihit=0;ihit < theDCTrack1->GetNHits();ihit++) { - // Calculate residual in first chamber from second chamber track - THcDCHit* hit=theDCTrack1->GetHit(ihit); - Int_t plane=hit->GetPlaneNum()-1; - Double_t pos = DpsiFun(ray1,plane); - Double_t coord; - if(fFixLR) { - if(fFixPropagationCorrection) { - coord = hit->GetPos() - + theDCTrack1->GetHitLR(ihit)*theDCTrack1->GetHitDist(ihit); - } else { - coord = hit->GetPos() - + theDCTrack1->GetHitLR(ihit)*hit->GetDist(); - } - } else { - if(fFixPropagationCorrection) { - coord = hit->GetPos() - + hit->GetLR()*theDCTrack1->GetHitDist(ihit); - } else { - coord = hit->GetCoord(); - } - } - theDCTrack2->SetDoubleResidual(plane,coord - pos); - // hdc_dbl_res(pln) = hdc_double_residual(1,pln) for hists - } - } + Int_t ihit = 0; + THcDCHit* hit = theDCTrack1->GetHit(ihit); + Int_t plane = hit->GetPlaneNum() - 1; + Int_t chamber = fNChamber[plane]; + if (chamber == 1) { + // itrack=1; + hit = theDCTrack2->GetHit(ihit); + plane = hit->GetPlaneNum() - 1; + chamber = fNChamber[plane]; + if (chamber == 2) { + Double_t ray1[4]; + Double_t ray2[4]; + theDCTrack1->GetRay(ray1); + theDCTrack2->GetRay(ray2); + // itrack = 1; + // Loop over hits in second chamber + for (Int_t ihit = 0; ihit < theDCTrack2->GetNHits(); ihit++) { + // Calculate residual in second chamber from first chamber track + THcDCHit* hit = theDCTrack2->GetHit(ihit); + Int_t plane = hit->GetPlaneNum() - 1; + Double_t pos = DpsiFun(ray1, plane); + Double_t coord; + if (fFixLR) { + if (fFixPropagationCorrection) { + coord = hit->GetPos() + theDCTrack2->GetHitLR(ihit) * theDCTrack2->GetHitDist(ihit); + } else { + coord = hit->GetPos() + theDCTrack2->GetHitLR(ihit) * hit->GetDist(); + } + } else { + if (fFixPropagationCorrection) { + coord = hit->GetPos() + hit->GetLR() * theDCTrack2->GetHitDist(ihit); + } else { + coord = hit->GetCoord(); + } + } + theDCTrack1->SetDoubleResidual(plane, coord - pos); + // hdc_dbl_res(pln) = hdc_double_residual(1,pln) for hists + } + // itrack=0; + // Loop over hits in first chamber + for (Int_t ihit = 0; ihit < theDCTrack1->GetNHits(); ihit++) { + // Calculate residual in first chamber from second chamber track + THcDCHit* hit = theDCTrack1->GetHit(ihit); + Int_t plane = hit->GetPlaneNum() - 1; + Double_t pos = DpsiFun(ray1, plane); + Double_t coord; + if (fFixLR) { + if (fFixPropagationCorrection) { + coord = hit->GetPos() + theDCTrack1->GetHitLR(ihit) * theDCTrack1->GetHitDist(ihit); + } else { + coord = hit->GetPos() + theDCTrack1->GetHitLR(ihit) * hit->GetDist(); + } + } else { + if (fFixPropagationCorrection) { + coord = hit->GetPos() + hit->GetLR() * theDCTrack1->GetHitDist(ihit); + } else { + coord = hit->GetCoord(); + } + } + theDCTrack2->SetDoubleResidual(plane, coord - pos); + // hdc_dbl_res(pln) = hdc_double_residual(1,pln) for hists + } + } } } } // if (fdebugtrackprint) { - printf("%5s %-14s %-14s %-14s %-14s %-10s %-10s \n","Track","x_t","y_t","xp_t","yp_t","chi2","DOF"); - printf("%5s %-14s %-14s %-14s %-14s %-10s %-10s \n"," ","[cm]","[cm]","[rad]","[rad]"," "," "); - for(UInt_t itr=0;itr < fNDCTracks;itr++) { - THcDCTrack *theDCTrack = static_cast<THcDCTrack*>( fDCTracks->At(itr)); - printf("%-5d %14.6e %14.6e %14.6e %14.6e %10.3e %3d \n", itr+1,theDCTrack->GetX(),theDCTrack->GetY(),theDCTrack->GetXP(),theDCTrack->GetYP(),theDCTrack->GetChisq(),theDCTrack->GetNFree()); + printf("%5s %-14s %-14s %-14s %-14s %-10s %-10s \n", "Track", "x_t", "y_t", "xp_t", "yp_t", + "chi2", "DOF"); + printf("%5s %-14s %-14s %-14s %-14s %-10s %-10s \n", " ", "[cm]", "[cm]", "[rad]", "[rad]", + " ", " "); + for (UInt_t itr = 0; itr < fNDCTracks; itr++) { + THcDCTrack* theDCTrack = static_cast<THcDCTrack*>(fDCTracks->At(itr)); + printf("%-5d %14.6e %14.6e %14.6e %14.6e %10.3e %3d \n", itr + 1, theDCTrack->GetX(), + theDCTrack->GetY(), theDCTrack->GetXP(), theDCTrack->GetYP(), theDCTrack->GetChisq(), + theDCTrack->GetNFree()); } - for(UInt_t itr=0;itr < fNDCTracks;itr++) { - printf("%s %5d \n","Hit info for track number = ",itr+1); - printf("%5s %-15s %-15s %-15s \n","Plane","WIRE_COORD","Fit postiion","Residual"); - THcDCTrack *theDCTrack = static_cast<THcDCTrack*>( fDCTracks->At(itr)); - for(Int_t ihit=0;ihit < theDCTrack->GetNHits();ihit++) { - THcDCHit* hit=theDCTrack->GetHit(ihit); - Int_t plane=hit->GetPlaneNum()-1; - Double_t coords_temp; - if(fFixLR) { - if(fFixPropagationCorrection) { - coords_temp = hit->GetPos() - + theDCTrack->GetHitLR(ihit)*theDCTrack->GetHitDist(ihit); - } else { - coords_temp = hit->GetPos() - + theDCTrack->GetHitLR(ihit)*hit->GetDist(); - } - } else { - if(fFixPropagationCorrection) { - coords_temp = hit->GetPos() - + hit->GetLR()*theDCTrack->GetHitDist(ihit); - } else { - coords_temp = hit->GetCoord(); - } - } - printf("%-5d %15.7e %15.7e %15.7e \n",plane+1,coords_temp,theDCTrack->GetCoord(plane),theDCTrack->GetResidual(plane)); + for (UInt_t itr = 0; itr < fNDCTracks; itr++) { + printf("%s %5d \n", "Hit info for track number = ", itr + 1); + printf("%5s %-15s %-15s %-15s \n", "Plane", "WIRE_COORD", "Fit postiion", "Residual"); + THcDCTrack* theDCTrack = static_cast<THcDCTrack*>(fDCTracks->At(itr)); + for (Int_t ihit = 0; ihit < theDCTrack->GetNHits(); ihit++) { + THcDCHit* hit = theDCTrack->GetHit(ihit); + Int_t plane = hit->GetPlaneNum() - 1; + Double_t coords_temp; + if (fFixLR) { + if (fFixPropagationCorrection) { + coords_temp = hit->GetPos() + theDCTrack->GetHitLR(ihit) * theDCTrack->GetHitDist(ihit); + } else { + coords_temp = hit->GetPos() + theDCTrack->GetHitLR(ihit) * hit->GetDist(); + } + } else { + if (fFixPropagationCorrection) { + coords_temp = hit->GetPos() + hit->GetLR() * theDCTrack->GetHitDist(ihit); + } else { + coords_temp = hit->GetCoord(); + } + } + printf("%-5d %15.7e %15.7e %15.7e \n", plane + 1, coords_temp, theDCTrack->GetCoord(plane), + theDCTrack->GetResidual(plane)); } } } @@ -1276,8 +1313,7 @@ void THcDC::TrackFit() } // // -Double_t THcDC::DpsiFun(Double_t ray[4], Int_t plane) -{ +Double_t THcDC::DpsiFun(Double_t ray[4], Int_t plane) { /** this function calculates the psi coordinate of the intersection of a ray (defined by ray) with a hms wire chamber plane. the geometry @@ -1296,74 +1332,73 @@ Double_t THcDC::DpsiFun(Double_t ray[4], Int_t plane) ray(4) = tan(yp) */ - Double_t infinity = 1.0E+20; - Double_t cinfinity = 1/infinity; - Double_t DpsiFun = - ray[2]*ray[1]*fPlaneCoeffs[plane][0] + - ray[3]*ray[0]*fPlaneCoeffs[plane][1] + - ray[2]*fPlaneCoeffs[plane][2] + - ray[3]*fPlaneCoeffs[plane][3] + - ray[0]*fPlaneCoeffs[plane][4] + - ray[1]*fPlaneCoeffs[plane][5]; - Double_t denom = ray[2]*fPlaneCoeffs[plane][6] - + ray[3]*fPlaneCoeffs[plane][7] - + fPlaneCoeffs[plane][8]; - if(TMath::Abs(denom) < cinfinity) { + Double_t infinity = 1.0E+20; + Double_t cinfinity = 1 / infinity; + Double_t DpsiFun = ray[2] * ray[1] * fPlaneCoeffs[plane][0] + + ray[3] * ray[0] * fPlaneCoeffs[plane][1] + ray[2] * fPlaneCoeffs[plane][2] + + ray[3] * fPlaneCoeffs[plane][3] + ray[0] * fPlaneCoeffs[plane][4] + + ray[1] * fPlaneCoeffs[plane][5]; + Double_t denom = + ray[2] * fPlaneCoeffs[plane][6] + ray[3] * fPlaneCoeffs[plane][7] + fPlaneCoeffs[plane][8]; + if (TMath::Abs(denom) < cinfinity) { DpsiFun = infinity; } else { - DpsiFun = DpsiFun/denom; + DpsiFun = DpsiFun / denom; } - return(DpsiFun); + return (DpsiFun); } //_____________________________________________________________________________ -Int_t THcDC::End(THaRunBase* run) -{ +Int_t THcDC::End(THaRunBase* run) { // EffCalc(); MissReport(Form("%s.%s", GetApparatus()->GetName(), GetName())); return 0; } //_____________________________________________________________________________ -void THcDC::EffInit() -{ +void THcDC::EffInit() { /** Create, and initialize counters used to calculate efficiencies. Register the counters in gHcParms so that the variables can be used in end of run reports. */ - delete [] fNChamHits; fNChamHits = new Int_t [fNChambers]; - delete [] fPlaneEvents; fPlaneEvents = new Int_t [fNPlanes]; + delete[] fNChamHits; + fNChamHits = new Int_t[fNChambers]; + delete[] fPlaneEvents; + fPlaneEvents = new Int_t[fNPlanes]; fTotEvents = 0; - for(UInt_t i=0;i<fNChambers;i++) { + for (UInt_t i = 0; i < fNChambers; i++) { fNChamHits[i] = 0; } - for(Int_t i=0;i<fNPlanes;i++) { + for (Int_t i = 0; i < fNPlanes; i++) { fPlaneEvents[i] = 0; } - gHcParms->Define(Form("%sdc_tot_events",fPrefix),"Total DC Events",fTotEvents); - gHcParms->Define(Form("%sdc_cham_hits[%d]",fPrefix,fNChambers),"N events with hits per chamber",*fNChamHits); - gHcParms->Define(Form("%sdc_events[%d]",fPrefix,fNPlanes),"N events with hits per plane",*fPlaneEvents); + gHcParms->Define(Form("%sdc_tot_events", fPrefix), "Total DC Events", fTotEvents); + gHcParms->Define(Form("%sdc_cham_hits[%d]", fPrefix, fNChambers), + "N events with hits per chamber", *fNChamHits); + gHcParms->Define(Form("%sdc_events[%d]", fPrefix, fNPlanes), "N events with hits per plane", + *fPlaneEvents); } //_____________________________________________________________________________ -void THcDC::Eff() -{ +void THcDC::Eff() { /** Accumulate statistics for efficiency calculations */ fTotEvents++; - for(UInt_t i=0;i<fNChambers;i++) { - if(fChambers[i]->GetNHits()>0) fNChamHits[i]++; + for (UInt_t i = 0; i < fNChambers; i++) { + if (fChambers[i]->GetNHits() > 0) + fNChamHits[i]++; } - for(Int_t i=0;i<fNPlanes;i++) { - if(fPlanes[i]->GetNHits() > 0) fPlaneEvents[i]++; + for (Int_t i = 0; i < fNPlanes; i++) { + if (fPlanes[i]->GetNHits() > 0) + fPlaneEvents[i]++; } return; } ClassImp(THcDC) -//////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////