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

DataQualityLookup.cxx

Go to the documentation of this file.
00001 #include "DataQualityLookup.h"
00002 
00003 #include "MessageService/MsgService.h"     
00004 #include "Validity/VldContext.h"
00005 #include "Conventions/SimFlag.h"
00006 
00007 #include "TSystem.h"
00008 #include "TString.h"
00009 #include <fstream>
00010 
00011 //
00012 // $Log $
00013 //
00014 
00015 ClassImp(DataQualityLookup)
00016  
00017 CVSID("$Id: DataQualityLookup.cxx,v 1.1 2006/03/20 12:09:27 blake Exp $");
00018 
00019 DataQualityLookup::DataQualityLookup()
00020 {
00021   Int_t bin,ctr;
00022   Int_t begcxt,endcxt;
00023   Int_t status;
00024 
00025   myBegVldCxtCoilSM1 = new Int_t[1000];
00026   myEndVldCxtCoilSM1 = new Int_t[1000];
00027   myCoilStatusSM1 = new Int_t[1000];
00028 
00029   myBegVldCxtCoilSM2 = new Int_t[1000];
00030   myEndVldCxtCoilSM2 = new Int_t[1000];
00031   myCoilStatusSM2 = new Int_t[1000];
00032 
00033   myBegVldCxtHvSM1 = new Int_t[1000];
00034   myEndVldCxtHvSM1 = new Int_t[1000];
00035   myHvStatusSM1 = new Int_t[1000];
00036 
00037   myBegVldCxtHvSM2 = new Int_t[1000];
00038   myEndVldCxtHvSM2 = new Int_t[1000];
00039   myHvStatusSM2 = new Int_t[1000];
00040 
00041   for(bin=0;bin<1000;bin++){
00042     myBegVldCxtCoilSM1[bin]=-1;
00043     myEndVldCxtCoilSM1[bin]=-1;
00044     myCoilStatusSM1[bin]=-1;
00045 
00046     myBegVldCxtCoilSM2[bin]=-1;
00047     myEndVldCxtCoilSM2[bin]=-1;
00048     myCoilStatusSM2[bin]=-1;
00049 
00050     myBegVldCxtHvSM1[bin]=-1;
00051     myEndVldCxtHvSM1[bin]=-1;
00052     myHvStatusSM1[bin]=-1;
00053 
00054     myBegVldCxtHvSM2[bin]=-1;
00055     myEndVldCxtHvSM2[bin]=-1;
00056     myHvStatusSM2[bin]=-1;
00057   }
00058 
00059   MSG("DataQualityFilter",Msg::kVerbose) << " ... Initializing Data Quality Lookup Table " << endl;
00060 
00061   ctr=0;
00062   TString fCoilStatusCalSM1 = gSystem->ExpandPathName("$DCSPATH/my_coilstatus_SM1.dat");
00063   ifstream mycoilcalSM1(fCoilStatusCalSM1.Data(),ios::in);
00064   if( mycoilcalSM1 ){
00065     MSG("DataQualityFilter",Msg::kVerbose) << "     FOUND SM1 COIL STATUS TABLE " << endl;
00066     while( !mycoilcalSM1.eof() ){
00067       begcxt=-1; endcxt=-1; status=-1;
00068       mycoilcalSM1 >> begcxt >> endcxt >> status;
00069       if(ctr<10) MSG("DataQualityFilter",Msg::kVerbose) << "      " << begcxt << "->" << endcxt << "  " << status << endl;
00070       bin=ctr;
00071       if(begcxt>-1){
00072         if(bin<1000){
00073           myBegVldCxtCoilSM1[bin]=begcxt;
00074           myEndVldCxtCoilSM1[bin]=endcxt;
00075           myCoilStatusSM1[bin]=status;
00076         }
00077         else{
00078           MSG("DataQualityFilter",Msg::kVerbose) << "     WARNING: OVERFLOW IN SM1 COIL STATUS TABLES " << endl;
00079         }
00080       }
00081       ctr++;
00082     }
00083   }
00084   else{
00085     MSG("DataQualityFilter",Msg::kVerbose) << "     FAILED TO FIND SM1 COIL STATUS TABLE " << endl;
00086   }
00087   mycoilcalSM1.close();
00088 
00089   ctr=0;
00090   TString fCoilStatusCalSM2 = gSystem->ExpandPathName("$DCSPATH/my_coilstatus_SM2.dat");
00091   ifstream mycoilcalSM2(fCoilStatusCalSM2.Data(),ios::in);
00092   if( mycoilcalSM2 ){
00093     MSG("DataQualityFilter",Msg::kVerbose) << "     FOUND SM2 COIL STATUS TABLE " << endl;
00094     while( !mycoilcalSM2.eof() ){
00095       begcxt=-1; endcxt=-1; status=-1;
00096       mycoilcalSM2 >> begcxt >> endcxt >> status;    
00097       if(ctr<10) MSG("DataQualityFilter",Msg::kVerbose) << "      " << begcxt << "->" << endcxt << "  " << status << endl;
00098       bin=ctr;
00099       if(begcxt>-1){
00100         if(bin<1000){
00101           myBegVldCxtCoilSM2[bin]=begcxt;
00102           myEndVldCxtCoilSM2[bin]=endcxt;
00103           myCoilStatusSM2[bin]=status;
00104         }
00105         else{
00106           MSG("DataQualityFilter",Msg::kVerbose) << "     WARNING: OVERFLOW IN SM2 COIL STATUS TABLES " << endl;
00107         }
00108       }
00109       ctr++;
00110     }
00111   }
00112   else{
00113     MSG("DataQualityFilter",Msg::kVerbose) << "     FAILED TO FIND SM2 COIL STATUS TABLE " << endl;
00114   }
00115   mycoilcalSM2.close();
00116 
00117   ctr=0;
00118   TString fHvStatusCalSM1 = gSystem->ExpandPathName("$DCSPATH/my_hvstatus_SM1.dat");
00119   ifstream myhvcalSM1(fHvStatusCalSM1.Data(),ios::in);
00120   if( myhvcalSM1 ){
00121     MSG("DataQualityFilter",Msg::kVerbose) << "     FOUND SM1 HV STATUS TABLE " << endl;
00122     while( !myhvcalSM1.eof() ){
00123       begcxt=-1; endcxt=-1; status=-1;
00124       myhvcalSM1 >> begcxt >> endcxt >> status; 
00125       if(ctr<10) MSG("DataQualityFilter",Msg::kVerbose) << "      " << begcxt << "->" << endcxt << "  " << status << endl;
00126       bin=ctr;
00127       if(begcxt>-1){
00128         if(bin<1000){
00129           myBegVldCxtHvSM1[bin]=begcxt;
00130           myEndVldCxtHvSM1[bin]=endcxt;
00131           myHvStatusSM1[bin]=status;
00132         }
00133         else{
00134           MSG("DataQualityFilter",Msg::kVerbose) << "     WARNING: OVERFLOW IN SM1 HV STATUS TABLE " << endl;
00135         }
00136       }
00137       ctr++;
00138     }
00139   }
00140   else{
00141     MSG("DataQualityFilter",Msg::kVerbose) << "     FAILED TO FIND SM1 HV STATUS TABLE " << endl;
00142   }
00143   myhvcalSM1.close();
00144 
00145   ctr=0;
00146   TString fHvStatusCalSM2 = gSystem->ExpandPathName("$DCSPATH/my_hvstatus_SM2.dat");
00147   ifstream myhvcalSM2(fHvStatusCalSM2.Data(),ios::in);
00148   if( myhvcalSM2 ){
00149     MSG("DataQualityFilter",Msg::kVerbose) << "     FOUND SM2 HV STATUS TABLE " << endl;
00150     while( !myhvcalSM2.eof() ){
00151       begcxt=-1; endcxt=-1; status=-1;
00152       myhvcalSM2 >> begcxt >> endcxt >> status;
00153       if(ctr<10) MSG("DataQualityFilter",Msg::kVerbose) << "      " << begcxt << "->" << endcxt << "  " << status << endl; 
00154       bin=ctr;
00155       if(begcxt>-1){
00156         if(bin<1000){
00157           myBegVldCxtHvSM2[bin]=begcxt;
00158           myEndVldCxtHvSM2[bin]=endcxt;
00159           myHvStatusSM2[bin]=status;
00160         }
00161         else{
00162           MSG("DataQualityFilter",Msg::kVerbose) << "     WARNING: OVERFLOW IN SM2 HV STATUS TABLE " << endl;
00163         }
00164       }
00165       ctr++;
00166     }
00167   }
00168   else{
00169     MSG("DataQualityFilter",Msg::kVerbose) << "     FAILED TO FIND SM2 HV STATUS TABLE " << endl;
00170   }
00171   myhvcalSM2.close();
00172 
00173   MSG("DataQualityFilter",Msg::kVerbose) << " ... Data Quality Lookup Table Initialized " << endl;
00174 }
00175   
00176 DataQualityLookup::DataQualityLookup(const DataQualityLookup& rhs) :
00177   TObject(rhs)
00178 {
00179   
00180 }
00181   
00182 DataQualityLookup::~DataQualityLookup()
00183 {
00184   delete [] myBegVldCxtCoilSM1;
00185   delete [] myEndVldCxtCoilSM1;
00186   delete [] myCoilStatusSM1;
00187 
00188   delete [] myBegVldCxtCoilSM2;
00189   delete [] myEndVldCxtCoilSM2;
00190   delete [] myCoilStatusSM2;
00191 
00192   delete [] myBegVldCxtHvSM1;
00193   delete [] myEndVldCxtHvSM1;
00194   delete [] myHvStatusSM1;
00195 
00196   delete [] myBegVldCxtHvSM2;
00197   delete [] myEndVldCxtHvSM2;
00198   delete [] myHvStatusSM2;
00199 }
00200 
00201 Int_t DataQualityLookup::GetCoilStatus(VldContext vldc)
00202 {
00203   Int_t mystatus=-1; 
00204   Int_t mystatus1=-1,mystatus2=-1;
00205  
00206   if( vldc.GetDetector()==Detector::kFar ){
00207     mystatus1=this->GetFarDetCoilStatus(vldc,1);
00208     mystatus2=this->GetFarDetCoilStatus(vldc,2);
00209     if( mystatus1==0 || mystatus2==0 ) mystatus=0;
00210     if( mystatus1==1 && mystatus2==1 ) mystatus=1;
00211   }
00212 
00213   if( vldc.GetDetector()==Detector::kNear ){
00214 
00215   }
00216 
00217   MSG("DataQualityFilter",Msg::kVerbose) << " (Lookup)Coil=" << mystatus << endl;
00218 
00219 
00220   return mystatus;
00221 }
00222 
00223 Int_t DataQualityLookup::GetHvStatus(VldContext vldc)
00224 {
00225   Int_t mystatus=-1; 
00226   Int_t mystatus1=-1,mystatus2=-1;
00227  
00228   if( vldc.GetDetector()==Detector::kFar ){
00229     mystatus1=this->GetFarDetHvStatus(vldc,1);
00230     mystatus2=this->GetFarDetHvStatus(vldc,2);
00231     if( mystatus1==0 || mystatus2==0 ) mystatus=0;
00232     if( mystatus1==1 && mystatus2==1 ) mystatus=1;
00233   }
00234 
00235   if( vldc.GetDetector()==Detector::kNear ){
00236 
00237   }
00238 
00239   MSG("DataQualityFilter",Msg::kVerbose) << " (Lookup)HV=" << mystatus << endl;
00240 
00241   return mystatus;
00242 }
00243 
00244 Int_t DataQualityLookup::GetFarDetCoilStatus(VldContext vldc, Int_t supermodule)
00245 {
00246   Int_t k;
00247   Int_t mystatus=-1;
00248   Int_t begvldcxt=-1,endvldcxt=-1;
00249   Int_t vldcxt=vldc.GetTimeStamp().GetSec();
00250 
00251   if( supermodule==1 ){
00252     for(k=0;k<1000;k++){
00253       if( myBegVldCxtCoilSM1[k]>=0 && vldcxt>=myBegVldCxtCoilSM1[k] && vldcxt<myEndVldCxtCoilSM1[k] ){
00254         begvldcxt = myBegVldCxtCoilSM1[k];
00255         endvldcxt = myEndVldCxtCoilSM1[k];
00256         mystatus = myCoilStatusSM1[k];
00257       }
00258     }
00259   }
00260 
00261   if( supermodule==2 ){
00262     for(k=0;k<1000;k++){
00263       if( myBegVldCxtCoilSM2[k]>=0 && vldcxt>=myBegVldCxtCoilSM2[k] && vldcxt<myEndVldCxtCoilSM2[k] ){
00264         begvldcxt = myBegVldCxtCoilSM2[k];
00265         endvldcxt = myEndVldCxtCoilSM2[k];
00266         mystatus = myCoilStatusSM2[k];
00267       }
00268     }
00269   }
00270 
00271   MSG("DataQualityFilter",Msg::kVerbose) << " LOOKUP FARDET COIL STATUS [time=" << vldcxt << ", SM=" << supermodule << ", status=" << mystatus << ", vldcxt=" << begvldcxt << "->" << endvldcxt << "]" << endl;
00272 
00273   return mystatus;
00274 }
00275 
00276 Int_t DataQualityLookup::GetFarDetHvStatus(VldContext vldc, Int_t supermodule)
00277 {
00278   Int_t k;
00279   Int_t mystatus=-1;
00280   Int_t begvldcxt=-1,endvldcxt=-1;
00281   Int_t vldcxt=vldc.GetTimeStamp().GetSec();
00282 
00283   if( supermodule==1 ){
00284     for(k=0;k<1000;k++){
00285       if( myBegVldCxtHvSM1[k]>=0 && vldcxt>=myBegVldCxtHvSM1[k] && vldcxt<myEndVldCxtHvSM1[k] ){
00286         begvldcxt = myBegVldCxtHvSM1[k];
00287         endvldcxt = myEndVldCxtHvSM1[k];
00288         mystatus = myHvStatusSM1[k];
00289       }
00290     }
00291   }
00292 
00293   if( supermodule==2 ){
00294     for(k=0;k<1000;k++){
00295       if( myBegVldCxtHvSM2[k]>=0 && vldcxt>=myBegVldCxtHvSM2[k] && vldcxt<myEndVldCxtHvSM2[k] ){
00296         begvldcxt = myBegVldCxtHvSM2[k];
00297         endvldcxt = myEndVldCxtHvSM2[k];
00298         mystatus = myHvStatusSM2[k];
00299       }
00300     }        
00301   }
00302 
00303   MSG("DataQualityFilter",Msg::kVerbose) << " LOOKUP FARDET HV STATUS [time=" << vldcxt << ", SM=" << supermodule << ", status=" << mystatus << ", vldcxt=" << begvldcxt << "->" << endvldcxt << "]" << endl;
00304 
00305   return mystatus;
00306 }

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