|
//____________________________________________________________________ // // Base class for tpc calibration modules // Register the parameter element in the manager at init time // // Example of use : BrTpcTimeCalModule //____________________________________________________________________ // // $Id: BrTpcCalModule.cxx,v 1.4 2002/04/11 12:27:53 pchristi Exp $ // $Author: pchristi $ // $Date: 2002/04/11 12:27:53 $ // $Copyright: (C) 2001 BRAHMS Collaboration <brahmlib@rhic.bnl.gov> // #ifndef BRAT_BrTpcCalModule #include "BrTpcCalModule.h" #endif #ifndef WIN32 #include <iostream> #else #include <iostream.h> #endif #ifndef BRAT_BrParameterDbManager #include "BrParameterDbManager.h" #endif #ifndef BRAT_BrGeometryDbManager #include "BrGeometryDbManager.h" #endif #ifndef BRAT_BrCalibrationManager #include "BrCalibrationManager.h" #endif #ifndef BRAT_BrException #include "BrException.h" #endif //____________________________________________________________________ ClassImp(BrTpcCalModule); //____________________________________________________________________ BrTpcCalModule::BrTpcCalModule() : BrModule() { // Default constructor. DO NOT USE SetState(kSetup); fParamsTpc = 0; fCalibration = 0; fTpcVol = 0; SetCommitAscii(); // default is false SetSaveAscii(); // default is false SetLoadAscii(); // default is false SetUseDriftVelocity(); // default is true SetUsePadStatus(); // default is true SetUseTimeOffsets(); // default is true fCalibFileName = '0'; SetTreeOn(); // default is false } //____________________________________________________________________ BrTpcCalModule::BrTpcCalModule(const Char_t* name, const Char_t* title) : BrModule(name, title) { // Named Constructor SetState(kSetup); fParamsTpc = 0; fCalibration = 0; fTpcVol = 0; SetCommitAscii(); // default is false SetSaveAscii(); // default is false SetLoadAscii(); // default is false SetUseDriftVelocity(); // default is true SetUsePadStatus(); // default is true SetUseTimeOffsets(); // default is true fCalibFileName = '0'; SetTreeOn(); // default is false if (strcmp(name, "TPM1")!=0 && strcmp(name, "TPM2")!=0 && strcmp(name, "T1")!=0 && strcmp(name, "T2")!=0) Abort("BrTpcCalModule", "Wrong detector name!! " "Should be : TPM1, TPM2, T1, or T2"); } //____________________________________________________________________ void BrTpcCalModule::Init() { // Job-level initialisation SetState(kInit); cout << "In BrTpcCalModule::Init" << endl; // calibration parameters BrParameterDbManager* parMan = BrParameterDbManager::Instance(); fParamsTpc = (BrDetectorParamsTPC*)parMan->GetDetectorParameters("BrDetectorParamsTPC", GetName()); BrGeometryDbManager* geoDb = BrGeometryDbManager::Instance(); fTpcVol = (BrDetectorVolume*)geoDb->GetDetectorVolume("BrDetectorVolume", GetName()); // getting calibration parameter element BrCalibrationManager* calMan = BrCalibrationManager::Instance(); if (!calMan) { Abort("Init", "could not get calibration manager"); return; } fCalibration = (BrTpcCalibration*)calMan->Register("BrTpcCalibration", GetName()); if (!fCalibration) { Abort("Init", "could not get calibration parameter element %s", GetName()); return; } // check calibration mode if (fCommitAscii) { fLoadAscii = kFALSE; fSaveAscii = kFALSE; if (Verbose() > 1) cout << " ----> Will commit ascii calibration from file " << fCalibFileName.Data() << endl; return; } if (fSaveAscii) { fLoadAscii = kFALSE; fCommitAscii = kFALSE; if (Verbose() > 1) cout << " ----> Will save calibration to ascii file " << fCalibFileName.Data() << endl; return; } if (fLoadAscii) { fSaveAscii = kFALSE; fCommitAscii = kFALSE; if (Verbose() > 1) cout << " ----> Loading calibration from ascii file " << fCalibFileName.Data() << endl; return; } BrCalibration::EAccessMode mode = BrCalibration::kRead; const Int_t nPads = fParamsTpc-> GetPadsprow(); const Int_t nRows = fParamsTpc->GetNumberOfRows(); try{ if(fUseDriftVelocity) fCalibration->Use(BrTpcCalibration::kDriftVelocity, mode, 1); if(fUsePadStatus) { fCalibration->Use(BrTpcCalibration::kInstrumentedRows, mode, nRows); fCalibration->Use(BrTpcCalibration::kPadStatus, mode, nRows*nPads); } if(fUseTimeOffsets) { fCalibration->Use(BrTpcCalibration::kTimeOffset0, mode, nRows); fCalibration->Use(BrTpcCalibration::kTimeOffset1, mode, nRows); } } catch(BrException* e) { cerr << "BrTpcPadStatusCalModule::Init : " << *e << endl; e->Execute(); } } //____________________________________________________________________ void BrTpcCalModule::Begin() { // This method is usually overwritten and therefore only used when // we want to extract data from the database // SetState(kBegin); UpdateCalibrations(); } //____________________________________________________________________ void BrTpcCalModule::UpdateCalibrations() { // This method applies the calibrations to the detector parameters // // drift velocity if(fUseDriftVelocity) { if(!fCalibration->RevisionExists(BrTpcCalibration::kDriftVelocity)) { Abort("Begin", "Drift velocity calibration revisions are missing!"); return; } else SetDriftVelocity(); } // Pad status if(fUsePadStatus) { if(!fCalibration->RevisionExists(BrTpcCalibration::kInstrumentedRows) || !fCalibration->RevisionExists(BrTpcCalibration::kPadStatus)) { Abort("Begin", "Pad status calibration revisions are missing!"); return; } else SetPadStatus(); } if(fUseTimeOffsets) { if(!fCalibration->RevisionExists(BrTpcCalibration::kTimeOffset0) || !fCalibration->RevisionExists(BrTpcCalibration::kTimeOffset1)) { Abort("Begin", "Time offset revisions are missing!"); return; } else SetTimeOffsets(); } if (DebugLevel() > 10) { fParamsTpc->ListParameters(); fParamsTpc->ListPadStatus(); } } //____________________________________________________________________ void BrTpcCalModule::SetDriftVelocity() { // Set Drift velocity fParamsTpc->SetDriftVelocity(fCalibration->GetDriftVelocity()); } //____________________________________________________________________ void BrTpcCalModule::SetPadStatus() { // Set Pad status const Int_t nPads = fParamsTpc-> GetPadsprow(); const Int_t nRows = fParamsTpc->GetNumberOfRows(); for(Int_t i = 0; i < nRows; i++) { const Int_t row = i+1; Int_t rowStatus = fCalibration->GetInstrumentedRows(row); if(!rowStatus) { fParamsTpc->SetRowInActive(row); } else { fParamsTpc->SetRowActive(row); } } if(!strcmp(GetName(), "T2")) { fParamsTpc->SetRowInActive(13); fParamsTpc->SetRowInActive(14); } for(Int_t i = 0; i < nRows; i++) { const Int_t row = i+1; Bool_t rowNotInstrumented = kFALSE; Int_t rowStatus = fCalibration->GetInstrumentedRows(row); if(!rowStatus) rowNotInstrumented = kTRUE; for(Int_t j = 0; j < nPads; j++) { if(rowNotInstrumented) { fParamsTpc->SetDummyPad(row, j); continue; } const Int_t padStatus = fCalibration->GetPadStatus(row, j); if(padStatus==BrDetectorParamsTPC::kPadNotInstrumented) fParamsTpc->SetDummyPad(row, j); else if(padStatus==BrDetectorParamsTPC::kPadDead) fParamsTpc->SetDeadPad(row, j); } } } //____________________________________________________________________ void BrTpcCalModule::SetTimeOffsets() { // Set Time Offsets const Int_t nRows = fParamsTpc->GetNumberOfRows(); for(Int_t i = 0; i < nRows; i++) { const Int_t row = i+1; fParamsTpc->SetTimeCorrection(row, fCalibration->GetTimeOffset0(row), fCalibration->GetTimeOffset1(row)); } } //____________________________________________________________________ void BrTpcCalModule::SaveAscii() { if (fCalibFileName == "") { cout << " You forgot to set a calibration file for " << GetName() << ".n Please provide it now: " << flush; cin >> fCalibFileName; cout << endl; } } //____________________________________________________________________ void BrTpcCalModule::ReadAscii() { if (fCalibFileName == "") { cout << " You forgot to set a calibration file for " << GetName() << ".n Please provide it now: " << flush; cin >> fCalibFileName; cout << endl; } } //____________________________________________________________________ void BrTpcCalModule::Event(BrEventNode* inNode, BrEventNode* outNode) { // temporary: before a production mode, I prefer committing from a // file with parameters saved in a previous pass. if (fCommitAscii || fLoadAscii) { Warning("Event", "No need to scan event nodes, you only want to " "commit or load from ascii file"); return; } } //____________________________________________________________________ // // $Log: BrTpcCalModule.cxx,v $ // Revision 1.4 2002/04/11 12:27:53 pchristi // Moved annoying cout statements to a DebugLevel() > 10 statement. // // Revision 1.3 2001/11/28 15:19:38 pchristi // Removed references to hitwidths and the 2 hitwidth cal modules. // // Revision 1.2 2001/11/02 13:38:53 pchristi // Added new module for calibrating drift velocities using the fibres behind // T2 and in front of T1. // Updated old modules with small changes. // // Revision 1.1 2001/10/12 11:08:50 pchristi // Added new directory tpc. Added the first calibration modules. They // have all been tested and found to work. The algorithms might not be // optimal, but are at least fully automatic and to some extent // documented. CVS: // ---------------------------------------------------------------------- // BrTpcCalModule.cxx BrTpcCalModule.h CVS: BrTpcHitWidthCalModule.cxx // BrTpcHitWidthCalModule.h CVS: BrTpcPadStatusCalModule.cxx // BrTpcPadStatusCalModule.h CVS: BrTpcTimeCalModule.cxx // BrTpcTimeCalModule.h Include.h CVS: LinkDef.h Makefile.am CVS: // ---------------------------------------------------------------------- // // Revision 1.2 2001/10/10 15:49:54 pchristi // Many updates and a new module // // Revision 1.1 2001/10/08 08:07:54 pchristi // Initial revision. // // // |
||||||
This page automatically generated by script docBrat by Christian Holm |
Copyright ; 2002 BRAHMS Collaboration
<brahmlib@rcf.rhic.bnl.gov>
|