Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

DQHotColdElectronics.cxx

Go to the documentation of this file.
00001 #include "DQHotColdElectronics.h"
00002 #include "RawChip.h"
00003 
00004 #include "MessageService/MsgService.h"
00005 
00006 //
00007 // $Log $
00008 //
00009 
00010 ClassImp(DQHotColdElectronics)
00011                        
00012 CVSID("$Id: DQHotColdElectronics.cxx,v 1.1 2006/03/19 17:24:34 blake Exp $");
00013 
00014 DQHotColdElectronics::DQHotColdElectronics() :
00015   fTime(-1), 
00016   fSource(-1), 
00017   fNumberOfCrates(-1),
00018   fNumberOfCratesInReadout(-1),
00019   fFrameTime(0.0),
00020   fRawReadout(0),
00021   fHotColdElectronicsList(0)
00022 {
00023   for(Int_t k=0; k<2; k++){
00024     fColdChipMask[k]=0; fHotChipMask[k]=0;
00025   }
00026 
00027   fRawReadout = new RawReadout();
00028 
00029   fHotColdElectronicsList = new TObjArray();
00030 }
00031  
00032 DQHotColdElectronics::DQHotColdElectronics(const DQHotColdElectronics& rhs) :
00033   TObject(rhs),
00034   fTime(rhs.fTime), 
00035   fSource(rhs.fSource), 
00036   fNumberOfCrates(rhs.fNumberOfCrates),
00037   fNumberOfCratesInReadout(rhs.fNumberOfCratesInReadout),
00038   fFrameTime(rhs.fFrameTime),
00039   fRawReadout(rhs.fRawReadout), 
00040   fHotColdElectronicsList(rhs.fHotColdElectronicsList)
00041 {
00042   for(Int_t k=0; k<2; k++){
00043     fColdChipMask[k]=rhs.fColdChipMask[k];
00044     fHotChipMask[k]=rhs.fHotChipMask[k];
00045   }
00046 }
00047    
00048 DQHotColdElectronics::~DQHotColdElectronics()
00049 {
00050   delete fRawReadout;
00051 
00052   fHotColdElectronicsList->Delete();
00053   delete fHotColdElectronicsList;
00054 }
00055 
00056 void DQHotColdElectronics::Process(RawTpSinglesSummaryBlock* rdb)
00057 {
00058   MSG("DataQuality",Msg::kVerbose) << " DQHotColdElectronics::Process(RawTpSinglesSummaryBlock) " << endl;
00059 
00060   // Min/Max Singles Rates
00061   // =====================
00062   // Far Detector: normal rates are [50,5000] Hz
00063   // Near Detector: normal rates are [0,100000] Hz
00064 
00065   Int_t fMinVaRate=50;
00066   Int_t fMaxVaRate=5000;
00067   Int_t fMinQieRate=0;
00068   Int_t fMaxQieRate=100000;
00069 
00070   // TpSinglesSummaryBlock Source
00071   // ============================
00072   // Extract the TP singles measurement parameters
00073   // [time stamp, frame time (end-start), number of crates (ROP mask)]
00074 
00075   fTime=rdb->GetStartTimeStamp().GetSec();
00076   fFrameTime=(rdb->GetEndTimeStamp().GetSec()-rdb->GetStartTimeStamp().GetSec())+1.0e-9*(rdb->GetEndTimeStamp().GetNanoSec()-rdb->GetStartTimeStamp().GetNanoSec());
00077   fNumberOfCrates=rdb->GetNumberOfCrates();
00078   fNumberOfCratesInReadout=0;
00079 
00080   for(Int_t k=0;k<fNumberOfCrates;k++){
00081     if( rdb->GetHitsPerSecByCrate(k)>0 ) fNumberOfCratesInReadout++;
00082   }
00083 
00084   MSG("DataQuality",Msg::kVerbose) << "   Time=" << fTime << endl;
00085   MSG("DataQuality",Msg::kVerbose) << "   FrameTime=" << fFrameTime << endl;
00086   MSG("DataQuality",Msg::kVerbose) << "   NumberOfCrates=" << fNumberOfCrates << endl;
00087   MSG("DataQuality",Msg::kVerbose) << "   NumberOfCratesInReadout=" << fNumberOfCratesInReadout << endl;
00088 
00089   if( fFrameTime<=0 ){
00090     MSG("DataQuality",Msg::kWarning) << "     WARNING: TP summary frame time is corrupted " << endl;
00091   }
00092 
00093   // TpSinglesSummaryBlock Source
00094   // ============================
00095   // Extract the detector/electronics type and the granularity 
00096   // at which the rates have been recorded - only rates at the
00097   // VA chip and QIE menu level can be handled currently.
00098 
00099   fSource=rdb->GetSource();
00100   MSG("DataQuality",Msg::kVerbose) << "   Source=" << fSource << endl;
00101 
00102   Detector::Detector_t fDetector(Detector::kUnknown);
00103 
00104   switch( fSource ){
00105     case 0: // Crate only   
00106       fDetector = Detector::kUnknown;   
00107       break;
00108     case 1: // Crate and VARC (VA)  
00109       fDetector = Detector::kFar;
00110       break;
00111     case 2: // Crate and VFB/ADCSEL (VA)  
00112       fDetector = Detector::kFar;
00113       break;
00114     case 3: // Crate and VACHIP (VA)
00115       fDetector = Detector::kFar;  
00116       break;
00117     case 4: // Crate and Plane 
00118       fDetector = Detector::kUnknown;            
00119       break;
00120     case 5: // Crate and MASTER (QIE)
00121       fDetector = Detector::kNear;        
00122       break;
00123     case 6: // Crate and MINDER (QIE) 
00124       fDetector = Detector::kNear;
00125       break;
00126     case 7: // Crate and MENU (QIE)  
00127       fDetector = Detector::kNear;  
00128       break;
00129     default:                 
00130       break;
00131   }
00132 
00133   // Reset the hot/cold chip masks
00134   for(Int_t k=0;k<2;k++){
00135     fColdChipMask[k]=0; fHotChipMask[k]=0;
00136   }
00137 
00138   // Reset the lists of hot/cold chips
00139   fHotColdElectronicsList->Delete();
00140 
00141   // Iterate over raw channels and record any hot/cold chips
00142   typedef std::map<RawChannelId,UInt_t> RCIdToRateMap;
00143   const RCIdToRateMap& rates = rdb->GetRates();
00144   RCIdToRateMap::const_iterator rateItr = rates.begin();
00145   RCIdToRateMap::const_iterator rateEnd = rates.end();
00146   while ( rateItr != rateEnd ) {
00147     RawChannelId rawch = rateItr->first;
00148     Int_t rawrate = rateItr->second;
00149     Int_t correctedrate = (Int_t)(rawrate/fFrameTime);
00150     Int_t rate = correctedrate;
00151     Int_t crate = rawch.GetCrate();
00152 
00153     RawReadout::ReadoutType_t readout = fRawReadout->GetReadoutType(rawch);
00154 
00155     // Near Detector, QIE Electronics (Source 7 - QIE Menus)
00156     if( fSource==7
00157      && fDetector==Detector::kNear && rawch.GetElecType()==ElecType::kQIE ){
00158 
00159       if( readout==RawReadout::kDetector && rate<fMinQieRate){
00160         RawChip* chip = new RawChip(rawch,0,0,readout,RawChip::kCold,rate);
00161         fHotColdElectronicsList->Add(chip);
00162         if( crate>=0 && crate<8 ) fColdChipMask[0]++;
00163       }
00164 
00165       if( readout==RawReadout::kDetector && rate>fMaxQieRate){
00166         RawChip* chip = new RawChip(rawch,0,0,readout,RawChip::kHot,rate);
00167         fHotColdElectronicsList->Add(chip);
00168         if( crate>=0 && crate<8 ) fHotChipMask[0]++;
00169       }
00170     }
00171     
00172     // Far Detector, VA Electronics (Souce 3 - VA chips)
00173     // NB: there are currently no hot Veto Shield chips!
00174     if( fSource==3
00175      && fDetector==Detector::kFar && rawch.GetElecType()==ElecType::kVA ){
00176 
00177       if( readout==RawReadout::kDetector && rate<fMinVaRate ){
00178         RawChip* chip = new RawChip(rawch,0,0,readout,RawChip::kCold,rate);
00179         fHotColdElectronicsList->Add(chip);
00180         if( crate>=0 && crate<8 ) fColdChipMask[0]++;
00181         if( crate>=8 && crate<16 ) fColdChipMask[1]++;
00182       }
00183 
00184       if( readout==RawReadout::kDetector && rate>fMaxVaRate ){
00185         RawChip* chip = new RawChip(rawch,0,0,readout,RawChip::kHot,rate);
00186         fHotColdElectronicsList->Add(chip);
00187         if( crate>=0 && crate<8 ) fHotChipMask[0]++;
00188         if( crate>=8 && crate<16 ) fHotChipMask[1]++;
00189       }
00190 
00191       if( readout==RawReadout::kVetoShield && rate<fMinVaRate ){
00192         RawChip* chip = new RawChip(rawch,0,0,readout,RawChip::kCold,rate);
00193         fHotColdElectronicsList->Add(chip);
00194         if( crate>=0 && crate<8 ) fColdChipMask[0]++;
00195         if( crate>=8 && crate<16 ) fColdChipMask[1]++;
00196       }
00197     }
00198 
00199     rateItr++;
00200   }
00201 
00202   MSG("DataQuality",Msg::kVerbose) << " Found " << 1+this->GetLast() << " hot/cold chips [cold=" << fColdChipMask[0]+fColdChipMask[1] << ", hot=" << fHotChipMask[0]+fHotChipMask[1] << "]" << endl;
00203 
00204 }
00205 
00206 Int_t DQHotColdElectronics::GetTime() const
00207 {
00208   return fTime;
00209 }
00210 
00211 Int_t DQHotColdElectronics::GetSource() const
00212 {
00213   return fSource;
00214 }
00215 
00216 Int_t DQHotColdElectronics::GetNumberOfCrates() const
00217 {
00218   return fNumberOfCrates;
00219 }
00220 
00221 Int_t DQHotColdElectronics::GetNumberOfCratesInReadout() const
00222 {
00223   return fNumberOfCratesInReadout;
00224 }
00225 
00226 Int_t DQHotColdElectronics::GetColdChips(Int_t sm) const
00227 {
00228   if( sm==0 ) return fColdChipMask[0]+fColdChipMask[1];
00229   if( sm==1 ) return fColdChipMask[0];
00230   if( sm==2 ) return fColdChipMask[1];
00231   return -1;
00232 }
00233   
00234 Int_t DQHotColdElectronics::GetHotChips(Int_t sm) const
00235 {
00236   if( sm==0 ) return fHotChipMask[0]+fHotChipMask[1];
00237   if( sm==1 ) return fHotChipMask[0];
00238   if( sm==2 ) return fHotChipMask[1];
00239   return -1;
00240 }
00241 
00242 Int_t DQHotColdElectronics::GetLast() const
00243 {
00244   return fHotColdElectronicsList->GetLast();
00245 }
00246   
00247 TObject* DQHotColdElectronics::At(Int_t i) const
00248 {
00249   return (TObject*)(fHotColdElectronicsList->At(i));
00250 }

Generated on Mon Feb 15 11:06:38 2010 for loon by  doxygen 1.3.9.1