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

ReleaseType.cxx

Go to the documentation of this file.
00001 // $Id: ReleaseType.cxx,v 1.28 2009/12/18 06:41:43 asousa Exp $
00002  
00003 // C/C++
00004 #include <cassert>
00005 #include <iomanip>
00006 #include <iostream>
00007 #include <string>
00008 #include <sstream>
00009 
00010 #include <TString.h>
00011 
00012 #include "MessageService/MsgService.h"
00013 #include "Conventions/ReleaseType.h"
00014 
00015 CVSID("$Id: ReleaseType.cxx,v 1.28 2009/12/18 06:41:43 asousa Exp $");
00016 
00017 using std::string;
00018 
00019 
00020 bool ReleaseType::IsData(int type)   { 
00021   return ((type & ReleaseType::DataMCMask) == ReleaseType::kData);
00022 }
00023 
00024 bool ReleaseType::IsMC(int type)     { 
00025   return  ((type & ReleaseType::DataMCMask) > 0);
00026 }
00027 
00028 bool ReleaseType::IsTest(int type)     {
00029   return  ((type & ReleaseType::RecoTestMask) > 0);
00030 }
00031 
00032 //Start of MC Release Identification 
00033 
00034 bool ReleaseType::IsAvocado(int type) {
00035   return ((type & ReleaseType::DataMCMask) == ReleaseType::kAvocado);
00036 }
00037 
00038 bool ReleaseType::IsBeet(int type) {
00039   return ((type & ReleaseType::DataMCMask) == ReleaseType::kBeet);
00040 }
00041 
00042 bool ReleaseType::IsCarrot(int type) { 
00043   return ((type & ReleaseType::DataMCMask) == ReleaseType::kCarrot);
00044 }
00045 
00046 bool ReleaseType::IsDaikon(int type) { 
00047   return ((type & ReleaseType::DataMCMask) == ReleaseType::kDaikon);
00048 }
00049 
00050 bool ReleaseType::IsEggplant(int type) {
00051   return ((type & ReleaseType::DataMCMask) == ReleaseType::kEggplant);
00052 }
00053 
00054 bool ReleaseType::IsFava(int type) {
00055   return ((type & ReleaseType::DataMCMask) == ReleaseType::kFava);
00056 }
00057 
00058 bool ReleaseType::IsGarlic(int type) {
00059   return ((type & ReleaseType::DataMCMask) == ReleaseType::kGarlic);
00060 }
00061 
00062 bool ReleaseType::IsHops(int type) {
00063   return ((type & ReleaseType::DataMCMask) == ReleaseType::kHops);
00064 }
00065 
00066 bool ReleaseType::IsIceberg(int type) {
00067   return ((type & ReleaseType::DataMCMask) == ReleaseType::kIceberg);
00068 }
00069 
00070 bool ReleaseType::IsJicama(int type) {
00071   return ((type & ReleaseType::DataMCMask) == ReleaseType::kJicama);
00072 }
00073 
00074 // End of MC release information
00076 
00077 // Start of Reconstruction release type information
00078 
00079 bool ReleaseType::IsAsh(int type)  {
00080   return  ((type & ReleaseType::RecoMask) == ReleaseType::kAsh);
00081 }
00082 
00083 bool ReleaseType::IsBirch(int type)  { 
00084   return  ((type & ReleaseType::RecoMask) == ReleaseType::kBirch);
00085 }
00086 
00087 bool ReleaseType::IsCedar(int type)  { 
00088   return  ((type & ReleaseType::RecoMask) == ReleaseType::kCedar);
00089 }
00090 
00091 bool ReleaseType::IsDogwood(int type)  {
00092   return  ((type & ReleaseType::RecoMask) == ReleaseType::kDogwood);
00093 }
00094 
00095 bool ReleaseType::IsElm(int type)  {
00096   return  ((type & ReleaseType::RecoMask) == ReleaseType::kElm);
00097 }
00098 
00099 bool ReleaseType::IsFir(int type)  {
00100   return  ((type & ReleaseType::RecoMask) == ReleaseType::kFir);
00101 }
00102 
00103 bool ReleaseType::IsGinkgo(int type)  {
00104   return  ((type & ReleaseType::RecoMask) == ReleaseType::kGinkgo);
00105 }
00106 
00107 bool ReleaseType::IsHickory(int type)  {
00108   return  ((type & ReleaseType::RecoMask) == ReleaseType::kHickory);
00109 }
00110 
00111 bool ReleaseType::IsIvy(int type)  {
00112   return  ((type & ReleaseType::RecoMask) == ReleaseType::kIvy);
00113 }
00114 
00115 bool ReleaseType::IsJuniper(int type)  {
00116   return  ((type & ReleaseType::RecoMask) == ReleaseType::kJuniper);
00117 }
00118 
00120 // Get Combined Information
00121 
00122 ReleaseType::Release_t  ReleaseType::GetRecoInfo(int type){
00123   return (type & (ReleaseType::RecoMask + ReleaseType::SubRecoMask));
00124 }
00125 
00126 ReleaseType::Release_t  ReleaseType::GetMCInfo(int type){
00127   return (type & (ReleaseType::DataMCMask + ReleaseType::SubMCMask));
00128 }
00129 
00130 
00132 // Start Of Section dealing with SubSections
00133 
00134 int ReleaseType::GetMCSubVersion(int type)
00135 {
00136    int temp = type & SubMCMask;
00137    return temp/(SubMCMask/0xF);
00138 }
00139                                                                                 
00140 int ReleaseType::GetRecoSubVersion(int type)
00141 {
00142    int temp = type & SubRecoMask;
00143    return temp/(SubRecoMask/0xF);
00144 }
00145 
00146 // Provide a string to id things
00147 
00148 string ReleaseType::AsString(int type)
00149 {
00150   string dmc = "unknown";
00151   string reco = "unknownRel";
00152 
00153   if(ReleaseType::IsMC(type)){
00154     if(ReleaseType::IsAvocado(type)) dmc = "Avocado";
00155     else if(ReleaseType::IsBeet(type)) dmc = "Beet";
00156     else if(ReleaseType::IsCarrot(type)) dmc = "Carrot";
00157     else if(ReleaseType::IsDaikon(type)) dmc = "Daikon";
00158     else if(ReleaseType::IsEggplant(type)) dmc = "Eggplant";
00159     else if(ReleaseType::IsFava(type)) dmc = "Fava";  
00160     else if(ReleaseType::IsGarlic(type)) dmc = "Garlic";
00161     else if(ReleaseType::IsHops(type)) dmc = "Hops";
00162     else if(ReleaseType::IsIceberg(type)) dmc = "Iceberg";
00163     else if(ReleaseType::IsJicama(type)) dmc = "Jicama";
00164     else dmc = "unknown MC";
00165    
00166     dmc += GetVersionString(ReleaseType::GetMCSubVersion(type));
00167   }else{
00168     dmc = "Data";
00169   }
00170 
00171   if(ReleaseType::IsAsh(type)) reco = "Ash";
00172   if(ReleaseType::IsBirch(type)) reco = "Birch";
00173   if(ReleaseType::IsCedar(type)){
00174      if(ReleaseType::GetRecoInfo(type) == ReleaseType::kCedarPhy ||
00175          ReleaseType::GetRecoInfo(type) == ReleaseType::kR1_24_3 )
00176         reco = "CedarPhy";
00177      else  reco = "Cedar";
00178   }
00179   if(ReleaseType::IsDogwood(type)) {
00180     if(ReleaseType::GetRecoInfo(type) == ReleaseType::kDogwood1 ||
00181        ReleaseType::GetRecoInfo(type) == ReleaseType::kR2_0_1 )
00182       reco = "Dogwood";
00183     else if(ReleaseType::GetRecoInfo(type) == ReleaseType::kDogwood2 ||
00184             ReleaseType::GetRecoInfo(type) == ReleaseType::kR2_0_2 )
00185       reco = "Dogwood";
00186     else if(ReleaseType::GetRecoInfo(type) == ReleaseType::kDogwood3 ||
00187             ReleaseType::GetRecoInfo(type) == ReleaseType::kR2_0_3 )
00188       reco = "Dogwood";
00189     else reco = "Dogwood";    
00190   }
00191   if(ReleaseType::IsElm(type)) reco = "Elm";
00192   if(ReleaseType::IsFir(type)) reco = "Fir";
00193   if(ReleaseType::IsGinkgo(type)) reco = "Ginkgo";
00194   if(ReleaseType::IsHickory(type)) reco = "Hickory";
00195   if(ReleaseType::IsIvy(type)) reco = "Ivy";
00196   if(ReleaseType::IsJuniper(type)) reco = "Juniper";
00197 
00198   if(ReleaseType::IsTest(type)) reco += "Test";
00199   reco += GetVersionString(ReleaseType::GetRecoSubVersion(type));
00200 
00201   string name = reco + " " + dmc;
00202 
00203   return name;
00204 }                             
00205 
00206 std::string ReleaseType::GetVersionString(int val)
00207 {
00208    char dum[4];
00209    sprintf(dum, "V%02d", val);
00210    std::string temp = dum;
00211    return temp;
00212 }
00213 
00214 //Convert strings back to a Release_t
00215 ReleaseType::Release_t ReleaseType::StringToType(const char* nameChar){
00216   string name(nameChar);
00217   Release_t type = 0x00;
00218 
00219   string dmc = name.substr(1+name.find(" "));
00220   if(dmc.find("Data") != string::npos) type += kData;
00221 
00222   // Now could just check the first letter if speed is an issue.
00223   else if(dmc.find("Avocado") != string::npos ) type += kAvocado;
00224   else if(dmc.find("Beet") != string::npos) type += kBeet;
00225   else if(dmc.find("Carrot") != string::npos) type += kCarrot;
00226   else if(dmc.find("Daikon") != string::npos) type += kDaikon;
00227   else if(dmc.find("Eggplant") != string::npos) type += kEggplant;
00228   else if(dmc.find("Fava") != string::npos) type += kFava;
00229   else if(dmc.find("Garlic") != string::npos) type += kGarlic;
00230   else if(dmc.find("Hops") != string::npos) type += kHops;
00231   else if(dmc.find("Iceberg") != string::npos) type += kIceberg;
00232   else if(dmc.find("Jicama") != string::npos) type += kJicama;
00233   // No good way to treat "unknown MC"; leave it as "kUnknown"
00234   else type = kUnknown;
00235 
00236   string dmcver = dmc.substr(1 + dmc.find_last_of("V"));
00237   if(dmcver.find("00") != string::npos) type += k00;  
00238   else if(dmcver.find("01") != string::npos) type += k01;
00239   else if(dmcver.find("02") != string::npos) type += k02;
00240   else if(dmcver.find("03") != string::npos) type += k03;
00241   else if(dmcver.find("04") != string::npos) type += k04; 
00242   else if(dmcver.find("05") != string::npos) type += k05;
00243   else if(dmcver.find("06") != string::npos) type += k06;
00244   else if(dmcver.find("07") != string::npos) type += k07;
00245   else if(dmcver.find("08") != string::npos) type += k08;
00246   else if(dmcver.find("09") != string::npos) type += k09;
00247   else if(dmcver.find("10") != string::npos) type += k10;
00248   else type += k00;
00249 
00250   string reco = name.substr(0, name.find(" "));
00251   if( type != kUnknown ){
00252     if (reco.find("Ash") != string::npos) type += kAsh;
00253     else if (reco.find("Birch") != string::npos) type += kBirch;
00254     else if (reco.find("Cedar") != string::npos){
00255       if(reco.find("CedarPhy") != string::npos) type += kCedar;
00256       else if(reco.find("Cedar_Phy") != string::npos) type += kCedar;
00257       else type += kCedar;
00258     }else if (reco.find("Dogwood") != string::npos){ 
00259       if(reco.find("Dogwood0") != string::npos) type += kDogwood;
00260       else if(reco.find("Dogwood1") != string::npos) type += kDogwood;
00261       else if(reco.find("Dogwood2") != string::npos) type += kDogwood;
00262       else if(reco.find("Dogwood3") != string::npos) type += kDogwood;
00263       type += kDogwood;
00264     }else if (reco.find("Elm") != string::npos) type += kElm;
00265     else if (reco.find("Fir") != string::npos) type += kFir;
00266     else if (reco.find("Ginkgo") != string::npos) type += kGinkgo;
00267     else if (reco.find("Hickory") != string::npos) type += kHickory;
00268     else if (reco.find("Ivy") != string::npos) type += kIvy;
00269     else if (reco.find("Juniper") != string::npos) type += kJuniper;
00270 
00271     if(name.find("Test")  != string::npos) type += kTest;
00272 
00273     // Unknown reconstruction is possible; just leave that bit 0.
00274 
00275     string rver = reco.substr(1 + reco.find_last_of("V"));
00276     if(rver.find("00") != string::npos) type += kR00;
00277     else if(rver.find("01") != string::npos) type += kR01;
00278     else if(rver.find("02") != string::npos) type += kR02;
00279     else if(rver.find("03") != string::npos) type += kR03;
00280     else if(rver.find("04") != string::npos) type += kR04;
00281     else if(rver.find("05") != string::npos) type += kR05;
00282     else if(rver.find("06") != string::npos) type += kR06;
00283     else if(rver.find("07") != string::npos) type += kR07;
00284     else if(rver.find("08") != string::npos) type += kR08;
00285     else if(rver.find("09") != string::npos) type += kR09;
00286     else if(rver.find("10") != string::npos) type += kR10;
00287     else type += kR00;
00288   }  // if (a known dmc type)
00289   
00290   return type;
00291 }
00292 
00293 ReleaseType::Release_t ReleaseType::MakeReleaseType(std::string fTitle, std::string mcinfo)
00294 //Warning: Deprecated from R1.28 on, meaning should not be used for
00295 //Dogwood and more modern releases.
00296 
00297 //  string relName = NtpStRecord->GetTitle();
00298 //  string mcinfo =  NtpStRecord->mchdr.geninfo.codename;
00299 /*
00300     Suggested Usage with NtpStRecord str;
00301 
00302     string relName = str->GetTitle();
00303     string mcinfo = "";
00304     if(vc.GetSimFlag() == SimFlag::kMC){
00305        mcinfo = "Carrot";
00306        string temp = str->mchdr.geninfo.codename;
00307        if(temp.size() != 0){   mcinfo = temp;  }
00308     }
00309     release = ReleaseType::MakeReleaseType(relName, mcinfo);
00310 */
00311 {
00312    string relName = fTitle;
00313    string reco = relName.substr(0,relName.find_first_of("("));
00314    ReleaseType::Release_t release = ReleaseType::kUnknown;
00315 
00316    //Setting for dealing with Cedar and Cedar Variants
00317    if(strstr(reco.c_str(), "CEDAR") != 0 || 
00318        strstr(reco.c_str(), "CHERRY") != 0 ){
00319 
00320       if(reco == "CEDAR"){
00321          release = ReleaseType::kCedar;   //Fine for Data or Carrot
00322          string temp = relName.substr(22,1);
00323          if(temp == "1") release = ReleaseType::kR1_24_1;
00324       }
00325 
00326       if(reco == "CEDAR_PHY"){
00327          release = ReleaseType::kCedarPhy;
00328          if(strstr(fTitle.c_str(), "Daikon") != 0)   release = ReleaseType::kR1_24_2;
00329 
00330          std::string software = relName.substr(relName.find_first_of(":")+1,
00331                relName.find_first_of(",") - relName.find_first_of(":") - 1);
00332 
00333          if(software == "R1.24.2") release = ReleaseType::kR1_24_2;
00334          if(software == "R1.24.3") release = ReleaseType::kR1_24_3;
00335 
00336       }
00337 
00338       if(reco == "CHERRY") release = ReleaseType::kR1_24_Cal;
00339    }
00340    else release = ReleaseType::kBirch;
00341 
00342 
00343    //Setting Data/MC version
00344    if(mcinfo.size() > 0){
00345      if(strstr(mcinfo.c_str(), "daikon") != 0)
00346         release += ReleaseType::kDaikon;
00347      else
00348         release += ReleaseType::kCarrot;
00349                                                                                 
00350      if(strstr(mcinfo.c_str(), "00") != 0) release += ReleaseType::k00;
00351      if(strstr(mcinfo.c_str(), "01") != 0) release += ReleaseType::k01;
00352      if(strstr(mcinfo.c_str(), "02") != 0) release += ReleaseType::k02;
00353      if(strstr(mcinfo.c_str(), "03") != 0) release += ReleaseType::k03;
00354      if(strstr(mcinfo.c_str(), "04") != 0) release += ReleaseType::k04;
00355      if(strstr(mcinfo.c_str(), "05") != 0) release += ReleaseType::k05;
00356      if(strstr(mcinfo.c_str(), "06") != 0) release += ReleaseType::k06;
00357      if(strstr(mcinfo.c_str(), "07") != 0) release += ReleaseType::k07;
00358      if(strstr(mcinfo.c_str(), "08") != 0) release += ReleaseType::k08;
00359      if(strstr(mcinfo.c_str(), "09") != 0) release += ReleaseType::k09;
00360    }
00361    else
00362      release += ReleaseType::kData;
00363  
00364   return release;
00365 }
00366 
00367 //-------------------------------------------------------------------------------------------
00368 const std::pair<std::string, std::string> ReleaseType::AsBatchString(const int type)
00369 {
00370    //
00371    // Return pair of strings: 
00372    //    1st element is reconstruction release name as used for pnfs file storage
00373    //    2nd element is Monte-Carlo release name as used for pnfs file storage
00374    //
00375 
00376   string dmc = "unknown_mc";
00377   string reco = "unknown_reco";
00378 
00379   if(ReleaseType::IsMC(type))
00380   {
00381      if(ReleaseType::IsAvocado(type))       dmc = "avocado";
00382      else if(ReleaseType::IsBeet(type))     dmc = "beet";
00383      else if(ReleaseType::IsCarrot(type))   dmc = "carrot";
00384      else if(ReleaseType::IsDaikon(type))   dmc = "daikon";
00385      else if(ReleaseType::IsEggplant(type)) dmc = "eggplant";
00386      else if(ReleaseType::IsFava(type))     dmc = "fava";  
00387      else if(ReleaseType::IsGarlic(type))   dmc = "garlic";
00388      else if(ReleaseType::IsHops(type))     dmc = "hops";
00389      else if(ReleaseType::IsIceberg(type))  dmc = "iceberg";
00390      else if(ReleaseType::IsJicama(type))   dmc = "jicama";
00391 
00392      if(ReleaseType::GetMCSubVersion(type) < 0 || ReleaseType::GetMCSubVersion(type) > 99)
00393      {
00394         std::cerr << "ReleaseType::AsBatchString - bad Monte-Carlo version: " 
00395                   << ReleaseType::GetMCSubVersion(type) << std::endl;
00396      }
00397      else
00398      {
00399         std::stringstream mver;
00400         mver << std::setw(2) << std::setfill('0') << ReleaseType::GetMCSubVersion(type);
00401         dmc = dmc + "_" + mver.str();
00402      }     
00403   }
00404   else
00405   {
00406      dmc = "data";
00407   }
00408   
00409   if(ReleaseType::IsAsh(type)) reco = "ash";
00410   if(ReleaseType::IsBirch(type)) reco = "birch";
00411   if(ReleaseType::IsCedar(type))
00412   {
00413      if(ReleaseType::GetRecoSubVersion(type) == 0)
00414      {
00415         reco = "cedar";
00416      }
00417      else if(ReleaseType::GetRecoSubVersion(type) == 1)
00418      {
00419         reco = "cedar";
00420      }
00421      else if(ReleaseType::GetRecoSubVersion(type) == 2)
00422      {
00423         reco = "cedar_phy";
00424      }
00425      else if(ReleaseType::GetRecoSubVersion(type) == 3)
00426      {
00427         reco = "cedar_phy_bhcurv";
00428      }
00429      else
00430      {
00431         std::cerr << "ReleaseType::AsBatchString - bad cedar reconstuction version: "
00432                   << ReleaseType::GetRecoSubVersion(type) << std::endl; 
00433      }
00434   }
00435   if(ReleaseType::IsDogwood(type))
00436   {
00437     if(ReleaseType::GetRecoSubVersion(type) == 0)
00438       {
00439         reco = "dogwood0";
00440       }
00441     else if(ReleaseType::GetRecoSubVersion(type) == 1)
00442       {
00443         reco = "dogwood1";
00444       }
00445     else if(ReleaseType::GetRecoSubVersion(type) == 2)
00446       {
00447         reco = "dogwood2";
00448       }
00449     else if(ReleaseType::GetRecoSubVersion(type) == 3)
00450       {
00451         reco = "dogwood3";
00452       }
00453     else
00454       {
00455         std::cerr << "ReleaseType::AsBatchString - bad dogwood reconstuction version: "
00456                   << ReleaseType::GetRecoSubVersion(type) << std::endl; 
00457       }
00458   }
00459   if(ReleaseType::IsElm(type)) reco = "elm";
00460   if(ReleaseType::IsFir(type)) reco = "fir";
00461   if(ReleaseType::IsGinkgo(type)) reco = "ginkgo";
00462   if(ReleaseType::IsHickory(type)) reco = "hickory";
00463   if(ReleaseType::IsIvy(type)) reco = "ivy";
00464   if(ReleaseType::IsJuniper(type)) reco = "juniper";
00465  
00466   if(ReleaseType::IsTest(type)) reco += "test";
00467 
00468   return std::pair<std::string, std::string>(dmc, reco);
00469 }
00470 
00471 //_____________________________________________________________________________
00472 ReleaseType::Release_t ReleaseType::GetRecoRelease(
00473                                           const char* recoreleasename) {
00474   // Purpose: Convert text string recoreleasename to an ERecoRelease.
00475   // Returns kUnknown if unknown.
00476   ReleaseType::Release_t result = kUnknown;
00477 
00478   TString tmpstr(recoreleasename);
00479   tmpstr.ToLower();
00480   if ( strstr(tmpstr.Data(),"ash") != 0 )  result = kAsh;
00481   else if ( strstr(tmpstr.Data(),"birch") != 0 ) result = kBirch;
00482   else if ( strstr(tmpstr.Data(),"cedar") != 0 ) result = kCedar;
00483   else if ( strstr(tmpstr.Data(),"dogwood") != 0 ) result = kDogwood;
00484   else if ( strstr(tmpstr.Data(),"elm") != 0 ) result = kElm;
00485   else if ( strstr(tmpstr.Data(),"fir") != 0 ) result = kFir;
00486   else if ( strstr(tmpstr.Data(),"ginkgo") != 0 ) result = kGinkgo;
00487   else if ( strstr(tmpstr.Data(),"hickory") != 0 ) result = kHickory;
00488   else if ( strstr(tmpstr.Data(),"ivy") != 0 ) result = kIvy;
00489   else if ( strstr(tmpstr.Data(),"juniper") != 0 ) result = kJuniper;
00490 
00491   if(result == kUnknown) return result;
00492   
00493   if(strstr(tmpstr.Data(),"test") != 0) result |= kTest;
00494 
00495   return result;
00496 }
00497 
00498 //_____________________________________________________________________________
00499 const char* ReleaseType::AsString(ReleaseType::ERecoRelease recorelease){
00500   // Purpose: Convert enumerated recorelease to string
00501   
00502   switch ( recorelease ) {
00503 
00504   case kAsh:      return "Ash";
00505   case kBirch:    return "Birch";
00506   case kCedar:    return "Cedar";
00507   case kDogwood:  return "Dogwood";
00508   case kElm:      return "Elm";
00509   case kFir:      return "Fir";
00510   case kGinkgo:   return "Ginkgo";
00511   case kHickory:  return "Hickory";
00512   case kIvy:      return "Ivy";
00513   case kJuniper:  return "Juniper";
00514   default:
00515     MSG("Conv",Msg::kError) << "ReleaseType::AsString for unknown "
00516                             << "ERecoRelease " << recorelease 
00517                             << ". Fix method. Abort." << endl;
00518     abort();
00519   }
00520   
00521 }
00522 
00523 //_____________________________________________________________________________
00524 ReleaseType::Release_t ReleaseType::GetSubRecoRelease(
00525                                         const char* subrecoreleasename) {
00526   // Purpose: Search for substring in subrecoreleasename corresponding to
00527   //          an ESubRecoRelease code.  Returns kUnknown if no match.
00528 
00529   TString tmpstr(subrecoreleasename);
00530   tmpstr.ToLower();
00531   if ( strstr(tmpstr.Data(),"00") != 0 ) return kR00;
00532   else if ( strstr(tmpstr.Data(),"01") != 0 ) return kR01;
00533   else if ( strstr(tmpstr.Data(),"02") != 0 ) return kR02;
00534   else if ( strstr(tmpstr.Data(),"03") != 0 ) return kR03;
00535   else if ( strstr(tmpstr.Data(),"04") != 0 ) return kR04;
00536   else if ( strstr(tmpstr.Data(),"05") != 0 ) return kR05;
00537   else if ( strstr(tmpstr.Data(),"06") != 0 ) return kR06;
00538   else if ( strstr(tmpstr.Data(),"07") != 0 ) return kR07;
00539   else if ( strstr(tmpstr.Data(),"08") != 0 ) return kR08;
00540   else if ( strstr(tmpstr.Data(),"09") != 0 ) return kR09;
00541   else if ( strstr(tmpstr.Data(),"10") != 0 ) return kR10;
00542   return kUnknown;
00543   
00544 }
00545 
00546 //_____________________________________________________________________________
00547 const char* ReleaseType::AsString(ReleaseType::ESubRecoRelease subrecorelease){
00548   // Purpose: Convert enumerated subrecorelease to string
00549   
00550   switch ( subrecorelease ) {
00551 
00552   case kR00:    return "00";
00553   case kR01:    return "01";
00554   case kR02:    return "02";
00555   case kR03:    return "03";
00556   case kR04:    return "04";
00557   case kR05:    return "05";
00558   case kR06:    return "06";
00559   case kR07:    return "07";
00560   case kR08:    return "08";
00561   case kR09:    return "09";
00562   case kR10:    return "10";
00563   default:
00564     MSG("Conv",Msg::kError) << "ReleaseType::AsString for unknown "
00565                             << "ESubRecoRelease " << subrecorelease 
00566                             << ". Fix method. Abort." << endl;
00567     abort();
00568   }
00569   
00570 }
00571 
00572 //_____________________________________________________________________________
00573 ReleaseType::Release_t ReleaseType::GetDataMCRelease(
00574                                            const char* datamcreleasename) {
00575   // Purpose: Search for substring in datamcreleasename corresponding to
00576   //          an EDataMCRelease.  Returns EDataMCRelease if found, else
00577   //          kUnknown.
00578 
00579   TString tmpstr(datamcreleasename);
00580   tmpstr.ToLower();
00581   if ( strstr(tmpstr.Data(),"data") != 0 ) return kData;
00582   else if ( strstr(tmpstr.Data(),"avocado") != 0 ) return kAvocado;
00583   else if ( strstr(tmpstr.Data(),"beet") != 0 ) return kBeet;
00584   else if ( strstr(tmpstr.Data(),"carrot") != 0 ) return kCarrot;
00585   else if ( strstr(tmpstr.Data(),"daikon") != 0 ) return kDaikon;
00586   else if ( strstr(tmpstr.Data(),"eggplant") != 0 ) return kEggplant;
00587   else if ( strstr(tmpstr.Data(),"fava") != 0 ) return kFava;
00588   else if ( strstr(tmpstr.Data(),"garlic") != 0 ) return kGarlic;
00589   else if ( strstr(tmpstr.Data(),"hops") != 0 ) return kHops;
00590   else if ( strstr(tmpstr.Data(),"iceberg") != 0 ) return kIceberg;
00591   else if ( strstr(tmpstr.Data(),"jicama") != 0 ) return kJicama;
00592   return kUnknown;
00593   
00594 }
00595 
00596 
00597 //_____________________________________________________________________________
00598 const char* ReleaseType::AsString(ReleaseType::EDataMCRelease datamcrelease) {
00599   // Purpose: Convert enumerated datamcrelease to string
00600   
00601   switch ( datamcrelease ) {
00602 
00603   case kData:       return "Data";
00604   case kAvocado:    return "Avocado";
00605   case kBeet:       return "Beet";
00606   case kCarrot:     return "Carrot";
00607   case kDaikon:     return "Daikon";
00608   case kEggplant:   return "Eggplant";
00609   case kFava:       return "Fava";
00610   case kGarlic:     return "Garlic";
00611   case kHops:       return "Hops";
00612   case kIceberg:    return "Iceberg";
00613   case kJicama:     return "Jicama";
00614   default:
00615     MSG("Conv",Msg::kError) << "ReleaseType::AsString for unknown "
00616                             << "EDataMCRelease " << datamcrelease 
00617                             << ". Fix method. Abort." << endl;
00618     abort();
00619   }
00620   
00621 }
00622 
00623 //_____________________________________________________________________________
00624 ReleaseType::Release_t ReleaseType::GetSubMCRelease(
00625                                           const char* submcreleasename) {
00626   // Purpose: Search for substring in submcreleasename corresponding to
00627   //          an ESubMCRelease.  Returns matching ESubMCRelease if found,
00628   //          else kUnknown if no match.
00629 
00630   TString tmpstr(submcreleasename);
00631   tmpstr.ToLower();
00632   if ( strstr(tmpstr.Data(),"00") != 0 ) return k00;
00633   else if ( strstr(tmpstr.Data(),"01") != 0 ) return k01;
00634   else if ( strstr(tmpstr.Data(),"02") != 0 ) return k02;
00635   else if ( strstr(tmpstr.Data(),"03") != 0 ) return k03;
00636   else if ( strstr(tmpstr.Data(),"04") != 0 ) return k04;
00637   else if ( strstr(tmpstr.Data(),"05") != 0 ) return k05;
00638   else if ( strstr(tmpstr.Data(),"06") != 0 ) return k06;
00639   else if ( strstr(tmpstr.Data(),"07") != 0 ) return k07;
00640   else if ( strstr(tmpstr.Data(),"08") != 0 ) return k08;
00641   else if ( strstr(tmpstr.Data(),"09") != 0 ) return k09;
00642   else if ( strstr(tmpstr.Data(),"10") != 0 ) return k10;
00643   return kUnknown;
00644   
00645 }
00646 
00647 //_____________________________________________________________________________
00648 const char* ReleaseType::AsString(ReleaseType::ESubMCRelease submcrelease) {
00649   // Purpose: Convert enumerated submcrelease to string
00650   
00651   switch ( submcrelease ) {
00652 
00653   case k00:    return "00";
00654   case k01:    return "01";
00655   case k02:    return "02";
00656   case k03:    return "03";
00657   case k04:    return "04";
00658   case k05:    return "05";
00659   case k06:    return "06";
00660   case k07:    return "07";
00661   case k08:    return "08";
00662   case k09:    return "09";
00663   case k10:    return "10";
00664   default:
00665     MSG("Conv",Msg::kError) << "ReleaseType::AsString for unknown "
00666                             << "ESubMCRelease " << submcrelease 
00667                             << ". Fix method. Abort." << endl;
00668     abort();
00669   }
00670   
00671 }
00672 
00673 //_____________________________________________________________________________
00674 ReleaseType::Release_t ReleaseType::GetTestFlag(const char* testflagname)
00675 {
00676   // Purpose: Search for substring in testflagname corresponding to
00677   //          an ETestFlag.  Returns matching ETestFlag if found, else
00678   //          ETestFlag::kStandard.
00679 
00680   TString tmpstr(testflagname);
00681   tmpstr.ToLower();
00682   if ( strstr(tmpstr.Data(),"test") != 0 ) return kTest;
00683   return kStandard; // default
00684 
00685 }
00686 
00687 //_____________________________________________________________________________
00688 const char* ReleaseType::AsString(ReleaseType::ETestFlag testflag)
00689 {
00690   switch ( testflag) {
00691   case kStandard:    return "";
00692   case kTest:        return "test";
00693   default:
00694     MSG("Conv",Msg::kError) << "ReleaseType::AsString for unknown "
00695                             << "ETestFlag " << testflag
00696                             << ". Fix method. Abort." << endl;
00697     abort();
00698   }
00699 }
00700 
00701 //_____________________________________________________________________________
00702 ReleaseType::Release_t ReleaseType::GetProductionRelease(
00703                                           const char* prodreleasename) {
00704   // Purpose: Convert text string prodreleasename to release type.
00705   // Returns kUnknown if unknown.
00706   // If prodreleasename is from reco batch production, 
00707   // e.g. "dogwood2" or "dogwoodtest0", returns ReleaseType as combination of 
00708   // ERecoRelease, ESubReco, and ETestFlag.
00709   // If prodreleasename is from MC production, e.g. Daikon_00, returns
00710   // ReleaseType as combination of EDataMCRelease and ESubMCRelease.
00711 
00712   ReleaseType::Release_t result = kUnknown;
00713                                                             
00714   result = ReleaseType::GetRecoRelease(prodreleasename);
00715   
00716   if ( result != kUnknown ) {
00717     // Batch production. Add test flag.
00718     result |= ReleaseType::GetTestFlag(prodreleasename);
00719     // Add version
00720     std::string tmpstr = std::string(prodreleasename);
00721     //  char version = tmpstr[tmpstr.size()-1];
00722     char ver[2];  sprintf(ver, "0%c", tmpstr[tmpstr.size()-1]);
00723     ReleaseType::Release_t subver = ReleaseType::GetSubRecoRelease(ver);
00724     if ( subver != kUnknown ) result |= subver;
00725   }
00726   else {
00727     result = ReleaseType::GetDataMCRelease(prodreleasename);
00728     if ( result != kUnknown ) {
00729       // MC production.  Add version.
00730       ReleaseType::Release_t subver 
00731                               = ReleaseType::GetSubMCRelease(prodreleasename);
00732       if ( subver != kUnknown ) result |= subver;
00733     }
00734   }
00735   
00736   return result;
00737 }

Generated on Mon Feb 15 11:07:30 2010 for loon by  doxygen 1.3.9.1