//------------------------------------------------------------------- // File and Version Information: // $Id: TSvtDataBlock.cc,v 1.6 2005/07/25 15:47:56 rlc Exp $ // // Fill the Svt Data Structure on an event by event basis. // // Author List // Subir Sarkar //------------------------------------------------------------------- #include #include #include using namespace std; ClassImp(TSvtDataBlock) //_____________________________________________________________________________ void TSvtDataBlock::Streamer(TBuffer &R__b) { // ***** Stream an object of class TSvtDataBlock. if (R__b.IsReading()) { Version_t R__v = R__b.ReadVersion(); if (R__v) { } R__b >> fNSvtTracks; if (fNSvtTracks > 0) { fSvtTrackList->Streamer(R__b); } R__b >> fEEWord; R__b >> fNXftTracks; if (fNXftTracks > 0) { fXftTrackList->Streamer(R__b); } } else { R__b.WriteVersion(TSvtDataBlock::IsA()); R__b << fNSvtTracks; if (fNSvtTracks > 0) { fSvtTrackList->Streamer(R__b); } R__b << fEEWord; R__b << fNXftTracks; if (fNXftTracks > 0) { fXftTrackList->Streamer(R__b); } } } //_____________________________________________________________________________ TSvtDataBlock::TSvtDataBlock() : fNSvtTracks(0), fNXftTracks(0), fEEWord(0) { // ****** Constructor fSvtTrackList = new TClonesArray("TSvtTrack", 100); fSvtTrackList->BypassStreamer(kFALSE); fXftTrackList = new TClonesArray("TSvXtTrack", 100); fXftTrackList->BypassStreamer(kFALSE); for(Int_t i=0;i<4;i++) Beam[i]=0; } //_____________________________________________________________________________ TSvtDataBlock::~TSvtDataBlock() { // ****** Destructor fSvtTrackList->Delete(); delete fSvtTrackList; fXftTrackList->Delete(); delete fXftTrackList; } //_____________________________________________________________________________ void TSvtDataBlock::Clear(Option_t *opt) { // ****** clear Data block fNSvtTracks = 0; fNXftTracks = 0; fEEWord = 0; fSvtTrackList->Clear(opt); fXftTrackList->Clear(opt); for(Int_t i=0;i<4;i++) Beam[i]=0; } //_____________________________________________________________________________ void TSvtDataBlock::Print(Option_t* opt) const { // ****** Print content // Print SVT and XFT track quantities in a columnar style. // Run/Event numbers will be printed by the header block // SVT Tracks first cout << "--------- SvtDataBlock: # of SVT Tracks = " << dec << fSvtTrackList->GetEntriesFast() << endl; TSvtDataBlock::Print(fSvtTrackList, opt); // Then XFT cout << "--------- SvtDataBlock: # of XFT Tracks = " << dec << fXftTrackList->GetEntriesFast() << endl; TSvtDataBlock::Print(fXftTrackList, opt); for(Int_t i=0;i<4;i++) cout<<"Beam component %d: %f\n",i,Beam[i]; } //_____________________________________________________________________________ void TSvtDataBlock::Print(TClonesArray *vec, Option_t *opt) const { // ****** Convenience int nt = vec->GetEntriesFast(); if (nt) { vec->At(0)->Print("banner"); for (int i = 0; i < nt; i++) { cout << setw(3) << dec << i+1; vec->At(i)->Print(opt); } } } //____________________________________________________________________________ void TSvtDataBlock::SetBeamSpot(Float_t *val){ for(Int_t i=0;i<4;i++) Beam[i]=val[i]; } //_____________________________________________________________________________ void TSvtDataBlock::ForceLoad() { // do nothing, only need this method to be non-inlined... }