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

FillHvFromSingles.cxx

Go to the documentation of this file.
00001 #include "FillHvFromSingles.h"
00002  
00003 #include "MessageService/MsgService.h"
00004 #include "MinosObjectMap/MomNavigator.h"
00005 #include "JobControl/JobCommand.h"
00006 #include "JobControl/JobCModuleRegistry.h"
00007 
00008 #include "Validity/VldRange.h"
00009 #include "Validity/VldTimeStamp.h"
00010 #include "Validity/VldContext.h"  
00011 
00012 #include "DatabaseInterface/DbiResultPtr.h"
00013 #include "DatabaseInterface/DbiSqlContext.h"
00014 #include "DatabaseInterface/DbiValidityRec.h"
00015 #include "DatabaseInterface/DbiCascader.h"
00016 #include "DatabaseInterface/DbiTableProxyRegistry.h"
00017 #include "DatabaseInterface/DbiWriter.h"
00018 
00019 #include "RawData/RawRecord.h"
00020 #include "RawData/RawHeader.h"
00021 #include "RawData/RawDaqHeader.h"
00022 #include "RawData/RawChannelId.h"
00023    
00024 #include "RawData/RawDaqHeaderBlock.h"
00025 #include "RawData/RawTpSinglesSummaryBlock.h"
00026 
00027 #include "DcsUser/DbuHvFromSingles.h"
00028 
00029 //
00030 // $Log $
00031 //
00032   
00033 ClassImp(FillHvFromSingles)
00034   
00035 CVSID("$Id: FillHvFromSingles.cxx,v 1.9 2008/01/14 21:59:55 bspeak Exp $");
00036   
00037 JOBMODULE(FillHvFromSingles,"FillHvFromSingles","FillHvFromSingles");
00038   
00039 FillHvFromSingles::FillHvFromSingles() :
00040   fBegTime(-1),
00041   fEndTime(-1),
00042   fRecord(0),
00043   fCounter(0),
00044   fWriteEntries(0),
00045   fReadEntries(0),
00046   fTask(1),
00047   fMinVaRate(50),
00048   fMinQieRate(0),
00049   fMaxColdChips(20),
00050   fWriteToDatabase(0),
00051   fReadFromDatabase(0),
00052   fWriteOutResults(0),
00053   fPruneShortEntries(0),
00054   fPruneMinTime(0),
00055   fPruneMinChips(0),
00056   fHvFile(0),
00057   fHvFileName("hvstatus.root"),
00058   fHvTree(0),
00059   fRawReadout(0)
00060 {
00061   MSG("HvStatus",Msg::kInfo) << " *** FillHvFromSingles::FillHvFromSingles() *** " << endl;
00062  
00063   fCurrColdChipsSM1 = -1;
00064   fCurrColdChipsSM2 = -1;
00065 
00066   fDetector = Detector::kUnknown;
00067   fRawReadout = new RawReadout();
00068 }
00069 
00070 FillHvFromSingles::~FillHvFromSingles()
00071 {
00072   MSG("HvStatus",Msg::kInfo) << " *** FillHvFromSingles::~FillHvFromSingles() *** " << endl;
00073 
00074   if( fRawReadout) delete fRawReadout;
00075 }
00076 
00077 void FillHvFromSingles::BeginJob()
00078 {
00079   MSG("HvStatus",Msg::kInfo) << " *** FillHvFromSingles::BeginJob() *** " << endl;
00080  
00081 }
00082 
00083 JobCResult FillHvFromSingles::Get(MomNavigator* mom)
00084 {
00085   MSG("HvStatus",Msg::kInfo) << " *** FillHvFromSingles::Get(...) *** " << endl;
00086   
00087   JobCResult result(JobCResult::kPassed);
00088 
00089   TObject* momobject = 0;
00090 
00091   fRecord=0;
00092 
00093   TIter momitr(mom->FragmentIter());
00094   while((momobject = momitr())){
00095     if(momobject->InheritsFrom("RawRecord")){
00096       RawRecord* rawrec = dynamic_cast<RawRecord*>(momobject);
00097       fRecord=1; fCounter++;
00098       MSG("HvStatus",Msg::kInfo) << "  *** RAW RECORD [" << fCounter << "] ***  " << endl;
00099 
00100       // set the detector type
00101       if(fDetector==Detector::kUnknown){
00102         fDetector=rawrec->GetHeader()->GetVldContext().GetDetector();
00103         MSG("HvStatus",Msg::kDebug) << " Detector = " << fDetector << endl;
00104       }
00105       
00106       // iterate over raw blocks
00107       TIter rawrecitr = rawrec->GetRawBlockIter();
00108       TObject* tob = 0;
00109       while((tob = rawrecitr())){
00110         MSG("HvStatus",Msg::kDebug) << " " << tob->GetName() << endl;
00111         this->ProcessBlock(tob);
00112       }
00113 
00114     }
00115   }
00116                                                                                             
00117   if( !fRecord ){
00118     MSG("HvStatus",Msg::kWarning) << "  *** FAILED TO FIND RAW RECORD ***  " << endl;
00119     return result.SetFailed();
00120   }
00121 
00122   return result;
00123 }
00124 
00125 // 
00126 // JobCResult FillHvFromSingles::Ana(const MomNavigator* mom)
00127 // {
00128 //   MSG("HvStatus",Msg::kInfo) << " *** FillHvFromSingles::Ana(...) *** " << endl;
00129 //
00130 //   JobCResult result(JobCResult::kPassed);
00131 //
00132 //   return result;
00133 // }
00134 //
00135 
00136 const Registry& FillHvFromSingles::DefaultConfig() const
00137 {
00138   MSG("HvStatus",Msg::kDebug) << " *** FillHvFromSingles::DefaultConfig() *** " << endl;
00139  
00140   static Registry r;
00141   r.SetName("HvStatus.config.default");
00142   r.UnLockValues();
00143   r.Set("HvFileName",fHvFileName.Data());
00144   r.Set("WriteToDatabase",fWriteToDatabase);
00145   r.Set("ReadFromDatabase",fReadFromDatabase);
00146   r.Set("WriteOutResults",fWriteOutResults);
00147   r.Set("PruneShortEntries",fPruneShortEntries);
00148   r.Set("PruneMinTime",fPruneMinTime);
00149   r.Set("PruneMinChips",fPruneMinChips);
00150   r.Set("MinVaRate",fMinVaRate);
00151   r.Set("MinQieRate",fMinQieRate);
00152   r.Set("MaxColdChips",fMaxColdChips);
00153   r.Set("TaskNumber",fTask);
00154   r.LockValues();
00155                     
00156   return r;
00157 }
00158   
00159 void FillHvFromSingles::Config(const Registry& r)
00160 {
00161   MSG("HvStatus",Msg::kDebug) << " *** FillHvFromSingles::Config() *** " << endl;
00162 
00163   Int_t tmpint; const char* tmpchar = 0;
00164 
00165   if(r.Get("HvFileName",tmpchar)) fHvFileName = tmpchar;
00166   if(r.Get("WriteToDatabase",tmpint)) fWriteToDatabase = tmpint;
00167   if(r.Get("WriteToDatabase",tmpint)) fWriteToDatabase = tmpint;
00168   if(r.Get("ReadFromDatabase",tmpint)) fReadFromDatabase = tmpint;
00169   if(r.Get("WriteOutResults",tmpint)) fWriteOutResults = tmpint;
00170   if(r.Get("PruneShortEntries",tmpint)) fPruneShortEntries = tmpint;
00171   if(r.Get("PruneMinTime",tmpint)) fPruneMinTime = tmpint;
00172   if(r.Get("PruneMinChips",tmpint)) fPruneMinChips = tmpint;
00173   if(r.Get("MinVaRate",tmpint)) fMinVaRate = tmpint;
00174   if(r.Get("MinQieRate",tmpint)) fMinQieRate = tmpint;
00175   if(r.Get("MaxColdChips",tmpint)) fMaxColdChips = tmpint;
00176   if(r.Get("TaskNumber",tmpint)) fTask = tmpint;
00177 
00178   MSG("HvStatus",Msg::kDebug)
00179     << "  configuration: " << endl
00180     << "     HvFileName=" << fHvFileName << endl
00181     << "     WriteToDatabase=" << fWriteToDatabase << endl
00182     << "     ReadFromDatabase=" << fReadFromDatabase << endl
00183     << "     WriteOutResults=" << fWriteOutResults << endl
00184     << "     PruneShortEntries=" << fPruneShortEntries << endl
00185     << "     PruneMinTime=" << fPruneMinTime << endl
00186     << "     PruneMinChips=" << fPruneMinChips << endl
00187     << "     MinVaRate=" << fMinVaRate << endl
00188     << "     MinQieRate=" << fMinQieRate << endl
00189     << "     MaxColdChips=" << fMaxColdChips << endl
00190     << "     TaskNumber=" << fTask << endl;
00191 
00192   return;
00193 }
00194   
00195 void FillHvFromSingles::HandleCommand(JobCommand* command)
00196 {
00197   TString cmd = command->PopCmd();
00198   if(cmd=="Set"){
00199     TString opt = command->PopOpt();
00200 
00201   }
00202 
00203   return;
00204 }
00205 
00206 void FillHvFromSingles::EndJob()
00207 {
00208   MSG("HvStatus",Msg::kInfo) << " *** FillHvFromSingles::EndJob() *** " << endl;
00209 
00210   // add final entry for SM1
00211   if( vecTimeSM1.size()>0 ){
00212     vecTimeSM1.push_back(fEndTime+1);
00213     vecStatusSM1.push_back(-1);
00214     vecColdChipsSM1.push_back(-1);
00215   }
00216 
00217   // add final entry for SM2
00218   if( vecTimeSM2.size()>0 ){
00219     vecTimeSM2.push_back(fEndTime+1);
00220     vecStatusSM2.push_back(-1);
00221     vecColdChipsSM2.push_back(-1);
00222   }
00223 
00224   // print out results
00225   this->PrintResults();
00226 
00227   // prune short entries
00228   if( fPruneShortEntries ){
00229     MSG("HvStatus",Msg::kInfo) << " *** pruning short entries *** " << endl;
00230     this->PruneShortEntries(fPruneMinTime,fPruneMinChips);
00231     this->PrintResults();
00232   }
00233 
00234   // write out results
00235   if( fWriteOutResults ){
00236     MSG("HvStatus",Msg::kInfo) << " *** writing to file..." << endl; 
00237     this->WriteToFile();
00238     MSG("HvStatus",Msg::kInfo) << "      ... finished writing to file *** " << endl; 
00239   }
00240 
00241   // write HV information to database
00242   if( fWriteToDatabase ){
00243     MSG("HvStatus",Msg::kInfo) << " *** writing to database..." << endl; 
00244     this->WriteToDatabase();
00245     MSG("HvStatus",Msg::kInfo) << "   WROTE " << fWriteEntries << " ENTRIES TO DATABASE " << endl;
00246     MSG("HvStatus",Msg::kInfo) << "      ... finished writing to database *** " << endl; 
00247   }
00248 
00249   // read HV information from database
00250   if( fReadFromDatabase ){
00251     MSG("HvStatus",Msg::kInfo) << " *** reading from database..." << endl; 
00252     this->ReadFromDatabase();
00253     MSG("HvStatus",Msg::kInfo) << "   READ " << fReadEntries << " ENTRIES FROM DATABASE " << endl;
00254     MSG("HvStatus",Msg::kInfo) << "      ... finished reading from database *** " << endl; 
00255   }
00256 
00257   // save HV information in root file
00258   if(fHvFile){
00259     MSG("HvStatus",Msg::kInfo) << " *** saving info to file ... " << endl;
00260     TDirectory* tmpd = gDirectory;
00261     fHvFile->cd();
00262     fHvTree->Write();
00263     fHvFile->Close();
00264     gDirectory = tmpd;
00265     MSG("HvStatus",Msg::kInfo) << "      ... info saved to file *** " << endl;
00266   }
00267 }
00268 
00269 void FillHvFromSingles::PrintResults()
00270 {
00271   // print out results for supermodule 1
00272   MSG("HvStatus",Msg::kDebug) << " results for supermodule 1: " << endl;
00273   for( unsigned int i=0; i<vecTimeSM1.size(); i++){
00274     MSG("HvStatus",Msg::kDebug) << "   time=" << vecTimeSM1[i] << " coldchips=" << vecColdChipsSM1[i] << " status=" << vecStatusSM1[i] << endl;
00275   }
00276 
00277   // print out results from supermodule 2
00278   MSG("HvStatus",Msg::kDebug) << " results for supermodule 2: " << endl;
00279   for( unsigned int i=0; i<vecTimeSM2.size(); i++){
00280     MSG("HvStatus",Msg::kDebug) << "   time=" << vecTimeSM2[i] << " coldchips=" << vecColdChipsSM2[i] << " status=" << vecStatusSM2[i] << endl;
00281   }
00282 }
00283 
00284 void FillHvFromSingles::ProcessBlock(TObject* obj)
00285 {
00286 
00287   if(obj->InheritsFrom("RawTpSinglesSummaryBlock")){
00288     MSG("HvStatus",Msg::kDebug) << " ... found RawTpSinglesSummaryBlock " << endl;
00289     RawTpSinglesSummaryBlock* rdb = (RawTpSinglesSummaryBlock*)(obj);
00290     
00291     Int_t Time = rdb->GetStartTimeStamp().GetSec();
00292     Double_t FrameTime = (rdb->GetEndTimeStamp().GetSec()-rdb->GetStartTimeStamp().GetSec())+1.0e-9*(rdb->GetEndTimeStamp().GetNanoSec()-rdb->GetStartTimeStamp().GetNanoSec());
00293     if( fBegTime<0 ) fBegTime=Time;
00294     if( Time>fEndTime ) fEndTime=Time;
00295 
00296     Int_t Source = rdb->GetSource();
00297     Int_t SourceCheck = 0;
00298     Int_t AllChipsSM1 = 0;
00299     Int_t AllChipsSM2 = 0;
00300     Int_t ColdChipsSM1 = 0;
00301     Int_t ColdChipsSM2 = 0;
00302     Int_t StatusSM1 = -1;
00303     Int_t StatusSM2 = -1;
00304     Int_t MaxColdChips = 99999;
00305     Int_t MinRate = 0;
00306 
00307     Detector::Detector_t Detector = Detector::kUnknown;
00308 
00309     switch( Source ){
00310       case 0: // Crate only
00311         Detector = Detector::kUnknown;
00312         break;
00313       case 1: // Crate and VARC (VA)
00314         Detector = Detector::kFar;
00315         break;
00316       case 2: // Crate and VFB/ADCSEL (VA)
00317         Detector = Detector::kFar;
00318         break;
00319       case 3: // Crate and VACHIP (VA)
00320         Detector = Detector::kFar;
00321         break;
00322       case 4: // Crate and Plane
00323         Detector = Detector::kUnknown;
00324         break;
00325       case 5: // Crate and MASTER (QIE)
00326         Detector = Detector::kNear;
00327         break;
00328       case 6: // Crate and MINDER (QIE)
00329         Detector = Detector::kNear;
00330         break;
00331       case 7: // Crate and MENU (QIE)
00332         Detector = Detector::kNear;
00333         break;
00334       default:
00335         break;
00336     }
00337 
00338     // check source type
00339     if( Source==3 && Detector==Detector::kFar ){
00340       MinRate=fMinVaRate;
00341       MaxColdChips=fMaxColdChips;
00342       SourceCheck=1;
00343     }      
00344 
00345     if( Source==7 && Detector==Detector::kNear ){
00346       MinRate=fMinQieRate;
00347       MaxColdChips=fMaxColdChips;
00348       SourceCheck=1;
00349     }
00350 
00351     // Iterate over raw channels and record any hot/cold chips
00352     typedef std::map<RawChannelId,UInt_t> RCIdToRateMap;
00353     const RCIdToRateMap& rates = rdb->GetRates();
00354     RCIdToRateMap::const_iterator rateItr = rates.begin();
00355     RCIdToRateMap::const_iterator rateEnd = rates.end();
00356     while ( rateItr != rateEnd ) {
00357       RawChannelId rawch = rateItr->first;
00358       Int_t rawrate = rateItr->second;
00359       Int_t correctedrate = (Int_t)(rawrate/FrameTime);
00360       Int_t rate = correctedrate;
00361       Int_t crate = rawch.GetCrate();
00362 
00363       RawReadout::ReadoutType_t readout = fRawReadout->GetReadoutType(rawch);
00364             
00365       if( ( SourceCheck )
00366        && ( readout==RawReadout::kDetector 
00367          || readout==RawReadout::kVetoShield ) ){     
00368 
00369         // supermodule 1   
00370         if( crate>=0 && crate<8 ){
00371           AllChipsSM1++; 
00372           if(rate<MinRate){
00373             ColdChipsSM1++;
00374             MSG("HvStatus",Msg::kVerbose) << "   cold chip (SM1): crate=" << crate << " corrected rate=" << correctedrate << endl; 
00375           }
00376         }
00377 
00378         // supermodule 2
00379         if( crate>=8 && crate<16 ){
00380           AllChipsSM2++; 
00381           if(rate<MinRate){
00382             ColdChipsSM2++;
00383             MSG("HvStatus",Msg::kVerbose) << "   cold chip (SM2): crate=" << crate << " corrected rate=" << correctedrate << endl; 
00384           }
00385         }
00386 
00387       }
00388 
00389       rateItr++;
00390     }
00391 
00392     MSG("HvStatus",Msg::kVerbose) << "   Time=" << Time << " FrameTime=" << FrameTime << " Source=" << Source << " Check=" << SourceCheck << endl;
00393     MSG("HvStatus",Msg::kVerbose) << "   MinRate=" << MinRate << " MaxColdChips=" << MaxColdChips << endl;
00394     MSG("HvStatus",Msg::kVerbose) << "   SM1: AllChips=" << AllChipsSM1 << " ColdChips=" << ColdChipsSM1 << endl;
00395     MSG("HvStatus",Msg::kVerbose) << "   SM2: AllChips=" << AllChipsSM2 << " ColdChips=" << ColdChipsSM2 << endl;
00396 
00397     // analyse the singles data
00398     if( SourceCheck ){
00399 
00400       // supermodule 1
00401       if( AllChipsSM1>0 ){
00402 
00403         // set HV status
00404         if( ColdChipsSM1<fMaxColdChips ) StatusSM1=1;
00405         else StatusSM1=0;
00406 
00407         // store new data if things have changed
00408         if( ColdChipsSM1!=fCurrColdChipsSM1 ){
00409           MSG("HvStatus",Msg::kDebug) << "   new data (SM1): time=" << Time << " status=" << StatusSM1 << " coldchips=" << ColdChipsSM1 << endl;
00410           vecTimeSM1.push_back(Time);
00411           vecStatusSM1.push_back(StatusSM1);
00412           vecColdChipsSM1.push_back(ColdChipsSM1);
00413           fCurrColdChipsSM1=ColdChipsSM1;
00414         }
00415       }
00416 
00417       // supermodule 2
00418       if( AllChipsSM2>0 ){
00419 
00420         // set HV status
00421         if( ColdChipsSM2<fMaxColdChips ) StatusSM2=1;
00422         else StatusSM2=0;
00423 
00424         // store new data if things have changed
00425         if( ColdChipsSM2!=fCurrColdChipsSM2 ){ 
00426           MSG("HvStatus",Msg::kDebug) << "   new data (SM2): time=" << Time << " status=" << StatusSM2 << " coldchips=" << ColdChipsSM2 << endl;
00427           vecTimeSM2.push_back(Time);
00428           vecStatusSM2.push_back(StatusSM2);
00429           vecColdChipsSM2.push_back(ColdChipsSM2);
00430           fCurrColdChipsSM2=ColdChipsSM2;
00431         }
00432       }
00433 
00434     }
00435 
00436   }
00437 
00438   return;
00439 }
00440 
00441 void FillHvFromSingles::PruneShortEntries(Int_t nSecs, Int_t nChips)
00442 {
00443   MSG("HvStatus",Msg::kDebug) << " *** FillHvFromSingles::PruneShortEntries(...) *** " << endl;
00444 
00445   MSG("HvStatus",Msg::kVerbose) << " nSecs=" << nSecs << " nChips=" << nChips << endl;
00446 
00447   Int_t delta=3;
00448   Int_t delta_coldchips=10;
00449 
00450   Bool_t carryon=1,newentry=0;
00451   Int_t currchips=-1,newchips=0;
00452   Int_t size_old=0,size_new=0;
00453   Int_t dt_pos=-1,dt_neg=-1;
00454   Int_t ctr=0;
00455 
00456   vector<int> tempTime;
00457   vector<int> tempStatus;
00458   vector<int> tempColdChips;
00459 
00460   // prune supermodule 1
00461   MSG("HvStatus",Msg::kVerbose) << "    pruning entries for SM1 " << endl;
00462   ctr=0;
00463   carryon=1;
00464   while(carryon){
00465     carryon=0;
00466     size_old=vecTimeSM1.size();
00467 
00468     tempTime=vecTimeSM1;
00469     tempStatus=vecStatusSM1;
00470     tempColdChips=vecColdChipsSM1;
00471 
00472     for( unsigned int i=0; i+1<vecTimeSM1.size(); i++){
00473 
00474       if( 1 // vecColdChipsSM1[i]<nChips
00475        && vecTimeSM1[i+1]-vecTimeSM1[i]<nSecs ){
00476 
00477         newentry=0;
00478         newchips=vecColdChipsSM1[i];
00479         dt_pos=-1;
00480         dt_neg=-1;
00481 
00482         if( i+2<vecTimeSM1.size() ) dt_pos=vecTimeSM1[i+2]-vecTimeSM1[i+1];
00483         if( i>=1 ) dt_neg=vecTimeSM1[i]-vecTimeSM1[i-1];
00484         if( dt_pos>=nSecs || dt_neg>=nSecs ) newchips=-1;
00485 
00486         if( i+1<vecTimeSM1.size()
00487          && vecColdChipsSM1[i+1]>newchips ){
00488           if( ( vecColdChipsSM1[i+1]-vecColdChipsSM1[i]>=-delta 
00489              && vecColdChipsSM1[i+1]-vecColdChipsSM1[i]<=+delta )
00490            || ( vecColdChipsSM1[i+1]>=fMaxColdChips+delta_coldchips 
00491              && vecColdChipsSM1[i]>=fMaxColdChips+delta_coldchips ) ){
00492             if( dt_pos>=nSecs || dt_neg<nSecs ){
00493               newchips=vecColdChipsSM1[i+1];
00494               newentry=1;
00495             }
00496           }
00497         }
00498       
00499         if( i>=1 
00500          && vecColdChipsSM1[i-1]>newchips ){
00501           if( ( vecColdChipsSM1[i-1]-vecColdChipsSM1[i]>=-delta 
00502              && vecColdChipsSM1[i-1]-vecColdChipsSM1[i]<=+delta ) 
00503            || ( vecColdChipsSM1[i-1]>=fMaxColdChips+delta_coldchips 
00504              && vecColdChipsSM1[i]>=fMaxColdChips+delta_coldchips ) ){
00505             if( dt_neg>=nSecs || dt_pos<nSecs ){
00506               newchips=vecColdChipsSM1[i-1];
00507               newentry=1;
00508             }
00509           }
00510         }
00511 
00512         if( newentry ){
00513           tempColdChips[i]=newchips;
00514           carryon=1;
00515         }
00516 
00517       }
00518     }
00519 
00520     vecTimeSM1.clear();
00521     vecStatusSM1.clear();
00522     vecColdChipsSM1.clear();
00523     currchips=-1;
00524 
00525     for( unsigned int i=0; i<tempColdChips.size(); i++){
00526       if( tempColdChips[i]!=currchips ){
00527         vecTimeSM1.push_back(tempTime[i]);
00528         vecStatusSM1.push_back(tempStatus[i]);
00529         vecColdChipsSM1.push_back(tempColdChips[i]);
00530         currchips=tempColdChips[i];
00531       }
00532     }
00533 
00534     size_new=vecTimeSM1.size();
00535     if( size_new>=size_old ) carryon=0;
00536 
00537     ctr++;
00538   }
00539   MSG("HvStatus",Msg::kVerbose) << "      ..." << ctr << " iterations " << endl; 
00540   
00541   // prune supermodule 2
00542   MSG("HvStatus",Msg::kVerbose) << "    pruning entries for SM2 " << endl;
00543   ctr=0;
00544   carryon=1;
00545   while(carryon){
00546     carryon=0;
00547     size_old=vecTimeSM2.size();
00548 
00549     tempTime=vecTimeSM2;
00550     tempStatus=vecStatusSM2;
00551     tempColdChips=vecColdChipsSM2;
00552 
00553     for( unsigned int i=0; i+1<vecTimeSM2.size(); i++){
00554       
00555       if( 1 // vecColdChipsSM2[i]<nChips
00556        && vecTimeSM2[i+1]-vecTimeSM2[i]<nSecs ){
00557 
00558         newentry=0;
00559         newchips=vecColdChipsSM2[i];
00560         dt_pos=-1;
00561         dt_neg=-1;
00562 
00563         if( i+2<vecTimeSM2.size() ) dt_pos=vecTimeSM2[i+2]-vecTimeSM2[i+1];
00564         if( i>=1 ) dt_neg=vecTimeSM2[i]-vecTimeSM2[i-1];
00565         if( dt_pos>=nSecs || dt_neg>=nSecs ) newchips=-1;
00566 
00567         if( i+1<vecTimeSM2.size()
00568          && vecColdChipsSM2[i+1]>newchips ){
00569           if( ( vecColdChipsSM2[i+1]-vecColdChipsSM2[i]>=-delta 
00570              && vecColdChipsSM2[i+1]-vecColdChipsSM2[i]<=+delta ) 
00571            || ( vecColdChipsSM2[i+1]>=fMaxColdChips+delta_coldchips 
00572              && vecColdChipsSM2[i]>=fMaxColdChips+delta_coldchips ) ){
00573             if( dt_pos>=nSecs || dt_neg<nSecs ){
00574               newchips=vecColdChipsSM2[i+1];
00575               newentry=1;
00576             }
00577           }
00578         }
00579 
00580         if( i>=1 
00581          && vecColdChipsSM2[i-1]>newchips ){
00582           if( ( vecColdChipsSM2[i-1]-vecColdChipsSM2[i]>=-delta
00583              && vecColdChipsSM2[i-1]-vecColdChipsSM2[i]<=+delta )
00584            || ( vecColdChipsSM2[i-1]>=fMaxColdChips+delta_coldchips 
00585              && vecColdChipsSM2[i]>=fMaxColdChips+delta_coldchips ) ){
00586             if( dt_neg>=nSecs || dt_pos<nSecs ){
00587               newchips=vecColdChipsSM2[i-1];
00588               newentry=1;
00589             }
00590           }
00591         }
00592 
00593         if( newentry ){
00594           tempColdChips[i]=newchips;
00595           carryon=1;
00596         }
00597 
00598       }
00599     }
00600 
00601     vecTimeSM2.clear();
00602     vecStatusSM2.clear();
00603     vecColdChipsSM2.clear();
00604     currchips=-1;
00605 
00606     for( unsigned int i=0; i<tempColdChips.size(); i++){
00607       if( tempColdChips[i]!=currchips ){
00608         vecTimeSM2.push_back(tempTime[i]);
00609         vecStatusSM2.push_back(tempStatus[i]);
00610         vecColdChipsSM2.push_back(tempColdChips[i]);
00611         currchips=tempColdChips[i];
00612       }
00613     }
00614 
00615     size_new=vecTimeSM2.size();
00616     if( size_new>=size_old ) carryon=0;
00617 
00618     ctr++;
00619   }
00620   MSG("HvStatus",Msg::kVerbose) << "      ..." << ctr << " iterations " << endl; 
00621   
00622   return;
00623 }
00624 
00625 void FillHvFromSingles::WriteToFile()
00626 {
00627   MSG("HvStatus",Msg::kDebug) << " *** FillHvFromSingles::WriteToFile() *** " << endl;
00628 
00629   Int_t begtime,endtime,coldchips,hvstatus;  
00630 
00631   // supermodule 1
00632   if( vecTimeSM1.size()>0 ){
00633     for( unsigned int i=0; i+1<vecTimeSM1.size(); i++){
00634       begtime=vecTimeSM1[i];
00635       endtime=vecTimeSM1[i+1];
00636       hvstatus=vecStatusSM1[i];
00637       coldchips=vecColdChipsSM1[i];
00638       if( fWriteOutResults ){
00639         this->WriteOutResults(0,begtime,endtime,fDetector,1,hvstatus,coldchips);
00640       }
00641     }
00642   }
00643 
00644   // supermodule 2
00645   if( vecTimeSM2.size()>0 ){
00646     for( unsigned int i=0; i+1<vecTimeSM2.size(); i++){
00647       begtime=vecTimeSM2[i];
00648       endtime=vecTimeSM2[i+1];
00649       hvstatus=vecStatusSM2[i];
00650       coldchips=vecColdChipsSM2[i];
00651       if( fWriteOutResults ){
00652         this->WriteOutResults(0,begtime,endtime,fDetector,2,hvstatus,coldchips);
00653       }
00654     }
00655   }
00656 
00657   return;
00658 }
00659 
00660 void FillHvFromSingles::WriteToDatabase()
00661 {
00662   MSG("HvStatus",Msg::kDebug) << " *** FillHvFromSingles::WriteToDatabase() *** " << endl;
00663 
00664   Int_t begtime,endtime,coldchips,hvstatus;  
00665 
00666   // supermodule 1
00667   if( vecTimeSM1.size()>0 ){
00668     for( unsigned int i=0; i+1<vecTimeSM1.size(); i++){
00669       begtime=vecTimeSM1[i];
00670       endtime=vecTimeSM1[i+1];
00671       hvstatus=vecStatusSM1[i];
00672       coldchips=vecColdChipsSM1[i];
00673       this->WriteToDatabase(begtime,endtime,fDetector,1,hvstatus,coldchips);
00674       if( fWriteOutResults ){
00675         this->WriteOutResults(1,begtime,endtime,fDetector,1,hvstatus,coldchips);
00676       }
00677     }
00678   }
00679 
00680   // supermodule 2
00681   if( vecTimeSM2.size()>0 ){
00682     for( unsigned int i=0; i+1<vecTimeSM2.size(); i++){
00683       begtime=vecTimeSM2[i];
00684       endtime=vecTimeSM2[i+1];
00685       hvstatus=vecStatusSM2[i];
00686       coldchips=vecColdChipsSM2[i];
00687       this->WriteToDatabase(begtime,endtime,fDetector,2,hvstatus,coldchips);
00688       if( fWriteOutResults ){
00689         this->WriteOutResults(1,begtime,endtime,fDetector,2,hvstatus,coldchips);
00690       }
00691     }
00692   }
00693 
00694   return;
00695 }
00696 
00697 void FillHvFromSingles::WriteToDatabase(Int_t begtime, Int_t endtime, Detector::Detector_t detector, Int_t supermodule, Int_t hvstatus, Int_t coldchips)
00698 {
00699   MSG("HvStatus",Msg::kVerbose) << " *** FillHvFromSingles::WriteToDatabase(...) *** " << endl;
00700 
00701   DbiCascader& cascader = DbiTableProxyRegistry::Instance().GetCascader();
00702 
00703   if( !cascader.TableExists("DBUHVFROMSINGLES") ){
00704     MSG("HvStatus",Msg::kDebug) << "    Creating temporary DBUHVFROMSINGLES table " << endl;
00705 
00706     string tableDescr = "(SEQNO int, HV_STATUS int, HV_SUPERMODULE int, HV_COLDCHIPS int)";
00707     Int_t dbNoTempHvStatus = cascader.CreateTemporaryTable("DBUHVFROMSINGLES",tableDescr);
00708 
00709     MSG("HvStatus",Msg::kDebug) << "    DbNoTempHvStatus=" << dbNoTempHvStatus << endl;
00710   }  
00711 
00712   if( cascader.TableExists("DBUHVFROMSINGLES") ){
00713     MSG("HvStatus",Msg::kVerbose) << "    Writing to DBUHVFROMSINGLES table... " << endl;
00714 
00715     VldTimeStamp start(begtime);
00716     VldTimeStamp finish(endtime);
00717     TString logentry("HV status from singles (");
00718     logentry.Append(start.AsString("s"));
00719     logentry.Append(" to ");
00720     logentry.Append(finish.AsString("s"));
00721     logentry.Append(")");
00722 
00723     VldRange range(detector,SimFlag::kData,start,finish,logentry.Data());
00724 
00725     DbuHvFromSingles row(hvstatus,supermodule,coldchips);
00726 
00727     Int_t aggNo = row.GetAggregateNo();
00728     Dbi::Task task = fTask;
00729     VldTimeStamp creationDate;
00730 
00731     DbiWriter<DbuHvFromSingles> writer(range,aggNo,task,creationDate,0,logentry.Data());
00732 
00733     writer << row;
00734     writer.Close();
00735 
00736     MSG("HvStatus",Msg::kVerbose) << "    " << logentry.Data() << endl;
00737     MSG("HvStatus",Msg::kVerbose) << "    supermodule=" << supermodule << " hvstatus=" << hvstatus << " coldchips=" << coldchips << endl;
00738 
00739     fWriteEntries++;
00740   }
00741 
00742   return;
00743 }
00744 
00745 void FillHvFromSingles::ReadFromDatabase()
00746 {
00747   MSG("HvStatus",Msg::kDebug) << " *** FillHvFromSingles::ReadFromDatabase() *** " << endl;
00748 
00749   Int_t time,hvstatus,coldchips;  
00750 
00751   // supermodule 1
00752   if( vecTimeSM1.size()>0 ){
00753     for( unsigned int i=0; i+1<vecTimeSM1.size(); i++){
00754       time=vecTimeSM1[i];
00755       hvstatus=-1;
00756       coldchips=0;
00757       this->ReadFromDatabase(time,fDetector,1,hvstatus,coldchips);
00758       if( fWriteOutResults ){
00759         this->WriteOutResults(2,time,time,fDetector,1,hvstatus,coldchips);
00760       }
00761     }
00762   }
00763 
00764   // supermodule 2
00765   if( vecTimeSM2.size()>0 ){
00766     for( unsigned int i=0; i+1<vecTimeSM2.size(); i++){
00767       time=vecTimeSM2[i];
00768       hvstatus=-1;
00769       coldchips=0;
00770       this->ReadFromDatabase(time,fDetector,2,hvstatus,coldchips);
00771       if( fWriteOutResults ){
00772         this->WriteOutResults(2,time,time,fDetector,2,hvstatus,coldchips);
00773       }
00774     }
00775   }
00776  
00777   return;   
00778 }
00779 
00780 void FillHvFromSingles::ReadFromDatabase(Int_t time, Detector::Detector_t detector, Int_t supermodule, Int_t& hvstatus, Int_t& coldchips)
00781 {
00782   MSG("HvStatus",Msg::kVerbose) << " *** FillHvFromSingles::ReadFromDatabase(...) *** " << endl;
00783 
00784   hvstatus=-1; coldchips=0;
00785 
00786   DbiCascader& cascader = DbiTableProxyRegistry::Instance().GetCascader();
00787 
00788   if( cascader.TableExists("DBUHVFROMSINGLES") ){
00789     MSG("HvStatus",Msg::kVerbose) << "    Reading from DBUHVFROMSINGLES table... " << endl;
00790 
00791     Int_t tmpsupermodule=-1, tmphvstatus=-1, tmpcoldchips=0;
00792 
00793     VldTimeStamp timestamp(time,0);
00794     VldContext vldc(detector,SimFlag::kData,timestamp);
00795     DbiResultPtr<DbuHvFromSingles> resptr("DBUHVFROMSINGLES",vldc,fTask);
00796 
00797     MSG("HvStatus",Msg::kVerbose) << "    Number Of Rows = " << resptr.GetNumRows() << endl;
00798 
00799     if( resptr.GetNumRows()>0 ){
00800       for( unsigned int i=0; i<resptr.GetNumRows(); i++){
00801         const DbuHvFromSingles* rowptr = resptr.GetRow(i);
00802         tmpsupermodule=rowptr->GetSupermodule();
00803         if( tmpsupermodule==supermodule ){
00804           tmphvstatus=rowptr->GetStatus();
00805           tmpcoldchips=rowptr->GetColdChips();
00806         }
00807       }
00808     }
00809 
00810     hvstatus=tmphvstatus; coldchips=tmpcoldchips;
00811 
00812     MSG("HvStatus",Msg::kVerbose) << "    " << timestamp.AsString("s") << " supermodule=" << supermodule << " hvstatus=" << hvstatus << " coldchips=" << coldchips << endl;
00813 
00814     fReadEntries++;
00815   }
00816 
00817   return;
00818 }
00819 
00820 void FillHvFromSingles::WriteOutResults(Int_t source, Int_t begtime, Int_t endtime, Detector::Detector_t detector, Int_t supermodule, Int_t hvstatus, Int_t coldchips)
00821 {
00822   MSG("HvStatus",Msg::kVerbose) << " *** FillHvFromSingles::WriteOutResults() *** " << endl;
00823 
00824   Source=source; 
00825   BegTime=begtime;
00826   EndTime=endtime;
00827   Detector=detector;
00828   Supermodule=supermodule;
00829   HvStatus=hvstatus;
00830   ColdChips=coldchips;
00831 
00832   MSG("HvStatus",Msg::kVerbose) << "    Source=" << Source << " BegTime=" << BegTime << " EndTime=" << EndTime << " Detector=" << Detector << " Supermodule=" << Supermodule << " HvStatus=" << HvStatus << " ColdChips=" << ColdChips << endl;
00833 
00834   if(!fHvFile){
00835     TDirectory* tmpd = gDirectory;
00836     fHvFile = new TFile(fHvFileName.Data(),"RECREATE");
00837     fHvTree = new TTree("HvStatus","HvStatus");
00838     fHvTree->SetAutoSave(300);
00839     fHvTree->Branch("Source",&Source,"Source/I");
00840     fHvTree->Branch("BegTime",&BegTime,"BegTime/I");
00841     fHvTree->Branch("EndTime",&EndTime,"EndTime/I");
00842     fHvTree->Branch("Detector",&Detector,"Detector/I");
00843     fHvTree->Branch("Supermodule",&Supermodule,"Supermodule/I");
00844     fHvTree->Branch("HvStatus",&HvStatus,"HvStatus/I");
00845     fHvTree->Branch("ColdChips",&ColdChips,"ColdChips/I");
00846     gDirectory = tmpd;
00847   }
00848   
00849   if(fHvFile){
00850     TDirectory* tmpd = gDirectory;
00851     fHvFile->cd();
00852     fHvTree->Fill();
00853     gDirectory = tmpd;
00854   }
00855 
00856   return;
00857 }

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