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

HardwareComponent.cxx

Go to the documentation of this file.
00001 #include "HardwareComponent.h"
00002 #include "MessageService/MsgService.h"
00003 #include <cassert>
00004 CVSID("$Id: HardwareComponent.cxx,v 1.5 2007/03/01 17:11:32 rhatcher Exp $");
00005 
00006 std::vector<PlexStripEndId> HardwareComponent::fEndList(0); // !
00007 
00008 HardwareComponent::HardwareComponent(HardwareType::Hardware_t type,
00009                                      RawChannelId rcid)
00010 {
00011   fType = type;
00012   rcid.ClearModeBits();
00013 
00014   switch(fType) {
00015 
00016   case HardwareType::kCrate:
00017     rcid.SetChAdd(0);
00018     break;
00019 
00020   case HardwareType::kChannel:
00021   case HardwareType::kMenu:
00022     break;
00023 
00024   case HardwareType::kVarc:
00025     rcid.SetVmm(0);
00026     rcid.SetVaAdcSel(0);
00027     rcid.SetVaChip(0);
00028     rcid.SetVaChannel(0);
00029     break;
00030 
00031   case HardwareType::kVmm:
00032     rcid.SetVaAdcSel(0);
00033     rcid.SetVaChip(0);
00034     rcid.SetVaChannel(0);
00035     break;
00036 
00037   case HardwareType::kVfb:
00038     rcid.SetVaChip(0);
00039     rcid.SetVaChannel(0);
00040     break;
00041 
00042   case HardwareType::kVaChip:
00043     rcid.SetVaChannel(0);
00044     break;
00045 
00046   case HardwareType::kMaster:
00047     rcid.SetMasterChannel(0);
00048     rcid.SetMinderChannel(0);
00049     break;
00050 
00051   case HardwareType::kMinder:
00052     rcid.SetMinderChannel(0);
00053     break;
00054 
00055   default:
00056     fId=0;
00057     MSG("Hardware",Msg::kError) << "Attempted to set hardware type " 
00058                                 << HardwareType::AsString(type)
00059                                 << " with RawChannelId. Invalid." << std::endl;
00060     return;
00061     
00062   }
00063   fId = rcid.GetEncoded();
00064 }
00065   
00066 HardwareComponent::HardwareComponent(HardwareType::Hardware_t type,
00067                                      PlexPixelSpotId psid)
00068 {
00069   fType = type;
00070 
00071   switch(fType) {
00072   case HardwareType::kPmt:
00073   case HardwareType::kPmtBase:
00074     psid.SetPixel(0);
00075     psid.SetSpot(0);
00076     break;
00077 
00078   case HardwareType::kPixel:
00079     psid.SetSpot(0);
00080     break;
00081 
00082   case HardwareType::kPixelSpot:
00083     break;
00084 
00085   default:
00086     fId=0;
00087     MSG("Hardware",Msg::kError) << "Attempted to set hardware type " 
00088                                 << HardwareType::AsString(type)
00089                                 << " with PixelSpotId. Invalid." << std::endl;
00090     return;
00091     
00092   }
00093   fId = psid.GetEncoded();
00094   
00095 }
00096 
00097 HardwareComponent::HardwareComponent(HardwareType::Hardware_t type,
00098                                      PlexStripEndId seid)
00099 {
00100   fType = type;
00101 
00102   switch(fType) {
00103   case HardwareType::kStrip:
00104     seid.SetSubPart(StripEnd::kWhole);
00105     seid.SetEnd(StripEnd::kWhole);
00106     break;
00107 
00108   case HardwareType::kStripEnd:
00109     break;
00110 
00111   default:
00112     fId=0;
00113     MSG("Hardware",Msg::kError) << "Attempted to set hardware type " 
00114                                 << HardwareType::AsString(type)
00115                                 << " with PixelSpotId. Invalid." << std::endl;
00116     return;
00117     
00118   }
00119   fId = seid.GetEncoded();   
00120 }
00121 
00122 HardwareComponent::HardwareComponent(HardwareType::Hardware_t type,
00123                                      PlexPinDiodeId pdid)
00124 {
00125   if(fType != HardwareType::kPinDiode) {
00126     fId = 0;
00127     MSG("Hardware",Msg::kError) << "Attempted to set hardware type " 
00128                                 << HardwareType::AsString(type)
00129                                 << " with PlexPinDiodeId. Invalid." << std::endl;
00130   }
00131   fId = pdid.GetEncoded();
00132 }
00133 
00134  
00135 Bool_t HardwareComponent::FromString(const char* )
00136 {
00137   std::cout << "HardwareComponent::FromString not implimented" << endl;
00138   assert(0);
00139 }
00140 
00141 const char* HardwareComponent::AsString(Option_t* opt) const
00142 {
00143   switch(fType) {
00144   case HardwareType::kCrate:
00145   case HardwareType::kChannel:
00146   case HardwareType::kVarc:
00147   case HardwareType::kVmm:
00148   case HardwareType::kVfb:
00149   case HardwareType::kVaChip:
00150   case HardwareType::kMaster:
00151   case HardwareType::kMinder:
00152   case HardwareType::kMenu:
00153     return Form("%10s %s",HardwareType::AsString(fType),GetRawChannelId().AsString(opt));    
00154   case HardwareType::kPmt:
00155   case HardwareType::kPmtBase:
00156   case HardwareType::kPixel:
00157   case HardwareType::kPixelSpot:
00158     return Form("%10s %s",HardwareType::AsString(fType),GetPixelSpotId().AsString(opt));
00159 
00160   case HardwareType::kStripEnd:
00161   case HardwareType::kStrip:
00162     return Form("%10s %s",HardwareType::AsString(fType),GetStripEndId().AsString(opt));
00163 
00164   case HardwareType::kPinDiode:
00165     return Form("%10s %s",HardwareType::AsString(fType),GetPinDiodeId().AsString(opt));
00166 
00167   case HardwareType::kPlane:
00168     return Form("%10s %s",HardwareType::AsString(fType),GetPlaneId().AsString(opt));
00169 
00170   case HardwareType::kSupermodule:
00171     return Form("%10s %d",HardwareType::AsString(fType),fId);
00172 
00173   case HardwareType::kVetoShield:
00174   case HardwareType::kSpectrometer:
00175   case HardwareType::kCalorimeter:
00176   case HardwareType::kDetector:
00177     return Form("%10s %d",HardwareType::AsString(fType));
00178 
00179   default:
00180     break;
00181   };
00182   return Form("%10s %10d",HardwareType::AsString(fType),fId);
00183 }
00184 
00185 void HardwareComponent::Print(Option_t* opt) const
00186 {
00187   cout << "Component: " << AsString(opt) << endl;
00188 }
00189 
00190     
00191 const std::vector<PlexStripEndId>& HardwareComponent::GetStripEnds(PlexHandle plex)
00192 {
00193   // 
00194   // Return a list of strip ends that are connected to this object, using
00195   // the given plex handle.
00196   //
00197 
00198   fEndList.clear();
00199   PlexStripEndId seid; // workspace.
00200 
00201   // Start with the easy case, move to the harder ones.
00202   
00203   switch(fType) {
00204   case HardwareType::kStripEnd:
00205     seid = GetStripEndId();
00206     if(seid.IsValid()) fEndList.push_back(seid);
00207     break;
00208 
00209   case HardwareType::kStrip:
00210     seid = GetStripEndId();
00211 
00212     seid.SetEnd(StripEnd::kPositive);
00213     if(seid.IsValid()) fEndList.push_back(seid);
00214 
00215     seid.SetEnd(StripEnd::kNegative);
00216     if(seid.IsValid()) fEndList.push_back(seid);    
00217     break;
00218 
00219   // Pmt stuff:
00220   case HardwareType::kPixelSpot:
00221     GetStripEndsForPixelSpot(GetPixelSpotId(),plex);
00222     break;
00223 
00224   case HardwareType::kPixel:
00225     GetStripEndsForPixel(GetPixelSpotId(),plex);
00226     break;
00227 
00228   case HardwareType::kPmt:
00229   case HardwareType::kPmtBase:
00230     GetStripEndsForPmt(GetPixelSpotId(),plex);
00231     break;
00232 
00233   // Channel stuff:
00234   case HardwareType::kChannel:
00235   case HardwareType::kMenu:
00236     GetStripEndsForChannel(GetRawChannelId(),plex);
00237     break;
00238 
00239   case HardwareType::kMinder:
00240     GetStripEndsForMinder(GetRawChannelId(),plex);
00241     break;
00242 
00243   case HardwareType::kMaster:
00244     GetStripEndsForMaster(GetRawChannelId(),plex);
00245     break;
00246 
00247   case HardwareType::kVaChip:
00248     GetStripEndsForVaChip(GetRawChannelId(),plex);
00249     break;
00250 
00251   case HardwareType::kVfb:
00252     GetStripEndsForVfb(GetRawChannelId(),plex);
00253     break;
00254 
00255   case HardwareType::kVmm:
00256     GetStripEndsForVmm(GetRawChannelId(),plex);
00257     break;
00258 
00259   case HardwareType::kVarc:
00260     GetStripEndsForVarc(GetRawChannelId(),plex);
00261     break;
00262 
00263   case HardwareType::kCrate:
00264     GetStripEndsForCrate(GetRawChannelId(),plex);
00265     break;
00266 
00267   case HardwareType::kPinDiode:
00268     break;
00269 
00270   case HardwareType::kPlane:
00271     GetStripEndsForPlane(GetPlaneId(),plex);
00272     break;
00273 
00274   case HardwareType::kSupermodule:
00275     GetStripEndsForSupermodule(fId,plex);
00276     break;
00277 
00278   case HardwareType::kVetoShield:
00279     GetStripEndsForVetoShield(plex);
00280     break;
00281 
00282   case HardwareType::kSpectrometer:
00283     GetStripEndsForSpectrometer(plex);
00284     break;
00285 
00286   case HardwareType::kCalorimeter:
00287     GetStripEndsForCalorimeter(plex);
00288     break;
00289   
00290   case HardwareType::kDetector:
00291     GetStripEndsForDetector(plex);
00292     break;
00293 
00294   default:
00295     MAXMSG("Hardware",Msg::kError,100) << "Unknown hardware type " << fType << ". No strip end list made." << endl;
00296     break;
00297   }
00298   return fEndList;
00299 }
00300 
00305 
00306 void HardwareComponent::GetStripEndsForPixelSpot(PlexPixelSpotId psid, PlexHandle plex)
00307 {
00308   PlexStripEndId seid = plex.GetStripEndId(psid);
00309   if(seid.IsValid()) fEndList.push_back(seid);
00310 }
00311 
00312 void HardwareComponent::GetStripEndsForPixel(PlexPixelSpotId psid, PlexHandle plex)
00313 {
00314   // either 8 spots for FD or 1 spot for ND
00315   if(psid.GetElecType()==ElecType::kVA) {
00316     for(int ispot=1;ispot<8;ispot++) {
00317       psid.SetSpot(ispot);
00318       GetStripEndsForPixelSpot(psid,plex);
00319     }
00320   } else {
00321     psid.SetSpot(1);
00322     GetStripEndsForPixelSpot(psid,plex);
00323   }
00324 }
00325 
00326 void HardwareComponent::GetStripEndsForPmt(PlexPixelSpotId psid, PlexHandle plex)
00327 {
00328   int npix = 16;
00329   if(psid.GetElecType()==ElecType::kQIE) npix = 64;
00330   for(int ipix=0;ipix<npix;ipix++) {
00331     psid.SetPixel(ipix);
00332     GetStripEndsForPixel(psid,plex);
00333   }
00334 }
00335 
00337 // Electronics
00338 void HardwareComponent::GetStripEndsForChannel(RawChannelId rcid, PlexHandle plex)
00339 {
00340   PlexSEIdAltL altl = plex.GetSEIdAltL(rcid);
00341   for(unsigned int i=0;i<altl.size();i++) {
00342     fEndList.push_back(altl[i].GetSEId());
00343   }
00344 }
00345 
00346 
00347 void HardwareComponent::GetStripEndsForMinder(RawChannelId rcid, PlexHandle plex) 
00348 {
00349   for(int i=0;i<16;i++) {
00350     rcid.SetMinderChannel(i);
00351     GetStripEndsForChannel(rcid,plex);
00352   }
00353 }
00354 
00355 
00356 void HardwareComponent::GetStripEndsForMaster(RawChannelId rcid, PlexHandle plex) 
00357 {
00358   for(int i=0;i<8;i++) {
00359     rcid.SetMasterChannel(i);
00360     GetStripEndsForMinder(rcid,plex);
00361   }
00362 }
00363 
00364 void HardwareComponent::GetStripEndsForVaChip(RawChannelId rcid, PlexHandle plex) 
00365 {
00366   for(int i=2;i<18;i++) {
00367     rcid.SetVaChannel(i);
00368     GetStripEndsForChannel(rcid,plex);
00369   }
00370 }
00371 
00372 void HardwareComponent::GetStripEndsForVfb(RawChannelId rcid, PlexHandle plex) 
00373 {
00374   for(int i=0; i<3; i++) {
00375     rcid.SetVaChip(i);
00376     GetStripEndsForVaChip(rcid,plex);
00377   }
00378 }
00379 
00380 void HardwareComponent::GetStripEndsForVmm(RawChannelId rcid, PlexHandle plex) 
00381 {
00382   for(int i=0;i<2;i++) {
00383     rcid.SetVaAdcSel(i);
00384     GetStripEndsForVfb(rcid,plex);
00385   }
00386 }
00387 
00388 void HardwareComponent::GetStripEndsForVarc(RawChannelId rcid, PlexHandle plex)
00389 {
00390   for(int i=0;i<6;i++) {
00391     rcid.SetVmm(i);
00392     GetStripEndsForVmm(rcid,plex);
00393   }
00394 }
00395 
00396 
00397 void HardwareComponent::GetStripEndsForCrate(RawChannelId rcid, PlexHandle plex)
00398 {
00399   if(rcid.GetElecType()==ElecType::kQIE) {
00400     for(int varc = 0; varc < 4; varc ++) {
00401       rcid.SetVarcId(varc);
00402       GetStripEndsForVarc(rcid,plex);
00403     }
00404 
00405   } else if(rcid.GetElecType()==ElecType::kVA) {
00406     for(int geo=9; geo<21; geo++) {
00407       rcid.SetGeographicAddress(geo);
00408       GetStripEndsForMaster(rcid,plex);
00409     }
00410     
00411   } else {
00412     MSG("Hardware",Msg::kError) << "Unknown hardware type for crate " << rcid.AsString() << endl;
00413   }
00414 }
00415 
00416 void HardwareComponent::GetStripEndsForPlane(PlexPlaneId plane, PlexHandle /*plex*/)
00417 {
00418   for(UInt_t i=0;i<plane.NumberOfStrips();i++) {
00419     PlexStripEndId seid = PlexStripEndId(plane,i);
00420 
00421     seid.SetEnd(StripEnd::kPositive);
00422     if(seid.IsValid()) fEndList.push_back(seid);
00423 
00424     seid.SetEnd(StripEnd::kNegative);
00425     if(seid.IsValid()) fEndList.push_back(seid); 
00426   }
00427 }
00428 
00429 void HardwareComponent::GetStripEndsForSupermodule(Int_t sm, PlexHandle plex)
00430 {
00431   const std::vector<PlexStripEndId>& strips = plex.GetAllStripEnds();
00432   for(UInt_t i=0;i<strips.size();i++) {
00433     if(strips[i].GetSuperModule()==sm) 
00434       fEndList.push_back(strips[i]); 
00435   }
00436 
00437 }
00438 
00439 void HardwareComponent::GetStripEndsForVetoShield(PlexHandle plex)
00440 {
00441   const std::vector<PlexStripEndId>& strips = plex.GetAllStripEnds();
00442   for(UInt_t i=0;i<strips.size();i++) {
00443     if(strips[i].IsVetoShield()) 
00444       fEndList.push_back(strips[i]); 
00445   }
00446 }
00447 
00448 void HardwareComponent::GetStripEndsForSpectrometer(PlexHandle plex)
00449 {  
00450   const std::vector<PlexStripEndId>& strips = plex.GetAllStripEnds();
00451   for(UInt_t i=0;i<strips.size();i++) {
00452     if(strips[i].IsNearSpect()) 
00453       fEndList.push_back(strips[i]); 
00454   }
00455 }
00456 
00457 
00458 void HardwareComponent::GetStripEndsForCalorimeter(PlexHandle plex)
00459 {  
00460   const std::vector<PlexStripEndId>& strips = plex.GetAllStripEnds();
00461   for(UInt_t i=0;i<strips.size();i++) {
00462     if(!strips[i].IsNearSpect()) 
00463       fEndList.push_back(strips[i]); 
00464   }
00465 }
00466 
00467 
00468 
00469 void HardwareComponent::GetStripEndsForDetector(PlexHandle plex)
00470 {  
00471   const std::vector<PlexStripEndId>& strips = plex.GetAllStripEnds();
00472   for(UInt_t i=0;i<strips.size();i++) {
00473     fEndList.push_back(strips[i]); 
00474   }
00475 }
00476 
00477 
00478 
00479 
00480 
00481 

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