BRAT 2.4.5
Class index
Full class index
brahmlib
BRAHMS
ROOT page
//____________________________________________________________________
// 
// 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>
Last Update on by

Validate HTML
Validate CSS