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

FarDetStripListModule.cxx

Go to the documentation of this file.
00001 
00002 #include "FarDetStripListModule.h"
00003 #include "FarDetStripListHandle.h"
00004 #include "FarDetStripHandle.h"
00005 
00006 #include "Algorithm/AlgConfig.h"
00007 #include "Algorithm/AlgFactory.h"
00008 #include "Algorithm/AlgHandle.h"
00009 
00010 #include "MessageService/MsgService.h"  
00011 #include "JobControl/JobCModuleRegistry.h"
00012 #include "JobControl/JobCommand.h"
00013 #include "MinosObjectMap/MomNavigator.h"
00014 
00015 #include "RawData/RawRecord.h"
00016 #include "RawData/RawDaqSnarlHeader.h"
00017 #include "RawData/RawDigit.h"
00018 #include "RawData/RawChannelId.h"
00019 #include "RawData/RawDaqHeaderBlock.h"
00020 #include "RawData/RawSnarlHeaderBlock.h"
00021 #include "RawData/RawDigitDataBlock.h"
00022 
00023 #include "Candidate/CandContext.h"
00024 #include "CandData/CandRecord.h"
00025 #include "CandData/CandHeader.h"
00026 
00027 #include "CandDigit/CandDigitListHandle.h"
00028 #include "CandDigit/CandDigitHandle.h"
00029 
00030 #include "CandDigit/CandDeMuxDigitListHandle.h"
00031 #include "CandDigit/CandDeMuxDigitHandle.h"
00032 
00033 
00034 #include "UgliGeometry/UgliGeomHandle.h"
00035 #include "UgliGeometry/UgliPlnNode.h"
00036 #include "Validity/VldContext.h"
00037 #include "Plex/PlexHandle.h"
00038 #include "Plex/PlexPlaneId.h"
00039 
00040 #include "TDirectory.h"
00041 #include <cmath>
00042 
00043 CVSID("$Id: FarDetStripListModule.cxx,v 1.5 2007/02/04 06:16:55 rhatcher Exp $");
00044 
00045 JOBMODULE(FarDetStripListModule,"FarDetStripListModule","Making CandStrips");
00046 
00047 FarDetStripListModule::FarDetStripListModule() :
00048   fFarDetStripFile(0),
00049   fFarDetStripTree(0),
00050   fListIn("CandDigitListHandle"),
00051   fListOut("FarDetStripListHandle"),
00052   fFilterOnOff(0),
00053   fFilterMinStrips(-1),
00054   fFilter(0)
00055 {
00056 
00057 }
00058 
00059 FarDetStripListModule::~FarDetStripListModule()
00060 {
00061 
00062 }
00063     
00064 void FarDetStripListModule::BeginJob()
00065 {
00066   MSG("FarDetStrip",Msg::kDebug) << " *** FarDetStripListModule::BeginJob( ) *** " << endl;
00067 
00068   /*
00069   AlgFactory &af = AlgFactory::GetInstance();
00070   af.Register("AlgFarDetStripList","default","libFarDetStrip.so","AlgConfig");
00071   af.Register("AlgFarDetStrip","default","libFarDetStrip.so","AlgConfig");
00072   */
00073 }
00074   
00075 JobCResult FarDetStripListModule::Reco(MomNavigator *mom)
00076 {
00077   MSG("FarDetStrip",Msg::kDebug) << " *** FarDetStripListModule::Reco( ) *** " << endl;
00078 
00079   fFilter=0;
00080   JobCResult result(JobCResult::kPassed);
00081 
00082   // get candrecord
00083   CandRecord* candrec = dynamic_cast<CandRecord*>(mom->GetFragment("CandRecord","PrimaryCandidateRecord"));
00084   if( candrec==0 ){
00085     MSG("FarDetStrip",Msg::kDebug) << "  *** FAILED TO FIND CANDRECORD *** " << endl;
00086     return result.SetFailed();
00087   }
00088 
00089   // make striplist handle
00090   CandDigitListHandle* cdlh = dynamic_cast<CandDigitListHandle*>(candrec->FindCandHandle("CandDigitListHandle",fListIn.Data()));
00091   if( cdlh){
00092     MSG("FarDetStrip",Msg::kDebug) << "  *** MAKE HANDLE *** " << endl;
00093 
00094     AlgFactory &af = AlgFactory::GetInstance();
00095     AlgHandle ah = af.GetAlgHandle("AlgFarDetStripList", "default");
00096   
00097     CandContext cx(this, mom);
00098     cx.SetCandRecord(candrec);
00099     cx.SetDataIn(cdlh);
00100     FarDetStripListHandle strplist = FarDetStripList::MakeCandidate(ah,cx);
00101     strplist.SetName(fListOut.Data());
00102     strplist.SetTitle(TString("Created by FarDetStripListModule"));
00103 
00104     candrec->SecureCandHandle(strplist);
00105   }
00106 
00107   // contained event filter 
00108   FarDetStripListHandle* csh = dynamic_cast<FarDetStripListHandle*>(candrec->FindCandHandle("FarDetStripListHandle"));
00109   if( csh ){
00110     fFilter = this->ApplyFilter(csh);
00111   }
00112 
00113   // apply filter
00114   if( fFilterOnOff ){
00115     MSG("FarDetStrip",Msg::kDebug) << "  *** APPLY FILTER *** " << endl;
00116 
00117     if( fFilter ){
00118       MSG("FarDetStrip",Msg::kDebug) << "   *** PASSED FILTER *** " << endl;      
00119       return result.SetPassed(); 
00120     }
00121     else{
00122       MSG("FarDetStrip",Msg::kDebug) << "   *** FAILED FILTER *** " << endl;      
00123       return result.SetFailed();
00124     } 
00125   }
00126 
00127   return result;
00128 }
00129   
00130 JobCResult FarDetStripListModule::Ana(const MomNavigator* mom)
00131 {
00132   MSG("FarDetStrip",Msg::kDebug) << " *** FarDetStripListModule::Ana( ) *** " << endl;
00133 
00134   JobCResult result(JobCResult::kPassed);  
00135   run=-1; snarl=-1; timeframe=-1;
00136 
00137   Double_t trigger=0.0;
00138 
00139   RawRecord *rawrec = dynamic_cast<RawRecord *>(mom->GetFragment("RawRecord"));
00140   if(rawrec){
00141     const RawDaqSnarlHeader* rawheader = dynamic_cast<const RawDaqSnarlHeader*>(rawrec->GetRawHeader());
00142     if(rawheader){
00143       if(run<0) run = rawheader->GetRun(); 
00144       if(snarl<0) snarl = rawheader->GetSnarl();
00145       if(timeframe<0) timeframe = rawheader->GetTimeFrameNum();
00146     }
00147 
00148     TIter rawrecitr = rawrec->GetRawBlockIter();
00149     TObject *tob;
00150     while((tob = rawrecitr())){
00151       if(tob->InheritsFrom("RawSnarlHeaderBlock")){
00152         RawSnarlHeaderBlock* rdb = (RawSnarlHeaderBlock*)(tob);
00153         trigger = 1.0e-9*((VldTimeStamp)(rdb->GetTriggerTime())).GetNanoSec();
00154         date = (((VldTimeStamp)(rdb->GetTriggerTime())).GetSec()-1059696000)/(3600*24);
00155         time = (((VldTimeStamp)(rdb->GetTriggerTime())).GetSec()-1059696000)%(3600*24);
00156       }
00157     }
00158   }  
00159 
00160   CandRecord* candrec = dynamic_cast<CandRecord*>(mom->GetFragment("CandRecord","PrimaryCandidateRecord"));
00161   if(candrec==0){
00162     return result.SetFailed();
00163   }
00164 
00165   VldContext *vldc = (VldContext*)(candrec->GetVldContext());
00166   UgliGeomHandle ugh(*vldc);
00167   PlexHandle ph(*vldc);
00168   CandHeader* candheader = (CandHeader*)(candrec->GetCandHeader());
00169   if(run<0) run = candheader->GetRun();
00170   if(snarl<0) snarl = candheader->GetSnarl();
00171 
00172   FarDetStripListHandle* strplist = dynamic_cast<FarDetStripListHandle*>(candrec->FindCandHandle("FarDetStripListHandle"));
00173   if(strplist==0){
00174     return result.SetFailed();
00175   }
00176 
00177   if(!fFarDetStripFile){      
00178     // TString mystring("results/fardet.strip");  
00179     // mystring.Append("."); mystring+=run; 
00180     // mystring.Append(".root");
00181     TString mystring("fardet.strip.root");
00182     TDirectory* tmpd = gDirectory;
00183     fFarDetStripFile = new TFile(mystring.Data(),"RECREATE");
00184     fFarDetStripTree = new TTree("StripTree","StripTree");
00185     fFarDetStripTree->SetAutoSave(100);
00186 
00187     fFarDetStripTree->Branch("run",&run,"run/I");
00188     fFarDetStripTree->Branch("snarl",&snarl,"snarl/I");
00189     fFarDetStripTree->Branch("timeframe",&timeframe,"timeframe/I");
00190     fFarDetStripTree->Branch("time",&time,"time/I");
00191     fFarDetStripTree->Branch("date",&date,"date/I");
00192     fFarDetStripTree->Branch("plane",&plane,"plane/I");
00193     fFarDetStripTree->Branch("strip",&strip,"strip/I");
00194     fFarDetStripTree->Branch("ndigits",&ndigits,"ndigits/I");
00195     fFarDetStripTree->Branch("view",&view,"view/I");
00196     fFarDetStripTree->Branch("xtalk",&xtalk,"xtalk/I");
00197     
00198     fFarDetStripTree->Branch("crateE",&crateE,"crateE/I");
00199     fFarDetStripTree->Branch("varcE",&varcE,"varcE/I");
00200     fFarDetStripTree->Branch("vmmE",&vmmE,"vmmE/I");
00201     fFarDetStripTree->Branch("vaadcE",&vaadcE,"vaadcE/I");
00202     fFarDetStripTree->Branch("vachipE",&vachipE,"vachipE/I");
00203     fFarDetStripTree->Branch("vachannelE",&vachannelE,"vachannelE/I");
00204     fFarDetStripTree->Branch("CTrawE",&CTrawE,"CTrawE/D");
00205     fFarDetStripTree->Branch("CTcalE",&CTcalE,"CTcalE/D");
00206     fFarDetStripTree->Branch("QrawE",&QrawE,"QrawE/D");
00207     fFarDetStripTree->Branch("QcalE",&QcalE,"QcalE/D");
00208     fFarDetStripTree->Branch("QpeE",&QpeE,"QpeE/D");
00209     fFarDetStripTree->Branch("QsiglinE",&QsiglinE,"QsiglinE/D");
00210     fFarDetStripTree->Branch("QsigcorrE",&QsigcorrE,"QsigcorrE/D");
00211     fFarDetStripTree->Branch("QsigmapE",&QsigmapE,"QsigmapE/D");
00212     fFarDetStripTree->Branch("fibreE",&fibreE,"fibreE/D");
00213     fFarDetStripTree->Branch("greenE",&greenE,"greenE/D");
00214     fFarDetStripTree->Branch("clearE",&clearE,"clearE/D");
00215     fFarDetStripTree->Branch("pigtailE",&pigtailE,"pigtailE/D");
00216    
00217     fFarDetStripTree->Branch("crateW",&crateW,"cratetW/I");
00218     fFarDetStripTree->Branch("varcW",&varcW,"varcW/I");
00219     fFarDetStripTree->Branch("vmmW",&vmmW,"vmmW/I");
00220     fFarDetStripTree->Branch("vaadcW",&vaadcW,"vaadcW/I");
00221     fFarDetStripTree->Branch("vachipW",&vachipW,"vachipW/I");
00222     fFarDetStripTree->Branch("vachannelW",&vachannelW,"vachannelW/I");
00223     fFarDetStripTree->Branch("CTrawW",&CTrawW,"CTrawW/D");
00224     fFarDetStripTree->Branch("CTcalW",&CTcalW,"CTcalW/D");
00225     fFarDetStripTree->Branch("QrawW",&QrawW,"QrawW/D");
00226     fFarDetStripTree->Branch("QcalW",&QcalW,"QcalW/D");
00227     fFarDetStripTree->Branch("QpeW",&QpeW,"QpeW/D");
00228     fFarDetStripTree->Branch("QsiglinW",&QsiglinW,"QsiglinW/D");
00229     fFarDetStripTree->Branch("QsigcorrW",&QsigcorrW,"QsigcorrW/D");
00230     fFarDetStripTree->Branch("QsigmapW",&QsigmapW,"QsigmapW/D");
00231     fFarDetStripTree->Branch("fibreW",&fibreW,"fibreW/D");
00232     fFarDetStripTree->Branch("greenW",&greenW,"greenW/D");
00233     fFarDetStripTree->Branch("clearW",&clearW,"clearW/D");
00234     fFarDetStripTree->Branch("pigtailW",&pigtailW,"pigtailW/D");
00235 
00236     fFarDetStripTree->Branch("halflength",&halflength,"halflength/D");
00237     fFarDetStripTree->Branch("Ltrk",&Ltrk,"Ltrk/D");
00238     
00239     fFarDetStripTree->Branch("Zstrp",&Zstrp,"Zstrp/D");
00240     fFarDetStripTree->Branch("Tstrp",&Tstrp,"Tstrp/D");
00241     fFarDetStripTree->Branch("dSfit",&dSfit,"dSfit/D");
00242     fFarDetStripTree->Branch("Tfit",&Tfit,"Tfit/D");
00243     fFarDetStripTree->Branch("Lfit",&Lfit,"Lfit/D");
00244     fFarDetStripTree->Branch("CTfit",&CTfit,"CTfit/D");
00245     fFarDetStripTree->Branch("U",&U,"U/D");
00246     fFarDetStripTree->Branch("V",&V,"V/D");
00247     fFarDetStripTree->Branch("X",&X,"X/D");
00248     fFarDetStripTree->Branch("Y",&Y,"Y/D");
00249     fFarDetStripTree->Branch("Z",&Z,"Z/D");
00250 
00251     fFarDetStripTree->Branch("pu",&pu,"pu/D");
00252     fFarDetStripTree->Branch("pv",&pv,"pv/D");
00253     fFarDetStripTree->Branch("pz",&pz,"pz/D");
00254     fFarDetStripTree->Branch("erru",&erru,"erru/D");
00255     fFarDetStripTree->Branch("errv",&errv,"errv/D");
00256     fFarDetStripTree->Branch("nplns",&nplns,"nplns/I");
00257 
00258     gDirectory = tmpd;
00259   }
00260 
00261   Int_t pln;
00262 
00263   TIter strpitr(strplist->GetDaughterIterator());
00264   while(FarDetStripHandle* strp = dynamic_cast<FarDetStripHandle*>(strpitr())){
00265     if(strp){
00266       pln=strp->GetPlane();
00267       if(pln>-1 && pln<500){
00268         fStrpList[pln].Add(strp);
00269       }
00270     }
00271   }
00272 
00273   Int_t i;
00274   Int_t uflag=0,vflag=0;
00275   Double_t dt,t,z,q;
00276   Double_t Uwuu=0.0,Uwzz=0.0,Uwzu=0.0,Uwu=0.0,Uwz=0.0,Uw=0.0;
00277   Double_t Vwvv=0.0,Vwzz=0.0,Vwzv=0.0,Vwv=0.0,Vwz=0.0,Vw=0.0;
00278   Int_t uplns=0,vplns=0;
00279   Double_t zmin=-999.9,zmax=-999.0;
00280 
00281   // *** DO STRAIGHT LINE FIT ***
00282   for(pln=0;pln<500;pln++){
00283     uflag=0; vflag=0;
00284 
00285     for(i=0;i<1+fStrpList[pln].GetLast();i++){
00286       FarDetStripHandle* strp = (FarDetStripHandle*)(fStrpList[pln].At(i));
00287 
00288       xtalk=strp->IsXtalk(StripEnd::kWhole);
00289 
00290       q=strp->GetCharge();
00291       t=strp->GetTPos(); z=strp->GetZPos();
00292       if( !xtalk && q>2.0 ){
00293 
00294         if( strp->GetPlaneView()==PlaneView::kU ){
00295           Uwuu+=q*t*t; Uwzu+=q*t*z; Uwzz+=q*z*z;
00296           Uwu+=q*t; Uwz+=q*z; Uw+=q;
00297           uflag=1;
00298         }
00299         if( strp->GetPlaneView()==PlaneView::kV ){
00300           Vwvv+=q*t*t; Vwzv+=q*t*z; Vwzz+=q*z*z;
00301           Vwv+=q*t; Vwz+=q*z; Vw+=q;
00302           vflag=1;
00303         }
00304 
00305         if( zmin<0||z<zmin ){ zmin=z; }  if( zmax<0||z>zmax ){ zmax=z; }
00306       }
00307     }
00308 
00309     if(uflag) uplns++; if(vflag) vplns++;
00310   }
00311 
00312   Double_t mu,mv,cu,cv;
00313   Double_t opos,tpos,upos,vpos;  
00314 
00315   // *** SELECT EVENTS ***
00316   if( uplns>3 && vplns>3 ){
00317 
00318     mu=(Uw*Uwzu-Uwz*Uwu)/(Uw*Uwzz-Uwz*Uwz); cu=(Uwu*Uwzz-Uwz*Uwzu)/(Uw*Uwzz-Uwz*Uwz);
00319     mv=(Vw*Vwzv-Vwz*Vwv)/(Vw*Vwzz-Vwz*Vwz); cv=(Vwv*Vwzz-Vwz*Vwzv)/(Vw*Vwzz-Vwz*Vwz);
00320 
00321     erru=(Uwuu-2.0*mu*Uwzu-2.0*cu*Uwu+mu*mu*Uwzz+2.0*mu*cu*Uwz+Uw*cu*cu)/(Uw);
00322     errv=(Vwvv-2.0*mv*Vwzv-2.0*cv*Vwv+mv*mv*Vwzz+2.0*mv*cv*Vwz+Vw*cv*cv)/(Vw);
00323     nplns=uplns+vplns;
00324 
00325     if( erru<0.01 && errv<0.01 && nplns>10 ){
00326 
00327       if( mu+mv>=0 ){
00328         pu=-mu/sqrt(mu*mu+mv*mv+1.0);
00329         pv=-mv/sqrt(mu*mu+mv*mv+1.0);
00330         pz=-1.0/sqrt(mu*mu+mv*mv+1.0);
00331       }
00332       else{   
00333         pu=mu/sqrt(mu*mu+mv*mv+1.0);
00334         pv=mv/sqrt(mu*mu+mv*mv+1.0);
00335         pz=1.0/sqrt(mu*mu+mv*mv+1.0);
00336       }
00337 
00338       // *** WRITE OUT STRIPS ON TRACK ***
00339       MSG("FarDetStrip",Msg::kDebug) << " COSMIC MUON AT TIME = " << timeframe << endl;
00340 
00341       for(pln=0;pln<500;pln++){
00342         for(i=0;i<1+fStrpList[pln].GetLast();i++){
00343           FarDetStripHandle* strp = (FarDetStripHandle*)(fStrpList[pln].At(i));
00344     
00345           view=-1;
00346           plane=strp->GetPlane(); strip=strp->GetStrip();
00347           ndigits=strp->GetNDaughters();
00348           
00349           CTrawE=0.0; CTcalE=0.0; 
00350           QrawE=0.0; QcalE=0.0; QpeE=0.0; QsiglinE=0.0; QsigcorrE=0.0; QsigmapE=0.0;
00351           CTrawW=0.0; CTcalW=0.0; 
00352           QrawW=0.0; QcalW=0.0; QpeW=0.0; QsiglinW=0.0; QsigcorrW=0.0; QsigmapW=0.0;
00353           CTfit=0.0;
00354 
00355           t=strp->GetTPos(); z=strp->GetZPos();
00356           Zstrp=z; Tstrp=t; 
00357           upos=mu*z+cu; vpos=mv*z+cv;
00358           opos=0.0; tpos=0.0; dt=0.0;
00359           U=upos; V=vpos; 
00360           X=0.7071*(U-V); Y=0.7071*(U+V);
00361           Z=z;
00362 
00363           if( strp->GetPlaneView()==PlaneView::kU ){
00364             view=0; dt=t-upos;
00365             tpos=upos; opos=-vpos;
00366             Tfit=upos; Lfit=vpos;
00367           }
00368           if( strp->GetPlaneView()==PlaneView::kV ){
00369             view=1; dt=t-vpos;
00370             tpos=vpos; opos=upos;
00371             Tfit=vpos; Lfit=upos;
00372           }
00373 
00374           halflength=strp->GetHalfLength();
00375 
00376           greenW=strp->GetGreenFibre(StripEnd::kPositive)-opos; 
00377           pigtailW=strp->GetWlsPigtail(StripEnd::kPositive);
00378           clearW=strp->GetClearFibre(StripEnd::kPositive);
00379           fibreW=greenW+pigtailW+clearW;
00380 
00381           PlexStripEndId stripidW = strp->GetStripEndId(StripEnd::kPositive);
00382           RawChannelId rawchW = ph.GetRawChannelId(stripidW);     
00383           crateW = rawchW.GetCrate();
00384           varcW = rawchW.GetVarcId();
00385           vmmW = rawchW.GetVmm();
00386           vaadcW = rawchW.GetVaAdcSel();
00387           vachipW = rawchW.GetVaChip();
00388           vachannelW = rawchW.GetVaChannel();
00389               
00390           CTrawW=3.0e8*(strp->GetTime(StripEnd::kPositive,CalTimeType::kNone));
00391           CTcalW=3.0e8*(strp->GetTime(StripEnd::kPositive,CalTimeType::kT0));
00392           QrawW=strp->GetCharge(StripEnd::kPositive,CalDigitType::kNone);
00393           QcalW=strp->GetCharge(StripEnd::kPositive,CalDigitType::kPE);
00394           QpeW=strp->GetCharge(StripEnd::kPositive,CalDigitType::kPE);
00395           QsiglinW=strp->GetCharge(StripEnd::kPositive,CalDigitType::kSigLin);
00396           QsigcorrW=strp->GetCharge(StripEnd::kPositive,CalDigitType::kSigCorr);
00397           QsigmapW=0.0;
00398 
00399           greenE=strp->GetGreenFibre(StripEnd::kNegative)+opos;
00400           pigtailE=strp->GetWlsPigtail(StripEnd::kNegative); 
00401           clearE=strp->GetClearFibre(StripEnd::kNegative);
00402           fibreE=greenE+pigtailE+clearE;              
00403 
00404           PlexStripEndId stripidE = strp->GetStripEndId(StripEnd::kNegative);
00405           RawChannelId rawchE = ph.GetRawChannelId(stripidE);
00406           crateE = rawchE.GetCrate();
00407           varcE = rawchE.GetVarcId();
00408           vmmE = rawchE.GetVmm();
00409           vaadcE = rawchE.GetVaAdcSel();
00410           vachipE = rawchE.GetVaChip();
00411           vachannelE = rawchE.GetVaChannel();   
00412 
00413           CTrawE=3.0e8*(strp->GetTime(StripEnd::kNegative,CalTimeType::kNone));
00414           CTcalE=3.0e8*(strp->GetTime(StripEnd::kNegative,CalTimeType::kT0));
00415           QrawE=strp->GetCharge(StripEnd::kNegative,CalDigitType::kNone);
00416           QcalE=strp->GetCharge(StripEnd::kNegative,CalDigitType::kPE);
00417           QpeE=strp->GetCharge(StripEnd::kNegative,CalDigitType::kPE);
00418           QsiglinE=strp->GetCharge(StripEnd::kNegative,CalDigitType::kSigLin);
00419           QsigcorrE=strp->GetCharge(StripEnd::kNegative,CalDigitType::kSigCorr);
00420           QsigmapE=0.0;
00421 
00422           if( mu+mv>=0 ){
00423             dSfit=(zmax-z)*sqrt(mu*mu+mv*mv+1.0);
00424           }
00425           else{
00426             dSfit=(z-zmin)*sqrt(mu*mu+mv*mv+1.0);
00427           } 
00428           Ltrk=dSfit;
00429 
00430           xtalk=strp->IsXtalk(StripEnd::kWhole);
00431 
00432           if( dt>-0.06 && dt<0.06 ){
00433             if(fFarDetStripFile){
00434               TDirectory* tmpdd = gDirectory;
00435               fFarDetStripFile->cd();
00436               fFarDetStripTree->Fill();
00437               gDirectory = tmpdd;
00438             }
00439           }
00440 
00441         }
00442       }
00443 
00444     }
00445   }
00446 
00447   for(pln=0;pln<500;pln++){
00448     fStrpList[pln].Clear();
00449   }
00450 
00451   return result;
00452 }
00453   
00454 const Registry& FarDetStripListModule::DefaultConfig() const
00455 {
00456   MSG("FarDetStrip",Msg::kDebug) << " *** FarDetStripListModule::DefaultConfig( ) *** " << endl;
00457 
00458   static Registry r;
00459   r.SetName("FarDetStripListModule.config.default");
00460   r.UnLockValues();
00461   r.Set("FilterOnOff",fFilterOnOff);
00462   r.Set("FilterMinStrips",fFilterMinStrips);
00463   r.Set("ListIn",fListIn);
00464   r.Set("ListOut",fListOut);
00465   r.Set("RemoveCrossTalk",0);
00466   r.LockValues();
00467 
00468   AlgFactory &af = AlgFactory::GetInstance();
00469 
00470   af.Register("AlgFarDetStripList","default");
00471   AlgHandle ah_list = af.GetAlgHandle("AlgFarDetStripList","default");
00472   AlgConfig &ac_list = ah_list.GetAlgConfig();
00473   ac_list.UnLockValues();
00474   ac_list.Set("RemoveCrossTalk",0);
00475   ac_list.LockValues();
00476 
00477   af.Register("AlgFarDetStrip","default");
00478   AlgHandle ah_strip = af.GetAlgHandle("AlgFarDetStrip","default");
00479   AlgConfig &ac_strip = ah_strip.GetAlgConfig();
00480   ac_strip.UnLockValues();
00481   ac_strip.LockValues();
00482 
00483   return r;
00484 }
00485   
00486 void FarDetStripListModule::Config(const Registry &r)
00487 {
00488   MSG("FarDetStrip",Msg::kDebug) << " *** FarDetStripListModule::Config( ) *** " << endl;
00489 
00490   Int_t tmpint; const char* tmpchar = 0;
00491 
00492   if(r.Get("FilterOnOff",tmpint)) fFilterOnOff = tmpint;
00493   if(r.Get("FilterMinStrips",tmpint)) fFilterMinStrips = tmpint;
00494   if(r.Get("ListIn",tmpchar)) fListIn = tmpchar;
00495   if(r.Get("ListOut",tmpchar)) fListOut = tmpchar;
00496 
00497   AlgFactory &af = AlgFactory::GetInstance();
00498 
00499   AlgHandle ah_list = af.GetAlgHandle("AlgFarDetStripList","default");
00500   AlgConfig &ac_list = ah_list.GetAlgConfig();
00501   ac_list.UnLockValues();
00502   if(r.Get("RemoveCrossTalk",tmpint)) ac_list.Set("RemoveCrossTalk",tmpint);
00503   ac_list.LockValues();
00504 
00505   AlgHandle ah_strip = af.GetAlgHandle("AlgFarDetStrip","default");
00506   AlgConfig &ac_strip = ah_strip.GetAlgConfig();
00507   ac_strip.UnLockValues();
00508   ac_strip.LockValues();
00509 
00510   MSG("FarDetStrip",Msg::kDebug) << "  configuration : " << endl
00511                                 << "     FilterOnOff=" << fFilterOnOff << endl
00512                                 << "     FilterMinStrips=" << fFilterMinStrips << endl
00513                                 << "     ListIn=" << fListIn.Data() << endl
00514                                 << "     ListOut=" << fListOut.Data() << endl;
00515     
00516   return;
00517 }
00518   
00519 void FarDetStripListModule::HandleCommand(JobCommand *command)
00520 {
00521   TString cmd = command->PopCmd();
00522   if(cmd=="Set"){
00523     TString opt = command->PopOpt();
00524 
00525   }
00526 }
00527   
00528 void FarDetStripListModule::EndJob()
00529 {
00530   MSG("FarDetStrip",Msg::kDebug) << " *** FarDetStripListModule::EndJob( ) *** " << endl;
00531 
00532   if(fFarDetStripFile){
00533     MSG("FarDetStrip",Msg::kDebug) << " *** saving STRIP INFO to file *** " << endl;
00534     TDirectory* tmpddd = gDirectory;
00535     fFarDetStripFile->cd();
00536     fFarDetStripTree->Write();
00537     fFarDetStripFile->Close();
00538     gDirectory = tmpddd;
00539     MSG("FarDetStrip",Msg::kDebug) << "    ... data saved to file *** " << endl;
00540   }
00541 }
00542 
00543 Int_t FarDetStripListModule::ApplyFilter(FarDetStripListHandle* /* csh */)
00544 {
00545   Int_t filter=0;
00546 
00547   MSG("FarDetStrip",Msg::kDebug) 
00548     << "  *** STRIP FILTER *** " << endl
00549     << "    Good Strips = ..." << endl;
00550 
00551   if( 0>fFilterMinStrips ) filter=1;
00552 
00553   return filter;
00554 }

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